; part of the GUI for BGE

; Прочее...


; HL - вызов на прерываниях стрелки

ARW_SCN_gui
        EI
        LD (Arw_Lp+1),HL
Arw_Lp  CALL Ret
.nx                      ; для минилупы /DA v3.12
         ld a,0
.flM_  EQU $-1
         or a
       jr nz,1F
        CALL PUTARW_gui
        HALT
        CALL DIRSCN_gui
        CALL MOVES_gui
        CALL GETARW_gui
        CALL BUTTON_
        RET C
        LD A,(DIRECT)
        AND #10
       JR Z,Arw_Lp
1       XOR A
         ld (.flM_),a
        RET


WAITKEY_gui
      ;  EI                 ; Вынес в отдельную процедуру для экономии /DA
      ;  HALT
      ;  XOR A
      ;  IN A,(#FE)
      ;  CPL
      ;  AND #1F
      ;  PUSH AF
      ;  CALL DIRSCN_gui
      ;  POP BC
      ;  LD A,(CANCEL)
      ;  AND A
         call WNkeyGui
        RET NZ
        LD A,(DIRECT)
        AND #10
        OR B
        JR Z,WAITKEY_gui
        RET

NOKEY_gui
      ;  EI                 ; Вынес в отдельную процедуру для экономии /DA
      ;  HALT
      ;  XOR A
      ;  IN A,(#FE)
      ;  CPL
      ;  AND #1F
      ;  PUSH AF
      ;  CALL DIRSCN_gui
      ;  POP BC
      ;  LD A,(CANCEL)
      ;  AND A
         call WNkeyGui
1       JR NZ,NOKEY_gui
        LD A,(DIRECT)
        AND #10
        OR B
        JR NZ,NOKEY_gui
         xor a                   ; обнуляем буф. клавы
         ld (LAST_KEY),a         ; теперь нужно для минилупы /DA
        RET

NoKEYss_gui  call WNkeyGui
             ld b,0
            jr 1B

WNkeyGui  EI          ; Отдельная процедура для экономии /DA
          HALT
          XOR A
          IN A,(#FE)
          CPL
          AND #1F
          PUSH AF
          CALL DIRSCN_gui
          POP BC
          ld a,0           ; фича для дополнительных кнопок джойстика
.a_  EQU $-1
          or b
          ld b,a
          LD A,(CANCEL)
          AND A
         ret

BUTTON_ ; CALL MBUTTON       ; экономим /DA
        ; LD A,(FIRE)
        ; AND A
        ; JR NZ,BUTTON1   ;MICE OK
        ; LD A,(CANCEL)
        ; AND A
        ; JR NZ,BUTTON2   ;MICE CANCEL
        ; LD A,#FE
        ; IN A,(#FE)
        ; RRCA
        ; JR NC,BUTTON3   ;CS PRESSED
        ; JR FIKUS
          ld a,FIKUS.ln
         jr 1F

BUTTON_gui  xor a    ; вот так
1           ld (.fikus),a
        CALL MBUTTON
        LD A,(FIRE)
        AND A
        JR NZ,BUTTON1   ;MICE OK
        LD A,(CANCEL)
        AND A
        JR NZ,BUTTON2   ;MICE CANCEL
        LD A,#FE
        IN A,(#FE)
        RRCA
        JR NC,BUTTON3   ;CS PRESSED
       jr FIKUS    ; или jr [0]   ; меняем от входа /DA
.fikus EQU $-1
        CALL dirscn
        AND #10
        JR Z,nothing
FIKUS   XOR A
.ln  EQU FIKUS-(BUTTON_gui.fikus+1)     ; смещение для jr FIKUS
        LD A,%001
brk     LD (BRK),A
        RET             ;"KEYBOARD OK PRESSED"

BUTTON3 LD A,#7F
        IN A,(#FE)
        RRCA
        JR C,BUTTON4    ;MAY BE "EDIT" PRESSED?
1  ;     SCF
.kb      LD A,%010
         scf
        JR brk          ;"KEYBOARD CANCEL PRESSED"

BUTTON4 LD A,#F7
        IN A,(#FE)
        RRCA
       jr nc,1B          ; экономим 5 байт /DA
   ;     JR C,nothing    ;NOTHING PRESSED
   ;     SCF
   ;     LD A,%010
   ;     JR brk          ;"KEYBOARD CANCEL PRESSED"
nothing XOR A
        JR brk

BUTTON1 XOR A
        LD A,%101
        JR brk          ;"MICE OK PRESSED"

BUTTON2       ; SCF
         cp 3
       jr z,BUTTON3.kb  ; if 3rd mouse button pressed
.scf    scf
        LD A,%110
        JR brk          ;"MICE CANCEL PRESSED"

ArrCancel_Y_gui       ; add for right mouse button function /DA
         ld a,#37       ; scf
1        ld (BUTTON2.scf),a
        ret
ArrCancel_N_gui
         ld a,#AF       ; xor a
        jr 1B
