; Доработанные функции оконного интерфейса для BGE 4.0 и выше

; Пример описания для вызываемого окна

;WExamp  DB X,Y,DX,DY,window color,title color,%bb0bbbbb flag ( типа %01111 или 128+%0111 )
;   ; Bit 0 -   окно с заголовком/без (window with title)
;   ; Bit 1 -   "перерисовать" окно да/нет (redraw window)
;   ; Bit 2 -   тискать окно по экрану да/нет (movable window) ; 0 - окно не свапится
;   ; Bit 3 -   выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
;   ; Bit 4 -   запрет выхода по клику за пределами окна (добавлено для BGE 4.xx, работает при Bit 3 = 1 )
;   ; Bit 5 -   0  пока не используется (not used)
;   ; Bit 6 -   при Bit 2 = 1 не сохранять окно в свапинге при перерисовке (бит обнуляется после вызова окна),
;   ;           при Bit 2 = 0 сохранять окно в свапинге при перерисовке ( v3.12 )
;   ; Bit 7 -   (128+flags) Использовать адреса дополненительных функций. ( для совместимости с некоторыми старыми модулями)
;     DB paper*8+ink    ; атрибут неактивного цвета (non active color attribute)
;  DW TExamp   ;   объект-текст (text object)
;  DW SExamp   ;   объект-подсветка (выборка) (highlighting object)
;  DW HExamp   ;   горячие клавиши (hotkeys)
;  DW BExamp   ;   объект-кнопки (выборка) (buttons object)
;  DW Nil      ;   объект-флажки (flags object)
;  DW Nil      ;   объект-радио кнопки (radio buttons object)
;  DW Nil      ;   ползунок (scrollbar)
;  DW Nil      ;   вызов при создании (call on create)
;  DW Nil      ;   вызов на "прерываниях" (call "on interrupt")
     ; Дальнейшие адреса используются только при установленном 7-м бите флага (flag)
     ; Для совместимости со старыми плагинами.
;  DW Nil      ;   Вызов на прерываниях после прорисовки стрелки
;  DW Nil      ;   объект спрайты (sprites object)
;  DW Nil      ;   объект область заполненная цветом (color box)
;  DW Nil      ;   вызов перед прорисовкой окна
;     Если вместо DW Nil использовать код DW #000n - ( DB #0n,#00 ; n = 1 ... F ), то пропускается n - адресов
;  DW #FFFF


;TExamp  DB "Supreme for BGE 3.12",13
  ;      DB "Text"
  ;      DB 0   ; байт завершения текста, в случае завершения вставки текста переводит вывод в начало следующей строки как 'DB #0D'
  ;      DB #FF  ; байт завершения вывода текстовой вставки. Не завершает вывод последнего буфера (используется для завершения текстовых вставок по адресу. Для вывода в заголовках окон использовать исключительно его.)

; В тексте байты :
;        DB #16,x,y - Устанавливает позицию точки отсчёта и вывода текста по знакоместам
;        DB #0D     - Enter перевод строки
;        DB #0F     - Вывод горизонтальной линии
;        --------------------------

;        DB #0E,n   - вывод изображения символа с номером n (даже если служебный)
;        DB #17,x   - (TAB) смещение текущего вывода текста в позицию x по знакоместам от позиции вывода текста (точка отсчёта не меняется)

;        DB #0A : DW addr      - включение в вывод текста по адресу (должен заканчиваться байтом 0 или #FF)
;        DB #0B,page : DW addr - включение строки текста из страницы памяти page (0-7) по адресу addr . Внимание ! Строка должна заканчиваться #00. Добавляется в буфер строки без учета символов форматирования. Если буфер заполнен, то остаток строки игнорируется.


; Объект подсветка (highlighting object):

; x, y, длина (width), высота (height) или 128+количество опций единичной высоты, флаг (flag):
; bit 0 - подсвечивать (да/нет) (highlight yes/no)
; bit 1 - клавиша "заморожена" ("frozen" key)
; bit 2 - прорисовать в области атрибут неактивного цвета при ( bit 0 =0 и bit 1 =0 ) или активного в другом случае

; пример:

;SExamp
  ;      DB 1,3,15,1,%11                  ; подсветка одной опции
  ;      DB 1,5,15,128+3,%11              ; подсветка 3 опций
  ;      DB #FF

; Подсветка таблицы :
; x,y, 128+длина таблицы в знакоместах, высота таблицы в знакоместах, флаг
; длина элемента, высота элемента, выборка по длине, выборка по высоте, количество элементов построчно

; флаг (flag):
; bit 0 - подсвечивать (да/нет) (highlight yes/no)
; bit 1 - клавиша "заморожена" ("frozen" key)
; bit 2 - для таблицы пока не работает (not work). Всегда использовать 0 !

;STabExamp
  ;     DB 1,2,128+15,6,%11
  ;       DB 3,3,2,1,4    ; таблица из 4 элементов


; Объект кнопки (buttons object):

; x, y, длина (width), высота (heyght), цвет (color), флаг (flag)  (длина и высота в знакоместах)
; адрес спрайта кнопки (sprite addres)

; флаги (flag):
; Bit 0 - клавиша нажимается (yes/no)
; Bit 1 - клавиша "заморожена"
; Bit 2 - инверсия спрайта кнопки
; ...
; Bit 7 - Если 1, то заблокировать вывод кнопки и игнорировать (в версии 3.12 и выше)

; пример:

;BExamp  DB 11,11,2,2,7*8+1,%11   ; кнопка 2x2 знакоместа, используется, нажимается
 ;        DW BUT1                   ; спрайт кнопки
 ;       DB 13,11,2,2,7*8+1,%111  ; кнопка 2x2 знакоместа, используется, нажимается, спрайт инвертируется
 ;        DW BUT2                   ; спрайт кнопки
 ;       DB #FF


; Примечание:  Не забывайте что общее количество опций (включая кнопки и горячие клавиши) не должно превышать 254.


; Объект спрайты (sprites object)

; x, y, длина (width), высота (heyght),     ;// длина и высота указываются в знакоместах//
; цвет (color) или Nil (здесь любое число), флаг (flag)
; адрес спрайта (sprite addres)


; флаги (flag):
; Bit 0 - тип спрайта: 1 - спрайт пикселей, 0 - спрайт атрибутов
; Bit 1 - только для пикселей : 1 - выводить указанным цветом, 0 - не менять цвет.
; Bit 2 - только для пикселей: 1 - инверсия спрайта
; ...
; Bit 7 - Если 1, то заблокировать вывод спрайта

; пример:

;SprExamp  DB 11,11,2,2,7,%11   ; спрайт пикселей 2x2 знакоместа, атрибутом 7
 ;          DW Spr1                   ; адрес спрайта
 ;         DB 13,11,2,2,7,%101  ; спрайт 2x2 знакоместа,без атрибутов, спрайт инвертируется
 ;          DW Spr2                   ; адрес спрайта
 ;         DB 2,4,2,2,0,%00     ; спрайт атрибутов 2x2 знакоместа
 ;          DW Spr3                   ; адрес спрайта
 ;         DB 2,10,2,2,7,128+%11   ; игнорируется вывод спрайта пикселей 2x2 знакоместа, атрибутом 7
 ;          DW Spr4                   ; адрес спрайта
 ;         DB #FF


; Объект раскраска - область заполненная цветом (color box)
; x,y, длина (width), высота (heyght),     ;// длина и высота указываются в знакоместах//
; цвет (color), флаг (flag)

; флаги (flag):
; Bit 0 - состояние: 1 - использовать , 0 - оставить текущий цвет

; пример:

;ColBoxExamp  DB 10,10,10,2,8*7+1,%1   ; расцветка области в окне синими чернилами на белом фоне
;            DB #FF
;------------------------------------------------------
;               ТАБЛИЦА СОРТИРОВКИ
;------------------------------------------------------

; Выборка файлов для файлера и т.п. начиная с версии 3.12
;
;  Раньше было  :
;      DB #00,сектор_1, сектор_2, ..., #FF
;       файлы размером сектор_1, сектор_2, ...
;
;      DB #01,"p..","ex.","txt","...", ..., #FF
;       файлы с вышеперечисленными расширениями, "." - любой символ
;
;      DB #02,"имя.....scr",#FF
;       файл с именем "имя.....scr", "." - любой символ

; Теперь новый вариант (обратная совместимость сохранена).
;---------------------
;  Таблица состоит из опций выборки,
; каждая опция начинается с определяющего байта, содержит данные опции и заканчивается завершающим байтом #00 или #FF.

; Если опция завершается #FF, то таблица закончена (за исключением описанным далее).
; Если опция завершается #00, то дальше следует новая опция выборки.

; Определяющие байты имеют следующую структуру

; побитно: %Lnnn , где
;                   L  -  логика выборки :
;                           0 - добавляет файлы в сортировку,
;                           1 - исключает файлы из сортировки
;
;                   nnn -  номер опции :
;                           000  (0) -  выборка по количеству секторов (равно указанному) Нельзя использовать #00 и #FF
;                           001  (1) -  выборка по расширению.
;                           010  (2) -  выборка по полному имени.
;                           011  (3) -  выборка по количеству секторов ( в попадании от минимума до максимума )
;                                       используются парные значения: минимальное количество (минимум 1)
;                                       и максимальное количество ( 255 в паре не засчитается за конец таблицы ).
;                                       Возможно несколько пар параметров.
;                           100  (4) -  выбор файлов с длиной сектора #FF без параметра

; Пример:
;    DB %0100,#FF - выбор файлов с количеством секторов 255. ( Здесь #FF - признак окончания таблицы сортировки )

; В именах и расширениях -  "." - любой символ. Если в имени нужно использовать именно его, то
; разбейте имя на части, и используйте DB #03 вместо него.

; Пример:
;  сделаем выборку скринов с размером 6144 или 6912 или упакованные с расширением plc
; и размера не более 6912, исключим bgedfgfx.gfx

;SORTtbl
 ;     DB %0001,"plc",#00            ; выборка с расширением ".plc"
 ;     DB %1011,28,255,#00           ; исключаем с размером более 27 секторов (6912)
 ;     DB %0000,24,27,#00            ; добавляем выборку 6144 или 6912 (24 или 27 секторов)
 ;     DB %1010,"bgedfgfxgfx",#FF    ; исключаем из выбранного "bgedfgfx.gfx"
 ;                                   ; и завершаем сортировку
