; 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,2F
        CALL PUTARW_gui
        HALT
        CALL DIRSCN_gui
        CALL MOVES_gui
        CALL GETARW_gui
        CALL BUTTON_
       RET C
        ld a,(Fire2)
.faddF2_  EQU $+1 : or 0     ; для програмной установки Fire2
        ld (Fire2),a
       jr nz,2F
        LD A,(DIRECT)
        AND #10
       JR Z,Arw_Lp
2       XOR A
         ld (.flM_),a
         ld (.faddF2_),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 hl,(FIRE)      ; l=FIRE ,h=CANCEL
             ld a,(Fire2)     ; mouse Fire2
             or a
            jr nz,brk.jFire2
             or l
            jr nz,brk.mFire   ; mouse Fire ok
             or h
            jr nz,brk.mCancel ; mouse cancel
             ld a,#FE
             in a,(#FE)
             rrca
            jr nc,brk.CS_  ;CS PRESSED
            jr FIKUS       ; или jr [0]   ; меняем от входа /DA
.fikus EQU $-1
            call dirscn
            ld c,a
            ld a,(Fire2)
            or a
           jr nz,brk.jFire2
            ld a,(CANCEL)
            or a
           jr nz,brk.kb
            ld a,c
            and #10
           jr z,brk   ; nothing
FIKUS       xor a
.ln  EQU FIKUS-(BUTTON_gui.fikus+1)     ; смещение для jr FIKUS
            inc a  ; %001
brk_o       or a
brk         ld (BRK),a
           ret

.CS_        ld a,#7F
            in a,(#FE)
            rrca
           jr c,.SS_
.kb         ld a,%010   ; CS+SPACE
.kb1_       scf
           jr brk          ;"KEYBOARD CANCEL PRESSED"

.SS_         rrca
            jr nc,.kb   ; CS+SS
             ld a,#F7
             in a,(#FE)
             rra
            jr nc,.kb   ; CS+1
.nothing     xor a
            jr brk

.jFire2      ld a,%10000
            jr brk_o

.mFire      ld a,%101
           jr brk_o

.mCancel      cp 3
            jr z,.kb
             ld a,%110
.SetRes_scf  scf      ; [ scf ] or [ or a ] for magnify   brk.SetRes_scf
            jr brk




;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,(Fire2)    ;MICE Fire2
;        or a
;       jr nz,BUTTON5
;        LD A,#FE
;        IN A,(#FE)
;        RRCA
;        JR NC,BUTTON3   ;CS PRESSED
;       jr FIKUS    ; или jr [0]   ; меняем от входа /DA
;.fikus EQU $-1
;        CALL dirscn
;        ld c,a
;        ld a,(Fire2)
;        or a
;        ld a,%100000     ; "Fire2 PRESSED"   BUTTON_gui.Fire2_
;.Fire2_ EQU $-1
;       jr nz,brk_rr
;        ld a,c
;        AND #10
;       jr z,brk    ; JR Z,nothing
;FIKUS   XOR A
;.ln  EQU FIKUS-(BUTTON_gui.fikus+1)     ; смещение для jr FIKUS
;        LD A,%001
;brk     LD (BRK),A
;         push af
;         ld a,(Fire2)
;         or a
;        jr z,1F
;.f2tocn_  ld (CANCEL),a       ; [ ld (****),a /ld a,(****) ]
;1        pop af
;        RET             ;"KEYBOARD OK PRESSED";

;brk_rr   or a
;         rra
;        jr brk

;BUTTON3 LD A,#7F
;        IN A,(#FE)
;        RRCA
;        JR C,BUTTON4    ;MAY BE "EDIT" PRESSED?
;1  ;     SCF
;.kb      LD A,%010
;.kb1_    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
;        LD A,%110
;        JR BUTTON3.kb1_   ;"MICE CANCEL PRESSED"

;BUTTON5  xor a
;         ld a,%10100    ; "MICE Fire2 PRESSED"
;        jr brk
