First commit 11/11/1991

This commit is contained in:
José David Guillén 2021-09-03 17:51:51 +02:00
commit 27e54671f3
16 changed files with 2251 additions and 0 deletions

306
BROWSER.CPP Normal file
View File

@ -0,0 +1,306 @@
#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 "..\..\jd_lib\f_lib\make_bot.h" // Fuciones de MAKE_BOTON
#define __Modulo_Browser
#include "compacta.h"
extern BROWSER far *Browser;
// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
// ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ
// Û F U N C I O N E S p a r a e l B R O W S E R Û
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
// ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
void ReDraw_Browser(void)
{
int OLD_Brw = BrowserRow;
// 1§ Borramos pantalla de muestreo...
setfillstyle( SOLID_FILL, EGA_BLACK );
setcolor( EGA_BLACK );
// Muestreo de archivos
bar( 9, 9, 153, 173 );
// 3§ Mostramos los nuevos Archivos
for ( BrowserRow = 0; BrowserRow < 16; BrowserRow++)
if ( ( BrowserRow + BrowserTop ) < maxfiles )
ShowHideBrowserRow( HIDE );
BrowserRow = OLD_Brw;
}
void Fill_Directory(void)
{
char Buffer[180];
// Recuadro del directorio
// 1§ Borramos pantalla de muestreo...
setfillstyle( SOLID_FILL, EGA_BLACK );
setcolor( EGA_BLACK );
bar( 5, 182, 179, 195 );
setcolor( EGA_YELLOW );
getcwd( Buffer, 180 );
if ( strlen( Buffer ) > 28 )
{
// Acorta el Buffer poniendo al principio U:\...[DIRECTORIO]
char Buffer1[30];
// Primero copiamos en Buffer1 los 22 ultimos caracteres de Buffer
strncpy( Buffer1, strrev(Buffer), 22 ); Buffer1[22] = NULL;
strrev( Buffer1 );
// Despues conservamos solo de Buffer [Und][:][\]
strrev(Buffer); Buffer[3] = NULL;
// Y agregamos [...]
strcat( Buffer, "..." );
// Ya podemos unirlo todo
strcat( Buffer, Buffer1 );
//
}
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
outtextxy( 7, 184, Buffer );
}
void ShowHideBrowserRow( char Hide_Show )
{
char Buffer[80];
char Longitud[80];
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
if ( Hide_Show == HIDE )
{
setfillstyle( SOLID_FILL, EGA_BLACK );
bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) );
switch( Browser[BrowserTop+BrowserRow].attrs )
{
case FA_DIREC:
setcolor( EGA_CYAN );
break;
case 255:
setcolor( EGA_MAGENTA );
break;
default:
setcolor( EGA_WHITE );
}
} else {
switch( Browser[BrowserTop+BrowserRow].attrs )
{
case FA_DIREC:
setfillstyle( SOLID_FILL, EGA_CYAN );
// setcolor( EGA_CYAN );
break;
case 255:
setfillstyle( SOLID_FILL, EGA_MAGENTA );
// setcolor( EGA_MAGENTA );
break;
default:
setfillstyle( SOLID_FILL, EGA_WHITE );
// setcolor( EGA_WHITE );
}
bar( 9, ( 10 + ( BrowserRow * 10 ) ), 153, ( ( 9 + 10 ) + ( BrowserRow * 10 ) ) );
setcolor( EGA_BLACK );
}
outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Browser[BrowserTop+BrowserRow].Fichero );
formatea_long( Browser[BrowserTop+BrowserRow].Longitud, Longitud );
switch( Browser[BrowserTop+BrowserRow].attrs )
{
case FA_DIREC:
sprintf ( Buffer, " DIRECTORIO", Longitud );
break;
case 255:
sprintf ( Buffer, " < UNIDAD >", Longitud );
break;
default:
sprintf ( Buffer, " %10s", Longitud );
}
outtextxy( 10, ( 9 + ( BrowserRow * 10 ) ), Buffer );
}
void DownBrowser(void)
{
// ¨¨ Estoy en la linea fisica 000 ???
if ( (BrowserRow + BrowserTop) != (maxfiles - 1) ) {
// Linea 0, Baja Con retroceso multiple
if ( BrowserRow == 15 ) {
BrowserTop += 16;
if ( (BrowserTop + BrowserRow) > maxfiles ) BrowserRow = 0;
while ( (BrowserTop + BrowserRow) > maxfiles ) BrowserTop--;
BrowserRow = 0;
ReDraw_Browser();
ShowHideBrowserRow( SHOW );
} else {
ShowHideBrowserRow( HIDE );
BrowserRow++;
ShowHideBrowserRow( SHOW );
}
}
}
void UpBrowser(void)
{
// ¨¨ Estoy en la linea fisica 000 ???
if ( (BrowserRow + BrowserTop) != 0 ) {
// Linea 0, Baja Con retroceso multiple
if ( BrowserRow == 0 ) {
BrowserTop -= 16;
if ( BrowserTop < 0 ) BrowserTop = 0;
BrowserRow = 0;
ReDraw_Browser();
BrowserRow = 15;
ShowHideBrowserRow( SHOW );
} else {
ShowHideBrowserRow( HIDE );
BrowserRow--;
ShowHideBrowserRow( SHOW );
}
}
}
int SelectBrowser(void)
{
int RETURN = 1;
switch( Browser[BrowserTop+BrowserRow].attrs )
{
case FA_DIREC:
chdir( Browser[BrowserTop+BrowserRow].Fichero );
BrowserRow = BrowserTop = 0;
// 2§ Realizamos un Scaneo del Directorio
BrowserTop = 0; BrowserRow = 0;
RasterScan();
Fill_Directory();
ReDraw_Browser();
ShowHideBrowserRow( SHOW );
RETURN = 0;
break;
case 255:
erroroccurred=0;
olddisk=getdisk();
setdisk( (Browser[BrowserTop+BrowserRow].Fichero[0] - 'A') );
if (erroroccurred) {
setdisk(olddisk);
} else {
BrowserRow = BrowserTop = 0;
// 2§ Realizamos un Scaneo del Directorio
BrowserTop = 0; BrowserRow = 0;
RasterScan();
Fill_Directory();
ReDraw_Browser();
ShowHideBrowserRow( SHOW );
}
RETURN = 0;
break;
default:
RETURN = 1;
}
return RETURN;
}
unsigned int RasterScan(void) {
struct ffblk ffblk;
char done=0;
unsigned int olddisk;
maxfiles = 0;
unsigned char i;
// build a disk drive availiable list
olddisk=getdisk();
for (i=1;i<27;i++) if (_chdrive(i) == 0)
{
sprintf( Browser[maxfiles].Fichero, "%c:", (char)('A' + i - 1) );
Browser[maxfiles].Longitud=0;
Browser[maxfiles].attrs=255; // Unidad
if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0;
maxfiles++;
}
setdisk(olddisk);
// drivelist[2]='N'; //stop access to B drive until I sort out pahntom dive probs
//Ok, Drive B may be a phantom drive. If you try to access drive B, then
//the program looses controll. Bummer!
// needs debugging. (always ignores drive b...)
// asm int 0x11
// asm mov equipmentlist,ax
// drivelist[2]='N';
// if ((equipmentlist & 16)) drivelist[2]='Y';
done = findfirst("*.*",&ffblk,FA_DIREC);
while (!done) {
if (ffblk.ff_attrib == 0x10) {
strcpy(Browser[maxfiles].Fichero,ffblk.ff_name);
Browser[maxfiles].Longitud=ffblk.ff_fsize;
Browser[maxfiles].attrs=ffblk.ff_attrib;
if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0;
maxfiles++;
}
done = findnext(&ffblk);
if (maxfiles==200) done=!done; //stop to prevent internal crashes.
}
done = findfirst(Comodin,&ffblk,FA_DIREC);
while (!done) {
if (ffblk.ff_attrib != 0x10) {
strcpy(Browser[maxfiles].Fichero,ffblk.ff_name);
Browser[maxfiles].Longitud=ffblk.ff_fsize;
Browser[maxfiles].attrs=ffblk.ff_attrib;
if (ffblk.ff_attrib & 16) Browser[maxfiles].Longitud=0;
maxfiles++;
}
done = findnext(&ffblk);
if (maxfiles==200) done=!done; //stop to prevent internal crashes.
}
return maxfiles;
}
void interrupt critical_error_handler(.../*__CPPARGS*/) {
asm push ax //preserve only modified register
asm mov ax,di //di holds error code ranging from 0 to 0x0c
// asm inc ax
asm mov erroroccurred,ax //increase erroroccurred for ease of programming
asm mov al,0x20
asm out 0x20,al //send interrupt clear flag
// asm pushf // I think I dont need this line in....
asm pop ax //restore ax
}
void startceh() {
old_int24 = _dos_getvect( 0x24 );
_dos_setvect( 0x24, critical_error_handler);
}
void stopceh() {
_dos_setvect(0x24,old_int24);
}
ƒût÷ëƒût÷ûÃût÷눃ût÷ûÃ>ÿtTãRÿ6ž£°SèGQ2À¹è>t¡šÄèêY[&Š"Àt SQè`þY[CâíXPèê€>™t¡š†Äèäé<C3A4>žÃQèöýèè5Yá®

BIN
C.EXE Normal file

Binary file not shown.

942
COMPACTA.CPP Normal file
View File

@ -0,0 +1,942 @@
#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;
}

215
COMPACTA.H Normal file
View File

@ -0,0 +1,215 @@
//////////////// Recuadros de Selecci¢n
#define Fichero_EXE 1
#define Info_Fich_Cola 2
#define B_Browser 3
#define Files_Already_Added 4
#define Files_Added 5
//////////////// Botones
#define Select_EXE 1
#define Load_PRJ 2
#define Save_PRJ 3
#define Make_H 4
#define Sort_Cola 5
#define Join_Files 6
#define Ins 7
#define Supr 8
#define SWAP 9
#define Exit 10
#define Subir_Browser 11
#define Select_Browser 12
#define Bajar_Browser 13
/////
#define HIDE 0
#define SHOW 1
/************************************************************************\
³±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
\************************************************************************/
typedef struct
{
char Fichero[13];
long Longitud;
unsigned char attrs;
} BROWSER;
typedef struct
{
char Fichero[13];
long Longitud;
long Posicion;
} COLA;
typedef struct
{
BROWSER ExeInfo;
char DirectorioExe[200];
char DestName[13];
char FilesAdded;
COLA Cola[51];
char Directorio[51][200];
char Selected[51];
char Macro[51][15];
} PROJECT;
typedef struct
{
char ID_Code; // Debe contener una constante de comprobacion 'J'
char ID_check; // igual que el anterior pero conteniendo 'D'
char JD_string[11]; // aqui debe haber escrito "Jos David" + NULL
long Org_Long; // Longitud original del EXE...
char N_Files_Added;
} EXE_COLA;
/************************************************************************\
³±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±³
\************************************************************************/
/************************************************************************\
³±±±±±±±±±±±±F±U±N±C±I±O±N±E±S±±±D±E±L±±±S±E±L±E±C±T±±±F±I±L±E±S±±±±±±±±±±±³
\************************************************************************/
#ifndef __Modulo_Principal
#define JD_ch extern
#else
#define JD_ch
#endif
JD_ch void formatea_long( long Numero, char *Inter_Chg );
JD_ch void ShowHideSelect( char Hide_Show ) ;
JD_ch void Delete_Added( void ) ;
JD_ch void Marca_Bordes( void ) ;
JD_ch void All_Screen( void ) ;
JD_ch void DownSelect( void ) ;
JD_ch void UpSelect( void ) ;
JD_ch void AddFile( void ) ;
JD_ch void ShowInfo( int Hide_Show ) ;
JD_ch void SelectFile( void ) ;
JD_ch void Start_Join(void) ;
JD_ch void Load_Project(void) ;
JD_ch void Save_Project(void) ;
JD_ch void Make_Header(void) ;
JD_ch void Check_EXE(void) ;
#ifdef __Modulo_Principal
void Start_Join(void) {}
void Load_Project(void) {}
void Save_Project(void) {}
void Make_Header(void) ;
void Check_EXE(void) {}
void FSort_Cola(void) ;
#endif
#undef JD_ch
/************************************************************************\
³±±±±±±±±±±±±±±F±U±N±C±I±O±N±E±S±±±D±E±L±±±B±R±O±W±S±E±R±±±±±±±±±±±±±±±±±±±³
\************************************************************************/
#ifndef __Modulo_Browser
#define JD_ch extern
#else
#define JD_ch
#endif
JD_ch unsigned int RasterScan( void ) ;
JD_ch void ShowHideBrowserRow( char Hide_Show ) ;
JD_ch void ReDraw_Browser( void ) ;
JD_ch void Fill_Directory( void ) ;
JD_ch int SelectBrowser( void ) ;
JD_ch void DownBrowser( void ) ;
JD_ch void UpBrowser( void ) ;
#undef JD_ch
/**************************************************************************\
³ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ³
\**************************************************************************/
/*
,
\
\ !
___________________________\___ ÚÄ¿
/ / ³ ÚÄ¿\ ÀÂÙ
/ / ³ ÀÂÙ \ ÚÅÙ
/__/ ³__Ã-¿ \ ÚÁ¿ ÚÄ¿
----- ³ ____ ____ \____\___ ---------ÀÂÙ----
/ / __ \ / __ \ ³# ------ÚÅ¿
³/ / \ \ ________________ / / \ \ \¿ -------|ß|
ÚÙ | JD | ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ | JD | ÀÄÄÄÄÄÄÄÙ ________
À \ / \ / ________
______________ùù____________________________ùù_______________________________
|||||||||======
/ ___ \====
/ ___ / __
/ / __/ ³ \
| / ³ \ ÀÄÄ|
\ | ÀÄÄ| /
| \ / ù-------\
\ ùù ---------/
\ \======/ |
\_________/
*/
#ifndef __Modulo_Principal
#define JD_ch extern
#else
#define JD_ch
#endif
JD_ch char Borde_Activo; // Indica el recuadro actualmente activo
JD_ch char Comodin[13]; // Comodin de rastreo para el Browser
JD_ch char EXE_is_JD; // El EXE cargado ha sido tratado por JD
JD_ch char FilesAdded; // Numero de Ficheros a¤adidos a la cola
JD_ch char CurrRow; // Linea actual en la cola..............
JD_ch char BrowserRow;
JD_ch int BrowserTop;
JD_ch int maxfiles;
JD_ch char oldpath[229]; //internal. do not change
JD_ch unsigned char olddrive; //impossible drive name
JD_ch char olddisk, key;
JD_ch long LastPosicion; // Esta variable guarda la ultima posici¢n dentro
JD_ch char LastSelected; // del ejecutable y la siguiente, el £ltimo se¤alado
////////////////////////////////////////////////////////////////////////////
/***************************************************************************\
| Critical Disk Error handling routines (C) 1995 Jason Speight. |
| void interrupt critical_error_handler(__CPPARGS) is the interrupt which |
| captures disk io errors. (int 0x24, if you're interested!) Such errors |
| are : Disk not inserted in drive, seek error reading from a drive, general|
| disk failure etc. The only things the interrupt does is : |
| Suppress the dos ABORT,RETRY,FAIL,IGNORE statement |
| Sets a variable erroroccurred to the dos error statement. (!=0) |
| |
| StartCEH() and StopCEH() start and stop the error handler. YOU MUST |
| STOPCEH BEFORE THE EXIT OF THE PROGRAM. or else when you get a disk |
| error, the int 24 issued bu DOS points to the middle of nowhere! *HANG* |
| |
| diskerror() is my routine to display a disk IO error. It also sets the |
| global variable erroroccurred to 0 for future use. This procedure also |
| needs access to "SCRNHNDL.H" and "BOXES.H" |
| |
| BTW, anybody know how to trap the message "PLEASE INSERT DISK FOR DRIVE x"|
\***************************************************************************/
//for interrupt handlers
JD_ch void interrupt critical_error_handler(...) ; // interrupt prototype
JD_ch void interrupt (*old_int24)(...) ; // interrupt function pointer
JD_ch void startceh() ;
JD_ch void stopceh() ;
JD_ch int erroroccurred;
#undef JD_ch

