hidde663

Brainfuck-Interpreter-V2.bat

Aug 7th, 2018 (edited)
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. ::example from cmd.exe: Brainfuck-Interpreter-V2.bat brainfuck-99-bottles.txt
  2. ::99-bottles.txt: https://pastebin.com/41MQudZS
  3. ::Brainfuck-Interpreter-V2.bat: https://pastebin.com/Tr8ZMgya
  4.  
  5. @echo off&setlocal EnableDelayedExpansion&mode 44,83&set mem=70&set maxinput=1022&set skip=0&set loop=0&set cnt=0&set pointer=0&set /a mem=!mem!/10*10&set ypointer=0&set /a c#=!ypointer!+!pointer!&if !mem! gtr 380 (set mem=380&set /a mem1=!mem!-1) else (set /a mem1=!mem!-1)
  6. for /f %%A in ('"prompt $H &echo on &for %%B in (1) do rem"') do set BS=%%A
  7. for /l %%a in (1,1,%mem%) do set "c!cnt!=0"&set /a cnt+=1
  8. :Display
  9. if '!cmdl!'=='' (set parse=0)
  10. if !parse! equ 1 goto Parse
  11. if "%1"=="" (
  12. set /p "cmdl=Input="
  13. set "cmdl=^^!cmdl!"
  14. set skip=0
  15. ) else (
  16. if "!skip!"=="0" (
  17. for /f %%a in ('type "%1"') do set "cmdl=%%a"&set/a skip+=1&goto Parse
  18. ) else (
  19. for /f "skip=%skip%" %%a in ('type "%1"') do set "cmdl=%%a"&set/a skip+=1&goto Parse
  20. )
  21. )
  22. :Parse
  23. if "!cmdl!"=="" exit/b
  24. set parse=1&set nextchar=!cmdl:~0,1!&set cmdl=!cmdl:~1,%maxinput%!
  25. title Brainfuck - Pointer: !c#! Value: !c%c#%!
  26. if '"!cmdl:~1,1!"'=='"!cmdl:~0,%maxinput%!"' set parse=0
  27. if %loop% equ 1 if '"!nextchar!"'=='"]"' set parse=1
  28. if '^!nextchar!'=='^.' goto Convert
  29. if '^!nextchar!'=='^+' if not !c%c#%! equ 255 (set /a c%c#%+=1&goto Display) else set Parse=0&goto Display
  30. if '^!nextchar!'=='^-' if not !c%c#%! equ 0 set /a c%c#%-=1&goto Display
  31. if '^!nextchar!'=='^>' if not !c#! equ !mem1! (set "ppx!pointer!= "&set /a pointer+=1&if !pointer! equ 10 set "ppy!ypointer!= "&set pointer=0&set /a ypointer+=10
  32. set "ppy!ypointer!="&set "ppx!pointer!= "&set /a c#=!ypointer!+!pointer!&goto Display)
  33. if '^!nextchar!'=='^<' if not !c#! equ 0 (set "ppx!pointer!= "&set /a pointer-=1&if !pointer! equ -1 set "ppy!ypointer!= "&set pointer=9&set /a ypointer-=10
  34. set "ppy!ypointer!="&set "ppx!pointer!= "&set /a c#=!ypointer!+!pointer!&goto Display)
  35. if '^!nextchar!'=='^[' set /a loop+=1&set "loopcmd!loop!=!cmdl!"&goto Display
  36. if '^!nextchar!'=='^]' if !c%c#%! equ 0 (set /a loop-=1&goto Display) else set "cmdl=!loopcmd%loop%!"&goto Display
  37. if '^!nextchar!'=='^,' set /p "Value=Value="&if !Value! geq 0 if !Value! leq 255 set c!c#!=!Value!
  38. goto Display
  39. :Convert
  40. set "number=!c%c#%!"&set/a mod=!number!/31&set/a number=!number!-!mod!*31&set/a mod+=46
  41. for /f "skip=%mod% tokens=%number% delims=" %%a in (%~nx0) do (
  42. set "dv=%%a"
  43. if "!dv!"=="LF" echo.&goto Display
  44. if "!dv!"==" " (set/p "=.%BS% "<nul) else (set/p "=!dv!"<nul)
  45. goto Display
  46. )
  47.  LF    
  48. ^!"#$%&'()*+,-./0123456789:;<=>
  49. ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
  50. ^_`abcdefghijklmnopqrstuvwxyz{^|
  51. }~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›
  52. œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º
  53. »¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙ
  54. ÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷ø
  55. ùúûüýþÿ
Add Comment
Please, Sign In to add comment