Libraries (box_lib, buf2d, libimg, tinygl): optimize function import Programs updated: - gears, test3, test_glu1, test_glu2, - test_array1, textures0, textures1, textures2, - ctrldemo, editbox_ex, crypt_files, img_transform, - scrshoot, t_edit, cnc_control, cnc_editor Reviewed-on: KolibriOS/kolibrios#231 Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com> Reviewed-by: Ivan B <dunkaist@noreply.localhost> Co-authored-by: IgorA <aie85playm@gmail.com> Co-committed-by: IgorA <aie85playm@gmail.com>
494 lines
14 KiB
FASM
494 lines
14 KiB
FASM
fn_col_option dd def_col_file
|
||
fn_syntax_dir db 'info/',0
|
||
def_col_file db 'default.syn',0
|
||
|
||
exit_code dd 0 ;переменная используемая для выхода из программы
|
||
panel_but rb 21 ;настройки отображения кнопок на панели
|
||
|
||
;значения задаваемые по умолчанию, без ini файла
|
||
ini_def_window_t equ 20
|
||
ini_def_window_l equ 200
|
||
ini_def_window_w equ 570
|
||
ini_def_window_h equ 470
|
||
ini_def_symbol_w equ 7
|
||
ini_def_symbol_h equ 10
|
||
ini_def_font_s equ 0
|
||
ini_def_scroll_type equ 0
|
||
;описание параматров для ini файла
|
||
ini_name db 't_edit.ini',0
|
||
ini_sec_window db 'Window',0
|
||
key_window_t db 't',0
|
||
key_window_l db 'l',0
|
||
key_window_w db 'w',0
|
||
key_window_h db 'h',0
|
||
key_symbol_w db 'symbol_w',0
|
||
key_symbol_h db 'symbol_h',0
|
||
key_font_s db 'font_s',0
|
||
key_scroll_type db 'scroll_type',0
|
||
key_but_new db 'but_new',0
|
||
key_but_open db 'but_open',0
|
||
key_but_save db 'but_save',0
|
||
key_but_save_as db 'but_save_as',0
|
||
key_but_select db 'but_select',0
|
||
key_but_cut db 'but_cut',0
|
||
key_but_copy db 'but_copy',0
|
||
key_but_paste db 'but_paste',0
|
||
key_but_find db 'but_find',0
|
||
key_but_replace db 'but_replace',0
|
||
key_but_key_words db 'but_key_words',0
|
||
key_but_upper db 'but_upper',0
|
||
key_but_lower db 'but_lower',0
|
||
key_but_reverse db 'but_reverse',0
|
||
key_but_undo db 'but_undo',0
|
||
key_but_redo db 'but_redo',0
|
||
key_but_invisible db 'but_invisible',0
|
||
key_but_syntax_list db 'but_syntax_list',0
|
||
key_but_syntax_mode db 'but_syntax_mode',0
|
||
key_but_convert_1251_866 db 'but_convert_1251_866',0
|
||
key_but_convert_866_1251 db 'but_convert_866_1251',0
|
||
ini_sec_options db 'Options',0
|
||
key_synt_file:
|
||
db 'syntax_'
|
||
.numb: db '0',0
|
||
key_synt_ext:
|
||
db 'ext_'
|
||
.numb: db '0',0
|
||
ini_def_synt_f db 0
|
||
|
||
align 4
|
||
max_synt_auto_open equ 10
|
||
synt_auto_open:
|
||
rb 64*max_synt_auto_open
|
||
db 0
|
||
|
||
system_dir_0 db '/sys/lib/'
|
||
lib_name_0 db 'box_lib.obj',0
|
||
|
||
system_dir_1 db '/sys/lib/'
|
||
lib_name_1 db 'msgbox.obj',0
|
||
|
||
system_dir_2 db '/sys/lib/'
|
||
lib_name_2 db 'proc_lib.obj',0
|
||
|
||
system_dir_3 db '/sys/lib/'
|
||
lib_name_3 db 'libimg.obj',0
|
||
|
||
system_dir_4 db '/sys/lib/'
|
||
lib_name_4 db 'libini.obj',0
|
||
|
||
system_dir_5 db '/sys/lib/'
|
||
lib_name_5 db 'kmenu.obj',0
|
||
|
||
|
||
;---------------------------------------------------------------------
|
||
include '../../develop/libraries/box_lib/import.inc'
|
||
|
||
align 4
|
||
import_proclib:
|
||
OpenDialog_Init dd aOpenDialog_Init
|
||
OpenDialog_Start dd aOpenDialog_Start
|
||
dd 0,0
|
||
aOpenDialog_Init db 'OpenDialog_init',0
|
||
aOpenDialog_Start db 'OpenDialog_start',0
|
||
|
||
align 4
|
||
import_msgbox_lib:
|
||
mb_create dd amb_create
|
||
mb_reinit dd amb_reinit
|
||
mb_setfunctions dd amb_setfunctions
|
||
dd 0,0
|
||
amb_create db 'mb_create',0
|
||
amb_reinit db 'mb_reinit',0
|
||
amb_setfunctions db 'mb_setfunctions',0
|
||
|
||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||
|
||
align 4
|
||
import_libini:
|
||
dd alib_init2
|
||
ini_get_str dd aini_get_str
|
||
ini_get_int dd aini_get_int
|
||
ini_get_color dd aini_get_color
|
||
dd 0,0
|
||
alib_init2 db 'lib_init',0
|
||
aini_get_str db 'ini_get_str',0
|
||
aini_get_int db 'ini_get_int',0
|
||
aini_get_color db 'ini_get_color',0
|
||
|
||
align 4
|
||
import_libkmenu:
|
||
kmenu_init dd akmenu_init
|
||
kmainmenu_draw dd akmainmenu_draw
|
||
kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
|
||
ksubmenu_new dd aksubmenu_new
|
||
ksubmenu_delete dd aksubmenu_delete
|
||
ksubmenu_draw dd aksubmenu_draw
|
||
ksubmenu_add dd aksubmenu_add
|
||
kmenuitem_new dd akmenuitem_new
|
||
kmenuitem_delete dd akmenuitem_delete
|
||
kmenuitem_draw dd akmenuitem_draw
|
||
dd 0,0
|
||
akmenu_init db 'kmenu_init',0
|
||
akmainmenu_draw db 'kmainmenu_draw',0
|
||
akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
|
||
aksubmenu_new db 'ksubmenu_new',0
|
||
aksubmenu_delete db 'ksubmenu_delete',0
|
||
aksubmenu_draw db 'ksubmenu_draw',0
|
||
aksubmenu_add db 'ksubmenu_add',0
|
||
akmenuitem_new db 'kmenuitem_new',0
|
||
akmenuitem_delete db 'kmenuitem_delete',0
|
||
akmenuitem_draw db 'kmenuitem_draw',0
|
||
|
||
;---------------------------------------------------------------------
|
||
align 4
|
||
wScr scrollbar 16,50, 300,50, 15, 100,30,0, 0,0,0, 1
|
||
|
||
align 4
|
||
hScr scrollbar 150,0, 16,50, 15, 100,30,0, 0,0,0, 1
|
||
|
||
;дочерний скроллинг для элемента ListBox
|
||
align 4
|
||
ws_dir_lbox scrollbar 16,0, 30,70, 15, 100,30,0, 0,0,0, 1
|
||
|
||
;---------------------------------------------------------------------
|
||
align 4
|
||
OpenDialog_data:
|
||
.type dd 0
|
||
.procinfo dd procinfo ;+4
|
||
.com_area_name dd communication_area_name ;+8
|
||
.com_area dd 0 ;+12
|
||
.opendir_path dd plugin_path ;+16
|
||
.dir_default_path dd default_dir ;+20
|
||
.start_path dd file_name ;+24 путь к диалогу открытия файлов
|
||
.draw_window dd draw_window ;+28
|
||
.status dd 0 ;+32
|
||
.openfile_path dd openfile_path ;+36 путь к открываемому файлу
|
||
.filename_area dd filename_area ;+40 имя открываемого файла
|
||
.filter_area dd Filter
|
||
.x:
|
||
.x_size dw 420 ;+48 ; Window X size
|
||
.x_start dw 10 ;+50 ; Window X position
|
||
.y:
|
||
.y_size dw 320 ;+52 ; Window y size
|
||
.y_start dw 10 ;+54 ; Window Y position
|
||
|
||
default_dir db '/sys',0 ;директория по умолчанию
|
||
|
||
communication_area_name:
|
||
db 'FFFFFFFF_open_dialog',0
|
||
open_dialog_name:
|
||
db 'opendial',0
|
||
communication_area_default_path:
|
||
db '/sys/File managers/',0
|
||
|
||
Filter:
|
||
dd Filter.end - Filter.1
|
||
.1:
|
||
db 'ASM',0
|
||
db 'CPP',0
|
||
db 'INC',0
|
||
db 'MAC',0
|
||
db 'INI',0
|
||
db 'TXT',0
|
||
db 'H',0
|
||
db 'C',0
|
||
db 'HTM',0
|
||
db 'HTML',0
|
||
db 'PY',0
|
||
db 'SH',0
|
||
db 'BAT',0
|
||
db 'LUA',0
|
||
db 'INF',0
|
||
db 'LOG',0
|
||
db 'DBG',0
|
||
db 'DAT',0
|
||
.end:
|
||
db 0
|
||
|
||
txt_Info db '" -tI',0
|
||
|
||
TED_PANEL_NULL equ 0 ;нет открытой панели
|
||
TED_PANEL_FIND equ 1 ;панель поиска
|
||
TED_PANEL_REPLACE equ 2 ;панель замены
|
||
TED_PANEL_SYNTAX equ 3 ;панель выбора файлов подсветки
|
||
TED_PANEL_GOTO equ 4 ;панель перехода
|
||
TED_PANEL_WIDTH equ 150 ;ширина панели
|
||
|
||
count_of_dir_list_files equ 15 ;максимальное число файлов синтаксиса показываемых в окне элемента tree1
|
||
|
||
;------------------------------------------------------------------------------
|
||
struct TexSelect
|
||
x0 dd ?
|
||
y0 dd ?
|
||
x1 dd ?
|
||
y1 dd ?
|
||
ends
|
||
;------------------------------------------------------------------------------
|
||
align 4
|
||
tedit0: ;структура текстового редактора
|
||
.wnd BOX 0,50,440,150 ;+ 0
|
||
.rec BOX 30,25,ini_def_symbol_w,ini_def_symbol_h ;+16
|
||
.drag_m db 0 ;+32 выделение от мыши
|
||
.drag_k db 0 ;+33 выделение от клавиатуры
|
||
.sel TexSelect 0,0,0,0 ;+34 структура выделения
|
||
.seln TexSelect ;+50 дополнительная структура выделения
|
||
.tex dd 0 ;+66 text memory pointer
|
||
.tex_1 dd 0 ;+70 text first symbol pointer
|
||
.tex_end dd 0 ;+74 text end memory pointer
|
||
.cur_x dd 0 ;+78 координата x курсора
|
||
.cur_y dd 0 ;+82 координата y курсора
|
||
.max_chars dd maxChars ;+86 максимальное число символов в одном документе
|
||
.count_colors_text dd 1 ;+90 колличество цветов текста
|
||
.count_key_words dd 0 ;+94 колличество ключевых слов
|
||
.color_cursor dd 0x808080 ;+98 цвет курсора
|
||
.color_wnd_capt dd 0x80 ;+102 цвет полей вокруг окна
|
||
.color_wnd_work dd 0x0 ;+106 цвет фона окна
|
||
.color_wnd_bord dd 0xd0d0d0 ;+110 цвет текста на полях
|
||
.color_select dd 0x208080 ;+114 цвет выделения
|
||
.color_cur_text dd 0xff0000 ;+118 цвет символа под курсором
|
||
.color_wnd_text dd 0xffff00 ;+122 цвет текста в окне
|
||
.syntax_file dd 0 ;+126 указатель на начало файла синтаксиса
|
||
.syntax_file_size dd maxSyntaxFileSize ;+130 максимальный размер файла синтаксиса
|
||
.text_colors dd 0 ;+134 указатель на массив цветов текста
|
||
.help_text_f1 dd 0 ;+138 указатель на текст справки (по нажатии F1)
|
||
.help_id dd -1 ;+142 идентификатор для справки
|
||
.key_words_data dd 0 ;+146 указатель на структуры ключевых слов TexColViv
|
||
.tim_ch dd ? ;+150 количество изменений в файле
|
||
.tim_undo dd ? ;+154 количество отмененных действий
|
||
.tim_ls dd ? ;+158 время последнего сохранения
|
||
.tim_co dd ? ;+162 время последней цветовой разметки
|
||
.el_focus dd el_focus ;+166 указатель на переменную элемента в фокусе
|
||
.err_save db 0 ;+170 ошибка сохранения файла
|
||
.panel_id db 0 ;+171 номер открытой панели
|
||
.key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры
|
||
.symbol_new_line db 20 ;+173 символ завершения строки
|
||
.scr_w dd wScr ;+174 вертикальный скроллинг
|
||
.scr_h dd hScr ;+178 горизонтальный скроллинг
|
||
.arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов
|
||
.buffer dd buf ;+186 указатель на буфер копирования/вставки
|
||
.buffer_find dd buf_find ;+190 указатель на буфер для поиска
|
||
.cur_ins db 1 ;+194 режим работы курсора (обычный или замена)
|
||
.mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.)
|
||
.mode_invis db 0 ;+196 режим показа непечатаемых символов
|
||
.gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor
|
||
.fun_on_key_ctrl_all dd ted_but_ctrl_all ;+198 указатель на функцию вызываемую при нажатии Ctrl+N,O,S,F,H,G
|
||
dd 0,0,0 ;зарезервировано
|
||
.buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки
|
||
.fun_find_err dd ted_on_find_err ;+218 указатель на функцию вызываемую если поиск закончился неудачно
|
||
.fun_init_synt_err dd 0 ;+222
|
||
.fun_draw_panel_buttons dd draw_but_toolbar ;+226 указатель на функцию рисования панели с кнопками
|
||
.fun_draw_panels dd draw_panels ;+230 указатель на функцию рисования панели поиска/замены
|
||
dd 0 ;+234 зарезервировано
|
||
.fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно
|
||
.increase_size dd 200 ;+242 число символов на которые будет увечиваться память при нехватке
|
||
.ptr_free_symb dd ? ;+246 используется внутри элемента для ускорения вставки текста
|
||
.font_size dd 0 ;+250 множитель для размера шрифта
|
||
;------------------------------------------------------------------------------
|
||
|
||
conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код
|
||
|
||
el_focus dd tedit0
|
||
mouse_dd dd 0
|
||
tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\
|
||
16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\
|
||
ws_dir_lbox,0
|
||
|
||
;dir_list memory
|
||
tree_file_struct:
|
||
dd 1,0,0,count_of_dir_list_files
|
||
dd dir_mem
|
||
db 0
|
||
.f: dd file_name
|
||
|
||
align 4
|
||
opt_gr1 dd opt1
|
||
opt_grlist1 dd opt1,opt2,opt3,0 ;end option group
|
||
|
||
opt1 option_box opt_gr1, 5, 90,6,12,0xd0d0ff, 0xff, 0x80ff,txt_f_opt_next,txt_f_opt_next.end-txt_f_opt_next
|
||
opt2 option_box opt_gr1, 5,108,6,12,0xd0d0ff, 0xff, 0x80ff,txt_f_opt_perv,txt_f_opt_perv.end-txt_f_opt_perv
|
||
opt3 option_box opt_gr1, 5,126,6,12,0xd0d0ff, 0xff, 0x80ff,txt_f_opt_beg,txt_f_opt_beg.end-txt_f_opt_beg
|
||
|
||
check_boxes:
|
||
ch1 check_box2 (5 shl 16+12),(144 shl 16 +12),5,0xffffff,0,0x80ff,ch_text.1,ch_flag_en+ch_flag_middle
|
||
check_boxes_end:
|
||
|
||
|
||
|
||
if lang eq ru_RU
|
||
|
||
msgbox_1:
|
||
db '"Замена',13,10,'Сделано замен: '
|
||
.z: rb 10
|
||
msgbox_2:
|
||
db 3,0
|
||
db 'Внимание',0
|
||
db 'Сохранить изменения в файле?',0
|
||
db 'Сохранить',0
|
||
db 'Не сохранять',0
|
||
db 'Отмена',0
|
||
db 0
|
||
msgbox_3:
|
||
db 1,0
|
||
db 'Внимание',0
|
||
db 'Ошибка при открытии файла с цветовыми настройками!',13,\
|
||
'Потому выделение слов цветом не возможно.',13,\
|
||
' (код ошибки ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Закрыть',0
|
||
db 0
|
||
msgbox_4:
|
||
db 1,0
|
||
db 'Внимание',0
|
||
db 'Ошибка при открытии файла!',13,\
|
||
'Возможно имя файла введено не правильно.',13,\
|
||
' (код ошибки ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Закрыть',0
|
||
db 0
|
||
msgbox_6:
|
||
db 1,0
|
||
db 'Внимание',0
|
||
db 'Ошибка при сохранении файла!',13,\
|
||
'Возможно имя файла введено не правильно.',13,\
|
||
' (код ошибки ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Закрыть',0
|
||
db 0
|
||
msgbox_7:
|
||
db '"Текст не найден',13,10
|
||
db 'Попробуйте или изменить запрос и повторить поиск." -tI',0
|
||
msgbox_9:
|
||
db 3,0
|
||
db 'Внимание',0
|
||
db 'Не открылся ',39,'диалог открытия файла',39,'.',13
|
||
.fdp:
|
||
rb 100
|
||
db 0
|
||
db 'Закрыть',0
|
||
db 0
|
||
|
||
txtFindCapt db 'Поиск:',0
|
||
txtFindNext db 'Найти далее',0
|
||
txtRerlaceCapt db 'Чем заменить:',0
|
||
txtRerlace db 'Заменить',0
|
||
txtRerlaceAll db 'Заменить все',0
|
||
txtFormatCapt db 'Формат',0
|
||
txtFormatApply db 'Применить',0
|
||
txtReplace db 'Заменить',0
|
||
txtReplaceAll db 'Заменить все',0
|
||
txtGotoCapt db 'Переход на строку:',0
|
||
txtGoto db 'Перейти',0
|
||
txt_f_opt_next: db 'Вниз'
|
||
.end: db 0
|
||
txt_f_opt_perv: db 'Вверх'
|
||
.end: db 0
|
||
txt_f_opt_beg: db 'С начала'
|
||
.end: db 0
|
||
ch_text:
|
||
.1 db 'Учитывать регистр',0
|
||
|
||
else ; Default to en_US
|
||
|
||
msgbox_1:
|
||
db '"Replace',13,10,'Made replacements: '
|
||
.z: rb 10
|
||
msgbox_2:
|
||
db 3,0
|
||
db 'Warning',0
|
||
db 'Save changes to the file?',0
|
||
db 'Save',0
|
||
db 'Discard',0
|
||
db 'Cancel',0
|
||
db 0
|
||
msgbox_3:
|
||
db 1,0
|
||
db 'Warning',0
|
||
db 'Error opening the file with the color settings!',13,\
|
||
'Because color selection of words is not possible.',13,\
|
||
' (error code ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Close',0
|
||
db 0
|
||
msgbox_4:
|
||
db 1,0
|
||
db 'Warning',0
|
||
db 'Error opening file!',13,\
|
||
'Maybe the file name is not entered correctly.',13,\
|
||
' (error code ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Close',0
|
||
db 0
|
||
msgbox_6:
|
||
db 1,0
|
||
db 'Warning',0
|
||
db 'Error saving file!',13,\
|
||
'Maybe the file name is not entered correctly.',13,\
|
||
' (error code ='
|
||
.err: db '?'
|
||
db ')',0
|
||
db 'Close',0
|
||
db 0
|
||
msgbox_7:
|
||
db '"Text not found.',13,10
|
||
db 'Try change the query and search again." -tI',0
|
||
msgbox_9:
|
||
db 3,0
|
||
db 'Warning',0
|
||
db 'Error run ',39,'open file dialog',39,'.',13
|
||
.fdp:
|
||
rb 100
|
||
db 0
|
||
db 'Close',0
|
||
db 0
|
||
|
||
txtFindCapt db 'Search:',0
|
||
txtFindNext db 'Find next',0
|
||
txtRerlaceCapt db 'Replace with:',0
|
||
txtRerlace db 'Replace',0
|
||
txtRerlaceAll db 'Replace all',0
|
||
txtFormatCapt db 'Format',0
|
||
txtFormatApply db 'Apply',0
|
||
txtReplace db 'Replace',0
|
||
txtReplaceAll db 'Replace all',0
|
||
txtGotoCapt db 'Go to line:',0
|
||
txtGoto db 'Go to',0
|
||
txt_f_opt_next: db 'Down'
|
||
.end: db 0
|
||
txt_f_opt_perv: db 'Up'
|
||
.end: db 0
|
||
txt_f_opt_beg: db 'At first'
|
||
.end: db 0
|
||
ch_text:
|
||
.1 db 'Case sensitive',0
|
||
|
||
end if
|
||
|
||
;функции для кнопок в сообщениях
|
||
msgbox_2N_funct:
|
||
dd On_SaveAndNewFile
|
||
dd On_NewFile
|
||
dd 0
|
||
msgbox_2O_funct:
|
||
dd On_SaveAndOpenFile
|
||
dd ted_but_open_file.no_msg
|
||
dd 0
|
||
msgbox_2E_funct:
|
||
dd On_SaveAndExit
|
||
dd On_Exit
|
||
dd 0
|
||
|
||
KM_SHIFT equ 0x00010000
|
||
KM_CTRL equ 0x00020000
|
||
KM_ALT equ 0x00040000
|
||
KM_NUMLOCK equ 0x00080000
|
||
|
||
; KEY CODES
|
||
KEY_F1 equ 0x0000003B
|
||
KEY_F2 equ 0x0000003C
|
||
KEY_F3 equ 0x0000003D
|