Subversion Repositories Kolibri OS

Rev

Rev 7438 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;CNC CONTROL
  2. ;Igor Afanasyev (aka IgorA) and Sergey Efremenkov (aka theonlymirage), 2018
  3.  
  4. ;02.10.18 - Only prototype UI
  5.  
  6. format binary as ""
  7. use32
  8.         org 0
  9.         db 'MENUET01'
  10.         dd 1,start,i_end,mem,stacktop,0,sys_path
  11.  
  12. include '../../macros.inc'
  13. include '../../proc32.inc'
  14. include '../../KOSfuncs.inc'
  15. include '../../load_img.inc'
  16. include '../../develop/libraries/libs-dev/libimg/libimg.inc'
  17. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  18. include 'lang.inc'
  19. include 'cnc_control.inc'
  20. include '../../develop/info3ds/info_fun_float.inc'
  21.  
  22. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  23. caption db 'CNC Control 02.10.18',0 ;¯®¤¯¨áì ®ª­ 
  24.  
  25. run_file_70 FileInfoBlock
  26.  
  27. offs_last_timer dd 0 ;¯®á«¥¤­¨© ᤢ¨£ ¯®ª § ­ë© ¢ ä㭪樨 â ©¬¥à 
  28.  
  29. IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
  30. image_data_toolbar dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
  31. icon_tl_sys dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï á¨á⥬­ëå ¨ª®­®ª
  32. icon_toolbar dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ¨ª®­®ª ®¡ê¥ªâ®¢
  33.  
  34. align 4
  35. start:
  36.         load_libraries l_libs_start,l_libs_end
  37.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ¡¨¡«¨®â¥ª 
  38.         mov     ebp,lib_0
  39.         cmp     dword [ebp+ll_struc_size-4],0
  40.         jz      @f
  41.                 mcall SF_TERMINATE_PROCESS
  42.         @@:
  43.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  44.         mcall SF_SET_EVENTS_MASK,0xC0000027
  45.         stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª  ¤¨ «®£ 
  46.  
  47.         stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à 
  48.  
  49.         ;èà¨äâ ¤¥« ¥¬ ¤® ᮧ¤ ­¨ï ¯ ­¥«¨ (¤«ï íª®­®¬¨¨ 㪠§ â¥«ï image_data_toolbar)
  50.         include_image_file '..\..\fs\kfar\trunk\font6x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
  51.         stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;ᮧ¤ ¥¬ ¡ãä¥à
  52.         stdcall mem.Free,[image_data_toolbar] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
  53.         stdcall [buf2d_conv_24_to_8], buf_1,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8 ¡¨â
  54.         stdcall [buf2d_convert_text_matrix], buf_1
  55.         mov eax,[buf_1.h]
  56.         shr eax,8
  57.         mov [font_h],eax
  58.  
  59.         include_image_file 'toolbar.png', image_data_toolbar
  60.  
  61.         ;*** ãáâ ­®¢ª  ¢à¥¬¥­¨ ¤«ï â ©¬¥à 
  62.         mcall SF_SYSTEM_GET,SSF_TIME_COUNT
  63.         mov [last_time],eax
  64.  
  65.         ;call but_new_file
  66.         option_boxes_set_sys_color sc,opt_grlist1
  67.  
  68.         ;mov    eax, 68               ;progress bar trash
  69.         ;mov    ebx, 19
  70.         ;mov    ecx, sz_pb_lib
  71.         ;int    64
  72.         ;mov    [pb_lib], eax
  73.  
  74.         ;push   dword[pb_lib]
  75.         ;push   sz_progressbar_draw
  76.         ;call   getprocaddress
  77.         ;mov    [progressbar_draw], eax
  78.  
  79.         ;push   dword[pb_lib]
  80.         ;push   sz_progressbar_progress
  81.         ;call   getprocaddress
  82.         ;mov    [progressbar_progress], eax
  83.         mov    [pb.left],           dword  50
  84.         mov    [pb.top],            dword  30
  85.         mov    [pb.width],          dword  350
  86.         mov    [pb.height],         dword  17
  87.         mov    [pb.max],            dword  100;599
  88.         mov    [pb.min],            dword  0 ;-397
  89.         mov    [pb.value],          dword  50;-397
  90.         mov    [pb.back_color],     dword 00C8D0D4h
  91.         mov    [pb.progress_color], dword 8072B7EBh
  92.         mov    [pb.frame_color],    dword 00406175h
  93.         ;mov    ecx, [pb.max]
  94.         ;sub    ecx, [pb.min]
  95.  
  96. align 4
  97. red_win:
  98.         call draw_window
  99.  
  100. align 4
  101. still:
  102.         mcall SF_SYSTEM_GET,SSF_TIME_COUNT
  103.         mov ebx,[last_time]
  104.         add ebx,10 ;§ ¤¥à¦ª 
  105.         cmp ebx,eax
  106.         jge @f
  107.                 mov ebx,eax
  108.         @@:
  109.         sub ebx,eax
  110.         mcall SF_WAIT_EVENT_TIMEOUT
  111.         cmp eax,0
  112.         jne @f
  113.                 call timer_funct
  114.                 jmp still
  115.         @@:
  116.  
  117.         cmp al,1
  118.         jz red_win
  119.         cmp al,2
  120.         jz key
  121.         cmp al,3
  122.         jz button
  123.         cmp al,6
  124.         jne @f
  125.                 mcall SF_THREAD_INFO,procinfo,-1
  126.                 cmp ax,word[procinfo.window_stack_position]
  127.                 jne @f ;®ª­® ­¥  ªâ¨¢­®
  128.                 call mouse
  129.         @@:
  130.         jmp still
  131.  
  132. align 4
  133. mouse:
  134.         stdcall [option_box_mouse], opt_grlist1
  135.         stdcall [edit_box_mouse], editFileName
  136.         stdcall [edit_box_mouse], editCommand
  137.  
  138.         push eax ebx ecx
  139.         mcall SF_MOUSE_GET,SSF_BUTTON_EXT
  140.         bt eax,8
  141.         jnc @f
  142.                 ;mouse l. but. press
  143.                 call mouse_left_d
  144.                 jmp .end_l
  145.         @@:
  146.         ;bt eax,0
  147.         ;jnc @f
  148.                 ;mouse l. but. move
  149.                 ;call mouse_left_m
  150.                 ;jmp .end_l
  151.         ;@@:
  152.         bt eax,16
  153.         jnc .end_l
  154.                 ;mouse l. but. up
  155.                 call mouse_left_u
  156.                 ;jmp .end_l
  157.         .end_l:
  158.         ;bt eax,9
  159.         ;jnc @f
  160.                 ;mouse r. but. press
  161.                 ;jmp .end_r
  162.         ;@@:
  163.         ;bt eax,1
  164.         ;jnc @f
  165.                 ;mouse r. but. move
  166.                 ;call mouse_right_m
  167.                 ;jmp .end_r
  168.         ;@@:
  169.         ;.end_r:
  170.  
  171.         call buf_get_mouse_coord
  172.         cmp eax,-1
  173.         je .end0
  174.                 shl eax,1
  175.                 sub eax,[buf_0.w]
  176.                 sar eax,1
  177.                 mov [mouse_prop_x],eax
  178.                 mov ecx,ObjData
  179.                 shl ebx,1
  180.                 sub ebx,[buf_0.h]
  181.                 sar ebx,1
  182.                 mov [mouse_prop_y],ebx
  183.  
  184.                 mcall SF_MOUSE_GET,SSF_SCROLL_DATA
  185.                 test ax,ax
  186.                 jz .end0
  187.                 finit
  188.                 fld qword[zoom_plus]
  189.                 fld1
  190.                 fsubp
  191.                 fld st0 ;for Y coord
  192.  
  193.                 ;for X coord
  194.                 fild dword[mouse_prop_x]
  195.                 fmulp st1,st0
  196.  
  197.                 mov ebx,eax
  198.                 test ax,0x8000
  199.                 jnz .decr
  200.                         ;㢥«¨ç¥­¨¥ ¬ áèâ ¡ 
  201.                         fchs
  202.                         fild dword[ecx+Figure.MCentrX] ;add old value
  203.                         fmul qword[zoom_plus]
  204.                         faddp
  205.  
  206.                         fld qword[ecx+Figure.MScale]
  207.                         fmul qword[zoom_plus]
  208.                         ;if (Figure.MScale>16.0)
  209.                         ;...
  210.                         jmp @f
  211.                 .decr:
  212.                         ;㬥­ì襭¨¥ ¬ áèâ ¡ 
  213.                         fild dword[ecx+Figure.MCentrX] ;add old value
  214.                         fdiv qword[zoom_plus]
  215.                         faddp
  216.  
  217.                         fld qword[ecx+Figure.MScale]
  218.                         fdiv qword[zoom_plus]
  219.                         fld1
  220.                         fcomp
  221.                         fstsw ax
  222.                         sahf
  223.                         jbe @f
  224.                                 ;if (Figure.MScale<1.0)
  225.                                 ffree st0
  226.                                 fincstp
  227.                                 ffree st0
  228.                                 fincstp
  229.                                 fldz ;default Figure.MCentrX
  230.                                 fld1 ;default Figure.MScale
  231.                                 mov dword[ecx+Figure.MCentrY],0
  232.                 @@:
  233.                 fstp qword[ecx+Figure.MScale]
  234.                 fistp dword[ecx+Figure.MCentrX]
  235.  
  236.                 ;for Y coord
  237.                 fild dword[mouse_prop_y]
  238.                 fmulp st1,st0
  239.                 test bx,0x8000
  240.                 jnz .decr_y
  241.                         ;㢥«¨ç¥­¨¥ ¬ áèâ ¡ 
  242.                         fild dword[ecx+Figure.MCentrY] ;add old value
  243.                         fmul qword[zoom_plus]
  244.                         faddp
  245.                         jmp @f
  246.                 .decr_y:
  247.                         ;㬥­ì襭¨¥ ¬ áèâ ¡ 
  248.                         fchs
  249.                         fild dword[ecx+Figure.MCentrY] ;add old value
  250.                         fdiv qword[zoom_plus]
  251.                         faddp
  252.                 @@:
  253.                 fistp dword[ecx+Figure.MCentrY]
  254.  
  255.                 mov dword[offs_last_timer],0
  256.         .end0:
  257.  
  258.         pop ecx ebx eax
  259.         ret
  260.  
  261. ;output:
  262. ; eax - buffer coord X (¥á«¨ ªãàá®à §  ¡ãä¥à®¬ -1)
  263. ; ebx - buffer coord Y (¥á«¨ ªãàá®à §  ¡ãä¥à®¬ -1)
  264. align 4
  265. proc buf_get_mouse_coord
  266.         mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
  267.         cmp ax,word[buf_0.t]
  268.         jl .no_buf ;­¥ ¯®¯ «¨ ¢ ®ª­® ¡ãä¥à  ¯® ®á¨ y
  269.         mov ebx,eax
  270.         shr ebx,16
  271.         cmp bx,word[buf_0.l]
  272.         jl .no_buf ;­¥ ¯®¯ «¨ ¢ ®ª­® ¡ãä¥à  ¯® ®á¨ x
  273.  
  274.         and eax,0xffff ;®áâ ¢«ï¥¬ ª®®à¤¨­ âã y
  275.         sub ax,word[buf_0.t]
  276.         cmp eax,[buf_0.h]
  277.         jg .no_buf
  278.         sub bx,word[buf_0.l]
  279.         cmp ebx,[buf_0.w]
  280.         jg .no_buf
  281.         xchg eax,ebx
  282.         jmp .end_f
  283.         .no_buf:
  284.                 xor eax,eax
  285.                 not eax
  286.                 xor ebx,ebx
  287.                 not ebx
  288.         .end_f:
  289.         ret
  290. endp
  291.  
  292. align 4
  293. proc timer_funct
  294.         pushad
  295.         mcall SF_SYSTEM_GET,SSF_TIME_COUNT
  296.         mov [last_time],eax
  297.  
  298.         cmp dword[offs_last_timer],ObjData
  299.         je @f
  300.                 mov dword[offs_last_timer],ObjData
  301.                 stdcall draw_obj2d,ObjData
  302.                 stdcall [buf2d_draw], buf_0
  303.         @@:
  304.         popad
  305.         ret
  306. endp
  307.  
  308. align 4
  309. draw_window:
  310. pushad
  311.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  312.  
  313.         ; *** à¨á®¢ ­¨¥ £« ¢­®£® ®ª­  (¢ë¯®«­ï¥âáï 1 à § ¯à¨ § ¯ã᪥) ***
  314.         mov edx,[sc.work]
  315.         or  edx,0x33000000
  316.         mov edi,caption
  317.         mcall SF_CREATE_WINDOW,(20 shl 16)+775,(20 shl 16)+445
  318.  
  319.         ;;mcall SF_THREAD_INFO,procinfo,-1
  320.         ;;mov eax,dword[procinfo.box.height]
  321.         ;;cmp eax,120
  322.         ;;jge @f
  323.                 ;;mov eax,120 ;min size
  324.         ;;@@:
  325.         ;;sub eax,65
  326.         ;;mov ebx,dword[procinfo.box.width]
  327.         ;;cmp ebx,270
  328.         ;;jge @f
  329.                 ;;mov ebx,270
  330.         ;;@@:
  331.         ;;sub ebx,215
  332.         ;;cmp eax,dword[buf_0.h] ;ᬮâਬ à §¬¥à ¡ãä¥à 
  333.         ;;jne @f
  334.         ;;cmp ebx,dword[buf_0.w]
  335.         ;;jne @f
  336.                 ;;jmp .end0
  337.         ;;@@:
  338.                 ;;stdcall [buf2d_resize],buf_0,ebx,eax,1
  339.                 mov ecx,[ObjData.FigCount]
  340.                 or ecx,ecx
  341.                 jz .end0
  342.                 mov eax,[ObjData.FigData]
  343.                 xor edx,edx
  344.                 .cycle0:
  345.                         stdcall FigCalculateSizes,[eax+4*edx],0
  346.                         inc edx
  347.                         loop .cycle0
  348.                 stdcall ObjCalculateScale,ObjData
  349.                 mov dword[offs_last_timer],0
  350.                 call timer_funct
  351.         .end0:
  352.  
  353.         stdcall [edit_box_draw], editFileName
  354.         stdcall [edit_box_draw], editCommand
  355.  
  356.         stdcall [option_box_draw], opt_grlist1
  357.         push   pb
  358.         call   [progressbar_draw]
  359.  
  360.         ; *** ᮧ¤ ­¨¥ ª­®¯®ª ­  ¯ ­¥«ì ***
  361.         mcall SF_DEFINE_BUTTON,(731 shl 16)+20,(75 shl 16)+20,3, [sc.work_button]
  362.         mcall , (15 shl 16)+20,(27 shl 16)+20,4 ;restore
  363.         mcall ,(538 shl 16)+20,,5 ;connect
  364.         mcall ,(563 shl 16)+20,,6 ;close connect
  365.         mcall ,(437 shl 16)+86,(378 shl 16)+20,7 ;cancel
  366.         mcall ,(616 shl 16)+136,(378 shl 16)+20,8 ;run
  367.  
  368.         ; ***
  369.         mov ecx,[sc.work_text]
  370.         or ecx,0x81000000
  371.         mcall SF_DRAW_TEXT,(15 shl 16)+5,,txt_preview
  372.         mcall ,(424 shl 16)+5,,txt_port
  373.         mov ecx,[sc.work_button_text]
  374.         or ecx,0x81000000
  375.         mcall ,(440 shl 16)+381,,txt_but_cancel
  376.         mcall ,(619 shl 16)+381,,txt_but_run
  377.  
  378.         ; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
  379.         mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(733 shl 16)+77 ;icon open
  380.  
  381.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  382.         mcall ,,,(17 shl 16)+29 ;restore scale
  383.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  384.         mcall ,,,(540 shl 16)+29 ;connect
  385.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  386.         mcall ,,,(565 shl 16)+29 ;close connect
  387.         ;;add ebx,IMAGE_TOOLBAR_ICON_SIZE
  388.         ;;mcall ,,,(439 shl 16)+380 ;cancel
  389.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  390.         mcall ,,,((638+97) shl 16)+380 ;run
  391.  
  392.         stdcall [buf2d_draw], buf_0
  393.  
  394.         mcall SF_REDRAW,SSF_END_DRAW
  395. popad
  396.         ret
  397.  
  398. align 4
  399. key:
  400.         mcall SF_GET_KEY
  401.  
  402.         stdcall [edit_box_key], editFileName
  403.         stdcall [edit_box_key], editCommand
  404.        
  405.         mov ecx,eax
  406.         mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS
  407.         bt eax,2 ;left Ctrl
  408.         jc .key_Ctrl
  409.         bt eax,3 ;right Ctrl
  410.         jc .key_Ctrl
  411.         jmp .end0
  412.         .key_Ctrl:
  413.                 cmp ch,15 ;111 ;Ctrl+O
  414.                 jne @f
  415.                         call but_open_file
  416.                 @@:
  417.         .end0:
  418.         jmp still
  419.  
  420. align 4
  421. button:
  422.         mcall SF_GET_BUTTON
  423.         cmp ah,3
  424.         jne @f
  425.                 call but_open_file
  426.                 jmp still
  427.         @@:
  428.         cmp ah,4
  429.         jne @f
  430.                 call but_restore_zoom
  431.                 jmp still
  432.         @@:
  433.  
  434.         ;cmp ah,5
  435.         ;jne @f
  436.                 ;call but_...
  437.                 ;jmp still
  438.         ;@@:
  439.         cmp ah,1
  440.         jne still
  441. .exit:
  442.         stdcall [buf2d_delete],buf_0
  443.         stdcall mem.Free,[image_data_toolbar]
  444.         stdcall mem.Free,[open_file_data]
  445.         mcall SF_TERMINATE_PROCESS
  446.  
  447.  
  448.  
  449. align 4
  450. open_file_data dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ä ©«®¢
  451. open_file_size dd 0 ;à §¬¥à ®âªàë⮣® ä ©« 
  452.  
  453. align 4
  454. but_open_file:
  455.         pushad
  456.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  457.         mov [OpenDialog_data.type],0
  458.         stdcall [OpenDialog_Start],OpenDialog_data
  459.         cmp [OpenDialog_data.status],2
  460.         je .end_open_file
  461.         ;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
  462.  
  463.         push eax ebx ecx edx ;copy file name path
  464.         mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
  465.         mov ebx, fileNameBuffer ;.data
  466.         mov ecx, 0
  467.       @@:
  468.         mov dl, byte[eax]
  469.         cmp dl, 0 ;byte[eax], 0
  470.         je @f
  471.         mov byte[ebx], dl
  472.         inc eax
  473.         inc ebx
  474.         inc ecx
  475.         jmp @b
  476.       @@:
  477.         mov byte[ebx], 0
  478.         mov dword[fileNameBuffer.size], ecx
  479.         mov dword[editFileName.size], ecx
  480.         mov dword[editFileName.pos], ecx
  481.         pop edx ecx ebx eax
  482.  
  483.         mov [run_file_70.Function], SSF_GET_INFO
  484.         mov [run_file_70.Position], 0
  485.         mov [run_file_70.Flags], 0
  486.         mov dword[run_file_70.Count], 0
  487.         mov dword[run_file_70.Buffer], open_b
  488.         mov byte[run_file_70+20], 0
  489.         mov dword[run_file_70.FileName], openfile_path
  490.         mcall SF_FILE,run_file_70
  491.  
  492.         mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©«  ¢ ¡ ©â å
  493.         inc ecx ;for text files
  494.         stdcall mem.ReAlloc,[open_file_data],ecx
  495.         mov [open_file_data],eax
  496.         dec ecx ;for text files
  497.         mov byte[eax+ecx],0 ;for text files
  498.  
  499.         mov [run_file_70.Function], SSF_READ_FILE
  500.         mov [run_file_70.Position], 0
  501.         mov [run_file_70.Flags], 0
  502.         mov dword[run_file_70.Count], ecx
  503.         m2m dword[run_file_70.Buffer], dword[open_file_data]
  504.         mov byte[run_file_70+20], 0
  505.         mov dword[run_file_70.FileName], openfile_path
  506.         mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  507.         test eax,eax
  508.         jnz .end_open_file
  509.         cmp ebx,0xffffffff
  510.         je .end_open_file
  511.  
  512.                 mov [open_file_size],ebx
  513.                 mcall SF_SET_CAPTION,1,openfile_path
  514.  
  515.                 ;---
  516.                 stdcall FileInit,[open_file_data],[open_file_size]
  517.                 stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
  518.                 stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
  519.         .end_open_file:
  520.         popad
  521.         ret
  522.  
  523. ;output:
  524. ; ecx - memory size for save file
  525. align 4
  526. proc get_file_save_size uses eax ebx edx esi
  527.         mov ecx,100 ;title
  528.         mov ebx,ObjData
  529.         add ecx,50 ;object
  530.         mov edx,[ebx+Object.FigCount]
  531.         or edx,edx
  532.         jz .cycle1end
  533.         mov esi,[ebx+Object.FigData]
  534. align 4
  535.         .cycle1: ; 横« ¯® 䨣ãà ¬
  536.                 add ecx,80 ;figure
  537.                 mov eax,[esi]
  538.                 or eax,eax
  539.                 jz @f
  540.                         mov eax,[eax+Figure.PoiCount]
  541.                         imul eax,70
  542.                         add ecx,eax ;points
  543.                 @@:
  544.                 add esi,4
  545.                 dec edx
  546.                 jnz .cycle1
  547.         .cycle1end:
  548.         ret
  549. endp
  550.  
  551. align 4
  552. proc but_restore_zoom
  553.         finit
  554.         fld1
  555.         fstp qword[ObjData.MScale]
  556.         mov dword[ObjData.MCentrX],0
  557.         mov dword[ObjData.MCentrY],0
  558.         mov dword[offs_last_timer],0
  559.         ret
  560. endp
  561.  
  562.  
  563.  
  564. ;input:
  565. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  566. ;output:
  567. ; eax - ç¨á«®
  568. align 4
  569. proc conv_str_to_int uses ebx ecx esi, buf:dword
  570.         xor eax,eax
  571.         xor ebx,ebx
  572.         mov esi,[buf]
  573.  
  574.         ;­  á«ãç © ¥á«¨ ¯¥à¥¤ ç¨á«®¬ ­ å®¤ïâáï ¯à®¡¥«ë
  575.         @@:
  576.         cmp byte[esi],' '
  577.         jne @f
  578.                 inc esi
  579.                 jmp @b
  580.         @@:
  581.  
  582.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  583.         xor ecx,ecx
  584.         inc ecx
  585.         cmp byte[esi],'-'
  586.         jne @f
  587.                 dec ecx
  588.                 inc esi
  589.         @@:
  590.  
  591.         cmp word[esi],'0x'
  592.         je .load_digit_16
  593.  
  594.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  595.                 mov bl,byte[esi]
  596.                 cmp bl,'0'
  597.                 jl @f
  598.                 cmp bl,'9'
  599.                 jg @f
  600.                         sub bl,'0'
  601.                         imul eax,10
  602.                         add eax,ebx
  603.                         inc esi
  604.                         jmp .load_digit_10
  605.         jmp @f
  606.  
  607.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  608.                 add esi,2
  609.         .cycle_16:
  610.                 mov bl,byte[esi]
  611.                 cmp bl,'0'
  612.                 jl @f
  613.                 cmp bl,'f'
  614.                 jg @f
  615.                 cmp bl,'9'
  616.                 jle .us1
  617.                         cmp bl,'A'
  618.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  619.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  620.                 cmp bl,'F'
  621.                 jle .us2
  622.                         cmp bl,'a'
  623.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  624.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  625.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  626.                         sub bl,'0'
  627.                         cmp bl,9
  628.                         jle .cor1
  629.                                 sub bl,7 ;convert 'A' to '10'
  630.                         .cor1:
  631.                         shl eax,4
  632.                         add eax,ebx
  633.                         inc esi
  634.                         jmp .cycle_16
  635.         @@:
  636.         cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  637.         jne @f
  638.                 sub ecx,eax
  639.                 mov eax,ecx
  640.         @@:
  641.         ret
  642. endp
  643.  
  644.  
  645. ;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
  646. align 4
  647. OpenDialog_data:
  648. .type                   dd 0 ;0 - ®âªàëâì, 1 - á®åà ­¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î
  649. .procinfo               dd procinfo     ;+4
  650. .com_area_name          dd communication_area_name      ;+8
  651. .com_area               dd 0    ;+12
  652. .opendir_path           dd plugin_path  ;+16
  653. .dir_default_path       dd default_dir ;+20
  654. .start_path             dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢
  655. .draw_window            dd draw_window  ;+28
  656. .status                 dd 0    ;+32
  657. .openfile_path          dd openfile_path        ;+36 ¯ãâì ª ®âªà뢠¥¬®¬ã ä ©«ã
  658. .filename_area          dd filename_area        ;+40
  659. .filter_area            dd Filter
  660. .x:
  661. .x_size                 dw 420 ;+48 ; Window X size
  662. .x_start                dw 10 ;+50 ; Window X position
  663. .y:
  664. .y_size                 dw 320 ;+52 ; Window y size
  665. .y_start                dw 10 ;+54 ; Window Y position
  666.  
  667. default_dir db '/rd/1',0
  668.  
  669. communication_area_name:
  670.         db 'FFFFFFFF_open_dialog',0
  671. open_dialog_name:
  672.         db 'opendial',0
  673. communication_area_default_path:
  674.         db '/rd/1/File managers/',0
  675.  
  676. Filter:
  677. dd Filter.end - Filter ;.1
  678. .1:
  679. db 'NC',0
  680. db 'PNG',0
  681. .end:
  682. db 0
  683.  
  684.  
  685.  
  686. head_f_i:
  687. head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
  688.  
  689. system_dir_0 db '/sys/lib/'
  690. lib_name_0 db 'proc_lib.obj',0
  691. err_message_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  692. err_message_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  693.  
  694. system_dir_1 db '/sys/lib/'
  695. lib_name_1 db 'libimg.obj',0
  696. err_message_found_lib_1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'libimg.obj',39,0
  697. err_message_import_1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0
  698.  
  699. system_dir_2 db '/sys/lib/'
  700. lib_name_2 db 'buf2d.obj',0
  701. err_msg_found_lib_2 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'buf2d.obj',39,0
  702. err_msg_import_2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0
  703.  
  704. system_dir_3 db '/sys/lib/'
  705. lib_name_3 db 'box_lib.obj',0
  706. err_msg_found_lib_3 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'box_lib.obj',39,0
  707. err_msg_import_3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'box_lib',39,0
  708.  
  709. l_libs_start:
  710.         lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
  711.                 err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
  712.         lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
  713.                 err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
  714.         lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
  715.                 err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i
  716.         lib_3 l_libs lib_name_3, sys_path, file_name,  system_dir_3,\
  717.                 err_msg_found_lib_3, head_f_l, import_box_lib,err_msg_import_3,head_f_i
  718. l_libs_end:
  719.  
  720. align 4
  721. import_libimg:
  722.         dd alib_init1
  723.         img_is_img  dd aimg_is_img
  724.         img_info    dd aimg_info
  725.         img_from_file dd aimg_from_file
  726.         img_to_file dd aimg_to_file
  727.         img_from_rgb dd aimg_from_rgb
  728.         img_to_rgb  dd aimg_to_rgb
  729.         img_to_rgb2 dd aimg_to_rgb2
  730.         img_decode  dd aimg_decode
  731.         img_encode  dd aimg_encode
  732.         img_create  dd aimg_create
  733.         img_destroy dd aimg_destroy
  734.         img_destroy_layer dd aimg_destroy_layer
  735.         img_count   dd aimg_count
  736.         img_lock_bits dd aimg_lock_bits
  737.         img_unlock_bits dd aimg_unlock_bits
  738.         img_flip    dd aimg_flip
  739.         img_flip_layer dd aimg_flip_layer
  740.         img_rotate  dd aimg_rotate
  741.         img_rotate_layer dd aimg_rotate_layer
  742.         img_draw    dd aimg_draw
  743.  
  744.         dd 0,0
  745.         alib_init1   db 'lib_init',0
  746.         aimg_is_img  db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
  747.         aimg_info    db 'img_info',0
  748.         aimg_from_file db 'img_from_file',0
  749.         aimg_to_file db 'img_to_file',0
  750.         aimg_from_rgb db 'img_from_rgb',0
  751.         aimg_to_rgb  db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
  752.         aimg_to_rgb2 db 'img_to_rgb2',0
  753.         aimg_decode  db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
  754.         aimg_encode  db 'img_encode',0
  755.         aimg_create  db 'img_create',0
  756.         aimg_destroy db 'img_destroy',0
  757.         aimg_destroy_layer db 'img_destroy_layer',0
  758.         aimg_count   db 'img_count',0
  759.         aimg_lock_bits db 'img_lock_bits',0
  760.         aimg_unlock_bits db 'img_unlock_bits',0
  761.         aimg_flip    db 'img_flip',0
  762.         aimg_flip_layer db 'img_flip_layer',0
  763.         aimg_rotate  db 'img_rotate',0
  764.         aimg_rotate_layer db 'img_rotate_layer',0
  765.         aimg_draw    db 'img_draw',0
  766.  
  767. align 4
  768. proclib_import: ;®¯¨á ­¨¥ íªá¯®àâ¨à㥬ëå ä㭪権
  769.         OpenDialog_Init dd aOpenDialog_Init
  770.         OpenDialog_Start dd aOpenDialog_Start
  771. dd 0,0
  772.         aOpenDialog_Init db 'OpenDialog_init',0
  773.         aOpenDialog_Start db 'OpenDialog_start',0
  774.  
  775. align 4
  776. import_buf2d:
  777.         init dd sz_init
  778.         buf2d_create dd sz_buf2d_create
  779.         buf2d_create_f_img dd sz_buf2d_create_f_img
  780.         buf2d_clear dd sz_buf2d_clear
  781.         buf2d_draw dd sz_buf2d_draw
  782.         buf2d_delete dd sz_buf2d_delete
  783.         buf2d_resize dd sz_buf2d_resize
  784.         buf2d_line dd sz_buf2d_line
  785.         buf2d_line_sm dd sz_buf2d_line_sm
  786.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  787.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  788.         buf2d_circle dd sz_buf2d_circle
  789.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  790.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  791.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  792.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  793.         buf2d_bit_blt dd sz_buf2d_bit_blt
  794.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  795.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  796.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  797.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  798.         buf2d_draw_text dd sz_buf2d_draw_text
  799.         buf2d_crop_color dd sz_buf2d_crop_color
  800.         buf2d_flip_h dd sz_buf2d_flip_h
  801.         buf2d_flip_v dd sz_buf2d_flip_v
  802.         buf2d_offset_h dd sz_buf2d_offset_h
  803.         buf2d_flood_fill dd sz_buf2d_flood_fill
  804.         buf2d_set_pixel dd sz_buf2d_set_pixel
  805.         dd 0,0
  806.         sz_init db 'lib_init',0
  807.         sz_buf2d_create db 'buf2d_create',0
  808.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  809.         sz_buf2d_clear db 'buf2d_clear',0
  810.         sz_buf2d_draw db 'buf2d_draw',0
  811.         sz_buf2d_delete db 'buf2d_delete',0
  812.         sz_buf2d_resize db 'buf2d_resize',0
  813.         sz_buf2d_line db 'buf2d_line',0
  814.         sz_buf2d_line_sm db 'buf2d_line_sm',0
  815.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  816.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  817.         sz_buf2d_circle db 'buf2d_circle',0
  818.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  819.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  820.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  821.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  822.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  823.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  824.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  825.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  826.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  827.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  828.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  829.         sz_buf2d_flip_h db 'buf2d_flip_h',0
  830.         sz_buf2d_flip_v db 'buf2d_flip_v',0
  831.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  832.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  833.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  834.  
  835. align 4
  836. import_box_lib:
  837.         dd sz_init1
  838.  
  839.         init_checkbox   dd sz_Init_checkbox
  840.         check_box_draw  dd sz_Check_box_draw
  841.         check_box_mouse dd sz_Check_box_mouse
  842.         ;version_ch     dd sz_Version_ch
  843.  
  844.         option_box_draw  dd sz_Option_box_draw
  845.         option_box_mouse dd sz_Option_box_mouse
  846.         ;version_op      dd sz_Version_op
  847.  
  848.         edit_box_draw      dd sz_edit_box_draw
  849.         edit_box_key       dd sz_edit_box_key
  850.         edit_box_mouse     dd sz_edit_box_mouse
  851.         edit_box_set_text  dd sz_edit_box_set_text
  852.         scrollbar_ver_draw dd sz_scrollbar_ver_draw
  853.         scrollbar_hor_draw dd sz_scrollbar_hor_draw
  854.  
  855.         progressbar_draw     dd sz_progressbar_draw
  856.         progressbar_progress dd sz_progressbar_progress
  857.  
  858.         dd 0,0
  859.         sz_init1 db 'lib_init',0
  860.  
  861.         sz_Init_checkbox   db 'init_checkbox2',0
  862.         sz_Check_box_draw  db 'check_box_draw2',0
  863.         sz_Check_box_mouse db 'check_box_mouse2',0
  864.         ;sz_Version_ch     db 'version_ch2',0
  865.  
  866.         sz_Option_box_draw      db 'option_box_draw',0
  867.         sz_Option_box_mouse     db 'option_box_mouse',0
  868.         ;sz_Version_op      db 'version_op',0
  869.  
  870.         sz_edit_box_draw      db 'edit_box',0
  871.         sz_edit_box_key       db 'edit_box_key',0
  872.         sz_edit_box_mouse     db 'edit_box_mouse',0
  873.         sz_edit_box_set_text  db 'edit_box_set_text',0
  874.         sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
  875.         sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
  876.  
  877.         sz_progressbar_draw     db 'progressbar_draw', 0
  878.         sz_progressbar_progress db 'progressbar_progress', 0
  879.  
  880. align 4
  881. mouse_dd dd 0
  882. last_time dd 0
  883.  
  884. align 16
  885. sc system_colors
  886.  
  887. align 16
  888. procinfo process_information
  889.  
  890. align 4
  891. buf_0: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  892. .l: dw 15 ;+4 left
  893. .t: dw 50 ;+6 top
  894. .w: dd 384 ;+8 w
  895. .h: dd 350 ;+12 h
  896. .color: dd 0xffffd0 ;+16 color
  897.         db 24 ;+20 bit in pixel
  898.  
  899. align 4
  900. buf_1:
  901.         dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  902.         dd 0 ;+4 left,top
  903. .w: dd 0
  904. .h: dd 0,0,24 ;+12 color,bit in pixel
  905.  
  906. font_h dd 0 ;¢ëá®â  èà¨äâ 
  907.  
  908. ;input:
  909. ; eax - ç¨á«®
  910. ; edi - ¡ãä¥à ¤«ï áâப¨
  911. ; len - ¤«¨­­  ¡ãä¥à 
  912. ;output:
  913. align 4
  914. proc convert_int_to_str uses eax ecx edx edi esi, len:dword
  915.         mov esi,[len]
  916.         add esi,edi
  917.         dec esi
  918.         call .str
  919.         ret
  920. endp
  921.  
  922. align 4
  923. .str:
  924.         mov ecx,10
  925.         cmp eax,ecx
  926.         jb @f
  927.                 xor edx,edx
  928.                 div ecx
  929.                 push edx
  930.                 ;dec edi  ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  931.                 call .str
  932.                 pop eax
  933.         @@:
  934.         cmp edi,esi
  935.         jge @f
  936.                 or al,0x30
  937.                 stosb
  938.                 mov byte[edi],0 ;¢ ª®­¥æ áâப¨ áâ ¢¨¬ 0, çâ®-¡ë ­¥ ¢ë« §¨« ¬ãá®à
  939.         @@:
  940.         ret
  941.  
  942. align 4
  943. proc mem_copy uses ecx esi edi, destination:dword, source:dword, len:dword
  944.         cld
  945.         mov esi, dword[source]
  946.         mov edi, dword[destination]
  947.         mov ecx, dword[len]
  948.         rep movsb
  949.         ret
  950. endp
  951.  
  952. edMaxSize = 511
  953. edMax = 0 ;max, size, pos
  954.  
  955. align 4
  956. editFileName  edit_box 270,450,78, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, fileNameBuffer.data, mouse_dd, 0, edMax, edMax
  957. editCommand   edit_box 150,450,121, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, commandBuffer.data, mouse_dd, 0, edMax, edMax
  958.  
  959. opt1 option_box opt_gr1, 433,64, 6,12,0xd0d0ff, 0xff, 0x80ff,txt_filename,txt_filename.end-txt_filename
  960. opt2 option_box opt_gr1, 433,107,6,12,0xd0d0ff, 0xff, 0x80ff,txt_command,txt_command.end-txt_command
  961. opt_gr1 dd opt1
  962. align 4
  963. opt_grlist1 dd opt1,opt2,0 ;end option group
  964.  
  965. ;progressbar_progress dd 0
  966. ;progressbar_draw     dd 0
  967. ;pb_lib               dd 0
  968. ;sz_pb_lib  db "/sys/lib/box_lib.obj",0
  969. pb:
  970. .value          dd 0
  971. .left           dd 0
  972. .top            dd 0
  973. .width          dd 0
  974. .height         dd 0
  975. .style          dd 0
  976. .min            dd 0
  977. .max            dd 0
  978. .back_color     dd 0
  979. .progress_color dd 0
  980. .frame_color    dd 0
  981.  
  982. test_path db '/rd/1/test.txt', 0
  983. ;getprocaddress:
  984. ;        mov  edx, [esp + 8] ; hlib
  985. ;        xor  eax, eax
  986. ;        test edx, edx       ; If hlib = 0 then goto .end
  987. ;        jz  .end
  988. ;.next:
  989. ;        cmp  [edx], dword 0 ; If end of export table then goto .end
  990. ;        jz  .end
  991.  
  992. ;        xor  eax, eax
  993. ;        mov  esi, [edx]
  994. ;        mov  edi, [esp + 4] ; name
  995. ;.next_:
  996. ;        lodsb
  997. ;        scasb
  998. ;        jne  .fail
  999. ;        or   al, al
  1000. ;        jnz  .next_
  1001. ;        jmp  .ok
  1002. ;.fail:
  1003. ;        add  edx, 8
  1004. ;        jmp  .next
  1005. ;.ok:                        ; return address
  1006. ;        mov  eax, [edx + 4]
  1007. ;.end:
  1008. ;        ret 8
  1009.  
  1010. fileNameBuffer:
  1011. .data: rb 512
  1012. .size: rd 1
  1013. fileNameBufferEnd:
  1014.  
  1015. commandBuffer:
  1016. .data: rb 512
  1017. .size: rd 1
  1018. commandBufferEnd:
  1019.  
  1020. align 16
  1021. i_end:
  1022.         rb 2048
  1023. thread_coords:
  1024.         rb 2048
  1025. thread_scale:
  1026.         rb 2048
  1027. thread_n_file:
  1028.         rb 2048
  1029. stacktop:
  1030.         sys_path rb 1024
  1031.         file_name:
  1032.                 rb 1024 ;4096
  1033.         library_path rb 1024
  1034.         plugin_path rb 4096
  1035.         openfile_path rb 4096
  1036.         filename_area rb 256
  1037. mem:
  1038.  
  1039.