(* Obfuscated BrainFuck Interpreter in SML © 2003 by Andreas Hartl http://www.runicsoft.com Usage: bf "C:\\somefile.bf"; *) open Array open TextIO fun bf ## =let val & =array(30000,0)val && =fromList (explode ( inputAll (openIn(## )))) val !^ = update val ? = sub val ^^ = ref 0 val =: = ref 0 val |# = ref #"0" in while (length (&&) > ! =:) do (|# := sub (&&, ! =:) ;case ! |# of #">" => ^^ := ! ^^ +1 | #"<" => ^^ := ! ^^ - 1 | #"+" => !^ ( &, ! ^^ , ? ( & , ! ^^ ) + 1 ) | #"-" => !^ ( &, ! ^^ , ? ( & , ! ^^ )-1 ) | #"." => print (Char.toString(chr( ? (&, ! ^^ ))) ) | #"," => !^ (&,! ^^,ord(String.sub(inputN (stdIn ,1),0)) ) | #"[" => if ? (&, ! ^^ )=0 then let val >< = ref 1 in while ! >< <> 0 do( =: := ! =: + 1; if ? (&& , ! =: ) = #"[" then >< := ! >< + 1 else if ? ( &&, ! =: ) = #"]" then >< := ! >< - 1 else >< := ! >< )end else =: := ! =: | #"]" => let val +- = ref ~1 in while ! +- <> 0 do ( =: := ! =: - 1; if ? ( &&, ! =: ) = #"]" then +- := ! +- - 1 else if ? ( &&, ! =: ) = #"[" then ( if ! +- = ~1 then ( =: := ! =: - 1; +- := ! +- + 1 ) else +- := ! +- + 1) else +- := ! +- ) end | n => =: := ! =: ; =: := ! =: + 1 ) end ;