#include <PalmOS.h>
#include <CharLatin.h>
#include "Sections.H"


#define VERs "1.0"

// Para pontexto, def. de fonts
#define N	'n'
#define B   'b'
#define L   'l'
#define LB  'L'

#define I   'i'
#define C   'c'
#define D   'd'

// Def. Botones en gral.
#define		BAce	1000
#define		BNue	1001
#define		BEdi	1002
#define		BDat	1003
#define		BCan	1004
#define		BBor	1005

#define		BAyu	1020
#define		BHom	1021
#define		BSB 	1022
#define		BSub	1023
#define		BBaj	1024
#define     BCal    1025
#define 	BPen	1026

// Formas
#define     FPrincipal  	100
#define		FAcerca			101
#define		FAyuda			102
#define		FError			103
#define		FAdver 			105
#define     FPeriodo    	106
#define     FSelecCuenta    107
#define     FPeriodoC    	108

// ID disco
typedef struct DID {     // Identificador
	UInt16     r;
	UInt32     m;
} ID;	
typedef struct DNADA {
	UInt8   TipoReg;
} NADA;
// Para paso de calculadora y teclado
typedef struct DOCalc {
	FormType *f;
	double   *calv;      
	Char	 *cals,
	         txt,
			 mtc;
	Int16    calid;
	Char     tcc;
	Boolean  op;
	Int16    nt;
} OCalc;
// Campo fecha
typedef  struct DF {
    UInt8     d;
    UInt8     m;
    UInt8     a1;
    UInt8     a2;
} Fecha;
// Campo numerico
typedef  struct DNUMX {
	UInt8     Signo;            // 0=positivo 1=negativo
	UInt8     VNum[6];	        // x,xxx,xxx,xxx.xx
} NumX;
// Slider
typedef struct DGSlide {
	double 		i;					// Incremento
	Int16  		p,pa;				// Pos. del slide
	Int16  		mi,ma,v;			// Min, Max, Val
	Int16  		x1,y1,x2,y2, w1,h1, // Inc/Dec unitario
	       		x3,y3,w3,h3,		// Barra de slide
	       		w4,h4,d4;			// Slide
	FieldType 	*f;					// campo
} Dsl;

// Campo período
typedef struct DPeriodo { 		// Estructura de período - Se baja a disco
	Char   op;					// Operador de periodo 0=NoHay 1=Fijo 2=Variable
	Char   tp;					// 0=Sem 1=Quin 2=Men 3=Men 4=Tri 5=Sem 6=Anu 7=xMes
	Int8   v1,v2,v3,v4;			// V. interno v1:0,1=d.semana otro=d.mes
					    		//            v2=mes ini   
					    		//            v3=0,1=tp_antes 7=cadaxmes(x)
					    		//            v4=Ignorar festivos, sábados, domingos
	Int8   da;					// Días antes
	Fecha  f;					// Fecha de pago
	Char   tpv;					// Tipo de valor 0=Gasto 1=Ingreso				    
	double v;					// Valor exacto o aproximado
} Periodo;
typedef struct DPer {			// Estructura de control
	Char          tp;			// Tipo 1=Gtos. 2=Credito
	Periodo 	  *p;			// Apuntador a la estructura
	RectangleType r;			// Tamaño y posición
	Int16         f;			// Forma a la que pertenece
	Boolean       act;			// Esta activo ?
	Boolean  	  *ayu;			// Para cuando se inicia la ayuda en periodo
	UInt8    	  *col;			// Colores
	void          *inf;			// Cuando es llamado desde crédito,...
	Char          str[3][150];	// String para desplegado
} CPer;
// Para gastos e ingresos programados
typedef struct DDPE {
	ID 		id;			// ID del dato
	Char    tipo;		// Tipo de dato 0=Gasto 1=Ingreso
	Fecha   f;			// Fecha de pago/Ingreso
	Int8    n;			// Nivel (saldos vencidos)
} DPE;

// Selección de cuentas
Boolean	 IniciaCuentas	 (Int16,ID*,ID*,Boolean,Int8*)							ES3;
void 	 FinalizaCuentas (void)          										ES3;
Boolean  SelecCuenta	 (EventType* pEvent)                   					ES3;
void 	 TpRegCuenta	 (void*,UInt8*,UInt8*)									ES3;
UInt8    PonValorCuenta	 (FormType*,Int16,ID*,Boolean,Char*)					ES3;
UInt8 	 TextoCuenta	 (Char*,ID*,Boolean)									ES3;
void 	 ActualizaCuenta (Char,void*,Char,ID*,ID*,Boolean)						ES3;
Boolean	 RvC			 (Int8,Fecha*,UInt8)   									ES3;
void     ValCrePag		 (Char,ID*,Int16,double)								ES3;
void 	 IniCuenta		 (FormType*,Boolean,ID*,Char*,Boolean,double*,Boolean*)	ES3;
// Calculadora y teclado
void 	PonBotonCT		(OCalc*,Char,Int16,double*,Char*,FormType*,
                         Int16, Int16,Int16) 						ES2;
