Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ::example from cmd.exe: Brainfuck-Interpreter-V2.bat brainfuck-99-bottles.txt
- ::99-bottles.txt: https://pastebin.com/41MQudZS
- ::Brainfuck-Interpreter-V2.bat: https://pastebin.com/Tr8ZMgya
- @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)
- for /f %%A in ('"prompt $H &echo on &for %%B in (1) do rem"') do set BS=%%A
- for /l %%a in (1,1,%mem%) do set "c!cnt!=0"&set /a cnt+=1
- :Display
- if '!cmdl!'=='' (set parse=0)
- if !parse! equ 1 goto Parse
- if "%1"=="" (
- set /p "cmdl=Input="
- set "cmdl=^^!cmdl!"
- set skip=0
- ) else (
- if "!skip!"=="0" (
- for /f %%a in ('type "%1"') do set "cmdl=%%a"&set/a skip+=1&goto Parse
- ) else (
- for /f "skip=%skip%" %%a in ('type "%1"') do set "cmdl=%%a"&set/a skip+=1&goto Parse
- )
- )
- :Parse
- if "!cmdl!"=="" exit/b
- set parse=1&set nextchar=!cmdl:~0,1!&set cmdl=!cmdl:~1,%maxinput%!
- title Brainfuck - Pointer: !c#! Value: !c%c#%!
- if '"!cmdl:~1,1!"'=='"!cmdl:~0,%maxinput%!"' set parse=0
- if %loop% equ 1 if '"!nextchar!"'=='"]"' set parse=1
- if '^!nextchar!'=='^.' goto Convert
- if '^!nextchar!'=='^+' if not !c%c#%! equ 255 (set /a c%c#%+=1&goto Display) else set Parse=0&goto Display
- if '^!nextchar!'=='^-' if not !c%c#%! equ 0 set /a c%c#%-=1&goto Display
- 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
- set "ppy!ypointer!="&set "ppx!pointer!= "&set /a c#=!ypointer!+!pointer!&goto Display)
- 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
- set "ppy!ypointer!="&set "ppx!pointer!= "&set /a c#=!ypointer!+!pointer!&goto Display)
- if '^!nextchar!'=='^[' set /a loop+=1&set "loopcmd!loop!=!cmdl!"&goto Display
- if '^!nextchar!'=='^]' if !c%c#%! equ 0 (set /a loop-=1&goto Display) else set "cmdl=!loopcmd%loop%!"&goto Display
- if '^!nextchar!'=='^,' set /p "Value=Value="&if !Value! geq 0 if !Value! leq 255 set c!c#!=!Value!
- goto Display
- :Convert
- set "number=!c%c#%!"&set/a mod=!number!/31&set/a number=!number!-!mod!*31&set/a mod+=46
- for /f "skip=%mod% tokens=%number% delims=" %%a in (%~nx0) do (
- set "dv=%%a"
- if "!dv!"=="LF" echo.&goto Display
- if "!dv!"==" " (set/p "=.%BS% "<nul) else (set/p "=!dv!"<nul)
- goto Display
- )
- LF
- ^!"#$%&'()*+,-./0123456789:;<=>
- ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
- ^_`abcdefghijklmnopqrstuvwxyz{^|
- }~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›
- œžŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º
- »¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙ
- ÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷ø
- ùúûüýþÿ
Add Comment
Please, Sign In to add comment