From a32e30e50f48f52a8458d2f6bfc3cac7a9682dc0 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Fri, 25 Nov 2016 15:19:45 +0000 Subject: [PATCH] CMM: fix in io.h, rename TEXTREADER into TXTREAD, icons32.png: change colors for DIFF app make RunOS window wider git-svn-id: svn://kolibrios.org@6759 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/Tupfile.lua | 4 ++-- data/common/icons32.png | Bin 32388 -> 32408 bytes data/common/settings/assoc.ini | 4 ++-- programs/cmm/diff/diff_gui.h | 2 -- programs/cmm/lib/io.h | 17 +++-------------- programs/cmm/lib/kolibri.h | 3 ++- .../cmm/{textreader => txtread}/Tupfile.lua | 2 +- .../cmm/{textreader => txtread}/compile.bat | 0 programs/cmm/{textreader => txtread}/gui.h | 0 programs/cmm/{textreader => txtread}/ini.h | 2 +- .../{textreader => txtread}/prepare_page.h | 0 .../cmm/{textreader => txtread}/toolbar.png | Bin .../textreader.c => txtread/txtread.c} | 0 programs/system/RunOD/RunOD.asm | 2 +- 14 files changed, 12 insertions(+), 24 deletions(-) rename programs/cmm/{textreader => txtread}/Tupfile.lua (61%) rename programs/cmm/{textreader => txtread}/compile.bat (100%) rename programs/cmm/{textreader => txtread}/gui.h (100%) rename programs/cmm/{textreader => txtread}/ini.h (93%) rename programs/cmm/{textreader => txtread}/prepare_page.h (100%) rename programs/cmm/{textreader => txtread}/toolbar.png (100%) rename programs/cmm/{textreader/textreader.c => txtread/txtread.c} (100%) diff --git a/data/Tupfile.lua b/data/Tupfile.lua index 2314389751..5a19645209 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -15,7 +15,7 @@ img_files = { {"MACROS.INC", PROGS .. "/macros.inc"}, {"CONFIG.INC", PROGS .. "/config.inc"}, {"STRUCT.INC", PROGS .. "/struct.inc"}, - {"TOOLBAR.PNG", PROGS .. "/cmm/textreader/toolbar.png"}, + {"TOOLBAR.PNG", PROGS .. "/cmm/txtread/toolbar.png"}, {"DEVELOP/TE_ICON.PNG", PROGS .. "/other/t_edit/te_icon.png"}, {"DEVELOP/TL_NOD_16.PNG", PROGS .. "/other/t_edit/tl_nod_16.png"}, {"DEVELOP/TL_SYS_16.PNG", PROGS .. "/media/log_el/trunk/tl_sys_16.png"}, @@ -547,7 +547,7 @@ tup.append_table(img_files, { {"MOUSECFG", PROGS .. "/cmm/mousecfg/mousecfg.com"}, {"NETWORK/WEBVIEW", PROGS .. "/cmm/browser/WebView.com"}, {"PANELS_CFG", PROGS .. "/cmm/panels_cfg/panels_cfg.com"}, - {"TEXTREADER", PROGS .. "/cmm/textreader/textreader.com"}, + {"txtread", PROGS .. "/cmm/txtread/txtread.com"}, {"TMPDISK", PROGS .. "/cmm/tmpdisk/tmpdisk.com"}, {"GAME_CENTER", PROGS .. "/cmm/software_widget/software_widget.com"}, {"SYSPANEL", PROGS .. "/cmm/software_widget/software_widget.com"}, diff --git a/data/common/icons32.png b/data/common/icons32.png index 604171853f4ca1be910e33eae8e0dcc5aa2a5782..6c34e721a1ea8d9bb19157d1f171695f825bb128 100644 GIT binary patch delta 27579 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 Y2sNYfjIg@$E$=AM58W;Kwg3PC delta 27559 zcmW)nWmr_-+lBWGGcfefNDkdn(uhMT0ty1sT@p$oATdLV$PZ9jK)R$mq$C89mXs7} zknVi>zhBNd*WTyjj`gf{KS@`RkSjN{G8kn-vYomNlPDY-uF>Kq+Uh18Y=D+m^c9 z!)ohKR;(pyZ#uR8`m`eZKmM-Q&M2Q6`o+mT`{NNk{msSq2m9~1KKuTiJAG5tI9G6h z(dndj-SH1NX&Af;?+N$iiaitGeD%-3af-hSB6~QbI5mIS-;v$>=)tjGJ~)LSwk{G@ zdWbHKHeE2#=2ddd*W5r229~wup{29s$vkGecv9}rlm13 z;~I�RA#MPq<*M+lBPyrvk;C*lJ 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

