Underc0de

Programación Scripting => Batch - Bash => Mensaje iniciado por: binary_death en Septiembre 01, 2013, 04:26:16 AM

Título: Batch Paint
Publicado por: binary_death en Septiembre 01, 2013, 04:26:16 AM
(http://i52.tinypic.com/2drdni1.jpg)


@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
:_START
MODE CON COLS=80 LINES=25
MEM/C | FIND /I "ANSI">NUL || ((
ECHO.DEVICE=%SystemRoot%\System32\ANSI.SYS /X
)>>%SystemRoot%\System32\CONFIG.NT
IF "%~1" NEQ "1" (
START "" %0 1 && EXIT/B 0
) ELSE ( EXIT/B 1))
:INI
Set Colors=X3Y3,X5Y3,X3Y5,X5Y5,^
X3Y7,X5Y7,X3Y9,X5Y9,^
X3Y11,X5Y11,X3Y13,X5Y13,^
X3Y15,X5Y15,X3Y17,X5Y17
Set Cursors=X69Y10,X71Y10,X73Y10,X75Y10,X77Y10
Set "Cursor_Icon=Û²±°R"
Set/A "CurCol=8","CurCap=0","BACK=0","LastColVal=8"
Set "CurColPos=X5Y9"
Set "CurCur=Û"
Set "LastCurVal=Û"
Set "LastCurPos=X69Y10"
Call:LOAD_SCR
:_MAIN

TITLE BatchPaint BETA [CRD: %MOUSE[XY]% - LYR: %CurCap% - COL: %CurCol%]
CALL:_MOUSE[GET]
CALL:_CMP

GOTO:_MAIN

:_CMP
::Comp. Extern Cordinates.
If "%MOUSE[XY]%" EQU "X76Y6" (
If %CurCap% LSS 9 Set/A "CurCap+=1"
Command/C Echo.!CurCap!
GoTo:EoF
)
If "%MOUSE[XY]%" EQU "X69Y6" (
If %CurCap% GTR 0 Set/A "CurCap-=1"
Command/C Echo.!CurCap!
GoTo:EoF
)
::Comp. Cursors table cordinates.
Set/A "CursorCount=0"
For %%b in (%Cursors%) do (
If "%MOUSE[XY]%" EQU "%%b" (
Call:__WRITE_COLOR %LastCurPos% %LastCurVal% 8
Call:__WRITE_COLOR %%b %%Cursor_Icon:~!CursorCount!,1%% 10
Call Set "CurCur=%%Cursor_Icon:~!CursorCount!,1%%"
Set "LastCurPos=%%b"
Call Set "LastCurVal=%%Cursor_Icon:~!CursorCount!,1%%"
GoTo:EoF
)
Set/A "CursorCount+=1"
)
::Comp. Colors table cordinates.
For /l %%x in (2,1,7) do (
For /l %%y in (2,1,19) do (
If "%MOUSE[XY]%" EQU "X%%xY%%y" (
Echo.%Colors%|Find/I "%MOUSE[XY]%">NUL && (
Set "CurCol=!%MOUSE[XY]%!"
Call:__WRITE_COLOR %CurColPos% Û %LastColVal%
Call:__WRITE_COLOR %MOUSE[XY]% ° !%MOUSE[XY]%!
Set "CurColPos=%MOUSE[XY]%"
Set "LastColVal=!%MOUSE[XY]%!"
)
GoTo:EoF
)))
::Comp. Limits.
For /F "Tokens=1,2 Delims=X,Y" %%x in ("%MOUSE[XY]%") do (
If %%x LEQ 2 GoTo:EoF
If %%x GEQ 67 GoTo:EoF
If %%y LEQ 2 GoTo:EoF
If %%y GEQ 24 GoTo:EoF
)
::Paint on coordinate
If "%CurCur%" EQU "R" (GoTo:_DltLYR) ELSE (GoTo:_PntLYR)
:_DltLYR
Set "%MOUSE[XY]%[%CurCap%]="
If %CurCap% EQU 0 CALL:__WRITE_COLOR %MOUSE[XY]% Û 1&GoTo:EoF
Set/A "Tmp_Lyr=%CurCap%-1"
For /l %%i in (%Tmp_Lyr%,-1,0) do (
Set "Nxt_LYR=%MOUSE[XY]%[%%i]"
Call Set "INxt_LYR=%%!Nxt_LYR!%%"
If "%%i" EQU "0" (If Not Defined INxt_LYR Set "INxt_LYR=Û$1")
If Defined INxt_LYR (
For /F "Tokens=1,2 Delims=$" %%p in ("!INxt_LYR!") do (
CALL:__WRITE_COLOR %MOUSE[XY]% %%p %%q
Set "!Nxt_LYR!=%%p$%%q"
GoTo:EoF
)))
:_PntLYR
CALL:__WRITE_COLOR %MOUSE[XY]% %CurCur% %CurCol%
Set "%MOUSE[XY]%[%CurCap%]=%CurCur%$%CurCol%"
GoTo:EoF
:LOAD_SCR
More/C<NUL
Echo.                          Batch Paint                           ^(C^)Binary_Death
Echo. ÉÍËÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍ»
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º  Layers   º
Echo. º º º                                                            ºÚÄ¿ÚÄÄ¿ÚÄ¿ º
Echo. ÌÍÎ͹                                                            º³^<³³  ³³^>³ º
Echo. º º º                                                            ºÀÄÙÀÄÄÙÀÄÙ º
Echo. ÌÍÎ͹                                                            ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. º º º                                                            º  Cursors  º
Echo. ÌÍÎ͹                                                            º Û ² ± ° R º
Echo. º º º                                                            ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÊͼ                                                            º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍͼ
Command/C Echo.%CurCap%%CurCur%
CALL:LOAD_COLORS
GoTo:EoF
:LOAD_COLORS
Set/A "Count=1"
For %%f in (!Colors!) do (
Call:__WRITE_COLOR %%f Û !Count!
Set "%%f=!Count!"
Set/A "Count+=1"
)
GoTo:EoF
:__WRITE_COLOR
Set ColList=0;30$0;31$0;32$0;33$0;34$^
0;35$0;36$0;37$1;30$1;31$1;32$1;33$^
1;34$1;35$1;36$1;37
For /f "Tokens=%~3 Delims=$" %%c in ("%ColList%") do (
For /f "Tokens=1,2 Delims=X,Y" %%x in ("%~1") do (
Command/C Echo.[%%y;%%xH[%%cm%~2
))
GoTo:EoF
:_MOUSE[GET]
(echo.e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo.g116
echo.q)>%tmp%\mouse.dat
Debug<%tmp%\mouse.dat|Find /I "X">%tmp%\tmp.dat
for /f "tokens=2,3,4" %%x in (%tmp%\tmp.dat) do (
set "%%x"&set/a BX=0x!BX!
set "%%y"&set/a CX=0x!CX!+1
set "%%z"&set/a DX=0x!DX!+1
set "MOUSE[XY]=X!CX!Y!DX!"
)
GoTo:EoF


El picasso de la imagen es cortesía de 79137913, que en su día hizo arte en 8 bits con este script  ;D

PD: Se me olvidó mencionar que al igual que con el tetris es necesaria una primera ejecución con privilegios de administrador. Además, no funciona en windows de 64 bits.
Título: Re:Batch Paint
Publicado por: 79137913 en Septiembre 01, 2013, 11:43:34 AM
HOLA!!!

Jajaja que buena onda! ya me habia olvidado de esa imagen!

GRACIAS POR LEER!!!