; Variables, constants, and macros GUI BGE v4.0
; Переменные, константы и макроопределения GUI BGE v4.0

CS      EQU #E3
SS      EQU #0E

; вызов функций обработки окон x8/x1  --in v 4.0

    MACRO WINCALL tn_
      call WinFunc
      DB tn_
    ENDM

    MACRO wincall tn_
      call WinFunc
      DB tn_
    ENDM

    MACRO WinCall tn_
      call WinFunc
      DB tn_
    ENDM


; Буфер, адрес, сектор/дорожка, страница (buffer, addr, sector/track, page)
; B = кол-во секторов (number of sectors)

        MACRO EXLOAD p1,p2,p3,p4
        LD A,p4
        LD HL,p1
        LD DE,p2
        LD IX,(p3)
        LD C,#05
    ;    LD A,p4     ; перенёс вперёд чтоб можно было переслать в a с регистр /DA
        EX AF,AF'
        LD A,SL_BANK
        CALL GUI
        ENDM

; Буфер, адрес, длина в байтах, страница (buffer, addr, byte length, page)
; B = кол-во секторов (number of sectors)
; Запись файла (save file)

        MACRO EXSAVEF p1,p2,p3,p4
        LD A,p4
        LD HL,p1
        LD DE,p2
        LD IX,p3
        LD C,11
     ;   LD A,p4   ; перенёс вперёд чтоб можно было переслать в a с регистр /DA
        EX AF,AF'
        LD A,SL_BANK
        CALL GUI
        ENDM

        MACRO RestSpp
        DI
        LD SP,(Spp)
        EI
        ENDM

        MACRO HLFHL
        LD A,(HL)
        INC HL
        LD H,(HL)
        LD L,A
        ENDM

        MACRO DEFHL ;macro for LD DE,(HL)
        LD E,(HL)
        INC HL
        LD D,(HL)
        ENDM

        MACRO DEFHL1 ;LD DE,(HL):INC HL
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        ENDM

        MACRO Amul8
        ADD A,A
        ADD A,A
        ADD A,A
        ENDM

        MACRO CPHL0
        LD A,H
        OR L
        ENDM

   ;     MACRO DHL_     ; удалил, теперь вызываем подпрограмму  INC_Y  ; /DA
   ;     ...

        MACRO HL0
        AND A
        SBC HL,HL
        ENDM

        MACRO ldbc num,num1   ; ld bc,#{num num1}   ; /DA
         ld bc,num*256+num1
        ENDM
        MACRO LDBC num,num1
         ldbc num num1
        ENDM

        MACRO RCOD
          ld a,h
          ld h,l
          ld l,a
        ENDM

; Constants of GUI

RadioOn  EQU 1              ; радио-кнопка вкл. (radio-button on)
RadioOff EQU 2              ; радио-кнопка вык. (radio-button off)
SwchOn   EQU 3              ; флажок вкл. (flag on)
SwchOff  EQU 4              ; флажок вык. (flag off)
Nil      EQU 0              ; отсутстивие значения (ноль) (no value)
SortCAT  EQU #FFFE-128      ; затираемый буфер номеров сортированных файлов используется при сортировке в v3.12
NEWCAT   EQU #FFFE-#0800    ; сортированный список каталога (sorted file list) а также используется как вспомогательный буфер
CAT      EQU NEWCAT-#0900   ; полный каталог (full directory)

; Main variable of GUI

GuiVars           ; системные переменные           /DA

Numb    DEFB 0    ; Номер выбранной подсветки (number of selected highlighting)
But     DEFB 0    ; Номер выбранной кнопки (number of selected button)
DIRECT  DEFB 0
MDIRECT DEFB 0
ARW_X   DEFB 127  ;нач. (starting cordinates...)
ARW_Y   DEFB 95   ;  коорд. стр. (...of the cursor)
ARW_XC  DEFB 0    ;а здеся в знакомствах (in characters here)
ARW_YC  DEFB 0    ;
ARWXMN  DEFB 0    ;x min
ARWXMX  DEFB 255  ;x max
ARWYMN  DEFB 0    ;y min
ARWYMX  DEFB 191  ;y max
XPLACE  DEFW 22528    ; #5800
ARW_ADR DEFW ARWSPR
STEP    DEFB 6
LEVEL   DEFB 10
SPEED   DEFB 1
ARWSPR  DB 63,0,15,64,131,48,129,60
        DB 193,24,193,20,224,2,252,0
        DB 255,0,255,0
