Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Echo off & CD /d "%~dp0"
- CLS
- ====================:# OS Requirement tests
- :# Verify NTFS drive ** ADS Used to store Settings applied in demo function ColorMod
- (Echo(verify.NTFS >"%~f0:Status") || (
- Echo(This file must be located on an NTFS drive as it utilises Alternate Data Streams.
- Pause
- Exit /B 1
- )
- :# Windows Version control. Assigns flag true if system is windows 10 build GTR 10586
- :# https://en.wikipedia.org/wiki/ANSI_escape_code#DOS,_OS/2,_and_Windows
- :# Version 1511 build number = 10.0.10586
- Set "Win10="
- For /f "tokens=3 delims=." %%v in ('Ver')Do if %%v GTR 10586 Set "Win10=True"
- :# If Win10 true ; Test if virtual terminal codes enabled ; enable if false
- :# removes win10 flag definition if version does not support Virtual Terminal sequences
- :# Reg values: https://devblogs.microsoft.com/commandline/understanding-windows-console-host-settings/
- If defined Win10 (
- Reg Query HKCU\Console | %SystemRoot%\System32\findstr.exe /LIC:"VirtualTerminalLevel REG_DWORD 0x1" > nul || (
- Reg Add HKCU\Console /f /v VirtualTerminalLevel /t REG_DWORD /d 1
- ) > Nul && (
- Echo(CMD restart required to complete Virtual terminal sequence Initialization.
- Pause
- EXIT
- ) || Set "Win10="
- )
- :# Buttons Based on: https://www.dostips.com/forum/viewtopic.php?f=3&t=9222
- :# Script Structure:
- :#
- :# Variable and macro Setup
- :# - Functions
- :# - [Script Break - Main Label]
- :# - Embedded Exe for Mouse and Key Inputs
- :# - Main script body
- MD "%TEMP%\Games_By_T3RRY" 2> nul
- If not exist "%TEMP%\Games_By_T3RRY\BG.exe" Certutil -decode "%~f0" "%TEMP%\Games_By_T3RRY\BG.exe" > nul
- Set BG.exe="%TEMP%\Games_By_T3RRY\BG.exe"
- Set "reg.restore=(Call )"
- :# disable QuickEdit if enabled. Restored at :end label if disabled by script
- reg query HKEY_CURRENT_USER\console\ /v Quickedit | findstr.exe /l "0x1" > nul && (
- (Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x0 /f) > nul
- Set "reg.restore=Reg add HKEY_CURRENT_USER\console\ /v QuickEdit /t REG_DWORD /d 0x1 /f"
- )
- For /f "tokens=4 Delims=: " %%C in ('CHCP')Do Set "active.cp=%%C"
- chcp 65001 > nul
- For /f %%e in ('echo prompt $E^|cmd')Do Set \E=%%e
- <nul Set /P "=%\E%[!p"
- If "!!" == "" (Echo DelayedExpansion must not be enabled before macro definitions&Pause & Exit /B 1)
- :# Screen Buffer macro:
- :# Alt: %Buffer:@=Alt%
- :# Main: %Buffer:@=Main%
- Set "Buffer=<nul set /p "=!@!""
- Set "Alt=%\E%[?1049h%\E%[?25l"
- Set "Main=%\E%[?25h%\E%[?1049l%\E%[?25l"
- :# button sound fx. disable by undefining buttonsfx below ; prior to definition of OnCLick macro
- Set "buttonsfx=On"
- %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav"
- Set "OnClick=(Call )"
- Set "OnType=(Call )"
- If defined buttonsfx (
- For /f "Delims=" %%G in ('Dir /b /s "%WINDIR%\SystemApps\*KbdKeyTap.wav"')Do If exist "%%~G" Set "OnClick=(Start /b "" %BG.exe% Play "%%~G")"
- Set "OnType=(start /b "" %BG.exe% Play "%WINDIR%\Media\Windows Feed Discovered.wav")"
- )
- :# return button click coords in c{pos} variable n Y;X format
- Set "GetClick=Set "Clicked="& Set "ValidClick="& for /f "tokens=1,2" %%X in ('%BG.exe% mouse')Do (Set /A "c{pos}=%%X+1"&Set "c{pos}=%%Y;!c{Pos}!")"
- :# test substituted button # if click is within btn[#][coords] defines variables: Clicked [value eq string] ; ValidClick [value eq button number / undefined]; btn{State}[#] [value eq true/false]
- Set "If.Button=For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[#][Coords]:[%%Y;%%X]=!" == "!btn[#][Coords]!" Set "Clicked=!btn[#][string]!"& Set "ValidClick=#"& (If defined btn[#]{t} Call :Toggle #)& "
- :# tests all buttons in same way as if.clicked ; exclude a button via substring modification substituting 'exc' for 'button#'
- Set "qClicked=(For /l %%i in (1 1 !btns[i]!)Do If not "%%i"=="Exc" For /f "Tokens=1,2 Delims=;" %%X in ("!c{pos}!")Do If not "!btn[%%i][Coords]:[%%Y;%%X]=!" == "!btn[%%i][Coords]!" Set "Clicked=!btn[%%i][string]!"& Set "ValidClick=%%i"& %OnClick% & (If defined btn[%%i]{t} Call :Toggle %%i))& "
- :# Id if button is an input bar. Requires additional Args. Optional -f switch forces input
- :# Usage: %qInput% <Prompt> [-f]
- Set qInput=Set "Input="^& Echo({!Clicked!}^|findstr /RC:"\<[{][ ]*[}]\>" ^> nul ^&^& Call :InputBar !ValidClick!
- :# display all buttons
- Set "Show.All.Btns=For /l %%i In (1 1 !btns[i]!)Do <nul Set /P "=!btn[%%i]!""
- :# display specified buttons
- :# Example; Show buttons 1 3 and 5: %Show.These.Btns% 1 3 5
- Set "Show.These.Btns=Set "Params="&For %%n in (1 2)Do if %%n==2 (For %%i in (!Params!)Do <nul Set /P "=!btn[%%i]!")Else Set Params="
- :# Undefine all buttons. Use substring modification to exclude a specific button or states from being undefined.
- :# IE Preserve button 1: %clrButtons:$EXC=btn[1]%
- Set "clrButtons=(For /f "tokens=1 Delims==" %%G In ('Set btn')Do Echo("%%G"|findstr /Lic:"$EXC" || Set "%%G=") 2> nul & Cls"
- :# displays all selected button or input values
- Set "dValues=For /l %%i in (1 1 !btns[i]!)Do if defined btn{State}[%%i] (set "value=%\E%[0;7m!btn{State}[%%i]:true=%\E%[0;32mtrue!"& Echo(%\E%[33mButton[%%i]%\E%[36m=!value:false=%\E%[0;90mfalse!%\E%[0m)"
- :# menu macro for easily creating multiple buttons simultaneously
- Set "CHash=Col"
- set "bMenu=Set "m{\c}="& For %%n in (1 2)Do if %%n==2 ((If "!CHash!"=="Col" (Set "m{\c}="&Call:createmenu !Params! 2> nul )Else (Set /A "m{\c}=Col"&Call :Createmenu ^!Params^! 2> nul ))& Set "m{\c}="&Set "m{x}=2")Else Set Params="
- ==========
- Goto :Main
- ==========
- :# FUNCTIONS
- ====
- :end
- cls
- (%Reg.Restore%) > nul
- (Title )
- <nul set /p "=%\E%[?25h"
- CHCP %active.cp% > nul
- Endlocal
- Goto :Eof
- =================
- :Toggle <button#>
- If "!btn{State}[%~1]!"=="true" (
- <nul set /P "=!btn[%~1]!"
- Set "btn{State}[%~1]=false"
- )Else (
- If not "%~2" == "0" (
- <nul set /P "=!btn[%~1]:48=7;48!"
- Set "btn{State}[%~1]=true"
- )Else (
- <nul set /P "=!btn[%~1]!"
- )
- )
- Exit /b 0
- :createGrid <Character> <Min> <Max> <FGcol> <BGcol> <BTNcol>
- Set "Char=%~1"
- For /L %%Y in (%~2 3 %~3)Do For /L %%X in (%~2 3 %~3)Do Call:CreateButton "!Char:~0,1!" %%Y %%X "%~4" "%~5" "%~6" -t
- Goto :Eof
- ==========================================================
- :createbutton <string> <y> <x> <FGcol> <BGcol> <BTNcol> -t
- :# Arg Structure: 1,2,3 = Mandatory ; 4,5,6 = Optional ; -t = Optional switch. Must be Last arg if present.
- :# Button Border ; Recommended font: Lucida Console
- :# Codepage: 65001
- :# alt 201 alt 205 alt 187 ╔═╗
- :# alt 186 space alt 186 ║ ║
- :# alt 200 alt 205 alt 188 ╚═╝
- Set "l[Y]=!btn[Y]!"
- If not "%~2"=="!btn[Y]!" Set /A "btn[Y]=%~2+3"
- Set /A "btn[X]=%~3"
- If "%~3" == "" Exit /b 1
- Set /a "btns[i]+=1+0"
- Set "btn[%btns[i]%][p]=%~2;%btn[X]%"
- Set "btn[%btns[i]%][string]=%~1"
- If /I "%~4" == "-t" (set "btn[BG]=%\E%[48;2;230;230;200m")Else (If "%~4" == "" (set "btn[BG]=%\E%[48;2;230;230;200m")Else set "btn[BG]=%\E%[38;2;%~4m")
- If /I "%~5" == "-t" (set "btn[FG]=%\E%[38;2;;;m")Else (If "%~5" == "" (set "btn[FG]=%\E%[38;2;;;m")Else set "btn[FG]=%\E%[48;2;%~5m")
- If /I "%~6" == "-t" (set "btn[Col]=%\E%[90m")Else (If "%~6" == "" (set "btn[Col]=%\E%[90m")Else set "btn[Col]=%\E%[%~6m")
- :# defines variable identifying button as toggle button; used by %If.Button% and %qClicked% macros
- Echo("%*"|findstr /lic:"-t" > nul && Set "btn[%btns[i]%]{t}=true" || Set "btn[%btns[i]%]{t}="
- :# Constrain button creation to console dimensions
- For /f "Tokens=1,2 Delims=: " %%G in ('Mode^|findstr /lic:"Columns" /lic:"Lines"')Do (
- Set /A "%%G=%%H"
- If /I "%%G"=="Columns" (
- Set /A "%%G[max]=%%H+%btn[X]%+2"
- )Else Set /A "%%G[max]=%%H"
- )
- Set "len="& set "s=#%~1" & ( for %%P in (8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do ( if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))) & set /a "btn[%btns[i]%][Len]=len" 2>nul
- If !len! GTR !Columns[Max]! (
- Echo(Button length exceeds display width. Button width must be LSS than console Columns
- Pause
- Exit
- )
- If %~2 GEQ !Lines[Max]! (
- Echo(Button height exceeds display height. Button height must be LSS than console Lines
- Pause
- Exit
- )
- :# define button click coords and button Upper / lower border display values
- :# - border is not defined as clickable.
- Set /A "btn{Xmin}=%btn[X]%+1", "btn{Xmax}=%btn[X]%+len", "l[X]=btn{Xmax}+2"
- Set "btn[%btns[i]%][Len]=" & Set "btn[%btns[i]%][S]=" & Set "btn[%btns[i]%][coords]="
- For /l %%i in (!btn{Xmin}! 1 !btn{Xmax}!)Do (
- Set /A "btn[%btns[i]%][Len]=%%i-3", "Xoffset=%%i-1"
- Set "btn[%btns[i]%][coords]=!btn[%btns[i]%][coords]![%2;!Xoffset!]"
- Set "btn[%btns[i]%][Bar]=!btn[%btns[i]%][Bar]!═"
- Set "btn[%btns[i]%][S]=!btn[%btns[i]%][S]! "
- )
- :# define toggle state variable
- If defined btn[%btns[i]%]{t} Set "btn{State}[%btns[i]%]=false"
- :# Button Graphic. Toggle is effected by substituting Background color VT code 48 with 7;48 to invert button text color.
- Set "btn[%btns[i]%]=%\E%[%2;%btn[X]%H%Btn[col]%%\E%7║%\E%8%\E%[1A╔!btn[%btns[i]%][Bar]!╗%\E%8%\E%[1B╚!btn[%btns[i]%][Bar]!╝%\E%8%\E%[1C%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[2E%\E%7"
- Set "btn[%btns[i]%][t]=%\E%[0m!btn[FG]!!btn[BG]!!btn[%btns[i]%][String]!%\E%[0m%btn[col]%║%\E%[0m%\E%[K"
- Exit /b 0
- ==========================================
- :createMenu <"list" "of" "button strings">
- :# Associated Macro: %bMenu%
- :# - Uses default values for button color schemes m{fg} m{bg} and m{olc}
- :# - Define the value of those variables prior to calling :createMenu
- :# to the desired color scheme if you wish to override default values.
- :# - Defaults to Row 3 [button base] unless m{yo} defined with value to overide default
- :# - Defaults to Column 1 if m{x} is not defined with a column value.
- :# - m{\c} overides m{x} to value of the new column. %bMenu% macro resets m{x} to 2 as default x pos after use.
- :# - Button count is reset unless m{\c} is defined using substring modification of
- :# - %bMenu% macro: Ie: %bMenu:Col=15% list of options
- :# - Int X pos value for new column
- :# ! Note: Columns are not automatically padded for options of different lengths.
- :# - Use white space in options list to pad options for buttons of equal size.
- :# IE: %bMenu% " short button " "A Very Much Longer Button"
- If not defined m{\c} (
- cls
- Set "btns[i]="
- Set "display.menu=Call Echo("
- Set "b{i}=0"
- )
- If not defined m{yo} (Set "m{y}=3")Else Set /A "m{y}=m{yo}"
- If not defined m{fg} (Set "m{fg}=;160;200")
- If not defined m{bg} (Set "m{bg}=150;;150")
- If not defined m{olc} (Set "m{olc}=33")
- If defined m{\c} (Set "m{x}=!m{\c}!")
- If not defined m{x} (Set "m{x}=2")
- For %%v in (%*)Do (
- Call :CreateButton "%%~v" !m{y}! !m{x}! "!m{fg}!" "!m{bg}!" !m{olc}! -t 2> nul
- Set "display.menu=!display.menu!%%button[!b{i}!]%%"
- Set /a "m{y}+=3", "b{i}+=1"
- )
- %display.menu%
- Exit /b 0
- =================================
- :InputBar <button#> <Prompt> [-f]
- :# Force Input via switch -f
- :# Constrains display of input to the dimensions of the inout bar. Longer input may still be entered; input display
- :# is limited to the last n characters, where 'n' is the length of the input bar
- set "input="
- Set /A "CurrIn=0", "MaxIn=!btn[%1][Len]!"
- <nul Set /P "=%\E%[!btn[%1][p]!H%\E%[1C%\E%7"
- For /f "delims=" %%v in ('Set /A "MaxIn+1"')Do <nul Set /P "=%\E%[%%vX%\E%8%\E%[?25h%\E%[?12h"
- %BG.exe% cursor 100
- :entryloop
- Title %~2
- %BG.exe% kbd
- Set "key=!k[%Errorlevel%]!"
- If not "!Key!" == "" (
- If not "!Key!"=="Enter" (
- If "!Key!"=="Backspace" (
- If not !CurrIn!==0 (
- %OnType%
- Set "Input=!Input:~0,-1!"
- Set /A "CurrIn-=1"
- <nul set /p "=%\E%[1D %\E%[1D"
- )Else Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav"
- )Else (
- If not "!Key!"=="?" (
- Echo("!Key!"|findstr.exe /lic:"home" /lic:"end" /lic:"pageup" /lic:"pagedown" /lic:"space" /lic:"tab" /lic:"left" /lic:"right" /lic:"up" /lic:"down" /lic:"delete" /lic:"escape" > nul && (
- If /I "!Key!"=="escape" (Start /b "" %BG.exe% play "%WINDIR%\Media\Windows critical stop.wav")
- If /I "!Key!"=="delete" (
- Start /b "" %BG.exe% play "%WINDIR%\Media\recycle.wav"
- Goto :InputBar
- )
- If /I "!Key!"=="Space" (
- Set "Input=!Input! "
- Set /A "CurrIn+=1"
- )
- ) || (
- Set "Input=!Input!!Key!"
- Set /A "CurrIn+=1"
- )
- )Else (%!! help output. =%
- Set "Input=!Input!?"
- Set /A "CurrIn+=1"
- )
- %OnType%
- )
- If not "!input!"=="" <nul set /p "=%\E%8!Input:~-%MaxIn%!"
- Goto :entryloop
- )
- )
- :# Key is Enter. Test -f force input switch; force input if true
- If /I "%~3" == "-f" If "!input!" == "" (
- Start /b "" %BG.exe% play "%WINDIR%\Media\Windows Error.wav"
- Goto :InputBar
- )
- <nul Set /P "=%\E%[?25l%\E%8%\E%[K!btn[%1][t]:255;255;255=180;180;250!"
- %BG.exe% play "%WINDIR%\Media\Windows Navigation Start.wav"
- <nul Set /P "=%\E%8!btn[%1][t]!%\E%[?25l%\E%[?12l"
- Set "btn{State}[%1]="
- If not "!Input!"=="" Set "btn{State}[%1]=!Input!"
- :# 255 char title length limit
- If "!Input:~0,237!"=="" (%= Double Quote string at output to prevent code insertion =%
- Title You Entered: "!Input!"
- )Else If not "!Input!"=="" (
- Title You Entered: "!Input:~0,239!"
- )Else Title ^^! No input entered.
- Exit /B 0
- ======================================
- :InputCon <!Clicked!> <Prompt> [Regex] [Integer-Minimum{GTR}] [Integer-Maximum{GEQ}]
- %clrButtons:& Cls=%
- %Buffer:@=Alt%
- Set "Tmp=%~2"
- Set "TmpB=!Tmp:*:=!"
- Set "Tmp=!Tmp:%TmpB%=!"
- Set "Tmp=!Tmp::=!"
- Set "Tmp.Prompt=%~1"
- Set "Tmp.Prompt=!Tmp.Prompt:%~2=%Tmp%!"
- Echo( !Tmp.Prompt!
- Call :createButton " " 4 2 "0;0;0" "255;255;255" "36" -t
- %Show.all.Btns%
- Call :InputBar 1 "!Tmp.Prompt!" -f
- If not "%~3"=="" (
- Echo(!Input!|findstr /RX "[%~3]*" > nul || Goto :InputCon
- )
- If not "%~4"=="" (
- Set "MinV=%~4"
- If !Input! LEQ !MinV! Goto :InputCon
- )
- If not "%~5"=="" (
- Set "MaxV=%~5"
- If !Input! GEQ !MaxV! Goto :InputCon
- )
- Call :createButton "Reject" 7 3 "155;;" "255;255;200" "38;2;155;;m%\E%[48;2;;;60"
- Call :createButton "Confirm: !Input!" 7 12 "0;155;0" "255;255;200" "38;2;;180;m%\E%[48;2;;;60"
- %Show.all.Btns%
- :Confirm
- %GetClick%
- %qClicked:Exc=1% If defined ValidClick (
- If "!Clicked!"=="Reject" Goto :InputCon
- If "!Clicked:~0,7!"=="Confirm" (
- Set "!Tmp!=!Input!"
- (For /f "Delims=" %%G in ('Set !Tmp!')Do Echo(Set "%%G") >"%~f0:!Tmp!.dat"
- %Buffer:@=Main%
- Goto :Eof
- )
- )Else Goto :Confirm
- :YesNo <Prompt1> <Prompt2>
- %Buffer:@=Alt%
- %clrButtons:& Cls=%
- Call :createButton "%~1" 2 2 "155;;" "255;255;200" "38;2;155;;m%\E%[48;2;;;60"
- Call :createButton "%~2" 2 "!l[X]!+1" "0;155;0" "255;255;200" "38;2;;180;m%\E%[48;2;;;60"
- %Show.all.Btns%
- :YesNoWait
- %GetClick%
- %qClicked% If defined ValidClick (
- %Buffer:@=Main%
- If "!Clicked!"=="%~1" Exit /B 1
- If "!Clicked!"=="%~2" Exit /B 2
- )Else Goto :YesNoWait
- =========
- :ColorMod <Prefix.Extension> [-l]
- :# Prefix var doubles as the name of the Alternate data stream color variables as saved to / loaded from
- %Buffer:@=Alt%
- If Not "%~1" == "" Set "Type=%~1"
- :# load any existing saved values.
- (For /F "UsebackQ Delims=" %%G in ("%~f0:%Type%")Do %%G) 2> nul
- If /I "%~2"=="-l" Goto :Eof
- If "!%Type%_FG_Red!"=="" If "!%Type%_BG_Red!"=="" (
- For %%Z in ("FG" "BG")Do For /F "Tokens=1,2,3 Delims=;" %%1 in ("!%Type%.%%~Z.Color!")Do (
- Set "%Type%_%%~Z_Red=%%1"
- Set "%Type%_%%~Z_Green=%%2"
- Set "%Type%_%%~Z_Blue=%%3"
- )
- )
- If "!%Type%_Zone!"=="" Set "%Type%_Zone=FG"
- If "!%Type%_Spectrum!"=="" Set "%Type%_Spectrum=%Type%_!%Type%_Zone!_Red"
- %clrButtons:& CLS=%
- %= 1 =% Call :CreateButton "FG" 2 2 ";;" "255;255;255" -t
- %= 2 =% Call :CreateButton "BG" 2 !l[X]! ";;" "255;255;255" -t
- %= 3 =% Call :CreateButton "Red" 2 !l[X]! ";;" "255;255;255" -t
- %= 4 =% Call :CreateButton "Green" 2 !l[X]! ";;" "255;255;255" -t
- %= 5 =% Call :CreateButton "Blue" 2 !l[X]! ";;" "255;255;255" -t
- %= 6 =% Call :CreateButton "Accept" 5 2
- %= 7 =% Call :CreateButton " ▲ " 5 !l[X]!
- %= 8 =% Call :CreateButton " ▼ " 5 !l[X]!
- %Show.All.Btns%
- If "!%Type%_Zone!" == "FG" (Call :Toggle 1)Else Call :Toggle 2
- If not "!%Type%_Spectrum:Red=!" == "!%Type%_Spectrum!" Call :Toggle 3
- If not "!%Type%_Spectrum:Green=!" == "!%Type%_Spectrum!" Call :Toggle 4
- If not "!%Type%_Spectrum:Blue=!" == "!%Type%_Spectrum!" Call :Toggle 5
- :ColorModLoop
- Set "%Type%.FG.Color=!%Type%_FG_Red!;!%Type%_FG_Green!;!%Type%_FG_Blue!"
- Set "%Type%.BG.Color=!%Type%_BG_Red!;!%Type%_BG_Green!;!%Type%_BG_Blue!"
- <nul Set /P "=%\E%[10d%\E%[G%\E%[38;2;255;255;255m%\E%[48;2;!%Type%.BG.Color!m%Type% FG: %\E%[38;2;!%Type%.FG.Color!m!%Type%_FG_Red!;!%Type%_FG_Green!;!%Type%_FG_Blue! %\E%[38;2;255;255;255mBG:%\E%[38;2;!%Type%.FG.Color!m!%Type%_BG_Red!;!%Type%_BG_Green!;!%Type%_BG_Blue!%\E%[0m%\E%[K"
- %GetClick%
- %qClicked% If not defined ValidClick Goto :ColorModLoop
- If "!Clicked!"=="Accept" (
- %Buffer:@=Main%
- Goto :Eof
- )
- If "!ValidClick!"=="1" (
- Set "%Type%_Zone=FG"
- Call :Toggle 2 0
- Set "%Type%_Spectrum=!%Type%_Spectrum:BG=FG!"
- )
- If "!ValidClick!"=="2" (
- Set "%Type%_Zone=BG"
- Call :Toggle 1 0
- Set "%Type%_Spectrum=!%Type%_Spectrum:FG=BG!"
- )
- If "!Clicked!"=="Red" (
- Set "%Type%_Spectrum=%Type%_!%Type%_Zone!_Red"
- Call :Toggle 4 0
- Call :Toggle 5 0
- )
- If "!Clicked!"=="Green" (
- Set "%Type%_Spectrum=%Type%_!%Type%_Zone!_Green"
- Call :Toggle 3 0
- Call :Toggle 5 0
- )
- If "!Clicked!"=="Blue" (
- Set "%Type%_Spectrum=%Type%_!%Type%_Zone!_Blue"
- Call :Toggle 3 0
- Call :Toggle 4 0
- )
- For /f "Delims=" %%G in ("!%Type%_Spectrum!") Do (
- If "!ValidClick!"=="7" (
- If not !%%G! EQU 250 Set /A "%%G+=10"
- )
- If "!ValidClick!"=="8" (
- If not !%%G! EQU 0 Set /A "%%G-=10"
- )
- )
- :# Update stored Color values
- (For /f "Delims=" %%G in ('Set %Type%')Do Echo(Set "%%G") >"%~f0:%Type%"
- Goto :ColorModLoop
- ========
- :DefKeys
- Set "k[8]=Backspace"
- (Set LF=^
- %= empty lines above are required. =%)
- rem For /l %%i in (9)Do For /F eol^=^%LF%%LF%^ delims^= %%A in ('forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(0x09"') do Set "k[9]=%%A"
- Set "k[13]=Enter"& Set "k[27]=Escape"& Set "k[32]=Space"& Set "k[33]=^!"& Set ^"k[34]=""
- set "i=35"
- For %%k in (
- "#" "$" "%%" "&" "'" "(" ")" "ASsub" "+" "," "-" "." "/"^
- "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"^
- ":" ";" "<" "=" ">" "QMsub" "@"^
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z^
- "[" "\" "]" "^^" "_" "`"^
- a b c d e f g h i j k l m n o p q r s t u v w x y z^
- )Do (
- Set "k[!i!]=%%~k"
- Set /A "i+=1"
- )
- Set "k[42]=*"& Set "k[63]=?"& Set "k[123]={"& Set "k[124]=|"& Set "k[125]=}"
- Set "k[126]=~"& Set "k[339]=Delete"& Set "k[327]=Home"& Set "k[328]=Up"
- Set "k[329]=PageUp"& Set "k[331]=Left"& Set "k[333]=Right"& Set "k[335]=End"
- Set "k[336]=Down"& Set "k[337]=PageDown"
- Exit /b 0
- :# REQUIRED UTILITY
- ===============
- /* BG.exe V 3.9
- https://github.com/carlos-montiers/consolesoft-mirror/blob/master/bg/README.md
- Copyright (C) 2010-2018 Carlos Montiers Aguilera
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- Carlos Montiers Aguilera
- cmontiers@gmail.com
- */
- -----BEGIN CERTIFICATE-----
- TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
- dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEEAG3tp1sAAAAA
- AAAAAOAADwMLAQIZABoAAAAIAAAAAgAAcCcAAAAQAAAAAMD/AABAAAAQAAAAAgAA
- BAAAAAEAAAAEAAAAAAAAAABgAAAABAAAu00AAAMAAAAAACAAABAAAAAAEAAAEAAA
- AAAAABAAAAAAAAAAAAAAAABQAABMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAD4UAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA
- IBkAAAAQAAAAGgAAAAQAAAAAAAAAAAAAAAAAACAAUGAucmRhdGEAALgBAAAAMAAA
- AAIAAAAeAAAAAAAAAAAAAAAAAABAAGBALmJzcwAAAACMAAAAAEAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAgABgwC5pZGF0YQAATAQAAABQAAAABgAAACAAAAAAAAAAAAAA
- AAAAAEAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- 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
- JQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkACAAJQBkAAoAAABDAE8ATgBJAE4A
- JAAAACUAZAAgACUAZAAKAAAAAABQAFIASQBOAFQAAABGAEMAUABSAEkATgBUAAAA
- QwBPAEwATwBSAAAATABPAEMAQQBUAEUAAABMAEEAUwBUAEsAQgBEAAAASwBCAEQA
- AABNAE8AVQBTAEUAAABEAEEAVABFAFQASQBNAEUAAABTAEwARQBFAFAAAABDAFUA
- UgBTAE8AUgAAAEYATwBOAFQAAABQAEwAQQBZAAAAAACkMEAAACZAALAwQACAG0AA
- wDBAANAaQADMMEAAwBlAANowQABgGUAA6jBAABAZQADyMEAAIBhAAP4wQACwF0AA
- EDFAAGAXQAAcMUAAYBZAACoxQAAwFEAANDFAAIATQABHQ0M6ICh0ZG02NC0xKSA1
- LjEuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkUAAAAAAAAAAAAADcUwAA
- +FAAALBQAAAAAAAAAAAAACBUAABEUQAA6FAAAAAAAAAAAAAAMFQAAHxRAADwUAAA
- AAAAAAAAAABAVAAAhFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjFEAAJpRAACoUQAA
- tlEAAMRRAADcUQAA7lEAAAxSAAAcUgAALlIAAD5SAABSUgAAalIAAIZSAACYUgAA
- qlIAAMRSAADMUgAAAAAAAOJSAAD0UgAA/lIAAAhTAAAQUwAAGlMAACZTAAAyUwAA
- PFMAAEhTAABUUwAAXlMAAGhTAAAAAAAAclMAAAAAAACEUwAAAAAAAIxRAACaUQAA
- qFEAALZRAADEUQAA3FEAAO5RAAAMUgAAHFIAAC5SAAA+UgAAUlIAAGpSAACGUgAA
- mFIAAKpSAADEUgAAzFIAAAAAAADiUgAA9FIAAP5SAAAIUwAAEFMAABpTAAAmUwAA
- MlMAADxTAABIUwAAVFMAAF5TAABoUwAAAAAAAHJTAAAAAAAAhFMAAAAAAABTAENs
- b3NlSGFuZGxlAJIAQ3JlYXRlRmlsZVcAGgFFeGl0UHJvY2VzcwBkAUZyZWVMaWJy
- YXJ5AKQBR2V0Q29uc29sZUN1cnNvckluZm8AALABR2V0Q29uc29sZU1vZGUAALYB
- R2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8AAAQCR2V0TG9jYWxUaW1lAABFAkdl
- dFByb2NBZGRyZXNzAAAsA0xvYWRMaWJyYXJ5VwAApQNSZWFkQ29uc29sZUlucHV0
- VwDzA1NldENvbnNvbGVDdXJzb3JJbmZvAAD1A1NldENvbnNvbGVDdXJzb3JQb3Np
- dGlvbgAA9wNTZXRDb25zb2xlRm9udAAAAQRTZXRDb25zb2xlTW9kZQAACgRTZXRD
- b25zb2xlVGV4dEF0dHJpYnV0ZQB0BFNsZWVwAOwEV3JpdGVDb25zb2xlT3V0cHV0
- VwB3AF9fd2dldG1haW5hcmdzAAAFAV9maWxlbm8AOwFfZ2V0Y2gAAGEBX2lvYgAA
- xAFfa2JoaXQAALUCX3NldG1vZGUAAI0DX3djc2ljbXAAAEsEZnB1dHdjAAB1BGlz
- d2N0eXBlAACqBHNldGxvY2FsZQD0BHdjc2NweQAABwV3Y3N0b2wAAA4Fd3ByaW50
- ZgDIAU9lbVRvQ2hhckJ1ZmZXAAAJAFBsYXlTb3VuZFcAAAAAAFAAAABQAAAAUAAA
- AFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAA
- AFAAAABQAAAAUAAAS0VSTkVMMzIuZGxsAAAAABRQAAAUUAAAFFAAABRQAAAUUAAA
- FFAAABRQAAAUUAAAFFAAABRQAAAUUAAAFFAAABRQAABtc3ZjcnQuZGxsAAAoUAAA
- VVNFUjMyLmRsbAAAPFAAAFdJTk1NLkRMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
- -----END CERTIFICATE-----
- ===================================================================================================
- ===================================================================================================
- :Main script body
- mode 51,31
- Setlocal EnableDelayedExpansion
- Call :DefKeys
- :# USAGE EXAMPLES // Your script below
- %BG.exe% Font 9
- <nul set /p "=%\E%[?25l"
- :Default
- If "%~1" == "Reset" (
- For %%E in ("Live" "Dead")Do For /f "Tokens=1 Delims==" %%G in (' Set %%~E 2^>nul ')Do Set "%%G="
- )
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :: Game Rules ::
- :: Modifying the rules here after the first run wont take effect until ::
- :: the Defaults are restored in game. Live.Cell.Survive may contain a list ::
- :: of neighbour values that survive. IE - Set "Live.Cell.Survive=2 4 5" ::
- Set "Live.Cell.Survive=2" ::
- Set "Live.Cell.Reproduce=3" ::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- Set /A "Density=4", "minX=5", "maxX=45", "minY=5", "maxY=20"
- Set "Live.Cell.Char=╬"
- Set "Live.Cell.Char[i]=20"
- If "!Live.Cell.FG.Color!"=="" Set "Live.Cell.FG.Color=250;70;0"
- If "!Live.Cell.BG.Color!"=="" Set "Live.Cell.BG.Color=0;80;160"
- If "!Dead.Cell.FG.Color!"=="" Set "Dead.Cell.FG.Color=20;30;40"
- If "!Dead.Cell.BG.Color!"=="" Set "Dead.Cell.BG.Color=0;0;0"
- :# Restore defaults by Alternate data streams with saved settings
- If "%~1" == "Reset" (
- Powershell -c "remove-item -path '%~nx0' -Stream '*'"
- Goto :Eof
- )
- :# Load existing save values
- For %%V in ("Density" "minX" "maxX" "minY" "maxY" "Wrap")Do (For /F "UsebackQ Delims=" %%G in ("%~f0:%%~V.dat")Do %%G) 2> nul
- Call :ColorMod Live.Cell -l
- Call :ColorMod Dead.Cell -l
- :menu
- %clrButtons%
- %= 1 =% Call :CreateButton "MinX:!MinX!" 2 2 "20;120;190" "80;20;20" "90"
- %= 2 =% Call :CreateButton "MaxX:!MaxX!" 2 !l[X]! "20;120;190" "80;20;20" "90"
- %= 3 =% Call :CreateButton "MinY:!MinY!" 2 !l[X]! "20;120;190" "80;20;20" "90"
- %= 4 =% Call :CreateButton "MaxY:!MaxY!" 2 !l[X]! "20;120;190" "80;20;20" "90"
- %= 5 =% Call :CreateButton "Live.Cell.Color" 5 2 "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "90"
- %= 6 =% Call :CreateButton "Dead.Cell.Color" 5 !l[X]! "!Dead.Cell.FG.Color!" "!Dead.Cell.BG.Color!" "90"
- %= 7 =% Call :CreateButton "ScreenWrap" 8 2
- %= 8 =% Call :CreateButton "Density:!Density!" 8 !l[X]! "20;120;190" "80;20;20" "90"
- %= 9 =% Call :CreateButton "Start" 8 !l[X]! ";200;" "80;20;20" "32"
- %= 10 =% Call :CreateButton "Exit" 8 !l[X]! "250;150;" "80;20;20" "31"
- %= 11 =% Call :CreateButton " Restore default settings. " 11 2 "80;20;20" "250;150;" "0m%\E%[38;2;200;150;0m%\E%[48;2;150;;150"
- %= 12 =% Call :CreateButton "☺" 14 2 "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 13 =% Call :CreateButton "☻" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 14 =% Call :CreateButton "♥" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 15 =% Call :CreateButton "♦" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 16 =% Call :CreateButton "♣" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 17 =% Call :CreateButton "♠" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 18 =% Call :CreateButton "♫" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 19 =% Call :CreateButton "☼" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 20 =% Call :CreateButton "╬" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- %= 21 =% Call :CreateButton "§" 14 !l[X]! "!Live.Cell.FG.Color!" "!Live.Cell.BG.Color!" "0m%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!"
- :Menuwait
- Title Game of Life
- %Show.All.Btns%
- If "!Wrap!" == "true" (
- <nul set /P "=!btn[7]:48=7;48!"
- )Else <nul set /P "=!btn[7]!"
- <nul Set /p "=!btn[%Live.Cell.Char[i]%]:48=7;48!"
- %GetClick%
- %qClicked% If not defined ValidClick Goto :Menuwait
- If "!Clicked!" == "Exit" Exit /B
- If "!Clicked!" == "Start" Goto :Play
- If !ValidClick! LSS 5 (
- If not "!Clicked:MaxY=!" == "!Clicked!" (
- Call :InputCon "Enter an Integer GTR !MinY! LEQ 30 for !Clicked! value." "!Clicked!" 0123456789 !MinY! 31
- )Else If not "!Clicked:MaxX=!" == "!Clicked!" (
- Call :InputCon "Enter an Integer GTR !MinX! LEQ 50 for !Clicked! value." "!Clicked!" 0123456789 !MinX! 51
- )Else If not "!Clicked:MinX=!" == "!Clicked!" (
- Call :InputCon "Enter an Integer GTR 0 LSS !MaxX! for !Clicked! value." "!Clicked!" 0123456789 0 !MaxX!
- )Else If not "!Clicked:MinY=!" == "!Clicked!" (
- Call :InputCon "Enter an Integer GTR 0 LSS !MaxY! for !Clicked! value." "!Clicked!" 0123456789 0 !MaxY!
- )
- Goto :Menu
- )
- If not "!Clicked:Live.Cell=!" == "!Clicked!" (
- Call :ColorMod Live.Cell
- Goto :Menu
- )
- If not "!Clicked:Dead.Cell=!" == "!Clicked!" (
- Call :ColorMod Dead.Cell
- Goto :Menu
- )
- If not "!Clicked:Density=!" == "!Clicked!" (
- Call :InputCon "Enter an Integer between 2 and 8 for !Clicked! value." "!Clicked!" 0123456789 1 8
- Goto :Menu
- )
- If "!Clicked!" == "ScreenWrap" (
- If "!Wrap!" == "true" (
- Set "Wrap=false"
- )Else Set "Wrap=true"
- (For /f "Delims=" %%G in ('Set Wrap')Do Echo(Set "%%G") >"%~f0:Wrap.dat"
- Goto :Menu
- )
- If !ValidClick! EQU 11 (
- Cls
- Call :YesNo Abort Confirm
- If !Errorlevel!==2 (
- Call :Default Reset
- Endlocal
- Goto :main
- )
- Goto :menu
- )
- If !ValidClick! GEQ 12 (
- <nul Set /p "=!btn[%Live.Cell.Char[i]%]!"
- Set "Live.Cell.Char[i]=!ValidClick!"
- Set "Live.Cell.Char=!Clicked!"
- (For /f "Delims=" %%G in ('Set Live.Cell')Do Echo(Set "%%G") >"%~f0:Live.Cell")
- Goto :MenuWait
- )
- :Play
- %Buffer:@=Alt%
- <nul set /P "=%\E%[?25l"
- Set "live=%\E%[38;2;!Live.Cell.FG.Color!m%\E%[48;2;!Live.Cell.BG.Color!m!Live.Cell.Char!"
- Set "dead=%\E%[38;2;!Dead.Cell.FG.Color!m%\E%[48;2;!Dead.Cell.BG.Color!m▒"
- :# Initial setup
- (
- For /l %%x in (%minX% 1 %maxX%)Do For /L %%y in (%minY% 1 %maxY%)Do (
- %= Screen Wrapping =%
- If "!Wrap!"=="true" (
- If %%x==%minX% (Set /A "Xw=maxX")Else Set /A "Xw=%%x-1"
- If %%x==%maxX% (Set /A "Xe=minX")Else Set /A "Xe=%%x+1"
- If %%y==%minY% (Set /A "nY=maxY")Else Set /A "nY=%%y-1"
- If %%y==%maxY% (Set /A "sY=minY")Else Set /A "sY=%%y+1"
- ) Else (
- Set /A "Xw=%%x-1"
- Set /A "Xe=%%x+1"
- Set /A "nY=%%y-1"
- Set /A "sY=%%y+1"
- )
- %= Build neighbour cells array. Allows cell neighbors to be tested without having to calculate positions during game loop =%
- Set "%%y;%%x[n]=!nY!;%%x"
- Set "%%y;%%x[e]=%%y;!Xe!"
- Set "%%y;%%x[s]=!sY!;%%x"
- Set "%%y;%%x[w]=%%y;!Xw!"
- Set "%%y;%%x[ne]=!nY!;!Xe!"
- Set "%%y;%%x[nw]=!nY!;!Xw!"
- Set "%%y;%%x[se]=!sY!;!Xe!"
- Set "%%y;%%x[sw]=!sY!;!Xw!"
- %!!%
- Set /A IO=!random! %%Density +1
- IF !IO!==2 (
- <nul set /P "=%\E%[32m%\E%[%%y;%%xH%live%%\E%[0m"
- Set "}%%y;%%x=1"
- )Else (
- Set "}%%y;%%x=0"
- <nul set /p "=%\E%[31m%\E%[%%y;%%xH%dead%%\E%[0m"
- )
- )
- <nul set /p "=%\E%[%maxY%d%\E%[E"
- ) > "%~dp0_%~n0_screen.dat"
- :# Game Logic
- Title Game of Life. {Escape}
- %= Infinate loop =% For /l %%. in ()Do (
- %= Output state to con =% Type "%~dp0_%~n0_screen.dat" > con
- %= Iterate State array cells =% For /f "delims=" %%C in ('Set }')Do For /f "tokens=1,2 delims=}=" %%1 in ("%%C")Do (
- %= 0 nieghbour + temp cells =% Set /A "n{}=0,n}%%1=0"
- %= Iterate over neighbours =% For %%G in (n s e w ne nw se sw)Do For /f "delims=" %%v in ("!%%1[%%G]!")Do if "!}%%v!"=="1" (
- %= Increment for each live =% Set /A "n{}+=1"
- %= nieghbour =% )
- %= Implement rules =% For %%i in (!Live.Cell.Survive!)Do if !n{}!==%%i If %%2==1 Set "n}%%1=1"
- If !n{}!==!Live.Cell.Reproduce! Set "n}%%1=1"
- )
- %= Iterate over temp Array =% (For /f "tokens=1,2 delims=n}=" %%1 in ('Set n}')Do (
- %= Update State Array =% Set "}%%1=%%2"
- %= Redirect Display State to file =% If %%2==1 (
- <nul set /p "=%\E%[32m%\E%[%%1H%live%%\E%[0m"
- )else <nul set /p "=%\E%[32m%\E%[%%1H%dead%%\E%[0m"
- )) > "%~dp0_%~n0_screen.dat"
- "%TEMP%\Games_By_T3RRY\BG.exe" lastkbd
- If !Errorlevel!==27 (
- %Buffer:@=Main%
- Endlocal
- cmd /k "%~f0"
- Exit
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement