From 885bf44ba6213faeeb68a2c93085998916b6f0dd Mon Sep 17 00:00:00 2001 From: jdg Date: Sun, 12 Sep 2021 20:24:08 +0200 Subject: [PATCH] First commit 04/09/1996 --- ARTICULO.DBF | Bin 0 -> 467 bytes GASTOSI.000 | Bin 0 -> 1320 bytes GASTOSI.096 | Bin 0 -> 374 bytes GASTOSI.097 | Bin 0 -> 288 bytes P.EXE | Bin 0 -> 95413 bytes PRNFILE.OUT | 2 + R.BAT | 1 + README.md | 9 + SOCIOS.096 | Bin 0 -> 4808 bytes SOCIOS.097 | Bin 0 -> 29144 bytes TXT_LP.CPP | 933 +++++++++++++++++++++++++++++ TXT_LPR.CPP | 1088 ++++++++++++++++++++++++++++++++++ TXT_SOC.CPP | 1609 ++++++++++++++++++++++++++++++++++++++++++++++++++ TXT_UTL.CPP | 277 +++++++++ ZORR.DSK | Bin 0 -> 3092 bytes ZORR.EXE | Bin 0 -> 101286 bytes ZORR.H | 124 ++++ ZORR.IMG | 443 ++++++++++++++ ZORR.PRJ | Bin 0 -> 7436 bytes ZORR.RAR | Bin 0 -> 107153 bytes ZOR_MM.CPP | 400 +++++++++++++ 21 files changed, 4886 insertions(+) create mode 100644 ARTICULO.DBF create mode 100644 GASTOSI.000 create mode 100644 GASTOSI.096 create mode 100644 GASTOSI.097 create mode 100644 P.EXE create mode 100644 PRNFILE.OUT create mode 100644 R.BAT create mode 100644 README.md create mode 100644 SOCIOS.096 create mode 100644 SOCIOS.097 create mode 100644 TXT_LP.CPP create mode 100644 TXT_LPR.CPP create mode 100644 TXT_SOC.CPP create mode 100644 TXT_UTL.CPP create mode 100644 ZORR.DSK create mode 100644 ZORR.EXE create mode 100644 ZORR.H create mode 100644 ZORR.IMG create mode 100644 ZORR.PRJ create mode 100644 ZORR.RAR create mode 100644 ZOR_MM.CPP diff --git a/ARTICULO.DBF b/ARTICULO.DBF new file mode 100644 index 0000000000000000000000000000000000000000..0aa48d695cac21d9898e59bb8f843c0fa7017d6d GIT binary patch literal 467 zcmZ>ANi4}PwzBeav9e;2Vq_S$fEnmB5OxJ(1t4Z{Ni9h&N>9xzNmX#oNzF?%!U;gC zr>HS71f(XX8bSa=YF2(cy92KRD8vvZF@Q}1smBcxI2jnc%@|UP5*3^i^U{leCKUr! cD=+~G-^}8Y{2T_Ln}{*#HqbvF<`^ac06noR+W-In literal 0 HcmV?d00001 diff --git a/GASTOSI.000 b/GASTOSI.000 new file mode 100644 index 0000000000000000000000000000000000000000..eda474e392c17b2681a758d87c97121d1c441380 GIT binary patch literal 1320 zcmds$%MOAt5JmC*!uQ+NUAf>BSQ^~;1FkXcRunW{7=PHWut+BmQ*75Z8SZ7~biy=c z7lgMc@%=;K`_87~{Oy{{$<{KqGSH?m8Dm_qtKe}OTzupzs4UUW$GdJ&iY}d(WL^$h z`8I=tpANi4}PwzBeav9e;2Vq_S$fEnmB5LN?X1t4ZfU|?kQ05PxvCWa%N3=BLB3ZNiK hU|`|GstPQ~$RGfu6&Mtlz)BhM1R@iI4p5en0RWF{2NVDR literal 0 HcmV?d00001 diff --git a/GASTOSI.097 b/GASTOSI.097 new file mode 100644 index 0000000000000000000000000000000000000000..c8c1696cef16e5a2f12efaf56ac631fc5640e23a GIT binary patch literal 288 ncmZ>ANi4}PwzBeav9e;2Vq_S$0OU0gRs&)MAZADe5d;AMP$2|( literal 0 HcmV?d00001 diff --git a/P.EXE b/P.EXE new file mode 100644 index 0000000000000000000000000000000000000000..3cbbe3f301dac0cfc8de86b56f46d400356dcab4 GIT binary patch literal 95413 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�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 literal 0 HcmV?d00001 diff --git a/PRNFILE.OUT b/PRNFILE.OUT new file mode 100644 index 0000000..575de6a --- /dev/null +++ b/PRNFILE.OUT @@ -0,0 +1,2 @@ +C¢digo Proveedor Cant.Unt P.Costo P.Venta Combinado + \ No newline at end of file diff --git a/R.BAT b/R.BAT new file mode 100644 index 0000000..2a341f9 --- /dev/null +++ b/R.BAT @@ -0,0 +1 @@ +edit zorr.img diff --git a/README.md b/README.md new file mode 100644 index 0000000..75e0c84 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#LosArcosChicos + + +*04/09/1996* + +ToDo: wwtcf? + + +![screenshot](/LosArcosChicos.png "Screenshot") diff --git a/SOCIOS.096 b/SOCIOS.096 new file mode 100644 index 0000000000000000000000000000000000000000..68a6add0a411dad67d5b02e9fd552e40ef9032e0 GIT binary patch literal 4808 zcmZ>ANi4}PwzBeav9e;2Vq_S$fEnmB5PrkTz@Py0rE76XzCvoTLTO$iSSX;VG&Kpr zgef6{=3-#sJi^Jqz{uGlOoZ}LC8HrQ8UmvsFd71M3jqaC#RkF*Xazn4Sp_~5w7_TO zyui-D03qq-mr;vGLtr!nMnhmU1n`7_0uxM10&-XVEw_!>cGapz{dCj)RPzm RqaiRF0;3@?8UlkL1OQM^9ccgn literal 0 HcmV?d00001 diff --git a/SOCIOS.097 b/SOCIOS.097 new file mode 100644 index 0000000000000000000000000000000000000000..165b46e8d0a00a6a1ef1c42d62134b967086d386 GIT binary patch literal 29144 zcmeI)ziSg=9LMn|xo9-4KWZU^OP@}&$hT*{mgY7pkq_@4+qD+fgQDB4R(i%OW9wOe!n5f%W3MZ}0_Ax%;`@0ag!=qA zC4?Nb_IArEt;j`7mX~w(@9c~6;?upaPLIPh=MK|pY@c*s>~3}zX!hI_4zR#0tg_0fJXvyxCk?{q+=%H z$%L7Vn~CHErC67l0E?~&Ab`M$3doC2x%-1?H&w>Roq#{mk`94?qIZvC2q1vK1Ojr- z>8zG?EVZoTJhUCm?p65zIl<2q^X_94`0hR&MF0T={1cFuoZ4#b#-83gfq%4zwgkR^ zx01>TAb^0ofIP2{kF4Qm3WdT_{`pcaZxwWxgIfasU?X}UfB*vi2*?Xg-DF%nqD`23 zNrxG}KR1M`2q1vKaS6!bA1Oy>_yqoOkuxp=2q55(fDGxn1iqG_MF0T=rcyu-UazpX z5%^ky76Akhm`VY8T3;4{uO(;^KmdWM6p&%(veJd3*#Bw;_4}`vr`es{9Qc=xn-0ei zKmY+h1>_lB-II6e5cryt76Akh_}>KNS$#$XzLuax009K1Qb0!ZWsNN9h;d6gYNzYQ s4BwT9g9spifR6%lMi(dWwFE5!2p}+(0&-Sg7J;uNXc0gFfvFVu4QkxzhyVZp literal 0 HcmV?d00001 diff --git a/TXT_LP.CPP b/TXT_LP.CPP new file mode 100644 index 0000000..9276f43 --- /dev/null +++ b/TXT_LP.CPP @@ -0,0 +1,933 @@ +#include +#include +#include +#include + +#include "d:\program\src_dos\libs\bdatos\bdatos.hh" +#include "zorr.h" + +#define NLINEAS_REF 18 + +BDatos BCompras; // Base de datos de Compraserencias +INFO_PRECIOS SCompras; // Estructura de referencias + +int OrdenGestionInterna; + +extern CONFIG Config; + +void RastreaFicheroGastosi(void); + +void Error( int code ); +void MuestraDatosCompras( int RowStart ); + +int ComparaRegistros( const void *A, const void *B ); + +void EditItemCompras( char columna, int linea ); +void ComprasNuevoRegistro( INFO_PRECIOS *MSCompras ); +void MuestraCompras( char columna, int linea, char como ); +void ObtenCoordenadasCompras( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ); +void OrdenarGastosi(void); + +void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 ); +void MatchDrawCompras( char Row, INFO_PRECIOS MCompras, char como ); +void BuscaCompras( char TipoBusqueda, char *CurrRow, int *CurrCompras ); +int Match_Compras( INFO_PRECIOS A, INFO_PRECIOS B ); +void EditMatchCompras( char Row, INFO_PRECIOS * MCompras ); +int ObtenMatchCompras( INFO_PRECIOS *MCompras ); + + + +void ImprimeCompraserencias( char como ); +void ImprimeCabeceraCompras( char como, FILE *file_out ); +void DibujaPantallaGastosInt( void ); + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte principal del m¢dulo Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + + /**************************************************************************\ +|* *| +|* InfoProducto *| +|* *| +|* Descripci¢n: *| +|* Controla la introduccion de datos y muestreo asi como todo *| +|* el interfaz de usuario... *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void GastosInternos(void) +{ +struct Boton_Texto BT[6]; + + +BT[0].x = 1; BT[0].y = 1; strcpy( BT[0].Texto, " &Men£ Principal "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 50; +BT[1].x = 20; BT[1].y = 1; strcpy( BT[1].Texto, " &Ins. Art."); BT[1].ID_T1 = 0; BT[1].ID_T2 = 23; + +BT[2].x = 33; BT[2].y = 1; strcpy( BT[2].Texto, " &Borr. Art."); BT[2].ID_T1 = 0; BT[2].ID_T2 = 48; +BT[3].x = 47; BT[3].y = 1; strcpy( BT[3].Texto, " &Ordenar"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 24; + +BT[4].x = 58; BT[4].y = 1; strcpy( BT[4].Texto, " &Gast.Prov."); BT[4].ID_T1 = 0; BT[4].ID_T2 = 0; +BT[5].x = 72; BT[5].y = 1; strcpy( BT[5].Texto, " Im&pr. "); BT[5].ID_T1 = 0; BT[5].ID_T2 = 25; + + char buffer[100], ok = 0; + int BPush, key; + + char oldCol; + char CurrRow; // Linea sobre la que estamos + char CurrCol; // Columna sobre la que estamos + long CurrCompras; // Producto sobre el que estamos posicionados a golpes + + _setcursortype( _NOCURSOR ); + DibujaPantallaGastosInt(); + + sprintf( buffer, "GastosI.%03d", AnoActual ); + if ( BCompras.AbrirReg( buffer, sizeof( INFO_PRECIOS ) ) == ERROR ) + Error(0x01); + + // Si no hay registros, creamos uno almenos. + if ( BCompras.Registros() == 0 ) + { + ComprasNuevoRegistro( &SCompras ); + if ( BCompras.InsReg( (void *)&SCompras, BCompras.Registros(), ARRIBA ) == ERROR ) + Error(0x02); + } + + CurrCompras = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrRow + CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, 0 ) == ERROR ) + Error(0x03); + + CurrCol = 0; oldCol = -1; + + do { + if ( CurrCol != oldCol ) + { + oldCol = CurrCol; + } + + MuestraCompras( CurrCol, CurrRow, INTENSO ); + BPush = Funcion_Botones(STD_BY, 6, BT); + MuestraCompras( CurrCol, CurrRow, 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() ) != 13 && key != 27 ) + ungetch( key ); + EditItemCompras( CurrCol, CurrRow ); + _setcursortype( _NOCURSOR ); + if ( BCompras.EscribeReg( (void *)&SCompras, (CurrRow + CurrCompras) ) == ERROR ) + Error(0x04); + 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 = 5; + break; + // Flecha Derecha + case 77: + case 9: + CurrCol++; if ( CurrCol > 5 ) CurrCol = 0; + break; + // Flecha Arriba + case 72: + if ( (CurrRow + CurrCompras) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrCompras -= NLINEAS_REF; + if ( CurrCompras < 0 ) CurrCompras = 0; + + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrCompras > 0 ) CurrCompras++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + break; + // Flecha Abajo + case 80: + if ( ( CurrRow + CurrCompras ) < BCompras.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrCompras += NLINEAS_REF; + + while ( (CurrCompras + CurrRow) >= BCompras.Registros() ) CurrCompras--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + } else + CurrRow++; + } + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + break; + // Inicio + case 71: + CurrRow = 0; + if ( CurrCompras != 0 ) + { + CurrCompras = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + } + + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + + break; + // Fin + case 79: + CurrRow = 0; + if ( CurrCompras != BCompras.Registros() - NLINEAS_REF ) + { + CurrCompras = BCompras.Registros() - NLINEAS_REF; + while( CurrCompras >= BCompras.Registros() ) CurrCompras--; + if ( CurrCompras < 0 ) { + CurrCompras = 0; + CurrRow = BCompras.Registros()-1; + } + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + } + + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + + break; + // AvanceR pido + case 81: + CurrRow = 0; CurrCompras += NLINEAS_REF; + + while ( (CurrCompras + CurrRow) >= BCompras.Registros() ) CurrCompras--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + + break; + // Retroceso R pido + case 73: + CurrRow = NLINEAS_REF - 1; CurrCompras -= NLINEAS_REF; + if ( CurrCompras < 0 ) CurrCompras = 0; + + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrCompras > 0 ) CurrCompras++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + + break; + + } + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + // Imprimir Lista de socios + case 6: +// MuestraImpresionesCompras(); + break; + // Menu Principal + case 1: + ok = 1; + break; + // Eliminar + case 3: + while( kbhit() ) getch(); + if ( Optar( 1, "ATENCION", "Eliminar  un gasto interno", "confirme eliminacion", NULL ) ) + { + if ( BCompras.DelReg( CurrCompras + CurrRow ) == ERROR ) + Error(0x05); + if ( BCompras.Registros() == 0 ) + { + ComprasNuevoRegistro( &SCompras ); + if ( BCompras.InsReg( (void *)&SCompras, BCompras.Registros(), ARRIBA ) == ERROR ) + Error(0x02); + CurrRow = 0; + } else + + // Si he borrado el £ltimo registro subo una linea + if ( (CurrCompras+CurrRow) >= ( BCompras.Registros() - 2 ) ) + { + if ( (CurrRow + CurrCompras) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrCompras -= NLINEAS_REF; + if ( CurrCompras < 0 ) CurrCompras = 0; + + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrCompras ) >= BCompras.Registros() && CurrCompras > 0 ) CurrCompras++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + } + break; + // Insertar + case 2: + ComprasNuevoRegistro( &SCompras ); + if ( BCompras.InsReg( (void *)&SCompras, (CurrCompras + CurrRow), ARRIBA ) == ERROR ) + Error(0x02); + if ( ( CurrRow + CurrCompras ) < BCompras.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrCompras += NLINEAS_REF; + + while ( (CurrCompras + CurrRow) >= BCompras.Registros() ) CurrCompras--; + + } else + CurrRow++; + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, (CurrCompras + CurrRow) ) == ERROR ) + Error(0x03); + + break; + + // Ordenar + case 4: + OrdenarGastosi(); + CurrCompras = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosCompras( CurrRow + CurrCompras ); + if ( BCompras.LeeReg( (void *)&SCompras, 0 ) == ERROR ) + Error(0x03); + + CurrCol = 0; + + break; + // Gastos por proveedor + case 5: + RastreaFicheroGastosi(); + break; + default: + while( kbhit() ) getch(); + break; + } + + } while( !ok ); + + BCompras.CerrarReg(); +} + + + + /**************************************************************************\ +|* *| +|* MuestraDatosCompras *| +|* *| +|* 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 MuestraDatosCompras( int RowStart ) +{ + int linea, campo; + char dev; + + // Imprimo la NLINEAS_REF que caben en la pantalla + dev = OK; + for ( linea=0; linea < NLINEAS_REF && dev == OK; linea++ ) + { + dev = BCompras.LeeReg( (void *)&SCompras, RowStart + linea ); + if ( dev == OK ) + // Por cada linea hay 6 campos, ehhh!!! + for ( campo=0; campo < 6; campo++ ) + MuestraCompras( campo, linea, NORMAL ); + } + + // Ahora limpio los restantes huecos si los hay + if ( dev != OK ) + { + linea--; + + textbackground( BLACK ); + textcolor( WHITE ); + for ( ; linea < NLINEAS_REF; linea++ ) + for ( campo=0; campo < 6; campo++ ) + { + gotoxy( 1, linea + 6 ); + cprintf( "³ ³ ³ ³ ³ ³ ³"); + } + } +} + + /**************************************************************************\ +|* *| +|* MuestraCompras *| +|* *| +|* 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 MuestraCompras( char columna, int linea, char como ) +{ + char buffer[80]; + char buffer1[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasCompras( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Fecha + case 0: + sprintf ( buffer, " %02d-%02d-%02d ", (int)SCompras.Fecha.da_day, (int)SCompras.Fecha.da_mon, SCompras.Fecha.da_year ); + break; + // Articulo + case 1: + sprintf ( buffer, "%24s", SCompras.Articulo ); + break; + // Cantidades + case 2: + sprintf ( buffer, " %04d", SCompras.Cantidades ); + break; + // Precio + case 3: + formatea_u_long( SCompras.Precio, buffer1 ); + sprintf ( buffer, " %7s", buffer1 ); + break; + // Total + case 4: + formatea_u_long( SCompras.Precio * SCompras.Cantidades, buffer1 ); + sprintf ( buffer, "%13s", buffer1 ); + break; + // N§ Proveedor + case 5: + sprintf ( buffer, " %03d", SCompras.Proveedor ); + break; + } + + textbackground( ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + strnset( buffer1, 32, X1 ); + + textcolor( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + gotoxy( X0, Y0 ); + cprintf( "%s", buffer ); + +} + + + /**************************************************************************\ +|* *| +|* EditItemCompras *| +|* *| +|* 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 EditItemCompras( char columna, int linea ) +{ + char buffer[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasCompras( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Fecha + case 0: + sprintf ( buffer, "%02d%02d", (int)SCompras.Fecha.da_day, (int)SCompras.Fecha.da_mon ); + if ( !( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + if ( ( (buffer[0]-'0')*10 + (buffer[1]-'0') ) <= 31 && ( (buffer[2]-'0')*10 + (buffer[3]-'0') ) <= 12 ) + { + SCompras.Fecha.da_day = (char)((buffer[0]-'0')*10 + (buffer[1]-'0')); + SCompras.Fecha.da_mon = (char)((buffer[2]-'0')*10 + (buffer[3]-'0')); + SCompras.Fecha.da_year = AnoActual; + } + break; + // Articulo + case 1: + strcpy ( buffer, SCompras.Articulo ); + if ( !( InputCadenaG( buffer, 0, 24, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SCompras.Articulo, buffer ); + break; + // Cantidad + case 2: + sprintf ( buffer, "%d", SCompras.Cantidades ); + if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SCompras.Cantidades = atoi( buffer ); + MuestraCompras( 4, linea, NORMAL ); + } + break; + // Precio + case 3: + sprintf ( buffer, "%ld", SCompras.Precio ); + if ( !( InputCadenaG( buffer, 0, 6, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SCompras.Precio = atol( buffer ); + MuestraCompras( 4, linea, NORMAL ); + } + break; + //Total + case 4: + break; + // Proveedor + case 5: + sprintf ( buffer, "%d", SCompras.Proveedor ); + if ( !( InputCadenaG( buffer, 0, 3, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SCompras.Proveedor = atoi( buffer ); + break; + } + +} + + /**************************************************************************\ +|* *| +|* ObtenCoordenadasCompras *| +|* *| +|* 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 ObtenCoordenadasCompras( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + // Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 ) + *Y0 = 6 + linea; + *Y1 = 6 + linea; + + switch( columna ) + { + case 0: + *X0 = 2; *X1 = 10; + break; + case 1: + *X0 = 13; *X1 = 24; + break; + case 2: + *X0 = 38; *X1 = 7; + break; + case 3: + *X0 = 46; *X1 = 10; + break; + case 4: + *X0 = 57; *X1 = 13; + break; + case 5: + *X0 = 71; *X1 = 9; + break; + } + + +} + + /**************************************************************************\ +|* *| +|* ComprasNuevoRegistro *| +|* *| +|* Descripci¢n: *| +|* Limpia el buffer, para un nuevo registro. *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ComprasNuevoRegistro( INFO_PRECIOS *NSCompras ) +{ + + NSCompras -> Fecha.da_day = 0; + NSCompras -> Fecha.da_mon = 0; + NSCompras -> Fecha.da_year = AnoActual; + + NSCompras -> Articulo[0] = '\0'; + NSCompras -> Cantidades = 0; + NSCompras -> Precio = 0; + NSCompras -> Proveedor = 0; + +} + + + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte secundaria del m¢dulo Û +// Û Û +// Û Secci¢n de Busqueda de refecencias Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* MuestraImpresionesRed *| +|* *| +|* Descripci¢n: *| +|* Muestra un cuadro con las distintas opciones de impresi¢n *| +|* *| +|* Entradas:(ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ + + + /**************************************************************************\ +|* *| +|* ImprimeCompraserencias *| +|* *| +|* Descripci¢n: *| +|* Imprime todas las referencias seg£n se le indique *| +|* *| +|* Entradas: *| +|* Como imprimir las referencias *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ImprimeCompraserencias( char como ) +{ + long i, old_reg; + FILE *file_out; + + old_reg = BCompras.RegActual(); + + if ( !Config.Printer ) + { + if ( ( file_out = fopen( Config.PrintTo, "w" ) ) == NULL ) + return; + } else + file_out = stdprn; + + ImprimeCabeceraCompras( como, file_out ); + + for ( i=0; i> 8 ) ) + { + Proveedor = atoi( buffer ); + ok = 1; + } + Optar( ENCUADRE, NULL ); + + if ( ok == 1 ) + { + Optar( ENCUADRE, "Realizando rastreo...", "Esto puede tardar unos", "minutos, por favor, epere...", NULL ); + + + + old_pos = BCompras.RegActual(); + + dev = OK; + for ( i=0; i < BCompras.Registros(); i++ ) + { + BCompras.LeeReg( (void *)&SCompras, i ); + if ( SCompras.Proveedor == Proveedor ) + { + if ( SCompras.Fecha.da_mon > 0 && SCompras.Fecha.da_mon <= 12 ) + Meses[ SCompras.Fecha.da_mon - 1 ] += SCompras.Cantidades * SCompras.Precio; + } + } + + for( i = 0; i < 6; i++ ) + { + formatea_u_long( Meses[i], buffer ); + formatea_u_long( Meses[i+6], buffer1); + switch( i ) + { + case 0: sprintf( MesesF[i], "Enero: %10s Julio: %10s", buffer, buffer1 ); break; + case 1: sprintf( MesesF[i], "Febrero:%10s Agosto: %10s", buffer, buffer1 ); break; + case 2: sprintf( MesesF[i], "Marzo: %10s Septiembre: %10s", buffer, buffer1 ); break; + case 3: sprintf( MesesF[i], "Abril: %10s Octubre: %10s", buffer, buffer1 ); break; + case 4: sprintf( MesesF[i], "Mayo: %10s Noviembre: %10s", buffer, buffer1 ); break; + case 5: sprintf( MesesF[i], "Junio: %10s Diciembre: %10s", buffer, buffer1 ); break; + } + } + + + Optar( ENCUADRE, NULL ); + + Optar( 0, "Rastreo concluido", MesesF[0], MesesF[1], MesesF[2], MesesF[3], MesesF[4], MesesF[5], NULL ); + while( kbhit() ) getch(); + + BCompras.LeeReg( (void *)&SCompras, old_pos ); + } + + + + +} + + + +void OrdenarGastosi(void) +{ +/* +BDatos BCompras; // Base de datos de Compraserencias +INFO_PRECIOS SCompras; // Estructura de referencias + +int OrdenGestionInterna; +*/ +struct Boton_Texto BT[4]; +int devolver; + +BT[0].x = 32; BT[0].y = 9; strcpy( BT[0].Texto, " &Fecha de compra "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 0; +BT[1].x = 32; BT[1].y = 11; strcpy( BT[1].Texto, " &Nombre de Articulo"); BT[1].ID_T1 = 0; BT[1].ID_T2 = 0; +BT[2].x = 32; BT[2].y = 13; strcpy( BT[2].Texto, " &Proveedor del Art "); BT[2].ID_T1 = 0; BT[2].ID_T2 = 0; +BT[3].x = 32; BT[3].y = 15; strcpy( BT[3].Texto, " &Cancelar operacion"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 0; + + Optar( ENCUADRE, "Elija orden a seguir", NULL ); + + while( ( devolver = Funcion_Botones(STD_BY, 4, BT) ) < 1 || devolver > 4 ) while ( kbhit() ) getch(); + + if ( devolver != 4 ) + { + OrdenGestionInterna = devolver; + BCompras.SortReg( ComparaRegistros ); + } + + Optar( ENCUADRE, NULL ); + +} + + +int ComparaRegistros( const void *A, const void *B ) +{ + // Tipos de ordenaciones posibles + switch( OrdenGestionInterna ) + { + // Por Proveedor + case 3: + if ( ( ((INFO_PRECIOS *)A) -> Proveedor ) < ( ((INFO_PRECIOS *)B) -> Proveedor ) ) return -1; + if ( ( ((INFO_PRECIOS *)A) -> Proveedor ) == ( ((INFO_PRECIOS *)B) -> Proveedor ) ) return 0; + if ( ( ((INFO_PRECIOS *)A) -> Proveedor ) > ( ((INFO_PRECIOS *)B) -> Proveedor ) ) return 1; + break; + // Por Articulo + case 2: + return strcmpi( ( ((INFO_PRECIOS *)A) -> Articulo ), ( ((INFO_PRECIOS *)B) -> Articulo ) ); + case 1: + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_year ) < ( ((INFO_PRECIOS *)B) -> Fecha.da_year ) ) return -1; + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_year ) > ( ((INFO_PRECIOS *)B) -> Fecha.da_year ) ) return 1; + + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_mon ) < ( ((INFO_PRECIOS *)B) -> Fecha.da_mon ) ) return -1; + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_mon ) > ( ((INFO_PRECIOS *)B) -> Fecha.da_mon ) ) return 1; + + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_day ) < ( ((INFO_PRECIOS *)B) -> Fecha.da_day ) ) return -1; + if ( ( ((INFO_PRECIOS *)A) -> Fecha.da_day ) > ( ((INFO_PRECIOS *)B) -> Fecha.da_day ) ) return 1; + return 0; + } + + return -1; +} + + + + + diff --git a/TXT_LPR.CPP b/TXT_LPR.CPP new file mode 100644 index 0000000..2cb3aa6 --- /dev/null +++ b/TXT_LPR.CPP @@ -0,0 +1,1088 @@ +#include +#include +#include +#include + +#include "d:\program\src_dos\libs\bdatos\bdatos.hh" +#include "zorr.h" + +#define NLINEAS_REF 18 + +BDatos BPrecios; // Base de datos de Precioserencias +INFO_ARTICULOS SPrecios; // Estructura de referencias + +int OrdenPrecios; + +extern CONFIG Config; + +void RastreaFicheroGastosi(void); + +void Error( int code ); +void MuestraDatosPrecios( int RowStart ); + +int ComparaRegistrosPrecio( const void *A, const void *B ); + +void EditItemPrecios( char columna, int linea ); +void PreciosNuevoRegistro( INFO_ARTICULOS *MSPrecios ); +void MuestraPrecios( char columna, int linea, char como ); +void ObtenCoordenadasPrecios( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ); +void OrdenaPrecios(void); + +void ObtenCoordenadasMatchPr( char Row, int *X0, int *Y0, int *X1, int *Y1 ); +void MatchDrawPrecios( char Row, INFO_ARTICULOS MPrecios, char como ); +void BuscaPrecios( char TipoBusqueda, char *CurrRow, int *CurrPrecios ); +int Match_Precios( INFO_ARTICULOS A, INFO_ARTICULOS B ); +void EditMatchPrecios( char Row, INFO_ARTICULOS * MPrecios ); +int ObtenMatchPrecios( INFO_ARTICULOS *MPrecios ); + + + +void ImprimePrecioserencias( char como ); +void ImprimeCabeceraPrecios( char como, FILE *file_out ); +void DibujaPantallaArticulos( void ); + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte principal del m¢dulo Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + + /**************************************************************************\ +|* *| +|* InfoProducto *| +|* *| +|* Descripci¢n: *| +|* Controla la introduccion de datos y muestreo asi como todo *| +|* el interfaz de usuario... *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ListaPrecios(void) +{ +struct Boton_Texto BT[6]; + + +BT[0].x = 1; BT[0].y = 1; strcpy( BT[0].Texto, " &Men£ Principal "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 50; +BT[1].x = 20; BT[1].y = 1; strcpy( BT[1].Texto, " &Ins. Art."); BT[1].ID_T1 = 0; BT[1].ID_T2 = 23; + +BT[2].x = 33; BT[2].y = 1; strcpy( BT[2].Texto, " &Borr. Art."); BT[2].ID_T1 = 0; BT[2].ID_T2 = 48; +BT[3].x = 47; BT[3].y = 1; strcpy( BT[3].Texto, " &Ordenar"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 24; + +BT[4].x = 58; BT[4].y = 1; strcpy( BT[4].Texto, " &Buscar"); BT[4].ID_T1 = 0; BT[4].ID_T2 = 48; +BT[5].x = 72; BT[5].y = 1; strcpy( BT[5].Texto, " Im&pr. "); BT[5].ID_T1 = 0; BT[5].ID_T2 = 25; + + char buffer[100], ok = 0; + int BPush, key; + + char oldCol; + char CurrRow; // Linea sobre la que estamos + char CurrCol; // Columna sobre la que estamos + int CurrPrecios; // Producto sobre el que estamos posicionados a golpes + + _setcursortype( _NOCURSOR ); + DibujaPantallaArticulos(); + + if ( BPrecios.AbrirReg( "Articulo.dbf", sizeof( INFO_ARTICULOS ) ) == ERROR ) + Error(0x00); + + // Si no hay registros, creamos uno almenos. + if ( BPrecios.Registros() == 0 ) + { + PreciosNuevoRegistro( &SPrecios ); + if ( BPrecios.InsReg( (void *)&SPrecios, BPrecios.Registros(), ARRIBA ) == ERROR ) + Error(0x00); + } + + CurrPrecios = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrRow + CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, 0 ) == ERROR ) + Error(0x00); + + CurrCol = 0; oldCol = -1; + + do { + if ( CurrCol != oldCol ) + { + oldCol = CurrCol; + } + + MuestraPrecios( CurrCol, CurrRow, INTENSO ); + BPush = Funcion_Botones(STD_BY, 6, BT); + MuestraPrecios( CurrCol, CurrRow, 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() ) != 13 && key != 27 ) + ungetch( key ); + EditItemPrecios( CurrCol, CurrRow ); + _setcursortype( _NOCURSOR ); + if ( BPrecios.EscribeReg( (void *)&SPrecios, (CurrRow + CurrPrecios) ) == ERROR ) + Error(0x00); + 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 = 3; + break; + // Flecha Derecha + case 77: + case 9: + CurrCol++; if ( CurrCol > 3 ) CurrCol = 0; + break; + // Flecha Arriba + case 72: + if ( (CurrRow + CurrPrecios) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrPrecios -= NLINEAS_REF; + if ( CurrPrecios < 0 ) CurrPrecios = 0; + + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrPrecios > 0 ) CurrPrecios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + break; + // Flecha Abajo + case 80: + if ( ( CurrRow + CurrPrecios ) < BPrecios.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrPrecios += NLINEAS_REF; + + while ( (CurrPrecios + CurrRow) >= BPrecios.Registros() ) CurrPrecios--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + } else + CurrRow++; + } + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + break; + // Inicio + case 71: + CurrRow = 0; + if ( CurrPrecios != 0 ) + { + CurrPrecios = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + } + + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + + break; + // Fin + case 79: + CurrRow = 0; + if ( CurrPrecios != BPrecios.Registros() - NLINEAS_REF ) + { + CurrPrecios = BPrecios.Registros() - NLINEAS_REF; + while( CurrPrecios >= BPrecios.Registros() ) CurrPrecios--; + if ( CurrPrecios < 0 ) + { + CurrPrecios = 0; + CurrRow = BPrecios.Registros()-1; + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + } + + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + + break; + // AvanceR pido + case 81: + CurrRow = 0; CurrPrecios += NLINEAS_REF; + + while ( (CurrPrecios + CurrRow) >= BPrecios.Registros() ) CurrPrecios--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + + break; + // Retroceso R pido + case 73: + CurrRow = NLINEAS_REF - 1; CurrPrecios -= NLINEAS_REF; + if ( CurrPrecios < 0 ) CurrPrecios = 0; + + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrPrecios > 0 ) CurrPrecios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + + break; + // Gastos por proveedor + case 82: + BuscaPrecios( ATRAS, &CurrRow, &CurrPrecios ); + break; + // Gastos por proveedor + case 83: + BuscaPrecios( ADELANTE, &CurrRow, &CurrPrecios ); + break; + + } + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + // Imprimir Lista de socios + case 6: +// MuestraImpresionesPrecios(); + break; + // Menu Principal + case 1: + ok = 1; + break; + // Eliminar + case 3: + while( kbhit() ) getch(); + if ( Optar( 1, "ATENCION", "Eliminar  un articulo", "confirme eliminacion", NULL ) ) + { + if ( BPrecios.DelReg( CurrPrecios + CurrRow ) == ERROR ) + Error(0x00); + if ( BPrecios.Registros() == 0 ) + { + PreciosNuevoRegistro( &SPrecios ); + if ( BPrecios.InsReg( (void *)&SPrecios, BPrecios.Registros(), ARRIBA ) == ERROR ) + Error(0x00); + CurrRow = 0; + } else + + // Si he borrado el £ltimo registro subo una linea + if ( (CurrPrecios+CurrRow) >= ( BPrecios.Registros() - 2 ) ) + { + if ( (CurrRow + CurrPrecios) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrPrecios -= NLINEAS_REF; + if ( CurrPrecios < 0 ) CurrPrecios = 0; + + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrPrecios ) >= BPrecios.Registros() && CurrPrecios > 0 ) CurrPrecios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + } + break; + // Insertar + case 2: + PreciosNuevoRegistro( &SPrecios ); + if ( BPrecios.InsReg( (void *)&SPrecios, (CurrPrecios + CurrRow), ARRIBA ) == ERROR ) + Error(0x00); + if ( ( CurrRow + CurrPrecios ) < BPrecios.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrPrecios += NLINEAS_REF; + + while ( (CurrPrecios + CurrRow) >= BPrecios.Registros() ) CurrPrecios--; + + } else + CurrRow++; + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, (CurrPrecios + CurrRow) ) == ERROR ) + Error(0x00); + + break; + + // Ordenar + case 4: + OrdenaPrecios(); + CurrPrecios = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( CurrRow + CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, 0 ) == ERROR ) + Error(0x00); + + CurrCol = 0; + + break; + // Gastos por proveedor + case 5: + BuscaPrecios( NUEVA_BUSQUEDA, &CurrRow, &CurrPrecios ); + break; + default: + while( kbhit() ) getch(); + break; + } + + } while( !ok ); + + BPrecios.CerrarReg(); +} + + + + /**************************************************************************\ +|* *| +|* MuestraDatosPrecios *| +|* *| +|* 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 MuestraDatosPrecios( int RowStart ) +{ + int linea, campo; + char dev; + + // Imprimo la NLINEAS_REF que caben en la pantalla + dev = OK; + for ( linea=0; linea < NLINEAS_REF && dev == OK; linea++ ) + { + dev = BPrecios.LeeReg( (void *)&SPrecios, RowStart + linea ); + if ( dev == OK ) + // Por cada linea hay 4 campos, ehhh!!! + for ( campo=0; campo < 4; campo++ ) + MuestraPrecios( campo, linea, NORMAL ); + } + + // Ahora limpio los restantes huecos si los hay + if ( dev != OK ) + { + linea--; + + textbackground( BLACK ); + textcolor( WHITE ); + for ( ; linea < NLINEAS_REF; linea++ ) + gotoxy( 1, linea + 6 ); + cprintf( "³ ³ ³ ³ ³"); + + } +} + + /**************************************************************************\ +|* *| +|* MuestraPrecios *| +|* *| +|* 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 MuestraPrecios( char columna, int linea, char como ) +{ + char buffer[80]; + char buffer1[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasPrecios( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Articulo + case 0: + sprintf ( buffer, "%42s", (int)SPrecios.Articulo ); + break; + // Precio Articulo + case 1: + formatea_u_long( SPrecios.Precio, buffer1 ); + sprintf ( buffer, "%11s", buffer1 ); + break; + // Precio Articulo2 + case 2: + formatea_u_long( SPrecios.PrecioArt, buffer1 ); + sprintf ( buffer, "%11s", buffer1 ); + break; + // Ubicacion + case 3: + sprintf ( buffer, "%11s", SPrecios.Ubicacion ); + break; + } + + textbackground( ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + strnset( buffer1, 32, X1 ); + + textcolor( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + gotoxy( X0, Y0 ); + cprintf( "%s", buffer ); + +} + + + /**************************************************************************\ +|* *| +|* EditItemPrecios *| +|* *| +|* 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 EditItemPrecios( char columna, int linea ) +{ + char buffer[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasPrecios( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Articulo + case 0: + strcpy ( buffer, SPrecios.Articulo ); + if ( !( InputCadenaG( buffer, 0, 42, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SPrecios.Articulo, buffer ); + break; + // Precio Articulo + case 1: + sprintf ( buffer, "%ld", SPrecios.Precio ); + if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SPrecios.Precio = atol( buffer ); + break; + // Precio Articulo + case 2: + sprintf ( buffer, "%ld", SPrecios.PrecioArt ); + if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SPrecios.PrecioArt = atol( buffer ); + break; + // Ubicacion + case 3: + strcpy ( buffer, SPrecios.Ubicacion ); + if ( !( InputCadenaG( buffer, 0, 11, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SPrecios.Ubicacion, buffer ); + break; + } +} + + /**************************************************************************\ +|* *| +|* ObtenCoordenadasPrecios *| +|* *| +|* 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 ObtenCoordenadasPrecios( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + // Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 ) + *Y0 = 6 + linea; + *Y1 = 6 + linea; + + switch( columna ) + { + case 0: + *X0 = 2; *X1 = 42; + break; + case 1: + *X0 = 45; *X1 = 11; + break; + case 2: + *X0 = 57; *X1 = 11; + break; + case 3: + *X0 = 69; *X1 = 11; + break; + } + + +} + + /**************************************************************************\ +|* *| +|* PreciosNuevoRegistro *| +|* *| +|* Descripci¢n: *| +|* Limpia el buffer, para un nuevo registro. *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void PreciosNuevoRegistro( INFO_ARTICULOS *NSPrecios ) +{ + + + NSPrecios -> Articulo[0] = '\0'; + NSPrecios -> Ubicacion[0] = '\0'; + NSPrecios -> Precio = 0; + NSPrecios -> PrecioArt = 0; + +} + + + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte secundaria del m¢dulo Û +// Û Û +// Û Secci¢n de Busqueda de refecencias Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* MuestraImpresionesRed *| +|* *| +|* Descripci¢n: *| +|* Muestra un cuadro con las distintas opciones de impresi¢n *| +|* *| +|* Entradas:(ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ + + + /**************************************************************************\ +|* *| +|* ImprimePrecioserencias *| +|* *| +|* Descripci¢n: *| +|* Imprime todas las referencias seg£n se le indique *| +|* *| +|* Entradas: *| +|* Como imprimir las referencias *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ImprimePrecioserencias( char como ) +{ + long i, old_reg; + FILE *file_out; + + old_reg = BPrecios.RegActual(); + + if ( !Config.Printer ) + { + if ( ( file_out = fopen( Config.PrintTo, "w" ) ) == NULL ) + return; + } else + file_out = stdprn; + + ImprimeCabeceraPrecios( como, file_out ); + + for ( i=0; i Precio ) < ( ((INFO_ARTICULOS *)B) -> Precio ) ) return -1; + if ( ( ((INFO_ARTICULOS *)A) -> Precio ) == ( ((INFO_ARTICULOS *)B) -> Precio ) ) return 0; + if ( ( ((INFO_ARTICULOS *)A) -> Precio ) > ( ((INFO_ARTICULOS *)B) -> Precio ) ) return 1; + break; + // Por Precio + case 2: + return strcmpi( ( ((INFO_ARTICULOS *)A) -> Articulo ), ( ((INFO_ARTICULOS *)B) -> Articulo ) ); + case 1: + return strcmpi( ( ((INFO_ARTICULOS *)A) -> Ubicacion ), ( ((INFO_ARTICULOS *)B) -> Ubicacion ) ); + } + + return -1; +} + + +void OrdenaPrecios(void) +{ +/* +BDatos BPrecios; // Base de datos de Precioserencias +INFO_ARTICULOS SPrecios; // Estructura de referencias + +int OrdenPrecios; +*/ +struct Boton_Texto BT[4]; +int devolver; + +BT[0].x = 32; BT[0].y = 9; strcpy( BT[0].Texto, " &Ubicacion "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 0; +BT[1].x = 32; BT[1].y = 11; strcpy( BT[1].Texto, " &Nombre de Articulo"); BT[1].ID_T1 = 0; BT[1].ID_T2 = 0; +BT[2].x = 32; BT[2].y = 13; strcpy( BT[2].Texto, " &Precio de Articulo"); BT[2].ID_T1 = 0; BT[2].ID_T2 = 0; +BT[3].x = 32; BT[3].y = 15; strcpy( BT[3].Texto, " &Cancelar operacion"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 0; + + Optar( ENCUADRE, "Elija orden a seguir", NULL ); + + while( ( devolver = Funcion_Botones(STD_BY, 4, BT) ) < 1 || devolver > 4 ) while ( kbhit() ) getch(); + + if ( devolver != 4 ) + { + OrdenPrecios = devolver; + BPrecios.SortReg( ComparaRegistrosPrecio ); + } + + Optar( ENCUADRE, NULL ); + +} + + + + /**************************************************************************\ +|* *| +|* BuscaPrecios *| +|* *| +|* 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 BuscaPrecios( char TipoBusqueda, char *CurrRow, int *CurrPrecios ) +{ + static INFO_ARTICULOS MPrecios; + char enc; long i; + + + switch ( TipoBusqueda ) + { + case NUEVA_BUSQUEDA: + if ( ObtenMatchPrecios( &MPrecios ) != OK ) + return; + i = 0; + break; + case ATRAS: + case ADELANTE: + i = ( *CurrRow + *CurrPrecios )+TipoBusqueda; + if ( i < 0 || i >= BPrecios.Registros() ) return; + break; + } + + Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL ); + enc = 0; + while ( i < BPrecios.Registros() && !enc ) + { + if ( BPrecios.LeeReg( (void *)&SPrecios, i ) == ERROR ) + Error( 0x00 ); + if ( Match_Precios( SPrecios, MPrecios ) ) + enc = 1; + else + i++; + } + + Optar( ENCUADRE, NULL ); + + if ( enc ) + { + *CurrRow = 0; *CurrPrecios = i; + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosPrecios( *CurrRow + *CurrPrecios ); + if ( BPrecios.LeeReg( (void *)&SPrecios, 0 ) == ERROR ) + Error(0x00); + } 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 ( BPrecios.LeeReg( (void *)&SPrecios, (*CurrRow + *CurrPrecios) ) == ERROR ) + Error( 0x00 ); + + +} + + /**************************************************************************\ +|* *| +|* Match_Precios *| +|* *| +|* Descripci¢n: *| +|* Compara dos registros y devuelve la posible coincidencia *| +|* *| +|* Entradas: *| +|* Registros a comparar *| +|* *| +|* Salidas: *| +|* Resultado de la comparaci¢n *| +|* *| + \**************************************************************************/ +int Match_Precios( INFO_ARTICULOS A, INFO_ARTICULOS B ) +{ + if ( B.Precio != 0 ) + return (A.Precio == B.Precio ); + if ( B.Articulo[0] != '\0' ) + return ( strncmpi( A.Articulo, B.Articulo, strlen( B.Articulo ) ) == 0 ); + if ( B.Ubicacion[0] != '\0' ) + return ( strncmpi( A.Ubicacion, B.Ubicacion, strlen( B.Ubicacion ) ) == 0 ); + return 0; +} + + /**************************************************************************\ +|* *| +|* ObtenMatchPrecios *| +|* *| +|* 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 ObtenMatchPrecios( INFO_ARTICULOS *MPrecios ) +{ +struct Boton_Texto BT[6]; + +BT[0].x = 22; BT[0].y = 15; strcpy( BT[0].Texto, " &Aceptar "); BT[0].ID_T1 = 00; BT[0].ID_T2 = 0; +BT[1].x = 51; BT[1].y = 15; strcpy( BT[1].Texto, " &Cancelar"); BT[1].ID_T1 = 00; BT[1].ID_T2 = 0; + + char Row, ok, i; + int BPush, key, DEV; + + Optar( ENCUADRE, "Comando: Buscar", "Articulo: ", "Precio: ", "Ubicaci¢n: ", NULL ); + + ok = 0; Row = 0; + + PreciosNuevoRegistro( MPrecios ); + + do + { + MatchDrawPrecios(Row, *MPrecios, INTENSO); + BPush = Funcion_Botones(STD_BY, 2, BT); + MatchDrawPrecios(Row, *MPrecios, 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 ); + EditMatchPrecios( Row, MPrecios ); + for ( i=0; i < 6; i++ ) + MatchDrawPrecios(i, *MPrecios, NORMAL); + break; + case -1: + switch ( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + // Flecha Arriba + case 72: + Row--; if ( Row < 0 ) Row = 2; + break; + // Flecha Derecha + case 77: + case 9: + // Flecha Abajo + case 80: + Row++; if ( Row > 2 ) Row = 0; + break; + } + break; + case 1: + DEV = OK; ok = 1; + break; + case 2: + DEV = ERROR; ok = 1; + break; + } + + } while ( !ok ); + + Optar( ENCUADRE, NULL ); + + return DEV; + +} + + /**************************************************************************\ +|* *| +|* EditMatchPrecios *| +|* *| +|* Descripci¢n: *| +|* Edita el patron de busqueda *| +|* *| +|* Entradas: *| +|* Campo a editar, y lugar donde almacenarlo *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void EditMatchPrecios( char Row, INFO_ARTICULOS * MPrecios ) +{ + int X0, Y0, X1, Y1; + char buffer[80]; + + ObtenCoordenadasMatchPr( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 1: + sprintf( buffer, "%lu", MPrecios -> Precio ); + if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + PreciosNuevoRegistro( MPrecios ); + MPrecios -> Precio = atol(buffer); + } + break; + case 0: + strcpy( buffer, MPrecios -> Articulo ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + PreciosNuevoRegistro( MPrecios ); + strcpy ( MPrecios -> Articulo, buffer ); + } + break; + case 2: + strcpy( buffer, MPrecios -> Ubicacion ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + PreciosNuevoRegistro( MPrecios ); + strcpy ( MPrecios -> Ubicacion, buffer ); + } + break; + } + + + +} + + /**************************************************************************\ +|* *| +|* MatchDrawPrecios *| +|* *| +|* 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 MatchDrawPrecios( char Row, INFO_ARTICULOS MPrecios, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80], buffer1[80]; + + ObtenCoordenadasMatchPr( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 1: + sprintf( buffer, " %9ld", MPrecios.Precio ); + break; + case 0: + sprintf( buffer, "%15s", MPrecios.Articulo ); + break; + case 2: + sprintf( buffer, "%20s", MPrecios.Ubicacion ); + break; + } + + textbackground( ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + textcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + + gotoxy( X0, Y0 ); + cprintf( "%s", buffer ); + +} + + /**************************************************************************\ +|* *| +|* MatchDrawPrecios *| +|* *| +|* Descripci¢n: *| +|* Obtiene las coordenadas relativas al campo dado. *| +|* *| +|* Entradas: *| +|* Campo a obtener las coordenadas, y coordenadas de salida *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ObtenCoordenadasMatchPr( char Row, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + switch( Row ) + { + case 0: + *X0 = 35; *X1 = 10; + *Y0 = 9; *Y1 = 9; + break; + case 1: + *X0 = 35; *X1 = 15; + *Y0 = 10; *Y1 = 10; + break; + case 2: + *X0 = 35; *X1 = 20; + *Y0 = 11; *Y1 = 11; + break; + } + +} + diff --git a/TXT_SOC.CPP b/TXT_SOC.CPP new file mode 100644 index 0000000..9490025 --- /dev/null +++ b/TXT_SOC.CPP @@ -0,0 +1,1609 @@ +#include +#include +#include +#include + +#include "d:\program\src_dos\libs\bdatos\bdatos.hh" +#include "zorr.h" + +#define NLINEAS_REF 11 +#define NLINEAS_REFs 6 + +#define ATRAS -1 +#define NUEVA_BUSQUEDA 0 +#define ADELANTE 1 + +extern int AnoActual; + +BDatos BSocios; // Base de datos de Socioserencias + +INFO_SOCIOS SSocios; // Estructura de referencias + +int OrdenaSocios; + +extern CONFIG Config; + +void RastreaFicheroSocios(void); + +void Error( int code ); +void MuestraDatosSocios( int RowStart ); + +int ComparaRegistrosSocios( const void *A, const void *B ); +void OrdenarComprasSocios(void); + +void EditItemSocios( char columna, int linea ); +void SociosNuevoRegistro( INFO_SOCIOS *MSSocios ); +void MuestraSocios( char columna, int linea, char como ); +void ObtenCoordenadasSocios( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ); +void OrdenarSocios(void); + +void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 ); +void MatchDrawSocios( char Row, INFO_SOCIOS MSocios, char como ); +int Match_Socios( INFO_SOCIOS A, INFO_SOCIOS B ); +void EditMatchSocios( char Row, INFO_SOCIOS * MSocios ); +int ObtenMatchSocios( INFO_SOCIOS *MSocios ); + +int InsertaSocios( int pos ); +void EliminaCompraSocios( int pos ); + + +void ImprimeSocioserencias( char como ); +void ImprimeCabeceraSocios( char como, FILE *file_out ); +void DibujaPantallaSocios( void ); + +void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 ); +void MatchDrawSocios( char Row, INFO_SOCIOS MSocios, char como ) ; +void EditMatchSocios( char Row, INFO_SOCIOS * MSocios ) ; +int ObtenMatchSocios( INFO_SOCIOS *MSocios ) ; +int Match_Socios( INFO_SOCIOS A, INFO_SOCIOS B ) ; +void BuscaSocios( char TipoBusqueda, char *CurrRow, int *CurrSocios ); + + +void MuestraDatosComprasSocios( int RowStart ); + +int CurrSociosC; // Producto sobre el que estamos posicionados a golpes + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte principal del m¢dulo Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + + /**************************************************************************\ +|* *| +|* InfoProducto *| +|* *| +|* Descripci¢n: *| +|* Controla la introduccion de datos y muestreo asi como todo *| +|* el interfaz de usuario... *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void GestionSocios(void) +{ +struct Boton_Texto BT[9]; +long i; +int ConmutarSocios = 0; + +BT[0].x = 58; BT[0].y = 1; strcpy( BT[0].Texto, " &Men£ Principal "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 50; +BT[1].x = 50; BT[1].y = 3; strcpy( BT[1].Texto, " &Insertar Reg"); BT[1].ID_T1 = 0; BT[1].ID_T2 = 23; + +BT[2].x = 66; BT[2].y = 3; strcpy( BT[2].Texto, " &Eliminar Reg"); BT[2].ID_T1 = 0; BT[2].ID_T2 = 18; +BT[3].x = 51; BT[3].y = 5; strcpy( BT[3].Texto, " &<--"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 0; + +BT[4].x = 58; BT[4].y = 5; strcpy( BT[4].Texto, " &Buscar Socio"); BT[4].ID_T1 = 0; BT[4].ID_T2 = 48; +BT[5].x = 74; BT[5].y = 5; strcpy( BT[5].Texto, " --&>"); BT[5].ID_T1 = 0; BT[5].ID_T2 = 0; + +BT[6].x = 55; BT[6].y = 7; strcpy( BT[6].Texto, " &Reordenar Base de Datos"); BT[6].ID_T1 = 0; BT[6].ID_T2 = 19; +BT[7].x = 35; BT[7].y = 4; strcpy( BT[7].Texto, " &Compras Soc"); BT[7].ID_T1 = 0; BT[7].ID_T2 = 46; +BT[8].x = 32; BT[8].y = 7; strcpy( BT[8].Texto, " &Estadisticas Soc"); BT[8].ID_T1 = 0; BT[8].ID_T2 = 18; + + char buffer[100], ok = 0; + int BPush, key; + + char oldCol; + char CurrRow; // Linea sobre la que estamos + char CurrCol; // Columna sobre la que estamos + int CurrSocios; // Producto sobre el que estamos posicionados a golpes + int CurrTopSocios; // Producto sobre el que estamos posicionados a golpes + + _setcursortype( _NOCURSOR ); + DibujaPantallaSocios(); + + sprintf( buffer, "Socios.%03d", AnoActual ); + + if ( BSocios.AbrirReg( buffer, sizeof( INFO_SOCIOS ) ) == ERROR ) + Error(0x01); + + // Si no hay registros, creamos uno almenos. + if ( BSocios.Registros() == 0 ) + { + SociosNuevoRegistro( &SSocios ); + if ( BSocios.InsReg( (void *)&SSocios, BSocios.Registros(), ARRIBA ) == ERROR ) + Error(0x01); + } + + CurrSocios = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrRow + CurrSocios ); + + if ( BSocios.LeeReg( (void *)&SSocios, 0 ) == ERROR ) + Error(0x03); + + CurrCol = 0; oldCol = -1; + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + + do { + if ( CurrCol != oldCol ) + { + oldCol = CurrCol; + } + + MuestraSocios( CurrCol, ( CurrCol < 6 ) ? CurrRow : CurrTopSocios, INTENSO ); + BPush = Funcion_Botones(STD_BY, 9, BT); + MuestraSocios( CurrCol, ( CurrCol < 6 ) ? CurrRow : CurrTopSocios, 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() ) != 13 && key != 27 ) + ungetch( key ); + EditItemSocios( CurrCol, ( CurrCol < 6 ) ? CurrRow : CurrTopSocios ); + _setcursortype( _NOCURSOR ); + if ( BSocios.EscribeReg( (void *)&SSocios, (CurrRow + CurrSocios) ) == ERROR ) + Error(0x04); + break; + case -1: // Hay una tecla especial en BUFFER + switch( getch() ) + { + // Flecha Izquierda + case 75: + case 15: + CurrCol--; + if ( ConmutarSocios == 0 ) + { + if ( CurrCol < 0 ) CurrCol = 5; + } else { + if ( CurrCol < 6 ) CurrCol = 7; + } + break; + // Flecha Derecha + case 77: + case 9: + CurrCol++; + if ( ConmutarSocios == 0 ) + { + if ( CurrCol > 5 ) CurrCol = 0; + } else { + if ( CurrCol > 7 ) CurrCol = 6; + } + break; + // Flecha Arriba + case 72: + if ( ConmutarSocios == 0 ) + { + if ( (CurrRow + CurrSocios) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrSocios -= NLINEAS_REF; + if ( CurrSocios < 0 ) CurrSocios = 0; + + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrSocios > 0 ) CurrSocios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + if ( (CurrSociosC + CurrTopSocios) > 0 ) + { + if ( ( CurrTopSocios ) <= 0 ) + { + CurrTopSocios = NLINEAS_REFs - 1; CurrSociosC -= NLINEAS_REFs; + if ( CurrSociosC < 0 ) CurrSociosC = 0; + + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrTopSocios > 0 ) CurrTopSocios--; + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrSociosC > 0 ) CurrSociosC++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } else { + CurrTopSocios --; if ( CurrTopSocios < 0 ) CurrTopSocios = 0; + } + } + } + break; + // Flecha Abajo + case 80: + if ( ConmutarSocios == 0 ) + { + if ( ( CurrRow + CurrSocios ) < BSocios.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrSocios += NLINEAS_REF; + + while ( (CurrSocios + CurrRow) >= BSocios.Registros() ) CurrSocios--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + } else + CurrRow++; + } + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + if ( ( CurrTopSocios + CurrSociosC ) < SSocios.NCompras - 1 ) + { + + if ( ( CurrTopSocios ) >= NLINEAS_REFs - 1 ) + { + CurrTopSocios = 0; CurrSociosC += NLINEAS_REFs; + + while ( (CurrSociosC + CurrTopSocios) >= SSocios.NCompras ) CurrSocios--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } else + CurrTopSocios++; + } + } + break; + // Inicio + case 71: + if ( ConmutarSocios == 0 ) + { + CurrRow = 0; + if ( CurrSocios != 0 ) + { + CurrSocios = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + } + + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + CurrTopSocios = CurrSociosC = 0; + MuestraDatosComprasSocios( 0 ); + } + break; + // Fin + case 79: + if ( ConmutarSocios == 0 ) + { + CurrRow = 0; + if ( CurrSocios != BSocios.Registros() - NLINEAS_REF ) + { + CurrSocios = BSocios.Registros() - NLINEAS_REF; + while( CurrSocios >= BSocios.Registros() ) CurrSocios--; + if ( CurrSocios < 0 ) { + CurrSocios = 0; + CurrRow = BSocios.Registros()-1; + } + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + } + + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + CurrTopSocios = 0; + CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( CurrSociosC ); + } + + break; + // AvanceR pido + case 81: + if ( ConmutarSocios == 0 ) + { + CurrRow = 0; CurrSocios += NLINEAS_REF; + + while ( (CurrSocios + CurrRow) >= BSocios.Registros() ) CurrSocios--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + CurrTopSocios = 0; CurrSociosC += NLINEAS_REFs; + + while ( (CurrSociosC + CurrTopSocios) >= SSocios.NCompras ) CurrSociosC--; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } + break; + // Retroceso R pido + case 73: + if ( ConmutarSocios == 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrSocios -= NLINEAS_REF; + if ( CurrSocios < 0 ) CurrSocios = 0; + + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrSocios > 0 ) CurrSocios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + }else{ + CurrTopSocios = NLINEAS_REFs - 1; CurrSociosC -= NLINEAS_REFs; + if ( CurrSociosC < 0 ) CurrSociosC = 0; + + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrTopSocios > 0 ) CurrTopSocios--; + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrSociosC > 0 ) CurrSociosC++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } + break; + + } + break; + // Menu Principal + case 1: + ok = 1; + break; + // Eliminar + case 3: + while( kbhit() ) getch(); + if ( ConmutarSocios == 0 ) + { + if ( Optar( 1, "ATENCION", "Eliminar  un gasto interno", "confirme eliminacion", NULL ) ) + { + if ( BSocios.DelReg( CurrSocios + CurrRow ) == ERROR ) + Error(0x05); + if ( BSocios.Registros() == 0 ) + { + SociosNuevoRegistro( &SSocios ); + if ( BSocios.InsReg( (void *)&SSocios, BSocios.Registros(), ARRIBA ) == ERROR ) + Error(0x02); + CurrRow = 0; + } else + + // Si he borrado el £ltimo registro subo una linea + if ( (CurrSocios+CurrRow) >= ( BSocios.Registros() - 2 ) ) + { + if ( (CurrRow + CurrSocios) > 0 ) + { + if ( ( CurrRow ) <= 0 ) + { + CurrRow = NLINEAS_REF - 1; CurrSocios -= NLINEAS_REF; + if ( CurrSocios < 0 ) CurrSocios = 0; + + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrRow > 0 ) CurrRow--; + while( ( CurrRow + CurrSocios ) >= BSocios.Registros() && CurrSocios > 0 ) CurrSocios++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + } else { + CurrRow --; if ( CurrRow < 0 ) CurrRow = 0; + } + } + + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + } + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + if ( Optar( 1, "ATENCION", "Eliminar  un la compra", "de uno de sus clientes", NULL ) ) + { + EliminaCompraSocios( CurrSociosC + CurrTopSocios ); + if ( BSocios.EscribeReg( (void *)&SSocios, (CurrRow + CurrSocios) ) == ERROR ) + Error(0x04); + + if ( SSocios.NCompras == 0 ) + { + InsertaSocios( SSocios.NCompras ); + if ( BSocios.EscribeReg( (void *)&SSocios, (CurrRow + CurrSocios) ) == ERROR ) + Error(0x04); + CurrTopSocios = 0; + } else + + // Si he borrado el £ltimo registro subo una linea + if ( (CurrSociosC+CurrTopSocios) >= ( SSocios.NCompras - 2 ) ) + { + if ( (CurrTopSocios + CurrSociosC) > 0 ) + { + if ( ( CurrTopSocios ) <= 0 ) + { + CurrTopSocios = NLINEAS_REFs - 1; CurrSociosC -= NLINEAS_REFs; + if ( CurrSociosC < 0 ) CurrSociosC = 0; + + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrTopSocios > 0 ) CurrTopSocios--; + while( ( CurrTopSocios + CurrSociosC ) >= SSocios.NCompras && CurrSociosC > 0 ) CurrSociosC++; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } else { + CurrTopSocios --; if ( CurrTopSocios < 0 ) CurrTopSocios = 0; + } + } + } + + if ( BSocios.EscribeReg( (void *)&SSocios, (CurrRow + CurrSocios) ) == ERROR ) + Error(0x04); + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } + + } + break; + // Insertar + case 2: + if ( ConmutarSocios == 0 ) + { + SociosNuevoRegistro( &SSocios ); + if ( BSocios.InsReg( (void *)&SSocios, (CurrSocios + CurrRow), ARRIBA ) == ERROR ) + Error(0x02); + if ( ( CurrRow + CurrSocios ) < BSocios.Registros() - 1 ) + { + + if ( ( CurrRow ) >= NLINEAS_REF - 1 ) + { + CurrRow = 0; CurrSocios += NLINEAS_REF; + + while ( (CurrSocios + CurrRow) >= BSocios.Registros() ) CurrSocios--; + + } else + CurrRow++; + } + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, (CurrSocios + CurrRow) ) == ERROR ) + Error(0x03); + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + if ( InsertaSocios( (CurrSociosC + CurrTopSocios) ) != ERROR ) + { + if ( ( CurrTopSocios + CurrSociosC ) < SSocios.NCompras - 1 ) + { + + if ( ( CurrTopSocios ) >= NLINEAS_REFs - 1 ) + { + CurrTopSocios = 0; CurrSociosC += NLINEAS_REFs; + + while ( (CurrSociosC + CurrTopSocios) >= SSocios.NCompras ) CurrSociosC--; + + } else + CurrTopSocios++; + } + + if ( BSocios.EscribeReg( (void *)&SSocios, (CurrRow + CurrSocios) ) == ERROR ) + Error(0x04); + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosComprasSocios( CurrSociosC ); + } + } + break; + + // Ordenar + case 7: + if ( ConmutarSocios == 0 ) + { + OrdenarSocios(); + + CurrSocios = 0; CurrRow = 0; + + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( CurrRow + CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, 0 ) == ERROR ) + Error(0x03); + CurrCol = 0; + CurrTopSocios = 0; CurrSociosC = SSocios.NCompras - 1; + MuestraDatosComprasSocios( SSocios.NCompras - 1 ); + } else { + OrdenarComprasSocios(); + MuestraDatosComprasSocios( CurrTopSocios + CurrSociosC ); + + } + break; + // Conmutar + case 8: + ConmutarSocios = !ConmutarSocios; + if ( ConmutarSocios == 0 ) CurrCol = 0 ; else CurrCol = 6; + break; + // Rastrear + case 9: + RastreaFicheroSocios(); + break; + + + default: + while( kbhit() ) getch(); + break; + // Busqueda Atras + case 4: + BuscaSocios( ATRAS, &CurrRow, &CurrSocios ); + break; + // Buscar + case 5: + BuscaSocios( NUEVA_BUSQUEDA, &CurrRow, &CurrSocios ); + break; + // Busqueda Adelante + case 6: + BuscaSocios( ADELANTE, &CurrRow, &CurrSocios ); + break; + } + + } while( !ok ); + + BSocios.CerrarReg(); +} + + + + /**************************************************************************\ +|* *| +|* MuestraDatosSocios *| +|* *| +|* 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 MuestraDatosSocios( int RowStart ) +{ + int linea, campo; + char dev; + + // Imprimo la NLINEAS_REF que caben en la pantalla + dev = OK; + for ( linea=0; linea < NLINEAS_REF && dev == OK; linea++ ) + { + dev = BSocios.LeeReg( (void *)&SSocios, RowStart + linea ); + if ( dev == OK ) + + // Por cada linea hay 6 campos, ehhh!!! + for ( campo=0; campo < 6; campo++ ) + MuestraSocios( campo, linea, NORMAL ); + } + + // Ahora limpio los restantes huecos si los hay + if ( dev != OK ) + { + linea--; + + textbackground( BLACK ); + textcolor( WHITE ); + for ( ; linea < NLINEAS_REF; linea++ ) + for ( campo=0; campo < 6; campo++ ) + { + gotoxy( 1, linea + 13 ); + cprintf( "³ ³ ³ ³ ³ ³"); + } + } +} + + /**************************************************************************\ +|* *| +|* MuestraDatosComprasSocios *| +|* *| +|* 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 MuestraDatosComprasSocios( int RowStart ) +{ + int linea, campo; + char dev; + + // Imprimo la NLINEAS_REF que caben en la pantalla + dev = OK; + for ( linea=0; linea < 6 && dev == OK; linea++ ) + { + dev = ( RowStart + linea ) < SSocios.NCompras ? OK : ERROR; + + if ( dev == OK ) + + // Por cada linea hay 2 campos, ehhh!!! + for ( campo=6; campo < 8; campo++ ) + MuestraSocios( campo, linea, NORMAL ); + } + + // Ahora limpio los restantes huecos si los hay + if ( dev != OK ) + { + linea--; + + textbackground( BLACK ); + textcolor( WHITE ); + for ( ; linea < 6; linea++ ) + for ( campo=6; campo < 8; campo++ ) + { + gotoxy( 1, linea + 3 ); + cprintf( "³ ³ ³"); + } + } +} + + /**************************************************************************\ +|* *| +|* MuestraSocios *| +|* *| +|* 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 MuestraSocios( char columna, int linea, char como ) +{ + char buffer[80]; + char buffer1[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasSocios( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // N§ Socio + case 0: + sprintf ( buffer, " %04ld ", SSocios.NSocio ); + break; + // Nombre + case 1: + sprintf ( buffer, "%15s", SSocios.Nombre ); + break; + // Apellido + case 2: + sprintf ( buffer, "%20s", SSocios.Apellido ); + break; + // Direccion + case 3: + sprintf ( buffer, "%25s", SSocios.Direccion ); + break; + // N§ + case 4: + sprintf ( buffer, "%3d", SSocios.Num ); + break; + // Piso + case 5: + sprintf ( buffer, "%4s", SSocios.Piso ); + break; + + + // A partir de aqui corresponde a las compras del socio... + // Fecha + case 6: + sprintf ( buffer, " %02d-%02d-%02d ", (int)SSocios.CSocios[CurrSociosC+linea].dia, (int)SSocios.CSocios[CurrSociosC+linea].mes, AnoActual ); + break; + // Cantidad + case 7: + formatea_u_long( SSocios.CSocios[CurrSociosC+linea].Cantidad, buffer1 ); + sprintf ( buffer, " %10s ", buffer1 ); + break; + } + + textbackground( ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + strnset( buffer1, 32, X1 ); + + textcolor( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + gotoxy( X0, Y0 ); + cprintf( "%s", buffer ); + +} + + + /**************************************************************************\ +|* *| +|* EditItemSocios *| +|* *| +|* 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 EditItemSocios( char columna, int linea ) +{ + char buffer[80]; + + int X0, Y0, X1, Y1; + + ObtenCoordenadasSocios( columna, linea, &X0, &Y0, &X1, &Y1 ); + + switch( columna ) + { + // Numero de Socio + case 0: + sprintf ( buffer, "%ld", SSocios.NSocio ); + if ( !( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SSocios.NSocio = atol( buffer ); + break; + // Nombre + case 1: + strcpy ( buffer, SSocios.Nombre ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SSocios.Nombre, buffer ); + break; + // Apellido + case 2: + strcpy ( buffer, SSocios.Apellido ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SSocios.Apellido, buffer ); + break; + // Direccion + case 3: + strcpy ( buffer, SSocios.Direccion ); + if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SSocios.Direccion, buffer ); + break; + // N§ + case 4: + sprintf ( buffer, "%d", SSocios.Num ); + if ( !( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SSocios.Num = atoi( buffer ); + break; + // Piso + case 5: + strcpy ( buffer, SSocios.Piso ); + if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + strcpy ( SSocios.Piso, buffer ); + break; + + + + // Apartir de aqui empiezan los gatos de los socios + // Fecha + case 6: + sprintf ( buffer, "%02d%02d", (int)SSocios.CSocios[CurrSociosC+linea].dia, (int)SSocios.CSocios[CurrSociosC+linea].mes ); + if ( !( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + if ( atol(buffer)!=0 && ( (buffer[0]-'0')*10 + (buffer[1]-'0') ) <= 31 && ( (buffer[2]-'0')*10 + (buffer[3]-'0') ) <= 12 ) + { + SSocios.CSocios[CurrSociosC+linea].dia = (char)((buffer[0]-'0')*10 + (buffer[1]-'0')); + SSocios.CSocios[CurrSociosC+linea].mes = (char)((buffer[2]-'0')*10 + (buffer[3]-'0')); + } + break; + // Cantidad + case 7: + sprintf ( buffer, "%ld", SSocios.CSocios[CurrSociosC+linea].Cantidad ); + if ( !( InputCadenaG( buffer, 0, 6, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + SSocios.CSocios[CurrSociosC+linea].Cantidad = atol( buffer ); + break; + } + +} + + /**************************************************************************\ +|* *| +|* ObtenCoordenadasSocios *| +|* *| +|* 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 ObtenCoordenadasSocios( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 ) +{ + +if ( columna < 6 ) +{ + *Y0 = 13 + linea; + *Y1 = 13 + linea; +} else { + *Y0 = 3 + linea; + *Y1 = 3 + linea; +} + + switch( columna ) + { + case 0: + *X0 = 2; *X1 = 6; + break; + case 1: + *X0 = 9; *X1 = 15; + break; + case 2: + *X0 = 25; *X1 = 20; + break; + case 3: + *X0 = 46; *X1 = 25; + break; + case 4: + *X0 = 72; *X1 = 3; + break; + case 5: + *X0 = 76; *X1 = 4; + break; + + case 6: + *X0 = 2; *X1 = 10; + break; + case 7: + *X0 = 13; *X1 = 13; + break; + + + } + + +} + + /**************************************************************************\ +|* *| +|* SociosNuevoRegistro *| +|* *| +|* Descripci¢n: *| +|* Limpia el buffer, para un nuevo registro. *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void SociosNuevoRegistro( INFO_SOCIOS *NSSocios ) +{ + int i; + + NSSocios -> NSocio = 0; + NSSocios -> Nombre[0] = '\0'; + NSSocios -> Apellido[0] = '\0'; + NSSocios -> Direccion[0] = '\0'; + NSSocios -> Num = 0; + NSSocios -> Piso[0] = '\0'; + + NSSocios -> NCompras = 1; + + for ( i = 0; i < 240; i++ ) + { + NSSocios -> CSocios[i].dia = 0; + NSSocios -> CSocios[i].mes = 0; + NSSocios -> CSocios[i].Cantidad = 0; + } + NSSocios -> CSocios[0].dia = 0; + NSSocios -> CSocios[0].mes = 0; + NSSocios -> CSocios[0].Cantidad = 0; + +} + + + + +// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß +// Û Parte secundaria del m¢dulo Û +// Û Û +// Û Secci¢n de Busqueda de refecencias Û +// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ + + /**************************************************************************\ +|* *| +|* MuestraImpresionesRed *| +|* *| +|* Descripci¢n: *| +|* Muestra un cuadro con las distintas opciones de impresi¢n *| +|* *| +|* Entradas:(ninguna) *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ + + + /**************************************************************************\ +|* *| +|* ImprimeSocioserencias *| +|* *| +|* Descripci¢n: *| +|* Imprime todas las referencias seg£n se le indique *| +|* *| +|* Entradas: *| +|* Como imprimir las referencias *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ImprimeSocioserencias( char como ) +{ + long i, old_reg; + FILE *file_out; + + old_reg = BSocios.RegActual(); + + if ( !Config.Printer ) + { + if ( ( file_out = fopen( Config.PrintTo, "w" ) ) == NULL ) + return; + } else + file_out = stdprn; + + ImprimeCabeceraSocios( como, file_out ); + + for ( i=0; i 0 && SSocios.CSocios[i].mes <= 12 ) + Meses[ SSocios.CSocios[i].mes - 1 ] += SSocios.CSocios[i].Cantidad; + } + + for( i = 0; i < 6; i++ ) + { + formatea_u_long( Meses[i], buffer ); + formatea_u_long( Meses[i+6], buffer1); + switch( i ) + { + case 0: sprintf( MesesF[i], "Enero: %10s Julio: %10s", buffer, buffer1 ); break; + case 1: sprintf( MesesF[i], "Febrero:%10s Agosto: %10s", buffer, buffer1 ); break; + case 2: sprintf( MesesF[i], "Marzo: %10s Septiembre: %10s", buffer, buffer1 ); break; + case 3: sprintf( MesesF[i], "Abril: %10s Octubre: %10s", buffer, buffer1 ); break; + case 4: sprintf( MesesF[i], "Mayo: %10s Noviembre: %10s", buffer, buffer1 ); break; + case 5: sprintf( MesesF[i], "Junio: %10s Diciembre: %10s", buffer, buffer1 ); break; + } + } + + + Optar( ENCUADRE, NULL ); + + Optar( 0, "Ratreo concluido", MesesF[0], MesesF[1], MesesF[2], MesesF[3], MesesF[4], MesesF[5], NULL ); + while( kbhit() ) getch(); + + +} + + + +void OrdenarSocios(void) +{ +/* +BDatos BSocios; // Base de datos de Socioserencias +INFO_SOCIOS SSocios; // Estructura de referencias + +int OrdenaSocios; +*/ +struct Boton_Texto BT[4]; +int devolver; + +BT[0].x = 32; BT[0].y = 9; strcpy( BT[0].Texto, " &N£mero de Socio "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 0; +BT[1].x = 32; BT[1].y = 11; strcpy( BT[1].Texto, " &Nombre y Apellidos"); BT[1].ID_T1 = 0; BT[1].ID_T2 = 0; +BT[2].x = 32; BT[2].y = 13; strcpy( BT[2].Texto, " &Direcci¢n "); BT[2].ID_T1 = 0; BT[2].ID_T2 = 30; +BT[3].x = 32; BT[3].y = 15; strcpy( BT[3].Texto, " &Cancelar operacion"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 46; + + Optar( ENCUADRE, "Elija orden a seguir", NULL ); + + while( ( devolver = Funcion_Botones(STD_BY, 4, BT) ) < 1 || devolver > 4 ) while ( kbhit() ) getch(); + + if ( devolver != 4 ) + { + OrdenaSocios = devolver; + BSocios.SortReg( ComparaRegistrosSocios ); + } + + Optar( ENCUADRE, NULL ); + +} + + +int ComparaRegistrosSocios( const void *A, const void *B ) +{ + int dev; + + // Tipos de ordenaciones posibles + switch( OrdenaSocios ) + { + // Por N§ de Socio + case 1: + if ( ( ((INFO_SOCIOS *)A) -> NSocio ) < ( ((INFO_SOCIOS *)B) -> NSocio ) ) return -1; + if ( ( ((INFO_SOCIOS *)A) -> NSocio ) == ( ((INFO_SOCIOS *)B) -> NSocio ) ) return 0; + if ( ( ((INFO_SOCIOS *)A) -> NSocio ) > ( ((INFO_SOCIOS *)B) -> NSocio ) ) return 1; + break; + // Por Nombre y Apellido + case 2: + dev = strcmpi( ( ((INFO_SOCIOS *)A) -> Nombre ), ( ((INFO_SOCIOS *)B) -> Nombre ) ); + if ( dev == 0 ) + dev = strcmpi( ( ((INFO_SOCIOS *)A) -> Apellido ), ( ((INFO_SOCIOS *)B) -> Apellido ) ); + return dev; + // Direccion + case 3: + return strcmpi( ( ((INFO_SOCIOS *)A) -> Direccion ), ( ((INFO_SOCIOS *)B) -> Direccion ) ); + // Fecha + case 4: + if ( ( ((struct ComprasSocios *)A) -> mes ) < ( ((struct ComprasSocios *)B) -> mes ) ) return -1; + if ( ( ((struct ComprasSocios *)A) -> mes ) > ( ((struct ComprasSocios *)B) -> mes ) ) return 1; + + if ( ( ((struct ComprasSocios *)A) -> dia ) < ( ((struct ComprasSocios *)B) -> dia ) ) return -1; + if ( ( ((struct ComprasSocios *)A) -> dia ) > ( ((struct ComprasSocios *)B) -> dia ) ) return 1; + return 0; + // Cantidad + case 5: + if ( ( ((struct ComprasSocios *)A) -> Cantidad ) < ( ((struct ComprasSocios *)B) -> Cantidad ) ) return -1; + if ( ( ((struct ComprasSocios *)A) -> Cantidad ) == ( ((struct ComprasSocios *)B) -> Cantidad ) ) return 0; + if ( ( ((struct ComprasSocios *)A) -> Cantidad ) > ( ((struct ComprasSocios *)B) -> Cantidad ) ) return 1; + break; + + + } + + return -1; +} + + + +int InsertaSocios( int pos ) +{ + int avance; + + if ( pos > 238 ) + return ERROR; + + SSocios.NCompras ++; + + avance = SSocios.NCompras - 1; + + while( avance > pos ) + { + SSocios.CSocios[avance].dia = SSocios.CSocios[ avance - 1 ].dia; + SSocios.CSocios[avance].mes = SSocios.CSocios[ avance - 1 ].mes; + SSocios.CSocios[avance].Cantidad = SSocios.CSocios[ avance - 1 ].Cantidad; + avance--; + } + + SSocios.CSocios[pos+1].dia = 0; + SSocios.CSocios[pos+1].mes = 0; + SSocios.CSocios[pos+1].Cantidad = 0; + + return OK; + +} + +void EliminaCompraSocios( int pos ) +{ + int avance; + + SSocios.NCompras --; + + if ( SSocios.NCompras < 0 ) + { + SSocios.NCompras = 1; + SSocios.CSocios[0].dia = 0; + SSocios.CSocios[0].mes = 0; + SSocios.CSocios[0].Cantidad = 0; + } else { + avance = pos; + + while( avance < SSocios.NCompras ) + { + SSocios.CSocios[avance].dia = SSocios.CSocios[ avance + 1 ].dia; + SSocios.CSocios[avance].mes = SSocios.CSocios[ avance + 1 ].mes; + SSocios.CSocios[avance].Cantidad = SSocios.CSocios[ avance + 1 ].Cantidad; + avance++; + } + } + +} + + +void OrdenarComprasSocios(void) +{ +struct Boton_Texto BT[4]; +int devolver; + +BT[0].x = 32; BT[0].y = 9; strcpy( BT[0].Texto, " &Fecha "); BT[0].ID_T1 = 0; BT[0].ID_T2 = 0; +BT[1].x = 32; BT[1].y = 11; strcpy( BT[1].Texto, " &Cantidad "); BT[1].ID_T1 = 0; BT[1].ID_T2 = 0; +BT[2].x = 32; BT[2].y = 13; strcpy( BT[2].Texto, " &InfoMundear "); BT[2].ID_T1 = 0; BT[2].ID_T2 = 0; +BT[3].x = 32; BT[3].y = 15; strcpy( BT[3].Texto, " &Cancelar operacion"); BT[3].ID_T1 = 0; BT[3].ID_T2 = 0; + + Optar( ENCUADRE, "Elija orden a seguir", NULL ); + + while( ( devolver = Funcion_Botones(STD_BY, 4, BT) ) < 1 || devolver > 4 ) while ( kbhit() ) getch(); + + if ( devolver != 4 ) + { + OrdenaSocios = devolver+3; + qsort( SSocios.CSocios, SSocios.NCompras, sizeof( struct ComprasSocios ), ComparaRegistrosSocios ); + } + + Optar( ENCUADRE, NULL ); + +} + + + + /**************************************************************************\ +|* *| +|* BuscaSocios *| +|* *| +|* 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 BuscaSocios( char TipoBusqueda, char *CurrRow, int *CurrSocios ) +{ + static INFO_SOCIOS MSocios; + char enc; long i; + + + switch ( TipoBusqueda ) + { + case NUEVA_BUSQUEDA: + if ( ObtenMatchSocios( &MSocios ) != OK ) + return; + i = 0; + break; + case ATRAS: + case ADELANTE: + i = ( *CurrRow + *CurrSocios )+TipoBusqueda; + if ( i < 0 || i >= BSocios.Registros() ) return; + break; + } + + Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL ); + enc = 0; + while ( i < BSocios.Registros() && !enc ) + { + if ( BSocios.LeeReg( (void *)&SSocios, i ) == ERROR ) + Error( 0x03 ); + if ( Match_Socios( SSocios, MSocios ) ) + enc = 1; + else + i++; + } + + Optar( ENCUADRE, NULL ); + + if ( enc ) + { + *CurrRow = 0; *CurrSocios = i; + // Mostramos datos hasta que se nos acabe la pantalla + MuestraDatosSocios( *CurrRow + *CurrSocios ); + if ( BSocios.LeeReg( (void *)&SSocios, 0 ) == ERROR ) + Error(0x03); + MuestraDatosComprasSocios( SSocios.NCompras ); + } 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 ( BSocios.LeeReg( (void *)&SSocios, (*CurrRow + *CurrSocios) ) == ERROR ) + Error( 0x03 ); + + +} + + /**************************************************************************\ +|* *| +|* Match_Socios *| +|* *| +|* Descripci¢n: *| +|* Compara dos registros y devuelve la posible coincidencia *| +|* *| +|* Entradas: *| +|* Registros a comparar *| +|* *| +|* Salidas: *| +|* Resultado de la comparaci¢n *| +|* *| + \**************************************************************************/ +int Match_Socios( INFO_SOCIOS A, INFO_SOCIOS B ) +{ + if ( B.NSocio != 0 ) + return (A.NSocio == B.NSocio ); + if ( B.Apellido[0] != '\0' ) + return ( strncmpi( A.Apellido, B.Apellido, strlen( B.Apellido ) ) == 0 ); + if ( B.Nombre[0] != '\0' ) + return ( strncmpi( A.Nombre, B.Nombre, strlen( B.Nombre ) ) == 0 ); + if ( B.Direccion != '\0' ) + return ( strncmpi( A.Direccion, B.Direccion, strlen( B.Direccion ) ) == 0 ); + + return 0; +} + + /**************************************************************************\ +|* *| +|* ObtenMatchSocios *| +|* *| +|* 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 ObtenMatchSocios( INFO_SOCIOS *MSocios ) +{ +struct Boton_Texto BT[6]; + +BT[0].x = 22; BT[0].y = 15; strcpy( BT[0].Texto, " &Aceptar "); BT[0].ID_T1 = 00; BT[0].ID_T2 = 0; +BT[1].x = 51; BT[1].y = 15; strcpy( BT[1].Texto, " &Cancelar"); BT[1].ID_T1 = 00; BT[1].ID_T2 = 0; + + char Row, ok, i; + int BPush, key, DEV; + + Optar( ENCUADRE, "Comando: Buscar", "N§ Socio: ", "Nombre: ", "Apellido: ", "Direcci¢n: ", NULL ); + + ok = 0; Row = 0; + + SociosNuevoRegistro( MSocios ); + + do + { + MatchDrawSocios(Row, *MSocios, INTENSO); + BPush = Funcion_Botones(STD_BY, 2, BT); + MatchDrawSocios(Row, *MSocios, 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 ); + EditMatchSocios( Row, MSocios ); + for ( i=0; i < 6; i++ ) + MatchDrawSocios(i, *MSocios, 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 ); + + return DEV; + +} + + /**************************************************************************\ +|* *| +|* EditMatchSocios *| +|* *| +|* Descripci¢n: *| +|* Edita el patron de busqueda *| +|* *| +|* Entradas: *| +|* Campo a editar, y lugar donde almacenarlo *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void EditMatchSocios( char Row, INFO_SOCIOS * MSocios ) +{ + int X0, Y0, X1, Y1; + char buffer[80]; + + ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 0: + sprintf( buffer, "%lu", MSocios -> NSocio ); + if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SociosNuevoRegistro( MSocios ); + MSocios -> NSocio = atol(buffer); + } + break; + case 1: + strcpy( buffer, MSocios -> Nombre ); + if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SociosNuevoRegistro( MSocios ); + strcpy ( MSocios -> Nombre, buffer ); + } + break; + case 2: + strcpy( buffer, MSocios -> Apellido ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SociosNuevoRegistro( MSocios ); + strcpy ( MSocios -> Apellido, buffer ); + } + break; + case 3: + strcpy( buffer, MSocios -> Direccion ); + if ( !( InputCadenaG( buffer, 0, 20, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) ) + { + SociosNuevoRegistro( MSocios ); + strcpy ( MSocios -> Direccion, buffer ); + } + break; + } + + + +} + + /**************************************************************************\ +|* *| +|* MatchDrawSocios *| +|* *| +|* 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 MatchDrawSocios( char Row, INFO_SOCIOS MSocios, char como ) +{ + int X0, Y0, X1, Y1; + char buffer[80], buffer1[80]; + + ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 ); + + switch( Row ) + { + case 0: + sprintf( buffer, " %9ld", MSocios.NSocio ); + break; + case 1: + sprintf( buffer, "%15s", MSocios.Nombre ); + break; + case 2: + sprintf( buffer, "%20s", MSocios.Apellido ); + break; + case 3: + sprintf( buffer, "%20s", MSocios.Direccion ); + break; + } + + textbackground( ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI ); + textcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI ); + + gotoxy( X0, Y0 ); + cprintf( "%s", buffer ); + +} + + /**************************************************************************\ +|* *| +|* MatchDrawSocios *| +|* *| +|* Descripci¢n: *| +|* Obtiene las coordenadas relativas al campo dado. *| +|* *| +|* Entradas: *| +|* Campo a obtener las coordenadas, y coordenadas de salida *| +|* *| +|* Salidas: (ninguna) *| +|* *| + \**************************************************************************/ +void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 ) +{ + + switch( Row ) + { + case 0: + *X0 = 35; *X1 = 10; + *Y0 = 9; *Y1 = 9; + break; + case 1: + *X0 = 35; *X1 = 15; + *Y0 = 10; *Y1 = 10; + break; + case 2: + *X0 = 35; *X1 = 20; + *Y0 = 11; *Y1 = 11; + break; + case 3: + *X0 = 35; *X1 = 20; + *Y0 = 12; *Y1 = 12; + break; + } + +} + diff --git a/TXT_UTL.CPP b/TXT_UTL.CPP new file mode 100644 index 0000000..7dc5347 --- /dev/null +++ b/TXT_UTL.CPP @@ -0,0 +1,277 @@ +#include +#include +#include +#include +#include +#include +#include + +#define BLANCO EGA_WHITE +#define ENCUADRE 3 +#define SEC_OPTAR 5 + +#include "zorr.h" + +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, i; + + s1 = s; // inicio cadena + + textbackground( cf ); + + gotoxy( X0, Y0 ); + for ( i = 0; i < X1; i++ ) + putch( 32 ); + textcolor( cc ); + gotoxy( X0, Y0 ); + cprintf( "%s", s1 ); + + _setcursortype( _SOLIDCURSOR ); + + ls = strlen ( s ); // Longitud de actual + + 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'; + + gotoxy( X0, Y0 ); + for ( i = 0; i < X1; i++ ) + putch( 32 ); + textcolor( cc ); + gotoxy( X0, Y0 ); + cprintf( "%s", s1 ); + + + } else { + if ( !numalp && c >= 32 && c <= 254 && ls < lmax) { + + *s++ = c; + ls++; + + *s = '\0'; + + gotoxy( X0, Y0 ); + for ( i = 0; i < X1; i++ ) + putch( 32 ); + textcolor( cc ); + gotoxy( X0, Y0 ); + cprintf( "%s", s1 ); + + } else { + if ( numalp && isdigit(c) && ls < lmax) { + *s++ = c; + ls++; + + *s = '\0'; // Cero final + + gotoxy( X0, Y0 ); + for ( i = 0; i < X1; i++ ) + putch( 32 ); + textcolor( cc ); + gotoxy( X0, Y0 ); + cprintf( "%s", s1 ); + + } + /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + else if( c == 27 ) {*s='\0'; ok = 1; } + /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ + else BEEP(); + } + } + + }while(!ok); + + _setcursortype( _NOCURSOR ); + + 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_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, ... ) +{ +struct Boton_Texto BT[6]; +int devolver = 0; + +BT[0].x = 22; BT[0].y = 15; strcpy( BT[0].Texto, " &Aceptar "); BT[0].ID_T1 = 00; BT[0].ID_T2 = 30; +BT[1].x = 51; BT[1].y = 15; strcpy( BT[1].Texto, " &Cancelar"); BT[1].ID_T1 = 00; BT[1].ID_T2 = 46; + + static char fondo[4096]; + static char Memoria = 0; + + int DEV = 0, ok = 0, linea = 0; + int Center; char *buff; + + va_list ap; + va_start( ap, &optar ); + + if ( Memoria == 1 ) + { + puttext( 21, 5, 63, 17, (void *)fondo ); Memoria = 0; + if ( optar == ENCUADRE ) return DEV; + } + + Memoria = 1; + + gettext( 21, 5, 63, 17, (void *)fondo ); + +textbackground( BLACK ); +textcolor( CYAN ); +gotoxy( 21, 5 ); cprintf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"); +gotoxy( 21, 6 ); cprintf("³ ³"); +gotoxy( 21, 7 ); cprintf("ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"); +gotoxy( 21, 8 ); cprintf("³ ³"); +gotoxy( 21, 9 ); cprintf("³ ³"); +gotoxy( 21, 10 ); cprintf("³ ³"); +gotoxy( 21, 11 ); cprintf("³ ³"); +gotoxy( 21, 12 ); cprintf("³ ³"); +gotoxy( 21, 13 ); cprintf("³ ³"); +gotoxy( 21, 14 ); cprintf("³ ³"); +gotoxy( 21, 15 ); cprintf("³ ³"); +gotoxy( 21, 16 ); cprintf("³ ³"); +gotoxy( 21, 17 ); cprintf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"); + + + + textcolor( RED ); + linea = 0; + while ( (buff = va_arg(ap, char *)) != NULL ) + { + Center = (42 - strlen( buff ) ) / 2; + gotoxy( 21+Center+1, ( (linea == 0 ) ? 6 : 8 + linea ) ); + cprintf( "%s", buff ); + linea++; + } + + va_end(ap); + + if ( optar != ENCUADRE ) + { + ok = 0; while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + if ( optar == 1 ) + do { + switch( Funcion_Botones(STD_BY, 2, BT) ) + { + 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 ); + else { espera_pulsar(); espera_soltar(); } + + puttext( 21, 5, 63, 17, (void *)fondo ); + + Memoria = 0; + + } + + return DEV; +} + + + diff --git a/ZORR.DSK b/ZORR.DSK new file mode 100644 index 0000000000000000000000000000000000000000..ecdccb0de1959f5392ebb40fccc0e473e9956135 GIT binary patch literal 3092 zcmbtWO>7%Q6#gcEHK`KR(5gy=)GeU2HN+wfKT;?(_O6pSv9s2C(?a5CyV-0SgYAvh z>!jgF0>J@ss+0qWLnV-^N*uW$paLNQ2P96tfP^AYFPu0bRft1*GrODkHzBa&@$S5N z@0<5GZ$_`W%Z?;VvQzf#Yo0V&DB98xSl_@&HU#vp;5>@}=w?6R6TFTI3{cZw)Qxmj zi^*VBT# zk*9I&bLUh!;NIzG_&K&=y!+hgY{2|68SqgHBc_Qq-5J4xsu`J#U_OeY4VeB4 zoX%SWHa)9Rxg$7(D4xVPUcgIO#5KHw_i!ECP&Fkv7l%BaPsHWf`D}i2J~^i+ zb9q@Y)Or1MJ}Q<|#-WVUC-m$kLrG4?rol(bcs{GCQ(8Qe&uOxukY|a3WTtVe{UnbV zk6!4dXe^bP;&?=l#^^VV4Gf|KU3id`?}zKTo3^)UySxLNc!+H8AS(fB!zrvt(U>KX zQ6C6{H;CLzlIQRQnfxpi%-}MXu!0iGh?kwXt|Ib4Jzo35$ZR||yURD3$(u2-CDrTLJX=>H$^hOP2W8f@&TNn9XN`o@jMwb1szw(%+*5CtiW=L)zTOrjKNw%&PcAi zPH9p6`?5Mo1_9uI*=PYRR2_v?LuRM}FGSM?}YT{HEk@RkE8h_H%sWcCY!64_OFYzWUe`Xhf z^K1|QdV*p7TOm_BBV?$!vkPE^_6DxA0F7kUPjXp?+f@I)q+(hBF#JyR?k?bp(4>`Y zivqP9w=fSFzM(a~rrx>%Mri4-PN8o5;Rj{?41S?=uH6qmQ2!V%lb18p>sy2REhD!de7*NSYe3&y>%T@fbWaIh z*J-@cwTI|`HMr+c`q!MpeOM*c7n{`Y#}*a*E%LgbJcmin8hA#PkkMJ%to=dokyhug z$o(4lgKrV-v~LgZmqbx*8J%zpT9fuZeSt11|99s$`lWsh3JkAN&CYMHK6yu@3kbt3 z^{E!BbNVc)-fCCzGT0uv&NBzy_1eLsZCvZ%b<$F4(*8JhsOIcY&AEWinj*jFpa>lX r&yn2YO|lFU(WEeF4fW*TSnl7|878P!J=0XL7%md+Vn+n`?*sn;XUT0- literal 0 HcmV?d00001 diff --git a/ZORR.EXE b/ZORR.EXE new file mode 100644 index 0000000000000000000000000000000000000000..28a7a20496e0fc0c7025b6a48c7bda8be22eeecc GIT binary patch literal 101286 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 + +#define DIBUJA 1 +#define DEPRIME 2 +#define Dibuja_Todos 3 +#define COMPRUEBA 4 +#define STD_BY 5 + +#define NORMAL 0 +#define INTENSO 1 + +#define ATRAS -1 +#define NUEVA_BUSQUEDA 0 +#define ADELANTE 1 + +#define SEC_OPTAR 5 +#define ENCUADRE 3 + +// Niveles de acceso al programa +#define TOTAL 0 +#define USUARIO 1 +#define NINGUNO 2 + + +typedef struct +{ + char FillBgS, FillBgC; + char NumFg, NumBg, NumLn; + char TxtBgN, TxtBgI, TxtFgN, TxtFgI; + char Printer, PrintTo[80]; +} CONFIG; + + +struct hora +{ + char min; // Minutos y hora + char hora; +}; + +struct ComprasSocios +{ + unsigned char dia; + unsigned char mes; + long Cantidad; +}; + +typedef struct +{ + long NSocio; + char Nombre[15+1]; + char Apellido[20+1]; + char Direccion[25+1]; + int Num; + char Piso[4+1]; + + int NCompras; + struct ComprasSocios CSocios[240]; + +} INFO_SOCIOS; + +typedef struct +{ + struct date Fecha; + char Articulo[25+1]; + int Proveedor; + long Precio; + int Cantidades; +} INFO_PRECIOS; + +typedef struct +{ + char Articulo[45+1]; + long Precio; + char Ubicacion[14+1]; + long PrecioArt; +} INFO_ARTICULOS; + + + + + + + + +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); +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int X0, int Y0, int X1, int Y1); +void Error( int code ); + + +// M¢dulo de referencias +void InfoProductos(void); + +// M¢dulo de Compras +void ComprasDiarias( int NivelAcceso ); + +// Informacion de los proveedores +void InfoProveedores(void); + +//ÛÛ +void espera_soltar(void); +void espera_pulsar(void); +void activa_raton(void); +void desactiva_raton(void); +void inicializa_raton_texto(void); +struct Boton_Texto{ + char x; char y; + char Texto[80]; + + int ID_T1; + int ID_T2; +}; + + + +int Funcion_Botones(int Funcion, int nBotones, struct Boton_Texto *Boton_Texto); + +extern int boton_izq, boton_der; +extern int x_raton, y_raton, RATON; + +//ÛÛ + +extern int AnoActual; diff --git a/ZORR.IMG b/ZORR.IMG new file mode 100644 index 0000000..3d3cc86 --- /dev/null +++ b/ZORR.IMG @@ -0,0 +1,443 @@ + +** +** Codigo fuente para MAKE_BOTON +** + +***************************************************************************** +* +* ATENCION !!! +* ALTERAR ESTE FICHERO, CAUSARA EL MALFUNCIONAMIENTO DEL +* PROGRAMA DE APOYO... ( ERRORES NO DOCUMENTADOS ) +* +***************************************************************************** + +#5 + + + +************************************************ Botones D: 1 +**** **** Botones S: 10 +** M¢dulo de Ventas ** +**** **** +************************************************ +!1, 6 +$ 605, 5, 635, 120, 7, 63, 56, 2, 2, 000, 000 * Impr. £ltimo ticket +$ 490, 5, 590, 30, 7, 63, 56, 2, 2, 000, 000 * Impr. Tickets +$ 490, 50, 590, 75, 7, 63, 56, 2, 2, 000, 000 * Cobro completo +$ 490, 95, 590, 120, 7, 63, 56, 2, 2, 000, 000 * Servicio en mesa +$ 420, 5, 450, 120, 7, 63, 56, 2, 2, 000, 000 * Gastos / Compras +$ 380, 5, 410, 120, 7, 63, 56, 2, 2, 000, 000 * Menu Principal + +­10 + + + +************************************************ Botones D: 2 +**** **** Botones S: 20 +** M¢dulo de Referencias ** +**** **** +************************************************ +!2, 9 + +$ 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 + +­20 +& 400, 5, 635, 30, 7, 63, 56, 2, 2 +| 400, 7, 2, 5, 0, 0, Listado de Socios, +| 401, 8, 2, 5, 0, 63, Listado de Socios, + +& 400, 40, 515, 65, 7, 63, 56, 2, 2 +| 400, 42, 2, 5, 0, 0, Imprimir Soc., +| 401, 43, 2, 5, 0, 63, Imprimir Soc., + | 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 Soc., +| 401, 73, 2, 5, 0, 63, Eliminar Soc., +& 520, 70, 635, 95, 7, 63, 56, 2, 2 +| 518, 72, 2, 5, 0, 0, Insertar Soc., +| 519, 73, 2, 5, 0, 63, Insertar Soc., + +& 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, 130, 635, 155, 7, 63, 56, 2, 2 +| 10, 132, 2, 5, 0, 63, N§ Socio Nombre Direcci¢n, +| 11, 133, 2, 5, 0, 0, N§ Socio Nombre Direcci¢n, + +& 5, 160, 80, 450, 63, 7, 56, 2, 2 +& 85, 160, 345, 450, 63, 7, 56, 2, 2 +& 350, 160, 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: 21 +** M¢dulo buscar asociado a Referencias ** +**** **** +************************************************ + +­21 +& 260, 200, 360, 220, 63, 0, 56, 0, 2 +& 365, 200, 465, 220, 63, 0, 56, 0, 2 +& 260, 225, 465, 245, 63, 0, 56, 0, 2 + +& 235, 250, 315, 275, 63, 0, 56, 0, 2 +& 385, 250, 465, 275, 63, 0, 56, 0, 2 + +& 330, 275, 365, 300, 63, 0, 56, 0, 2 + +| 175, 200, 2, 6, 0, 0, Cod.Art:, +| 176, 201, 2, 6, 0, 63, Cod.Art:, +| 175, 225, 2, 6, 0, 0, Nombre:, +| 176, 226, 2, 6, 0, 63, Nombre:, +| 175, 250, 2, 6, 0, 0, P.C.: P.V.P.:, +| 176, 251, 2, 6, 0, 63, P.C.: P.V.P.:, +| 175, 275, 2, 6, 0, 0, COMBINADOS -> [ ], +| 176, 276, 2, 6, 0, 63, COMBINADOS -> [ ], + + + +************************************************ Botones D: 3 +**** **** Botones S: 22 +** M¢dulo imprimir asociado a Referencias ** +**** **** +************************************************ +!3, 4 + +$ 180, 200, 220, 305, 1, 56, 63, 2, 2, 000, 46 +$ 230, 200, 460, 230, 7, 56, 63, 2, 2, 000, 19 +$ 230, 235, 460, 270, 7, 56, 63, 2, 2, 000, 24 +$ 230, 275, 460, 305, 7, 56, 63, 2, 2, 000, 48 + +­22 +& 170, 165, 470, 315, 7, 63, 56, 0, 2 +& 172, 167, 468, 190, 1, 56, 63, 0, 2 +| 175, 167, 2, 6, 0, 0, Impresion de Referencias, +| 175, 168, 2, 6, 0, 63, Impresion de Referencias, + +& 180, 200, 220, 305, 1, 56, 63, 2, 2 +| 190, 200, 2, 6, 1, 0, Cancelar , +| 191, 201, 2, 6, 1, 63, Cancelar , + | 191, 201, 2, 6, 1, 0, _ , + | 192, 202, 2, 6, 1, 63, _ , + +& 230, 200, 460, 230, 7, 56, 63, 2, 2 +| 230, 202, 2, 6, 0, 0, Listado r pido, +| 231, 203, 2, 6, 0, 63, Listado r pido, + | 231, 203, 2, 6, 0, 0, _, + | 232, 204, 2, 6, 0, 63, _, +& 230, 235, 460, 270, 7, 56, 63, 2, 2 +| 230, 237, 2, 6, 0, 0, Listado completo, +| 231, 238, 2, 6, 0, 63, Listado completo, + | 231, 238, 2, 6, 0, 0, _, + | 232, 239, 2, 6, 0, 63, _, +& 230, 275, 460, 305, 7, 56, 63, 2, 2 +| 230, 277, 2, 6, 0, 0, C¢digos de barra, +| 231, 278, 2, 6, 0, 63, C¢digos de barra, + | 231, 278, 2, 6, 0, 0, _, + | 232, 279, 2, 6, 0, 63, _, + + +************************************************ Botones D: 2 +**** **** Botones S: 30 +** M¢dulo para la Gestion de los Proveedores ** +**** **** +************************************************ +­30 +& 400, 5, 635, 30, 7, 63, 56, 2, 2 +| 400, 7, 2, 5, 0, 0, Gestion de Proveedores, +| 401, 8, 2, 5, 0, 63, Gestion de Proveedores, + +& 400, 40, 515, 65, 7, 63, 56, 2, 2 +| 400, 42, 2, 5, 0, 0, Imprimir Prov., +| 401, 43, 2, 5, 0, 63, Imprimir Prov., + | 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 Prov., +| 401, 73, 2, 5, 0, 63, Eliminar Prov., +& 520, 70, 635, 95, 7, 63, 56, 2, 2 +| 518, 72, 2, 5, 0, 0, Insertar Prov., +| 519, 73, 2, 5, 0, 63, Insertar Prov., + +& 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, 40, 2, 5, 0, 0, Direccion Num, +| 6, 41, 2, 5, 0, 63, Direccion Num, +& 88, 35, 308, 60, 63, 7, 56, 2, 2 +& 355, 35, 390, 60, 63, 7, 56, 2, 2 + +| 5, 65, 2, 5, 0, 0, Poblacion Provincia, +| 6, 66, 2, 5, 0, 63, Poblaci¢n Provincia, +& 88, 65, 210, 90, 63, 7, 56, 2, 2 +& 290, 66, 390, 91, 63, 7, 56, 2, 2 + +| 5, 95, 2, 5, 0, 0, Cd.Postal Estr., +| 6, 96, 2, 5, 0, 63, Cd.Postal Estr., +& 88, 95, 188, 120, 63, 7, 56, 2, 2 + +& 245, 95, 270, 120, 7, 63, 56, 2, 2 +& 275, 95, 300, 120, 7, 63, 56, 2, 2 +& 305, 95, 330, 120, 7, 63, 56, 2, 2 +& 335, 95, 360, 120, 7, 63, 56, 2, 2 +& 365, 95, 390, 120, 7, 63, 56, 2, 2 + + +& 5, 130, 635, 155, 7, 63, 56, 2, 2 +| 5, 135, 2, 5, 0, 0, C¢digo Proveedor Tel‚fono 1 N§ de Fax, +| 6, 136, 2, 5, 0, 63, C¢digo Proveedor Tel‚fono 1 N§ de Fax, + +& 5, 160, 100, 450, 63, 7, 56, 2, 2 +& 105, 160, 360, 450, 63, 7, 56, 2, 2 +& 365, 160, 497, 450, 63, 7, 56, 2, 2 +& 503, 160, 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 ** +**** **** +************************************************ + +­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, Cod.Art:, + | 176, 201, 2, 6, 0, 63, Cod.Art:, +| 175, 225, 2, 6, 0, 0, Proveed., + | 176, 226, 2, 6, 0, 63, Proveed., +| 175, 250, 2, 6, 0, 0, Direccion, + | 176, 251, 2, 6, 0, 63, Direccion, +| 175, 275, 2, 6, 0, 0, Poblacion, + | 176, 276, 2, 6, 0, 63, Poblacion, + + + +************************************************ Botones D: 2 +**** **** Botones S: 40 +** M¢dulo de Compras Diarias ** +**** **** +************************************************ +­40 +& 400, 5, 635, 30, 7, 63, 56, 2, 2 +| 400, 7, 2, 5, 0, 0, Gastos Diarios:, +| 401, 8, 2, 5, 0, 63, Gastos Diarios:, + +& 400, 40, 515, 65, 7, 63, 56, 2, 2 +| 400, 42, 2, 5, 0, 0, Imprimir Comp., +| 401, 43, 2, 5, 0, 63, Imprimir Comp., + | 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 Gasto, +| 401, 73, 2, 5, 0, 63, Eliminar Gasto, +& 520, 70, 635, 95, 7, 63, 56, 2, 2 +| 518, 72, 2, 5, 0, 0, Insertar Gasto, +| 519, 73, 2, 5, 0, 63, Insertar Gasto, + +& 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, 130, 635, 155, 7, 63, 56, 2, 2 +| 5, 135, 2, 5, 0, 0, C¢digo Descripcion Unds. Proveedor P. Costo, +| 6, 136, 2, 5, 0, 63, C¢digo Descripcion Unds. Proveedor P. Costo, + +& 5, 160, 100, 450, 63, 7, 56, 2, 2 +& 105, 160, 360, 450, 63, 7, 56, 2, 2 +& 365, 160, 415, 450, 63, 7, 56, 2, 2 +& 420, 160, 545, 450, 63, 7, 56, 2, 2 +& 550, 160, 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: 4 +**** **** Botones S: 45 +** Calendario para Compras Diarias ** +**** **** +************************************************ + +!4, 44 + +* Domingos +$ 350, 5, 380, 25, 4, 63, 56, 2, 2, 000, 000 +$ 350, 25, 380, 45, 4, 63, 56, 2, 2, 000, 000 +$ 350, 45, 380, 65, 4, 63, 56, 2, 2, 000, 000 +$ 350, 65, 380, 85, 4, 63, 56, 2, 2, 000, 000 +$ 350, 85, 380, 105, 4, 63, 56, 2, 2, 000, 000 +$ 350, 105, 380, 125, 4, 63, 56, 2, 2, 000, 000 + +* Sabado +$ 320, 5, 350, 25, 4, 63, 56, 2, 2, 000, 000 +$ 320, 25, 350, 45, 4, 63, 56, 2, 2, 000, 000 +$ 320, 45, 350, 65, 4, 63, 56, 2, 2, 000, 000 +$ 320, 65, 350, 85, 4, 63, 56, 2, 2, 000, 000 +$ 320, 85, 350, 105, 4, 63, 56, 2, 2, 000, 000 +$ 320, 105, 350, 125, 4, 63, 56, 2, 2, 000, 000 + +* Viernes +$ 290, 5, 320, 25, 9, 63, 56, 2, 2, 000, 000 +$ 290, 25, 320, 45, 9, 63, 56, 2, 2, 000, 000 +$ 290, 45, 320, 65, 9, 63, 56, 2, 2, 000, 000 +$ 290, 65, 320, 85, 9, 63, 56, 2, 2, 000, 000 +$ 290, 85, 320, 105, 9, 63, 56, 2, 2, 000, 000 +$ 290, 105, 320, 125, 9, 63, 56, 2, 2, 000, 000 + +* Jueves +$ 260, 5, 290, 25, 9, 63, 56, 2, 2, 000, 000 +$ 260, 25, 290, 45, 9, 63, 56, 2, 2, 000, 000 +$ 260, 45, 290, 65, 9, 63, 56, 2, 2, 000, 000 +$ 260, 65, 290, 85, 9, 63, 56, 2, 2, 000, 000 +$ 260, 85, 290, 105, 9, 63, 56, 2, 2, 000, 000 +$ 260, 105, 290, 125, 9, 63, 56, 2, 2, 000, 000 + +* Miercoles +$ 230, 5, 260, 25, 9, 63, 56, 2, 2, 000, 000 +$ 230, 25, 260, 45, 9, 63, 56, 2, 2, 000, 000 +$ 230, 45, 260, 65, 9, 63, 56, 2, 2, 000, 000 +$ 230, 65, 260, 85, 9, 63, 56, 2, 2, 000, 000 +$ 230, 85, 260, 105, 9, 63, 56, 2, 2, 000, 000 +$ 230, 105, 260, 125, 9, 63, 56, 2, 2, 000, 000 + +* Martes +$ 200, 5, 230, 25, 9, 63, 56, 2, 2, 000, 000 +$ 200, 25, 230, 45, 9, 63, 56, 2, 2, 000, 000 +$ 200, 45, 230, 65, 9, 63, 56, 2, 2, 000, 000 +$ 200, 65, 230, 85, 9, 63, 56, 2, 2, 000, 000 +$ 200, 85, 230, 105, 9, 63, 56, 2, 2, 000, 000 +$ 200, 105, 230, 125, 9, 63, 56, 2, 2, 000, 000 + +* Lunes +$ 170, 5, 200, 25, 9, 63, 56, 2, 2, 000, 000 +$ 170, 25, 200, 45, 9, 63, 56, 2, 2, 000, 000 +$ 170, 45, 200, 65, 9, 63, 56, 2, 2, 000, 000 +$ 170, 65, 200, 85, 9, 63, 56, 2, 2, 000, 000 +$ 170, 85, 200, 105, 9, 63, 56, 2, 2, 000, 000 +$ 170, 105, 200, 125, 9, 63, 56, 2, 2, 000, 000 + +* Mes Anterior +$ 145, 5, 165, 62, 7, 56, 63, 1, 2, 000, 000 + +* Mes Siguiente +$ 145, 68, 165, 125, 7, 56, 63, 1, 2, 000, 000 + +­45 + +* Nombre del Mes +& 120, 5, 140, 125, 7, 56, 63, 1, 2 + + + +************************************************ Botones D: 5 +**** **** Botones S: 100 +** Parte Utilizada por Optar ** +**** **** +************************************************ +!5, 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, _, + diff --git a/ZORR.PRJ b/ZORR.PRJ new file mode 100644 index 0000000000000000000000000000000000000000..b6b52bf07b91e87ebc4817e0b02cd2a7cd9096de GIT binary patch literal 7436 zcmeI1Yj9gf6@bsxBX;G;v6D23Q<|(B;rbEF*2|KUxQQ&uuBcukDMLsUJbK(X7i`JB zvJ*;O$8AX|FfbJO#jm#XL7Me0hUlppOW*lY)qMw*-ntGo3~5&)#QX^^H0G5612f<^!dJ>mtD5dkKGnXrNCnh+h$h{8<>W1%&J}NE{&JY#}_Y)oE-gZEUnY@^k0<@n%xF9r@yCLJOgI*Z91e!A-@zIz4AhAs z5*}Sc@AXj`#M{&51aL@ZaC*?D69vcMAb?9cvpz1~zZJK%3wl@W?$Om4($(1yoP)i|K5F`}z+hpxs!U5!I{EtMs?(9Nm~k|A&8j2Bl_PJKiBL zjxdC>&oPWE31IBQ4=sSJ*d9nEV4OcHG!54?Y`|yjCUaM(1%A~G3**U9VhvL>sme2J zP+PM~f3c6*qM>NF!|Cf`wpcv%aeso@a3hW;(##gXLNqnrP0=|~=s8tV3arNegNIL(X3=%hS23`l}%APes==sDbDaHgGh|2I9=N-nQ2>PCZ+%Y9KPW5R`Ls zlauu`2(tw}V~w@jLPtU|fAoWS&NmiXL)uHrDa4nF6Zjrce=DAyL5+rtude*RlERCc zlw6R@r8zY(vp{KjrhXQafz?yeXsd0#4K^CUI_dum_rmb>Oi7((5hbT)RV7=jV>%p7 ztn1HP+j<+U6Zeg-zNFDJ`v2E;Wxx#~BXhET<`}eE94-``ZmY%RLxFj%7WYu4$>Sx# zWwm%6)HH0hSS=S=>}i%N<&_dcu{51iWmdiXGxF4wQYe+H75IID1r=4!=at8cHMPqk zH+O+0lrq}8t!F>Euv((o+5Aa1lU1{9D$8t~8VyQ^b4osoGAfcEx2GB==BRQxd{?5V*46)>XHJ*fUioA5 z%;j^shdo~3u+!yr4|-f4pLfuOslWQeSV2C;Mp*nVOb25pN-FDS%E;h;QO_Hg($~j& zsQF$VtmrXH`?8uX+at1^lqb7cxA}3k0EMv^d2{g<5kww zUI27HNdyL8XlUaKqJ271P7yjKE-IJh^06zf zuhPZ4j~!=yBUhRO+2X8H$QI->>%CGdrcey)J{laN`f;$3s^UnpIaQI1g_70cWZ_~N zU&yk&keTauq!f3r#80N>S)l?Nz_~t(JKYT*iZ{KA1OkbslR0c-si@ z2p-=YjVC9fQT}4Fd}4xi$xKZ{BP+NKHbE;iVV7Q5L|;GI2Jlidp3b4a^pW&LB(Z|8 znubPvS>PsU#&;k*O@jx}*Ara;7ql^W9!ZTL` zn6Zlu9zUeoa2j>>fZJe7qw{qSN-}u6w&Mq$R<}^SV@1>nw)-m<1%l7o zDtf|)u-?Xd)>;(4MKr=zYmF!2<63?4u@QcA&US;x(F5sH=3?nHH(5fK7k=&RXJrGx(DIQgL4 zkvdhkx7B)0#KyvrkWT1mT0~EapiTn(kqGYStEV84{zO9GS27&q!&t@HMC@=RqT>vM z#?4qqX*3*9>8J$aG2OvW1VdwbcJL`jp6K3OdA{lVP^0Bh^K{o}3!+CpcJ;ym*owQ_ lAUME@=ZkLez!28@pdaio0K>2k_QPKM9nrhuF+RQV{0E5IpTPhC literal 0 HcmV?d00001 diff --git a/ZORR.RAR b/ZORR.RAR new file mode 100644 index 0000000000000000000000000000000000000000..b151adfe8358b10d9b1a15b309bb19813a952701 GIT binary patch literal 107153 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 z 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 RIuAkcN`$aWl +#include +#include +#include +#include +#include +#include +#include +#include + +#include "d:\program\src_dos\libs\bdatos\bdatos.hh" +#include "zorr.h" + + +CONFIG Config = { + 1, BLUE, + RED, WHITE, BLACK, + BLACK, RED, WHITE, BLACK, + 0, { "PrnFile.out" } + }; + +#define OFF 0 +#define ON 1 + +#ifdef __cplusplus + #define __CPPARGS ... +#else + #define __CPPARGS +#endif + + +#define GESTION_DE_SOCIOS 1 +#define LISTA_DE_PRECIOS 2 +#define GASTOS_INTERNOS 3 +#define SALIR 4 + + + +int MenuPrincipal(void); + +void ListaPrecios(void); +void GestionSocios(void); +extern void GastosInternos(void); +void PideAnoActual(void); + +void DibujaPantallaGastosInt(void); + +int boton_izq; int boton_der; +int x_raton, y_raton, RATON = 1; + +//ÛÛ + +int AnoActual; + +int main(void) +{ + int ok; + struct date d; + getdate( &d ); + AnoActual = d.da_year - ( d.da_year / 100 ) * 100; + + inicializa_raton_texto(); + if( RATON ) desactiva_raton(); + + PideAnoActual(); + + ok = 0; + do { + + switch( MenuPrincipal() ) + { + case GESTION_DE_SOCIOS: + GestionSocios(); + break; + case LISTA_DE_PRECIOS: + ListaPrecios(); + break; + case GASTOS_INTERNOS: + GastosInternos(); + break; + case SALIR: + ok = 1; + break; + } + + } while ( !ok ) ; + + +return 0; + +} + +int MenuPrincipal(void) +{ +struct Boton_Texto BT[4]; +int devolver = 0; + +BT[0].x = 29; BT[0].y = 9; strcpy( BT[0].Texto, " &Gestion de Socios "); BT[0].ID_T1 = 71; BT[0].ID_T2 = 0; +BT[1].x = 29; BT[1].y = 12; strcpy( BT[1].Texto, " &Listado de Precios "); BT[1].ID_T1 = 76; BT[1].ID_T2 = 0; + +BT[2].x = 29; BT[2].y = 15; strcpy( BT[2].Texto, " Ga&stos internos "); BT[2].ID_T1 = 83; BT[2].ID_T2 = 0; +BT[3].x = 29; BT[3].y = 18; strcpy( BT[3].Texto, " S&ALIR al DOS "); BT[3].ID_T1 = 65; BT[3].ID_T2 = 0; + + + _setcursortype(_NOCURSOR); + textcolor( WHITE ); + textbackground( BLACK ); + clrscr(); + + cprintf(" \n\r"); + cprintf(" Ü ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜ ÜÜÜ ÜÜÜ ÜÜ Ü Ü Ü ÜÜ ÜÜÜ ÜÜÜ \n\r"); + cprintf(" Û Û Û ÛÜÜ ÛÜÛ ÛÜÛ Û Û Û ÛÜÜ Û ÛÜÛ Û Û Û Û ÛÜÜ \n\r"); + cprintf(" ÛÜÜ ÛÜÛ ÜÜÛ Û Û ÛßÜ ÛÜ ÛÜÛ ÜÜÛ ÛÜ Û Û Û ÛÜ ÛÜÛ ÜÜÛ \n\r"); + cprintf(" \n\r"); + cprintf(" \n\r"); + cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ³ ³ \n\r"); + cprintf(" ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ \n\r"); + + while( ( devolver = Funcion_Botones(STD_BY, 4, BT) ) < 1 || devolver > 4 ) while ( kbhit() ) getch(); + + _setcursortype(_NORMALCURSOR); + return devolver; +} + + +int Funcion_Botones(int Funcion, int nBotones, struct Boton_Texto *Boton_Texto) +{ + + char i; + int DEVOLVER = -1; + int longitud, key, key2; + + switch( Funcion ) { + case DIBUJA: + highvideo(); + textcolor(BLACK); + textbackground(11); + gotoxy(Boton_Texto[nBotones].x, Boton_Texto[nBotones].y); + DEVOLVER = 0; + longitud = strlen( Boton_Texto[nBotones].Texto ); + while( DEVOLVER <= longitud ) { + if( Boton_Texto[nBotones].Texto[DEVOLVER] == '&' ) { + DEVOLVER ++; + textcolor(RED); + cprintf("%c", Boton_Texto[nBotones].Texto[DEVOLVER]); + textcolor(BLACK); + } else cprintf("%c", Boton_Texto[nBotones].Texto[DEVOLVER]); + DEVOLVER ++; + } + + // cprintf("%s", Texto); + + textbackground(7); // ±SALIR±Ü + cprintf("ß"); // ßßßßßßß + gotoxy(Boton_Texto[nBotones].x+1, Boton_Texto[nBotones].y+1); + for(i = 0; i < longitud; i ++ ) // ±±±±±±±Ü + cprintf("Ü"); // ßßßßßßß + break; + case DEPRIME: + highvideo(); + textcolor(BLACK); + textbackground(11); + gotoxy(Boton_Texto[nBotones].x, Boton_Texto[nBotones].y); + DEVOLVER = 0; + longitud = strlen( Boton_Texto[nBotones].Texto ); + //////////////// + textbackground(BLACK); + while( DEVOLVER <= (longitud+1) ) { + if( Boton_Texto[nBotones].Texto[DEVOLVER] == '&' ) { + DEVOLVER ++; + } + cprintf(" "); + DEVOLVER ++; + } + textbackground(11); + gotoxy(Boton_Texto[nBotones].x+1, Boton_Texto[nBotones].y+1); + DEVOLVER = 0; + while( DEVOLVER <= longitud ) { + + if( Boton_Texto[nBotones].Texto[DEVOLVER] == '&' ) { + DEVOLVER ++; + textcolor(RED); + cprintf("%c", Boton_Texto[nBotones].Texto[DEVOLVER]); + textcolor(BLACK); + } else cprintf("%c", Boton_Texto[nBotones].Texto[DEVOLVER]); + DEVOLVER ++; + } +// cprintf("%s", Texto); // + // ±±±±±±± + break; + case Dibuja_Todos: + for( i=0; i < nBotones; i++) + Funcion_Botones( DIBUJA, i, Boton_Texto); + break; + case COMPRUEBA: + if( bioskey(1)!=0 ) { + key = toupper( getch() ); DEVOLVER = -2; + if ( key == 0 ) { key2 = toupper( getch() ); DEVOLVER = -1; } + for( i=0; i < nBotones && DEVOLVER <= -1; i++){ + if( key == Boton_Texto[i].ID_T1 ) { + if( key == 0 ) { + if( key2 == Boton_Texto[i].ID_T2 ){ + DEVOLVER = (i + 1); + Funcion_Botones( DEPRIME, (DEVOLVER-1), Boton_Texto); + delay(150); + //sleep(1); + Funcion_Botones( DIBUJA, (DEVOLVER-1), Boton_Texto); + } + } else + { DEVOLVER = (i + 1); + Funcion_Botones( DEPRIME, (DEVOLVER-1), Boton_Texto); + delay(150); + //sleep(1); + Funcion_Botones( DIBUJA, (DEVOLVER-1), Boton_Texto); + } + } + } + + if( DEVOLVER == -2 ) + { ungetch(key); } + + if( DEVOLVER == -1 ) + { ungetch(key2); } + + + } else if( RATON ) { + DEVOLVER = 0; + for( i=0; i < nBotones && DEVOLVER == 0; i++) { + longitud = strlen( Boton_Texto[i].Texto ); + if ( (x_raton+1) >= Boton_Texto[i].x && (x_raton+1) <= ( Boton_Texto[i].x + longitud -1) && + y_raton == (Boton_Texto[i].y-1) ) { DEVOLVER = (i + 1); + Funcion_Botones( DEPRIME, (DEVOLVER-1), Boton_Texto); + if( RATON ) activa_raton(); + espera_soltar(); + if( RATON ) desactiva_raton(); +// delay(150); + Funcion_Botones( DIBUJA, (DEVOLVER-1), Boton_Texto); + } + } + } + break; + case STD_BY: + Funcion_Botones(Dibuja_Todos, nBotones, Boton_Texto); + do{ + if( RATON ) activa_raton(); + if( RATON ) espera_pulsar(); else while( bioskey(1)==0 ); + if( RATON ) desactiva_raton(); + DEVOLVER = Funcion_Botones(COMPRUEBA, nBotones, Boton_Texto); + }while(DEVOLVER==0 && bioskey(1)==0 ); + + } + return DEVOLVER; +} + +void inicializa_raton_texto(void) +{ + union REGS ent, sal; + + ent.x.ax = 0; + int86(0x33, &ent, &sal); /* averigua si hay rat¢n conectado */ + + if(sal.x.ax==0) { RATON = 0; return; } + + ent.x.ax = 15; + ent.x.cx = 8; + ent.x.dx = 16; + int86(0x33, &ent, &sal); /* fija la raz¢n mickey/pixel */ + + ent.x.ax = 7; + ent.x.cx = 0; + ent.x.dx = 639; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. horizontal */ + + ent.x.ax = 8; + ent.x.cx = 0; + ent.x.dx = 199; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. vertical */ + + ent.x.ax = 4; + ent.x.cx = 320; + ent.x.dx = 100; + int86(0x33, &ent, &sal); /* fija la posici¢n del rat¢n */ + + ent.x.ax = 1; + int86(0x33, &ent, &sal); /* muestra el puntero del rat¢n */ +} +void activa_raton(void) +{ + union REGS ent, sal; + + ent.x.ax = 1; + int86(0x33, &ent, &sal); +} + +void desactiva_raton(void) +{ + union REGS ent, sal; + + ent.x.ax = 2; + int86(0x33, &ent, &sal); +} + +void espera_pulsar(void) +{ + union REGS ent, sal; + + do{ + if(bioskey(1)!=0) break; + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + }while((sal.x.bx & 3)==0); + boton_izq=sal.x.bx & 1; + boton_der=(sal.x.bx >> 1) & 1; + x_raton= (sal.x.cx >> 1) / 4; // / 8 + y_raton= (sal.x.dx)/8; // /8 +} + +void espera_soltar(void) +{ + union REGS ent, sal; + + do{ + ent.x.ax = 3; + int86(0x33, &ent, &sal); /* lee posici¢n y estados del bot¢n */ + }while((sal.x.bx & 3)!=0); + boton_izq=sal.x.bx & 1; + boton_der=(sal.x.bx >> 1) & 1; + x_raton=sal.x.cx >> 1; + y_raton=sal.x.dx; +} + + + + +void PideAnoActual(void) +{ + char buffer[80]; + BDatos SociosO, SociosD; + INFO_SOCIOS Socios; + + struct ComprasSocios Vacia; + int r; long i; + + + + Optar( ENCUADRE, "Transacci¢n en curso", "ú-ú", "A¤o: ", NULL ); + + sprintf( buffer, "%d", AnoActual ); + while ( ( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, 40, 10, 2, 11) >> 8 ) ); + + AnoActual = atoi( buffer ); + + Optar( ENCUADRE, NULL ); + + // Comprobamos que existe una base de datos para esa fecha + sprintf( buffer, "socios.%03d", AnoActual ); + if ( access(buffer, 0) != 0) + { + sprintf( buffer, "socios.%03d", AnoActual - 1 ); + // Si el a¤o anterior existe, lo copiamos + if ( access(buffer, 0) == 0) + { + if ( Optar( 1, "Nuevo a¤o en curso", "El a¤o de la transaccion", "no existe, desea inicializarlo", "Esto puede llevar unos minutos", NULL ) ) + { + if ( SociosO.AbrirReg( buffer, sizeof( INFO_SOCIOS ) ) == ERROR ) + Error(0x01); + sprintf( buffer, "socios.%03d", AnoActual ); + if ( SociosD.AbrirReg( buffer, sizeof( INFO_SOCIOS ) ) == ERROR ) + Error(0x01); + i = 0; + for ( ; SociosO.LeeReg( (void *)&Socios, i ) == OK; i++ ) + { + for ( r=0; r < 240; r++ ) + Socios.CSocios[r].dia = Socios.CSocios[r].mes = Socios.CSocios[r].Cantidad = 0; + + SociosD.InsReg( (void *)&Socios, SociosD.Registros(), ARRIBA ); + } + } + + } else { + Optar( 0, "ATENCION", "No existen datos para ese", "a¤o, se crear  una nueva base", "de datos, (a partir de cero)", NULL ); + } + + + } + + +}