First commit 20/03/1997
This commit is contained in:
757
TPV_GBD.CPP
Normal file
757
TPV_GBD.CPP
Normal file
@ -0,0 +1,757 @@
|
||||
#include <io.h>
|
||||
#include <dir.h>
|
||||
#include <alloc.h>
|
||||
#include <conio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <graphics.h>
|
||||
|
||||
#include "c:\program\src_dos\libs\make_bot\make_bot.h"
|
||||
#include "c:\program\src_dos\libs\bdatos\bdatos.hh"
|
||||
#include "tpv_def.h"
|
||||
|
||||
#define NLINEAS_EMPR 9
|
||||
#define NLINEAS_EMPRelegir 10
|
||||
|
||||
#define CONTRAE 0
|
||||
#define EXPANDE 1
|
||||
|
||||
extern INFO_EMPRESAS SEmpr; // Estructura de Empreedores
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// Datos de uso p<>blico (-><3E><-)
|
||||
char file[13]; // archivo vinculado a la rama
|
||||
|
||||
// Datos privados
|
||||
char Titulo[80]; // Titulo de la rama
|
||||
|
||||
char Disponible; // Indica si esta o no el item disponible
|
||||
|
||||
unsigned char nivel; // Nivel de profundidad en el cual estamos
|
||||
char ExpCont; // La rama es:
|
||||
// Expansible 1 Nada -1
|
||||
// Contraible 0
|
||||
char Estado; // La rama esta:
|
||||
// Expandida 1
|
||||
// Contraida 0
|
||||
char Visible; // Es visible en estos momentos?
|
||||
} ARBOL_EXPANSIBLE;
|
||||
|
||||
ARBOL_EXPANSIBLE *InfoGBD; // Informacion sobre la empresa
|
||||
|
||||
|
||||
/*************************************\
|
||||
| |
|
||||
| Parte Principal del M<>dulo |
|
||||
| |
|
||||
\*************************************/
|
||||
void ImportaFicheros(void);
|
||||
void ExportaFicheros( int CurrRow );
|
||||
void GestionBaseDatos(void);
|
||||
void EscalaLogotipo( char * File, int X, int Y );
|
||||
void ContraeExpandeRama( ARBOL_EXPANSIBLE *DesdeAqui, char ContraeExpande );
|
||||
void IntroduceDatos( char *titulo, char *file, unsigned char nivel, char ExpCont, char Estado, char Visible, int i );
|
||||
|
||||
int RecopilaInformacion( int *Nodos );
|
||||
|
||||
void MuestraDatosGBD( ARBOL_EXPANSIBLE *DesdeAqui );
|
||||
void MuestraGDB( ARBOL_EXPANSIBLE *EstaRama, char RowPhysic, char COMO );
|
||||
|
||||
/*************************************\
|
||||
| |
|
||||
| Parte Tercera del M<>dulo |
|
||||
| |
|
||||
| Secci<63>n para la impresi<73>n |
|
||||
| |
|
||||
\*************************************/
|
||||
void ImprimeInformacion(void);
|
||||
|
||||
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20> Parte principal del m<>dulo <20>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* GestionBaseDatos *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Controla todas las bases de datos, existentes en el disco *|
|
||||
|* duro, de la empresa activa. *|
|
||||
|* Los datos cuelgan del nombre de la empresa, clasificados *|
|
||||
|* por a<>o, tema y dentro de este, mes, si corresponde... *|
|
||||
|* *|
|
||||
|* *|
|
||||
|* Entradas: (ninguna) *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
void GestionBaseDatos(void)
|
||||
{
|
||||
char buffer2[100], ok = 0;
|
||||
char buffer[100];
|
||||
int BPush, key, i;
|
||||
|
||||
int CurrRow; // Linea sobre la que estamos
|
||||
int RowPhysic; // Linea F<>sica sobre la que estamos
|
||||
int NLineasT; // N<> total de lineas
|
||||
|
||||
// Rellenamos la pantalla con un fondo atractivo...
|
||||
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
|
||||
Imprime_Estaticos( 130, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 30'
|
||||
|
||||
sprintf( buffer, "datos\\%s\\tpv.pcx", NEmpresa );
|
||||
if ( access( buffer, 0 ) != 0 )
|
||||
sprintf( buffer, "systm\\tpv.pcx" );
|
||||
EscalaLogotipo( buffer, 275, 5 );
|
||||
|
||||
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
if ( RecopilaInformacion( &NLineasT ) == ERROR )
|
||||
{
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
Optar( 0, "Memoria insuficiente", "No se a podido alojar la", "cantidad de memoria requerida", "libere memoria antes de", "volver a intertarlo.", NULL );
|
||||
return;
|
||||
}
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
|
||||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||||
|
||||
// Mostramos datos hasta que se nos acabe la pantalla
|
||||
RowPhysic = CurrRow = 0;
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
|
||||
do {
|
||||
MuestraGDB( &InfoGBD[CurrRow], RowPhysic, INTENSO );
|
||||
BPush = Comprueba_Secuencia( 2, NULL );
|
||||
MuestraGDB( &InfoGBD[CurrRow], RowPhysic, 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
|
||||
switch ( getch() )
|
||||
{
|
||||
// Contrae la rama
|
||||
case 27:
|
||||
ContraeExpandeRama( &InfoGBD[CurrRow], CONTRAE );
|
||||
setfillstyle( SOLID_FILL, 0 ); bar ( 12, 12, 263, 443 );
|
||||
RowPhysic = CurrRow = 0;
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
break;
|
||||
// Contrae/Expande rama, dependiendo del estado
|
||||
case 13:
|
||||
ContraeExpandeRama( &InfoGBD[CurrRow], InfoGBD[CurrRow].Estado == EXPANDE ? CONTRAE : EXPANDE );
|
||||
setfillstyle( SOLID_FILL, 0 ); bar ( 12, 12, 263, 443 );
|
||||
RowPhysic = CurrRow = 0;
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case -1: // Hay una tecla especial en BUFFER
|
||||
switch( getch() )
|
||||
{
|
||||
// Flecha Izquierda
|
||||
case 75:
|
||||
case 15:
|
||||
// Flecha Arriba
|
||||
case 72:
|
||||
if ( CurrRow > 0 )
|
||||
{
|
||||
RowPhysic --;
|
||||
do {
|
||||
CurrRow--;
|
||||
} while( CurrRow > 0 && !InfoGBD[CurrRow].Visible );
|
||||
}
|
||||
if ( RowPhysic < 0 )
|
||||
{
|
||||
i = 0;
|
||||
do {
|
||||
CurrRow--;
|
||||
if ( InfoGBD[CurrRow].Visible )
|
||||
i ++;
|
||||
} while( CurrRow > 0 && i != 28 );
|
||||
setfillstyle( SOLID_FILL, 0 ); bar ( 12, 12, 263, 443 );
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
RowPhysic = 0;
|
||||
//
|
||||
RowPhysic += 27;
|
||||
i = 0;
|
||||
do {
|
||||
CurrRow++;
|
||||
if ( InfoGBD[CurrRow].Visible )
|
||||
i++;
|
||||
} while( i != 27 && strcmp( InfoGBD[CurrRow].Titulo, "TOPE_FINAL" ) != 0 );
|
||||
if ( !InfoGBD[CurrRow].Visible || strcmp( InfoGBD[CurrRow].Titulo, "TOPE_FINAL" ) == 0 )
|
||||
{
|
||||
RowPhysic --;
|
||||
do {
|
||||
CurrRow--;
|
||||
} while( CurrRow > 0 && !InfoGBD[CurrRow].Visible );
|
||||
}
|
||||
//
|
||||
}
|
||||
break;
|
||||
// Flecha Derecha
|
||||
case 77:
|
||||
case 9:
|
||||
// Flecha Abajo
|
||||
case 80:
|
||||
RowPhysic ++;
|
||||
do {
|
||||
CurrRow++;
|
||||
} while( !InfoGBD[CurrRow].Visible && strcmp( InfoGBD[CurrRow].Titulo, "TOPE_FINAL" ) != 0 );
|
||||
if ( !InfoGBD[CurrRow].Visible || strcmp( InfoGBD[CurrRow].Titulo, "TOPE_FINAL" ) == 0 )
|
||||
{
|
||||
RowPhysic --;
|
||||
do {
|
||||
CurrRow--;
|
||||
} while( CurrRow > 0 && !InfoGBD[CurrRow].Visible );
|
||||
}
|
||||
if ( RowPhysic >= 28 )
|
||||
{
|
||||
RowPhysic = 0;
|
||||
setfillstyle( SOLID_FILL, 0 ); bar ( 12, 12, 263, 443 );
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
}
|
||||
break;
|
||||
// Inicio
|
||||
case 71:
|
||||
// RowPhysic = CurrRow = 0;
|
||||
break;
|
||||
// Fin
|
||||
case 79:
|
||||
/*
|
||||
CurrRow = NLineas-1;
|
||||
if ( InfoGBD[CurrRow].Estado == CONTRAIDO )
|
||||
do {
|
||||
CurrRow--;
|
||||
} while( CurrRow > 0 && InfoGBD[CurrRow].Estado == CONTRAIDO );
|
||||
*/
|
||||
break;
|
||||
}
|
||||
break;
|
||||
// Imprimir Informe detallado
|
||||
case 1:
|
||||
break;
|
||||
// Menu Principal
|
||||
case 2:
|
||||
ok = 1;
|
||||
break;
|
||||
// Exportar
|
||||
case 3:
|
||||
ExportaFicheros( CurrRow );
|
||||
break;
|
||||
// Importar
|
||||
case 4:
|
||||
ImportaFicheros();
|
||||
break;
|
||||
// Retroceso R<>pido
|
||||
case 5:
|
||||
ungetch(75); ungetch(0);
|
||||
// Inicio
|
||||
case 6:
|
||||
ungetch(71); ungetch(0);
|
||||
break;
|
||||
// Eliminar Clave
|
||||
case 7:
|
||||
// No se permite eliminar TODO, TODO, del tiron
|
||||
if ( CurrRow == 0 ) break;
|
||||
|
||||
if ( InfoGBD[CurrRow].nivel <= InfoGBD[CurrRow+1].nivel )
|
||||
sprintf( buffer, "toda la clave COMPLETA." );
|
||||
else
|
||||
sprintf( buffer, "el siguiente fichero: %s", InfoGBD[CurrRow].file );
|
||||
Optar( 0, "ALERTA de ELIMINACION!!!", "Se dispone a eliminar", buffer, "<EFBFBD> Desea continuar ?", NULL );
|
||||
if ( Optar( 1, "ALERTA de ELIMINACION!!!", "Se dispone a eliminar", buffer, "<EFBFBD> Esta realmente seguro ?", NULL ) )
|
||||
{
|
||||
i = 0;
|
||||
do {
|
||||
sprintf( buffer, "datos\\%s\\%s", NEmpresa, InfoGBD[CurrRow + i].file );
|
||||
unlink( buffer );
|
||||
i ++;
|
||||
} while ( InfoGBD[CurrRow + i].nivel <= InfoGBD[CurrRow + i + 1].nivel );
|
||||
}
|
||||
// ReEscaneamos el <20>rbol
|
||||
free( InfoGBD );
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
if ( RecopilaInformacion( &NLineasT ) == ERROR )
|
||||
{
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
Optar( 0, "Memoria insuficiente", "No se a podido alojar la", "cantidad de memoria requerida", "libere memoria antes de", "volver a intertarlo.", NULL );
|
||||
return;
|
||||
}
|
||||
Optar( ENCUADRE, "Recopilando informaci<63>n", "Se esta recopilando toda", "la informaci<63>n disponible", "acerca de su empresa:", "Por favor, espere...", NULL );
|
||||
// Volvemos a mostrar todo
|
||||
CurrRow--;
|
||||
MuestraDatosGBD( &InfoGBD[CurrRow] );
|
||||
break;
|
||||
// Fin
|
||||
case 8:
|
||||
ungetch(79); ungetch(0);
|
||||
break;
|
||||
// AvanceR<65>pido
|
||||
case 9:
|
||||
ungetch(77); ungetch(0);
|
||||
break;
|
||||
|
||||
#ifndef DEMOSTRACION
|
||||
#else
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} while( !ok );
|
||||
|
||||
#ifndef DEMOSTRACION
|
||||
// Do nothing
|
||||
#else
|
||||
Optar( 0, "VERSION DEMOSTRACION", "Cambios realizados no ser<65>n", "llevados a cabo.", NULL );
|
||||
#endif
|
||||
|
||||
free( InfoGBD );
|
||||
}
|
||||
|
||||
|
||||
void MuestraDatosGBD( ARBOL_EXPANSIBLE *DesdeAqui )
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for ( i = 0, j = 0; j < 28 && strcmp( DesdeAqui[i].Titulo, "TOPE_FINAL" ) != 0; i++ )
|
||||
{
|
||||
if ( DesdeAqui[i].Visible )
|
||||
{
|
||||
MuestraGDB( &DesdeAqui[i], j, NORMAL );
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MuestraGDB( ARBOL_EXPANSIBLE *EstaRama, char RowPhysic, char COMO )
|
||||
{
|
||||
char buffer[80];
|
||||
int Y0, Y1, X0, X1;
|
||||
|
||||
Y0 = 20 + 15*RowPhysic;
|
||||
Y1 = Y0 + 17;
|
||||
// Ymin => 425
|
||||
|
||||
X0 = 20; X1 = 255;
|
||||
|
||||
setfillstyle( COMO == NORMAL ? SOLID_FILL : CLOSE_DOT_FILL, COMO == NORMAL ? 0 : Config.TxtBgI );
|
||||
bar ( X0, Y0, X1, Y1 );
|
||||
setcolor( COMO == NORMAL ? Config.TxtFgN + 1 : Config.TxtBgN );
|
||||
|
||||
// Mostramos si es posible CONTRAERLA/EXPANDIRLA o no se puede hacer nada
|
||||
sprintf ( buffer, "%s", (EstaRama -> ExpCont) == EXPANDE ?
|
||||
( (EstaRama -> Estado ) == CONTRAE ? "+" : "-" ) :
|
||||
" " );
|
||||
outtextxy ( 20 + 20*(EstaRama -> nivel), Y0, buffer );
|
||||
|
||||
if ( strcmp( (EstaRama -> file), "--------.---" ) == 0 )
|
||||
sprintf ( buffer, "%s", (EstaRama -> Titulo) );
|
||||
else
|
||||
sprintf ( buffer, "%s <%s>", (EstaRama -> Titulo), (EstaRama -> file) );
|
||||
outtextxy ( 35 + 20*(EstaRama -> nivel), Y0, buffer );
|
||||
}
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* ExportaFicheros *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Lleva la clave seleccionada hacia A:\[NEmpresa] *|
|
||||
|* *|
|
||||
|* Entradas: (ninguna) *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
void ExportaFicheros( int CurrRow )
|
||||
{
|
||||
char buffer[80];
|
||||
int i;
|
||||
|
||||
Optar( 0, "Inicio de Exportaci<63>n", "Inserte un disco limpio en A:", "Se dispone a copiar la clave", "seleccionada para llevarla", "a otro ordenador, o guardarla.", NULL );
|
||||
// Iniciamos la exportacion
|
||||
// Vemos si tenemos suficiente espacio libre
|
||||
|
||||
|
||||
// Creamos en la unidad A:\ el directorio de la empresa, lo
|
||||
// limpiamos y comenzamos...
|
||||
sprintf( buffer, "A:\\%s", NEmpresa );
|
||||
if ( !mkdir(buffer) )
|
||||
{
|
||||
Optar( 0, "Error de escritura", "Me es imposible acceder", "a la unidad A:\\", "Proceso Abortado", NULL );
|
||||
}
|
||||
|
||||
i = 0;
|
||||
do {
|
||||
// Solo si no es una cabecera...
|
||||
if ( strcmp( InfoGBD[CurrRow + i].file, "--------.---" ) != 0 )
|
||||
{
|
||||
sprintf( buffer, "datos\\%s\\%s", NEmpresa, InfoGBD[CurrRow + i].file );
|
||||
// ... a copiar los ficheros de [ buffer ] ---->>> [ A:\NEmpresa\InfoGBD[CurrRow + i ].file ]
|
||||
}
|
||||
i ++;
|
||||
} while ( InfoGBD[CurrRow + i].nivel <= InfoGBD[CurrRow + i + 1].nivel );
|
||||
|
||||
}
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* ImportaFicheros *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Se trae lo ficheros previamente exportados de A:\[NEmpresa] *|
|
||||
|* hasta \[NEmpresa] *|
|
||||
|* *|
|
||||
|* Entradas: (ninguna) *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
void ImportaFicheros(void)
|
||||
{
|
||||
int i;
|
||||
struct ffblk ffblk;
|
||||
char buffer2[80], buffer[80];
|
||||
|
||||
if ( !Optar( 1, "Alerta <20><><EFBFBD> Importaci<63>n !!!", "Este proceso eliminar<61> las", "versiones existentes de BDatos", "<EFBFBD> Desea continuar ?", NULL ) )
|
||||
return;
|
||||
|
||||
Optar( 0, "Inicio de Exportaci<63>n", "Inserte un disco limpio en A:", "Se dispone a restaurar la", "clave seleccionada para", "reponerla o actualizarla.", NULL );
|
||||
// Iniciamos la importacion
|
||||
sprintf( buffer, "A:\\%s\\*.*", NEmpresa );
|
||||
i = findfirst(buffer, &ffblk, 0);
|
||||
while (!i)
|
||||
{
|
||||
sprintf( buffer2, "datos\\%s\\%s", NEmpresa, ffblk.ff_name );
|
||||
// ... a copiar los ficheros de [ A:\NEmpresa\ffblk.ff_name] ---> [ buffer ]
|
||||
i = findnext(&ffblk);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#define MOD_SCAL 2
|
||||
void EscalaLogotipo( char * File, int X, int Y )
|
||||
{
|
||||
FILE *fp;
|
||||
int alto, ancho; unsigned char byte;
|
||||
int alto2, ancho2;
|
||||
int scalH = 0, scalV = 0;
|
||||
int contador;
|
||||
char color[17] = { 0, EGA_RED, EGA_GREEN, EGA_LIGHTGRAY,
|
||||
EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED,
|
||||
EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED,
|
||||
EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED, EGA_LIGHTRED };
|
||||
|
||||
|
||||
if ( ( fp = fopen ( File, "rb" ) ) != NULL )
|
||||
{
|
||||
|
||||
// Saltamos la cabecera
|
||||
fseek( fp, 128, SEEK_SET );
|
||||
alto2 = 0;
|
||||
for(alto=0; alto<279; alto++)
|
||||
{
|
||||
ancho2 = 0;
|
||||
scalV = (scalV++)%MOD_SCAL;
|
||||
{
|
||||
if ( scalV == 1 )
|
||||
alto2++;
|
||||
for(ancho=0; ancho<240; )
|
||||
{
|
||||
byte=getc(fp);
|
||||
if(byte<=0xC0)
|
||||
{
|
||||
scalH = (scalH++)%MOD_SCAL;
|
||||
if ( scalH == 1 && scalV == 1)
|
||||
{
|
||||
if ( byte != 255 )
|
||||
putpixel( ancho2+X, alto2+Y, color[byte%16] );
|
||||
ancho2++;
|
||||
}
|
||||
ancho++;
|
||||
}
|
||||
else
|
||||
{
|
||||
contador=byte&0x3F; byte=getc(fp);
|
||||
for(; contador>0; contador--)
|
||||
{
|
||||
scalH = (scalH++)%MOD_SCAL;
|
||||
if ( scalH == 1 && scalV == 1)
|
||||
{
|
||||
if ( byte != 255 )
|
||||
putpixel( ancho2+X, alto2+Y, color[byte%16] );
|
||||
ancho2++;
|
||||
}
|
||||
ancho++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose( fp );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* RecopilaInformaci<63>n *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Recopila una extensa informaci<63>n sobre el estado de las *|
|
||||
|* bases de datos existentes para la empresa dada, y la *|
|
||||
|* clasifica por niveles expansibles... *|
|
||||
|* *|
|
||||
|* *|
|
||||
|* Entradas: (ninguna) *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
int RecopilaInformacion(int *Nodos)
|
||||
{
|
||||
struct ffblk ffblk;
|
||||
int done;
|
||||
|
||||
char buffer[80], buffer1[80];
|
||||
int Anyos[50], N_Anyos; // Como muchos gestionaremos, 50 a<>os
|
||||
int i, j, k;
|
||||
char Mes[12][12] = { "Enero ", "Febrero ", "Marzo ", "Abril ", "Mayo ", "Junio ", "Julio ", "Agosto ", "Septiembre", "Octubre ", "Noviembre ", "Diciembre " };
|
||||
|
||||
|
||||
// Total de ficheros:
|
||||
for ( i=0; i < 50; i++ ) Anyos[i] = 0;
|
||||
i = 0; j = 0; N_Anyos = 0;
|
||||
sprintf( buffer, "datos\\%s\\*.*", NEmpresa );
|
||||
done = findfirst(buffer,&ffblk,0);
|
||||
while (!done)
|
||||
{
|
||||
// Analizamos los a<>os de los que disponemos...
|
||||
if ( strstr( ffblk.ff_name, "CMP" ) != NULL || strstr( ffblk.ff_name, "VT" ) != NULL )
|
||||
{
|
||||
// Obtenemos el a<>o
|
||||
k = (ffblk.ff_name[4]-'0') * 1000 + (ffblk.ff_name[5]-'0') * 100 + (ffblk.ff_name[6]-'0') * 10 + (ffblk.ff_name[7]-'0') * 1;
|
||||
// Lo buscamos entre los que ya tenemos y de no encontrarlo lo agregamos
|
||||
for ( j = 0; j < 50 && Anyos[j] != 0; j++ )
|
||||
if ( Anyos[j] == k )
|
||||
break;
|
||||
if ( j < 50 && Anyos[j] == 0 )
|
||||
{
|
||||
N_Anyos++; Anyos[j] = k;
|
||||
}
|
||||
}
|
||||
|
||||
i++; done = findnext(&ffblk);
|
||||
};
|
||||
|
||||
|
||||
|
||||
*Nodos = 1 + // Raiz (N0) con el nombre de la empresa
|
||||
3 + // Datos que perduran en el tiempo
|
||||
( 6 * N_Anyos)+ // Datos por a<>o * n<>mero de a<>os disponibles
|
||||
i + // ( n<> total de ficheros )
|
||||
1 ; // Tope para el final de nuestras funciones...
|
||||
|
||||
|
||||
|
||||
if ( ( InfoGBD = (ARBOL_EXPANSIBLE *)malloc( sizeof(ARBOL_EXPANSIBLE)*(*Nodos) ) ) == NULL )
|
||||
return ERROR;
|
||||
|
||||
// Nivel 0: Nombre de la empresa
|
||||
j = 0;
|
||||
IntroduceDatos( SEmpr.Empresa, "--------.---", 0, 1, 0, 1, j ); j++;
|
||||
// Nv Ex Es Vis
|
||||
|
||||
// Datos que perduran con el tiempo
|
||||
// Nivel 1:
|
||||
sprintf( buffer, "datos\\%s\\info_ref.dbf", NEmpresa );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
IntroduceDatos( "Articulos", "info_ref.dbf", 1, 0, 0, 0, j ); j++;
|
||||
}
|
||||
sprintf( buffer, "datos\\%s\\info_emp.dbf", NEmpresa );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
IntroduceDatos( "Info Empleados", "info_emp.dbf", 1, 0, 0, 0, j ); j++;
|
||||
}
|
||||
sprintf( buffer, "datos\\%s\\mensajes.dbf", NEmpresa );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
IntroduceDatos( "Mensajes Prot.", "mensajes.dbf", 1, 0, 0, 0, j ); j++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < N_Anyos; i++ )
|
||||
{
|
||||
sprintf( buffer, "%d", Anyos[i] );
|
||||
IntroduceDatos( buffer, "--------.---", 1, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
|
||||
// Informacion variable con el tiempo
|
||||
// Nivel 2:
|
||||
sprintf( buffer, "datos\\%s\\inf_prv.%03d", NEmpresa, Anyos[i] - ( Anyos[i] / 1000 ) * 1000 );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "inf_prv.%03d", Anyos[i] - ( Anyos[i] / 1000 ) * 1000 );
|
||||
IntroduceDatos( "Proveedores", buffer, 2, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
|
||||
// Nivel 3clt: Clientes
|
||||
sprintf( buffer, "datos\\%s\\inf_clt1.dbf", NEmpresa );
|
||||
sprintf( buffer1, "datos\\%s\\inf_clt2.%03d", NEmpresa, Anyos[i] - ( Anyos[i] / 1000 ) * 1000 );
|
||||
if ( access( buffer, 0 ) == 0 || access( buffer1, 0 ) == 0)
|
||||
{
|
||||
// Nivel 2clt: Clientes
|
||||
IntroduceDatos( "Clientes", "--------.---", 2, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
IntroduceDatos( "Ficha Clt", "inf_clt1.dbf", 3, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
if ( access( buffer1, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "inf_clt2.%03d", Anyos[i] - ( Anyos[i] / 1000 ) * 1000 );
|
||||
IntroduceDatos( "Datos Clt", buffer, 3, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IntroduceDatos( "Compras", "--------.---", 2, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
// Nivel 3cmp: Archivos de compras existentes
|
||||
for ( k = 0; k < 12; k++ )
|
||||
{
|
||||
sprintf( buffer, "datos\\%s\\cmp-%04d.m%02d", NEmpresa, Anyos[i], k+1 );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "cmp-%04d.m%02d", Anyos[i], k+1 );
|
||||
IntroduceDatos( Mes[k], buffer, 3, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
}
|
||||
|
||||
IntroduceDatos( "Gestion de Ventas", "--------.---", 2, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
IntroduceDatos( "Datos generales", "--------.---", 3, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
for ( k = 0; k < 12; k++ )
|
||||
{
|
||||
sprintf( buffer, "datos\\%s\\VT1-%04d.m%02d", NEmpresa, Anyos[i], k+1 );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "VT1-%04d.m%02d", Anyos[i], k+1 );
|
||||
IntroduceDatos( Mes[k], buffer, 4, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
}
|
||||
IntroduceDatos( "Productos Vendidos", "--------.---", 3, 1, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
for ( k = 0; k < 12; k++ )
|
||||
{
|
||||
sprintf( buffer, "datos\\%s\\VT2-%04d.m%02d", NEmpresa, Anyos[i], k+1 );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "VT2-%04d.m%02d", Anyos[i], k+1 );
|
||||
IntroduceDatos( Mes[k], buffer, 4, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
}
|
||||
sprintf( buffer, "datos\\%s\\VT3-%04d.M--", NEmpresa, Anyos[i] );
|
||||
if ( access( buffer, 0 ) == 0 )
|
||||
{
|
||||
sprintf( buffer, "VT3-%04d.M--", Anyos[i] );
|
||||
IntroduceDatos( "Ventas por Empleado", buffer, 3, 0, 0, 0, j/*Tamano bloque*/ ); j++;
|
||||
}
|
||||
|
||||
// Nv Ex Es Vis
|
||||
}
|
||||
|
||||
IntroduceDatos( "TOPE_FINAL", "--------.---", 0, 0, 0, 0, j/*Tamano bloque*/ );
|
||||
// j--; *Nodos = j;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* IntroduceDatos *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Realmente esto no vale para nada, solo para tener que *|
|
||||
|* escribir menos... *|
|
||||
|* *|
|
||||
|* Entradas: Los datos de relleno para la estructura ARBOL_EXPANSIBLE *|
|
||||
|* *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
void IntroduceDatos( char *titulo, char *file, unsigned char nivel, char ExpCont, char Estado, char Visible, int i )
|
||||
{
|
||||
strcpy( InfoGBD[i].Titulo, titulo );
|
||||
strcpy( InfoGBD[i].file, file );
|
||||
InfoGBD[i].nivel = nivel;
|
||||
InfoGBD[i].ExpCont = ExpCont;
|
||||
InfoGBD[i].Estado = Estado;
|
||||
InfoGBD[i].Visible = Visible;
|
||||
}
|
||||
|
||||
/**************************************************************************\
|
||||
|* *|
|
||||
|* ContraeExpandeRama *|
|
||||
|* *|
|
||||
|* Descripci<63>n: *|
|
||||
|* Contrae o expande la rama seg<65>n el par<61>metro y apartir del *|
|
||||
|* punto indicado... *|
|
||||
|* *|
|
||||
|* Entradas: Puntero al inicio de la expanci<63>n / contraccion *|
|
||||
|* Accion a ejecutar: CONTRAE / EXPANDE *|
|
||||
|* *|
|
||||
|* Salidas: (ninguna) *|
|
||||
|* *|
|
||||
\**************************************************************************/
|
||||
void ContraeExpandeRama( ARBOL_EXPANSIBLE *DesdeAqui, char ContraeExpande )
|
||||
{
|
||||
int i;
|
||||
|
||||
// Solo si desde el punto donde estamos es Expansible
|
||||
if ( DesdeAqui -> ExpCont == EXPANDE )
|
||||
{
|
||||
DesdeAqui -> Estado = ContraeExpande;
|
||||
if ( ContraeExpande == CONTRAE )
|
||||
{
|
||||
for ( i=0; ( DesdeAqui -> nivel ) < DesdeAqui[i+1].nivel ; i++)
|
||||
{
|
||||
DesdeAqui[i+1].Visible = ContraeExpande;
|
||||
DesdeAqui[i+1].Estado = ContraeExpande;
|
||||
}
|
||||
} else {
|
||||
for ( i=0; DesdeAqui[i+1].nivel > DesdeAqui -> nivel && DesdeAqui[i+1].nivel != 0; i++)
|
||||
{
|
||||
if ( ( DesdeAqui -> nivel + 1 ) == DesdeAqui[i+1].nivel )
|
||||
DesdeAqui[i+1].Visible = ContraeExpande;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
typedef struct
|
||||
{
|
||||
// Datos de uso p<>blico (-><3E><-)
|
||||
char file[13]; // archivo vinculado a la rama
|
||||
|
||||
// Datos privados
|
||||
char Titulo[80]; // Titulo de la rama
|
||||
|
||||
unsigned char nivel; // Nivel de profundidad en el cual estamos
|
||||
char ExpCont; // La rama es:
|
||||
// Expansible 1
|
||||
// Nada 0
|
||||
char Estado; // La rama esta:
|
||||
// Expandida 1
|
||||
// Contraida 0
|
||||
} ARBOL_EXPANSIBLE;
|
||||
*/
|
Reference in New Issue
Block a user