Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ::: RC9 :::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::: Utility3.bat splitout from Errorhandling.bat v8.6.8.94 :::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::: :revchars <string revstrReturned, string str2rev> :::
- ::: :makeline <string line2Fill, string padChars, string strToPadTo> :::
- ::: :padder <string toRtn, int lengthRequired, string padchars> :::
- ::: :getspcs <string spcs2Return, int gap> :::
- ::: :strlen <int sizeOfstr2rtn, string str2measure> WORKING! :::
- ::: :overload <no parms, no args, no returns, cash only please> :::
- ::: :getgap <string gap, string line, string chars, string msg> :::
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- if not defined vers set vers=v8.7.0.10 20231108073214 by -JpE-
- :alt <string 2Return, string calling, string arg1, string arg2, string arg3, string arg4, string arg5, string arg6, string arg7>
- setlocal & set "rtn0=%~1" & set "calling=%~2" & set "arg1=%~3" & set "arg2=%~4" & set "arg3=%~5" & set "arg4=%~6" & set "arg5=%~7" & set "arg6=%~8" & set "arg7=%~9"
- if not defined calling goto altx
- if %testwell% gtr 4 goto altx
- ::: Jump to :::
- if "%calling:~0,1%" neq ":" goto alt0
- ::: altN where N is the number of ^ args being passed.
- if "%calling%" equ ":revchars" call %calling% rtn0 "%arg1%"
- if "%calling%" equ ":makeline" call %calling% rtn0 "%arg1%" "%arg2%"
- if "%calling%" equ ":padder" call %calling% rtn0 %arg1% %arg2%
- if "%calling%" equ ":getspcs" call %calling% rtn0 %arg1%
- if "%calling%" equ ":strlen" call %calling% rtn0 "%arg1%"
- if "%calling%" equ ":overload" call %calling%
- if "%calling%" equ ":overload" set "rtn0= "
- if "%calling%" equ ":middleman" call %calling% "%arg1%" "%arg2%"
- if "%calling%" equ ":middleman" set "rtn0= "
- endlocal & set "%~1=%rtn0%"
- exit /b
- ::: All vars are global from above or below same namespace for all alts,
- ::: But not the functions below the last alt. They are sealed.
- ::: for calls without a calling, or arg1,2,3,4,5
- :altx
- if %testwell% gtr 2 set txt=Hello New World-x!
- if %testwell% gtr 2 echo . & echo alt-x says: & echo %txt%
- if %testwell% gtr 2 echo . & pause & echo .
- if not defined calling set calling=Hello New World-0
- if defined calling goto alt0
- ::: note: unindented testcode vs indented code.
- ::: Then finish the :altx function below.
- ::: AND... end like... below from the "goto" of all alt.
- endlocal & set "%~1=%txt%" & set "%~2=%calling%"
- exit /b %errorlevel%
- ::: with a calling not begun with a colon and no other args.
- :alt0
- if %testwell% gtr 2 echo . & echo calling says %calling% & echo .
- REM if %testwell% gtr 2 pause & echo .
- if %testwell% gtr 2 if not defined arg1 set arg1=Hello New World-1
- if defined arg1 goto alt1
- ::: note: unindented testcode vs indented code.
- ::: Then finish the :alt0 function below.
- ::: AND... end like... below from the "goto" of all alt.
- endlocal & set "%~1=%calling%" & set "%~2=%arg1%"
- exit /b %errorlevel%
- ::: calling w/o colon; with 1 arg
- :alt1
- if %testwell% gtr 2 echo . & echo arg1 is %arg1% & echo .
- REM if %testwell% gtr 2 pause & echo .
- if %testwell% gtr 2 if not defined arg2 set arg2=Hello New World-2!
- if defined arg2 goto alt2
- ::: note: unindented testcode vs indented code.
- ::: Then finish the :alt1 function below.
- ::: AND... end like... below from the "goto" of all alt.
- endlocal & set "%~1=%arg1%" & set "%~2=%arg2%"
- exit /b %errorlevel%
- ::: calling w/o colon; with 2 args
- :alt2 <string calling, string arg1, string arg2>
- if %testwell% gtr 2 echo . & echo arg2 is %arg2% & echo .
- REM if %testwell% gtr 2 pause & echo .
- if %testwell% gtr 2 if not defined arg3 set arg3=Hello New World-3!
- if defined arg3 goto alt3
- ::: note: unindented testcode vs indented code.
- REM if defined arg4 goto alt4
- ::: Then finish the :alt3 function below instead of returning back 1 level.
- ::: AND... end like... below from the "goto" of all alt.
- endlocal & set "%~1=%arg1%" & set "%~2=%arg2%"
- exit /b %errorlevel%
- ::: calling w/o colon; with 3 args
- :alt3
- if %testwell% gtr 3 echo . & echo arg2 is %arg2% & echo .
- if %testwell% gtr 4 if not defined arg4 set "arg4=Hello New World-4!"
- if defined arg4 goto alt4
- call :getgaps spc1 spc2 "%arg1%" "%arg2%" "%arg3%"
- endlocal & set "%~1=%spc1%" & set "%~2=%spc2%"
- exit /b %errorlevel%
- ::: calling w/o colon; with 4 args
- :alt4
- if %testwell% gtr 2 echo . & echo arg4 is %arg4% & echo .
- if %testwell% gtr 2 if not defined arg5 set "arg5=Hello New World-5!"
- if defined arg5 call :alt5
- ::: note: unindented testcode vs indented code.
- REM if defined arg5 goto alt5
- ::: Then finish the :alt4 function below instead of returning back 1 level.
- if %testwell% gtr 1 echo . & echo arg1==%arg1%, arg2==%arg2%, arg3==%arg3%, arg4==%arg4%
- if %testwell% gtr 1 pause & echo .
- call :exception1 "%arg1%" "%arg2%" "%arg3%" "%arg4%"
- if %testwell% gtr 0 echo Back from exception1 & echo . & pause & echo .
- ::: AND... end like... below from the "goto"
- endlocal & set "%~1=0" & set "%~2=1"
- exit /b %errorlevel%
- ::: calling w/o colon, with 5 args.
- :alt5
- if %testwell% gtr 2 echo . & echo arg5 is %arg5% & echo .
- if %testwell% gtr 2 if not defined arg6 set "arg6=You have reached alt6, there is one more levels available currently."
- if defined arg6 call :alt6
- if %testwell% gtr 2 echo . & echo %arg6% & echo .
- ::: Then finish the :alt5 function below instead of returning back 1 level.
- if %testwell% gtr 2 pause & echo .
- ::: AND... end like... below from the "goto"
- rem endlocal & set "%~1=%arg5%" & set "%~2=%arg6%"
- exit /b %errorlevel%
- ::: calling w/o colon, with 6 args.
- :alt6
- if %testwell% gtr 2 echo . & echo arg6 is %arg6% & echo .
- if %testwell% gtr 2 if not defined arg7 set "arg7=This is alt7, there is no more above this."
- if defined arg7 call :alt7
- if %testwell% gtr 2 echo . & echo %arg7% & echo .
- ::: Then finish the :alt6 function below instead of returning back 1 level.
- if %testwell% gtr 2 pause & echo .
- ::: AND... end like... below from the "goto"
- rem endlocal & set "%~1=%arg5%" & set "%~2=%arg6%"
- exit /b %errorlevel%
- ::: calling w/o colon, with 7 args.
- :alt7
- if %testwell% gtr 2 echo . & echo arg7 is %arg7% & echo .
- if %testwell% gtr 2 if not defined arg8 set "arg8=You've reached alt7, there are no provisions for more than 7 args."
- if %testwell% gtr 2 echo . & echo %arg8% & echo .
- ::: Then finish the :alt7 function below instead of returning back 1 level.
- ::: AND... end like... below from the "goto"
- rem endlocal & set "%~1=%arg5%" & set "%~2=%arg6%"
- exit /b %errorlevel%
- ::: End of alt namespace, the below are all isolated functions.
- ::: Reverse a string arg and return reversed string.
- :revchars <string revstrReturned, string str2rev>
- setlocal & set str=%~2
- if not defined sizer set sizer="%bats%\string_length.bat"
- if not exist %sizer% echo . & echo %sizer% not found. & echo Error 47 & echo . & pause & echo . & exit /b
- call %sizer% char5 str
- set rev=
- for /l %%n in (1,1,%char5%) do call :forloop1
- endlocal & set "%~1=%rev%"
- exit /b %errorlevel%
- :forloop1
- set ltr=%str:~-1%
- set str=%str:~0,-1%
- set "rev=%rev%%ltr%"
- exit /b %errorlevel%
- ::: To remain generic, we'll be using it a lot.
- :makeline <string line2Fill, string padchars, string strToPadTo>
- setlocal & set "txt3=%~3" & set "padchars=%~2"
- call :strlen pad "%padchars%"
- call :strlen len "%txt3%"
- if %pad% equ 0 if %len% equ 0 set line=WHO CALLED YOU?
- if %pad% equ 0 if %len% equ 0 (
- echo . & echo %line% & echo .
- pause & echo . & pause & echo . & goto sorry )
- set /a size8=((2 + %len% + %pad% * 2)/%pad%)
- :while
- set /a s8=(%size8% * %pad%)
- set /a g1=(%len% + 2 + (2 * %pad%))
- if %g1% gtr %s8% set /a size8+=1
- if %g1% gtr %s8% goto while
- REM if %code2% equ 7 goto except
- REM if %code2% neq 7
- call :padder line %size8% "%padchars%"
- :sorry
- endlocal & set "%~1=%line%"
- exit /b %errorlevel%
- ::: Pads string var to passed length with sent chars.
- :padder <string toRtn, int lengthOfStringReqd, string padchars>
- setlocal & set "padchars=%~3" & set line1=
- for /l %%k in (1, 1, %~2) do ( call :loop3
- if %errorlevel% gtr 0 goto except
- )
- endlocal & set "%~1=%line1%"
- exit /b %errorlevel%
- ::: loop body for for-loop above.
- :loop3
- set line1=%line1%%padchars%
- exit /b %errorlevel%
- :except
- set /a code2=7 & set t1=The Exception was caught in :padder
- set s1=utility3.bat
- call :exception1 "%t1%" "%s1%" "%errorlevel%" "%code2%"
- exit
- :exception1 <str text, str sender, int error, int code2>
- setlocal & set "t1=%~1" & set "s1=%~2" & set "e1=%~3" & set "c2=%~4"
- if not defined errr set errr="%bats%\ErrorHandling.bat"
- set ch=-/\-\/
- set t2=The ErrorLevel was %e1% and code2 == %c2%
- REM call :middleman "%ch%" "%t2%"
- echo . & if exist %errr% call %errr% "%t1%" "%s1%"
- echo . & pause & echo .
- endlocal & set /a code2=0
- exit /b %errorlevel%
- :getspcs <string spcs2Return, int gap>
- setlocal & set /a "gap=%~2" & set sp=
- for /l %%i in (1, 1, %gap%) do call :addspace
- endlocal & set "%~1=%sp%"
- exit /b %errorlevel%
- :addspace
- set nl=
- set "sp=%sp%%nl%"
- exit /b %errorlevel%
- :strlen <int sizeOfstr2rtn, string str2measure>
- setlocal & set str=%~2
- if not defined sizer set sizer="%bats%\string_length.bat"
- if exist %sizer% call %sizer% size str
- if not exist %sizer% echo . & echo Can't find %sizer% & echo .
- endlocal & set "%~1=%size%"
- exit /b
- :overload
- echo .
- echo Years beyond 2147483647 are not calculable by this program,
- echo ask for an update. I'd just have to use another 32 bit register
- echo beyond that, to raise it by another order of this magnitude.
- exit /b
- ::: An All-In-One Function. Though these calls
- ::: can still be used separately when desired.
- :middleman <str chars, str msg>
- setlocal & set "ch=%~1" & set "ms=%~2"
- call :revchars rv "%ch%"
- call :makeline ln "%ch%" "%ms%"
- call :getgaps g1 g2 "%ln%" "%ch%" "%ms%"
- set "nl=%rv%%g1% %ms% %g2%%rv%" & echo .
- echo %ln% & echo %nl% & echo %ln% & echo .
- endlocal
- exit /b
- ::: default is 2, 1 on ea side of txt. which ^ is in the program already at display of these. So if anything more then we are adding that here.
- :getgaps <str gap1, str gap2, str line, str chars, str msg>
- setlocal & set "line=%~3" & set "chars=%~4" & set "msg=%~5"
- call :strlen l3n "%line%"
- call :strlen k4d "%chars%"
- call :strlen m5g "%msg%"
- set /a gap0=(%l3n% - (%m5g% + (2 * %k4d%)) - 2)
- call :equalizer
- if %gap1% gtr 0 call :getspcs pad1 %gap1%
- if %gap2% gtr 0 call :getspcs pad2 %gap2%
- if %gap1% lss 1 set pad1=
- if %gap2% lss 1 set pad2=
- endlocal & set "%~1=%pad1%" & set "%~2=%pad2%"
- exit /b %errorlevel%
- :::::::::::::::::::::::::::::::::::::::::::::::::
- ::: NOTE: Inside same domain as :getgaps <==< :::
- ::: if the gap is greater than 2 it can be :::
- ::: within 1 of being equally divided between :::
- ::: the two sides of the text. by -JpE- 2310 :::
- ::: Therefore, if div by 2 isn't even add 1 :::
- ::: to one side, the 2nd here, & Rock-n-Roll! :::
- :::::::::::::::::::::::::::::::::::::::::::::::::
- :: given: gap total as gap2 & w/ gap1 init; [above]
- :: make as equal as possible. Odd on gap2 if over.
- :: Remember: 1 spc on each side is already programatic.
- :equalizer
- set /a gap1=0 & set /a gap2=0 & set /a divi=0 & set /a rmdr=0
- if %gap0% gtr 0 set /a divi=(%gap0%/2) & set /a rmdr=(%gap0% %% 2%)
- if %gap0% gtr 0 set /a gap1=%divi% & set /a gap2=%divi%
- :: if it went evenly we're done. Else... if odd merely... add one to only one side. Herein, the 2nd side or far end of line b4 revchar.
- if %rmdr% gtr 0 set /a gap2+=1
- exit /b %errorlevel%
- :: More a conceptual Design challenge than coding.
- :: But if Num went into 2 oddly, AKA unevenly...
- :: we can therefore safely say that it's the
- :: even product above (from the even which is
- :: 1 less than it) plus 1 in each instance,
- :: with the extra 1 on the right, in gap2. (here)
- :: design NOTES: 1 is the only possible remainder when dividing odds by 2 as 2 would make another pair. So... 5/2 == 2 w/ rmdr of 1 over 2 or 1/2. Or, with this, unevenly split into 2 + 2+1 == 5 so we don't have to split the character in 2. lol. Now, with divisions by odd numbers > 1, the remainder is greater than that, up to denominator-1. 2/3rds, or 4/5ths, etc. Example, take the year (after Gregorian Calendar in 1753) and divide by 4, if there is no remainder it is a leap year. Magic? No, Math! 1 in 4 years are leap years. Every 4 years. Divide by 4, same same... no remainder, that's the 1. i.e. 3:1 odds it's not leap year.
- ::: 100% -JpE-
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement