commit 89a9bade501e14ea2701ef103b8374a9e603f914 Author: jdg Date: Fri Sep 3 17:43:05 2021 +0200 First commit 09/12/1994 diff --git a/ADDVIEW2.CPP b/ADDVIEW2.CPP new file mode 100644 index 0000000..2349af2 --- /dev/null +++ b/ADDVIEW2.CPP @@ -0,0 +1,1457 @@ +////////////////////////////////////////////////////////////////////////// +///// Nombre: CAddView.CPP /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: M¢dulo para editar o modificar los programas /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 20 - 07 - 1994 /// +//// /// +//// Comentario: Abandono de Punteros a estructuras... /// +//// Imposible SEEK a modo "a+b" (modo actual "r/w+b") /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + + struct JD { + char esc; + char color[8]; + char prog[14]; + char nl; char rt; + char autor[36]; + char pt; char ef; + }; + + struct caddview_inx { + unsigned int Fin[4]; unsigned int FinC; + }; + + struct caddview { + unsigned int record_zone ; int nombre_zona ; + char nombre[13+1] ; char zip[3+1] ; int kbytes ; + }; + + struct caddviewComentario { + int record_zone_init; // Zona de grabaci¢n interna + char linea[10][32 + 1]; // 32 digitos * 10 lineas + }; + + struct JD cabecera; + struct caddview JD; + struct caddview_inx JDn; + struct caddviewComentario JD_comment; + + + FILE *JD_f; // Fichero JD + FILE *JDc_f; // Fichero COMENTARIO + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + + extern struct pedidos_descripcion { + unsigned int n_records; // n§ de grabaciones en el fichero + + char nombre[24+1]; // Nombre 24 digitos + NULL + char apelli[21+1]; // Apellidos 21 digitos + NULL + char direcc[21+1]; // Direcci¢n 21 digitos + NULL + long telefono; // Tel‚fono 5 digitos permitidos + char cpu[10 + 1]; // C.P.U. 10 digitos + NULL + int ram; // R.A.M 2 digitos permitidos + int hd; // HD. 4 digitos permitidos + }; + + extern struct pedidos_datos { + unsigned int record_zone ; int record_name; + char nombre[13+1] ; char zip[3+1] ; int kbytes ; + }; + + extern struct pedidos_descripcion JD_dp; // Descripci¢n... + extern struct pedidos_datos JD_dt; // Datos... + + extern FILE *JD_p; // Fichero Pedidos + + +// Variables de posici¢n y registro + + int CurrRow, CurrCol, x, pc; + unsigned int CurrTopLine; int n_registros=0; + int ilumina, M_M; int Registros[ 40 ]; int Dir_Registros[ 40 ]; + int PWS, Zx; + + char ArchivoDatos[13], ArchivoComentario[13]; + union REGS ent, sal; + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + extern struct boton { int left; int up; int right; int down; }; + extern int boton_izq; extern int boton_der; + extern int x_raton; extern int y_raton; + extern int raton; + extern int bpush; + extern int sb; + +extern int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); +extern void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py); +extern void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); +extern int CheckButon(int nb, struct boton menu[]); +extern void Sound_SN(char *headfile); +extern void BorraViewPort(int view); +extern void desactiva_raton(void); +extern void activa_raton(void); + +void Editar_Modificar(int Mirar_Modificar, int X); + +void EditCursorC(int ShowHide, int y); +void EditCursorE(int ShowHide); +void EditCursor(int ShowHide); +void PrintLine(int permiso); +void PrintWholeScreen(void); +void PideComentario(void); +void Delete_Pedidos(void); +void DeleteRecord(void); +void Add_Pedidos(void); +void AddRecord(void); +void EditItem(void); +void MoveDown(void); +void GetLine(void); +void PutLine(void); +void MoveUp(void); + + +void Editar_Modificar(int Mirar_Modificar, int X) +{ +// union REGS ent, sal; + char ArchivoPedidos[]="CPedidos.DAT"; + int finished, key; + int inicio; + + M_M = Mirar_Modificar; + Zx = X; + + switch ( X ) { + case 1: case 2: case 3: case 4: + x = X - 1; break; + case 5: case 6: case 7: case 8: + x = X - 5; break; + case 9: case 10: case 11: case 12: + x = X - 9; break; + default: + printf("Salida por --DEFECTO-- %d", X); + exit(1); + break; + } + + CurrRow = 1; CurrCol = 1; CurrTopLine = 1; + + struct boton menu[8]; + menu[0]. left = 217; menu[0]. up = 34; menu[0]. right = 297; menu[0]. down = 65; + menu[1]. left = 217; menu[1]. up = 66; menu[1]. right = 297; menu[1]. down = 97; + menu[2]. left = 217; menu[2]. up = 98; menu[2]. right = 297; menu[2]. down = 129; + menu[3]. left = 217; menu[3]. up = 130; menu[3]. right = 256; menu[3]. down = 149; + menu[4]. left = 258; menu[4]. up = 130; menu[4]. right = 297; menu[4]. down = 149; + menu[5]. left = 217; menu[5]. up = 150; menu[5]. right = 256; menu[5]. down = 171; + menu[6]. left = 258; menu[6]. up = 150; menu[6]. right = 297; menu[6]. down = 171; + menu[7]. left = 217; menu[7]. up = 172; menu[7]. right = 297; menu[7]. down = 204; + + for(auto int i=0; i<8; i++) ImprimeBoton2 (1, 7, 63, 56, menu[i]); + + setcolor(15); + + outtextxy(222, 50 , "ADD F9 "); + outtextxy(222, 80 , "DEL F10"); +if(Mirar_Modificar) { + outtextxy(223, 107, " Comment "); + outtextxy(223, 115," F3 "); +} + + outtextxy(222, 136, " UP "); + outtextxy(263, 136, "DOWN"); + outtextxy(222, 156, "RePg"); + outtextxy(262, 156, "AvPg"); + outtextxy(222, 180, "Salir F2"); + + setcolor(0); + + outtextxy(221, 49 , "ADD F9 "); + outtextxy(221, 79 , "DEL F10"); +if(Mirar_Modificar) { + outtextxy(222, 106, " Comment "); + outtextxy(222, 114," F3 "); +} + outtextxy(221, 135, " UP "); + outtextxy(262, 135, "DOWN"); + outtextxy(221, 155, "RePg"); + outtextxy(261, 155, "AvPg"); + outtextxy(221, 179, "Salir F2"); + + + + + + switch (X) { + case 1: case 2: case 3: case 4: + + strcpy(ArchivoDatos, "CATALOG1.DAT"); + strcpy(ArchivoComentario, "CATALO11.DAT"); + pc = 0; + break; + + case 5: case 6: case 7: case 8: + + strcpy(ArchivoDatos, "CATALOG2.DAT"); + strcpy(ArchivoComentario, "CATALO21.DAT"); + pc = 1; + break; + + case 9: case 10: case 11: case 12: + default: + + strcpy(ArchivoDatos, "CATALOG3.DAT"); + strcpy(ArchivoComentario, "CATALO31.DAT"); + pc = 2; + break; + + } + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de Indice, y Datos y creaci¢n... ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +{ + auto int LSJ = sizeof(struct JD); + auto int LSI = sizeof(struct caddview_inx); + + auto int LSC = sizeof(struct caddview); + + if ( (JD_f = fopen( ArchivoDatos, "r+b"))==NULL) { + + FILE *fa; + auto int i; + + if ( (fa = fopen( ArchivoDatos, "wb" ) )!=NULL ) { + + cabecera.esc = 27; + strcpy(cabecera.color, "[31;40m"); + strcpy(cabecera.prog, "Catalogo 4.0"); + cabecera.nl = 13; cabecera.rt = 10; + strcpy(cabecera.autor, " Jos‚ David Guill‚n"); + cabecera.pt = 7; cabecera.ef = 26; + + JDn.Fin[0] = 0; JDn.Fin[2] = 2; + JDn.Fin[1] = 1; JDn.Fin[3] = 3; + JDn.FinC = 1; + JD.record_zone = 0; JD.nombre_zona = x + 1; + strcpy(JD.nombre, "\0"); strcpy(JD.zip, "\0"); + JD.kbytes = 0; + + rewind(fa); + fwrite(&cabecera, LSJ, 1, fa); + fseek(fa, (long)LSJ, SEEK_SET); + fwrite(&JDn, LSI, 1, fa); + fseek(fa, (long)LSJ+LSI, SEEK_SET); + + for (i = 0; i < 4; i++) fwrite(&JD, LSC, 1, fa); + + if (fclose(fa) == EOF ) exit(1); + + } + if ( (JD_f = fopen( ArchivoDatos, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO INDICE EN LA 2§ PASADA"); + exit(1); + } + } + + fseek(JD_f, (long)LSJ, SEEK_SET); + if ( fread(&JDn, LSI, 1, JD_f) != 1 ) { + printf("NO SE PUDO LEER EN EL FICHERO: INDICE"); + exit(1); + } + fseek(JD_f, (long)LSJ+LSI, SEEK_SET); + if ( fread(&JD, LSC, 1, JD_f) != 1 ) { + printf("NO SE PUDO LEER EN EL FICHERO: DATOS"); + exit(1); + } +} + + + if ( x==0 ) CurrTopLine = 0; else CurrTopLine = ( JDn.Fin[x - 1] + 1 ); + inicio = CurrTopLine; + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de COMENTARIO o creaci¢n... ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + + if ( (JDc_f = fopen( ArchivoComentario, "r+b"))==NULL) { + + FILE *fa; + if ( (fa = fopen( ArchivoComentario, "wb" ) )!=NULL ) { + auto int i; + auto int LSC = sizeof(struct caddviewComentario); + + JD_comment.record_zone_init = 0; // 0 => disponible para grabaci¢n + // 1 => datos importantes + + for(i=0; i<10; i++) + strcpy(JD_comment. linea[i], "\0"); + fwrite(&JD_comment, LSC, 1, fa); + if (fclose(fa) == EOF ) exit(1); + } + if ( (JDc_f = fopen( ArchivoComentario, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO COMENTARIO EN LA 2§ PASADA"); + exit(1); + } + } + + if ( fread(&JD_comment, sizeof(struct caddviewComentario), 1, JDc_f) != 1 ) { + printf("NO SE PUDO LEER EL FICHERO COMENTARIO"); + exit(1); + } + +if(!Mirar_Modificar) { + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + //ÛÛ Comprueba apertura correcta de Pedidos o creaci¢n... ÛÛ// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + + if ( (JD_p = fopen( ArchivoPedidos, "r+b"))==NULL) { + + FILE *fa; + if ( (fa = fopen( ArchivoPedidos, "wb" ) )!=NULL ) { + + JD_dp. n_records = 1; + + strcpy(JD_dp. nombre, "\0"); strcpy(JD_dp. direcc, "\0"); + strcpy(JD_dp. apelli, "\0"); strcpy(JD_dp. cpu, "\0"); + JD_dp. telefono = 0; JD_dp. ram = 0; JD_dp. hd = 0; + + rewind(fa); + fwrite(&JD_dp, sizeof(struct pedidos_descripcion), 1, fa); + + JD_dt. record_zone = 0; + JD_dt. record_name = 0; + + strcpy(JD_dt. nombre, "\0"); + strcpy(JD_dt. zip, "\0"); + JD_dt. kbytes = 0; + + fwrite(&JD_dt, sizeof(struct pedidos_datos), 1, fa); + + if (fclose(fa) == EOF ) exit(1); + } + if ( (JD_p = fopen( ArchivoPedidos, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO PEDIDOS EN LA 2§ PASADA"); + exit(1); + } + } + + if ( fread(&JD_dp, sizeof(struct pedidos_descripcion), 1, JD_p) != 1 ) { // Lee n§ de registros + printf("NO SE PUDO LEER EL FICHERO PEDIDOS"); + exit(1); + } + + + //////////// Ahora se procedera a la lectura y asignaci¢n de las se¤alaciones + finished = 1; + + { + auto int LSC = sizeof(struct pedidos_datos); + auto int LSCm = sizeof(struct pedidos_descripcion); + n_registros = 0; + while(finished<=JD_dp. n_records) { + fseek(JD_p, (long)LSCm + LSC * finished - LSC, SEEK_SET); + fread(&JD_dt, LSC, 1, JD_p); + if( JD_dt.record_name == Zx ) { + n_registros++; + Registros[ n_registros ] = JD_dt. record_zone; + Dir_Registros[ n_registros ] = finished; + + } + finished++; + } + } +} + PrintWholeScreen(); + + GetLine(); + + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + + finished = 0; + + +if(raton) inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + do{ + + if(Mirar_Modificar) EditCursor(0); else EditCursorE(0); + +if(raton) activa_raton(); +/////////////////////// Aqui va una pausa de TECLADO y RATON al mismo TIEMPO +do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + } else boton_izq = 0; +}while( !boton_izq && !kbhit() ); +if(raton) desactiva_raton(); + + if( kbhit() ) { + + //////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////// ¨ Hay una tecla en buffer ... + + key = getch(); + + if(Mirar_Modificar) EditCursor(1); else EditCursorE(1); + + if( ( isprint(key) || isspace(key) ) && Mirar_Modificar ) { + + if(key!=13) ungetch(key); + EditItem(); + + } else { + + if( key == 0 ) { + key = getch(); + + switch ( key ) { + // INICIO + case 71: + CurrCol = 1; + break; + + // FIN + case 79: + CurrCol = 3; + break; + + // FLECHA ARRIBA + case 72: + MoveUp(); + break; + + // FLECHA ABAJO + case 80: + MoveDown(); + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + CurrCol--; + if (CurrCol == 0) CurrCol = 3; + break; + + // FLECHA DERECHA + case 77: + case 9: + CurrCol++; + if (CurrCol == 4) CurrCol = 1; + break; + + // F3 ---> A¥ADE COMENTARIO + case 61: + if(Mirar_Modificar) { + EditCursor(0); + PideComentario(); + PutLine(); + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + //Û Redise¤a botones Û + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + for(auto int i=0; i<8; i++) ImprimeBoton2 (1, 7, 63, 56, menu[i]); + + setcolor(15); + + outtextxy(222, 50 , "ADD F9 "); + outtextxy(222, 80 , "DEL F10"); + outtextxy(223, 107, " Comment "); + outtextxy(223, 115," F3 "); + + outtextxy(222, 136, " UP "); + outtextxy(263, 136, "DOWN"); + outtextxy(222, 156, "RePg"); + outtextxy(262, 156, "AvPg"); + outtextxy(222, 180, "Salir F2"); + + setcolor(0); + + outtextxy(221, 49 , "ADD F9 "); + outtextxy(221, 79 , "DEL F10"); + outtextxy(222, 106, " Comment "); + outtextxy(222, 114," F3 "); + + outtextxy(221, 135, " UP "); + outtextxy(262, 135, "DOWN"); + outtextxy(221, 155, "RePg"); + outtextxy(261, 155, "AvPg"); + outtextxy(221, 179, "Salir F2"); + } + break; + + // ReP g + case 73: + CurrRow = 1; + if( CurrTopLine > 19 ) { CurrTopLine -= 19; } else { CurrTopLine = inicio; } + if(CurrTopLine < inicio ) { CurrTopLine = inicio; } + PrintWholeScreen(); + GetLine(); + break; + + // AvP g + case 81: + CurrRow = 1; + CurrTopLine += 19; + if (CurrTopLine > JDn.Fin[x]) + CurrTopLine = JDn.Fin[x]; + PrintWholeScreen(); + GetLine(); + break; + + // F2 --> PARA SALIR + case 60: + finished = 1; + break; + + // F9 --> A¥ADIR + case 67: + if(Mirar_Modificar) AddRecord(); + else Add_Pedidos(); + break; + + // F10 -> BORRAR + case 68: + if(Mirar_Modificar) DeleteRecord(); + else Delete_Pedidos(); + break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // Fin Key = 0 + } // Fin Is Print Key? +} // Fin Tecla en Buffer + +///////////////////////////////////////////////////////////////////////////// +//ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// +////////////////////////// Comprueba con rat¢n ( SI ) /////////////////////// +//ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// +///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// ... o es el RATON ? + + if(raton && boton_izq==1 || boton_der==1) { + + if( CheckButon(8, menu) ) { + + if(Mirar_Modificar) EditCursor(1); else EditCursorE(1); + switch ( bpush ) { + // F9 --> A¥ADIR + case 1: + if(Mirar_Modificar) AddRecord(); + else Add_Pedidos(); + break; + + // F10 -> BORRAR + case 2: + if(Mirar_Modificar) DeleteRecord(); + else Delete_Pedidos(); + break; + + // F3 ---> A¥ADE COMENTARIO + case 3: + if(Mirar_Modificar) { + EditCursor(0); + PideComentario(); + PutLine(); + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + //Û Redise¤a botones Û + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + for(auto int i=0; i<8; i++) ImprimeBoton2 (1, 7, 63, 56, menu[i]); + + setcolor(15); + + outtextxy(222, 50 , "ADD F9 "); + outtextxy(222, 80 , "DEL F10"); + outtextxy(223, 107, " Comment "); + outtextxy(223, 115," F3 "); + + outtextxy(222, 136, " UP "); + outtextxy(263, 136, "DOWN"); + outtextxy(222, 156, "RePg"); + outtextxy(262, 156, "AvPg"); + outtextxy(222, 180, "Salir F2"); + + setcolor(0); + + outtextxy(221, 49 , "ADD F9 "); + outtextxy(221, 79 , "DEL F10"); + outtextxy(222, 106, " Comment "); + outtextxy(222, 114," F3 "); + + outtextxy(221, 135, " UP "); + outtextxy(262, 135, "DOWN"); + outtextxy(221, 155, "RePg"); + outtextxy(261, 155, "AvPg"); + outtextxy(221, 179, "Salir F2"); + } + break; + + // FLECHA ARRIBA + case 4: + MoveUp(); + break; + + // FLECHA ABAJO + case 5: + MoveDown(); + break; + + // ReP g + case 6: + CurrRow = 1; + if(CurrTopLine > 19) { CurrTopLine = CurrTopLine - 19; } else { CurrTopLine = inicio; } + if(CurrTopLine < inicio ) { CurrTopLine = inicio; } + PrintWholeScreen(); + GetLine(); + break; + + // AvP g + case 7: + CurrRow = 1; + CurrTopLine = CurrTopLine + 19; + if (CurrTopLine > JDn.Fin[x]) + CurrTopLine = JDn.Fin[x]; + PrintWholeScreen(); + GetLine(); + break; + + // F2 --> PARA SALIR + case 8: + finished = 1; + break; + + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + + } + } +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +}while( !finished ); + + fclose(JD_f); // Fichero JD + fclose(JDc_f); // Fichero COMENTARIO + + if(!Mirar_Modificar) fclose(JD_p); + + BorraViewPort(1); + BorraViewPort(2); + BorraViewPort(3); + +} // End Function // + + + + + + + +void EditCursor(int ShowHide) { + +int cc, cf, lmax, i, py, pxx, Px; + // registro de color actual y de fondo + // Longitud M xima y contador de bucle + // desviaci¢n vertical y reajuste final + // desviaci¢n horizontal y "" "" + + + if( CurrRow >= 11 ) { + Px = CurrCol + 3; + py = 18 + (CurrRow) - 10; // 8 = 18 - 10 + } else { + Px = CurrCol; + py = 18 + (CurrRow); + } + + switch (Px) { + case 1: pxx = 28; lmax = 13; + break; + case 2: pxx = 42; lmax = 3; // 43 Retirado + break; + case 3: pxx = 46; lmax = 5; // 47 Retirado para lmax = 5 + break; + + case 4: pxx = 52; lmax = 13; + break; + case 5: pxx = 66; lmax = 3; // 67 Retirado + break; + case 6: pxx = 70; lmax = 5; // 71 Retirado para lmax = 5 + break; + + default: pxx = 1; lmax = 80; + break; + } + + if (!ShowHide) { + cc = 63; + cf = 57; + } else { + cc = 14; + cf = 0; + } + + setcolor(cf); // pone color de fondo '0' para borrar + + for (i=0; i= 11 ) { Px = CurrCol + 3; py = 18 + (CurrRow) - 10; + } else { Px = CurrCol; py = 18 + (CurrRow); } + + switch (Px) { + case 1: case 2: case 3: + pxx = 28; lmax = 23; break; + case 4: case 5: case 6: + pxx = 52; lmax = 23; break; + + default: pxx = 1; lmax = 80; break; + } + + if (!ShowHide) { cc = 63; cf = 57; } else if (ShowHide) { cc = 14; cf = 0; } + if (ilumina) + if(!ShowHide) { cc = 57; cf = 63; } else + if (ShowHide) { cc = 0; cf = 14; } + + setcolor(cf); // pone color de fondo '0' para borrar + for (i=0; i= 11 ) { + Px = CurrCol + 3; + py = 18 + (CurrRow) - 10; + } else { + Px = CurrCol; + py = 18 + (CurrRow); + } + + switch (Px) { + case 1: pxx = 28; lmax = 13; + break; + case 2: pxx = 42; lmax = 3; // 43 Retirado + break; + case 3: pxx = 46; lmax = 5; // 47 Retirado para lmax = 5 + break; + + case 4: pxx = 52; lmax = 13; + break; + case 5: pxx = 66; lmax = 3; // 67 Retirado + break; + case 6: pxx = 70; lmax = 5; // 71 Retirado para lmax = 5 + break; + default: pxx = 1; lmax = 80; + break; + } + + switch (Px) { + case 1: + case 4: + InputCadenaG( JD.nombre, 0, lmax, pxx, py, 63, 57); + break; + case 2: + case 5: + InputCadenaG( JD.zip, 0, lmax, pxx, py, 63, 57); + break; + case 3: + case 6: + char cadena[] = "32766"; + itoa( (JD.kbytes), cadena, 10 ); + do{ + if ( atoi(cadena) < 0 || atoi(cadena) > 32765 ) strcpy(cadena, "0"); + InputCadenaG( cadena, 1, lmax, pxx, py, 63, 57); + }while( atoi(cadena) < 0 || atoi(cadena) > 32765); + JD.kbytes = atoi(cadena); + break; + } + + PutLine(); + GetLine(); + + if ( CurrRow >= 11 ) /* N£mero de lineas DISPONIBLES */ + PrintLine(0); + else PrintLine(1); + + +} + +void MoveUp(void) { + + if(CurrRow==1) { if (sb) Sound_SN("catalog3"); } else { + + CurrRow--; + GetLine(); + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + + + } +} + +void MoveDown(void) { + + if( (CurrRow + CurrTopLine - 1) >= (JDn.Fin[x]) || CurrRow == 20 ) { if (sb) Sound_SN("catalog3"); } else { + + CurrRow++; + GetLine(); + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + + } + +} + + +void PrintLine( int permiso ) { + + unsigned int CurrRecord = CurrTopLine + CurrRow - 1; + int py, i; + + if ( CurrRow >= 11 ) py = 18 + (CurrRow) - 10; else py = 18 + (CurrRow); + + BorraViewPort(2); // Para los mensajes... + + if(!M_M && ilumina) { + auto int pxx; + + switch (permiso) { + case 0: + pxx = 52; break; + case 1: + pxx = 28; break; + } + + setcolor(14); // pone color de fondo '0' para borrar + for (i=0; i<23; i++) // limpia linea -imprimir sobre fondo- + outtextxy( ( pxx + i ) * 8 - 7, py * 16 - 16, "Û"); + setcolor( 0); // devuelve el color a su estado + } else setcolor(14); // devuelve el color a su estado + + + if ( CurrRecord <= (JDn.Fin[x]) ) { + + // | Me preparo para convertir + char kbytes[6]; // | los int a char + // para que puedan ser utilizados +// itoa( JD.kbytes, kbytes, 10); // por outtext y outtextxy... + sprintf(kbytes, "%5d", JD.kbytes); + + switch(permiso) { + case 0: + outtextxy( ( 52 ) * 8 - 7, py * 16 - 16, JD.nombre); + outtextxy( ( 66 ) * 8 - 7, py * 16 - 16, JD.zip); + outtextxy( ( 70 ) * 8 - 7, py * 16 - 16, kbytes); + break; + + case 1: + outtextxy( ( 28 ) * 8 - 7, py * 16 - 16, JD.nombre); + outtextxy( ( 42 ) * 8 - 7, py * 16 - 16, JD.zip); + outtextxy( ( 46 ) * 8 - 7, py * 16 - 16, kbytes); + break; + + default: + outtextxy( ( 1 ) * 8 - 7, py * 16 - 16, "ERROR Modulo PrintLine, seccion CADDVIEW, P_CATALOGO _-JD-_"); + break; + } + +if(PWS) { + + if(!M_M && ilumina) setcolor(14); + + if (JD. record_zone == 0) { + outtextxy( 43 * 8 - 7, (4 + 4) * 16 - 16, " Sin comentario"); + } else { + for(i=0; i<10; i++) + outtextxy( 42 * 8 - 7, (i + 4) * 16 - 16, JD_comment.linea[i] ); + } +} + } +} + + +void DeleteRecord(void) { + +unsigned int CurrRecord; + int LSCm = sizeof(struct caddviewComentario); +auto int LSJ = sizeof(struct JD); +auto int LSI = sizeof(struct caddview_inx); +auto int LSC = sizeof(struct caddview); + +CurrRecord = CurrTopLine + CurrRow - 1; + + if (CurrRecord == 1 || CurrRecord == (JDn.Fin[x - 1]+1) ) { if (sb) Sound_SN("catalog5"); } else { + + for(int Rg=x; Rg< 4; Rg++) JDn.Fin[Rg] -= 1; + + if (JD.record_zone != 0) { + JD_comment.record_zone_init = 0; + + fseek(JDc_f, (long)( LSCm * (JD.record_zone - 1) ), SEEK_SET); // Se coloca + fwrite(&JD_comment, LSCm, 1, JDc_f); // Y escribe + } + + unsigned int p = CurrRecord; + + while(p <= JDn.Fin[3]) { + + fseek(JD_f, (long)LSJ + LSI + ( LSC * ( p + 1 ) ), SEEK_SET); // Se coloca + fread(&JD, LSC, 1, JD_f); // Y lee + + fseek(JD_f, (long)LSJ + LSI + ( LSC * p ), SEEK_SET); // Se coloca + fwrite(&JD, LSC, 1, JD_f); // Y escribe + + p++; + }; + + fseek(JD_f, (long)LSJ, SEEK_SET); + fwrite(&JDn, LSI, 1, JD_f); // Acualiza n§ de registros + + int TmpRow = CurrRow; + int TmpCol = CurrCol; + + PrintWholeScreen(); + + CurrRow = TmpRow; CurrCol = TmpCol; + + if ( (CurrTopLine + CurrRow - 1) > (JDn.Fin[x]) ) MoveUp(); + + GetLine(); + + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + } +} + + + +void AddRecord(void){ + +auto int LSJ = sizeof(struct JD); +auto int LSI = sizeof(struct caddview_inx); +auto int LSC = sizeof(struct caddview); + +unsigned int CurrRecord= CurrTopLine + CurrRow - 1; + +if(CurrRecord < 65530L) { + + unsigned int avance = (JDn.Fin[3]); + + while(avance > CurrRecord) { + + fseek(JD_f, (long)LSJ + LSI + ( LSC * avance ), SEEK_SET); // Se coloca + fread(&JD, LSC, 1, JD_f); // Y lee + + fseek(JD_f, (long)LSJ + LSI + ( LSC * (avance + 1) ), SEEK_SET); // Se coloca + fwrite(&JD, LSC, 1, JD_f); // Y escribe + + avance--; + }; + + for(int Rg=x; Rg < 4; Rg++) JDn.Fin[Rg] ++; + + fseek(JD_f, (long)LSJ, SEEK_SET); + fwrite(&JDn, LSI, 1, JD_f); // Acualiza n§ de registros + + JD.record_zone = 0; + JD.nombre_zona = x + 1; + strcpy(JD.nombre, "\0"); + strcpy(JD.zip, "\0"); + JD.kbytes = 0; + + fseek(JD_f, (long)LSJ + LSI + ( LSC * ( CurrTopLine + CurrRow ) ), SEEK_SET); // Se coloca + fwrite(&JD, LSC, 1, JD_f); // Y escribe + + PrintWholeScreen(); + + if ( (CurrTopLine + CurrRow - 1) > (JDn.Fin[x]) ) MoveUp(); + + GetLine(); + + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + + } + +} + +void PrintWholeScreen(void){ +int tmp = CurrRow; +PWS=0; +BorraViewPort(3); + + for(CurrRow = 1; CurrRow < 21; CurrRow++) { + + if ( (CurrTopLine + CurrRow - 1) <= (JDn.Fin[x]) ) { + GetLine(); + if ( CurrRow >= 11 ) PrintLine(0); else PrintLine(1); + } + + } +CurrRow = tmp; +PWS=1; +} + +void PutLine(void){ + +auto int LSJ = sizeof(struct JD); +auto int LSI = sizeof(struct caddview_inx); +auto int LSC = sizeof(struct caddview); + +int CurrRecord = CurrTopLine + CurrRow - 1; + +fseek(JD_f, (long)LSJ + LSI + ( LSC * CurrRecord ), SEEK_SET); // Se coloca +fwrite(&JD, LSC, 1, JD_f); // Y escribe + +} + +void GetLine(void){ + +auto int LSJ = sizeof(struct JD); +auto int LSI = sizeof(struct caddview_inx); +auto int LSC = sizeof(struct caddview); + int LSCm = sizeof(struct caddviewComentario); + +int CurrRecord = CurrTopLine + CurrRow - 1; + + + +fseek(JD_f, (long)LSJ + LSI + ( LSC * CurrRecord ), SEEK_SET); // Se coloca +fread(&JD, LSC, 1, JD_f); // Y lee + +if( JD.record_zone != 0 ) { + fseek(JDc_f, (long)( LSCm * ( JD.record_zone - 1) ), SEEK_SET); // Se coloca + fread(&JD_comment, LSCm, 1, JDc_f); // Y lee +} + +if(!M_M) { + ilumina = 0; + if(n_registros != 0 ) + for(int cont = 1; cont <= n_registros; cont++ ) + if(Registros[ cont ] == CurrRecord) ilumina = 1; +} + + +} + + + +////// Funci¢n para el comentario, casi independiente al resto... + +void PideComentario(void){ + +////////////////////////////// Translaci¢n de funciones a ViewPort #2 +int i, key; +int Linea_c=1; +int finc = 0; +////////////////////////////// Ahora se abrir  un nuevo men£ para el raton: +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + struct boton comment[4]; + comment[0]. left = 217; comment[0]. up = 34; comment[0]. right = 297; comment[0]. down = 75; + comment[1]. left = 217; comment[1]. up = 76; comment[1]. right = 297; comment[1]. down = 117; + comment[2]. left = 217; comment[2]. up = 118; comment[2]. right = 297; comment[2]. down = 159; + comment[3]. left = 217; comment[3]. up = 160; comment[3]. right = 297; comment[3]. down = 204; + + for(i=0; i<4; i++) ImprimeBoton2 (1, 7, 63, 56, comment[i]); + + setcolor(15); + + outtextxy(222, 49 , " Supr. "); + outtextxy(222, 58, " Linea"); + + outtextxy(222, 96 , " UP "); + outtextxy(222, 138, " DOWN "); + + outtextxy(224, 179, "Anterior "); + outtextxy(222, 189, " F2"); + + setcolor(0); + + outtextxy(221, 48 , " Supr. "); + outtextxy(221, 57, " Linea"); + + outtextxy(221, 95 , " UP "); + outtextxy(221, 137, " DOWN "); + + outtextxy(223, 178, "Anterior "); + outtextxy(221, 188, " F2"); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +if(JD. record_zone == 0) { + setcolor(0); + outtextxy( 43 * 8 - 7, (4 + 4) * 16 - 16, " ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"); + for(i=0; i<10; i++) + strcpy(JD_comment. linea[i], "\0"); +} + +do{ + + EditCursorC(0, Linea_c); + +if(raton) activa_raton(); +/////////////////////// Aqui va una pausa de TECLADO y RATON al mismo TIEMPO +do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + } else boton_izq = 1; +}while( !boton_izq && !kbhit() ); +if(raton) desactiva_raton(); + + if( kbhit() ) { + + //////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////// ¨ Hay una tecla en buffer ... + + key = getch(); + + EditCursorC(1, Linea_c); + + if( isprint(key) || isspace(key) ) { + + if(key != 13) ungetch(key); + InputCadenaG( JD_comment. linea[Linea_c - 1], 0, 32, 42, Linea_c + 3, 63, 57); + + +// outtextxy( 43 * 8 - 7, (i + 4) * 16 - 16, JD_comment.linea[i] ); + + + } else { + + if( key == 0 ) { + key = getch(); + + switch ( key ) { + // DEL --- Borra Linea + case 83: + strcpy(JD_comment. linea[Linea_c - 1], "\0"); + break; + + // FLECHA ARRIBA + case 72: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + // FLECHA ABAJO + case 80: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + + // FLECHA DERECHA + case 77: + case 9: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // F2 --> PARA SALIR + case 60: + finc = 1; + break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // Fin Key = 0 + } // Fin Is Print Key? +} // Fin Tecla en Buffer + +///////////////////////////////////////////////////////////////////////////// +//ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// +////////////////////////// Comprueba con rat¢n ( SI ) /////////////////////// +//ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// +///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// ... o es el RATON ? + + if(raton && boton_izq==1 || boton_der==1) { + + if( CheckButon(4, comment) ) { + + EditCursorC(1, Linea_c); + switch ( bpush ) { + // Suprimir Linea + case 1: + strcpy(JD_comment. linea[Linea_c - 1], "\0"); + break; + + // FLECHA ARRIBA + case 72: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + + // FLECHA ABAJO + case 80: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + // FLECHA DERECHA + case 77: + case 9: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + // F2 --> PARA SALIR + case 60: + finc = 1; + break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + + } + } +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +}while( !finc ); + +//////////////////////////////// Comienza analisis de Comentario +//////////////////////////////// para su correcto enlace con los DATOS + +////// 1§ Si ya ten¡a posici¢n en ArchivoComentario, simplemente graba +////// 2§ si no 1§, Busca una posici¢n libre o al final +int LSCm = sizeof(struct caddviewComentario); +if(JD. record_zone == 0) { + struct caddviewComentario coment; + for(i=0; i <= JDn.FinC && finc ; i++) { + fseek(JDc_f, (long)( LSCm * i ) , SEEK_SET); // Se coloca + fread(&coment, LSCm, 1, JDc_f); // Y lee + if(finc && coment. record_zone_init == 0) { + JD. record_zone = i + 1; + finc = 0; + } + } + /////////// Si no hay fichas disponibles, habra que crearla, con + /////////// la consiguiente actualizaci¢n del indice... + if(JD. record_zone == 0) { + auto int LSJ = sizeof(struct JD); + auto int LSI = sizeof(struct caddview_inx); + + JDn. FinC ++; + JD. record_zone = JDn. FinC + 1; + + + fseek(JD_f, (long)LSJ, SEEK_SET); + fwrite(&JDn, LSI, 1, JD_f); + } +} + JD_comment. record_zone_init = 1; // La ficha ya no esta disponible + + fseek(JDc_f, (long)( LSCm * (JD.record_zone - 1) ), SEEK_SET); // Se coloca + fwrite(&JD_comment, LSCm, 1, JDc_f); // Y escribe + +} + +void EditCursorC(int ShowHide, int y) { + +int cc, cf, i; + +if (!ShowHide) { + cc = 63; cf = 57; +} else { + cc = 14; cf = 0; +} + +setcolor(cf); // pone color de fondo '0' para borrar + +for (i=0; i<32; i++) // limpia linea -imprimir sobre fondo- + outtextxy( ( 42 + i ) * 8 - 7, (y + 3) * 16 - 16, "Û"); +setcolor(cc); // devuelve el color a su estado +outtextxy( 42 * 8 - 7, (y + 3) * 16 - 16, JD_comment.linea[y - 1] ); + +} + + + + + + + + +void Delete_Pedidos(void) { + +if (ilumina) { + int LSC = sizeof(struct pedidos_datos); + int LSCm = sizeof(struct pedidos_descripcion); + + if (JD_dp. n_records == 1) { + + n_registros = 0; + JD_dt. record_zone = 0; strcpy(JD_dt. nombre, "\0"); + JD_dt. record_name = 0; strcpy(JD_dt. zip, "\0"); + JD_dt. kbytes = 0; + + fseek(JD_p, (long)LSCm, SEEK_SET); // Se coloca + fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + ilumina = 0; + + } else { + + unsigned int CurrRecord = CurrTopLine + CurrRow - 1; + + int ok = 0; + + + for(int cont = 1; cont <= n_registros && !ok; cont++ ) + if(Registros[ cont ] == CurrRecord) { CurrRecord = Dir_Registros[ cont ]; ok=1; } + + JD_dp. n_records --; + n_registros--; + unsigned int p = CurrRecord; + + while(p <= JD_dp. n_records) { + + fseek(JD_p, (long)LSCm + ( LSC * ( p + 1 ) - LSC ), SEEK_SET); // Se coloca + fread(&JD_dt, LSC, 1, JD_p); // Y lee + + fseek(JD_p, (long)LSCm + ( LSC * p - LSC ), SEEK_SET); // Se coloca + fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + p++; + }; + + p = cont - 1; + + while(p <= n_registros ) { + Registros[ p ] = Registros[ p + 1 ]; + Dir_Registros[ p ] = Dir_Registros[ p + 1 ]; + p++; + } + + rewind(JD_p); + fwrite(&JD_dp, LSCm, 1, JD_p); // Acualiza n§ de registros + + ilumina = 0; + } +} +} + +void Add_Pedidos(void){ + +if(!ilumina) { + + if(n_registros < 40) { + + int LSC = sizeof(struct pedidos_datos); + int LSCm = sizeof(struct pedidos_descripcion); + + JD_dp. n_records ++; + n_registros++; + + rewind(JD_p); + fwrite(&JD_dp, LSCm, 1, JD_p); // Acualiza n§ de registros + + Registros[ n_registros ] = CurrTopLine + CurrRow - 1; + Dir_Registros[ n_registros ] = JD_dp. n_records; + JD_dt.record_zone = CurrTopLine + CurrRow - 1; + JD_dt.record_name = Zx; + + strcpy(JD_dt.nombre, JD.nombre); strcpy(JD_dt.zip, JD.zip); + JD_dt.kbytes = JD.kbytes; + + fseek(JD_p, (long)LSCm + ( LSC * ( JD_dp. n_records ) - LSC ), SEEK_SET); + fwrite(&JD_dt, LSC, 1, JD_p); + + ilumina = 1; + } +} +} diff --git a/CATALOGO.CPP b/CATALOGO.CPP new file mode 100644 index 0000000..648dcb0 --- /dev/null +++ b/CATALOGO.CPP @@ -0,0 +1,977 @@ +/* + Cat logo Gr fico + por Jos‚ David Guill‚n + + Copyright (c) 1994 JD Software Original. All rights reserved. + +*/ + + + +#ifdef __TINY__ +#error CATALOGO will not run in the tiny model. +#endif + + +#include +#include +#include +#include +#include +#include +#include + +#include "..\jd_lib\key.h" +#include "catalogo.h" + + +int huge DetectVGA256() +{ + return 2; +} + +// extern int leepcx(char diu[80]); + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Begin main function */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + +int main(int argc, char *argv[]) +{ + + int ch = 32; + + union REGS ent, sal; + + + char *NaC; + + NaC = argv[0]; + + if(argc >=2 ) CheckArg(argc, argv); + { auto unsigned disk; + _dos_getdrive(&disk); + if(disk==1 || disk==2) NoIniSb = 0; + } + + struct boton menu[4]; + menu[0].left = 20; menu[0].up = 20; menu[0].right = 170; menu[0].down = 100; + menu[1].left = 20; menu[1].up = 140; menu[1].right = 170; menu[1].down = 220; + menu[2].left = 20; menu[2].up = 260; menu[2].right = 170; menu[2].down = 340; + menu[3].left = 20; menu[3].up = 380; menu[3].right = 170; menu[3].down = 460; + +// key_init(INIT); + lee_setup(); + Initialize(); /* Set system into Graphics mode */ + + if ( !NoIniSb || Inicializa_SB() == 0 ) sb2 = 0; /* Fun with sound...? Yea.. SB0 */ + /*if (leepcx("catalogo.img")==0)*/ + DibujaPantalla(); /* Dise¤a la pantalla de visualizaci¢n */ + + + inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + + if (sb!=0) Sound_SN("catalog0"); + + if (raton!=0) activa_raton(); + + do{ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + /* Comprueba las teclas pulsadas */ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + + if (kbhit()) { + if(raton!=0) desactiva_raton(); + ch = getch(); + + switch ( ch ) { + case 109: + case 77: + if (sb!=0) Sound_SN("catalog1"); + Menu_Mirar(0); + break; + case 117: + case 85: + if (sb!=0) Sound_SN("catalog1"); + Menu_Utilidad(); + break; + case 105: + case 73: + if (sb!=0) Sound_SN("catalog1"); + Info( NaC /*LEXE*/ ); + break; + case 115: + case 83: + if (sb!=0) Sound_SN("catalog9"); + if (raton!=0) desactiva_raton(); + fundido_al_negro(); + closegraph(); /* Return the system to text mode */ + cprintf("Gracias por utilizar mi Software\nJos‚ David Guill‚n\n"); + sleep(2); + if(sb2) SOUNDFXDRIVER(FINDRV); +// key_init(RESTORE); + exit(1); + break; + case 0: + ch = getch(); + if (ch== 15 && raton!=0) { + activa_raton(); + do{ + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + }while(boton_izq==0); + + if(x_raton >= 110 && x_raton <= 118 && y_raton >= 78 && y_raton <= 86) { + desactiva_raton(); + if (sb!=0) Sound_SN("catalogb"); + Animacion(); + activa_raton(); + } + } + break; + + default: + if (sb) Sound_SN("catalog3"); + if(raton!=0) activa_raton(); + } + + +// if (ch==0) getch(); + } + + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + /* Comprueba las pulsaciones del rat¢n */ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + + if(raton!=0) { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + + x_raton = sal.x.cx; + y_raton = sal.x.dx; + + + if(boton_izq==1 || boton_der==1) { + + if (raton!=0) desactiva_raton(); + + if( CheckButon(4, menu) ) { + + switch(bpush) { + case 1: + Menu_Mirar(0); + break; + + case 2: + Menu_Utilidad(); + break; + + case 3: + Info( NaC /*LEXE*/ ); + break; + + case 4: + if (sb!=0) Sound_SN("cataloga"); + if (raton!=0) desactiva_raton(); + fundido_al_negro(); + closegraph(); /* Return the system to text mode */ + cprintf ("Gracias por utilizar mi Software\nJos‚ David Guill‚n\n"); + sleep(2); + if(sb2) SOUNDFXDRIVER(FINDRV); +// key_init(RESTORE); + exit(1); + + default: + break; + + } + } + + if (raton!=0) activa_raton(); + } + } + gotoxy(1,1); + printf("x: %3d y: %3d", x_raton, y_raton); + + }while(1); + + +} + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* */ +/* INITIALIZE: Initializes the graphics system and reports */ +/* any errors which occured. */ +/* */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + +void Initialize(void) +{ + int errorcode; + int Gd = 9, Gm = 2; + //int Gd = DETECT, Gm; + + // installuserdriver("Svga256", DetectVGA256); + //errorcode = registerfarbgidriver(Svga256_fdriver); + + errorcode = registerbgidriver(EGAVGA_driver); + + /* report any registration errors */ + + if (errorcode < 0) + { + printf("Graphics error: %s\n%d", grapherrormsg(errorcode), errorcode); + printf("Press any key to halt (REGISTRATION FAR):"); + getch(); + exit(1); /* terminate with an error code */ + } + + /* initialize graphics and local variables */ + initgraph(&Gd,&Gm,""); + + /* read result of initialization */ + errorcode = graphresult(); + if (errorcode != grOk) /* an error occurred */ + { + printf("Graphics error: %s\n%d", grapherrormsg(errorcode), errorcode); + printf("Press any key to halt:"); + getch(); + exit(1); /* terminate with an error code */ + } + +} + + +// ÛÛÛÛÛ Û Û Û Û ÛÛ +// ÄÄÄÄÄÄÄÛÛÄÄÄÄÄÄÄÄÛÄÛÄÄÄÄÄÄÛÛÄÛÄÄÄÄÄÄÄÄÄÛÛÄÛÄÄÄÄÄÄÄÄÄÄÄÄÄÛÄÛÄÄÄÄÛÄÛÄÄÄÄÄÄÄÄÄÄ +// ÄÄÄÄÄÄÄÄÛÛÄÄÄÄÄÄÛÄÄÄÛÄÄÄÛÛÄÄÄÄÛÄÄÄÄÄÄÄÛÄÄÄÄÛÄÄÄÄÄÄÛÄÄÄÄÛÄÄÄÛÄÄÛÄÄÛÄÄÄÄÄÛÛÛÛÛ +// ÄÄÄÄÄÄÄÄÄÛÛÄÄÛÛÛÄÄÄÄÛÛÄÛÄÄÄÄÄÄÄÛÄÄÄÄÄÛÄÄÄÄÄÛÛÄÄÄÄÛÄÛÄÄÄÛÄÄÄÄÛÄÛÄÄÛÄÄÄÄÛÄÄÄÄÄ +// ÄÄÄÄÄÄÄÛÛÛÄÄÄÄÄÄÄÄÄÄÄÄÛÄÄÄÄÄÄÄÄÄÛÄÄÄÛÄÄÄÄÄÄÄÛÄÄÄÛÄÄÄÛÄÛÄÄÄÄÄÄÛÄÄÄÛÄÄÄÄÛÄÄÄÄÄ +// ÄÄÄÄÄÄÛÛÛÛÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛÄÛÄÄÄÄÄÄÄÄÄÛÄÛÄÄÄÄÄÛÄÄÄÄÄÄÄÄÄÄÄÄÛÄÄÛÄÄÄÄÄÄ +// ÛÛÛ Û ÛÛ ÛÛ + +void Sound_SN(char headfile[]) +{ + +if ( sb2 ) { + + strcpy(dir_sfx, headfile); + strcat(dir_sfx, ".voc"); + + if( strcmp( vieja_dir_sfx, dir_sfx ) != 0 ) { + strcpy(vieja_dir_sfx, dir_sfx); + PlaySound(1); + } else PlaySound(0); + +} else { + + sound(440); + delay(50); + nosound(); + +} + +} + + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Borra las distintas pantallas de visualizaci¢n #1 #2 y #3 */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void BorraViewPort(int view) +{ + setcolor(0); + setlinestyle(0, 0, NORM_WIDTH); + setfillstyle(1, 0); + if(view==1) bar(217, 32, 298, 206); + if(view==2) bar(325, 32, 593, 206); + if(view==3) bar(216, 272, 593, 448); +} + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Da un mensaje de ERROR en modo GRµFICO */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/*void MensajeError(int erronum) +{ + char *msg_error[] = { "Error leyendo dispositivo E/S", + "Error de proteccion contra escritura", + "Error Disco lleno", + "Error utilizando Sound_SN Blaster", + "Error FALTA MEMORIA", + + "Error Ficheros necesarios", + "de uso interno no encontrados", + + "Error SISTEMA ALTERADO", + "INTENTO DE PIRATEO", + + "Error el dispositivo: PRN", + + "Error de tipo DESCONOCIDO", + "compruebe su sistema minuciosamente" + }; + + +// ImprimeBoton(160, 176, 480, 304, 7, 63, 8); + +}*/ + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Principio del Menu Mirar */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void Menu_Mirar(int Mirar_Modificar) +{ + union REGS ent, sal; + int ch, x, y; + int salir = FALSE; + char *texto[] = { "Juegos ", "M£sica ", "P.Textos", + "Contabil. ", "Electr¢n. ", "Gr ficos", + "Utilidades", "Lenguajes ", "Windows ", + "Varios... ", "RETROCEDER", " " }; + +struct boton menu[11]; + +menu[0].left = 325; menu[0].up = 33; menu[0].right = 412; menu[0].down = 76; +menu[1].left = 413; menu[1].up = 33; menu[1].right = 503; menu[1].down = 76; +menu[2].left = 504; menu[2].up = 33; menu[2].right = 592; menu[2].down = 76; +menu[3].left = 325; menu[3].up = 77; menu[3].right = 412; menu[3].down = 120; +menu[4].left = 413; menu[4].up = 77; menu[4].right = 503; menu[4].down = 120; +menu[5].left = 504; menu[5].up = 77; menu[5].right = 592; menu[5].down = 120; +menu[6].left = 325; menu[6].up = 121; menu[6].right = 412; menu[6].down = 164; +menu[7].left = 413; menu[7].up = 121; menu[7].right = 503; menu[7].down = 164; +menu[8].left = 504; menu[8].up = 121; menu[8].right = 592; menu[8].down = 164; +menu[9].left = 325; menu[9].up = 165; menu[9].right = 412; menu[9].down = 205; +menu[10].left = 413; menu[10].up = 165; menu[10].right = 592; menu[10].down = 205; + +for(x=0; x<11; x++) ImprimeBoton2 (1, 7, 63, 56, menu[x]); + + + ch=-1; + for(y=40; y<=169; y+=43) { /* 40 */ + for(x=330; x<=510; x+=90) { + ++ch; + setcolor(15); + outtextxy(x+1, y+1, texto[ch]); + setcolor(1); + outtextxy(x, y, texto[ch]); + + setcolor(4); + if(ch!=11) outtextxy(x+1, y+5, "-"); + } + } + + + + + if(raton!=0) { + inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + activa_raton(); + } + +x=11; /* Las x's representan el boton pulsado, que sera 11 en el caso de que + se pulse salir para no activar ninguna opcion */ + do{ + if (kbhit()) { + + if (raton!=0) desactiva_raton(); + ch = getch(); + + switch( ch ) { + case 0: getch(); + break; + case 74: + case 106: x=1; + salir = TRUE; + break; + case 77: + case 109: x=2; + salir = TRUE; + break; + case 80: + case 112: x=3; + salir = TRUE; + break; + case 67: + case 99: x=4; + salir = TRUE; + break; + case 69: + case 101: x=5; + salir = TRUE; + break; + case 71: + case 103: x=6; + salir = TRUE; + break; + case 85: + case 117: x=7; + salir = TRUE; + break; + case 76: + case 108: x=8; + salir = TRUE; + break; + case 87: + case 119: x=9; + salir = TRUE; + break; + case 86: + case 118: x=10; + salir = TRUE; + break; + case 82: + case 114: salir = TRUE; + break; + default: + + if (sb) Sound_SN("catalog3"); + break; + } + + if (raton!=0) activa_raton(); + } + + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + /* Comprueba las pulsaciones del rat¢n */ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + + if(raton!=0 && !salir ) { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + + x_raton = sal.x.cx; + y_raton = sal.x.dx; + + if(boton_izq==1 || boton_der==1) { + + desactiva_raton(); + + + if( CheckButon(11, menu) ) { x = bpush; salir = TRUE; } + activa_raton(); + + } + } + + + + }while(!salir); + if (raton!=0) desactiva_raton(); + if (sb) Sound_SN("catalog1"); + BorraViewPort(2); + + if(x!=11) { + + if(Mirar_Modificar>=0 && Mirar_Modificar<=1) Editar_Modificar(Mirar_Modificar, x); + if(Mirar_Modificar==2) Imprimir_Individual(x); + } + + if (raton!=0) inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + +} + + + + + + + + + + + + + + + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Dibuja el Men£ de Utilidad */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void Dibuja_Menu_Utilidad(void) +{ + setcolor(15); + + outtextxy(329, 39, "Pedidos"); + outtextxy(329, 97, "Impresi¢n"); + outtextxy(329, 105, " Completa"); + outtextxy(461, 97, "Impresi¢n"); + outtextxy(461, 105, " Individual"); + outtextxy(329, 151, "Men£"); + outtextxy(329, 159, " Principal"); + outtextxy(461, 151, "RETROCEDER"); + + setcolor(1); + + outtextxy(330, 40, "Pedidos"); + outtextxy(330, 98, "Impresi¢n"); + outtextxy(330, 106, " Completa"); + outtextxy(462, 98, "Impresi¢n"); + outtextxy(462, 106, " Individual"); + outtextxy(330, 152, "Men£"); + outtextxy(330, 160, " Principal"); + outtextxy(462, 152, "RETROCEDER"); + + setcolor(4); + outtextxy(330, 45, "-"); + outtextxy(330, 111, " -"); + outtextxy(462, 111, " -"); + outtextxy(330, 157, "-"); + outtextxy(462, 157, "-"); +} + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Principio del Men£ Utilidad */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void Menu_Utilidad(void) +{ + union REGS ent, sal; + int ch; + int salir = FALSE; + struct boton menu[6]; + +menu[0].left = 325; menu[0].up = 33; menu[0].right = 455; menu[0].down = 90; +menu[1].left = 457; menu[1].up = 33; menu[1].right = 592; menu[1].down = 90; +menu[2].left = 325; menu[2].up = 91; menu[2].right = 455; menu[2].down = 146; +menu[3].left = 457; menu[3].up = 91; menu[3].right = 592; menu[3].down = 146; +menu[4].left = 325; menu[4].up = 147; menu[4].right = 455; menu[4].down = 205; +menu[5].left = 457; menu[5].up = 147; menu[5].right = 592; menu[5].down = 205; + +for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + + Dibuja_Menu_Utilidad(); + + if(raton!=0) { + inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + activa_raton(); + } + + do{ + if (kbhit()) { + if (raton!=0) desactiva_raton(); + ch = getch(); + + switch( ch ) { + case 0: getch(); + break; + case 80: + case 112: if (sb) Sound_SN("catalog1"); + EditarModificarPedidos(); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 67: + case 99: if (sb) Sound_SN("catalog1"); + Imprimir_Individual(0); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 73: + case 105: if (sb) Sound_SN("catalog1"); + Menu_Mirar(2); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 77: + case 109: if( Setup.codigo == 0 ) Menu_Principal(); + else { if(PideCodigo() == 1) Menu_Principal(); } + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 82: + case 114: + if (sb) Sound_SN("catalog1"); + salir = TRUE; + break; + default: + if (sb) Sound_SN("catalog3"); + break; + } + if (raton!=0) activa_raton(); + } + + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + /* Comprueba las pulsaciones del rat¢n */ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + + if(raton!=0 && !salir ) { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + + x_raton = sal.x.cx; + y_raton = sal.x.dx; + + if(boton_izq==1 || boton_der==1) { + + desactiva_raton(); + + + if( CheckButon(6, menu) ) { + + switch(bpush) { + case 1: + EditarModificarPedidos(); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + /* case 2: + break; VACIO VACIO VACIO VACIO VACIO VACIO + */ + case 3: + Imprimir_Individual(0); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 4: + Menu_Mirar(2); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 5: + if( Setup.codigo == 0 ) Menu_Principal(); + else { if(PideCodigo() == 1) Menu_Principal(); } + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Utilidad(); + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + + break; + case 6: + salir = TRUE; + break; + default: + activa_raton(); + break; + } + } else activa_raton(); + } + } + + +}while(!salir); + if (raton!=0) desactiva_raton(); + + BorraViewPort(2); + if(raton!=0) { + inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + activa_raton(); + } + +} + +void Dibuja_Menu_Principal(void) + +{ + setcolor(1); + + outtextxy(462, 40, "Modificar"); + outtextxy(462, 48, " Comentario"); + + outtextxy(330, 98, "Configuracion"); + + outtextxy(330, 152, "Add/Supr."); + outtextxy(330, 160, " Programas"); + + outtextxy(462, 152, "RETROCEDER"); + + setcolor(4); + + outtextxy(462, 45, "-"); + + outtextxy(330, 103, "-"); + + outtextxy(330, 157, "-"); + outtextxy(462, 157, "-"); +} + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Principio del Men£ Principal */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void Menu_Principal(void) +{ + union REGS ent, sal; + int ch; + int salir = FALSE; + struct boton menu[6]; + menu[0].left = 325; menu[0].up = 33; menu[0].right = 455; menu[0].down = 90; + menu[1].left = 457; menu[1].up = 33; menu[1].right = 592; menu[1].down = 90; + menu[2].left = 325; menu[2].up = 91; menu[2].right = 455; menu[2].down = 146; + menu[3].left = 457; menu[3].up = 91; menu[3].right = 592; menu[3].down = 146; + menu[4].left = 325; menu[4].up = 147; menu[4].right = 455; menu[4].down = 205; + menu[5].left = 457; menu[5].up = 147; menu[5].right = 592; menu[5].down = 205; + +for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + + + Dibuja_Menu_Principal(); + + if(raton!=0) { + inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + activa_raton(); + } + + + do{ + if (kbhit()) { + if (raton!=0) desactiva_raton(); + ch = getch(); + + switch( ch ) { + case 0: getch(); + break; + + case 77: + case 109: if (sb) Sound_SN("catalog1"); + Modificar_Comentario(); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + case 67: + case 99: if (sb) Sound_SN("catalog1"); + Configuracion(); + BorraViewPort(1); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + + case 65: + case 97: if (sb) Sound_SN("catalog1"); + Menu_Mirar(1); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325,33,584, 189, 454, 111); + break; + case 82: + case 114: + if (sb) Sound_SN("catalog1"); + salir = TRUE; + break; + default: + if (sb) Sound_SN("catalog3"); + break; + } + if (raton!=0) activa_raton(); + } + + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + /* Comprueba las pulsaciones del rat¢n */ + /* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + + if(raton!=0 && !salir ) { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + + x_raton = sal.x.cx; + y_raton = sal.x.dx; + + if(boton_izq==1 || boton_der==1) { + desactiva_raton(); + if( CheckButon(6, menu) ) { + + switch(bpush) { +/* case 1: + EditarModificarPedidos(); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; +*/ + case 2: + Modificar_Comentario(); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + + case 3: + Configuracion(); + BorraViewPort(1); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + + +// case 4: +// /* VACIO */ +// break; + case 5: + Menu_Mirar(1); + for(ch=0; ch<6; ch++) ImprimeBoton2 (1, 7, 63, 56, menu[ch]); + Dibuja_Menu_Principal(); + + if(raton!=0) inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + break; + + case 6: + salir = TRUE; + break; + + default: + activa_raton(); + break; + } + + } else activa_raton(); + } + } + }while(!salir); + if (raton!=0) desactiva_raton(); + BorraViewPort(2); + if(raton!=0) { + inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + activa_raton(); + } +} + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void CheckArg(int nargumentos, char *argumentos[]) { + + int contador; + +for(contador=1; contador<=nargumentos; contador++) { + + if ( !strcmpi( argumentos[contador], "SB0") ) NoIniSb = 0; + if ( !strcmpi( argumentos[contador], "PO" ) ) PunteroRaton = 1; + if ( !strcmpi( argumentos[contador], "NS" ) ) sb=0; + if ( !strcmp ( argumentos[contador], "/?" ) || !strcmpi( argumentos[contador], "/H") ) { + + //////////////////////// Show Help Screen //////////////////////// + clrscr(); + textcolor(WHITE); textbackground(BLUE); + + cprintf("Copyright (c) J.D. System 1994. Jos‚ David Guill‚n Dominguez... Cat logo 4.0 "); + textbackground(BLACK); + gotoxy(1,3); + + printf("Sintaxis:\n"); + printf(" SB0 ---------> redirecciona sonidos al Speaker\n"); + printf(" NS ----------> sin sonido de ninguna clase\n"); + printf(" PO ----------> puntero original de raton\n"); + printf(" /? o /H -----> muestra esta Pantalla\n"); + printf("\nTodos los parametros se pueden definir por defecto en la variable de entorno SET"); + printf("\nSET JD_C4 = SB0 PO \n\n"); + gotoxy(1, 23); + exit(0); + + } +} + + + +} +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + +int CheckButon(int nb, struct boton menu[]) +{ +union REGS ent, sal; +int y; +int Pulso = 0; + +for(y = 0; y < nb; y++) { + + if(x_raton >= menu[y].left && x_raton <= menu[y].right && + y_raton >= menu[y].up && y_raton <= menu[y].down) { + bpush = y + 1; + Pulso = 1; + } + +} + + +if(Pulso) { + ImprimeBoton2 (0, 7, 56, 63, menu[bpush-1]); + if (sb!=0) Sound_SN("catalog2"); + + if (raton!=0) activa_raton(); + + do { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + } while(boton_izq==1 || boton_der==1); + if (raton!=0) desactiva_raton(); + + ImprimeBoton2 (0, 7, 63, 56, menu[bpush-1]); +} else if (sb!=0) Sound_SN("catalog4"); + +return Pulso; +} + +int PideCodigo(void){ + int Devuelve = 0; + char string[15] = "\0"; + + + BorraViewPort(2); + /////// Devolvera 1. Si el c¢digo es correcto. + setcolor(12); + outtextxy( 42 * 8 - 7, 6 * 16 - 16, "C¢digo:" ); + setcolor(4); + outtextxy( 328, 79 , "C¢digo:" ); + + // sprintf(string, "%05ld", Setup.codigo); + InputCadenaG( string, 1, 8, 53, 6, 63, 57); + + if( Setup. codigo == atol(string) ) Devuelve = 1; + + BorraViewPort(2); + + return Devuelve; +} diff --git a/CATALOGO.H b/CATALOGO.H new file mode 100644 index 0000000..ce13fa8 --- /dev/null +++ b/CATALOGO.H @@ -0,0 +1,124 @@ +#ifndef Catalogo +#define Catalogo Jos‚_David + + #define TRUE 1 + #define FALSE 0 + + #define FINDRV 9 + #define FINALSOUND 8 + + extern int x_raton; // En el M¢dulo: Craton.CPP + extern int y_raton; // En el M¢dulo: Craton.CPP + extern int boton_izq; // En el M¢dulo: Craton.CPP + extern int boton_der; // En el M¢dulo: Craton.CPP + + + int bpush; + int GraphDriver = 9; /* The Graphics device driver */ + int GraphMode = 2; /* The Graphics mode value */ + int ErrorCode; /* Reports any graphics errors */ + + char *dir_voc = "123456789012"; + char *dir_sfx = "123456789012"; + char vieja_dir_sfx[] = "123456789012"; + + extern int raton; /* Indica si esta instalado el raton (def. NO) */ + int PunteroRaton = 0; /* Se deja el puntero de raton original ¨? (def. NO) */ + + + + int access = 0; /* Indica si se tiene acceso al menu ppal. (def. NO) */ + + int sb = 1; /* Indica si esta instalada la SB (def. SI) */ + int sb2 = 1; + int NoIniSb = 1; + + struct boton { + + int left; + int up; + int right; + int down; + + }; + + +/* */ +/* Prototipos de Funci¢n */ +/* */ + + int PideCodigo(void); + void Initialize(void); + void Menu_Utilidad(void); + void Menu_Principal(void); + void BorraViewPort(int view); + void asigna_modo_video(void); + void Dibuja_Menu_Utilidad(void); + void Dibuja_Menu_Utilidad(void); + void Menu_Mirar(int Mirar_Modificar); + int CheckButon(int nb, struct boton menu[]); + void CheckArg(int nargumentos, char *argumentos[]); + void Sound_SN(char headfile[]); + + + + extern void Info(char *nombrecargado); + + extern void Modificar_Comentario(void); + extern void Editar_Modificar(int Mirar_Modificar, int X); + extern void EditarModificarPedidos(void); + + + // En el M¢dulo: Craton.CPP + extern void inicializa_raton_grafico(int x1, int y1, int x2, + int y2, int px, int py); + extern void desactiva_raton(void); + extern void activa_raton(void); + + extern int Inicializa_SB(void); + extern void PlaySound(int Lee); + extern "C" void SOUNDFXDRIVER(int); + + // En el M¢dulo: Cgraph.CPP + + extern void DibujaPantalla(void); + extern void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); + extern void fundido_al_negro(void); + + extern int Animacion(void); // En el M¢dulo: Animaci¢n.CPP + + void Imprimir_Individual(int x); + + + extern struct JD { + char esc; char color[8]; char prog[14]; + char nl; char rt; char autor[36]; + char pt; char ef; + }; + + extern struct JD cabecera; + + extern struct setup { + int version; // uso interno, para versi¢n + long registrado; // registrado ¨ SI o NO ? + char usuario[20]; // registrado a ... + long codigo; // codigo de acceso ­­­ 0 = no c¢digo !!! + + char futura_ampliacion[50]; + }; + + extern struct setup Setup; + + + + extern FILE *JD_s; // Fichero Setup + extern char ArchivoSetup[]; + extern void lee_setup(void); + extern void Configuracion(void); + extern int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); + + + + + +#endif \ No newline at end of file diff --git a/CATALOGO.PRJ b/CATALOGO.PRJ new file mode 100644 index 0000000..4bce95c Binary files /dev/null and b/CATALOGO.PRJ differ diff --git a/CGRAPH.CPP b/CGRAPH.CPP new file mode 100644 index 0000000..5e03f26 --- /dev/null +++ b/CGRAPH.CPP @@ -0,0 +1,330 @@ +/////////////////////////////////////////////////////////////////////////// +///// Nombre: Cgraph.cpp /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: Confecciona la pantalla de inicio /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: (Unknow) /// +//// /// +//// Compilador Borland C++ 3.0 ( Creaci¢n original en Turbo C 2.0 ) /// +/////////////////////////////////////////////////////////////////////////// + +#include // Libreria de Funciones Graficas +#include + +extern struct boton { + + int left; + int up; + int right; + int down; + +}; + + void fundido_al_negro(void); + void pon_paleta(char *punt, int bandera); + + void DibujaPantalla(void); + void DibujaOjo(void); + void DibujaInfo(void); + void DibujaSalir(void); + void ImprimeBoton (int left, int up, int right, int down, + int cdf, int cs1, int cs2); + void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); + //void ImprimeBoton2 (struct boton parm); + + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Esta Funci¢n imprimira los botones, pasandole como argumentos la estructura + boton, que define: + Izquierda ( left ) "int" + Arriba ( up ) + Derecha ( right ) "int" + Abajo ( down ) + Color de Fondo ( cdf ) "int" + Color Sombra 1 ( cs1 ) "int" + Color Sombra 2 ( cs2 ) "int" + Constante de Lugar: ( cdl ) "int" + 1 Sombra en ESI + 2 Sombra en EII + 3 Sombra en ESD + 4 Sombra en EID + + GENERADOR DE BOTONES INVENCION DEL FUENTE EXCLUSIVA DE Jos‚ David Guill‚n */ + +void ImprimeBoton (int left, int up, int right, int down, + int cdf, int cs1, int cs2) +{ + + int puntos[14]; + puntos[0] = left+1; puntos[1] = up-1; + puntos[2] = right+1; puntos[3] = up-1; + puntos[4] = right+1; puntos[5] = down+1; + puntos[6] = (right-2); puntos[7] = (down-2); + puntos[8] = (right-2); puntos[9] = (up+2); + puntos[10] = (left+2); puntos[11] = (up+2); + puntos[12] = left+1; puntos[13] = up-1; + + setcolor(cs2); + setfillstyle(SOLID_FILL, cs2); + setlinestyle(0, 1, NORM_WIDTH); + fillpoly(7, puntos); + + setcolor(cs1); + setfillstyle(SOLID_FILL, cs1); + setlinestyle(0, 1, NORM_WIDTH); + puntos[0] = left; puntos[1] = up; + puntos[2] = left; puntos[3] = down+1; + puntos[4] = right+1; puntos[5] = down+1; + puntos[6] = (right-2); puntos[7] = (down-2); + puntos[8] = (left+3); puntos[9] = (down-2); + puntos[10] = (left+3); puntos[11] = (up+3); + puntos[12] = left; puntos[13] = up; + fillpoly(7, puntos); + + setcolor(cdf); + setfillstyle(SOLID_FILL, cdf); + bar(left+3, up+3, right-3, down-3); + +} + + +void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm) +{ + int puntos[14]; + puntos[0] = parm.left+1; puntos[1] = parm.up-1; + puntos[2] = parm.right+1; puntos[3] = parm.up-1; + puntos[4] = parm.right+1; puntos[5] = parm.down+1; + puntos[6] = (parm.right-2); puntos[7] = (parm.down-2); + puntos[8] = (parm.right-2); puntos[9] = (parm.up+2); + puntos[10] = (parm.left+2); puntos[11] = (parm.up+2); + puntos[12] = parm.left+1; puntos[13] = parm.up-1; + + setcolor(cs2); + setfillstyle(SOLID_FILL, cs2); + setlinestyle(0, 1, NORM_WIDTH); + fillpoly(7, puntos); + + setcolor(cs1); + setfillstyle(SOLID_FILL, cs1); + setlinestyle(0, 1, NORM_WIDTH); + puntos[0] = parm.left; puntos[1] = parm.up; + puntos[2] = parm.left; puntos[3] = parm.down+1; + puntos[4] = parm.right+1; puntos[5] = parm.down+1; + puntos[6] = (parm.right-2); puntos[7] = (parm.down-2); + puntos[8] = (parm.left+3); puntos[9] = (parm.down-2); + puntos[10] = (parm.left+3); puntos[11] = (parm.up+3); + puntos[12] = parm.left; puntos[13] = parm.up; + fillpoly(7, puntos); + +if(fill) { + setcolor(cdf); + setfillstyle(SOLID_FILL, cdf); + bar(parm.left+3, parm.up+3, parm.right-3, parm.down-3); +} + +} + + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* DibujaPantalla confecciona la pantalla de inicio */ + +void DibujaPantalla(void) +{ + int i; + int x = 30; + int y[4] = {30, 150, 270, 390}; + char *texto[] = { "Mirar ", + "Utilidades ", + "Informaci¢n", + "Salir "}; + + setfillstyle(6, 57); + floodfill(0, 0, 1); + + ImprimeBoton(20, 20, 170, 100, 7, 63, 56); + ImprimeBoton(20, 140, 170, 220, 7, 63, 56); + ImprimeBoton(20, 260, 170, 340, 7, 63, 56); + ImprimeBoton(20, 380, 170, 460, 7, 63, 56); + + setcolor(0); + for(i=0; i<4; i++) { + outtextxy( x, y[i], texto[i]); + outtextxy( x+1, y[i]+6, "-"); + } + DibujaOjo(); + DibujaInfo(); + DibujaSalir(); + + ImprimeBoton(205, 20, 605, 220, 7, 63, 56); + + ImprimeBoton(213, 29, 302, 209, 0, 56, 63); /* 214 29 302 209 */ + ImprimeBoton(322, 29, 596, 209, 0, 56, 63); + + ImprimeBoton(205, 260, 605, 460, 7, 63, 56); + ImprimeBoton(213, 269, 596, 451, 0, 56, 63); /* 214 269 596 451 */ + +} + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Realiza el Dibujo del Ojo */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + +void DibujaOjo(void) +{ + setcolor(0); + setlinestyle(0, 0, NORM_WIDTH); + ellipse(98, 70, 0, 360, 10, 12); + ellipse(120, 65,0, 360, 12, 10); + + setfillstyle(SOLID_FILL, 6); + floodfill(98, 70, 0); + floodfill(120, 65, 0); + + setcolor(0); + circle(101, 76, 4); + circle(126, 70, 4); + + setfillstyle(SOLID_FILL, 0); + floodfill(101, 76, 0); + floodfill(126, 70, 0); + + pieslice(114, 82, 0, 360, 5); + + ellipse(116, 88, 185, 360, 15, 5); +} + + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Dibuja la 'I' de Info */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +void DibujaInfo(void) +{ + setcolor(0); + setfillstyle(SOLID_FILL, 62); + fillellipse(130, 310, 18, 25); + settextstyle(DEFAULT_FONT, HORIZ_DIR, 3); + outtextxy(119, 300, "i"); + settextstyle(DEFAULT_FONT, HORIZ_DIR, 1); +} + + +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* Dibuja Mi JD */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ +/* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ */ + +void DibujaSalir(void) +{ + setcolor(56); + setlinestyle(0, 0, THICK_WIDTH); + line(75, 403, 100, 403); /* J */ + line(100, 403, 100, 443); /* J */ + line(84, 436, 75, 436); /* J */ + + line(105, 403, 120, 403); /* D */ + + setcolor(63); + line(75, 404, 75, 414); /* J */ + line(75, 414, 90, 414); /* J */ + line(90, 414, 90, 438); /* J */ + line(75, 437, 75, 448); /* J */ + + line(105, 403, 105, 456); /* D */ + line(105, 456, 120, 456); /* D */ + + + arc(88, 443, 180, 353, 13); /* J */ + setlinestyle(0, 0, THICK_WIDTH); + + + setcolor(56); + setlinestyle(0, 0, THICK_WIDTH); + arc(87, 438, 180, 353, 4); /* J */ + + setlinestyle(0, 0, THICK_WIDTH); + ellipse(115, 429, 280, 80, 23, 27); /* D */ + + +} + + + + +void fundido_al_negro(void) +{ + // int OK=0; + typedef union { + struct { + unsigned char rojo, verde, azul; + }color; + unsigned char RGB[3]; + }DAC; + + typedef DAC DACARRAY[16]; + + union REGS regs; + struct SREGS sregs; + int m,n; + DACARRAY Buffer; // Array de 16 estructuras de 3 + //obtencion de la paleta a trav‚s de la BIOS. + regs.h.ah=0x10; + regs.h.al=0x17; + regs.x.bx=0; + regs.x.cx=16; + regs.x.dx=FP_OFF(Buffer); + sregs.es=FP_SEG(Buffer); + int86x(0x10,®s,®s,&sregs); + + + for(m=0;m<64;m++) + // while(!OK) + { + for(n=0;n<16;n++) + { + if (Buffer[n].RGB[0]>0) { Buffer[n].RGB[0]--; } + if (Buffer[n].RGB[1]>0) { Buffer[n].RGB[1]--; } + if (Buffer[n].RGB[2]>0) { Buffer[n].RGB[2]--; } + // if (Buffer[n].RGB[1]<=0 && Buffer[n].RGB[1]<=0 && Buffer[n].RGB[2]<=0) OK = 1; + } + pon_paleta((char*)Buffer, -1); + delay(15); + } //; +} + +void pon_paleta(char *punt, int bandera) +{ + struct SREGS seg; + union REGS regs; + unsigned int n; + char far *cPaleta, *dir_pal; + cPaleta=punt; + + if(bandera==0){ + dir_pal=cPaleta; + for(n=12; n>0; n--) { + *cPaleta=*cPaleta >> 2; + *dir_pal=*cPaleta; + cPaleta++;dir_pal++; + } + } + + regs.x.ax = 0x1012; + regs.x.bx = 0; + regs.x.cx = 16; + regs.x.dx = FP_OFF(cPaleta); + seg.es = FP_SEG(cPaleta); + int86x(0x10, ®s, ®s, &seg); // funci¢n para asignar los colores +} diff --git a/CINFO.CPP b/CINFO.CPP new file mode 100644 index 0000000..b682e97 --- /dev/null +++ b/CINFO.CPP @@ -0,0 +1,196 @@ +/////////////////////////////////////////////////////////////////////////// +///// Nombre: CInfo.CPP /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: Muestra informaci¢n del sistema.. (CPU, VIDEO...) /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 26 - 07 - 1994 /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + + #include + #include + #include + #include + #include + + void DatosRaton(void); + void printxy(int x, int y, int m, char *texto); + + extern int raton; /* Indica si esta instalado el raton (def. NO) */ + extern int x_raton; // En el M¢dulo: Craton.CPP + extern int y_raton; // En el M¢dulo: Craton.CPP + extern int boton_izq; // En el M¢dulo: Craton.CPP + extern int boton_der; // En el M¢dulo: Craton.CPP + extern int dir_raton [32+32]; // En el M¢dulo: Craton.CPP + + extern int access; /* Indica si se tiene acceso al menu ppal. (def. NO) */ + extern void BorraViewPort(int view); + extern void printxy(int x, int y, int m, char *texto); + extern void desactiva_raton(void); // En el M¢dulo: Craton.CPP + extern void activa_raton(void); // En el M¢dulo: Craton.CPP + extern void inicializa_raton_grafico(int x1, // En el M¢dulo: Craton.CPP + int y1, int x2, int y2, int px, int py); + extern int sb2; + +void Info(char *nombrecargado) +{ + union REGS ent, sal; + int salir; + + BorraViewPort( 3); + + setcolor(63); + printxy(28, 19, 0, "Programa y versi¢n: CATALOGO v4.0, JùD Anyware"); + + setcolor( 8); + printxy(29, 39, 1, "P. EXE: "); + printxy(29, 40, 1, "Versi¢n registrada a:"); + printxy(29, 42, 1, "Ejecuci¢n de INFO: Interna"); + printxy(29, 44, 1, "DOS, enviroment:"); + printxy(29, 45, 1, "DOS, memoria:"); + printxy(29, 46, 1, "Hardware detectado: CPU: FPU:"); + printxy(29, 47, 1, "Raton: "); + printxy(29, 49, 1, "Gr ficos: 640x480 VGA, 16 colores"); + printxy(29, 50, 1, "Driver Gr fico: VGA Device Driver (EGAVGA)"); + printxy(29, 51, 1, "Chips Gr fico:"); + printxy(29, 53, 1, "Salida de sonido digital:"); + printxy(29, 55, 1, "Nivel de acceso:"); + + setcolor( 7); + + printxy(37, 39, 1, nombrecargado); // Lugar desde donde fue ejecutado + // el programa. + + printxy(51, 40, 1, "Versi¢n PreView"); // Nombre del usuario registrado + + + // Enviroment del DOS +{ + auto int ver; + auto int mayor, menor; + auto char buffer[5]; + + ver = bdos(0x30, 0, 0); + mayor = ver & 0xFF; + menor = ver >> 8; + + sprintf(buffer, "%d.%d", mayor, menor ); + + printxy(46, 44, 1, buffer); + + +} + printxy(49, 45, 1, " "); // Memoria reportada por el DOS + + /////////////////////////// Hardware detecci¢n //////////////////////////// + + printxy(54, 46, 1, " "); // C.P.U. + + printxy(71, 46, 1, " "); // F.P.U. + + + if (raton) DatosRaton(); // Raton + else printxy(36, 47, 1, "Raton no instalado"); + + if(access) printxy(49, 55, 1, "COMPLETO"); // Nivel de acceso COMPLETO + else printxy(49, 55, 1, "BAJO"); // Nivel de acceso BAJO + + if(sb2) printxy(55, 53, 1, "Sound Blaster DETECT"); + else printxy(55, 53, 1, "usando Speaker"); + + + salir = 0; + if(raton!=0) { + inicializa_raton_grafico(325, 33, 584, 189, 454, 111); + activa_raton(); + } + do { + + if (kbhit()) { + getch(); + salir = 1; + } + + if( raton!=0 && !salir ) { + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + if (boton_izq || boton_der) salir = 1; + } + + }while (!salir); + + desactiva_raton(); + BorraViewPort( 3); + if(raton!=0) { + inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + activa_raton(); + } + + +} + +void DatosRaton(void) +{ + + struct SREGS segmento; + union REGS registro; + + static char *tipo[]={"Bus","Serie","InPort","PS/2","HP"}; + + struct { + int status; + int botones; + short verhi,verlo; + short tipo,irq; + } minfo; + +registro.x.ax=0; +int86(0x33,®istro,®istro); + minfo.status=registro.x.ax; + minfo.botones=registro.x.bx; + +registro.x.ax=0x24; +int86(0x33,®istro,®istro); + minfo.verhi=registro.h.bh; minfo.verlo=registro.h.bl; + minfo.tipo=registro.h.ch-1; + minfo.irq=registro.h.cl; + + +///////////////////////////////////////////////////////////////// +//////////////////// Muestra datos obtenidos ////////////////// +///////////////////////////////////////////////////////////////// +char *string = "buffer de linea"; + +printxy(36, 47, 1, tipo[minfo.tipo]); + +itoa(minfo.verhi, string, 10); + +printxy(43, 47, 1, string); +printxy(45, 47, 1, "."); + +itoa(minfo.verlo, string, 10); + +printxy(46, 47, 1, string); +printxy(48, 47, 1, ", IRQ "); + +itoa(minfo.irq, string, 10); + +printxy(54, 47, 1, string); +printxy(56, 47, 1, ","); + +itoa(minfo.botones, string, 10); + +printxy(58, 47, 1, string); +printxy(60, 47, 1, "Botones"); + +} + +void printxy(int x, int y, int m, char *texto) +{ + if (m==1) outtextxy( x*8 -7, y*8 - 7, texto); else outtextxy( x*8 - 7, y*16 - 16, texto); + +} diff --git a/CMENSAJE.CPP b/CMENSAJE.CPP new file mode 100644 index 0000000..5ec3f7a --- /dev/null +++ b/CMENSAJE.CPP @@ -0,0 +1,310 @@ +////////////////////////////////////////////////////////////////////////// +///// Nombre: CMensaje.CPP /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: M¢dulo para editar o modificar el mensaje /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 30 - 12 - 1994 /// +//// /// +//// Comentario: /// +//// /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + + extern struct JD { + char esc; + char color[8]; + char prog[14]; + char nl; char rt; + char autor[36]; + char pt; char ef; + }; + + extern struct caddviewComentario { + int record_zone_init; // Zona de grabaci¢n interna + char linea[10][32 + 1]; // 32 digitos * 10 lineas + }; + + extern struct JD cabecera; + extern struct caddviewComentario JD_comment; + + extern union REGS ent, sal; + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + extern struct boton { int left; int up; int right; int down; }; + extern int boton_izq; extern int boton_der; + extern int x_raton; extern int y_raton; + extern int raton; + extern int bpush; + extern int sb; + +extern int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); +extern void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py); +extern void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); +extern int CheckButon(int nb, struct boton menu[]); +extern void Sound_SN(char *headfile); +extern void BorraViewPort(int view); +extern void desactiva_raton(void); +extern void activa_raton(void); + +void Modificar_Comentario(void); +extern void EditCursorC(int ShowHide, int y); + +void Modificar_Comentario(void){ + + FILE *JDm_f; // Fichero Mensajes + char ArchivoMensaje[13]="CMensaje.dat"; + + int LSJ = sizeof(struct JD); + int LSC = sizeof(struct caddviewComentario); + int Linea_c=1, finc = 0, key, i; + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de COMENTARIO o creaci¢n... ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + + if ( (JDm_f = fopen( ArchivoMensaje, "r+b"))==NULL) { + + FILE *fa; + if ( (fa = fopen( ArchivoMensaje, "wb" ) )!=NULL ) { + auto int i; + + + + JD_comment.record_zone_init = 0; // 0 => disponible para grabaci¢n + // 1 => datos importantes + cabecera.esc = 27; + strcpy(cabecera.color, "[31;40m"); + strcpy(cabecera.prog, "Catalogo 4.0"); + cabecera.nl = 13; cabecera.rt = 10; + strcpy(cabecera.autor, " Jos‚ David Guill‚n"); + cabecera.pt = 7; cabecera.ef = 26; + + rewind(fa); + fwrite(&cabecera, LSJ, 1, fa); + fseek(fa, (long)LSJ, SEEK_SET); + + for(i=0; i<10; i++) + strcpy(JD_comment. linea[i], "\0"); + fwrite(&JD_comment, LSC, 1, fa); + if (fclose(fa) == EOF ) exit(1); + } + if ( (JDm_f = fopen( ArchivoMensaje, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO COMENTARIO EN LA 2§ PASADA"); + exit(1); + } + } + + fseek(JDm_f, (long)LSJ, SEEK_SET); + if ( fread(&JD_comment, LSC, 1, JDm_f) != 1 ) { + printf("NO SE PUDO LEER EL FICHERO COMENTARIO"); + exit(1); + } + + BorraViewPort(1); + BorraViewPort(2); + BorraViewPort(3); + +////////////////////////////// Ahora se abrir  un nuevo men£ para el raton: +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + struct boton comment[4]; + comment[0]. left = 217; comment[0]. up = 34; comment[0]. right = 297; comment[0]. down = 75; + comment[1]. left = 217; comment[1]. up = 76; comment[1]. right = 297; comment[1]. down = 117; + comment[2]. left = 217; comment[2]. up = 118; comment[2]. right = 297; comment[2]. down = 159; + comment[3]. left = 217; comment[3]. up = 160; comment[3]. right = 297; comment[3]. down = 204; + + for(i=0; i<4; i++) ImprimeBoton2 (1, 7, 63, 56, comment[i]); + + setcolor(15); + + outtextxy(222, 49 , " Supr. "); + outtextxy(222, 58, " Linea"); + + outtextxy(222, 96 , " UP "); + outtextxy(222, 138, " DOWN "); + + outtextxy(224, 179, "Salir "); + outtextxy(222, 189, " F2"); + + setcolor(0); + + outtextxy(221, 48 , " Supr. "); + outtextxy(221, 57, " Linea"); + + outtextxy(221, 95 , " UP "); + outtextxy(221, 137, " DOWN "); + + outtextxy(223, 178, "Salir "); + outtextxy(221, 188, " F2"); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + setcolor(14); + for(i=0; i<10; i++) + outtextxy( 42 * 8 - 7, (4 + i) * 16 - 16, JD_comment. linea[i]); + +do{ + + EditCursorC(0, Linea_c); + +if(raton) activa_raton(); +/////////////////////// Aqui va una pausa de TECLADO y RATON al mismo TIEMPO +do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + } else boton_izq = 1; +}while( !boton_izq && !kbhit() ); +if(raton) desactiva_raton(); + + if( kbhit() ) { + + //////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////// ¨ Hay una tecla en buffer ... + + key = getch(); + + EditCursorC(1, Linea_c); + + if( isprint(key) || isspace(key) ) { + + if(key != 13) ungetch(key); + InputCadenaG( JD_comment. linea[Linea_c - 1], 0, 32, 42, Linea_c + 3, 63, 57); + + } else { + + if( key == 0 ) { + key = getch(); + + switch ( key ) { + // DEL --- Borra Linea + case 83: + strcpy(JD_comment. linea[Linea_c - 1], "\0"); + break; + + // FLECHA ARRIBA + case 72: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + // FLECHA ABAJO + case 80: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + + // FLECHA DERECHA + case 77: + case 9: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // F2 --> PARA SALIR + case 60: + finc = 1; + break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // Fin Key = 0 + } // Fin Is Print Key? +} // Fin Tecla en Buffer + +///////////////////////////////////////////////////////////////////////////// +//ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// +////////////////////////// Comprueba con rat¢n ( SI ) /////////////////////// +//ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// +///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// ... o es el RATON ? + + if(raton && boton_izq==1 || boton_der==1) { + + if( CheckButon(4, comment) ) { + + EditCursorC(1, Linea_c); + switch ( bpush ) { + // Suprimir Linea + case 1: + strcpy(JD_comment. linea[Linea_c - 1], "\0"); + break; + + // FLECHA ARRIBA + case 72: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + + // FLECHA ABAJO + case 80: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + Linea_c--; + if (Linea_c < 1) Linea_c = 10; + break; + // FLECHA DERECHA + case 77: + case 9: + Linea_c++; + if (Linea_c > 10) Linea_c = 1; + break; + // F2 --> PARA SALIR + case 60: + finc = 1; + break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + + } + } +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +}while( !finc ); + + BorraViewPort(1); + BorraViewPort(2); + BorraViewPort(3); + +fseek(JDm_f, (long)LSJ, SEEK_SET); +fwrite(&JD_comment, LSC, 1, JDm_f); +if (fclose(JDm_f) == EOF ) exit(1); + +} diff --git a/CPEDIDOS.CPP b/CPEDIDOS.CPP new file mode 100644 index 0000000..e3ce659 --- /dev/null +++ b/CPEDIDOS.CPP @@ -0,0 +1,993 @@ +/////////////////////////////////////////////////////////////////////////// +//// Nombre: CPedidos.CPP /// +//// Modulo: Perteneciente a Catalogo.CPP /// +//// Descripci¢n: M¢dulo para editar o modificar los pedidos /// +//// enlazados a este m¢dulo por CaddView.CPP /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 22 - 12 - 1994 /// +//// /// +//// Comentario: /// +//// /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + + struct pedidos_descripcion { + unsigned int n_records; // n§ de grabaciones en el fichero + + char nombre[24+1]; // Nombre 24 digitos + NULL + char apelli[21+1]; // Apellidos 21 digitos + NULL + char direcc[21+1]; // Direcci¢n 21 digitos + NULL + long telefono; // Tel‚fono 5 digitos permitidos + char cpu[10 + 1]; // C.P.U. 10 digitos + NULL + int ram; // R.A.M 2 digitos permitidos + int hd; // HD. 4 digitos permitidos + }; + + struct pedidos_datos { + unsigned int record_zone ; int record_name; + char nombre[13+1] ; char zip[3+1] ; int kbytes ; + }; + + struct pedidos_descripcion JD_dp; // Descripci¢n... + struct pedidos_datos JD_dt; // Datos... + + + FILE *JD_p; // Fichero Pedidos + +// Variables de posici¢n y registro + + int CurrRowP, CurrColP; + unsigned int CurrTopLineP; + int CurrRowPD, CurrColPD= 1; + char ArchivoPedidos[]="CPedidos.DAT"; + + /////////////////////////////////////////////////////////////////////////// + //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + /////////////////////////////////////////////////////////////////////////// + extern struct boton { int left; int up; int right; int down; }; + extern int boton_izq; extern int boton_der; + extern int x_raton; extern int y_raton; + extern int raton; + extern int bpush; + extern int sb; + +extern int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); +extern void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py); +extern void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); +extern int CheckButon(int nb, struct boton menu[]); +extern void Sound_SN(char *headfile); +extern void BorraViewPort(int view); +extern void desactiva_raton(void); +extern void activa_raton(void); + + +void EditarModificarPedidos(void); +void EditCursorPD(int ShowHide); +void EditCursorP(int ShowHide); +void PrintLineP(int permiso); +void PrintWholeScreenP(void); +void CreaPresentacion(void); +void DeleteRecordP(void); +void AddRecordP(void); +void EditItemPD(void); +void EditItemP(void); +void MoveDownP(void); +void PutLineP(void); +void GetLineP(void); +void MoveUpP(void); +void Print_in_Printer(void); + +void EditarModificarPedidos(void){ + + union REGS ent, sal; + int finished, key, swap = 1; + + CurrRowP = 1; CurrColP = 1; CurrTopLineP = 1; + CurrRowPD= 1; + + + struct boton menu[11]; + menu[0]. left = 217; menu[0]. up = 34; menu[0]. right = 297; menu[0]. down = 65; + menu[1]. left = 217; menu[1]. up = 66; menu[1]. right = 297; menu[1]. down = 97; + menu[2]. left = 217; menu[2]. up = 98; menu[2]. right = 297; menu[2]. down = 129; + menu[3]. left = 217; menu[3]. up = 130; menu[3]. right = 256; menu[3]. down = 149; + menu[4]. left = 258; menu[4]. up = 130; menu[4]. right = 297; menu[4]. down = 149; + menu[5]. left = 217; menu[5]. up = 150; menu[5]. right = 256; menu[5]. down = 171; + menu[6]. left = 258; menu[6]. up = 150; menu[6]. right = 297; menu[6]. down = 171; + menu[7]. left = 217; menu[7]. up = 172; menu[7]. right = 297; menu[7]. down = 204; + + menu[8]. left = 325; menu[8]. up = 150; menu[8]. right = 414; menu[8]. down = 204; + menu[9]. left = 415; menu[9]. up = 150; menu[9]. right = 503; menu[9]. down = 204; + menu[10]. left = 504; menu[10]. up = 150; menu[10]. right = 592; menu[10]. down = 204; + + CreaPresentacion(); + for(auto int i=0; i<11; i++) ImprimeBoton2 (1, 7, 63, 56, menu[i]); + + setcolor(15); + + outtextxy(222, 50 , "ADD F9 "); + outtextxy(222, 80 , "DEL F10"); + outtextxy(223, 107, " SWAP "); + outtextxy(223, 115," F3 "); + + outtextxy(222, 136, " UP "); + outtextxy(263, 136, "DOWN"); + outtextxy(222, 156, "RePg"); + outtextxy(262, 156, "AvPg"); + outtextxy(222, 180, "Salir F2"); + + outtextxy(335, 160, "Imprimir"); + outtextxy(335, 170, " F8"); + outtextxy(425, 160, "Borrar y"); + outtextxy(425, 170, "Salir F7"); +/* + outtextxy(506, 130, "Borrar"); + outtextxy(506, 140, ""); +*/ + setcolor(0); + + outtextxy(221, 49 , "ADD F9 "); + outtextxy(221, 79 , "DEL F10"); + outtextxy(222, 106, " SWAP "); + outtextxy(222, 114," F3 "); + + outtextxy(221, 135, " UP "); + outtextxy(262, 135, "DOWN"); + outtextxy(221, 155, "RePg"); + outtextxy(261, 155, "AvPg"); + outtextxy(221, 179, "Salir F2"); + + outtextxy(334, 159, "Imprimir"); + outtextxy(334, 169, " F8"); + outtextxy(424, 159, "Borrar y"); + outtextxy(424, 169, "Salir F7"); +/* + outtextxy(505, 129, "Borrar"); + outtextxy(505, 139, "y Salir F6"); +*/ + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de Pedidos o creaci¢n... ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + + if ( (JD_p = fopen( ArchivoPedidos, "r+b"))==NULL) { + + FILE *fa; + if ( (fa = fopen( ArchivoPedidos, "wb" ) )!=NULL ) { + + JD_dp. n_records = 1; + + strcpy(JD_dp. nombre, "\0"); + strcpy(JD_dp. apelli, "\0"); + strcpy(JD_dp. direcc, "\0"); + JD_dp. telefono = 0; + strcpy(JD_dp. cpu, "\0"); JD_dp. ram = 0; JD_dp. hd = 0; + + rewind(fa); + fwrite(&JD_dp, sizeof(struct pedidos_descripcion), 1, fa); + + JD_dt. record_zone = 0; + strcpy(JD_dt. nombre, "\0"); + strcpy(JD_dt. zip, "\0"); + JD_dt. kbytes = 0; + + fwrite(&JD_dt, sizeof(struct pedidos_datos), 1, fa); + + if (fclose(fa) == EOF ) exit(1); + } + if ( (JD_p = fopen( ArchivoPedidos, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO PEDIDOS EN LA 2§ PASADA"); + exit(1); + } + } + + if ( fread(&JD_dp, sizeof(struct pedidos_descripcion), 1, JD_p) != 1 ) { // Lee n§ de registros + // Mensaje("No se pudo LEER CPedidos.DAT", 0) + printf("NO SE PUDO LEER EL FICHERO PEDIDOS"); + return; + } + + + setcolor(14); + + outtextxy( 50 * 8 - 7, 4 * 16 - 16, JD_dp. nombre ); + outtextxy( 53 * 8 - 7, 5 * 16 - 16, JD_dp. apelli ); + outtextxy( 53 * 8 - 7, 6 * 16 - 16, JD_dp. direcc ); + { // Bloque abierto para la destrucci¢n prematura del string + auto char string[15]; + ltoa(JD_dp. telefono, string, 10); + + outtextxy( 52 * 8 - 7, 7 * 16 - 16, string ); + outtextxy( 47 * 8 - 7, 8 * 16 - 16, JD_dp. cpu ); + itoa(JD_dp. ram, string, 10); + outtextxy( 63 * 8 - 7, 8 * 16 - 16, string ); + itoa(JD_dp. hd, string, 10); + outtextxy( 70 * 8 - 7, 8 * 16 - 16, string ); + } + + PrintWholeScreenP(); + + GetLineP(); + + if ( CurrRowP >= 11 ) /* N£mero de lineas DISPONIBLES */ + PrintLineP(0); + else PrintLineP(1); + + finished = 0; + int borrar_todo = 0; + + + +if(raton) inicializa_raton_grafico(0, 0, 624, 464, 320, 240); + do{ + + if(swap) EditCursorP(0); else EditCursorPD(0); + +if(raton) activa_raton(); +/////////////////////// Aqui va una pausa de TECLADO y RATON al mismo TIEMPO +do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + } else boton_izq = 1; +}while( !boton_izq && !kbhit() ); +if(raton) desactiva_raton(); + + if( kbhit() ) { + + //////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////// ¨ Hay una tecla en buffer ... + + key = getch(); + + if(swap) EditCursorP(1); else EditCursorPD(1); + + if( isprint(key) || isspace(key) ) { + + if(key!=13) ungetch(key); + if(swap) EditItemP(); else EditItemPD(); + + } else { + + if( key == 0 ) { + key = getch(); + + switch ( key ) { + // INICIO + case 71: + if (swap) CurrColP = 1; else CurrRowPD = 1; + break; + + // FIN + case 79: + if (swap) CurrColP = 3; else CurrRowPD = 7; + break; + + // FLECHA ARRIBA + case 72: + if (swap) MoveUpP(); else { + CurrRowPD--; + if (CurrRowPD == 0) CurrRowPD = 7; + } + break; + + // FLECHA ABAJO + case 80: + if (swap) MoveDownP(); else { + CurrRowPD++; + if (CurrRowPD == 8) CurrRowPD = 1; + } + + break; + + // FLECHA IZQUIERDA + case 75: + case 15: + if (swap) { + CurrColP--; + if (CurrColP == 0) CurrColP = 3; + } else { + CurrRowPD--; + if (CurrRowPD == 0) CurrRowPD = 7; + } + + break; + + // FLECHA DERECHA + case 77: + case 9: + if (swap) { + CurrColP++; + if (CurrColP == 4) CurrColP = 1; + } else { + CurrRowPD++; + if (CurrRowPD == 8) CurrRowPD = 1; + } + break; + + // F3 ---> SWAP + case 61: + if(swap) swap=0; else swap = 1; + break; + // ReP g + case 73: + if(swap){ + CurrRowP = 1; + if(CurrTopLineP >= 20 ) { CurrTopLineP -= 19; } else { CurrTopLineP = 1; } + if(CurrTopLineP < JD_dp.n_records ) { CurrTopLineP = 1; } + PrintWholeScreenP(); + GetLineP(); + } + break; + + // AvP g + case 81: + if (swap) { + CurrRowP = 1; + CurrTopLineP = CurrTopLineP + 19; + if (CurrTopLineP >= JD_dp.n_records) + CurrTopLineP = JD_dp.n_records; + PrintWholeScreenP(); + GetLineP(); + } + break; + + // F2 --> PARA SALIR + case 60: + finished = 1; + break; + + // F9 --> A¥ADIR + case 67: + if (swap) AddRecordP(); + break; + + // F10 -> BORRAR + case 68: + if (swap) DeleteRecordP(); + break; + // F8 --> Imprimir + case 66: + Print_in_Printer(); + GetLineP(); + break; + // F7 --> Reinicializar marcas + case 65: + borrar_todo = 1; + finished = 1; + break; + + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // Fin Key = 0 + } // Fin Is Print Key? +} // Fin Tecla en Buffer + +///////////////////////////////////////////////////////////////////////////// +//ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// +////////////////////////// Comprueba con rat¢n ( SI ) /////////////////////// +//ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// +///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// ... o es el RATON ? + + if(raton && boton_izq==1 || boton_der==1) { + + if( CheckButon(11, menu) ) { + + if(swap) EditCursorP(1); else EditCursorPD(1); + switch ( bpush ) { + // F9 --> A¥ADIR + case 1: + if(swap) AddRecordP(); + break; + + // F10 -> BORRAR + case 2: + if(swap) DeleteRecordP(); + break; + + // F3 ---> SWAP + case 3: + if(swap) swap=0; else swap = 1; + break; + + // FLECHA ARRIBA + case 4: + if (swap) MoveUpP(); else { + CurrRowPD--; + if (CurrRowPD == 0) CurrRowPD = 7; + } + break; + + // FLECHA ABAJO + case 5: + if (swap) MoveDownP(); else { + CurrRowPD++; + if (CurrRowPD == 8) CurrRowPD = 1; + } + + break; + + // ReP g + case 6: + if(swap){ + CurrRowP = 1; + if(CurrTopLineP >= 20 ) { CurrTopLineP -= 19; } else { CurrTopLineP = 1; } + if(CurrTopLineP < JD_dp.n_records ) { CurrTopLineP = 1; } + PrintWholeScreenP(); + GetLineP(); + } + break; + // AvP g + case 7: + if(swap){ + CurrRowP = 1; + CurrTopLineP = CurrTopLineP + 19; + if (CurrTopLineP >= JD_dp.n_records) + CurrTopLineP = JD_dp.n_records; + PrintWholeScreenP(); + GetLineP(); + } + break; + + // F2 --> PARA SALIR + case 8: + finished = 1; + break; + // F8 --> Imprimir + case 9: + Print_in_Printer(); + GetLineP(); + break; + // F7 --> Reinicializar marcas + case 10: + borrar_todo = 1; + finished = 1; + break; + // BOTON VACIO + case 11: + break; + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // fin de check buttons + } // fin ¨ pulsa boton izq. || drch ? + +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +}while( !finished ); + + fclose(JD_p); // Fichero Pedidos + if(borrar_todo) remove(ArchivoPedidos); + BorraViewPort(1); + BorraViewPort(2); + BorraViewPort(3); + +} // End Function // + + +void EditCursorP(int ShowHide) { + +int cc, cf, lmax, i, py, pxx, Px; + // registro de color actual y de fondo + // Longitud M xima y contador de bucle + // desviaci¢n vertical y reajuste final + // desviaci¢n horizontal y "" "" + + if( CurrRowP >= 11 ){ Px = CurrColP + 3; py = 18 + (CurrRowP) - 10; + } else { Px = CurrColP; py = 18 + (CurrRowP); } + + switch (Px) { + case 1: pxx = 28; lmax = 13; break; + case 2: pxx = 42; lmax = 3; break; + case 3: pxx = 46; lmax = 5; break; + + case 4: pxx = 52; lmax = 13; break; + case 5: pxx = 66; lmax = 3; break; + case 6: pxx = 70; lmax = 5; break; + + default: pxx = 1; lmax = 80; break; + } + + if (!ShowHide) { cc = 63; cf = 57; } else { cc = 14; cf = 0; } + + setcolor(cf); // pone color de fondo '0' para borrar + + for (i=0; i= 11 ){ Px = CurrColP + 3; py = 18 + (CurrRowP) - 10; + } else { Px = CurrColP; py = 18 + (CurrRowP); } + + switch (Px) { + case 1: pxx = 28; lmax = 13; break; + case 2: pxx = 42; lmax = 3; break; + case 3: pxx = 46; lmax = 5; break; + + case 4: pxx = 52; lmax = 13; break; + case 5: pxx = 66; lmax = 3; break; + case 6: pxx = 70; lmax = 5; break; + + default: pxx = 1; lmax = 80; break; + } + + + switch (Px) { + case 1: + case 4: + InputCadenaG( JD_dt.nombre, 0, lmax, pxx, py, 63, 57); + break; + case 2: + case 5: + InputCadenaG( JD_dt.zip, 0, lmax, pxx, py, 63, 57); + break; + case 3: + case 6: + char cadena[] = "32766"; + itoa( (JD_dt.kbytes), cadena, 10 ); + do{ + if ( atoi(cadena) < 0 || atoi(cadena) > 32765 ) strcpy(cadena, "0"); + InputCadenaG( cadena, 1, lmax, pxx, py, 63, 57); + }while( atoi(cadena) < 0 || atoi(cadena) > 32765); + JD_dt.kbytes = atoi(cadena); + break; + } + + PutLineP(); + GetLineP(); + + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + +} + + +void EditItemPD(void) { + + int lmax, pxx, py, Px; + int LSCm = sizeof(struct pedidos_descripcion); + char string[15]; + + switch (CurrRowPD) { + case 1: + InputCadenaG( JD_dp.nombre, 0, 24, 50, 4, 63, 57); + break; + case 2: + InputCadenaG( JD_dp.apelli, 0, 21, 53, 5, 63, 57); + break; + case 3: + InputCadenaG( JD_dp.direcc, 0, 21, 53, 6, 63, 57); + break; + case 4: + ltoa(JD_dp. telefono, string, 10); + InputCadenaG( string, 1, 9, 52, 7, 63, 57); + JD_dp. telefono = atol(string); + break; + case 5: + InputCadenaG( JD_dp.cpu, 0, 10, 47, 8, 63, 57); + break; + case 6: + itoa(JD_dp. ram, string, 10); + InputCadenaG( string, 1, 2, 63, 8, 63, 57); + JD_dp. ram = atoi(string); + break; + case 7: + itoa(JD_dp. hd, string, 10); + InputCadenaG( string, 1, 4, 70, 8, 63, 57); + JD_dp. hd = atoi(string); + break; + default: + outtextxy( ( 1 ) * 8 - 7, 2 * 16 - 16, "ERROR Modulo SHOW_HIDE-Cursor, secci¢n CADDVIEW, P_CATALOGO"); + break; + } + + rewind(JD_p); + fwrite(&JD_dp, LSCm, 1, JD_p); + + +} + + + + +void MoveUpP(void) { + + if(CurrRowP==1) { if(sb) Sound_SN("catalog3"); } else { + CurrRowP--; + GetLineP(); + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + } +} + +void MoveDownP(void) { + + if( (CurrRowP + CurrTopLineP - 1) >= (JD_dp. n_records) || CurrRowP == 20 ) { if (sb) Sound_SN("catalog3"); } else { + CurrRowP++; + GetLineP(); + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + } + +} + + +void PrintLineP( int permiso ) { + + unsigned int CurrRecord = CurrTopLineP + CurrRowP - 1; + int py, i; + + if ( CurrRowP >= 11 ) { py = 18 + (CurrRowP) - 10; + } else { py = 18 + (CurrRowP); } + + + setcolor(14); // devuelve el color a su estado + + if ( CurrRecord <= (JD_dp.n_records) ) { + + // | Me preparo para convertir + char kbytes[6]; // | los int a char + // para que puedan ser utilizados +// itoa( JD_dt.kbytes, kbytes, 10); // por outtext y outtextxy... + sprintf(kbytes, "%5d", JD_dt.kbytes); + + switch(permiso) { + case 0: + outtextxy( ( 52 ) * 8 - 7, py * 16 - 16, JD_dt.nombre); + outtextxy( ( 66 ) * 8 - 7, py * 16 - 16, JD_dt.zip); + outtextxy( ( 70 ) * 8 - 7, py * 16 - 16, kbytes); + break; + + case 1: + outtextxy( ( 28 ) * 8 - 7, py * 16 - 16, JD_dt.nombre); + outtextxy( ( 42 ) * 8 - 7, py * 16 - 16, JD_dt.zip); + outtextxy( ( 46 ) * 8 - 7, py * 16 - 16, kbytes); + break; + + default: + outtextxy( ( 1 ) * 8 - 7, py * 16 - 16, "ERROR Modulo PrintLine, secci¢n CADDVIEW, P_CATALOGO _-JD-_"); + break; + } + } +} + + +void DeleteRecordP(void) { + +unsigned int CurrRecord; +int LSC = sizeof(struct pedidos_datos); +int LSCm = sizeof(struct pedidos_descripcion); + + if (JD_dp. n_records == 1) { if (sb) Sound_SN("catalog5"); } else { + + CurrRecord = CurrTopLineP + CurrRowP - 1; + + JD_dp. n_records --; + + unsigned int p = CurrRecord; + + while(p <= JD_dp. n_records) { + + fseek(JD_p, (long)LSCm + ( LSC * ( p + 1 ) - LSC ), SEEK_SET); // Se coloca + fread(&JD_dt, LSC, 1, JD_p); // Y lee + + fseek(JD_p, (long)LSCm + ( LSC * p - LSC ), SEEK_SET); // Se coloca + fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + + p++; + }; + + rewind(JD_p); + fwrite(&JD_dp, LSCm, 1, JD_p); // Acualiza n§ de registros + + int TmpRow = CurrRowP; + int TmpCol = CurrColP; + + PrintWholeScreenP(); + + CurrRowP = TmpRow; CurrColP = TmpCol; + + if ( (CurrRecord = CurrTopLineP + CurrRowP - 1) > JD_dp. n_records ) MoveUpP(); + + GetLineP(); + + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + } +} + +void AddRecordP(void){ + + + unsigned int CurrRecord= CurrTopLineP + CurrRowP - 1; + +if(CurrRecord < 160) { + + int LSC = sizeof(struct pedidos_datos); + int LSCm = sizeof(struct pedidos_descripcion); + + unsigned int avance = JD_dp. n_records; + + while(avance > CurrRecord) { + + fseek(JD_p, (long)LSCm + ( LSC * avance - LSC ), SEEK_SET); // Se coloca + fread(&JD_dt, LSC, 1, JD_p); // Y lee + + fseek(JD_p, (long)LSCm + ( LSC * (avance + 1) - LSC ), SEEK_SET); // Se coloca + fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + + avance--; + + }; + + JD_dp. n_records ++; + + rewind(JD_p); + fwrite(&JD_dp, LSCm, 1, JD_p); // Acualiza n§ de registros + + JD_dt.record_zone = 0; + JD_dt.record_name = 0; + + strcpy(JD_dt.nombre, "\0"); + strcpy(JD_dt.zip, "\0"); + JD_dt.kbytes = 0; + + fseek(JD_p, (long)LSCm + ( LSC * ( CurrTopLineP + CurrRowP ) - LSC ), SEEK_SET); // Se coloca + fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + + PrintWholeScreenP(); + + if ( (CurrRecord = CurrTopLineP + CurrRowP - 1) > JD_dp. n_records ) MoveUpP(); + + GetLineP(); + + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + + } + +} + +void PrintWholeScreenP(void){ + +int tmp = CurrRowP; +BorraViewPort(3); + + for(CurrRowP = 1; CurrRowP < 21; CurrRowP++) { + + + + if ( ( CurrTopLineP + CurrRowP - 1 ) <= JD_dp. n_records ) { + + GetLineP(); + if ( CurrRowP >= 11 ) PrintLineP(0); else PrintLineP(1); + + } + + } + +CurrRowP = tmp; + +} + +void PutLineP(void){ + +unsigned int CurrRecord = CurrTopLineP + CurrRowP - 1; + int LSC = sizeof(struct pedidos_datos); + int LSCm = sizeof(struct pedidos_descripcion); + +fseek(JD_p, (long)LSCm + ( LSC * CurrRecord - LSC ), SEEK_SET); // Se coloca +fwrite(&JD_dt, LSC, 1, JD_p); // Y escribe + +} + +void GetLineP(void){ + +unsigned int CurrRecord = CurrTopLineP + CurrRowP - 1; + int LSC = sizeof(struct pedidos_datos); + int LSCm = sizeof(struct pedidos_descripcion); + + fseek(JD_p, (long)LSCm + ( LSC * CurrRecord - LSC ), SEEK_SET); // Se coloca + fread(&JD_dt, LSC, 1, JD_p); // Y lee + +} + +void CreaPresentacion(void){ + BorraViewPort(2); // Para los mensajes... + + setcolor(12); + + outtextxy( 42 * 8 - 7, 4 * 16 - 16, "Nombre:" ); + outtextxy( 42 * 8 - 7, 5 * 16 - 16, "Apellidos:" ); + outtextxy( 42 * 8 - 7, 6 * 16 - 16, "Direcci¢n:" ); + outtextxy( 42 * 8 - 7, 7 * 16 - 16, "Tel‚fono:" ); + outtextxy( 42 * 8 - 7, 8 * 16 - 16, "CPU:" ); + outtextxy( 58 * 8 - 7, 8 * 16 - 16, "RAM:" ); + outtextxy( 66 * 8 - 7, 8 * 16 - 16, "HD:" ); + + setcolor( 4); + // Sistema utilizado para sombra == -1 + outtextxy( 328, 47 , "Nombre:" ); + outtextxy( 328, 63 , "Apellidos:" ); + outtextxy( 328, 79 , "Direcci¢n:" ); + outtextxy( 328, 95 , "Tel‚fono:" ); + outtextxy( 328, 111 , "CPU:" ); + outtextxy( 456, 111 , "RAM:" ); + outtextxy( 520, 111 , "HD:" ); + +} + +void Print_in_Printer(void){ + +unsigned int cont = 0; +int columna = 1, linea = 9; +int LSC = sizeof(struct pedidos_datos); +int LSCm = sizeof(struct pedidos_descripcion); + + +// char buffer[28]; + +////////////////////////////////////////////////////////////////////////////// +// Mensaje es la funci¢n que espero incorporar no muy tarde, para mostrar // +// los mensajes, recibiendo como parametros ( 0 espera una tecla ) // +// ( 1 espera 'S' o 'N' ) // +// // +// En el par metro 0, devolvera 1 si se pulsa ESC // +// En el caso del parametro 1, devolvera 1's , 2'n [...] // +// // +////////////////////////////////////////////////////////////////////////////// +// if( !Mensaje("Prepare la impresora y pulse una tecla", 0) ) { // +////////////////////////////////////////////////////////////////////////////// + fprintf(stdprn, "\n\r" ); + if (ferror(stdprn)) { clearerr(stdprn); + // Mensaje("Error en el dispositivo PRN", 0) + return; + } + fprintf(stdprn, "Nombre: %s. \n\r", JD_dp. nombre ); + fprintf(stdprn, "Apellidos: %s. \n\r", JD_dp. apelli ); + fprintf(stdprn, "Direcci¢n: %s. \n\r", JD_dp. direcc ); + fprintf(stdprn, "Tel‚fono: %ld. \n\r", JD_dp. telefono ); + fprintf(stdprn, "C.P.U.: %-10s ", JD_dp. cpu ); + fprintf(stdprn, "R.A.M.: %2.d ", JD_dp. ram ); + fprintf(stdprn, "HD: %4d. \n\r\n\r\n\r", JD_dp. hd ); + + fseek(JD_p, (long)LSCm, SEEK_SET); + + while( cont < JD_dp. n_records ) { + fread(&JD_dt, LSC, 1, JD_p); + fprintf(stdprn, "%-13s %-3s %4d ³ ", (JD_dt. nombre), (JD_dt. zip), (JD_dt. kbytes) ); + columna ++; if(columna==4) { fprintf(stdprn, "\n\r"); + if (ferror(stdprn)) { clearerr(stdprn); + // Mensaje("Error en el dispositivo PRN", 0) + return; + } columna=1; linea ++; + if(linea==60) { fputc(12, stdprn); // Va al principio de + // la p gina siguiente + if (ferror(stdprn)) { clearerr(stdprn); + // Mensaje("Error en el dispositivo PRN", 0) + return; + } + + // Mensaje("Inserte un nuevo folio", 0); + linea = 1; + } + } + cont++; + } + fputc(12, stdprn); +// } // Fin Comprueba Mensaje + +} \ No newline at end of file diff --git a/CPRINTER.CPP b/CPRINTER.CPP new file mode 100644 index 0000000..8cc53d6 --- /dev/null +++ b/CPRINTER.CPP @@ -0,0 +1,247 @@ +/////////////////////////////////////////////////////////////////////////// +//// Nombre: CPrinter.CPP /// +//// Modulo: Perteneciente a Catalogo.CPP /// +//// Descripci¢n: M¢dulo para imprimir total o parcialmente todo /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 02 - 01 - 1995 /// +//// /// +//// Comentario: /// +//// /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include + + extern struct JD { char esc; char color[8]; char prog[14]; char nl; + char rt; char autor[36]; char pt; char ef; }; + + extern struct caddview_inx { unsigned int Fin[4]; unsigned int FinC; }; + + extern struct caddview { unsigned int record_zone; int nombre_zona; + char nombre[13+1]; char zip[3+1]; int kbytes; }; + + extern struct caddviewComentario { + int record_zone_init; // Zona de grabaci¢n interna + char linea[10][32 + 1]; // 32 digitos * 10 lineas + }; + +// extern struct JD cabecera; + extern struct caddview JD; + extern struct caddview_inx JDn; + extern struct caddviewComentario JD_comment; + + + extern FILE *JD_f; // Fichero JD + +extern void BorraViewPort(int view); + +void Select_archivo(int archivo); +void Imprimir_Individual(int x); +void Imprime_Cabecera(int cual); +void Imprime_Seccion(int cual); +void Imprime_Mensaje(void); +int Abre_Lee(void); + + + extern char ArchivoDatos[13]; + int linea = 0; + +void Imprimir_Individual(int x) { + + int xm = x; + + BorraViewPort(1); BorraViewPort(2); BorraViewPort(3); + + linea=0; + + if( xm == 0 ) { + + while(xm<10){ + + xm++; + + Select_archivo(xm); + if( !Abre_Lee() ) { + Imprime_Cabecera(xm); + Imprime_Seccion(xm); + fclose(JD_f); + + if(linea>=50) { fputc(12, stdprn); + if (ferror(stdprn)) { clearerr(stdprn); // Mensaje("Error en el dispositivo PRN", 0); + return; } + // Mensaje("Inserte un nuevo folio", 0); + linea = 1; + } + + } + + } + + Imprime_Mensaje(); + } else { + + Select_archivo(x); + if(Abre_Lee()) { //Mensaje("Secci¢n Vacia", 0); + return; } + Imprime_Cabecera(x); + Imprime_Seccion(x); + fclose(JD_f); + } + + fputc(12, stdprn); +} + +void Imprime_Cabecera(int cual) { + + char *texto[] = { "Juegos ", "M£sica ", "P.Textos", + "Contabil. ", "Electr¢n. ", "Gr ficos", + "Utilidades", "Lenguajes ", "Windows ", + "Varios... " }; + + fprintf(stdprn, "\n\r\n\r"); + if (ferror(stdprn)) { clearerr(stdprn); + // Mensaje("Error en el dispositivo PRN", 0); + return; + } + + fprintf(stdprn, "%s", texto[cual-1] ); + fprintf(stdprn, "\n\r\n\r"); + + linea += 3; + + +} + +void Imprime_Seccion(int cual) { + + int LSJ = sizeof(struct JD); + int LSI = sizeof(struct caddview_inx); + int LSC = sizeof(struct caddview); + int columna=1, x, Inicio; + + switch ( cual ) { case 1: case 2: case 3: case 4: x = cual - 1; break; + case 5: case 6: case 7: case 8: x = cual - 5; break; + case 9: case 10: case 11: case 12: x = cual - 9; break; + default: break; } + + if ( x==0 ) Inicio = 0; else Inicio = ( JDn.Fin[ x - 1] + 1 ); + + +fseek(JD_f, (long)LSJ + LSI + ( LSC * Inicio ), SEEK_SET); + +while (Inicio <= (JDn.Fin[x]) ) { + fread(&JD, LSC, 1, JD_f); + fprintf(stdprn, "%-13s %-3s %4d ³ ", (JD. nombre), (JD. zip), (JD. kbytes) ); + columna ++; + if(columna==4) { fprintf(stdprn, "\n\r"); + if (ferror(stdprn)) { clearerr(stdprn); // Mensaje("Error en el dispositivo PRN", 0); + return; } + columna=1; linea++; + if(linea==60) { fputc(12, stdprn); // Va al principio de la p gina siguiente + if (ferror(stdprn)) { clearerr(stdprn); // Mensaje("Error en el dispositivo PRN", 0); + return; } + // Mensaje("Inserte un nuevo folio", 0); + linea = 1; + } + } +Inicio++; +} + + +} + +void Select_archivo(int archivo) { + + switch (archivo) { + case 1: case 2: case 3: case 4: + + strcpy(ArchivoDatos, "CATALOG1.DAT"); +// strcpy(ArchivoComentario, "CATALO11.DAT"); + break; + + case 5: case 6: case 7: case 8: + + strcpy(ArchivoDatos, "CATALOG2.DAT"); +// strcpy(ArchivoComentario, "CATALO21.DAT"); + break; + + case 9: case 10: case 11: case 12: + default: + + strcpy(ArchivoDatos, "CATALOG3.DAT"); +// strcpy(ArchivoComentario, "CATALO31.DAT"); + break; + + } +} + +int Abre_Lee(void) { + + int LSJ = sizeof(struct JD); + int LSI = sizeof(struct caddview_inx); + int LSC = sizeof(struct caddview); + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de Indice, y Datos ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + if ( (JD_f = fopen( ArchivoDatos, "r+b"))==NULL) { + return 1; + } else { + + fseek(JD_f, (long)LSJ, SEEK_SET); + if ( fread(&JDn, LSI, 1, JD_f) != 1 ) { + //Mensaje("Error de Lectura", 0); + printf("NO SE PUDO LEER EN EL FICHERO: INDICE"); + return 1; + } + + fseek(JD_f, (long)LSJ+LSI, SEEK_SET); + if ( fread(&JD, LSC, 1, JD_f) != 1 ) { + //Mensaje("Error de Lectura", 0); + printf("NO SE PUDO LEER EN EL FICHERO: DATOS"); + return 1; + } + } + return 0; +} + + +void Imprime_Mensaje(void) { + + FILE *JDm_f; // Fichero Mensajes + char ArchivoMensaje[13]="CMensaje.dat"; + + int LSJ = sizeof(struct JD); + int LSC = sizeof(struct caddviewComentario); + + if ( (JDm_f = fopen( ArchivoMensaje, "r+b"))==NULL) { + // Mensaje("Error de Lectura",0); + printf("NO SE PUDO ABRIR EL FICHERO COMENTARIO EN LA 2§ PASADA"); + return; + } + + fseek(JDm_f, (long)LSJ, SEEK_SET); + if ( fread(&JD_comment, LSC, 1, JDm_f) != 1 ) { + // Mensaje("Error de Lectura", 0); + printf("NO SE PUDO LEER EL FICHERO COMENTARIO"); + return; + } + +if(linea<=52) { + fprintf(stdprn, "\n\r"); + for(int i=0; i<10; i++) { + fprintf(stdprn, "\n\r"); + fprintf(stdprn, " %s", JD_comment. linea[i] ); + if (ferror(stdprn)) { clearerr(stdprn); + // Mensaje("Error en el dispositivo PRN", 0); + return; + } + } +} + +fclose( JDm_f ); + +} \ No newline at end of file diff --git a/CRATON.CPP b/CRATON.CPP new file mode 100644 index 0000000..e41c2d5 --- /dev/null +++ b/CRATON.CPP @@ -0,0 +1,167 @@ +/////////////////////////////////////////////////////////////////////////// +///// Nombre: Craton.cpp /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: Utilidades para el manejo del raton /// +//// /// +//// Autor: ( Ver Pc-Mania n§ 20 ) /// +//// Autor puntero del raton: Jos‚ David Guill‚n Dominguez /// +//// Fecha: ( Desconocida ) /// +//// /// +//// Compilador Borland C++ 3.0 ( Creaci¢n original en Turbo C 2.0 ) /// +/////////////////////////////////////////////////////////////////////////// + +#include + +void desactiva_raton(void); +void activa_raton(void); +void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py); + +int raton=0; +int x_raton; +int y_raton; +int boton_izq; +int boton_der; +extern int PunteroRaton; +int dir_raton [32+32] = { + +// 0x3FFF, /*± ± 1 1 1 1 1 1 1 1 1 1 1 1 1 1*/ +// 0x1FFF, /*± Û ± 1 1 1 1 1 1 1 1 1 1 1 1 1*/ +// 0x0FFF, /*± Û Û ± 1 1 1 1 1 1 1 1 1 1 1 1*/ +// 0x07FF, /*± Û Û Û ± 1 1 1 1 1 1 1 1 1 1 1*/ +// 0x03FF, /*± Û Û Û Û ± 1 1 1 1 1 1 1 1 1 1*/ +// 0x07FF, /*± ± Û Û ± 1 1 1 1 1 1 1 1 1 1 1*/ +// 0xC3FF, /*1 1 ± Û Û ± 1 1 1 1 1 1 1 1 1 1*/ + + 0x007F, /*± ± ± ± ± ± ± ± ± 1 1 1 1 1 1 1*/ + 0x00FF, /*± Û Û Û Û Û Û ± 1 1 1 1 1 1 1 1*/ + 0x01FF, /*± Û Û Û Û Û ± 1 1 1 1 1 1 1 1 1*/ + 0x01FF, /*± Û Û Û Û Û ± 1 1 1 1 1 1 1 1 1*/ + 0x00FF, /*± Û Û Û Û Û Û ± 1 1 1 1 1 1 1 1*/ + 0x007F, /*± Û Û ± ± Û Û Û ± 1 1 1 1 1 1 1*/ + 0x18FF, /*± ± ± 1 1 ± Û ± 1 1 1 1 1 1 1 1*/ + +// 0xFC7F, /*1 1 1 1 1 1 ± Û ± 1 1 1 1 1 1 1*/ +// 0xF83F, /*1 1 1 1 1 ± Û Û Û ± 1 1 1 1 1 1*/ +// 0xF01F, /*1 1 1 1 ± Û Û Û Û Û ± 1 1 1 1 1*/ +// 0xE00F, /*1 1 1 ± Û Û Û Û Û Û Û ± 1 1 1 1*/ +// 0xE00F, /*1 1 1 ± ± ± Û Û Û ± ± ± 1 1 1 1*/ +// 0xF83F, /*1 1 1 1 1 ± Û Û Û ± 1 1 1 1 1 1*/ +// 0xF83F, /*1 1 1 1 1 ± ± ± ± ± 1 1 1 1 1 1*/ + + 0x800F, /*1 ± ± ± ± ± ± ± ± ± ± ± 1 1 1 1*/ + 0x8083, /*1 ± Û Û Û Û Û ± ± Û Û Û ± ± 1 1*/ + 0x8001, /*1 ± ± ± ± ± Û ± ± Û ± ± Û ± ± 1*/ + 0xF810, /*1 1 1 1 1 ± Û ± ± Û ± 1 ± Û ± 1*/ + 0x8810, /*1 ± ± ± 1 ± Û ± ± Û ± 1 ± Û ± 1*/ + 0x8811, /*1 ± Û ± 1 ± Û ± ± Û ± 1 ± Û ± 1*/ + 0x8003, /*1 ± Û ± ± ± Û ± ± Û ± ± Û ± 1 1*/ + 0x8007, /*1 ± Û Û Û Û Û ± ± Û Û Û ± 1 1 1*/ + 0x800F, /*1 ± ± ± ± ± ± ± ± ± ± ± 1 1 1 1*/ + +// 0x0000, /*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x4000, /*0 Û 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x6000, /*0 Û Û 0 0 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x7000, /*0 Û Û Û 0 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x7800, /*0 Û Û Û Û 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x3000, /*0 0 Û Û 0 0 0 0 0 0 0 0 0 0 0 0*/ +// 0x1800, /*0 0 0 Û Û 0 0 0 0 0 0 0 0 0 0 0*/ + + 0x0000, /*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ + 0x7E00, /*0 Û Û Û Û Û Û 0 0 0 0 0 0 0 0 0*/ + 0x7C00, /*0 Û Û Û Û Û 0 0 0 0 0 0 0 0 0 0*/ + 0x7C00, /*0 Û Û Û Û Û 0 0 0 0 0 0 0 0 0 0*/ + 0x7E00, /*0 Û Û Û Û Û Û 0 0 0 0 0 0 0 0 0*/ + 0x6700, /*0 Û Û 0 0 Û Û Û 0 0 0 0 0 0 0 0*/ + 0x0200, /*0 0 0 0 0 0 Û 0 0 0 0 0 0 0 0 0*/ + + +// 0x0100, /*0 0 0 0 0 0 0 Û 0 0 0 0 0 0 0 0*/ +// 0x0380, /*0 0 0 0 0 0 Û Û Û 0 0 0 0 0 0 0*/ +// 0x07C0, /*0 0 0 0 0 Û Û Û Û Û 0 0 0 0 0 0*/ +// 0x0FE0, /*0 0 0 0 Û Û Û Û Û Û Û 0 0 0 0 0*/ +// 0x0380, /*0 0 0 0 0 0 Û Û Û 0 0 0 0 0 0 0*/ +// 0x0380, /*0 0 0 0 0 0 Û Û Û 0 0 0 0 0 0 0*/ +// 0x0000, /*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ + + 0x0000, /*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ + 0x3E70, /*0 0 Û Û Û Û Û 0 0 Û Û Û 0 0 0 0*/ + 0x0248, /*0 0 0 0 0 0 Û 0 0 Û 0 0 Û 0 0 0*/ + 0x0244, /*0 0 0 0 0 0 Û 0 0 Û 0 0 0 Û 0 0*/ + 0x0242, /*0 0 0 0 0 0 Û 0 0 Û 0 0 0 Û 0 0*/ + 0x2244, /*0 0 Û 0 0 0 Û 0 0 Û 0 0 0 Û 0 0*/ + 0x2248, /*0 0 Û 0 0 0 Û 0 0 Û 0 0 Û 0 0 0*/ + 0x3E70, /*0 0 Û Û Û Û Û 0 0 Û Û Û 0 0 0 0*/ + 0x0000 /*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ + }; + + +void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py) +{ + struct SREGS seg; + union REGS ent, sal; + long dir; + + ent.x.ax = 0; + int86(0x33, &ent, &sal); /* averigua si hay rat¢n conectado */ + + raton = sal.x.ax; /* indica a la variable global el estado + del raton */ + + if(raton!=0) { + + + ent.x.ax = 15; + ent.x.cx = 5; + ent.x.dx = 11; + int86(0x33, &ent, &sal); /* fija la raz¢n mickey/pixel */ + + ent.x.ax = 7; + ent.x.cx = x1; + ent.x.dx = x2; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. horizontal */ + + ent.x.ax = 8; + ent.x.cx = y1; + ent.x.dx = y2; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. vertical */ + + if(!PunteroRaton) { + dir = (long)dir_raton; + ent.x.ax = 9; + ent.x.bx = 0; + ent.x.cx = 0; + ent.x.dx = (int) dir; + seg.es = (int) (dir >> 16); + int86x(0x33, &ent, &sal, &seg); /* asigna un cursor diferente */ + } + + ent.x.ax = 4; + ent.x.cx = px; + x_raton=ent.x.cx >> 1; + ent.x.dx = py; + y_raton=ent.x.dx; + int86(0x33, &ent, &sal); /* fija la posici¢n del rat¢n */ + + ent.x.ax = 1; + int86(0x33, &ent, &sal); /* muestra el puntero del rat¢n */ + } +} + +void activa_raton(void) +{ + union REGS ent, sal; + + ent.x.ax = 1; + int86(0x33, &ent, &sal); +} + +void desactiva_raton(void) +{ + union REGS ent, sal; + + ent.x.ax = 2; + int86(0x33, &ent, &sal); +} + + + diff --git a/CSTRINGS.CPP b/CSTRINGS.CPP new file mode 100644 index 0000000..6d37ca6 --- /dev/null +++ b/CSTRINGS.CPP @@ -0,0 +1,120 @@ +/////////////////////////////////////////////////////////////////////////// +///// Nombre: Cstrings.CPP /// +///// Modulo: Perteneciente a Catalogo.C /// +//// Descripci¢n: Utilidades para el manejo de Strings... /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez /// +//// Fecha: 20 - 07 - 1994 /// +//// /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include + +extern void Sound_SN(char headfile[]); + +extern int sb; /* Indica si esta instalada la SB (def. NO) */ + +int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); + + +int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf) +{ + + char buf[81]; // Buffer de linea + int ls; // longitud cadena + char *s1; // puntero a cadena inicial + int i, c, ok; + + s1 = s; // inicio cadena + + setcolor(cf); // pone color a 0 para borrar + for (i=0; i 0 && !ok ) { // 8 = Back Space + ls--; + s--; + + setcolor(cf); + outtextxy( (px + ls) * 8 - 7, py * 16 - 16, "Û"); + if ( ls + 1 < lmax ) outtextxy( ( px + ls + 1 ) * 8 - 7, py * 16 - 16, "Û"); + + setcolor(4); + outtextxy( (px + ls) * 8 - 7, py * 16 - 16, "þ"); + setcolor(cc); + + } else { + if ( !numalp && c >= 32 && c <= 254 /* isprint(c) */ && ls < lmax) { + + *s++ = c; + ls++; + + *s = '\0'; // Cero final + setcolor(cf); // pone color a 0 para borrar + for (i=0; i +#include +#include +#include +#include + +//////////////////////// DECLARACIONES DE FUNCIONES ////////////////////////// + + +int Animacion(void); + +extern void BorraViewPort(int view); +extern int sb; +extern int raton; +extern void Sound_SN(char headfile[]); + + void lee_ficheros_v(char *j, char *d1, char *d2); + + void Lluvia_Dibujo2(char *J); + + void Disparos_D_(char *d1, char *d2); + + void Disparo(int x, int y, char *d); + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +int Animacion(void) +{ + +union REGS ent, sal; + +int OK_NO = 1; + +char *j; // J[81][116] // | +char *d1; // Disparo1[20][20] // |- Punteros a las imagenes +char *d2; // Disparo2[20][20] // | + +if( (j = (char *)malloc(9600)) != NULL) // | + if( (d1 =(char *)malloc(400)) == NULL) // |- Pide memoria para la Animaci¢n + free(j); else // | + if( (d2 =(char *)malloc(400)) == NULL) // | + { free(j); free(d1); } else { // | + + BorraViewPort(2); // Limpia el VIEW PORT + + lee_ficheros_v(j, d1, d2); // Lee la J, y los disparos + + Lluvia_Dibujo2(j); // Muestra la J, en forma de FASERS + + Disparos_D_(d1, d2); // Realiza los disparos de la D + + int b_izq; + do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + b_izq = sal.x.bx & 1; + } else b_izq = 0; + }while( !b_izq && !kbhit() ); + + // FIN, si se pulsa un boton + + free(j); // | + free(d1); // |- Libera la memoria asignada + free(d2); // | + OK_NO = 0; // Todo va bien + +} + +BorraViewPort(2); // Limpia el View Port +return OK_NO; // Devuelve todo va bien=0 o NO=1 +} + + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +void lee_ficheros_v(char *j, char *d1, char *d2) +{ + long tam=0; // | tama¤o de fichero recorrido + unsigned char byte; // | byte obtenido del fichero + int columnas = 0, filas = 0; // | columnas y filas descomprimidas + int contador; // | contador de descompresi¢n + + char *Js; // | + char *D1s; // |-Punteros a las imagenes + char *D2s; // | + + Js = j; D1s = d1; D2s = d2; + + FILE *dbs; // Corriente al archivo + + if((dbs = fopen("CATALOG0.IMG", "rb"))==NULL) { + exit(1); + } + +while(!feof(dbs) && filas<=121) { + + if(tam>=128) { + columnas=0; + while(columnas<=181) { + + byte=(unsigned)getc(dbs); + if(byte<=192) { + + /////// J //////// + if (columnas>= 0 && columnas<= 81 && filas>= 0 && filas<=116) *Js++ = byte; + + /////// Disparo 1 ///// + if (columnas>=89 && columnas<=107 && filas>= 4 && filas<= 21) *D1s++ = byte; + + /////// Disparo 2 ///// + if (columnas>=89 && columnas<=107 && filas>=30 && filas<= 47) *D2s++ = byte; + + columnas++; + } else { + contador=byte&63; + byte=getc(dbs); + for(;contador>0;contador--) { + + ///// J //////// + if (columnas>= 0 && columnas<= 81 && filas>= 0 && filas<=116) *Js++ = byte; + + ///// Disparo 1 ///// + if (columnas>=89 && columnas<=107 && filas>= 4 && filas<=21) *D1s++ = byte; + + ///// Disparo 2 ///// + if (columnas>=89 && columnas<=107 && filas>=30 && filas<=47) *D2s++ = byte; + + columnas++; + } + } + } + filas++; + } else { + getc(dbs); + tam++; + } +} + + fclose(dbs); + +} + + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +void Lluvia_Dibujo2(char *J) { + +int t, i, j; + +char *Js; +Js = J; + + setcolor(0); setfillstyle(0, 0); + + for(i=0; i<=116; i++) + for(j=0; j<=81; j++) { + setcolor( *Js++ ); + line(j + 345, i + 40, 40 + 345 /*- j*/, 116 +40); + } + +} + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +void Disparos_D_(char *d1, char *d2){ + +int i; +int k=0; + +for(i=0; i<=5; i++) { + + if (k==1) { + Disparo(125 - k, 0 + i*18, d2); + k=0; + if (sb!=0) Sound_SN("catalogD"); + } else { + Disparo(125 + k, 0 + i*18, d1); + k=1; + if (sb!=0) Sound_SN("catalogD"); + } + + + delay(50); + + +} + +Disparo(145, 0, d2); + + delay(50); +if (sb!=0) Sound_SN("catalogD"); + +Disparo(161 + 0 * 18, 0 + 0*18, d1); + + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(161 + 1 * 18, 0 + 1*18, d1); + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(161 + 2 * 15, 0 + 2*18, d1); + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(161 + 2 * 15, 0 + 3*18, d1); + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(161 + 1 * 18, 0 + 4*18, d1); + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(161 + 0 * 18, 0 + 5*18, d1); + if (sb!=0) Sound_SN("catalogD"); + delay(50); + +Disparo(143, 0 + 5*18, d1); + if (sb!=0) Sound_SN("catalogE"); + delay(50); + + + +} + +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +// ±ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ± +// ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +void Disparo(int x, int y, char *d){ + +char *Ds; +Ds = d; + +x += 335; +y += 40; + +for(int y1=0; y1<=17; y1++) + for(int x1=0; x1<=18; x1++) + putpixel(x+ x1, y+ y1, *Ds++); + +} diff --git a/C_SETUP.CPP b/C_SETUP.CPP new file mode 100644 index 0000000..cbff7cb --- /dev/null +++ b/C_SETUP.CPP @@ -0,0 +1,404 @@ +/////////////////////////////////////////////////////////////////////////// +//// Nombre: C_Setup.CPP /// +//// Modulo: Perteneciente a Catalogo.CPP /// +//// Descripci¢n: M¢dulo para cambiar la configuraci¢n activa. ! /// +//// /// +//// Autor: Jos‚ David Guill‚n Dominguez '' 999 55555 !! /// +//// Fecha: 02 - 01 - 1995 ' 9 9 5 !!!! /// +//// 9999 5555 !!!! /// +//// Comentario: 9 5 !! /// +//// 9 5 5 !! /// +//// 999 555 ## /// +//// Compilador Borland C++ 3.0 /// +/////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include + +extern struct JD { + char esc; char color[8]; char prog[14]; + char nl; char rt; char autor[36]; + char pt; char ef; + }; + +extern struct JD cabecera; + +struct setup { + int version; // uso interno, para versi¢n + long registrado; // registrado ¨ SI o NO ? + char usuario[20]; // registrado a ... + long codigo; // codigo de acceso ­­­ 0 = no c¢digo !!! + + char futura_ampliacion[50]; +}; + +struct setup Setup; + +FILE *JD_s; // Fichero Setup + +char ArchivoSetup[] = "Catalogo.cfg"; +extern union REGS ent, sal; + extern struct boton { int left; int up; int right; int down; }; + extern int boton_izq; extern int boton_der; + extern int x_raton; extern int y_raton; + extern int raton; + extern int bpush; + extern int sb; + +extern int InputCadenaG(char *s, int numalp, int lmax, int px, int py, int cc, int cf); +extern void inicializa_raton_grafico(int x1, int y1, int x2, int y2, int px, int py); +extern void ImprimeBoton2 (int fill, int cdf, int cs1, int cs2, struct boton parm); +extern int CheckButon(int nb, struct boton menu[]); +extern void Sound_SN(char *headfile); +extern void BorraViewPort(int view); +extern void desactiva_raton(void); +extern void activa_raton(void); + + +void EditCursorS(int ShowHide, int Linea); +void Input_command(void); +void CreaPresentacionSetup(void); +void lee_setup(void); +void Configuracion(void); + +int Linea_c=1; + + +void Configuracion(void){ + + + lee_setup(); + + +////////////////////////////// Translaci¢n de funciones a ViewPort #2 +int i, key; +int finc = 0; +////////////////////////////// Ahora se abrir  un nuevo men£ para el raton: +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + struct boton comment[4]; + comment[0]. left = 217; comment[0]. up = 34; comment[0]. right = 297; comment[0]. down = 75; + comment[1]. left = 217; comment[1]. up = 76; comment[1]. right = 297; comment[1]. down = 117; + comment[2]. left = 217; comment[2]. up = 118; comment[2]. right = 297; comment[2]. down = 159; + comment[3]. left = 217; comment[3]. up = 160; comment[3]. right = 297; comment[3]. down = 204; + + for(i=0; i<4; i++) ImprimeBoton2 (1, 7, 63, 56, comment[i]); + + setcolor(15); + +// outtextxy(222, 49 , " Supr. "); +// outtextxy(222, 58, " Linea"); + + outtextxy(222, 96 , " UP "); + outtextxy(222, 138, " DOWN "); + + outtextxy(224, 179, "Salir "); + outtextxy(222, 189, " F2"); + + setcolor(0); + +// outtextxy(221, 48 , " Supr. "); +// outtextxy(221, 57, " Linea"); + + outtextxy(221, 95 , " UP "); + outtextxy(221, 137, " DOWN "); + + outtextxy(223, 178, "Salir "); + outtextxy(221, 188, " F2"); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +/* + Setup.version = 40; + Setup.registrado = 0; + strcpy(Setup.usuario, "NONE"); + Setup.codigo = 0; +*/ + CreaPresentacionSetup(); + setcolor(14); + + outtextxy( 50 * 8 - 7, 4 * 16 - 16, Setup. usuario ); + +char string[15]; +sprintf(string, "%05ld", Setup.codigo); + + outtextxy( 53 * 8 - 7, 6 * 16 - 16, string ); + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + +do{ + + EditCursorS(0, Linea_c); + +if(raton) inicializa_raton_grafico(0, 0, 624, 464, 320, 240); +if(raton) activa_raton(); +/////////////////////// Aqui va una pausa de TECLADO y RATON al mismo TIEMPO +do{ + if(raton){ + ent.x.ax = 3; + int86(0x33, &ent, &sal); // lee posici¢n y estados del bot¢n + boton_izq = sal.x.bx & 1; + boton_der = (sal.x.bx >> 1) & 1; + x_raton = sal.x.cx; + y_raton = sal.x.dx; + } else boton_izq = 1; +}while( !boton_izq && !kbhit() ); +if(raton) desactiva_raton(); + + if( kbhit() ) { + + //////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////// ¨ Hay una tecla en buffer ... + + key = getch(); + + EditCursorS(1, Linea_c); + + if( isprint(key) || isspace(key) ) { + + if(key != 13) ungetch(key); + Input_command(); + + } else { + + if( key == 0 ) { + key = getch(); + + switch ( key ) { + // FLECHA ARRIBA + case 72: + // FLECHA IZQUIERDA + case 75: + case 15: + + Linea_c--; + if (Linea_c < 1) Linea_c = 2; + break; + // FLECHA ABAJO + case 80: + // FLECHA DERECHA + case 77: + case 9: + + Linea_c++; + if (Linea_c > 2) Linea_c = 1; + break; + + // F2 --> PARA SALIR + case 60: finc = 1; break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + } // Fin Key = 0 + } // Fin Is Print Key? +} // Fin Tecla en Buffer + +///////////////////////////////////////////////////////////////////////////// +//ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// +////////////////////////// Comprueba con rat¢n ( SI ) /////////////////////// +//ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// +///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// ... o es el RATON ? + + if(raton && boton_izq==1 || boton_der==1) { + + if( CheckButon(4, comment) ) { + + EditCursorS(1, Linea_c); + switch ( bpush ) { + // FLECHA ARRIBA + case 2: + // FLECHA IZQUIERDA + Linea_c--; + if (Linea_c < 1) Linea_c = 2; + break; + + // FLECHA ABAJO + case 3: + // FLECHA DERECHA + + Linea_c++; + if (Linea_c > 2) Linea_c = 1; + break; + + // F2 --> PARA SALIR + case 4: finc = 1; break; + + default: + if (sb) Sound_SN("catalog3"); + break; + } // Fin de Swicth + + } + } +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +}while( !finc ); + + int LSJ = sizeof(struct JD); + int LSI = sizeof(struct setup); + + fseek(JD_s, (long)LSJ, SEEK_SET); + fwrite(&Setup, LSI, 1, JD_s); + if (fclose(JD_s) == EOF ) exit(1); +} + + + + + + + + + + + + + +void lee_setup(void){ + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// +//ÛÛ Comprueba apertura correcta de Configuracion o creaci¢n... ÛÛ// +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// + int LSJ = sizeof(struct JD); + int LSI = sizeof(struct setup); + + if ( (JD_s = fopen( ArchivoSetup, "r+b"))==NULL) { + + FILE *fa; + auto int i; + + if ( (fa = fopen( ArchivoSetup, "wb" ) )!=NULL ) { + + cabecera.esc = 27; + strcpy(cabecera.color, "[31;40m"); + strcpy(cabecera.prog, "Catalogo 4.0"); + cabecera.nl = 13; cabecera.rt = 10; + strcpy(cabecera.autor, " Jos‚ David Guill‚n"); + cabecera.pt = 7; cabecera.ef = 26; + + ////// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ////// + //ÛÛ// //ÛÛ// + //ÛÛ// Incluir informaci¢n de SETUP... //ÛÛ// + //ÛÛ// //ÛÛ// + ////// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ////// + + Setup.version = 40; + Setup.registrado = 0; + strcpy(Setup.usuario, "NONE"); + Setup.codigo = 0; + strcpy(Setup.futura_ampliacion, "Futura Ampliaci¢n"); + + + rewind(fa); + fwrite(&cabecera, LSJ, 1, fa); + fseek(fa, (long)LSJ, SEEK_SET); + fwrite(&Setup, LSI, 1, fa); + + if (fclose(fa) == EOF ) exit(1); + + } + if ( (JD_s = fopen( ArchivoSetup, "r+b"))==NULL) { + printf("NO SE PUDO ABRIR EL FICHERO SETUP EN LA 2§ PASADA"); + exit(1); + } + } + + fseek(JD_s, (long)LSJ, SEEK_SET); + if ( fread(&Setup, LSI, 1, JD_s) != 1 ) { + printf("NO SE PUDO LEER EN EL FICHERO: INDICE"); + exit(1); + } + +} + +void CreaPresentacionSetup(void){ + BorraViewPort(2); // Para los mensajes... + BorraViewPort(3); // Para los mensajes... + BorraViewPort(4); // Para los mensajes... + + + setcolor(12); + + outtextxy( 42 * 8 - 7, 4 * 16 - 16, "Nombre:" ); + // outtextxy( 42 * 8 - 7, 5 * 16 - 16, "Apellidos:" ); + outtextxy( 42 * 8 - 7, 6 * 16 - 16, "C¢digo:" ); + // outtextxy( 42 * 8 - 7, 7 * 16 - 16, "Tel‚fono:" ); + // outtextxy( 42 * 8 - 7, 8 * 16 - 16, "CPU:" ); + // outtextxy( 58 * 8 - 7, 8 * 16 - 16, "RAM:" ); + // outtextxy( 66 * 8 - 7, 8 * 16 - 16, "HD:" ); + + setcolor( 4); + // Sistema utilizado para sombra == -1 + outtextxy( 328, 47 , "Nombre:" ); + // outtextxy( 328, 63 , "Apellidos:" ); + outtextxy( 328, 79 , "C¢digo:" ); + // outtextxy( 328, 95 , "Tel‚fono:" ); + // outtextxy( 328, 111 , "CPU:" ); + // outtextxy( 456, 111 , "RAM:" ); + // outtextxy( 520, 111 , "HD:" ); + +} + + +void Input_command(void){ + switch(Linea_c) { + case 1: InputCadenaG( Setup. usuario, 0, 19, 50, 4, 63, 57); break; + case 2: + char string[15]; + sprintf(string, "%05ld", Setup.codigo); + InputCadenaG( string, 1, 8, 53, 6, 63, 57); + Setup. codigo = atol(string); + break; + } + +} + +void EditCursorS(int ShowHide, int Linea) { + +int cc, cf, lmax, i, py, pxx; + // registro de color actual y de fondo + // Longitud M xima y contador de bucle + // desviaci¢n vertical y reajuste final + // desviaci¢n horizontal y "" "" + if(Linea==1) { lmax = 19; + py = 4; + pxx = 50; + + } else { + lmax = 8; + py = 6; + pxx = 53; + } + + if (!ShowHide) { cc = 63; cf = 57; } else { cc = 14; cf = 0; } + + setcolor(cf); // pone color de fondo '0' para borrar + + for (i=0; i /* cabeceras que hacen que se incluyan */ +#include +#include /* durante el proceso de compilado */ +#include /* las funciones que el programa utilize */ +#include +#include + +int leepcx(char dibujo[80]); +int asigna_memoria_pcx(void); /* se usar n en el programa. Se indica el */ +void libera_memoria_pcx(void); /* tipo de dato que devuelven y el tipo */ +int lee_dibujo_pcx(void); /* de dato/s que necesitan que se les */ +int comprueba_dibujo(void); /* pase para funcionar. */ +void descomprime_dibujo(void); +void asigna_rgb(void); + +extern "C" void VUELCA_PANTALLA(unsigned char *); + +/*************************** VARIABLES GLOBALES ****************************/ + +unsigned char *dir_planos; +unsigned char *dir_dibujo; + char dibujo[80]; + char bits_pixel; + char num_planos; + int colores[16] = { 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 }; + int ancho; + int alto; + int tecla; + FILE *handle_dibujo; + + +/************************** COMIENZO DEL LISTADO ***************************/ + +int leepcx(char diu[80]) +{ + strcpy(dibujo, diu); + if(asigna_memoria_pcx()==1){ /* reserva memoria al dibujo */ + if(lee_dibujo_pcx()==1) { /* lee el dibujo del disco */ + if(comprueba_dibujo()==1){ /* ve si formato es adecuado */ + descomprime_dibujo(); /* descomprime el dibujo */ + VUELCA_PANTALLA(dir_planos); /* visualiza el dibujo */ + } else { + libera_memoria_pcx(); + return 0; + } + } else { + libera_memoria_pcx(); + return 0; + } + libera_memoria_pcx(); /* devuelve la memoria al prg*/ + return 1; + } + return 0; + +} /* vuelve al Programa */ + +int asigna_memoria_pcx(void) /* reserva memoria para cargar el dibujo */ +{ + if((dir_dibujo=(unsigned char *)farmalloc(153600))==NULL) { + return 0; + } + if((dir_planos=(unsigned char *)farmalloc(153600))==NULL) { + return 0; + } +return 1; +} + +void libera_memoria_pcx(void) /* libera la memoria asignada al DOS */ +{ + farfree(dir_dibujo); + farfree(dir_planos); +} + +int lee_dibujo_pcx(void) +{ + int *dir_dibu; + char huge *dir; + + if((handle_dibujo=fopen(dibujo, "rb"))==NULL) { + return 0; + } + + dir=(char huge *)dir_dibujo; + while(!feof(handle_dibujo)) { *dir++=getc(handle_dibujo); } + + if(fclose(handle_dibujo)!=NULL) { + return 0; + } + + dir_dibu=(int *)dir_dibujo; + bits_pixel=*(dir_dibujo+3); + num_planos=*(dir_dibujo+65); + ancho=1+(*(dir_dibu+4)); + alto =1+(*(dir_dibu+5)); + + return 1; +} + +int comprueba_dibujo(void) +{ + if(*dir_dibujo!=10) { + return 0; + } + if(bits_pixel!=1 || num_planos!=4) { /* comprueba que el */ + return 0; + } + + if(ancho>640 || alto>480) { /* comp. el tama¤o */ + return 0; + } + return 1; +} + +void descomprime_dibujo(void) +{ + unsigned char huge *dir_lectura; + unsigned char huge *dir_escritura; + unsigned char byte; + int columnas, filas, contador; + + dir_lectura =dir_dibujo+128; /* inicio del dibujo comprimido */ + dir_escritura=dir_planos; + + for(filas=alto; filas>0; filas--) { + columnas=ancho/2; + while(columnas>0) { + byte=*dir_lectura++; + if(byte<=192) { *dir_escritura++=byte; columnas--; } + else { + contador=byte&0x3F; byte=*dir_lectura++; + for(; contador>0; contador--) { + *dir_escritura++=byte; columnas--; + } + } + } + } + asigna_rgb(); +} + +void asigna_rgb(void) +{ + struct SREGS seg; + union REGS ent, sal; + int num_color, n; + long int dir; + unsigned char *dir_col; + + dir_col=dir_dibujo+16; /* divide entre 4 */ + for(n=16*3; n>0; n--) { /* los colores */ + *dir_col=(*dir_col) >> 2; dir_col++; + } + + dir =(long)(dir_dibujo+16); /* obtiene el segmento */ + seg.es=(int) (dir >> 16); /* donde estan los colores */ + + for(n=0; n<16; n++) { + num_color=colores[n]; + ent.h.al = 18; + ent.h.ah = 16; + ent.x.bx = num_color; + ent.x.cx = 1; + ent.x.dx = (int)dir; /* offset de los colores */ + int86x(0x10, &ent, &sal, &seg); /* funci¢n para asignar los colores */ + dir+=3; + } +} diff --git a/L_PCX.ASM b/L_PCX.ASM new file mode 100644 index 0000000..045600a --- /dev/null +++ b/L_PCX.ASM @@ -0,0 +1,72 @@ + +_TEXT SEGMENT BYTE PUBLIC 'CODE' + + ASSUME CS:_TEXT + + PUBLIC _VUELCA_PANTALLA + +_VUELCA_PANTALLA PROC NEAR + PUSH BP + MOV BP,SP + PUSH AX + PUSH BX + PUSH CX + PUSH DI + PUSH DS + PUSH DX + PUSH ES + PUSH SI + + LDS SI,[BP+4] + MOV AX,0A000h + MOV ES,AX + MOV DI,0 + + MOV AH,00010001b + MOV DX,480 + CLD + +SIG_LINEA: MOV BX,4 + +SON_4_PLANOS: PUSH AX + PUSH DX + MOV DX,3C4H ;MASCARA DE PLANOS + MOV AL,2 + OUT DX,AX + POP DX + POP AX + + MOV CX,80 +LINEA: MOV AL,ES:[DI] + MOVSB + CMP SI,0 + JNZ MISMO_SEG + MOV BP,DS + ADD BP,1000h + MOV DS,BP +MISMO_SEG: LOOP LINEA + SUB DI,80 + ROL AH,1 + DEC BX + JNZ SON_4_PLANOS + ADD DI,80 + DEC DX + JNZ SIG_LINEA + + POP SI + POP ES + POP DX + POP DS + POP DI + POP CX + POP BX + POP AX + POP BP + RET +_VUELCA_PANTALLA ENDP + +_TEXT ENDS + + END + + \ No newline at end of file diff --git a/SONIDO.ASM b/SONIDO.ASM new file mode 100644 index 0000000..4464056 --- /dev/null +++ b/SONIDO.ASM @@ -0,0 +1,98 @@ + +_TEXT SEGMENT BYTE PUBLIC 'CODE' + + ASSUME CS:_TEXT + +DIR_VOC DD 0 +DIR_SFXDRV DD 0 + + +;------------------------------------------------------------------------------; +; INICIALIZACION DEL SFX DRIVER ; +;------------------------------------------------------------------------------; +; entrada: BX = n§ de la funci¢n ; +; ES:DI = dir. de la variable word de estado ; +; [CS:DIR_SFXDRV] = dir. de la rutina ct-voice ; +; ; +; salida: AX = 0 si la tarjeta de sonido est  instalada ; +; = -1 si no hay tarjeta de sonido ; +;------------------------------------------------------------------------------; + PUBLIC _INICIALIZADRV + +_INICIALIZADRV PROC NEAR + PUSH BP + MOV BP,SP + PUSH BX + PUSH DI + PUSH ES + LES DI,[BP+4] + MOV WORD PTR CS:[DIR_SFXDRV],DI + MOV WORD PTR CS:[DIR_SFXDRV+2],ES + MOV BX,3 + CALL DWORD PTR CS:[DIR_SFXDRV] + CMP AX,0 + JNZ NO_HAY_TARJ + MOV BX,5 + LES DI,[BP+8] + CALL DWORD PTR CS:[DIR_SFXDRV] + XOR AX,AX +NO_HAY_TARJ: POP ES + POP DI + POP BX + POP BP + RET +_INICIALIZADRV ENDP + +;------------------------------------------------------------------------------; +; ELIGE UN FICHERO DE SONIDO ; +;------------------------------------------------------------------------------; +; entrada: ES:DI = dir. del fichero de sonido .VOC ; +;------------------------------------------------------------------------------; + PUBLIC _ELIGEFICHFX + +_ELIGEFICHFX PROC NEAR + PUSH BP + MOV BP,SP + PUSH DI + PUSH ES + LES DI,[BP+4] + MOV WORD PTR CS:[DIR_VOC],DI + MOV WORD PTR CS:[DIR_VOC+2],ES + POP ES + POP DI + POP BP + RET +_ELIGEFICHFX ENDP + +;------------------------------------------------------------------------------; +; LLAMADA AL CT-SOUND DRIVER ; +;------------------------------------------------------------------------------; +; entrada: BX = n§ de la funci¢n ; +; ES:DI = dir. del fichero de sonido .VOC ; +; [CS:DIR_SFXDRV] = dir. de la rutina ct-voice ; +;------------------------------------------------------------------------------; + PUBLIC _SOUNDFXDRIVER + +_SOUNDFXDRIVER PROC NEAR + PUSH BP + MOV BP,SP + PUSH BX + PUSH DI + PUSH ES + MOV BX,[BP+4] + LES DI,CS:[DIR_VOC] + CMP BX,6 + JNE NO_INI + ADD DI,ES:[DI+14h] ;ES:DI=dir. del data block +NO_INI: CALL DWORD PTR CS:[DIR_SFXDRV] + POP ES + POP DI + POP BX + POP BP + RET +_SOUNDFXDRIVER ENDP + +_TEXT ENDS + + END + diff --git a/SONIDOP.CPP b/SONIDOP.CPP new file mode 100644 index 0000000..deb6906 --- /dev/null +++ b/SONIDOP.CPP @@ -0,0 +1,156 @@ +////////////////////////////////////////////////////////////////////////////// +// PROGRAMACION DEL CANAL DE SONIDO DE LA SOUND BLASTER // +// // +// por: Jos‚ Antonio Acedo Mart¡n-Grande, miembro de "GOLDY GAMES" // +// // +// TEL: (91) 6 11 72 71 (MADRID) // +////////////////////////////////////////////////////////////////////////////// +// // +// ADAPTACION PARA CATALOGO POR Jos‚ David Guill‚n // +// JD... Fv // +///////////////////////////// FICHEROS A INCLUIR //////////////////////////// + +#include +#include +#include +#include +#include + +//////////////////////////////// DEFINICIONES //////////////////////////////// + +#define INICIFX 0x17 +#define FINALFX 0x21 +#define PAUSAFX 0x19 +#define CONTIFX 0x2E + +#define INICISOUND 6 +#define FINALSOUND 8 +#define PAUSASOUND 10 +#define CONTISOUND 11 + +#define FINDRV 9 +#define TAMSFXDRV 5000 +#define TAMVOC 70000L + +//////////////////////// DECLARACIONES DE FUNCIONES ////////////////////////// +volatile int statusw=0; //palabra de estado del sonido FX + char sfxdriver[TAMSFXDRV]; //debe ser 16 bytes mayor que el driver + char *dir_sfxdriver; + + + extern char *dir_voc; + extern char *dir_sfx; + extern int sb; + +extern "C" int INICIALIZADRV(char *, volatile int *); + +extern "C" void ELIGEFICHFX(char *); +extern "C" void SOUNDFXDRIVER(int); + + + int lee_ficheros(char *, char *, long); + + int asigna_memoria(void); + void libera_memoria(void); + void sin_memoria(void); + void fichero_enorme(void); + + int Inicializa_SB(void); + void PlaySound(int Lee); + + +////////////////////////////////// PROGRAMA ////////////////////////////////// + +int Inicializa_SB(void) +{ +int sonido = 1; + +// dir_sfx=argv[1]; + if ( asigna_memoria() ) return (sonido = 0); + + if( lee_ficheros( "CATALOG0.drv", dir_sfxdriver, TAMSFXDRV) == 0) sonido = 0; + else { + + if(INICIALIZADRV(dir_sfxdriver, &statusw)!=NULL) sonido = 0; + + } + + if (sonido == 0) farfree(dir_voc); + + return sonido; + + +} + +void PlaySound(int Lee){ + + SOUNDFXDRIVER(FINALSOUND); + +if(Lee) { + if( lee_ficheros(dir_sfx, dir_voc, TAMVOC) == 1 ) + ELIGEFICHFX(dir_voc); +} + SOUNDFXDRIVER(INICISOUND); + + +} + +void fichero_enorme(void) +{ + + libera_memoria(); + printf("El fichero VOC no puede ser mayor de %ld bytes.", TAMVOC); + exit(1); +} + +int asigna_memoria(void) +{ + long dir, des_dir, seg_dir; + + if((dir_voc =(char *)farmalloc (80000L))==NULL) return 1; + + + dir_sfxdriver=sfxdriver; + dir=(long)dir_sfxdriver; + des_dir=dir & 0x0000FFFF; + seg_dir=dir & 0xFFFF0000; + des_dir=(des_dir+16) >> 4; + (long)dir_sfxdriver=seg_dir+(des_dir << 16); + +return 0; +} + +void libera_memoria(void) +{ + farfree(dir_voc); +} + +void sin_memoria(void) +{ + + libera_memoria(); + printf("No hay suficiente memoria. Libere programas residentes."); + exit(1); +} + +int lee_ficheros(char *file, char *dir_carga, long tam_fichero) +{ + FILE *handle_sonido; + char *p; + long tam=0; + + if((handle_sonido = fopen(file, "rb"))==NULL) { + if(file=="CATALOG0.drv") { sb = 0; return 0; } + if(file==dir_sfx) return 0; + return 0; + } + p=dir_carga; + while(!feof(handle_sonido)) { + *p=getc(handle_sonido); + (long)p++; tam++; + if(tam > tam_fichero) fichero_enorme(); + } + fclose(handle_sonido); + return 1; +} +