commit 27e54671f3fff3f3fc189f4bf0a3a7fcd95021ec Author: jdg Date: Fri Sep 3 17:51:51 2021 +0200 First commit 11/11/1991 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); + } +ttËttÀ>tTR6SGQ2H>tY[&"t SQ`Y[CXP>tQ5Yá \ No newline at end of file diff --git a/C.EXE b/C.EXE new file mode 100644 index 0000000..cc58335 Binary files /dev/null and b/C.EXE differ diff --git a/COMPACTA.CPP b/COMPACTA.CPP new file mode 100644 index 0000000..499da74 --- /dev/null +++ b/COMPACTA.CPP @@ -0,0 +1,942 @@ +#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_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 Grfico + 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 Cdigo 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 Pgina + 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 Pgina + 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 Pgina + 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 Pgina + 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 enseamos 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 *| // | \ + |* ordenancin 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 \__ + \ / \ / \ / \ / \ / \ / pequeas 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 Seleccin +#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; + + /************************************************************************\ + + \************************************************************************/ + + + + + /************************************************************************\ + FUNCIONESDELSELECTFILES + \************************************************************************/ + +#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 + + /************************************************************************\ + FUNCIONESDELBROWSER + \************************************************************************/ + +#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 aadidos 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 posicin dentro +JD_ch char LastSelected; // del ejecutable y la siguiente, el ltimo sealado + + +//////////////////////////////////////////////////////////////////////////// +/***************************************************************************\ +| 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 tamo 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, Tamao de la cola, + | 201, 42, 2, 5, 0, 0, Tamao 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 INCLUSIN +& 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 Posicin +& 440, 116, 540, 133, 0, 63, 56, 0, 1 +| 360, 116, 2, 5, 0, 63, Posicin, + | 361, 117, 2, 5, 0, 0, Posicin, + +**** Cuadro para Localizacin +& 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 Posicin +& 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, Nmero ID, + | 361, 175, 2, 4, 0, 0, Nmero 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, Aadir, + | 159, 66, 2, 5, 1, 0, Aadir, +| 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 tamao orientacion color texto + + + +******* Archivos ya incluidos y nuevos aadidos +******* 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 aadidos +& 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 Seleccin de etapa +******* Fichero .EXE + $ 192, 3, 552, 77, 7, 2, 2, -3, 1, 00, 33 +**** Cuadro para DATOS EXTENDIDOS SOBRE INCLUSIN + $ 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 aadidos + $ 123, 208, 552, 477, 7, 2, 2, -3, 1, 00, 00 diff --git a/COMPACTA.PRJ b/COMPACTA.PRJ new file mode 100644 index 0000000..fb59bde Binary files /dev/null and b/COMPACTA.PRJ differ 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 0000000..8001631 Binary files /dev/null and b/EGAVGA.BGI differ 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 0000000..719566b Binary files /dev/null and b/KEY.EXE differ diff --git a/LITT.CHR b/LITT.CHR new file mode 100644 index 0000000..08c3067 Binary files /dev/null and b/LITT.CHR differ 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 dinmicos 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 nmero Sec_num. + // + // NOTA: + // Si color es negativo se imprimiran los bordes normales. + // + // + void Imprime_Bordes(int Sec_num, int Boton, int Color); + + // + // Comprueba la pulsacin de los botones de la secuencia Sec_num + // + // Devuelve el nmero 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 tamao 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 Grfico + +// +// 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 pulsacin de tecla o la posicin 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 Grfico... + // + // 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 0000000..5152038 Binary files /dev/null and b/MAKE_BOT.OBJ differ diff --git a/MAKE_B_C.OBJ b/MAKE_B_C.OBJ new file mode 100644 index 0000000..5152038 Binary files /dev/null and b/MAKE_B_C.OBJ differ diff --git a/P.EXE b/P.EXE new file mode 100644 index 0000000..5d68fbd Binary files /dev/null and b/P.EXE differ 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