diff --git a/contrib/C_Layer/ASM/loadboxlib.asm b/contrib/C_Layer/ASM/loadboxlib.asm index 11d76363f..41f9009e8 100644 --- a/contrib/C_Layer/ASM/loadboxlib.asm +++ b/contrib/C_Layer/ASM/loadboxlib.asm @@ -1,3 +1,6 @@ +; SPDX-License-Identifier: NOASSERTION +; + format coff use32 ; Tell compiler to use 32 bit instructions @@ -8,7 +11,7 @@ include '../../../programs/macros.inc' purge section,mov,add,sub include '../../../programs/develop/libraries/box_lib/trunk/box_lib.mac' -include '../../../programs/system/run/trunk/txtbut.inc' +include '../../../programs/system/run/txtbut.inc' include '../../../programs/dll.inc' public init_boxlib as '_kolibri_boxlib_init' @@ -159,8 +162,8 @@ public path_show_draw as '_path_show_draw' public fb_draw_panel as '_filebrowse_draw' public fb_mouse as '_filebrowse_mouse' -public fb_key as '_filebrowse_key' - +public fb_key as '_filebrowse_key' + public ted_but_sumb_upper as '_ted_but_sumb_upper' public ted_but_sumb_lover as '_ted_but_sumb_lover' public ted_but_convert_by_table as '_ted_but_convert_by_table' diff --git a/data/Tupfile.lua b/data/Tupfile.lua index 4d2fc5b61..96ab118f5 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -59,7 +59,7 @@ img_files = { {"SETTINGS/FB2READ.INI", "common/settings/fb2read.ini"}, {"SETTINGS/HA.CFG", SRC_PROGS .. "/other/ha/SETTINGS/HA.CFG"}, {"SETTINGS/ICON.INI", build_type .. "/settings/icon.ini"}, - {"SETTINGS/KEYMAP.KEY", SRC_PROGS .. "/system/taskbar/trunk/KEYMAP.KEY"}, + {"SETTINGS/KEYMAP.KEY", SRC_PROGS .. "/system/taskbar/KEYMAP.KEY"}, {"SETTINGS/KOLIBRI.LBL", build_type .. "/settings/kolibri.lbl"}, {"SETTINGS/LANG.INI", build_type .. "/settings/lang.ini"}, {"SETTINGS/MENU.DAT", build_type .. "/settings/menu.dat"}, @@ -406,8 +406,8 @@ tup.append_table(img_files, { {"@NOTIFY", VAR_PROGS .. "/system/notify3/notify"}, {"@OPEN", VAR_PROGS .. "/system/open/open"}, {"@RESHARE", VAR_PROGS .. "/system/reshare/reshare"}, - {"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"}, - {"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"}, + {"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"}, + {"@TASKBAR", VAR_PROGS .. "/system/taskbar/TASKBAR"}, {"@VOLUME", VAR_PROGS .. "/media/volume/volume"}, {"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"}, {"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"}, @@ -423,7 +423,7 @@ tup.append_table(img_files, { {"DEFAULT.SKN", VAR_SKINS .. "/../skins/Leency/Shkvorka/Shkvorka.skn"}, {"DISPTEST", VAR_PROGS .. "/testing/disptest/trunk/disptest"}, {"END", VAR_PROGS .. "/system/end/light/end"}, - {"ESKIN", VAR_PROGS .. "/system/eskin/trunk/eskin"}, + {"ESKIN", VAR_PROGS .. "/system/eskin/eskin"}, {"FSPEED", VAR_PROGS .. "/testing/fspeed/fspeed"}, {"GMON", VAR_PROGS .. "/system/gmon/gmon"}, {"HDD_INFO", VAR_PROGS .. "/system/hdd_info/hdd_info"}, @@ -441,15 +441,15 @@ tup.append_table(img_files, { {"RTFREAD", VAR_PROGS .. "/other/rtfread/rtfread"}, {"SEARCHAP", VAR_PROGS .. "/system/searchap/searchap"}, {"SCRSHOOT", VAR_PROGS .. "/media/scrshoot/scrshoot"}, - {"SETUP", VAR_PROGS .. "/system/setup/trunk/setup"}, - {"SKINCFG", VAR_PROGS .. "/system/skincfg/trunk/skincfg"}, + {"SETUP", VAR_PROGS .. "/system/setup/setup"}, + {"SKINCFG", VAR_PROGS .. "/system/skincfg/skincfg"}, {"TERMINAL", VAR_PROGS .. "/system/terminal/terminal"}, {"TEST", VAR_PROGS .. "/testing/protection/trunk/test"}, {"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"}, {"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"}, {"TIMER", VAR_PROGS .. "/other/Timer/Timer"}, {"UNZ", VAR_PROGS .. "/fs/unz/unz"}, - {"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"}, + {"ZKEY", VAR_PROGS .. "/system/zkey/ZKEY"}, {"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/3dwav"}, {"3D/CROWNSCR", VAR_PROGS .. "/demos/crownscr/crownscr"}, {"3D/3DCUBE2", VAR_PROGS .. "/demos/3dcube2/3DCUBE2"}, diff --git a/programs/bcc32/include/kos_unpack.inc b/programs/bcc32/include/kos_unpack.inc index 55c6d5772..2361d1bd2 100644 --- a/programs/bcc32/include/kos_unpack.inc +++ b/programs/bcc32/include/kos_unpack.inc @@ -1,7 +1,10 @@ -@@unpack$qqspvt1 equ unpack - -include "..\..\system\skincfg\trunk\kglobals.inc" -include "..\..\system\skincfg\trunk\unpacker.inc" - -IncludeIGlobals -IncludeUGlobals \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +@@unpack$qqspvt1 equ unpack + +include "..\..\system\skincfg\kglobals.inc" +include "..\..\system\skincfg\unpacker.inc" + +IncludeIGlobals +IncludeUGlobals diff --git a/programs/build_all.bat b/programs/build_all.bat index d12c519fd..d8c6ed530 100644 --- a/programs/build_all.bat +++ b/programs/build_all.bat @@ -58,30 +58,30 @@ echo Building system echo * fasm system\calendar\calendar.asm %BIN%\calendar fasm system\board\board.asm %BIN%\develop\board -fasm system\commouse\trunk\commouse.asm %BIN%\commouse +rem fasm system\commouse\trunk\commouse.asm %BIN%\commouse fasm system\cpu\cpu.asm %BIN%\cpu -fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid -fasm system\skincfg\trunk\skincfg.asm %BIN%\skincfg +rem fasm system\cpuid\trunk\cpuid.asm %BIN%\cpuid +fasm system\skincfg\skincfg.asm %BIN%\skincfg fasm system\docpack\docpack.asm %BIN%\docpack -fasm system\end\trunk\end.asm %BIN%\end +fasm system\end\end.asm %BIN%\end fasm system\gmon\gmon.asm %BIN%\gmon fasm system\icon\icon.asm %BIN%\icon -fasm system\kbd\trunk\kbd.ASM %BIN%\kbd +rem fasm system\kbd\trunk\kbd.ASM %BIN%\kbd fasm system\launcher\launcher.asm %BIN%\launcher fasm system\menu\menu.asm %BIN%\@menu -fasm system\mgb\trunk\mgb.asm %BIN%\mgb +rem fasm system\mgb\trunk\mgb.asm %BIN%\mgb fasm system\mousemul\mousemul.asm %BIN%\mousemul -fasm system\PANEL\trunk\@TASKBAR.ASM %BIN%\@TASKBAR -fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev -fasm system\RB\trunk\@RB.ASM %BIN%\@RB +fasm system\taskbar\TASKBAR.ASM %BIN%\@TASKBAR +rem fasm system\pcidev\trunk\pcidev.asm %BIN%\pcidev +rem fasm system\RB\trunk\@RB.ASM %BIN%\@RB fasm system\rdsave\rdsave.asm %BIN%\rdsave -fasm system\run\trunk\run.asm %BIN%\run -fasm system\setup\trunk\setup.asm %BIN%\setup -fasm system\skinsel\skinsel.asm %BIN%\skinsel -fasm system\ss\trunk\@ss.asm %BIN%\@ss -fasm system\vrr\trunk\vrr.asm %BIN%\vrr -fasm system\vrr_m\trunk\vrr_m.asm %BIN%\vrr_m -fasm system\zkey\trunk\zkey.asm %BIN%\zkey +fasm system\run\run.asm %BIN%\run +fasm system\setup\setup.asm %BIN%\setup +rem fasm system\skinsel\skinsel.asm %BIN%\skinsel +rem fasm system\ss\trunk\@ss.asm %BIN%\@ss +rem fasm system\vrr\trunk\vrr.asm %BIN%\vrr +rem fasm system\vrr_m\trunk\vrr_m.asm %BIN%\vrr_m +fasm system\zkey\zkey.asm %BIN%\zkey echo * echo Building develop @@ -237,9 +237,9 @@ fasm media\animage\animage.asm %BIN%\nightbuild\animage fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad -fasm system\skincfg\trunk\skincfg.asm %BIN%\nightbuild\skincfg +fasm system\skincfg\skincfg.asm %BIN%\nightbuild\skincfg fasm system\hdd_info\hdd_info.asm %BIN%\nightbuild\hdd_info -fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb +rem fasm system\mgb\trunk\mgb.asm %BIN%\nightbuild\mgb fasm system\rdsave\rdsave.asm %BIN%\nightbuild\rdsave fasm other\kpack\trunk\kpack.asm %BIN%\nightbuild\kpack fasm other\rtfread\rtfread.asm %BIN%\nightbuild\rtfread diff --git a/programs/develop/kol_f_edit/kol_f_edit.asm b/programs/develop/kol_f_edit/kol_f_edit.asm index 63d912a20..a438823b5 100644 --- a/programs/develop/kol_f_edit/kol_f_edit.asm +++ b/programs/develop/kol_f_edit/kol_f_edit.asm @@ -1,1625 +1,1630 @@ -use32 - org 0 - db 'MENUET01' - dd 1,start,i_end,mem,stacktop,buf_cmd_lin,sys_path - -include '../../KOSfuncs.inc' -include '../../macros.inc' -include '../../proc32.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../dll.inc' -include '../../system/skincfg/trunk/kglobals.inc' -include '../../system/skincfg/trunk/unpacker.inc' -include 'strlen.inc' -include 'obj_codes.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load - -hed db 'kol_f_edit 29.09.20',0 - -sizeof.TreeList equ 20 ;need for element 'tree_list' - -BUF_STRUCT_SIZE equ 21 -buf2d_data equ dword[edi] ;данные буфера изображения -buf2d_w equ dword[edi+8] ;ширина буфера -buf2d_h equ dword[edi+12] ;высота буфера -buf2d_l equ word[edi+4] ;отступ слева -buf2d_t equ word[edi+6] ;отступ сверху -buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера -buf2d_color equ dword[edi+16] ;цвет фона буфера -buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения - - -MAX_CED_OBJECTS equ 200 -MAX_OPT_FIELDS equ 11 -MAX_OBJ_TYPES equ 17 ;максимальное число объектов -MAX_OBJ_CAPTIONS equ 1000 ;размер дополнительных подписей подписей -WND_CAPT_COLOR equ 0xb0d0ff -BUF_SIZE equ 1000 - -;modif -BIT_MOD_ACI equ 0 ;первоначальные настройки элементов -BIT_MOD_ACM equ 1 ;события от мыши -BIT_MOD_ACD equ 2 ;данные объектов -BIT_MOD_ABU equ 3 ;связывание кнопок -BIT_MOD_WI_CAPT equ 0 ;стиль окна подпись -BIT_MOD_WI_CORD_OTN_CL_OBL equ 1 ;стиль окна координаты относительно клиентской области -BIT_MOD_WI_REDR equ 2 ;стиль окна перерисовка окна -BIT_MOD_WI_GRAD equ 3 ;стиль окна градиент -BIT_MOD_CHE equ 0 ; ch_flag_en - выбран CheckBox -BIT_MOD_CHE_T equ 1 ;сверху -BIT_MOD_CHE_M equ 2 ;по центру -BIT_MOD_CHE_B equ 3 ;снизу -BIT_MOD_TXT_ASCII_0 equ 0 ;текст заканчив. 0 -BIT_MOD_TXT_NO_TRAN equ 1 ;текст прозрачный -BIT_MOD_TXT_CHAR2 equ 2 ;текст 2-м шрифтом -BIT_MOD_EDIT_FOC equ 0 ;EditBox в фокусе -BIT_MOD_EDIT_FIO equ 1 ; -;CPP_MOD_RE_GR equ 1 ;градиентный прямоугольник -BIT_MOD_BUT_NFON equ 0 ;стиль Button не рисовать кнопку -BIT_MOD_BUT_NBORD equ 1 ;стиль Button не рисовать границу -BIT_MOD_IMPORT_FUNCT_COMMENT equ 0 ;коментировать функцию - -macro load_image_file path,buf,size { ;макрос для загрузки изображений - ;path - может быть переменной или строковым параметром - if path eqtype '' ;проверяем задан ли строкой параметр path - jmp @f - local .path_str - .path_str db path ;формируем локальную переменную - db 0 - @@: - ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0 - else - copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - end if - - stdcall mem.Alloc, dword size ;выделяем память для изображения - mov [buf],eax - - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], dword size - m2m [run_file_70.Buffer], eax - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mcall 70,run_file_70 ;загружаем файл изображения - cmp ebx,0xffffffff - je @f - ;определяем вид изображения и переводим его во временный буфер image_data - stdcall [img_decode], [buf],ebx,0 - mov [image_data],eax - ;преобразуем изображение к формату rgb - stdcall [img_to_rgb2], [image_data],[buf] - ;удаляем временный буфер image_data - stdcall [img_destroy], [image_data] - @@: -} - -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - rezerv db ? - FileName dd ? -ends - -struct object - id dd ? ;идентификатор объекта - txt rb MAX_LEN_OBJ_TXT ;текстовые свойства - lvl db 0 - clo db 0 - typid dd ? ;номер объекта определяющего тип переменной - modif dd ? ;битовые свойства -ends - -struct ObjOpt - dd ? - bl_type db ? - graph db ? - info rb 30 - caption rb MAX_OPT_CAPTION - Col rw MAX_OPT_FIELDS - img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp') - bit_prop dd 0 ;битовые свойства (подписи, названия) - bit_val dd 0 ;битовые свойства (значения, константы) -ends - -SKIN_H equ 22 -SKIN_W1 equ 5 -SKIN_W2 equ 7 -SKIN_W3 equ 23 -fn_skin_1 db 'left.bmp',0 -fn_skin_2 db 'base.bmp',0 -fn_skin_3 db 'oper.bmp',0 -IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54 -IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54 -IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54 - -IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом - -fn_icon db 'icon.bmp',0 -count_main_icons equ 35 ;число иконок в файле icon.bmp -bmp_icon rb 0x300*count_main_icons - -TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками -icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок -icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта - -fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса - -;макрос для проверки битового свойства -macro test_bool_prop obj_reg,n_prop -{ - bt dword[obj_reg+u_object.modif-u_object],n_prop -} - -include 'ced_wnd_m.inc' -include 'ced_wnd_prop.inc' ;файл с функциями окна свойств объекта -include 'ced_constr.inc' ;файл с функциями окна конструктора -include 'ced_code_g.inc' ;файл с функциями генерирования кодов - -align 4 -start: - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузилась наша либа - mov ebp,lib0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib1 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib2 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib3 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - - ;задание размеров полей со свойствами - mov eax,prop_edits_top - mov ebx,16+6 ;ширина иконки + отступы - mov edi,edit2 - @@: - mov ed_top,eax ;отступ сверху - mov ed_left,ebx ;отступ слева - add edi,ed_struc_size - add eax,prop_edits_height - cmp edi,prop_wnd_edits_end - jl @b - - stdcall [buf2d_create], buf_fon - - mcall 48,3,sc,sizeof.system_colors - mcall 40,0x27 - - stdcall [tl_data_init], tree1 - stdcall [tl_data_init], tree2 - - copy_path fn_icon,sys_path,file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 54 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], 0x300*count_main_icons - mov [run_file_70.Buffer], bmp_icon - mov [run_file_70.rezerv], 0 - mov [run_file_70.FileName], file_name - mcall 70,run_file_70 - - cmp ebx,-1 - mov [err_ini0],1 - je @f ;if open file - mov [err_ini0],0 - mov dword[tree1.data_img],bmp_icon - mov dword[tree2.data_img],bmp_icon - @@: - - ;системные иконки 16*16 для tree_list - load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE - ;если изображение не открылось, то в icon_tl_sys будут - ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img_sys],eax - mov dword[tree2.data_img_sys],eax - - ;1-й файл скина - load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE - stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - ;2-й файл скина - load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE - stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - ;3-й файл скина - load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE - stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - - ;символы 1-го системного шрифта - load_image_file 'font6x9.bmp', icon_font_s1,IMAGE_FILE_FONT1_SIZE - stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит - stdcall [buf2d_convert_text_matrix], buf_font - - - copy_path fn_obj_opt,sys_path,fp_obj_opt,0 - ;load options file - mov [run_file_70.Position], 0 - mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES+MAX_OBJ_CAPTIONS - mov [run_file_70.Buffer], obj_opt - mov [run_file_70.FileName], fp_obj_opt - mcall 70,run_file_70 - - cmp ebx,-1 - mov [err_ini1],1 - je .open_end ;jmp if not open file - mov [err_ini1],0 - - mov eax,obj_opt ;добавляем объекты - @@: - mov ebx,dword[eax] - cmp ebx,0 - je @f - ;xor ecx,ecx ;в ecx будет индекс иконки - mov cx,word[eax+obj_opt.img-obj_opt] - cmp cx,0 - jge .zero - xor cx,cx ;что-бы не глючило с отрицательным индексом - .zero: - shl ecx,16 - stdcall dword[tl_node_add], tree1,ecx,eax ;добавляем название объекта - stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок - add eax,sizeof.ObjOpt ;переход на следующий объект - jmp @b - @@: - stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх - - .open_end: - - stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога - stdcall [ted_init], tedit0 - copy_path fn_syntax,sys_path,file_name,0 - - ; *** init syntax file *** - ; проверяем размер файла синтаксиса - mov [run_file_70.Function], 5 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], 0 - mov dword[run_file_70.Buffer], open_b - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], file_name - mcall 70,run_file_70 - cmp eax,0 - jne @f - - mov edi,tedit0 - mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах - mov ted_syntax_file_size,ecx - - stdcall mem.Alloc,ecx ;выделяем память для файла синтаксиса - mov ted_syntax_file,eax - - ;пробуем открыть файл синтаксиса - call open_unpac_synt_file - jmp .end_0 - @@: - notify_window_run txt_not_syntax_file - .end_0: - - ;get cmd line - cmp [buf_cmd_lin],0 - je @f ;if file names exist - mov esi,buf_cmd_lin - call strlen ;eax=strlen - mov edi,[edit1.text] - mov [edit1.size],eax - mov ecx,eax - rep movsb - call but_open_proj - @@: - - - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall 10 - - cmp al,1 - jne @f - call draw_window - @@: - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 - jne @f - call mouse - @@: - - jmp still - -align 4 -draw_window: -pushad - mcall 12,1 - - xor eax,eax - mov ebx,20*65536+670 - mov ecx,20*65536+370 - mov edx,[sc.work] - or edx,0x33000000 - mov edi,hed - int 0x40 - - mov eax,8 ;button 'Open Project' - mov esi,0x80ff - mov ebx,230*65536+18 - mov ecx,5*65536+18 - mov edx,5 - int 0x40 - stdcall draw_icon, 22,231,6 ;22 - open - - ;button 'Save Project' - mov ebx,250*65536+18 - mov ecx,5*65536+18 - mov edx,6 - int 0x40 - stdcall draw_icon, 17,251,6 ;17 - save - - ;button 'Show Constructor' - mov ebx,310*65536+18 - mov ecx,5*65536+18 - mov edx,11 - int 0x40 - stdcall draw_icon, 12,311,6 ;12 - window - - ;button 'Show Code' - mov ebx,330*65536+18 - mov edx,12 - int 0x40 - stdcall draw_icon, 11,331,6 ;11 - text - - ;button 'Update: Code, Constructor' - mov ebx,350*65536+18 - mov edx,13 - int 0x40 - stdcall draw_icon, 32,351,6 ;32 - update - - ;button 'Save Code' - mov ebx,370*65536+18 - mov edx,14 - int 0x40 - stdcall draw_icon, 17,371,6 ;17 - save - - ;button ']P' - mov ebx,390*65536+18 - mov edx,15 - int 0x40 - stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца - - ;button 'Show color text' - mov ebx,410*65536+18 - mov edx,16 - int 0x40 - stdcall draw_icon, 19,411,6 - - ;button 'Add Object' - mov ebx,125*65536+18 - mov ecx,30*65536+18 - mov edx,31 - int 0x40 - stdcall draw_icon, 14,126,31 ;14 - add object - - ;button 'Move Up' - mov ebx,155*65536+18 - mov edx,21 - int 0x40 - stdcall draw_icon, 23,156,31 ;23 - move up - - ;button 'Move Down' - mov ebx,175*65536+18 - mov edx,22 - int 0x40 - stdcall draw_icon, 24,176,31 ;24 - move down - - ;button 'Copy' - mov ebx,195*65536+18 - mov edx,23 - int 0x40 - stdcall draw_icon, 30,196,31 ;30 - copy - - ;button 'Paste' - mov ebx,215*65536+18 - mov edx,24 - int 0x40 - stdcall draw_icon, 31,216,31 ;31 - paste - - ;button 'Property' - mov ebx,235*65536+18 - mov edx,25 - int 0x40 - stdcall draw_icon, 7,236,31 ;7 - property - - ;button 'Undo' - mov ebx,255*65536+18 - mov edx,26 - int 0x40 - stdcall draw_icon, 33,256,31 ;33 - undo - - ;button 'Redo' - mov ebx,275*65536+18 - mov edx,27 - int 0x40 - stdcall draw_icon, 34,276,31 ;34 - redo - -; 10 30 50 70 90 - - cmp [err_opn],1 - jne @f - mcall 4,10*65536+35,0x80ff0000,txtErrOpen - @@: - - stdcall [edit_box_draw], edit1 - stdcall [edit_box_draw], edit_sav - - mov dword[w_scr_t1.all_redraw],1 - ;stdcall [scrollbar_ver_draw], w_scr_t1 - stdcall [tl_draw], tree1 - mov dword[w_scr_t2.all_redraw],1 - ;stdcall [scrollbar_ver_draw], w_scr_t2 - stdcall [tl_draw], tree2 - - cmp byte[show_mode],0 ;условие видимости окна конструктора - jne @f - stdcall [buf2d_draw], buf_fon - @@: - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw], tedit0 - @@: - mcall 12,2 -popad - ret - -align 4 -mouse: - stdcall [edit_box_mouse], edit1 - stdcall [edit_box_mouse], edit_sav - stdcall [tl_mouse], tree1 - stdcall [tl_mouse], tree2 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_mouse], tedit0 - @@: - ret - - -align 4 -key: - mcall 2 - stdcall [edit_box_key], edit1 - stdcall [edit_box_key], edit_sav - stdcall [tl_key], tree1 - stdcall [tl_key], tree2 - - jmp still - -align 4 -button: - mcall 17 - cmp ah,5 - jne @f - call but_open_proj - jmp still - @@: - cmp ah,6 - jne @f - call but_save_proj - jmp still - @@: - ;cmp ah,10 - ;jne @f - ;call but_element_change - ;@@: - cmp ah,11 - jne @f - call but_show_constructor - jmp still - @@: - cmp ah,12 - jne @f - call but_show_code - jmp still - @@: - cmp ah,13 - jne @f - call but_update - jmp still - @@: - cmp ah,14 - jne @f - call but_save_asm - jmp still - @@: - cmp ah,15 - jne @f - call but_show_invis - jmp still - @@: - cmp ah,16 - jne @f - call but_show_syntax - jmp still - @@: - cmp ah,21 - jne @f - call but_obj_move_up - jmp still - @@: - cmp ah,22 - jne @f - call but_obj_move_down - jmp still - @@: - cmp ah,23 - jne @f - call but_obj_copy - jmp still - @@: - cmp ah,24 - jne @f - call but_obj_paste - jmp still - @@: - cmp ah,25 - jne @f - call on_file_object_select - jmp still - @@: - cmp ah,26 - jne @f - stdcall [tl_info_undo], tree2 - stdcall [tl_draw], tree2 - jmp still - @@: - cmp ah,27 - jne @f - stdcall [tl_info_redo], tree2 - stdcall [tl_draw], tree2 - jmp still - @@: - cmp ah,31 - jne @f - call on_add_object - jmp still - @@: - cmp ah,1 - jne still -.exit: - stdcall mem.Free,[icon_tl_sys] - mov dword[tree1.data_img],0 - mov dword[tree2.data_img],0 - mov dword[tree1.data_img_sys],0 - mov dword[tree2.data_img_sys],0 - stdcall dword[tl_data_clear], tree1 - stdcall dword[tl_data_clear], tree2 - stdcall [buf2d_delete],buf_fon ;удаляем буфер - stdcall [buf2d_delete],buf_font ;удаляем буфер - stdcall [buf2d_delete],buf_skin1 - stdcall [buf2d_delete],buf_skin2 - stdcall [buf2d_delete],buf_skin3 - stdcall [ted_delete], tedit0 - cmp dword[unpac_mem],0 - je @f - stdcall mem.Free,[unpac_mem] - @@: - mcall -1 - -align 4 -open_file_data dd 0 ;указатель на память для открытия файлов -open_file_size dd 0 ;размер открытого файла - -align 4 -but_open_proj: - copy_path open_dialog_name,communication_area_default_path,file_name,0 - pushad - mov [OpenDialog_data.type],0 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .open_end - ;код при удачном открытии диалога - - mov [run_file_70.Function], 5 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], 0 - mov dword[run_file_70.Buffer], open_b - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 - - mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах - mov [open_file_size],ecx - stdcall mem.ReAlloc,[open_file_data],ecx - mov [open_file_data],eax - - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], ecx - m2m dword[run_file_70.Buffer], eax - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 ;загружаем файл - cmp ebx,0xffffffff - mov [err_opn],1 - je .open_end ;if open file - mov [err_opn],0 - stdcall [edit_box_set_text], edit1,openfile_path - - stdcall dword[tl_info_clear], tree2 - mov eax,[open_file_data] ;добавляем объекты - @@: - mov ebx,dword[eax] - cmp ebx,0 - je @f - - call find_obj_in_opt ;edi = pointer to ObjOpt struct - - mov cx,word[edi+obj_opt.img-obj_opt] - cmp cx,0 - jge .zero - xor cx,cx ;что-бы не глючило с отрицательным индексом - .zero: - shl ecx,16 ;в ecx индекс иконки - mov cl,byte[eax+u_object.lvl-u_object] ;уровень объекта - - ;tl_node_close_open - не подходит, т.к. действует на узлы имеющие дочерние - mov ch,byte[eax+u_object.clo-u_object] ;закрытый/открытый - - stdcall dword[tl_node_add], tree2,ecx,eax ;добавляем объект - - stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок - add eax,sizeof.object ;переход на следующий объект - jmp @b - @@: - stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх - - mov [foc_obj],0 - call draw_constructor - call code_gen - .open_end: - call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся - popad - ret - -;сохранение файла проэкта на диск -align 4 -but_save_proj: - copy_path open_dialog_name,communication_area_default_path,file_name,0 - pushad - mov [OpenDialog_data.type],1 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_save_file - ;код при удачном открытии диалога - - ;берем размер памяти, необходимой для сохранения файла - xor ecx,ecx - stdcall [tl_node_poi_get_info], tree2,0 - @@: - cmp eax,0 - je @f - inc ecx - stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу - jmp @b - @@: - ;movzx eax,word[tree2.info_size] - imul ecx,sizeof.object ;eax - add ecx,4 ;метка конца файла - mov [open_file_size],ecx - stdcall mem.ReAlloc,[open_file_data],ecx - mov [open_file_data],eax - - mov edi,[open_file_data] - stdcall [tl_node_poi_get_info], tree2,0 - mov edx,eax - @@: - cmp edx,0 - je @f - stdcall [tl_node_poi_get_data], tree2,edx - mov esi,eax ;получаем данные узла - - mov bl,byte[edx+2] ;bl - уровень объекта - mov byte[esi+u_object.lvl-u_object],bl - mov bl,byte[edx+3] ;bl - открытие/закрытие объекта - mov byte[esi+u_object.clo-u_object],bl - - ;вычисляем новый индекс для типа объекта - mov ebx,[esi+u_object.typid-u_object] ;ebx - тип объекта - ;сохраняем тип объекта - push ebx - imul ebx,sizeof.TreeList - add ebx,[tree2.data_nodes] ;ebx - указатель объект указывающий тип - stdcall get_obj_npp,ebx - mov [esi+u_object.typid-u_object],eax - mov eax,esi - ;копируем объект в память для сохранения - movzx ecx,word[tree2.info_size] - cld - rep movsb - ;восстанавливаем тип объекта - pop dword[eax+u_object.typid-u_object] - - stdcall [tl_node_poi_get_next_info], tree2,edx - mov edx,eax ;переходим к следущему узлу - jmp @b - @@: - mov dword[edi],0 ;метка конца файла - add edi,4 - - stdcall [edit_box_set_text], edit1,openfile_path - mov ecx,[open_file_size] ;ecx - размер сохраняемого файла - mov [run_file_70.Function], 2 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], ecx - m2m [run_file_70.Buffer], [open_file_data] - mov [run_file_70.rezerv], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 - - .end_save_file: - popad - ret - -;берет номер по порядку по указателю на структуру объекта -;output: -; eax - номер объекта -align 4 -proc get_obj_npp uses ebx ecx, p_obj_str:dword - mov ecx,2 - mov ebx,[p_obj_str] - - stdcall [tl_node_poi_get_info], tree2,0 - @@: - cmp eax,0 - je .no_exist - cmp eax,ebx - je @f - - inc ecx - stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу - jmp @b - .no_exist: ;когда идет ссылка на не существующий объект - xor ecx,ecx ;обнуляем указатель, что-бы не сохранять в файл мусор - @@: - mov eax,ecx - ret -endp - -;функция для сохранения созданного asm файла -align 4 -but_save_asm: - push edi - mov edi, tedit0 - - stdcall [ted_save_file],edi,run_file_70,[edit_sav.text] - cmp ted_err_save,0 - jne @f - stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен - @@: - pop edi - ret - -;функция для показа/скрытия невидимых символов -align 4 -but_show_invis: - push edi - mov edi,tedit0 - - xor ted_mode_invis,1 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw],edi - @@: - pop edi - ret - -; -align 4 -but_show_syntax: - push edi - mov edi,tedit0 - - xor ted_mode_color,1 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw],edi - @@: - pop edi - ret - -align 4 -ted_save_err_msg: - mov byte[msgbox_0.err],al - stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file! - ret - -;функция вызываемая при нажатии Enter в окне tree2 -;обновляет текстовые поля значениями параметров взятых из объектов -;функция обратная к данной but_element_change -align 4 -on_file_object_select: - cmp byte[prop_wnd_run],0 - jne @f - mov byte[prop_wnd_run],1 - stdcall [tl_node_get_data], tree2 - mov dword[foc_obj],eax - cmp eax,0 - je @f - pushad - ;все действия по настройке элементов управления выполняются в окне со свойствами - mcall 51,1,prop_start,prop_thread - popad - @@: - ;call draw_window - ret - -;функция вызываемая при нажатии Enter в окне tree1 -;добавляет новый объект в окно tree2 -align 4 -on_add_object: -push eax ebx ecx - stdcall [tl_node_get_data], tree1 - cmp eax,0 - je @f - xor ecx,ecx - mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта - - cmp ecx,count_main_icons ;в старших битах ecx будут 0, потому отрицательные числа тоже проверяются - jl .end_0 - ;если иконки нет, по умолчанию берем 0-ю - xor cx,cx - .end_0: - - shl ecx,16 - stdcall mem_clear, u_object,sizeof.object - mov ebx,dword[eax] - mov dword[u_object.id],ebx - stdcall dword[tl_node_add], tree2,ecx,u_object ;добавляем объект - @@: -pop ecx ebx eax - call draw_window - ret - -align 4 -but_ctrl_o: - ret -align 4 -but_ctrl_n: - ret -align 4 -but_ctrl_s: - ret - -;открытие и распаковка файла подсветки синтаксиса -;input: -; ted_syntax_file - буфер для открываемого файла синтаксиса -; ted_syntax_file_size - размер открываемого файла синтаксиса -;output: -; ebx - число прочитанных байт из файла -align 4 -open_unpac_synt_file: -push eax edi esi - mov edi, tedit0 - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov ecx, ted_syntax_file_size - mov dword[run_file_70.Count], ecx - m2m dword[run_file_70.Buffer], ted_syntax_file - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mcall 70, run_file_70 - cmp ebx,-1 - jne .end_0 - ;если возникли ошибки при открытии файла синтаксиса - mov byte[txt_not_syntax_file.err],'0' - add byte[txt_not_syntax_file.err],al - notify_window_run txt_not_syntax_file ;Can-t open color options file! - jmp @f - .end_0: - - mov eax,ted_syntax_file - cmp dword[eax],'KPCK' - jne .end_unpack - - mov ecx,dword[eax+4] ;ecx - размер файла синтаксиса после распаковки - cmp dword[unpac_mem],0 - jne .end_1 - ;первоначальное выделение временной памяти для распаковки файла - stdcall mem.Alloc,ecx - mov [unpac_mem],eax - mov [unpac_mem_size],ecx - .end_1: - cmp dword[unpac_mem_size],ecx - jge .end_2 - ;если для распакованого файла не хватает временной памяти - stdcall mem.ReAlloc,[unpac_mem],ecx ;заново выделяем временную память - mov [unpac_mem],eax - mov [unpac_mem_size],ecx - .end_2: - - ;распаковка файла во временную память - stdcall unpack,ted_syntax_file,[unpac_mem] - - cmp ted_syntax_file_size,ecx - jge .end_3 - ;если для распакованого файла не хватает памяти - stdcall mem.ReAlloc,ted_syntax_file,ecx ;заново выделяем память - mov ted_syntax_file,eax - mov ted_syntax_file_size,ecx - .end_3: - - ;копирование распакованного файла из временной памяти в память элемента - mov edi,ted_syntax_file - mov esi,[unpac_mem] - cld - rep movsb - - .end_unpack: - ;применение файла подсветки - stdcall [ted_init_syntax_file], tedit0 - @@: -pop esi edi eax - ret - -align 4 -txt_not_syntax_file: - db 'Ошибка при открытии файла с цветовыми настройками! (Код ошибки =' - .err: db '?' - db ')',0 - -align 4 -buf_fon: ;фоновый буфер - dd 0 ;указатель на буфер изображения - dw 310 ;+4 left - dw 50 ;+6 top - dd 340 ;+8 w - dd 280 ;+12 h - dd 0xffffff ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_font: ;буфер матрицы со шрифтом - dd 0 ;указатель на буфер изображения - dw 25 ;+4 left - dw 25 ;+6 top - dd 96 ;+8 w - dd 144 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_skin1: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W1 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel -align 4 -buf_skin2: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W2 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel -align 4 -buf_skin3: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W3 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -show_mode db 0 ;режим для показа определенного окна -txtErrOpen db 'Не найден файл, проверьте правильность имени',0 -txtErrIni1 db 'Не открылся файл с опциями',0 -err_opn db 0 ;рез. открытия файла проэкта -err_ini0 db 0 ;рез. открытия файла с иконками -err_ini1 db 0 ;рез. открытия файла с опциями -unpac_mem dd 0 -unpac_mem_size dd 0 - -edit1 edit_box 210, 10, 5, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7 - -edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0 -edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0 -edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0 -edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0 -edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0 -edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0 -edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0 -edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0 -edit10 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text10, mouse_dd, 0 -edit11 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text11, mouse_dd, 0 -edit12 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text12, mouse_dd, 0 -prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства - -edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0 - - -ed_text1 db '/hd0/1/',0 - rb 295 -ed_text2 rb MAX_LEN_OBJ_TXT+2 -ed_text3 rb MAX_LEN_OBJ_TXT+2 -ed_text4 rb MAX_LEN_OBJ_TXT+2 -ed_text5 rb MAX_LEN_OBJ_TXT+2 -ed_text6 rb MAX_LEN_OBJ_TXT+2 -ed_text7 rb MAX_LEN_OBJ_TXT+2 -ed_text8 rb MAX_LEN_OBJ_TXT+2 -ed_text9 rb MAX_LEN_OBJ_TXT+2 -ed_text10 rb MAX_LEN_OBJ_TXT+2 -ed_text11 rb MAX_LEN_OBJ_TXT+2 -ed_text12 rb MAX_LEN_OBJ_TXT+2 -ed_text_sav rb 302 - -txt_null db 'null',0 -mouse_dd dd ? - -el_focus dd tree1 -;дерево со списком возможных типов объектов -tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ - 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,50,125,280, 0,obj_opt.info-obj_opt,0, el_focus,\ - w_scr_t1,on_add_object -;дерево с объектами в пользовательском файле -tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\ - 16,16, 0xffffff,0xb0d0ff,0xd000ff, 155,50,130,280, 13,u_object.txt-u_object,MAX_LEN_OBJ_TXT, el_focus,\ - w_scr_t2,on_file_object_select - -msgbox_0: - 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_1: - db 1,0 - db ':)',0 - db 'File was saved',0 - db 'Ok',0 - db 0 - -struct TexSelect - x0 dd ? - y0 dd ? - x1 dd ? - y1 dd ? -ends -;------------------------------------------------------------------------------ -align 4 -tedit0: ;структура текстового редактора - .wnd BOX 310,50,325,260 ;+ 0 - .rec BOX 30,13,7,10 ;+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 25002 ;+86 максимальное число символов в одном документе - .count_colors_text dd 1 ;+90 колличество цветов текста - .count_key_words dd 0 ;+94 колличество ключевых слов - .color_cursor dd 0xff0000 ;+98 цвет курсора - .color_wnd_capt dd 0x0080c0 ;+102 цвет полей вокруг окна - .color_wnd_work dd 0x0 ;+106 цвет фона окна - .color_wnd_bord dd 0xffffff ;+110 цвет текста на полях - .color_select dd 0x0000ff ;+114 цвет выделения - .color_cur_text dd 0xffff00 ;+118 цвет символа под курсором - .color_wnd_text dd 0x80ffff ;+122 цвет текста в окне - .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса - .syntax_file_size dd 55*1024 ;+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 scrol_w1 ;+174 вертикальный скроллинг - .scr_h dd scrol_h1 ;+178 горизонтальный скроллинг - .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов - .buffer dd text_buffer ;+186 указатель на буфер копирования/вставки - .buffer_find dd 0 ;+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_o dd but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) - .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска) - .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа) - .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S - .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки - .fun_find_err dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно - .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса - .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками - .fun_draw_panel_find dd 0 ;+230 указатель на функцию рисования панели поиска - .fun_draw_panel_syntax dd 0 ;+234 указатель на функцию рисования панели синтаксиса - .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно - .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке - .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) -;------------------------------------------------------------------------------ -align 4 -scrol_w1: -.x: -.size_x dw 16 ;+0 -.start_x dw 85 ;+2 -.y: -.size_y dw 100 ; +4 -.start_y dw 15 ; +6 -.btn_high dd 15 ; +8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0x808080 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 -;--------------------------------------------------------------------- -align 4 -scrol_h1: -.x: -.size_x dw 85 ;+0 -.start_x dw 30 ;+2 -.y: -.size_y dw 16 ;+4 -.start_y dw 100 ;+6 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0x808080 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - - - -align 4 -w_scr_t1: -.size_x dw 16 ;+0 -rb 2+2+2 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0 ;+36 -rb 4+2+2 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - -align 4 -w_scr_t2: -.size_x dw 16 ;+0 -rb 2+2+2 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0 ;+36 -rb 4+2+2 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - -;данные для диалога открытия файлов -align 4 -OpenDialog_data: -.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию -.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 'CED',0 -db 'ASM',0 -.end: -db 0 - - -data_of_code dd 0 -sc system_colors - -image_data dd 0 ;память для преобразования картинки функциями libimg - -text_buffer db BUF_SIZE dup(0) -fn_obj_opt db 'ob_o.opt',0 -obj_opt ObjOpt - rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1)+MAX_OBJ_CAPTIONS - db 0 ;eof options - -cur_x dd 0 -cur_y dd 0 -foc_obj dd 0 ;объект в фокусе -obj_count_txt_props dd 0 ;количество используемых текстовых свойств -obj_m_win dd 0 ;структура главного окна - - system_dir0 db '/sys/lib/' - lib0_name db 'box_lib.obj',0 - - system_dir1 db '/sys/lib/' - lib1_name db 'proc_lib.obj',0 - - system_dir2 db '/sys/lib/' - lib2_name db 'buf2d.obj',0 - - system_dir3 db '/sys/lib/' - lib3_name db 'libimg.obj',0 - - system_dir4 db '/sys/lib/' - lib4_name db 'msgbox.obj',0 - -align 4 -import_buf2d_lib: - dd sz_lib_init - buf2d_create dd sz_buf2d_create - buf2d_create_f_img dd sz_buf2d_create_f_img - buf2d_clear dd sz_buf2d_clear - buf2d_draw dd sz_buf2d_draw - buf2d_delete dd sz_buf2d_delete - buf2d_line dd sz_buf2d_line - buf2d_rect_by_size dd sz_buf2d_rect_by_size - buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size - ;buf2d_circle dd sz_buf2d_circle - buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 - buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 - buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 - buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 - buf2d_bit_blt dd sz_buf2d_bit_blt - buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp - buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha - ;buf2d_curve_bezier dd sz_buf2d_curve_bezier - buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix - buf2d_draw_text dd sz_buf2d_draw_text - ;buf2d_crop_color dd sz_buf2d_crop_color - buf2d_offset_h dd sz_buf2d_offset_h -dd 0,0 - sz_lib_init db 'lib_init',0 - sz_buf2d_create db 'buf2d_create',0 - sz_buf2d_create_f_img db 'buf2d_create_f_img',0 - sz_buf2d_clear db 'buf2d_clear',0 - sz_buf2d_draw db 'buf2d_draw',0 - sz_buf2d_delete db 'buf2d_delete',0 - sz_buf2d_line db 'buf2d_line',0 - sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру - sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 - ;sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности - sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 - sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 - sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 - sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 - sz_buf2d_bit_blt db 'buf2d_bit_blt',0 - sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 - sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 - ;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 - sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 - sz_buf2d_draw_text db 'buf2d_draw_text',0 - ;sz_buf2d_crop_color db 'buf2d_crop_color',0 - sz_buf2d_offset_h db 'buf2d_offset_h',0 - -align 4 -import_box_lib: - dd alib_init2 - - edit_box_draw dd aEdit_box_draw - edit_box_key dd aEdit_box_key - edit_box_mouse dd aEdit_box_mouse - edit_box_set_text dd aEdit_box_set_text - - init_checkbox dd aInit_checkbox - check_box_draw dd aCheck_box_draw - check_box_mouse dd aCheck_box_mouse - - scrollbar_ver_draw dd aScrollbar_ver_draw - scrollbar_hor_draw dd aScrollbar_hor_draw - - tl_data_init dd sz_tl_data_init - tl_data_clear dd sz_tl_data_clear - tl_info_clear dd sz_tl_info_clear - tl_key dd sz_tl_key - tl_mouse dd sz_tl_mouse - tl_draw dd sz_tl_draw - tl_info_undo dd sz_tl_info_undo - tl_info_redo dd sz_tl_info_redo - tl_node_add dd sz_tl_node_add - tl_node_set_data dd sz_tl_node_set_data - tl_node_get_data dd sz_tl_node_get_data - tl_node_delete dd sz_tl_node_delete - tl_node_move_up dd sz_tl_node_move_up - tl_node_move_down dd sz_tl_node_move_down - tl_cur_beg dd sz_tl_cur_beg - tl_cur_next dd sz_tl_cur_next - tl_cur_perv dd sz_tl_cur_perv - tl_node_close_open dd sz_tl_node_close_open - tl_node_lev_inc dd sz_tl_node_lev_inc - tl_node_lev_dec dd sz_tl_node_lev_dec - tl_node_poi_get_info dd sz_tl_node_poi_get_info - tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info - tl_node_poi_get_data dd sz_tl_node_poi_get_data - - ted_but_sumb_upper dd sz_ted_but_sumb_upper - ted_but_sumb_lover dd sz_ted_but_sumb_lover - ted_can_save dd sz_ted_can_save - ted_clear dd sz_ted_clear - ted_delete dd sz_ted_delete - ted_draw dd sz_ted_draw - ted_init dd sz_ted_init - ted_init_scroll_bars dd sz_ted_init_scroll_bars - ted_init_syntax_file dd sz_ted_init_syntax_file - ted_is_select dd sz_ted_is_select - ted_key dd sz_ted_key - ted_mouse dd sz_ted_mouse - ted_open_file dd sz_ted_open_file - ted_save_file dd sz_ted_save_file - ted_text_add dd sz_ted_text_add - ted_but_select_word dd sz_ted_but_select_word - ted_but_cut dd sz_ted_but_cut - ted_but_copy dd sz_ted_but_copy - ted_but_paste dd sz_ted_but_paste - ted_but_undo dd sz_ted_but_undo - ted_but_redo dd sz_ted_but_redo - ted_but_reverse dd sz_ted_but_reverse - ted_but_find dd sz_ted_but_find - ted_text_colored dd sz_ted_text_colored - ;version_text_edit dd sz_ted_version - -dd 0,0 - - alib_init2 db 'lib_init',0 - - aEdit_box_draw db 'edit_box_draw',0 - aEdit_box_key db 'edit_box_key',0 - aEdit_box_mouse db 'edit_box_mouse',0 - aEdit_box_set_text db 'edit_box_set_text',0 - - aInit_checkbox db 'init_checkbox2',0 - aCheck_box_draw db 'check_box_draw2',0 - aCheck_box_mouse db 'check_box_mouse2',0 - - aScrollbar_ver_draw db 'scrollbar_v_draw',0 - aScrollbar_hor_draw db 'scrollbar_h_draw',0 - - sz_tl_data_init db 'tl_data_init',0 - sz_tl_data_clear db 'tl_data_clear',0 - sz_tl_info_clear db 'tl_info_clear',0 - sz_tl_key db 'tl_key',0 - sz_tl_mouse db 'tl_mouse',0 - sz_tl_draw db 'tl_draw',0 - sz_tl_info_undo db 'tl_info_undo',0 - sz_tl_info_redo db 'tl_info_redo',0 - sz_tl_node_add db 'tl_node_add',0 - sz_tl_node_set_data db 'tl_node_set_data',0 - sz_tl_node_get_data db 'tl_node_get_data',0 - sz_tl_node_delete db 'tl_node_delete',0 - sz_tl_node_move_up db 'tl_node_move_up',0 - sz_tl_node_move_down db 'tl_node_move_down',0 - sz_tl_cur_beg db 'tl_cur_beg',0 - sz_tl_cur_next db 'tl_cur_next',0 - sz_tl_cur_perv db 'tl_cur_perv',0 - sz_tl_node_close_open db 'tl_node_close_open',0 - sz_tl_node_lev_inc db 'tl_node_lev_inc',0 - sz_tl_node_lev_dec db 'tl_node_lev_dec',0 - sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 - sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 - sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 - - sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 - sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 - sz_ted_can_save db 'ted_can_save',0 - sz_ted_clear db 'ted_clear',0 - sz_ted_delete db 'ted_delete',0 - sz_ted_draw db 'ted_draw',0 - sz_ted_init db 'ted_init',0 - sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 - sz_ted_init_syntax_file db 'ted_init_syntax_file',0 - sz_ted_is_select db 'ted_is_select',0 - sz_ted_key db 'ted_key',0 - sz_ted_mouse db 'ted_mouse',0 - sz_ted_open_file db 'ted_open_file',0 - sz_ted_save_file db 'ted_save_file',0 - sz_ted_text_add db 'ted_text_add',0 - sz_ted_but_select_word db 'ted_but_select_word',0 - sz_ted_but_cut db 'ted_but_cut',0 - sz_ted_but_copy db 'ted_but_copy',0 - sz_ted_but_paste db 'ted_but_paste',0 - sz_ted_but_undo db 'ted_but_undo',0 - sz_ted_but_redo db 'ted_but_redo',0 - sz_ted_but_reverse db 'ted_but_reverse',0 - sz_ted_but_find db 'ted_but_find',0 - sz_ted_text_colored db 'ted_text_colored',0 - ;sz_ted_version db 'version_text_edit',0 - -align 4 -import_proc_lib: - 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_libimg: - dd alib_init1 - img_is_img dd aimg_is_img - img_info dd aimg_info - img_from_file dd aimg_from_file - img_to_file dd aimg_to_file - img_from_rgb dd aimg_from_rgb - img_to_rgb dd aimg_to_rgb - img_to_rgb2 dd aimg_to_rgb2 - img_decode dd aimg_decode - img_encode dd aimg_encode - img_create dd aimg_create - img_destroy dd aimg_destroy - img_destroy_layer dd aimg_destroy_layer - img_count dd aimg_count - img_lock_bits dd aimg_lock_bits - img_unlock_bits dd aimg_unlock_bits - img_flip dd aimg_flip - img_flip_layer dd aimg_flip_layer - img_rotate dd aimg_rotate - img_rotate_layer dd aimg_rotate_layer - img_draw dd aimg_draw - -dd 0,0 - - alib_init1 db 'lib_init',0 - aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение - aimg_info db 'img_info',0 - aimg_from_file db 'img_from_file',0 - aimg_to_file db 'img_to_file',0 - aimg_from_rgb db 'img_from_rgb',0 - aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB - aimg_to_rgb2 db 'img_to_rgb2',0 - aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных - aimg_encode db 'img_encode',0 - aimg_create db 'img_create',0 - aimg_destroy db 'img_destroy',0 - aimg_destroy_layer db 'img_destroy_layer',0 - aimg_count db 'img_count',0 - aimg_lock_bits db 'img_lock_bits',0 - aimg_unlock_bits db 'img_unlock_bits',0 - aimg_flip db 'img_flip',0 - aimg_flip_layer db 'img_flip_layer',0 - aimg_rotate db 'img_rotate',0 - aimg_rotate_layer db 'img_rotate_layer',0 - aimg_draw db 'img_draw',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 - -;library structures -l_libs_start: - lib0 l_libs lib0_name, library_path, system_dir0, import_box_lib - lib1 l_libs lib1_name, library_path, system_dir1, import_proc_lib - lib2 l_libs lib2_name, library_path, system_dir2, import_buf2d_lib - lib3 l_libs lib3_name, library_path, system_dir3, import_libimg - lib4 l_libs lib4_name, library_path, system_dir4, import_msgbox_lib -load_lib_end: - - -align 16 -run_file_70 FileInfoBlock -open_b rb 560 - -IncludeIGlobals -i_end: -IncludeUGlobals - procinfo process_information - buf_cmd_lin rb 1024 - file_name rb 1024 ;icon file path - fp_obj_opt rb 1024 ;obj options file patch - rb 1024 - prop_thread: - rb 1024 - thread: ;вверху дочерний стек для окна сообщения - rb 1024 -stacktop: ;вверху стек основной программы - sys_path rb 1024 - library_path rb 1024 - plugin_path rb 4096 - openfile_path rb 4096 - filename_area rb 256 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + +use32 + org 0 + db 'MENUET01' + dd 1,start,i_end,mem,stacktop,buf_cmd_lin,sys_path + +include '../../KOSfuncs.inc' +include '../../macros.inc' +include '../../proc32.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../dll.inc' +include '../../system/skincfg/kglobals.inc' +include '../../system/skincfg/unpacker.inc' +include 'strlen.inc' +include 'obj_codes.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +hed db 'kol_f_edit 29.09.20',0 + +sizeof.TreeList equ 20 ;need for element 'tree_list' + +BUF_STRUCT_SIZE equ 21 +buf2d_data equ dword[edi] ;данные буфера изображения +buf2d_w equ dword[edi+8] ;ширина буфера +buf2d_h equ dword[edi+12] ;высота буфера +buf2d_l equ word[edi+4] ;отступ слева +buf2d_t equ word[edi+6] ;отступ сверху +buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера +buf2d_color equ dword[edi+16] ;цвет фона буфера +buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения + + +MAX_CED_OBJECTS equ 200 +MAX_OPT_FIELDS equ 11 +MAX_OBJ_TYPES equ 17 ;максимальное число объектов +MAX_OBJ_CAPTIONS equ 1000 ;размер дополнительных подписей подписей +WND_CAPT_COLOR equ 0xb0d0ff +BUF_SIZE equ 1000 + +;modif +BIT_MOD_ACI equ 0 ;первоначальные настройки элементов +BIT_MOD_ACM equ 1 ;события от мыши +BIT_MOD_ACD equ 2 ;данные объектов +BIT_MOD_ABU equ 3 ;связывание кнопок +BIT_MOD_WI_CAPT equ 0 ;стиль окна подпись +BIT_MOD_WI_CORD_OTN_CL_OBL equ 1 ;стиль окна координаты относительно клиентской области +BIT_MOD_WI_REDR equ 2 ;стиль окна перерисовка окна +BIT_MOD_WI_GRAD equ 3 ;стиль окна градиент +BIT_MOD_CHE equ 0 ; ch_flag_en - выбран CheckBox +BIT_MOD_CHE_T equ 1 ;сверху +BIT_MOD_CHE_M equ 2 ;по центру +BIT_MOD_CHE_B equ 3 ;снизу +BIT_MOD_TXT_ASCII_0 equ 0 ;текст заканчив. 0 +BIT_MOD_TXT_NO_TRAN equ 1 ;текст прозрачный +BIT_MOD_TXT_CHAR2 equ 2 ;текст 2-м шрифтом +BIT_MOD_EDIT_FOC equ 0 ;EditBox в фокусе +BIT_MOD_EDIT_FIO equ 1 ; +;CPP_MOD_RE_GR equ 1 ;градиентный прямоугольник +BIT_MOD_BUT_NFON equ 0 ;стиль Button не рисовать кнопку +BIT_MOD_BUT_NBORD equ 1 ;стиль Button не рисовать границу +BIT_MOD_IMPORT_FUNCT_COMMENT equ 0 ;коментировать функцию + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0 + else + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], eax + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mcall 70,run_file_70 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall [img_decode], [buf],ebx,0 + mov [image_data],eax + ;преобразуем изображение к формату rgb + stdcall [img_to_rgb2], [image_data],[buf] + ;удаляем временный буфер image_data + stdcall [img_destroy], [image_data] + @@: +} + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + rezerv db ? + FileName dd ? +ends + +struct object + id dd ? ;идентификатор объекта + txt rb MAX_LEN_OBJ_TXT ;текстовые свойства + lvl db 0 + clo db 0 + typid dd ? ;номер объекта определяющего тип переменной + modif dd ? ;битовые свойства +ends + +struct ObjOpt + dd ? + bl_type db ? + graph db ? + info rb 30 + caption rb MAX_OPT_CAPTION + Col rw MAX_OPT_FIELDS + img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp') + bit_prop dd 0 ;битовые свойства (подписи, названия) + bit_val dd 0 ;битовые свойства (значения, константы) +ends + +SKIN_H equ 22 +SKIN_W1 equ 5 +SKIN_W2 equ 7 +SKIN_W3 equ 23 +fn_skin_1 db 'left.bmp',0 +fn_skin_2 db 'base.bmp',0 +fn_skin_3 db 'oper.bmp',0 +IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54 +IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54 +IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54 + +IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом + +fn_icon db 'icon.bmp',0 +count_main_icons equ 35 ;число иконок в файле icon.bmp +bmp_icon rb 0x300*count_main_icons + +TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками +icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок +icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта + +fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса + +;макрос для проверки битового свойства +macro test_bool_prop obj_reg,n_prop +{ + bt dword[obj_reg+u_object.modif-u_object],n_prop +} + +include 'ced_wnd_m.inc' +include 'ced_wnd_prop.inc' ;файл с функциями окна свойств объекта +include 'ced_constr.inc' ;файл с функциями окна конструктора +include 'ced_code_g.inc' ;файл с функциями генерирования кодов + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась наша либа + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib1 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib2 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib3 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + + ;задание размеров полей со свойствами + mov eax,prop_edits_top + mov ebx,16+6 ;ширина иконки + отступы + mov edi,edit2 + @@: + mov ed_top,eax ;отступ сверху + mov ed_left,ebx ;отступ слева + add edi,ed_struc_size + add eax,prop_edits_height + cmp edi,prop_wnd_edits_end + jl @b + + stdcall [buf2d_create], buf_fon + + mcall 48,3,sc,sizeof.system_colors + mcall 40,0x27 + + stdcall [tl_data_init], tree1 + stdcall [tl_data_init], tree2 + + copy_path fn_icon,sys_path,file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 54 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], 0x300*count_main_icons + mov [run_file_70.Buffer], bmp_icon + mov [run_file_70.rezerv], 0 + mov [run_file_70.FileName], file_name + mcall 70,run_file_70 + + cmp ebx,-1 + mov [err_ini0],1 + je @f ;if open file + mov [err_ini0],0 + mov dword[tree1.data_img],bmp_icon + mov dword[tree2.data_img],bmp_icon + @@: + + ;системные иконки 16*16 для tree_list + load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE + ;если изображение не открылось, то в icon_tl_sys будут + ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img_sys],eax + mov dword[tree2.data_img_sys],eax + + ;1-й файл скина + load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE + stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;2-й файл скина + load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE + stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;3-й файл скина + load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE + stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + + ;символы 1-го системного шрифта + load_image_file 'font6x9.bmp', icon_font_s1,IMAGE_FILE_FONT1_SIZE + stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_font + + + copy_path fn_obj_opt,sys_path,fp_obj_opt,0 + ;load options file + mov [run_file_70.Position], 0 + mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES+MAX_OBJ_CAPTIONS + mov [run_file_70.Buffer], obj_opt + mov [run_file_70.FileName], fp_obj_opt + mcall 70,run_file_70 + + cmp ebx,-1 + mov [err_ini1],1 + je .open_end ;jmp if not open file + mov [err_ini1],0 + + mov eax,obj_opt ;добавляем объекты + @@: + mov ebx,dword[eax] + cmp ebx,0 + je @f + ;xor ecx,ecx ;в ecx будет индекс иконки + mov cx,word[eax+obj_opt.img-obj_opt] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 + stdcall dword[tl_node_add], tree1,ecx,eax ;добавляем название объекта + stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.ObjOpt ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх + + .open_end: + + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + stdcall [ted_init], tedit0 + copy_path fn_syntax,sys_path,file_name,0 + + ; *** init syntax file *** + ; проверяем размер файла синтаксиса + mov [run_file_70.Function], 5 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], 0 + mov dword[run_file_70.Buffer], open_b + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], file_name + mcall 70,run_file_70 + cmp eax,0 + jne @f + + mov edi,tedit0 + mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах + mov ted_syntax_file_size,ecx + + stdcall mem.Alloc,ecx ;выделяем память для файла синтаксиса + mov ted_syntax_file,eax + + ;пробуем открыть файл синтаксиса + call open_unpac_synt_file + jmp .end_0 + @@: + notify_window_run txt_not_syntax_file + .end_0: + + ;get cmd line + cmp [buf_cmd_lin],0 + je @f ;if file names exist + mov esi,buf_cmd_lin + call strlen ;eax=strlen + mov edi,[edit1.text] + mov [edit1.size],eax + mov ecx,eax + rep movsb + call but_open_proj + @@: + + + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + + cmp al,1 + jne @f + call draw_window + @@: + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jne @f + call mouse + @@: + + jmp still + +align 4 +draw_window: +pushad + mcall 12,1 + + xor eax,eax + mov ebx,20*65536+670 + mov ecx,20*65536+370 + mov edx,[sc.work] + or edx,0x33000000 + mov edi,hed + int 0x40 + + mov eax,8 ;button 'Open Project' + mov esi,0x80ff + mov ebx,230*65536+18 + mov ecx,5*65536+18 + mov edx,5 + int 0x40 + stdcall draw_icon, 22,231,6 ;22 - open + + ;button 'Save Project' + mov ebx,250*65536+18 + mov ecx,5*65536+18 + mov edx,6 + int 0x40 + stdcall draw_icon, 17,251,6 ;17 - save + + ;button 'Show Constructor' + mov ebx,310*65536+18 + mov ecx,5*65536+18 + mov edx,11 + int 0x40 + stdcall draw_icon, 12,311,6 ;12 - window + + ;button 'Show Code' + mov ebx,330*65536+18 + mov edx,12 + int 0x40 + stdcall draw_icon, 11,331,6 ;11 - text + + ;button 'Update: Code, Constructor' + mov ebx,350*65536+18 + mov edx,13 + int 0x40 + stdcall draw_icon, 32,351,6 ;32 - update + + ;button 'Save Code' + mov ebx,370*65536+18 + mov edx,14 + int 0x40 + stdcall draw_icon, 17,371,6 ;17 - save + + ;button ']P' + mov ebx,390*65536+18 + mov edx,15 + int 0x40 + stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца + + ;button 'Show color text' + mov ebx,410*65536+18 + mov edx,16 + int 0x40 + stdcall draw_icon, 19,411,6 + + ;button 'Add Object' + mov ebx,125*65536+18 + mov ecx,30*65536+18 + mov edx,31 + int 0x40 + stdcall draw_icon, 14,126,31 ;14 - add object + + ;button 'Move Up' + mov ebx,155*65536+18 + mov edx,21 + int 0x40 + stdcall draw_icon, 23,156,31 ;23 - move up + + ;button 'Move Down' + mov ebx,175*65536+18 + mov edx,22 + int 0x40 + stdcall draw_icon, 24,176,31 ;24 - move down + + ;button 'Copy' + mov ebx,195*65536+18 + mov edx,23 + int 0x40 + stdcall draw_icon, 30,196,31 ;30 - copy + + ;button 'Paste' + mov ebx,215*65536+18 + mov edx,24 + int 0x40 + stdcall draw_icon, 31,216,31 ;31 - paste + + ;button 'Property' + mov ebx,235*65536+18 + mov edx,25 + int 0x40 + stdcall draw_icon, 7,236,31 ;7 - property + + ;button 'Undo' + mov ebx,255*65536+18 + mov edx,26 + int 0x40 + stdcall draw_icon, 33,256,31 ;33 - undo + + ;button 'Redo' + mov ebx,275*65536+18 + mov edx,27 + int 0x40 + stdcall draw_icon, 34,276,31 ;34 - redo + +; 10 30 50 70 90 + + cmp [err_opn],1 + jne @f + mcall 4,10*65536+35,0x80ff0000,txtErrOpen + @@: + + stdcall [edit_box_draw], edit1 + stdcall [edit_box_draw], edit_sav + + mov dword[w_scr_t1.all_redraw],1 + ;stdcall [scrollbar_ver_draw], w_scr_t1 + stdcall [tl_draw], tree1 + mov dword[w_scr_t2.all_redraw],1 + ;stdcall [scrollbar_ver_draw], w_scr_t2 + stdcall [tl_draw], tree2 + + cmp byte[show_mode],0 ;условие видимости окна конструктора + jne @f + stdcall [buf2d_draw], buf_fon + @@: + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw], tedit0 + @@: + mcall 12,2 +popad + ret + +align 4 +mouse: + stdcall [edit_box_mouse], edit1 + stdcall [edit_box_mouse], edit_sav + stdcall [tl_mouse], tree1 + stdcall [tl_mouse], tree2 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_mouse], tedit0 + @@: + ret + + +align 4 +key: + mcall 2 + stdcall [edit_box_key], edit1 + stdcall [edit_box_key], edit_sav + stdcall [tl_key], tree1 + stdcall [tl_key], tree2 + + jmp still + +align 4 +button: + mcall 17 + cmp ah,5 + jne @f + call but_open_proj + jmp still + @@: + cmp ah,6 + jne @f + call but_save_proj + jmp still + @@: + ;cmp ah,10 + ;jne @f + ;call but_element_change + ;@@: + cmp ah,11 + jne @f + call but_show_constructor + jmp still + @@: + cmp ah,12 + jne @f + call but_show_code + jmp still + @@: + cmp ah,13 + jne @f + call but_update + jmp still + @@: + cmp ah,14 + jne @f + call but_save_asm + jmp still + @@: + cmp ah,15 + jne @f + call but_show_invis + jmp still + @@: + cmp ah,16 + jne @f + call but_show_syntax + jmp still + @@: + cmp ah,21 + jne @f + call but_obj_move_up + jmp still + @@: + cmp ah,22 + jne @f + call but_obj_move_down + jmp still + @@: + cmp ah,23 + jne @f + call but_obj_copy + jmp still + @@: + cmp ah,24 + jne @f + call but_obj_paste + jmp still + @@: + cmp ah,25 + jne @f + call on_file_object_select + jmp still + @@: + cmp ah,26 + jne @f + stdcall [tl_info_undo], tree2 + stdcall [tl_draw], tree2 + jmp still + @@: + cmp ah,27 + jne @f + stdcall [tl_info_redo], tree2 + stdcall [tl_draw], tree2 + jmp still + @@: + cmp ah,31 + jne @f + call on_add_object + jmp still + @@: + cmp ah,1 + jne still +.exit: + stdcall mem.Free,[icon_tl_sys] + mov dword[tree1.data_img],0 + mov dword[tree2.data_img],0 + mov dword[tree1.data_img_sys],0 + mov dword[tree2.data_img_sys],0 + stdcall dword[tl_data_clear], tree1 + stdcall dword[tl_data_clear], tree2 + stdcall [buf2d_delete],buf_fon ;удаляем буфер + stdcall [buf2d_delete],buf_font ;удаляем буфер + stdcall [buf2d_delete],buf_skin1 + stdcall [buf2d_delete],buf_skin2 + stdcall [buf2d_delete],buf_skin3 + stdcall [ted_delete], tedit0 + cmp dword[unpac_mem],0 + je @f + stdcall mem.Free,[unpac_mem] + @@: + mcall -1 + +align 4 +open_file_data dd 0 ;указатель на память для открытия файлов +open_file_size dd 0 ;размер открытого файла + +align 4 +but_open_proj: + copy_path open_dialog_name,communication_area_default_path,file_name,0 + pushad + mov [OpenDialog_data.type],0 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .open_end + ;код при удачном открытии диалога + + mov [run_file_70.Function], 5 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], 0 + mov dword[run_file_70.Buffer], open_b + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 + + mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах + mov [open_file_size],ecx + stdcall mem.ReAlloc,[open_file_data],ecx + mov [open_file_data],eax + + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], ecx + m2m dword[run_file_70.Buffer], eax + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 ;загружаем файл + cmp ebx,0xffffffff + mov [err_opn],1 + je .open_end ;if open file + mov [err_opn],0 + stdcall [edit_box_set_text], edit1,openfile_path + + stdcall dword[tl_info_clear], tree2 + mov eax,[open_file_data] ;добавляем объекты + @@: + mov ebx,dword[eax] + cmp ebx,0 + je @f + + call find_obj_in_opt ;edi = pointer to ObjOpt struct + + mov cx,word[edi+obj_opt.img-obj_opt] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 ;в ecx индекс иконки + mov cl,byte[eax+u_object.lvl-u_object] ;уровень объекта + + ;tl_node_close_open - не подходит, т.к. действует на узлы имеющие дочерние + mov ch,byte[eax+u_object.clo-u_object] ;закрытый/открытый + + stdcall dword[tl_node_add], tree2,ecx,eax ;добавляем объект + + stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.object ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх + + mov [foc_obj],0 + call draw_constructor + call code_gen + .open_end: + call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся + popad + ret + +;сохранение файла проэкта на диск +align 4 +but_save_proj: + copy_path open_dialog_name,communication_area_default_path,file_name,0 + pushad + mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_save_file + ;код при удачном открытии диалога + + ;берем размер памяти, необходимой для сохранения файла + xor ecx,ecx + stdcall [tl_node_poi_get_info], tree2,0 + @@: + cmp eax,0 + je @f + inc ecx + stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу + jmp @b + @@: + ;movzx eax,word[tree2.info_size] + imul ecx,sizeof.object ;eax + add ecx,4 ;метка конца файла + mov [open_file_size],ecx + stdcall mem.ReAlloc,[open_file_data],ecx + mov [open_file_data],eax + + mov edi,[open_file_data] + stdcall [tl_node_poi_get_info], tree2,0 + mov edx,eax + @@: + cmp edx,0 + je @f + stdcall [tl_node_poi_get_data], tree2,edx + mov esi,eax ;получаем данные узла + + mov bl,byte[edx+2] ;bl - уровень объекта + mov byte[esi+u_object.lvl-u_object],bl + mov bl,byte[edx+3] ;bl - открытие/закрытие объекта + mov byte[esi+u_object.clo-u_object],bl + + ;вычисляем новый индекс для типа объекта + mov ebx,[esi+u_object.typid-u_object] ;ebx - тип объекта + ;сохраняем тип объекта + push ebx + imul ebx,sizeof.TreeList + add ebx,[tree2.data_nodes] ;ebx - указатель объект указывающий тип + stdcall get_obj_npp,ebx + mov [esi+u_object.typid-u_object],eax + mov eax,esi + ;копируем объект в память для сохранения + movzx ecx,word[tree2.info_size] + cld + rep movsb + ;восстанавливаем тип объекта + pop dword[eax+u_object.typid-u_object] + + stdcall [tl_node_poi_get_next_info], tree2,edx + mov edx,eax ;переходим к следущему узлу + jmp @b + @@: + mov dword[edi],0 ;метка конца файла + add edi,4 + + stdcall [edit_box_set_text], edit1,openfile_path + mov ecx,[open_file_size] ;ecx - размер сохраняемого файла + mov [run_file_70.Function], 2 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], ecx + m2m [run_file_70.Buffer], [open_file_data] + mov [run_file_70.rezerv], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 + + .end_save_file: + popad + ret + +;берет номер по порядку по указателю на структуру объекта +;output: +; eax - номер объекта +align 4 +proc get_obj_npp uses ebx ecx, p_obj_str:dword + mov ecx,2 + mov ebx,[p_obj_str] + + stdcall [tl_node_poi_get_info], tree2,0 + @@: + cmp eax,0 + je .no_exist + cmp eax,ebx + je @f + + inc ecx + stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу + jmp @b + .no_exist: ;когда идет ссылка на не существующий объект + xor ecx,ecx ;обнуляем указатель, что-бы не сохранять в файл мусор + @@: + mov eax,ecx + ret +endp + +;функция для сохранения созданного asm файла +align 4 +but_save_asm: + push edi + mov edi, tedit0 + + stdcall [ted_save_file],edi,run_file_70,[edit_sav.text] + cmp ted_err_save,0 + jne @f + stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен + @@: + pop edi + ret + +;функция для показа/скрытия невидимых символов +align 4 +but_show_invis: + push edi + mov edi,tedit0 + + xor ted_mode_invis,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +; +align 4 +but_show_syntax: + push edi + mov edi,tedit0 + + xor ted_mode_color,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +align 4 +ted_save_err_msg: + mov byte[msgbox_0.err],al + stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file! + ret + +;функция вызываемая при нажатии Enter в окне tree2 +;обновляет текстовые поля значениями параметров взятых из объектов +;функция обратная к данной but_element_change +align 4 +on_file_object_select: + cmp byte[prop_wnd_run],0 + jne @f + mov byte[prop_wnd_run],1 + stdcall [tl_node_get_data], tree2 + mov dword[foc_obj],eax + cmp eax,0 + je @f + pushad + ;все действия по настройке элементов управления выполняются в окне со свойствами + mcall 51,1,prop_start,prop_thread + popad + @@: + ;call draw_window + ret + +;функция вызываемая при нажатии Enter в окне tree1 +;добавляет новый объект в окно tree2 +align 4 +on_add_object: +push eax ebx ecx + stdcall [tl_node_get_data], tree1 + cmp eax,0 + je @f + xor ecx,ecx + mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта + + cmp ecx,count_main_icons ;в старших битах ecx будут 0, потому отрицательные числа тоже проверяются + jl .end_0 + ;если иконки нет, по умолчанию берем 0-ю + xor cx,cx + .end_0: + + shl ecx,16 + stdcall mem_clear, u_object,sizeof.object + mov ebx,dword[eax] + mov dword[u_object.id],ebx + stdcall dword[tl_node_add], tree2,ecx,u_object ;добавляем объект + @@: +pop ecx ebx eax + call draw_window + ret + +align 4 +but_ctrl_o: + ret +align 4 +but_ctrl_n: + ret +align 4 +but_ctrl_s: + ret + +;открытие и распаковка файла подсветки синтаксиса +;input: +; ted_syntax_file - буфер для открываемого файла синтаксиса +; ted_syntax_file_size - размер открываемого файла синтаксиса +;output: +; ebx - число прочитанных байт из файла +align 4 +open_unpac_synt_file: +push eax edi esi + mov edi, tedit0 + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov ecx, ted_syntax_file_size + mov dword[run_file_70.Count], ecx + m2m dword[run_file_70.Buffer], ted_syntax_file + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mcall 70, run_file_70 + cmp ebx,-1 + jne .end_0 + ;если возникли ошибки при открытии файла синтаксиса + mov byte[txt_not_syntax_file.err],'0' + add byte[txt_not_syntax_file.err],al + notify_window_run txt_not_syntax_file ;Can-t open color options file! + jmp @f + .end_0: + + mov eax,ted_syntax_file + cmp dword[eax],'KPCK' + jne .end_unpack + + mov ecx,dword[eax+4] ;ecx - размер файла синтаксиса после распаковки + cmp dword[unpac_mem],0 + jne .end_1 + ;первоначальное выделение временной памяти для распаковки файла + stdcall mem.Alloc,ecx + mov [unpac_mem],eax + mov [unpac_mem_size],ecx + .end_1: + cmp dword[unpac_mem_size],ecx + jge .end_2 + ;если для распакованого файла не хватает временной памяти + stdcall mem.ReAlloc,[unpac_mem],ecx ;заново выделяем временную память + mov [unpac_mem],eax + mov [unpac_mem_size],ecx + .end_2: + + ;распаковка файла во временную память + stdcall unpack,ted_syntax_file,[unpac_mem] + + cmp ted_syntax_file_size,ecx + jge .end_3 + ;если для распакованого файла не хватает памяти + stdcall mem.ReAlloc,ted_syntax_file,ecx ;заново выделяем память + mov ted_syntax_file,eax + mov ted_syntax_file_size,ecx + .end_3: + + ;копирование распакованного файла из временной памяти в память элемента + mov edi,ted_syntax_file + mov esi,[unpac_mem] + cld + rep movsb + + .end_unpack: + ;применение файла подсветки + stdcall [ted_init_syntax_file], tedit0 + @@: +pop esi edi eax + ret + +align 4 +txt_not_syntax_file: + db 'Ошибка при открытии файла с цветовыми настройками! (Код ошибки =' + .err: db '?' + db ')',0 + +align 4 +buf_fon: ;фоновый буфер + dd 0 ;указатель на буфер изображения + dw 310 ;+4 left + dw 50 ;+6 top + dd 340 ;+8 w + dd 280 ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_font: ;буфер матрицы со шрифтом + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 96 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_skin1: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W1 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin2: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W2 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin3: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W3 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +show_mode db 0 ;режим для показа определенного окна +txtErrOpen db 'Не найден файл, проверьте правильность имени',0 +txtErrIni1 db 'Не открылся файл с опциями',0 +err_opn db 0 ;рез. открытия файла проэкта +err_ini0 db 0 ;рез. открытия файла с иконками +err_ini1 db 0 ;рез. открытия файла с опциями +unpac_mem dd 0 +unpac_mem_size dd 0 + +edit1 edit_box 210, 10, 5, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7 + +edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0 +edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0 +edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0 +edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0 +edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0 +edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0 +edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0 +edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0 +edit10 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text10, mouse_dd, 0 +edit11 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text11, mouse_dd, 0 +edit12 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text12, mouse_dd, 0 +prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства + +edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0 + + +ed_text1 db '/hd0/1/',0 + rb 295 +ed_text2 rb MAX_LEN_OBJ_TXT+2 +ed_text3 rb MAX_LEN_OBJ_TXT+2 +ed_text4 rb MAX_LEN_OBJ_TXT+2 +ed_text5 rb MAX_LEN_OBJ_TXT+2 +ed_text6 rb MAX_LEN_OBJ_TXT+2 +ed_text7 rb MAX_LEN_OBJ_TXT+2 +ed_text8 rb MAX_LEN_OBJ_TXT+2 +ed_text9 rb MAX_LEN_OBJ_TXT+2 +ed_text10 rb MAX_LEN_OBJ_TXT+2 +ed_text11 rb MAX_LEN_OBJ_TXT+2 +ed_text12 rb MAX_LEN_OBJ_TXT+2 +ed_text_sav rb 302 + +txt_null db 'null',0 +mouse_dd dd ? + +el_focus dd tree1 +;дерево со списком возможных типов объектов +tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,50,125,280, 0,obj_opt.info-obj_opt,0, el_focus,\ + w_scr_t1,on_add_object +;дерево с объектами в пользовательском файле +tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 155,50,130,280, 13,u_object.txt-u_object,MAX_LEN_OBJ_TXT, el_focus,\ + w_scr_t2,on_file_object_select + +msgbox_0: + 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_1: + db 1,0 + db ':)',0 + db 'File was saved',0 + db 'Ok',0 + db 0 + +struct TexSelect + x0 dd ? + y0 dd ? + x1 dd ? + y1 dd ? +ends +;------------------------------------------------------------------------------ +align 4 +tedit0: ;структура текстового редактора + .wnd BOX 310,50,325,260 ;+ 0 + .rec BOX 30,13,7,10 ;+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 25002 ;+86 максимальное число символов в одном документе + .count_colors_text dd 1 ;+90 колличество цветов текста + .count_key_words dd 0 ;+94 колличество ключевых слов + .color_cursor dd 0xff0000 ;+98 цвет курсора + .color_wnd_capt dd 0x0080c0 ;+102 цвет полей вокруг окна + .color_wnd_work dd 0x0 ;+106 цвет фона окна + .color_wnd_bord dd 0xffffff ;+110 цвет текста на полях + .color_select dd 0x0000ff ;+114 цвет выделения + .color_cur_text dd 0xffff00 ;+118 цвет символа под курсором + .color_wnd_text dd 0x80ffff ;+122 цвет текста в окне + .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса + .syntax_file_size dd 55*1024 ;+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 scrol_w1 ;+174 вертикальный скроллинг + .scr_h dd scrol_h1 ;+178 горизонтальный скроллинг + .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов + .buffer dd text_buffer ;+186 указатель на буфер копирования/вставки + .buffer_find dd 0 ;+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_o dd but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) + .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска) + .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа) + .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S + .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки + .fun_find_err dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно + .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса + .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками + .fun_draw_panel_find dd 0 ;+230 указатель на функцию рисования панели поиска + .fun_draw_panel_syntax dd 0 ;+234 указатель на функцию рисования панели синтаксиса + .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно + .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке + .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) +;------------------------------------------------------------------------------ +align 4 +scrol_w1: +.x: +.size_x dw 16 ;+0 +.start_x dw 85 ;+2 +.y: +.size_y dw 100 ; +4 +.start_y dw 15 ; +6 +.btn_high dd 15 ; +8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0x808080 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +align 4 +scrol_h1: +.x: +.size_x dw 85 ;+0 +.start_x dw 30 ;+2 +.y: +.size_y dw 16 ;+4 +.start_y dw 100 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0x808080 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + + + +align 4 +w_scr_t1: +.size_x dw 16 ;+0 +rb 2+2+2 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +rb 4+2+2 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +align 4 +w_scr_t2: +.size_x dw 16 ;+0 +rb 2+2+2 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +rb 4+2+2 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +;данные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.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 'CED',0 +db 'ASM',0 +.end: +db 0 + + +data_of_code dd 0 +sc system_colors + +image_data dd 0 ;память для преобразования картинки функциями libimg + +text_buffer db BUF_SIZE dup(0) +fn_obj_opt db 'ob_o.opt',0 +obj_opt ObjOpt + rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1)+MAX_OBJ_CAPTIONS + db 0 ;eof options + +cur_x dd 0 +cur_y dd 0 +foc_obj dd 0 ;объект в фокусе +obj_count_txt_props dd 0 ;количество используемых текстовых свойств +obj_m_win dd 0 ;структура главного окна + + system_dir0 db '/sys/lib/' + lib0_name db 'box_lib.obj',0 + + system_dir1 db '/sys/lib/' + lib1_name db 'proc_lib.obj',0 + + system_dir2 db '/sys/lib/' + lib2_name db 'buf2d.obj',0 + + system_dir3 db '/sys/lib/' + lib3_name db 'libimg.obj',0 + + system_dir4 db '/sys/lib/' + lib4_name db 'msgbox.obj',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + ;buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + ;buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + ;buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h +dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + ;sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + ;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + ;sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + +align 4 +import_box_lib: + dd alib_init2 + + edit_box_draw dd aEdit_box_draw + edit_box_key dd aEdit_box_key + edit_box_mouse dd aEdit_box_mouse + edit_box_set_text dd aEdit_box_set_text + + init_checkbox dd aInit_checkbox + check_box_draw dd aCheck_box_draw + check_box_mouse dd aCheck_box_mouse + + scrollbar_ver_draw dd aScrollbar_ver_draw + scrollbar_hor_draw dd aScrollbar_hor_draw + + tl_data_init dd sz_tl_data_init + tl_data_clear dd sz_tl_data_clear + tl_info_clear dd sz_tl_info_clear + tl_key dd sz_tl_key + tl_mouse dd sz_tl_mouse + tl_draw dd sz_tl_draw + tl_info_undo dd sz_tl_info_undo + tl_info_redo dd sz_tl_info_redo + tl_node_add dd sz_tl_node_add + tl_node_set_data dd sz_tl_node_set_data + tl_node_get_data dd sz_tl_node_get_data + tl_node_delete dd sz_tl_node_delete + tl_node_move_up dd sz_tl_node_move_up + tl_node_move_down dd sz_tl_node_move_down + tl_cur_beg dd sz_tl_cur_beg + tl_cur_next dd sz_tl_cur_next + tl_cur_perv dd sz_tl_cur_perv + tl_node_close_open dd sz_tl_node_close_open + tl_node_lev_inc dd sz_tl_node_lev_inc + tl_node_lev_dec dd sz_tl_node_lev_dec + tl_node_poi_get_info dd sz_tl_node_poi_get_info + tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info + tl_node_poi_get_data dd sz_tl_node_poi_get_data + + ted_but_sumb_upper dd sz_ted_but_sumb_upper + ted_but_sumb_lover dd sz_ted_but_sumb_lover + ted_can_save dd sz_ted_can_save + ted_clear dd sz_ted_clear + ted_delete dd sz_ted_delete + ted_draw dd sz_ted_draw + ted_init dd sz_ted_init + ted_init_scroll_bars dd sz_ted_init_scroll_bars + ted_init_syntax_file dd sz_ted_init_syntax_file + ted_is_select dd sz_ted_is_select + ted_key dd sz_ted_key + ted_mouse dd sz_ted_mouse + ted_open_file dd sz_ted_open_file + ted_save_file dd sz_ted_save_file + ted_text_add dd sz_ted_text_add + ted_but_select_word dd sz_ted_but_select_word + ted_but_cut dd sz_ted_but_cut + ted_but_copy dd sz_ted_but_copy + ted_but_paste dd sz_ted_but_paste + ted_but_undo dd sz_ted_but_undo + ted_but_redo dd sz_ted_but_redo + ted_but_reverse dd sz_ted_but_reverse + ted_but_find dd sz_ted_but_find + ted_text_colored dd sz_ted_text_colored + ;version_text_edit dd sz_ted_version + +dd 0,0 + + alib_init2 db 'lib_init',0 + + aEdit_box_draw db 'edit_box_draw',0 + aEdit_box_key db 'edit_box_key',0 + aEdit_box_mouse db 'edit_box_mouse',0 + aEdit_box_set_text db 'edit_box_set_text',0 + + aInit_checkbox db 'init_checkbox2',0 + aCheck_box_draw db 'check_box_draw2',0 + aCheck_box_mouse db 'check_box_mouse2',0 + + aScrollbar_ver_draw db 'scrollbar_v_draw',0 + aScrollbar_hor_draw db 'scrollbar_h_draw',0 + + sz_tl_data_init db 'tl_data_init',0 + sz_tl_data_clear db 'tl_data_clear',0 + sz_tl_info_clear db 'tl_info_clear',0 + sz_tl_key db 'tl_key',0 + sz_tl_mouse db 'tl_mouse',0 + sz_tl_draw db 'tl_draw',0 + sz_tl_info_undo db 'tl_info_undo',0 + sz_tl_info_redo db 'tl_info_redo',0 + sz_tl_node_add db 'tl_node_add',0 + sz_tl_node_set_data db 'tl_node_set_data',0 + sz_tl_node_get_data db 'tl_node_get_data',0 + sz_tl_node_delete db 'tl_node_delete',0 + sz_tl_node_move_up db 'tl_node_move_up',0 + sz_tl_node_move_down db 'tl_node_move_down',0 + sz_tl_cur_beg db 'tl_cur_beg',0 + sz_tl_cur_next db 'tl_cur_next',0 + sz_tl_cur_perv db 'tl_cur_perv',0 + sz_tl_node_close_open db 'tl_node_close_open',0 + sz_tl_node_lev_inc db 'tl_node_lev_inc',0 + sz_tl_node_lev_dec db 'tl_node_lev_dec',0 + sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 + sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 + sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 + + sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 + sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 + sz_ted_can_save db 'ted_can_save',0 + sz_ted_clear db 'ted_clear',0 + sz_ted_delete db 'ted_delete',0 + sz_ted_draw db 'ted_draw',0 + sz_ted_init db 'ted_init',0 + sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 + sz_ted_init_syntax_file db 'ted_init_syntax_file',0 + sz_ted_is_select db 'ted_is_select',0 + sz_ted_key db 'ted_key',0 + sz_ted_mouse db 'ted_mouse',0 + sz_ted_open_file db 'ted_open_file',0 + sz_ted_save_file db 'ted_save_file',0 + sz_ted_text_add db 'ted_text_add',0 + sz_ted_but_select_word db 'ted_but_select_word',0 + sz_ted_but_cut db 'ted_but_cut',0 + sz_ted_but_copy db 'ted_but_copy',0 + sz_ted_but_paste db 'ted_but_paste',0 + sz_ted_but_undo db 'ted_but_undo',0 + sz_ted_but_redo db 'ted_but_redo',0 + sz_ted_but_reverse db 'ted_but_reverse',0 + sz_ted_but_find db 'ted_but_find',0 + sz_ted_text_colored db 'ted_text_colored',0 + ;sz_ted_version db 'version_text_edit',0 + +align 4 +import_proc_lib: + 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_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + +dd 0,0 + + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',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 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, library_path, system_dir0, import_box_lib + lib1 l_libs lib1_name, library_path, system_dir1, import_proc_lib + lib2 l_libs lib2_name, library_path, system_dir2, import_buf2d_lib + lib3 l_libs lib3_name, library_path, system_dir3, import_libimg + lib4 l_libs lib4_name, library_path, system_dir4, import_msgbox_lib +load_lib_end: + + +align 16 +run_file_70 FileInfoBlock +open_b rb 560 + +IncludeIGlobals +i_end: +IncludeUGlobals + procinfo process_information + buf_cmd_lin rb 1024 + file_name rb 1024 ;icon file path + fp_obj_opt rb 1024 ;obj options file patch + rb 1024 + prop_thread: + rb 1024 + thread: ;вверху дочерний стек для окна сообщения + rb 1024 +stacktop: ;вверху стек основной программы + sys_path rb 1024 + library_path rb 1024 + plugin_path rb 4096 + openfile_path rb 4096 + filename_area rb 256 +mem: diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index 265fe11fa..95c13c051 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -1,410 +1,416 @@ -;***************************************************************************** -; Box_Lib - library of graphical components -; Copyright (C) KolibriOS team 2008-2020. All rights reserved. -; -; Authors: -; Alexey Teplov aka -; Marat Zakiyanov aka Mario79, aka Mario -; Evtikhov Maxim aka Maxxxx32 -; Eugene Grechnikov aka Diamond -; hidnplayr -; Igor Afanasiev aka IgorA -;***************************************************************************** - -format MS COFF - -public EXPORTS - -section '.flat' code readable align 16 -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' -include 'box_lib.mac' ;macro which should make life easier :) -;include '../../../../debug.inc' -include 'keys.inc' -include '../../../../system/skincfg/trunk/kglobals.inc' -include '../../../../system/skincfg/trunk/unpacker.inc' - -;----------------------------------------------------------------------------- -mem.alloc dd ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш -mem.free dd ? ;ЇєэъЎш  фы  юётюсюцфхэш  ярь Єш -mem.realloc dd ? ;ЇєэъЎш  фы  яхЁхЁрёяЁхфхыхэш  ярь Єш -dll.load dd ? - -;---------------------------------------------------- -include 'editbox.asm' ;editbox -include 'checkbox.asm' ;checkbox -include 'optionbox.asm' ;optionbox -include 'scrollbar.asm' ;scrollbar -include 'd_button.asm' ;dinamic_button -include 'menubar.asm' ;menubar -include 'filebrowser.asm' ;filebrowser -include 'tree_list.asm' ;tree_list, list_box -include 'pathshow.asm' ;pathshow -include 't_edit.asm' ;text_editor -include 'frame.asm' ;frame -include 'progressbar.asm' ;progressbar -include 'tooltip.asm' ;tooltip -;-------------------------------------------------- - -;input: -; eax = єърчрЄхы№ эр ЇєэъЎш■ т√фхыхэш  ярь Єш -; ebx = ... юётюсюцфхэш  ярь Єш -; ecx = ... яхЁхЁрёяЁхфхыхэш  ярь Єш -; edx = ... чруЁєчъш сшсышюЄхъш (яюър эх шёяюы№чєхЄё ) -align 16 -lib_init: - mov [mem.alloc], eax - mov [mem.free], ebx - mov [mem.realloc], ecx - mov [dll.load], edx -ret - - -align 4 -proc draw_edge uses eax ebx ecx edx edi esi, box_l:dword, box_t:dword, box_w:dword, box_h:dword,\ - col_0:dword, col_1:dword, col_2:dword - - mov esi,[col_1] - and esi,111111101111111011111110b - - mov eax,SF_DRAW_RECT - ;bottom line - mov edx,[col_2] - mov ebx,[box_l] - shl ebx,16 - add ebx,[box_w] - inc ebx ;фы  чрыштъш фшруюэры№э√ї яшъёхыхщ - mov ecx,[box_t] - add ecx,[box_h] - shl ecx,16 - inc ecx - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move up and ->...<- - sub ecx,1 shl 16 ;move up - add ebx,1 shl 16 ;->... - sub ebx,2 ;...<- - ;draw line - int 0x40 - dec edi - jnz @b - - ;right line - mov edx,[col_2] - mov ebx,[box_l] - add ebx,[box_w] - shl ebx,16 - inc ebx - mov ecx,[box_t] - shl ecx,16 - add ecx,[box_h] - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move left and ... - sub ebx,1 shl 16 ;move left - add ecx,1 shl 16 - sub ecx,2 - ;draw line - int 0x40 - dec edi - jnz @b - - ;top line - mov edx,[col_0] - mov ebx,[box_l] - shl ebx,16 - add ebx,[box_w] - mov ecx,[box_t] - shl ecx,16 - inc ecx - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move down and ->...<- - add ecx,1 shl 16 ;move down - add ebx,1 shl 16 ;->... - sub ebx,2 ;...<- - ;draw line - int 0x40 - dec edi - jnz @b - - ;left line - mov edx,[col_0] - mov ebx,[box_l] - shl ebx,16 - inc ebx - mov ecx,[box_t] - shl ecx,16 - add ecx,[box_h] - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move left and ... - add ebx,1 shl 16 ;move left - add ecx,1 shl 16 - sub ecx,2 - ;draw line - int 0x40 - dec edi - jnz @b - - ret -endp - - -;фы  ЁрсюЄ√ ё KPCK -IncludeIGlobals -IncludeUGlobals - -align 16 -EXPORTS: - - -dd sz_init, lib_init -dd sz_version, 0x00000001 - -dd sz_edit_box, edit_box_draw ;old function name -dd sz_edit_box_draw, edit_box_draw -dd sz_edit_box_key, edit_box_key -dd sz_edit_box_key_safe, edit_box_key_safe -dd sz_edit_box_mouse, edit_box_mouse -dd sz_edit_box_set_text, edit_box_set_text -dd szVersion_ed, 0x00000001 - -dd sz_init_checkbox, init_checkbox -dd sz_check_box_draw, check_box_draw -dd sz_check_box_mouse, check_box_mouse -dd szVersion_ch2, 0x00000002 - -dd sz_option_box_draw, option_box_draw -dd sz_option_box_mouse, option_box_mouse -dd szVersion_op, 0x00000001 - -dd sz_Scrollbar_ver_draw, scroll_bar_vertical.draw -dd sz_Scrollbar_ver_mouse, scroll_bar_vertical.mouse -dd sz_Scrollbar_hor_draw, scroll_bar_horizontal.draw -dd sz_Scrollbar_hor_mouse, scroll_bar_horizontal.mouse -dd szVersion_scrollbar, 0x00010001 - -dd sz_Dbutton_draw, dinamic_button.draw -dd sz_Dbutton_mouse, dinamic_button.mouse -dd szVersion_dbutton, 0x00010001 - -dd sz_Menu_bar_draw, menu_bar.draw -dd sz_Menu_bar_mouse, menu_bar.mouse -dd sz_Menu_bar_activate, menu_bar.activate -dd szVersion_menu_bar, 0x00010002 - -dd sz_FileBrowser_draw, fb_draw_panel -dd sz_FileBrowser_mouse, fb_mouse -dd sz_FileBrowser_key, fb_key -dd szVersion_FileBrowser, 0x00010001 - -dd sz_tl_data_init, tl_data_init -dd sz_tl_data_clear, tl_data_clear -dd sz_tl_info_clear, tl_info_clear -dd sz_tl_key, tl_key -dd sz_tl_mouse, tl_mouse -dd sz_tl_draw, tl_draw -dd sz_tl_info_undo, tl_info_undo -dd sz_tl_info_redo, tl_info_redo -dd sz_tl_node_add, tl_node_add -dd sz_tl_node_set_data, tl_node_set_data -dd sz_tl_node_get_data, tl_node_get_data -dd sz_tl_node_delete, tl_node_delete -dd sz_tl_cur_beg, tl_cur_beg -dd sz_tl_cur_next, tl_cur_next -dd sz_tl_cur_perv, tl_cur_perv -dd sz_tl_node_close_open, tl_node_close_open -dd sz_tl_node_lev_inc, tl_node_lev_inc -dd sz_tl_node_lev_dec, tl_node_lev_dec -dd sz_tl_node_move_up, tl_node_move_up -dd sz_tl_node_move_down, tl_node_move_down -dd sz_tl_node_poi_get_info, tl_node_poi_get_info -dd sz_tl_node_poi_get_next_info, tl_node_poi_get_next_info -dd sz_tl_node_poi_get_data, tl_node_poi_get_data -dd sz_tl_save_mem, tl_save_mem -dd sz_tl_load_mem, tl_load_mem -dd sz_tl_get_mem_size, tl_get_mem_size -dd sz_tl_version_tree_list, 0x00000001 - -dd sz_PathShow_prepare, path_show.prepare -dd sz_PathShow_draw, path_show.draw -dd szVersion_path_show, 0x00010001 - -dd sz_ted_but_sumb_upper, ted_but_sumb_upper -dd sz_ted_but_sumb_lover, ted_but_sumb_lover -dd sz_ted_but_convert_by_table, ted_but_convert_by_table -dd sz_ted_can_save, ted_can_save -dd sz_ted_clear, ted_clear -dd sz_ted_delete, ted_delete -dd sz_ted_draw, ted_draw -dd sz_ted_init, ted_init -dd sz_ted_init_scroll_bars, ted_init_scroll_bars -dd sz_ted_init_syntax_file, ted_init_syntax_file -dd sz_ted_is_select, ted_is_select -dd sz_ted_key, ted_key -dd sz_ted_mouse, ted_mouse -dd sz_ted_open_file, ted_open_file -dd sz_ted_save_file, ted_save_file -dd sz_ted_text_add, ted_text_add -dd sz_ted_but_select_word, ted_but_select_word -dd sz_ted_but_cut, ted_but_cut -dd sz_ted_but_copy, ted_but_copy -dd sz_ted_but_paste, ted_but_paste -dd sz_ted_but_undo, ted_but_undo -dd sz_ted_but_redo, ted_but_redo -dd sz_ted_but_reverse, ted_but_reverse -dd sz_ted_but_find, ted_but_find -dd sz_ted_but_replace, ted_but_replace -dd sz_ted_text_colored, ted_text_colored -dd sz_ted_go_to_position, ted_go_to_position -dd sz_ted_version, 6 - -dd sz_Frame_draw, frame.draw -dd szVersion_frame, 0x00010001 - -dd sz_progressbar_draw, progressbar_draw -dd sz_progressbar_progress, progressbar_progress - -dd sz_tooltip_init, tooltip_init -dd sz_tooltip_delete, tooltip_delete -dd sz_tooltip_test_show, tooltip_test_show -dd sz_tooltip_mouse, tooltip_mouse -dd sz_get_font_size, get_font_size - -dd 0,0 - - -sz_init db 'lib_init',0 -sz_version db 'version',0 - -sz_edit_box db 'edit_box',0 -sz_edit_box_draw db 'edit_box_draw',0 -sz_edit_box_key db 'edit_box_key',0 -sz_edit_box_key_safe db 'edit_box_key_safe',0 -sz_edit_box_mouse db 'edit_box_mouse',0 -sz_edit_box_set_text db 'edit_box_set_text',0 -szVersion_ed db 'version_ed',0 - -sz_init_checkbox db 'init_checkbox2',0 -sz_check_box_draw db 'check_box_draw2',0 -sz_check_box_mouse db 'check_box_mouse2',0 -szVersion_ch2 db 'version_ch2',0 - -sz_option_box_draw db 'option_box_draw',0 -sz_option_box_mouse db 'option_box_mouse',0 -szVersion_op db 'version_op',0 - -sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 -sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 -sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 -sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 -szVersion_scrollbar db 'version_scrollbar',0 - -sz_Dbutton_draw db 'dbutton_draw',0 -sz_Dbutton_mouse db 'dbutton_mouse',0 -szVersion_dbutton db 'version_dbutton',0 - -sz_Menu_bar_draw db 'menu_bar_draw',0 -sz_Menu_bar_mouse db 'menu_bar_mouse',0 -sz_Menu_bar_activate db 'menu_bar_activate',0 -szVersion_menu_bar db 'version_menu_bar',0 - -sz_FileBrowser_draw db 'FileBrowser_draw',0 -sz_FileBrowser_mouse db 'FileBrowser_mouse',0 -sz_FileBrowser_key db 'FileBrowser_key',0 -szVersion_FileBrowser db 'version_FileBrowser',0 - -sz_tl_data_init db 'tl_data_init',0 -sz_tl_data_clear db 'tl_data_clear',0 -sz_tl_info_clear db 'tl_info_clear',0 -sz_tl_key db 'tl_key',0 -sz_tl_mouse db 'tl_mouse',0 -sz_tl_draw db 'tl_draw',0 -sz_tl_info_undo db 'tl_info_undo',0 -sz_tl_info_redo db 'tl_info_redo',0 -sz_tl_node_add db 'tl_node_add',0 -sz_tl_node_set_data db 'tl_node_set_data',0 -sz_tl_node_get_data db 'tl_node_get_data',0 -sz_tl_node_delete db 'tl_node_delete',0 -sz_tl_cur_beg db 'tl_cur_beg',0 -sz_tl_cur_next db 'tl_cur_next',0 -sz_tl_cur_perv db 'tl_cur_perv',0 -sz_tl_node_close_open db 'tl_node_close_open',0 -sz_tl_node_lev_inc db 'tl_node_lev_inc',0 -sz_tl_node_lev_dec db 'tl_node_lev_dec',0 -sz_tl_node_move_up db 'tl_node_move_up',0 -sz_tl_node_move_down db 'tl_node_move_down',0 -sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 -sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 -sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 -sz_tl_save_mem db 'tl_save_mem',0 -sz_tl_load_mem db 'tl_load_mem',0 -sz_tl_get_mem_size db 'tl_get_mem_size',0 -sz_tl_version_tree_list db 'version_tree_list',0 - -sz_PathShow_prepare db 'PathShow_prepare',0 -sz_PathShow_draw db 'PathShow_draw',0 -szVersion_path_show db 'version_PathShow',0 - -sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 -sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 -sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 -sz_ted_can_save db 'ted_can_save',0 -sz_ted_clear db 'ted_clear',0 -sz_ted_delete db 'ted_delete',0 -sz_ted_draw db 'ted_draw',0 -sz_ted_init db 'ted_init',0 -sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 -sz_ted_init_syntax_file db 'ted_init_syntax_file',0 -sz_ted_is_select db 'ted_is_select',0 -sz_ted_key db 'ted_key',0 -sz_ted_mouse db 'ted_mouse',0 -sz_ted_open_file db 'ted_open_file',0 -sz_ted_save_file db 'ted_save_file',0 -sz_ted_text_add db 'ted_text_add',0 -sz_ted_but_select_word db 'ted_but_select_word',0 -sz_ted_but_cut db 'ted_but_cut',0 -sz_ted_but_copy db 'ted_but_copy',0 -sz_ted_but_paste db 'ted_but_paste',0 -sz_ted_but_undo db 'ted_but_undo',0 -sz_ted_but_redo db 'ted_but_redo',0 -sz_ted_but_reverse db 'ted_but_reverse',0 -sz_ted_but_find db 'ted_but_find',0 -sz_ted_but_replace db 'ted_but_replace',0 -sz_ted_text_colored db 'ted_text_colored',0 -sz_ted_go_to_position db 'ted_go_to_position',0 -sz_ted_version db 'version_text_edit',0 - -sz_Frame_draw db 'frame_draw',0 -szVersion_frame db 'version_frame',0 - -sz_progressbar_draw db 'progressbar_draw', 0 -sz_progressbar_progress db 'progressbar_progress', 0 - -sz_tooltip_init db 'tooltip_init', 0 -sz_tooltip_delete db 'tooltip_delete', 0 -sz_tooltip_test_show db 'tooltip_test_show', 0 -sz_tooltip_mouse db 'tooltip_mouse', 0 -sz_get_font_size db 'get_font_size', 0 +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page Windows 1251 - Cyrillic + + +;***************************************************************************** +; Box_Lib - library of graphical components +; Copyright (C) KolibriOS team 2008-2020. All rights reserved. +; +; Authors: +; Alexey Teplov aka +; Marat Zakiyanov aka Mario79, aka Mario +; Evtikhov Maxim aka Maxxxx32 +; Eugene Grechnikov aka Diamond +; hidnplayr +; Igor Afanasiev aka IgorA +;***************************************************************************** + +format MS COFF + +public EXPORTS + +section '.flat' code readable align 16 +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../KOSfuncs.inc' +include 'box_lib.mac' ;macro which should make life easier :) +;include '../../../../debug.inc' +include 'keys.inc' +include '../../../../system/skincfg/kglobals.inc' +include '../../../../system/skincfg/unpacker.inc' + +;----------------------------------------------------------------------------- +mem.alloc dd ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш +mem.free dd ? ;ЇєэъЎш  фы  юётюсюцфхэш  ярь Єш +mem.realloc dd ? ;ЇєэъЎш  фы  яхЁхЁрёяЁхфхыхэш  ярь Єш +dll.load dd ? + +;---------------------------------------------------- +include 'editbox.asm' ;editbox +include 'checkbox.asm' ;checkbox +include 'optionbox.asm' ;optionbox +include 'scrollbar.asm' ;scrollbar +include 'd_button.asm' ;dinamic_button +include 'menubar.asm' ;menubar +include 'filebrowser.asm' ;filebrowser +include 'tree_list.asm' ;tree_list, list_box +include 'pathshow.asm' ;pathshow +include 't_edit.asm' ;text_editor +include 'frame.asm' ;frame +include 'progressbar.asm' ;progressbar +include 'tooltip.asm' ;tooltip +;-------------------------------------------------- + +;input: +; eax = єърчрЄхы№ эр ЇєэъЎш■ т√фхыхэш  ярь Єш +; ebx = ... юётюсюцфхэш  ярь Єш +; ecx = ... яхЁхЁрёяЁхфхыхэш  ярь Єш +; edx = ... чруЁєчъш сшсышюЄхъш (яюър эх шёяюы№чєхЄё ) +align 16 +lib_init: + mov [mem.alloc], eax + mov [mem.free], ebx + mov [mem.realloc], ecx + mov [dll.load], edx +ret + + +align 4 +proc draw_edge uses eax ebx ecx edx edi esi, box_l:dword, box_t:dword, box_w:dword, box_h:dword,\ + col_0:dword, col_1:dword, col_2:dword + + mov esi,[col_1] + and esi,111111101111111011111110b + + mov eax,SF_DRAW_RECT + ;bottom line + mov edx,[col_2] + mov ebx,[box_l] + shl ebx,16 + add ebx,[box_w] + inc ebx ;фы  чрыштъш фшруюэры№э√ї яшъёхыхщ + mov ecx,[box_t] + add ecx,[box_h] + shl ecx,16 + inc ecx + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move up and ->...<- + sub ecx,1 shl 16 ;move up + add ebx,1 shl 16 ;->... + sub ebx,2 ;...<- + ;draw line + int 0x40 + dec edi + jnz @b + + ;right line + mov edx,[col_2] + mov ebx,[box_l] + add ebx,[box_w] + shl ebx,16 + inc ebx + mov ecx,[box_t] + shl ecx,16 + add ecx,[box_h] + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move left and ... + sub ebx,1 shl 16 ;move left + add ecx,1 shl 16 + sub ecx,2 + ;draw line + int 0x40 + dec edi + jnz @b + + ;top line + mov edx,[col_0] + mov ebx,[box_l] + shl ebx,16 + add ebx,[box_w] + mov ecx,[box_t] + shl ecx,16 + inc ecx + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move down and ->...<- + add ecx,1 shl 16 ;move down + add ebx,1 shl 16 ;->... + sub ebx,2 ;...<- + ;draw line + int 0x40 + dec edi + jnz @b + + ;left line + mov edx,[col_0] + mov ebx,[box_l] + shl ebx,16 + inc ebx + mov ecx,[box_t] + shl ecx,16 + add ecx,[box_h] + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move left and ... + add ebx,1 shl 16 ;move left + add ecx,1 shl 16 + sub ecx,2 + ;draw line + int 0x40 + dec edi + jnz @b + + ret +endp + + +;фы  ЁрсюЄ√ ё KPCK +IncludeIGlobals +IncludeUGlobals + +align 16 +EXPORTS: + + +dd sz_init, lib_init +dd sz_version, 0x00000001 + +dd sz_edit_box, edit_box_draw ;old function name +dd sz_edit_box_draw, edit_box_draw +dd sz_edit_box_key, edit_box_key +dd sz_edit_box_key_safe, edit_box_key_safe +dd sz_edit_box_mouse, edit_box_mouse +dd sz_edit_box_set_text, edit_box_set_text +dd szVersion_ed, 0x00000001 + +dd sz_init_checkbox, init_checkbox +dd sz_check_box_draw, check_box_draw +dd sz_check_box_mouse, check_box_mouse +dd szVersion_ch2, 0x00000002 + +dd sz_option_box_draw, option_box_draw +dd sz_option_box_mouse, option_box_mouse +dd szVersion_op, 0x00000001 + +dd sz_Scrollbar_ver_draw, scroll_bar_vertical.draw +dd sz_Scrollbar_ver_mouse, scroll_bar_vertical.mouse +dd sz_Scrollbar_hor_draw, scroll_bar_horizontal.draw +dd sz_Scrollbar_hor_mouse, scroll_bar_horizontal.mouse +dd szVersion_scrollbar, 0x00010001 + +dd sz_Dbutton_draw, dinamic_button.draw +dd sz_Dbutton_mouse, dinamic_button.mouse +dd szVersion_dbutton, 0x00010001 + +dd sz_Menu_bar_draw, menu_bar.draw +dd sz_Menu_bar_mouse, menu_bar.mouse +dd sz_Menu_bar_activate, menu_bar.activate +dd szVersion_menu_bar, 0x00010002 + +dd sz_FileBrowser_draw, fb_draw_panel +dd sz_FileBrowser_mouse, fb_mouse +dd sz_FileBrowser_key, fb_key +dd szVersion_FileBrowser, 0x00010001 + +dd sz_tl_data_init, tl_data_init +dd sz_tl_data_clear, tl_data_clear +dd sz_tl_info_clear, tl_info_clear +dd sz_tl_key, tl_key +dd sz_tl_mouse, tl_mouse +dd sz_tl_draw, tl_draw +dd sz_tl_info_undo, tl_info_undo +dd sz_tl_info_redo, tl_info_redo +dd sz_tl_node_add, tl_node_add +dd sz_tl_node_set_data, tl_node_set_data +dd sz_tl_node_get_data, tl_node_get_data +dd sz_tl_node_delete, tl_node_delete +dd sz_tl_cur_beg, tl_cur_beg +dd sz_tl_cur_next, tl_cur_next +dd sz_tl_cur_perv, tl_cur_perv +dd sz_tl_node_close_open, tl_node_close_open +dd sz_tl_node_lev_inc, tl_node_lev_inc +dd sz_tl_node_lev_dec, tl_node_lev_dec +dd sz_tl_node_move_up, tl_node_move_up +dd sz_tl_node_move_down, tl_node_move_down +dd sz_tl_node_poi_get_info, tl_node_poi_get_info +dd sz_tl_node_poi_get_next_info, tl_node_poi_get_next_info +dd sz_tl_node_poi_get_data, tl_node_poi_get_data +dd sz_tl_save_mem, tl_save_mem +dd sz_tl_load_mem, tl_load_mem +dd sz_tl_get_mem_size, tl_get_mem_size +dd sz_tl_version_tree_list, 0x00000001 + +dd sz_PathShow_prepare, path_show.prepare +dd sz_PathShow_draw, path_show.draw +dd szVersion_path_show, 0x00010001 + +dd sz_ted_but_sumb_upper, ted_but_sumb_upper +dd sz_ted_but_sumb_lover, ted_but_sumb_lover +dd sz_ted_but_convert_by_table, ted_but_convert_by_table +dd sz_ted_can_save, ted_can_save +dd sz_ted_clear, ted_clear +dd sz_ted_delete, ted_delete +dd sz_ted_draw, ted_draw +dd sz_ted_init, ted_init +dd sz_ted_init_scroll_bars, ted_init_scroll_bars +dd sz_ted_init_syntax_file, ted_init_syntax_file +dd sz_ted_is_select, ted_is_select +dd sz_ted_key, ted_key +dd sz_ted_mouse, ted_mouse +dd sz_ted_open_file, ted_open_file +dd sz_ted_save_file, ted_save_file +dd sz_ted_text_add, ted_text_add +dd sz_ted_but_select_word, ted_but_select_word +dd sz_ted_but_cut, ted_but_cut +dd sz_ted_but_copy, ted_but_copy +dd sz_ted_but_paste, ted_but_paste +dd sz_ted_but_undo, ted_but_undo +dd sz_ted_but_redo, ted_but_redo +dd sz_ted_but_reverse, ted_but_reverse +dd sz_ted_but_find, ted_but_find +dd sz_ted_but_replace, ted_but_replace +dd sz_ted_text_colored, ted_text_colored +dd sz_ted_go_to_position, ted_go_to_position +dd sz_ted_version, 6 + +dd sz_Frame_draw, frame.draw +dd szVersion_frame, 0x00010001 + +dd sz_progressbar_draw, progressbar_draw +dd sz_progressbar_progress, progressbar_progress + +dd sz_tooltip_init, tooltip_init +dd sz_tooltip_delete, tooltip_delete +dd sz_tooltip_test_show, tooltip_test_show +dd sz_tooltip_mouse, tooltip_mouse +dd sz_get_font_size, get_font_size + +dd 0,0 + + +sz_init db 'lib_init',0 +sz_version db 'version',0 + +sz_edit_box db 'edit_box',0 +sz_edit_box_draw db 'edit_box_draw',0 +sz_edit_box_key db 'edit_box_key',0 +sz_edit_box_key_safe db 'edit_box_key_safe',0 +sz_edit_box_mouse db 'edit_box_mouse',0 +sz_edit_box_set_text db 'edit_box_set_text',0 +szVersion_ed db 'version_ed',0 + +sz_init_checkbox db 'init_checkbox2',0 +sz_check_box_draw db 'check_box_draw2',0 +sz_check_box_mouse db 'check_box_mouse2',0 +szVersion_ch2 db 'version_ch2',0 + +sz_option_box_draw db 'option_box_draw',0 +sz_option_box_mouse db 'option_box_mouse',0 +szVersion_op db 'version_op',0 + +sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 +sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 +sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 +sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 +szVersion_scrollbar db 'version_scrollbar',0 + +sz_Dbutton_draw db 'dbutton_draw',0 +sz_Dbutton_mouse db 'dbutton_mouse',0 +szVersion_dbutton db 'version_dbutton',0 + +sz_Menu_bar_draw db 'menu_bar_draw',0 +sz_Menu_bar_mouse db 'menu_bar_mouse',0 +sz_Menu_bar_activate db 'menu_bar_activate',0 +szVersion_menu_bar db 'version_menu_bar',0 + +sz_FileBrowser_draw db 'FileBrowser_draw',0 +sz_FileBrowser_mouse db 'FileBrowser_mouse',0 +sz_FileBrowser_key db 'FileBrowser_key',0 +szVersion_FileBrowser db 'version_FileBrowser',0 + +sz_tl_data_init db 'tl_data_init',0 +sz_tl_data_clear db 'tl_data_clear',0 +sz_tl_info_clear db 'tl_info_clear',0 +sz_tl_key db 'tl_key',0 +sz_tl_mouse db 'tl_mouse',0 +sz_tl_draw db 'tl_draw',0 +sz_tl_info_undo db 'tl_info_undo',0 +sz_tl_info_redo db 'tl_info_redo',0 +sz_tl_node_add db 'tl_node_add',0 +sz_tl_node_set_data db 'tl_node_set_data',0 +sz_tl_node_get_data db 'tl_node_get_data',0 +sz_tl_node_delete db 'tl_node_delete',0 +sz_tl_cur_beg db 'tl_cur_beg',0 +sz_tl_cur_next db 'tl_cur_next',0 +sz_tl_cur_perv db 'tl_cur_perv',0 +sz_tl_node_close_open db 'tl_node_close_open',0 +sz_tl_node_lev_inc db 'tl_node_lev_inc',0 +sz_tl_node_lev_dec db 'tl_node_lev_dec',0 +sz_tl_node_move_up db 'tl_node_move_up',0 +sz_tl_node_move_down db 'tl_node_move_down',0 +sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 +sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 +sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 +sz_tl_save_mem db 'tl_save_mem',0 +sz_tl_load_mem db 'tl_load_mem',0 +sz_tl_get_mem_size db 'tl_get_mem_size',0 +sz_tl_version_tree_list db 'version_tree_list',0 + +sz_PathShow_prepare db 'PathShow_prepare',0 +sz_PathShow_draw db 'PathShow_draw',0 +szVersion_path_show db 'version_PathShow',0 + +sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 +sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 +sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 +sz_ted_can_save db 'ted_can_save',0 +sz_ted_clear db 'ted_clear',0 +sz_ted_delete db 'ted_delete',0 +sz_ted_draw db 'ted_draw',0 +sz_ted_init db 'ted_init',0 +sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 +sz_ted_init_syntax_file db 'ted_init_syntax_file',0 +sz_ted_is_select db 'ted_is_select',0 +sz_ted_key db 'ted_key',0 +sz_ted_mouse db 'ted_mouse',0 +sz_ted_open_file db 'ted_open_file',0 +sz_ted_save_file db 'ted_save_file',0 +sz_ted_text_add db 'ted_text_add',0 +sz_ted_but_select_word db 'ted_but_select_word',0 +sz_ted_but_cut db 'ted_but_cut',0 +sz_ted_but_copy db 'ted_but_copy',0 +sz_ted_but_paste db 'ted_but_paste',0 +sz_ted_but_undo db 'ted_but_undo',0 +sz_ted_but_redo db 'ted_but_redo',0 +sz_ted_but_reverse db 'ted_but_reverse',0 +sz_ted_but_find db 'ted_but_find',0 +sz_ted_but_replace db 'ted_but_replace',0 +sz_ted_text_colored db 'ted_text_colored',0 +sz_ted_go_to_position db 'ted_go_to_position',0 +sz_ted_version db 'version_text_edit',0 + +sz_Frame_draw db 'frame_draw',0 +szVersion_frame db 'version_frame',0 + +sz_progressbar_draw db 'progressbar_draw', 0 +sz_progressbar_progress db 'progressbar_progress', 0 + +sz_tooltip_init db 'tooltip_init', 0 +sz_tooltip_delete db 'tooltip_delete', 0 +sz_tooltip_test_show db 'tooltip_test_show', 0 +sz_tooltip_mouse db 'tooltip_mouse', 0 +sz_get_font_size db 'get_font_size', 0 diff --git a/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm b/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm index f7a370123..c2b2cd0f0 100644 --- a/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm +++ b/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm @@ -27,7 +27,7 @@ ;; ;; ;;================================================================================================;; include 'xcf.inc' -;include '../../../../../system/board/trunk/debug.inc' +;include '../../../../../system/board/debug.inc' MAX_LAYERS = 255 @@ -821,7 +821,7 @@ endl mov [bottom_x1], 0 mov ecx, [ebx + Image.Width] - mov [bottom_length], ecx + mov [bottom_length], ecx mov eax, [edx + Image.Extended] movsx eax, word[eax + xcf_ext.offset_x] @@ -858,7 +858,7 @@ endl mov [bottom_y1], 0 mov ecx, [ebx + Image.Height] - mov [bottom_length], ecx + mov [bottom_length], ecx mov eax, [edx + Image.Extended] movsx eax, word[eax + xcf_ext.offset_y] @@ -972,7 +972,7 @@ endl add edi, edx mov edx, [edi] jmp .composite_found - @@: + @@: add edi, 16 dec ecx jnz .still diff --git a/programs/games/snake/snake.asm b/programs/games/snake/snake.asm index bd46ce0fa..22391a140 100644 --- a/programs/games/snake/snake.asm +++ b/programs/games/snake/snake.asm @@ -1,2550 +1,2553 @@ -;;===HEADER==================================================================================================================== - -use32 - org 0x0 - db 'MENUET01' - dd 0x01,start,i_end,d_end,stacktop,0x0,cur_dir_path - -;;---HEADER-------------------------------------------------------------------------------------------------------------------- - -include '../../proc32.inc' -include '../../macros.inc' -include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -;include '../../system/board/trunk/debug.inc' - -;;===Define_chapter============================================================================================================ - -WINDOW_MODE_WINDOWED equ 0 -WINDOW_MODE_FULLSCREEN equ 1 - -GRID_WIDTH equ 28 -GRID_HEIGHT equ 14 - -MIN_SQUARE_SIDE_LENGTH equ 9 - -SCORE_EAT equ 100 - -LEFT equ 0 -DOWN equ 1 -UP equ 2 -RIGHT equ 3 - -struct LEVEL - field db 4*GRID_HEIGHT dup (?) - snake_dots db 6 dup (?) - snake_direction dd ? - snake_direction_next dd ? - number_of_stones dd ? - name dd ? -ends - -CLASSIC_MODE equ 0 -LEVELS_MODE equ 1 - -CLASSIC_MODE_FIRST_LEVEL equ 0 -LEVELS_MODE_FIRST_LEVEL equ 1 - -EAT_TO_END_LEVEL equ 7 -PAUSE_BETWEEN_LEVELS equ 200 -PAUSE_WHILE_DRAWING_SPLASH equ 3 - -CHAMPION_NAME_LENGTH equ 15 -LAST_LEVEL_NUMBER equ 36 - -START_LIVES equ 3 - -;;---Define_chapter------------------------------------------------------------------------------------------------------------ - -start: - -stdcall dll.Load,@IMPORT - or eax, eax - jnz Exit - -align 4 - - mov edi, cur_dir_path - mov al, 0 - mov ecx, 4096 - repne scasb - mov dword[edi-1], '.ini' - - invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80 - neg eax - add [time_wait_limit], eax - mov ebx, [time_wait_limit] - mov [time_wait_limit_const], ebx - sub ebx, 4 - mov eax, 200 - div bl - mov byte[speed_up_counter], al - mov byte[speed_up_counter+1], al - invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name - invoke ini.get_int, cur_dir_path, aPreferences, aSmart_reverse, 0 - mov [smart_reverse], eax - invoke ini.get_int, cur_dir_path, aPreferences, aShow_lives_style, 2 - mov [show_lives_style], eax - invoke ini.get_int, cur_dir_path, aPreferences, aDraw_level_name_in_window_title, 1 - mov [draw_level_name_in_window_title], eax - invoke ini.get_str, cur_dir_path, aPreferences, aSeparating_symbol, separating_symbol, 3, default_separating_symbol - - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_left, 0x23, 0 - mov [shortcut_move_left], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_down, 0x24, 0 - mov [shortcut_move_down], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_up, 0x25, 0 - mov [shortcut_move_up], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_right, 0x26, 0 - mov [shortcut_move_right], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aReverse, 0x0F, 0 - mov [shortcut_reverse], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aIncrease, 0x16, 0 - mov [shortcut_increase], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aDecrease, 0x17, 0 - mov [shortcut_decrease], al - - invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 3 - mov [decorations], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000 - or [background_color], eax - or [window_style_windowed], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x232300 - or [decorations_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff - or [snake_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff - or [snake_head_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLives_in_head_number_color, 0xff8800 - or [lives_in_head_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff - or [snake_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55 - or [version_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11 - or [pause_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111 - or [game_over_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11 - or [you_win_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11 - or [eat_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777 - or [navigation_strings_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900 - or [game_over_strings_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff - or [score_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff - or [level_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff - or [hiscore_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff - or [champion_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44 - or [game_over_hiscore_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff - or [score_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff - or [level_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff - or [hiscore_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff - or [champion_name_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00 - or [edit1.shift_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD - or [button_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000 - or [button_text_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700 - or [stone_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00 - or [splash_background_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000 - or [splash_level_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000 - or [splash_level_string_color], eax - - invoke ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19 - mov [square_side_length], eax - invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic - invoke ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777 - or [hi_score_classic], eax - invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels - invoke ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777 - or [hi_score_levels], eax - - mov eax, [background_color] - mov [edit1.color], eax - mov [edit1.focus_border_color], eax - mov [edit1.blur_border_color], eax - mov eax, [game_over_hiscore_color] - mov [edit1.text_color], eax - - mcall 37,4,cursor_data,2 ; load empty cursor (for "hiding" cursor while level_mode) - mov [cursor_handle], eax - - mov eax, WINDOW_MODE_WINDOWED - call Set_window_mode - mcall 0,0,0,[window_style_windowed] ; create empty window. Set_geometry will set all parameters - call Set_geometry.by_hotkey - mcall 71,1,window_title - -include 'first_menu.asm' ; First menu body and functions -include 'level.asm' ; Level body and functions (game process) -include 'pause.asm' ; Pause body and functions -include 'game_over.asm' ; Game_over body and functions - -;;===Some_functions============================================================================================================ - - -Save_do_smth_else_and_exit: - ;;===Save_do_smth_else_and_exit============================================================================================ - - mcall 37,6,[cursor_handle] ; delete cursor - - invoke ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length] - - mov edi, champion_name_classic - xor al, al - mov ecx, CHAMPION_NAME_LENGTH+1 - cld - repne scasb - neg ecx - add ecx, CHAMPION_NAME_LENGTH - invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx - invoke ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic] - - mov edi, champion_name_levels - xor al, al - mov ecx, CHAMPION_NAME_LENGTH+1 - cld - repne scasb - neg ecx - add ecx, CHAMPION_NAME_LENGTH - invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx - invoke ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels] - - ;;---Save_do_smth_else_and_exit-------------------------------------------------------------------------------------------- - - -Exit: - ;;===Exit================================================================================================================== - - or eax, -1 - int 0x40 - - ;;---Exit------------------------------------------------------------------------------------------------------------------ - - -Set_geometry: - ;;===Set_geometry========================================================================================================== - - cmp [resized_by_hotkey], 1 - je .by_hotkey - - test [proc_info.wnd_state], 0x01 - jnz .by_hotkey - - mcall 9,proc_info,-1 - test [proc_info.wnd_state], 0x04 ; is rolled up? - jz @f - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - jmp .quit - @@: - mov eax, [proc_info.box.width] - cmp eax, [window_width] - jne @f - mov eax, [proc_info.box.height] - cmp eax, [window_height] - jne @f - jmp .quit - @@: - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - - .by_mouse: ; or any other kind of resizing. for example, double click on window title - - test [proc_info.wnd_state], 0x01 - jnz .by_hotkey - - - cmp [window_width], 250 - jnl @f - mov [window_width], 250 - @@: - cmp [window_height], 150 - jnl @f - mov [window_height], 150 - @@: - - mcall 48,4 - mov ecx, [window_height] - sub ecx, eax - sub ecx, 5 - sub ecx, [g_e] - sub ecx, [g_e] - sub ecx, 25+30 - mov esi, ecx - - mov eax, [window_width] - sub eax, 5+5 - sub eax, [g_e] - sub eax, [g_e] - sub eax, [g_s] - sub eax, [g_s] - mov edi, eax - - mov dx, 0 - div cx - cmp ax, 2 - jl .fit_to_width - - .fit_to_height: - mov eax, esi - mov ebx, GRID_HEIGHT - div bl - cmp al, MIN_SQUARE_SIDE_LENGTH - jnl @f - mov al, MIN_SQUARE_SIDE_LENGTH - @@: - dec al - mov byte[square_side_length], al - jmp .by_hotkey - - .fit_to_width: - mov eax, edi - mov ebx, GRID_WIDTH - div bl - cmp al, MIN_SQUARE_SIDE_LENGTH - jnl @f - mov al, MIN_SQUARE_SIDE_LENGTH - @@: - dec al - mov byte[square_side_length], al - jmp .by_hotkey - -; jmp .done - - .by_hotkey: - mcall 9,proc_info,-1 - mov [resized_by_hotkey], 0 - test [proc_info.wnd_state], 0x04 ; is rolled up? - jz @f - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - jmp .quit - @@: - mov eax, [square_side_length] - inc eax ; space between squares - mov [g_s], eax - - mov eax, [g_s] - shr eax, 1 - mov ebx, eax - shr ebx, 1 - add eax, ebx - mov [g_e], eax - - mov edx, GRID_WIDTH - mov eax, [g_s] - mul dx - mov [gw_mul_gs], eax - - mov edx, GRID_HEIGHT - mov eax, [g_s] - mul dx - mov [gh_mul_gs], eax - - mov eax, [gw_mul_gs] - add eax, [g_s] - add eax, [g_s] - add eax, [g_e] - add eax, [g_e] - add eax, 5*2 ; skin width - mov esi, eax - test [proc_info.wnd_state], 0x01 - jz @f - mov eax, [proc_info.box.width] - @@: - mov [window_width], eax - - sub eax, [gw_mul_gs] - sub eax, 5*2 - shr eax, 1 - mov [gbxm1], eax - - mcall 48,4 ; get skin header height - mov ebx, eax - add eax, [gh_mul_gs] - add eax, [g_e] - add eax, 25 - add eax, [g_e] - add eax, 30 - add eax, 5 ; skin height (bottom part) - mov edi, eax - test [proc_info.wnd_state], 0x01 - jz @f - mov eax, [proc_info.box.height] - @@: - mov [window_height], eax - - sub eax, [gh_mul_gs] - sub eax, ebx - sub eax, 5 - sub eax, 5 - - shr eax, 1 - mov [gbym1], eax - - mov eax, [g_s] - shl eax, 16 - add eax, [g_s] - mov [gs_shl16_gs], eax - - mov eax, [gbxm1] - shl eax, 16 - add eax, [gbxm1] - mov [gbxm1_shl16_gbxm1], eax - - mov eax, [gbym1] - shl eax, 16 - add eax, [gbym1] - mov [gbym1_shl16_gbym1], eax - - mov eax, [gbxm1] - add eax, [gw_mul_gs] - mov [gbxm1_plus_gw_mul_gs], eax - - mov eax, [gbym1] - add eax, [gh_mul_gs] - mov [gbym1_plus_gh_mul_gs], eax - - mcall 48, 5 - mov dx, ax - shr eax, 16 - sub dx, ax - cmp dx, si ; does window fit to work area width? - jnl @f - dec [square_side_length] - jmp Set_geometry.by_hotkey - @@: - - mov cx, bx - shr ebx, 16 - sub cx, bx - cmp cx, di ; does window fit to work area height? - jnl @f - dec [square_side_length] - jmp Set_geometry.by_hotkey - @@: - - sub dx, si - shr dx, 1 - mov word[wp_x], dx - sub cx, word[window_height] - shr cx, 1 - mov dx, cx - shr cx, 1 - add cx, dx - mov word[wp_y], cx - - mov [top_strings], 8 - mov eax, [window_height] - sub eax, 50 - mov [bottom_top_strings], eax - add eax, 6 - mov [bottom_middle_strings], eax - add eax, 6 - mov [bottom_bottom_strings], eax - - sub eax, 4 - mov [edit1.top], eax - - - mov eax, [g_s] - shl eax, 2 - sub eax, 2 - mov [button_width_short], eax - mov eax, [g_s] - shl eax, 3 - add eax, [g_s] - sub eax, 2 - mov [button_width_long], eax - mov eax, [g_s] - sub eax, 2 - mov [button_height], eax - - mov bl, 0x10 - mov cl, 0x08 - - mov al, byte[g_s] - mul bl - mov bx, ax - add bx, word[gbxm1] - inc bx - - mov al, byte[g_s] - mul cl - mov cx, ax - add cx, word[gbym1] - inc cx - - mov [button_x_left], ebx - mov [button_y_top], ecx - - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - - mov [button_x_right], ebx - - add ecx, [g_s] - add ecx, [g_s] - - mov [button_y_middle], ecx - - add ecx, [g_s] - add ecx, [g_s] - - mov [button_y_bottom], ecx - - .done: - mcall 67,[wp_x],[wp_y],[window_width],[window_height] - - .quit: - ret - - ;;---Set_geometry------------------------------------------------------------------------------------------------------ - - -Increase_geometry: - ;;===Increase_geometry================================================================================================= - - inc [square_side_length] - mov [resized_by_hotkey], 1 - - ret - - ;;---Increase_geometry------------------------------------------------------------------------------------------------- - - -Decrease_geometry: - ;;===Decrease_geometry================================================================================================= - - cmp [square_side_length], MIN_SQUARE_SIDE_LENGTH - je @f - dec [square_side_length] - mov [resized_by_hotkey], 1 - - @@: - ret - - ;;---Decrease_geometry------------------------------------------------------------------------------------------------- - - -Draw_decorations: - ;;===Draw_decorations================================================================================================== - - mov al, byte[decorations] - dec al - jz grid_lines - dec al - jz grid_lines_with_ends - dec al - jz grid_lines_with_corners - dec al - jz grid_dots - dec al - jz borders_lines - dec al - jz borders_lines_with_corners - dec al - jz borders_dots - dec al - jz corners_dots - dec al - jz corners_inner - dec al - jz corners_outer - dec al - jz corners_crosses - ret - - - grid_lines: - - mov eax, 38 -;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1) - mov ebx, [gbxm1_shl16_gbxm1] -;mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP) - mov ecx, [gbym1_shl16_gbym1] - add ecx, [gh_mul_gs] - mov edx, [decorations_color] - mov esi, GRID_WIDTH - add esi, 1 - - @@: - mcall - add ebx, [gs_shl16_gs] - dec esi - jnz @b - -;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP) - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [gw_mul_gs] - mov ecx, [gbym1_shl16_gbym1] - mov esi, GRID_HEIGHT - add esi, 1 - - @@: - mcall - add ecx, [gs_shl16_gs] - dec esi - jnz @b - - ret - - - grid_lines_with_ends: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1] - sub ecx, [g_e] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - add ecx, [g_e] - mov edx, [decorations_color] - mov esi, GRID_WIDTH - add esi, 1 - - @@: - mcall - add ebx, [gs_shl16_gs] - dec esi - jnz @b - - mov ebx, [gbxm1] - sub ebx, [g_e] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - add ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov esi, GRID_HEIGHT - add esi, 1 - - @@: - mcall - add ecx, [gs_shl16_gs] - dec esi - jnz @b - - ret - - - grid_lines_with_corners: - - call grid_lines - call corners_outer - - ret - - - grid_dots: - - mov eax, 1 - mov ebx, [gbxm1] - mov ecx, [gbym1] - mov edx, [decorations_color] - - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jg @f - mov ebx, [gbxm1] - jmp @b - - @@: - ret - - - borders_lines: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - add ecx, [gh_mul_gs] - mov edx, [decorations_color] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [gw_mul_gs] - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - ret - - - borders_lines_with_corners: - - call borders_lines - call corners_outer - - ret - - - borders_dots: - - mov eax, 1 - mov ebx, [gbxm1] - mov ecx, [gbym1] - mov edx, [decorations_color] - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - - mov ebx, [gbxm1] - mov ecx, [gbym1_plus_gh_mul_gs] - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - - mov ebx, [gbxm1] - mov ecx, [gbym1] - @@: - mcall - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jng @b - - mov ebx, [gbxm1_plus_gw_mul_gs] - mov ecx, [gbym1] - @@: - mcall - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jng @b - - ret - - - corners_dots: - - mov eax, 13 - mov ebx, [gbxm1] - dec ebx - shl ebx, 16 - add ebx, 2 - mov ecx, [gbym1] - dec ecx - shl ecx, 16 - add ecx, 2 - mov edx, [decorations_color] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, 2 - mcall - - mov ebx, [gbxm1] - dec ebx - shl ebx, 16 - add ebx, 2 - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, 2 - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, 2 - mcall - - ret - - - corners_inner: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov edx, [decorations_color] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - sub ebx, [g_e] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - add ecx, [g_e] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - sub ecx, [g_e] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mcall - - ret - - - corners_outer: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - sub ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov edx, [decorations_color] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - add ebx, [g_e] - mcall - - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - sub ecx, [g_e] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - add ecx, [g_e] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mcall - - ret - - - corners_crosses: - - call corners_inner - call corners_outer - - ret - - - ;;---Draw_decorations-------------------------------------------------------------------------------------------------- - - -Draw_square: - ;;===Draw_square======================================================================================================= - ;; bl - x_coord - ;; bh - y_coord - ;; edx - color - - push eax ebx ecx edx - - mov cl, bh - - mov al, byte[g_s] - mul bl - mov bx, ax - add bx, word[gbxm1] - inc bx - shl ebx, 16 - add ebx, [g_s] - dec ebx - - mov al, byte[g_s] - mul cl - mov cx, ax - add cx, word[gbym1] - inc cx - shl ecx, 16 - add ecx, [g_s] - dec ecx - - mcall 13 - - pop edx ecx ebx eax - - ret - - ;;---Draw_square------------------------------------------------------------------------------------------------------- - - -Draw_menu_esc: - ;;===Draw_menu_esc===================================================================================================== - - mov ebx, [window_width] - shr ebx, 1 - sub ebx, string_menu_esc.size*3+6 - shl ebx, 16 - add ebx, dword[top_strings] - mcall 4, ,[navigation_strings_color],string_menu_esc - - ret - - ;;---Draw_menu_esc----------------------------------------------------------------------------------------------------- - - -Draw_score_string: - ;;===Draw_score_string================================================================================================= - - mov ebx, [window_width] - shr ebx, 3 - sub ebx, 5 - shl ebx, 16 - add ebx, dword[bottom_top_strings] - mcall 4, ,[score_string_color],string_score - - ret - - ;;---Draw_score_string------------------------------------------------------------------------------------------------- - - -Draw_score_number: - ;;===Draw_score_number================================================================================================= - - mov edx, [window_width] - shr edx, 3 - sub edx, 5+1 - add edx, string_score.size*6 - shl edx, 16 - add edx, dword[bottom_top_strings] - mcall 47,0x00070000,[score], ,[score_number_color],[background_color] - - ret - - ;;---Draw_score_number------------------------------------------------------------------------------------------------- - - -Draw_hiscore_string: - ;;===Draw_hiscore_string=============================================================================================== - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, string_hi_score.size*6+7*6+5 - shl ebx, 16 - add ebx, dword[bottom_top_strings] - mcall 4, ,[hiscore_string_color],string_hi_score - - ret - - ;;---Draw_hiscore_string----------------------------------------------------------------------------------------------- - - -Draw_hiscore_number: - ;;===Draw_hiscore_number=================================================================================================== - - mov edx, [window_width] - shr edx, 3 - neg edx - add edx, [window_width] - sub edx, 7*6+6 - shl edx, 16 - add edx, dword[bottom_top_strings] - - cmp [play_mode], CLASSIC_MODE - jne @f - mov ecx, [hi_score_classic] - jmp .done - @@: - mov ecx, [hi_score_levels] - - .done: - mcall 47,0x00070000, , ,[hiscore_number_color] - - ret - - ;;---Draw_hiscore_number--------------------------------------------------------------------------------------------------- - - -Draw_champion_string: - ;;===Draw_champion_string================================================================================================== - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, string_champion.size*6+7*6+5 - shl ebx, 16 - add ebx, dword[bottom_bottom_strings] - mcall 4, ,[champion_string_color],string_champion - - ret - - ;;---Draw_champion_string---------------------------------------------------------------------------------------------- - - -Draw_champion_name: - ;;===Draw_champion_name================================================================================================ - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6 ; there is no difference between length of champion names for other play_modes - add ebx, CHAMPION_NAME_LENGTH/2*6 - shl ebx, 16 - add ebx, dword[bottom_bottom_strings] - - cmp [play_mode], CLASSIC_MODE - jne @f - mov edx, champion_name_classic - jmp .done - @@: - mov edx, champion_name_levels - - .done: - mcall 4, ,[champion_name_color], - - ret - - ;;---Draw_champion_name------------------------------------------------------------------------------------------------ - - -Draw_picture: - ;;===Draw_picture====================================================================================================== - ;; in : - ;; ax = number of left square *0x100+ picture width (in squares) - ;; cx = number of top square *0x100+ picture height (in squares) - ;; edx = picture color - ;; esi = pointer to picture data - ;; - - add al, ah - add cl, ch - mov bh, ch - - .draw: - mov bl, ah - mov di, 7 - - .loop: - bt word[esi], di - jnc @f - push eax ebx ecx esi edi - call Draw_square - pop edi esi ecx ebx eax - - @@: - dec di - jns @f - mov di, 7 - inc esi - @@: - inc bl - cmp bl, al - jne .loop - - inc bh - cmp di, 7 - jz @f - inc esi - @@: - cmp bh, cl - jne .draw - - ret - - ;;---Draw_picture------------------------------------------------------------------------------------------------------ - - -Draw_on_map: - ;;===Draw_on_map======================================================================================================= - ;; in : - ;; al = x coord - ;; ah = y coord - ;; cl = value to draw - ;; - - and eax, 0x0000ffff - xor bx, bx - mov bl, al - shr ax, 8 - mov dx, GRID_WIDTH - mul dx - add ax, bx - mov edi, field_map - add edi, eax - mov [edi], cl - - ret - - ;;---Draw_on_map------------------------------------------------------------------------------------------------------- - - -Get_from_map: - ;;===Get_from_map====================================================================================================== - ;; in : - ;; al = x coord - ;; ah = y coord - ;; out : - ;; bl = value on map - ;; - - push eax - - and eax, 0x0000ffff - xor bx, bx - mov bl, al - shr ax, 8 - mov dx, GRID_WIDTH - mul dx - add ax, bx - mov edi, field_map - add edi, eax - mov bl, [edi] - - pop eax - - ret - - ;;---Get_from_map----------------------------------------------------------------------------------------------------------- - - -Load_level: - ;;===Load_level============================================================================================================= - ;; in : - ;; cur_level_number = level number to load - ;; - - mov eax, [cur_level_number] - mov edx, stage_00 - @@: - test al, al - jz @f - add edx, stage_01-stage_00 - dec al - jmp @b - @@: - - mov esi, window_title_with_lives - mov edi, window_title+5 - - .lives_in_title: - cmp [play_mode], LEVELS_MODE - jne .level_name_in_title - test [show_lives_style], 1 - jz .level_name_in_title - mov [edi], byte ' ' - mov al, byte[separating_symbol] - mov [edi+1], byte al - mov [edi+2], byte ' ' - add edi, 3 - mov eax, [lives] - add al, 0x30 - mov [window_title_with_lives], al - mov ecx, 10 - rep movsb - dec edi - - .level_name_in_title: - cmp [draw_level_name_in_window_title], 1 - jne @f - mov [edi], byte ' ' - mov al, byte[separating_symbol] - mov [edi+1], byte al - mov [edi+2], byte ' ' - add edi, 3 - mov esi, edx - add esi, LEVEL.name - mov esi, [esi] - mov ecx, 16 - rep movsd - - @@: - mcall 71,1,window_title - - mov [cur_level], edx - - mov esi, edx - add esi, LEVEL.field - mov edi, field_map - mov ecx, 2 - mov ah, GRID_HEIGHT - .begin: - mov ebx, 7 - mov al, GRID_WIDTH - .loop: - bt [esi], ebx - jnc @f - mov byte[edi], cl - jmp .skip - @@: - mov byte[edi], 0 - .skip: - dec ebx - jns @f - mov ebx, 7 - inc esi - @@: - inc edi - dec al - jnz .loop - inc esi - dec ah - jnz .begin - - - mov esi, edx - add esi, LEVEL.snake_dots - mov edi, snake_dots - mov ecx, 3 - rep movsw - - mov esi, edx - add esi, LEVEL.snake_direction - mov eax, [esi] - mov [snake_direction], eax - - mov esi, edx - add esi, LEVEL.snake_direction_next - mov eax, [esi] - mov [snake_direction_next], eax - - mov esi, edx - add esi, LEVEL.number_of_stones - mov eax, [esi] - mov [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3 - sub [number_of_free_dots], eax - - mov ax, word[snake_dots] - mov cl, 1 - call Draw_on_map - mov ax, word[snake_dots+2] - mov cl, 1 - call Draw_on_map - mov ax, word[snake_dots+4] - mov cl, 1 - call Draw_on_map - - mov [action], 0 - mov [snake_length_x2], 6 - - ret - - ;;---Load_level------------------------------------------------------------------------------------------------------------- - - -Draw_stones: - ;;===Draw_stones============================================================================================================ - - mov ax, 0*0x100+GRID_WIDTH - mov cx, 0*0x100+GRID_HEIGHT - mov edx, [stone_color] - mov esi, [cur_level] - add esi, LEVEL.field - call Draw_picture - - ret - - ;;---Draw_stones------------------------------------------------------------------------------------------------------------ - - -Hide_cursor: - ;;===Hide_cursor=========================================================================================================== - - mcall 37,5,[cursor_handle] - - ret - - ;;---Show_cursor----------------------------------------------------------------------------------------------------------- - - -Show_cursor: - ;;===Hide_cursor=========================================================================================================== - - mcall 37,5,0 - - ret - - ;;---Show_cursor----------------------------------------------------------------------------------------------------------- - - -Set_window_mode: - ;;===Set_window_mode======================================================================================================= - - test al, al - jnz .fullscreen - mov eax, [window_style_windowed] - jmp .quit - - .fullscreen: - mov eax, [window_style_fullscreen] - - .quit: - mov [window_style], eax - ret - -;;---Some_functions------------------------------------------------------------------------------------------------------------ - - -Reverse_snake: - ;;===Reverse_snake========================================================================================================= - - cmp [snake_direction], LEFT - jne @f - mov [snake_direction_next], RIGHT - jmp .quit - @@: - cmp [snake_direction], RIGHT - jne @f - mov [snake_direction_next], LEFT - jmp .quit - @@: - cmp [snake_direction], UP - jne @f - mov [snake_direction_next], DOWN - jmp .quit - @@: - cmp [snake_direction], DOWN - jne @f - mov [snake_direction_next], UP -; jmp .quit - @@: - - .quit: - ret - - ;;---Reverse_snake--------------------------------------------------------------------------------------------------------- - - -;;===Variables================================================================================================================== - -window_title db 'Snake',64+15 dup (0) -window_title_with_lives db '_ live(s)',0 -default_separating_symbol db '|',0 -window_style_windowed dd 0x33000000 ; scalable skinned window -window_style_fullscreen dd 0x00000000 -time_before_waiting dd 0x0 -time_to_wait dd 0x0 -time_wait_limit dd 101 -time_wait_limit_const dd 0x0 - -play_mode dd 0x0 -lives dd START_LIVES -acceleration_mask dd 0x0 - -resized_by_hotkey dd 0x0 -fullscreen dd 0x0 - -szZ string_score ,'SCORE : ' -szZ string_hi_score ,'HI-SCORE : ' -szZ string_champion ,'CHAMPION : ' -szZ string_level ,'LEVEL : ' -szZ string_pause_space ,'PAUSE - ',0x27,'SPACE',0x27 -szZ string_resume_space ,'RESUME - ',0x27,'SPACE',0x27 -szZ string_menu_esc ,'MENU - ',0x27,'ESC',0x27 -szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27 -szZ press_to_start ,'PRESS ',0x27,'ENTER',0x27,' TO START' -szZ press_esc_to_exit ,'PRESS ',0x27,'ESC',0x27,' TO EXIT' -;press_F2_to_options db 'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0 - -szZ string_congratulations ,' Congratulations!!! New hi-score is : ' -szZ string_enter_your_name ,'You are the champion! Enter your name : ' - -szZ string_button_play ,'PLAY' -szZ string_button_exit ,'EXIT' -szZ string_button_inc ,'+INC+' -szZ string_button_dec ,'-dec-' -szZ string_button_pm_classic,'CLASSIC mode' -szZ string_button_pm_levels ,'LEVELS mode' - -is_new_record dd 0 - -action dd 0 - -picture_first_menu_snake db 0xf4,0x99,0x2f,\ - 0x86,0xa5,0x49,\ - 0xf5,0xa5,0x8f,\ - 0x15,0xbd,0x48,\ - 0xf4,0xa5,0x2f - -picture_first_menu_version db 0xf1,0xe0,\ - 0x90,0x20,\ - 0x90,0x20,\ - 0x90,0x20,\ - 0xf4,0x20 - -picture_pause db 11100011b,00100101b,11101111b,\ - 10010100b,10100101b,00001000b,\ - 10010100b,10100101b,00001000b,\ - 11100111b,10100101b,11101111b,\ - 10000100b,10100100b,00101000b,\ - 10000100b,10011001b,11101111b - -picture_game_over db 00110000b,00000000b,00000000b,00000000b,\ - 01001001b,11001000b,10111100b,00000000b,\ - 10000010b,00101101b,10100000b,00000000b,\ - 10011010b,00101010b,10111000b,00000000b,\ - 10001011b,11101000b,10100000b,00000000b,\ - 01110010b,00101000b,10111100b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,00000000b,00000000b,00000000b,\ - 00001000b,10100010b,11110111b,10000000b,\ - 00001000b,10100010b,10000100b,01000000b,\ - 00001000b,10100010b,11100100b,01000000b,\ - 00001000b,10010100b,10000111b,10000000b,\ - 00000111b,00001000b,11110100b,01000000b - -;picture_you_win db 10001001b,11001000b,10000000b,\ -; 10001010b,00101000b,10000000b,\ -; 01010010b,00101000b,10000000b,\ -; 00100010b,00101000b,10000000b,\ -; 00100001b,11000111b,00000000b,\ -; 00000000b,00000000b,00000000b,\ -; 00000000b,00000000b,00000000b,\ -; 01000100b,10010001b,00000000b,\ -; 01010100b,10011001b,00000000b,\ -; 01010100b,10010101b,00000000b,\ -; 01010100b,10010011b,00000000b,\ -; 00101000b,10010001b,00000000b - -picture_you_win db 01000100b,01000011b,10001000b,10000000b,\ - 01000100b,01000100b,01001000b,10000000b,\ - 01000100b,01000100b,00001000b,10000000b,\ - 01111100b,01000100b,11001111b,10000000b,\ - 01000100b,01000100b,01001000b,10000000b,\ - 01000100b,01000011b,10001000b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11110011b,10011100b,11110011b,11000000b,\ - 10000100b,00100010b,10001010b,00000000b,\ - 11110100b,00100010b,10001011b,10000000b,\ - 00010100b,00100010b,11110010b,00000000b,\ - 11110011b,10011100b,10001011b,11000000b - -picture_level db 10000111b,10100101b,11101000b,\ - 10000100b,00100101b,00001000b,\ - 10000111b,00100101b,11001000b,\ - 10000100b,00101001b,00001000b,\ - 11110111b,10110001b,11101111b - -digits_font db 0xf0,0x90,0x90,0x90,0xf0,\ - 0x20,0x60,0x20,0x20,0x20,\ - 0xf0,0x10,0xf0,0x80,0xf0,\ - 0xf0,0x10,0x70,0x10,0xf0,\ - 0x90,0x90,0xf0,0x10,0x10,\ - 0xf0,0x80,0xf0,0x10,0xf0,\ - 0xf0,0x80,0xf0,0x90,0xf0,\ - 0xf0,0x10,0x10,0x10,0x10,\ - 0xf0,0x90,0xf0,0x90,0xf0,\ - 0xf0,0x90,0xf0,0x10,0xf0 - -stage_00: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 3,3, 4,3, 5,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 0 -.name dd stage_00_name - -stage_01: -.field db 11111000b,00000000b,00000001b,11110000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 11111000b,00000000b,00000001b,11110000b - -.snake_dots db 3,3, 4,3, 5,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 36 -.name dd stage_01_name - -stage_02: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00011111b,11000000b,00111111b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00011111b,11000000b,00111111b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 7,5, 8,5, 9,5 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_02_name - -stage_03: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00001111b,11111001b,11111111b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00001111b,11111001b,11111111b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 23,0, 22,0, 21,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 48 -.name dd stage_03_name - -stage_04: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00100000b,01000000b,00000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00010000b,00100000b,01000000b,10000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00010010b,00000000b,00000100b,10000000b,\ - 00010010b,00000000b,00000100b,10000000b,\ - 00000010b,00100000b,01000000b,00000000b,\ - 00010000b,00100000b,01000000b,10000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00000000b,00100000b,01000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 19,6, 19,7, 19,8 -.snake_napravlenie dd DOWN -.snake_napravlenie_next dd DOWN -.number_of_stones dd 39 -.name dd stage_04_name - -stage_05: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,11111111b,11111110b,00000000b,\ - 00000111b,11111111b,11111110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111111b,11111111b,11111111b,11000000b,\ - 00111111b,11111111b,11111111b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,0, 0,1, 1,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 112 -.name dd stage_05_name - -stage_06: -.field db 00000001b,10000000b,00000000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000000b,00000000b,00011000b,00000000b,\ - 00000000b,00000000b,00011000b,00000000b,\ - 00011111b,11111111b,11111000b,00000000b,\ - 00011111b,11111111b,11111000b,00000000b,\ - 00011000b,00000000b,00000000b,00000000b,\ - 00011000b,00000000b,00000000b,00000000b,\ - 00011111b,11111111b,11111111b,11100000b,\ - 00011111b,11111111b,11111111b,11100000b,\ - 00000000b,00000000b,00000000b,01100000b,\ - 00000000b,00000000b,00000000b,01100000b,\ - 00000000b,00000000b,00000000b,01100000b - -.snake_dots db 0,0, 0,1, 1,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 128 -.name dd stage_06_name - -stage_07: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00000000b,00000000b,00000100b,00000000b,\ - 00000011b,11111111b,11110100b,00000000b,\ - 00000010b,00000000b,00010100b,00000000b,\ - 00000010b,11111111b,11010100b,00000000b,\ - 00000010b,00000000b,00010100b,00000000b,\ - 00000010b,11111111b,11110100b,00000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 8,1, 9,1, 10,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 83 -.name dd stage_07_name - -stage_08: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00010000b,00000000b,\ - 00001001b,00000001b,00000000b,00000000b,\ - 00000001b,01001001b,00000101b,00000000b,\ - 00000000b,01000000b,00000100b,00000000b,\ - 00001111b,00000000b,11100000b,00000000b,\ - 00000000b,00000000b,00001000b,10000000b,\ - 00000111b,00100000b,10000010b,10000000b,\ - 00010000b,00000000b,00000010b,00000000b,\ - 00010000b,11000000b,01110010b,00000000b,\ - 00010010b,00000000b,00000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,0, 1,0, 2,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_08_name - -stage_09: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111101b,00100110b,01001011b,11000000b,\ - 00100001b,10101001b,01010010b,00000000b,\ - 00111101b,01100001b,01100011b,10000000b,\ - 00000101b,01100111b,01010010b,00000000b,\ - 00111101b,00100001b,01001011b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 12,6, 12,7, 12,8 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 59 -.name dd stage_09_name - -stage_10: -.field db 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b - -.snake_dots db 3,2, 3,3, 4,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 231 -.name dd stage_10_name - -stage_11: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,00000111b,00000111b,00000000b,\ - 00001101b,10001101b,10001101b,10000000b,\ - 00011000b,11011000b,11011000b,11000000b,\ - 00000000b,01000000b,01000000b,01000000b,\ - 00011000b,11011000b,11011000b,11000000b,\ - 00001101b,10001101b,10001101b,10000000b,\ - 00000111b,00000111b,00000111b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 3,12, 4,12, 5,12 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 69 -.name dd stage_11_name - -stage_12: -.field db 00000000b,00011000b,00001110b,00000000b,\ - 01101110b,00010000b,00001010b,01010000b,\ - 01001011b,11011001b,11000000b,01110000b,\ - 01100001b,01000001b,01000000b,00000000b,\ - 00000000b,00000000b,00000011b,10000000b,\ - 00000000b,00000000b,00000010b,10000000b,\ - 01010011b,00001100b,10100110b,00110000b,\ - 01110010b,00001000b,11100100b,00010000b,\ - 00000011b,00001100b,00000110b,00110000b,\ - 00000000b,11100000b,00000000b,00000000b,\ - 00010100b,10100000b,00000110b,00000000b,\ - 11011100b,00000110b,10100100b,00000000b,\ - 01000011b,10000010b,11100110b,10100000b,\ - 11000010b,10000110b,00000000b,11100000b - -.snake_dots db 27,0, 26,0, 25,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 110 -.name dd stage_12_name - -stage_13: -.field db 00111000b,00100000b,00000000b,00000000b,\ - 01111100b,11110011b,11000011b,10000000b,\ - 11111100b,01110011b,10000001b,11000000b,\ - 11110000b,00000011b,11000000b,00000000b,\ - 00000000b,00000010b,00000000b,00000000b,\ - 00000000b,00000010b,00000001b,00000000b,\ - 00011110b,00000111b,00000111b,00000000b,\ - 00000111b,10001111b,11111110b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00110001b,11111111b,11111001b,01100000b,\ - 00001110b,11101011b,00100111b,10000000b,\ - 01111000b,10000011b,10000010b,00000000b,\ - 00000011b,11100110b,00011010b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,5, 0,6, 0,7 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 141 -.name dd stage_13_name - -stage_14: -.field db 00000110b,00000000b,00000000b,00000000b,\ - 00001000b,00000000b,00011000b,00000000b,\ - 00010000b,00000000b,00000100b,00000000b,\ - 00100001b,10000000b,11000010b,00000000b,\ - 01000010b,01000001b,00100001b,00000000b,\ - 10000100b,00000010b,00010000b,10000000b,\ - 10001000b,00000100b,00001000b,01000000b,\ - 10010000b,00001000b,00000100b,01000000b,\ - 01001000b,00010000b,00001000b,10000000b,\ - 00100100b,00100000b,00010001b,00000000b,\ - 00010010b,01000001b,00100010b,00000000b,\ - 00001001b,10000000b,11000100b,00000000b,\ - 00000100b,00000000b,00001000b,00000000b,\ - 00000000b,00000000b,00110000b,00000000b - -.snake_dots db 8,0, 9,0, 10,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 60 -.name dd stage_14_name - -stage_15: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,01110000b,00110000b,00000000b,\ - 00000000b,10000000b,00001010b,00000000b,\ - 00100001b,00000000b,00110010b,00000000b,\ - 00010001b,00111111b,10011100b,00000000b,\ - 00001001b,00100000b,11000000b,00000000b,\ - 00010000b,00000010b,01000000b,00000000b,\ - 00100000b,00000010b,00100001b,10000000b,\ - 00010000b,00000010b,00110010b,01000000b,\ - 00001000b,01000100b,00011100b,01000000b,\ - 00010000b,00111000b,00010000b,01000000b,\ - 00100000b,00000000b,00010000b,01000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,3, 13,2, 14,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 60 -.name dd stage_15_name - -stage_16: -.field db 00000000b,10000010b,00000000b,00000000b,\ - 00000000b,01001010b,10000010b,10100000b,\ - 01111111b,11100111b,00000001b,11000000b,\ - 00000000b,01000010b,00000000b,10000000b,\ - 00000100b,10000000b,01000000b,00000001b,\ - 00000100b,00100000b,10000000b,00000010b,\ - 11000100b,00010001b,11111000b,00000111b,\ - 00010101b,00001000b,10000000b,00000010b,\ - 00001110b,00010000b,01000000b,00000001b,\ - 00000100b,00100010b,00000000b,10000000b,\ - 00000000b,00000010b,00000000b,01000000b,\ - 00111111b,11111111b,11111111b,11100000b,\ - 00000000b,00000010b,00000000b,01000000b,\ - 00000000b,00000010b,00000000b,10000000b - -.snake_dots db 11,7, 10,7, 9,7 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 96 -.name dd stage_16_name - -stage_17: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,10000001b,11100000b,00000000b,\ - 00001000b,01000010b,00010000b,00000000b,\ - 00010001b,00100100b,01001000b,00000000b,\ - 00010001b,00000000b,01001000b,00000000b,\ - 00001000b,01000010b,00010000b,00000000b,\ - 00000111b,10000001b,11100000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,01000000b,00000000b,00000000b,\ - 00000000b,00111110b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 11,7, 11,8, 12,8 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_17_name - -stage_18: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b - -.snake_dots db 2,5, 3,5, 4,5 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 78 -.name dd stage_18_name - -stage_19: -.field db 01000010b,00100100b,10000101b,00000000b,\ - 00010000b,00010000b,00100000b,10000000b,\ - 00111001b,00000010b,00010000b,00100000b,\ - 01000100b,00001000b,00000010b,00000000b,\ - 01010101b,01000000b,01000000b,01000000b,\ - 01010100b,00010000b,00001000b,11100000b,\ - 00000100b,10001001b,00100001b,00000000b,\ - 01111100b,00100000b,00000001b,01010000b,\ - 00111001b,00000100b,00010001b,01010000b,\ - 00010000b,00000000b,10000001b,00010000b,\ - 11010111b,11100000b,00011101b,11110000b,\ - 00010000b,01000000b,00100000b,11100000b,\ - 00010000b,10000000b,00100000b,01000000b,\ - 00000001b,00000000b,00010000b,01000000b - -.snake_dots db 27,6, 0,6, 1,6 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 95 -.name dd stage_19_name - -stage_20: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,10001000b,00000000b,\ - 00000000b,00011100b,10000100b,00000000b,\ - 00000000b,01100100b,10000010b,00000000b,\ - 00000011b,10000100b,10000100b,00000000b,\ - 00000010b,00000100b,10001000b,00000000b,\ - 00000010b,00000100b,10000100b,00000000b,\ - 00000010b,00000100b,10000010b,00000000b,\ - 00000010b,00111100b,10010010b,00000000b,\ - 00011110b,00111100b,10010100b,00000000b,\ - 00011110b,00111100b,10001000b,00000000b,\ - 00011110b,00000000b,10000000b,00000000b,\ - 00000000b,00000000b,10000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 17,2, 17,3, 17,4 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 65 -.name dd stage_20_name - -stage_21: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,11111111b,11111110b,00000000b,\ - 00000001b,01000100b,01000100b,00000000b,\ - 00000010b,01000100b,01000100b,00000000b,\ - 00001100b,01000100b,01000100b,00000000b,\ - 01110000b,01000100b,01000100b,00000000b,\ - 01110000b,01000100b,01000100b,00000000b,\ - 01110000b,11101110b,11101110b,00000000b,\ - 00000000b,11101110b,11101110b,00000000b,\ - 00000000b,11101110b,11101110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 10,1, 11,1, 12,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 86 -.name dd stage_21_name - -stage_22: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,10000000b,00000000b,00000000b,\ - 00000111b,11100000b,00000000b,00000000b,\ - 00001111b,11110000b,00000000b,00000000b,\ - 00011111b,11100000b,00000000b,00000000b,\ - 00011111b,11000011b,00001100b,00110000b,\ - 00011111b,10000111b,10011110b,01110000b,\ - 00011111b,11000111b,10011110b,01110000b,\ - 00011111b,11100011b,00001100b,00110000b,\ - 00001111b,11110000b,00000000b,00000000b,\ - 00000111b,11100000b,00000000b,00000000b,\ - 00000011b,10000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,7, 1,6, 1,5 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 104 -.name dd stage_22_name - -stage_23: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00100000b,01000101b,00010000b,00100000b,\ - 00011010b,00100101b,00100010b,11000000b,\ - 00000100b,10101000b,10101001b,00000000b,\ - 00000100b,10010010b,01001001b,00000000b,\ - 00001011b,00110000b,01100110b,10000000b,\ - 00000000b,11001010b,10011000b,00000000b,\ - 00000001b,00000111b,00000100b,00000000b,\ - 00001110b,01001010b,10010011b,10000000b,\ - 00000010b,00110000b,01100010b,00000000b,\ - 00000101b,00010010b,01000101b,00000000b,\ - 00001001b,00001000b,10000100b,10000000b,\ - 00000000b,00001000b,10000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 15,0, 14,0, 13,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 85 -.name dd stage_23_name - -stage_24: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00111111b,11111111b,11111111b,10000000b,\ - 00100000b,00000000b,00000000b,10000000b,\ - 00100011b,11111111b,11111000b,10000000b,\ - 00100010b,00000000b,00001000b,10000000b,\ - 00100010b,00111111b,10001000b,10000000b,\ - 00100010b,00100000b,10001000b,10000000b,\ - 00101010b,10101010b,10101010b,10000000b,\ - 00001000b,10001110b,00100010b,00000000b,\ - 00001000b,10000000b,00100010b,00000000b,\ - 00001000b,11111111b,11100010b,00000000b,\ - 00001000b,00000000b,00000010b,00000000b,\ - 00001111b,11111111b,11111110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,0, 0,0, 0,1 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 120 -.name dd stage_24_name - -stage_25: -.field db 00000100b,11000000b,00000000b,00000000b,\ - 00000011b,10000000b,00110010b,00000000b,\ - 10011010b,10000000b,00011100b,00000000b,\ - 01110000b,00000000b,00010101b,10010000b,\ - 01010000b,00000111b,00000000b,11100000b,\ - 00000100b,00000101b,00000000b,10100000b,\ - 00000100b,00000100b,00000000b,00000000b,\ - 00000011b,11111100b,00011001b,00000000b,\ - 00000010b,10010100b,00001110b,00000000b,\ - 00000010b,10010100b,00001010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,00100001b,10010011b,00100000b,\ - 00000001b,11000000b,11100001b,11000000b,\ - 00000001b,01000000b,10100001b,01000000b - -.snake_dots db 11,2, 12,2, 13,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 88 -.name dd stage_25_name - -stage_26: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00111100b,01001111b,01111010b,01000000b,\ - 00100000b,01000001b,00001010b,01000000b,\ - 00100100b,01001111b,01111011b,11000000b,\ - 00000100b,01001000b,00001000b,01000000b,\ - 00111100b,01001111b,01111000b,01000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111101b,11101111b,01111011b,11000000b,\ - 00100001b,00000001b,00000000b,00000000b,\ - 00111101b,11100001b,01111011b,11000000b,\ - 00000100b,00000001b,00000000b,01000000b,\ - 00111101b,11100001b,01111011b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,5, 0,5, 0,6 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 115 -.name dd stage_26_name - -stage_27: -.field db 00000000b,10000000b,00000000b,01000000b,\ - 00000000b,10000000b,01000000b,11100000b,\ - 00100011b,11100000b,01000000b,01000000b,\ - 01110000b,10000001b,11110000b,00000000b,\ - 00100000b,10000000b,01000000b,00000000b,\ - 00000000b,00000000b,01000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000010b,00000000b,00000000b,00000000b,\ - 00000111b,00000000b,00000000b,10000000b,\ - 00000010b,00001000b,00000001b,11000000b,\ - 00000000b,00000000b,10000000b,10000000b,\ - 00000000b,01000001b,11000000b,00000000b,\ - 01000000b,11100000b,10000000b,00000000b,\ - 00000000b,01000000b,00000000b,00000000b - -.snake_dots db 12,8, 12,7, 12,6 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 51 -.name dd stage_27_name - -stage_28: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000100b,00000000b,00000010b,00000000b,\ - 00010100b,00000000b,00000010b,10000000b,\ - 01010100b,00000000b,00000010b,10100000b,\ - 01010101b,11111111b,11111010b,10100000b,\ - 01010100b,00000000b,00000010b,10100000b,\ - 00010100b,00000000b,00000010b,10000000b,\ - 00000100b,00000000b,00000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,8, 12,8, 11,8 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 44 -.name dd stage_28_name - -stage_29: -.field db 00000000b,01110000b,00000000b,00000000b,\ - 00000100b,01000110b,00000001b,10000000b,\ - 01001110b,00001100b,01100000b,11000000b,\ - 01000000b,00000000b,01100000b,00000000b,\ - 01100000b,01111000b,00000001b,10010000b,\ - 00000000b,00000010b,10000101b,10110000b,\ - 00110000b,00110010b,10001100b,00100000b,\ - 00011011b,00110110b,10000100b,00000000b,\ - 00000001b,00000000b,10010000b,10000000b,\ - 00100001b,00000000b,00111000b,10000000b,\ - 00111001b,00110011b,00000011b,10000000b,\ - 01111111b,11111111b,00011011b,11010000b,\ - 11111111b,11111111b,00011111b,11110000b,\ - 11111111b,11111111b,00111111b,11110000b - -.snake_dots db 0,0, 1,0, 2,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 151 -.name dd stage_29_name - -stage_30: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000001b,01011100b,00000000b,\ - 00000000b,00000001b,11001000b,00000000b,\ - 00000100b,00000001b,01001000b,00000000b,\ - 00000100b,00000100b,00000000b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 01111111b,11000100b,11111111b,11100000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00011111b,00111111b,10001110b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00011111b,00011111b,00011111b,00000000b,\ - 11111111b,11111111b,11111111b,11110000b - -.snake_dots db 8,2, 9,2, 10,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 109 -.name dd stage_30_name - -stage_31: -.field db 00000101b,00010000b,00000100b,01000000b,\ - 01000100b,01010101b,00010100b,01000000b,\ - 01000101b,01010101b,01000101b,00010000b,\ - 01010000b,00010100b,01000000b,01010000b,\ - 00010101b,01000101b,01010100b,01000000b,\ - 01000001b,00010000b,01010101b,01000000b,\ - 01010101b,00010100b,00000101b,00010000b,\ - 00000101b,01010000b,01000101b,01010000b,\ - 01010000b,01000100b,00000000b,01010000b,\ - 00010101b,00000101b,00010100b,00010000b,\ - 01010001b,00010001b,01000001b,01000000b,\ - 01000100b,00000101b,01010100b,01010000b,\ - 00010001b,01010100b,00010001b,00010000b,\ - 00000100b,01000001b,00010001b,00000000b - -.snake_dots db 18,8, 17,8, 16,8 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 112 -.name dd stage_31_name - -stage_32: -.field db 11111111b,11111111b,11111111b,11110000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010000b,01000001b,00000100b,00010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10000010b,00001000b,00100000b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 11111111b,11111111b,11111111b,11110000b - -.snake_dots db 1,1, 1,2, 1,3 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 168 -.name dd stage_32_name - -stage_33: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01111111b,11001111b,11111111b,11100000b,\ - 01000100b,01001000b,01000000b,00100000b,\ - 01000100b,01001000b,01000001b,10100000b,\ - 01000100b,01001000b,01001101b,10100000b,\ - 00000000b,00000000b,00000110b,00000000b,\ - 01000100b,01001000b,01000010b,00100000b,\ - 01000100b,01001000b,01001111b,00100000b,\ - 01000100b,01001000b,01001111b,00100000b,\ - 01000100b,01001000b,01000110b,00100000b,\ - 01111111b,11001111b,11111111b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 6,6, 7,6, 8,6 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 109 -.name dd stage_33_name - -stage_34: -.field db 01110000b,00000000b,00000011b,10000000b,\ - 00010010b,00010000b,01111100b,00000000b,\ - 00011110b,00010000b,00100100b,00000000b,\ - 00000100b,00011001b,00100111b,00000000b,\ - 00001111b,10001001b,00100000b,00110000b,\ - 00000001b,00001011b,00101000b,00100000b,\ - 00000001b,00011110b,01111000b,00100000b,\ - 00111000b,00000010b,00001100b,10100000b,\ - 00001110b,00100010b,00000000b,10100000b,\ - 01100011b,11111110b,01000011b,11100000b,\ - 00111110b,00100010b,01000000b,10000000b,\ - 00000000b,01100011b,11000010b,10000000b,\ - 00000000b,01000000b,01100111b,10000000b,\ - 00000000b,00000000b,00000010b,00000000b - -.snake_dots db 7,0, 8,0, 9,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 113 -.name dd stage_34_name - -stage_35: -.field db 00000100b,00000000b,00001010b,00000000b,\ - 00010100b,01000000b,00101010b,00000000b,\ - 00010100b,10000010b,00010010b,10000000b,\ - 00010001b,00000000b,00010010b,10000000b,\ - 00010001b,00000010b,00001010b,10000000b,\ - 01010010b,00000010b,00001000b,10100000b,\ - 01000100b,00000000b,00001000b,10100000b,\ - 01000100b,00000010b,00000100b,10100000b,\ - 01001000b,00000010b,00000100b,00100000b,\ - 01001000b,00000000b,00000010b,00100000b,\ - 00010000b,00000010b,00000010b,00100000b,\ - 00110000b,00000010b,00000010b,00100000b,\ - 00100000b,00000010b,00000001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,11, 13,10, 13,9 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 66 -.name dd stage_35_name - -stage_36: -.field db 10101110b,10001110b,00110100b,11100000b,\ - 11101000b,10001110b,00101010b,10000000b,\ - 10101110b,11101000b,00101010b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,10110010b,01000100b,00000000b,\ - 00000001b,10100101b,01010100b,00000000b,\ - 00000001b,10100101b,00101000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00010001b,11010101b,11010001b,11000000b,\ - 00010001b,11010101b,11010001b,00000000b,\ - 00010001b,00010101b,00010000b,10000000b,\ - 00011101b,11001001b,11011100b,01000000b,\ - 00000000b,00000000b,00000001b,11010000b - -.snake_dots db 27,11, 27,10, 27,9 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 112 -.name dd stage_36_name - - -stage_00_name db 'Classic mode',0 -stage_01_name db 'Begin',0 -stage_02_name db 'Frame',0 -stage_03_name db 'Sight',0 -stage_04_name db 'Dashed',0 -stage_05_name db 'Beams',0 -stage_06_name db 'Pipe',0 -stage_07_name db 'Labyrinth',0 -stage_08_name db 'Sea battle',0 -stage_09_name db 'Recursion',0 -stage_10_name db 'Narrow corridors',0 -stage_11_name db 'CCC',0 -stage_12_name db 'Deadlocks',0 -stage_13_name db 'Boat',0 -stage_14_name db 'Pattern',0 -stage_15_name db 'Guernica',0 -stage_16_name db 'Goto',0 -stage_17_name db 'Smiling face',0 -stage_18_name db 'Waves',0 -stage_19_name db 'First snow',0 -stage_20_name db 'Music and silence',0 -stage_21_name db 'Experiment',0 -stage_22_name db 'Pacman',0 -stage_23_name db 'Intricate pattern',0 -stage_24_name db 'Square arcs',0 -stage_25_name db 'In the animal world',0 -stage_26_name db 'Digits',0 -stage_27_name db 'Pluses',0 -stage_28_name db 'Rod',0 -stage_29_name db 'Tetris',0 -stage_30_name db 'Towers of Hanoi',0 -stage_31_name db 'Ruins',0 -stage_32_name db 'Walls of Akendora',0 -stage_33_name db 'Geranium in the window',0 -stage_34_name db 'Algae',0 -stage_35_name db 'The road ahead',0 -stage_36_name db 'Help me draw levels!',0 - - -background_color dd 0x000000 -decorations_color dd 0x00000000 -snake_color dd 0x000000 -snake_head_color dd 0x000000 -lives_in_head_number_color dd 0x000000 -snake_picture_color dd 0x000000 -version_picture_color dd 0x000000 -pause_picture_color dd 0x000000 -game_over_picture_color dd 0x000000 -you_win_picture_color dd 0x000000 -eat_color dd 0x000000 -navigation_strings_color dd 0x80000000 -game_over_strings_color dd 0x80000000 -score_string_color dd 0x80000000 -hiscore_string_color dd 0x80000000 -champion_string_color dd 0x80000000 -game_over_hiscore_color dd 0x80000000 -score_number_color dd 0x40000000 -hiscore_number_color dd 0x00000000 -champion_name_color dd 0x80000000 -button_color dd 0x000000 -button_text_color dd 0x80000000 -stone_color dd 0x000000 -splash_background_color dd 0x000000 -splash_level_string_color dd 0x000000 -splash_level_number_color dd 0x000000 -level_string_color dd 0x80000000 -level_number_color dd 0x00000000 - - -align 4 -@IMPORT: - -library \ - libini , 'libini.obj' ,\ - box_lib , 'box_lib.obj' - -import libini,\ - ini.get_str , 'ini_get_str' ,\ - ini.get_int , 'ini_get_int' ,\ - ini.set_str , 'ini_set_str' ,\ - ini.set_int , 'ini_set_int' ,\ - ini.get_color , 'ini_get_color' ,\ - ini.get_shortcut, 'ini_get_shortcut' - -import box_lib,\ - edit_box.draw , 'edit_box' ,\ - edit_box.key , 'edit_box_key' ,\ - edit_box.mouse , 'edit_box_mouse' - -bFirstDraw db 0 - -aPreferences db 'Preferences',0 -aSpeed db 'Speed',0 -aTheme db 'Theme',0 -aSmart_reverse db 'Smart_reverse',0 -aShow_lives_style db 'Show_lives_style',0 -aDraw_level_name_in_window_title db 'Draw_level_name_in_window_title',0 -aSeparating_symbol db 'Separating_symbol',0 - -aShortcuts db 'Shortcuts',0 -aMove_left db 'Move_left',0 -aMove_down db 'Move_down',0 -aMove_up db 'Move_up',0 -aMove_right db 'Move_right',0 -aReverse db 'Reverse',0 -aIncrease db 'Increase',0 -aDecrease db 'Decrease',0 - -aTheme_name db 32 dup (0) -aDecorations db 'Decorations',0 -aBackground_color db 'Background_color',0 -aDecorations_color db 'Decorations_color',0 -aSnake_color db 'Snake_color',0 -aSnake_head_color db 'Snake_head_color',0 -aLives_in_head_number_color db 'Lives_in_head_number_color',0 -aSnake_picture_color db 'Snake_picture_color',0 -aVersion_picture_color db 'Version_picture_color',0 -aPause_picture_color db 'Pause_picture_color',0 -aGame_over_picture_color db 'Game_over_picture_color',0 -aYou_win_picture_color db 'You_win_picture_color',0 -aEat_color db 'Eat_color',0 -aNavigation_strings_color db 'Navigation_string_color',0 -aGame_over_strings_color db 'Game_over_string_color',0 -aScore_string_color db 'Score_string_color',0 -aHiscore_string_color db 'Hiscore_string_color',0 -aChampion_string_color db 'Champion_string_color',0 -aGame_over_hiscore_color db 'Game_over_hiscore_color',0 -aScore_number_color db 'Score_number_color',0 -aHiscore_number_color db 'Hiscore_number_color',0 -aChampion_name_color db 'Champion_name_color',0 -aEdit_box_selection_color db 'Edit_box_selection_color',0 -aButton_color db 'Button_color',0 -aButton_text_color db 'Button_text_color',0 -aStone_color db 'Stone_color',0 -aSplash_background_color db 'Splash_background_color',0 -aSplash_level_string_color db 'Splash_level_string_color',0 -aSplash_level_number_color db 'Splash_level_number_color',0 -aLevel_string_color db 'Level_string_color',0 -aLevel_number_color db 'Level_number_color',0 - -aReserved db 'Reserved',0 -aSquare_side_length db 'Square_side_length',0 -aHiscore_classic db 'Hiscore_classic',0 -aChampion_name_classic db 'Champion_name_classic',0 -aHiscore_levels db 'Hiscore_levels',0 -aChampion_name_levels db 'Champion_name_levels',0 - -edit1 edit_box 65,397,0x0,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1 - -hed db '',0 -;;---Variables------------------------------------------------------------------------------------------------------------- -i_end: -hed_end: -rb 256 -mouse_dd rd 1 - -window_style rd 1 - -cur_level rd 1 -cur_level_number rd 1 -hi_level rd 1 - -score rd 1 -hi_score_classic rd 1 -hi_score_levels rd 1 - -champion_name_classic rb CHAMPION_NAME_LENGTH -champion_name_levels rb CHAMPION_NAME_LENGTH - -snake_dots rb GRID_WIDTH*GRID_HEIGHT*2+3 ; +3 bytes for faster dword copying -snake_direction rd 1 -snake_direction_next rd 1 -snake_length_x2 rd 1 - -decorations rd 1 -number_of_free_dots rd 1 - -eat rw 1 - -g_s rd 1 -g_e rd 1 - -window_width rd 1 -window_height rd 1 -wp_x rd 1 -wp_y rd 1 - -gw_mul_gs rd 1 -gh_mul_gs rd 1 -gbxm1_plus_gw_mul_gs rd 1 -gbym1_plus_gh_mul_gs rd 1 -gs_shl16_gs rd 1 -gbxm1_shl16_gbxm1 rd 1 -gbym1_shl16_gbym1 rd 1 - -bottom_top_strings rd 1 -bottom_middle_strings rd 1 -bottom_bottom_strings rd 1 -top_strings rd 1 - -button_x_left rd 1 -button_x_right rd 1 -button_y_top rd 1 -button_y_middle rd 1 -button_y_bottom rd 1 -button_width_short rd 1 -button_width_long rd 1 -button_height rd 1 - -cursor_data rb 32*32*4 -cursor_handle rd 1 - -cur_dir_path rb 4096 -@PARAMS rb 4096 - -field_map rb GRID_WIDTH*GRID_HEIGHT*2 - -proc_info process_information - -smart_reverse rd 1 -show_lives_style rd 1 -draw_level_name_in_window_title rd 1 -separating_symbol rd 1 - -shortcut_move_left rb 1 -shortcut_move_down rb 1 -shortcut_move_up rb 1 -shortcut_move_right rb 1 -shortcut_reverse rb 1 -shortcut_increase rb 1 -shortcut_decrease rb 1 - -square_side_length rd 1 - -gbxm1 rd 1 -gbym1 rd 1 -speed_up_counter rw 1 - -rb 4096 -stacktop: -d_end: +; SPDX-License-Identifier: NOASSERTION +; + +;;===HEADER==================================================================================================================== + +use32 + org 0x0 + db 'MENUET01' + dd 0x01,start,i_end,d_end,stacktop,0x0,cur_dir_path + +;;---HEADER-------------------------------------------------------------------------------------------------------------------- + +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +;include '../../system/board/debug.inc' + +;;===Define_chapter============================================================================================================ + +WINDOW_MODE_WINDOWED equ 0 +WINDOW_MODE_FULLSCREEN equ 1 + +GRID_WIDTH equ 28 +GRID_HEIGHT equ 14 + +MIN_SQUARE_SIDE_LENGTH equ 9 + +SCORE_EAT equ 100 + +LEFT equ 0 +DOWN equ 1 +UP equ 2 +RIGHT equ 3 + +struct LEVEL + field db 4*GRID_HEIGHT dup (?) + snake_dots db 6 dup (?) + snake_direction dd ? + snake_direction_next dd ? + number_of_stones dd ? + name dd ? +ends + +CLASSIC_MODE equ 0 +LEVELS_MODE equ 1 + +CLASSIC_MODE_FIRST_LEVEL equ 0 +LEVELS_MODE_FIRST_LEVEL equ 1 + +EAT_TO_END_LEVEL equ 7 +PAUSE_BETWEEN_LEVELS equ 200 +PAUSE_WHILE_DRAWING_SPLASH equ 3 + +CHAMPION_NAME_LENGTH equ 15 +LAST_LEVEL_NUMBER equ 36 + +START_LIVES equ 3 + +;;---Define_chapter------------------------------------------------------------------------------------------------------------ + +start: + +stdcall dll.Load,@IMPORT + or eax, eax + jnz Exit + +align 4 + + mov edi, cur_dir_path + mov al, 0 + mov ecx, 4096 + repne scasb + mov dword[edi-1], '.ini' + + invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80 + neg eax + add [time_wait_limit], eax + mov ebx, [time_wait_limit] + mov [time_wait_limit_const], ebx + sub ebx, 4 + mov eax, 200 + div bl + mov byte[speed_up_counter], al + mov byte[speed_up_counter+1], al + invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name + invoke ini.get_int, cur_dir_path, aPreferences, aSmart_reverse, 0 + mov [smart_reverse], eax + invoke ini.get_int, cur_dir_path, aPreferences, aShow_lives_style, 2 + mov [show_lives_style], eax + invoke ini.get_int, cur_dir_path, aPreferences, aDraw_level_name_in_window_title, 1 + mov [draw_level_name_in_window_title], eax + invoke ini.get_str, cur_dir_path, aPreferences, aSeparating_symbol, separating_symbol, 3, default_separating_symbol + + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_left, 0x23, 0 + mov [shortcut_move_left], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_down, 0x24, 0 + mov [shortcut_move_down], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_up, 0x25, 0 + mov [shortcut_move_up], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_right, 0x26, 0 + mov [shortcut_move_right], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aReverse, 0x0F, 0 + mov [shortcut_reverse], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aIncrease, 0x16, 0 + mov [shortcut_increase], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aDecrease, 0x17, 0 + mov [shortcut_decrease], al + + invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 3 + mov [decorations], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000 + or [background_color], eax + or [window_style_windowed], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x232300 + or [decorations_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff + or [snake_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff + or [snake_head_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLives_in_head_number_color, 0xff8800 + or [lives_in_head_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff + or [snake_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55 + or [version_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11 + or [pause_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111 + or [game_over_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11 + or [you_win_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11 + or [eat_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777 + or [navigation_strings_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900 + or [game_over_strings_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff + or [score_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff + or [level_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff + or [hiscore_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff + or [champion_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44 + or [game_over_hiscore_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff + or [score_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff + or [level_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff + or [hiscore_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff + or [champion_name_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00 + or [edit1.shift_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD + or [button_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000 + or [button_text_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700 + or [stone_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00 + or [splash_background_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000 + or [splash_level_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000 + or [splash_level_string_color], eax + + invoke ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19 + mov [square_side_length], eax + invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic + invoke ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777 + or [hi_score_classic], eax + invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels + invoke ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777 + or [hi_score_levels], eax + + mov eax, [background_color] + mov [edit1.color], eax + mov [edit1.focus_border_color], eax + mov [edit1.blur_border_color], eax + mov eax, [game_over_hiscore_color] + mov [edit1.text_color], eax + + mcall 37,4,cursor_data,2 ; load empty cursor (for "hiding" cursor while level_mode) + mov [cursor_handle], eax + + mov eax, WINDOW_MODE_WINDOWED + call Set_window_mode + mcall 0,0,0,[window_style_windowed] ; create empty window. Set_geometry will set all parameters + call Set_geometry.by_hotkey + mcall 71,1,window_title + +include 'first_menu.asm' ; First menu body and functions +include 'level.asm' ; Level body and functions (game process) +include 'pause.asm' ; Pause body and functions +include 'game_over.asm' ; Game_over body and functions + +;;===Some_functions============================================================================================================ + + +Save_do_smth_else_and_exit: + ;;===Save_do_smth_else_and_exit============================================================================================ + + mcall 37,6,[cursor_handle] ; delete cursor + + invoke ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length] + + mov edi, champion_name_classic + xor al, al + mov ecx, CHAMPION_NAME_LENGTH+1 + cld + repne scasb + neg ecx + add ecx, CHAMPION_NAME_LENGTH + invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx + invoke ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic] + + mov edi, champion_name_levels + xor al, al + mov ecx, CHAMPION_NAME_LENGTH+1 + cld + repne scasb + neg ecx + add ecx, CHAMPION_NAME_LENGTH + invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx + invoke ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels] + + ;;---Save_do_smth_else_and_exit-------------------------------------------------------------------------------------------- + + +Exit: + ;;===Exit================================================================================================================== + + or eax, -1 + int 0x40 + + ;;---Exit------------------------------------------------------------------------------------------------------------------ + + +Set_geometry: + ;;===Set_geometry========================================================================================================== + + cmp [resized_by_hotkey], 1 + je .by_hotkey + + test [proc_info.wnd_state], 0x01 + jnz .by_hotkey + + mcall 9,proc_info,-1 + test [proc_info.wnd_state], 0x04 ; is rolled up? + jz @f + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + jmp .quit + @@: + mov eax, [proc_info.box.width] + cmp eax, [window_width] + jne @f + mov eax, [proc_info.box.height] + cmp eax, [window_height] + jne @f + jmp .quit + @@: + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + + .by_mouse: ; or any other kind of resizing. for example, double click on window title + + test [proc_info.wnd_state], 0x01 + jnz .by_hotkey + + + cmp [window_width], 250 + jnl @f + mov [window_width], 250 + @@: + cmp [window_height], 150 + jnl @f + mov [window_height], 150 + @@: + + mcall 48,4 + mov ecx, [window_height] + sub ecx, eax + sub ecx, 5 + sub ecx, [g_e] + sub ecx, [g_e] + sub ecx, 25+30 + mov esi, ecx + + mov eax, [window_width] + sub eax, 5+5 + sub eax, [g_e] + sub eax, [g_e] + sub eax, [g_s] + sub eax, [g_s] + mov edi, eax + + mov dx, 0 + div cx + cmp ax, 2 + jl .fit_to_width + + .fit_to_height: + mov eax, esi + mov ebx, GRID_HEIGHT + div bl + cmp al, MIN_SQUARE_SIDE_LENGTH + jnl @f + mov al, MIN_SQUARE_SIDE_LENGTH + @@: + dec al + mov byte[square_side_length], al + jmp .by_hotkey + + .fit_to_width: + mov eax, edi + mov ebx, GRID_WIDTH + div bl + cmp al, MIN_SQUARE_SIDE_LENGTH + jnl @f + mov al, MIN_SQUARE_SIDE_LENGTH + @@: + dec al + mov byte[square_side_length], al + jmp .by_hotkey + +; jmp .done + + .by_hotkey: + mcall 9,proc_info,-1 + mov [resized_by_hotkey], 0 + test [proc_info.wnd_state], 0x04 ; is rolled up? + jz @f + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + jmp .quit + @@: + mov eax, [square_side_length] + inc eax ; space between squares + mov [g_s], eax + + mov eax, [g_s] + shr eax, 1 + mov ebx, eax + shr ebx, 1 + add eax, ebx + mov [g_e], eax + + mov edx, GRID_WIDTH + mov eax, [g_s] + mul dx + mov [gw_mul_gs], eax + + mov edx, GRID_HEIGHT + mov eax, [g_s] + mul dx + mov [gh_mul_gs], eax + + mov eax, [gw_mul_gs] + add eax, [g_s] + add eax, [g_s] + add eax, [g_e] + add eax, [g_e] + add eax, 5*2 ; skin width + mov esi, eax + test [proc_info.wnd_state], 0x01 + jz @f + mov eax, [proc_info.box.width] + @@: + mov [window_width], eax + + sub eax, [gw_mul_gs] + sub eax, 5*2 + shr eax, 1 + mov [gbxm1], eax + + mcall 48,4 ; get skin header height + mov ebx, eax + add eax, [gh_mul_gs] + add eax, [g_e] + add eax, 25 + add eax, [g_e] + add eax, 30 + add eax, 5 ; skin height (bottom part) + mov edi, eax + test [proc_info.wnd_state], 0x01 + jz @f + mov eax, [proc_info.box.height] + @@: + mov [window_height], eax + + sub eax, [gh_mul_gs] + sub eax, ebx + sub eax, 5 + sub eax, 5 + + shr eax, 1 + mov [gbym1], eax + + mov eax, [g_s] + shl eax, 16 + add eax, [g_s] + mov [gs_shl16_gs], eax + + mov eax, [gbxm1] + shl eax, 16 + add eax, [gbxm1] + mov [gbxm1_shl16_gbxm1], eax + + mov eax, [gbym1] + shl eax, 16 + add eax, [gbym1] + mov [gbym1_shl16_gbym1], eax + + mov eax, [gbxm1] + add eax, [gw_mul_gs] + mov [gbxm1_plus_gw_mul_gs], eax + + mov eax, [gbym1] + add eax, [gh_mul_gs] + mov [gbym1_plus_gh_mul_gs], eax + + mcall 48, 5 + mov dx, ax + shr eax, 16 + sub dx, ax + cmp dx, si ; does window fit to work area width? + jnl @f + dec [square_side_length] + jmp Set_geometry.by_hotkey + @@: + + mov cx, bx + shr ebx, 16 + sub cx, bx + cmp cx, di ; does window fit to work area height? + jnl @f + dec [square_side_length] + jmp Set_geometry.by_hotkey + @@: + + sub dx, si + shr dx, 1 + mov word[wp_x], dx + sub cx, word[window_height] + shr cx, 1 + mov dx, cx + shr cx, 1 + add cx, dx + mov word[wp_y], cx + + mov [top_strings], 8 + mov eax, [window_height] + sub eax, 50 + mov [bottom_top_strings], eax + add eax, 6 + mov [bottom_middle_strings], eax + add eax, 6 + mov [bottom_bottom_strings], eax + + sub eax, 4 + mov [edit1.top], eax + + + mov eax, [g_s] + shl eax, 2 + sub eax, 2 + mov [button_width_short], eax + mov eax, [g_s] + shl eax, 3 + add eax, [g_s] + sub eax, 2 + mov [button_width_long], eax + mov eax, [g_s] + sub eax, 2 + mov [button_height], eax + + mov bl, 0x10 + mov cl, 0x08 + + mov al, byte[g_s] + mul bl + mov bx, ax + add bx, word[gbxm1] + inc bx + + mov al, byte[g_s] + mul cl + mov cx, ax + add cx, word[gbym1] + inc cx + + mov [button_x_left], ebx + mov [button_y_top], ecx + + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + + mov [button_x_right], ebx + + add ecx, [g_s] + add ecx, [g_s] + + mov [button_y_middle], ecx + + add ecx, [g_s] + add ecx, [g_s] + + mov [button_y_bottom], ecx + + .done: + mcall 67,[wp_x],[wp_y],[window_width],[window_height] + + .quit: + ret + + ;;---Set_geometry------------------------------------------------------------------------------------------------------ + + +Increase_geometry: + ;;===Increase_geometry================================================================================================= + + inc [square_side_length] + mov [resized_by_hotkey], 1 + + ret + + ;;---Increase_geometry------------------------------------------------------------------------------------------------- + + +Decrease_geometry: + ;;===Decrease_geometry================================================================================================= + + cmp [square_side_length], MIN_SQUARE_SIDE_LENGTH + je @f + dec [square_side_length] + mov [resized_by_hotkey], 1 + + @@: + ret + + ;;---Decrease_geometry------------------------------------------------------------------------------------------------- + + +Draw_decorations: + ;;===Draw_decorations================================================================================================== + + mov al, byte[decorations] + dec al + jz grid_lines + dec al + jz grid_lines_with_ends + dec al + jz grid_lines_with_corners + dec al + jz grid_dots + dec al + jz borders_lines + dec al + jz borders_lines_with_corners + dec al + jz borders_dots + dec al + jz corners_dots + dec al + jz corners_inner + dec al + jz corners_outer + dec al + jz corners_crosses + ret + + + grid_lines: + + mov eax, 38 +;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1) + mov ebx, [gbxm1_shl16_gbxm1] +;mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP) + mov ecx, [gbym1_shl16_gbym1] + add ecx, [gh_mul_gs] + mov edx, [decorations_color] + mov esi, GRID_WIDTH + add esi, 1 + + @@: + mcall + add ebx, [gs_shl16_gs] + dec esi + jnz @b + +;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP) + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [gw_mul_gs] + mov ecx, [gbym1_shl16_gbym1] + mov esi, GRID_HEIGHT + add esi, 1 + + @@: + mcall + add ecx, [gs_shl16_gs] + dec esi + jnz @b + + ret + + + grid_lines_with_ends: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1] + sub ecx, [g_e] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + add ecx, [g_e] + mov edx, [decorations_color] + mov esi, GRID_WIDTH + add esi, 1 + + @@: + mcall + add ebx, [gs_shl16_gs] + dec esi + jnz @b + + mov ebx, [gbxm1] + sub ebx, [g_e] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + add ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov esi, GRID_HEIGHT + add esi, 1 + + @@: + mcall + add ecx, [gs_shl16_gs] + dec esi + jnz @b + + ret + + + grid_lines_with_corners: + + call grid_lines + call corners_outer + + ret + + + grid_dots: + + mov eax, 1 + mov ebx, [gbxm1] + mov ecx, [gbym1] + mov edx, [decorations_color] + + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jg @f + mov ebx, [gbxm1] + jmp @b + + @@: + ret + + + borders_lines: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + add ecx, [gh_mul_gs] + mov edx, [decorations_color] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [gw_mul_gs] + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + ret + + + borders_lines_with_corners: + + call borders_lines + call corners_outer + + ret + + + borders_dots: + + mov eax, 1 + mov ebx, [gbxm1] + mov ecx, [gbym1] + mov edx, [decorations_color] + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + + mov ebx, [gbxm1] + mov ecx, [gbym1_plus_gh_mul_gs] + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + + mov ebx, [gbxm1] + mov ecx, [gbym1] + @@: + mcall + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jng @b + + mov ebx, [gbxm1_plus_gw_mul_gs] + mov ecx, [gbym1] + @@: + mcall + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jng @b + + ret + + + corners_dots: + + mov eax, 13 + mov ebx, [gbxm1] + dec ebx + shl ebx, 16 + add ebx, 2 + mov ecx, [gbym1] + dec ecx + shl ecx, 16 + add ecx, 2 + mov edx, [decorations_color] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, 2 + mcall + + mov ebx, [gbxm1] + dec ebx + shl ebx, 16 + add ebx, 2 + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, 2 + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, 2 + mcall + + ret + + + corners_inner: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov edx, [decorations_color] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + sub ebx, [g_e] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + add ecx, [g_e] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + sub ecx, [g_e] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mcall + + ret + + + corners_outer: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + sub ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov edx, [decorations_color] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + add ebx, [g_e] + mcall + + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + sub ecx, [g_e] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + add ecx, [g_e] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mcall + + ret + + + corners_crosses: + + call corners_inner + call corners_outer + + ret + + + ;;---Draw_decorations-------------------------------------------------------------------------------------------------- + + +Draw_square: + ;;===Draw_square======================================================================================================= + ;; bl - x_coord + ;; bh - y_coord + ;; edx - color + + push eax ebx ecx edx + + mov cl, bh + + mov al, byte[g_s] + mul bl + mov bx, ax + add bx, word[gbxm1] + inc bx + shl ebx, 16 + add ebx, [g_s] + dec ebx + + mov al, byte[g_s] + mul cl + mov cx, ax + add cx, word[gbym1] + inc cx + shl ecx, 16 + add ecx, [g_s] + dec ecx + + mcall 13 + + pop edx ecx ebx eax + + ret + + ;;---Draw_square------------------------------------------------------------------------------------------------------- + + +Draw_menu_esc: + ;;===Draw_menu_esc===================================================================================================== + + mov ebx, [window_width] + shr ebx, 1 + sub ebx, string_menu_esc.size*3+6 + shl ebx, 16 + add ebx, dword[top_strings] + mcall 4, ,[navigation_strings_color],string_menu_esc + + ret + + ;;---Draw_menu_esc----------------------------------------------------------------------------------------------------- + + +Draw_score_string: + ;;===Draw_score_string================================================================================================= + + mov ebx, [window_width] + shr ebx, 3 + sub ebx, 5 + shl ebx, 16 + add ebx, dword[bottom_top_strings] + mcall 4, ,[score_string_color],string_score + + ret + + ;;---Draw_score_string------------------------------------------------------------------------------------------------- + + +Draw_score_number: + ;;===Draw_score_number================================================================================================= + + mov edx, [window_width] + shr edx, 3 + sub edx, 5+1 + add edx, string_score.size*6 + shl edx, 16 + add edx, dword[bottom_top_strings] + mcall 47,0x00070000,[score], ,[score_number_color],[background_color] + + ret + + ;;---Draw_score_number------------------------------------------------------------------------------------------------- + + +Draw_hiscore_string: + ;;===Draw_hiscore_string=============================================================================================== + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, string_hi_score.size*6+7*6+5 + shl ebx, 16 + add ebx, dword[bottom_top_strings] + mcall 4, ,[hiscore_string_color],string_hi_score + + ret + + ;;---Draw_hiscore_string----------------------------------------------------------------------------------------------- + + +Draw_hiscore_number: + ;;===Draw_hiscore_number=================================================================================================== + + mov edx, [window_width] + shr edx, 3 + neg edx + add edx, [window_width] + sub edx, 7*6+6 + shl edx, 16 + add edx, dword[bottom_top_strings] + + cmp [play_mode], CLASSIC_MODE + jne @f + mov ecx, [hi_score_classic] + jmp .done + @@: + mov ecx, [hi_score_levels] + + .done: + mcall 47,0x00070000, , ,[hiscore_number_color] + + ret + + ;;---Draw_hiscore_number--------------------------------------------------------------------------------------------------- + + +Draw_champion_string: + ;;===Draw_champion_string================================================================================================== + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, string_champion.size*6+7*6+5 + shl ebx, 16 + add ebx, dword[bottom_bottom_strings] + mcall 4, ,[champion_string_color],string_champion + + ret + + ;;---Draw_champion_string---------------------------------------------------------------------------------------------- + + +Draw_champion_name: + ;;===Draw_champion_name================================================================================================ + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6 ; there is no difference between length of champion names for other play_modes + add ebx, CHAMPION_NAME_LENGTH/2*6 + shl ebx, 16 + add ebx, dword[bottom_bottom_strings] + + cmp [play_mode], CLASSIC_MODE + jne @f + mov edx, champion_name_classic + jmp .done + @@: + mov edx, champion_name_levels + + .done: + mcall 4, ,[champion_name_color], + + ret + + ;;---Draw_champion_name------------------------------------------------------------------------------------------------ + + +Draw_picture: + ;;===Draw_picture====================================================================================================== + ;; in : + ;; ax = number of left square *0x100+ picture width (in squares) + ;; cx = number of top square *0x100+ picture height (in squares) + ;; edx = picture color + ;; esi = pointer to picture data + ;; + + add al, ah + add cl, ch + mov bh, ch + + .draw: + mov bl, ah + mov di, 7 + + .loop: + bt word[esi], di + jnc @f + push eax ebx ecx esi edi + call Draw_square + pop edi esi ecx ebx eax + + @@: + dec di + jns @f + mov di, 7 + inc esi + @@: + inc bl + cmp bl, al + jne .loop + + inc bh + cmp di, 7 + jz @f + inc esi + @@: + cmp bh, cl + jne .draw + + ret + + ;;---Draw_picture------------------------------------------------------------------------------------------------------ + + +Draw_on_map: + ;;===Draw_on_map======================================================================================================= + ;; in : + ;; al = x coord + ;; ah = y coord + ;; cl = value to draw + ;; + + and eax, 0x0000ffff + xor bx, bx + mov bl, al + shr ax, 8 + mov dx, GRID_WIDTH + mul dx + add ax, bx + mov edi, field_map + add edi, eax + mov [edi], cl + + ret + + ;;---Draw_on_map------------------------------------------------------------------------------------------------------- + + +Get_from_map: + ;;===Get_from_map====================================================================================================== + ;; in : + ;; al = x coord + ;; ah = y coord + ;; out : + ;; bl = value on map + ;; + + push eax + + and eax, 0x0000ffff + xor bx, bx + mov bl, al + shr ax, 8 + mov dx, GRID_WIDTH + mul dx + add ax, bx + mov edi, field_map + add edi, eax + mov bl, [edi] + + pop eax + + ret + + ;;---Get_from_map----------------------------------------------------------------------------------------------------------- + + +Load_level: + ;;===Load_level============================================================================================================= + ;; in : + ;; cur_level_number = level number to load + ;; + + mov eax, [cur_level_number] + mov edx, stage_00 + @@: + test al, al + jz @f + add edx, stage_01-stage_00 + dec al + jmp @b + @@: + + mov esi, window_title_with_lives + mov edi, window_title+5 + + .lives_in_title: + cmp [play_mode], LEVELS_MODE + jne .level_name_in_title + test [show_lives_style], 1 + jz .level_name_in_title + mov [edi], byte ' ' + mov al, byte[separating_symbol] + mov [edi+1], byte al + mov [edi+2], byte ' ' + add edi, 3 + mov eax, [lives] + add al, 0x30 + mov [window_title_with_lives], al + mov ecx, 10 + rep movsb + dec edi + + .level_name_in_title: + cmp [draw_level_name_in_window_title], 1 + jne @f + mov [edi], byte ' ' + mov al, byte[separating_symbol] + mov [edi+1], byte al + mov [edi+2], byte ' ' + add edi, 3 + mov esi, edx + add esi, LEVEL.name + mov esi, [esi] + mov ecx, 16 + rep movsd + + @@: + mcall 71,1,window_title + + mov [cur_level], edx + + mov esi, edx + add esi, LEVEL.field + mov edi, field_map + mov ecx, 2 + mov ah, GRID_HEIGHT + .begin: + mov ebx, 7 + mov al, GRID_WIDTH + .loop: + bt [esi], ebx + jnc @f + mov byte[edi], cl + jmp .skip + @@: + mov byte[edi], 0 + .skip: + dec ebx + jns @f + mov ebx, 7 + inc esi + @@: + inc edi + dec al + jnz .loop + inc esi + dec ah + jnz .begin + + + mov esi, edx + add esi, LEVEL.snake_dots + mov edi, snake_dots + mov ecx, 3 + rep movsw + + mov esi, edx + add esi, LEVEL.snake_direction + mov eax, [esi] + mov [snake_direction], eax + + mov esi, edx + add esi, LEVEL.snake_direction_next + mov eax, [esi] + mov [snake_direction_next], eax + + mov esi, edx + add esi, LEVEL.number_of_stones + mov eax, [esi] + mov [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3 + sub [number_of_free_dots], eax + + mov ax, word[snake_dots] + mov cl, 1 + call Draw_on_map + mov ax, word[snake_dots+2] + mov cl, 1 + call Draw_on_map + mov ax, word[snake_dots+4] + mov cl, 1 + call Draw_on_map + + mov [action], 0 + mov [snake_length_x2], 6 + + ret + + ;;---Load_level------------------------------------------------------------------------------------------------------------- + + +Draw_stones: + ;;===Draw_stones============================================================================================================ + + mov ax, 0*0x100+GRID_WIDTH + mov cx, 0*0x100+GRID_HEIGHT + mov edx, [stone_color] + mov esi, [cur_level] + add esi, LEVEL.field + call Draw_picture + + ret + + ;;---Draw_stones------------------------------------------------------------------------------------------------------------ + + +Hide_cursor: + ;;===Hide_cursor=========================================================================================================== + + mcall 37,5,[cursor_handle] + + ret + + ;;---Show_cursor----------------------------------------------------------------------------------------------------------- + + +Show_cursor: + ;;===Hide_cursor=========================================================================================================== + + mcall 37,5,0 + + ret + + ;;---Show_cursor----------------------------------------------------------------------------------------------------------- + + +Set_window_mode: + ;;===Set_window_mode======================================================================================================= + + test al, al + jnz .fullscreen + mov eax, [window_style_windowed] + jmp .quit + + .fullscreen: + mov eax, [window_style_fullscreen] + + .quit: + mov [window_style], eax + ret + +;;---Some_functions------------------------------------------------------------------------------------------------------------ + + +Reverse_snake: + ;;===Reverse_snake========================================================================================================= + + cmp [snake_direction], LEFT + jne @f + mov [snake_direction_next], RIGHT + jmp .quit + @@: + cmp [snake_direction], RIGHT + jne @f + mov [snake_direction_next], LEFT + jmp .quit + @@: + cmp [snake_direction], UP + jne @f + mov [snake_direction_next], DOWN + jmp .quit + @@: + cmp [snake_direction], DOWN + jne @f + mov [snake_direction_next], UP +; jmp .quit + @@: + + .quit: + ret + + ;;---Reverse_snake--------------------------------------------------------------------------------------------------------- + + +;;===Variables================================================================================================================== + +window_title db 'Snake',64+15 dup (0) +window_title_with_lives db '_ live(s)',0 +default_separating_symbol db '|',0 +window_style_windowed dd 0x33000000 ; scalable skinned window +window_style_fullscreen dd 0x00000000 +time_before_waiting dd 0x0 +time_to_wait dd 0x0 +time_wait_limit dd 101 +time_wait_limit_const dd 0x0 + +play_mode dd 0x0 +lives dd START_LIVES +acceleration_mask dd 0x0 + +resized_by_hotkey dd 0x0 +fullscreen dd 0x0 + +szZ string_score ,'SCORE : ' +szZ string_hi_score ,'HI-SCORE : ' +szZ string_champion ,'CHAMPION : ' +szZ string_level ,'LEVEL : ' +szZ string_pause_space ,'PAUSE - ',0x27,'SPACE',0x27 +szZ string_resume_space ,'RESUME - ',0x27,'SPACE',0x27 +szZ string_menu_esc ,'MENU - ',0x27,'ESC',0x27 +szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27 +szZ press_to_start ,'PRESS ',0x27,'ENTER',0x27,' TO START' +szZ press_esc_to_exit ,'PRESS ',0x27,'ESC',0x27,' TO EXIT' +;press_F2_to_options db 'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0 + +szZ string_congratulations ,' Congratulations!!! New hi-score is : ' +szZ string_enter_your_name ,'You are the champion! Enter your name : ' + +szZ string_button_play ,'PLAY' +szZ string_button_exit ,'EXIT' +szZ string_button_inc ,'+INC+' +szZ string_button_dec ,'-dec-' +szZ string_button_pm_classic,'CLASSIC mode' +szZ string_button_pm_levels ,'LEVELS mode' + +is_new_record dd 0 + +action dd 0 + +picture_first_menu_snake db 0xf4,0x99,0x2f,\ + 0x86,0xa5,0x49,\ + 0xf5,0xa5,0x8f,\ + 0x15,0xbd,0x48,\ + 0xf4,0xa5,0x2f + +picture_first_menu_version db 0xf1,0xe0,\ + 0x90,0x20,\ + 0x90,0x20,\ + 0x90,0x20,\ + 0xf4,0x20 + +picture_pause db 11100011b,00100101b,11101111b,\ + 10010100b,10100101b,00001000b,\ + 10010100b,10100101b,00001000b,\ + 11100111b,10100101b,11101111b,\ + 10000100b,10100100b,00101000b,\ + 10000100b,10011001b,11101111b + +picture_game_over db 00110000b,00000000b,00000000b,00000000b,\ + 01001001b,11001000b,10111100b,00000000b,\ + 10000010b,00101101b,10100000b,00000000b,\ + 10011010b,00101010b,10111000b,00000000b,\ + 10001011b,11101000b,10100000b,00000000b,\ + 01110010b,00101000b,10111100b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,00000000b,00000000b,00000000b,\ + 00001000b,10100010b,11110111b,10000000b,\ + 00001000b,10100010b,10000100b,01000000b,\ + 00001000b,10100010b,11100100b,01000000b,\ + 00001000b,10010100b,10000111b,10000000b,\ + 00000111b,00001000b,11110100b,01000000b + +;picture_you_win db 10001001b,11001000b,10000000b,\ +; 10001010b,00101000b,10000000b,\ +; 01010010b,00101000b,10000000b,\ +; 00100010b,00101000b,10000000b,\ +; 00100001b,11000111b,00000000b,\ +; 00000000b,00000000b,00000000b,\ +; 00000000b,00000000b,00000000b,\ +; 01000100b,10010001b,00000000b,\ +; 01010100b,10011001b,00000000b,\ +; 01010100b,10010101b,00000000b,\ +; 01010100b,10010011b,00000000b,\ +; 00101000b,10010001b,00000000b + +picture_you_win db 01000100b,01000011b,10001000b,10000000b,\ + 01000100b,01000100b,01001000b,10000000b,\ + 01000100b,01000100b,00001000b,10000000b,\ + 01111100b,01000100b,11001111b,10000000b,\ + 01000100b,01000100b,01001000b,10000000b,\ + 01000100b,01000011b,10001000b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11110011b,10011100b,11110011b,11000000b,\ + 10000100b,00100010b,10001010b,00000000b,\ + 11110100b,00100010b,10001011b,10000000b,\ + 00010100b,00100010b,11110010b,00000000b,\ + 11110011b,10011100b,10001011b,11000000b + +picture_level db 10000111b,10100101b,11101000b,\ + 10000100b,00100101b,00001000b,\ + 10000111b,00100101b,11001000b,\ + 10000100b,00101001b,00001000b,\ + 11110111b,10110001b,11101111b + +digits_font db 0xf0,0x90,0x90,0x90,0xf0,\ + 0x20,0x60,0x20,0x20,0x20,\ + 0xf0,0x10,0xf0,0x80,0xf0,\ + 0xf0,0x10,0x70,0x10,0xf0,\ + 0x90,0x90,0xf0,0x10,0x10,\ + 0xf0,0x80,0xf0,0x10,0xf0,\ + 0xf0,0x80,0xf0,0x90,0xf0,\ + 0xf0,0x10,0x10,0x10,0x10,\ + 0xf0,0x90,0xf0,0x90,0xf0,\ + 0xf0,0x90,0xf0,0x10,0xf0 + +stage_00: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 3,3, 4,3, 5,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 0 +.name dd stage_00_name + +stage_01: +.field db 11111000b,00000000b,00000001b,11110000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 11111000b,00000000b,00000001b,11110000b + +.snake_dots db 3,3, 4,3, 5,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 36 +.name dd stage_01_name + +stage_02: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00011111b,11000000b,00111111b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00011111b,11000000b,00111111b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 7,5, 8,5, 9,5 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_02_name + +stage_03: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00001111b,11111001b,11111111b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00001111b,11111001b,11111111b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 23,0, 22,0, 21,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 48 +.name dd stage_03_name + +stage_04: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00100000b,01000000b,00000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00010000b,00100000b,01000000b,10000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00010010b,00000000b,00000100b,10000000b,\ + 00010010b,00000000b,00000100b,10000000b,\ + 00000010b,00100000b,01000000b,00000000b,\ + 00010000b,00100000b,01000000b,10000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00000000b,00100000b,01000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 19,6, 19,7, 19,8 +.snake_napravlenie dd DOWN +.snake_napravlenie_next dd DOWN +.number_of_stones dd 39 +.name dd stage_04_name + +stage_05: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,11111111b,11111110b,00000000b,\ + 00000111b,11111111b,11111110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111111b,11111111b,11111111b,11000000b,\ + 00111111b,11111111b,11111111b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,0, 0,1, 1,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 112 +.name dd stage_05_name + +stage_06: +.field db 00000001b,10000000b,00000000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000000b,00000000b,00011000b,00000000b,\ + 00000000b,00000000b,00011000b,00000000b,\ + 00011111b,11111111b,11111000b,00000000b,\ + 00011111b,11111111b,11111000b,00000000b,\ + 00011000b,00000000b,00000000b,00000000b,\ + 00011000b,00000000b,00000000b,00000000b,\ + 00011111b,11111111b,11111111b,11100000b,\ + 00011111b,11111111b,11111111b,11100000b,\ + 00000000b,00000000b,00000000b,01100000b,\ + 00000000b,00000000b,00000000b,01100000b,\ + 00000000b,00000000b,00000000b,01100000b + +.snake_dots db 0,0, 0,1, 1,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 128 +.name dd stage_06_name + +stage_07: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00000000b,00000000b,00000100b,00000000b,\ + 00000011b,11111111b,11110100b,00000000b,\ + 00000010b,00000000b,00010100b,00000000b,\ + 00000010b,11111111b,11010100b,00000000b,\ + 00000010b,00000000b,00010100b,00000000b,\ + 00000010b,11111111b,11110100b,00000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 8,1, 9,1, 10,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 83 +.name dd stage_07_name + +stage_08: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00010000b,00000000b,\ + 00001001b,00000001b,00000000b,00000000b,\ + 00000001b,01001001b,00000101b,00000000b,\ + 00000000b,01000000b,00000100b,00000000b,\ + 00001111b,00000000b,11100000b,00000000b,\ + 00000000b,00000000b,00001000b,10000000b,\ + 00000111b,00100000b,10000010b,10000000b,\ + 00010000b,00000000b,00000010b,00000000b,\ + 00010000b,11000000b,01110010b,00000000b,\ + 00010010b,00000000b,00000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,0, 1,0, 2,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_08_name + +stage_09: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111101b,00100110b,01001011b,11000000b,\ + 00100001b,10101001b,01010010b,00000000b,\ + 00111101b,01100001b,01100011b,10000000b,\ + 00000101b,01100111b,01010010b,00000000b,\ + 00111101b,00100001b,01001011b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 12,6, 12,7, 12,8 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 59 +.name dd stage_09_name + +stage_10: +.field db 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b + +.snake_dots db 3,2, 3,3, 4,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 231 +.name dd stage_10_name + +stage_11: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,00000111b,00000111b,00000000b,\ + 00001101b,10001101b,10001101b,10000000b,\ + 00011000b,11011000b,11011000b,11000000b,\ + 00000000b,01000000b,01000000b,01000000b,\ + 00011000b,11011000b,11011000b,11000000b,\ + 00001101b,10001101b,10001101b,10000000b,\ + 00000111b,00000111b,00000111b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 3,12, 4,12, 5,12 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 69 +.name dd stage_11_name + +stage_12: +.field db 00000000b,00011000b,00001110b,00000000b,\ + 01101110b,00010000b,00001010b,01010000b,\ + 01001011b,11011001b,11000000b,01110000b,\ + 01100001b,01000001b,01000000b,00000000b,\ + 00000000b,00000000b,00000011b,10000000b,\ + 00000000b,00000000b,00000010b,10000000b,\ + 01010011b,00001100b,10100110b,00110000b,\ + 01110010b,00001000b,11100100b,00010000b,\ + 00000011b,00001100b,00000110b,00110000b,\ + 00000000b,11100000b,00000000b,00000000b,\ + 00010100b,10100000b,00000110b,00000000b,\ + 11011100b,00000110b,10100100b,00000000b,\ + 01000011b,10000010b,11100110b,10100000b,\ + 11000010b,10000110b,00000000b,11100000b + +.snake_dots db 27,0, 26,0, 25,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 110 +.name dd stage_12_name + +stage_13: +.field db 00111000b,00100000b,00000000b,00000000b,\ + 01111100b,11110011b,11000011b,10000000b,\ + 11111100b,01110011b,10000001b,11000000b,\ + 11110000b,00000011b,11000000b,00000000b,\ + 00000000b,00000010b,00000000b,00000000b,\ + 00000000b,00000010b,00000001b,00000000b,\ + 00011110b,00000111b,00000111b,00000000b,\ + 00000111b,10001111b,11111110b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00110001b,11111111b,11111001b,01100000b,\ + 00001110b,11101011b,00100111b,10000000b,\ + 01111000b,10000011b,10000010b,00000000b,\ + 00000011b,11100110b,00011010b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,5, 0,6, 0,7 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 141 +.name dd stage_13_name + +stage_14: +.field db 00000110b,00000000b,00000000b,00000000b,\ + 00001000b,00000000b,00011000b,00000000b,\ + 00010000b,00000000b,00000100b,00000000b,\ + 00100001b,10000000b,11000010b,00000000b,\ + 01000010b,01000001b,00100001b,00000000b,\ + 10000100b,00000010b,00010000b,10000000b,\ + 10001000b,00000100b,00001000b,01000000b,\ + 10010000b,00001000b,00000100b,01000000b,\ + 01001000b,00010000b,00001000b,10000000b,\ + 00100100b,00100000b,00010001b,00000000b,\ + 00010010b,01000001b,00100010b,00000000b,\ + 00001001b,10000000b,11000100b,00000000b,\ + 00000100b,00000000b,00001000b,00000000b,\ + 00000000b,00000000b,00110000b,00000000b + +.snake_dots db 8,0, 9,0, 10,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 60 +.name dd stage_14_name + +stage_15: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,01110000b,00110000b,00000000b,\ + 00000000b,10000000b,00001010b,00000000b,\ + 00100001b,00000000b,00110010b,00000000b,\ + 00010001b,00111111b,10011100b,00000000b,\ + 00001001b,00100000b,11000000b,00000000b,\ + 00010000b,00000010b,01000000b,00000000b,\ + 00100000b,00000010b,00100001b,10000000b,\ + 00010000b,00000010b,00110010b,01000000b,\ + 00001000b,01000100b,00011100b,01000000b,\ + 00010000b,00111000b,00010000b,01000000b,\ + 00100000b,00000000b,00010000b,01000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,3, 13,2, 14,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 60 +.name dd stage_15_name + +stage_16: +.field db 00000000b,10000010b,00000000b,00000000b,\ + 00000000b,01001010b,10000010b,10100000b,\ + 01111111b,11100111b,00000001b,11000000b,\ + 00000000b,01000010b,00000000b,10000000b,\ + 00000100b,10000000b,01000000b,00000001b,\ + 00000100b,00100000b,10000000b,00000010b,\ + 11000100b,00010001b,11111000b,00000111b,\ + 00010101b,00001000b,10000000b,00000010b,\ + 00001110b,00010000b,01000000b,00000001b,\ + 00000100b,00100010b,00000000b,10000000b,\ + 00000000b,00000010b,00000000b,01000000b,\ + 00111111b,11111111b,11111111b,11100000b,\ + 00000000b,00000010b,00000000b,01000000b,\ + 00000000b,00000010b,00000000b,10000000b + +.snake_dots db 11,7, 10,7, 9,7 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 96 +.name dd stage_16_name + +stage_17: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,10000001b,11100000b,00000000b,\ + 00001000b,01000010b,00010000b,00000000b,\ + 00010001b,00100100b,01001000b,00000000b,\ + 00010001b,00000000b,01001000b,00000000b,\ + 00001000b,01000010b,00010000b,00000000b,\ + 00000111b,10000001b,11100000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,01000000b,00000000b,00000000b,\ + 00000000b,00111110b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 11,7, 11,8, 12,8 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_17_name + +stage_18: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b + +.snake_dots db 2,5, 3,5, 4,5 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 78 +.name dd stage_18_name + +stage_19: +.field db 01000010b,00100100b,10000101b,00000000b,\ + 00010000b,00010000b,00100000b,10000000b,\ + 00111001b,00000010b,00010000b,00100000b,\ + 01000100b,00001000b,00000010b,00000000b,\ + 01010101b,01000000b,01000000b,01000000b,\ + 01010100b,00010000b,00001000b,11100000b,\ + 00000100b,10001001b,00100001b,00000000b,\ + 01111100b,00100000b,00000001b,01010000b,\ + 00111001b,00000100b,00010001b,01010000b,\ + 00010000b,00000000b,10000001b,00010000b,\ + 11010111b,11100000b,00011101b,11110000b,\ + 00010000b,01000000b,00100000b,11100000b,\ + 00010000b,10000000b,00100000b,01000000b,\ + 00000001b,00000000b,00010000b,01000000b + +.snake_dots db 27,6, 0,6, 1,6 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 95 +.name dd stage_19_name + +stage_20: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,10001000b,00000000b,\ + 00000000b,00011100b,10000100b,00000000b,\ + 00000000b,01100100b,10000010b,00000000b,\ + 00000011b,10000100b,10000100b,00000000b,\ + 00000010b,00000100b,10001000b,00000000b,\ + 00000010b,00000100b,10000100b,00000000b,\ + 00000010b,00000100b,10000010b,00000000b,\ + 00000010b,00111100b,10010010b,00000000b,\ + 00011110b,00111100b,10010100b,00000000b,\ + 00011110b,00111100b,10001000b,00000000b,\ + 00011110b,00000000b,10000000b,00000000b,\ + 00000000b,00000000b,10000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 17,2, 17,3, 17,4 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 65 +.name dd stage_20_name + +stage_21: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,11111111b,11111110b,00000000b,\ + 00000001b,01000100b,01000100b,00000000b,\ + 00000010b,01000100b,01000100b,00000000b,\ + 00001100b,01000100b,01000100b,00000000b,\ + 01110000b,01000100b,01000100b,00000000b,\ + 01110000b,01000100b,01000100b,00000000b,\ + 01110000b,11101110b,11101110b,00000000b,\ + 00000000b,11101110b,11101110b,00000000b,\ + 00000000b,11101110b,11101110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 10,1, 11,1, 12,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 86 +.name dd stage_21_name + +stage_22: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,10000000b,00000000b,00000000b,\ + 00000111b,11100000b,00000000b,00000000b,\ + 00001111b,11110000b,00000000b,00000000b,\ + 00011111b,11100000b,00000000b,00000000b,\ + 00011111b,11000011b,00001100b,00110000b,\ + 00011111b,10000111b,10011110b,01110000b,\ + 00011111b,11000111b,10011110b,01110000b,\ + 00011111b,11100011b,00001100b,00110000b,\ + 00001111b,11110000b,00000000b,00000000b,\ + 00000111b,11100000b,00000000b,00000000b,\ + 00000011b,10000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,7, 1,6, 1,5 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 104 +.name dd stage_22_name + +stage_23: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00100000b,01000101b,00010000b,00100000b,\ + 00011010b,00100101b,00100010b,11000000b,\ + 00000100b,10101000b,10101001b,00000000b,\ + 00000100b,10010010b,01001001b,00000000b,\ + 00001011b,00110000b,01100110b,10000000b,\ + 00000000b,11001010b,10011000b,00000000b,\ + 00000001b,00000111b,00000100b,00000000b,\ + 00001110b,01001010b,10010011b,10000000b,\ + 00000010b,00110000b,01100010b,00000000b,\ + 00000101b,00010010b,01000101b,00000000b,\ + 00001001b,00001000b,10000100b,10000000b,\ + 00000000b,00001000b,10000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 15,0, 14,0, 13,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 85 +.name dd stage_23_name + +stage_24: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00111111b,11111111b,11111111b,10000000b,\ + 00100000b,00000000b,00000000b,10000000b,\ + 00100011b,11111111b,11111000b,10000000b,\ + 00100010b,00000000b,00001000b,10000000b,\ + 00100010b,00111111b,10001000b,10000000b,\ + 00100010b,00100000b,10001000b,10000000b,\ + 00101010b,10101010b,10101010b,10000000b,\ + 00001000b,10001110b,00100010b,00000000b,\ + 00001000b,10000000b,00100010b,00000000b,\ + 00001000b,11111111b,11100010b,00000000b,\ + 00001000b,00000000b,00000010b,00000000b,\ + 00001111b,11111111b,11111110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,0, 0,0, 0,1 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 120 +.name dd stage_24_name + +stage_25: +.field db 00000100b,11000000b,00000000b,00000000b,\ + 00000011b,10000000b,00110010b,00000000b,\ + 10011010b,10000000b,00011100b,00000000b,\ + 01110000b,00000000b,00010101b,10010000b,\ + 01010000b,00000111b,00000000b,11100000b,\ + 00000100b,00000101b,00000000b,10100000b,\ + 00000100b,00000100b,00000000b,00000000b,\ + 00000011b,11111100b,00011001b,00000000b,\ + 00000010b,10010100b,00001110b,00000000b,\ + 00000010b,10010100b,00001010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,00100001b,10010011b,00100000b,\ + 00000001b,11000000b,11100001b,11000000b,\ + 00000001b,01000000b,10100001b,01000000b + +.snake_dots db 11,2, 12,2, 13,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 88 +.name dd stage_25_name + +stage_26: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00111100b,01001111b,01111010b,01000000b,\ + 00100000b,01000001b,00001010b,01000000b,\ + 00100100b,01001111b,01111011b,11000000b,\ + 00000100b,01001000b,00001000b,01000000b,\ + 00111100b,01001111b,01111000b,01000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111101b,11101111b,01111011b,11000000b,\ + 00100001b,00000001b,00000000b,00000000b,\ + 00111101b,11100001b,01111011b,11000000b,\ + 00000100b,00000001b,00000000b,01000000b,\ + 00111101b,11100001b,01111011b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,5, 0,5, 0,6 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 115 +.name dd stage_26_name + +stage_27: +.field db 00000000b,10000000b,00000000b,01000000b,\ + 00000000b,10000000b,01000000b,11100000b,\ + 00100011b,11100000b,01000000b,01000000b,\ + 01110000b,10000001b,11110000b,00000000b,\ + 00100000b,10000000b,01000000b,00000000b,\ + 00000000b,00000000b,01000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000010b,00000000b,00000000b,00000000b,\ + 00000111b,00000000b,00000000b,10000000b,\ + 00000010b,00001000b,00000001b,11000000b,\ + 00000000b,00000000b,10000000b,10000000b,\ + 00000000b,01000001b,11000000b,00000000b,\ + 01000000b,11100000b,10000000b,00000000b,\ + 00000000b,01000000b,00000000b,00000000b + +.snake_dots db 12,8, 12,7, 12,6 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 51 +.name dd stage_27_name + +stage_28: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000100b,00000000b,00000010b,00000000b,\ + 00010100b,00000000b,00000010b,10000000b,\ + 01010100b,00000000b,00000010b,10100000b,\ + 01010101b,11111111b,11111010b,10100000b,\ + 01010100b,00000000b,00000010b,10100000b,\ + 00010100b,00000000b,00000010b,10000000b,\ + 00000100b,00000000b,00000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,8, 12,8, 11,8 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 44 +.name dd stage_28_name + +stage_29: +.field db 00000000b,01110000b,00000000b,00000000b,\ + 00000100b,01000110b,00000001b,10000000b,\ + 01001110b,00001100b,01100000b,11000000b,\ + 01000000b,00000000b,01100000b,00000000b,\ + 01100000b,01111000b,00000001b,10010000b,\ + 00000000b,00000010b,10000101b,10110000b,\ + 00110000b,00110010b,10001100b,00100000b,\ + 00011011b,00110110b,10000100b,00000000b,\ + 00000001b,00000000b,10010000b,10000000b,\ + 00100001b,00000000b,00111000b,10000000b,\ + 00111001b,00110011b,00000011b,10000000b,\ + 01111111b,11111111b,00011011b,11010000b,\ + 11111111b,11111111b,00011111b,11110000b,\ + 11111111b,11111111b,00111111b,11110000b + +.snake_dots db 0,0, 1,0, 2,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 151 +.name dd stage_29_name + +stage_30: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000001b,01011100b,00000000b,\ + 00000000b,00000001b,11001000b,00000000b,\ + 00000100b,00000001b,01001000b,00000000b,\ + 00000100b,00000100b,00000000b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 01111111b,11000100b,11111111b,11100000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00011111b,00111111b,10001110b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00011111b,00011111b,00011111b,00000000b,\ + 11111111b,11111111b,11111111b,11110000b + +.snake_dots db 8,2, 9,2, 10,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 109 +.name dd stage_30_name + +stage_31: +.field db 00000101b,00010000b,00000100b,01000000b,\ + 01000100b,01010101b,00010100b,01000000b,\ + 01000101b,01010101b,01000101b,00010000b,\ + 01010000b,00010100b,01000000b,01010000b,\ + 00010101b,01000101b,01010100b,01000000b,\ + 01000001b,00010000b,01010101b,01000000b,\ + 01010101b,00010100b,00000101b,00010000b,\ + 00000101b,01010000b,01000101b,01010000b,\ + 01010000b,01000100b,00000000b,01010000b,\ + 00010101b,00000101b,00010100b,00010000b,\ + 01010001b,00010001b,01000001b,01000000b,\ + 01000100b,00000101b,01010100b,01010000b,\ + 00010001b,01010100b,00010001b,00010000b,\ + 00000100b,01000001b,00010001b,00000000b + +.snake_dots db 18,8, 17,8, 16,8 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 112 +.name dd stage_31_name + +stage_32: +.field db 11111111b,11111111b,11111111b,11110000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010000b,01000001b,00000100b,00010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10000010b,00001000b,00100000b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 11111111b,11111111b,11111111b,11110000b + +.snake_dots db 1,1, 1,2, 1,3 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 168 +.name dd stage_32_name + +stage_33: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01111111b,11001111b,11111111b,11100000b,\ + 01000100b,01001000b,01000000b,00100000b,\ + 01000100b,01001000b,01000001b,10100000b,\ + 01000100b,01001000b,01001101b,10100000b,\ + 00000000b,00000000b,00000110b,00000000b,\ + 01000100b,01001000b,01000010b,00100000b,\ + 01000100b,01001000b,01001111b,00100000b,\ + 01000100b,01001000b,01001111b,00100000b,\ + 01000100b,01001000b,01000110b,00100000b,\ + 01111111b,11001111b,11111111b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 6,6, 7,6, 8,6 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 109 +.name dd stage_33_name + +stage_34: +.field db 01110000b,00000000b,00000011b,10000000b,\ + 00010010b,00010000b,01111100b,00000000b,\ + 00011110b,00010000b,00100100b,00000000b,\ + 00000100b,00011001b,00100111b,00000000b,\ + 00001111b,10001001b,00100000b,00110000b,\ + 00000001b,00001011b,00101000b,00100000b,\ + 00000001b,00011110b,01111000b,00100000b,\ + 00111000b,00000010b,00001100b,10100000b,\ + 00001110b,00100010b,00000000b,10100000b,\ + 01100011b,11111110b,01000011b,11100000b,\ + 00111110b,00100010b,01000000b,10000000b,\ + 00000000b,01100011b,11000010b,10000000b,\ + 00000000b,01000000b,01100111b,10000000b,\ + 00000000b,00000000b,00000010b,00000000b + +.snake_dots db 7,0, 8,0, 9,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 113 +.name dd stage_34_name + +stage_35: +.field db 00000100b,00000000b,00001010b,00000000b,\ + 00010100b,01000000b,00101010b,00000000b,\ + 00010100b,10000010b,00010010b,10000000b,\ + 00010001b,00000000b,00010010b,10000000b,\ + 00010001b,00000010b,00001010b,10000000b,\ + 01010010b,00000010b,00001000b,10100000b,\ + 01000100b,00000000b,00001000b,10100000b,\ + 01000100b,00000010b,00000100b,10100000b,\ + 01001000b,00000010b,00000100b,00100000b,\ + 01001000b,00000000b,00000010b,00100000b,\ + 00010000b,00000010b,00000010b,00100000b,\ + 00110000b,00000010b,00000010b,00100000b,\ + 00100000b,00000010b,00000001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,11, 13,10, 13,9 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 66 +.name dd stage_35_name + +stage_36: +.field db 10101110b,10001110b,00110100b,11100000b,\ + 11101000b,10001110b,00101010b,10000000b,\ + 10101110b,11101000b,00101010b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,10110010b,01000100b,00000000b,\ + 00000001b,10100101b,01010100b,00000000b,\ + 00000001b,10100101b,00101000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00010001b,11010101b,11010001b,11000000b,\ + 00010001b,11010101b,11010001b,00000000b,\ + 00010001b,00010101b,00010000b,10000000b,\ + 00011101b,11001001b,11011100b,01000000b,\ + 00000000b,00000000b,00000001b,11010000b + +.snake_dots db 27,11, 27,10, 27,9 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 112 +.name dd stage_36_name + + +stage_00_name db 'Classic mode',0 +stage_01_name db 'Begin',0 +stage_02_name db 'Frame',0 +stage_03_name db 'Sight',0 +stage_04_name db 'Dashed',0 +stage_05_name db 'Beams',0 +stage_06_name db 'Pipe',0 +stage_07_name db 'Labyrinth',0 +stage_08_name db 'Sea battle',0 +stage_09_name db 'Recursion',0 +stage_10_name db 'Narrow corridors',0 +stage_11_name db 'CCC',0 +stage_12_name db 'Deadlocks',0 +stage_13_name db 'Boat',0 +stage_14_name db 'Pattern',0 +stage_15_name db 'Guernica',0 +stage_16_name db 'Goto',0 +stage_17_name db 'Smiling face',0 +stage_18_name db 'Waves',0 +stage_19_name db 'First snow',0 +stage_20_name db 'Music and silence',0 +stage_21_name db 'Experiment',0 +stage_22_name db 'Pacman',0 +stage_23_name db 'Intricate pattern',0 +stage_24_name db 'Square arcs',0 +stage_25_name db 'In the animal world',0 +stage_26_name db 'Digits',0 +stage_27_name db 'Pluses',0 +stage_28_name db 'Rod',0 +stage_29_name db 'Tetris',0 +stage_30_name db 'Towers of Hanoi',0 +stage_31_name db 'Ruins',0 +stage_32_name db 'Walls of Akendora',0 +stage_33_name db 'Geranium in the window',0 +stage_34_name db 'Algae',0 +stage_35_name db 'The road ahead',0 +stage_36_name db 'Help me draw levels!',0 + + +background_color dd 0x000000 +decorations_color dd 0x00000000 +snake_color dd 0x000000 +snake_head_color dd 0x000000 +lives_in_head_number_color dd 0x000000 +snake_picture_color dd 0x000000 +version_picture_color dd 0x000000 +pause_picture_color dd 0x000000 +game_over_picture_color dd 0x000000 +you_win_picture_color dd 0x000000 +eat_color dd 0x000000 +navigation_strings_color dd 0x80000000 +game_over_strings_color dd 0x80000000 +score_string_color dd 0x80000000 +hiscore_string_color dd 0x80000000 +champion_string_color dd 0x80000000 +game_over_hiscore_color dd 0x80000000 +score_number_color dd 0x40000000 +hiscore_number_color dd 0x00000000 +champion_name_color dd 0x80000000 +button_color dd 0x000000 +button_text_color dd 0x80000000 +stone_color dd 0x000000 +splash_background_color dd 0x000000 +splash_level_string_color dd 0x000000 +splash_level_number_color dd 0x000000 +level_string_color dd 0x80000000 +level_number_color dd 0x00000000 + + +align 4 +@IMPORT: + +library \ + libini , 'libini.obj' ,\ + box_lib , 'box_lib.obj' + +import libini,\ + ini.get_str , 'ini_get_str' ,\ + ini.get_int , 'ini_get_int' ,\ + ini.set_str , 'ini_set_str' ,\ + ini.set_int , 'ini_set_int' ,\ + ini.get_color , 'ini_get_color' ,\ + ini.get_shortcut, 'ini_get_shortcut' + +import box_lib,\ + edit_box.draw , 'edit_box' ,\ + edit_box.key , 'edit_box_key' ,\ + edit_box.mouse , 'edit_box_mouse' + +bFirstDraw db 0 + +aPreferences db 'Preferences',0 +aSpeed db 'Speed',0 +aTheme db 'Theme',0 +aSmart_reverse db 'Smart_reverse',0 +aShow_lives_style db 'Show_lives_style',0 +aDraw_level_name_in_window_title db 'Draw_level_name_in_window_title',0 +aSeparating_symbol db 'Separating_symbol',0 + +aShortcuts db 'Shortcuts',0 +aMove_left db 'Move_left',0 +aMove_down db 'Move_down',0 +aMove_up db 'Move_up',0 +aMove_right db 'Move_right',0 +aReverse db 'Reverse',0 +aIncrease db 'Increase',0 +aDecrease db 'Decrease',0 + +aTheme_name db 32 dup (0) +aDecorations db 'Decorations',0 +aBackground_color db 'Background_color',0 +aDecorations_color db 'Decorations_color',0 +aSnake_color db 'Snake_color',0 +aSnake_head_color db 'Snake_head_color',0 +aLives_in_head_number_color db 'Lives_in_head_number_color',0 +aSnake_picture_color db 'Snake_picture_color',0 +aVersion_picture_color db 'Version_picture_color',0 +aPause_picture_color db 'Pause_picture_color',0 +aGame_over_picture_color db 'Game_over_picture_color',0 +aYou_win_picture_color db 'You_win_picture_color',0 +aEat_color db 'Eat_color',0 +aNavigation_strings_color db 'Navigation_string_color',0 +aGame_over_strings_color db 'Game_over_string_color',0 +aScore_string_color db 'Score_string_color',0 +aHiscore_string_color db 'Hiscore_string_color',0 +aChampion_string_color db 'Champion_string_color',0 +aGame_over_hiscore_color db 'Game_over_hiscore_color',0 +aScore_number_color db 'Score_number_color',0 +aHiscore_number_color db 'Hiscore_number_color',0 +aChampion_name_color db 'Champion_name_color',0 +aEdit_box_selection_color db 'Edit_box_selection_color',0 +aButton_color db 'Button_color',0 +aButton_text_color db 'Button_text_color',0 +aStone_color db 'Stone_color',0 +aSplash_background_color db 'Splash_background_color',0 +aSplash_level_string_color db 'Splash_level_string_color',0 +aSplash_level_number_color db 'Splash_level_number_color',0 +aLevel_string_color db 'Level_string_color',0 +aLevel_number_color db 'Level_number_color',0 + +aReserved db 'Reserved',0 +aSquare_side_length db 'Square_side_length',0 +aHiscore_classic db 'Hiscore_classic',0 +aChampion_name_classic db 'Champion_name_classic',0 +aHiscore_levels db 'Hiscore_levels',0 +aChampion_name_levels db 'Champion_name_levels',0 + +edit1 edit_box 65,397,0x0,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1 + +hed db '',0 +;;---Variables------------------------------------------------------------------------------------------------------------- +i_end: +hed_end: +rb 256 +mouse_dd rd 1 + +window_style rd 1 + +cur_level rd 1 +cur_level_number rd 1 +hi_level rd 1 + +score rd 1 +hi_score_classic rd 1 +hi_score_levels rd 1 + +champion_name_classic rb CHAMPION_NAME_LENGTH +champion_name_levels rb CHAMPION_NAME_LENGTH + +snake_dots rb GRID_WIDTH*GRID_HEIGHT*2+3 ; +3 bytes for faster dword copying +snake_direction rd 1 +snake_direction_next rd 1 +snake_length_x2 rd 1 + +decorations rd 1 +number_of_free_dots rd 1 + +eat rw 1 + +g_s rd 1 +g_e rd 1 + +window_width rd 1 +window_height rd 1 +wp_x rd 1 +wp_y rd 1 + +gw_mul_gs rd 1 +gh_mul_gs rd 1 +gbxm1_plus_gw_mul_gs rd 1 +gbym1_plus_gh_mul_gs rd 1 +gs_shl16_gs rd 1 +gbxm1_shl16_gbxm1 rd 1 +gbym1_shl16_gbym1 rd 1 + +bottom_top_strings rd 1 +bottom_middle_strings rd 1 +bottom_bottom_strings rd 1 +top_strings rd 1 + +button_x_left rd 1 +button_x_right rd 1 +button_y_top rd 1 +button_y_middle rd 1 +button_y_bottom rd 1 +button_width_short rd 1 +button_width_long rd 1 +button_height rd 1 + +cursor_data rb 32*32*4 +cursor_handle rd 1 + +cur_dir_path rb 4096 +@PARAMS rb 4096 + +field_map rb GRID_WIDTH*GRID_HEIGHT*2 + +proc_info process_information + +smart_reverse rd 1 +show_lives_style rd 1 +draw_level_name_in_window_title rd 1 +separating_symbol rd 1 + +shortcut_move_left rb 1 +shortcut_move_down rb 1 +shortcut_move_up rb 1 +shortcut_move_right rb 1 +shortcut_reverse rb 1 +shortcut_increase rb 1 +shortcut_decrease rb 1 + +square_side_length rd 1 + +gbxm1 rd 1 +gbym1 rd 1 +speed_up_counter rw 1 + +rb 4096 +stacktop: +d_end: diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index d64cb1154..b130f55f9 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -1,429 +1,435 @@ -;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ... - -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, file_name, sys_path - -MAX_COLOR_WORD_LEN equ 40 -maxChars equ 100002 ;(колличество символов в новом документе + 2) -BUF_SIZE equ 4096 ;buffer for copy|paste -maxSyntaxFileSize equ 410000 -TOOLBAR_ICONS_SIZE equ 1200*21 - -include '../../proc32.inc' -include '../../macros.inc' -include '../../KOSfuncs.inc' -include '../../load_img.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../system/skincfg/trunk/kglobals.inc' -include '../../system/skincfg/trunk/unpacker.inc' -include 'lang.inc' - -include 't_data.inc' -include 't_button.inc' -include 't_menu.inc' -include 'strlen.inc' -include 't_draw.inc' ;draw main window functions -include 'wnd_k_words.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load - -align 4 -icon_tl_sys dd 0 ;указатель на память для хранения системных иконок -run_file_70 FileInfoBlock - -align 4 -start: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - - mcall SF_SYS_MISC,SSF_HEAP_INIT - or eax,eax - jnz @f - call ted_Exit - @@: - - mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code - mcall SF_SET_EVENTS_MASK,0xC0000027 - - mov esi,file_name - stdcall str_len,esi - mov ecx,eax - mov edi,openfile_path - cld - rep movsb ;копируем имя файла в буфер openfile_path - -load_libraries l_libs_start,load_lib_end - -;проверка на сколько удачно загузились библиотеки -mov ebp,lib0 -.test_lib_open: - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS ;exit not correct -@@: - add ebp,ll_struc_size - cmp ebp,load_lib_end - jl .test_lib_open - -;--------------------------------------------------------------------- - stdcall [ted_init], tedit0 - stdcall [tl_data_init], tree1 - option_boxes_set_sys_color sc,opt_grlist1 - init_checkboxes2 check_boxes,check_boxes_end - check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc - -; OpenDialog initialisation - stdcall [OpenDialog_Init],OpenDialog_data - -; kmenu initialisation - call tedit_menu_init - -; init toolbar file - include_image_file 'te_icon.png', bmp_icon,,,6 ;6 для серых кнопок - mov eax,[bmp_icon] - add eax,TOOLBAR_ICONS_SIZE - stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3 -;--------------------------------------------------------------------- -; внедряем файл с курсорами и линиями - include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img_sys],eax -; внедряем файл с иконками узлов - include_image_file 'tl_nod_16.png', icon_tl_sys - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img],eax -;------------------------------------------------------------------------------ - copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса - xor eax,eax - mov ecx,4096 - mov edi,file_name - repnz scasb - mov byte[edi-2],al ;убираем '/' в конце имени папки (нужно для чтения с CD) - mcall SF_FILE,tree_file_struct - - or ebx,ebx - jz .end_dir_init - mov eax,dir_mem+32+40 - mov ecx,ebx - @@: - cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' - je .filter - ;0x10000 ;1*2^16 - где 1 номер иконки с книгой - stdcall [tl_node_add], tree1,0x10000,eax - stdcall [tl_cur_next], tree1 - .filter: - add eax,304 - loop @b - stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка - or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка - .end_dir_init: - -;--- load ini file --- - copy_path ini_name,sys_path,file_name,0 - ;window startup pozition - stdcall [ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l - mov word[wnd_s_pos+2],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w - mov word[wnd_s_pos],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t - mov word[wnd_s_pos+6],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h - mov word[wnd_s_pos+4],ax - ;scrool type - stdcall [ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type - mov [wScr.type],eax - mov [hScr.type],eax - mov [ws_dir_lbox.type],eax - mov [w_scr_t3.type],eax - ;symbol size - stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w - mov dword[tedit0.rec.width],eax - stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h - mov dword[tedit0.rec.height],eax - ;lea eax,[eax+eax*2] - ;mov dword[tedit0.rec.top],eax - ;font size - stdcall [ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s - shl eax,24 - mov dword[tedit0.font_size],eax - ;кнопки на панели - ini_panel key_but_new, ID_BUT_NEW - ini_panel key_but_open, ID_BUT_OPEN - ini_panel key_but_save, ID_BUT_SAVE - ini_panel key_but_save_as,ID_BUT_SAVE_AS - ini_panel key_but_select, ID_BUT_SELECT - ini_panel key_but_cut, ID_BUT_CUT - ini_panel key_but_copy, ID_BUT_COPY - ini_panel key_but_paste, ID_BUT_PASTE - ini_panel key_but_find, ID_BUT_FIND - ini_panel key_but_replace,ID_BUT_REPLACE - ini_panel key_but_key_words,ID_BUT_KEY_WORDS - ini_panel key_but_upper, ID_BUT_UPPER - ini_panel key_but_lower, ID_BUT_LOWER - ini_panel key_but_reverse,ID_BUT_REVERSE - ini_panel key_but_undo, ID_BUT_UNDO - ini_panel key_but_redo, ID_BUT_REDO - ini_panel key_but_invisible,ID_BUT_INVISIBLE - ini_panel key_but_syntax_list,ID_BUT_SYNTAX_LIST - ini_panel key_but_syntax_mode,ID_BUT_SYNTAX_MODE - ini_panel key_but_convert_1251_866,ID_BUT_CONVERT_1251_866 - ini_panel key_but_convert_866_1251,ID_BUT_CONVERT_866_1251 - ;файловые расширения - xor edx,edx - mov ebx,synt_auto_open - @@: - ;берем имя файла - stdcall [ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f - cmp byte[ebx],0 - je @f - inc byte[key_synt_file.numb] - add ebx,32 - ;берем расширения - stdcall [ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f - inc byte[key_synt_ext.numb] - add ebx,32 - inc edx - cmp edx,max_synt_auto_open - jl @b - @@: - -;--- load color option file --- - stdcall open_unpac_synt_file,[fn_col_option] - -;--- get cmd line --- - cmp byte[openfile_path+3],0 ;openfile_path - je @f ;if file names exist - mov esi,openfile_path - stdcall auto_open_syntax,esi - call but_no_msg_OpenFile - @@: - - - -align 16 -red_win: - call draw_window - -align 16 -still: - mcall SF_WAIT_EVENT - cmp dword[exit_code],1 - jne @f - call ted_Exit - jmp still - @@: - - cmp al,1 ;изменилось положение окна - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 ;мышь - jne @f - call mouse - @@: - jmp still - -align 16 -mouse: - stdcall [kmainmenu_dispatch_cursorevent], [main_menu] - - mcall SF_MOUSE_GET,SSF_WINDOW_POSITION - cmp word[tedit0.wnd.top],ax - jg .no_edit - shr eax,16 - cmp word[tedit0.wnd.left],ax - jg .no_edit - mcall SF_MOUSE_GET,SSF_BUTTON_EXT - bt eax,24 ;двойной щелчёк левой кнопкой - jnc @f - stdcall [ted_but_select_word], tedit0 - ret - @@: - stdcall [ted_mouse], tedit0 - .no_edit: - - ;проверка боковых панелей - cmp byte[tedit0.panel_id],TED_PANEL_FIND - jne @f - stdcall [edit_box_mouse], edit_find - stdcall [option_box_mouse], opt_grlist1 - stdcall [check_box_mouse], ch1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_REPLACE - jne @f - stdcall [edit_box_mouse], edit_find - stdcall [edit_box_mouse], edit_replace - stdcall [option_box_mouse], opt_grlist1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX - jne @f - stdcall [tl_mouse], tree1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_GOTO - jne @f - stdcall [edit_box_mouse], edit_goto - @@: - ret -;--------------------------------------------------------------------- - -;output: -; ah = symbol -align 16 -proc KeyConvertToASCII uses ebx, table:dword - mov ebx,dword[table] ;convert scan to ascii - shr ax,8 - add bx,ax - mov ah,byte[ebx] - ret -endp - -align 16 -key: - mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш - xor esi,esi - mov ecx,1 - test al,3 ;[Shift] - jz @f - mov cl,2 - or esi,KM_SHIFT - @@: - test al,0x0c ;[Ctrl] - jz @f - or esi,KM_CTRL - @@: - test al,0x30 ;[Alt] - jz @f - mov cl,3 - or esi,KM_ALT - @@: - test al,0x80 ;[NumLock] - jz @f - or esi,KM_NUMLOCK - @@: - - mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры - mcall SF_GET_KEY - stdcall [tl_key], tree1 - - test word[edit_replace.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_replace - jmp still - @@: - test word[edit_find.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_find - jmp still - @@: - test word[edit_goto.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_goto - jmp still - @@: - - stdcall [ted_key], tedit0, conv_tabl,esi - jmp still - -align 4 -edit_replace edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_replace, mouse_dd, 0 -edit_find edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 -edit_goto edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 10, buf_goto, mouse_dd, 0 - -unpac_mem dd 0 - -;library structures -l_libs_start: - lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib - lib1 l_libs lib_name_1, file_name, system_dir_1, import_msgbox_lib - lib2 l_libs lib_name_2, file_name, system_dir_2, import_proclib - lib3 l_libs lib_name_3, file_name, system_dir_3, import_libimg - lib4 l_libs lib_name_4, file_name, system_dir_4, import_libini - lib5 l_libs lib_name_5, file_name, system_dir_5, import_libkmenu -load_lib_end: - -IncludeIGlobals -hed db 'TextEdit ' -i_end: - openfile_path: ;полный путь к файлу с которым идет работа - rb 4096 - dir_mem rb 32+304*count_of_dir_list_files - wnd_s_pos: ;место для настроек стартовой позиции окна - rq 1 - last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса - buf rb BUF_SIZE ;буфер для копирования и вставки - buf_find rb 302 ;буфер для поиска текста - buf_replace rb 302 ;буфер для замены текста - buf_goto rb 12 ;буфер для перхода на строку - sc system_colors -IncludeUGlobals - align 16 - procinfo process_information - rb 1024 - thread: - rb 4096 -align 16 - thread_coords: - rb 4096 -align 16 -stacktop: - sys_path: ;путь откуда запустился исполняемый файл - rb 4096 - file_name: ;параметры запуска - rb 4096 - syntax_path: ;имя подключаемого файла синтаксиса - rb 4096 - plugin_path: - rb 4096 - text_work_area: ;путь к файлу, который показывается в окне - rb 4096 - filename_area: ;имя файла для диалога открытия/закрытия - rb 256 - file_info: - rb 40 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ... + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, file_name, sys_path + +MAX_COLOR_WORD_LEN equ 40 +maxChars equ 100002 ;(колличество символов в новом документе + 2) +BUF_SIZE equ 4096 ;buffer for copy|paste +maxSyntaxFileSize equ 410000 +TOOLBAR_ICONS_SIZE equ 1200*21 + +include '../../proc32.inc' +include '../../macros.inc' +include '../../KOSfuncs.inc' +include '../../load_img.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../system/skincfg/kglobals.inc' +include '../../system/skincfg/unpacker.inc' +include 'lang.inc' + +include 't_data.inc' +include 't_button.inc' +include 't_menu.inc' +include 'strlen.inc' +include 't_draw.inc' ;draw main window functions +include 'wnd_k_words.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load + +align 4 +icon_tl_sys dd 0 ;указатель на память для хранения системных иконок +run_file_70 FileInfoBlock + +align 4 +start: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + + mcall SF_SYS_MISC,SSF_HEAP_INIT + or eax,eax + jnz @f + call ted_Exit + @@: + + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code + mcall SF_SET_EVENTS_MASK,0xC0000027 + + mov esi,file_name + stdcall str_len,esi + mov ecx,eax + mov edi,openfile_path + cld + rep movsb ;копируем имя файла в буфер openfile_path + +load_libraries l_libs_start,load_lib_end + +;проверка на сколько удачно загузились библиотеки +mov ebp,lib0 +.test_lib_open: + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS ;exit not correct +@@: + add ebp,ll_struc_size + cmp ebp,load_lib_end + jl .test_lib_open + +;--------------------------------------------------------------------- + stdcall [ted_init], tedit0 + stdcall [tl_data_init], tree1 + option_boxes_set_sys_color sc,opt_grlist1 + init_checkboxes2 check_boxes,check_boxes_end + check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc + +; OpenDialog initialisation + stdcall [OpenDialog_Init],OpenDialog_data + +; kmenu initialisation + call tedit_menu_init + +; init toolbar file + include_image_file 'te_icon.png', bmp_icon,,,6 ;6 для серых кнопок + mov eax,[bmp_icon] + add eax,TOOLBAR_ICONS_SIZE + stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3 +;--------------------------------------------------------------------- +; внедряем файл с курсорами и линиями + include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img_sys],eax +; внедряем файл с иконками узлов + include_image_file 'tl_nod_16.png', icon_tl_sys + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img],eax +;------------------------------------------------------------------------------ + copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса + xor eax,eax + mov ecx,4096 + mov edi,file_name + repnz scasb + mov byte[edi-2],al ;убираем '/' в конце имени папки (нужно для чтения с CD) + mcall SF_FILE,tree_file_struct + + or ebx,ebx + jz .end_dir_init + mov eax,dir_mem+32+40 + mov ecx,ebx + @@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + ;0x10000 ;1*2^16 - где 1 номер иконки с книгой + stdcall [tl_node_add], tree1,0x10000,eax + stdcall [tl_cur_next], tree1 + .filter: + add eax,304 + loop @b + stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка + or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка + .end_dir_init: + +;--- load ini file --- + copy_path ini_name,sys_path,file_name,0 + ;window startup pozition + stdcall [ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l + mov word[wnd_s_pos+2],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w + mov word[wnd_s_pos],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t + mov word[wnd_s_pos+6],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h + mov word[wnd_s_pos+4],ax + ;scrool type + stdcall [ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type + mov [wScr.type],eax + mov [hScr.type],eax + mov [ws_dir_lbox.type],eax + mov [w_scr_t3.type],eax + ;symbol size + stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w + mov dword[tedit0.rec.width],eax + stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h + mov dword[tedit0.rec.height],eax + ;lea eax,[eax+eax*2] + ;mov dword[tedit0.rec.top],eax + ;font size + stdcall [ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s + shl eax,24 + mov dword[tedit0.font_size],eax + ;кнопки на панели + ini_panel key_but_new, ID_BUT_NEW + ini_panel key_but_open, ID_BUT_OPEN + ini_panel key_but_save, ID_BUT_SAVE + ini_panel key_but_save_as,ID_BUT_SAVE_AS + ini_panel key_but_select, ID_BUT_SELECT + ini_panel key_but_cut, ID_BUT_CUT + ini_panel key_but_copy, ID_BUT_COPY + ini_panel key_but_paste, ID_BUT_PASTE + ini_panel key_but_find, ID_BUT_FIND + ini_panel key_but_replace,ID_BUT_REPLACE + ini_panel key_but_key_words,ID_BUT_KEY_WORDS + ini_panel key_but_upper, ID_BUT_UPPER + ini_panel key_but_lower, ID_BUT_LOWER + ini_panel key_but_reverse,ID_BUT_REVERSE + ini_panel key_but_undo, ID_BUT_UNDO + ini_panel key_but_redo, ID_BUT_REDO + ini_panel key_but_invisible,ID_BUT_INVISIBLE + ini_panel key_but_syntax_list,ID_BUT_SYNTAX_LIST + ini_panel key_but_syntax_mode,ID_BUT_SYNTAX_MODE + ini_panel key_but_convert_1251_866,ID_BUT_CONVERT_1251_866 + ini_panel key_but_convert_866_1251,ID_BUT_CONVERT_866_1251 + ;файловые расширения + xor edx,edx + mov ebx,synt_auto_open + @@: + ;берем имя файла + stdcall [ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f + cmp byte[ebx],0 + je @f + inc byte[key_synt_file.numb] + add ebx,32 + ;берем расширения + stdcall [ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f + inc byte[key_synt_ext.numb] + add ebx,32 + inc edx + cmp edx,max_synt_auto_open + jl @b + @@: + +;--- load color option file --- + stdcall open_unpac_synt_file,[fn_col_option] + +;--- get cmd line --- + cmp byte[openfile_path+3],0 ;openfile_path + je @f ;if file names exist + mov esi,openfile_path + stdcall auto_open_syntax,esi + call but_no_msg_OpenFile + @@: + + + +align 16 +red_win: + call draw_window + +align 16 +still: + mcall SF_WAIT_EVENT + cmp dword[exit_code],1 + jne @f + call ted_Exit + jmp still + @@: + + cmp al,1 ;изменилось положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 ;мышь + jne @f + call mouse + @@: + jmp still + +align 16 +mouse: + stdcall [kmainmenu_dispatch_cursorevent], [main_menu] + + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION + cmp word[tedit0.wnd.top],ax + jg .no_edit + shr eax,16 + cmp word[tedit0.wnd.left],ax + jg .no_edit + mcall SF_MOUSE_GET,SSF_BUTTON_EXT + bt eax,24 ;двойной щелчёк левой кнопкой + jnc @f + stdcall [ted_but_select_word], tedit0 + ret + @@: + stdcall [ted_mouse], tedit0 + .no_edit: + + ;проверка боковых панелей + cmp byte[tedit0.panel_id],TED_PANEL_FIND + jne @f + stdcall [edit_box_mouse], edit_find + stdcall [option_box_mouse], opt_grlist1 + stdcall [check_box_mouse], ch1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_REPLACE + jne @f + stdcall [edit_box_mouse], edit_find + stdcall [edit_box_mouse], edit_replace + stdcall [option_box_mouse], opt_grlist1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX + jne @f + stdcall [tl_mouse], tree1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_GOTO + jne @f + stdcall [edit_box_mouse], edit_goto + @@: + ret +;--------------------------------------------------------------------- + +;output: +; ah = symbol +align 16 +proc KeyConvertToASCII uses ebx, table:dword + mov ebx,dword[table] ;convert scan to ascii + shr ax,8 + add bx,ax + mov ah,byte[ebx] + ret +endp + +align 16 +key: + mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш + xor esi,esi + mov ecx,1 + test al,3 ;[Shift] + jz @f + mov cl,2 + or esi,KM_SHIFT + @@: + test al,0x0c ;[Ctrl] + jz @f + or esi,KM_CTRL + @@: + test al,0x30 ;[Alt] + jz @f + mov cl,3 + or esi,KM_ALT + @@: + test al,0x80 ;[NumLock] + jz @f + or esi,KM_NUMLOCK + @@: + + mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры + mcall SF_GET_KEY + stdcall [tl_key], tree1 + + test word[edit_replace.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_replace + jmp still + @@: + test word[edit_find.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_find + jmp still + @@: + test word[edit_goto.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_goto + jmp still + @@: + + stdcall [ted_key], tedit0, conv_tabl,esi + jmp still + +align 4 +edit_replace edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_replace, mouse_dd, 0 +edit_find edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 +edit_goto edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 10, buf_goto, mouse_dd, 0 + +unpac_mem dd 0 + +;library structures +l_libs_start: + lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib + lib1 l_libs lib_name_1, file_name, system_dir_1, import_msgbox_lib + lib2 l_libs lib_name_2, file_name, system_dir_2, import_proclib + lib3 l_libs lib_name_3, file_name, system_dir_3, import_libimg + lib4 l_libs lib_name_4, file_name, system_dir_4, import_libini + lib5 l_libs lib_name_5, file_name, system_dir_5, import_libkmenu +load_lib_end: + +IncludeIGlobals +hed db 'TextEdit ' +i_end: + openfile_path: ;полный путь к файлу с которым идет работа + rb 4096 + dir_mem rb 32+304*count_of_dir_list_files + wnd_s_pos: ;место для настроек стартовой позиции окна + rq 1 + last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса + buf rb BUF_SIZE ;буфер для копирования и вставки + buf_find rb 302 ;буфер для поиска текста + buf_replace rb 302 ;буфер для замены текста + buf_goto rb 12 ;буфер для перхода на строку + sc system_colors +IncludeUGlobals + align 16 + procinfo process_information + rb 1024 + thread: + rb 4096 +align 16 + thread_coords: + rb 4096 +align 16 +stacktop: + sys_path: ;путь откуда запустился исполняемый файл + rb 4096 + file_name: ;параметры запуска + rb 4096 + syntax_path: ;имя подключаемого файла синтаксиса + rb 4096 + plugin_path: + rb 4096 + text_work_area: ;путь к файлу, который показывается в окне + rb 4096 + filename_area: ;имя файла для диалога открытия/закрытия + rb 256 + file_info: + rb 40 +mem: diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index 8a0ed71fc..1e8aaacb0 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -1,389 +1,394 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, file_name, sys_path - -MAX_COLOR_WORD_LEN equ 40 -BUF_SIZE equ 4096 ;buffer for copy|paste -CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем - -include '../../macros.inc' -include '../../proc32.inc' -include '../../KOSfuncs.inc' -include '../../load_img.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../system/skincfg/trunk/kglobals.inc' -include '../../system/skincfg/trunk/unpacker.inc' -include 'te_data.inc' -include 'te_work.inc' ;text work functions - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load - -icon_tl_sys dd 0 ;указатель на память для хранения системных иконок - -align 4 -start: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - - mcall SF_SYS_MISC,SSF_HEAP_INIT - or eax,eax - jz button.exit - - mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code - mcall SF_SET_EVENTS_MASK,0xC0000027 - - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузилась библиотека - cmp dword[lib0+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - -;--------------------------------------------------------------------- - stdcall [tl_data_init], tree1 - -; читаем файл с курсорами и линиями - include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys - mov eax,[icon_tl_sys] - mov [tree1.data_img_sys],eax -;--------------------------------------------------------------------- -; читаем bmp файл с иконками узлов - include_image_file '..\t_edit\tl_nod_16.png', icon_tl_sys - mov eax,[icon_tl_sys] - mov [tree1.data_img],eax -;------------------------------------------------------------------------------ - copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса - mcall SF_FILE,tree_file_struct - - cmp ebx,2 - jg @f - notify_window_run file_name ;сообщение если не удалось открыть файлы - jmp .end_dir_init - @@: - ;cmp ebx,0 - ;jle .end_dir_init - mov eax,dir_mem+32+40 - mov ecx,ebx - @@: - cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' - je .filter - stdcall [tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой - stdcall [tl_cur_next],tree1 - .filter: - add eax,304 - loop @b - stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка - or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка - .end_dir_init: - - xor eax,eax - inc eax - mov [scrol_w1.type],eax - mov [scrol_h1.type],eax - mov [ws_dir_lbox.type],eax - -;--- load color option file --- -stdcall [ted_init], tedit0 -mov byte[file_name],0 - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall SF_WAIT_EVENT - - cmp al,1 ;изм. положение окна - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 - jz mouse - - jmp still - - -align 4 -draw_window: - pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - mov edx,[sc.work] - or edx,0x33000000 - mov edi,hed - mcall SF_CREATE_WINDOW,<10,555>,<10,333> - - mcall SF_THREAD_INFO,procinfo,-1 - mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t - call EvSize - - mov esi,[sc.work_button];0xd0 - mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200 - - mov ebx,100*65536+85 - mov ecx,195*65536+20 - mov edx,201 - mov esi,0xd00000 - mcall - - mov ecx,[sc.work_button_text] - or ecx,0x80000000 - mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f - - mov ecx,0xffff00 - or ecx,0x80000000 - mcall ,105*65536+200,,txt_save_f - - mov ecx,[sc.work_text] - or ecx,0x80000000 - mcall ,195*65536+10,,txt_inp_file - - add ebx,20 - mov edx,txt_out_file - int 0x40 - - stdcall [PathShow_draw], PathShow_data_1 - - stdcall [edit_box_draw], edit1 - stdcall [tl_draw], tree1 - - ;scroll 1 - mov [ws_dir_lbox.all_redraw],1 - stdcall [scrollbar_ver_draw],ws_dir_lbox - stdcall [ted_draw], tedit0 - - mcall SF_REDRAW,SSF_END_DRAW - popad - ret - -MIN_M_WND_H equ 100 ;минимальная высота главного окна -;input: -; edi = pointer to tedit struct -align 4 -EvSize: - pushad - mov ebx,ted_scr_h - mov esi,ted_scr_w - - m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна - mov eax,ted_wnd_l - sub ted_wnd_w,eax ;отнимаем отступ слева - movzx eax,word[esi+sb_offs_size_x] - sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга - - m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна - cmp ted_wnd_h,MIN_M_WND_H - jg @f - mov ted_wnd_h,MIN_M_WND_H - @@: - - movzx eax,word[ebx+sb_offs_size_y] - sub ted_wnd_h,eax ;отнимаем высоту гориз. скроллинга - mov eax,ted_wnd_t - sub ted_wnd_h,eax ;отнимаем отступ сверху - - stdcall [ted_init_scroll_bars], tedit0,2 - popad - ret - -align 4 -mouse: - stdcall [tl_mouse],tree1 - stdcall [edit_box_mouse],edit1 - stdcall [ted_mouse], tedit0 - jmp still - -;output: -; ah = symbol -align 4 -proc KeyConvertToASCII, table:dword - push ebx - mov ebx,dword[table] ;convert scan to ascii - shr ax,8 - add bx,ax - mov ah,byte[ebx] - pop ebx - ret -endp - -align 4 -key: - mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш - xor esi,esi - mov ecx,1 - test al,3 ;[Shift] - jz @f - mov cl,2 - or esi,KM_SHIFT - @@: - test al,0x0c ;[Ctrl] - jz @f - or esi,KM_CTRL - @@: - test al,0x30 ;[Alt] - jz @f - mov cl,3 - or esi,KM_ALT - @@: - test al,0x80 ;[NumLock] - jz @f - or esi,KM_NUMLOCK - @@: - - mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры - mcall SF_GET_KEY - stdcall [tl_key],tree1 - - test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key],edit1 - jmp still - @@: - - stdcall [ted_key], tedit0, conv_tabl,esi - jmp still - -align 4 -button: - mcall SF_GET_BUTTON - - cmp ah,200 - jne @f - call but_OpenSyntax - @@: - cmp ah,201 - jne @f - call but_SaveSyntax - @@: - - cmp ah,1 - jne still -.exit: - stdcall mem.Free,[options_file] - stdcall mem.Free,[unpac_mem] - - stdcall [tl_data_clear], tree1 - stdcall [ted_delete], tedit0 - mcall SF_TERMINATE_PROCESS ;выход из программы - -align 4 -but_OpenSyntax: -push eax - stdcall [tl_node_get_data],tree1 - mov [fn_col_option],eax - call InitColText -pop eax - ret - -align 4 -but_SaveSyntax: - stdcall [ted_save_file], tedit0,run_file_70,[edit1.text] - ret - -;description: -; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G -align 4 -proc ted_but_ctrl_all uses eax, opt_key:dword - mov eax,[opt_key] - cmp al,'N' ;Ctrl+N - jne @f - call but_ctrl_n - jmp .end0 - @@: - cmp al,'O' ;Ctrl+O - jne @f - call but_ctrl_o - @@: - ;cmp al,'S' ;Ctrl+S - ;cmp al,'F' ;Ctrl+F - ;cmp al,'G' ;Ctrl+G - ;cmp al,'H' ;Ctrl+H - .end0: - ret -endp - -align 4 -but_ctrl_o: - push eax - call get_wnd_in_focus - or eax,eax - jz @f - stdcall [ted_open_file], eax,str_file_70,[edit1.text] - @@: - pop eax - ret - -;создание нового файла -align 4 -but_ctrl_n: - push eax - call get_wnd_in_focus - or eax,eax - jz @f - stdcall [ted_clear], eax,1 - stdcall [ted_draw], eax - @@: - pop eax - ret - -;определяем какое из окон редактора в фокусе -align 4 -get_wnd_in_focus: - xor eax,eax - cmp dword[el_focus],tedit0 - jne @f - mov eax,tedit0 - @@: - ;cmp dword[el_focus],tedit1 - ;jne @f - ; mov eax,tedit1 - ;@@: - ret - -hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна -conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код - -txt_load_f db 'Загр. файл',0 -txt_save_f db 'Сохр. файл',0 -txt_inp_file db 'Исх. файл:',0 -txt_out_file db 'Вых. файл:',0 - -;library structures -l_libs_start: - lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib - lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg -load_lib_end: - -IncludeIGlobals - -align 16 -i_end: -IncludeUGlobals - procinfo process_information - rb 1024 -thread: - rb 1024 -stacktop: - sys_path rb 4096 - file_name rb 4096 - file_name_rez rb 4096 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, file_name, sys_path + +MAX_COLOR_WORD_LEN equ 40 +BUF_SIZE equ 4096 ;buffer for copy|paste +CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include '../../load_img.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../system/skincfg/kglobals.inc' +include '../../system/skincfg/unpacker.inc' +include 'te_data.inc' +include 'te_work.inc' ;text work functions + +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load + +icon_tl_sys dd 0 ;указатель на память для хранения системных иконок + +align 4 +start: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + + mcall SF_SYS_MISC,SSF_HEAP_INIT + or eax,eax + jz button.exit + + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code + mcall SF_SET_EVENTS_MASK,0xC0000027 + + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась библиотека + cmp dword[lib0+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + +;--------------------------------------------------------------------- + stdcall [tl_data_init], tree1 + +; читаем файл с курсорами и линиями + include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys + mov eax,[icon_tl_sys] + mov [tree1.data_img_sys],eax +;--------------------------------------------------------------------- +; читаем bmp файл с иконками узлов + include_image_file '..\t_edit\tl_nod_16.png', icon_tl_sys + mov eax,[icon_tl_sys] + mov [tree1.data_img],eax +;------------------------------------------------------------------------------ + copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса + mcall SF_FILE,tree_file_struct + + cmp ebx,2 + jg @f + notify_window_run file_name ;сообщение если не удалось открыть файлы + jmp .end_dir_init + @@: + ;cmp ebx,0 + ;jle .end_dir_init + mov eax,dir_mem+32+40 + mov ecx,ebx + @@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + stdcall [tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой + stdcall [tl_cur_next],tree1 + .filter: + add eax,304 + loop @b + stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка + or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка + .end_dir_init: + + xor eax,eax + inc eax + mov [scrol_w1.type],eax + mov [scrol_h1.type],eax + mov [ws_dir_lbox.type],eax + +;--- load color option file --- +stdcall [ted_init], tedit0 +mov byte[file_name],0 + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall SF_WAIT_EVENT + + cmp al,1 ;изм. положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jz mouse + + jmp still + + +align 4 +draw_window: + pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + mov edx,[sc.work] + or edx,0x33000000 + mov edi,hed + mcall SF_CREATE_WINDOW,<10,555>,<10,333> + + mcall SF_THREAD_INFO,procinfo,-1 + mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t + call EvSize + + mov esi,[sc.work_button];0xd0 + mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200 + + mov ebx,100*65536+85 + mov ecx,195*65536+20 + mov edx,201 + mov esi,0xd00000 + mcall + + mov ecx,[sc.work_button_text] + or ecx,0x80000000 + mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f + + mov ecx,0xffff00 + or ecx,0x80000000 + mcall ,105*65536+200,,txt_save_f + + mov ecx,[sc.work_text] + or ecx,0x80000000 + mcall ,195*65536+10,,txt_inp_file + + add ebx,20 + mov edx,txt_out_file + int 0x40 + + stdcall [PathShow_draw], PathShow_data_1 + + stdcall [edit_box_draw], edit1 + stdcall [tl_draw], tree1 + + ;scroll 1 + mov [ws_dir_lbox.all_redraw],1 + stdcall [scrollbar_ver_draw],ws_dir_lbox + stdcall [ted_draw], tedit0 + + mcall SF_REDRAW,SSF_END_DRAW + popad + ret + +MIN_M_WND_H equ 100 ;минимальная высота главного окна +;input: +; edi = pointer to tedit struct +align 4 +EvSize: + pushad + mov ebx,ted_scr_h + mov esi,ted_scr_w + + m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна + mov eax,ted_wnd_l + sub ted_wnd_w,eax ;отнимаем отступ слева + movzx eax,word[esi+sb_offs_size_x] + sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга + + m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна + cmp ted_wnd_h,MIN_M_WND_H + jg @f + mov ted_wnd_h,MIN_M_WND_H + @@: + + movzx eax,word[ebx+sb_offs_size_y] + sub ted_wnd_h,eax ;отнимаем высоту гориз. скроллинга + mov eax,ted_wnd_t + sub ted_wnd_h,eax ;отнимаем отступ сверху + + stdcall [ted_init_scroll_bars], tedit0,2 + popad + ret + +align 4 +mouse: + stdcall [tl_mouse],tree1 + stdcall [edit_box_mouse],edit1 + stdcall [ted_mouse], tedit0 + jmp still + +;output: +; ah = symbol +align 4 +proc KeyConvertToASCII, table:dword + push ebx + mov ebx,dword[table] ;convert scan to ascii + shr ax,8 + add bx,ax + mov ah,byte[ebx] + pop ebx + ret +endp + +align 4 +key: + mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш + xor esi,esi + mov ecx,1 + test al,3 ;[Shift] + jz @f + mov cl,2 + or esi,KM_SHIFT + @@: + test al,0x0c ;[Ctrl] + jz @f + or esi,KM_CTRL + @@: + test al,0x30 ;[Alt] + jz @f + mov cl,3 + or esi,KM_ALT + @@: + test al,0x80 ;[NumLock] + jz @f + or esi,KM_NUMLOCK + @@: + + mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры + mcall SF_GET_KEY + stdcall [tl_key],tree1 + + test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key],edit1 + jmp still + @@: + + stdcall [ted_key], tedit0, conv_tabl,esi + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + + cmp ah,200 + jne @f + call but_OpenSyntax + @@: + cmp ah,201 + jne @f + call but_SaveSyntax + @@: + + cmp ah,1 + jne still +.exit: + stdcall mem.Free,[options_file] + stdcall mem.Free,[unpac_mem] + + stdcall [tl_data_clear], tree1 + stdcall [ted_delete], tedit0 + mcall SF_TERMINATE_PROCESS ;выход из программы + +align 4 +but_OpenSyntax: +push eax + stdcall [tl_node_get_data],tree1 + mov [fn_col_option],eax + call InitColText +pop eax + ret + +align 4 +but_SaveSyntax: + stdcall [ted_save_file], tedit0,run_file_70,[edit1.text] + ret + +;description: +; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G +align 4 +proc ted_but_ctrl_all uses eax, opt_key:dword + mov eax,[opt_key] + cmp al,'N' ;Ctrl+N + jne @f + call but_ctrl_n + jmp .end0 + @@: + cmp al,'O' ;Ctrl+O + jne @f + call but_ctrl_o + @@: + ;cmp al,'S' ;Ctrl+S + ;cmp al,'F' ;Ctrl+F + ;cmp al,'G' ;Ctrl+G + ;cmp al,'H' ;Ctrl+H + .end0: + ret +endp + +align 4 +but_ctrl_o: + push eax + call get_wnd_in_focus + or eax,eax + jz @f + stdcall [ted_open_file], eax,str_file_70,[edit1.text] + @@: + pop eax + ret + +;создание нового файла +align 4 +but_ctrl_n: + push eax + call get_wnd_in_focus + or eax,eax + jz @f + stdcall [ted_clear], eax,1 + stdcall [ted_draw], eax + @@: + pop eax + ret + +;определяем какое из окон редактора в фокусе +align 4 +get_wnd_in_focus: + xor eax,eax + cmp dword[el_focus],tedit0 + jne @f + mov eax,tedit0 + @@: + ;cmp dword[el_focus],tedit1 + ;jne @f + ; mov eax,tedit1 + ;@@: + ret + +hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна +conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код + +txt_load_f db 'Загр. файл',0 +txt_save_f db 'Сохр. файл',0 +txt_inp_file db 'Исх. файл:',0 +txt_out_file db 'Вых. файл:',0 + +;library structures +l_libs_start: + lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib + lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg +load_lib_end: + +IncludeIGlobals + +align 16 +i_end: +IncludeUGlobals + procinfo process_information + rb 1024 +thread: + rb 1024 +stacktop: + sys_path rb 4096 + file_name rb 4096 + file_name_rez rb 4096 +mem: diff --git a/programs/system/end/trunk/Tupfile.lua b/programs/system/end/Tupfile.lua similarity index 100% rename from programs/system/end/trunk/Tupfile.lua rename to programs/system/end/Tupfile.lua diff --git a/programs/system/end/trunk/back.raw b/programs/system/end/back.raw similarity index 100% rename from programs/system/end/trunk/back.raw rename to programs/system/end/back.raw diff --git a/programs/system/end/trunk/build.bat b/programs/system/end/build.bat similarity index 100% rename from programs/system/end/trunk/build.bat rename to programs/system/end/build.bat diff --git a/programs/system/end/trunk/end.asm b/programs/system/end/end.asm similarity index 95% rename from programs/system/end/trunk/end.asm rename to programs/system/end/end.asm index 35b253104..14f3fdc08 100644 --- a/programs/system/end/trunk/end.asm +++ b/programs/system/end/end.asm @@ -1,3 +1,6 @@ +; SPDX-License-Identifier: NOASSERTION +; + ; ; END ; @@ -7,7 +10,7 @@ ; ; 15.02.2007 merge old END with new one (fron Veliant & Leency) by Heavyiron -include "..\..\..\macros.inc" +include "..\..\macros.inc" meos_app_start code @@ -43,7 +46,7 @@ draw: xor edx, edx mcall - + mov al,8 mcall ,58 shl 16 + 32,59 shl 16 + 34, 1 shl 30 + 1 inc edx @@ -55,7 +58,7 @@ draw: inc edx mcall ,144 shl 16 + 43 - mov al,12 ;end of redraw + mov al,12 ;end of redraw mov ebx,2 mcall diff --git a/programs/system/eskin/trunk/Tupfile.lua b/programs/system/eskin/Tupfile.lua similarity index 100% rename from programs/system/eskin/trunk/Tupfile.lua rename to programs/system/eskin/Tupfile.lua diff --git a/programs/system/eskin/trunk/build.bat b/programs/system/eskin/build.bat similarity index 100% rename from programs/system/eskin/trunk/build.bat rename to programs/system/eskin/build.bat diff --git a/programs/system/eskin/trunk/eskin.asm b/programs/system/eskin/eskin.asm similarity index 94% rename from programs/system/eskin/trunk/eskin.asm rename to programs/system/eskin/eskin.asm index 61ce317d8..076f6de17 100644 --- a/programs/system/eskin/trunk/eskin.asm +++ b/programs/system/eskin/eskin.asm @@ -1,3 +1,6 @@ +; SPDX-License-Identifier: NOASSERTION +; + use32 org 0x0 @@ -10,9 +13,9 @@ use32 dd 0x0 dd 0x0 -include '../../../proc32.inc' -include '../../../macros.inc' -include '../../../dll.inc' +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' PATH_MAX equ 255 @@ -56,7 +59,7 @@ STARTAPP: ;---------------------------------------------------------------- ; This is fix for files located at /kolibrios and /usbhd drives -; It checks is the file exists for 5 times with perioud 1 second +; It checks is the file exists for 5 times with period 1 second check_file_exists: mov edi, 0 @@: diff --git a/programs/system/run/trunk/Tupfile.lua b/programs/system/run/Tupfile.lua similarity index 79% rename from programs/system/run/trunk/Tupfile.lua rename to programs/system/run/Tupfile.lua index 17fe2d193..df442fab3 100644 --- a/programs/system/run/trunk/Tupfile.lua +++ b/programs/system/run/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_fasm.lua") add_include(tup.getvariantdir()) diff --git a/programs/system/run/trunk/build_en.bat b/programs/system/run/build_en.bat similarity index 100% rename from programs/system/run/trunk/build_en.bat rename to programs/system/run/build_en.bat diff --git a/programs/system/run/trunk/build_ru.bat b/programs/system/run/build_ru.bat similarity index 100% rename from programs/system/run/trunk/build_ru.bat rename to programs/system/run/build_ru.bat diff --git a/programs/system/run/trunk/makefile b/programs/system/run/makefile similarity index 100% rename from programs/system/run/trunk/makefile rename to programs/system/run/makefile diff --git a/programs/system/run/trunk/run.asm b/programs/system/run/run.asm similarity index 96% rename from programs/system/run/trunk/run.asm rename to programs/system/run/run.asm index a4046c644..d62f753e3 100644 --- a/programs/system/run/trunk/run.asm +++ b/programs/system/run/run.asm @@ -1,11 +1,16 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + window_h=85 window_w=430 ;--- другие макросы --- -include '../../../KOSfuncs.inc' -include '../../../load_lib.mac' -include '../../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' include 'txtbut.inc' -include '../../../macros.inc' +include '../../macros.inc' include 'run.mac' include 'lang.inc' ; Language support for locales: ru_RU (CP866), it_IT, en_US. use32 diff --git a/programs/system/run/trunk/run.mac b/programs/system/run/run.mac similarity index 100% rename from programs/system/run/trunk/run.mac rename to programs/system/run/run.mac diff --git a/programs/system/run/trunk/run.txt b/programs/system/run/run.txt similarity index 100% rename from programs/system/run/trunk/run.txt rename to programs/system/run/run.txt diff --git a/programs/system/run/trunk/txtbut.inc b/programs/system/run/txtbut.inc similarity index 100% rename from programs/system/run/trunk/txtbut.inc rename to programs/system/run/txtbut.inc diff --git a/programs/system/setup/trunk/Tupfile.lua b/programs/system/setup/Tupfile.lua similarity index 100% rename from programs/system/setup/trunk/Tupfile.lua rename to programs/system/setup/Tupfile.lua diff --git a/programs/system/setup/trunk/build.bat b/programs/system/setup/build.bat similarity index 100% rename from programs/system/setup/trunk/build.bat rename to programs/system/setup/build.bat diff --git a/programs/system/setup/trunk/setup.asm b/programs/system/setup/setup.asm similarity index 98% rename from programs/system/setup/trunk/setup.asm rename to programs/system/setup/setup.asm index d2605475b..f515bab5e 100644 --- a/programs/system/setup/trunk/setup.asm +++ b/programs/system/setup/setup.asm @@ -1,3 +1,8 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + ;;;;;;;;;;;;;;;;;;;;;;; ;; SYSTEM SETTINGS ;; ;;;;;;;;;;;;;;;;;;;;;;; @@ -15,9 +20,9 @@ dd I_END dd param dd 0 -include '../../../proc32.inc' -include '../../../macros.inc' -include '../../../dll.inc' +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' ;--------------------------------------------------------------- BootSettings: ; Set system language @@ -80,7 +85,7 @@ BootSettings: invoke ini.get_int, sz_ini, sz_mouse, sz_acceleration, 1 mov edx,eax mcall 18,19,3 - + ; Set mouse double click delay invoke ini.get_int, sz_ini, sz_mouse, sz_double_click_delay, 1 mov edx,eax diff --git a/programs/system/skincfg/trunk/Tupfile.lua b/programs/system/skincfg/Tupfile.lua similarity index 79% rename from programs/system/skincfg/trunk/Tupfile.lua rename to programs/system/skincfg/Tupfile.lua index 5ce9033cb..6ee0f673e 100644 --- a/programs/system/skincfg/trunk/Tupfile.lua +++ b/programs/system/skincfg/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_fasm.lua") add_include(tup.getvariantdir()) diff --git a/programs/system/skincfg/trunk/build_en.bat b/programs/system/skincfg/build_en.bat similarity index 100% rename from programs/system/skincfg/trunk/build_en.bat rename to programs/system/skincfg/build_en.bat diff --git a/programs/system/skincfg/trunk/build_en.sh b/programs/system/skincfg/build_en.sh similarity index 100% rename from programs/system/skincfg/trunk/build_en.sh rename to programs/system/skincfg/build_en.sh diff --git a/programs/system/skincfg/trunk/build_es.bat b/programs/system/skincfg/build_es.bat similarity index 100% rename from programs/system/skincfg/trunk/build_es.bat rename to programs/system/skincfg/build_es.bat diff --git a/programs/system/skincfg/trunk/build_et.bat b/programs/system/skincfg/build_et.bat similarity index 100% rename from programs/system/skincfg/trunk/build_et.bat rename to programs/system/skincfg/build_et.bat diff --git a/programs/system/skincfg/trunk/build_et.sh b/programs/system/skincfg/build_et.sh similarity index 100% rename from programs/system/skincfg/trunk/build_et.sh rename to programs/system/skincfg/build_et.sh diff --git a/programs/system/skincfg/trunk/build_it.bat b/programs/system/skincfg/build_it.bat similarity index 100% rename from programs/system/skincfg/trunk/build_it.bat rename to programs/system/skincfg/build_it.bat diff --git a/programs/system/skincfg/trunk/build_ru.bat b/programs/system/skincfg/build_ru.bat similarity index 100% rename from programs/system/skincfg/trunk/build_ru.bat rename to programs/system/skincfg/build_ru.bat diff --git a/programs/system/skincfg/trunk/build_ru.sh b/programs/system/skincfg/build_ru.sh similarity index 100% rename from programs/system/skincfg/trunk/build_ru.sh rename to programs/system/skincfg/build_ru.sh diff --git a/programs/system/skincfg/trunk/build_sp.sh b/programs/system/skincfg/build_sp.sh similarity index 100% rename from programs/system/skincfg/trunk/build_sp.sh rename to programs/system/skincfg/build_sp.sh diff --git a/programs/system/skincfg/trunk/drawskin.inc b/programs/system/skincfg/drawskin.inc similarity index 100% rename from programs/system/skincfg/trunk/drawskin.inc rename to programs/system/skincfg/drawskin.inc diff --git a/programs/system/skincfg/trunk/idata.inc b/programs/system/skincfg/idata.inc similarity index 100% rename from programs/system/skincfg/trunk/idata.inc rename to programs/system/skincfg/idata.inc diff --git a/programs/system/skincfg/trunk/kglobals.inc b/programs/system/skincfg/kglobals.inc similarity index 100% rename from programs/system/skincfg/trunk/kglobals.inc rename to programs/system/skincfg/kglobals.inc diff --git a/programs/system/skincfg/trunk/makefile b/programs/system/skincfg/makefile similarity index 100% rename from programs/system/skincfg/trunk/makefile rename to programs/system/skincfg/makefile diff --git a/programs/system/skincfg/trunk/skincfg.asm b/programs/system/skincfg/skincfg.asm similarity index 98% rename from programs/system/skincfg/trunk/skincfg.asm rename to programs/system/skincfg/skincfg.asm index 5a2f14eb5..13b531b93 100644 --- a/programs/system/skincfg/trunk/skincfg.asm +++ b/programs/system/skincfg/skincfg.asm @@ -1,3 +1,6 @@ +; SPDX-License-Identifier: NOASSERTION +; + ; ; UNIFORM WINDOW COLOURS & SKIN ; @@ -28,15 +31,15 @@ M01header.params: dd cur_dir_path ; path to file include 'lang.inc' -include '../../../proc32.inc' -include '../../../config.inc' ;for nightbuild -include '../../../macros.inc' -include '../../../string.inc' -include '../../../dll.inc' +include '../../proc32.inc' +include '../../config.inc' ;for nightbuild +include '../../macros.inc' +include '../../string.inc' +include '../../dll.inc' include 'kglobals.inc' include 'unpacker.inc' -include '../../../KOSfuncs.inc' -include '../../../load_lib.mac' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' @use_library ;****************************************************************************** ;-------------------------------------- diff --git a/programs/system/skincfg/trunk/udata.inc b/programs/system/skincfg/udata.inc similarity index 100% rename from programs/system/skincfg/trunk/udata.inc rename to programs/system/skincfg/udata.inc diff --git a/programs/system/skincfg/trunk/unpacker.inc b/programs/system/skincfg/unpacker.inc similarity index 100% rename from programs/system/skincfg/trunk/unpacker.inc rename to programs/system/skincfg/unpacker.inc diff --git a/programs/system/taskbar/trunk/KEYMAP.KEY b/programs/system/taskbar/KEYMAP.KEY similarity index 100% rename from programs/system/taskbar/trunk/KEYMAP.KEY rename to programs/system/taskbar/KEYMAP.KEY diff --git a/programs/system/taskbar/trunk/LANG.INI b/programs/system/taskbar/LANG.INI similarity index 100% rename from programs/system/taskbar/trunk/LANG.INI rename to programs/system/taskbar/LANG.INI diff --git a/programs/system/taskbar/trunk/MOI.INC b/programs/system/taskbar/MOI.INC similarity index 100% rename from programs/system/taskbar/trunk/MOI.INC rename to programs/system/taskbar/MOI.INC diff --git a/programs/system/taskbar/trunk/TASKBAR.ASM b/programs/system/taskbar/TASKBAR.ASM similarity index 99% rename from programs/system/taskbar/trunk/TASKBAR.ASM rename to programs/system/taskbar/TASKBAR.ASM index e4fe7f936..c878cc2fe 100644 --- a/programs/system/taskbar/trunk/TASKBAR.ASM +++ b/programs/system/taskbar/TASKBAR.ASM @@ -1,3 +1,8 @@ +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; TASK PANEL for KolibriOS - Compile with fasm ; @@ -74,11 +79,11 @@ format binary as "" dd path ; application pach ;------------------------------------------------------------------------------ include 'lang.inc' -include '../../../macros.inc' -include '../../../proc32.inc' -;include '../../../debug.inc' -include 'MOI.INC' ;раскладки клавиатуры -include '../../../develop/libraries/box_lib/load_lib.mac' +include '../../macros.inc' +include '../../proc32.inc' +;include '../../debug.inc' +include 'MOI.INC' ; keyboard layouts +include '../../develop/libraries/box_lib/load_lib.mac' @use_library ;use load lib macros ;------------------------------------------------------------------------------ caps_lock_check fix 1 @@ -1156,7 +1161,7 @@ no_full: ;------------------------------------------------------------------------------ include 'libini.inc' ;------------------------------------------------------------------------------ -include '../../../dll.inc' +include '../../dll.inc' ;------------------------------------------------------------------------------ include 'drawappl.inc' ;------------------------------------------------------------------------------ diff --git a/programs/system/taskbar/trunk/Tupfile.lua b/programs/system/taskbar/Tupfile.lua similarity index 79% rename from programs/system/taskbar/trunk/Tupfile.lua rename to programs/system/taskbar/Tupfile.lua index 3eaede86c..cbc92de24 100644 --- a/programs/system/taskbar/trunk/Tupfile.lua +++ b/programs/system/taskbar/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_fasm.lua") add_include(tup.getvariantdir()) diff --git a/programs/system/taskbar/trunk/build_en.bat b/programs/system/taskbar/build_en.bat similarity index 100% rename from programs/system/taskbar/trunk/build_en.bat rename to programs/system/taskbar/build_en.bat diff --git a/programs/system/taskbar/trunk/build_et.bat b/programs/system/taskbar/build_et.bat similarity index 100% rename from programs/system/taskbar/trunk/build_et.bat rename to programs/system/taskbar/build_et.bat diff --git a/programs/system/taskbar/trunk/build_ru.bat b/programs/system/taskbar/build_ru.bat similarity index 100% rename from programs/system/taskbar/trunk/build_ru.bat rename to programs/system/taskbar/build_ru.bat diff --git a/programs/system/taskbar/trunk/ctx_menu.asm b/programs/system/taskbar/ctx_menu.asm similarity index 100% rename from programs/system/taskbar/trunk/ctx_menu.asm rename to programs/system/taskbar/ctx_menu.asm diff --git a/programs/system/taskbar/trunk/drawappl.inc b/programs/system/taskbar/drawappl.inc similarity index 100% rename from programs/system/taskbar/trunk/drawappl.inc rename to programs/system/taskbar/drawappl.inc diff --git a/programs/system/taskbar/trunk/drawbutt.inc b/programs/system/taskbar/drawbutt.inc similarity index 100% rename from programs/system/taskbar/trunk/drawbutt.inc rename to programs/system/taskbar/drawbutt.inc diff --git a/programs/system/taskbar/trunk/drawtray.inc b/programs/system/taskbar/drawtray.inc similarity index 100% rename from programs/system/taskbar/trunk/drawtray.inc rename to programs/system/taskbar/drawtray.inc diff --git a/programs/system/taskbar/trunk/drawwind.inc b/programs/system/taskbar/drawwind.inc similarity index 100% rename from programs/system/taskbar/trunk/drawwind.inc rename to programs/system/taskbar/drawwind.inc diff --git a/programs/system/taskbar/trunk/i_data.inc b/programs/system/taskbar/i_data.inc similarity index 100% rename from programs/system/taskbar/trunk/i_data.inc rename to programs/system/taskbar/i_data.inc diff --git a/programs/system/taskbar/trunk/libini.inc b/programs/system/taskbar/libini.inc similarity index 100% rename from programs/system/taskbar/trunk/libini.inc rename to programs/system/taskbar/libini.inc diff --git a/programs/system/taskbar/trunk/makefile b/programs/system/taskbar/makefile similarity index 100% rename from programs/system/taskbar/trunk/makefile rename to programs/system/taskbar/makefile diff --git a/programs/system/taskbar/trunk/readme.txt b/programs/system/taskbar/readme.txt similarity index 100% rename from programs/system/taskbar/trunk/readme.txt rename to programs/system/taskbar/readme.txt diff --git a/programs/system/taskbar/trunk/taskbar.ini b/programs/system/taskbar/taskbar.ini similarity index 100% rename from programs/system/taskbar/trunk/taskbar.ini rename to programs/system/taskbar/taskbar.ini diff --git a/programs/system/taskbar/trunk/u_data.inc b/programs/system/taskbar/u_data.inc similarity index 100% rename from programs/system/taskbar/trunk/u_data.inc rename to programs/system/taskbar/u_data.inc diff --git a/programs/system/zkey/trunk/ASPAPI.INC b/programs/system/zkey/ASPAPI.INC similarity index 98% rename from programs/system/zkey/trunk/ASPAPI.INC rename to programs/system/zkey/ASPAPI.INC index 52d10df41..a89aa885b 100644 --- a/programs/system/zkey/trunk/ASPAPI.INC +++ b/programs/system/zkey/ASPAPI.INC @@ -1,4 +1,4 @@ -include '../../../proc32.inc' +include '../../proc32.inc' macro start_draw_window x,y,xsize,ysize,areacolor,caption { @@ -125,4 +125,3 @@ macro putpixel x,y,color mov edx, color int 0x40 } - diff --git a/programs/system/zkey/trunk/Tupfile.lua b/programs/system/zkey/Tupfile.lua similarity index 100% rename from programs/system/zkey/trunk/Tupfile.lua rename to programs/system/zkey/Tupfile.lua diff --git a/programs/system/zkey/trunk/ZKEY.ASM b/programs/system/zkey/ZKEY.ASM similarity index 99% rename from programs/system/zkey/trunk/ZKEY.ASM rename to programs/system/zkey/ZKEY.ASM index 4599fd79f..57d6880cd 100644 --- a/programs/system/zkey/trunk/ZKEY.ASM +++ b/programs/system/zkey/ZKEY.ASM @@ -1,4 +1,9 @@ +; SPDX-License-Identifier: NOASSERTION ; + +; Text encoded with Code Page 866 - Cyrillic + + ; ZKEY. Version 0.51. ; Virtual keyboard for KolibriOS. ; @@ -20,7 +25,7 @@ use32 dd 0 dd 0 -include '../../../macros.inc' +include '../../macros.inc' include "ASPAPI.INC" N_KEYCOLOR equ 0x00677889 ; Normal button color @@ -168,19 +173,19 @@ draw_window: mul byte [keyboard_mode] add eax, SwitchText stdcall draw_button, 513,28,46,20,106,0x00700000,eax,6,TEXTCOLOR ; Scan/ASCII switch - + xor al, al xchg al, [red_type] test al, 2 jnz .skip_end_draw_window ; if we draw switch button without redraw window then end_draw_window not need - + @@: .draw_indicators_area: call lights_on end_draw_window - -.skip_end_draw_window: + +.skip_end_draw_window: ret get_zkey_window_slot_number: @@ -197,14 +202,14 @@ still: call get_receiver_window_slot_number call get_receiver_window_keyboard_mode ; return in ecx keyboard_mode for set_keyboard_mode call set_keyboard_mode -; delete_switch_button - mov eax, 8 +; delete_switch_button + mov eax, 8 mov edx, BT_DEL + 0x00700000 - int 0x40 + int 0x40 mov byte [red_type], 2 call draw_window.draw_switch_button - + mov eax, 10 ; Wait for an event in the queue. int 0x40 @@ -486,4 +491,3 @@ PROCINFO_BUFF process_information rb 4096 STACKTOP: MEM: - diff --git a/programs/system/zkey/trunk/makefile b/programs/system/zkey/makefile similarity index 100% rename from programs/system/zkey/trunk/makefile rename to programs/system/zkey/makefile