76gv%NdK`f3w2nFp32t3@qmnB`n5( zxilr1CyvZtQp?6jfvorG;H6!?P`@V8Az>o;+iEOXK!C%i^BKFu_J7b@<4d%}QjnL* z26aNAmH{w%$JYo#9HdU3^|}!+lHFvc7zGV>>fYFGc)8XaxDR>o^hT>(cz zX3cUqf=bZTwkCN`_aTEdE)N*pTT8dT&p~$+DZ?@#5(po|yqpease*qR6fZUDGP2GX z=oJtTc&f_b<3lpE@DklRVdZA1>M-&P)_H6F!A4nKT?`39wyz@Y*1;}&%8q|kTYeru zM`Xj)V9|$_G`FRtcnbQyd4wKrl8gLfTW29^zr}kxMT?R~B4jgd7e$-BLh^gdol}v~ z@B1RaB91&em{foXjammqV*n~Oj9d9LIGDRc6l{R^83V0blmt&Jjt?UX_G*KdDBisZ zW!(0^1EE3!-xC1F2_9%%f1Uew)@2~Cvw4rCx_hrK-7Hp~Rhs(>3-C3f0p5YI?c0Oh zjEiYQNcI&$d^R5n9;dS+fWX4(oN-(E>>LBbT`feD^|phClof_&g*NK{g0~o}l@tJV zH`N#^!q(*lsE!*vJSTT&!%a=>ta26E8xOtQ?9SQENg+=_Kv3b}Wp;;w4_~7M_b6<- zY37u+zf57kvgB*Zd%G&5uT?C;!MP$bF+&(><%`em$0BjOp5Q?7bu{eDK9`R7m3?tX zFGd615$M@vU)_dVhu4%p@E82o^X>CQZm8s<`?R2dBt@?XpwsNf{?O4f0QprK5Kbb~ zkGuhDE45Hg@D$6|jd^p!HP5A6x;%=H6R&M>-#@tQC^q9maNo%PrUT^G34F!0KQ&oC z_hPHvU+r@?{opui`jDk&|dyoqvh#u<s(2YH3nbTsYa1X5)h>E4 zTGzK0ScCybQU!G_?(vO4Mu#o}59z@#Nb*%1g^rhbMDNU=1I+z~ zj%1xcP^Zwha99IVYsOMmQgIinrUbEN!UQ--bWu2@dMg+HPMHVGGm)3}X0%SP=1EPs z9vYt7+MXJkJ#l$gWK}eJ_O7*UD!9}{B(TgutV%$;#r7G?i`Ycl)Y3;w*7=A>rK*Da zmgF@@Po9=l=I!`2XmCfEo5#Q;#UOrcu)-(ts~87`g%+mw=+xovFfDQ7Dx(d!rK($8 zF*>Uq*w5gJ3+j4L{eIBfG%;qCnrugmS)HIqWDaPxe2B`}Wlv1w`CY0?$%ib?+!adv zI#Qj!i_tOJjIi9i+i*;fA*rKydU1o2tfS$J6!KP>2m;R#7rM!hQFqt-&FSX zdc=f7@K&W}!Yl6Zs9k#bUjbKux$xH+mB~4(&@k=sozpyKk=Q;_L_IHs_|(q4u5gzM zZ^+g#9da0IAKGz3Ymw5h;xKt>nlo}M5|k>OvOIY9x+0|f5-4aE~cS2oSH~t0QqZkaIF1^ zZkWAuPYM(9vkWECR)drHq5ktfLy&|dd~Oo}tlCq@)S#~IHn2xbGpc#T2vKF!Z3#ev z`%H_Un9eEq9b`DWLRc^m%|a|y`0c2rWsv@Y0@I#d=W$NFWjCgYpUG31&sqB@CeR{% zmT53GQMoWLsG`#0d7|lHdVWJEZ2T^x$EgL~_UAam$%u}e%1QgvE^vT-3j`E&Tw$H9 zi}7Cze`i!(@fUC$w?5mElQmBJ>JFX#aTi7}9Zc+roh7?NmVdLMV|SxhTWnDa)-D3; z)^Rs#~Kvcs6XbssMvi*q@-rRAyg?WqGhcFoQKd0Dgr! z)8M2&Ub96&H&)b0H+Uun;j&b&q_?mfwpZ)Piv`fe8y3wQvkAk=1UJMUANki#R4Htl z{`F%4Y69&JoHjSY7rAxfG1IYVcKbu}p;mh{ma2GxF@CX?){lo@rB*tCg}|qyQ=Y+? z66F8=2pHW|S7Rz=UkqOO0*!Pt44*3vbC-G1I|~n?8J3iZAaWRx$K5k~TgM|? zweO7P?XA1FI7U}ZTeyu(50l+~mtNo3n9c3lirQNHgC@V}2!i{N!rhM4-^9w8E>y7B zezUJu5(C*;qqc|@JUw%;xyQ5Lfr@}d?nXhPJYh-?_{U(Gd%mCFl93D=Rol<-xB@5c zk=yNjWzfk3v$QLtXgK;nTU;A2E}o)`xyG+TaS#cNL`xR#UMi8^S6x6X`crx4j}5k} zFL07oNGj0e?hAE#m<(CEF~}9K!v>Shq$L~zzEaW5!N?voKA9;NXp*%LZ?y1?*k+}} zj&V4za7I!jCitOz!%E}v+!I0C%nnNGg71f4%tV+U^+-OA6PQ9jX8MF{VlO|u%jy%{ zhfTC2e`yskpLEFK-=Vb&CHGYx*bRpW^&b7w4PFk>GOoe$kXy>1KjOOcj~3;9R-B5N xKN>wQ4yS56l)yM6qdYhZ#;~6r6zal{&kD_Xu18ATjsoP5p{|+EGc7{w{{b`U-5&q| diff --git a/data/common/settings/assoc.ini b/data/common/settings/assoc.ini index 55c097bc14..6ca23e5b54 100644 --- a/data/common/settings/assoc.ini +++ b/data/common/settings/assoc.ini @@ -14,8 +14,8 @@ icon=58 next=$Text Reader [Text Reader] -exec=/sys/textreader -icon=55 +exec=/sys/txtread +icon=85 next=$HexEditor [zSea] diff --git a/programs/cmm/diff/diff_gui.h b/programs/cmm/diff/diff_gui.h index 07a546000e..b168759d3f 100644 --- a/programs/cmm/diff/diff_gui.h +++ b/programs/cmm/diff/diff_gui.h @@ -28,8 +28,6 @@ void gui() OpenDialog_init stdcall (#o_dialog); SetEventMask(0x27); - debugln("GUI"); - loop() switch(WaitEvent()) { case evMouse: diff --git a/programs/cmm/lib/io.h b/programs/cmm/lib/io.h index ab73809da8..d657fbce9e 100644 --- a/programs/cmm/lib/io.h +++ b/programs/cmm/lib/io.h @@ -229,22 +229,10 @@ dword pos; if(!PATH) return self.dir; pos = PATH; - if(DSBYTE[pos]=='/') + if(DSBYTE[pos]=='/') || (!strncmp(PATH,"./",2)) { - pos++; - if(!strncmp(pos,"sys/",4)) return PATH; - if(!strncmp(pos,"kolibrios/",10)) return PATH; - if(!strncmp(pos,"rd/",3)) return PATH; - if(!strncmp(pos,"fd/",3)) return PATH; - if(!strncmp(pos,"cd",2)) return PATH; - if(!strncmp(pos,"hd",2)) return PATH; - if(!strncmp(pos,"bd",2)) return PATH; - if(!strncmp(pos,"tmp",3)) return PATH; - if(!strncmp(pos,"usbhd",5)) return PATH; - sprintf(#__PATH_NEW,"/sys%s",PATH); - return #__PATH_NEW; + return PATH; } - if(!strncmp(PATH,"./",2)) return PATH; sprintf(#__PATH_NEW,"%s/%s",self.dir,PATH); return #__PATH_NEW; } @@ -337,6 +325,7 @@ __file_F70.rezerv = 0; __file_F70.param2 = rparam; __file_F70.name = path.path(rpath); + debugln(__file_F70.name); $mov eax,70 $mov ebx,#__file_F70.func $int 0x40 diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h index 660eda91ed..97a19bd6ac 100644 --- a/programs/cmm/lib/kolibri.h +++ b/programs/cmm/lib/kolibri.h @@ -608,6 +608,8 @@ dword __generator; // random number generator - //The initialization of the initial data before running void ______INIT______() { + if (program_path[0]!='/') I_Path++; + self.dir = #__BUF_DIR__; self.file = 0; self.path = I_Path; @@ -622,7 +624,6 @@ void ______INIT______() mem_init(); - if (program_path[0]!='/') I_Path++; main(); ExitProcess(); diff --git a/programs/cmm/textreader/Tupfile.lua b/programs/cmm/txtread/Tupfile.lua similarity index 61% rename from programs/cmm/textreader/Tupfile.lua rename to programs/cmm/txtread/Tupfile.lua index 263f8d756f..c3a3587099 100644 --- a/programs/cmm/textreader/Tupfile.lua +++ b/programs/cmm/txtread/Tupfile.lua @@ -3,4 +3,4 @@ if tup.getconfig("LANG") == "ru" then C_LANG = "LANG_RUS" else C_LANG = "LANG_ENG" -- this includes default case without config end -tup.rule("textreader.c", "c-- /D=AUTOBUILD /D=$(C_LANG) %f" .. tup.getconfig("KPACK_CMD"), "textreader.com") +tup.rule("txtread.c", "c-- /D=AUTOBUILD /D=$(C_LANG) %f" .. tup.getconfig("KPACK_CMD"), "txtread.com") diff --git a/programs/cmm/textreader/compile.bat b/programs/cmm/txtread/compile.bat similarity index 100% rename from programs/cmm/textreader/compile.bat rename to programs/cmm/txtread/compile.bat diff --git a/programs/cmm/textreader/gui.h b/programs/cmm/txtread/gui.h similarity index 100% rename from programs/cmm/textreader/gui.h rename to programs/cmm/txtread/gui.h diff --git a/programs/cmm/textreader/ini.h b/programs/cmm/txtread/ini.h similarity index 93% rename from programs/cmm/textreader/ini.h rename to programs/cmm/txtread/ini.h index f3bd253d21..f496ce9219 100644 --- a/programs/cmm/textreader/ini.h +++ b/programs/cmm/txtread/ini.h @@ -4,7 +4,7 @@ int encoding; void LoadIniSettings() { - strcpy(#ini_path, "/sys/settings/treader.ini"); + strcpy(#ini_path, "/sys/settings/txtread.ini"); ini_get_int stdcall (#ini_path, #config_section, "FontSize", 14); label.size.pt = EAX; ini_get_int stdcall (#ini_path, #config_section, "Encoding", CH_CP866); encoding = EAX; ini_get_int stdcall (#ini_path, #config_section, "WinX", 150); Form.left = EAX; diff --git a/programs/cmm/textreader/prepare_page.h b/programs/cmm/txtread/prepare_page.h similarity index 100% rename from programs/cmm/textreader/prepare_page.h rename to programs/cmm/txtread/prepare_page.h diff --git a/programs/cmm/textreader/toolbar.png b/programs/cmm/txtread/toolbar.png similarity index 100% rename from programs/cmm/textreader/toolbar.png rename to programs/cmm/txtread/toolbar.png diff --git a/programs/cmm/textreader/textreader.c b/programs/cmm/txtread/txtread.c similarity index 100% rename from programs/cmm/textreader/textreader.c rename to programs/cmm/txtread/txtread.c diff --git a/programs/system/RunOD/RunOD.asm b/programs/system/RunOD/RunOD.asm index 7cbfe8426f..f32e339e39 100644 --- a/programs/system/RunOD/RunOD.asm +++ b/programs/system/RunOD/RunOD.asm @@ -1 +1 @@ - ; Run with OpenDialog ; org 0 use32 STACK_SIZE equ 256 REDRAW_EVENT equ 1 KEY_EVENT equ 2 BUTTON_EVENT equ 3 MOUSE_EVENT equ 6 BUTTON_RUN equ 10 BUTTON_BROWSE equ 20 MENUET01 db 'MENUET01' version dd 1 program.start dd start_ program.end dd data_ program.memory dd end_ + STACK_SIZE program.stack dd end_ + STACK_SIZE program.params dd 0 program.path dd 0 include 'lang.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' ; ======================================================================= ; start_: mov byte [file_info], 7 ; set.event mov eax, 40 mov ebx, 39 int 64 push sz_box_lib call load.library mov [box_lib], eax push dword[box_lib] push sz_edit_box call getprocaddress mov [edit_box_draw], eax push dword[box_lib] push sz_edit_box_key call getprocaddress mov [edit_box_key], eax push dword[box_lib] push sz_edit_box_mouse call getprocaddress mov [edit_box_mouse], eax push dword[box_lib] push sz_edit_box_set_text call getprocaddress mov [edit_box_set_text], eax push sz_proc_lib call load.library mov [proc_lib], eax push dword[proc_lib] push sz_OpenDialog_init call getprocaddress mov [opendialog_init], eax push dword[proc_lib] push sz_OpenDialog_start call getprocaddress mov [opendialog_start], eax ; memory.allocate: mov eax, 68 mov ebx, 12 mov ecx, 4096 + 4096 + 4096 int 64 mov [od.procinfo], eax add eax, 1024 mov [od.filename_area], eax add eax, 4096 - 1024 mov [od.opendir_path], eax add eax, 4096 mov [od.openfile_path], eax push od call [opendialog_init] ; get.screen.size mov eax, 61 mov ebx, 1 int 64 mov [screen], eax movzx eax, word[screen.width] shr eax, 3 lea eax, [eax*2 + eax] add eax, 8 mov [window.width], eax ; skin.height mov eax, 48 mov ebx, 4 int 64 add eax, 100 mov [window.height], eax movzx eax, word[screen.width] sub eax, [window.width] shr eax, 1 mov [window.left], eax movzx eax, word[screen.height] sub eax, [window.height] sub eax, 100 mov [window.top], eax mov eax, [window.width] sub eax, 80 mov [edit1.width], eax mov eax, [od.openfile_path] mov [edit1.text], eax call on_redraw ; ----------------------- ; .loop: ; wait.event mov eax, 10 int 64 cmp eax, REDRAW_EVENT jne .check_key call on_redraw jmp .loop ; ----------------------- ; .check_key: cmp eax, KEY_EVENT jne .check_button mov eax, 2 int 64 cmp ah, 13 jne .no_key_enter call on_button_run jmp .loop ; ----------------------- ; .no_key_enter: cmp ah, 185 jne .no_key_insert call on_button_browse jmp .loop .no_key_insert: push edit1 call [edit_box_key] jmp .loop ; ----------------------- ; .check_button: cmp eax, BUTTON_EVENT jne .check_mouse ; get.button.number mov eax, 17 int 64 cmp ah, 1 jne .check_button_run ; program.terminate or eax, -1 int 64 ; ----------------------- ; .check_button_run: cmp ah, BUTTON_RUN jne .check_button_browse call on_button_run jmp .loop ; ----------------------- ; .check_button_browse: cmp ah, BUTTON_BROWSE jne .loop call on_button_browse jmp .loop ; ----------------------- ; .check_mouse: cmp eax, MOUSE_EVENT jne .loop push edit1 call [edit_box_mouse] jmp .loop ; ======================================================================= ; on_button_run: push dword[edit1.text] call extractrunpathandparams ;file.run: mov eax, 70 mov ebx, file_info int 64 mov dl, byte[lastendpath] mov ecx, [ptrlastendpath] mov [ecx], dl test eax, eax jnge .error mov [runresult], dword sz_Program_run_successfully jmp .exit .error: ; ----------------------- ; .5: cmp al, -5 jne .31 mov [runresult], dword sz_File_not_found jmp .exit ; ----------------------- ; .31: cmp al, -31 jne .32 mov [runresult], dword sz_File_is_not_executable jmp .exit ; ----------------------- ; .32: cmp al, -32 jne .10 mov [runresult], dword sz_Too_many_processes jmp .exit ; ----------------------- ; .10: cmp al, -10 jne .30 mov [runresult], dword sz_Access_denied jmp .exit ; ----------------------- ; .30: cmp al, -30 jne .unknown mov [runresult], dword sz_Out_of_memory jmp .exit ; ----------------------- ; .unknown: mov [runresult], dword sz_Unknown_error ; ----------------------- ; .exit: call on_redraw ret ; ======================================================================= ; on_button_browse: push od call [opendialog_start] mov eax, [od.status] test eax, eax je .exit ;======== if space exist in filepath, then quote filepath mov eax, [od.openfile_path] ; ----------------------- ; .check_space: cmp [eax], byte 0 je .no_space cmp [eax], byte 32 ;space je .space inc eax jmp .check_space .space: ; ----------------------- ; .find_end_zero: inc eax cmp [eax], byte 0 jne .find_end_zero mov [eax + 2], byte 0 mov [eax + 1], byte 34 ; quote ; ----------------------- ; .shift_path: dec eax mov dl, byte [eax ] mov [eax + 1], dl cmp eax, [od.openfile_path] jne .shift_path mov [eax ], byte 34 ; quote .no_space: ;================================= push dword[od.openfile_path] push edit1 call [edit_box_set_text] ; ----------------------- ; .exit: ret ; ======================================================================= ; on_redraw: ; redraw.start mov eax, 12 mov ebx, 1 int 64 ; get.standart.colors mov eax, 48 mov ebx, 3 mov ecx, sc mov edx, 40 int 64 mov eax, [sc.work_graph] mov [edit1.shift_color], eax mov eax, [sc.work_graph] mov [edit1.focus_border_color], eax mov eax, [sc.frames] mov [edit1.blur_border_color], eax mov eax, [sc.work_text] bts eax, 28 mov [edit1.text_color], eax ; draw.window xor eax, eax mov ebx, [window.left] shl ebx, 16 add ebx, [window.width] mov ecx, [window.top] shl ecx, 16 add ecx, [window.height] mov edx, [sc.work] or edx, 34000000h mov edi, title int 64 push 5 push 5 push sz_Type_name_of_program push dword [sc.work_text] call draw.text ; ====================| browse button |==================== push 20 mov eax, [window.width] sub eax, 70 push eax push 26 push 52 push 21 call draw.button mov eax, [window.width] sub eax, 56 push eax push 29 push sz_browse push dword [sc.work_button_text] call draw.text ; ====================| run button |==================== push 10 push 5 push 52 mov eax, [window.width] sub eax, 22 push eax push 21 call draw.button mov eax, [window.width] shr eax, 1 sub eax, 40 push eax push 55 push sz_run push dword [sc.work_button_text] call draw.text ; ===================================================== push 5 push 80 push dword[runresult] push dword [sc.work_text] call draw.text push edit1 call [edit_box_draw] ; redraw.finish mov eax, 12 mov ebx, 2 int 64 ret ; ======================================================================= ; extractrunpathandparams: xor ecx, ecx mov eax, [esp + 4] mov [runpath], eax movzx eax, byte [eax] cmp eax, 34 jne .start_without_quote inc ecx ; ----------------------- ; .loop1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 34 jne .not_quote mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 34 inc ecx ; ----------------------- ; .skip_space1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped1 inc ecx jmp .skip_space1 ; ----------------------- ; .skipped1: mov eax, [runpath] add eax, ecx mov [runparams], eax inc dword [runpath] jmp .exit ; ----------------------- ; .not_quote: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero1 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero1: inc ecx jmp .loop1 ; ----------------------- ; .start_without_quote: ; ----------------------- ; .loop2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 32 jne .not_space mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 32 inc ecx ; ----------------------- ; .skip_space2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped2 inc ecx jmp .skip_space2 ; ----------------------- ; .skipped2: mov eax, [runpath] add eax, ecx mov [runparams], eax jmp .exit ; ----------------------- ; .not_space: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero2 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero2: inc ecx jmp .loop2 ; ----------------------- ; .exit: ret 4 ; ======================================================================= ; draw.button: mov eax, 8 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 8] mov ecx, [esp + 12] shl ecx, 16 add ecx, [esp + 4] mov edx, [esp + 20] mov esi, [sc.work_button] int 64 ret 20 ; ======================================================================= ; draw.text: mov eax, 4 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 12] mov ecx, [esp + 4] or ecx, 90000000h mov edx, [esp + 8] int 64 ret 16 ; ======================================================================= ; load.library: mov eax, 68 mov ebx, 19 mov ecx, [esp + 4] int 64 ret 4 ; ======================================================================= ; getprocaddress: mov edx, [esp + 8] ; hlib xor eax, eax test edx, edx ; If hlib = 0 then goto .end jz .end ; ----------------------- ; .next: cmp [edx], dword 0 ; If end of export table then goto .end jz .end xor eax, eax mov esi, [edx] mov edi, [esp + 4] ; name ; ----------------------- ; .next_: lodsb scasb jne .fail or al, al jnz .next_ jmp .ok ; ----------------------- ; .fail: add edx, 8 jmp .next ; ----------------------- ; .ok: ; return address mov eax, [edx + 4] ; ----------------------- ; .end: ret 8 data_: sz_box_lib db "/sys/lib/box_lib.obj",0 sz_edit_box db "edit_box",0 sz_edit_box_key db "edit_box_key",0 sz_edit_box_mouse db "edit_box_mouse",0 sz_edit_box_set_text db "edit_box_set_text",0 sz_proc_lib db "/sys/lib/proc_lib.obj",0 sz_OpenDialog_init db "OpenDialog_init",0 sz_OpenDialog_start db "OpenDialog_start",0 sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0 sz_SYS db "/sys",0 sz_opendial_path db "/sys/File managers/opendial",0 if lang eq it sz_Program_run_successfully db "Programma eseguito correttamente",0 sz_File_not_found db "File non trovato",0 sz_File_is_not_executable db "File non eseguibile",0 sz_Too_many_processes db "Troppi processi",0 sz_Access_denied db "Accesso negato",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Errore sconosciuto",0 sz_Type_name_of_program db "Digita il nome del programma per eseguirlo",0 sz_run db " Esegui",0 sz_browse db "Browse",0 title db "Esegui",0 else if lang eq ru sz_Program_run_successfully db "Программа запущена успешно",0 sz_File_not_found db "Файл не найден",0 sz_File_is_not_executable db "Файл не является исполняемым",0 sz_Too_many_processes db "Слишком много процессов",0 sz_Access_denied db "Доступ запрещен",0 sz_Out_of_memory db "Недостаточно памяти",0 sz_Unknown_error db "Неизвестная ошибка",0 sz_Type_name_of_program db "Введите название программы",0 sz_run db "Запустить",0 sz_browse db "...",0 title db "Запуск программы",0 else sz_Program_run_successfully db "Program run successfully",0 sz_File_not_found db "File not found",0 sz_File_is_not_executable db "File is not executable",0 sz_Too_many_processes db "Too many processes",0 sz_Access_denied db "Access denied",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Unknown error",0 sz_Type_name_of_program db "Type name of program to run",0 sz_run db " Run",0 sz_browse db "...",0 title db "Run",0 end if align 4 od: .mode dd 0 .procinfo dd 0 .com_area_name dd sz_FFFFFFFF_open_dialog .com_area dd 0 .opendir_path dd 0 .dir_default_path dd sz_SYS .start_path dd sz_opendial_path .draw_window dd on_redraw .status dd 0 .openfile_path dd 0 .filename_area dd 0 .filter_area dd filefilter .x_size dw 414 .x_start dw 0 .y_size dw 414 .y_start dw 0 runresult dd sz_empty edit1 edit_box 0, 5, 26, -1, 0, 0, 0, 0, 4096, 0, 0, 4002h box_lib dd ? proc_lib dd ? filefilter dd ? ptrlastendpath dd ? edit_box_draw dd ? edit_box_key dd ? edit_box_mouse dd ? edit_box_set_text dd ? opendialog_init dd ? opendialog_start dd ? sc: .frames dd ? .grab dd ? .grab_button dd ? .grab_button_text dd ? .grab_text dd ? .work dd ? .work_button dd ? .work_button_text dd ? .work_text dd ? .work_graph dd ? window: .left dd ? .top dd ? .width dd ? .height dd ? screen: .height dw ? .width dw ? file_info: dd ? dd ? runparams: dd ? dd ? dd ? db ? runpath: dd ? lastendpath db ? sz_empty db ? align 4 end_: \ No newline at end of file + ; Run with OpenDialog ; org 0 use32 STACK_SIZE equ 256 REDRAW_EVENT equ 1 KEY_EVENT equ 2 BUTTON_EVENT equ 3 MOUSE_EVENT equ 6 BUTTON_RUN equ 10 BUTTON_BROWSE equ 20 MENUET01 db 'MENUET01' version dd 1 program.start dd start_ program.end dd data_ program.memory dd end_ + STACK_SIZE program.stack dd end_ + STACK_SIZE program.params dd 0 program.path dd 0 include 'lang.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' ; ======================================================================= ; start_: mov byte [file_info], 7 ; set.event mov eax, 40 mov ebx, 39 int 64 push sz_box_lib call load.library mov [box_lib], eax push dword[box_lib] push sz_edit_box call getprocaddress mov [edit_box_draw], eax push dword[box_lib] push sz_edit_box_key call getprocaddress mov [edit_box_key], eax push dword[box_lib] push sz_edit_box_mouse call getprocaddress mov [edit_box_mouse], eax push dword[box_lib] push sz_edit_box_set_text call getprocaddress mov [edit_box_set_text], eax push sz_proc_lib call load.library mov [proc_lib], eax push dword[proc_lib] push sz_OpenDialog_init call getprocaddress mov [opendialog_init], eax push dword[proc_lib] push sz_OpenDialog_start call getprocaddress mov [opendialog_start], eax ; memory.allocate: mov eax, 68 mov ebx, 12 mov ecx, 4096 + 4096 + 4096 int 64 mov [od.procinfo], eax add eax, 1024 mov [od.filename_area], eax add eax, 4096 - 1024 mov [od.opendir_path], eax add eax, 4096 mov [od.openfile_path], eax push od call [opendialog_init] ; get.screen.size mov eax, 61 mov ebx, 1 int 64 mov [screen], eax movzx eax, word[screen.width] shr eax, 3 lea eax, [eax*2 + eax] add eax, 90 mov [window.width], eax ; skin.height mov eax, 48 mov ebx, 4 int 64 add eax, 100 mov [window.height], eax movzx eax, word[screen.width] sub eax, [window.width] shr eax, 1 mov [window.left], eax movzx eax, word[screen.height] sub eax, [window.height] sub eax, 100 mov [window.top], eax mov eax, [window.width] sub eax, 80 mov [edit1.width], eax mov eax, [od.openfile_path] mov [edit1.text], eax call on_redraw ; ----------------------- ; .loop: ; wait.event mov eax, 10 int 64 cmp eax, REDRAW_EVENT jne .check_key call on_redraw jmp .loop ; ----------------------- ; .check_key: cmp eax, KEY_EVENT jne .check_button mov eax, 2 int 64 cmp ah, 13 jne .no_key_enter call on_button_run jmp .loop ; ----------------------- ; .no_key_enter: cmp ah, 185 jne .no_key_insert call on_button_browse jmp .loop .no_key_insert: push edit1 call [edit_box_key] jmp .loop ; ----------------------- ; .check_button: cmp eax, BUTTON_EVENT jne .check_mouse ; get.button.number mov eax, 17 int 64 cmp ah, 1 jne .check_button_run ; program.terminate or eax, -1 int 64 ; ----------------------- ; .check_button_run: cmp ah, BUTTON_RUN jne .check_button_browse call on_button_run jmp .loop ; ----------------------- ; .check_button_browse: cmp ah, BUTTON_BROWSE jne .loop call on_button_browse jmp .loop ; ----------------------- ; .check_mouse: cmp eax, MOUSE_EVENT jne .loop push edit1 call [edit_box_mouse] jmp .loop ; ======================================================================= ; on_button_run: push dword[edit1.text] call extractrunpathandparams ;file.run: mov eax, 70 mov ebx, file_info int 64 mov dl, byte[lastendpath] mov ecx, [ptrlastendpath] mov [ecx], dl test eax, eax jnge .error mov [runresult], dword sz_Program_run_successfully jmp .exit .error: ; ----------------------- ; .5: cmp al, -5 jne .31 mov [runresult], dword sz_File_not_found jmp .exit ; ----------------------- ; .31: cmp al, -31 jne .32 mov [runresult], dword sz_File_is_not_executable jmp .exit ; ----------------------- ; .32: cmp al, -32 jne .10 mov [runresult], dword sz_Too_many_processes jmp .exit ; ----------------------- ; .10: cmp al, -10 jne .30 mov [runresult], dword sz_Access_denied jmp .exit ; ----------------------- ; .30: cmp al, -30 jne .unknown mov [runresult], dword sz_Out_of_memory jmp .exit ; ----------------------- ; .unknown: mov [runresult], dword sz_Unknown_error ; ----------------------- ; .exit: call on_redraw ret ; ======================================================================= ; on_button_browse: push od call [opendialog_start] mov eax, [od.status] test eax, eax je .exit ;======== if space exist in filepath, then quote filepath mov eax, [od.openfile_path] ; ----------------------- ; .check_space: cmp [eax], byte 0 je .no_space cmp [eax], byte 32 ;space je .space inc eax jmp .check_space .space: ; ----------------------- ; .find_end_zero: inc eax cmp [eax], byte 0 jne .find_end_zero mov [eax + 2], byte 0 mov [eax + 1], byte 34 ; quote ; ----------------------- ; .shift_path: dec eax mov dl, byte [eax ] mov [eax + 1], dl cmp eax, [od.openfile_path] jne .shift_path mov [eax ], byte 34 ; quote .no_space: ;================================= push dword[od.openfile_path] push edit1 call [edit_box_set_text] ; ----------------------- ; .exit: ret ; ======================================================================= ; on_redraw: ; redraw.start mov eax, 12 mov ebx, 1 int 64 ; get.standart.colors mov eax, 48 mov ebx, 3 mov ecx, sc mov edx, 40 int 64 mov eax, [sc.work_graph] mov [edit1.shift_color], eax mov eax, [sc.work_graph] mov [edit1.focus_border_color], eax mov eax, [sc.frames] mov [edit1.blur_border_color], eax mov eax, [sc.work_text] bts eax, 28 mov [edit1.text_color], eax ; draw.window xor eax, eax mov ebx, [window.left] shl ebx, 16 add ebx, [window.width] mov ecx, [window.top] shl ecx, 16 add ecx, [window.height] mov edx, [sc.work] or edx, 34000000h mov edi, title int 64 push 5 push 5 push sz_Type_name_of_program push dword [sc.work_text] call draw.text ; ====================| browse button |==================== push 20 mov eax, [window.width] sub eax, 70 push eax push 26 push 52 push 21 call draw.button mov eax, [window.width] sub eax, 56 push eax push 29 push sz_browse push dword [sc.work_button_text] call draw.text ; ====================| run button |==================== push 10 push 5 push 52 mov eax, [window.width] sub eax, 22 push eax push 21 call draw.button mov eax, [window.width] shr eax, 1 sub eax, 40 push eax push 55 push sz_run push dword [sc.work_button_text] call draw.text ; ===================================================== push 5 push 80 push dword[runresult] push dword [sc.work_text] call draw.text push edit1 call [edit_box_draw] ; redraw.finish mov eax, 12 mov ebx, 2 int 64 ret ; ======================================================================= ; extractrunpathandparams: xor ecx, ecx mov eax, [esp + 4] mov [runpath], eax movzx eax, byte [eax] cmp eax, 34 jne .start_without_quote inc ecx ; ----------------------- ; .loop1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 34 jne .not_quote mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 34 inc ecx ; ----------------------- ; .skip_space1: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped1 inc ecx jmp .skip_space1 ; ----------------------- ; .skipped1: mov eax, [runpath] add eax, ecx mov [runparams], eax inc dword [runpath] jmp .exit ; ----------------------- ; .not_quote: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero1 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero1: inc ecx jmp .loop1 ; ----------------------- ; .start_without_quote: ; ----------------------- ; .loop2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp eax, 32 jne .not_space mov eax, [runpath] mov [eax + ecx], byte 0 mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 32 inc ecx ; ----------------------- ; .skip_space2: mov eax, [runpath] movzx eax, byte [eax + ecx] cmp al, 32 jne .skipped2 inc ecx jmp .skip_space2 ; ----------------------- ; .skipped2: mov eax, [runpath] add eax, ecx mov [runparams], eax jmp .exit ; ----------------------- ; .not_space: mov eax, [runpath] movzx eax, byte [eax + ecx] test eax, eax jne .not_zero2 mov eax, [runpath] add eax, ecx mov [runparams], eax mov eax, [runpath] add eax, ecx mov [ptrlastendpath], eax mov [lastendpath], byte 0 jmp .exit ; ----------------------- ; .not_zero2: inc ecx jmp .loop2 ; ----------------------- ; .exit: ret 4 ; ======================================================================= ; draw.button: mov eax, 8 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 8] mov ecx, [esp + 12] shl ecx, 16 add ecx, [esp + 4] mov edx, [esp + 20] mov esi, [sc.work_button] int 64 ret 20 ; ======================================================================= ; draw.text: mov eax, 4 mov ebx, [esp + 16] shl ebx, 16 add ebx, [esp + 12] mov ecx, [esp + 4] or ecx, 90000000h mov edx, [esp + 8] int 64 ret 16 ; ======================================================================= ; load.library: mov eax, 68 mov ebx, 19 mov ecx, [esp + 4] int 64 ret 4 ; ======================================================================= ; getprocaddress: mov edx, [esp + 8] ; hlib xor eax, eax test edx, edx ; If hlib = 0 then goto .end jz .end ; ----------------------- ; .next: cmp [edx], dword 0 ; If end of export table then goto .end jz .end xor eax, eax mov esi, [edx] mov edi, [esp + 4] ; name ; ----------------------- ; .next_: lodsb scasb jne .fail or al, al jnz .next_ jmp .ok ; ----------------------- ; .fail: add edx, 8 jmp .next ; ----------------------- ; .ok: ; return address mov eax, [edx + 4] ; ----------------------- ; .end: ret 8 data_: sz_box_lib db "/sys/lib/box_lib.obj",0 sz_edit_box db "edit_box",0 sz_edit_box_key db "edit_box_key",0 sz_edit_box_mouse db "edit_box_mouse",0 sz_edit_box_set_text db "edit_box_set_text",0 sz_proc_lib db "/sys/lib/proc_lib.obj",0 sz_OpenDialog_init db "OpenDialog_init",0 sz_OpenDialog_start db "OpenDialog_start",0 sz_FFFFFFFF_open_dialog db "FFFFFFFF_open_dialog",0 sz_SYS db "/sys",0 sz_opendial_path db "/sys/File managers/opendial",0 if lang eq it sz_Program_run_successfully db "Programma eseguito correttamente",0 sz_File_not_found db "File non trovato",0 sz_File_is_not_executable db "File non eseguibile",0 sz_Too_many_processes db "Troppi processi",0 sz_Access_denied db "Accesso negato",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Errore sconosciuto",0 sz_Type_name_of_program db "Digita il nome del programma per eseguirlo",0 sz_run db " Esegui",0 sz_browse db "Browse",0 title db "Esegui",0 else if lang eq ru sz_Program_run_successfully db "Программа запущена успешно",0 sz_File_not_found db "Файл не найден",0 sz_File_is_not_executable db "Файл не является исполняемым",0 sz_Too_many_processes db "Слишком много процессов",0 sz_Access_denied db "Доступ запрещен",0 sz_Out_of_memory db "Недостаточно памяти",0 sz_Unknown_error db "Неизвестная ошибка",0 sz_Type_name_of_program db "Введите название программы",0 sz_run db "Запустить",0 sz_browse db "...",0 title db "Запуск программы",0 else sz_Program_run_successfully db "Program run successfully",0 sz_File_not_found db "File not found",0 sz_File_is_not_executable db "File is not executable",0 sz_Too_many_processes db "Too many processes",0 sz_Access_denied db "Access denied",0 sz_Out_of_memory db "Out of memory",0 sz_Unknown_error db "Unknown error",0 sz_Type_name_of_program db "Type name of program to run",0 sz_run db " Run",0 sz_browse db "...",0 title db "Run",0 end if align 4 od: .mode dd 0 .procinfo dd 0 .com_area_name dd sz_FFFFFFFF_open_dialog .com_area dd 0 .opendir_path dd 0 .dir_default_path dd sz_SYS .start_path dd sz_opendial_path .draw_window dd on_redraw .status dd 0 .openfile_path dd 0 .filename_area dd 0 .filter_area dd filefilter .x_size dw 414 .x_start dw 0 .y_size dw 414 .y_start dw 0 runresult dd sz_empty edit1 edit_box 0, 5, 26, -1, 0, 0, 0, 0, 4096, 0, 0, 4002h box_lib dd ? proc_lib dd ? filefilter dd ? ptrlastendpath dd ? edit_box_draw dd ? edit_box_key dd ? edit_box_mouse dd ? edit_box_set_text dd ? opendialog_init dd ? opendialog_start dd ? sc: .frames dd ? .grab dd ? .grab_button dd ? .grab_button_text dd ? .grab_text dd ? .work dd ? .work_button dd ? .work_button_text dd ? .work_text dd ? .work_graph dd ? window: .left dd ? .top dd ? .width dd ? .height dd ? screen: .height dw ? .width dw ? file_info: dd ? dd ? runparams: dd ? dd ? dd ? db ? runpath: dd ? lastendpath db ? sz_empty db ? align 4 end_: \ No newline at end of file