287
COMPACTA.IMG Normal file
View File

@ -0,0 +1,287 @@
­1
******* Fichero .EXE **********************
& 189, 0, 555, 80, 7, 63, 56, -2, 1
& 192, 3, 552, 77, 7, 2, 2, -3, 1
& 196, 7, 548, 73, 7, 56, 63, 2, 1
**** Cuadro para Origen
& 262, 11, 365, 28, 0, 63, 56, 0, 1
| 200, 11, 2, 5, 0, 63, Origen,
| 201, 12, 2, 5, 0, 0, Origen,
| 200, 12, 2, 5, 0, 63, _,
| 201, 13, 2, 5, 0, 4, _,
**** Cuadro para Destino
& 440, 11, 540, 28, 0, 63, 56, 0, 1
| 360, 11, 2, 5, 0, 63, Destino,
| 361, 12, 2, 5, 0, 0, Destino,
| 360, 12, 2, 5, 0, 63, _,
| 361, 13, 2, 5, 0, 4, _,
**** Cuadro para tam¤o de la cola + Indice
& 345, 41, 440, 58, 0, 63, 56, 0, 1
& 460, 41, 506, 58, 0, 63, 56, 0, 1
*| 460, 41, 2, 5, 0, 63, 1234567890,
| 200, 41, 2, 5, 0, 63, Tama¤o de la cola,
| 201, 42, 2, 5, 0, 0, Tama¤o de la cola,
| 200, 42, 2, 5, 0, 63, _,
| 201, 43, 2, 5, 0, 4, _,
| 447, 41, 2, 5, 0, 63, +,
| 448, 42, 2, 5, 0, 0, +,
| 501, 41, 2, 5, 0, 63, Bytes,
| 502, 42, 2, 5, 0, 0, Bytes,
**** Cuadro para DATOS EXTENDIDOS SOBRE INCLUSIàN
& 189, 85, 555, 200, 7, 63, 56, -2, 1
& 192, 88, 552, 197, 7, 2, 2, -3, 1
& 196, 92, 548, 193, 7, 56, 63, 2, 1
**** Cuadro para Nombre_Extendido
& 262, 96, 365, 113, 0, 63, 56, 0, 1
| 195, 96, 2, 5, 0, 63, Nombre,
| 196, 97, 2, 5, 0, 0, Nombre,
**** Cuadro para Longitud
& 440, 96, 540, 113, 0, 63, 56, 0, 1
| 360, 96, 2, 5, 0, 63, Longitud,
| 361, 97, 2, 5, 0, 0, Longitud,
**** Cuadro para Posici¢n
& 440, 116, 540, 133, 0, 63, 56, 0, 1
| 360, 116, 2, 5, 0, 63, Posici¢n,
| 361, 117, 2, 5, 0, 0, Posici¢n,
**** Cuadro para Localizaci¢n
& 262, 152, 540, 169, 0, 63, 56, 0, 1
| 195, 154, 2, 4, 0, 63, Directorio,
| 196, 155, 2, 4, 0, 0, Directorio,
******* CUADROS PARA MACRO ****************
**** Cuadro para Posici¢n
& 262, 172, 365, 189, 0, 63, 56, 0, 1
| 195, 174, 2, 4, 0, 63, Nombre ID,
| 196, 175, 2, 4, 0, 0, Nombre ID,
| 195, 175, 2, 4, 0, 63, _,
| 196, 176, 2, 4, 0, 4, _,
& 440, 174, 540, 189, 0, 63, 56, 0, 1
| 360, 174, 2, 4, 0, 63, N£mero ID,
| 361, 175, 2, 4, 0, 0, N£mero ID,
******* BOTONES ***************************
************ Cuadro Para Botones **********
& 560, 0, 640, 480, 7, 63, 56, -2, 1
& 568, 8, 632, 472, 7, 56, 63, 2, 1
& 564, 4, 636, 476, 1, 2, 2, -3, 1
****** Botones:
* Seleccionar Fichero Ejecutable
& 570, 10, 629, 45, 7, 63, 56, 2, 1
| 574, 13, 2, 5, 0, 63, Fichero,
| 575, 14, 2, 5, 0, 0, Fichero,
| 574, 25, 2, 5, 0, 63, .EXE,
| 575, 26, 2, 5, 0, 0, .EXE,
| 574, 14, 2, 5, 0, 63, _,
| 575, 15, 2, 5, 0, 4, _,
*
*& 570, 46, 629, 81, 7, 63, 56, 2, 1
* Cargar .PRJ
& 570, 62, 629, 98, 7, 63, 56, 2, 1
| 574, 65, 2, 5, 0, 63, Cargar,
| 575, 66, 2, 5, 0, 0, Cargar,
| 574, 77, 2, 5, 0, 63, .PRJ,
| 575, 78, 2, 5, 0, 0, .PRJ,
| 574, 66, 2, 5, 0, 63, _,
| 575, 67, 2, 5, 0, 4, _,
* Salvar .PRJ
& 570, 99, 629, 134, 7, 63, 56, 2, 1
| 574, 102, 2, 5, 0, 63, Salvar,
| 575, 103, 2, 5, 0, 0, Salvar,
| 574, 114, 2, 5, 0, 63, .PRJ,
| 575, 115, 2, 5, 0, 0, .PRJ,
| 574, 103, 2, 5, 0, 63, _,
| 575, 104, 2, 5, 0, 4, _,
*
*& 570, 155, 629, 190, 7, 63, 56, 2, 1
* Crear Cabecera
& 570, 151, 629, 186, 7, 63, 56, 2, 1
| 574, 154, 2, 5, 0, 63, Crear,
| 575, 155, 2, 5, 0, 0, Crear,
| 574, 170, 2, 4, 0, 63, Cabecera,
| 575, 171, 2, 4, 0, 0, Cabecera,
| 574, 155, 2, 5, 0, 63, _,
| 575, 156, 2, 5, 0, 4, _,
* Ordenar Ficheros de Cola
& 570, 187, 629, 222, 7, 63, 56, 2, 1
| 574, 187, 2, 4, 0, 63, Ordenar,
| 575, 188, 2, 4, 0, 0, Ordenar,
| 574, 197, 2, 4, 0, 63, Ficheros,
| 575, 198, 2, 4, 0, 0, Ficheros,
| 574, 198, 2, 4, 0, 63, _,
| 575, 199, 2, 4, 0, 4, _,
| 574, 207, 2, 4, 0, 63, de Cola,
| 575, 208, 2, 4, 0, 0, de Cola,
* Encolar Ficheros
& 570, 223, 629, 258, 7, 63, 56, 2, 1
| 574, 226, 2, 4, 0, 63, Encolar,
| 575, 227, 2, 4, 0, 0, Encolar,
| 576, 239, 2, 4, 0, 63, Ficheros,
| 577, 240, 2, 4, 0, 0, Ficheros,
| 574, 227, 2, 4, 0, 63, _,
| 575, 228, 2, 4, 0, 4, _,
* Insertar
& 570, 269, 629, 294, 7, 63, 56, 2, 1
| 577, 274, 2, 4, 0, 63, Insertar,
| 578, 275, 2, 4, 0, 0, Insertar,
| 577, 275, 2, 4, 0, 63, ___,
| 578, 276, 2, 4, 0, 4, ___,
* Suprimir
& 570, 295, 629, 320, 7, 63, 56, 2, 1
| 577, 300, 2, 4, 0, 63, Suprimir,
| 578, 301, 2, 4, 0, 0, Suprimir,
| 577, 303, 2, 4, 0, 63, ____,
| 578, 304, 2, 4, 0, 4, ____,
*
*& 570, 321, 629, 356, 7, 63, 56, 2, 1
* SWAP
& 570, 377, 629, 412, 7, 63, 56, 2, 1
| 577, 382, 2, 7, 0, 63, SWAP,
| 578, 383, 2, 7, 0, 0, SWAP,
* Salir
& 570, 443, 629, 469, 7, 63, 56, 2, 1
| 571, 446, 2, 5, 0, 63, SALIR,
| 572, 447, 2, 5, 0, 0, SALIR,
| 571, 447, 2, 5, 0, 63, _,
| 572, 448, 2, 5, 0, 4, _,
******* BROWSER ***************************
& 0, 0, 184, 200, 7, 56, 63, -2, 1
& 7, 7, 155, 175, 0, 63, 56, 1, 1
& 3, 180, 181, 197, 0, 63, 56, 1, 1
*| 7, 184, 2, 4, 0, 63, MMMMMMMMM-MMMMMMMMM-MMMMMM7,
& 3, 3, 181, 179, 7, 2, 2, -3, 1
**** Botones: Subir, Seleccionar, Bajar
& 156, 7, 177, 63, 7, 56, 63, 1, 2
& 156, 63, 177, 119, 7, 56, 63, 1, 2
& 156, 119, 177, 175, 7, 56, 63, 1, 2
| 158, 65, 2, 5, 1, 63, A¤adir,
| 159, 66, 2, 5, 1, 0, A¤adir,
| 158, 66, 2, 5, 1, 63, _ ,
| 159, 67, 2, 5, 1, 4, _ ,
| 158, 15, 2, 5, 1, 63, Subir,
| 159, 16, 2, 5, 1, 0, Subir,
| 158, 124, 2, 5, 1, 63, Bajar,
| 159, 125, 2, 5, 1, 0, Bajar,
*| 10, 27, 2, 4, 0, 63, B: <Unidad> ,
*| 10, 37, 2, 4, 0, 63, C: <Unidad> ,
*| 10, 47, 2, 4, 0, 63, . <Dir> ,
*| 10, 57, 2, 4, 0, 63, .. <Dir> ,
*| 10, 67, 2, 4, 0, 63, CD_OUT0F.PCX 12.345.678,
*| 10, 77, 2, 4, 0, 63, CD_OUT0A.PCX 556.313,
*| 10, 87, 2, 4, 0, 63, CD_OUT .EXE 345.678,
*| 10, 97, 2, 4, 0, 63, BROWSER .EXE 5.621.128,
*| 10, 117, 2, 4, 0, 63, LEEME .TXT 678,
* & 573, 3, 637, 477, 4, 4, 4, -2, 1
* x y fuente tama¤o orientacion color texto
******* Archivos ya incluidos y nuevos a¤adidos
******* Archivos ya incluidos
& 0, 205, 115, 480, 7, 63, 56, -2, 1
& 3, 208, 112, 477, 7, 2, 2, -3, 1
& 7, 211, 108, 473, 0, 56, 63, 2, 1
***** Archivos a¤adidos
& 120, 205, 555, 480, 7, 63, 56, -2, 1
& 123, 208, 552, 477, 7, 2, 2, -3, 1
& 127, 211, 548, 473, 0, 56, 63, 2, 1
*| 13, 211, 2, 5, 0, 63, NNNNNNNN.EEE,
*| 15, 220, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 235, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 250, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 265, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 280, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 295, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 310, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 325, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 340, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 355, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 370, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 385, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 400, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 415, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 430, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 445, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
*| 15, 460, 2, 5, 0, 63, XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE XXX NNNNNNNN.EEE,
#1
!1,13
***************************************************
* BOTONES DEL CUADRO DE BOTONES Y BROWSER *
***************************************************
****** Botones:
* Seleccionar Fichero Ejecutable
$ 570, 10, 629, 45, 7, 63, 56, 2, 1, 00, 23
* Cargar .PRJ
$ 570, 62, 629, 98, 7, 63, 56, 2, 1, 00, 46
* Salvar .PRJ
$ 570, 99, 629, 134, 7, 63, 56, 2, 1, 00, 38
* Crear Cabecera
$ 570, 151, 629, 186, 7, 63, 56, 2, 1, 00, 19
* Ordenar Ficheros de Cola
$ 570, 187, 629, 222, 7, 63, 56, 2, 1, 00, 33
* Encolar Ficheros
$ 570, 223, 629, 258, 7, 63, 56, 2, 1, 00, 18
* Insertar
$ 570, 269, 629, 294, 7, 63, 56, 2, 1, 00, 82
* Suprimir
$ 570, 295, 629, 320, 7, 63, 56, 2, 1, 00, 83
* SWAP
$ 570, 377, 629, 412, 7, 63, 56, 2, 1, 00, 64
* Salir
$ 570, 443, 629, 469, 7, 63, 56, 2, 1, 00, 31
**** Botones: Subir, Seleccionar, Bajar ( BROWSER )
$ 156, 7, 177, 63, 7, 56, 63, 1, 2, 00, 00
$ 156, 63, 177, 119, 7, 56, 63, 1, 2, 00, 30
$ 156, 119, 177, 175, 7, 56, 63, 1, 2, 00, 00
!2,5
************** Recuadros Selecci¢n de etapa
******* Fichero .EXE
$ 192, 3, 552, 77, 7, 2, 2, -3, 1, 00, 33
**** Cuadro para DATOS EXTENDIDOS SOBRE INCLUSIàN
$ 192, 88, 552, 197, 7, 2, 2, -3, 1, 00, 00
**** BROWSER
$ 3, 3, 181, 179, 7, 2, 2, -3, 1, 00, 00
**** Archivos ya incluidos
$ 3, 208, 112, 477, 7, 2, 2, -3, 1, 00, 00
**** Archivos a¤adidos
$ 123, 208, 552, 477, 7, 2, 2, -3, 1, 00, 00

