From 22e131ce7945b520e45d539134fe82faf71eab43 Mon Sep 17 00:00:00 2001 From: jdg Date: Sun, 12 Sep 2021 20:15:34 +0200 Subject: [PATCH] First commit 25/09/1997 --- ALUM.DSK | Bin 0 -> 7094 bytes ALUM.EXE | Bin 0 -> 167465 bytes ALUM.PRJ | Bin 0 -> 7235 bytes ALUMMM.CPP | 1360 ++++++++++++++++++++++++++++++++++++++ ALUMNUM.CPP | 465 +++++++++++++ ALUM_CFG.CPP | 957 +++++++++++++++++++++++++++ ALUM_DEF.H | 209 ++++++ ALUM_GST.CPP | 1557 ++++++++++++++++++++++++++++++++++++++++++++ ALUM_UTL.CPP | 792 ++++++++++++++++++++++ DATOS/ALUM.DBF | Bin 0 -> 19033 bytes DATOS/CONFIG.CFG | Bin 0 -> 919 bytes DATOS/THEMES.CFG | Bin 0 -> 878 bytes FONTS/PROT_PTL.FNT | Bin 0 -> 4096 bytes FONTS/VENT_MSG.FNT | Bin 0 -> 4096 bytes PRNFILE.OUT | 55 ++ README.md | 9 + SYSTM/ALDISK.BMP | Bin 0 -> 48566 bytes SYSTM/ALUM.IMG | 517 +++++++++++++++ SYSTM/ALUM.PCX | Bin 0 -> 12213 bytes SYSTM/ALUMBAK.PCX | Bin 0 -> 10761 bytes SYSTM/ALUMC.PCX | Bin 0 -> 52578 bytes SYSTM/ALUMMP.IMG | 323 +++++++++ SYSTM/BOLD.CHR | Bin 0 -> 14670 bytes SYSTM/EGAVGA.BGI | Bin 0 -> 5554 bytes SYSTM/LITT.CHR | Bin 0 -> 5131 bytes 25 files changed, 6244 insertions(+) create mode 100644 ALUM.DSK create mode 100644 ALUM.EXE create mode 100644 ALUM.PRJ create mode 100644 ALUMMM.CPP create mode 100644 ALUMNUM.CPP create mode 100644 ALUM_CFG.CPP create mode 100644 ALUM_DEF.H create mode 100644 ALUM_GST.CPP create mode 100644 ALUM_UTL.CPP create mode 100644 DATOS/ALUM.DBF create mode 100644 DATOS/CONFIG.CFG create mode 100644 DATOS/THEMES.CFG create mode 100644 FONTS/PROT_PTL.FNT create mode 100644 FONTS/VENT_MSG.FNT create mode 100644 PRNFILE.OUT create mode 100644 README.md create mode 100644 SYSTM/ALDISK.BMP create mode 100644 SYSTM/ALUM.IMG create mode 100644 SYSTM/ALUM.PCX create mode 100644 SYSTM/ALUMBAK.PCX create mode 100644 SYSTM/ALUMC.PCX create mode 100644 SYSTM/ALUMMP.IMG create mode 100644 SYSTM/BOLD.CHR create mode 100644 SYSTM/EGAVGA.BGI create mode 100644 SYSTM/LITT.CHR diff --git a/ALUM.DSK b/ALUM.DSK new file mode 100644 index 0000000000000000000000000000000000000000..ab93e7be4b5de6c2fcb9e56b18a72aace1dd1477 GIT binary patch literal 7094 zcmeHMU5Hyn6#nMs@8&;Q!M5AFn^wAN#IP2GR$AC3n`Be-M{=`88cfsf-EMS~tod12 zMbJL@q)^fNM?p}~K1fSZd}?b8J`@DC)&~&^zAE+2AE@AZ<|f%}vNxM`E24NaIX839 z%$#rLoHJ)~&y^b0qZLok6Rec$@>1OsF3!uIVKDp97B&o6X7Ijy8o*QTgYNC_o32Z) zXI=YUcGvgL^Uf1a$?0}}?Rd|z=!iJBI)1c&V4t(^v)k-9Y-erH+YZ?NuzqQM*IKhq zTJN-8x4dSNEqg6y%Xj7v%|)}<{JZ#t_>Q1YDdV*99^);; z=Z4dUvf+NiP5njvNqs@TN3Yjk(Vfs`bYr^TgsZ~a!XaU+@B_QRUS^N6arP6=Qt|n6 z^o>OWnOtDfFD2VQzF;Z^HlSej@VNhxP(F~9a_!0nMfhXccp@8DdW*0Sq*(=)^DPj; zd*_4Uh|)cRPX!}B7JBD-0G9+#t?pSV)|$&U9Rnxz0!4bfITZmfP{$>e&LcE@q&<~L zMp9%CW0BZp70H~xNIs!yx}){m(ewj2Oh!4l#xT3^l7W+`X?m3xYMSO=_iv9Lnoskv z{!hedP1BmD+viX-HvaejduTqb`LyQK+LO!Xo?Nu(p+%4XU-XdiD;(H?Z|KSVF6>1X zhj17L97hQ?yormrimwoSIG0K%BWZs;mq`cnlawBjQqwuF^2pz}ajO5gXgmTRyuK-- zR60Rd&S}c?`jS~mZRm6;A^9`8sZcuJAG*6!wdZC6us!^Lmuqw|K>y=u& zJy9tgt;%u@;jENR7rm=8H3h8O%~*E?;TX@eEm+L4c7& zHr4zyd)-L6x^2Xu>#Ji&cC~*+s;IXJ)N(H$!>9s2CS#f~PK-{B>gj&O#JO&w7}0(( zl6?yvT}w9gU)aKXbaolP>wFllQ`-$<%q#PH4kuafSQTe$S)6CYa+yanQas12@s#3H z3@?&QPU;1i>w_f@azXBg`B*FO#c)o~aGI#Q2)L~0Bx1G?4%Wd@)}*YanT%ublKh=L z7#xxFy`;H*DC@0eEy}2YVLMT8;rvm`EIqM_wZ#3=STqsIP+l||%cs(O3u!{8>~P#b4u`*7!PZ;Ju0&B5~R zH0y4>MW#5l#zZDuF>q=*f(p)GafD%fMzj7zWi@ArcZP{{Oz;4rw#oairemGfA2kLK zndOci({MwL5_xXdtMikgFdZ}k>Lg7qGkuNt*C^mBi&;@wC;ALj8J%F^Xe^|hTW$a1 zmR0+RbhK<-XB*rkn=ympyxlXmks|sRw5;7x%!Ylp8>R`Nrkp147nWj5R9>;gY6t7@ sSe@v$XcEAWgM?esuK7z5+ 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 W2A|Q*q)M7a4l1WI{`Gm`L*XCvpJfdI literal 0 HcmV?d00001 diff --git a/ALUMMM.CPP b/ALUMMM.CPP new file mode 100644 index 0000000..9a13a74 --- /dev/null +++ b/ALUMMM.CPP @@ -0,0 +1,1360 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "..\..\libs\make_bot\make_bot.h" // Fuciones de MAKE_BOTON +#include "c:\program\src_dos\libs\bdatos\bdatos.hh" +#include "alum_def.h" + +#define SEC_MENU 1 + +#define OFF 0 +#define ON 1 + +#ifdef __cplusplus + #define __CPPARGS ... +#else + #define __CPPARGS +#endif + +#define INTR 0X1C /* The clock tick interrupt */ + +extern unsigned _stklen = 18432U; + + +char far *VGARam = (char far *)MK_FP( 0xA000, 0); +typedef unsigned char DacPalette256[256][3]; +DacPalette256 Palette256; + +void Creditos(void); +int MuestraImagen( char *file ); +int CargaPaleta(char *file ); +void setvgapalette256(DacPalette256 *PalBuf); + + +void ImprimeEtiquetas(void); +void ImprimeNombrees( char como ); +void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros ); + + /*********************************\ +|* *| +|* Informe general sobre el estado *| +|* de la empresa selecionada. *| +|* *| + \*********************************/ +DatosInformativos DatosInf; +extern BDatos BAlum; // Base Datos Antig.Alumnos +extern AntiguosAlumnos SAlum; // Struct Antig.Alumnos + +void MuestraDatos( void ); +void RecopilaDatos( void ); + + + /*********************************\ +|* *| +|* Gestion para la *| +|* CFG inicial *| +|* *| + \*********************************/ +extern BDatos BConfig; // Base con la configuracion del programa +extern CONFIG Config; // Configuracion global del programa + +struct date FechaGestionActual;// Fecha de gestion actual +char BufferM[6][65 + 1]; // Buffer para los mensajes... + +char Buffer[180]; // +p_Ampliada MensajesLn; // Definiciones del letrero digital (NOMB.EMPR) +extern char *ptr_char; // Puntero a la fuentes de caracteres propia + + // Control de EDICION / VISUALIZACION +char VisualMode = ERROR; // ERROR: los datos pueden ser modificados + // OK: solo se permite editar NO TOCAR + + /*********************************\ +|* *| +|* Vectores de interrupci¢n para *| +|* provocar que parpadeen las led's*| +|* *| + \*********************************/ +void AnulaInterrupcion(void); +void ActivaInterrupcion(void); + +void interrupt handler(__CPPARGS); +void interrupt ( *oldhandler)(__CPPARGS); +char count = 0, intvect = OFF, IntVect = OFF; + + + /*********************************\ +|* *| +|* Funciones para el manejo del *| +|* Men£ Principal, y ejecuciones. *| +|* *| + \*********************************/ + +void MenuPrincipal(void); +void DibujaMenuPrincipal( void ); +int SubItem( int Sec, int NItem ); +void DibujaLogotipo( char * File, int X, int Y ); +void EjecutaModulo( void (*FuncionModulo)(void) ); +void MarcaItemSeleccionado( int Columna, char como ); +void PantallaGrafica( int X0, int Y0, int X1, int Y1 ); +void MarcaSubItemSeleccionado( int Sec, int Columna, char como ); +char TIPO_ORDENACION; + +int Ordenar( const void *A, const void *B ) +{ + char dev; + + switch( TIPO_ORDENACION ) + { + case 0: + if ( (dev = strcmp( (( AntiguosAlumnos *)A)->Nombre, (( AntiguosAlumnos *)B)->Nombre ) ) == 0) + dev = strcmp( (( AntiguosAlumnos *)A)->Apellidos, (( AntiguosAlumnos *)B)->Apellidos ); + return dev; + break; + case 1: + if ( (dev = strcmp( (( AntiguosAlumnos *)A)->Apellidos, (( AntiguosAlumnos *)B)->Apellidos ) ) == 0) + dev = strcmp( (( AntiguosAlumnos *)A)->Nombre, (( AntiguosAlumnos *)B)->Nombre ); + return dev; + break; + case 2: + return ( strcmp( (( AntiguosAlumnos *)A)->Direccion, (( AntiguosAlumnos *)B)->Direccion ) ); + return 0; + break; + case 3: + return ( strcmp( (( AntiguosAlumnos *)A)->Direccion, (( AntiguosAlumnos *)B)->Direccion ) ); + return 0; + case 4: + if ( (( AntiguosAlumnos *)A)->CC.Oficina == (( AntiguosAlumnos *)B)->CC.Oficina ) + { + if ( (( AntiguosAlumnos *)A)->CC.Sucursal == (( AntiguosAlumnos *)B)->CC.Sucursal ) + { + if ( (( AntiguosAlumnos *)A)->CC.DigControl == (( AntiguosAlumnos *)B)->CC.DigControl ) + { + if ( (( AntiguosAlumnos *)A)->CC.NumCuenta > (( AntiguosAlumnos *)B)->CC.NumCuenta ) return 1; + if ( (( AntiguosAlumnos *)A)->CC.NumCuenta < (( AntiguosAlumnos *)B)->CC.NumCuenta ) return -1; + } + if ( (( AntiguosAlumnos *)A)->CC.DigControl > (( AntiguosAlumnos *)B)->CC.DigControl ) return 1; + if ( (( AntiguosAlumnos *)A)->CC.DigControl < (( AntiguosAlumnos *)B)->CC.DigControl ) return -1; + } + if ( (( AntiguosAlumnos *)A)->CC.Sucursal > (( AntiguosAlumnos *)B)->CC.Sucursal ) return 1; + if ( (( AntiguosAlumnos *)A)->CC.Sucursal < (( AntiguosAlumnos *)B)->CC.Sucursal ) return -1; + } + if ( (( AntiguosAlumnos *)A)->CC.Oficina > (( AntiguosAlumnos *)B)->CC.Oficina ) return 1; + if ( (( AntiguosAlumnos *)A)->CC.Oficina < (( AntiguosAlumnos *)B)->CC.Oficina ) return -1; + break; + + } + return 0; +}; + + + + /**************************************************************************\ +|* *| +|* main *| +|* *| +|* Descripci¢n: *| +|* ¨Sabes lo que es tener el control?, bien pues esta funci¢n *| +|* tiene el control de todo, inicializa y desinicializa todo: *| +|* - vectores de interrupci¢n *| +|* - sistema gr fico - m¢dulo de botones MK_Boton *| +|* *| +|* Entradas: Par metros de inicializaci¢n para el programa. *| +|* *| +|* Salidas: 0 Todo ha ido bien *| +|* # C¢digo de error ( descritos en la funci¢n _Error ) *| +|* *| +|* *| + \**************************************************************************/ +int main( int argc, char *argv[] ) +{ + + int i; + char buffer[4][80] = { "Jos‚ David Guill‚n || _-ùFuTuRe ViSiOnù-_ || 1997 (c)", + " e-mail: Jose-David.Guillen@cs.us.es ", + " http://www.arrakis.es/~infomundo/JD ", + " " }; + + /*****************************\ °±²þ²±° + |* Obtenemos la fecha en curso *| + \*****************************/ + getdate( &FechaGestionActual ); + + /*****************************\ + |* Inicializaci¢n del rat¢n *| °±²Ü²±° + |* modo gr fico y nueva paleta *| °±²ß²±° + \*****************************/ + Initialize( 9, 2 ); // Inicializa el Modo Gr fico + + setrgbpalette(EGA_WHITE, 56, 58, 59 ); + setrgbpalette(EGA_LIGHTGRAY, 30, 37, 43 ); + setrgbpalette(EGA_DARKGRAY, 24, 27, 30 ); + + True_Push = ON; PunteroRaton = 1; + inicializa_raton_grafico( 0, 0, 639, 479 ); + + + /*****************************\ + |* Colocamos el vector de int. *| °±²þ²±° + \*****************************/ + intvect = ON; + for ( i=1; i < argc; i++ ) + if ( strcmpi( argv[i], "/BLINK" ) == 0 ) + intvect = OFF; + if ( intvect == OFF || atexit( AnulaInterrupcion ) != 0 ) + { + intvect = OFF; + } else { + intvect = ON; + /* save the old interrupt vector */ + oldhandler = getvect(INTR); + /* install the new interrupt handler */ + setvect(INTR, handler); + + IntVect = ON; + } + + /*****************************\ + |* Cargamos las fuentes de *| °±²Ü²±° + |* usuario para el letrero dig.*| °±²ß²±° + \*****************************/ + if ( ( ptr_char = ( char *)malloc( sizeof(char)*4096 ) ) == NULL ) + Error( 0x06, "Error inicializando Memoria, fuentes" ); + LeeFuentes(Config.Vent_msg); + + + /*****************************\ + |* Leemos la configuraci¢n glb *| °±²Ü²±° + |* y desactivamos el bloqueo *| °±²Û²±° + |* si procede. *| °±²ß²±° + \*****************************/ + if ( BConfig.AbrirReg( "datos\\config.cfg", sizeof( CONFIG ) ) != OK ) + Error( 0x01, BConfig.cError ); + if ( BConfig.Registros() == 0 ) + BConfig.InsReg( (void *)&Config, BConfig.Registros(), ARRIBA ); + else + BConfig.LeeReg( (void *)&Config, 0 ); + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +// AnulaInterrupcion(); +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + MenuPrincipal(); + + /*****************************\ + |* DesInicializamos todo y *| °±²Ü²±° + |* mostramos el mensaje final. *| °±²ß²±° + \*****************************/ + BConfig.CerrarReg(); + free( ptr_char ); + AnulaInterrupcion(); + + closegraph(); + + + printf( "\n%s", buffer[0] ); + printf( "\n%s", buffer[1] ); + printf( "\n%s", buffer[2] ); + printf( "\n%s", buffer[3] ); + +return 0; + +} + +void AnulaInterrupcion(void) +{ +/* reset the old interrupt handler */ +if ( intvect == ON ) + setvect(INTR, oldhandler); +intvect = OFF; +} + + + +void MenuPrincipal(void) +{ + int ok, CurrCol, BPush, PulsoIntro; + int i; + char buffer[80]; + + + ok = 0; CurrCol = 0; + PulsoIntro = 0; + +// if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + RecopilaDatos(); + DibujaMenuPrincipal(); + + // Recargamos los botones del men£ + if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + do { + if ( PulsoIntro == 0 ) + { + MarcaItemSeleccionado( CurrCol, INTENSO ); + BPush = Comprueba_Secuencia( SEC_MENU, RatonVentas ); + MarcaItemSeleccionado( CurrCol, NORMAL ); + if ( BPush > 0 && BPush != 11 ) + { + CurrCol = BPush - 1; + MarcaItemSeleccionado( CurrCol, INTENSO ); + } + } else { + while( kbhit() ) getch(); + PulsoIntro = 0; + BPush = CurrCol + 1; + } + + switch( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -2: // Hay una tecla normal en BUFFER + // Intro + if ( getch() == 13 ) + PulsoIntro = 1; + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + CurrCol--; if ( CurrCol < 0 ) CurrCol = 9; + break; + // Flecha Arriba + case 72: + CurrCol--; if ( CurrCol < 0 ) CurrCol = 7; + break; + // Flecha Derecha + case 77: + case 9: + CurrCol++; if ( CurrCol > 9 ) CurrCol = 0; + break; + // Flecha Abajo + case 80: + CurrCol++; if ( CurrCol > 7 ) CurrCol = 0; + break; + // Inicio + case 71: + CurrCol = 0; + break; + // Fin + case 79: + CurrCol = 9; + break; + } + break; + // Gestion de Antiguos Alumnos + case 1: + EjecutaModulo( GstAlumnos ); + break; + // Ordenaciones + case 2: + PantallaGrafica( 215, 50, 415, 230 ); + Imprime_Estaticos( 92, "systm\\alumMP.img" ); + BPush = SubItem( 3, 5 ); + PantallaGrafica( 215, 50, 415, 230 ); + switch ( BPush ) + { + case 1: + case 2: + case 3: + case 4: + case 5: + TIPO_ORDENACION = BPush - 1; + Optar( ENCUADRE, "Comando Ordenar", "Ordenando la base de", "datos. Esto puede tardar unos", "minutos. Por favor, espere...", NULL ); + sprintf( buffer, "datos\\alum.dbf" ); + if ( !access( buffer, 0 ) ) + { + if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR ) + Error(0x01, BAlum.cError); + BAlum.SortReg( Ordenar ); + BAlum.CerrarReg(); + } + Optar( ENCUADRE, "Comando Ordenar", "Ordenando la base de", "datos. Esto puede tardar unos", "minutos. Por favor, espere...", NULL ); + break; + } + break; + // -- + case 3: +/* + PantallaGrafica( 215, 160, 415, 270 ); + Imprime_Estaticos( 95, "systm\\Tpv_MP.img" ); + BPush = SubItem( 6, 3 ); + PantallaGrafica( 215, 160, 415, 270 ); + switch ( BPush ) + { + case 1: + EjecutaModulo( InfoEmpleados ); + break; + case 2: + EjecutaModulo( PassEmpleados ); + break; + case 3: + EjecutaModulo( GraficaVentaEmpleados ); + break; + } +*/ + break; + // Listados + case 4: + PantallaGrafica( 215, 200, 415, 310 ); + Imprime_Estaticos( 93, "systm\\alumMP.img" ); + BPush = SubItem( 4, 3 ); + PantallaGrafica( 215, 200, 415, 310 ); + switch ( BPush ) + { + case 1: + sprintf( buffer, "datos\\alum.dbf" ); + if ( !access( buffer, 0 ) ) + { + // Cargamos los botones del programa + if ( carga_botones( "systm\\alum.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR ) + Error(0x01, BAlum.cError); + ImprimeNombrees( 1 ); + BAlum.CerrarReg(); + + // Cargamos los botones del programa + if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + } + break; + case 2: + EjecutaModulo( ImprimeEtiquetas ); + break; + case 3: + sprintf( buffer, "datos\\alum.dbf" ); + if ( !access( buffer, 0 ) ) + { + // Cargamos los botones del programa + if ( carga_botones( "systm\\alum.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR ) + Error(0x01, BAlum.cError); + if ( Optar( 1, "Escoja formato salida:", "Presione aceptar para imprimir", "los datos de salida, o canclar", "para grabarlos en soporte A:\\", NULL ) ) + ImprimeNombrees( 3 ); + else + Optar( 0, "ATENCION!!!", "Funci¢n no implementada.", NULL ); + + BAlum.CerrarReg(); + + // Cargamos los botones del programa + if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + } + break; + } + break; + // -- + case 5: +/* + PantallaGrafica( 215, 205, 415, 350 ); + Imprime_Estaticos( 94, "systm\\alumMP.img" ); + BPush = SubItem( 5, 4 ); + PantallaGrafica( 215, 205, 415, 350 ); + switch ( BPush ) + { + case 1: +// EjecutaModulo( VentasDiarias ); + break; + case 2: + break; + } +*/ + break; + // Ayuda + case 6: + // Cargamos los botones del programa + if ( carga_botones( "systm\\alum.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + Optar( 0, "­ Ayuda !", "Para cualquier consulta", "dirijase a:","---","www.arrakis.es/~infomundo/JD", NULL ); + + // Cargamos los botones del programa + if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + break; + // Miscelanea + case 7: + PantallaGrafica( 215, 215, 415, 430 ); + Imprime_Estaticos( 96, "systm\\alumMP.img" ); + BPush = SubItem( 7, 6 ); + PantallaGrafica( 215, 215, 415, 430 ); + switch ( BPush ) + { + case 1: + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + EjecutaModulo( ConfigurarEntorno ); + break; + } + break; + // Salir + case 8: + ok = 1; + break; + // Marcador interior del letrero que se desplaza + case 9: + break; + // Marcador exterior del letrero que se desplaza + // Creditos... + case 10: + Creditos(); + DibujaMenuPrincipal(); + break; + // Ventana infierior izquierda + case 11: + break; + + } + + } while ( !ok ); + +} + + +void EjecutaModulo( void (*FuncionModulo)(void) ) +{ + // Cargamos los botones del programa + if ( carga_botones( "systm\\alum.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + // Ejecutamos la funcion Pedida + FuncionModulo(); + + // Recargamos los botones del men£ + if ( carga_botones( "systm\\alumMP.img" ) != OK ) Error( 0x03, "Make Boton, no pudo cargar los botones" ); + + DibujaMenuPrincipal(); + +} + + +void MarcaItemSeleccionado( int Columna, char como ) +{ + + Imprime_Bordes( SEC_MENU, ( Columna + 1 ), ( como == NORMAL ) ? -1 : 11 ); + +} + +void MarcaSubItemSeleccionado( int Sec, int Columna, char como ) +{ + + Imprime_Bordes( Sec, ( Columna + 1 ), ( como == NORMAL ) ? -1 : 11 ); + +} + +void DibujaMenuPrincipal(void) +{ + int i, Center; + char buffer[80]; + char NombreMenu[8][80] = { "Gesti¢n Ant. Alumnos", "Ordenar por...", "---", + "Listados", "---", "Ayuda", + "Miscelanea", "Salir" }; + + // Rellenamos la pantalla con un fondo atractivo... + setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 ); + + Imprime_Estaticos( 90, "systm\\alumMP.img" ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); + + for ( i = 0; i < 8; i++ ) + { + Center = (200 - textwidth( NombreMenu[i] ) ) / 2; + setcolor( EGA_BLACK ); outtextxy( 422 + Center, 164 + 40*i, NombreMenu[i] ); + setcolor( EGA_WHITE ); outtextxy( 423 + Center, 165 + 40*i, NombreMenu[i] ); + } + + if ( access( buffer, 0 ) != 0 ) + strcpy( buffer, "systm\\alum.pcx" ); + DibujaLogotipo( buffer, 25, 5 ); + + sprintf( Buffer, "Dirija cualquier consulta a: e-mail: Jose-David.Guillen@cs.us.es o visiteme en http://www.arrakis.es/~infomundo/JD " ); + + MensajesLn.x = 117; MensajesLn.y = 291; + MensajesLn.ndigitos = 11; + MensajesLn.AX = 2; MensajesLn.AY = 2; + MensajesLn.C1 = Config.DigBg; MensajesLn.C2 = Config.DigFg; + + MuestraDatos(); +} + + + +/***************************************************************************\ +|* *| +|* INT CLK *| +|* *| +|* Descripci¢n: *| +|* interrupci¢n para el parpadeo de los led's *| +|* *| +|* Entradas: (indeterminadas) *| +|* *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void interrupt handler(__CPPARGS) +{ +/* increase the global counter */ + if ( IntVect == ON ) + { + count = (count++)%16; + if ( count == 1 ) + { + setpalette( 11, EGA_GREEN ); + setpalette( 13, EGA_LIGHTGREEN ); + } + else if ( count == 8 ) + { + setpalette( 11, EGA_RED ); + setpalette( 13, EGA_LIGHTRED ); + + } + } + +/* call the old routine */ + oldhandler(); +} + + +void DibujaLogotipo( char * File, int X, int Y ) +{ + FILE *fp; + int alto, ancho; unsigned char byte; + int contador; + char color[17] = { 0, EGA_RED, EGA_GREEN, EGA_LIGHTGRAY, + EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, + EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, + EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED }; + + + if ( ( fp = fopen ( File, "rb" ) ) != NULL ) + { + + // Saltamos la cabecera + fseek( fp, 128, SEEK_SET ); + + for(alto=0; alto<279; alto++) + { + for(ancho=0; ancho<240; ) + { + byte=getc(fp); + if(byte<=0xC0) + { + if ( byte != 255 ) +// VGARam[ ancho+X + (alto+Y)*320 ] = color[byte%16]; + putpixel( ancho+X, alto+Y, color[byte%16] ); + ancho++; + } + else + { + contador=byte&0x3F; byte=getc(fp); + if ( byte != 255 ) + for(; contador>0; contador--) + { +// VGARam[ ancho+X + (alto+Y)*320 ] = color[byte%16]; + + putpixel( ancho+X, alto+Y, color[byte%16] ); + ancho++; + } + else + ancho += contador; + } + } + } + + + + fclose( fp ); + } + +} + + +void PantallaGrafica( int X0, int Y0, int X1, int Y1 ) +{ + static void far *ImagenFondo; + static Memoria = 0; + + + if ( Memoria == 1 ) + { + putimage( X0, Y0, ImagenFondo, COPY_PUT ); + farfree( ImagenFondo ); + Memoria = 0; + } else + + if ( ( ImagenFondo = farmalloc( JD_imagesize( X0, Y0, X1, Y1 ) ) ) != NULL ) + { + Memoria = 1; + getimage( X0, Y0, X1, Y1, ImagenFondo ); + + } else { + + Error( 0x04, "Memoria insuficiente" ); + + } + +} + +int SubItem( int Sec, int NItem ) +{ +int ok, PulsoIntro, CurrSubCol, BPush; +int dev = -1; + ok = 0; PulsoIntro = 0; CurrSubCol = 0; + do { + + if ( PulsoIntro == 0 ) + { + MarcaSubItemSeleccionado( Sec, CurrSubCol, INTENSO ); + BPush = Comprueba_Secuencia( Sec, NULL );//RatonVentas ); + MarcaSubItemSeleccionado( Sec, CurrSubCol, NORMAL ); + } else { + PulsoIntro = 0; + BPush = CurrSubCol + 1; + } + + switch( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + ok = 1; dev = -1; + break; + case -2: // Hay una tecla normal en BUFFER + // Intro + if ( (BPush = getch()) == 13 ) + PulsoIntro = 1; + else if ( BPush == 27 ) { ok = 1; dev = -1; } + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + // Flecha Arriba + case 72: + CurrSubCol--; if ( CurrSubCol < 0 ) CurrSubCol = NItem-1; + break; + // Flecha Derecha + case 77: + case 9: + ok = 1; + dev = -1; + break; + // Flecha Abajo + case 80: + CurrSubCol++; if ( CurrSubCol > (NItem-1) ) CurrSubCol = 0; + break; + // Inicio + case 71: + CurrSubCol = 0; + break; + // Fin + case 79: + CurrSubCol = 9; + break; + default: + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + } + break; + // + default: + if ( BPush <= NItem && BPush > 0 ) + { + ok = 1; + dev = BPush; + } + break; + } + } while ( !ok ); + + return dev; +} + + + + + + +void Error( int code, char *MensajeError ) +{ + free( ptr_char ); + AnulaInterrupcion(); + restorecrtmode(); + BConfig.CerrarReg(); + + printf( "\nSe produjo un codigo de error %d, subcodigo no disponible ", code ); + switch( code ) + { + case 0: + printf( "\n Error Desconocido " ); + break; + case 1: + printf( "\n BDatos gener¢ el error de salida. |ERROR DE ACCESO| " ); + break; + case 2: + printf( "\n Make Boton gener¢ el error de salida " ); + break; + case 3: + printf( "\n Fall¢ en alg£n punto del men£ principal" ); + break; + + }; + + printf( "\n> %s_", MensajeError ); + exit(code); +} + + + + + + + /**************************************************************************\ +|* *| +|* RecopilaDatos *| +|* *| +|* Descripci¢n: *| +|* Recopila todos los datos utilies, de la empresa seleccionada*| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void RecopilaDatos( void ) +{ + char buffer[80]; + long RegComp[31 + 2]; + int scl, ctot, clib; + long bcl; + + struct ffblk ffblk; + union REGS r; + int done, i; + + int MesActual = FechaGestionActual.da_mon; + + // Recopilaci¢n de datos sobre: Empresas + sprintf( buffer, "datos\\alum.dbf" ); + if ( access( buffer, 0 ) == 0 && BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) != ERROR ) + { + DatosInf.NumAlum = (int)BAlum.Registros(); + BAlum.CerrarReg(); + } else + DatosInf.NumAlum = 0; + + // Datos de interes vario: Espacio Libre en disco + char unidad = bdos(0x19,0,0); + r.h.ah = 0x36; + r.h.dl = unidad+1; + intdos(&r,&r); + scl = r.x.ax; /*sectores por cluster*/ + bcl = (long)scl*r.x.cx; /*bytes por cluster*/ + ctot = r.x.dx; /*clusters total*/ + clib = r.x.bx; /*clusters libres*/ + DatosInf.EspacioLib = (clib*bcl); + + // Datos de interes vario: + // Espacio consumido por las bases de datos ( del la EMPRESA ACTUAL ) + DatosInf.EspacioCon = 0; + sprintf( buffer, "datos\\*.*" ); + done = findfirst( buffer, &ffblk, 0); + while (!done) + { + DatosInf.EspacioCon += ffblk.ff_fsize; + done = findnext(&ffblk); + } +} + + + /**************************************************************************\ +|* *| +|* MuestraDatos *| +|* *| +|* Descripci¢n: *| +|* Muestra los datos previamente recopilados. *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +#define NUM_LINEAS 3 +void MuestraDatos( void ) +{ + static char LineaActual = 0; + + p_Ampliada InfoDatos; + char buffer[120]; + int i; + + LineaActual = 0; + + InfoDatos.x = 30; + InfoDatos.ndigitos = 32; + InfoDatos.AX = 1; InfoDatos.AY = 1; + InfoDatos.C1 = 0; InfoDatos.C2 = Config.TxtFgI; + InfoDatos.C3 = 0; + + for ( i = 0; i < NUM_LINEAS; i++ ) + { + switch( ( LineaActual + i ) % NUM_LINEAS ) + { + case 0: + sprintf( buffer, "Existen %d antiguos alumnos ", DatosInf.NumAlum ); + break; + case 1: + buffer[0] = ' '; + buffer[1] = '\0'; + break; + case 2: + sprintf( buffer, "Espacio ocup: %ld Kb de %d Mb ", DatosInf.EspacioCon / 1024, DatosInf.EspacioLib / 1048576L ); + break; + default: + buffer[0] = ' '; + buffer[1] = '\0'; + break; + }; + InfoDatos.y = 330 + 8*i; + // No tenemos mas remedio que acceder a los datos privados: + InfoDatos.BitByte = 0; InfoDatos.currByte = 0; + + Fuente_Amplia( buffer, &InfoDatos ); + } + LineaActual = ( LineaActual++ ) % NUM_LINEAS; +} + + + /**************************************************************************\ +|* *| +|* RatonVentas *| +|* *| +|* Descripci¢n: *| +|* Funci¢n soporte para el control del raton, que ademas se *| +|* encarga de mostrar el letrero digital y el protector de *| +|* pantalla. *| +|* *| +|* Entradas: *| +|* Linea en la que se inserta y posici¢n f¡sica, y columna *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +int far RatonVentas(void) +{ + char Que; + + clock_t start, end, start2; + + struct time first; + struct time old; + + start2 = start = clock(); + + activa_raton(); + + union REGS io; + io.x.ax = 3; + + do{ + end = clock(); + + if ( ( (end - start2) / (CLK_TCK /*/ 4*/) ) >= 0.001 ) + { + start2 = end; + old = first; + gettime( &first ); + if ( ( old.ti_min != first.ti_min || old.ti_hour != first.ti_hour ) ) + sprintf( Buffer, "Hoy es %02d-%02d-%02d y son las %02d:%02d (Cualquier consulta en: http://www.arrakis.es/~infomundo/JD ;-)", FechaGestionActual.da_day, FechaGestionActual.da_mon, FechaGestionActual.da_year, (int)first.ti_hour, (int)first.ti_min ); + + Fuente_Amplia( Buffer, &MensajesLn ); + } + + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n +// boton_izq = io.x.bx & 1; +// boton_der = (io.x.bx >> 1) & 1; + x_raton = io.x.cx; + y_raton = io.x.dx; + + }while( (io.x.bx & 1) == 0 && ((io.x.bx >> 1) & 1) == 0 && !kbhit() ); + + + ///////////////////////////////////////// + // RETURN Derecho Izquierdo // + // // + // 0 0 0 // + // 1 1 0 // + // 2 0 1 // + // 3 1 1 // + // // + ///////////////////////////////////////// + + + if ( ((io.x.bx >> 1) & 1)==0 && (io.x.bx & 1)==0 ) Que = 0; + if ( ((io.x.bx >> 1) & 1)==1 && (io.x.bx & 1)==0 ) Que = 1; + if ( ((io.x.bx >> 1) & 1)==0 && (io.x.bx & 1)==1 ) Que = 2; + if ( ((io.x.bx >> 1) & 1)==1 && (io.x.bx & 1)==1 ) Que = 3; + + desactiva_raton(); + return Que; +} + + + + +void Creditos(void) +{ + + desactiva_raton(); + + // Cambiamos a 320x200 + IntVect = OFF; + + + restorecrtmode(); + asm mov al, 0x13 + asm mov ah, 0x00 + asm int 0x10 + + // + MuestraImagen( "SYSTM\\alumc.PCX" ); + while( !kbhit() ); + while( kbhit() ) getch(); + + // Cambiamos a 640x480 + asm mov al, 0x03 + asm mov ah, 0x00 + asm int 0x10 + + setgraphmode( 2 ); + inicializa_raton_grafico( 0, 0, 639, 479 ); + ////////// + setrgbpalette(EGA_WHITE, 56, 58, 59 ); + setrgbpalette(EGA_LIGHTGRAY, 30, 37, 43 ); + setrgbpalette(EGA_DARKGRAY, 24, 27, 30 ); + + IntVect = ON; + +} + + +#define RES_X 320 +#define RES_Y 200 + /**************************************************************************\ +|* *| +|* MuestraImagen *| +|* *| +|* Descripci¢n: *| +|* Descomprime y copia a la pagina indicada un PCX *| +|* *| +|* Entradas: nombre de la imagen *| +|* *| +|* *| +|* Salidas: OK Todo ha ido bien *| +|* ERROR Algo va mal *| +|* *| + \**************************************************************************/ +int MuestraImagen( char *file ) +{ + int alto, ancho, contador; + unsigned char byte; + FILE *fp; + + CargaPaleta( file ); + + if ( (fp = fopen( file,"rb")) != NULL ) + { + // Saltamos la cabecera + fseek( fp, 128, SEEK_SET ); + + for(alto=0; alto0; contador--) + { +// putpixel (ancho, alto, byte); + VGARam[ ancho + alto*320 ] = byte; + ancho++; + } + } + } + } + + fclose(fp); + + } else return ERROR; + + + + return OK; +} + + + + /**************************************************************************\ +|* *| +|* CargaPaleta *| +|* *| +|* Descripci¢n: *| +|* Carga la paleta con los colores por defecto *| +|* *| +|* *| +|* Entradas: achivo PCX de donde cargar la paleta *| +|* *| +|* Salidas: OK Todo ha ido bien *| +|* ERROR Algo va mal *| +|* *| + \**************************************************************************/ +int CargaPaleta(char *file ) +{ + int index; + FILE *fp; + + if ( (fp=fopen( file, "rb" ) ) == NULL ) + return ERROR; + + if ( fseek( fp, -768L, SEEK_END ) == 0 ) + { + for (index=0; index<256; index++) + { + // get the red component + // get the green component + // get the blue component + // set components + Palette256[index][0] = (getc(fp) >> 2);//*64 / 256; + Palette256[index][1] = (getc(fp) >> 2);//*64 / 256; + Palette256[index][2] = (getc(fp) >> 2);//*64 / 256; + } // end for index + + } + setvgapalette256( &Palette256 ); + + + fclose( fp ); + return OK; +} + +/* Setvgapalette256 sets the entire 256 color palette */ +/* PalBuf contains RGB values for all 256 colors */ +/* R,G,B values range from 0 to 63 */ +/* Usage: */ +/* DacPalette256 dac256; */ +/* */ +/* setvgapalette256(&dac256); */ +void setvgapalette256(DacPalette256 *PalBuf) +{ + struct REGPACK reg; + + reg.r_ax = 0x1012; + reg.r_bx = 0; + reg.r_cx = 256; + reg.r_es = FP_SEG(PalBuf); + reg.r_dx = FP_OFF(PalBuf); + intr(0x10,®); +} + + +int Comprueba_Impresora(void) +{ + return ( biosprint(2, 0, 0) & 0x80 ); +} + + +void ImprimeEtiquetas(void) +{ + long i; char pag, buffer[80]; + int Center, lineas = 2, CMen; + int PagInicio, PagFin; + + char Mensaje[][50] = { "Para interrumpir", "pulse una tecla" }; + + OptenPaginasIniFin( &PagInicio, &PagFin, BAlum.Registros() ); + + FILE *file_out; + + if ( !Config.Impresora.Printer ) + { + if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL ) + return; + } else { + file_out = stdprn; + + if ( !Optar( 1, "­ Prepare la impresora !", "Prepare y encienda la", "impresora, y pulse ACEPTAR", "cuando este lista...", NULL ) ) + return; + + while ( !Comprueba_Impresora() ) + { + if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) ) + return; + } + } + + sprintf( buffer, "datos\\alum.dbf" ); + if ( !access( buffer, 0 ) ) + if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR ) + Error(0x01, BAlum.cError); + + +////////////////////////////////////////////////////////////// + + Imprime_Estaticos( 100, "systm\\alum.img" ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); + + setcolor( 63 ); outtextxy( 172, 165, "Imprimiendo Etiquetas" ); + setcolor( EGA_RED ); + + for ( CMen = 0; CMen < lineas; CMen++ ) + { + Center= (296 - textwidth( Mensaje[CMen] ) ) / 2; + outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] ); + } +////////////////////////////////////////////////////////////// + + + pag = 0; + PagInicio--; + for ( i=PagInicio; i < BAlum.Registros() && i < PagFin; i++, pag++ ) + { + + if ( pag >= 3*12 ) + { + if ( !Optar( 1, "NUEVA PAGINA", "Por favor, realinee la pagina", "y pulse una tecla", NULL ) ) + return; + pag = 0; + } + + BAlum.LeeReg( (void *)&SAlum, i ); +// do { BAlum.LeeReg( (void *)&SAlum, i ); i++; } while( !SAlum.Varios.Notific && i < BAlum.Registros() ); +// do { BAlum.LeeReg( (void *)&BHtmp, i ); i++; } while( !BHtmp.Varios.Notific && i < BAlum.Registros() ); + fprintf( file_out, "\n\r" ); + fprintf( file_out, "N§ Alumno: %4ld", SAlum.CodigoR ); + fprintf( file_out, "\n\r" ); + fprintf( file_out, "\n\r" ); + sprintf( buffer, "%s %s", SAlum.Nombre, SAlum.Apellidos ); + buffer[32]='\0'; + fprintf( file_out, "%-32s ", buffer ); + + fprintf( file_out, "\n\r" ); + + sprintf( buffer, "%s", SAlum.Direccion ); + fprintf( file_out, "%-32s ", buffer ); + + fprintf( file_out, "\n\r" ); + fprintf( file_out, "\n\r" ); + + sprintf( buffer, "%s (%s)", SAlum.Localidad, SAlum.Provincia ); + fprintf( file_out, "%-32s ", buffer ); + + fprintf( file_out, "\n\r" ); + fprintf( file_out, "C.P. %5ld", SAlum.CodPostal ); + fprintf( file_out, "\n\r" ); + fprintf( file_out, "\n\r" ); + +/* + fprintf( file_out, "\n\r" ); + fprintf( file_out, "N§ Alumno: %4ld %s N§ de Alumno: %4ld %s", SAlum.NHno, (SAlum.Varios.CuotaFam ? "F" :" " ), BHtmp.NHno, (BHtmp.Varios.CuotaFam ? "F" :" " ) ); + fprintf( file_out, "\n\r" ); + sprintf( buffer, "%s %s %s", SAlum.Nombre, SAlum.Apellido1, SAlum.Apellido2 ); + fprintf( file_out, "%-37s ", buffer ); + sprintf( buffer, "%s %s %s", BHtmp.Nombre, BHtmp.Apellido1, BHtmp.Apellido2 ); + fprintf( file_out, "%-37s", buffer ); + + fprintf( file_out, "\n\r" ); + + sprintf( buffer, "%s%s%s%s%s", SAlum.Direccion, (SAlum.Num[0]=='\0')?"":",", SAlum.Num, (SAlum.Piso[0]=='\0')?"":",", SAlum.Piso ); + fprintf( file_out, "%-37s ", buffer ); + sprintf( buffer, "%s%s%s%s%s", BHtmp.Direccion, (BHtmp.Num[0]=='\0')?"":",", BHtmp.Num, (BHtmp.Piso[0]=='\0')?"":",", BHtmp.Piso ); + fprintf( file_out, "%-37s", buffer ); + + fprintf( file_out, "\n\r" ); + + sprintf( buffer, "%s (%s)", SAlum.Localidad, SAlum.Provincia ); + fprintf( file_out, "%-37s ", buffer ); + sprintf( buffer, "%s (%s)", BHtmp.Localidad, BHtmp.Provincia ); + fprintf( file_out, "%-37s", buffer ); + + fprintf( file_out, "\n\r" ); + fprintf( file_out, "C.P. %5ld C.P. %5ld", SAlum.CodP, BHtmp.CodP ); + fprintf( file_out, "\n\r" ); +*/ + + if ( kbhit() ) + { + getch(); + if ( Optar( 1, "CANCELAR IMPRESION ?", "Desea Cancelar la impresion", "el trabajo aun no ha concluido ?", NULL ) ) + break ; + } + } + + BAlum.CerrarReg(); +} + +void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros ) +{ + void far *Imagen; + char buffer[80]; + struct textsettingstype texttypeinfo; + + *Inicio = 1; + *Fin = NRegistros; + + + Optar( ENCUADRE, "Rango de salida", NULL ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); + + outtextxy( 175, 220, "Ficha inicial:"); + outtextxy( 175, 260, "Ficha final:"); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + sprintf( buffer, "%d", (*Inicio) ); + InputCadenaG(buffer, 0, 5, EGA_WHITE, EGA_BLUE, 320, 220, 460, 240 ); + (*Inicio) = atoi(buffer); + if ( *Inicio < 0 ) *Inicio = 0; + sprintf( buffer, "%d", (*Fin) ); + InputCadenaG(buffer, 0, 5, EGA_WHITE, EGA_BLUE, 320, 260, 460, 280 ); + (*Fin ) = atoi(buffer); + if ( *Fin > NRegistros ) *Fin = NRegistros; + + Optar( ENCUADRE, "Rango de salida", NULL ); +} \ No newline at end of file diff --git a/ALUMNUM.CPP b/ALUMNUM.CPP new file mode 100644 index 0000000..f6bd9b2 --- /dev/null +++ b/ALUMNUM.CPP @@ -0,0 +1,465 @@ +#include +#include +#include +#include +#include +#include +#include + +//#include "alum_def.h" +extern void Error( int code, char *MensajeError ); + + +char *ptr_char; + +char far *VidRam = (char far *)MK_FP( 0xA000, 0); +void far PutPixel(unsigned int x, unsigned int y, int c_elec ); + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + char C1, C2, C3; + } p_graphics; + +typedef struct + { + int x, y; // Coordenadas iniciales de muestreo + char ndigitos; // n£mero de digitos a mostrar + char AX, AY; // factor de espaciado + char C1, C2, C3; // colores de fondo, texto, borde + + // Datos privados y uso interno exclusivamente + unsigned int Flen; // longitud de la frase actual + char BitByte; // bit del byte por el que va en el recorrido + char currByte; // byte actual dentro de la frase + + } p_Ampliada; + +int Numero_Digital( long numero, p_graphics *ND ); +void Fuente_Amplia( char *Frase, p_graphics *FA ); + + + /**************************************************************************\ +|* *| +|* Numero_Digital *| +|* *| +|* Descripcion: *| +|* Muestra un numero, con forma digital en pantalla, *| +|* escalandolo seg£n los factores indicados en p_graphics *| +|* ( 9 digitos como m ximo ) *| +|* *| +|* Entradas: *| +|* N£mero y estructura de muestreo *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +int Numero_Digital( long numero, p_graphics *ND ) +{ +// Son 9 digitos VARIABLES +// 0 +// _________ _________ _________ _________ _________ _________ _________ +// |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| +// | | | | | | | | | | | | | | | | | | | | | | | | | | | | +//3 | | 1 | | 5 | | | | | | | | | | | | | | | | | | | | | | | | +// | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | +// | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | +//4 | | | | 6 | | | | | | | | | | | | | | | | | | | | | | | | +// | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | +// |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| +// 2 + + static char dnumero[9] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + static char Dn[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + static char vez = 0; + static p_graphics ND1; + + char dnum=0, i, j, digital; + int punto[10]; + int CONST = 0; + char DnTmp[2]; + char signo = 0; + static old_signo = 0; + + + // Si ha cambiado la posicion, el n§ de digitos, o el factor de escala + // habr  que recalcularlo todo. + if ( + ND1.x != ND -> x || ND1.y != ND -> y || + ND1.ndigitos != ND -> ndigitos || + ND1.AX != ND -> AX || ND1.AY != ND -> AY + ) + { + dnumero[0] = -1; dnumero[1] = -1; dnumero[2] = -1; + dnumero[3] = -1; dnumero[4] = -1; dnumero[5] = -1; + dnumero[6] = -1; dnumero[7] = -1; dnumero[8] = -1; + + Dn[0] = 0; Dn[1] = 0; Dn[2] = 0; + Dn[3] = 0; Dn[4] = 0; Dn[5] = 0; + Dn[6] = 0; Dn[7] = 0; Dn[8] = 0; + + //ndigitos1 = ndigitos; + ND1 = *ND; + vez = 0; + } + + // Miramos el signo del n£mero + if ( numero < 0 ) + { + numero *= -1; + signo = 1; + } + + if ( signo != old_signo ) vez = 0; + + setcolor(ND -> C3); + + // Miro todas las cifras que componen el n£mero + for( i=0; i < ND -> ndigitos; i++ ) + { + dnum = numero % 10; + digital = numero; + numero /= 10; + + // Si el n£mero pintado con anterioridad es distinto al actual, lo dibujamos + if ( dnumero[ ND -> ndigitos - 1 - i] != dnum || digital == 0 || vez == 0 ) + { + // digital = dnumero[5 - i]; + dnumero[ND -> ndigitos - 1 - i] = dnum; + //////// Esta parte del c¢digo imprime el digito en pantalla + CONST = 12*ND -> AX*(ND -> ndigitos - 1 - i); + DnTmp[1] = Dn[ND -> ndigitos - 1 -i]; + + // Antes de nada, eliminamos los cero a la izquierda + if ( digital == 0 && i != 0 ) { Dn[ND -> ndigitos - 1 -i] = 0; dnumero[ND -> ndigitos - 1 - i] = -1; } else + switch( dnum ) + { + case 0: + Dn[ND -> ndigitos - 1 -i] = 0x7D; // 0111 1101 + break; + case 1: + Dn[ND -> ndigitos - 1 -i] = 0x60; // 0110 0000 + break; + case 2: + Dn[ND -> ndigitos - 1 -i] = 0x37; // 0011 0111 + break; + case 3: + Dn[ND -> ndigitos - 1 -i] = 0x67; // 0110 0111 + break; + case 4: + Dn[ND -> ndigitos - 1 -i] = 0x6A; // 0110 1010 + break; + case 5: + Dn[ND -> ndigitos - 1 -i] = 0x4F; // 0100 1111 + break; + case 6: + Dn[ND -> ndigitos - 1 -i] = 0x5F; // 0101 1111 + break; + case 7: + Dn[ND -> ndigitos - 1 -i] = 0x61; // 0110 0001 + break; + case 8: + Dn[ND -> ndigitos - 1 -i] = 0x7F; // 0111 1111 + break; + case 9: + Dn[ND -> ndigitos - 1 -i] = 0x6F; // 0110 1111 + break; + } + + DnTmp[0] = Dn[ND -> ndigitos - 1 -i]; + for( j=0; j<7; j++ ) + { + if ( DnTmp[1]%2 != DnTmp[0]%2 || vez == 0 ) + { + if ( DnTmp[0]%2 ) + setfillstyle(SOLID_FILL, ND -> C1); + else + setfillstyle(SOLID_FILL, ND -> C2); + + switch( j ) + { + case 0: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 0*ND -> AY + ND -> y; + punto[4] = 8*ND -> AX + CONST + ND -> x; punto[5] = 2*ND -> AY + ND -> y; + punto[6] = 2*ND -> AX + CONST + ND -> x; punto[7] = 2*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 0*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 3: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 2*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 9*ND -> AY + ND -> y; + punto[6] = 1*ND -> AX + CONST + ND -> x; punto[7] = 10*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 9*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 5: + punto[0] = 10*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 9*ND -> AY + ND -> y; + punto[4] = 9*ND -> AX + CONST + ND -> x; punto[5] = 10*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 9*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 2*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 1: + int punto1[12]; + punto1[0] = 1*ND -> AX + CONST + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + CONST + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + CONST + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + CONST + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + CONST + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + CONST + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + break; + case 4: + punto[0] = 1*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 18*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 6: + punto[0] = 9*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 18*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 2: + punto[0] = 2*ND -> AX + CONST + ND -> x; punto[1] = 18*ND -> AY + ND -> y; + punto[2] = 8*ND -> AX + CONST + ND -> x; punto[3] = 18*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 2*ND -> AX + CONST + ND -> x; punto[9] = 18*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + default: + break; + } + } + DnTmp[0] /= 2; + DnTmp[1] /= 2; + } + } + } + + if ( signo != old_signo ) + { + + if ( (old_signo = signo) == 1 ) + { + setfillstyle(SOLID_FILL, ND -> C1); + + int punto1[12]; + punto1[0] = 1*ND -> AX + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + } + } + + vez = 1; + return 0; +} + + + +//////////////////////////////////////////////////////////////////////////////////// +void far PutPixel(unsigned int x, unsigned int y, int c_elec ) +{ + if ( x < 320 && y < 200 ) + *(VidRam + (x + y*320) ) = c_elec; +} + + +void LeeFuentes(char *file) +{ +FILE *fich; + /* Reservamos 4 Kb. para cargar la fuente en memoria */ + + /* Abrimos el fichero de la fuente */ + + if ((fich=fopen(file,"rb"))==NULL) { + printf("\a\nArchivo %s no encontrado.\n",file); + Error(0, "No se encuentra el archivo de fuentes"); + } + + fseek(fich, SEEK_SET, 0); /* Nos colocamos al principio del fichero */ + fread(ptr_char,1,4096,fich); /* Cargamos en memoria 4096 bytes del fichero */ + fclose(fich); /* Cerramos el fichero */ +} + + + + + + + + +#define TAMx 8 +#define TAMy 8 +void Fuente_Amplia( char *Frase, p_Ampliada far *FA ) +{ + int i, j, k; // Variables de avance + int c_elec; // Color en el momento de imprimir + int PosX, PosY; // Posicion fisica final + char LCaract; // Caracter de linea a tratar + + if ( FA->Flen != _fstrlen( Frase ) ) // Reseteamos las variables de control interno + { + // Obtenemos la longitud de la frase. ( En d¡gitos ) + FA -> Flen = _fstrlen( Frase ); + // Contador de digito actual a cero + FA -> BitByte = 0; + // Posicion dentro de la frase + FA -> currByte = 0; + } + + // Avance horizontal de bit's ( avance de digitos ) + for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ ) + { + k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4; + LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) ); + PosX = FA -> x + FA->AX * i; // Posicion f¡sica horizontal + // Avance vertical de bit's + for ( j = 0; j < TAMy; j ++ ) + { + PosY = FA -> y + FA->AY * j; // Posicion f¡sica vertical + + if ( ptr_char[ k + j ] & LCaract ) + c_elec = FA->C2; + else + c_elec = FA->C1; + + putpixel ( PosX, PosY, c_elec ); + } + } + // Tenemos en cuenta el avance dentro de la frase + if ( ( FA -> BitByte ++ ) >= 7 ) + { + FA -> BitByte = 0; FA -> currByte ++; + if ( FA -> currByte >= FA -> Flen ) + FA -> currByte = 0; + } + +} +#undef TAMy +#undef TAMx + + +#define TAMx 8 +#define TAMy 16 +void Fuente_Amplia3( char *Frase, p_Ampliada far *FA ) +{ + int i, j, k; // Variables de avance + int c_elec; // Color en el momento de imprimir + int PosX, PosY; // Posicion fisica final + char LCaract; // Caracter de linea a tratar + + if ( FA->Flen != _fstrlen( Frase ) ) // Reseteamos las variables de control interno + { + // Obtenemos la longitud de la frase. ( En d¡gitos ) + FA -> Flen = _fstrlen( Frase ); + // Contador de digito actual a cero + FA -> BitByte = 0; + // Posicion dentro de la frase + FA -> currByte = 0; + } + + // Avance horizontal de bit's ( avance de digitos ) + for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ ) + { + k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4; + LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) ); + PosX = FA -> x + FA->AX * i; // Posicion f¡sica horizontal + // Avance vertical de bit's + for ( j = 0; j < TAMy; j ++ ) + { + PosY = FA -> y + FA->AY * j; // Posicion f¡sica vertical + + if ( ptr_char[ k + j ] & LCaract ) + c_elec = FA->C2; + else + c_elec = FA->C1; + + putpixel ( PosX, PosY, c_elec ); + } + } + // Tenemos en cuenta el avance dentro de la frase + if ( ( FA -> BitByte ++ ) >= 7 ) + { + FA -> BitByte = 0; FA -> currByte ++; + if ( FA -> currByte >= FA -> Flen ) + FA -> currByte = 0; + } + +} +#undef TAMy +#undef TAMx + +/////ÜÜ///////////////////////////////////////////////////////////////////////////// +////Û///////////////////////////////////////////////////////////////////////////////// +/////ßÜ/////Ü/////////////////////////////////////////////////////////////////////// +//////ß///Ü////ß/Ü////////////////////////////////////////////////////////////////// +///////ß/Ü///Ü////////////////////////////////////////////////////////////////////// +////////Ü//ß////ß/////////////////////////////////////////////////////////////////// +/////////ß////Ü///////////////////////////////////////////////////////////////////// +///////////ß//////////////////////////////////////////////////////////////////////// +#define TAMx 8 +#define TAMy 16 +void FuenteAmplia( char *Frase, p_Ampliada far *FA ) +{ + int i, j, k; // Variables de avance + int c_elec; // Color en el momento de imprimir + int PosX, PosY; // Posicion fisica final + int LCaract; // Caracter de linea a tratar + + if ( FA->C3 == -1 || FA->Flen != _fstrlen( Frase ) ) // Reseteamos las variables de control interno + { + // Obtenemos la longitud de la frase. ( En d¡gitos ) + FA -> Flen = _fstrlen( Frase ); + // Contador de digito actual a cero + FA -> BitByte = 0; + // Posicion dentro de la frase + FA -> currByte = 0; + } + + // Avance horizontal de bit's ( avance de digitos ) + for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ ) + { + k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4; + LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) ); + PosX = FA -> x + FA->AX * i; // Posicion f¡sica horizontal + // Avance vertical de bit's + for ( j = 0; j < TAMy; j ++ ) + { + PosY = FA -> y + FA->AY * j; // Posicion f¡sica vertical + + if ( ptr_char[ k + j ] & LCaract ) + c_elec = FA->C2; + else + c_elec = FA->C1; + + PutPixel ( PosX, PosY, c_elec ); + } + } + // Tenemos en cuenta el avance dentro de la frase + if ( ( FA -> BitByte ++ ) >= 7 ) + { + FA -> BitByte = 0; FA -> currByte ++; + if ( FA -> currByte >= FA -> Flen ) + FA -> currByte = 0; + } + +} +#undef TAMy +#undef TAMx diff --git a/ALUM_CFG.CPP b/ALUM_CFG.CPP new file mode 100644 index 0000000..83381e0 --- /dev/null +++ b/ALUM_CFG.CPP @@ -0,0 +1,957 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "c:\program\src_dos\libs\make_bot\make_bot.h" +#include "c:\program\src_dos\libs\bdatos\bdatos.hh" +#include "alum_def.h" + + + +CONFIG Config = { + LTBKSLASH_FILL, EGA_BLUE, EGA_BLACK, + EGA_RED, EGA_BLACK, EGA_DARKGRAY, + EGA_LIGHTRED, EGA_DARKGRAY, + EGA_WHITE, EGA_RED, EGA_BLACK, EGA_WHITE, + { 0, { "PrnFile.out" }, 66, "", "", { "\0", "\0", "\0", "\0" }, + { "\0", "\0", "\0", "\0" } }, + + // Horas inicio, y fin + { + { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, + { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, + 5, // 5 de la ma¤ana ( cambio horario ) + 0, + 0 + }, + // Impr. Ticket / Cobro Completo / InicioCaja + { 0, 0, 6, 0 }, + 0, + // Tiempo para lanzar el protector de pantalla (en sg.) + 120, + + "fonts\\prot_ptl.fnt", + "fonts\\vent_msg.fnt", + + { 8, 12, 16, 20, 24, 4 }, + + 1, 2 + + }; + +BDatos BConfig; +BDatos BThemes; + +void PreviewEntorno( void ); +void NoStandard( int BPush ); +void MuestraCFG( int Campo, int Item, char como ); + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte principal del m¢dulo Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ +#define CFG_BASE 120 +#define CFG_BASEd 3 + +#define FUENTES 0x00 + +#define COLOR 0x01 +#define FONDO 0x02 +#define TAMANO 0x04 +#define FUENTE 0x08 + + +typedef struct +{ + char Elementos[40]; + char Propiedades; + + char Color, Fondo; + char Tamano, Fuente[40]; + +} ELEMENTOS; + +typedef struct +{ + char Tema[40]; + ELEMENTOS Elementos[7]; +} THEMES; + + // Cada elemento tiene unas propiedades, de las cuales depende el poder usar + // los distintos pulsadores o no. + THEMES Tema = { + "Combinaci¢n standard", + { + { "Fondo de pantalla", COLOR | FONDO | FUENTE }, + { "Texto normal", COLOR | FONDO }, + { "Texto se¤alado", COLOR | FONDO }, + { "Digitos (numeros grandes)", COLOR | FONDO }, + { "Digitos (borde del n£mero)",COLOR }, + { "Fuente del Protector", FUENTE }, + { "Letrero digital", COLOR | FONDO | FUENTE } + // A¥ADIR NUEVOS ELEMENTOS ( RESPETANDO NO SOLAPAR LAS Ä^ + } + }; +char Elementos[][40] = { + { "Fondo de pantalla" }, + { "Texto normal" }, + { "Texto se¤alado" }, + { "Digitos (numeros grandes)" }, + { "Digitos (borde del n£mero)" }, + { "Fuente del Protector" }, + { "Letrero digital" } + // A¥ADIR NUEVOS ELEMENTOS ( RESPETANDO NO SOLAPAR LAS Ä^ + + }; + +int NumElementos = 7, NumFuentes, NumCombinaciones; + +int ListaDesplegable( char Texto[][40], int NumEtos, int DesX, int DesY, char POS ); +void CargaFuentesElemento( int NumElemento ); +void MuestraElemento( int CurrElemento ); +int ObtenTamano( int TOld ); +int ObtenColor( void ); + +void EditCFG( int Campo, int Item, char como ); + + /**************************************************************************\ +|* *| +|* ConfigurarEntorno *| +|* *| +|* Descripci¢n: *| +|* Permite cambiar las opciones de configuraci¢n... *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +char Combinaciones[50][40], Fuentes[50][40]; + +void ConfigurarEntorno( void ) +{ + int CurrCombinacion, CurrElemento, CurrFuente, i, BPush, ok, oldTmp; + int CurrRow, key; + char buffer[80]; + + +char NumItems[] = { 7, 2 }; +char ItemActual = 0; + + + CurrCombinacion = 0; + CurrElemento = 0; + CurrFuente = 0; + + // Rellenamos la pantalla con un fondo atractivo... + setfillstyle( Config.FillBgS, Config.FillBgC ); + bar( 0, 0, 640, 480 ); + + Imprime_Estaticos( CFG_BASE+0, "systm\\alum.img"); // Imprime botones estaticos 'Seccion 1' + // Flecha hacia abajo + ponicono( 184, 276, flecha, 2 ); + ponicono( 184, 331, flecha, 2 ); + ponicono( 184, 386, flecha, 2 ); + + + if ( BThemes.AbrirReg( "datos\\themes.cfg", sizeof( THEMES ) ) == ERROR ) + Error( 1, BThemes.cError); + + // Inicializamos el tema por defecto + if ( BThemes.Registros() == 0 ) + { + Tema.Elementos[0].Fondo = Config.FillBgF; + Tema.Elementos[0].Color = Config.FillBgC; Tema.Elementos[0].Tamano = Config.FillBgS; + Tema.Elementos[1].Color = Config.TxtFgN ; Tema.Elementos[1].Fondo = Config.TxtBgN ; + Tema.Elementos[2].Color = Config.TxtFgI ; Tema.Elementos[2].Fondo = Config.TxtBgI ; + Tema.Elementos[3].Color = Config.NumFg ; Tema.Elementos[3].Fondo = Config.NumBg ; + Tema.Elementos[4].Color = Config.NumLn ; + strcpy( Tema.Elementos[5].Fuente, Config.Prot_fnt ); + + Tema.Elementos[6].Color = Config.DigFg ; Tema.Elementos[6].Fondo = Config.DigBg ; + strcpy( Tema.Elementos[6].Fuente, Config.Vent_msg ); + if ( BThemes.InsReg( (void *)&Tema, 0, ARRIBA ) == ERROR ) + Error( 1, BThemes.cError); + } else + if ( BThemes.LeeReg( (void *)&Tema, CurrCombinacion ) == ERROR ) + Error( 1, BThemes.cError); + + CargaFuentesElemento( CurrElemento ); + MuestraElemento( CurrElemento ); + PreviewEntorno(); + + Imprime_Estaticos( ItemActual+125, "systm\\alum.img"); // Imprime botones estaticos 'Seccion 1' + for ( CurrRow = 0; CurrRow < NumItems[ ItemActual ]; CurrRow ++ ) + MuestraCFG( CurrRow, ItemActual, NORMAL ); + CurrRow = 0; + + ok = 0; + do { + + MuestraCFG( CurrRow, ItemActual, INTENSO ); + BPush = Comprueba_Secuencia( CFG_BASEd, NULL ); + MuestraCFG( CurrRow, ItemActual, NORMAL ); + + switch ( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -2: // Hay una tecla normal en BUFFER + if ( (key=getch()) != 27 && key != 13 ) + ungetch( key ); + EditCFG( CurrRow, ItemActual, NORMAL ); + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + // Flecha Arriba + case 72: + CurrRow--; if ( CurrRow < 0 ) CurrRow = NumItems[ItemActual] - 1; + break; + // Flecha Derecha + case 77: + case 9: + // Flecha Abajo + case 80: + CurrRow++; if ( CurrRow >= NumItems[ItemActual] ) CurrRow = 0; + break; + // Inicio + case 71: + CurrRow = 0; + break; + // Fin + case 79: + CurrRow = NumItems[ItemActual]; + break; + } + break; + // Men£ Principal + case 1: + ok = 1; + break; + // Combinaciones + case 2: + break; + // Guardar combinaci¢n + case 3: +// GuardaCombinacion(); + break; + // Eliminar combinaci¢n + case 4: +/* + if ( CurrCombinacion != 0 && Optar( 1, "Eliminar combinaci¢n", "Confirme la eliminaci¢n", "de la combinaci¢n actual.", NULL ) ) + { + if ( BThemes.DelReg( CurrCombinacion ) == ERROR ) + Error( 1, BThemes.cError); + CurrCombinacion --; + if ( BThemes.LeeReg( (void *)&Config, CurrCombinacion ) == ERROR ) + Error( 1, BThemes.cError); + PreviewEntorno(); + } +*/ + break; + // Elementos + case 5: + oldTmp = CurrElemento; + CurrElemento = ListaDesplegable( Elementos, NumElementos, 5, 330, ARRIBA ); + if ( oldTmp != CurrElemento ) + { + CargaFuentesElemento( CurrElemento ); + MuestraElemento( CurrElemento ); + PreviewEntorno(); + } + break; + // Fuentes + case 6: + if ( Tema.Elementos[CurrElemento].Propiedades & FUENTE ) + { + oldTmp = CurrFuente; + CurrFuente = ListaDesplegable( Fuentes, NumFuentes, 5, 385, ARRIBA ); + if ( oldTmp != CurrFuente ) + { + if ( CurrElemento == 0 ) + Tema.Elementos[CurrElemento].Tamano = CurrFuente; + + strcpy( Tema.Elementos[CurrElemento].Fuente, Fuentes[CurrFuente] ); + + PreviewEntorno(); + } + } + break; + // Color + case 7: + if ( Tema.Elementos[CurrElemento].Propiedades & COLOR ) + { + Tema.Elementos[CurrElemento].Color = ObtenColor(); + PreviewEntorno(); + setfillstyle( SOLID_FILL, Tema.Elementos[CurrElemento].Color ); + bar( 292, 332, 308, 348 ); + } + break; + // Fondo + case 8: + if ( Tema.Elementos[CurrElemento].Propiedades & FONDO ) + { + Tema.Elementos[CurrElemento].Fondo = ObtenColor(); + PreviewEntorno(); + setfillstyle( SOLID_FILL, Tema.Elementos[CurrElemento].Fondo ); + bar( 292, 360, 308, 376 ); + } + break; + // Tama¤o + case 9: + if ( Tema.Elementos[CurrElemento].Propiedades & TAMANO ) + { + Tema.Elementos[CurrElemento].Tamano = ObtenTamano( Tema.Elementos[CurrElemento].Tamano ); + PreviewEntorno(); + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 264, 387, 308, 403 ); + sprintf( buffer, "%3d", Tema.Elementos[CurrElemento].Tamano ); + outtextxy( 264, 387, buffer ); + } + break; + // Impresora + // Ventas + // Varios... + case 10: + case 11: + case 12: + ItemActual = BPush - 10; + Imprime_Estaticos( ItemActual+125, "systm\\alum.img"); // Imprime botones estaticos 'Seccion 1' + for ( CurrRow = 0; CurrRow < NumItems[ ItemActual ]; CurrRow ++ ) + MuestraCFG( CurrRow, ItemActual, NORMAL ); + CurrRow = 0; + break; + default: + NoStandard( BPush ); + break; + } + + } while( !ok ); + + + // Copiamos el Tema actual a las opciones de configuracion + Config.FillBgF= Tema.Elementos[0].Fondo; + Config.FillBgC= Tema.Elementos[0].Color; Config.FillBgS= Tema.Elementos[0].Tamano; + Config.TxtFgN = Tema.Elementos[1].Color; Config.TxtBgN = Tema.Elementos[1].Fondo; + Config.TxtFgI = Tema.Elementos[2].Color; Config.TxtBgI = Tema.Elementos[2].Fondo; + Config.NumFg = Tema.Elementos[3].Color; Config.NumBg = Tema.Elementos[3].Fondo; + Config.NumLn = Tema.Elementos[4].Color; + + strcpy( Config.Prot_fnt, Tema.Elementos[5].Fuente ); + + Config.DigFg = Tema.Elementos[6].Color ; Config.DigBg = Tema.Elementos[6].Fondo ; + strcpy( Config.Vent_msg, Tema.Elementos[6].Fuente ); + + // Salvamos la configuraci¢n + if ( BConfig.EscribeReg( (void *)&Config, 0 ) == ERROR ) + Error( 1, BConfig.cError); + + // Salvamos la configuraci¢n + if ( BThemes.EscribeReg( (void *)&Tema, CurrCombinacion ) == ERROR ) + Error( 1, BThemes.cError); + + + BThemes.CerrarReg(); +} + + /**************************************************************************\ +|* *| +|* PreviewPantalla *| +|* *| +|* Descripci¢n: *| +|* Realiza el preview de la mini-pantalla *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void PreviewEntorno( void ) +{ + + +// setbkcolor( Tema.Elementos[0].Fondo ); + setfillstyle( Tema.Elementos[0].Tamano, Tema.Elementos[0].Color ); + bar( 6, 36, 309, 239 ); + + Imprime_Estaticos( CFG_BASE+1, "systm\\alum.img" ); + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + + // Campos + setfillstyle( SOLID_FILL, Tema.Elementos[1].Fondo ); + bar( 51, 55, 179, 63 ); + bar( 41, 67, 84, 75 ); bar( 121, 67, 179, 75 ); + bar( 51, 79, 99, 87 ); bar( 141, 79, 179, 87 ); + + // Visualizaci¢n R pida + bar( 12, 119, 68, 221 ); + bar( 74, 119, 214, 221 ); + bar( 220, 119, 243, 221 ); + bar( 249, 119, 303, 221 ); + + // Texto Iluminado + setfillstyle( SOLID_FILL, Tema.Elementos[2].Fondo ); + setcolor( Tema.Elementos[2].Color ); + + bar( 15, 122, 67, 129 ); + outtextxy( 11, 120, " 000124 " ); + + setcolor( Tema.Elementos[1].Color ); + outtextxy( 11, 120, " Albaranes de compra " ); + outtextxy( 11, 130, " 000136 Aliados en el juego " ); + outtextxy( 11, 140, " 000250 Baticoco de mono " ); + outtextxy( 11, 150, " 000045 Garganta profunda " ); + outtextxy( 8, 120, " 003 1.500 " ); + outtextxy( 8, 130, " 045 9.999 " ); + outtextxy( 8, 140, " 009 415 " ); + outtextxy( 8, 150, " 010 2.250 " ); + + setcolor( EGA_WHITE ); + outtextxy( 10, 224, " C¢digo de la descripci¢n." ); + + Imprime_Estaticos( CFG_BASE+2, "systm\\alum.img" ); + + +} + + + +void MuestraElemento( int CurrElemento ) +{ + char buffer[80]; + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + + setfillstyle( SOLID_FILL, Config.TxtBgN ); + setcolor( Config.TxtFgN ); + + // Nombre del elemento + bar( 7, 332, 178, 348 ); + outtextxy( 10, 332, Tema.Elementos[CurrElemento].Elementos ); + + // Fuente + bar( 7, 387, 178, 403 ); + if ( Tema.Elementos[CurrElemento].Propiedades & FUENTE ) + outtextxy( 10, 387, Tema.Elementos[CurrElemento].Fuente ); + + // Color + if ( Tema.Elementos[CurrElemento].Propiedades & COLOR ) + setfillstyle( SOLID_FILL, Tema.Elementos[CurrElemento].Color ); + else + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 292, 332, 308, 348 ); + + // Fondo + if ( Tema.Elementos[CurrElemento].Propiedades & FONDO ) + setfillstyle( SOLID_FILL, Tema.Elementos[CurrElemento].Fondo ); + else + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 292, 360, 308, 376 ); + + // Tamano + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 264, 387, 308, 403 ); + sprintf( buffer, "%3d", Tema.Elementos[CurrElemento].Tamano ); + if ( Tema.Elementos[CurrElemento].Propiedades & TAMANO ) + outtextxy( 264, 387, buffer ); + +} + + +int ObtenTamano( int TOld ) +{ + char buffer[80]; + + sprintf ( buffer, "%d", TOld ); + if ( ( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, 264, 387, 308, 403 ) >> 8 ) ) + itoa( TOld, buffer, 10 ); + + return atoi(buffer); +} + + +void CargaFuentesElemento( int NumElemento ) +{ + // Cargamos el tipo de fuente necesario + switch( NumElemento ) + { + // Fondo de pantalla + case 0: + strcpy( Fuentes[ 0], "Sin Fondo" ); + strcpy( Fuentes[ 1], "Fondo Solido" ); + strcpy( Fuentes[ 2], "Lineas Horizontales" ); + strcpy( Fuentes[ 3], "Lineas Inclinadas ////" ); + strcpy( Fuentes[ 4], "Lineas Inclinadas2 ////" ); + strcpy( Fuentes[ 5], "Lineas Inclinadas3 \\\\\\\\" ); + strcpy( Fuentes[ 6], "Lineas Inclinadas4 \\\\\\\\" ); + strcpy( Fuentes[ 7], "Crusado suave" ); + strcpy( Fuentes[ 8], "Crusado Grueso" ); + strcpy( Fuentes[ 9], "Lineas intercaladas" ); + strcpy( Fuentes[10], "Punteado" ); + strcpy( Fuentes[11], "Lineas semi-juntas" ); + NumFuentes = 12; + break; + // Fuente del Protector + // Letrero digital + case 5: + case 6: + // Realizamos una recopilaci¢n de fuentes .FNT +// NumFuentes = AdquirirArchivos( Fuentes, "FONTS\*.FNT" ); + NumFuentes = 0; + break; + default: + NumFuentes = 0; + } +} + + + + +//////////////////////////////////////////////////////////////////////// +//////////////////////C O N F I G U R A C I O N///////////////////////// +//////////////////////////////////////////////////////////////////////// +char ColorR[18*18+10], ColorG[18*18+10], ColorB[18*18+10]; +void RecuadraRGB( int Color ); + +int ObtenColor( void ) +{ + char BPush, ok, Reg; + int CurrCol, R, G, B; + + Optar( ENCUADRE, "Elija Color, o definal¢:", NULL ); + Imprime_Estaticos( CFG_BASE+3, "systm\\alum.img" ); + + CurrCol = 1; + RecuadraRGB( CurrCol ); + ok = 0; + do { + + Imprime_Bordes( CFG_BASEd + 1, ( CurrCol + 2 ), 11 ); + BPush = Comprueba_Secuencia( CFG_BASEd + 1, /*RatonParaColor*/NULL ); + Imprime_Bordes( CFG_BASEd + 1, ( CurrCol + 2 ), -1 ); + + switch ( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -2: // Hay una tecla normal en BUFFER + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + case -1: // Hay una tecla especial en BUFFER + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + // Aceptar + case 1: + Reg = 0; + ok = 1; + break; + // Cancelar + case 2: + Reg = 1; + ok = 1; + break; + default: + if ( BPush >=2 && BPush <= 18 ) + { + CurrCol = BPush - 2; + putimage( 413, 295 - R - 18, ColorR, COPY_PUT ); + putimage( 428, 295 - G - 18, ColorG, COPY_PUT ); + putimage( 443, 295 - B - 18, ColorB, COPY_PUT ); + RecuadraRGB( CurrCol ); + } + } + + } while( !ok ); + + if ( Reg == 1 ) + { + // Restauro los registros anteriores + + } + + Optar( ENCUADRE, "Elija Color, o definal¢:", NULL ); + + return (CurrCol - 1); +} + +void RecuadraRGB( int Color ) +{ + char R, G, B; + + R = G = B = 0; + + getimage( 413, 295 - R - 18, 413 + 18, 295 - R, ColorR ); + getimage( 428, 295 - G - 18, 428 + 18, 295 - G, ColorG ); + getimage( 443, 295 - B - 18, 443 + 18, 295 - B, ColorB ); + + ponicono( 413, 295 - R - 18, led_off, 1); + ponicono( 428, 295 - G - 18, led_off, 1); + ponicono( 443, 295 - B - 18, led_off, 1); + +} + +int ListaDesplegable( char Texto[][40], int NumEtos, int DesX, int DesY, char POS ) +{ + static int PorDonde, NumEl = -1; + + if ( NumEl != NumEtos ) + { + NumEl = NumEtos; PorDonde = 0; + } + PorDonde ++; if ( PorDonde >= NumEtos ) PorDonde = 0; + + + // Fuente + setfillstyle( SOLID_FILL, Config.TxtBgN ); + setcolor( Config.TxtFgN ); + bar( DesX+2, DesY+2, DesX + 175, DesY + 18 ); + outtextxy( DesX + 5, DesY + 2, Texto[PorDonde] ); + + return PorDonde; +} + + + +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛA partir de aqui, ya no es standard...ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +void MuestraCFG( int Campo, int Item, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80], draw; + int i; + + draw = 1; + switch( Item ) + { + case 0: + switch ( Campo ) + { + // Imprimir en un archivo ( SI/NO ) + case 0: + draw = 0; + X0 = 350; Y0 = 95; X1 = 370; Y1 = 115; + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? EGA_LIGHTGRAY : EGA_RED ); + bar( X0, Y0, X1, Y1 ); + + if ( !Config.Impresora.Printer ) + ponicono( X0+5, Y0+5, led_on, 1 ); + else + ponicono( X0+5, Y0+5, led_off, 1 ); + break; + // Archivo donde imprimir + case 1: + X0 = 541; Y0 = 99; X1 = 629; Y1 = 116; + sprintf( buffer, "%s", Config.Impresora.PrintTo ); + break; + // Numero de lineas + case 2: + X0 = 541; Y0 = 124; X1 = 629; Y1 = 141; + sprintf( buffer, "%d", Config.Impresora.Lineas ); + break; + + // Imprimir normal + case 3: + X0 = 466; Y0 = 176; X1 = 629; Y1 = 193; + sprintf( buffer, "%s", Config.Impresora.Normal ); + break; + // Imprimir Condensado + case 4: + X0 = 466; Y0 = 201; X1 = 631; Y1 = 218; + sprintf( buffer, "%s", Config.Impresora.Condensado ); + break; + // Comentario inicial ( Tickets ventas ) + case 5: + draw = 0; + X0 = 421; Y0 = 250; X1 = 629; Y1 = 310; + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + for ( i=0; i<4; i++) + outtextxy( X0+3, Y0 + i*15, &Config.Impresora.PrincipioTickets[i][0] ); + break; + // Comentario inicial ( Tickets ventas ) + case 6: + draw = 0; + X0 = 421; Y0 = 321; X1 = 629; Y1 = 381; + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + for ( i=0; i<4; i++) + outtextxy( X0+3, Y0 + i*15, &Config.Impresora.FinTickets[i][0] ); + break; + } + break; + case 1: + switch( Campo ) + { + case 0: + X0 = 541; Y0 = 39; X1 = 629; Y1 = 56; + { + auto char TipoProtector[3][10+1] = { "FUTURA", "AMPLIACION", "F.A." }; + sprintf( buffer, "%s", TipoProtector[Config.TProtector] ); + } + break; + case 1: + X0 = 541; Y0 = 64; X1 = 629; Y1 = 81; + sprintf( buffer, " %04d", (int)Config.Protector ); + break; + case 2: + X0 = 541; Y0 = 120; X1 = 629; Y1 = 134; + sprintf( buffer, " %02d", (int)Config.VProductos.CambioHorario ); + break; + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + X0 = 352; Y0 = 181 + 20*(Campo-3); X1 = 379; Y1 = Y0 + 16; + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( /*X0+*/381, Y0, /*X1+*/500, Y1 ); + sprintf( buffer, " :00 >-> %02d:00", (int)Config.HorasMedicion[ ( Campo - 3 + 1 ) % 6 ] ); + TextoDoble( X0, Y0, buffer ); + sprintf( buffer, " %02d", (int)Config.HorasMedicion[Campo-3] ); + break; + case 9: + case 10: + case 11: + case 12: + X0 = 352; Y0 = 331 + 20*(Campo-9); X1 = 379; Y1 = Y0 + 16; + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( /*X0+*/381, Y0, /*X1+*/500, Y1 ); + sprintf( buffer, " :00 >-> %02d:00", (int)Config.VProductos.HoraIni[ ( Campo - 9 + 1 ) % 4 ].hora ); + TextoDoble( X0, Y0, buffer ); + sprintf( buffer, " %02d", (int)Config.VProductos.HoraIni[ ( Campo - 9 ) % 4 ].hora ); + break; + // Permitir modificar P.C en compras ? + case 13: + X0 = 581; Y0 = 424; X1 = 629; Y1 = 441; + sprintf( buffer, "%s", Config.VProductos.CambioPC == 1 ? "SI" : "NO" ); + break; + // Reloj + case 14: + break; + } + break; + } + + if ( draw ) + { + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + } + + +} + +void EditCFG( int Campo, int Item, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80], draw; + + draw = 1; + switch( Item ) + { + case 0: + switch ( Campo ) + { + // Imprimir en un archivo ( SI/NO ) + case 0: + draw = 0; + X0 = 350; Y0 = 95; X1 = 370; Y1 = 115; + + Config.Impresora.Printer = !Config.Impresora.Printer; + + while( kbhit() ) getch(); + break; + // Archivo donde imprimir + case 1: + X0 = 541; Y0 = 99; X1 = 629; Y1 = 116; + strcpy( buffer, Config.Impresora.PrintTo ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy( Config.Impresora.PrintTo, buffer ); + break; + // Numero de lineas + case 2: + X0 = 541; Y0 = 124; X1 = 629; Y1 = 141; + sprintf( buffer, "%d", Config.Impresora.Lineas ); + if ( !( InputCadenaG( buffer, 1, 3, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + Config.Impresora.Lineas = atoi( buffer ); + + Config.Impresora.Lineas = Config.Impresora.Lineas < 30 ? 30 : Config.Impresora.Lineas; + break; + + // Imprimir normal + case 3: + X0 = 466; Y0 = 176; X1 = 629; Y1 = 193; + strcpy( buffer, Config.Impresora.Normal ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy( Config.Impresora.Normal, buffer ); + break; + // Imprimir Condensado + case 4: + X0 = 466; Y0 = 201; X1 = 631; Y1 = 218; + strcpy( buffer, Config.Impresora.Condensado ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy( Config.Impresora.Condensado, buffer ); + break; + // Comentario inicial ( Tickets ventas ) + case 5: + X0 = 424; Y0 = 250; X1 = 629; Y1 = 310; + EditComentario( (char *)(&Config.Impresora.PrincipioTickets[0][0]), 3, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 15 ); + break; + // Comentario inicial ( Tickets ventas ) + case 6: + X0 = 424; Y0 = 321; X1 = 629; Y1 = 381; + EditComentario( (char *)(&Config.Impresora.FinTickets[0][0]), 3, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 15 ); + break; + } + break; + case 1: + switch( Campo ) + { + case 0: + Config.TProtector = (++Config.TProtector)%3; + break; + case 1: + X0 = 541; Y0 = 64; X1 = 629; Y1 = 81; + sprintf( buffer, "%d", (int)Config.Protector ); + if ( !( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + Config.Protector = atof( buffer ); + break; + case 2: + X0 = 541; Y0 = 120; X1 = 629; Y1 = 134; + sprintf( buffer, "%d", (int)Config.VProductos.CambioHorario ); + if ( !( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + Config.VProductos.CambioHorario = atoi( buffer ) % 25; + break; + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + X0 = 352; Y0 = 181 + 20*(Campo-3); X1 = 379; Y1 = Y0 + 16; + sprintf( buffer, "%d", (int)Config.HorasMedicion[Campo-3] ); + if ( !( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + Config.HorasMedicion[Campo-3] = atoi( buffer ) % 25; + MuestraCFG( ( ( Campo - 1) < 3 ) ? 8 : ( Campo - 1), Item, NORMAL ); + } + break; + case 9: + case 10: + case 11: + case 12: + X0 = 352; Y0 = 331 + 20*(Campo-9); X1 = 379; Y1 = Y0 + 16; + sprintf( buffer, "%d", (int)Config.VProductos.HoraIni[Campo-9].hora ); + if ( !( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + Config.VProductos.HoraIni[Campo-9].hora = atoi( buffer ) % 25; + MuestraCFG( ( (Campo - 1) < 0 ) ? 12 : ( Campo - 1), Item, NORMAL ); + } + break; + // Permitir modificar P.C en compras ? + case 13: + X0 = 581; Y0 = 424; X1 = 629; Y1 = 441; + Config.VProductos.CambioPC = !Config.VProductos.CambioPC; + break; + } + break; + } + + while( kbhit() ) getch(); + +} +/* +void MuestraCFG( int Campo, int Item, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80], draw; + + draw = 1; + switch( Item ) + { + case 0: + switch ( Campo ) + { + // Imprimir en un archivo ( SI/NO ) + case 0: + draw = 0; + X0 = 350; Y0 = 95; X1 = 370; Y1 = 115; + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? EGA_LIGHTGRAY : EGA_RED ); + bar( X0, Y0, X1, Y1 ); + + if ( !Config.Impresora.Printer ) + ponicono( X0+5, Y0+5, led_on, 1 ); + else + ponicono( X0+5, Y0+5, led_off, 1 ); + break; + // Archivo donde imprimir + case 1: + X0 = 541; Y0 = 99; X1 = 629; Y1 = 116; + sprintf( buffer, "%s", Config.Impresora.PrintTo ); + break; + // Numero de lineas + case 2: + X0 = 541; Y0 = 124; X1 = 629; Y1 = 141; + sprintf( buffer, "%d", Config.Impresora.Lineas ); + break; + + // Imprimir normal + case 3: + X0 = 466; Y0 = 324; X1 = 629; Y1 = 341; + sprintf( buffer, "%s", Config.Impresora.Normal ); + break; + // Imprimir Condensado + case 4: + X0 = 466; Y0 = 349; X1 = 631; Y1 = 366; + sprintf( buffer, "%s", Config.Impresora.Condensado ); + break; + } + break; + } + + if ( draw ) + { + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + } + + +} +*/ + + + /**************************************************************************\ +|* *| +|* NoStandard *| +|* *| +|* Descripci¢n: *| +|* Opciones no standard de esta configuraci¢n... *| +|* *| +|* Entradas: N§ de opci¢n seleccionada *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void NoStandard( int BPush ) +{ + + +} \ No newline at end of file diff --git a/ALUM_DEF.H b/ALUM_DEF.H new file mode 100644 index 0000000..c18c9ba --- /dev/null +++ b/ALUM_DEF.H @@ -0,0 +1,209 @@ +#include // Estructuras varias + +// Para generar una demostraci¢n: activar la macro generadora. +// la demostraci¢n excluir  suficiente c¢digo como para no +// poder generar el programa completo a travez de ASM. +//#define DEMOSTRACION + +#define NORMAL 0 +#define INTENSO 1 + +#define ELIMINAR -1 +#define INSERTAR 1 + +#define ATRAS -1 +#define NUEVA_BUSQUEDA 0 +#define ADELANTE 1 + +#define SEC_OPTAR 2 +#define ENCUADRE 3 + +// Niveles de acceso al programa +#define TOTAL 0 +#define USUARIO 1 +#define NINGUNO 2 + + /**************************************************************************\ +|* *| +|* Estructura para el informe de datos varios... *| +|* *| + \**************************************************************************/ +typedef struct +{ + // Empresas + int NumAlum; // N£mero de antiguos alumnos + + // Datos de interes vario + long EspacioCon; // Espacio consumido por el progr. + long EspacioLib; // Espacio libre en disco. +} DatosInformativos; + + +struct hora +{ + char min; // Minutos y hora + char hora; +}; + + +struct VentaProductos +{ + struct hora HoraIni[5]; + struct hora HoraFin[5]; + + char CambioHorario; + char CambioPC; + + char ProcentajeMesa; +}; + +typedef struct +{ + char Printer; + char PrintTo[80]; + + char Lineas; + char Normal[80], Condensado[80]; + + char PrincipioTickets[4][25+1]; + char FinTickets[4][25+1]; +} IMPRESORA; + + +struct CajaDia +{ + char ImprimirTickets; + char CobroCompleto; + + char PorcentajeMesa; + + char SaltarInicio; +}; + + +typedef struct +{ + char FillBgS, FillBgC, FillBgF; + char NumFg, NumBg, NumLn; + char DigFg, DigBg; + char TxtBgN, TxtBgI, TxtFgN, TxtFgI; + + IMPRESORA Impresora; + + struct VentaProductos VProductos; + + struct CajaDia OpcionesCaja; + + + char TProtector; + double Protector; + + char Prot_fnt[80]; + char Vent_msg[80]; + + char HorasMedicion[6]; + + long UltimaEmpresa; + char Intentos; + +} CONFIG; + +struct CuentaBancaria +{ + int Oficina; // 4 dig. + int Sucursal; // 4 dig. + char DigControl; // 2 dig. + double NumCuenta; // 10 dig. +}; + +typedef struct +{ + long CodigoR; + + char Nombre[15+1]; + char Apellidos[30+1]; +// char Apellido2[15+1]; + + char Direccion[28+1]; + char Localidad[15+1]; + char Provincia[15+1]; + unsigned long CodPostal; + + char Telefono1[15+1]; + char Fax[15+1]; + + struct CuentaBancaria CC; + + char Notas[4][37+1]; + + char FuturaAmpliacion[1024]; +} AntiguosAlumnos; + +//ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß +//ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß +//ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß +//ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + char C1, C2, C3; + } p_graphics; + +int Numero_Digital( long numero, p_graphics *ND ); +void LeeFuentes(char *file); + +typedef struct + { + int x, y; // Coordenadas iniciales de muestreo + char ndigitos; // n£mero de digitos a mostrar + char AX, AY; // factor de espaciado + char C1, C2, C3; // colores de fondo, texto, borde + + // Datos privados y uso interno exclusivamente + unsigned int Flen; // longitud de la frase actual + char BitByte; // bit del byte por el que va en el recorrido + char currByte; // byte actual dentro de la frase + } p_Ampliada; + + +void Fuente_Amplia( char *Frase, p_Ampliada far *FA ); +void FuenteAmplia( char *Frase, p_Ampliada far *FA ); +void Fuente_Amplia3( char *Frase, p_Ampliada *FA ); + + + +extern struct date FechaGestionActual; + +extern CONFIG Config; + +extern char led_on [18] [18]; +extern char led_off [18] [18]; +extern char flecha [18] [18]; + +int Optar( int optar, ... ); +void ponicono(int x,int y,char matriz[18][18], char pos); +void formatea_u_long( unsigned long Numero, char *Inter_Chg); +void formatea_long( long Numero, char *Inter_Chg); +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int X0, int Y0, int X1, int Y1); +int EditComentario( char *Comentario, int Lineas, int Columnas, int cc, int cf, int X0, int Y0, int X1, int Y1, int Inc ); + +void TextoDoble( int x, int y, char *texto ); +void AnulaInterrupcion(void); + +extern char IntVect; +extern char VisualMode; + +void Error( int code, char *MensajeError ); + +extern int far RatonVentas(void); + +// Cambia las opciones de configuraci¢n. +void ConfigurarEntorno( void ); + +// Gestion de Alumnos +void GstAlumnos(void); + +int Comprueba_Impresora(void); \ No newline at end of file diff --git a/ALUM_GST.CPP b/ALUM_GST.CPP new file mode 100644 index 0000000..86c5396 --- /dev/null +++ b/ALUM_GST.CPP @@ -0,0 +1,1557 @@ +#include +#include +#include +#include +#include +#include + +#include "c:\program\src_dos\libs\make_bot\make_bot.h" +#include "c:\program\src_dos\libs\bdatos\bdatos.hh" +#include "alum_def.h" + +#define NLINEAS_Alum 9 + +BDatos BAlum; +AntiguosAlumnos SAlum; // Estructura de Nombrees + + /*************************************\ +| | +| Parte Principal del M¢dulo | +| | + \*************************************/ +void DuplicaBaseNombrees(void); +void MuestraDatosVAlum( int linea); +void MuestraDatosAlum( long RowStart ); +void MuestraAyudaAlum( char columna ); +//int CompruebaPulsosEstrellas( void ); +void EditItemAlum( char columna, int linea ); +void AlumNuevoRegistro( AntiguosAlumnos *MSAlum ); +void MuestraAlum( char columna, int linea, char como ); +void ObtenCoordenadasAlum( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ); + + /*************************************\ +| | +| Parte Secundaria del M¢dulo | +| | +| Secci¢n de Busqueda de Nombrees | +| | + \*************************************/ +void ObtenCoordenadasMatchAlum( char Row, int *X0, int *Y0, int *X1, int *Y1 ); +void MatchDrawAlum( char Row, AntiguosAlumnos MAlum, char como ); +void BuscaAlum( char TipoBusqueda, char *CurrRow, long *CurrAlum ); +int Match_Alum( AntiguosAlumnos *A, AntiguosAlumnos *B ); +void EditMatchAlum( char Row, AntiguosAlumnos * MAlum ); +int ObtenMatchAlum( AntiguosAlumnos *MAlum ); + + /*************************************\ +| | +| Parte Tercera del M¢dulo | +| | +| Secci¢n para la impresi¢n | +| | + \*************************************/ +void ImprimeFichaAAlum(void); +void ImprimeNombrees( char como ); +void ImprimeCabeceraAlum( char como, FILE *file_out ); + + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte principal del m¢dulo Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* InfoAlumnos *| +|* *| +|* Descripci¢n: *| +|* Controla la introduccion de datos y muestreo asi como todo *| +|* el interfaz de usuario... *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void GstAlumnos(void) +{ + char buffer[100], ok = 0, i; + int BPush, key; + + char oldCol = -1; + char CurrRow; // Linea sobre la que estamos + char CurrCol; // Columna sobre la que estamos + long CurrAlum; // Producto sobre el que estamos posicionados a golpes + + // Rellenamos la pantalla con un fondo atractivo... + setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 ); + Imprime_Estaticos( 30, "systm\\alum.img"); // Imprime botones estaticos 'Seccion 30' + + sprintf( buffer, "datos\\alum.dbf" ); + + if ( BAlum.AbrirReg( buffer, sizeof( AntiguosAlumnos ) ) == ERROR ) + Error(0x01, BAlum.cError); + // Si no hay registros, creamos uno almenos. + if ( BAlum.Registros() == 0 ) + { + AlumNuevoRegistro( &SAlum ); + if ( BAlum.InsReg( (void *)&SAlum, BAlum.Registros(), ARRIBA ) == ERROR ) + Error(0x01, BAlum.cError); + } + + CurrAlum = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrRow + CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, 0 ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + + CurrCol = 0; + + do { + if ( CurrCol != oldCol ) + { + oldCol = CurrCol; MuestraAyudaAlum( CurrCol ); + } + + // Si estamos en la parte de arriba, dejamos ver sobre que linea nos encontramos + for ( i = 0; i < 4; i++ ) + MuestraAlum( i, CurrRow, (CurrCol >= 4) ? INTENSO : NORMAL ); + + MuestraAlum( CurrCol, CurrRow, INTENSO ); + BPush = Comprueba_Secuencia( 1, NULL ); + MuestraAlum( CurrCol, CurrRow, NORMAL ); + + switch ( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER +/* + if ( ( BPush = CompruebaPulsosEstrellas() ) != 0 ) + { + MuestraAlum( BPush, CurrRow, INTENSO ); + if ( BAlum.EscribeReg( (void *)&SAlum, (CurrRow + CurrAlum) ) == ERROR ) + Error(0x01, BAlum.cError); + } +*/ + break; + case -2: // Hay una tecla normal en BUFFER + if ( ( key = getch() ) != 27 ) + { + if ( key != 13 ) + ungetch( key ); + EditItemAlum( CurrCol, CurrRow ); + if ( BAlum.EscribeReg( (void *)&SAlum, (CurrRow + CurrAlum) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraAlum( CurrCol, CurrRow, NORMAL ); + CurrCol++; if ( CurrCol > 17 ) CurrCol = 17; + } + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + CurrCol--; if ( CurrCol < 0 ) CurrCol = 17; + break; + // Flecha Derecha + case 77: + case 9: + CurrCol++; if ( CurrCol > 17 ) CurrCol = 0; + break; + // Flecha Arriba + case 72: + if ( CurrCol < 4 ) + { + if ( (CurrRow + CurrAlum) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum; + if ( CurrAlum < 0 ) CurrAlum = 0; + + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + } else { + CurrCol--; if ( CurrCol < 0 ) CurrCol = 17; + } + break; + // Flecha Abajo + case 80: + if ( CurrCol < 4 ) + { + if ( ( CurrRow + CurrAlum ) < BAlum.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_Alum - 1 ) + { + CurrRow = 0; CurrAlum += NLINEAS_Alum; + + while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + } else + CurrRow++; + } + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + } else { + CurrCol++; if ( CurrCol > 17 ) CurrCol = 0; + } + break; + // Inicio + case 71: + CurrRow = 0; + if ( CurrAlum != 0 ) + { + CurrAlum = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + } + + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + break; + // Fin + case 79: + CurrRow = 0; + if ( CurrAlum != BAlum.Registros() - NLINEAS_Alum ) + { + CurrAlum = BAlum.Registros() - NLINEAS_Alum; + if ( CurrAlum < 0 ) + { + CurrAlum = 0; + CurrRow = BAlum.Registros()-1; + } + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + } + + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + break; + } + break; + // Imprimir Alumerencias + case 1: + ImprimeFichaAAlum(); + break; + // Menu Principal + case 2: + ok = 1; + break; + // Eliminar + case 3: + if ( Optar( 1, "ATENCION", "Esta seguro que desea", "eliminar al Alumno actual.", NULL ) ) + { + if ( BAlum.DelReg( CurrAlum + CurrRow ) == ERROR ) + Error(0x01, BAlum.cError); + if ( BAlum.Registros() == 0 ) + { + AlumNuevoRegistro( &SAlum ); + if ( BAlum.InsReg( (void *)&SAlum, BAlum.Registros(), ARRIBA ) == ERROR ) + Error(0x01, BAlum.cError); + CurrRow = 0; + } else + + // Si he borrado el £ltimo registro subo una linea + if ( (CurrAlum+CurrRow) >= ( BAlum.Registros() - 2 ) ) + { + if ( (CurrRow + CurrAlum) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum; + if ( CurrAlum < 0 ) CurrAlum = 0; + + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + } + break; + // Insertar + case 4: + AlumNuevoRegistro( &SAlum ); + if ( BAlum.InsReg( (void *)&SAlum, (CurrAlum + CurrRow), ARRIBA ) == ERROR ) + Error(0x01, BAlum.cError); + CurrCol = 5; + if ( ( CurrRow + CurrAlum ) < BAlum.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_Alum - 1 ) + { + CurrRow = 0; CurrAlum += NLINEAS_Alum; + + while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--; + + } else + CurrRow++; + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + break; + // Retroceso R pido + case 5: + CurrRow = NLINEAS_Alum - 1; CurrAlum -= NLINEAS_Alum; + if ( CurrAlum < 0 ) CurrAlum = 0; + + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrAlum ) >= BAlum.Registros() && CurrAlum > 0 ) CurrAlum++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + break; + // Busqueda Atras + case 6: + BuscaAlum( ATRAS, &CurrRow, &CurrAlum ); + break; + // Buscar + case 7: + BuscaAlum( NUEVA_BUSQUEDA, &CurrRow, &CurrAlum ); + break; + // Busqueda Adelante + case 8: + BuscaAlum( ADELANTE, &CurrRow, &CurrAlum ); + + break; + // AvanceR pido + case 9: + CurrRow = 0; CurrAlum += NLINEAS_Alum; + + while ( (CurrAlum + CurrRow) >= BAlum.Registros() ) CurrAlum--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, (CurrAlum + CurrRow) ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( CurrRow ); + break; + default: + break; + } + + } while( !ok ); + + BAlum.CerrarReg(); +} + + + + /**************************************************************************\ +|* *| +|* MuestraDatosAlum *| +|* *| +|* Descripci¢n: *| +|* Dado un registro, se muestran sucesivamente este y todos *| +|* los que hay por debajo de ‚l, hasta que se agote la base *| +|* o no quepan mas en la pantalla. *| +|* *| +|* Entradas: Registro por el que comenzar *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void MuestraDatosAlum( long RowStart ) +{ + int linea, campo; + char dev; + int X0, Y0, X1, Y1; + + // Imprimo la NLINEAS_Alum que caben en la pantalla + dev = OK; + for ( linea=0; linea < NLINEAS_Alum && (RowStart + linea) < BAlum.Registros()/*dev == OK*/; linea++ ) + { + dev = BAlum.LeeReg( (void *)&SAlum, RowStart + linea ); + if ( dev == OK ) + // Por cada linea hay 4 campos, ehhh!!! + for ( campo=0; campo < 4; campo++ ) + MuestraAlum( campo, linea, NORMAL ); + } + + // Ahora limpio los restantes huecos si los hay + if ( linea < NLINEAS_Alum ) //dev != OK ) + { + //linea--; + setfillstyle( SOLID_FILL, Config.TxtBgN ); + for ( ; linea < NLINEAS_Alum; linea++ ) + for ( campo=0; campo < 4; campo++ ) + { + ObtenCoordenadasAlum( campo, linea, &X0, &Y0, &X1, &Y1 ); + bar( X0, Y0, X1, Y1 ); + } + } +} + +void MuestraDatosVAlum( int linea ) +{ + int campo; + + // Mostramos los campos que faltan, ( 1¦ Linea ) + // mas 5 que pertenecen a las estrellas + for ( campo=4; campo < 18; campo++ ) + MuestraAlum( campo, linea, NORMAL ); + +} + + /**************************************************************************\ +|* *| +|* MuestraAlum *| +|* *| +|* Descripci¢n: *| +|* Reescribe el campo dado, seg£n la fila, y la intensidad *| +|* *| +|* Entradas: *| +|* columna campo ha mostar *| +|* linea linea en la que nos encontramos *| +|* como intensidad del texto (NORMAL/INTENSO) *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void MuestraAlum( char columna, int linea, char como ) +{ + char buffer[80], draw; + char buffer1[80], i; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasAlum( columna, linea, &X0, &Y0, &X1, &Y1 ); + + draw = 1; + + + switch( columna ) + { + // Nombre del Alumno + case 0: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, "%15s", SAlum.Nombre ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // Apellidos + case 1: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, "%30s", SAlum.Apellidos ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // Direccion + case 2: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, "%30s", SAlum.Direccion ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // Telefono1 + case 3: + sprintf ( buffer, "%15s", SAlum.Telefono1 ); + break; + + + // Codigo + case 4: + sprintf ( buffer, " %08ld", BAlum.RegActual() ); + break; + // Nombre del Alumno + case 5: + sprintf ( buffer, "%29s", SAlum.Nombre ); + break; + // Apellidos + case 6: + sprintf ( buffer, "%29s", SAlum.Apellidos ); + break; + // Direcci¢n + case 7: + sprintf ( buffer, "%29s", SAlum.Direccion ); + break; + // Localidad + case 8: + sprintf ( buffer, "%15s", SAlum.Localidad ); + break; + // Provincia + case 9: + sprintf ( buffer, "%15s", SAlum.Provincia ); + break; + // Codigo Postal + case 10: + sprintf ( buffer, "%09lu", SAlum.CodPostal ); + break; + + // Telefono1 + case 11: + sprintf ( buffer, "%15s", SAlum.Telefono1 ); + break; + // Fax + case 12: + sprintf ( buffer, "%15s", SAlum.Fax ); + break; + + // CuentaBancaria 1 / 4 + case 13: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, " %04d", SAlum.CC.Oficina ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // CuentaBancaria 2 / 4 + case 14: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, " %04d", SAlum.CC.Sucursal ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // CuentaBancaria 3 / 4 + case 15: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, " %02d", (int)SAlum.CC.DigControl ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // CuentaBancaria 4 / 4 + case 16: + draw = 0; + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + sprintf ( buffer, " %010.0f", SAlum.CC.NumCuenta ); + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + + // Comentario + case 17: + draw = 0; + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + for ( i = 0; i < 4; i++ ) + outtextxy( X0, Y0 + 14*i, SAlum.Notas[i] ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; +/* + // Estrellas + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + if ( ( SAlum.Estrellas & ( 0x01 << (columna - 15) ) ) >> (columna - 15 ) ) + ponicono( X0+5, Y0+5, led_on, 1 ); + else + ponicono( X0+5, Y0+5, led_off, 1 ); + // En las estrellas no hay que imprimir nada + draw = 0; + break; +*/ + + } + + if ( draw ) + { + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + } +} + + + /**************************************************************************\ +|* *| +|* MuestraAyudaAlum *| +|* *| +|* Descripci¢n: *| +|* Muestra una peque¤a descripcion del contenido para el campo *| +|* *| +|* Entradas: *| +|* columna campo ha mostar su ayuda *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void MuestraAyudaAlum( char columna ) +{ + char buffer1[80]; + + switch( columna ) + { + // Nombre del Alumno + case 0: + sprintf ( buffer1, "Nombre del Antiguo alumno" ); + break; + // Apellidos + case 1: + sprintf ( buffer1, "1er y 2do Apellido del antiguo alumno" ); + break; + // Telefono 1 + case 2: + sprintf ( buffer1, "N£mero de tel‚fono del antiguo Alumno" ); + break; + // Fax + case 3: + sprintf ( buffer1, "Fax o segundo tel‚fono del antiguo Alumno" ); + break; + + + // Codigo + case 4: + sprintf ( buffer1, "Codigo secuencial. ( DATO PARA EL BANCO )" ); + break; + // Nombre del Alumno + case 5: + sprintf ( buffer1, "Nombre del Antiguo alumno" ); + break; + // Apellidos + case 6: + sprintf ( buffer1, "1er y 2do Apellido del antiguo alumno" ); + break; + // Direccion + case 7: + sprintf ( buffer1, "Direcci¢n, calle, n§..." ); + break; + // Localidad + case 8: + sprintf ( buffer1, "Localidad" ); + break; + // Provincia + case 9: + sprintf ( buffer1, "Provincia" ); + break; + // C¢digo postal + case 10: + sprintf ( buffer1, "C¢digo Postal" ); + break; + // Telefono 1 + case 11: + sprintf ( buffer1, "N£mero de tel‚fono del antiguo Alumno" ); + break; + // Fax + case 12: + sprintf ( buffer1, "Fax o segundo tel‚fono del antiguo Alumno" ); + break; + // Codigo Cuenta Cliente + // Oficina + case 13: + sprintf ( buffer1, "Oficina 4 dig." ); + break; + // Sucursal + case 14: + sprintf ( buffer1, "Sucursal 4 dig." ); + break; + // Digito Control. + case 15: + sprintf ( buffer1, "D¡gito control 2 dig." ); + break; + // N§ Cuenta + case 16: + sprintf ( buffer1, "N£mero de cuenta 10 dig." ); + break; + + case 17: + sprintf ( buffer1, "Breves notas sobre el antiguo alumno" ); + break; + } + + // Ayuda reducida + setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 ); + // Imprime la ayudita + setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 ); + +} + + + /**************************************************************************\ +|* *| +|* EditItemAlum *| +|* *| +|* Descripci¢n: *| +|* Se encarga de editar y validar el campo. *| +|* *| +|* Entradas: *| +|* columna campo ha editar *| +|* linea linea en la que nos encontramos *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void EditItemAlum( char columna, int linea ) +{ + char buffer[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasAlum( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Codigo Real + case 4: +/* + sprintf ( buffer, "%lu", SAlum.CodigoR ); + if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CodigoR = atol( buffer ); + MuestraAlum( 0, linea, NORMAL ); + MuestraAlum( 4, linea, NORMAL ); +*/ + break; + // Nombre del Alumno + case 5: + strcpy ( buffer, SAlum.Nombre ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Nombre, buffer ); + MuestraAlum( 0, linea, NORMAL ); +// MuestraAlum( 5, linea, NORMAL ); + + break; + // 1er y 2do Apellidos + case 6: + strcpy ( buffer, SAlum.Apellidos ); + if ( !( InputCadenaG( buffer, 0, 28, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Apellidos, buffer ); + MuestraAlum( 1, linea, NORMAL ); +// MuestraAlum( 6, linea, NORMAL ); + + break; + // Direccion + case 7: + sprintf ( buffer, "%s", SAlum.Direccion ); + if ( !( InputCadenaG( buffer, 0, 28, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Direccion, buffer ); + MuestraAlum( 2, linea, NORMAL ); + break; + // Poblaci¢n + case 8: + sprintf ( buffer, "%s", SAlum.Localidad ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Localidad, buffer ); + break; + // Provincia + case 9: + sprintf ( buffer, "%s", SAlum.Provincia ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Provincia, buffer ); + break; + // C¢digo Postal + case 10: + sprintf ( buffer, "%lu", SAlum.CodPostal ); + if ( !( InputCadenaG( buffer, 0, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CodPostal = atol ( buffer ); + break; + + + // Telefono + case 11: + sprintf ( buffer, "%s", SAlum.Telefono1 ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Telefono1, buffer ); + MuestraAlum( 3, linea, NORMAL ); + break; + // Fax + case 12: + sprintf ( buffer, "%s", SAlum.Fax ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SAlum.Fax, buffer ); +// MuestraAlum( 3, linea, NORMAL ); + break; + + // Codgio Cuenta + // Oficina + case 13: + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + sprintf ( buffer, "%d", SAlum.CC.Oficina ); + if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CC.Oficina = atoi ( buffer ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // Sucursal + case 14: + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + sprintf ( buffer, "%d", SAlum.CC.Sucursal ); + if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CC.Sucursal = atoi ( buffer ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // Dig.Control + case 15: + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + sprintf ( buffer, "%d", (int)SAlum.CC.DigControl ); + if ( !( InputCadenaG( buffer, 0, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CC.DigControl = (char)atoi ( buffer ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + // C¢digo Cuenta Cliente + case 16: + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + + sprintf ( buffer, "%Ld", SAlum.CC.NumCuenta ); + if ( !( InputCadenaG( buffer, 0, 10, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SAlum.CC.NumCuenta = atof ( buffer ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + + // Comentario + case 17: + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + EditComentario( (char *)(&SAlum.Notas[0][0]), 3, 37, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 14 ); + settextstyle( SMALL_FONT, HORIZ_DIR, 5 ); + break; + } + +} + + + /**************************************************************************\ +|* *| +|* ObtenCoordenadasAlum *| +|* *| +|* Descripci¢n: *| +|* Obtiene las coordenadas de acotacion para el campo pedido *| +|* *| +|* Entradas: *| +|* columna campo del que obtener las coordenadas *| +|* linea linea en la que nos encontramos *| +|* X0 Y0 X1 Y1 Punteros para devolver las coordenadas *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ObtenCoordenadasAlum( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + // Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 ) + *Y0 = 264 + 19*linea; + *Y1 = *Y0 + 17; + + switch( columna ) + { + case 0: + *X0 = 7; *X1 = 108; + break; + case 1: + *X0 = 107; *X1 = 298; + break; + case 2: + *X0 = 307; *X1 = 495; + break; + case 3: + *X0 = 505; *X1 = 633; + break; + + case 4: + *X0 = 67; *Y0 = 7; + *X1 = 148; *Y1 = 28; + break; + case 5: + *X0 = 152; *Y0 = 42; + *X1 = 390; *Y1 = 63; + break; + case 6: + *X0 = 152; *Y0 = 67; + *X1 = 390; *Y1 = 88; + break; + case 7: + *X0 = 152; *Y0 = 112; + *X1 = 390; *Y1 = 133; +/* + *X0 = 92; *Y0 = 112; + *X1 = 388; *Y1 = 133; +*/ + break; + case 8: + *X0 = 92; *Y0 = 137; + *X1 = 223; *Y1 = 158; + break; + case 9: + *X0 = 312; *Y0 = 137; + *X1 = 438; *Y1 = 158; + break; + case 10: + *X0 = 522; *Y0 = 137; + *X1 = 598; *Y1 = 158; + break; + case 11: + *X0 = 92; *Y0 = 162; + *X1 = 245; *Y1 = 183; + break; + case 12: + *X0 = 255; *Y0 = 162; + *X1 = 388; *Y1 = 183; + break; + + case 13: + *X0 = 10; *Y0 = 209; + *X1 = 60; *Y1 = 220; + break; + case 14: + *X0 = 65; *Y0 = 209; + *X1 =115; *Y1 = 220; + break; + case 15: + *X0 =120; *Y0 = 209; + *X1 =145; *Y1 = 220; + break; + case 16: + *X0 =150; *Y0 = 209; + *X1 =250; *Y1 = 220; + break; + + case 17: + *X0 = 402; *Y0 = 165; + *X1 = 633; *Y1 = 221; + break; + } + + *X0 += 2; + *X1 -= 2; + +} + + /**************************************************************************\ +|* *| +|* AlumNuevoRegistro *| +|* *| +|* Descripci¢n: *| +|* Limpia el buffer, para un nuevo registro. *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void AlumNuevoRegistro( AntiguosAlumnos *NSAlum ) +{ + int i, j; + + NSAlum -> CodigoR = 0; // Codigos asignados a los Alumnos + strcpy( NSAlum -> Nombre , "" ); // Nombre del Nombre + // Nombre del Nombre + strcpy( NSAlum -> Apellidos, "" ); + + strcpy( NSAlum -> Telefono1, "" ); // Tel‚fono y fax del Nombre + strcpy( NSAlum -> Fax, "" ); // + + strcpy( NSAlum -> Direccion, "" ); // Direccion + + strcpy( NSAlum -> Localidad, "" ); // Localidad + strcpy( NSAlum -> Provincia, "" ); // Alumincia + NSAlum -> CodPostal = 0; // C¢digo Postal + + + NSAlum -> CC.Oficina = 0; // Oficina + NSAlum -> CC.Sucursal = 0; // Sucursal + NSAlum -> CC.DigControl = 0; // DC + NSAlum -> CC.NumCuenta = 0; // NumCuenta + +// NSAlum -> Estrellas = 0; // Estrellas ( lo que imagina el cliente ) + for ( i = 0; i < 1024; i++ ) + NSAlum -> FuturaAmpliacion[i] = '\0'; + + for ( i = 0; i < 4; i++ ) + for ( j = 0; j < 37; j++ ) + SAlum.Notas[i][j] = '\0'; + + +} + +/* +int CompruebaPulsosEstrellas(void) +{ + char enc, i; + + enc = 0; + + for ( i=0; i < 8; i++ ) + { + if ( y_raton > 190 && y_raton < 215 && + x_raton > ( 90 + 30 * i ) && x_raton < ( 90 + 30 * i + 25 ) ) + { + if ( SAlum.Estrellas & ( 0x01 << i ) ) + SAlum.Estrellas -= ( 0x01 << i ); + else + SAlum.Estrellas += ( 0x01 << i ); + + enc = 15 + i; + break; + } + } + + Anclar_Raton(); + + return enc; +} +*/ + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte secundaria del m¢dulo Û +// Û Û +// Û Secci¢n de Busqueda de refecencias Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* BuscaAlum *| +|* *| +|* Descripci¢n: *| +|* Busca una referencia por su n§ o descripcion *| +|* *| +|* Entradas: *| +|* ATRAS Busca otra coincidencia hacia atras *| +|* NUEVA_BUSQUEDA Inicia una nueva busqueda *| +|* ADELANTE Busca otra coincidencia hacia delante *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void BuscaAlum( char TipoBusqueda, char *CurrRow, long *CurrAlum ) +{ + static AntiguosAlumnos MAlum; + char enc; long i; + + + switch ( TipoBusqueda ) + { + case NUEVA_BUSQUEDA: + if ( ObtenMatchAlum( &MAlum ) != OK ) + return; + i = 0; + break; + case ATRAS: + case ADELANTE: + i = ( *CurrRow + *CurrAlum ) + TipoBusqueda; + break; + } + + Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL ); + enc = 0; + while ( i < BAlum.Registros() && !enc ) + { + if ( BAlum.LeeReg( (void *)&SAlum, i ) == ERROR ) + Error( 0x01, BAlum.cError); + if ( Match_Alum( &SAlum, &MAlum ) ) + enc = 1; + else + i++; + } + + Optar( ENCUADRE, NULL ); + + if ( enc ) + { + *CurrRow = 0; *CurrAlum = i; + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosAlum( *CurrRow + *CurrAlum ); + if ( BAlum.LeeReg( (void *)&SAlum, *CurrAlum ) == ERROR ) + Error(0x01, BAlum.cError); + MuestraDatosVAlum( *CurrRow ); + } else + switch( TipoBusqueda ) + { + case NUEVA_BUSQUEDA: + Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL ); + break; + case ATRAS: + case ADELANTE: + Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL ); + break; + } + + if ( BAlum.LeeReg( (void *)&SAlum, (*CurrRow + *CurrAlum) ) == ERROR ) + Error( 0x01, BAlum.cError); + + +} + + /**************************************************************************\ +|* *| +|* Match_Alum *| +|* *| +|* Descripci¢n: *| +|* Compara dos registros y devuelve la posible coincidencia *| +|* *| +|* Entradas: *| +|* Registros a comparar *| +|* *| +|* Salidas: *| +|* Resultado de la comparaci¢n *| +|* *| + \**************************************************************************/ +int Match_Alum( AntiguosAlumnos *A, AntiguosAlumnos *B ) +{ + if ( B -> Nombre[0] != '\0' ) + return ( strncmpi( A -> Nombre, B -> Nombre, strlen( B -> Nombre ) ) == 0 ); + if ( B -> Apellidos[0] != '\0' ) + return ( strncmpi( A -> Apellidos, B -> Apellidos, strlen( B -> Apellidos ) ) == 0 ); + if ( B -> Direccion[0] != '\0' ) + return ( strncmpi( A -> Direccion, B -> Direccion, strlen( B -> Direccion ) ) == 0 ); + if ( B -> Telefono1[0] != '\0' ) + return ( strncmpi( A -> Telefono1, B -> Telefono1, strlen( B -> Telefono1 ) ) == 0 ); + + return 0; +} + + /**************************************************************************\ +|* *| +|* ObtenMatchAlum *| +|* *| +|* Descripci¢n: *| +|* Obtine los patrones de busqueda necesarios *| +|* *| +|* Entradas: *| +|* Estructura donde guardar el patron de busqueda *| +|* *| +|* Salidas: *| +|* OK La entrada es correcta *| +|* ERROR El usuario interrumpio la busqueda *| +|* *| + \**************************************************************************/ +int ObtenMatchAlum( AntiguosAlumnos *MAlum ) +{ + char Row, ok, i; + int BPush, key, DEV; + struct textsettingstype texttypeinfo; + + gettextsettings( &texttypeinfo ); + + Optar( ENCUADRE, "Comando: Buscar", NULL ); + Imprime_Estaticos( 31, "systm\\alum.img" ); + + ok = 0; Row = 0; + + AlumNuevoRegistro( MAlum ); + + do + { + MatchDrawAlum(Row, *MAlum, INTENSO); + BPush = Comprueba_Secuencia( SEC_OPTAR, NULL ); + MatchDrawAlum(Row, *MAlum, NORMAL); + + switch ( BPush ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + case -2: + if ( ( key = getch() ) != 13 && key != 27 ) + ungetch( key ); + EditMatchAlum( Row, MAlum ); + for ( i=0; i < 4; i++ ) + MatchDrawAlum(i, *MAlum, NORMAL); + break; + case -1: + switch ( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + // Flecha Arriba + case 72: + Row--; if ( Row < 0 ) Row = 3; + break; + // Flecha Derecha + case 77: + case 9: + // Flecha Abajo + case 80: + Row++; if ( Row > 3 ) Row = 0; + break; + } + break; + case 1: + DEV = OK; ok = 1; + break; + case 2: + DEV = ERROR; ok = 1; + break; + } + + } while ( !ok ); + + Optar( ENCUADRE, NULL ); + + settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize ); + + return DEV; + +} + + /**************************************************************************\ +|* *| +|* EditMatchAlum *| +|* *| +|* Descripci¢n: *| +|* Edita el patron de busqueda *| +|* *| +|* Entradas: *| +|* Campo a editar, y lugar donde almacenarlo *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void EditMatchAlum( char Row, AntiguosAlumnos * MAlum ) +{ + int X0, Y0, X1, Y1; + char buffer[80]; + + ObtenCoordenadasMatchAlum( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 0: + sprintf( buffer, "%s", MAlum -> Nombre ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + AlumNuevoRegistro( MAlum ); + strcpy( MAlum -> Nombre, buffer ); + } + break; + case 1: + sprintf( buffer, "%s", MAlum -> Apellidos ); + if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + AlumNuevoRegistro( MAlum ); + strcpy ( MAlum -> Apellidos, buffer ); + } + break; + case 2: + sprintf( buffer, "%s", MAlum -> Direccion ); + if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + AlumNuevoRegistro( MAlum ); + strcpy ( MAlum -> Direccion, buffer ); + } + break; + case 3: + sprintf( buffer, "%s", MAlum -> Telefono1 ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + AlumNuevoRegistro( MAlum ); + strcpy ( MAlum -> Telefono1, buffer ); + } + break; + } + + + +} + + /**************************************************************************\ +|* *| +|* MatchDrawAlum *| +|* *| +|* Descripci¢n: *| +|* Escribe los distintos campos seg£n se le indique *| +|* *| +|* Entradas: *| +|* Campo a mostrar, lugar donde se encuentra, y como mostrarlo *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void MatchDrawAlum( char Row, AntiguosAlumnos MAlum, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80]; + + ObtenCoordenadasMatchAlum( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 0: + sprintf( buffer, "%15s", MAlum.Nombre ); + break; + case 1: + strncpy( buffer, MAlum.Apellidos, 25 ); + buffer[26] = '\0'; + break; + case 2: + strncpy( buffer, MAlum.Direccion, 25 ); + buffer[26] = '\0'; + break; + case 3: + strncpy( buffer, MAlum.Telefono1, 15 ); + buffer[15] = '\0'; + break; + } + + setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + bar( X0, Y0, X1, Y1 ); + setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + outtextxy( X0+2, Y0, buffer ); + +} + + /**************************************************************************\ +|* *| +|* MatchDrawAlum *| +|* *| +|* Descripci¢n: *| +|* Obtiene las coordenadas relativas al campo dado. *| +|* *| +|* Entradas: *| +|* Campo a obtener las coordenadas, y coordenadas de salida *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ObtenCoordenadasMatchAlum( char Row, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + switch( Row ) + { + case 0: + *X0 = 265; *X1 = 465; + *Y0 = 200; *Y1 = 220; + break; + case 1: + *X0 = 265; *X1 = 465; + *Y0 = 225; *Y1 = 245; + break; + case 2: + *X0 = 265; *X1 = 465; + *Y0 = 250; *Y1 = 275; + break; + case 3: + *X0 = 265; *X1 = 465; + *Y0 = 280; *Y1 = 305; + break; + case 4: + *X0 = 385; *X1 = 465; + *Y0 = 250; *Y1 = 275; + break; + case 5: + *X0 = 330; *X1 = 365; + *Y0 = 275; *Y1 = 300; + break; + } + + (*X0) ++; (*Y0) ++; + (*X1) --; (*Y1) --; + +} + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte secundaria del m¢dulo Û +// Û Û +// Û Secci¢n de Busqueda de refecencias Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* ImprimeNombrees *| +|* *| +|* Descripci¢n: *| +|* Imprime todas las referencias seg£n se le indique *| +|* *| +|* Entradas: *| +|* Como imprimir las referencias *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ImprimeNombrees( char como ) +{ + long i, old_reg; + char buffer[80]; + char Pag=0; + + + FILE *file_out; + + old_reg = BAlum.RegActual(); + + if ( !Config.Impresora.Printer ) + { + if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL ) + return; + } else { + file_out = stdprn; + while ( !Comprueba_Impresora() ) + { + if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) ) + return; + } + } + + + ImprimeCabeceraAlum(como, file_out); + + for ( i=0; i Config.Impresora.Lineas ) { Pag = 1; fputc( 12, file_out ); } + BAlum.LeeReg( (void *)&SAlum, i ); + switch( como ) + { + // Listado General + case 1: + sprintf( buffer, "%s %s", SAlum.Nombre, SAlum.Apellidos ); + buffer[31] = '\0'; + fprintf( file_out, "%-30s %-28s %-15s\n\r", buffer, SAlum.Direccion, SAlum.Telefono1 ); + break; + // Listado Etiquetas + case 2: + sprintf( buffer, "%s, %s", SAlum.Nombre, SAlum.Apellidos ); + buffer[31] = '\0'; + fprintf( file_out, "%30s\n", buffer ); + fprintf( file_out, "%30s\n", SAlum.Direccion ); + fprintf( file_out, "%15s (%15s)\n", SAlum.Localidad, SAlum.Provincia ); + fprintf( file_out, "C¢d. Postal: %lu\n", SAlum.CodPostal ); + + fprintf( file_out, "\n" ); + + break; + // Facturas Bancarias ( IMPRESO ) + case 3: + fprintf( file_out, " %04d %04d %02d %010.0f", SAlum.CC.Sucursal, SAlum.CC.Oficina, SAlum.CC.DigControl, SAlum.CC.NumCuenta ); + fprintf( file_out, " %-15s, %s\n", SAlum.Nombre, SAlum.Apellidos ); + break; + } + } + + if ( !Config.Impresora.Printer ) + fclose( file_out ); + + BAlum.LeeReg( (void *)&SAlum, old_reg ); + +} + +void ImprimeCabeceraAlum( char como, FILE *file_out ) +{ + + switch( como ) + { + // Listado R pido + case 1: + fprintf( file_out, "Nombre y Apellidos Direcci¢n Tel‚fono\n\r" ); + fprintf( file_out, "------------------------------------------------------------------------\n\r" ); + // 123456789-123456789-123456789 123456789-123456789-123456789- 123456789-12345 + // 123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789- + break; + // Listado Completo + case 2: + // C¢digos de banco + case 3: + fprintf( file_out, "Sucursal Ofic. DC. Num Cuenta Nombre, Apellidos\n\r" ); + fprintf( file_out, "------------------------------------------------------------------------\n\r" ); + break; + } + +} + +void ImprimeFichaAAlum(void) +{ + int i; + FILE *file_out; + + if ( !Config.Impresora.Printer ) + { + if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL ) + return; + } else + file_out = stdprn; + + if ( Config.Impresora.Printer && !Optar( 1, "­ Prepare la impresora !", "Prepare y encienda la", "impresora, y pulse ACEPTAR", "cuando este lista...", NULL ) ) + return; + + + fprintf( file_out, "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" ); + fprintf( file_out, "³ Ficha: %05ld ³\n", BAlum.RegActual() ); + fprintf( file_out, "³----------------ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n" ); + fprintf( file_out, "³ ³\n" ); + fprintf( file_out, "³ Nombre: %-30s, %-15s ³\n", SAlum.Apellidos, SAlum.Nombre ); + fprintf( file_out, "³ ³\n" ); + fprintf( file_out, "³ Direcci¢n: %-30s ³\n", SAlum.Direccion ); + fprintf( file_out, "³ Localidad: %-15s Provincia: %-15s Cod.Post: %05lu ³\n", SAlum.Localidad, SAlum.Provincia, SAlum.CodPostal ); + fprintf( file_out, "³ ³\n" ); + fprintf( file_out, "³ Telefono: %-15s %-15s ³\n", SAlum.Telefono1, SAlum.Fax ); + fprintf( file_out, "³ ³\n" ); + fprintf( file_out, "³ CC: Sucursal Oficina D.C. Num Cuenta ³\n" ); + fprintf( file_out, "³ %04d %04d %02d %010.0f ³\n", SAlum.CC.Sucursal, SAlum.CC.Oficina, SAlum.CC.DigControl, SAlum.CC.NumCuenta ); + fprintf( file_out, "³ ³\n" ); + fprintf( file_out, "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n" ); + fprintf( file_out, "\n" ); + fprintf( file_out, " Notas:\n" ); + + for ( i=0; i < 4; i++ ) + fprintf( file_out, " %s\n", SAlum.Notas[i] ); + + if ( !Config.Impresora.Printer ) + fclose ( file_out ); + + +} \ No newline at end of file diff --git a/ALUM_UTL.CPP b/ALUM_UTL.CPP new file mode 100644 index 0000000..1b3a9a0 --- /dev/null +++ b/ALUM_UTL.CPP @@ -0,0 +1,792 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "c:\program\src_dos\libs\make_bot\make_bot.h" +#include "c:\program\src_dos\libs\bdatos\bdatos.hh" +#include "alum_def.h" + +#define BLANCO EGA_WHITE +#define ENCUADRE 3 +#define SEC_OPTAR 2 + +void BEEP(void); + + /**************************************************************************\ +|* *| +|* InputCadenaG *| +|* *| +|* Descripci¢n: *| +|* Edita una cadena en formato gr fico *| +|* *| +|* Entradas: *| +|* Puntero a los datos editados *| +|* 0 alfanumerico 1 numerico *| +|* longitud de la cadena (TEXTO/NUMERO) *| +|* color del texto *| +|* color de fondo *| +|* Limites de acotacion *| +|* *| +|* Salidas: (ninguna) *| +|* *| +|* *| + \**************************************************************************/ +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int X0, int Y0, int X1, int Y1) +{ + // A todas las y les sumaba antes +RoW*12 parametro que indica la linea + + int ls; // longitud cadena + char Status = 0; + char *s1; // puntero a cadena inicial + int c, ok; + + s1 = s; // inicio cadena + + setfillstyle(SOLID_FILL, cf); + bar(X0, Y0, X1, Y1); + setcolor(cc); outtextxy( X0, Y0, s1 ); + + + ls = strlen ( s ); // Longitud de actual + + if ( ls < lmax ) { + setcolor(BLANCO); + outtextxy( X0+textwidth( s1 ), Y0, "þ"); + } + + s += ls; // se coloca en el final + + do{ + c = getch(); // obtiene tecla + + if ( c == 27 ) Status = 1; + + ok = ( c == 27 || c == 13 || c == 0); // 13 = INTRO || Especiales + + if ( c == 8 && ls > 0 && !ok ) { // 8 = Back Space + ls--; + s--; + + *s = '\0'; + + setfillstyle(SOLID_FILL, cf); + bar(X0, Y0, X1, Y1); + setcolor(cc); outtextxy( X0, Y0, s1 ); + setcolor(BLANCO); + + outtextxy( X0+textwidth( s1 ), Y0, "þ"); + setcolor(cc); + + } else { + if ( !numalp && c >= 32 && c <= 254 && ls < lmax) { + + *s++ = c; + ls++; + + *s = '\0'; + setfillstyle(SOLID_FILL, cf); + bar(X0, Y0, X1, Y1); + setcolor(cc); outtextxy( X0, Y0, s1 ); + + if ( ls < lmax ) { + setcolor(BLANCO); + outtextxy( X0+textwidth( s1 ), Y0, "þ"); + } + + + } else { + if ( numalp && isdigit(c) && ls < lmax) { + *s++ = c; + ls++; + + *s = '\0'; // Cero final + setfillstyle(SOLID_FILL, cf); + bar(X0, Y0, X1, Y1); + setcolor(cc); outtextxy( X0, Y0, s1 ); + + if ( ls < lmax ) { + setcolor(BLANCO); + outtextxy( X0+textwidth( s1 ), Y0, "þ"); + } + + + } + /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + else if( c == 27 ) {*s='\0'; ok = 1; } + /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + else BEEP(); + } + } + + }while(!ok); + + ok = 1; + *s = ' '; + while( ok && ls >= 0 ) { + if(*s==' ') { *s = '\0'; s--; ls--; + } else { s++; ok = 0; } + } + + *s = '\0'; + + while(kbhit()) getch(); // Vacia Buffer impidiendo falsas + // pulsaciones... + + return ( (Status<<8) + (ls&0x00FF) ); +} + +void BEEP(void) +{ + + sound(440); + delay(50); + nosound(); + +} + +void formatea_long( long Numero, char *Inter_Chg) +{ + char Buffer1[80]; + + int c; + char Nmc = 0; + + + if ( Numero < 0 ) { Numero *= -1; Nmc = 1; } + + sprintf(Buffer1, "%lu", Numero ); + + Inter_Chg[0]='\0'; + + strrev(Buffer1); + + c = strlen( Buffer1 ); + + while( c >= 3 ) + { + c -= 3; + strncat( Inter_Chg, Buffer1, 3); + + strrev(Buffer1); + + Buffer1[c] = '\0'; + + strrev(Buffer1); + + if(strlen(Buffer1)!=0) + strcat( Inter_Chg, "." ); + } + + strcat( Inter_Chg, Buffer1); + if ( Nmc == 1 ) + strcat( Inter_Chg, "-" ); + + strrev(Inter_Chg); + + +/*// return Buffer2;*/ +} + + +void formatea_u_long( unsigned long Numero, char *Inter_Chg) +{ + char Buffer1[80]; + + int c; + + sprintf(Buffer1, "%lu", Numero); + + Inter_Chg[0]='\0'; + + strrev(Buffer1); + + c = strlen( Buffer1 ); + + while( c >= 3 ) + { + + c -= 3; + strncat( Inter_Chg, Buffer1, 3); + + strrev(Buffer1); + + Buffer1[c] = '\0'; + + strrev(Buffer1); + + if(strlen(Buffer1)!=0) + strcat( Inter_Chg, "." ); + } + + strcat( Inter_Chg, Buffer1); + strrev(Inter_Chg); + + +/*// return Buffer2;*/ +} + + +int Optar( int optar, ... ) +{ + static void far *fondo, far *fd_aceptar, far *fd_cancelar; + static char Memoria = 0; + + int DEV = 0, ok = 0, linea = 0; + int Center; char *buff; + struct textsettingstype texttypeinfo; + + va_list ap; + va_start( ap, &optar ); + + if ( Memoria == 1 ) + { + putimage( 170, 165, fondo , COPY_PUT ); + putimage( 170, 320, fd_aceptar , COPY_PUT ); + putimage( 370, 320, fd_cancelar, COPY_PUT ); + + farfree( fondo ); + farfree( fd_aceptar ); + farfree( fd_cancelar ); + + Memoria = 0; + + if ( optar == ENCUADRE ) return DEV; + } + + if ( ( fondo = farmalloc( JD_imagesize( 170, 165, 470, 315 ) ) ) != NULL && + ( fd_aceptar = farmalloc( JD_imagesize( 170, 320, 270, 350 ) ) ) != NULL && + ( fd_cancelar = farmalloc( JD_imagesize( 370, 320, 470, 350 ) ) ) != NULL ) + { + Memoria = 1; + + getimage( 170, 165, 470, 315, fondo ); + getimage( 170, 320, 270, 350, fd_aceptar ); + getimage( 370, 320, 470, 350, fd_cancelar); + + gettextsettings( &texttypeinfo ); + + Imprime_Estaticos( 100, "systm\\alum.img" ); + + settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); + + setcolor( 63 ); + + while ( (buff = va_arg(ap, char *)) != NULL ) + { + Center = (296 - textwidth( buff ) ) / 2; + outtextxy( 172+Center, ( (linea == 0 ) ? 167 : 200 + 20*linea ), buff ); + linea++; + } + + va_end(ap); + + settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize ); + + + if ( optar != ENCUADRE ) + { + ok = 0; while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + do { + switch( Comprueba_Secuencia( SEC_OPTAR, NULL ) ) + { + case 0: // No se pulso ningun BOTON + case -2: + case -1: + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + if ( optar == 0 ) ok = 1; + break; + case 1: + DEV = 1; ok = 1; + break; + case 2: + DEV = 0; ok = 1; + break; + } + }while( !ok ); + + putimage( 170, 165, fondo , COPY_PUT ); + putimage( 170, 320, fd_aceptar , COPY_PUT ); + putimage( 370, 320, fd_cancelar, COPY_PUT ); + + farfree( fondo ); + farfree( fd_aceptar ); + farfree( fd_cancelar ); + + Memoria = 0; + + } + + + } else { + farfree( fondo ); + farfree( fd_aceptar ); + farfree( fd_cancelar ); + } + + + return DEV; +} + + + + char led_off [18] [18] = + { + { 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,0,7,7,7,7,0,3,3,3,3,3,3,3,3,3,3 }, + { 3,0,7,4,12,12,4,7,0,3,3,3,3,3,3,3,3,3 }, + { 0,7,4,12,4,4,4,4,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,4,4,4,4,4,4,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,4,4,4,4,4,12,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,4,4,4,4,12,12,8,0,3,3,3,3,3,3,3,3 }, + { 3,0,8,4,12,12,12,8,0,3,3,3,3,3,3,3,3,3 }, + { 3,3,0,8,8,8,8,0,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 } + }; + + char led_on [18] [18] = + { + { 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,0,7,7,7,7,0,3,3,3,3,3,3,3,3,3,3 }, + { 3,0,7,11,13,13,11,7,0,3,3,3,3,3,3,3,3,3 }, + { 0,7,11,13,11,11,11,11,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,11,11,11,11,11,11,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,11,11,11,11,11,13,8,0,3,3,3,3,3,3,3,3 }, + { 0,7,11,11,11,11,13,13,8,0,3,3,3,3,3,3,3,3 }, + { 3,0,8,11,13,13,13,8,0,3,3,3,3,3,3,3,3,3 }, + { 3,3,0,8,8,8,8,0,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 }, + { 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 } + }; + + char flecha [18] [18] = + { + 3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,0,4,0,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,0,4,4,4,0,3,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,0,4,4,4,4,4,4,4,0,3,3,3,3, + 3,3,3,3,0,4,4,4,4,4,4,4,4,4,0,3,3,3, + 3,3,3,0,4,4,4,4,4,4,4,4,4,4,4,0,3,3, + 3,3,0,0,0,0,0,4,4,4,4,4,0,0,0,0,0,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3 + }; + + + /**************************************************************************\ +|* *| +|* poicono *| +|* *| +|* Descripci¢n: *| +|* Dibuja el bitmap que se encuentra en matriz, en ¤a pos x,y *| +|* y segun un angulo de rotacion definido en pos. *| +|* *| +|* Entradas: Coordenadas x, y *| +|* Matriz del bitmap y ( 0: Normal 1: 90§ ... *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ponicono(int x,int y,char matriz[18][18], char pos) +{ + int veces1,veces2; + + for (veces1=0;veces1<=17;veces1++) + { + for (veces2=0;veces2<=17;veces2++) + { + + switch( pos ) + { + case 1: + if ( matriz[veces1][veces2] != 3 ) + putpixel(x+veces1,y+veces2,matriz[veces1][veces2]); + break; + case 2: + if ( matriz[17-veces2][veces1] != 3 ) + putpixel(x+veces1,y+veces2,matriz[17-veces2][veces1]); + break; + case 3: + if ( matriz[17-veces1][veces2] != 3 ) + putpixel(x+veces1,y+veces2,matriz[17-veces1][veces2]); + break; + case 4: + if ( matriz[veces2][veces1] != 3 ) + putpixel(x+veces1,y+veces2,matriz[veces2][veces1]); + break; + } + } + } + +} + + + + /**************************************************************************\ +|* *| +|* CalculaAjusteDia *| +|* *| +|* Descripci¢n: *| +|* Calcula el ajuste necesario para el comienzo de los dias *| +|* y el n£mero de dias que tiene el mes en curso. *| +|* *| +|* Entradas: Retorno del Ajuste, y Dias del Mes *| +|* Mes para iniciar c lculos *| +|* *| +|* Salidas: OK Todo ha ido bien *| +|* ERROR *| +|* *| + \**************************************************************************/ +int CalculaAjusteDias( char *Ajuste, char *DiasMes, char Mes, int Anyo ) +{ + int dev, n, b, dsem, dia; + + // Dias de los meses, si el a¤o no es bisiesto + char DiasMeses[12] = { 31, 00, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 }; + + // Ajusta febrero si es bisiesto el a¤o + DiasMeses[1] = (Anyo%4 == 0) ? 29 : 28; + + + dev = ERROR; + // Solo si la entrada es correcta + if ( Mes >= 1 && Mes <=12 ) + { + dev = OK; + // Obtenemos que dia, ( 0 - 365 ), es el 1§ del mes + dia = 0; + for ( n = 0; n < 12 && n < (Mes-1); n++ ) + dia += DiasMeses[n]; + + n = Anyo-1988; // a¤os para bisiesto + b = (n+3)/4; // a¤os bisies. pasados + dsem = 4; // 1o. Ene 1988: Viernes + dsem += (n*365+b); // 1o. Ene actual + dsem = (dsem+dia)%7; // d¡a seleccionado + + *Ajuste = dsem; + *DiasMes = DiasMeses[ Mes - 1 ]; + } + + return dev; +} + + + /**************************************************************************\ +|* *| +|* TextoDoble *| +|* *| +|* Descripci¢n: *| +|* Muestra el texto, con doble letra, en las coordenadas dadas *| +|* *| +|* Entradas: X, Y, texto *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void TextoDoble( int x, int y, char *texto ) +{ + setcolor( EGA_BLACK ); + outtextxy( x, y, texto ); + + setcolor( EGA_WHITE ); + outtextxy( x+1, y+1, texto ); + +} + + + + +/////// EDITAR COMENTARIO.... +int EditComentario( char *Comentario, int Lineas, int Columnas, int cc, int cf, int X0, int Y0, int X1, int Y1, int Inc ) +{ + + int ls; // longitud cadena + char *s1, *s, *s_tmp, *s_tmp1; // puntero a cadena inicial + int key, ok, Linea = 0, Columna = 0, lmax; + char Buffer[80]; + + lmax = Columnas; + + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + setcolor(cc); // devuelve el color a su estado + + for ( ok = 0; ok < Lineas; ok ++ ) + { + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + outtextxy( X0, Y0+ok*Inc, &Comentario[ (lmax+1)*Linea ] ); // e imprime la cadena. + } + + ok = 0; + + s_tmp1 = s_tmp = s = s1 = &Comentario[0 + (lmax+1)*Linea ]; // inicio cadena + + s += lmax ; *s = '\0'; + s = s_tmp; + +do { + + + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + setcolor(cc); // devuelve el color a su estado + + outtextxy( X0, Y0+Linea*Inc, s1 ); // e imprime la cadena. +// ls = strlen ( s ); // Longitud de la cadena actual + + + if ( Columna < lmax ) { // Muestra cursor si es posible + strncpy( Buffer, s1, Columna ); + Buffer[Columna] = '\0'; + setcolor(BLANCO); + outtextxy( X0 + textwidth( Buffer ), Y0+Linea*Inc+2, "Ü"); + } + + + + switch ( ( key = getch() ) ) { // obtiene tecla + // Intro o Return + case 13: + if( Linea < Lineas ) { + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + setcolor(cc); // devuelve el color a su estado + outtextxy( X0, Y0+Linea*Inc, s1 ); // e imprime la cadena. + + Linea++; + s_tmp1 = s_tmp = s = s1 = &Comentario[/*Linea + */(lmax+1)*Linea ]; // inicio cadena + s += lmax; *s = '\0'; + Columna = 0; + s = s_tmp1 = s_tmp = s1; + } + break; + + case 0: + + switch ( key = getch() ) { + + // F. Arriba + case 72: + if( Linea > 0 ) { + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + setcolor(cc); // devuelve el color a su estado + outtextxy( X0, Y0+Linea*Inc, s1 ); // e imprime la cadena. + + Linea--; + s_tmp1 = s_tmp = s = s1 = &Comentario[/*Linea + */(lmax+1)*Linea ]; // inicio cadena + s += lmax; *s = '\0'; + if ( Columna < strlen( s1 ) ) s_tmp += Columna; else { Columna = 0; + s_tmp = s1; } + s = s_tmp1 = s_tmp; + + } + + break; + // F. Abajo + case 80: + + if( Linea < Lineas ) { + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + setcolor(cc); // devuelve el color a su estado + outtextxy( X0, Y0+Linea*Inc, s1 ); // e imprime la cadena. + + Linea++; + s_tmp1 = s_tmp = s = s1 = &Comentario[/*Linea + */(lmax+1)*Linea ]; // inicio cadena + s += lmax; *s = '\0'; + if ( Columna < strlen( s1 ) ) s_tmp += Columna; else { Columna = 0; + s_tmp = s1; } + s = s_tmp1 = s_tmp; + } + break; + // F. Derecha + case 77: + case 9: + if ( Columna < strlen(s1) ) { Columna++; s++; } + break; + // F. Izquierda + case 75: + case 11: + if ( Columna > 0) { Columna--; s--; } + break; + default: + break; + } + + break; + // Back Space + case 8: + if ( Columna > 0 ) { + Columna--; + s--; + s_tmp1 = s_tmp = s; + while ( *s_tmp1 != NULL ) { + s_tmp1++; + *s_tmp = *s_tmp1; + s_tmp++; + } + } + break; + case 27: + ok = 1; + break; + default: + if ( key >= 32 && key <= 254 && Columna < lmax) { + *s++ = key; + Columna++; + } + break; + } +}while(!ok); + +while(kbhit()) getch(); // Vacia Buffer impidiendo falsas + // pulsaciones... + + + setfillstyle(SOLID_FILL, cf); // selecciona los atributos de + bar( X0, Y0+Linea*Inc, X1, Y0+Linea*Inc + Inc); // relleno, y Borra el campo + setcolor(cc); // devuelve el color a su estado + + outtextxy( X0, Y0+Linea*Inc, s1 ); // e imprime la cadena. + +return /* de momento nada */ 0; + +} + + + + +char *PideClave( char *LineaVentana, char *Comprobante ) +{ + static char Clave[15+1]; + + Clave[0] = '\0'; + Optar( ENCUADRE, LineaVentana, "Introduzca clave para:", Comprobante, NULL ); + + InputCadenaG( Clave, 0, 15, EGA_WHITE, EGA_WHITE, 190, 280, 450, 305 ); + + Optar( ENCUADRE, LineaVentana, "Introduzca clave para:", Comprobante, NULL ); + + return Clave; +} + + +void MuestraGraficas( int PosX, int PosY, int xWidth, int yWidth, int NDatos, long *Datos, char Mensajes[][12] ) +{ + long DMaximo; + int i, AnchoBarra; + + // Limpiamos la zona de visualizaci¢n + setfillstyle( SOLID_FILL, EGA_WHITE ); + bar( PosX, PosY, PosX + xWidth, PosY + yWidth ); + + // Calculamos el maximo valor a mostrar + DMaximo = 0; + for ( i = 0; i < NDatos; i++ ) + if ( Datos[i] > DMaximo ) + DMaximo = Datos[i]; + + // Ahora calculamos el ancho de cada barra de porcentaje + AnchoBarra = xWidth / NDatos; + + // Empiezo a dibujar las barras + PosY += yWidth - 1; + yWidth -= (AnchoBarra / 4); + setfillstyle( SLASH_FILL, EGA_BLUE ); + setcolor( EGA_BLACK ); + for ( i = 0; i < NDatos; i++ ) + { + if ( DMaximo != 0 ) + bar3d( PosX + AnchoBarra*i, PosY - ( ( Datos[i] * yWidth ) / DMaximo), PosX + AnchoBarra*(i+1), PosY, + AnchoBarra / 4, 1 ); + } + +} + + + /**************************************************************************\ +|* *| +|* PideClaveUsuario *| +|* *| +|* Descripci¢n: *| +|* Pide la clave de usuario y comprueba si es correcta. *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* Salidas: OK -clave correcta- ERROR -clave incorrecta- *| +|* *| +|* *| + \**************************************************************************/ +char PideClaveUsuario( void ) +{ +return OK; +/* + char buffer[80], Clave[80]; + int CodEmpl, dev; + + BDatos BEmpl_p; // Base de datos de Empleados + INFO_EMPLEADOS SEmpl_p; // Estructura de Empleados + + dev = ERROR; + + sprintf( buffer, "datos\\%s\\info_emp.dbf", NEmpresa ); + if ( BEmpl_p.AbrirReg( buffer, sizeof( INFO_EMPLEADOS ) ) == ERROR ) + { + Optar( 0, "­ ALERTA !", "No existen empleados", "c¢digos de acceso anulados", "PERMISOS ABIERTOS", NULL ); + return OK; + } + + + + Clave[0] = '\0'; + Optar( ENCUADRE, "­ Identifiquese !", "", "Login: ", "Password: ", NULL ); + + // Obtenemos el c¢digo de usuario: + do { + if ( InputCadenaG( buffer, 1, 5, EGA_WHITE, EGA_WHITE, 190, 280, 450, 305 ) >> 8 ) + return ERROR; + } while ( !MatchEmpleado( atoi(buffer) ) ); + +// InputCadenaG( Clave, 0, 15, EGA_WHITE, EGA_WHITE, 190, 280, 450, 305 ); + + if ( ! ( InputCadenaG( buffer, 1, 5, EGA_WHITE, EGA_WHITE, 190, 280, 450, 305 ) >> 8 ) ) + { + if ( SEmpl_p.Password[0] != '\0' && strcmpi( buffer, SEmpl_p.Password ) == 0 ) + dev = OK; + } + + Optar( ENCUADRE, "­ Identifiquese !", "", "Login: ", "Password: ", NULL ); + + return dev; +*/ +} diff --git a/DATOS/ALUM.DBF b/DATOS/ALUM.DBF new file mode 100644 index 0000000000000000000000000000000000000000..26d88d7e04b9112e4decfe536b2f9f8b57510200 GIT binary patch literal 19033 zcmeI3&2G~`5XUDFzCRwIr#)LBVTS_EsX>X5dO)o>aCY$?45{7PNh9@C^_h5*JQ1^r zZM+-DS)|f9^?#Zw`!PGa`-?PM&yGJ2{Yjkm`$xlmpY}R*Z{;!X>^1)%JR%aRqNGPt zdFs=rgSW2Nd%sU4MHo$zIGFwj<46Qj1PTxRVo~}^>BGldT`Q^X&7vDH4eH}Px2HE$ z)?BZ$*=V#HpzRkL)TVaUAcR$>UE$M1VEq-1jMs! zm!otd&-|2(cii@TOBaFaz)(?*8_ycU*N%O+G%ULwjM00J!|Af9F$-f!})(H4Fbc+V|B z$CMzjO9Y%ew_q@qKm903;_U3_@-2MLoxA&n%3(_V$z6>ti+O*o=2SYR!0Af8L+USk za(7J&W$Q)RW$`=_@R3*)jVlE!Q>1Kdloi`(009ta4*{o}?R5}M;wX%%$XL4I;N^e3 zHBzzAviGdLHS(;|jI5L_f7;u$WjQ6(KmY`Gih#p8p9}dqm6yH>d!}*Z-^HD~aZ6O| zJ$DKz77GF(&^=u1;Fmag`Oon=12;n^W4P(eTd1VErs1f1vDa@=>++;@$( zfJ~3vZeanK5(Ge?*#w-I`TAzF3;8!g$$WD%zZS|fmKI5&d1E>Ch}&|D_22*Ursg7J ziBpZ#XT8-zYrP8hY_hT(T-d6ev34SKf&d8IYXZ)ze0w|LJ@ds@e%m>^+tjLD1{y&C m1X@AB;rDr#(s1vYFSF*`)-TqWD7x%&>I-!gKmY_ANi4}PwzBeav9e;2Vq_S$0OU0gp3B6*paAkE8zTb?gN2QSJp+S1LqJiUTV_tG zUVdo_NRDFQM6n5@22dOVtRNHE7=RHD0&xy$`FSP9F$G2WCGiC%IeKY%6vj2gyt351 VlK9->bjr=+;1Lj!U;!mkCIFI|8V&#e literal 0 HcmV?d00001 diff --git a/DATOS/THEMES.CFG b/DATOS/THEMES.CFG new file mode 100644 index 0000000000000000000000000000000000000000..5b688669070ce5f775b154c3f09e40b4fc1df295 GIT binary patch literal 878 zcmds#%}N6?5XWcTB0}H5Q;vG^Toyslr3dlg!J|;7&2(AF&Me7P`aG=9+x4EztW6AW$ ziq2s!IL6ZgE(c0y={MS{7#825J1d?fN_aSl#@z!m&?h>yGOR8Cj)b~x+W0-p4R1Q~ z(P?~K6ouOiUrw^bNch8CijP~hk@*puSahKoW_|%nvrVP| literal 0 HcmV?d00001 diff --git a/FONTS/PROT_PTL.FNT b/FONTS/PROT_PTL.FNT new file mode 100644 index 0000000000000000000000000000000000000000..31994db471de1ead2e081a299b4995768595fe31 GIT binary patch literal 4096 zcmZu!L5tf)6dv1);uhDt38AR0@Y<@_rlk~R4T{@UWLpWLDTP2Gmpv411=@>ow#{J! zS)?xXPvq27FZ~aJ1z&pWb-^tJ3ULoT1OiD8CF=J^Z$^^o+m&a&d2iml_vX#hNQiYx z&we>Od-~)oWk#AW^L(+&6&79w3aqx8*tUWSG<|=yTKT5wGvD;nJWorEVaWJq!On?R zi?g$p?Bz7-Ct;ZIbQ)bedHVFpLh&~*z4w8iBuW6%=$lxeP$^Ds_RR)WpBs9#=mdoYiZBT)O z*tNVk_ADa~Sb`dajM19D0%8Rvj4r5LPl%3@8y&?)Yr2`M#c4c>BBh<6ljMm*9isEe zG`#)ymEEs?ZZ=E&{>R}@?M*4L{?oQBtKAm(my{&7T@!Jf)RB)I?R3VsrjwvCodz9c z<6&%c%wf#4Mz_Co``>(h=ko$bQNPceqUmh)iMG^ibE8SLQF@s8xu2AC+U<6RryQUj zLgrRRs^KVxb$}Z!Sm#FPKeD)GPl;?x;f;cJ7zfivbECaAP%42Ny+&iIcGr0KiXCRn zrix}ZnM~3Ozt;!G0!ltB^yw%B#H;YBKW;Rd>iobpa*wS+Bm1Sh(i_+87^MV`D*l-w z;*rOUq2Jip5Z!Kx@7=vOnJD|(mS@|6ZJ#hd9SjBm9;LDO;S?TD2E7U&Y|YOG1IKp; zI$j0t_aCvmoPTes=bzYeIlW$hy(LoiY|3;9Llut`+qvdmbL@w#?^vc!x!xj44i3UF zTrvM>Z|{pwKHJ^>ficCGNa>gULB}!kIUl@tykbD|?ZM!C=HI+E?OV<1;kS&lyLY9% zDt}g3n@HKq*ikzu@xei&GI|v{j_EksUc}=nDOCEhX-MfeRr%+mx)CY;s9z(iTh=ST zQ&7RjZmNUG_Ub05o@uIcr^kf|nn4)e-DOH_;Imoj`T|gdw^z1=!)J|B>yC94#+}tMWoTrv&(` zv}ab+5C5wB53%`mq_6~{ZC%y=NK84fr6ZP24O5?|E=t`o9eruJDaO^C4Wrs5Uihc~%Y6`hF56zM&Je zrl0gx*CTyZEIdzGl;J(ngapQ`VFY*8eFNpLhT~Xzi#vc6Cv(Vqg;5wqHgp4bsLmI} z=KI^}#UGrIJ6@7xh{utfPqBkNAXPu0xQYvVOFr3GjVJM|SYSS>8@Gyp#If8QTp)_| zn61~t)nIXczR>p_%X8gFC$Oq8p8QAv1&m zP~A_$BVzM$BV6^5aLs@q~g`;P2GBe%z!sy5f!T9L+9hQ;$$_pmuZF@71Z)Z{qkT+v}mv7hq z?*Cf<`}3s!N0Ip-dQ%&FV`}Ub^om=4r@U3L!0Ym_3@xt(xg*VfyT*TIyk&QAIwWZ< z?Sg*A=T_UtcI#rxIA4=TI@M@LA(qqfJYJXIF||C~cZ1uax#5m$>y6zy|FzKirCcsv zug%x;%-8Z#?sX|I?aNDjtVheM`Ro4G*7H1Vuatv-HTx_6^7wddey(s~4;|MUt?!qP zU-1=G{<3~O@M4WN*N6pc=Hk%KX7loW6~t*Ar?{v~DO5^)Uw|Z{pR6#RaTcSbnXY=B z&}c9NjhHXw7gONs3n-S8Hx%ZlsF3mtjxkqfRsUqQMm6+2uE#wrhu4q({=>9%xm49p zh?W8PGL6oaJ~xU^qsZlYicwk4P;yy7WcWJ64-@u*c0;EKmZR&l#^}?PTI23ERn&F5 zD5@)TQXxiqQNx59S-zBIJyaakR)mY8^4n%p#_pe)&;DFctW`CG@bQHk{Z>yO6hn~G HU2p#bq-tDQ literal 0 HcmV?d00001 diff --git a/FONTS/VENT_MSG.FNT b/FONTS/VENT_MSG.FNT new file mode 100644 index 0000000000000000000000000000000000000000..f0b651ec1fb8d9f4a8929902628ad1ee161d841c GIT binary patch literal 4096 zcmZuzy=xpt6dx%NIpl44P5LM+5pQfE|2TO7N2Gq>~R&5^efv%mM=yziMk#%#)- z|Ni{V(eq4mv-({dr^U<*QVR!ZAQe)r;4KsoGv(G=N z^5=61&?Zhdu(>S+L^iCuV0|)1l{7y-y*xAH$wwT>m`DmYhzc9Kq`j>$E-LpH+M7>G zm&$`^Qj&3H^8x}O@gyLmasa98kI(h4#gT0bV!H{mjn$&9r+gM572-!wlx zJ)I;d=MccWC=kzuNQE#4Ljm(f&Sx3Jd5BBYubw|Ga=HIl^bx~Z26x6E zOdpVm=aviQB=tTMaT1F&+ciNH zoB$G_iq9NqcCsg^n5hd7?Rh-q{GN{(`~#W$PGQo2#-RU|xjzBNc8g#;sSh0HU-`FY zo?4vGI5+bN&6eK`^e=^=f_RU%PIBcy3T3yK2)a)1V_a+7`!nCy?apt?-`;s~{W=Cpdf zmV>a>X^+~S$A||#_{9Z}W?UTpe06Z}LPNIhIHBi7h-H82fd_2WSM{Id2iS^#oUE0S zp$(3+mHh1Ou{nSX>t^5<)tPI3_yqu;C-Xt6$K$b)!OxYIl@*E~{5Aag&X)%tYM#Ph z{bnve__)#eU^lwMSHtcNtSOkX!-Jf zEm!MpAN8B~?(2NidY^CU{c7Ffw*1O`uavxIS4;a*zma47O7F_(t9WW-ud##rdcTfe zVHiWp-{vO9tMhC077NL@;cqSNM|+ES{N?&C_Y3P+FOiN0Ec=H0j@RDKG{@OLJUkp}1Z!t7_+Fcn?9>B7 zdCTc) zdAsc+4tEqGW|?{rJ5JwmSRb+HtT`URfSfgg*RNf3V1pq*L-^_;Nn=DFy>{UbrO~Sh n-ZK24a|rqmDs9x1 literal 0 HcmV?d00001 diff --git a/PRNFILE.OUT b/PRNFILE.OUT new file mode 100644 index 0000000..8c7faa3 --- /dev/null +++ b/PRNFILE.OUT @@ -0,0 +1,55 @@ + + N§ Alumno: 0 + + Alejandro 1 + 1 + + 1 (1) + C.P. 1 + + + N§ Alumno: 0 + + Antonio + + + () + C.P. 0 + + + N§ Alumno: 0 + + Pepito Grillo + + + () + C.P. 0 + + + N§ Alumno: 0 + + Estemas + + + () + C.P. 0 + + + N§ Alumno: 0 + + Jos‚ David Eqwe + Qwe + + Qwe (Qwe) + C.P. 0 + + + N§ Alumno: 0 + + Nueva persona + + + () + C.P. 0 + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..272b97c --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#ALUM + + +*25/09/1997* + +ToDo: wwtcf? + + +![screenshot](/ALUM.png "Screenshot") diff --git a/SYSTM/ALDISK.BMP b/SYSTM/ALDISK.BMP new file mode 100644 index 0000000000000000000000000000000000000000..970d1560b55f6a9f2c59b35cd33515179d5d3137 GIT binary patch literal 48566 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 OOpDEVBG>oXr~dV{ literal 0 HcmV?d00001 diff --git a/SYSTM/ALUM.IMG b/SYSTM/ALUM.IMG new file mode 100644 index 0000000..4159eb5 --- /dev/null +++ b/SYSTM/ALUM.IMG @@ -0,0 +1,517 @@ +** +** Codigo fuente para MAKE_BOTON +** +** +** Dise¤ado integramente, por Jose-David.Guillen@cs.us.es +** http://www.arrakis.es/~infomundo/JD +** +***************************************************************************** +* +* ATENCION !!! +* ALTERAR ESTE FICHERO, CAUSARA EL MALFUNCIONAMIENTO DEL +* PROGRAMA DE APOYO... ( ERRORES NO DOCUMENTADOS ) +* +***************************************************************************** + +#4 + +************************************************ Botones D: 2 +**** **** Botones S: 20 +** M¢dulo de Botones: Gst. AAlum ** +**** **** +************************************************ +!1, 11 + +$ 400, 40, 515, 65, 7, 63, 56, 2, 2, 000, 23 +$ 520, 40, 635, 65, 7, 63, 56, 2, 2, 000, 50 +$ 400, 70, 515, 95, 7, 63, 56, 2, 2, 000, 83 +$ 520, 70, 635, 95, 7, 63, 56, 2, 2, 000, 82 +$ 400, 100, 440, 125, 7, 63, 56, 2, 2, 000, 73 +$ 445, 100, 475, 125, 7, 63, 56, 2, 2, 000, 71 +$ 480, 100, 555, 125, 7, 63, 56, 2, 2, 000, 48 +$ 560, 100, 590, 125, 7, 63, 56, 2, 2, 000, 79 +$ 595, 100, 635, 125, 7, 63, 56, 2, 2, 000, 81 +$ 400, 5, 635, 30, 7, 63, 56, 2, 2, 000, 000 +$ 505, 455, 635, 475, 63, 0, 0, 0, 000, 000 + +************************************************ Botones D: 2 +**** **** Botones S: 30 +** M¢dulo para la Gestion de los Ant.Alumnos ** +**** **** +************************************************ +­30 + +& 400, 5, 635, 30, 7, 63, 56, 2, 2 +| 400, 7, 2, 5, 0, 0, Gestion de Antiguos Alumnos, +| 401, 8, 2, 5, 0, 63, Gestion de Antiguos Alumnos, + +& 400, 40, 515, 65, 7, 63, 56, 2, 2 +| 400, 42, 2, 5, 0, 0, Imprimir Fich., +| 401, 43, 2, 5, 0, 63, Imprimir Fich., + | 400, 43, 2, 5, 0, 0, _, + | 401, 44, 2, 5, 0, 63, _, + +& 520, 40, 635, 65, 7, 63, 56, 2, 2 +| 518, 42, 2, 5, 0, 0, Men£ Principal, +| 519, 43, 2, 5, 0, 63, Men£ Principal, + | 518, 43, 2, 5, 0, 0, _, + | 519, 44, 2, 5, 0, 63, _, + +& 400, 70, 515, 95, 7, 63, 56, 2, 2 +| 400, 72, 2, 5, 0, 0, Eliminar Alum., +| 401, 73, 2, 5, 0, 63, Eliminar Alum., +& 520, 70, 635, 95, 7, 63, 56, 2, 2 +| 518, 72, 2, 5, 0, 0, Insertar Alum., +| 519, 73, 2, 5, 0, 63, Insertar Alum., + +& 400, 100, 440, 125, 7, 63, 56, 2, 2 +| 400, 102, 2, 5, 0, 0, <<, +| 401, 103, 2, 5, 0, 63, <<, +& 445, 100, 475, 125, 7, 63, 56, 2, 2 +| 445, 102, 2, 5, 0, 0, <-, +| 446, 103, 2, 5, 0, 63, <-, + +& 480, 100, 555, 125, 7, 63, 56, 2, 2 +| 480, 102, 2, 5, 0, 0, Buscar, +| 481, 103, 2, 5, 0, 63, Buscar, + +& 560, 100, 590, 125, 7, 63, 56, 2, 2 +| 560, 102, 2, 5, 0, 0, ->, +| 561, 103, 2, 5, 0, 63, ->, +& 595, 100, 635, 125, 7, 63, 56, 2, 2 +| 595, 102, 2, 5, 0, 0, >>, +| 596, 103, 2, 5, 0, 63, >>, + +| 5, 10, 2, 5, 0, 0, C¢digo:, +| 6, 11, 2, 5, 0, 63, C¢digo:, +& 65, 6, 150, 29, 63, 7, 56, 0, 2 + +| 5, 45, 2, 5, 0, 0, Nombre:, +| 6, 46, 2, 5, 0, 63, Nombre:, +& 150, 41, 390, 64, 63, 7, 56, 0, 2 + +| 5, 70, 2, 5, 0, 0, Apellidos:, +| 6, 71, 2, 5, 0, 63, Apellidos:, +& 150, 66, 390, 89, 63, 7, 56, 0, 2 + + +| 5, 115, 2, 5, 0, 0, Direccion:, +| 6, 116, 2, 5, 0, 63, Direccion:, +& 90, 111, 390, 134, 63, 7, 56, 0, 2 + +| 5, 140, 2, 5, 0, 0, Localidad: Provincia:, +| 6, 141, 2, 5, 0, 63, Localidad: Provincia:, +& 90, 136, 225, 159, 63, 7, 56, 0, 2 +& 310, 136, 440, 159, 63, 7, 56, 0, 2 + +| 450, 140, 2, 5, 0, 0, C.Postal:, +| 451, 141, 2, 5, 0, 63, C.Postal:, +& 520, 136, 600, 159, 63, 7, 56, 0, 2 + + +| 5, 165, 2, 5, 0, 0, Tel‚fono:, +| 6, 166, 2, 5, 0, 63, Tel‚fono:, +& 90, 161, 247, 184, 63, 7, 56, 0, 2 +& 253, 161, 390, 184, 63, 7, 56, 0, 2 + +& 5, 188, 255, 225, 7, 63, 56, 2, 2 +| 5, 188, 2, 5, 0, 0, Oficin. Sucur. D.C. Num.Cuenta, +| 6, 189, 2, 5, 0, 63, Oficin. Sucur. D.C. Num.Cuenta, + +* Ancho de la linea: 23 +& 10, 208, 60, 221, 63, 7, 56, 1, 1 +& 65, 208, 115, 221, 63, 7, 56, 1, 1 +& 120, 208, 145, 221, 63, 7, 56, 1, 1 +& 150, 208, 250, 221, 63, 7, 56, 1, 1 + + +| 5, 190, 2, 5, 0, 0, Notas:, +| 6, 191, 2, 5, 0, 63, Notas:, +& 400, 161, 635, 225, 63, 7, 56, 2, 2 + + +| 6, 236, 2, 4, 0, 63, 123456789-123456789-123456789-123456789- 123456789-123456789-123456789- 123456789-12345, + +& 5, 230, 635, 255, 7, 63, 56, 2, 2 +| 5, 235, 2, 5, 0, 0, Nombre y Apellidos Direcci¢n Tel‚fono, +| 6, 236, 2, 5, 0, 63, Nombre y Apellidos Direcci¢n Tel‚fono, + +& 5, 260, 300, 450, 63, 7, 56, 2, 2 +& 305, 260, 497, 450, 63, 7, 56, 2, 2 +& 503, 260, 635, 450, 63, 7, 56, 2, 2 + + + +* Linea de fondo para ayudas +& 5, 455, 500, 475, 0, 63, 56, 0, 2 +& 505, 455, 635, 475, 63, 0, 0, 0, 2 + +************************************************ Botones D: +**** **** Botones S: 31 +** M¢dulo buscar asociado a Proveedores ** +* * +** Muestreo del patr¢n para busquedas ** +**** **** +************************************************ + +­31 +& 265, 200, 365, 220, 63, 0, 56, 0, 2 +& 265, 225, 465, 245, 63, 0, 56, 0, 2 +& 265, 250, 465, 275, 63, 0, 56, 0, 2 +& 265, 280, 465, 305, 63, 0, 56, 0, 2 + +| 175, 200, 2, 6, 0, 0, Nombre: , + | 176, 201, 2, 6, 0, 63, Nombre: , +| 175, 225, 2, 6, 0, 0, Apellidos: , + | 176, 226, 2, 6, 0, 63, Apellidos: , +| 175, 250, 2, 6, 0, 0, Direccion, + | 176, 251, 2, 6, 0, 63, Direccion, +| 175, 275, 2, 6, 0, 0, Tel‚fono:, + | 176, 276, 2, 6, 0, 63, Tel‚fono:, + + + +************************************************ Botones D: 6 +**** **** Botones S: +** Parte Utilizada por Optar ** +**** **** +************************************************ +!2, 2 + +$ 170, 320, 270, 350, 7, 63, 56, 2, 2, 000, 30 +$ 370, 320, 470, 350, 7, 63, 56, 2, 2, 000, 46 + +­100 +& 170, 165, 470, 315, 7, 63, 56, 0, 2 +& 172, 167, 468, 190, 1, 56, 63, 0, 2 + +& 170, 320, 270, 350, 7, 63, 56, 2, 2 +| 175, 325, 2, 6, 0, 63, Aceptar, +| 176, 326, 2, 6, 0, 0, Aceptar, +| 175, 327, 2, 6, 0, 63, _, +| 176, 328, 2, 6, 0, 0, _, + +& 370, 320, 470, 350, 7, 63, 56, 2, 2 +| 373, 325, 2, 6, 0, 63, Cancelar, +| 374, 326, 2, 6, 0, 0, Cancelar, +| 373, 327, 2, 6, 0, 63, _, +| 374, 328, 2, 6, 0, 0, _, + + +************************************************ Botones D: +**** **** Botones S: 120 +** M¢dulo para configurar el entorno ** +**** **** +************************************************ +*!3, 12 +!3, 11 + +$ 195, 430, 310, 450, 7, 63, 56, 0, 2, 000, 050 * Men£ Principal +$ 181, 275, 205, 295, 7, 63, 56, 2, 2, 000, 000 * Combinaciones +$ 213, 275, 261, 295, 7, 63, 56, 2, 2, 000, 000 * Guardar +$ 262, 275, 310, 295, 7, 63, 56, 2, 2, 000, 000 * Eliminar +$ 181, 330, 205, 350, 7, 63, 56, 2, 2, 000, 000 * Elementos +$ 181, 385, 205, 405, 7, 63, 56, 2, 2, 000, 000 * Fuentes + +$ 290, 330, 310, 350, 7, 63, 56, 2, 2, 000, 000 * Color +$ 290, 358, 310, 378, 7, 63, 56, 2, 2, 000, 000 * Fondo +$ 262, 385, 310, 405, 63, 7, 56, 2, 2, 000, 000 * Tama¤o + +$ 325, 370, 345, 450, 7, 56, 63, 0, 2, 000, 000 * Impresora +$ 325, 285, 345, 365, 7, 56, 63, 0, 2, 000, 000 * Ventas +*$ 325, 200, 345, 280, 7, 56, 63, 0, 2, 000, 000 * Varios... + + +­120 + +& 400, 5, 635, 30, 7, 63, 56, 2, 2 +| 400, 7, 2, 5, 0, 0, Cambiar la configuraci¢n, +| 401, 8, 2, 5, 0, 63, Cambiar la configuraci¢n, + +* Linea de separaci¢n +& 319, 5, 321, 450, 0, 63, 63, 0, 2 + + +& 5, 35, 310, 240, 0, 63, 56, 0, 2 + + +| 5, 250, 2, 5, 0, 0, Combinaciones:, +| 5, 250, 2, 5, 0, 63, Combinaciones:, +& 5, 275, 180, 295, 63, 7, 56, 2, 2 +& 181, 275, 205, 295, 7, 63, 56, 2, 2 + +& 213, 275, 261, 295, 7, 63, 56, 2, 2 +& 262, 275, 310, 295, 7, 63, 56, 2, 2 +| 217, 277, 2, 4, 0, 0, Guardar Eliminar, +| 218, 278, 2, 4, 0, 63, Guardar Eliminar, + +| 5, 305, 2, 5, 0, 0, Elementos:, +| 5, 305, 2, 5, 0, 63, Elementos:, +& 5, 330, 180, 350, 63, 7, 56, 2, 2 +& 181, 330, 205, 350, 7, 63, 56, 2, 2 + +| 5, 360, 2, 5, 0, 0, Fuentes:, +| 5, 360, 2, 5, 0, 63, Fuentes:, +& 5, 385, 180, 405, 63, 7, 56, 2, 2 +& 181, 385, 205, 405, 7, 63, 56, 2, 2 + +| 210, 332, 2, 4, 0, 0, Color:, +| 211, 333, 2, 4, 0, 63, Color:, +& 290, 330, 310, 350, 7, 63, 56, 2, 2 +| 210, 360, 2, 4, 0, 0, Fondo:, +| 211, 361, 2, 4, 0, 63, Fondo:, +& 290, 358, 310, 378, 7, 63, 56, 2, 2 +| 210, 387, 2, 4, 0, 0, Tama¤o:, +| 211, 388, 2, 4, 0, 63, Tama¤o:, +& 262, 385, 310, 405, 63, 7, 56, 2, 2 + +& 195, 430, 310, 450, 7, 63, 56, 0, 2 +| 200, 430, 2, 5, 0, 0, Men£ Principal, +| 201, 431, 2, 5, 0, 63, Men£ Principal, + + +* Linea de fondo para ayudas +& 5, 455, 500, 475, 0, 63, 56, 0, 2 +& 505, 455, 635, 475, 63, 0, 0, 0, 2 + +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +***** Configurar Impresora +& 325, 370, 345, 450, 7, 56, 63, 0, 2 +| 327, 370, 2, 4, 1, 0, Impresora , +| 328, 371, 2, 4, 1, 63, Impresora , + +& 325, 285, 345, 365, 7, 56, 63, 0, 2 +| 327, 285, 2, 4, 1, 0, Opciones , +| 328, 286, 2, 4, 1, 63, Opciones , + +& 325, 200, 345, 280, 7, 56, 63, 0, 2 +| 327, 200, 2, 4, 1, 0, Varios... , +| 328, 201, 2, 4, 1, 63, Varios... , +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +­121 + +& 200, 40, 305, 60, 7, 63, 56, 2, 2 +| 200, 41, 2, 4, 0, 0, Mensaje de Linea, +| 201, 42, 2, 4, 0, 63, Mensaje de Linea, +& 200, 62, 252, 82, 7, 63, 56, 2, 2 +& 253, 62, 305, 82, 7, 63, 56, 2, 2 +| 198, 63, 2, 4, 0, 0, Imprimir Menu Pr, +| 199, 64, 2, 4, 0, 63, Imprimir Menu Pr, + + +| 10, 51, 2, 4, 0, 0, Campo:, +| 11, 52, 2, 4, 0, 63, Campo:, +& 50, 54, 180, 64, 63, 7, 56, 0, 2 +| 10, 63, 2, 4, 0, 0, Cmo: Tlg:, +| 11, 64, 2, 4, 0, 63, Cmo: Tlg:, +& 40, 66, 85, 76, 63, 7, 56, 0, 2 +& 120, 66, 180, 76, 63, 7, 56, 0, 2 +| 10, 75, 2, 4, 0, 0, Dircc: nn:, +| 11, 76, 2, 4, 0, 63, Dircc: nn:, +& 50, 78, 100, 88, 63, 7, 56, 0, 2 +& 140, 78, 180, 88, 63, 7, 56, 0, 2 + + +& 10, 100, 305, 115, 7, 63, 56, 0, 2 +| 10, 102, 2, 4, 0, 0, C¢digo Descripci¢n Unds. P.V.P, +| 11, 103, 2, 4, 0, 63, C¢digo Descripci¢n Unds. P.V.P, + +& 10, 117, 70, 223, 63, 7, 56, 2, 2 +& 72, 117, 216, 223, 63, 7, 56, 2, 2 +& 218, 117, 245, 223, 63, 7, 56, 2, 2 +& 247, 117, 305, 223, 63, 7, 56, 2, 2 + +* Texto se¤alado +& 14, 121, 68, 130, 3, 3, 3, 0, 2 +| 11, 120, 2, 4, 0, 0, 000124 Albaranes de compra , +| 11, 130, 2, 4, 0, 0, 000136 Aliados en el juego , +| 11, 140, 2, 4, 0, 0, 000250 Baticoco de mono , +| 11, 150, 2, 4, 0, 0, 000045 Garganta profunda , +| 8, 120, 2, 4, 0, 0, 003 1.500, +| 8, 130, 2, 4, 0, 0, 045 9.999, +| 8, 140, 2, 4, 0, 0, 009 415, +| 8, 150, 2, 4, 0, 0, 010 2.250, + + +* Linea de fondo para ayudas +& 10, 225, 259, 235, 0, 63, 56, 0, 2 +& 261, 225, 305, 235, 63, 7, 56, 0, 2 +| 10, 224, 2, 4, 0, 63, C¢digo de la descripci¢n., + +­122 +* Cuadro de di logo +*& 5, 35, 310, 240, 0, 63, 56, 0, 2 +& 60, 145, 240, 230, 7, 63, 56, 0, 2 +& 63, 148, 237, 165, 1, 56, 63, 0, 2 +| 62, 148, 2, 4, 0, 0, Cuadro de Dialogo, +| 63, 149, 2, 4, 0, 63, Cuadro de Dialogo, + +& 63, 215, 113, 227, 7, 63, 56, 0, 2 +& 187, 215, 237, 227, 7, 63, 56, 0, 2 +| 62, 214, 2, 4, 0, 0, Aceptar, +| 63, 215, 2, 4, 0, 63, Aceptar, +| 64, 214, 2, 4, 0, 0, Cancelar, +| 65, 215, 2, 4, 0, 63, Cancelar, + +***** ***** +*** Color *** +***** ***** +************************************************ Botones D: 11 +**** **** Botones S: 123 +** M¢dulo para configurar el entorno ** +**** **** +************************************************ +!4, 18 +$ 170, 320, 270, 350, 7, 63, 56, 2, 2, 000, 30 * ACEPTAR +$ 370, 320, 470, 350, 7, 63, 56, 2, 2, 000, 46 * CANCELAR + +$ 180, 205, 200, 225, 0, 56, 63, 2, 2, 000, 000 +$ 205, 205, 225, 225, 1, 56, 63, 2, 2, 000, 000 +$ 230, 205, 250, 225, 2, 56, 63, 2, 2, 000, 000 +$ 255, 205, 275, 225, 3, 56, 63, 2, 2, 000, 000 + +$ 180, 230, 200, 250, 4, 56, 63, 2, 2, 000, 000 +$ 205, 230, 225, 250, 5, 56, 63, 2, 2, 000, 000 +$ 230, 230, 250, 250, 6, 56, 63, 2, 2, 000, 000 +$ 255, 230, 275, 250, 7, 56, 63, 2, 2, 000, 000 + +$ 180, 255, 200, 275, 8, 56, 63, 2, 2, 000, 000 +$ 205, 255, 225, 275, 9, 56, 63, 2, 2, 000, 000 +$ 230, 255, 250, 275, 10, 56, 63, 2, 2, 000, 000 +$ 255, 255, 275, 275, 11, 56, 63, 2, 2, 000, 000 + +$ 180, 280, 200, 300, 12, 56, 63, 2, 2, 000, 000 +$ 205, 280, 225, 300, 13, 56, 63, 2, 2, 000, 000 +$ 230, 280, 250, 300, 14, 56, 63, 2, 2, 000, 000 +$ 255, 280, 275, 300, 15, 56, 63, 2, 2, 000, 000 + + +­123 + +& 180, 205, 200, 225, 0, 56, 63, 2, 2 +& 205, 205, 225, 225, 1, 56, 63, 2, 2 +& 230, 205, 250, 225, 2, 56, 63, 2, 2 +& 255, 205, 275, 225, 3, 56, 63, 2, 2 + +& 180, 230, 200, 250, 4, 56, 63, 2, 2 +& 205, 230, 225, 250, 5, 56, 63, 2, 2 +& 230, 230, 250, 250, 6, 56, 63, 2, 2 +& 255, 230, 275, 250, 7, 56, 63, 2, 2 + +& 180, 255, 200, 275, 8, 56, 63, 2, 2 +& 205, 255, 225, 275, 9, 56, 63, 2, 2 +& 230, 255, 250, 275, 10, 56, 63, 2, 2 +& 255, 255, 275, 275, 11, 56, 63, 2, 2 + +& 180, 280, 200, 300, 12, 56, 63, 2, 2 +& 205, 280, 225, 300, 13, 56, 63, 2, 2 +& 230, 280, 250, 300, 14, 56, 63, 2, 2 +& 255, 280, 275, 300, 15, 56, 63, 2, 2 + +& 415, 200, 420, 305, 0, 56, 63, 2, 2 +& 430, 200, 435, 305, 0, 56, 63, 2, 2 +& 445, 200, 450, 305, 0, 56, 63, 2, 2 + + +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +­125 + + +***** Configurar Impresora +& 345, 35, 635, 450, 7, 56, 63, 0, 2 +& 343, 372, 347, 449, 7, 7, 7, 0, 2 + +| 370, 100, 2, 5, 0, 0, Imprimir en Archivo:, +| 371, 101, 2, 5, 0, 63, Imprimir en Archivo:, +& 540, 98, 630, 117, 63, 7, 56, 0, 0 + + +| 350, 125, 2, 5, 0, 0, Longitud de la p gina:, +| 351, 126, 2, 5, 0, 63, Longitud de la p gina:, +& 540, 123, 630, 142, 63, 7, 56, 0, 0 + + +| 350, 150, 2, 5, 0, 0, C¢digos de Impresi¢n, +| 351, 151, 2, 5, 0, 63, C¢digos de Impresi¢n, + +| 350, 175, 2, 5, 0, 0, Texto Normal:, +| 351, 176, 2, 5, 0, 63, Texto Normal:, +& 465, 175, 630, 194, 63, 7, 56, 0, 0 + +| 350, 200, 2, 5, 0, 0, T. Condensado:, +| 351, 201, 2, 5, 0, 63, T. Condensado:, +& 465, 200, 630, 219, 63, 7, 56, 0, 0 + +| 350, 230, 2, 5, 0, 0, (Cod. Control) INICIO / FIN, +| 351, 231, 2, 5, 0, 63, (Cod. Control) INICIO / FIN, + +& 420, 249, 630, 311, 63, 7, 56, 0, 0 +& 420, 320, 630, 382, 63, 7, 56, 0, 0 + + +­126 + +*ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß +***** Configurar Ventas +& 345, 35, 635, 450, 7, 56, 63, 0, 2 +& 343, 287, 347, 363, 7, 7, 7, 0, 2 +*& 343, 202, 347, 268, 7, 7, 7, 0, 2 + +| 350, 40, 2, 5, 0, 0, ---:, +| 351, 41, 2, 5, 0, 63, ---:, +& 540, 38, 630, 57, 63, 7, 56, 0, 0 + + +| 350, 65, 2, 5, 0, 0, Cuota de ant. alumno:, +| 351, 66, 2, 5, 0, 63, Cuota de ant. alumno:, +& 540, 63, 630, 82, 63, 7, 56, 0, 0 + + +*| 350, 120, 2, 5, 0, 0, Hora cambio del dia:, +*| 351, 121, 2, 5, 0, 63, Hora cambio del dia:, +*& 540, 119, 630, 135, 63, 7, 56, 0, 0 + +*| 350, 160, 2, 5, 0, 0, Franjas horarias a discriminar:, +*| 351, 161, 2, 5, 0, 63, Franjas horarias a discriminar:, +*& 351, 180, 380, 197, 63, 7, 56, 0, 0 +*& 351, 200, 380, 217, 63, 7, 56, 0, 0 +*& 351, 220, 380, 237, 63, 7, 56, 0, 0 +*& 351, 240, 380, 257, 63, 7, 56, 0, 0 +*& 351, 260, 380, 277, 63, 7, 56, 0, 0 +*& 351, 280, 380, 297, 63, 7, 56, 0, 0 +**| 351, 181, 2, 5, 0, 63, :00 >-> 00:00, +**| 351, 201, 2, 5, 0, 63, :00 >-> 00:00, +**| 351, 221, 2, 5, 0, 63, :00 >-> 00:00, +**| 351, 241, 2, 5, 0, 63, :00 >-> 00:00, +**| 351, 261, 2, 5, 0, 63, :00 >-> 00:00, +**| 351, 281, 2, 5, 0, 63, :00 >-> 00:00, + +*| 350, 305, 2, 5, 0, 0, Franjas horarias de ventas:, +*| 351, 306, 2, 5, 0, 63, Franjas horarias de ventas:, +*& 351, 330, 380, 347, 63, 7, 56, 0, 0 +*& 351, 350, 380, 367, 63, 7, 56, 0, 0 +*& 351, 370, 380, 387, 63, 7, 56, 0, 0 +*& 351, 390, 380, 407, 63, 7, 56, 0, 0 +*| 351, 331, 2, 5, 0, 63, [ Hora 2 ], +*| 351, 351, 2, 5, 0, 63, [ Hora 3 ], +*| 351, 371, 2, 5, 0, 63, [ Hora 4 ], +*| 351, 391, 2, 5, 0, 63, [ Hora 5 ], + + +*| 350, 425, 2, 4, 0, 0, ¨ Permitir modificar P.C en compras ?:, +*| 351, 426, 2, 4, 0, 63, ¨ Permitir modificar P.C en compras ?:, +*& 580, 423, 630, 442, 63, 7, 56, 0, 0 +*| 351, 331, 2, 5, 0, 0, ., + + + +*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + + + + diff --git a/SYSTM/ALUM.PCX b/SYSTM/ALUM.PCX new file mode 100644 index 0000000000000000000000000000000000000000..f915beaa77e397137add571b77cf66385d7ac9e4 GIT binary patch literal 12213 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 literal 0 HcmV?d00001 diff --git a/SYSTM/ALUMBAK.PCX b/SYSTM/ALUMBAK.PCX new file mode 100644 index 0000000000000000000000000000000000000000..4ea5ae719637b8f16d7641fd80c578166ea82335 GIT binary patch literal 10761 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 literal 0 HcmV?d00001 diff --git a/SYSTM/ALUMC.PCX b/SYSTM/ALUMC.PCX new file mode 100644 index 0000000000000000000000000000000000000000..a42db9a6c193c67acf32154edcb98bab459a297c GIT binary patch literal 52578 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 Isv5KQ&m>imS^xk5 literal 0 HcmV?d00001 diff --git a/SYSTM/ALUMMP.IMG b/SYSTM/ALUMMP.IMG new file mode 100644 index 0000000..00d0cdf --- /dev/null +++ b/SYSTM/ALUMMP.IMG @@ -0,0 +1,323 @@ +#9 + +************************************************ Botones D: 1 +**** **** Botones S: 90 +** Men£ Principal ** +**** **** +************************************************ +!1, 11 + +$ 420, 160, 620, 190, 7, 63, 56, 2, 2, 000, 30 +$ 420, 200, 620, 230, 7, 63, 56, 2, 2, 000, 25 +$ 420, 240, 620, 270, 7, 63, 56, 2, 2, 000, 18 +$ 420, 280, 620, 310, 7, 63, 56, 2, 2, 000, 46 +$ 420, 320, 620, 350, 7, 63, 56, 2, 2, 000, 34 +$ 420, 360, 620, 390, 7, 63, 56, 2, 2, 000, 19 +$ 420, 400, 620, 430, 7, 63, 56, 2, 2, 000, 50 +$ 420, 440, 620, 470, 7, 63, 56, 2, 2, 000, 31 + +$ 110, 283, 297, 312, 0, 56, 63, 2, 2, 000, 000 +$ 20, 280, 300, 315, 7, 63, 56, 2, 2, 000, 000 + +$ 25, 325, 295, 465, 0, 56, 63, 2, 2, 000, 000 + + + + +­90 +| 420, 100, 10, 1, 0, 56, Men£ Principal, +| 421, 101, 10, 1, 0, 56, Men£ Principal, +| 422, 102, 10, 1, 0, 63, Men£ Principal, +*| 420, 100, 2, 8, 0, 56, Men£ Principal, +*| 421, 101, 2, 8, 0, 56, Men£ Principal, +*| 422, 102, 2, 8, 0, 63, Men£ Principal, + + +& 420, 160, 620, 190, 7, 63, 56, 2, 2 +& 420, 200, 620, 230, 7, 63, 56, 2, 2 +& 420, 240, 620, 270, 7, 63, 56, 2, 2 +& 420, 280, 620, 310, 7, 63, 56, 2, 2 +& 420, 320, 620, 350, 7, 63, 56, 2, 2 +& 420, 360, 620, 390, 7, 63, 56, 2, 2 +& 420, 400, 620, 430, 7, 63, 56, 2, 2 +& 420, 440, 620, 470, 7, 63, 56, 2, 2 + +& 20, 280, 300, 315, 7, 63, 56, 2, 2 +& 110, 283, 297, 312, 0, 56, 63, 2, 2 +| 20, 285, 2, 6, 0, 63, Creditos:, +| 21, 286, 2, 6, 0, 0, Creditos:, + +& 20, 320, 300, 470, 7, 63, 56, 2, 2 +& 25, 325, 295, 465, 0, 56, 63, 2, 2 + +*| 40, 340, 2, 6, 0, 63, Todas las opciones, +*| 40, 360, 2, 6, 0, 63, han sido desactivadas, + +*| 40, 390, 2, 6, 0, 63, C¢digo de acceso RECHAZADO, + + + +* SubMenu Dedicado a Articulo + * Ref. Articulos + * Stock Actual + * Graficas Ventas + +************************************************ Botones D: (ninguno) 2-R +**** **** Botones S: 91 +** Gestion Antiguos Alumnos ** +**** **** +************************************************ +!2, 3 + $ 220, 85, 410, 115, 7, 63, 56, 2, 2, 000, 000 + $ 220, 120, 410, 150, 7, 63, 56, 2, 2, 000, 000 + $ 220, 155, 410, 185, 7, 63, 56, 2, 2, 000, 000 + +­91 +& 215, 80, 415, 190, 7, 56, 63, -2, 2 + & 220, 85, 410, 115, 7, 63, 56, 2, 2 + | 220, 88, 2, 6, 0, 0, Ref. Articulos, + | 221, 89, 2, 6, 0, 63, Ref. Articulos, + & 220, 120, 410, 150, 7, 63, 56, 2, 2 + | 220, 123, 2, 6, 0, 0, Stock Actual, + | 221, 124, 2, 6, 0, 63, Stock Actual, + & 220, 155, 410, 185, 7, 63, 56, 2, 2 + | 220, 158, 2, 6, 0, 0, Graficas Ventas, + | 221, 159, 2, 6, 0, 63, Graficas Ventas, + + +************************************************ Botones D: 3 +**** **** Botones S: 92 +** Ordenaciones ** +**** **** +************************************************ +!3, 5 + + + + $ 220, 55, 410, 85, 7, 63, 56, 2, 2, 000, 000 + $ 220, 90, 410, 120, 7, 63, 56, 2, 2, 000, 000 + $ 220, 125, 410, 155, 7, 63, 56, 2, 2, 000, 000 + $ 220, 160, 410, 190, 7, 63, 56, 2, 2, 000, 000 + $ 220, 195, 410, 225, 7, 63, 56, 2, 2, 000, 000 + +­92 +& 215, 50, 415, 230, 7, 56, 63, -2, 2 + & 220, 55, 410, 85, 7, 63, 56, 2, 2 + | 220, 58, 2, 6, 0, 0, Nombre/Apellidos, + | 221, 59, 2, 6, 0, 63, Nombre/Apellidos, + & 220, 90, 410, 120, 7, 63, 56, 2, 2 + | 220, 93, 2, 6, 0, 0, Apellidos/Nombre, + | 221, 94, 2, 6, 0, 63, Apellidos/Nombre, + & 220, 125, 410, 155, 7, 63, 56, 2, 2 + | 220, 128, 2, 6, 0, 0, Direcci¢n, + | 221, 129, 2, 6, 0, 63, Direcci¢n, + & 220, 160, 410, 190, 7, 63, 56, 2, 2 + | 220, 163, 2, 6, 0, 0, --, + | 221, 164, 2, 6, 0, 63, --, + & 220, 195, 410, 225, 7, 63, 56, 2, 2 + | 220, 198, 2, 6, 0, 0, Cuenta Bancaria, + | 221, 199, 2, 6, 0, 63, Cuenta Bancaria, + +************************************************ Botones D: 4 +**** **** Botones S: 93 +** Listados ** +**** **** +************************************************ +!4, 3 + $ 220, 205, 410, 235, 7, 63, 56, 2, 2, 000, 000 + $ 220, 240, 410, 270, 7, 63, 56, 2, 2, 000, 000 + $ 220, 275, 410, 305, 7, 63, 56, 2, 2, 000, 000 + + +­93 +& 215, 200, 415, 310, 7, 56, 63, -2, 2 + & 220, 205, 410, 235, 7, 63, 56, 2, 2 + | 220, 208, 2, 6, 0, 0, Listado General, + | 221, 209, 2, 6, 0, 63, Listado General, + & 220, 240, 410, 270, 7, 63, 56, 2, 2 + | 220, 243, 2, 6, 0, 0, Pegatinas Direc., + | 221, 244, 2, 6, 0, 63, Pegatinas Direc., + & 220, 275, 410, 305, 7, 63, 56, 2, 2 + | 220, 278, 2, 6, 0, 0, Factura Bancaria, + | 221, 279, 2, 6, 0, 63, Factura Bancaria, + +************************************************ Botones D: 5 +**** **** Botones S: 94 +** Ventas ** +**** **** +************************************************ +!5, 4 + $ 220, 210, 410, 240, 7, 63, 56, 2, 2, 000, 000 + $ 220, 245, 410, 275, 7, 63, 56, 2, 2, 000, 000 + $ 220, 280, 410, 310, 7, 63, 56, 2, 2, 000, 000 + $ 220, 315, 410, 345, 7, 63, 56, 2, 2, 000, 000 + + +­94 +& 215, 205, 415, 350, 7, 56, 63, -2, 2 + & 220, 210, 410, 240, 7, 63, 56, 2, 2 + | 220, 213, 2, 6, 0, 0, --, + | 221, 214, 2, 6, 0, 63, --, + & 220, 245, 410, 275, 7, 63, 56, 2, 2 + | 220, 248, 2, 6, 0, 0, --, + | 221, 249, 2, 6, 0, 63, --, + & 220, 280, 410, 310, 7, 63, 56, 2, 2 + | 220, 283, 2, 6, 0, 0, --, + | 221, 284, 2, 6, 0, 63, --, + & 220, 315, 410, 345, 7, 63, 56, 2, 2 + | 220, 318, 2, 6, 0, 0, --, + | 221, 319, 2, 6, 0, 63, --, + + + +************************************************ Botones D: 6 +**** **** Botones S: 95 +** Empleados ** +**** **** +************************************************ +!6, 3 + $ 220, 165, 410, 195, 7, 63, 56, 2, 2, 000, 000 + $ 220, 200, 410, 230, 7, 63, 56, 2, 2, 000, 000 + $ 220, 235, 410, 265, 7, 63, 56, 2, 2, 000, 000 + + + + +­95 +& 215, 160, 415, 270, 7, 56, 63, -2, 2 + & 220, 165, 410, 195, 7, 63, 56, 2, 2 + | 220, 168, 2, 6, 0, 0, Info Empleados, + | 221, 169, 2, 6, 0, 63, Info Empleados, + & 220, 200, 410, 230, 7, 63, 56, 2, 2 + | 220, 203, 2, 6, 0, 0, Permisos Acceso, + | 221, 204, 2, 6, 0, 63, Permisos Acceso, + & 220, 235, 410, 265, 7, 63, 56, 2, 2 + | 220, 238, 2, 6, 0, 0, Graficas Ventas, + | 221, 239, 2, 6, 0, 63, Graficas Ventas, + + +************************************************ Botones D: 7 +**** **** Botones S: 96 +** Miscelanea ** +**** **** +************************************************ +!7, 6 + +$ 220, 220, 410, 250, 7, 63, 56, 2, 2, 000, 000 +$ 220, 255, 410, 285, 7, 63, 56, 2, 2, 000, 000 +$ 220, 290, 410, 320, 7, 63, 56, 2, 2, 000, 000 +$ 220, 325, 410, 355, 7, 63, 56, 2, 2, 000, 000 +$ 220, 360, 410, 390, 7, 63, 56, 2, 2, 000, 000 +$ 220, 395, 410, 425, 7, 63, 56, 2, 2, 000, 000 + + +­96 + +& 215, 215, 415, 430, 7, 56, 63, -2, 2 + & 220, 220, 410, 250, 7, 63, 56, 2, 2 + | 220, 223, 2, 6, 0, 0, FA, + | 221, 224, 2, 6, 0, 63, FA, + & 220, 255, 410, 285, 7, 63, 56, 2, 2 + | 220, 258, 2, 6, 0, 0, FA, + | 221, 259, 2, 6, 0, 63, FA, + & 220, 290, 410, 320, 7, 63, 56, 2, 2 + | 220, 293, 2, 6, 0, 0, FA, + | 221, 294, 2, 6, 0, 63, FA, + & 220, 325, 410, 355, 7, 63, 56, 2, 2 + | 220, 328, 2, 6, 0, 0, FA, + | 221, 329, 2, 6, 0, 63, FA, + & 220, 360, 410, 390, 7, 63, 56, 2, 2 + | 220, 363, 2, 6, 0, 0, FA, + | 221, 364, 2, 6, 0, 63, FA, + & 220, 395, 410, 425, 7, 63, 56, 2, 2 + | 220, 398, 2, 6, 0, 0, Configurar Entorno, + | 221, 399, 2, 6, 0, 63, Configurar Entorno, + + + +************************************************ Botones D: 8 +**** **** Botones S: 97 +** Escoger empresa activa ** +**** **** +************************************************ +!8, 10 + +$ 110, 75, 297, 95, 7, 63, 56, 2, 2, 000, 000 +$ 110, 95, 297, 115, 7, 63, 56, 2, 2, 000, 000 +$ 110, 115, 297, 135, 7, 63, 56, 2, 2, 000, 000 +$ 110, 135, 297, 155, 7, 63, 56, 2, 2, 000, 000 +$ 110, 155, 297, 175, 7, 63, 56, 2, 2, 000, 000 +$ 110, 175, 297, 195, 7, 63, 56, 2, 2, 000, 000 +$ 110, 195, 297, 215, 7, 63, 56, 2, 2, 000, 000 +$ 110, 215, 297, 235, 7, 63, 56, 2, 2, 000, 000 +$ 110, 235, 297, 255, 7, 63, 56, 2, 2, 000, 000 +$ 110, 255, 297, 275, 7, 63, 56, 2, 2, 000, 000 + + +­97 + +*$ 20, 280, 300, 315, 7, 63, 56, 2, 2, 000, 000 +& 105, 70, 302, 280, 7, 56, 63, -2, 2 + + & 110, 255, 297, 275, 7, 63, 56, 2, 2 + & 110, 235, 297, 255, 7, 63, 56, 2, 2 + & 110, 215, 297, 235, 7, 63, 56, 2, 2 + & 110, 195, 297, 215, 7, 63, 56, 2, 2 + & 110, 175, 297, 195, 7, 63, 56, 2, 2 + & 110, 155, 297, 175, 7, 63, 56, 2, 2 + & 110, 135, 297, 155, 7, 63, 56, 2, 2 + & 110, 115, 297, 135, 7, 63, 56, 2, 2 + & 110, 95, 297, 115, 7, 63, 56, 2, 2 + & 110, 75, 297, 95, 7, 63, 56, 2, 2 + + | 110, 255, 2, 4, 0, 0, 123456789-123456789-123456789-, + | 111, 256, 2, 4, 0, 63, 123456789-123456789-123456789-, + + +************************************************ Botones D: 9 +**** **** Botones S: 98 +** Ventas -> Empleados ** +**** **** +************************************************ +!9, 3 + $ 220, 245, 410, 275, 7, 63, 56, 2, 2, 000, 000 + $ 220, 280, 410, 310, 7, 63, 56, 2, 2, 000, 000 + $ 220, 315, 410, 345, 7, 63, 56, 2, 2, 000, 000 + + +­98 +& 215, 240, 415, 350, 7, 56, 63, -2, 2 + & 220, 245, 410, 275, 7, 63, 56, 2, 2 + | 220, 248, 2, 6, 0, 0, Datos Clientes, + | 221, 249, 2, 6, 0, 63, Datos Clientes, + & 220, 280, 410, 310, 7, 63, 56, 2, 2 + | 220, 283, 2, 6, 0, 0, Venta a Clientes, + | 221, 284, 2, 6, 0, 63, Venta a Clientes, + & 220, 315, 410, 345, 7, 63, 56, 2, 2 + | 220, 318, 2, 6, 0, 0, Datos de interes, + | 221, 319, 2, 6, 0, 63, Datos de interes, + +************************************************ Botones D: 8 <-| +**** **** Botones S: 99 <-| +** Programas externos ** +**** **** +************************************************ +­99 + +& 223, 185, 420, 395, 7, 56, 63, -2, 2 + + & 228, 370, 415, 390, 7, 63, 56, 2, 2 + & 228, 350, 415, 370, 7, 63, 56, 2, 2 + & 228, 330, 415, 350, 7, 63, 56, 2, 2 + & 228, 310, 415, 330, 7, 63, 56, 2, 2 + & 228, 290, 415, 310, 7, 63, 56, 2, 2 + & 228, 270, 415, 290, 7, 63, 56, 2, 2 + & 228, 250, 415, 270, 7, 63, 56, 2, 2 + & 228, 230, 415, 250, 7, 63, 56, 2, 2 + & 228, 210, 415, 230, 7, 63, 56, 2, 2 + & 228, 190, 415, 210, 7, 63, 56, 2, 2 + + & 190, 185, 220, 288, 7, 63, 56, 2, 2 + & 190, 292, 220, 395, 7, 63, 56, 2, 2 + | 192, 185, 2, 6, 1, 0, Eliminar Insertar , + | 193, 186, 2, 6, 1, 63, Eliminar Insertar , diff --git a/SYSTM/BOLD.CHR b/SYSTM/BOLD.CHR new file mode 100644 index 0000000000000000000000000000000000000000..8af2bc287747ceebbb68f5184244ab8ffff45238 GIT binary patch literal 14670 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 G@_zvswZl{Z literal 0 HcmV?d00001 diff --git a/SYSTM/EGAVGA.BGI b/SYSTM/EGAVGA.BGI new file mode 100644 index 0000000000000000000000000000000000000000..800163160dcf3473e5e18a35738a1385ffc999c7 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 diff --git a/SYSTM/LITT.CHR b/SYSTM/LITT.CHR new file mode 100644 index 0000000000000000000000000000000000000000..08c30672ea5a18f010183807f55c644c272ab1d4 GIT binary patch literal 5131 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 literal 0 HcmV?d00001