#include "\projet\lib386\lib_sys\adeline.h" #include "\projet\lib386\lib_sys\lib_sys.h" #include "\projet\lib386\lib_svga\lib_svga.h" #include "lib_menu.h" #include #include #include #include #ifndef WATCOM9 #include #endif /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ T_CLICK_BOX *GetPtrLcb( T_MENU *ptrmenu, WORD handle ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { return ptrlcb ; } ptrlcb++ ; } return 0L ; } /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ void OrButtonFlagIfTrue( T_MENU *ptrmenu, WORD handle, WORD flags, WORD test ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; if( test != 0 ) { nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { ptrlcb->Flags |= flags ; return ; } ptrlcb++ ; } } } void SwitchButton( T_MENU *ptrmenu, WORD handle ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { ptrlcb->Flags ^= FLAG_PUSHED ; /* if( flagaff ) { DrawBox( ptrmenu, n, NO_FLAG, TRUE ) ; } */ return ; } ptrlcb++ ; } } /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ void ChangeButtonFlags( T_MENU *ptrmenu, WORD handle, WORD flags, WORD flagaff ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { ptrlcb->Flags = flags ; if( flagaff ) { DrawBox( ptrmenu, n, NO_FLAG, TRUE ) ; } return ; } ptrlcb++ ; } } /*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/ /* WORD GetButtonFlags( T_MENU *ptrmenu, WORD handle ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { return ptrlcb->Flags ; } ptrlcb++ ; } return 0 ; } */ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ void ChangeButtonString( T_MENU *ptrmenu, WORD handle, UBYTE *string, WORD flagaff ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { ptrlcb->PtrString = string ; if( flagaff ) { DrawBox( ptrmenu, n, NO_FLAG, TRUE ) ; } return ; } ptrlcb++ ; } } /*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/ /* UBYTE* GetButtonString( T_MENU *ptrmenu, WORD handle ) { WORD n, nblcb ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) { return ptrlcb->PtrString ; } ptrlcb++ ; } return 0L ; } */ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ void InputString( T_MENU *ptrmenu, WORD handle, WORD maxcar ) { WORD n, nblcb, numlcb ; WORD coul,x,y ; LONG x1,y1,x2,y2 ; WORD start,pc ; WORD exit ; WORD len ; WORD nbaffcar ; WORD carsizex ; WORD myclick, mykey ; WORD memoasciimode ; UBYTE car ; UBYTE string[256] ; T_CLICK_BOX *ptrlcb ; nblcb = ptrmenu->NbBox ; ptrlcb = ptrmenu->PtrMallocList ; for( n=0; nHandle == handle ) break ; ptrlcb++ ; } if( n==nblcb ) return ; numlcb = n ; strcpy( string, ptrlcb->PtrString ) ; pc = -1 ; /* pos curseur (-1 no cursor) */ start = 0 ; x1 = ptrlcb->X1+3 ; y1 = ptrlcb->Y1+3 ; x2 = ptrlcb->X2-3 ; y2 = ptrlcb->Y2-3 ; nbaffcar = (carsizex=((x2 - x1)+1)/SizeCar) * (((y2-y1)+1)/SizeCar) ; if( ptrlcb->Flags & FLAG_RED ) coul = B_ROUGE+1 ; else coul = B_GRIS+1 ; memoasciimode = AsciiMode ; AsciiMode = TRUE ; CoulText( BLANC,-1 ) ; ShowMouse( 0 ) ; while( Click ) ; exit = FALSE ; while( !exit ) { /* affichage */ /* DrawInputString( string, nbffcar, start, pc, */ len = strlen( string ) ; if( pc-start >= nbaffcar ) start = pc - nbaffcar + 1 ; if( pc < start ) start = pc ; Vsync() ; if( pc == -1 ) { x = x1+(len*SizeCar) ; if( x>x2 ) x = x2 ; Box( x1,y1,x,y2, 9 ) ; } else { Box( x1,y1,x2,y2, coul ) ; } x = x1 ; y = y1 ; for( n=0; n<=len; n++ ) { if( n < start ) continue ; if( n == pc ) { Box(x,y,x+SizeCar-2,y+SizeCar-1,BLANC ) ; x += SizeCar ; if( x > x2-SizeCar-1 ) { if( y > y2-SizeCar-1 ) { break ; } else { y += SizeCar ; x = x1 ; } } } Text( x,y, "%c", string[n] ) ; x += SizeCar ; if( x > x2-SizeCar-1 ) { y += SizeCar ; if( y > y2-SizeCar-1 ) { break ; } else { x = x1 ; } } } CopyBlockPhys( ptrlcb->X1, ptrlcb->Y1, ptrlcb->X2, ptrlcb->Y2 ) ; /* input */ while( !(mykey=GetAscii()) AND (!(myclick=Click)) ) ; if( myclick ) { exit = TRUE ; break ; } car = mykey & 255 ; if( (car >= 32) AND (car < 255) ) { if( pc == -1 ) { pc = 1 ; string[0] = car ; string[1] = 0 ; } else { if( len < maxcar ) { /* insert */ memmove( &string[pc+1],&string[pc],strlen(&string[pc])+1 ) ; string[pc] = car ; pc++ ; if( pc > len ) string[pc] = 0 ; } } } else { switch( mykey ) { case A_ESC: exit = TRUE ; break ; case A_RETURN: exit = TRUE ; break ; case A_END: pc = len ; break ; case A_HOME: pc = 0 ; break ; case A_BACKSPACE: if( pc == -1 ) pc = len ; if( pc > 0 ) { pc-- ; memmove( &string[pc],&string[pc+1],strlen(&string[pc+1])+1 ) ; } break ; case A_SUPPR: if( pc == -1 ) pc = len ; if( pc < len ) { memmove( &string[pc],&string[pc+1],strlen(&string[pc+1])+1 ) ; } break ; case A_LEFT: if( pc == -1 ) pc = len-1 ; else if( pc > 0 ) pc-- ; break ; case A_RIGHT: if( pc == -1 ) pc = 1 ; else if( pc < len ) pc++ ; break ; case A_DOWN: if( pc == -1 ) { if( carsizex < len ) pc = carsizex ; else pc = 0 ; } else if( pc+carsizex < len ) pc += carsizex ; break ; case A_UP: if( pc == -1 ) pc = 0 ; else if( pc-carsizex >= 0 ) pc -= carsizex ; break ; } } } if( (mykey==A_RETURN) OR (myclick) ) { strcpy( ptrlcb->PtrString, string ) ; } DrawBox( ptrmenu, numlcb, NO_FLAG, TRUE ) ; AsciiMode = memoasciimode ; ShowMouse( 1 ) ; while( Key OR Click OR Fire ) AffMouse() ; } /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /* fontions evolu‚es */ void Message( UBYTE *message, LONG flag ) { T_MENU menu ; WORD len ; len = strlen(message)*SizeCar / (SizeCar+7) + 2 ; if( !OpenMenu( &menu, len,2 ) ) return ; AddText( &menu, 0,0, len,2, FLAG_CENTRE+FLAG_CONTOUR, message ) ; DrawMenu( &menu, -1, -1 ) ; if( flag ) { ShowMouse( 1 ) ; while( Click OR Fire OR Key ) ; while( !Click AND !Fire AND !Key ) AffMouse() ; while( Click OR Fire OR Key) ; } CloseMenu( &menu ) ; } /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/ /* Confirm( "Voulez-vous vraiment ?", "OUI" (RETURN), "NON"(ESC) ) ; */ LONG Confirm( UBYTE *message, UBYTE *oui, UBYTE *non ) { T_MENU menu ; WORD len, select ; len = strlen(message)*SizeCar / (SizeCar+7) + 2 ; if( !OpenMenu( &menu, len,3 ) ) return 2 ; AddText( &menu, 0,0, len,2, FLAG_CENTRE+FLAG_CONTOUR, message ) ; AddButton( &menu, 1, 0,2, len/2,1, FLAG_CENTRE+FLAG_RED, oui ) ; AddButton( &menu, 2, len/2,2, len/2,1, FLAG_CENTRE, non ) ; DrawMenu( &menu, -1, -1 ) ; ShowMouse( 1 ) ; while( Click OR Fire OR Key ) AffMouse() ; select = 0 ; while( select < 1 ) { AffMouse() ; select = GereMenu( &menu ) ; if( Fire & F_RETURN ) { select = 1 ; DrawBox( &menu, 1, FLAG_PUSHED, TRUE ) ; } if( Key == K_ESC ) { select = 2 ; DrawBox( &menu, 2, FLAG_PUSHED, TRUE ) ; } } while( Click OR Fire OR Key ) AffMouse() ; CloseMenu( &menu ) ; return select ; } /*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ*/