 '
 ' Mesaglib  (C)1993 Bernd Schieferdecker
 '
 ' MENU- UND FENSTEREREIGNISSE ABFRAGEN
 '
 ' weitere Bearbeitung:  PROC Menu_Event, PROC Wind_Event
 '
 DEF PROC Get_Mesag
   REPEAT :Evnt_Mesag(X$): FOR I%L=0 TO 7:Message%L(I%L)= CVI( MID$(X$,I%L*2+1,2)): NEXT
     IF Message%L(0)=Mn_Selected%L THEN Menu_Event:Menu_Tnormal(Message%L(3),1)
     IF Message%L(0)>10 AND Message%L(0)<40 THEN Wind_Event:Menu_Tnormal(Message%L(3),1)
   UNTIL 1=2: END_PROC
 '
 ' ALLE EREIGNISSE ABFRAGEN
 '
 DEF PROC Get_Mesag(Mask$,Mc_Anz%L,Mc_Art%L)
   ' Mask$ fr Tastatur,Mausknopf,Nachricht = "%110010"
   Wind_Update(0)
   REPEAT
     Evnt_Multi( VAL(Mask$),Mc_Anz%L,Mc_Art%L,1,0,0,0,0,0,0,0,0,0,0,0,M$,M%L,Mx%L,My%L,Ms%L,Ts%L,Tc%L,Mc%L)
     Tc_Ascii%L=Tc%L MOD 256:Tc%L= INT(Tc%L/256)
     '
     ' Mausposition:    Mx,My
     ' Maus-Status:     Ms          Tastencode:        Tc, Tc_Ascii
     ' Tastatur-Status: Ts          Anzahl Mausklicks: Mc
     '
     IF BIT(0,M%L) THEN Keyb_Event
     IF BIT(1,M%L) THEN Mouse_Event
     IF BIT(2,M%L) THEN Inbox_Event
     IF BIT(3,M%L) THEN Outbox_Event
     IF BIT(4,M%L) THEN
       FOR I%L=0 TO 7:Message%L(I%L)= CVI( MID$(M$,I%L*2+1,2)): NEXT
       IF Message%L(0)=Mn_Selected%L THEN Menu_Event:Menu_Tnormal(Message%L(3),1)
       IF Message%L(0)>10 AND Message%L(0)<40 THEN Wind_Event:Menu_Tnormal(Message%L(3),1)
     ENDIF
     IF BIT(5,M%L) THEN Timer_Event
   UNTIL 1=2: END_PROC
 '
 ' TASTATUREREIGNISSE AUSWERTEN
 '
 DEF PROC Keyb_Event
   'Tc=Scan Tc_Ascii=Ascii Ts=Status
   Wind_Update(1)
   IF BIT(2,Ts%L) OR BIT(3,Ts%L) OR (Tc%L>58 AND Tc%L<65) OR Tc%L=98 THEN
     Hotkeys'  mit Control oder Alternate oder F-Tasten
   ELSE
     IF Eingabe%L=1 THEN '     Text editieren
       T%L=0:Textedit(E$,T%L)'   Eingabe bis Sondertaste, E$= Variable fr Text
       Set_Inp(0)'           Texteingabe ausschalten
       '
       ' Eingabe-Ereignisse T=1 - T=9
       '
       Set_Inp(1)'           Texteingabe einschalten
     ELSE '                  Keine Editiermglichkeit
       '
       ' Tasten anders auswerten
       '
     ENDIF
   ENDIF
   Wind_Update(0)
 END_PROC
 '
 DEF PROC Hotkeys
   LOCAL Alt%L= BIT(3,Ts%L),Ctrl%L= BIT(2,Ts%L)
   SELECT Tc%L
     CASE 23: IF Ctrl%L THEN ' Info
     CASE 16: IF Ctrl%L THEN ' Ende
   END_SELECT
 END_PROC
 '
 ' EINGABE-ROUTINE
 '
 ' Taste= 1  RETURN                        Inp$:  Rckgabe des Textes
 '        2  CSR runter
 '        3  CSR hoch                      wortweise springen mit Shift + CSR
 '        4  CSR ber linken Rand          ESC lscht die Eingabe
 '        5  CSR ber rechten Rand         CLEAR zum Zeilenende
 '        6  Shift + CSR runter            Shift + CLEAR zum Zeilenanfang
 '        7  Shift + CSR hoch              TAB mit Leerzeichen auffllen
 '
 DEF PROC Textedit(R Inp$,R Taste%L)
   IF BIT(0,Ts%L) OR BIT(1,Ts%L) THEN LOCAL Shift%L=-1 ELSE LOCAL Shift%L=0
   SELECT Tc%L: MOUSEOFF
     CASE 14
       IF Inpcur%L<>0 THEN :Inp$= LEFT$(Inp$,Inpcur%L-1)+ MID$(Inp$,Inpcur%L+1):Inplen%L= LEN(Inp$)
       TEXT Inpx%L,Inpy%L+13,Inp$+"_"*(Inplang%L-Inplen%L):Setcur(Inpcur%L-1): ENDIF
     CASE 83
       IF Shift%L THEN :Inp$= LEFT$(Inp$,Inpcur%L)
       ELSE :Inp$= LEFT$(Inp$,Inpcur%L)+ MID$(Inp$,Inpcur%L+2)
       ENDIF :Inplen%L= LEN(Inp$): TEXT Inpx%L,Inpy%L+13,Inp$+"_"*(Inplang%L-Inplen%L):Setcur(Inpcur%L)
     CASE 82
       Inp$= LEFT$(Inp$,Inpcur%L)+" "+ MID$(Inp$,Inpcur%L+1,Inplang%L-Inpcur%L-1):Inplen%L= MIN(Inplen%L+1,Inplang%L)
       TEXT Inpx%L,Inpy%L+13,Inp$+"_"*(Inplang%L-Inplen%L):Setcur(Inpcur%L)
     CASE 1
       Inp$="":Inplen%L=0: TEXT Inpx%L,Inpy%L+13,"_"*Inplang%L:Setcur(0)
     CASE 15
       Inp$=Inp$+ SPC(Inplang%L-Inplen%L): TEXT Inpx%L,Inpy%L+13,Inp$:Inplen%L=Inplang%L:Setcur(Inplen%L)
     CASE 71
       IF Shift%L THEN Setcur(0) ELSE Setcur(Inplen%L)
     CASE 75
       IF Inpcur%L>0 THEN
         IF Shift%L THEN :P%L= INSTR(Inplen%L-Inpcur%L+2, MIRROR$(Inp$)," "): IF P%L=0 THEN Setcur(0) ELSE Setcur(Inplen%L-P%L+1)
         ELSE :Setcur(Inpcur%L-1)
         ENDIF
       ELSE :Taste%L=4
       ENDIF
     CASE 77
       IF Inpcur%L<Inplen%L THEN
         IF Shift%L THEN :P%L= INSTR(Inpcur%L+1,Inp$," "): IF P%L=0 THEN Setcur(Inplen%L) ELSE Setcur(P%L)
         ELSE :Setcur(Inpcur%L+1)
         ENDIF
       ELSE :Taste%L=5
       ENDIF
     CASE 72
       IF Shift%L THEN Taste%L=7:Inpcur%L=0: ELSE Taste%L=3
     CASE 80
       IF Shift%L THEN Taste%L=6:Inpcur%L=0: ELSE Taste%L=2
     CASE 114,28
       Taste%L=1
     DEFAULT
       IF Tc_Ascii%L>21 AND Inpcur%L<Inplang%L THEN
         Inp$= LEFT$(Inp$,Inpcur%L)+ CHR$(Tc_Ascii%L)+ MID$(Inp$,Inpcur%L+1,Inplang%L-Inpcur%L-1)
         Inplen%L= MIN(Inplen%L+1,Inplang%L): TEXT Inpx%L,Inpy%L+13,Inp$+"_"*(Inplang%L-Inplen%L):Setcur(Inpcur%L+1)
       ELSE PRINT CHR$(7);
       ENDIF
   END_SELECT : MOUSEON
 END_PROC
 '
 ' Eingabezeile an(=1)/aus(=0) schalten
 DEF PROC Set_Inp(An%L)
   Zb%L= W_PIXEL / W_CHAR :Zh%L= H_PIXEL / H_CHAR
   Inp$=Eingabe$(Satz_Nr%L,Inpnr%L):Inplen%L= LEN(Inp$):Inplang%L=Lang%L(Inpnr%L)
   Inpx%L=(Eingx%L(Inpnr%L)+X%L+Abst%L(Inpnr%L))*8:Inpy%L=(Eingy%L(Inpnr%L)+Y%L)*16: MOUSEOFF
   IF Inpcur%L>Inplen%L OR Inpcur%L<0 THEN Inpcur%L=Inplen%L
   IF An%L THEN : TEXT Inpx%L,Inpy%L+13,Inp$+"_"*(Inplang%L-Inplen%L):Curon
   ELSE :Curoff: TEXT Inpx%L,Inpy%L+13,Inp$+ SPC(Inplang%L-Inplen%L)
   ENDIF : MOUSEON
 END_PROC
 '
 ' Cursor setzen  neu: neue Cursorposition
 DEF PROC Setcur(Neu%L)
   Curoff:Inpcur%L= MAX( MIN(Neu%L,Inplen%L),0):Curon: END_PROC
 '
 ' Cursor kurz aufblinken lassen
 DEF PROC Curinv
   Invert(Inpx%L+Inpcur%L*8,Inpy%L,8,16): WAIT .05:Invert(Inpx%L+Inpcur%L*8,Inpy%L,8,16): END_PROC
 '
 ' Cursor an/aus schalten
 DEF PROC Curon
   MOUSEOFF : BITBLT Inpx%L+Inpcur%L*Zb%L-1,Inpy%L,1,Zh%L TO Inpx%L+Inpcur%L*Zb%L-1,Inpy%L,1,Zh%L,15: MOUSEON : END_PROC
 DEF PROC Curoff
   MOUSEOFF : BITBLT Inpx%L+Inpcur%L*Zb%L-1,Inpy%L,1,Zh%L TO Inpx%L+Inpcur%L*Zb%L-1,Inpy%L,1,Zh%L,0: MOUSEON : END_PROC
 '

