; [Overlay] Plug-in module for BGE / Сменный модуль для BGE

; Внимание ! Данный модуль является частью редактора BGE и не будет функционировать в версии отличной от указанной /DA



; BGE_Help.ovb

    ORG PgnAdr      ; адрес старта модуля

HelpOvb    ld (.RETAD+1),hl
           call BHelp
           xor a
.RETAD    jp 0


BHelp
           call CLOSE_ALLW
           ld (.spp),sp
           xor a
           ld (OutHLP.nfile),a
           ld (#BFFF),a       ; нулевой байт для ограничения начала файла
           ld (#BFFE),a

.win      ld a, %1111
.win_     ld ix, WHelp
          ld (ix+6),a
            ld a,AddPage
            call RAM
          ld hl,TxHelp
          ld (WHelp.txt),hl
          ld hl,SeHelp
          ld (WHelp.sel),hl
          ld hl,Nil
          ld (WHelp.int),hl
          ld sp,0
.spp     EQU $-2
          call Win_
          cp #FF
         jp z,Main
           cp TBHelp.opnum
         jr nc,.next_

          call OutHLP
          call OutHLP.clean
.next_
         ld a,%1101
        jr .win_


OutHLP        ld c,a       ;
              add a,a
              add a,c
              ld hl,TxHLP
              ld (WHelp.txt),hl
              ld hl,Nil
              ld (WHelp.sel),hl
              ld hl,.int
              ld (WHelp.int),hl


              ld hl,0
              ld (TxHLP.data),hl

              ld l,a
              ld h,0
              ld bc,TBHelp
              add hl,bc
              ld c,(hl)    ; код файла
              inc hl
              ld a,(hl)
              inc hl
              ld h,(hl)
              ld l,a      ; hl - адрес расположения блока в файле
              ld a,c
              cp "0"
              ret c
              ld a,0
.nfile    EQU $-1         ; код загруженного файла (0 - не загружен)
              cp c
              push hl
             call nz,.loadfile
              pop de
             ret c





.lp0          ld ix,WHelp
              ld a,%1101
              ld (ix+6),a

              ld (.de_),de
              push de
               call NOKEY_  ; исправил двойное срабатывание /DA v3.09.f01 - 10.07.2017
               call .clean  ; очистка окна
              pop de

              ld c,18         ; количество строк
              ld hl,TxHLP.data
             ld a,AddPage
             call RAM
.lp1          ld a,41         ; количество символов
.lp1_e        ex af,af'
.lp1_         ld a,(de)
              or a
             jr z, .hwn
              inc de
              cp 13
             jr nz, 1F
              ld (hl),a
              inc hl
.ldc          dec c
             jr z,.hwn
             jr .lp1

1             cp 32
             jr c,.lp1_     ; пропускаются символы меньше 32

              ex af,af'
              or a
             jr nz,3F
              ld (hl),13
              inc hl
2              ld a,(de)   ; пропуск остатка строки
               or a
              jr z,.hwn
               inc de
               cp 13
              jr nz,2B
              jr .ldc

3             dec a
              ex af,af'
              ld (hl),a
              inc hl
             jr .lp1_


.hwn          xor a
              ld (hl),a
              ld (.deN),de
              call Winn_
              call guiRAM
              cp #FF
             ret z
.next
              ld de,0
.de_  EQU $-2
             jr .lp0
.clean      ; очистка окна
              ld hl,(WHelp)   ; координаты окна
              ld bc,#0300  ; координаты рабочей области
              add hl,bc
              ex de,hl
              call RASCH_
              ld bc,8*18*256     ; b - число линий, c - 0
1             push bc
               ld b,26
               push hl
                ld a,(hl)
                and #C0
                ld (hl),a
                inc l
2               ld (hl),c
                inc l
               djnz 2B
                ld a,(hl)
                and 3
                ld (hl),a
               pop hl
               call INC_Y
              pop bc
              djnz 1B
             ret
.int     ; прерывания

             ld a,(DIRECT)
             and #10
             ret z
             ld a,(ARW_XC)
             sub (ix+0)
             ret c
             cp (ix+2)
             ret nc

             ld a,(ARW_YC)

             sub (ix+1)
             ret c
             cp (ix+3)
             ret nc
             cp 2
             ret c   ; заголовок
             push af
             ld a,AddPage
             call RAM
             pop af
             cp 9    ; up
            jr nc,.dn
             ld hl,(.de_)   ; верхний адрес
             ld c,18+1        ; количество строк +1

.li0         dec hl
             ld a,(hl)
             or a
            jr z, 1F
             cp 13
            jr nz,.li0
             dec c
            jr nz,.li0
1            inc hl
2            ld (.de_),hl
             call guiRAM
             ld a,STOP_ARW
             call GUI_
            jr .next
.dn          ld hl,0
.deN       EQU $-2
             ld a,(hl)
             or a
            jp z,guiRAM
            jr 2B



.loadfile   call .ldfl_
            push af
            ld a,0
           jr  c,1F
            ld a,(.hlpname+7)
1           ld (.nfile),a
            pop af
            ret

.ldfl_
            ld a,c
            ld (.hlpname+7),a
            ld a,LOAD_CAT
            call GUI
            ld hl,.hlpname
            call FromName
            ld a,SEARCHFILE11
            call GUI
            ret c
            ld a,(SEC_LEN)  ;загрузка файла посекторно
            ld b,a
            EXLOAD #8000,#C000,START_SEC,AddPage
            ret






.hlpname  DB "bgehlp_0hlp"   ; +7 - number

 ; DB chr file number , DW addres  / DB номер файла справки , DW адрес блока справки

TBHelp    DB hlpf0         ; 0
           DW  hlp0
          DB hlpf1         ; 1
           DW  hlp1
          DB hlpf2         ; 2
           DW  hlp2
          DB hlpf3         ; 3
           DW  hlp3
          DB hlpf4         ; 4
           DW  hlp4
          DB hlpf5         ; 5
           DW  hlp5
          DB hlpf6         ; 6
           DW  hlp6
          DB hlpf7         ; 7
           DW  hlp7
          DB hlpf8         ; 8
           DW  hlp8
          DB hlpf9         ; 9
           DW  hlp9
          DB hlpf10        ; 10
           DW  hlp10
          DB hlpf11        ; 11
           DW  hlp11
          DB hlpf12        ; 12
           DW  hlp12
          DB hlpf13        ; 13
           DW  hlp13
          DB hlpf14        ; 14
           DW  hlp14
          DB hlpf15        ; 15
           DW  hlp15
          DB hlpf16        ; 16
           DW  hlp16
          DB hlpf17        ; 17
           DW  hlp17
          DB hlpf18        ; 18
           DW  hlp18
          DB hlpf19        ; 19
           DW  hlp19
          DB hlpf20        ; 20
           DW  hlp20
          DB hlpf21        ; 21
           DW  hlp21

.opnum  EQU ($-TBHelp)/3



WHelp     DB 2,1,28,22,5*8,7,%00001111
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
     DB 0           ; запасной байт-флаг (reserved for flags)
; Таблица в
.txt     DW TxHelp        ; объект-текст (text object)
.sel     DW SeHelp        ; объект-подсветка (выборка) (highlighting object)
         DW Nil      ; горячие клавиши (hotkeys)
         DW Nil      ; объект-кнопки (выборка) (buttons object)
         DW Nil      ; объект-флажки (flags object)
         DW Nil      ; объект-радио кнопки (radio buttons object)
         DW Nil      ; ползунок (scrollbar)
         DW Nil      ; вызов при создании (call on create)
.int     DW OutHLP.int      ; вызов на "прерываниях" (call "on interrupt")
      DW #FFFF




TxHelp
        DB "         Burial Gfx Editor 3.11",13
        DB 13,13,13,13,13,13,13,13,13,13,13,15,13
        DB 22,2,3
        MSG_Help_Intr : DB 13
        MSG_Help_MainM : DB 13
        MSG_Help_FileM : DB 13
        MSG_Help_Plugs : DB 13
        MSG_Help_TxtOut : DB 13
        MSG_Help_Win8 : DB 13
        MSG_Help_Win1 : DB 13
        MSG_Help_RGB : DB 13
        MSG_Help_Loupe : DB 13
        MSG_Help_Diz : DB 13
        MSG_Help_Mix : DB 13

        DB 22,15,3
        MSG_Help_2scr : DB 13
        MSG_Help_Fill : DB 13
        MSG_Help_Prims : DB 13
        MSG_Help_D_Can : DB 13       ;MSG_Help_Brush : DB 13
        MSG_Help_Cells : DB 13
        MSG_Help_Misc : DB 13
        MSG_Help_Sets : DB 13
        MSG_Help_Undo : DB 13
        MSG_Help_Addi : DB 13
        MSG_Help_Hist : DB 13
        MSG_Help_Auth : DB 13
        DB 22,4,15

        DB "Based of Burial Gfx Editor 3.o5",13
        DB "   (c) 2oo1 Delirium Tremens",13
        DB "          from Freedom",13,13
        DB "   - Sinn (coding, etc.)",13
        DB "   - Others of dtr - support",13

        DB 0,#FF

; Объект подсветка (highlighting object):
; x, y, длина (width), высота (height), флаг (flag):
; bit 0 - подсвечивать (да/нет) (highlight yes/no)
; bit 1 - клавиша "заморожена" ("frozen" key)
SeHelp
          DB 1,3,13,128+11,%11    ; 1,%11
        ;  DB 1,4,13,1,%11
        ;  DB 1,5,13,1,%11
        ;  DB 1,6,13,1,%11
        ;  DB 1,7,13,1,%11
        ;  DB 1,8,13,1,%11
        ;  DB 1,9,13,1,%11
        ;  DB 1,10,13,1,%11
        ;  DB 1,11,13,1,%11
        ;  DB 1,12,13,1,%11
        ;  DB 1,13,13,1,%11

          DB 14,3,13,128+11,%11   ; 1,%11
        ;  DB 14,4,13,1,%11
        ;  DB 14,5,13,1,%11
        ;  DB 14,6,13,1,%11
        ;  DB 14,7,13,1,%11
        ;  DB 14,8,13,1,%11
        ;  DB 14,9,13,1,%11
        ;  DB 14,10,13,1,%11
        ;  DB 14,11,13,1,%11
        ;  DB 14,12,13,1,%11
        ;  DB 14,13,13,1,%11

          DB #FF



TxHLP   DB "         Burial Gfx Editor 3.11",13  ; заголовок как в WHelp
.data   DB 0,0            ; начало текстового буфера 768 байт приблизительно
       ; TEXT BUFFER


LHelp    EQU $-HelpOvb

        DISPLAY "BGE_help len :",/a, LHelp
