; Когдато это был резидент GUI, теперь здесь сосредоточены основные программы,
; требующиеся для работы GUI а также, те которые используют работу с сегментами памяти.
;Resident
;        JP GETBLK
;        JP CLOSE
;        JP SWAP
;        JP GUI_EX
;        JP TESTRD_     ; ЗДЕСЬ, ТИПА, БЫЛА ПОДДЕРЖКА РАМ-ДИСКА
;        JP RW_         ; BY REALSOFTWARE (РУДИМЕНТ ОТ BGE-GUI)

; ВЫЗОВ ФУНКЦИЙ ПРИ ЗАКРЫТОЙ/ОТКРЫТОЙ СТРАНИЦЕ

GUI     EXX
      ;  PUSH AF
      ;   ld a,GUIPage|#10
      ;  LD BC,#7FFD
      ;  OUT (C),A
      ;  POP AF
        call guiRAM
        LD HL,GUI_E
1       PUSH HL
        LD (Spp),SP
        LD BC,BeginGUI
        CALL TAB_HL
        PUSH HL
        EXX
        EX AF,AF'
Ret     RET


; ВЫЗОВ ФУНКЦИЙ ТОЛЬКО С ОТКРЫТОЙ СТРАНИЦЕЙ!
; (ИСПОЛЬЗОВАТЬ ПРИ ВЫЗОВЕ ФУНКЦИЙ ИЗ САМОЙ GUI)

GUI_    EXX
        LD HL,Ret
       jr 1B

GUI_E   PUSH AF
      ;  PUSH BC
        LD A,#10
S_PAGE  EQU $-1
      ;  LD BC,#7FFD
      ;  OUT (C),A
      ;  POP BC
        call Ram

        POP AF
        RET

; Процедуры работы с памятью 128K. Перенёс из 'Add.asm'   /DA v3.12

SET_SCR2
         ld a,#18
        jr set_scr
SET_SCR1
         ld a,#10
set_scr  ld (rmask+1),a
RAM_N    ld a,(N_PAGE)
RAM      ld (N_PAGE),a
rmask    or #10
         ld (S_PAGE),a
Ram_     or #10        ; 2 раза, 2 раза - чтоб было, чтоб было ))
Ram      push bc
         ld bc,#7FFD
         out (c),a
Rcompat_ ld (Sys_PAGE),a  ; [ ld (*),a ] / [ ld bc,** ] - для совместимости с некоторыми устройствами (SMUK)
         pop bc
        ret

SuxRam   ld a,SuxPage
        jr RAM
AddRam   ld a,AddPage
        jr RAM
ScrRam   ld a,ScrPage
        jr RAM
RAM_GUI
GuiRam   ld a,GUIPage
        jr RAM
RamRam   ld a,RamPage
        jr RAM

JPHLgui call JP_HL
guiRAM  push af            ; /DA
        ld a,GUIPage|#10  ; ld a,(GUI_PAGE)
1       call Ram
        pop af
        ret
suxRAM   push af
         ld a,SuxPage|#10
        jr 1B


; Возврат текущей страницы
;
GetRAM  LD A,0
N_PAGE  EQU $-1
        RET


SVPG_AA       ; запись из страницы памяти в регистре A в страницу в регистре A'
              ; out: save memory at page A to page A', not saved registers
              ; in:  A - page1, A' - page2
              ;      HL - addres in page1
              ;      DE - addres in page2
              ;      BC - lenght
              push af,hl,de,bc
              ld de,#8000   ; pg1
              push de
              call SWAP_bc
              pop hl
              pop bc,de
              push de,bc
              ex af,af'     ; pg2
              push hl
              call Ram_
              ldir
             jr 1F

SWAP_AA       ; обмен между страницами памяти в регистрах A и A'
              ; out: swap memory, set GUIPage, not saved registers
              ; in:  A - page1, A' - page2
              ;      HL - addres in page1
              ;      DE - addres in page2
              ;      BC - lenght
              push af,hl,de,bc
              ld de,#8000   ; pg1
              push de
              call SWAP_bc
              pop hl
              pop bc,de
              push de,bc
              ex af,af'     ; pg2
              push hl
              call SWAP_bc
1             pop de
              pop bc,hl,hl,af  ; de=#8000 ; for pg1
              call RAM
             jr SWP_HLDEBC
SWAP_bc
            call Ram_
SWP_HLDEBC  push af
            ex af,af'
            push af
            ld a,c
            or b
           jr z,3F
            ld a,c
            or a
           jr z,1F
            inc b
1           ld a,b
            ld b,c
1          ex af,af'
2           ld c,(hl)
            ld a,(de)
            ld (hl),a
            ld a,c
            ld (de),a
            inc hl
            inc de
           djnz 2B
           ex af,af'
           dec a
          jp nz,1B
3          ld c,a     ; bc = 0 на выходе
           pop af
           ex af,af'
           pop af
          ret


SWAP      di
          ld c,0
          call SWAP_bc
SET_GUI
          call guiRAM
         EI
         RET

; работа со слотами экрана в памяти здесь без проверок


lscr_slot4      ; Load screen from page A to #4000
                 call ONPAGE
                 ld hl,SCREEN
                 ld de,#4000
1                ld bc,6912
                 ldir
                 xor a
                jp EX_RAM

sscr_slot4      ; Save screen from #4000 to page A ,
                ; and screen from page A save to undoscreeen in page A
                 call ONPAGE
                 ld hl,SCREEN
                 ld de,UNDOSCR
                 ld bc,6912
                 push hl
                 ldir
                 pop de
                 ld hl,#4000
                jr 1B


load_slot        call swp_pg_set_      ; Load screen/undoscreen from page A
                 call ONPAGE
                 ld hl,#C000
                 ld de,#8000
                 ldir
                jr swp_pg_set_

save_slot        call swp_pg_set_      ; Save screen/undoscreen to page A
                 call ONPAGE
                 ld hl,#8000
                 ld de,#C000
                 ldir
swp_pg_set_      ld bc,6912+6912
1                push af,bc
                 ld a,ScrPage
                 ld (ExOnP_AddP.pg_num_),a
                 call EX_RAM
                 ld hl,#C000
                 call ExOnP_AddP.s_
                 pop bc,af
                 or a       ; reset flag c
                ret
swp_pg_set_1     ld bc,6912
                jr 1B



;ExOnP_ScrP / ExOnP_AddP - Обмен данных страницы расширенной памяти со страницами ScrPage / AddPage
; in A - OnPage
;    HL - addres in AddPage
;    DE - addres in OnPage
;    BC - lenght    ( BC != 0 )
; out swap datas. Registers not saved


swap_slot        ld hl,#C000        ; обмен SCREEN, UNDOSCREEN со страницей в A
                 ld d,h
                 ld e,l
                 ld bc,6912+6912

ExOnP_ScrP       push af
                 ld a,ScrPage
                jr 1F
ExOnP_AddP       push af
                 ld a,AddPage

1                ld (.pg_num_),a
                 pop af
                 push hl,de,bc

                 call .s_
                 call ONPAGE
                 pop bc
                 pop hl
                 push hl
                 push bc

1                call SWP_HLDEBC
                 xor a
                 call EX_RAM

                 pop bc,de,hl
                 call .s_
                 ld a,(.pg_num_)
                jp RAM

.s_              push af
                 ld de,#8000
                 push de
.pg_num_ EQU $+1 :  ld a,AddPage
                 call SWAP_bc
                 pop de
                 pop af
                ret


CallSYSTEMDISK     ; in: call CallSYSTEMDISK - выполняет SetSYSTEMDISK и переходит на возврат с добавлением возврата на RetCURRENTDISK
                   ex (sp),hl
                   ld (.a_),hl
                   ld hl,RetCURRENTDISK
                   ex (sp),hl
                   call SetSYSTEMDISK
.a_ EQU $+1 :     jp #FFFF


SetSYSTEMDISK    push ix,hl,de,bc,af
                 call RetCURRENTDISK.set
                jr 1F

RetCURRENTDISK   push ix,hl,de,bc,af
                 call .ret
