;COPYPA: Packer para el proyecto de fin de carrera ; (M‚todo 3 - COPY > sin compresi¢n) ; ; Realizado en lenguaje ensamblador, se compila con NASM ; ; - El programa maestro de Windows, para transmitir permite seleccionar ; un archivo visualmente, entonces graba el nombre del archivo con su unidad ; y path delante y acabado en 0 en otro archivo llamado ENTRADA.ARC, que se ; coloca en el mismo path del programa, donde tambi‚n est situado este m¢dulo ; de compresi¢n. ; ; - Este modulo de compresi¢n tiene como misi¢n abrir el archivo mencionado ; en ENTRADA.ARC y comprimirlo en el archivo de salida SALIDA.CMP, que queda ; listo para ser enviado por el puerto serie org 256 ;Programa mov ah,3ch ;Funci¢n para crear archivo xor cx,cx ;Atributos a 0 mov dx,nameout ;Nombre del archivo: SALIDA.CMP int 33 ;Crear archivo de salida jnc noerror01 ;Si no hay error, continuar mov ax,4c01h ;C¢digo de error 1 int 33 ;Salir a Windows noerror01 mov [handleout],ax ;Salvar handle de SALIDA.CMP mov ax,3d00h ;Funci¢n para abrir archivo mov dx,namepath ;Nombre del archivo a abrir int 33 ;Abrir ENTRADA.ARC jnc noerror02 ;Si no hay error, continuar mov ax,4c02h ;C¢digo de error 2 int 33 ;Salir a Windows noerror02 xchg ax,bx ;Handle de ENTRADA.ARC en bx mov ah,3fh ;Funci¢n para leer de archivo mov cx,400 ;N£mero m ximo de bytes a leer mov dx,pathbuffer ;Posici¢n donde se escriben los bytes int 33 ;Leer bytes jnc noerror03 ;Si no hay error, continuar mov ax,4c03h ;C¢digo de error 3 int 33 ;Salir a Windows noerror03 mov si,dx ;Apuntar al nombre de archivo con path mov dx,1 ;Abrir archivo existente, no crear xor bx,bx ;Modo de acceso solo lectura xor cx,cx ;Sin atributos mov ax,716ch ;Funci¢n para crear o abrir archivo ; usando nombres largos int 33 ;Abrir archivo de entrada jnc noerror05 ;Si no hay error, continuar mov ax,4c05h ;C¢digo de error 5 int 33 ;Salir a Windows noerror05 mov [handlein],ax ;Salvar handle del archivo de entrada buclecopy mov ah,3fh mov bx,[handlein] mov cx,6000 mov dx,buffer int 33 ;Leer archivo jnc noerror06 mov ax,4c06h ;C¢digo de error 6 int 33 ;Salir a Windows noerror06 xchg ax,cx ;N£mero de bytes leidos en cx jcxz exit ;Si es 0, salir mov ah,40h mov bx,[handleout] int 33 ;Escribir archivo jnc noerror07 mov ax,4c07h ;C¢digo de error 7 int 33 ;Salir a Windows noerror07 jmp buclecopy ;Seguir copiando exit mov ax,4c00h ;C¢digo de error 0 (sin problemas) int 33 ;Salir a Windows namepath db "ENTRADA.ARC",0 nameout db "SALIDA.CMP",0 ;******************************* section .bss ;Variables sin iniciar handleout resw 1 ;Handle del archivo de salida handlein resw 1 ;Handle del archivo de entrada pathbuffer resb 400 buffer resb 6000 ;errorlevels: ; ; 0 - OK, no error ; 1 - No se puede crear SALIDA.CMP ; 2 - No se puede abrir ENTRADA.ARC ; 3 - No se puede leer ENTRADA.ARC ; 5 - No se puede abrir el archivo de entrada ; 6 -