#include <DOS.H> #include <STDIO.H> #include <STDARG.H> #include <STRING.H> #include "SOUREXEC/EXECGRAP.H" #include "SOUREXEC/EXECCLAV.H" #include "SOUREXEC/EXECCHAR.H" void PrintChar(char pg,char echx,char echy,char caractere, int x,int y,OCTET cc,OCTET cf) { typedef OCTET CARDEF[256][8]; typedef CARDEF far *CARPTR; OCTET i, k, masque; static CARPTR fptr = (CARPTR) 0; if( fptr == (CARPTR) 0 ) fptr = MK_FP(0xf000,0x0fa6e); if( cf == 255 ) for( i = 0; i < 8; ++i ) { masque = (*fptr)[caractere][i]; for ( k = 0; k < 8; ++k, masque <<= 1 ) { if ( masque & 128 ) Tracer_Carre_Plein (pg,x+(k*echx), y+(i*echy), x+(k*echx)+echx - 1, y+(i*echy)+echy - 1, cc); } } else for ( i = 0; i < 8; ++i ) { masque = (*fptr)[caractere][i]; for ( k = 0; k < 8; ++k, masque <<= 1 ) { Tracer_Carre_Plein (pg,x+(k*echx), y+(i*echy), x+(k*echx)+echx - 1, y+(i*echy)+echy - 1, (OCTET) (( masque & 128 ) ? cc : cf) ); } } } void Print (char pg,char echx,char echy,int x,int y, OCTET cc,OCTET cf,char * string, ... ) { va_list parameter; char affichage[255], *cp; va_start( parameter, string ); vsprintf( affichage, string, parameter ); for( cp = affichage; *cp; ++cp, x+= (8*echx) ) PrintChar(pg,echx,echy,*cp,x,y,cc,cf); } void Print_Titre (char page,short y,char *st) { char cpt; char nbcar; char numcar; char *bk_st; short larg; short x; short data_char [26][4] = { { 0,170,21,26}, { 22,170,21,26}, { 44,170,21,26}, { 66,170,21,26}, { 88,170,21,26}, {110,170,21,26}, {132,170,20,26}, {153,170,20,26}, {174,170, 6,26}, {181,170,20,26}, {202,170,17,26}, {220,170,20,26}, {241,170,22,26}, {264,170,22,26}, { 0,198,21,26}, { 22,198,21,26}, { 44,198,21,26}, { 66,198,21,26}, { 88,198,21,26}, {110,198,22,26}, {133,198,20,26}, {154,198,21,26}, {176,198,22,26}, {199,198,18,26}, {218,198,18,26}, {237,198,17,26} }; nbcar = strlen (st); bk_st = st; larg = 0; for (cpt = 0; cpt < nbcar; cpt ++) { if (*st == 32) larg += 20; if ( (*st >= 65) & (*st <= 90) ) { numcar = *st - 65; larg += data_char [numcar][2] + 2; } st ++; } x = (320 - larg) / 2; st = bk_st; for (cpt = 0; cpt < nbcar; cpt ++) { if (*st == 32) x += 20; if ( (*st >= 65) & (*st <= 90) ) { numcar = *st - 65; Lire_Image_Pcx ("SPRFILES/DATA",page,x,y,MASK_ON,data_char [numcar][0], data_char [numcar][1], data_char [numcar][2], data_char [numcar][3]); x += data_char [numcar][2] + 2; } st ++; } } void Print_Vl (char page,char echx,char echy,short x,short y, OCTET cc,OCTET cf,char nbu,unsigned long valeur) { char cpt; char nbzero; char backup [10]; char buffer [10]; sprintf (buffer,"%lu",valeur); nbzero = nbu - strlen (buffer); if (nbzero > 0) { strcpy (backup,"\0"); for (cpt = 0; cpt < nbzero; cpt ++) strcat (backup,"0"); strcat (backup,buffer); strcpy (buffer,backup); } Print (page,echx,echy,x,y,cc,cf,buffer); } void Input (char pg,char echx,char echy,int x,int y, OCTET cc,OCTET cf,OCTET cr, char clav,char nb_car,char *buffer) { OCTET cpt; char touche; char touche_actionnee; char curseur; char code [128]; curseur = 0; for (cpt = 0; cpt < 128; cpt ++) code [cpt] = 0; code [57] = 32; code [14] = -1; code [28] = -2; code [16] = 65; code [48] = 66; code [46] = 67; code [32] = 68; code [18] = 69; code [33] = 70; code [34] = 71; code [35] = 72; code [23] = 73; code [36] = 74; code [37] = 75; code [38] = 76; code [39] = 77; code [49] = 78; code [24] = 79; code [25] = 80; code [30] = 81; code [19] = 82; code [31] = 83; code [20] = 84; code [22] = 85; code [47] = 86; code [44] = 87; code [45] = 88; code [21] = 89; code [17] = 90; code [11] = 48; code [ 2] = 49; code [ 3] = 50; code [ 4] = 51; code [ 5] = 52; code [ 6] = 53; code [ 7] = 54; code [ 8] = 55; code [ 9] = 56; code [10] = 57; code [82] = 48; code [79] = 49; code [80] = 50; code [81] = 51; code [75] = 52; code [76] = 53; code [77] = 54; code [71] = 55; code [72] = 56; code [73] = 57; for (cpt = 0; cpt < nb_car; cpt ++) Print (pg,echx,echy,x + (cpt*(8*echx)),y,cc,cf," "); Tracer_Carre_Plein (pg, x + (curseur * (8 * echx)), y + (7 * echy), x + (curseur * (8 * echx)) + (8 * echx) - 1, y + (7 * echy) + (echy - 1), cr); *buffer = 0; do { touche_actionnee = Lire_Code_Touche (); touche = code [touche_actionnee]; if ( (touche == -1) & (curseur > 0) ) { Print (pg,echx,echy,x + (curseur * (8 * echx)),y,cc,cf," "); curseur --; Print (pg,echx,echy,x + (curseur * (8 * echx)),y,cc,cf," "); *(buffer + curseur) = 0; Tracer_Carre_Plein (pg, x + (curseur * (8 * echx)), y + (7 * echy), x + (curseur * (8 * echx)) + (8 * echx) - 1, y + (7 * echy) + (echy - 1), cr); } if ( ( (touche >= 48) & (touche <= 57) & ( (clav == NUM) | (clav == ALPNUM) ) ) | ( (touche >= 65) & (touche <= 90) & ( (clav == ALP) | (clav == ALPNUM) ) ) | ( (touche == 32) & ( (clav == ALP) | (clav == ALPNUM) ) ) ) { *(buffer + curseur) = touche; *(buffer + curseur + 1) = 0; Print (pg,echx,echy,x,y,cc,cf,buffer); if (curseur < (nb_car - 1)) curseur ++; Tracer_Carre_Plein (pg, x + (curseur * (8 * echx)), y + (7 * echy), x + (curseur * (8 * echx)) + (8 * echx) - 1, y + (7 * echy) + (echy - 1), cr); } } while ( Lire_Action_Touche (ENTREE) != 1 ); }