1                pop af,bc,de,hl,ix
                ret

.set            ld a,#C9   ; [ret]     ; at v3.12
                ld (.ret),a
                ld a,(#5D19)         ; считаем что для функцй подгрузки модулей не будет требоваться
                ld b,a               ; экран в SuxPage
                ld a,(Sys_Disk)
                cp b
               ret z
                ld (#5D19),a
                ex af,af'       ; for DOS_FUNC_
                 ld a,b
                 ld (Curr_Disk),a
                 xor a       ; [nop]
                 ld (.ret),a
                 ld a,SuxPage|#10    ; сохраняем прежний каталог (чтоб меньше по диску лазить)
                 call Ram
                 ld hl,#A500
                 ld de,#C000
                 ld bc,#0900
                 push de,bc,hl
                 ldir
                 call guiRAM
                 pop de,bc
                 push bc,de
                 ld hl,CAT
                 ldir
                 pop hl,bc,de
                 ld a,SuxPage
                 call .sw
.ldcat           ld a,LOAD_CAT
                jp GUI

.ret            nop        ; nop / ret  - меняем в зависимости от ситуации
                ld a,(#5D19)
                ld b,a
                ld a,(Curr_Disk)
                cp b
               ret z
                ld (#5D19),a
                ex af,af'      ; for DOS_FUNC_
                 call guiRAM     ; извлекаем прежний каталог (чтоб меньше по диску лазить)
                 ld hl,#A500
                 ld de,CAT
                 ld bc,#0900
                 push de,bc,hl
                 ldir
                 ld a,SuxPage|#10
                 call Ram
                 pop de,bc
                 push bc,de
                 ld hl,#C000
                 ldir
                 pop hl,bc,de
                 ld a,GUIPage
.sw              call SWAP
                 ld c,1
                jp DOS_FUNC_

       ASSERT  $ < #8000   ; procedures used #8000 for buffer
       DISPLAY "This addres must be < 0x8000: ",/a,$

CheckBGEdisk    ld a,"0"            ; Проверка для записи на то что используемый диск системный
                ld (OvrName.N),a    ; flag c for disk not BGE system
                ld hl,OvrName
Seach11From_    call FromName
                ld a,SEARCHFILE11
               jp GUI


CLOSE   ; CALL ESCAPE      ; добавил ограничитель /DA
     ;   ld hl,(STACK_P)
     ;   ld de,STACK
     ;   or a
     ;  sbc hl,de
     ;  ret z
          call checkWin_
         ret z
        call ESCAPE
        CALL SET_GUI
        PUSH IX

    ;    LD A,(IX+0)    ;; в подпрограмме PoIXc /DA
    ;    LD (xx),A
    ;    LD A,(IX+1)
    ;    LD (yy),A
    ;    LD A,(IX+2)
    ;    LD (ln),A
    ;    LD A,(IX+3)
    ;    LD (hg),A
    ;
    ;    CALL OSP
    ;    LD IX,xx
          call PoIXc

     ;   LD A,(IX+1)  ; избавляемся от процедур из памяти /DA
     ;   CALL 3742
     ;   LD A,(IX+0)
     ;   ADD A,L
     ;   LD L,A
         ld d,(ix+1)
         ld e,(ix+0)
         call RASCH_

        LD DE,(FREE)
        LD A,(IX+3)
        ADD A,A
        ADD A,A
        ADD A,A
        LD C,A
PUTBLK1 LD B,(IX+2)
        PUSH HL
PUTBLK2 LD A,(DE)
        LD (HL),A
        INC DE
        INC HL
        DJNZ PUTBLK2
        POP HL
        CALL DOWN_HL
        DEC C
        JR NZ,PUTBLK1
        PUSH DE
        LD L,(IX+1)
        LD H,0
        LD DE,#5800
        DUP 5
        ADD HL,HL
        EDUP
        ADD HL,DE
        LD A,(IX+0)
        ADD A,L
        LD L,A
        POP DE
        LD C,(IX+3)
PUTBLK4 PUSH HL
        LD B,(IX+2)
PUTBLK3 LD A,(DE)
        LD (HL),A
        INC HL
        INC DE
        DJNZ PUTBLK3
        POP HL
        PUSH DE
        LD DE,#20
        ADD HL,DE
        POP DE
        DEC C
        JR NZ,PUTBLK4
        CALL guiRAM  ; CSP
        POP IX
         xor a
         inc a   ; убираем флаг z
        RET

xx      DB 0
yy      DB 0
ln      DB 0
hg      DB 0

GETBLK  CALL SAFE
        PUSH IX
     ;   LD A,(IX+0)   ;; в подпрограмме PoIXc /DA
     ;   LD (xx),A
     ;   LD A,(IX+1)
     ;   LD (yy),A
     ;   LD A,(IX+2)
     ;   LD (ln),A
     ;   LD A,(IX+3)
     ;   LD (hg),A
     ;   LD IX,xx
     ;   CALL OSP
          call PoIXc

      ;  LD A,(IX+1)  ; избавляемся от подпрограмм пзу /DA
      ;  CALL 3742
      ;  LD A,(IX+0)
      ;  ADD A,L
      ;  LD L,A
          ld d,(ix+1)
          ld e,(ix+0)
          call RASCH_

        LD DE,(FREE)
        LD A,(IX+3)
        ADD A,A
        ADD A,A
        ADD A,A
        LD C,A
GETBLK1 LD B,(IX+2)
        PUSH HL
GETBLK2 LD A,(HL)
        LD (DE),A
        INC DE
        INC HL
        DJNZ GETBLK2
        POP HL
        CALL DOWN_HL
        DEC C
        JR NZ,GETBLK1

        LD L,(IX+1)
        LD H,0
        LD BC,#5800
        DUP 5
        ADD HL,HL
        EDUP
        ADD HL,BC
        LD A,(IX+0)
        ADD A,L
        LD L,A
        LD C,(IX+3)
GETBLK4 PUSH HL
        LD B,(IX+2)
GETBLK3 LD A,(HL)
        LD (DE),A
        INC HL
        INC DE
        DJNZ GETBLK3
        POP HL
        PUSH DE
        LD DE,#20
        ADD HL,DE
        POP DE
        DEC C
        JR NZ,GETBLK4
        LD (FREE),DE
        CALL guiRAM  ; CSP
        POP IX
        RET


PoIXc_  ; ld a,(ix+0)
        ; ld (xx),a
        ; ld a,(ix+1)
        ; ld (yy),a
        ; ld a,(ix+2)
        ; ld (ln),a
        ; ld a,(ix+3)
        ; ld (hg),a
        ; ld ix,xx
        ;ret
         push ix
         pop de
         ld hl,xx
         ld b,4
1        ld a,(de)
         ld (hl),a
         inc de
         inc hl
        djnz 1B
         ld ix,xx
        ret


PoIXc    call PoIXc_
     ;    ld a,SuxPage|#10
     ;   jp Ram
        jp suxRAM


;OSP     LD A,#00
;STORE_PAGE EQU $-1
;OSP1    OR #10
;        LD BC,#7FFD
;        OUT (C),A
;        RET
;CSP     ld a,GUIPage    ; LD A,(GUI_PAGE)
;        JR OSP1

;DOWN_HL INC H       ; удалил, есть аналог в Add.asm /DA
;        LD A,H
;        AND 7
;        RET NZ
;        LD A,L
;        ADD A,#20
;        LD L,A
;        RET C
;        LD A,H
;        SUB #08
;        LD H,A
;        RET

SAFE
        LD HL,(STACK_P)
        PUSH IX
        POP DE
        LD (HL),E
        INC HL
        LD (HL),D
        INC HL
        LD DE,(FREE)
        LD (HL),E
        INC HL
        LD (HL),D
        INC HL
        LD (STACK_P),HL
        RET

ESCAPE  LD HL,(STACK_P)
        DEC HL
        LD D,(HL)
        DEC HL
        LD E,(HL)
        DEC HL
        LD (FREE),DE
        LD D,(HL)
        DEC HL
        LD E,(HL)
        LD (STACK_P),HL
        PUSH DE
        POP IX
        RET



FREE    DEFW #C000+6912  ; СВАП В С АДРЕСА #C000+6912
STACK_P DEFW STACK  ; ТЕКУЩИЙ СВАП-ПОИНТЕР
STACK   DEFS #20    ; ДЛЯ #20/4=8 ОКОН

;GETjp ;  PUSH AF
;      ;  LD A,(GUI_PAGE)
;      ;  LD BC,#7FFD
;      ;  OUT (C),A
;      ;  POP AF
;        call guiRAM
;        LD BC,BeginGUI
;        CALL TAB_HL
;        LD A,(S_PAGE)
;        LD BC,#7FFD
;        OUT (C),A
;        RET


; УДАЛЕНИЕ ПОИНТЕР-ДИСКРИПТЕРОВ ВСЕХ ОКОН

;ERASE_ALLW        ; удаление всех дескрипторов с установкой адреса свапинга  на начало сегмента #C000
;       LD HL,#C000
ERASE_ALLW         ;  ; удаление всех дескрипторов
          ; WARNING !!!  Reg. A is not change !  / ВНИМАНИЕ  !!! Рег. A не менять !
        ld hl,#C000+6912   ; оставляем экран (6912 байт) в начале сегмента  ; /DA  v3.12
.hl     LD (FREE),HL
        LD HL,STACK
        LD (STACK_P),HL
        RET
;EraseAllw   ld hl,#C000+6912   ; то же но оставляем экран (6912 байт) в начале сегмента  ; /DA
;           jr ERASE_ALLW.hl

; ЗАКРЫТИЕ (ВОССТ. ФОНА) ВСЕХ ОТКРЫТЫХ ОКОН
CLOSE_ALLW
      ;  LD HL,(FREE)
      ;  LD DE,#C000
      ;  AND A
      ;  SBC HL,DE
      ;  RET Z
        CALL CLOSE
         ret z
        JR CLOSE_ALLW

checkWin_      ld hl,(STACK_P)  ; проверка наличия окна в дескрипторе /DA v3.12
               ld de,STACK
               or a
               sbc hl,de
              ret     ; out flag Z for not windows

TAB_HL  LD H,0
        LD L,A
        ADD HL,HL
.bc     ADD HL,BC
        HLFHL
        RET


Sprite  PUSH HL       ; из libGUI.asm /DA
        PUSH BC
las1    LD A,(DE)
        LD (HL),A
        INC L
        INC DE
        DJNZ las1
        POP BC
        POP HL
        CALL INC_Y
        DEC C
        JR NZ,Sprite
        RET

; Перекинул сюда работу со спрайтами кнопок и др. из WinGUI.asm и модифицировал для доступа через номер кнопки /Dart Alver

; DE - адрес спрайта
; IX - параметры спрайта


LoadSPR  call ToScrOf   ; in window
1       jp RAM_N

LoadSPR_   ld hl,LdDExy        ; in screen
           ld (ToScr.RWgui),hl
           call ToScrOf
           ld hl,RealWin_gui
           ld (ToScr.RWgui),hl
          jr 1B
LdDExy     ld d,(ix+0)
           ld e,(ix+1)
          ret

ToScrOfI   call invbut       ; /DA v3.12
ToScrOf    call guiRAM
nz2     LD HL,Ret_gui
        LD (nop1),HL
        XOR A
        LD (nop2),A
ToScr   PUSH DE
        CALL RealWin_gui
.RWgui EQU $-2
        CALL RASCH
        POP DE
          ld a,d            ; при D=0 вычисляется адрес спрайта из 7-й страницы  /DA
          or a
          ld a,#C9          ; ret
         jr nz,2F
           ld bc,#7FFD
           ld a,RamPage|#10
           out (c),a
          push hl
           ex de,hl
           ld de,#DB00
           ld b,e
           ld c,e  ; bc=0
           bit 7,l
          jr z,1F
           ld c,16
1          res 7,l
           dec l
           ld a,l
           sub 79   ; 80-1
          jr c,1F
           ld de,sprSPACES
           ld l,a
1        ;  dec l
           add hl,hl  ; *2
           add hl,hl  ; *4
           add hl,hl  ; *8
           add hl,hl  ; *16
           add hl,hl  ; *32
     ;      ld de,#DB00
     ;      and 128
     ;     jr z,1F
     ;      ld e,16
1          add hl,de
           add hl,bc
           ex de,hl
          pop hl
           ld a,#01          ; ld bc,nn
2          ld (Ret_guiPG),a
        LD A,(IX+3)
        Amul8
        LD C,A
        CALL Ret_gui
nop1    EQU $-2
Lp_10    PUSH HL
        LD B,(IX+2)
        AND A
Lp_9     LD A,(DE)
s_INV   NOP             ; NOP / CPL - инверсия спрайта кнопки  v3.12
nop2    NOP
        LD (HL),A
        INC DE
        INC L
        DJNZ Lp_9
        POP HL
        CALL INC_Y
        DEC C
        JR NZ,Lp_10
          xor a               ; v 3.12
          ld (s_INV),a
Ret_guiPG  ld bc,#7FFD
           ld a,GUIPage|#10
           out (c),a
Ret_gui RET


ToScrOnI call invbut       ; /DA v3.12
ToScrOn LD HL,Broll
        LD (nop1),HL
        LD A,#1F
        LD (nop2),A
        JR ToScr

Broll   LD B,(IX+2)
        XOR A
        PUSH HL
.Lp11   LD (HL),A
        INC L
        DJNZ .Lp11
        POP HL
        INC H
        DEC C
        RET

invbut  xor a       ; NOP      ; /DA  v3.12
        bit 2,(ix+5)
       ret z
        ld a,#2F    ; CPL
        ld (s_INV),a
       ret

; DE -> адрес в окне       ; on GUI
; DE <- адрес на экране

RealWin_gui              ; переместил из GUI /DA
       ; LD D,(IX+0)
       ; LD E,(IX+1)
         call LdDExy
realwin LD A,(WinXY+1)
        ADD A,D
        LD D,A
        LD A,(WinXY+0)
        ADD A,E
        LD E,A
        RET

; подпрограмка добавления строки в буфер из страницы для WinGUI /DA

Pr_pgAddr   ld a,(hl)    ; page
            or #10
            inc hl
            push de
            ld e,(hl)
            inc hl
            ld d,(hl)   ; de - str addr
            inc hl
            ex (sp),hl  ; hl - SPACE addr
            ex de,hl    ; hl - str addr; de - SPACE addr ,c -calc
            call Ram
1            ld a,c
             cp 51
            jr nc,2F
             ld a,(hl)
             or a
            jr z,2F
             ld (de),a
             inc de
             inc hl
             inc c
            jr 1B
2            pop hl
            call guiRAM
           jp Lp_3

Pr_atAdr      ; вывод текста по адресу   (из WinGUI) ; /DA
         ld a,(hl)
         inc hl
        push hl
         ld h,(hl)
         ld l,a
         or h
        jr z,1F
         ld a,(hl)
         or a
         call nz,Lp_3
1       pop hl
         inc hl
       jp Lp_3


ARW_DEFAULT_                     ; теперь в основной памяти можно вызывать без GUI v3.12 /DA
ARW_DEFAULT_gui                  ; восстановление курсора по умолчанию /DA
         ld hl,ARWSPR
         ld (ARW_ADR),hl
         ld hl,(ARW_SDISP)
         ld (ARW_XDISP),hl
        ret


; Вытащил из 'libGUI.asm'
;-------------------------------------------
; Поместить по адресу в HL ASCII эквивалент числа из A в 16-ричном виде  /DA v3.12
GET_HEXa_
GET_HEXa_gui    ; in a - num , hl - adr ; a -не сохр.
           push af
           rrca
           rrca
           rrca
           rrca
           call 1F
           pop af
1          and #0F
           add a,#30   ; "0"
           cp #3A
          jr c,1F
           add a,7
1          ld (hl),a
           inc hl
          ret


; GET_NUM - теперь здесь. С версии 3.12 используется упрощённая версия
;           без 8-ми значного числа в A+HL , ибо нафиг оно здесь нужно. /DA

; Поместить по адресу в DE ASCII-эквивалент числа out DE=next addres
; C - код печати:  0 - 3-х значное число в A
;                  1 - 5-ти значное число в HL
;Get_NumC0_  ld c,0

GET_NUM_gui
GET_NUM_     push hl,bc,af
             call 1F
             pop af,bc,hl
            ret
1            dec c
            jr z,PDEC_W
PDEC         ld l,a      ; вывод байта из рег. A в ASCII по адресу DE ; регистры не сохраняются
             ld h,0
            jr 2F
PDEC_W       ld bc,10000 ; вывод слова из HL в ASCII по адресу DE ; регистры не сохраняются
             call 3F
             ld bc,1000    ; out DE - next addr
             call 3F
2            ld bc,100
             call 3F
.N2          ld c,10
             call 3F
             ld a,l
             inc a
            jr 5F
3             xor a
4             inc a
              or a
              sbc hl,bc
             jr nc,4B
              add hl,bc
5             add a,"0"-1
              ld (de),a
              inc de
             ret

Fire2Cancel_Y_    ; Fire2 как cancel
      ; add for right mouse button function /DA
          ld a,1
1         ld (flF2cancel),a
         ret
Fire2Cancel_N_
          xor a
         jr 1B

flF2cancel DB 0


FKEY    LD A,(KEY1)   ; из WinGUI.asm
        CP (HL)
        RET Z
        LD A,(KEY2)
        CP (HL)
        RET

zeroMBTF LD (FIRE),A
         ld (Fire2),a
         LD (CANCEL),A
         LD (MDIRECT),A
         LD A,#C9  ; [ret]
        ret


RESLEN=$-GUI
; RESLEN=$-Resident

     DISPLAY "Resident GUI len :",/a, RESLEN

; Номера функций Gfx User Interface

;SpDrive EQU #D8BA


Window          EQU 0
Win             EQU Window+1
Winn            EQU Win+1
Filer           EQU Winn+1
DOS_FUNC        EQU Filer+1
FDOS            EQU DOS_FUNC+1
GET_NUM         EQU FDOS+1
PUTARW          EQU GET_NUM+1
GETARW          EQU PUTARW+1
DIRSCN          EQU GETARW+1
EDIT            EQU DIRSCN+1
SL_BANK         EQU EDIT+1
NOKEY           EQU SL_BANK+1
WAITKEY         EQU NOKEY+1
REDEF           EQU WAITKEY+1
MOVES           EQU REDEF+1
RAMKA           EQU MOVES+1
ARW_SCN         EQU RAMKA+1
BUTTON          EQU ARW_SCN+1
Spisok          EQU BUTTON+1
Filer_          EQU Spisok+1
SORT            EQU Filer_+1
pr_51           EQU SORT+1
FormExt         EQU pr_51+1
LOAD_CAT        EQU FormExt+1
STOP_ARW        EQU LOAD_CAT+1
IniAdr          EQU STOP_ARW+1
PUT_INT         EQU IniAdr+1
GET_INT         EQU PUT_INT+1
ASCII           EQU GET_INT+1
HOT_KEY         EQU ASCII+1
ARW_NEW         EQU HOT_KEY+1
ARW_OLD         EQU ARW_NEW+1
GET_MSG         EQU ARW_OLD+1
TEST            EQU GET_MSG+1
ARW_DEFAULT     EQU TEST+1
Fire2Cancel_Y   EQU ARW_DEFAULT+1
Fire2Cancel_N   EQU Fire2Cancel_Y+1
ERASEFILE       EQU Fire2Cancel_N+1
SEARCHFILE11    EQU ERASEFILE+1
SearchSrtF11    EQU SEARCHFILE11+1
EdHex           EQU SearchSrtF11+1
GET_HEXa        EQU EdHex+1
NoKEYss         EQU GET_HEXa+1
ERASE_NUMFL     EQU NoKEYss+1
ExamNtrance     EQU ERASE_NUMFL+1      ; проверка включения антиневидимки курсора => a!=0 - включен


        INCLUDE "RDrive.asm"


