943 lines
27 KiB
C++
943 lines
27 KiB
C++
#include <ctype.h>
|
||
#include <direct.h>
|
||
#include <stdlib.h>
|
||
#include <stdio.h>
|
||
#include <dir.h>
|
||
#include <dos.h>
|
||
#include <string.h>
|
||
#include <alloc.h>
|
||
#include <conio.h> // Para getch();
|
||
#include <graphics.h> // 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;
|
||
}
|