#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 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; }