BIN
COMPACTA.PRJ Normal file

Binary file not shown.

305
C_FILE.CPP Normal file
View File

@ -0,0 +1,305 @@
#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_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);
}

BIN
EGAVGA.BGI Normal file

Binary file not shown.

32
KEY.CPP Normal file
View File

@ -0,0 +1,32 @@
#include <alloc.h>
#include <conio.h>
#include <dos.h>
#include <mem.h>
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 );
}

BIN
KEY.EXE Normal file

Binary file not shown.

BIN
LITT.CHR Normal file

Binary file not shown.

163
MAKE_BOT.H Normal file
View File

@ -0,0 +1,163 @@
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Errores devueltos por las Funciones Û
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
#define OK 1
#define SIN_MEMORIA 5
#define ERROR_ABRIENDO 6
#define ERROR_CERRANDO 7
#define ON 1
#define OFF 0
#define EOL 10 // Fin de linea
#define MB_TeclaPulsada() ( *(unsigned *) MK_FP(0x40,0x1A) != *(unsigned *) MK_FP(0x40,0x1C) )
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Funciones propias de MAKE_BOTON Û
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Carga los botones del fichero *f_datos, devolviendo los ±
// ± errores indicados en #define xxxxx X ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
int carga_botones(char *f_datos);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Despliega los datos que fueron cargados. ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
void despliega_datos(void);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Imprime los botones estaticos de la secuencia Sec_st, en el ±
// ± fichero file. ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
int Imprime_Estaticos(int Sec_st, char *file);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Imprime los botones din micos de la secuencia Sec_num. ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
void Imprime_Secuencia(int Sec_num);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± ±
// ± Imprime un borde completo de color Color sobre el boton Boton, ±
// ± de la secuencia n£mero Sec_num. ±
// ± ±
// ± NOTA: ±
// ± Si color es negativo se imprimiran los bordes normales. ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
void Imprime_Bordes(int Sec_num, int Boton, int Color);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Comprueba la pulsaci¢n de los botones de la secuencia Sec_num ±
// ± ±
// ± Devuelve el n£mero de boton pulsado, 0 si no se pulso ninguno ±
// ± y deja en el buffer las teclas pulsadas si no corresponden con ±
// ± con las teclas asignadas a los botones. ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
int Comprueba_Secuencia(int Sec_num);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± Libera la memoria que ha sido asignada por Make_Boton. ±
// ± ±
// ± NOTA: ±
// ± DESPUES DE LIBERAR TODA LA MEMORIA DE M_B, NO SE DEBE ±
// ± UTILIZAR NINGUNA FUNCION SIN RECARGAR PRIMERO LOS BOTONES DE ±
// ± DE UN ARCHIVO CON ESTOS... ±
// ± ±
// ± FUNCION EXTRAIDA PARA USO COMUN, ESPECIALMENTE POR CD_out ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
void Libera_Memoria(void);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± ±
// ± Si True_Push se pone a ON, cuando se pulse un boton se hundira ±
// ± realmente, pero solo si hay suficiente memoria. ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
extern char True_Push;
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Funciones para el control de la Pantalla Û
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± ±
// ± Sirve para averiguar el tama¤o necesitado por GetImage para ±
// ± obtener una imagen 256c, para los BGI no compatibles KERNEL. ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
unsigned long JD_imagesize(int left, int top, int right, int bottom);
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
// ± ±
// ± Igual a InitGraph, pero realiza un mayor numero de comproba_ ±
// ± ciones, saliendo si ocurre algun error y mostrandolo... ±
// ± ±
// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
void Initialize(int GraphDriver, int GraphMode); // Inicializa el Modo Gr fico
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// Û Funciones para el control del Raton Û
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Muestra el cursor del Raton. - No sirve con el raton animado °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
void activa_raton(void);
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Desactiva el cursor del Raton. No sirve con el raton animado °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
void desactiva_raton(void);
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Regresa con una pulsaci¢n de tecla o la posici¢n en la cual °
// ° se pulso el raton. °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
int Espera_Tecla_o_Raton(void); // <->
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Sostiene el raton hasta que se suelte el boton presionado... °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
void Anclar_Raton(void);
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Libera la memoria asignada al Raton Animado. °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
void Libera_Raton_Animado(void);
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
// ° °
// ° Inicializa el Raton en el modo Gr fico... °
// ° °
// ° x1, y1, x2, y2. Son los topes del RATON °
// ° °
// ° °
// ° °
// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
void inicializa_raton_grafico(int x1, int y1, // Inicializa el Raton
int x2, int y2); // devolviendo raton = 1
extern char Push;
extern char raton; // Indica si hay un Raton = 1
extern char PunteroRaton; // ¨ Se modifica el puntero ?
extern int x_raton, y_raton; // Tras Espera_Tecla_o_Raton(); devuelve
// extern int boton_izq, boton_der; // las coordenadas y botones pulsados...
extern unsigned char BLANCO, GRIS_CLARO, NEGRO, UNKNOW, AZUL;

BIN
MAKE_BOT.OBJ Normal file

Binary file not shown.

BIN
MAKE_B_C.OBJ Normal file

Binary file not shown.

BIN
P.EXE Normal file

Binary file not shown.

1
R.BAT Normal file
View File

@ -0,0 +1 @@
edit compacta.img