void 	OpBotonCT		(OCalc*)									ES2;
void 	RefBotonCT		(OCalc*)									ES2;
// Fecha
Int16    FormaA      (UInt8,UInt8)                                  ES3; 
Int16    DFeb        (Int16)                                        ES3; 
Boolean  SacarTFec   (UInt8*,UInt8*,Fecha*)                     	ES3;
Boolean  SumarDias   (Int16,Fecha*)                             	ES3;
Boolean  SumarMeses  (Int16,Fecha*)                             	ES3;
Boolean  SumarAxo    (Int16,Fecha*)                             	ES3;
Boolean  Restar2Fec  (Int32*,Int16*,Int16*,Fecha*,Fecha*)       	ES3;
Int16    Comp2Fec    (Fecha *, Fecha *)                         	ES3;
Boolean  PasarFDL  	 (Int16,Int16, Fecha *)                         ES3;
void     FecHoy      (Fecha *)                                  	ES3;
void 	 ForFec		 (Char*,Char,Fecha*)							ES3;
void 	 RMes		 (Char*,Int8,Boolean)							ES3;
void 	 RMesA		 (Char*,Int8,Int16,Boolean)						ES3;
void 	 DimFec		 (Char,Fecha*,Int16*,Int16*)					ES3;
Int16 	 PonFecCamp	 (Int16,Int16,Fecha*,Int8,Int8,Boolean,Int8*) 	ES3;
void 	 BorFecCamp	 (Int16,Int16,Int16,Int16,Int8)					ES3;
Boolean	 SelFecha	 (Char*,Fecha*,Boolean) 						ES3;
void 	 CopFec		 (Fecha*,Fecha*) 								ES3;
Boolean  EsteMes 	 (Fecha*) 										ES3;
Boolean  Futura 	 (Fecha*) 										ES3;
Boolean  Pasada 	 (Fecha*) 										ES3;
Boolean  EsteMesX	 (Fecha*) 										ES3;
// Numeros
Boolean  NumSRN      (NumX*,Int16,NumX*)                  ES3;
double   PasaNaF     (NumX *)                             ES3;
void     PasaFaN     (double *,NumX *)                    ES3;
void     PasaNaA     (NumX *,Boolean,Boolean, Char *)     ES3;
Boolean  PasaAaN     (Char *,Boolean,Boolean, NumX *)     ES3;
void     Pasa0aN     (NumX *)                             ES3;
void     Pasa1aN     (NumX *)                             ES3;
void     PasaNaN     (NumX *,NumX *)                      ES3;
void     PasaNaNS    (NumX *,NumX *)                      ES3;
Int16    CompN0      (NumX*)                              ES3;
Int16    CompNN      (NumX*,NumX*)                        ES3;
// Periodos
void 	 PonPerCamp	 (CPer*,Boolean)                     			ES3;
void 	 TextoPeriodo(Char*,CPer*)                     				ES3;
Boolean  EnPeriodo	 (Int16,Int16,CPer*)                     		ES3;
void 	 SelecPeriodo(CPer*,Boolean)               					ES3;
Boolean  RPeriodo	 (EventType*)                     				ES3;
void     ProxFPPer	 (Fecha*,Periodo*,Char) 						ES3;
Int8 	 PerVenc	 (Fecha*,Periodo*,Char*) 						ES3;
void 	 IniPer		 (Char,Periodo*)								ES3;
void 	 IniPerQ	 (FormType*,Char,Boolean)						ES3;
void 	 ListaAnio	 (Int16,RectangleType*,char**,ListType*)		ES3;
// Ayudas
Boolean	Ayuda			(Int16,Char,UInt8*,UInt16)					ES2;
void 	FinAyuda		(void)										ES2;
Boolean AyudaError		(EventType*)								ES2;
// Slider
Boolean slPinta			(Dsl*,Int16,Int8*); 
void 	slIni			(Dsl*,FieldType*,Int16,Int16,Int16,
                         Int16,Int16,Int16,Int16,Int16,Int16,
                         Int16,Int16,Int16,Int16,Int8*); 
Boolean slCnt			(Dsl*,char,Int16,Int16,Int8*); 
void 	slCamp			(Dsl*,Int8*);
// Pintar
Int16 	PonTexto		(Char*,Int16,Int16,Char,Char,Int16,Boolean,Int8,Int8,Int8*);
void 	PintaImagen		(Int16,Int16,Int16);
void 	PintaB			(UInt16,UInt16,UInt16,UInt16,UInt16, 
               			 UInt8,UInt8,UInt8,UInt8,Boolean,UInt8*);
void 	IniciaColores	(UInt8*);
// Strings
void    AjustaSTR		(Char*,Char*,Int16);
// Sistema
Char 	PrefGen			(Char);
void 	SacaTexto		(Char*,UInt16,UInt16,UInt8);
// Objetos
Boolean SelecLst		(Int16);
void 	EliminaMarco	(FormType*,UInt16,ListDrawDataFuncPtr,UInt16,Boolean,Int16);
Int16 	Lista			(ControlType*,ListType*,Int16,Boolean,Int16,Char*);
void 	Texto			(Char*,FieldType*,Boolean);
void 	*GetObjPtr		(FormType*,UInt16);
// Conversiones
void 	PonComas		(Char*,Char*);
UInt8 	Cint			(Char);
Char 	Cstr			(UInt8);
double 	Adbl			(Char*);
void 	Astr			(double,Char*,UInt8*);
void 	AstrX			(double,Char*,Boolean,Boolean);
double 	AdblX			(Char*);
Boolean HayInf          (Char*,Int16);
