From 27e54671f3fff3f3fc189f4bf0a3a7fcd95021ec Mon Sep 17 00:00:00 2001 From: jdg Date: Fri, 3 Sep 2021 17:51:51 +0200 Subject: [PATCH] First commit 11/11/1991 --- BROWSER.CPP | 306 +++++++++++++++++ C.EXE | Bin 0 -> 88575 bytes COMPACTA.CPP | 942 +++++++++++++++++++++++++++++++++++++++++++++++++++ COMPACTA.H | 215 ++++++++++++ COMPACTA.IMG | 287 ++++++++++++++++ COMPACTA.PRJ | Bin 0 -> 6488 bytes C_FILE.CPP | 305 +++++++++++++++++ EGAVGA.BGI | Bin 0 -> 5554 bytes KEY.CPP | 32 ++ KEY.EXE | Bin 0 -> 12757 bytes LITT.CHR | Bin 0 -> 5131 bytes MAKE_BOT.H | 163 +++++++++ MAKE_BOT.OBJ | Bin 0 -> 24211 bytes MAKE_B_C.OBJ | Bin 0 -> 24211 bytes P.EXE | Bin 0 -> 58443 bytes R.BAT | 1 + 16 files changed, 2251 insertions(+) create mode 100644 BROWSER.CPP create mode 100644 C.EXE create mode 100644 COMPACTA.CPP create mode 100644 COMPACTA.H create mode 100644 COMPACTA.IMG create mode 100644 COMPACTA.PRJ create mode 100644 C_FILE.CPP create mode 100644 EGAVGA.BGI create mode 100644 KEY.CPP create mode 100644 KEY.EXE create mode 100644 LITT.CHR create mode 100644 MAKE_BOT.H create mode 100644 MAKE_BOT.OBJ create mode 100644 MAKE_B_C.OBJ create mode 100644 P.EXE create mode 100644 R.BAT diff --git a/BROWSER.CPP b/BROWSER.CPP new file mode 100644 index 0000000..14afd40 --- /dev/null +++ b/BROWSER.CPP @@ -0,0 +1,306 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include // Para getch(); +#include // Para outtextxy(...); y cleardevice(...); + +#include "..\..\jd_lib\f_lib\make_bot.h" // Fuciones de MAKE_BOTON + +#define __Modulo_Browser +#include "compacta.h" + +extern BROWSER far *Browser; + +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// Û F U N C I O N E S p a r a e l B R O W S E R Û +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ + +void ReDraw_Browser(void) +{ + int OLD_Brw = BrowserRow; + // 1§ Borramos pantalla de muestreo... + setfillstyle( SOLID_FILL, EGA_BLACK ); + setcolor( EGA_BLACK ); + // Muestreo de archivos + bar( 9, 9, 153, 173 ); + + // 3§ Mostramos los nuevos Archivos + for ( BrowserRow = 0; BrowserRow < 16; BrowserRow++) + if ( ( BrowserRow + BrowserTop ) < maxfiles ) + ShowHideBrowserRow( HIDE ); + BrowserRow = OLD_Brw; +} + +void Fill_Directory(void) + { + char Buffer[180]; + // Recuadro del directorio + // 1§ Borramos pantalla de muestreo... + setfillstyle( SOLID_FILL, EGA_BLACK ); + setcolor( EGA_BLACK ); + bar( 5, 182, 179, 195 ); + + setcolor( EGA_YELLOW ); + getcwd( Buffer, 180 ); + if ( strlen( Buffer ) > 28 ) + { + // Acorta el Buffer poniendo al principio U:\...[DIRECTORIO] + char Buffer1[30]; + + // Primero copiamos en Buffer1 los 22 ultimos caracteres de Buffer + strncpy( Buffer1, strrev(Buffer), 22 ); Buffer1[22] = NULL; + strrev( Buffer1 ); + // Despues conservamos solo de Buffer [Und][:][\] + strrev(Buffer); Buffer[3] = NULL; + // Y agregamos [...] + strcat( Buffer, "..." ); + // Ya podemos unirlo todo + strcat( Buffer, Buffer1 ); + // + } + + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + outtextxy( 7, 184, Buffer ); + + } + +void ShowHideBrowserRow( char Hide_Show ) +{ + + char Buffer[80]; + char Longitud[80]; + + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + + if ( Hide_Show == HIDE ) + { + setfillstyle( SOLID_FILL, EGA_BLACK ); + bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) ); + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + setcolor( EGA_CYAN ); + break; + case 255: + setcolor( EGA_MAGENTA ); + break; + default: + setcolor( EGA_WHITE ); + } + } else { + + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + setfillstyle( SOLID_FILL, EGA_CYAN ); +// setcolor( EGA_CYAN ); + break; + case 255: + setfillstyle( SOLID_FILL, EGA_MAGENTA ); +// setcolor( EGA_MAGENTA ); + break; + default: + setfillstyle( SOLID_FILL, EGA_WHITE ); +// setcolor( EGA_WHITE ); + } + bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) ); + setcolor( EGA_BLACK ); + } + + + outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Browser[BrowserTop+BrowserRow].Fichero ); + formatea_long( Browser[BrowserTop+BrowserRow].Longitud, Longitud ); + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + sprintf ( Buffer, " DIRECTORIO", Longitud ); + break; + case 255: + sprintf ( Buffer, " < UNIDAD >", Longitud ); + break; + default: + sprintf ( Buffer, " %10s", Longitud ); + } + outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Buffer ); +} + +void DownBrowser(void) +{ + + // šš Estoy en la linea fisica 000 ??? + if ( (BrowserRow + BrowserTop) != (maxfiles - 1) ) { + + // Linea 0, Baja Con retroceso multiple + if ( BrowserRow == 15 ) { + BrowserTop += 16; + if ( (BrowserTop + BrowserRow) > maxfiles ) BrowserRow = 0; + while ( (BrowserTop + BrowserRow) > maxfiles ) BrowserTop--; + BrowserRow = 0; + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } else { + ShowHideBrowserRow( HIDE ); + BrowserRow++; + ShowHideBrowserRow( SHOW ); + } + + } +} + +void UpBrowser(void) +{ + + // šš Estoy en la linea fisica 000 ??? + if ( (BrowserRow + BrowserTop) != 0 ) { + + // Linea 0, Baja Con retroceso multiple + if ( BrowserRow == 0 ) { + BrowserTop -= 16; + if ( BrowserTop < 0 ) BrowserTop = 0; + BrowserRow = 0; + ReDraw_Browser(); + BrowserRow = 15; + ShowHideBrowserRow( SHOW ); + } else { + ShowHideBrowserRow( HIDE ); + BrowserRow--; + ShowHideBrowserRow( SHOW ); + } + + } +} + +int SelectBrowser(void) +{ + int RETURN = 1; + + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + chdir( Browser[BrowserTop+BrowserRow].Fichero ); + BrowserRow = BrowserTop = 0; + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + RETURN = 0; + break; + case 255: + erroroccurred=0; + olddisk=getdisk(); + setdisk( (Browser[BrowserTop+BrowserRow].Fichero[0] - 'A') ); + if (erroroccurred) { + setdisk(olddisk); + } else { + BrowserRow = BrowserTop = 0; + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } + RETURN = 0; + break; + default: + RETURN = 1; + } + + return RETURN; + +} + +unsigned int RasterScan(void) { + struct ffblk ffblk; + char done=0; + unsigned int olddisk; + maxfiles = 0; + unsigned char i; + +// build a disk drive availiable list + olddisk=getdisk(); + for (i=1;i<27;i++) if (_chdrive(i) == 0) + { + sprintf( Browser[maxfiles].Fichero, "%c:", (char)('A' + i - 1) ); + Browser[maxfiles].Longitud=0; + Browser[maxfiles].attrs=255; // Unidad + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + setdisk(olddisk); + +// drivelist[2]='N'; //stop access to B drive until I sort out pahntom dive probs +//Ok, Drive B may be a phantom drive. If you try to access drive B, then +//the program looses controll. Bummer! +// needs debugging. (always ignores drive b...) +// asm int 0x11 +// asm mov equipmentlist,ax +// drivelist[2]='N'; +// if ((equipmentlist & 16)) drivelist[2]='Y'; + + + done = findfirst("*.*",&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib == 0x10) { + strcpy(Browser[maxfiles].Fichero,ffblk.ff_name); + Browser[maxfiles].Longitud=ffblk.ff_fsize; + Browser[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + + done = findfirst(Comodin,&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib != 0x10) { + strcpy(Browser[maxfiles].Fichero,ffblk.ff_name); + Browser[maxfiles].Longitud=ffblk.ff_fsize; + Browser[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + return maxfiles; +} + +void interrupt critical_error_handler(.../*__CPPARGS*/) { + asm push ax //preserve only modified register + asm mov ax,di //di holds error code ranging from 0 to 0x0c +// asm inc ax + asm mov erroroccurred,ax //increase erroroccurred for ease of programming + asm mov al,0x20 + asm out 0x20,al //send interrupt clear flag +// asm pushf // I think I dont need this line in.... + asm pop ax //restore ax +} + +void startceh() { + old_int24 = _dos_getvect( 0x24 ); + _dos_setvect( 0x24, critical_error_handler); + } + +void stopceh() { + _dos_setvect(0x24,old_int24); + } +ƒût÷ë‹„ƒût÷ûˆƒût÷니ƒût÷ûÀ>€ÿtTãRÿ6ž£°SèGQ2À¹èHê€>™t¡š†ÄèêY[&Š"Àt SQè`þY[CâíXPèê€>™t¡š†Äèä鏞ÃQèöýèè5Yᮀ \ No newline at end of file diff --git a/C.EXE b/C.EXE new file mode 100644 index 0000000000000000000000000000000000000000..cc583356813b5543d32c4058c7b0d32785a21910 GIT binary patch literal 88575 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 +#include +#include +#include +#include +#include +#include +#include +#include // Para getch(); +#include // Para outtextxy(...); y cleardevice(...); + +#include "make_bot.h" // Fuciones de MAKE_BOTON + +#define __Modulo_Principal +#include "compacta.h" +#undef __Modulo_Principal + +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int left, int up, int right, int down); +void Refresh(void); + + +BROWSER far *Browser; +PROJECT Project; + +int main(void){ + + erroroccurred = 0; + + if( ( Browser = (BROWSER far *)farmalloc( 250 * sizeof(BROWSER) ) ) == NULL ) + { + cprintf("\n\r Memoria insuficiente\n\r"); + return 0; + } + + Initialize( 9, 2 ); // Inicializa el Modo Gr fico + carga_botones("Compacta.img"); // Carga botones del fichero "botones.p1" + + + Imprime_Estaticos( 1, "Compacta.img"); // Imprime botones estaticos 'Seccion 1' + + Borde_Activo = B_Browser; + Marca_Bordes(); + + startceh(); + olddrive = getdisk(); + getcwd( oldpath, 229 ); + + strcpy( Comodin, "*.*" ); + + LastPosicion=0; + /* + ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß + */ + Project.DirectorioExe[0] = NULL; + Project.FilesAdded = 0; + Project.Selected[0] = 0; + LastSelected = 0; + Project.ExeInfo.Longitud = 0; + + /* + ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û±°±Û + ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß ßßß + */ + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + +while(1){ // Bucle infinito + + switch( Comprueba_Secuencia( 1 ) ) { // Iniciamos comprobacion + + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -2: // Hay una tecla normal en BUFFER + switch( getch() ) + { + case 13: + if ( Borde_Activo == B_Browser ) + { + if ( SelectBrowser() ) + AddFile(); + } else + if ( Borde_Activo == Files_Added && Project.FilesAdded != 0 ) + SelectFile(); + + Refresh(); + break; + } + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Editar nombre del destino. + case 32: + Borde_Activo = Fichero_EXE ; + Marca_Bordes(); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + InputCadenaG(Project.DestName, 0, 13, EGA_BLACK, EGA_CYAN, 441, 12, 539, 27); + break; + // Editar nombre de macro para el C¢digo ID. + case 49: + if ( Project.FilesAdded != 0 ) + { + Borde_Activo = Info_Fich_Cola ; + Marca_Bordes(); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + InputCadenaG(Project.Macro[CurrRow], 0, 13, EGA_BLACK, EGA_CYAN, 263, 173, 364, 188); + Borde_Activo = Files_Added; + Marca_Bordes(); + } + break; + // Inicio + case 71: + + if ( ( Borde_Activo == Files_Added ) && Project.FilesAdded != 0 ) + { + ShowHideSelect( HIDE ); + ShowInfo(HIDE); + CurrRow = 0; + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + break; + // Fin + case 79: + if ( ( Borde_Activo == Files_Added ) && Project.FilesAdded != 0 ) + { + ShowHideSelect( HIDE ); + ShowInfo(HIDE); + CurrRow = Project.FilesAdded - 1; + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + break; + // Flecha Arriba + case 72: + if ( Borde_Activo == B_Browser ) + UpBrowser(); + else + if ( ( Borde_Activo == Files_Added || Borde_Activo == Info_Fich_Cola ) && Project.FilesAdded != 0 ) + UpSelect(); + break; + // Flecha Abajo + case 80: + if ( Borde_Activo == B_Browser ) + DownBrowser(); + else + if ( ( Borde_Activo == Files_Added ) && Project.FilesAdded != 0 ) + DownSelect(); + break; + // Avanzar P gina + case 81: + if ( Borde_Activo == B_Browser ) + { + BrowserTop += 15; + while( (BrowserTop + BrowserRow) >= maxfiles && BrowserTop > 0 ) BrowserTop--; + while( (BrowserTop + BrowserRow) >= maxfiles && BrowserRow > 0 ) BrowserRow--; + //////// Redibuja Browser + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } + break; + // Retroceder P gina + case 73: + if ( Borde_Activo == B_Browser ) + { + BrowserTop -= 15; if ( BrowserTop < 0 ) BrowserTop = 0; + while( (BrowserTop + BrowserRow) < 0 ) BrowserRow++; + //////// Redibuja Browser + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } + break; + } + break; + case Select_EXE : + Borde_Activo = B_Browser; + strcpy( Comodin, "*.EXE" ); + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + //////// Redibuja Browser + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + //////// Espera hasta seleccionar un .EXE + char Done_Exe = 0; + while( !Done_Exe ) + { + switch( Comprueba_Secuencia( 1 ) ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -2: + switch( getch() ) + { + case 13: + if ( SelectBrowser() ) + { + Project.ExeInfo = Browser[BrowserRow + BrowserTop]; + getcwd(Project.DirectorioExe, 200); + } + Done_Exe = 1; + break; + case 27: + Done_Exe = 1; + break; + } + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Arriba + case 72: + UpBrowser(); + break; + // Flecha Abajo + case 80: + DownBrowser(); + break; + // Avanzar P gina + case 81: + BrowserTop += 15; + while( (BrowserTop + BrowserRow) >= maxfiles && BrowserTop > 0 ) BrowserTop--; + while( (BrowserTop + BrowserRow) >= maxfiles && BrowserRow > 0 ) BrowserRow--; + //////// Redibuja Browser + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + break; + // Retroceder P gina + case 73: + BrowserTop -= 15; if ( BrowserTop < 0 ) BrowserTop = 0; + while( (BrowserTop + BrowserRow) < 0 ) BrowserRow++; + //////// Redibuja Browser + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + break; + } + break; + case Subir_Browser : + Borde_Activo = B_Browser; + UpBrowser(); + break; + case Select_Browser : + Borde_Activo = B_Browser; + if ( SelectBrowser() ) + { + Project.ExeInfo = Browser[BrowserRow + BrowserTop]; + getcwd(Project.DirectorioExe, 200); + } + Done_Exe = 1; + break; + case Bajar_Browser : + Borde_Activo = B_Browser; + DownBrowser(); + break; + } + } + //////// Miramos si el EXE ya ha sido tratado y ense€amos los + //////// ficheros que contiene.... + Check_EXE(); + strcpy( Comodin, "*.*" ); + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + Refresh(); + break; + case Load_PRJ : + Load_Project(); +// Refresh_all(); + break; + case Save_PRJ : + Save_Project(); + break; + case Make_H : + Make_Header(); + break; + case Ins : + if ( Borde_Activo == Files_Added ) + { + Borde_Activo = B_Browser; + Marca_Bordes(); + Refresh(); + } + break; + case Supr : + if ( Borde_Activo == Files_Added ) + Delete_Added(); + Refresh(); + break; + case Join_Files : + Start_Join(); + break; + case Sort_Cola : + FSort_Cola(); + break; + case SWAP : + switch( Borde_Activo ) + { + case Fichero_EXE : + Borde_Activo = Info_Fich_Cola ; + Marca_Bordes(); + break; + case Info_Fich_Cola : + Borde_Activo = B_Browser ; + Marca_Bordes(); + break; + case B_Browser : + if ( EXE_is_JD ) + Borde_Activo = Files_Already_Added ; + else + Borde_Activo = Files_Added ; + Marca_Bordes(); + break; + case Files_Already_Added : + Borde_Activo = Files_Added ; + Marca_Bordes(); + break; + case Files_Added : + Borde_Activo = Fichero_EXE ; + Marca_Bordes(); + break; + } + break; + case Subir_Browser : + Borde_Activo = B_Browser; + UpBrowser(); + break; + case Select_Browser : + Borde_Activo = B_Browser; + if ( SelectBrowser() ) + AddFile(); + break; + case Bajar_Browser : + Borde_Activo = B_Browser; + DownBrowser(); + break; + case Exit: + farfree(Browser); + stopceh(); + restorecrtmode(); + setdisk(olddrive); + chdir(oldpath); + return 0; + default: + break; + } + +} + +} + + +void Marca_Bordes( void ) +{ + /// Primero los ponemos todos en verde + Imprime_Bordes(2, Fichero_EXE, -1); + Imprime_Bordes(2, Info_Fich_Cola, -1); + Imprime_Bordes(2, B_Browser, -1); + Imprime_Bordes(2, Files_Already_Added, -1); + Imprime_Bordes(2, Files_Added, -1); + + /// Luego marcamos el borde seleccionado + Imprime_Bordes(2, Borde_Activo, 4); +} + +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// Û F U N C I O N E S S E L E C C I O N A R I N F O A R C H . Û +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ + +void UpSelect( void ) + { + if ( CurrRow != 0 ) + { + ShowHideSelect( HIDE ); + CurrRow--; + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + } + +void DownSelect( void ) + { + if ( CurrRow < (Project.FilesAdded - 1) ) + { + ShowHideSelect( HIDE ); + CurrRow++; + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + } + +void ShowHideSelect( char Hide_Show ) + { + char VirRow, VirCol; + char Buffer[80]; + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + + VirCol = CurrRow / 17; + VirRow = CurrRow - ( VirCol * 17 ); + + if ( Hide_Show == HIDE ) + { + setfillstyle( SOLID_FILL, EGA_BLACK ); + bar( 131 + (VirCol*130), 215 + 3 + (VirRow*15), 131 + 130 + (VirCol*130), 215 + 3 + 10 + (VirRow*15) ); + setcolor( EGA_WHITE ); + } else { + setfillstyle( SOLID_FILL, EGA_CYAN ); + bar( 131 + (VirCol*130), 215 + 3 + (VirRow*15), 131 + 130 + (VirCol*130), 215 + 3 + 10 + (VirRow*15) ); + setcolor( EGA_BLACK ); + } + + if(Project.Selected[CurrRow]!=0) + { + sprintf( Buffer, "% 3d", Project.Selected[CurrRow] ); + outtextxy( 131 + (VirCol*130), 215 + (VirRow*15), Buffer ); + } + + sprintf( Buffer, " %s", Project.Cola[CurrRow].Fichero ); + outtextxy( 131 + (VirCol*130), 215 + (VirRow*15), Buffer ); + } + +void SelectFile(void) + { + + if ( Project.FilesAdded != 0 ) + { + if ( !Project.Selected[ CurrRow ] ) + { + LastSelected++; + Project.Selected[ CurrRow ] = LastSelected; + } else { + char OldRow = CurrRow; + CurrRow = 0; + while( CurrRow < Project.FilesAdded ) + { + if ( Project.Selected[ CurrRow ] != 0 && Project.Selected[ CurrRow ] > Project.Selected[ OldRow ] ) + { + Project.Selected[ CurrRow ] --; + ShowHideSelect( HIDE ); + } + CurrRow++; + } + LastSelected--; + CurrRow = OldRow; + Project.Selected[ CurrRow ] = 0; + ShowHideSelect( HIDE ); + } + if ( CurrRow + 1 < Project.FilesAdded ) { + ShowHideSelect( HIDE ); + CurrRow++; + } + + ShowHideSelect( SHOW ); + ShowInfo( HIDE ); + } + + } + +void AddFile(void) + { + if ( Project.FilesAdded != 51 ) + { + ShowHideSelect( HIDE ); + Project.FilesAdded++; + CurrRow = Project.FilesAdded - 1; + strcpy( Project.Cola[ CurrRow ].Fichero, Browser[ BrowserRow + BrowserTop ].Fichero ); + Project.Cola[ CurrRow ]. Longitud = Browser[ BrowserRow + BrowserTop ]. Longitud; + Project.Cola[ CurrRow ]. Posicion = LastPosicion; + LastPosicion += Project.Cola[ CurrRow ]. Longitud; + Project.Selected[ CurrRow ] = 0; + getcwd( Project.Directorio[ CurrRow ], 200 ); + strcpy( Project.Macro[ CurrRow ] , "\0" ); + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + } + +void Make_Header(void) +{ + char Avance = 0; + FILE *handle_h; + + fprintf(handle_h, " /*****************\ \n"); + fprintf(handle_h, "|* C O M P A C T A *| \n"); + fprintf(handle_h, "|* À------------------------------*|\n"); + fprintf(handle_h, "|* Programa realizado por JOSE DAVID GUILLEN *|\n"); + fprintf(handle_h, "|* *|\n"); + fprintf(handle_h, "|* *|\n"); + fprintf(handle_h, "|* Cuando tenga que referirse a un fichero interno *|\n"); + fprintf(handle_h, "|* solo tiene *|\n"); + fprintf(handle_h, "|* *|\n"); + fprintf(handle_h, "|* *|\n"); + fprintf(handle_h, "|* *|\n"); + fprintf(handle_h, " \*************************************************/ \n"); + + while( Avance < Project.FilesAdded+1 ) + { + if( strlen( Project.Macro[ Avance ] ) ) + { + fprintf(handle_h, "#define %15s % 3d\n", Project.Macro[ Avance ], (int)Avance ); + } + Avance++; + } +} + +void Delete_Added(void) + { + if ( Project.FilesAdded != 0 ) + { + Project.FilesAdded--; + + LastPosicion -= Project.Cola[ CurrRow ].Longitud; + + char Avance = 0; + if ( Project.Selected[ CurrRow ] ) + { + while( Avance < Project.FilesAdded+1 ) + { + if ( Project.Selected[ Avance ] != 0 && Project.Selected[ Avance ] > Project.Selected[ CurrRow ] ) + Project.Selected[ Avance ] --; + Avance++; + } + LastSelected--; + Project.Selected[ CurrRow ] = 0; + } + Avance = CurrRow; + while( Avance < 51 ) + { + Project.Cola[ Avance ] = Project.Cola[ Avance + 1 ]; +// LastPosicion = Project.Cola[ Avance /*- 1*/]. Longitud; + Project.Cola[ Avance ]. Posicion = ( (Avance==0) ? + Project.ExeInfo.Longitud + : + ( Project.Cola[ Avance - 1 ].Posicion + Project.Cola[ Avance - 1].Longitud ) + ); + Project.Selected[ Avance ] = Project.Selected[ Avance + 1] ; + strcpy( Project.Directorio[ Avance ], Project.Directorio[ Avance + 1 ] ); + Avance++; + } + + if ( CurrRow > Project.FilesAdded - 1 ) CurrRow = Project.FilesAdded - 1; + if ( Project.FilesAdded == 0 ) { + CurrRow = 0; + LastPosicion = 0; + } + All_Screen(); + if ( CurrRow != 0 || Project.FilesAdded > 0 ) + { + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + } + else + { + strcpy( Project.Cola[0].Fichero , "\0" ); + strcpy( Project.Directorio[0] , "\0" ); + strcpy( Project.Macro[0] , "\0" ); + ShowInfo(HIDE); + } + + } + } + +void FSort_Cola(void) + { + + if ( Project.FilesAdded != 0 ) + { + char Avance = Project.FilesAdded - 1; + char Pos = Project.FilesAdded - 1; + + COLA Cola; + char Directorio[200]; + char Selected; + char Macro[15]; + + // 1§ Vemos cuantos archivos tenemos que ordenar y dejamos los que no + // tenemos que ordenar al final ( pero sin alterar su orden ). + while( Avance >= 0 ) + { + if ( Project.Selected[ Avance ] == 0 ) + { + strcpy( Macro, Project.Macro[ Pos ] ); + strcpy( Directorio, Project.Directorio[ Pos ] ); + Cola= Project.Cola[ Pos ] ; + Selected = Project.Selected[ Pos ] ; + // 1 arc001 arc001 + strcpy( Project.Macro[ Pos ], // + Project.Macro[ Avance ] ); // arc002 >ÄÄÄ¿ arc003 + // ³ + strcpy( Project.Directorio[ Pos ], // 2 arc003 ³ arc007 + Project.Directorio[ Avance ] ); // ³ + // arc004 >ÄÄ¿³ arc006 + Project.Cola[ Pos ] = // ³³ + Project.Cola[ Avance ]; // arc005 >Ä¿³ÀÄÄ> arc002 + // ³³ + Project.Selected[ Pos ] = // 4 arc006 ³ÀÄÄÄ> arc004 + Project.Selected[ Avance ]; // ³ + // 3 arc007 ÀÄÄÄÄ> arc005 + + strcpy( Project.Macro[ Avance ], Macro ); + strcpy( Project.Directorio[ Avance ], Directorio ); + Project.Cola[ Avance ] = Cola; + Project.Selected[ Avance ] = Selected; + + Pos--; + } + + Avance--; + } + + // Ahora procederemos a la ordenacion de los ficheros seleccionados + + /*******************************************************************\ // |\ + |* El bucle se debe a que he observado unos fallos en el sistema de *| // | \ + |* ordenanci¢n y dado que me sobra la velocidad, y falta memoria *| // || \ + |* prefiero realizar un proceso "recursivo" varias veces... *| // || J \ + \*******************************************************************/ // ||__D_\ + /* || + __ __ __ __ :____|_|____: + __ / \__ / \__ / \__ / \__ / \__ Ultimamente me estoy \ \|\\\^///|/ + \ __/ \ __ / \ __ / \ __/ \ __ / aficionando a realizar \ __--__- \\\^/// --__-___-_--- + __ / \__ / \__ / \__ / \__ / \__ dibujitos en los comentarios \ \_/ + / \ / \ / \ / \ / \ / \ \ ___ + | JD | | JD | | JD | | JD | | JD | | JD | Estoy aburrido de realizar cosas \__ + \ / \ / \ / \ / \ / \ / peque€as y sin otro valor mas que'l mio. \ + ùù ùù ùù ùù ùù ùù + */ + for( char i=0; i <= Project.FilesAdded; i++ ) + { + Avance = 0; + while( Avance < 51 ) + { + if ( Project.Selected[ Avance ] != 0 ) + { + if( (Pos = Project.Selected[ Avance ] - 1) != Avance ) + { + strcpy( Macro, Project.Macro[ Pos ] ); + strcpy( Directorio, Project.Directorio[ Pos ] ); + Cola= Project.Cola[ Pos ]; + Selected = Project.Selected[ Pos ]; + + // 1 arc001 >------> arc001 + strcpy( Project.Macro[ Pos ], // + Project.Macro[ Avance ] ); // arc002 Ú----> arc003 + // | + strcpy( Project.Directorio[ Pos ], // 2 arc003 >-Ù Ú--> arc007 + Project.Directorio[ Avance ] ); // | + // arc004 |Ú-> arc006 + Project.Cola[ Pos ] = // || + Project.Cola[ Avance ]; // arc005 || arc002 + // || + Project.Selected[ Pos ] = // 4 arc006 >---ÅÙ arc004 + Project.Selected[ Avance ]; // | + // 3 arc007 >---Ù arc005 + + strcpy( Project.Macro[ Avance ], Macro ); + strcpy( Project.Directorio[ Avance ], Directorio ); + Project.Cola[ Avance ] = Cola; + Project.Selected[ Avance ] = Selected; + } + } + Avance++; + } + } + + // Antes de irnos no debemos olvidar de recalcular las posiciones de cola + Avance = 0; + long LastSize = Project.ExeInfo.Longitud; + while( Avance < Project.FilesAdded + 1 ) + { + Project.Cola[Avance].Posicion = LastSize; + LastSize += Project.Cola[Avance].Longitud; + Avance++; + } + + All_Screen(); + ShowHideSelect( SHOW ); + ShowInfo(HIDE); + + } + + } + + +void ShowInfo( int Hide_Show ) +{ + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + + char Buffer[80]; + char Buffer1[80]; + + if ( Hide_Show == HIDE ) + { + setfillstyle( SOLID_FILL, EGA_BLACK ); + bar ( 263, 97, 364, 112); + bar ( 441, 97, 539, 112); + bar ( 441, 117, 539, 132); + bar ( 263, 153, 539, 168); + bar ( 263, 173, 364, 188); bar ( 441, 175, 539, 188); + + setcolor( EGA_WHITE ); + } else { + setfillstyle( SOLID_FILL, EGA_CYAN ); + bar ( 263, 97, 364, 112); + bar ( 441, 97, 539, 112); + bar ( 441, 117, 539, 132); + bar ( 263, 153, 539, 168); + bar ( 263, 173, 364, 188); bar ( 441, 175, 539, 188); + setcolor( EGA_BLACK ); + } + + outtextxy( 265, 97, Project.Cola[CurrRow].Fichero ); + formatea_long( Project.Cola[CurrRow].Longitud, Buffer ); + sprintf( Buffer1, "%12s", Buffer); + outtextxy( 441, 97, Buffer1 ); + formatea_long( Project.Cola[CurrRow].Posicion, Buffer ); + sprintf( Buffer1, "%12s", Buffer); + outtextxy( 441, 117, Buffer1 ); + + // Aunque guardo el directorio completo, prevengo de salirme de mi campo. + strcpy( Buffer, Project.Directorio[CurrRow] ); + + if ( strlen(Buffer) > 35 ) + { + + // Acorta el Buffer poniendo al principio U:\...[DIRECTORIO] + char Buffer1[80]; + + // Primero copiamos en Buffer1 los 31 ultimos caracteres de Buffer + strncpy( Buffer1, strrev(Buffer), 31 ); Buffer1[30] = NULL; + strrev( Buffer1 ); + // Despues conservamos solo de Buffer [Und][:][\] + strrev(Buffer); Buffer[3] = NULL; + // Y agregamos [...] + strcat( Buffer, "..." ); + // Ya podemos unirlo todo + strcat( Buffer, Buffer1 ); + } + + outtextxy( 264, 153, Buffer ); + outtextxy( 263, 173, Project.Macro[CurrRow] ); + sprintf( Buffer, "%12d", CurrRow ); + outtextxy( 441, 175, Buffer ); + + + +} + +void All_Screen(void) + { + char OldRow = CurrRow; + char VirCol, VirRow; + + for ( CurrRow = 0; CurrRow < Project.FilesAdded; CurrRow++ ) + ShowHideSelect( HIDE ); + + for ( CurrRow ; CurrRow < 51 ; CurrRow++ ) + { + VirCol = CurrRow / 17; + VirRow = CurrRow - ( VirCol * 17 ); + setfillstyle( SOLID_FILL, EGA_BLACK ); + bar( 131 + (VirCol*130), 215 + 3 + (VirRow*15), 131 + 130 + (VirCol*130), 215 + 3 + 10 + (VirRow*15) ); + } + + CurrRow = OldRow; + } + +void Refresh(void) +{ + char Buffer[80]; + + setfillstyle( SOLID_FILL, 0 ); + // Exe Origen + bar( 263, 12, 364, 27 ); + // Exe Destino + bar( 441, 12, 539, 27 ); + // Long1 + bar( 346, 42, 439, 57 ); + // Long2 + bar( 461, 42, 505, 57 ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + + outtextxy( 441, 12, Project.DestName ); + outtextxy( 263, 12, Project.ExeInfo.Fichero ); + + char Buf1[80]; + formatea_long( LastPosicion, Buf1 ); + sprintf( Buffer, "% 11s", Buf1 ); + outtextxy( 346, 42, Buffer ); + + sprintf( Buffer, "% 5u", (unsigned int)(sizeof(COLA)*Project.FilesAdded + 18 ) ); + outtextxy( 461, 42, Buffer ); + + +} + +// +// ÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜ Ü Ü ÜÜÜ ÜÜÜÜÜ ÜÜÜÜ ÜÜÜ Ü ÜÜÜÜ Ü Ü ÜÜÜÜÜ +// Û Û Û Û Û ÛßÜßÛ Û Û Û Û Û Û Û Û Û ÛÛ Û Û +// Ûßß Û Û ÛßÛß Û Û ÛßßßÛ Û Ûßß ÛßßßÛ Û Û Û Û Û Û Û ÜÜÜ +// Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û ÛÛ Û Û +// ß ßßßßß ß ß ß ß ß ß ß ßßßß ß ß ßßßß ßßßß ß ß ßßßßß + +void /*char **/formatea_long( long Numero, char *Inter_Chg ) { + + char Buffer1[80]; + char Buffer2[80]; + int c; + + sprintf(Buffer1, "%ld", Numero); + strcpy(Buffer2, "\0"); + strrev(Buffer1); + c = strlen( Buffer1 ); + while( c >= 3 ){ + c -= 3; + strncat( Buffer2, Buffer1, 3); + strrev(Buffer1); + Buffer1[c] = '\0'; + strrev(Buffer1); + if(strlen(Buffer1)!=0) + strcat( Buffer2, "." ); + } + strcat( Buffer2, Buffer1); + +strrev(Buffer2); +strcpy(Inter_Chg, Buffer2); + +//return Buffer2; +} + + +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int left, int up, int right, int down) +{ + + int ls; // longitud cadena + char *s1; // puntero a cadena inicial + int c, ok = 0; + + s1 = s; // inicio cadena + ls = strlen ( s ); // Longitud de actual + s += ls; // se coloca en el final + + setfillstyle(SOLID_FILL, cf); + do{ + bar(left, up, right, down); + setcolor(cc); + outtextxy( left, up-2, s1 ); + if ( ls < lmax ) { + setcolor(4); + outtextxy( left+textwidth( s1 ), up-2, "<"); + } + + + switch( c = getch() ) // obtiene tecla + { + case 0: + case 13: + ok = 1; // 13 = INTRO || Especiales + break; + case 8: + if ( ls > 0 ) { // 8 = Back Space + ls--; + s--; + *s = '\0'; + } + break; + case 27: + *s='\0'; + ok = 1; + break; + default: + if ( !numalp && c >= 32 && c <= 254 && ls < lmax) + { + *s++ = toupper(c); + ls++; + *s = '\0'; + } else + if ( numalp && isdigit(c) && ls < lmax) { + *s++ = c; + ls++; + *s = '\0'; + } + break; + } + + }while(!ok); + + ok = 1; + *s = ' '; + while( ok ) { + if(*s==' ') { *s = '\0'; s--; + } else { s++; ok = 0; } + } + + *s = '\0'; + + while(kbhit()) getch(); // Vacia Buffer impidiendo falsas + // pulsaciones... + + return ls; +} diff --git a/COMPACTA.H b/COMPACTA.H new file mode 100644 index 0000000..2e7a789 --- /dev/null +++ b/COMPACTA.H @@ -0,0 +1,215 @@ +//////////////// Recuadros de Selecci¢n +#define Fichero_EXE 1 +#define Info_Fich_Cola 2 +#define B_Browser 3 +#define Files_Already_Added 4 +#define Files_Added 5 + +//////////////// Botones +#define Select_EXE 1 +#define Load_PRJ 2 +#define Save_PRJ 3 +#define Make_H 4 +#define Sort_Cola 5 +#define Join_Files 6 +#define Ins 7 +#define Supr 8 +#define SWAP 9 +#define Exit 10 +#define Subir_Browser 11 +#define Select_Browser 12 +#define Bajar_Browser 13 + + +///// +#define HIDE 0 +#define SHOW 1 + + /************************************************************************\ + ³±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³ + \************************************************************************/ + +typedef struct + { + char Fichero[13]; + long Longitud; + unsigned char attrs; + } BROWSER; + +typedef struct + { + char Fichero[13]; + long Longitud; + long Posicion; + } COLA; + +typedef struct + { + BROWSER ExeInfo; + char DirectorioExe[200]; + char DestName[13]; + char FilesAdded; + COLA Cola[51]; + char Directorio[51][200]; + char Selected[51]; + char Macro[51][15]; + } PROJECT; + +typedef struct + { + char ID_Code; // Debe contener una constante de comprobacion 'J' + char ID_check; // igual que el anterior pero conteniendo 'D' + char JD_string[11]; // aqui debe haber escrito "Jos‚ David" + NULL + long Org_Long; // Longitud original del EXE... + char N_Files_Added; + } EXE_COLA; + + /************************************************************************\ + ³±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³ + \************************************************************************/ + + + + + /************************************************************************\ + ³±±±±±±±±±±±±F±U±N±C±I±O±N±E±S±±±D±E±L±±±S±E±L±E±C±T±±±F±I±L±E±S±±±±±±±±±±±³ + \************************************************************************/ + +#ifndef __Modulo_Principal + #define JD_ch extern +#else + #define JD_ch +#endif + +JD_ch void formatea_long( long Numero, char *Inter_Chg ); +JD_ch void ShowHideSelect( char Hide_Show ) ; +JD_ch void Delete_Added( void ) ; +JD_ch void Marca_Bordes( void ) ; +JD_ch void All_Screen( void ) ; +JD_ch void DownSelect( void ) ; +JD_ch void UpSelect( void ) ; +JD_ch void AddFile( void ) ; +JD_ch void ShowInfo( int Hide_Show ) ; +JD_ch void SelectFile( void ) ; + +JD_ch void Start_Join(void) ; +JD_ch void Load_Project(void) ; +JD_ch void Save_Project(void) ; +JD_ch void Make_Header(void) ; +JD_ch void Check_EXE(void) ; + +#ifdef __Modulo_Principal + void Start_Join(void) {} + void Load_Project(void) {} + void Save_Project(void) {} + void Make_Header(void) ; + void Check_EXE(void) {} + void FSort_Cola(void) ; +#endif + +#undef JD_ch + + /************************************************************************\ + ³±±±±±±±±±±±±±±F±U±N±C±I±O±N±E±S±±±D±E±L±±±B±R±O±W±S±E±R±±±±±±±±±±±±±±±±±±±³ + \************************************************************************/ + +#ifndef __Modulo_Browser + #define JD_ch extern +#else + #define JD_ch +#endif + +JD_ch unsigned int RasterScan( void ) ; +JD_ch void ShowHideBrowserRow( char Hide_Show ) ; +JD_ch void ReDraw_Browser( void ) ; +JD_ch void Fill_Directory( void ) ; +JD_ch int SelectBrowser( void ) ; +JD_ch void DownBrowser( void ) ; +JD_ch void UpBrowser( void ) ; + +#undef JD_ch + + /**************************************************************************\ +³ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ³ + \**************************************************************************/ +/* + + , + \ + \ ! + ___________________________\___ ÚÄ¿ + / / ³ ÚÄ¿\ ÀÂÙ + / / ³ ÀÂÙ \ ÚÅÙ + /__/ ³__Ã-_ÿ \ ÚÁ¿ ÚÄ¿ +----- ³ ____ ____ \____\___ ---------ÀÂÙ---- + / / __ \ / __ \ ³# ------ÚÅ¿ + ³/ / \ \ ________________ / / \ \ \¿ -------|ß| + ÚÙ | JD | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ | JD | ÀÄÄÄÄÄÄÄÙ ________ + À \ / \ / ________ +______________ùù____________________________ùù_______________________________ + + + |||||||||====== + / ___ \==== + / ___ / __ + / / __/ ³ \ + | / ³ \ ÀÄÄ| + \ | ÀÄÄ| / + | \ / ù-------\ + \ ùù ---------/ + \ \======/ | + \_________/ + +*/ +#ifndef __Modulo_Principal + #define JD_ch extern +#else + #define JD_ch +#endif + +JD_ch char Borde_Activo; // Indica el recuadro actualmente activo +JD_ch char Comodin[13]; // Comodin de rastreo para el Browser + +JD_ch char EXE_is_JD; // El EXE cargado ha sido tratado por JD +JD_ch char FilesAdded; // Numero de Ficheros a€adidos a la cola +JD_ch char CurrRow; // Linea actual en la cola.............. +JD_ch char BrowserRow; +JD_ch int BrowserTop; +JD_ch int maxfiles; +JD_ch char oldpath[229]; //internal. do not change +JD_ch unsigned char olddrive; //impossible drive name +JD_ch char olddisk, key; +JD_ch long LastPosicion; // Esta variable guarda la ultima posici¢n dentro +JD_ch char LastSelected; // del ejecutable y la siguiente, el £ltimo se€alado + + +//////////////////////////////////////////////////////////////////////////// +/***************************************************************************\ +| Critical Disk Error handling routines (C) 1995 Jason Speight. | +| void interrupt critical_error_handler(__CPPARGS) is the interrupt which | +| captures disk io errors. (int 0x24, if you're interested!) Such errors | +| are : Disk not inserted in drive, seek error reading from a drive, general| +| disk failure etc. The only things the interrupt does is : | +| Suppress the dos ABORT,RETRY,FAIL,IGNORE statement | +| Sets a variable erroroccurred to the dos error statement. (!=0) | +| | +| StartCEH() and StopCEH() start and stop the error handler. YOU MUST | +| STOPCEH BEFORE THE EXIT OF THE PROGRAM. or else when you get a disk | +| error, the int 24 issued bu DOS points to the middle of nowhere! *HANG* | +| | +| diskerror() is my routine to display a disk IO error. It also sets the | +| global variable erroroccurred to 0 for future use. This procedure also | +| needs access to "SCRNHNDL.H" and "BOXES.H" | +| | +| BTW, anybody know how to trap the message "PLEASE INSERT DISK FOR DRIVE x"| +\***************************************************************************/ +//for interrupt handlers + +JD_ch void interrupt critical_error_handler(...) ; // interrupt prototype +JD_ch void interrupt (*old_int24)(...) ; // interrupt function pointer +JD_ch void startceh() ; +JD_ch void stopceh() ; + +JD_ch int erroroccurred; + +#undef JD_ch diff --git a/COMPACTA.IMG b/COMPACTA.IMG new file mode 100644 index 0000000..d0c61a0 --- /dev/null +++ b/COMPACTA.IMG @@ -0,0 +1,287 @@ +­1 + + +******* Fichero .EXE ********************** +& 189, 0, 555, 80, 7, 63, 56, -2, 1 + & 192, 3, 552, 77, 7, 2, 2, -3, 1 +& 196, 7, 548, 73, 7, 56, 63, 2, 1 + +**** Cuadro para Origen +& 262, 11, 365, 28, 0, 63, 56, 0, 1 +| 200, 11, 2, 5, 0, 63, Origen, + | 201, 12, 2, 5, 0, 0, Origen, +| 200, 12, 2, 5, 0, 63, _, + | 201, 13, 2, 5, 0, 4, _, + +**** Cuadro para Destino +& 440, 11, 540, 28, 0, 63, 56, 0, 1 +| 360, 11, 2, 5, 0, 63, Destino, + | 361, 12, 2, 5, 0, 0, Destino, +| 360, 12, 2, 5, 0, 63, _, + | 361, 13, 2, 5, 0, 4, _, + +**** Cuadro para tam€o de la cola + Indice +& 345, 41, 440, 58, 0, 63, 56, 0, 1 + +& 460, 41, 506, 58, 0, 63, 56, 0, 1 +*| 460, 41, 2, 5, 0, 63, 1234567890, + +| 200, 41, 2, 5, 0, 63, Tama€o de la cola, + | 201, 42, 2, 5, 0, 0, Tama€o de la cola, +| 200, 42, 2, 5, 0, 63, _, + | 201, 43, 2, 5, 0, 4, _, + +| 447, 41, 2, 5, 0, 63, +, + | 448, 42, 2, 5, 0, 0, +, + +| 501, 41, 2, 5, 0, 63, Bytes, + | 502, 42, 2, 5, 0, 0, Bytes, + + +**** Cuadro para DATOS EXTENDIDOS SOBRE INCLUSIàN +& 189, 85, 555, 200, 7, 63, 56, -2, 1 + & 192, 88, 552, 197, 7, 2, 2, -3, 1 +& 196, 92, 548, 193, 7, 56, 63, 2, 1 + +**** Cuadro para Nombre_Extendido +& 262, 96, 365, 113, 0, 63, 56, 0, 1 +| 195, 96, 2, 5, 0, 63, Nombre, + | 196, 97, 2, 5, 0, 0, Nombre, + +**** Cuadro para Longitud +& 440, 96, 540, 113, 0, 63, 56, 0, 1 +| 360, 96, 2, 5, 0, 63, Longitud, + | 361, 97, 2, 5, 0, 0, Longitud, +**** Cuadro para Posici¢n +& 440, 116, 540, 133, 0, 63, 56, 0, 1 +| 360, 116, 2, 5, 0, 63, Posici¢n, + | 361, 117, 2, 5, 0, 0, Posici¢n, + +**** Cuadro para Localizaci¢n +& 262, 152, 540, 169, 0, 63, 56, 0, 1 +| 195, 154, 2, 4, 0, 63, Directorio, + | 196, 155, 2, 4, 0, 0, Directorio, + +******* CUADROS PARA MACRO **************** +**** Cuadro para Posici¢n +& 262, 172, 365, 189, 0, 63, 56, 0, 1 +| 195, 174, 2, 4, 0, 63, Nombre ID, + | 196, 175, 2, 4, 0, 0, Nombre ID, +| 195, 175, 2, 4, 0, 63, _, + | 196, 176, 2, 4, 0, 4, _, +& 440, 174, 540, 189, 0, 63, 56, 0, 1 +| 360, 174, 2, 4, 0, 63, N£mero ID, + | 361, 175, 2, 4, 0, 0, N£mero ID, + + +******* BOTONES *************************** +************ Cuadro Para Botones ********** +& 560, 0, 640, 480, 7, 63, 56, -2, 1 +& 568, 8, 632, 472, 7, 56, 63, 2, 1 + + & 564, 4, 636, 476, 1, 2, 2, -3, 1 + +****** Botones: +* Seleccionar Fichero Ejecutable +& 570, 10, 629, 45, 7, 63, 56, 2, 1 +| 574, 13, 2, 5, 0, 63, Fichero, + | 575, 14, 2, 5, 0, 0, Fichero, +| 574, 25, 2, 5, 0, 63, .EXE, + | 575, 26, 2, 5, 0, 0, .EXE, +| 574, 14, 2, 5, 0, 63, _, + | 575, 15, 2, 5, 0, 4, _, +* +*& 570, 46, 629, 81, 7, 63, 56, 2, 1 + +* Cargar .PRJ +& 570, 62, 629, 98, 7, 63, 56, 2, 1 +| 574, 65, 2, 5, 0, 63, Cargar, + | 575, 66, 2, 5, 0, 0, Cargar, +| 574, 77, 2, 5, 0, 63, .PRJ, + | 575, 78, 2, 5, 0, 0, .PRJ, +| 574, 66, 2, 5, 0, 63, _, + | 575, 67, 2, 5, 0, 4, _, +* Salvar .PRJ +& 570, 99, 629, 134, 7, 63, 56, 2, 1 +| 574, 102, 2, 5, 0, 63, Salvar, + | 575, 103, 2, 5, 0, 0, Salvar, +| 574, 114, 2, 5, 0, 63, .PRJ, + | 575, 115, 2, 5, 0, 0, .PRJ, +| 574, 103, 2, 5, 0, 63, _, + | 575, 104, 2, 5, 0, 4, _, +* +*& 570, 155, 629, 190, 7, 63, 56, 2, 1 +* Crear Cabecera +& 570, 151, 629, 186, 7, 63, 56, 2, 1 +| 574, 154, 2, 5, 0, 63, Crear, + | 575, 155, 2, 5, 0, 0, Crear, +| 574, 170, 2, 4, 0, 63, Cabecera, + | 575, 171, 2, 4, 0, 0, Cabecera, +| 574, 155, 2, 5, 0, 63, _, + | 575, 156, 2, 5, 0, 4, _, +* Ordenar Ficheros de Cola +& 570, 187, 629, 222, 7, 63, 56, 2, 1 +| 574, 187, 2, 4, 0, 63, Ordenar, + | 575, 188, 2, 4, 0, 0, Ordenar, +| 574, 197, 2, 4, 0, 63, Ficheros, + | 575, 198, 2, 4, 0, 0, Ficheros, +| 574, 198, 2, 4, 0, 63, _, + | 575, 199, 2, 4, 0, 4, _, +| 574, 207, 2, 4, 0, 63, de Cola, + | 575, 208, 2, 4, 0, 0, de Cola, +* Encolar Ficheros +& 570, 223, 629, 258, 7, 63, 56, 2, 1 +| 574, 226, 2, 4, 0, 63, Encolar, + | 575, 227, 2, 4, 0, 0, Encolar, +| 576, 239, 2, 4, 0, 63, Ficheros, + | 577, 240, 2, 4, 0, 0, Ficheros, +| 574, 227, 2, 4, 0, 63, _, + | 575, 228, 2, 4, 0, 4, _, +* Insertar +& 570, 269, 629, 294, 7, 63, 56, 2, 1 +| 577, 274, 2, 4, 0, 63, Insertar, + | 578, 275, 2, 4, 0, 0, Insertar, +| 577, 275, 2, 4, 0, 63, ___, + | 578, 276, 2, 4, 0, 4, ___, +* Suprimir +& 570, 295, 629, 320, 7, 63, 56, 2, 1 +| 577, 300, 2, 4, 0, 63, Suprimir, + | 578, 301, 2, 4, 0, 0, Suprimir, +| 577, 303, 2, 4, 0, 63, ____, + | 578, 304, 2, 4, 0, 4, ____, +* +*& 570, 321, 629, 356, 7, 63, 56, 2, 1 + +* SWAP +& 570, 377, 629, 412, 7, 63, 56, 2, 1 +| 577, 382, 2, 7, 0, 63, SWAP, + | 578, 383, 2, 7, 0, 0, SWAP, + +* Salir +& 570, 443, 629, 469, 7, 63, 56, 2, 1 +| 571, 446, 2, 5, 0, 63, SALIR, + | 572, 447, 2, 5, 0, 0, SALIR, +| 571, 447, 2, 5, 0, 63, _, + | 572, 448, 2, 5, 0, 4, _, + + +******* BROWSER *************************** +& 0, 0, 184, 200, 7, 56, 63, -2, 1 +& 7, 7, 155, 175, 0, 63, 56, 1, 1 +& 3, 180, 181, 197, 0, 63, 56, 1, 1 + +*| 7, 184, 2, 4, 0, 63, MMMMMMMMM-MMMMMMMMM-MMMMMM7, + + + & 3, 3, 181, 179, 7, 2, 2, -3, 1 +**** Botones: Subir, Seleccionar, Bajar +& 156, 7, 177, 63, 7, 56, 63, 1, 2 +& 156, 63, 177, 119, 7, 56, 63, 1, 2 +& 156, 119, 177, 175, 7, 56, 63, 1, 2 + +| 158, 65, 2, 5, 1, 63, A€adir, + | 159, 66, 2, 5, 1, 0, A€adir, +| 158, 66, 2, 5, 1, 63, _ , + | 159, 67, 2, 5, 1, 4, _ , + +| 158, 15, 2, 5, 1, 63, Subir, + | 159, 16, 2, 5, 1, 0, Subir, + +| 158, 124, 2, 5, 1, 63, Bajar, + | 159, 125, 2, 5, 1, 0, Bajar, + + + +*| 10, 27, 2, 4, 0, 63, B: , +*| 10, 37, 2, 4, 0, 63, C: , +*| 10, 47, 2, 4, 0, 63, . , +*| 10, 57, 2, 4, 0, 63, .. , +*| 10, 67, 2, 4, 0, 63, CD_OUT0F.PCX 12.345.678, +*| 10, 77, 2, 4, 0, 63, CD_OUT0A.PCX 556.313, +*| 10, 87, 2, 4, 0, 63, CD_OUT .EXE 345.678, +*| 10, 97, 2, 4, 0, 63, BROWSER .EXE 5.621.128, +*| 10, 117, 2, 4, 0, 63, LEEME .TXT 678, +* & 573, 3, 637, 477, 4, 4, 4, -2, 1 + + +* x y fuente tama€o orientacion color texto + + + +******* Archivos ya incluidos y nuevos a€adidos +******* Archivos ya incluidos +& 0, 205, 115, 480, 7, 63, 56, -2, 1 + & 3, 208, 112, 477, 7, 2, 2, -3, 1 +& 7, 211, 108, 473, 0, 56, 63, 2, 1 + +***** Archivos a€adidos +& 120, 205, 555, 480, 7, 63, 56, -2, 1 + & 123, 208, 552, 477, 7, 2, 2, -3, 1 +& 127, 211, 548, 473, 0, 56, 63, 2, 1 +*| 13, 211, 2, 5, 0, 63, NNNNNNNN.EEE, + +*| 15, 220, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 235, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 250, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 265, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 280, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 295, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 310, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 325, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 340, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 355, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 370, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 385, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 400, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 415, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 430, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 445, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, +*| 15, 460, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE, + + +#1 + +!1,13 + + *************************************************** +* BOTONES DEL CUADRO DE BOTONES Y BROWSER * + *************************************************** +****** Botones: +* Seleccionar Fichero Ejecutable +$ 570, 10, 629, 45, 7, 63, 56, 2, 1, 00, 23 +* Cargar .PRJ +$ 570, 62, 629, 98, 7, 63, 56, 2, 1, 00, 46 +* Salvar .PRJ +$ 570, 99, 629, 134, 7, 63, 56, 2, 1, 00, 38 +* Crear Cabecera +$ 570, 151, 629, 186, 7, 63, 56, 2, 1, 00, 19 +* Ordenar Ficheros de Cola +$ 570, 187, 629, 222, 7, 63, 56, 2, 1, 00, 33 +* Encolar Ficheros +$ 570, 223, 629, 258, 7, 63, 56, 2, 1, 00, 18 +* Insertar +$ 570, 269, 629, 294, 7, 63, 56, 2, 1, 00, 82 +* Suprimir +$ 570, 295, 629, 320, 7, 63, 56, 2, 1, 00, 83 +* SWAP +$ 570, 377, 629, 412, 7, 63, 56, 2, 1, 00, 64 +* Salir +$ 570, 443, 629, 469, 7, 63, 56, 2, 1, 00, 31 +**** Botones: Subir, Seleccionar, Bajar ( BROWSER ) +$ 156, 7, 177, 63, 7, 56, 63, 1, 2, 00, 00 +$ 156, 63, 177, 119, 7, 56, 63, 1, 2, 00, 30 +$ 156, 119, 177, 175, 7, 56, 63, 1, 2, 00, 00 + + +!2,5 +************** Recuadros Selecci¢n de etapa +******* Fichero .EXE + $ 192, 3, 552, 77, 7, 2, 2, -3, 1, 00, 33 +**** Cuadro para DATOS EXTENDIDOS SOBRE INCLUSIàN + $ 192, 88, 552, 197, 7, 2, 2, -3, 1, 00, 00 +**** BROWSER + $ 3, 3, 181, 179, 7, 2, 2, -3, 1, 00, 00 +**** Archivos ya incluidos + $ 3, 208, 112, 477, 7, 2, 2, -3, 1, 00, 00 +**** Archivos a€adidos + $ 123, 208, 552, 477, 7, 2, 2, -3, 1, 00, 00 diff --git a/COMPACTA.PRJ b/COMPACTA.PRJ new file mode 100644 index 0000000000000000000000000000000000000000..fb59bdedf373835be5a1800c309a41a1d24d1730 GIT binary patch literal 6488 zcmeI0`EyfM6vxlY(uS7OvUUNQ2SkN3q$QMAP_gMt(gw0kk}7I2(l*ozB_(YT7uvdk zqoad5<4??}sE8{FT7PjFe_=*89YjF=$-h9w6-49t-qIAY>3fYqN5_}Wr{~@Kz2`3P z-22|W;bfvUE-P{%5x*nW)+@U@H^k%$l8UC3O8hV1MlRDwq$7zAF^LWf`-tFCk#bDf z?-nBWJ;C<{KVV99T;zT#c!H^?lgtJ>B~nfce#<&K1AGU3&yaqA^&=UG28e#b&Cf_a z3+o)0qLO_ErtTZqbh40>PXVVz-Jiq!g3S{8l4+n{Q0}c__Hdpp{jb1pNJ{}EaRy%` z=^11Ij6fdJ@)_kOM*9SYT)?10U?Nb&kR}1eKnc<&!+Mr$(>=$aUBL6G`~_Gq0=t2i zkhTZbKHyDYKX3qe8F+=Ee-+ki!0W&pz+T{OU=WysDyO3IX|SdPGk{WQXbj7cS1w_+ zDqzk8W3g z0o=}@E?^@NN7^P>JwOuJjI=vpZGm+ca5r!da4&-%2e#t259kL5fct>^fd?4$AgqUg zZMfYIJdE2%fJcGHfE~aSz>~mJfT4t81oD7nghm(dl4u@GttGNxzC~fe#8?*41U6C3N&m}gZ z#gdV1OWB8wjm0%JL`$Up>|ExqRIOA=Rb#qas;a0{Rn)60u2xknQ&lWiRa~R0xK>qh zovLDms^WT8MFR(JTl=DTvRAI&OmcT38Eai@ZI8E&`K)rAY5(WL(;=C7?$p=SbI+V? z*VZhnLnmEmnl+N!{*KR^!n4?_1On6~UKObn&u7ZxcddKSV=kc2Ow`vDbOtmy?MTGB zHOMqe7HwQ8Tf9#1{JPo&vc=~Q-DnTU7G8(Ffv{{*_{JM*nvcfW*jTVR-q|i!S=(gI z75q)Y!zrmREI!`sJw36m)(x>lrkca{kT+9aHtE&g)pGUCZn@eoTXO9?oAzW|=17W$ zMzGHjYfW}^WFA54ZO^un(aTw!tDQc(*ExFbzbEx*dI)&~v5xl+8H12|yIGOLp8Z#b z@K{O;_QiVQ$wXUBR^naVnMX0GbK5-4-ah8F(B0J?PxQ*3&ep`*MCaO# z84A0-ft-HcT5|0$L%T0`@+T?0qyNAD(g-Z2eZ0ri(crFH`NJ7Rp(VUe*AprHabZ`& zcJW0tv|)6$IDKJfC^DRtHiSl{75V%rWfTV=Q|KM8>qH)rkIUG&b|va^dz`|{@aFW- zb&Y6LY9cbx1S;TT8$MW|t&TWw=qHu!Fm#xeuXmkdI9?%a!m=0jFkl)F%R8>v(e0-G0r^6~AvB>Zq^9Y1ZNu~-ar!xMfFMLV;4y)kl(EtDd literal 0 HcmV?d00001 diff --git a/C_FILE.CPP b/C_FILE.CPP new file mode 100644 index 0000000..5ec6bd1 --- /dev/null +++ b/C_FILE.CPP @@ -0,0 +1,305 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include // Para getch(); +#include // Para outtextxy(...); y cleardevice(...); + +#include "make_bot.h" // Fuciones de MAKE_BOTON + +#define __Modulo_Browser +#include "compacta.h" + +extern BROWSER far *Browser; + +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ +// Û F U N C I O N E S p a r a e l B R O W S E R Û +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ +// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ + +void ReDraw_Browser(void) +{ + int OLD_Brw = BrowserRow; + // 1§ Borramos pantalla de muestreo... + setfillstyle( SOLID_FILL, EGA_BLACK ); + setcolor( EGA_BLACK ); + // Muestreo de archivos + bar( 9, 9, 153, 173 ); + + // 3§ Mostramos los nuevos Archivos + for ( BrowserRow = 0; BrowserRow < 16; BrowserRow++) + if ( ( BrowserRow + BrowserTop ) < maxfiles ) + ShowHideBrowserRow( HIDE ); + BrowserRow = OLD_Brw; +} + +void Fill_Directory(void) + { + char Buffer[180]; + // Recuadro del directorio + // 1§ Borramos pantalla de muestreo... + setfillstyle( SOLID_FILL, EGA_BLACK ); + setcolor( EGA_BLACK ); + bar( 5, 182, 179, 195 ); + + setcolor( EGA_YELLOW ); + getcwd( Buffer, 180 ); + if ( strlen( Buffer ) > 28 ) + { + // Acorta el Buffer poniendo al principio U:\...[DIRECTORIO] + char Buffer1[30]; + + // Primero copiamos en Buffer1 los 22 ultimos caracteres de Buffer + strncpy( Buffer1, strrev(Buffer), 22 ); Buffer1[22] = NULL; + strrev( Buffer1 ); + // Despues conservamos solo de Buffer [Und][:][\] + strrev(Buffer); Buffer[3] = NULL; + // Y agregamos [...] + strcat( Buffer, "..." ); + // Ya podemos unirlo todo + strcat( Buffer, Buffer1 ); + // + } + + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + outtextxy( 7, 184, Buffer ); + + } + +void ShowHideBrowserRow( char Hide_Show ) +{ + + char Buffer[80]; + char Longitud[80]; + + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + + if ( Hide_Show == HIDE ) + { + setfillstyle( SOLID_FILL, EGA_BLACK ); + bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) ); + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + setcolor( EGA_CYAN ); + break; + case 255: + setcolor( EGA_MAGENTA ); + break; + default: + setcolor( EGA_WHITE ); + } + } else { + + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + setfillstyle( SOLID_FILL, EGA_CYAN ); +// setcolor( EGA_CYAN ); + break; + case 255: + setfillstyle( SOLID_FILL, EGA_MAGENTA ); +// setcolor( EGA_MAGENTA ); + break; + default: + setfillstyle( SOLID_FILL, EGA_WHITE ); +// setcolor( EGA_WHITE ); + } + bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) ); + setcolor( EGA_BLACK ); + } + + + outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Browser[BrowserTop+BrowserRow].Fichero ); + formatea_long( Browser[BrowserTop+BrowserRow].Longitud, Longitud ); + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + sprintf ( Buffer, " DIRECTORIO", Longitud ); + break; + case 255: + sprintf ( Buffer, " < UNIDAD >", Longitud ); + break; + default: + sprintf ( Buffer, " %10s", Longitud ); + } + outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Buffer ); +} + +void DownBrowser(void) +{ + + // šš Estoy en la linea fisica 000 ??? + if ( (BrowserRow + BrowserTop) != (maxfiles - 1) ) { + + // Linea 0, Baja Con retroceso multiple + if ( BrowserRow == 15 ) { + BrowserTop += 16; + if ( (BrowserTop + BrowserRow) > maxfiles ) BrowserRow = 0; + while ( (BrowserTop + BrowserRow) > maxfiles ) BrowserTop--; + BrowserRow = 0; + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } else { + ShowHideBrowserRow( HIDE ); + BrowserRow++; + ShowHideBrowserRow( SHOW ); + } + + } +} + +void UpBrowser(void) +{ + + // šš Estoy en la linea fisica 000 ??? + if ( (BrowserRow + BrowserTop) != 0 ) { + + // Linea 0, Baja Con retroceso multiple + if ( BrowserRow == 0 ) { + BrowserTop -= 16; + if ( BrowserTop < 0 ) BrowserTop = 0; + BrowserRow = 0; + ReDraw_Browser(); + BrowserRow = 15; + ShowHideBrowserRow( SHOW ); + } else { + ShowHideBrowserRow( HIDE ); + BrowserRow--; + ShowHideBrowserRow( SHOW ); + } + + } +} + +int SelectBrowser(void) +{ + int RETURN = 1; + + switch( Browser[BrowserTop+BrowserRow].attrs ) + { + case FA_DIREC: + chdir( Browser[BrowserTop+BrowserRow].Fichero ); + BrowserRow = BrowserTop = 0; + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + RETURN = 0; + break; + case 255: + erroroccurred=0; + olddisk=getdisk(); + setdisk( (Browser[BrowserTop+BrowserRow].Fichero[0] - 'A') ); + if (erroroccurred) { + setdisk(olddisk); + } else { + BrowserRow = BrowserTop = 0; + // 2§ Realizamos un Scaneo del Directorio + BrowserTop = 0; BrowserRow = 0; + RasterScan(); + Fill_Directory(); + ReDraw_Browser(); + ShowHideBrowserRow( SHOW ); + } + RETURN = 0; + break; + default: + RETURN = 1; + } + + return RETURN; + +} + +unsigned int RasterScan(void) { + struct ffblk ffblk; + char done=0; + unsigned int olddisk; + maxfiles = 0; + unsigned char i; + +// build a disk drive availiable list + olddisk=getdisk(); + for (i=1;i<27;i++) if (_chdrive(i) == 0) + { + sprintf( Browser[maxfiles].Fichero, "%c:", (char)('A' + i - 1) ); + Browser[maxfiles].Longitud=0; + Browser[maxfiles].attrs=255; // Unidad + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + setdisk(olddisk); + +// drivelist[2]='N'; //stop access to B drive until I sort out pahntom dive probs +//Ok, Drive B may be a phantom drive. If you try to access drive B, then +//the program looses controll. Bummer! +// needs debugging. (always ignores drive b...) +// asm int 0x11 +// asm mov equipmentlist,ax +// drivelist[2]='N'; +// if ((equipmentlist & 16)) drivelist[2]='Y'; + + + done = findfirst("*.*",&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib == 0x10) { + strcpy(Browser[maxfiles].Fichero,ffblk.ff_name); + Browser[maxfiles].Longitud=ffblk.ff_fsize; + Browser[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + + done = findfirst(Comodin,&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib != 0x10) { + strcpy(Browser[maxfiles].Fichero,ffblk.ff_name); + Browser[maxfiles].Longitud=ffblk.ff_fsize; + Browser[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + return maxfiles; +} + +void interrupt critical_error_handler(.../*__CPPARGS*/) { + asm push ax //preserve only modified register + asm mov ax,di //di holds error code ranging from 0 to 0x0c +// asm inc ax + asm mov erroroccurred,ax //increase erroroccurred for ease of programming + asm mov al,0x20 + asm out 0x20,al //send interrupt clear flag +// asm pushf // I think I dont need this line in.... + asm pop ax //restore ax +} + +void startceh() { + old_int24 = _dos_getvect( 0x24 ); + _dos_setvect( 0x24, critical_error_handler); + } + +void stopceh() { + _dos_setvect(0x24,old_int24); + } diff --git a/EGAVGA.BGI b/EGAVGA.BGI new file mode 100644 index 0000000000000000000000000000000000000000..800163160dcf3473e5e18a35738a1385ffc999c7 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 diff --git a/KEY.CPP b/KEY.CPP new file mode 100644 index 0000000..4a5868c --- /dev/null +++ b/KEY.CPP @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +void *Pantalla; +int x,y; + +void main(void) + { + int key = 0, key1 = 1; + + if ( ( Pantalla = malloc( 4096 ) ) == NULL ) return; +// Guardamos el contenido de la pantalla + memcpy( Pantalla, MK_FP(0xB800,0), 4096 ); + x = wherex(); y = wherey(); + + clrscr(); + + cprintf( "Para Salir pulse ESC ( sc.27 )\n\r" ); + cprintf( "------------------------------\n\r" ); + while( key != 27 ) + { + if ( ( key = getch() ) ==0 ) key1 = getch(); else key1 = 0; + cprintf( " % 3d % 3d \n\r", key, key1 ); + } + + // Restauramos el contenido + memcpy( MK_FP(0xB800,0), Pantalla, 4096 ); + gotoxy( x, y ); + free( Pantalla ); + } \ No newline at end of file diff --git a/KEY.EXE b/KEY.EXE new file mode 100644 index 0000000000000000000000000000000000000000..719566bc652f236e00470cf479b28a014a2000e8 GIT binary patch literal 12757 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 F{{R$ajbi`+ literal 0 HcmV?d00001 diff --git a/LITT.CHR b/LITT.CHR new file mode 100644 index 0000000000000000000000000000000000000000..08c30672ea5a18f010183807f55c644c272ab1d4 GIT binary patch literal 5131 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 literal 0 HcmV?d00001 diff --git a/MAKE_BOT.H b/MAKE_BOT.H new file mode 100644 index 0000000..f1d7d19 --- /dev/null +++ b/MAKE_BOT.H @@ -0,0 +1,163 @@ +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ +// Û Errores devueltos por las Funciones Û +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß + +#define OK 1 +#define SIN_MEMORIA 5 +#define ERROR_ABRIENDO 6 +#define ERROR_CERRANDO 7 + +#define ON 1 +#define OFF 0 + +#define EOL 10 // Fin de linea + +#define MB_TeclaPulsada() ( *(unsigned *) MK_FP(0x40,0x1A) != *(unsigned *) MK_FP(0x40,0x1C) ) +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ +// Û Funciones propias de MAKE_BOTON Û +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Carga los botones del fichero *f_datos, devolviendo los ± + // ± errores indicados en #define xxxxx X ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + int carga_botones(char *f_datos); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Despliega los datos que fueron cargados. ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + void despliega_datos(void); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Imprime los botones estaticos de la secuencia Sec_st, en el ± + // ± fichero file. ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + int Imprime_Estaticos(int Sec_st, char *file); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Imprime los botones din micos de la secuencia Sec_num. ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + void Imprime_Secuencia(int Sec_num); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± ± + // ± Imprime un borde completo de color Color sobre el boton Boton, ± + // ± de la secuencia n£mero Sec_num. ± + // ± ± + // ± NOTA: ± + // ± Si color es negativo se imprimiran los bordes normales. ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + void Imprime_Bordes(int Sec_num, int Boton, int Color); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Comprueba la pulsaci¢n de los botones de la secuencia Sec_num ± + // ± ± + // ± Devuelve el n£mero de boton pulsado, 0 si no se pulso ninguno ± + // ± y deja en el buffer las teclas pulsadas si no corresponden con ± + // ± con las teclas asignadas a los botones. ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + int Comprueba_Secuencia(int Sec_num); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± Libera la memoria que ha sido asignada por Make_Boton. ± + // ± ± + // ± NOTA: ± + // ± DESPUES DE LIBERAR TODA LA MEMORIA DE M_B, NO SE DEBE ± + // ± UTILIZAR NINGUNA FUNCION SIN RECARGAR PRIMERO LOS BOTONES DE ± + // ± DE UN ARCHIVO CON ESTOS... ± + // ± ± + // ± FUNCION EXTRAIDA PARA USO COMUN, ESPECIALMENTE POR CD_out ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + void Libera_Memoria(void); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± ± + // ± Si True_Push se pone a ON, cuando se pulse un boton se hundira ± + // ± realmente, pero solo si hay suficiente memoria. ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + extern char True_Push; + +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ +// Û Funciones para el control de la Pantalla Û +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± ± + // ± Sirve para averiguar el tama€o necesitado por GetImage para ± + // ± obtener una imagen 256c, para los BGI no compatibles KERNEL. ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + unsigned long JD_imagesize(int left, int top, int right, int bottom); + + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + // ± ± + // ± Igual a InitGraph, pero realiza un mayor numero de comproba_ ± + // ± ciones, saliendo si ocurre algun error y mostrandolo... ± + // ± ± + // ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + void Initialize(int GraphDriver, int GraphMode); // Inicializa el Modo Gr fico + +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ +// Û Funciones para el control del Raton Û +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Muestra el cursor del Raton. - No sirve con el raton animado ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + void activa_raton(void); + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Desactiva el cursor del Raton. No sirve con el raton animado ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + void desactiva_raton(void); + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Regresa con una pulsaci¢n de tecla o la posici¢n en la cual ° + // ° se pulso el raton. ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + int Espera_Tecla_o_Raton(void); // <-> + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Sostiene el raton hasta que se suelte el boton presionado... ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + void Anclar_Raton(void); + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Libera la memoria asignada al Raton Animado. ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + void Libera_Raton_Animado(void); + + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + // ° ° + // ° Inicializa el Raton en el modo Gr fico... ° + // ° ° + // ° x1, y1, x2, y2. Son los topes del RATON ° + // ° ° + // ° ° + // ° ° + // °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° + void inicializa_raton_grafico(int x1, int y1, // Inicializa el Raton + int x2, int y2); // devolviendo raton = 1 + + + + extern char Push; + extern char raton; // Indica si hay un Raton = 1 + extern char PunteroRaton; // š Se modifica el puntero ? + extern int x_raton, y_raton; // Tras Espera_Tecla_o_Raton(); devuelve +// extern int boton_izq, boton_der; // las coordenadas y botones pulsados... + + extern unsigned char BLANCO, GRIS_CLARO, NEGRO, UNKNOW, AZUL; diff --git a/MAKE_BOT.OBJ b/MAKE_BOT.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..5152038afc7a066fdf29a7ef107f3f6f31e3426d GIT binary patch literal 24211 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 literal 0 HcmV?d00001 diff --git a/MAKE_B_C.OBJ b/MAKE_B_C.OBJ new file mode 100644 index 0000000000000000000000000000000000000000..5152038afc7a066fdf29a7ef107f3f6f31e3426d GIT binary patch literal 24211 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 literal 0 HcmV?d00001 diff --git a/P.EXE b/P.EXE new file mode 100644 index 0000000000000000000000000000000000000000..5d68fbd4b881312e39e25ce81fc9bb89b8333f87 GIT binary patch literal 58443 zcmeFaeSA~Z{Re*Ty~$0Qq-iOoAYuwCaau*BTE$?kf+;?%M$ohcDSL40aGTmDMO|sb zqCj#>Mdy5AZc;kud>qa?3v9JCwLu({!X~9SL_oaZB36oRX+!Ssea=n#WO4HP{`PwP z{`gVO&AI2{bDloub3UKX`J8jVzo3(wPgapULWru4H~H{O|K-AQq~Eoql)awj!6Cc^ zt`6=Uo{*ne30VYpE8KN(mnIW(He52?Nedxc;NF6J0d5W4ui!jzx0wmK9`15DJKQ;A z2sxHYNC(_M;2PjwhWjntYPjoC2uXtb!8ucX`upG{xV3OE!~G5JL%6Tu&K~2_Uk~>_ z(*6>^&%=EJm!0O*&x2b5_eZ!%V}1HH2v5RqDqKEXDGh^r8EzL`ayse)cRAcga1+M) z^jE<>2-gocF~g@{0`~^oC3sK8??V%O`rpHi6XqtJ1@{X4$INq+&_nlYrGvOidn3Lmt|^`2k{Y zHE`Kqu(BKXnNhs_CQ)Sx*-bnq_Lyn1+lta(Lv@1fpM1L36I(muy0p0n(}YgLcc z9=w&C@r7e+nNHdw?ed32<)CA?=WMA1(X`2`=rP#U#k@gjv8#pn`Fp6I#6gT_AT0K) z?%_&Bd+;7k1Mt~t0E9IFO`-ZcHZGx!HnQm&GOflY@$wP1K_D*qRgh94ZwbF7N&d0T z-=eeK`xIHi$!o0s7SVR^3uK8|ew6ysmwOl8wPJfFr;En~H zQFF6b-yjm@dun-1Esx4m2-2@|_Qzk{v+-(f^5`23M9~GE{m;J7>ftWTRvT4y30aZ? z$H|2b3Na&UuIn=cq}ZS*k-PP@TrM(O@2gZV@}8rl#EYMQBP&Biu*oChsd_)d^E~fQ z!pTCfBmDT)W?-rC9aQ2-Etoh#p zt8Z@G{uW!eS!f4bd%$pCQ;N_lg`b<}8W_?mt{T?YNs_YQ|BP@B8Fv}=m=25~-ql6`m5@!5Hn7ULqydvsSaby5LBH&6lT4%fW z2sjYnzs)H*V+o>ZpLu1a5J^#0XAGeZ@q~Gq5IG*BU37uT<>t} zD!!1mEDCM45fXHcVY5Gt_j)9!G2lEPImLkUkmR%koQIiTX8t3R(-d$X#o`1e!EMRf z5pW-iznJJt=g^qr@fT4*%!&Amk-l^fjp&qG6F4#!_uZRGe1>%&CbSj70JXVk-e6@0{AmC6iEuRR`gv>pY@CcBC4A}hb#IfAkV#^g z)pCH(vMlBVof@N;IoKBgcLK3ko)r}X8% z0?vNHJeU0G#h8MDjN|6IPRh?3TE$nvC+Dd-$HC=yn$NV5weL)(^VZ_aeU%oVl{4R0 ziLt$431qt=P}}xPZd7s}IwQ}u_8ure{4J)42ee?+WUMAM4;nL1`H+GfN*Gv=?~7NL zjm7@>3yVpR3^o=ClELsKF|sTM6Bu}g35-z!k-#W{NWecZdKj?;nPqSjla!U%O9=z= zkHBB#2mS)qaQtQY6WGH_Phih5{ADo-{ADr2@t2i2fJ=0#P0VcSADr3Wic6zSU%Enr zF2|{~T5e=BSce%rIDN754IM5Jc{ZjL@t7ZN1dWJ~ZDLsE;tPRuSQeWoXCYPUAnw`j zoeRbSMTqj>m=NMVj$Su6V~D??Qee6cgjD3XgI)A4@!Hldv6Rodqnoi;l6Q4iVnbgP#MCP`*3h)~kn9Z#ZCQZ(zms>X`t0_}hWy zoe{8$za5zKjDUSI^IMxa=Zt_od0JpWXYZ;NbI%Ca4c`vz#xnxe3$z?Swqc{mYIc(b ztkoIgl@-Ok~kORsShKav9T@im~McjNw^__b< zU|SflTh!Gn^3>{`8&iq=`1qhR_N+^Gf9-EcL)|KX>JMrdzvPTC{$ErjG`f%rjCXdQ z3Bs@Xc33CQ1lFw6!lHfQJas0pI&)6fMg}W-Cb0hS?XddK1Xj_v!|H2Y;ZmWO0{Mz# z+Xe9q$_4R&j6nz&d(u`Ty;RaGv;%>2RvA<$rG+NXSUgovGM*QE49hEfpC+YE14(mQ z4dCYbhO9wR_@Ucl&r>w~57^{jY(Bud)bbN*dH331X3{XqL#iH#qiik&t{CWMDvs*< z;^CQ>B0Qls6o$#DSV^StT$gr#J_uV1^!ASS$1ARj2vFh zmFY`}%+Ycp*Cb?7P2Xjg@_EV?Xu@+`P?ijoMHn8G54J%b5r$+(Mg-AhM@NQ%S2;F3 zESL`wTiPvrbl=VtR%nM^DioPi`5hAKXu{*)At8f!;=d;x&ji)~p01Fm38Aah1~Z{n z_-0!ez`o(>SWibsgrN(elQwFc5t>>$8gl%WK|t8u%jhpRUI+fqovc@ zJ^}?sO~{641Y(SukPXiWY#B8ngE#_(B#LUCBf2vms5SyIShtVB0g0yT9+?*tVZ_kV zi7;XmN39?0>k&gcT0+*>|M&6sRhjux?@$?cBtB3j)F8_|JoY=Nqplp@HR@76!D$aF z;wZbI(WO;ifG)|L9>h?Hm^iuNT&%pNCa);J0UzjJnip|!&Jpw$+P6!o`kZ)EGxVBHaRb_xUOGy1+CLMJ^x8M^1P8XC&{pqo;jy1K z{JqI&c+k0H{p%Qr*RjnhMAFdC{VC|7LwY<8n}=t3ie^9p1D$J3e1{N!co@tF<4KH2 z0+JZlPz_5`K$G}#-ynB+EwXIHL^ZaGZxBvSF|tt4_4J2$9MvVqF;r>TK-iyz+8m%G zcZksLVoHPK&q3<|$R}un23vIwz*~_;hlJR0J=7+%F@k>QFotPZ(w0oEJsjGP>Uh$I z#r~1T%99AXQbQVU2+{;-@W$I&;o`yASuPWd%T7+amE;M8~{Mfu`W5l&Kwq;fbry=I`5!+9J?lSMTU#4DlNcdpHIP?73;w|hk`dS@W%fE_}vsSMF!q53i$u)&^|=L>lt|Qe*pe03SP&+>qi0q zf1OsF2*3;8BFtLd|NG#TI{}^dx&d7n1-cG+$$t|s5%it#60kW2oBvTgd#N)Mh0hR>MGH%F- zH3GV6sYH|tj8eJD(N<}YnzOd#DSBy3R&(BSn$ePDAA&~K27iw?X${~NB zzJ=DkL7t^7nGk6rVKL28g=e}2`Wi9AqH$0qw~)%Pm}4OoVeu;Vyqbl~ zvXFbiVy=boVKI-Tyx#IaZdjaSnTrsoWe%QmE!X3DlV#4iVeuBrTs#X{8W+-s?mfiG zzBCv~=`3};1v>m38uAMoVzktWG~|35awiS3Sn5nPB#nmLL_<<7bykGHc#I>;KASJs=(YfT~d?J1Whj?HIO`_8x|BXmmf?Fy#n!CL=#j08l z8MHFgXP&gsl8IN5Z{MwE$VU0EyX8f@{goo|jzwytnsEf~D0Ve;vU7KF$)aYF09baD z3z{#T{703QjAptJL_?lJ2)ywS`7t#_y);&SSPi+Ke)6#<58rd}p#F)T!@`!QdkzX8 zm3%;}S7>{$Tx_W{McX1>FOGe`>kpZWOBQW2l49#^+3zbE_}Pfgw9;RmC?fq8$Q@8} z9hFXE0||BpQi)Y6NHxFjHG*IJsd=yGCp}>>_mj*!A2#)L^tAgsi2p;2`F*_Y>DlYw zL;O8DDY9`gfw^9GciaB9ooyer?RK0hH80gUx=Qs~U1y)lJMj6!o)AwwqSPwwZc}FNn10rw=#C%#x{o$ouDT9zuc@7llXK=&TsmegH}dDjQNNa~Z>O}h?! zV6cic&A*1uil1+nGR^NVv-IrfY14DW-$s- zBQKTf%-t2^{IQ}+p|Owza$Yk9AAQ60tkkI__w4h>rdLJ6;%g>V4dhf2h|54io+2SI zTIZJkrb?}ekOneGD#84Ca;lFo#PlCM*Ih`lN-8n>`_Er`r>~zcEtH%ZqAbHsfrv8) z_E!BR`M`;G;Kb_keFsyY$lBS{^+Zos&Z>0hL6g!+U#Z{RlCVi%X=>7BySrGez4J#N=o&5!VL%|Dj9%ks6;#sBhcB zZ$tcgTUhwI)AZ642xu5fz^asHfHgZUUSo9$WGvH8m?7vOwV9npuc5l5 z!Dv=Q$!$akY$2(Qf=T{`0n`TD;}5I028%fn+Ij&(wOTG}HqjdTkMe9=)R^6rz0)iTL#p7xT}rX=LGWW>m;Ydjqs_}Z7@cAr(zDWMqLU7mvMwdvR(~z)7SnsQ zTQbovAbKsQShu*VLoMYxdtj2i`WD_^eY?(HeWzFxDp?fTs3#6k+z8FnOQ(u4?Ba5Jr%^rCKzLV= z*l8p@jDA6mc+fSi+iVR0BNtAE(6~-aLcaSG`E*H%e7Yo-5B)kcAD`rsGig3brLn&I z`)KE@sxmRy3{`h~_sY)=Mo$ub(eGDbXABQ(x~=}Y_-YU*^>0QOg@UazPlC<=N?oxZ zo)!CbYc5F7yWkZHd->6)A!I@~LS^%#EG&HxZ8t6s<*d@@#|n;m zv*+J7Ph7oXiJH}$L4RC@8dj-pD|$nZteggft30;4afxbJP`ofCMyWSY8I>xdE#;#9 zH5ksP&6?^N6Ng&$h5VAL$dS*4KzXPAHN+f7;_UYW1<)PDCX-bKUt@Pig^=5g=JWQ~ zW*m}sNbNplvakOKWn+UcoNe~^kB2&IjnH;*n)=fHmq%6zzEfmrufG6$mLF2@7x3~* z3-uoGReqi25mvdsR_gtC$39VXh@1SjUil-9{eF)##uM*_2s6ITDNjZm0(M_=B)#9M z<9(<2vNUtk!y;$`;DLR5TZsHZ^_|jrcSHXhdoS`s`ck&-ZJp}uj@+(3dGYjTk!k5! zZ}Tgiz2>HhHrRRWz?!mOXy%-~kr^!SZ&y0IF;(6k8rL1kP*Fx|N`fo^o|KG^{ois(dzt~taA5f?_A~X(`u=tzGG^2_HhW+0-npy50r~&R4Vc4bEI*2 zt<GH$Gw<|T{gvIYjn8S-Lr18jqeR_2S4Lql{46%N`dstn9eo*~Uft%M*c3WJ zA}TEp09RLT!raSIube$QP@)6)$;6YIBaLUT83wuL)P}2H$uKOCA3H^1qe=uV=wDs1 zDeL6Q4*}58R>ezgky-*^1C^zHoMAxiW*o{1=&`UzS_b1;A>QO1=^C2MW-zOYIj4ob z=&GB{VXxk1csJcFJ5MCE@`_$rUOmI-owzrkO51V~9~ngG?5wmMqK2h-o4 zPA+SjKJ7BcWe;EGyX>*cBGccvtopJwmpyfvb;jlyB{M2#sM(Io>EGVzpH2q}TepJl zn7MT~^&D~42FweDW~`Jq39wm}G9>e&W?g(ia~G~#g_O{z+N1*A!3E#|z+FZiJ!K|o z3wA(-PNDadpNV8$FDi~r9YS?e^-|#uV6+r^ zwg14UQLw3W&0|X`OmEqmxNdTBvDBFtUn1j2GVY%M4IQcr#$Eu&651fT)>WEa>#E>< zaLdhtZY{4vau&@lO5DQ_Bg$e2i7v zq&iIynQ=U&o?HU0Z@a%=Tsn;r%FQ|T)(r+Zms847WIa@Yv1LC~3u4MW>=n?IMXEEZ z6s=o{SWt{<{@m4O;<+Gb{}nL4pNfw_Kun=%o=Yx|fpV;N_A(}4UL8|xL3b=z9%c3I zAVC|;Q=jw>!Niu|Confg1GQ4Ei2`dY%$zfdM$_=?!s|i6_YyP4N_O zPgNeA#be$H-m_c{Wa9SJSraj{?JG&Fp4(^;x2F~1MSeha z$?2rH-Uuwgxt&8*tL%RBDhwD!n4nX){!ueh-K4IvuP|RNK5F))uR{otuTl}5tsU+N@v6qVqhu4QDB4O#!m*Q4(uf{}_ufcqTWH&P_*D*F0Op z<7St?YdU_7-mYK?V(H9Tn8O*3ouhEQKx(a^Non`UC(PO0AYd|%Cu z9GX6-8d<9|bfjk2?^qt1Im9wj2sD-skh>5;x6A~wge0GW2F;!6)yr?jP|p;VbpS-~ zkc;`y6E1m)fUbZf;Yr_=O0ss)!=cFUnkU~zBZ^$vdxIZC@=$i|XA$#V@>Miq;WaSV znSe8|=<5Iqsln+}LIN2)&R`O#F`f&Jk~799a$bcJy%VNM*15y7qeE%-`SW_(^{FI# zFG|}+^DJP+3D+yzDP*bRLUgu}fo|=j+rQ|Y?72A62~rYr)*c1 zO!@CIWujcJD&tTeC3Wcu`Mj89GqS3n0R#O!f0~q2Fw>2vYo=Q+Q_&PKl>EX_W=*qb zn=hdW(VO1I7G4jyuC5nR;+54+c{NSd?Rhor*(!LVZOc!R)N)}XNp1U-{&l@b6$j<1 z)lGVmN)ytbc4ZeUQa*Kxb{6fzX%0*k&m5^==&cD$UuAXL13AD++E=2BVk1PlT|!#| zsc}X%fH|h<@q<0hF8M7AN&1M5hL&7tpHHVwKS>n9`dATJ2Q&G#M2z<@Frr}Qv^v*J zXp*j`{qD()cX%%A@T(FX4#*PjH*jn%wJtSCyHFbXb~fZUxh1BIg9M%jy`N4o0}sxn z6+&+h^exK8!Y(?qa(+qtt=GOO?mFhk`G?t?21y=#PTgu?qeQ5vIR|lvrHm(t)GFXO zwxb!`+HsoAt>PiSVgSprgUXI(sTE1(x__9JO*lj?G~A))&Nd- zuLLVa*%A5f&eF+}6`*a8CxYg8E=`UzE(=sf&Z$Ti*F^e{8f#aR?457wo zeYvz51%Rgmchd*EsrZ509avaAf07^rfgu5@Mem_1ZmEFkcj9gFe;IINGaJ&4yfs=} zoH)qqfsuX;M`bm5$}Fnlq~o<5=Slj?u{QNl-c%=bf(HW|2V1>f`BR)RHcI=l->=>Y zc1NCl^ultTzeJ=P>Sm|t{hQ>bwPi%#m-|ofOQu#4KkGg;D*$NNJ_S63TZ=KsA7i~y zO!B|+RJVQzOZr^c5%GMfu}? z%?}+8GeZX|6{7ak&Ru?2z_3xS=2EC-vch?k%bTQ@TOr67y5%=dP(@KpUW8WTfEeer zI34AtO3L^!hF0s_Z$ka)Xix#~hYTJCPN5pU6)M#q^?&JfyOpl0V#-$VubdK#kx3PXs5Yv=u>?~9-Wnp@Aoz$#| zR6}*HLM;F&UNBxrUvJ(%HXt$oOOkA6FeH=JePbA zCqPbxX{j^n2z$2=9dwL{F0Q_(>Ok4owJ4<8KQgnq25S~wn=EZ*au~E`**h2ZbOqb% zNibuD`L9r|1=}v#vC6Fm55k~{ibagt(7g(2Jmsw&<2}jmka}Kz>jZrbjE^;6jhv;r zSnFRP!eC2dJY~CCSr&%T@)uP5LXGL17KbRA2lz^;VbEj1Hm2IzB&yuuuRH-EAFYg1A*RnIFH%t>qdesVou4fwqFuVu?-Y5eFY%m%B(Zq9E1+l& zehiTY$&=*cT{JP+CnPrE4CbvEn?FExz*_h3t|3Ap$aq4mI!hC)(uN}ZJo)CYl+@uN zu~#Zr##Jj&fbqcu4hQ z&1z+exx3O#56e|17;&&nTGxV52B-bX{N`lEtnDKCokpG>^{niSr&xY;9f{W&`+3tj zR&DHd+Ob)w;}CQX7js%-PE*Wjj5%>^#VR6Df<#8ox(1!}+zn<1ds2f!7M>T6kfTv3 zJE2wlfjW?AXa?$+FM?KiAdMDF0m;{@!!v5owUSuIe3~)xv{scwk*qFrQQAOd5_NfC zXkCU@e$X%fzHjupycJ8-MN1q99(hm==0XI%+X_-1{Dmo4UrH_{su(=zO52>2GAIzwV2LTS$ z8>af%XjohmEIdIe&z}yn)dQI4$bcq0iD|iheOO76Iufezc?0H5^|_#6sD~vHrR^Ku zrNQtY#Wn+s1p!8+V3dVO-FA>F=o3otTN2wYrMcbBKJOI`-1XV-OKku-ZJw)vkH28@ zVJ%)zTzXamxgK$8RB%dK$^<7~c}FYs%g^Fu-;D!RD3>m?)OwK;3n@R%;nV@og6!2_ z1tBC0TNPv(WmM+N50PT3ssA}m+mp{@pDx+1E;Yd!l(~wNW`I4jT`=THo%Rc_bd5}enrp4iqRfn=)iai6K^+M1HQN2R z@~M$UFt^lNfx)JCmqX?g+d4VL!#a;jQfobPu=)0tYvyI%?q ztcf&pONm8wqKi|4TV|Ddjhi^q2=3M9JGs=W-^2@w(RcEPUh^hC>0KXb1hY;#6b~{X z2lDw&X3-i_bC4|W6yHe?lqn~FE88mjj)6}>A}{_Hj<~DLz7Xj zPf4l$lW8hxGVhR@UnV|};Qwb{SUh5Uyii+UX!`@#O0AS0vbl&>YfD6e*hgLRWoQRF zIiIe|-(zUA>+MvvAeEI>B{5m%K;+NoPNhWAq zxF!`OwhUeJ-(rKA+_ZD)l(g8TTY;4+*GXR~DGW&s&t*4fHA`EyDThYq5$|jk18kNG zafLt(*VnMjQx&T9V->vCE@D#4?IS`?_yUFbBP<;EhevoF7gUmVk>{)jmi*XYKFu;2g&oXS`x z2sqj%9YmtU+%bZUiVq(Js*U>DG>g`eG^3Gb6e7PLpa(+aSA->n3cHd(bSq5~|y8U2( zfQi~Zv=ua(ElY*f9W9l*_rO6GSlS}dt{2O=Kh$(+qB7N?VTcNm044|E(SrM<)MCb? zJDBv!jWEM`wTydZF-rpm1BeFt&(P$3sDR?)HjAZuEcLU7Zq8q@Z_vCU>;0^qRBs!% z+F)x8V`)u2t)$6oj8p4QhRY1Ty$8qZfU1b+JeB9=zG9NXFZ(#Jf%c{R!GEBURlVo= zb6+#@Sd(BbBER#W$SKkj_Mz^;7izVD?1}{dbe?Olaph7z?rH5L9>~A61gZjpe1d&i zY<4!2Lb<2ASQ)3q0h{HEw7BxfAE8~*+WZH|q$15x@dM;8l%rokx8RJvj3TEj|0kJ@ zqI{kyQ&j@o%-#vU2URVUKl%zirO<{#nO`V>5yQqAI`|ycvhl1+V`xfrE^GP4-4rv_ zic66|0P!NJROcdnwETeDYu+(W%dIt$a0{@)ebRO?@Qe@rGq46j6|jNBc=l|;9-?Uj z-?K$Wy!-|Nc~$pj=eY$&)0X;csI)o}T?C0~s@jlDd{RjakigVog`*tg-5aZ?4xqAw z{<=iff+X@IHS#EE2Cl#ZcR7TbpEZ=4Yq2g__b~>VLG@0hdDv|BPNcYCYuI6S#fkpA zl*0gF@SdZ^9H3+*0b_kU(qoN7081xCdSdGiXrzFO2inN#t z>{;M~0|o`MHJeFGSkXYE>(wCu)umP}KoG5nPP@^6tW5gJ^KN6)f5-tOiT`x+9R((g=xyWh9{-T!=yQk z^W#8mx`!R_#-G!cf>4Z1oafb3O7SCD6~od;ib?yTFzA`+nKmogqkrWWq^3-68%Tr|TF26l2%EoQzf1}xH@@Bf_iw{E~O)cnP94tg`W@|i_dz~Uga_I|(1y+0j z#{|4VuuDZhtlagKHGr93eBpK%Ms0NM-aVrUCS1qg5LbKEmP#Y@_q1i56f+GgdwN>2 z-td2*%Q;>9pR8`CcD0FhKf8$vpE{t9Da!Ia(X(T&w&X8ATBBWU;=sMCxEz%l%D6s? zT!52q40XzI>t^IET-h2|1{ghK1_@oEeBN$4l!?eZ@7MvfDwHEwD2$Q+5E`wSKB9-f zlR%}1E5HCB>OQ4RE$C}0IiWgFFr$W(vrLr4NA0bKWXJ&U1)V4D^iY3v^@>szn*Hp( zSv&lDiFt3u^$-O6e5CYh7E>P0-kH@2<6n0MR^*@4vY|g~^`tR28l*$H6-8#D$k{YK zl+0My{gr*xl>HHPI0&iL+*E$98+xBon8eAG2Y^`t%<~rD2+diobSFWx0j2#sFvBnq znnB|fTYVlvp}L9lOewBGq=&%(*5AYbVq-*^rR?qm=k0)8UY1Ea0k{cyT;sfVK#fj0 zZzqi|{WQUO)2xlyQXNH(*YeH%vbeZ_W`v#h!9*^mb8S3|V`)cqq(BO9Hi4Vz>GCyC zUzIL}sTVvDZY0&jXUzM>|FxE0lj`*2JZi2;TQ`jiE#PXg}~&n?-$(ADRHGiB2Ov8Dz> zS)($2!zoqCs{2BR4Sw8;2OSm^R>|i#`-VR4OcLIvp==p|+VZ)CiU&mj z1o^5&zSMvpBZuwNW2$l&&U#|0i|Wl_A!06@)VgURc7*hb;DX5|)Z6{&04UKk)`AWj z1%o>UC;RSDpI zQwnYH=bY53il1SjWGa_AmcZ>M)nl}|ZU^sq(<^z9q&Kj$% zgH4?U2(6@QSyZqyG@+_yF8W}m=oGv3r}SgQG2&S9QgNzyN^igugQ!(+==K+Y9Z1I_ zO~(|1+p;8Fi2%TKm5|s?nlco)0I$9~Ep3J^_cXdG2&omfgLy z-EnmiWoqJ6UPFGJReq3O^Xrmq9s#rjq!P7pS>>NV$7TX5O&g~vUy;r5UU~H0_k@jO z2q>V4iDheePe9Vk%*Dk>8A+!aII!0UYBm+Oiq8uK!SAHI@LZEllf0UaE}pMPg3=_^ z8X?c6Gfj_GPEIN=ruEQDztM>3A+O2wl__TOb zmU`{02el7z_&@_}ourI%&fh#4wEYN-d$cJ)7>TAj(#6Wnu#RD*myZ7l!Mw6t@Ie2Y z2vc7;f#s}^a<~=eAh_-!u&cd#AA=BpMJ#kceRL*|!-ZLhafthcW!Sc0v(ZyGbgJ4K z9ujCfwxnX4A~9dbP_)354I5&rTo8?{g}wm$R))GqP>$8?OrYeyfL95|TjsJ%)zApI)bj6ZkY863S)SQQa zssJpvN3r10YGM6Gd$2D{ks$i+G@-`!tg!J0GNY;MmFlLN_QfSCh^DRKYT$Q%FNO-} zJ6S_+ZEp7u!Pg?1ATm{L6)zQV!OR?i)Xoy5jH`vZRhVNdgv6U0Z?_8|)OES+StP(b z5;SD4utxCZmVtS&*czs>?pu?rm=gY~WZ=bJ;K=n#-uE*u12W6P$OK`Lh1z@g!N@Kah+h5--^=aftwjv zU53moZC#RAoS3VP0X1}>au*rcl$q?sNwX+K$Fk4jiE~b1^`E7^46OX1NNnZr?ZQAL zLfJu0lhhmdO}7yE-3dWz)tiWNm$t+=`g8XSrV69B(klhF+WmsYMF3X3D5+~O6ud<| z)Z3LvI5<>$K2ps_c0p|P;lp*d-@*sA{(=Yr**OE%NS;^cLn z;y{}|<0^Lhb3fzK2ii21p5M;rrSUE>44YHpOwWSAGhJL@sPqa$P|Y8 z#@Wb35ojpNSmj_}W(iw$wcc7sF$nF00rwg~Gw%~>ABiu_S`w6Ww>e%d?}XZMsMc7a z4ku_(yTJupTgnquE&(=40}ElJRm2Rj%74Pdqcd{_robmBF!5@AXz#BC&(y&MB+SAe z((puT4`a#0>J9!8R{?$4gD-J_oy+!Bn26^>e+3TsoTu?(YiPCsUMxHZoB!cC;K~^1 zl}~v+HNA8zCdiQHqiru+G>Scj1I1=hiAF#=lPYn zrKXwXrV9PcO3ShYvvyS==Vc*~`zqBJ)V+?UrS8v^NY=fHQ~y?=Hf0J5>EOMI^~R)? z{0w%qhF43&#DA9Rp6@*6??_O8TH<6ctp6a_(079Awu38EAdtJnHbiU^Ran zt7{I{Crd5uk$na#e zak$C`ZEK|~YGw^Z*}h4KUzogK(|3s_^U zdmEknjsWejk)lj8WjaQ$9Fk~gb+HK}9Y-^SA=kus2==`w@*%`XL#S1$g+lEEA{rA= zwR+PPR>LnSEb&pN@uPK{KV}}N@R&dja4~nYzz}2?*r5c#L`(6-q`wPPf-_QHZE?xS zcvK|QjJY)+_GE{}je>=$wd*zu?!sz(ISOW<@BUrTAh0z)q1Q&{`?1kH&^NW!0=^&v z4P5s7wL#&zwLilAnde&jEPfIv&9#O?`RtartJFT2_Kh}Pfc852#1f~I1N7SDme(U` z!@V4xRs(654@o=NeL>2gfK5VG;2DaV&@n^wprczINB@BmP?@}MR%Z1#3V>B=%F^$_ z25$ZH0<%yB|J4dn4o1^raAm8ozExP)Dm+Wkbb)Eu3|zMszFAA%iJrJf2(? z2vTC?L{>3R*1Gr5g1L^?(kb-X(~7gPv%TukRslLt4Sam^JWZhtCH>j}LSVq;95ZZk zY9)+7i4wXuCv^fWTPnY1mhimP8izTA+k$DQ#vg+?!vcX1z{-fN9WVek3K_2oFq-Lf zlt*#W6)|A}bXvg1Es{9$`K1mmq$1ngT}th|1(5R!I|Ue6ievqnJvPPELUc_Utck$O zfxpMclk)k&UP?59GBgbzePbCJ8m;Ekg2jG;a+o(!QsB@17~osUkQUm!haN|!2{z; zdjd#A^;8mv{uUyS;-^BSyjLY-D2}W6o|_}*Bbwx1F2S$0b5gG(=Or3=C0F~BFqg4$ zI5qk1mk>j)9teRthkot=I}uBbHr)0r7vg?L7=52$Iyfr#hpFLUIG^$k`BZCjgU);d zwTJzf*cvLRfF1^i3&C+GWb>OMOg3Q=z}T1z`YM3*W*HrHA0UXc@imb61dOboT7xzH$FuZ*for#dZ{H)SnQxO%5Vnk z4N4y8CW-Su@a2ALP`y|Bav$Md#D#X^rv`#^k=s+(e`;W76*s5CvdXaj0KNp+VbFW5 z^vB>aod2O^GB%E=&fkV}IIm2=Vj~jOHdeqov*-f~M;#KE-4vX*R|DbY-xh+_Js{L# zJqOB_fqV339BQ$R7aF0>1Au_-X`xztRs%Ey2Hhyc0TmomapT%`EB4KO|L`?lHCX77 zwDJWiNcAjJ*_icv3~J6NaR0%rnm<#Eidt;{F~DSUpsGW1vA*z}7jFpb5|4JPC3<1q z0RtL5t2ID^5qON%Yal>e5*R0Kv5Tg~y|iTC74Kvo6P z^@t>Qn^xI>D`0JDw6XG9#or55Oo#Toaq_6G3*Ie)PB&gOY9!Dr%PBt0_q6Bf4Wvz` ze?yvLw8}eAE$lf61E{P5Ba-d8uIE!d4*%%R+exj3q#YwG*ebRgAl~mWKnmGwz|Iwp zRqNMx7_hr#^}nZ+7Zd*%x^?Xa<KLS=w+OqA6cN9({7NH$m1wii;~~gFGAvV9T>D(s+SM$M=p$?R!~4c z6nEtwC`rTsP@`J>351BU1D05~N6aX&c58(oCRKb! zjZ843sqt!7gtX=KQK6Ah8@PC`>SpPikvz`x#mOFx&l@GTMig=3!pOK_i8zCDM2!p^l^Yl@Q%idS>}aBeKotJ{r%r)?A^xU^p0}kzZZi0Pebg6 zO-jnG^)vep>|;qEW_@sDqkYt>wqWT2;Z9wCu&OHPHU-1o2c)gR5T5w@ff&5ocy5zt zTuUwz`Id2l#}wQ);|pnzl<}0%c>bsWwQ9uIEUZ?er$R4}tl#$-xH!gqpB{EeEVDQ} zWi@P`Ke;iUUhBffmd=i@Sr4uh{>^-N@|0b2#I8cdynH6yV)FrH2>gp`4e=`e^P z9LF!y$xBE`HghmLV4sK+1++Y*R#Xk zlfGt+-Jzp`4f5fmzqrie9raCcNWPPnWfq^xRiSP|6@N0+%V6seX@Vq{Qy=o3o=9@4|F1) zg-)N9>eV0U*}#W3aJVvs?wsTE)Tz=I+?{xit!9tZ5riZI;}P8~-fP*kiaYuzokxeQ z7aZRYu@M@4OeT+TpUs--R-YP6N;0RZ(;gseCQl~+<`(lWk(Y?TS-FMW%VZw+ zAomDIL+IZt{6_u=-!!(Cdx`siyNH{|-H5n*xO=z_i2W0JBc3jie)#V(juaz!WSbP*=VQ~eXxBw)+1OnST&TD#T{CRsH8e8`$ zj`Ob|at0|n_t3)vt^^Aeu`hR9m*IFdHcVC_K8UYeSL2|04e;$2Qb)kY@kl*F#+?EG%N{8X=yWPvJ+M4pmX_H{@= z1qGBJq9G^v$hE4hs86iykUyi(kld-tPmU?u9-@aCCgPfDh?cy-*1QM64)Ma{BEg3N zR8S3_5aCrhDJ>F>`EsAbJsP5XDn0TgUhc!%n9pNI;XCN@Hy8})>Z(ZXGO|$?dOnSZn(RH7=hgj&)K-y!FbfNNhAcEh z=EPj|PBpufZ^_H6dyCpITI=4XKdIR}v99-gRrhC|y=C#l06MZ-e1y;|)rx5ST1B)s zqKnn7C2W0vfP~-;)vY0H1;H!&-vHr@SS&O&G^0tf)zZs%6g`#>fvo>MS!I2J2C#Jw z8R8)UBpW$NfJ&qPOC@W?G%{8&5P?Y&WEwBpcrI@Ax(WWs>lh^X4);QY5aSWJ41l$WO z#DkT+i2&fDi7YHiV5wZfmyW${9?li*T8S(xkwuosg5r=oGo{SH_(s}aYtW0lS^dt9 zO>}|PF#9^GfAc{hV8Fr=z}G(t#lWq`K%psct0hon4dkZ=s?r*WFOZ)e$j<<`3xy+N zcu}g{%$4G1ofn8umMovLpgNROrV*DDsWPSP##Cx zJ{Q8mhe~qRCt15Ockud&u$v-KpWkZT|IuBiuhKj9 zU+V7Df2}(Si@rB>xQ6#ls-_U%!4s3>4IK|;QTPq&!Pzcx{%zS!@;hqrVuRdCZGOpTV~`OR=nAqy(^e##$ohBx7hPLxQ1oh#Pg@Oa~&pIPLuoPD{^_Q(!|v8)``Oyo&yla?y%h zbW(cT=WU<2lOfO|jh^{)ysPPxgq!osIe*pk)ZlGjjR8A4XaeEG5HLPUE6 z*-UGYAWSGh*dqTlieFX}xdf%A3z)QLMHd!PAdy=JB5@2NTC^~$L)bE3&Y{&3wk(WX z5_N2;ppx7&EMs{$-h91$d6Y6JY(@eJ)*FaC2WLg-tV)Ai%MitDj3dvbuK6H&1B4C; zeHi7+FYhUBZvbl24&qmClm9lNbRqIMk2@MOY7K#m-@&~AhjGiufSUj}QIL0VuKA$%3qbFs zUMU2N+OOy&5ipaa&V@zzMx$-Mt6>4j@A(|IaPzaf9iivt`^fLm(N?Z#p|V8_DP|#2 z5~rq;6~$RGuB^xm7#N_NJQIbj!Y*`uc|QbU>jcD36lf6cY{d-_p#%=O0HjVQ)PmTG zLJ`(|j2%!*Yo@4QK>VQvQh!!&Aote<2q8q?rC)?#OZ9E@Xji?fs)g?P^Kn5&BLSWk z$t|QV13w!`-30vnmDEiXN?>D=jyxG~69m}%$=~nCh&#jyf;Xc!1D=TjEc8)C30H>i zwWKR1KVJB_ylgRZo}N%crQoCah_uj%!hVLAq;Itkt0;f{Tl0#)evpe2~zC! zEbv0FO6~Yvf#0o->B8$m=+)PSEpXaz2zkuQL-%rup5-1s0(8dHp|Pgn7Zcir{w`4K zCZUIK$4z9llLq=ne!aJ-XknfsRM`;%wl&EIPGSzcs>;9W9nwSc%3hcxMOsfL);h{y z4x_=;#B#zl=r((xpp#yS=ImuRnzjdU4j1Dt@8rtNplrGvyBG zrBA>*l3g|{Pa|?K0*?ABWxg~`#V6fLjyOt=foGw2(e@}D{g7}szE4u|FPp)d8Dd7x z*a(_ETS`HMKcvGI-{YlizL?K5(XqRNU%A`STp>Hc%MQ)IO&(8V2Ps~t{M*-ud-ZAJ z6yGVIw>2a!?USma(ycLRJTmE4{&VGS+>_tuNe0ZU=B%%Jj`gU*mJr639_;SJcT&pE zRh@m{S;ozk+S?9F#yrQiiX`d{80UInn+i`VYIj1dqE~hLv?>~A&-O)qUi~c2^Hs>< zJh2Sh>?der4&sYq%02)Gqgl{*&`$Ha+_pP#IUR08D(SXng1DyB%h#rmMVTcC=_GiNk}}ul!WNVz1ey-2 z=zV}-AtNxl8sJ=@8t@;z2=)$gDeP~pU}~94%_xtih_IM0Ql+>j@v> z4wv>GXBs_3tvb_soT-`*$KX??k~BwXDUa#5fAd{LHUTFiZP;-9IN;ugIQer_*CGu+``FQ=xz_bJuh$LkRMlK9mf~S8ma#=lI8sPZ1=tZ zK567Wjzt@n@W_GkBl13iuVdkRIa0}Sp=s=1!FgzG$zkp3C^=AJqL%~iFBRmchp2SRKg^$%iG zJ&cct7n}JV73in-N(<&t$1;(6xlo~7D9;co)8(5;$>LDYUelq6QcUVY`mA;-6w*I1 zUI>NoYQ#l*I}BL}S(k#RdGAS&CHwuA+i-(B{;%8?C)cI;<^UzwwA@Iri%E{&^R=yl z2XN&^W|5Mn1*Wi_5E{0ax605ZV7E!5k`8{U?l0mO#tY0pOnxq9#~3mF>WrUFcz)ss zlX`5Er_4R?XH!>S@Y;pptWPfKx>T5va`}XuNmos}di*SFF3CH3-M?o4^@d;PFS&8n z&BpIz51R#_nxz)_`d3& zz4P-uzv#MO_n@WJT*i66^z8D!US72{{~__=zdd~KBc@;0{c=V{Lq+zo7nfNpe^$Ar z(p+^*mA`63)vl_eRsB`OcZdHd!Ax`N7AS@_+DofAITZ+`d#q_0&cJqOOr|pEyp zsrj0EQfauPp3uN+7U23IbZ$MtiO5dr`6;Q=2iZ-%ZM)ib_;LZkW9r$}vjg7`7)MVg zkl}Y<4lFCo(<=J$)i4WRW})K0j>of%3)S5|CSY@q30RB91Tq$k`G49w^SG$0|NozJ z&t(|dhnZneV7LPV18Oc<=9Y;3P0O42Wh*X1U;&+G3lcR%T{tWs5Bq zscD}wwZ*cuvIReC^~uu8%HQjKXA$eOd>@bB@B91y{`g%u=RVK-oO`zWzUQ8E?mc%f zbZ8lR8#-6IwlZBSJX+z=3XfmfFu10*W za-yz>rc77=-uhx)+qK~Fy81WQm*^Z zg{*_E_*p+BEN$b1HH+D7X`4iEno)*D%j+0CU(jdfqa07MA9lFs;7)G=}WJXDZ+7chHx+P=C$>8E98;%L4PxToxfh z;vtgYGRJfPVml#tE7H5|e3(aIk>0zW)cM+SY zx*k_uQ&?d7Brx0J3#Y|_sXJ%z_C=`GtkZ3jUrd?d$BEP#H*q3cs81g-%x$B>wduJx z2EA}S^BULUh%adlj@-Oa9OxL;<8UxoW0y|;>-CZs-vnNdVA6pOgbJM73+RDf`qv}i z^)L3mlaa6>{Z`{3O^eZMTi0Slm+*G<2R#Y9A-T}LevxsZd9iU})KcTZxaG!vN9Z)A z9%;0;Ei$g3YiwI;Tz`kLZLu+RXCoiBex9*yxgQr8Pxf7Co{OXJz|r$y78qNG-fG0~ zztwyzdm+X)_@jpCbDv{LyNAn1@XIKA6 zjQIWLS63LLLeFf7N=A>#*y9&3|EV1-v(Bcs;QQ_J!nlpb_O@o8t>!IiQtc@7+ZWna8V`Ji*F|;>eZ(k!?sxFG8LvO& z^y;p;+t_Q6W~H$q0?*6NiSH#tgY?JlFTRLM#vmpT`4%I7z+sPO9rCzGvjH|8Mn`#g zd)Alu&1gj0dhE9L7;!jVTrGy)gSuD^)ekv2eK{tKCSfY&-Oms|=AQCRV@)llCevI~ z+d3mI1>>Tq6|CiRzNi<@(%X&Nl)YZuR8I1h9WQdsymYK&>(`-{HyBTD@4zQXX(lgf zopFBL24lwtesW!UYvdg#Mvlzdd3INe7oFO(uVMGc&UVcNjBK>0k@zPUf{EX?&twlh zdHSH~Gt)`@UBFZk4FEqsH4(4>6Mcx^E;@1WREIf`=(!`lUaL5Fcx7;aS#xsHt`7Xn zb_%{-_Zmhv9eo%^;~1@5=PW`O*gDLs`D6bzEpN4;8`6r?e%pDDUo|?}YM$rE^AO*0 zQM@21ZW#(?@Rl9N!1*Dz{wX6?oR4H<)j5lfQJ8z7I@MxA<&HNxqW(VVx=@@#G&K>J zoa>nU2i!SdoSs|Qf+P2wY)4JEyu63IJvENHN+qX9 z59Kl?$6Y_e^da+zrldICHI6WS>Co(L%yw2^Zb<`;J9(T3J zQLA{Jo?2I(!|QU_MPk77U){dMQm{^2cD1vv($ULRTg^J58X$||eVO0C|K(TaVPS=C zWt3xv($HAts&F~$yiR3|v)1i#IeIE}E~Vb#aVU*-D1g^p7Z%1WX_YIFN_Khg;&NZWo=Sd0#bu=xN?MgyXdY)ngW{;0p-gqoP`qwsilfFmh<%pQ;(Mamsnq{{ z7}NPwl$GQccS@=tzpSj2voyP~w3BmWQQ4?Y&eEKc{Laq&F`c6-gLfz2f}El;ot$~& zN{Tu;hZhy(c5?o|gqisLSu+1^c}l>NkH1Dvcj5o@n}+3#%=Seagg`2JBeTb=oC*@W~D+QV;?@#X0@5uIvL>5CT5`xAx80)U?oKO;!lv-*))rP9ZjqLlPV?~W##a$Kfbk!*h6^=Seq~@<)RW)vRrO$7KyUzR9to-ZL zst`Vy(_l5!q6(ENw?}Dk)~IC-jKZPc~nGcy-hMla2h9KyLoW_8(=^A7fp7uMh?E z@ht|nVfeye=S}Lu7|P#S#Nr^!kuGhvyF)fy!c*B!+fc~<|Mp+40R!WcCH%>2rM3Uz zm|+)4ll77$hiIT>24jdmDlSAPnKOH4(5CJ}LNZOJsLoq-&s3>rbaw>MCnRD%K3Xzm zbk}$H2T6@e%rK><;hl;ybY*&3tyZKFlTp`LQHq2nq7-GYt3m8mWU|Td`nfk}1cY47Y^Z1oyzcGOP z{{QwrSp(-wVg%Njvt!)N`moRW6i)3-Kh}cBH~2s?`~G2H?tHqTT$0s0q*7WR$KpC^ zPC$qJuSVh>Nou2LJQYF>Qz`jVPqvBxYi97K94x#r#9ktxX}u=O0jWl%=XuOUUvi?xQ_*g{2@O2OT ze#7e z3=Y5$Kn~^ZDwq)jLj!O%ppqoRV5$kS127!0kt8`Vj}znuAP;bgBqLzHBN!QgQGf)h zfP5G;!8HLGjjAdjNdZg=0SyOLC!P)hLZerxDON z^*(}eFlPwHBZ+IMvM0be2qwbJC71-Wl>m=pnc4_mhZ<_36LLMwW`Y}FJ|VafW(`%p z9p(*!$uL9dJUG~JR!2|{a}PlU%w9S(l`smO8S3GyEo>FwO_Efj&|lHHngT<=C&pYb z^owHnO>)!`!BkY|9d!0;P~T8)INS0JERqL6|cH z55brUVXc8FCs+&fdJ(KPHiYR&yVt?=Bv=nKf?xy8e$w}cVZI=E1m<1R_eWvwCw<=t zvw0k>$6!tpY=Q|J59@K5Qd0cQFv|#@fZ0c|1*Vx}2IEPzB`XP@LhBMqa~fOWrA}^a z1Dqkr(}2w~;2FUEA%JHA2MM+VrfC4r0oG^%&*N5gdl$e9ko*!3coFbT1Yif?&Pc#Z zfUZ%1msvM9gy0oO>Ihy1#76^m0{RiW26&R-b-+6W?SQLe0B-=Q2zCMPAlMDKi(n66 z1Hqes=Lq%!_7Us@d{6Kez@P*C4KSGCZ9o&jJ7}}-BG``>`Y^$}@ah!{IDl4sG{Heg z<`5hLtRZ+05T^&c56C9?08mTtA)uAuFkn5wM}T(-J_cwFfFppe1fKx96MPDIm*6Ns zZv-3zWD$IZ8$~t2=a8Hw_yS;z0~`lb5PXSS&<299AZdsPd<|Gl@C{%SK?mSlf)jv{ zu7JM-!U#?R3JFdDW)hqRJVo#=;5&lv0I}Tw-vb5^`~z?u!4H6?1ZMz`6Z{DHjo>Fh zZ35sdU=zVPz>?Dph*Tq14a|X@GN#SfewTM= zlmRvqj00>T7!QaI2TTCWBA5u6O)v?tgy34hI|SDO_7hwW_<-OBz+r+Lc`o~&z>W(4 zkzg_}WoHQ-yoCKqP>wKv5L9r5NfCfbfQG;c2qUNhL=jZ;A{I+91xc(RaPuT4Gc-LO zoaOVlj->`}X1@^xy{5tIc{+pSr3UsQKN&bmZUkf!H1RO@D;+f*pdQ|gqiAkGjZi&m z1_F1dz%v1Vkk`$C9weC#P{Ygu^d!kGfXgoNn!_#XNGYr(5cpQ8mYT#|p2EJM2!me1 zzyxZ{xA6#H4m%x{%8t@e!7zV?d8i)^vJrNBAW^D>@9C&J5c4pC`SALYU;*GP!9qYU zU*^Nu&m>udtg7|X3Q+6$Hh@}Divhn=m?a!TAA+T*I<eQETG~fLa?{0BUVK2~g8|3Tmus z)K-9+1bGdjcqs5-0y=yM0YylI5_ubvpiNWHlYQ_sYE_jyg9}!LX9JSiP;A;l*Pwb; zxEtkC;a*OcJ-qJWHXq!?@sV3>oCz4t>fk<%D5(JW*$L+2U7sDAJe3dYx-Y&)wQIRy z{?OzjDu1HdpQ^Sm%u$t(skSeCD5g8YV4~P+DV9AfUB zlov3AypUzd^I5js%1Y(MY?8c;O_rCl+454hL|(zx$g9{^`EIsdzK6Xh-^V_cA7Ed| z58?;E*059ZI(9~0&vYSeObL0IWraM-azi$;(IJmBSIA?mIphhpDC9|u0JgDpAy2cN zAzRu0kZ0NFAjm^>QVs~oxu=SdK zY?J0K_NHbp`%v>XJE7Un&T9@bDfAFiLJzRsq3^To&<|N@=*R5Z&?Brl^dmMu^i#Gv z^cZ_Q^b58v^f-Gr^mBGB^egs{&~KQ~{+)$sPqGZ{33jFSG|Sh1$F9@-dVEAx8GCY@$56|QF@DY4Q z_(;Aod=!5oJfFW1ehuFhKAIm0FW@J`$MDnPh5VQBA|4V^%ykiCd5?$^o)=Nd?GfYo z)QAaudc;INKVlNUE8;r7A>w+zDdGmcJ>o{bJHo;Lh$!cBWCf3jtmH~$HNQO4#rsFr z@IjGoJ}k1HkBFScOCmk|#>fVKQ>2&Ai)`c%MdF*Lku&)2$eH|L`Tls*fxjZ-OHeMDrkC#Wy=hLDV@h75M`7=>V_&ZU{c~tbBJTZC&Pl;a1M?|mU z`O)`qcl5oyIeIl;5q%%u9DP6E9sK}582unW8vPLed-NJE$DnPEY2&dm>$o{)J?|c~ zf#=3N%x{c&gg3`*_7O7*fYE(_AH+t zdyYRG`xAdA_7}c8_B?+(_7DDE>;?Wq?C+fGxun+%sheISS@faO)%p;rP~SzGtPhu} z^-)rtK3ZC=kCg7$>!c_2dg&Q`oU}u4l0MQKr4D^p=~sP%#0_RC!jLTWG$_&#Ly|Pw zkRsh+uu7E%n>5vsAuTkdOZOVOOPdTmq^*X_q&E${rNf3S>6oFP^t++26k)tVG8?ay ztj0l75944d-#Ad3XuL|g$#}I?ZyYX7H|9up8MCDg#yn}eaisK;@fxY!I9mGLm@j>A z93x3__+5**5-B>aRJtr~tTZHUoKzS$K`M*8R=O_kI%!7SBxyn14bpvac4=+gWa;5J zhqNiKLfR2mDea3Zm%fOrmd?jbk+i0pB!g+H)XOwY8g4qsCz!m_WK*NmXljz0P0i9Q z(+uf$(@bf(>1Jt_=@x0XX^yndbgOj8bcb}*v_Lv*S|pt_EtY;aEs>JqmrF|gozlqo z6;fUNO6l(SRZ>U%UDCj=cT0=9-YaeGx>|a%>wVImuJ=ptcYRR$vgbV@m1-r#GTTC#Mh(`5?_~oOl+5aO?*R2PueB* zNZKupPTDI~CGC@LPTDUmN_tmXmUIB-kaRZbJ?UK1`_gYoA4m!24<)ntur%8IkyLE{ zSej=3R9a*{DlImDE-g2IDXlVpEv+_xBW*NyNIT6ZrPs~hOS{cyq`l^|(mUo~q)*Mi zO2^H=Nhiz^B04!zSd*i~kmP7FE?Fn0CC3VHvR*VN$BUWC31W7#MJ!5A5zCUTqAl4b z9!>5pwkG!w+mm~W9m$u8oyon$!Q?*T!{ol=)8s61Jo$3*Q}Pw!*W~^JQ5Lo zAd##L7Cn@!L@#Bi7@}M)a+P5sU&$7Q%5YJts>C^^ zM*O186u&9Ah*-;P(bY0XBw6N)6w5qewcIXjmOI1{%X~4yvOwfp7K$QEs~Brp46{T` zv@8`>mSw_gxl_!rtP(RV_lg$F17d+?typYXCste5i?x;wV!dUf*l2l7Y_n_=4^hUJ~0=UKT9%6(Lez6_Kesg)a3qVN88p*i+j@dFmUYCUuvnPu(rNse8mL zsc(wcQum6tQum4dsc(rxsecnm*0+UXeMfY+?ianR?}{wz0Wr&ZP|UF&5(};Gi6z$e z#hum<#1ZR<;;8ko=&*hyPFX(|-&>D}L1~|etI|FdBh!wG(P_s-QQBu>b=v3RfwV8g zBWcIQrnE1`mb9kbY83N9VY|Y2+(xq4E%0oIKuUlB;a-a+9sAe22{}-)&2l@3W=I582Y? zCv7%)w=Glt)Yd~jW$Pt>XX^`-C7-qRljV%d<=BiXWF@1&+$&?CJS1bVd{xF(FvI2i zj2yWrBUc`mktbi5F+z4^jFhW0M#;4q*T@YSqvaVH1@fGXG4kyhg>q{~k$h)Hv3yU) zSoy(>5_x?_nfzGBIQhwp@$$176XYEk6Xn-3Cdqp;u9e@;xL!V#afAF(#*Ol^47>bQ z#$@?qhC}{GM!9@0qeA{Yqf!=`Q{*n0H_2g{buiOlJaS29qdXyVaY$q4l91`XE+~4K z%h2=l^)!9#qB$mPFG&m7P3Y(f@J?wSdZ0deu2>b~MxPe5Qt0I^rJcGR)~50%^oK*? zI;u_LjR;Sj?H{yfF+1x!_IwwG&ESGj*BCt#Hp}0CP6)$QjkF>lPYyGQx&H9|BVQG_ zK^_J9pvWC!zF+=R%vEdwI0o{cV+OH>{&=!<*JxUKG>e6Nur6D3pFjL8OjqBJbPbT- zZpvd1foa=kx<_u~n3)0}GA)%K@rQRL_Ld$+8RH?ZPR#Um^1;i^S?mdf=>}e9rlF{B zd)@pz+k!kK!nxc040{TBrfp{OXiftGGkA6~O{4g>T}n6nW-Vt5oO=~Y-M1Zs{8h+P z;5-ibPJg+6QF^e~k!LI9zbP4P7sAkHwOqz_gJ~FHvvgNwWR11>PA`or0!;Fm7OQ3t z4^^iNS}bPGJN|q=WE;y4qP#Rk@T6@R1y#52Y=!EcN*Z7iT$MqS%M6cnFEY8IZM0KI zzQmME(l4%#S;!{6dMRCCAWfqf-ye-=WY&c>2kRNNheIW-v%hd*4vvA6!4Fcu0AnmT z)RC4dfu12eX`Am=pe|~7-vEqeGC&AV+68}Xk*b@qX#YXbBQC z*wAe?5e&`LJtkSy<5JZSocZ>$Z;uJtOWeo;&NT8N`S;1pT+gAB-0#*h^K2+D3n%@8 zD#@MqYw5UvJo#>pESs459@=+f=6f;Ofz-@vXy4P9E}n?1=?C)hzr7E{m-O%BMS1>Q zZq?o5KOR@ZKlMj>FO>)4$@SOIMYk{9pWV6s;{)=46<vi88*3H8QfP>xxS zH+crz3GGD-NXPCY>n*bWM%LS8y+hW1vM6i5!0%F22go`|)*-UqBdeLL_sRMI)=umh z`;d;MX%qGlSszm@`}3>CvguDC`_5p|+T%o4N3 z60uUO7Hh;KVzbyL-VlexNBC08IU&oDvO(@9D{_{cEsvDP$ffdRxk|2)XUj|EmGWwN zjr<qvhHMGh8L~g* z{g5LepNIU4hc_BcyvC-vOw&&@P*b9rsJT&7ubHE{UDK+$Q?p6)lxDl;P0fdzPc_Fi zCp1#1HZ&?!3GE$vMd;wr?9gjNCx=#rHiym+T@t!7bam*q(C0&634J#dGYz39L;n#P zrj60YX*0A}YOm7fX!Et@+9}#PZHso9_Ac%H+BWUe+84BMY7c1N(;n6y)t=D)pgpI3 zugm*gI=YVWzOIVF_W$VLigugz3VQ!tLRw!>2}UiufZ!j=Vgw zf8?OZ5s@!O_KX@3^-R>BsCS~GqK(ms(J9eGqw}NP(aq7Cn0YZT$F#?siTNq!=a@da zEZtz;bvlQxQg@TCMt8IBR^5Ev65T4@eY&-}ZMxTVdvtH>4(UG79n*cSJFPpT`$ZQX z+bvd!O^@vvJ1BNo?1 z^`ZJmyt_<{Kv(Z!}gKZ!%6d-eSDXc$aa5ag*^W<91`aaj$W|@pI$% z#Yx>=!#CIgzkmyLPPHahB zl(;Lep8YxDHf~6W+}3a zwM?|ku*|fySXNqATh>}OTDDn^SiZKLvix9)NXbsgOBtO~nld4!F6FM2yHoB@c_5`N zWkbrQlx->7Q{GPbG3BR}UsKMfuvC%SB~_PdOzoLknp&1RDfQY^dun;=l+^lEZ)$7m zw$!InpHF=u^_A4uQun0pPd$|S_f(xV)@riGTa&DcHQn0Fnq|$m)?24po2=8Vv#fKh zw_BH3@3d~T?zg^cec$?l^@#PT^-Jq1>-W~sv|eew(=JcDB5hFGRcSeCqtlAgs?wIE zElpdQwkmCP+5>6p(l(`SN!yinD(!UI4{2x8eoi}|#?!l`N2XiTN2eF0k4-O0pO8K& z-JV{ZJ~e%A`eW&v(w|I!D*f5?9qH}qd(w}lhuAc>a9e~;XEWK7Y**NZ*v8wgx0Tzf zY&ABIt;sgaHrIBCZLw{I?QYwBwufv_+Mc$(XnWPR&vwA}f$fy-JKI^?kc_J`vNQ5C zx@3lBCT8}^9F|#S4RsG}u#^N3|PZS2KD>roo5<6Zo8-b8$`&!jkaqJQ>f7X*AKD z&w-uEX#`Qr=fSSw^u%W>Z-xCfUkv*#z6ADOzErj8*~(r{k7M5C^ps~er>8c%IX#!z z%~z@RU9flYyH)!h)usm@GbMTsGDB*EJr_?>WOge?5HfpCqNflz6YOWD$5or2 zCLEXO;ld9RJ!|+*dIol~cow!<&<)uvo`ao)-x`-$f_Oo-Ux9tCcolZJcpY|~*aQ0^ z@h0rmVlV7_#Xi-33-&$YZ>s&aY9EAcl@F;l-4uJ^u861CxGmyQIy-`KK_>eIb_)9x zVdB_PjEr{S)lGVTq9#4?Pa z5cphDlMhxT-VVU9p{pgqq9!^vB^sRygc+C81t77AM{KVE1dDjg_CA2Kh|Q`5F+ZtF z@WLi~_jbFt(Npfu@pyq1P2MWUR6zEq(oy*%%1Bh>bksH06HReeOr@8l!GWcJPB0d| zdEFl8OsB`q?2d9bV#*y^QZ%l37(B;}Day?&VD?&vtBwt;aCoX6_HtUI=WMV}tD9ND zhSfNoc6a$rPOlq+%SYrF7)3r{! zy4DYpzJ10xruv-+bk2@ykjJ;KG_1huy!H@-O+ZyE|p{nq0e!YO4WjWdhmoAFt-yo?Qq3N@Nk|D@Q%o#f`Ma z=ATG9hqXJr&Sn=WV5PgkUhVYKiYABG>+wq(I!pW^{kw|5-mbz3d%?sp;|hi`|89i6 zG^eO|(lES{sO}2w1-bd-hcSdx_dXlaaRIRp{BC$af7RgX-shs=KBsSo$b0~gi3O#j zD0Ov5xly6eUYwnqP4W2lJ{!`~;gI@l_^B>6tePf5Vehjk?6~1-4C>zJDzujtkD~-p zP9OMpc6)wNUP(z&32HF6sML?H22|<{hzg1dN0t?3gT|@5ng*wnF8eW~3$w@M0kA*< z#Hc`Obt3tkG3o{FaXKoQy}?=S1CY0|-i0gQ>u#)v9y5Dm9j#M9B;$)q@(auIC=cU{ z%hX*7BDLEay!93J$VWwur=bEz*mH`aH1kcZC&MEWe}E;%=aZ-M@FbaYm~Aj;gAf#s<`cxIqWc&R*ErjYWPl1r?+URYuWu+NrVFNBC5UZc9Ez^){6^q5utEoJ>TAeGO#~_26-NshEL%bD)g& z=0GX!YMtY3(<)7M*=B7+wcm-`USka+w2vfDEEUWTuHHo2)vgA#d(fcrYL|aq<)5VL z`bRo1YUIcxwW_LO(HcmP1B%7$z7?Np2!FDb&MF7eZ6GD_F9;-57mi|`peK-6C()%T zQS53mYOFq&{}ztR%jZ^4wm((s0N}1hD@j!~YH~TJ*V9d&t^snO2((@aIZ}gO^jGy2 zEd%X6PN)hFfKtPTvcax(V4bcXd=g*g>m0QgE5heMi-HaUv(r8h74gNiL8`zzqXq|i zuyzzRNQi`J?dl~VRe>+0-@6_yqtgSuKsfRZy3q!pU@i~JrpD#K&AP&iJ2JI-2z-gV z-sNnl2~<@1)CzYE79Ud%E>ciR$5J{q)Cj0i1sMkfIe5cWTM5;r#z+mp#WJ}A4G4+g zb5mo3*Hwi|^}8E(}rZ+4c@@{4ro@;?Q!}QD=4Y< zP$C!4IxZFxbkZ)8{8_`)LmC<#r~uM)IMu$3Gw4*WN}o3RW4z?F_+^)rm1Lc&%kF6O zLf2`@G_F$kU2-w0mrv(HT%zX`JfObBo%Ih_rN@Cwpa#{e=1HY;YQtdlLj#Hy&s9%N zD0v4R4akUJ9iUVdZnvir*9=O2Q8{o$Ty*$VAlNMUul%59P`;okR7V%D7)SFZb=Fzi zJk{lw9E+6y?Cz|P6g`4;x~SB}-c%%Cb;6Sze%118Al+B|N2(g?(>uT9uevwgRq3Vs zD$?qtid3w6S2HykXy5$=nP2-UG~@x-$dY2ayUD|F&&w{&8%d)M^c?z(_g6PLF7NEP zqO+ra(2>&z9adcHb`_dbaMm@sJZ`#MfC}o+^b?@-J8Xu<0eU;K(RX-T-9}sN(Wj#8Y?gaQv2O%x18CV1L7G07+#QFm{Y{;BTMp2?KuV6 z_*{p*Fb^#NvyUqrU05`M*|V=5SAYy*mAP8IKB8+1!ra^@8L6jxHd-qN~?PfXf{ffksok>hoYu8@ozksj`e_XAjfqG0B zl>|;25QTJm%G{;n;nU!q>g!ERM@QDJUK#Ys98^)Ii|#>whrMD%jf0e?BFEQDDM9Bm zr^y>sJ}OX|yE5Q*Ac^Vh;^&~4?7`dR4^N-G1r)dPtE!Z*EXSs;dQ^~T+Sv{^OcLP(KV^wD;N{l%uBx$y* z0_!W9Sui%cZ!pe$x{a$8-z;)eQ2S7Y$pGB)p`cY5s+8acf$wpsIix(}#!83HN(KGzS;Nvj4^brj->8uuKFbrUoBUVw4CN>aL4rc$u)Bt8}FRyQ!bKu-L*{p za1^7KsRo}|Vw3E?=6s@mKb`s+b}y?!j{-ZYIqd4ao=R6$6{yD9geJZUS4IQFr8mW0 zQ_0HJ`o;W2J)<5p&VbiF75(*b^^88_#OMP~O#PM8vLW);n>5@*B3DqXCC(qO0q#}o!7FQ39HYFH)yr!Z#&tH4QZV7M3m8#Tum`rj-0 fnC!Aq|2{-^K|xW@zYkJcmiwPBCIrD%gJ}L275g;E literal 0 HcmV?d00001 diff --git a/R.BAT b/R.BAT new file mode 100644 index 0000000..c9ab9be --- /dev/null +++ b/R.BAT @@ -0,0 +1 @@ +edit compacta.img