COMPACTA/COMPACTA.CPP
2021-09-03 17:51:51 +02:00

943 lines
27 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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