KJOY    DB 0 ; KEMPSTON JOY

; Main variable of ListBox

SpAdr    DW 0    ; адрес начала списка (start addr of the list)
SpAdrT   DW 0    ; адрес начала видиммого списка (start addr of visible list)
SpLen    DW 0    ; длина полного заголовка списка (length of full title of the list)
SpLenW   DW 0    ; длина заголовка визуального списка (length of title of visual list)
SpLenD   DW 0    ; длина заголовка вместе с доп. текстом (length of title with extra text)
SpDop    DW 0    ; адрес процедуры дополнения списка (addr of procedure "add to list")
SpBar    DB 0    ; длина подсветки (length of highlighting)
SpFiler  DB 0    ; это файлер? (is this a file selector?)
SpXY     DW 0    ; X,Y списка в окне (X,Y of the list in the window)
SelSp    DB 0    ; номер элемента из списка (item number in the list)
SpDop2   DW 0    ; дополнение текста уже после списка (add text after the list)
TAB_SORT DW 0    ; таблица сортировки (sorting table)


; Main Constants of TRDOS

LAST_KEY   EQU 23560
FILE_PARAM EQU #5CDD
FILE_NAME  EQU #5CDD
FILE_TYPE  EQU #5CE5
START_ADR  EQU #5CE6
BYTES_LEN  EQU #5CE8
SEC_LEN    EQU #5CEA
START_SEC  EQU #5CEB
START_TRK  EQU #5CEC
TEK_SEC    EQU #5CF4
TEK_TRK    EQU #5CF5

Sys_PAGE   EQU #5B5C   ; копия порта #7FFD для совместимости с устройствами

; Main variable of FDOS

Spp       DW 0         ; адрес стека, для выхода при ошибке (stack address for error handling)
;MODE      DB #00       ; Флаг турбо драйвера (turbo driver flag) oldest version
MODE      DB %0000     ; Флаги турбодисков (turbo drivers flags)      new format for v3.12 ;/DA
                       ; bits : 0 - A , 1 - B , 2 - C , 3 - D ( 1 - turbo driver / 0 - tr-dos #3D13 )
RECAT     DB 0         ; Перечитывать ли каталог после записи (re-read directory after save)
 ; RAMDR     DB 2  ; Диск для #3D13 (drive with #3D13) ; delete function in v3.12 ;/DA
MWHEEL    DB 0      ; счётчик скроллера мыши (kempston) at v3.12 exchange deleted 'RAMDR' /DA
                    ; требуется обнулять после прочтения
OVERF     DB 0

;ResAdr    DW 0 ;  {до v 3.12 был адрес резидента (resident addr)}, теперь здесь Sys_Disk и Curr_Disk
Sys_Disk   DB 0  ; номер системного диска BGE
Curr_Disk  DB 0  ; временно хранится номер текущего диска

END_DISK  DW 0         ; последние трек/сектор диска (last track/sector of the disk)

; Disk constants

All_File EQU 228
Free_Sec EQU 229
End_Disk EQU 225

; ReadKey variable

KEYS
KEY1    DB 0
KEY2    DB 0

; Mouse variable
FIRE    DB 0        ; 0 - нет ; !=0 - fire
CANCEL  DB 0        ; 0 - нет ; !=0 - cancel

SPACE   DEFS 50;51
        DB 0        ; для 51 символа в строке
; CROSSON db 0 ;#ff ; теперь не используется /DA

BRK     DB 0          ; %00001 - огонь (fire)
                      ; %00010 - отмена (cancel) (3-я кнопка мыши / клавиатура)
                      ; %00100 - мыша (mouse)
                      ; %00000 - halt
                      ; %01000 - клик за пределами окна (for v3.12)
                      ; %10000 - Fire2 (for v 4.0)

FREE_SEC        DW 0  ; свободно секторов на диске (number of free sectors on the disk)
ALL_FILE        DW 0  ; всего файлов на диске (number of files on the disk)

; Эти переменные настраиваются после вызова LOAD_CAT, который,
; в свою очередь, вызывают дисковые функции GUI (файлер,
; запись файла, четение файла с чтением заголоквка...)
;(the following variables are set after calling LOAD_CAT, it is called
;by GUI disk functions (file selector, save file, load file with reading the header...))
; END_DISK      последний трек/сектор диска (last track/sector of the disk)
; FREE_SEC      свободно секторов на диске (number of free sectors on the disk)
; ALL_FILE      всего файлов на диске (number of files on the disk)

MICE            DB 0  ;#ff      ; мыша (mouse flag)
MB              DB 0      ; реверс (reverse buttons flag)

; ------------- BGE 3.09 added -------------

ARW_SDISP       DB 0,0   ; стандартные смещения курсора относительно спрайта стрелки по x,y используются для восстановления
ARW_XDISP       DB 0     ; смещение координаты курсора относительно спрайта стрелки по X
ARW_YDISP       DB 0     ; смещение координаты курсора относительно спрайта стрелки по Y

    ;PixelMSK   DB 0  ; текущая маска пикселей: 0-15 чанки наоборот, 16-32 - редактируемые маски /в v3.09.04 заменено на Texture.fsolid
Texture.fsolid  DB 0     ; флаг сплошной заливки  ; #FF -solid , 0 - textured
Magnify_x8      DB #FF   ;0 ; /DA   0 -режим линзы x4 , !=0 - x8
Sieve           DB 0     ; #FF  - режим сита 0 - выключен, #FF - включен (иное не допустимо) /DA

; ------------ BGE 3.11 added -------------

DarwX           DW 0  ; word     длинная координата X > 256                        / DA
DarwXM          DB 32 ; lo byte  младьший байт максимальной длинной координаты X   / DA
OVR_proc        DB 0  ; номер процедуры в оверлее (для совмещения функций и экономии места)

; ------------ BGE 3.12 added -------------
MiniLoupePG     DB ScrPage   ; страница текущего отображаемого экрана для miniloupe

; ------------ BGE 4.0 added -------------
MBut2toFire2    DB 0 ; использовать 2-ю кнопку мыши как Fire-2
Fire2           DB 0 ;  0 - нет ; !=0 - fire2
;-----------------------------------------------------------------------------------


;***********************************************************************************

;  Numbers of system buttons sprites of BGE \ Номера спрайтов системных кнопок BGE

; ------------- BGE 3.09 added ---------------

  ; If add bit 7 (+128) then used last half sprite addr. \ Если добавить бит 7 (+128), то используется адрес последней половины спрайта.

DISKS       EQU 1
PGN1S       EQU 2
PGN2S       EQU 2+128
CHRS        EQU 3
WIN8S       EQU 4
WIN1S       EQU 5
RGBS        EQU 6
MGFS        EQU 7
CNKS        EQU 8
NALS        EQU 9
EK2S        EQU 10
FILLS       EQU 11
PRIMS       EQU 12
BOXS        EQU 13
OTHERS      EQU 14
UNDOS       EQU 15
EXITS       EQU 16
OFFS        EQU 17
ONS         EQU 18
DTRS        EQU 19   ; Создаваемый индикатор цвета
PLOTS       EQU 20
LINES       EQU 21
LINES2      EQU 22
TRS         EQU 23
SQS         EQU 24
CIRCS       EQU 25
ELPS        EQU 26
RAYS        EQU 27
XORS        EQU 28
ANDS        EQU 29
ORS         EQU 30
NOPS        EQU 31
ERASES      EQU 32
SETKAS      EQU 33
RAMKAS      EQU 34
FILLS2      EQU 35
AMASKS      EQU 36
NORGBS      EQU 37
WASHS1      EQU 38
BRUSHS      EQU 39
ZOOM8       EQU 40
ZOOM4       EQU 41
LASTONS     EQU 42
FILLSQS     EQU 43
BOLDDOTS    EQU 44
DTPMASKS    EQU 45
SPRAYS      EQU 46
SPRITESS    EQU 47

; -------------- BGE 3.11 added ---------------
DITHCANS    EQU 48

; -------------- BGE 3.12 added ---------------


LOOKS       EQU 49
LEFTS       EQU 50
RIGHTS      EQU 51
DTRMSS      EQU 52    ; маска цвета
DTRCSS      EQU 53    ; данные цвета

bgeSPRTnum  EQU 53    ; количество спрайтов 2x2 из скина

SPACES      EQU 80   ; sprite size 1x2 for empty places (спрайт для пустого пространства размер 1x2)

; Встроенные спрайты BGE  2x1

DSK_AS      EQU 80+128    ; диски
DSK_BS      EQU 81
DSK_CS      EQU 81+128
DSK_DS      EQU 82
DSK_ES      EQU 82+128

DIRECT_LS   EQU 83    ; направления
DIRECT_RS   EQU 83+128
DIRECT_US   EQU 84
DIRECT_DS   EQU 84+128



    display "End GuiVar:", $
