BSLL - Langage de script codé en lot

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

UchiNoYama

J'ai pas d'idée
V.I.P
Apr 28, 2012
223
1
924
Excusez moi d'avance pour la présentation qui ne risque pas d'être à la hauteur des autres présentations, de plus ce tutoriel est plutôt destiné à des personnes qui ont un minimum d'expérience, même si pourtant c'est très basique =)

Quelques-uns d'entre vous ont probablement vu cela auparavant. Mais, il a parcouru un long chemin depuis la dernière fois. Il opère désormais dans les «classes» (évidemment pas des classes réelles, mais plus proche que j'ai pu trouver.)

Code:
\MAIN - Définit le fichier actuel comme classe parente 
\SUB - Définit le fichier actuel comme une sous-classe 
\CLASSLIST - Définit une liste de classes (exemple: \ classList hi.sll, bye.sll) 
\EXECUTE - Uses a number to call a class from the class list (Example: \EXECUTE 1 - Exécuter le premier fichier dans classlist
\EXEPARAMS -  Exécute une classe avec des paramètres 
\USEPARAMS - Lire les paramètres en tant que commande 
\PARAMSDISP - Afficher les paramètres 
// - Commenter la commande
:# - Commenter la commande
' - Commenter la commande
~ CEP - Appelez un fichier sll. 
~ ECP - Sort d'un fichier appelé sll, et peut prendre un code de sortie si nécessaire.

C'est juste un bref résumé. J'ajoute une commande qui sera en mesure de faire un acte de fichier. sll en ligne de commande pour BSLL.

Le code Source (Enregistrer ceci en "BSLL.bat")
Code:
@echo off
title %~1
set floc=%~1
set params_1=%~2
set use_com=false
setlocal enabledelayedexpansion enableextensions
if "%~x1"==".sll" ( 
goto :rest_
) 
echo ERROR: Invalid file type.
pause
exit

:rest_
set tmpFile=%temp%\%~n1.tmp
if exist "%tmpFile%" del "%tmpFile%"
set /a m_internal_=0
set loop=false

:parse
set counter=0
for /f "usebackq tokens=*" %%a in ("%floc%") do (
set /a counter+=1
set line_!counter!=%%a
)

for /f "usebackq tokens=1,2*" %%a in ("%floc%") do (
set /a fLine+=1
set com_used=1
set pNS=
set params_internal_=
set com_int=%%a
set ex1=%%b %%c
set ex_internal_=!ex1:;=;!

if "!use_com!"=="true" (
call :class_RunParams
set use_com=false
)

if "!com_int!"=="+T" set origTitle=!ex_internal_! &title !ex_internal_! &set com_used=0

if "!com_int!"=="\SUB" set classFileCalled=true &set classFileList=!classFileList!%floc%  &set com_used=0
if "!com_int!"=="\MAIN" cls &set mainClassFile=%floc% &set com_used=0
if "!com_int!"=="\CLASSLIST" set classList=!ex_internal_! &set com_used=0
if "!com_int!"=="\EXECUTE" call :class_Execute "!ex_internal_!" &set com_used=0
if "!com_int!"=="\EXEPARAMS" call :class_ExecuteWParams "!ex_internal_!" &set com_used=0
if "!com_int!"=="\USEPARAMS" call :class_Params &set com_used=0
if "!com_int!"=="\PARAMSDISP" echo !params_1! &set com_used=0

if "!com_int:~0,2!"=="//" set com_used=0&rem Do nothing, comment command
if "!com_int:~0,2!"==":#" set com_used=0&rem Do nothing, comment command
if "!com_int:~0,1!"=="'" set com_used=0&rem Do nothing, comment command

if "!com_int!"=="+M" call :math "!ex_internal_!" &set com_used=0
if "!com_int!"=="-M" set /a m_internal_=0 &set com_used=0
if "!com_int!"=="~MTHD" echo !m_internal_! &set com_used=0
if "!com_int!"=="~MTHD++" set /a m_internal_+=1 &set com_used=0

if "!com_int!"=="+I" call :UIn "!ex_internal_!" &set com_used=0
if "!com_int!"=="~UUID" echo !IO_internal_! &set com_used=0

if "!com_int!"=="~RPT" call :return &set com_used=0
if "!com_int!"=="~CEP" call :callExternal "!ex_internal_!" &set com_used=0
if "!com_int!"=="~CHK" call :checkReturn "!ex_internal_!" &set com_used=0

if "!com_int!"=="+MV" call :makeVar "!ex_internal_: =!" &set com_used=0
if "!com_int!"=="-CV" call :clrVar "!ex_internal_!" &set com_used=0
if "!com_int!"=="~VARD" call :vDisplay "!ex_internal_: =!" &set com_used=0

if "!com_int!"=="+S" set "a_internal_=!a_internal_!!ex_internal_:~0,1!" &set com_used=0
if "!com_int!"=="-S" set a_internal_= &set com_used=0
if "!com_int!"=="~STRD" echo !a_internal_! &set com_used=0

if "!com_int!"=="~P" pause &set com_used=0

if "!com_int!"=="~CLS" cls &set com_used=0

if "!com_int!"=="~ECP" call :classExit "!ex_internal_!"
if "!com_int!"=="~EOF" exit
if not "!com_used!"=="0" echo Error occured on line: !fLine!
set use_com=false
)

goto :end

:class_ExecuteWParams
set mainClass=%floc%
set params_internal_=%~1
for /f "usebackq tokens=1,2*" %%a in ('%params_internal_%') do (
set params_toPass=%%b %%c
set exe_File=%%a
)
call "%cd%\BSLL.bat" "%exe_File%" "%params_toPass%"
title %origTitle%
goto :end

:class_Params
set use_com=true
goto :end

:class_Execute
set params_internal_=%~1
set classList_mod=%classList:,= %
for %%g in (%classList_mod%) do (
set /a CLSLIST+=1
set CLSLIST_!CLSLIST!=%%g
)
call "BSLL.bat" "!CLSLIST_%params_internal_:~0,-1%!"
goto :end

:classExit
if not "%classFileCalled%"=="true" ( goto :end ) ELSE ( exit /b %~1)
goto :end

:checkReturn
if "%~1"=="%returnCode% " (
echo File was executed successfully.
goto :end
) ELSE (
echo File wasn't executed successfully. Return code: %returnCode% - Correct Return code: %~1
goto :end
)
goto :end

:callExternal
set params_internal_=%~1
if "%params_internal_%"=="\MAIN" ( set params_internal_=%floc%)
if exist "%params_internal_:~0,-1%" (
call "BSLL.bat" "%params_internal_:~0,-1%"
title %origTitle%
set returnCode=%errorlevel%
goto :end
) 
if not exist "%params_internal_:~0,-1%" (
echo ERROR: File "%params_internal_:~0,-1%" not found.
goto :end
)
goto :end

:return
goto :parse

:UIn
set params_internal_=%~1
for /f "tokens=1,2* delims=," %%a in ("!params_internal_!") do (
set /p IO_internal_=!params_internal_!
)
goto :end

:math
set params_internal_=%~1
if /i "%params_internal_: =%"=="rnd" (
set m_internal_=!random!
goto :end
) ELSE (
set /a m_internal_=%params_internal_%
)
goto :end

:makeVar
set params_internal_=%~1
set vname=%params_internal_:;=;%
for /f "tokens=1,2* delims==" %%a in ("%vname%") do (
set %%a=%%b
if "%%b"=="~MTHO" set %%a=%m_internal_%
if "%%b"=="~STRO" set %%a=%a_internal_%
if "%%b"=="~UUIO" set %%a=%IO_internal_%
)
goto :end

:clrVar
set params_internal_=%~1
set pNS=%params_internal_: =%
call set %%pNS%%=
goto :end

:vDisplay
set params_internal_=%~1
set disp=%params_internal_: =%
call echo !%disp:;= %!
goto :end

:end

Maintenant des exemple de script (nommer le "1.sll")

Code:
\MAIN
\CLASSLIST 1.sll,2.sll
+T Hello World - With parameters
+MV a=Hello
~VARD a
\EXEPARAMS 2.sll world
~P
~EOF

Exemple de script 2 (nommer le "2.sll")

Code:
SUB
\PARAMSDISP


---------------
Quelques bug avec la commande "\EXECUTE" & "\USEPARAMS"

Pour les personnes voyant ce sujet un minimum de merci svp ^^ Et des questions, je suis ouvert..