elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: [1]
1  Programación / Scripting / Generador de Arrays [BETA] en: 10 Septiembre 2009, 16:44 pm
Bueno :P esto lo hize como despedida de batch, mi gran amigo desde hace mucho tiempo  :xD

Se trata de un generador de arrays de hasta 5 dimensiones... tiene posibilidad de expander sin perder datos, guardar un array en un fichero, cargarlo desde un programa, crear punteros a cierta casilla de un array, etc.
Tambien tiene variables de ayuda para saber el tamaño de un array y bueh xD eso. Se le puede dar un valor por defecto a todas las casillas del array cuando se definen declarando la variable "default".
Otra cosa... hay un bug con los espacios que aqui no voy a comentar que se arregla con call:putbar o call:quitbar  ;D

Aqui os dejo el codigo y luego explico la sintaxis:

Código:
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
GoTo:code
:;By blackray;:
:array
FOR %%x IN ("%~1","%~2","%~3") DO (
           IF [%%x]==[""] (
              echo Error.&GoTo:EoF
           )
)
IF "%default%"=="" (
SET default=0
)
IF /i "%~1"=="newarray" (
   IF NOT "%~7"=="" (
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          SET array[5]=%~6
          SET array[6]=%~7
          CALL:new5
          GoTo:EoF
   )
  
   IF NOT "%~6"=="" (
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          SET array[5]=%~6
          CALL:new4
          GoTo:EoF
   )
          
   IF NOT "%~5"=="" (
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          CALL:new3
          GoTo:EoF
   )

   IF NOT "%~4"=="" (
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          CALL:new2
          GoTo:EoF
   )
   IF NOT "%~3"=="" (
          SET array[1]=%~2
          SET array[2]=%~3
          CALL:new1
          GoTo:EoF
   )
)
IF /i "%~1"=="expandarray" (
   CALL:defined %~2
   IF NOT "%~7"=="" (
          SET array[rows]=!%~2.rows!
          SET array[columns]=!%~2.columns!
          SET array[len]=!%~2.len!
          SET array[len4]=!%~2.len4!
          SET array[len5]=!%~2.len5!
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          SET array[5]=%~6
          SET array[6]=%~7
          CALL:edit5
          GoTo:EoF
   )
  
   IF NOT "%~6"=="" (
          SET array[rows]=!%~2.rows!
          SET array[columns]=!%~2.columns!
          SET array[len]=!%~2.len!
          SET array[len4]=!%~2.len4!          
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          SET array[5]=%~6
          CALL:edit4
          GoTo:EoF
   )
          
   IF NOT "%~5"=="" (
          SET array[rows]=!%~2.rows!
          SET array[columns]=!%~2.columns!
          SET array[len]=!%~2.len!
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          SET array[4]=%~5
          CALL:edit3
          GoTo:EoF
   )

   IF NOT "%~4"=="" (
          SET array[rows]=!%~2.rows!
          SET array[columns]=!%~2.columns!
          SET array[1]=%~2
          SET array[2]=%~3
          SET array[3]=%~4
          CALL:edit2
          GoTo:EoF
   )
   IF NOT "%~3"=="" (
   SET array[rows]=!%~2.rows!
   SET array[1]=%~2
   SET array[2]=%~3
   CALL:edit1
   GoTo:EoF
   )
)
IF /i "%~1"=="pointer" (
   CALL:defined %~4
   IF /i "%~2"=="asign" (
      IF NOT "%~4"=="" (
         SET array[val]=%~3
         SET array[var]=%~4
         CALL:asign
         GoTo:EoF
      )
   )
   IF /i "%~2"=="create" (
   CALL:defined %~4
   SET array[var]=%~3
   SET array[where]=%~4
   CALL:create
   GoTo:EoF
   )
)
IF /i "%~1"=="save" (
   CALL:defined %~2
   SET array[save]=%~2
   SET array[dir]=%~3
   CALL:save
   GoTo:EoF
)
IF /i "%~1"=="load" (
   SET array[dir]=%~2
   SET array[state]=%~3
   CALL:load
   GoTo:EoF
)
echo Error.&GoTo:EoF
:new1
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
FOR /L %%e IN (0,1,%array[2]%) DO (
              SET %array[1]%[%%e]=%default%
)
SET default=0
GoTo:EoF
:new2
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
FOR /L %%f IN (0,1,%array[2]%) DO (
           FOR /L %%c IN (0,1,%array[3]%) DO (
                      SET %array[1]%[%%f.%%c]=%default%
           )
)
SET default=0
GoTo:EoF
:new3
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
FOR /L %%f IN (0,1,%array[2]%) DO (
           FOR /L %%c IN (0,1,%array[3]%) DO (
                      FOR /L %%r IN (0,1,%array[4]%) DO (
                                 SET %array[1]%[%%f.%%c.%%r]=%default%
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:new4
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
FOR /L %%f IN (0,1,%array[2]%) DO (
           FOR /L %%c IN (0,1,%array[3]%) DO (
                      FOR /L %%r IN (0,1,%array[4]%) DO (
                                 FOR /L %%p IN (0,1,%array[5]%) DO (
                                        SET %array[1]%[%%f.%%c.%%r.%%p]=%default%
                                 )
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:new5
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
SET %array[1]%.len5=%array[6]%
FOR /L %%f IN (0,1,%array[2]%) DO (
           FOR /L %%c IN (0,1,%array[3]%) DO (
                      FOR /L %%r IN (0,1,%array[4]%) DO (
                                 FOR /L %%p IN (0,1,%array[5]%) DO (
                                        FOR /L %%k IN (0,1,%array[6]%) DO (
                                               SET %array[1]%[%%f.%%c.%%r.%%p.%%k]=%default%
                                        )
                                 )
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:edit1
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
FOR /L %%e IN (%array[rows]%,1,%array[2]%) DO (
              SET %array[1]%[%%e]=%default%
)
SET default=0
GoTo:EoF
:edit2
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
           FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
                      SET %array[1]%[%%f.%%c]=%default%
           )
)
SET default=0
GoTo:EoF
:edit3
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
           FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
                      FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
                                 SET %array[1]%[%%f.%%c.%%r]=%default%
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:edit4
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
           FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
                      FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
                                 FOR /L %%p IN (%array[len4]%,1,%array[5]%) DO (
                                        SET %array[1]%[%%f.%%c.%%r.%%p]=%default%
                                 )
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:edit5
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
SET %array[1]%.len5=%array[6]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
           FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
                      FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
                                 FOR /L %%p IN (%array[len4]%,1,%array[5]%) DO (
                                        FOR /L %%k IN (%array[len5]%,1,%array[6]%) DO (
                                               SET %array[1]%[%%f.%%c.%%r.%%p.%%k]=%default%
                                        )
                                 )
                      
                      )    
           )
)
SET default=0
GoTo:EoF
:create
SET %array[var]%[array]=%array[where]%
SET %array[var]%=!%array[where]%!
GoTo:EoF
:asign
SET %array[var]%=%array[val]%
SET !%array[var]%[array]!=!%array[var]%!
GoTo:EoF
:defined
IF NOT DEFINED %~1 (
   echo Array not exist.&pause>nul&exit
)
GoTo:EoF
:save
CALL:defined %array[save]%
SET %array[save]%>%array[dir]%
GoTo:EoF
:load
IF NOT EXIST "%array[dir]%" (
   echo File not found.&GoTo:EoF
)
FOR /F "tokens=*" %%x IN (%array[dir]%) DO (
    SET "%%x"
)
IF /i "%array[state]%"=="D" (
   DEL /F /Q %array[dir]%
   GoTo:EoF
)
IF /i "%array[state]%"=="ND" (
   GoTo:EoF
)
GoTo:EoF
:quitbar
SET var=%1
SET %1=!%var%:_= !
GoTo:EoF
:putbar
SET var=%1
SET %1=!%var%: =_!
GoTo:EoF
:code
REM AQUI EL CODIGO :D

Espero que no os parezca cutre  :rolleyes:
Bien... ahora lo que es capaz de hacer y como hacerlo:

Crear un nuevo array: call:array newarray nombre tamaño1 [tamaño2] [tamaño3] [tamaño4] [tamaño5]

Los que estan entre [] son opcionales... ya que el minimo puede ser de una dimension pero el maximo de 5... espero que ya llegue xD

Expander un array: call:array expandarray nombre tamaño1 [tamaño2] [tamaño3] [tamaño4] [tamaño5]
Podeis crear una nueva dimension y ampliar dimensiones existentes a la vez sin perder ningun dato guardado :P

Crear puntero a casilla: call:array pointer create nombre casillaarray
Creamos el puntero y apunta a la casilla que se defina xD

Asignar valor a un puntero (se modificara la casilla tambien :P):
call:array pointer asign valor puntero
Pues se le asigna el valor al puntero, modificando tambien la casilla original ya que el puntero apunta a la casilla xD
[En este es donde esta el bug... no le puede asignar un valor con espacios asi que tienes que pasar antes el valor por la etiqueta call:putbar y cuando lo recuperes, pasarlo por el call:quitbar xD]

Guardar un array en fichero: call:array save nombrearray fichero.extensión
Creo que queda claro, guarda el array en un fichero... aqui hay un bug pero no tiene porque pasar nada si se programa bien  :P

Leer un fichero con un array guardado: call:array load fichero.extensión ND/D
Se lee, y lo mas interesante quiza es el ND/D indica si se desea eliminar o no tras su lectura, si se especifica ND no se eliminara... si es D si  ;D

Y ahora funciones que no son de array pero que ya trae el programa en si:

PUTBAR: call:putbar variable
Cambia todos los espacios ( ) de una variable por barra inferior (_)
QUITBAR: call:quitbar variable
La inversa, cambia todas las barras (_) por espacios ( )
NOTA: EN ESTOS LA VARIABLE SIN %% ;)
Y nada mas... espero que os sirva de algo :P ese fue mi entreteimiento en las vacaciones  :xD

Saludos!
2  Programación / ASM / [DUDA] mover a la pila en: 9 Septiembre 2009, 19:33 pm
Aqui estoy con mis dudas  :xD

Segun lei los registros sp y bp contienen el valor mas reciente introducido en la pila y el valor de la base de la pila respectivamente.

Entonces...

mov ax,5
push ax ; la pila tiene de base el valor 5
mov bp,6 ; ????

Si movemos a el registro bp el valor 6, tambien se modifica el valor de la pila?

Saludos, y gracias! :P
3  Programación / ASM / [Ayuda]MOVSD y MOVSW en: 6 Septiembre 2009, 16:54 pm
Hola =P la cuestion es que yo entiendo que copia de SI a DI, lo que no entiendo es la instruccion del flag de direccion como CLD, lei y dice... movimiento para adelante WTF?
 :-\ No entiendo muy bien eso, me podeis echar una mano porfavor?  ;D
Saludos!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines