Subversion Repositories Kolibri OS

Rev

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

  1. struct FileInfoBlock
  2.         Function dd ?
  3.         Position dd ?
  4.         Flags    dd ?
  5.         Count    dd ?
  6.         Buffer   dd ?
  7.                 db ?
  8.         FileName dd ?
  9. ends
  10.  
  11. struct TexColViv
  12.         Text  rb MAX_COLOR_WORD_LEN ; ñëîâî äëÿ ïîäñâåòêè
  13.         f1    dd 0 ; ñïðàâêà ïî ñëîâó
  14.         flags db ? ; f1+4 ôëàãè èñïîëüçóåìûå ïðè âûäåëåíèè
  15.         endc  db ? ; f1+5 ñèìâîë êîíöà âûäåëåíèÿ (èñïîëüçóåòñÿ ïðè flags&4)
  16.         escc  db ? ; f1+6 ýêðàíèðóþùèé ñèìâîë (èñïîëüçóåòñÿ ïðè flags&4)
  17.         color db ? ; f1+7 íîìåð öâåòà
  18. ends
  19.  
  20. count_colors_text dd 1
  21. ColWords dd 0
  22. color_cursor dd ?
  23. color_wnd_capt dd ?
  24. color_wnd_work dd ?
  25. color_wnd_bord dd ?
  26. color_select dd ?
  27. color_cur_text dd ?
  28. color_wnd_text dd ?
  29.  
  30. options_file dd 0
  31. options_file_end dd 0
  32. tex_colors dd 0
  33. tex_help_f1 dd 0
  34.  
  35. Col dd 0 ;óêàçàòåëü íà ñòðóêòóðû êëþ÷åâûõ ñëîâ TexColViv
  36.  
  37. keyUpr dd 0
  38. err_opn db 0 ;îøèáêà îòêðûòèÿ ôàéëà
  39. err_sav db 0 ;îøèáêà ñîõðàíåíèÿ ôàéëà
  40.  
  41. sc system_colors
  42.  
  43. run_file_70 FileInfoBlock
  44.  
  45. align 4
  46. InitColText:
  47.         pushad
  48.  
  49.         mov  ebx,dword[fn_col_option]
  50.         copy_path ebx,fn_syntax_dir,file_name_rez,0
  51.         copy_path file_name_rez,sys_path,file_name,0
  52.  
  53.   mov eax,70
  54.   mov [run_file_70.Function], 0
  55.   mov [run_file_70.Position], 0
  56.   mov [run_file_70.Flags], 0
  57.   mov ebx,[options_file_end]
  58.   sub ebx,[options_file]
  59.   mov [run_file_70.Count], ebx
  60.   m2m [run_file_70.Buffer], [options_file]
  61.   mov byte[run_file_70+20], 0
  62.   mov [run_file_70.FileName], file_name
  63.   mov ebx,run_file_70
  64.   int 0x40
  65.  
  66.  
  67.         ;init: count_colors_text, ColWords, ...
  68.         mov dword[count_colors_text],1
  69.         mov dword[ColWords],0
  70.         mov dword[tex_help_f1],0
  71.  
  72.         cmp eax,6
  73.         je @f
  74.         cmp eax,0
  75.         je @f
  76.                 cmp ax,10
  77.                 jl .zifra_0_9
  78.                         mov al,'?'
  79.                         sub ax,48
  80.                 .zifra_0_9:
  81.                 add ax,48
  82.                 jmp .no_colors
  83.         @@:
  84.  
  85.         mov esi,[options_file]
  86.         mov edi,count_colors_text
  87.         mov ecx,9*4
  88.         rep movsb
  89.  
  90.         mov eax,[options_file]
  91.         add eax,32
  92.         mov dword[tex_colors],eax
  93.  
  94.         mov eax,dword[count_colors_text] ;init: Col (offset to key words)
  95.         add eax,8
  96.         shl eax,2
  97.         add eax,[options_file]
  98.         mov dword[Col],eax
  99.  
  100.         ;init: tex_help_f1
  101.         mov ecx,dword[ColWords]
  102.         imul ecx,sizeof.TexColViv
  103.         add ecx,dword[Col]
  104.         mov dword[tex_help_f1],ecx
  105.  
  106.         ;ôîðìèðîâàíèå òåêñòà â îêíå òåêñòîâîãî ðåäàêòîðà
  107.         stdcall [ted_clear], tedit0,1
  108.  
  109.         stdcall print_capt,capt_header
  110.  
  111.         stdcall print_capt,col_1
  112.         stdcall print_color,[color_cursor]
  113.         stdcall print_capt,col_2
  114.         stdcall print_color,[color_wnd_capt]
  115.         stdcall print_capt,col_3
  116.         stdcall print_color,[color_wnd_work]
  117.         stdcall print_capt,col_4
  118.         stdcall print_color,[color_wnd_bord]
  119.         stdcall print_capt,col_5
  120.         stdcall print_color,[color_select]
  121.         stdcall print_capt,col_6
  122.         stdcall print_color,[color_cur_text]
  123.  
  124.         stdcall print_capt,col_7
  125.         mov ecx,[count_colors_text] ;êîëè÷åñòâî öâåòîâ òåêñòà
  126.         mov eax,[tex_colors]
  127.         @@:
  128.                 stdcall print_capt,capt_type_dd
  129.                 stdcall print_color,[eax]
  130.                 add eax,4
  131.         loop @b
  132.  
  133.         stdcall print_capt,capt_lbl_wo
  134.         mov ecx,dword[ColWords]
  135.         mov eax,[Col]
  136.         xor ebx,ebx
  137.         @@:
  138.                 inc ebx
  139.                 stdcall print_word,eax,ebx
  140.                 add eax,sizeof.TexColViv
  141.         loop @b
  142.  
  143.         stdcall print_capt,capt_lbl_f1
  144.         mov ecx,dword[ColWords]
  145.         mov eax,[Col]
  146.         xor ebx,ebx
  147.         @@:
  148.                 inc ebx
  149.                 stdcall print_word_f1,eax,ebx
  150.                 add eax,sizeof.TexColViv
  151.         loop @b
  152.        
  153.         ; ïîäãîòîâêà äëÿ  PathShow
  154.         push dword PathShow_data_1
  155.         call [PathShow_prepare]
  156.         call draw_window
  157.  
  158.         .no_colors:
  159.         popad
  160.         ret
  161.  
  162. align 4
  163. proc print_color, color:dword
  164.         pushad
  165.         mov eax,dword[color]
  166.  
  167.         mov ebx,eax ;ìåíÿåì ìåñòàìè red è blue
  168.         shr ebx,16
  169.         xchg al,bl
  170.         and eax,0xffff
  171.         and ebx,0xff
  172.         shl ebx,16
  173.         or eax,ebx
  174.  
  175.         ror al,4
  176.         ror eax,8
  177.         ror al,4
  178.         ror eax,8
  179.         ror al,4
  180.         rol eax,16
  181.         mov edi,text_buffer
  182.         mov word[edi],'0x'
  183.         add edi,2
  184.         mov ecx,6
  185.         @@:
  186.                 mov ebx,eax
  187.                 and ebx,0xf
  188.                 cmp bx,9
  189.                 jle .cifra
  190.                         add bx,39
  191.                 .cifra:
  192.                 add bx,48
  193.                 mov byte[edi],bl
  194.                 inc edi
  195.                 shr eax,4
  196.         loop @b
  197.         mov byte[edi],13
  198.         mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  199.         stdcall [ted_text_add], tedit0,text_buffer,9,ebx
  200.         popad
  201.         ret
  202. endp
  203.  
  204. align 4
  205. proc print_capt, capt:dword
  206.         pushad
  207.         mov esi,dword[capt]
  208.         stdcall str_len,esi
  209.         stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  210.         popad
  211.         ret
  212. endp
  213.  
  214. align 4
  215. proc print_word, text:dword, index:dword
  216.         pushad
  217.         mov esi,text_buffer
  218.         mov byte[esi],0
  219.         stdcall str_cat,esi,capt_beg_word
  220.         stdcall str_len,esi
  221.         add esi,eax
  222.  
  223.         mov edi,dword[text]    
  224.         stdcall code_string,edi,esi ;êîäèðóåì ñòðîêó ñ êëþ÷åâûì ñëîâîì
  225.         stdcall str_cat,esi,capt_end_word
  226.  
  227.         cmp dword[edi+MAX_COLOR_WORD_LEN],0 ;f1
  228.         je @f
  229.                 stdcall str_cat,esi,capt_calc_f1
  230.                 stdcall str_cat_value,esi,[index]
  231.                 stdcall str_cat,esi,capt_lbl_f1_use
  232.         @@:
  233.  
  234.         mov esi,text_buffer
  235.         stdcall str_len,esi ;óçíàåì äëèííó âñåé ñòðîêè
  236.         stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  237.  
  238. mov ecx,edi
  239. mov edi,text_buffer
  240. mov byte[edi],','
  241. inc edi
  242. mov byte[edi],0
  243.         xor eax,eax
  244.         mov al,byte[ecx+MAX_COLOR_WORD_LEN+4] ;wwo
  245.         stdcall str_cat_value,edi,eax
  246.         stdcall str_len,edi
  247.         add edi,eax
  248.         mov byte[edi],','
  249.         inc edi
  250.  
  251.         xor eax,eax
  252.         mov ax,word[ecx+MAX_COLOR_WORD_LEN+4+1] ;(escc shl 8)+endc
  253.         cmp ax,0 ;ïðîâåðÿåì åñòü ëè çàâåðøàþùèé è ýêðàíèíóþùèé ñèìâîë
  254.         je @f
  255.                 stdcall str_cat_value,edi,eax
  256.                 stdcall str_len,edi
  257.                 add edi,eax
  258.         @@:
  259.         mov byte[edi],','
  260.         inc edi
  261.  
  262.         xor eax,eax
  263.         mov al,byte[ecx+MAX_COLOR_WORD_LEN+4+3] ;color
  264.         stdcall str_cat_value,edi,eax
  265.         stdcall str_len,edi
  266.         add edi,eax
  267.         mov byte[edi],13
  268.         inc edi
  269.         mov byte[edi],0
  270.  
  271.         mov esi,text_buffer
  272.         stdcall str_len,esi
  273.         stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_move_cursor
  274.  
  275.         popad
  276.         ret
  277. endp
  278.  
  279. align 4
  280. proc print_word_f1, text:dword, index:dword
  281.         pushad
  282.         mov edi,dword[text]
  283.         mov esi,dword[edi+MAX_COLOR_WORD_LEN] ;f1
  284.         cmp esi,0
  285.         je @f
  286.                 mov ebx,text_buffer
  287.                 mov byte[ebx],0
  288.                 stdcall str_cat,ebx,capt_point
  289.                 stdcall str_cat_value,ebx,[index]
  290.                 stdcall str_cat,ebx,capt_beg_db
  291.                 stdcall str_len,ebx
  292.                 add ebx,eax
  293.                
  294.                 add esi,dword[tex_help_f1]
  295.                 stdcall code_string,esi,ebx ;êîäèðóåì ñòðîêó
  296.                 stdcall str_cat,ebx,capt_end_word_f1
  297.  
  298.                 mov ebx,text_buffer
  299.                 stdcall str_len,ebx
  300.                 stdcall [ted_text_add], tedit0,ebx,eax,ted_opt_ed_move_cursor
  301.         @@:
  302.         popad
  303.         ret
  304. endp
  305.  
  306. align 4
  307. proc code_string, text:dword, out_text:dword
  308.         pushad
  309.         mov esi,dword[text]
  310.         stdcall str_len,esi
  311.         mov ecx,eax
  312.         mov edi,dword[out_text]
  313.  
  314.         .copy:
  315.                 mov al,byte[esi]
  316.                 inc esi
  317.                 cmp al,9
  318.                 je @f
  319.                 cmp al,13
  320.                 je @f
  321.                 cmp al,39
  322.                 je @f
  323.                         mov byte[edi],al
  324.                         inc edi
  325.                         loop .copy
  326.                         jmp .end_copy
  327.                 @@:
  328.                         mov byte[edi],39
  329.                         mov byte[edi+1],','
  330.                         add edi,2
  331.                         and eax,0xff
  332.                         mov dword[edi],0
  333.                         call tl_convert_to_str
  334.                         stdcall str_len,edi
  335.                         add edi,eax
  336.                         mov byte[edi],','
  337.                         mov byte[edi+1],39
  338.                         add edi,2
  339.         loop .copy
  340.         .end_copy:
  341.         mov byte[edi],0
  342.         popad
  343.         ret
  344. endp
  345.  
  346. align 4
  347. proc mem_clear, mem:dword, len:dword
  348.         push eax ecx edi
  349.         cld
  350.         xor al,al
  351.         mov edi, dword[mem]
  352.         mov ecx, dword[len]
  353.         repne stosb
  354.         pop edi ecx eax
  355.         ret
  356. endp
  357.  
  358. align 4
  359. proc str_cat, str1:dword, str2:dword
  360.         push eax ecx edi esi
  361.         mov esi,dword[str2]
  362.         stdcall str_len,esi
  363.         mov ecx,eax
  364.         inc ecx
  365.         mov edi,dword[str1]
  366.         stdcall str_len,edi
  367.         add edi,eax
  368.         cld
  369.         repne movsb
  370.         pop esi edi ecx eax
  371.         ret
  372. endp
  373.  
  374. align 4
  375. proc str_cat_value, str1:dword, value:dword
  376.         pushad
  377.         mov edi,[str1]
  378.         stdcall str_len,edi
  379.         add edi,eax
  380.         mov eax,[value]
  381.         call tl_convert_to_str
  382.         popad
  383.         ret
  384. endp
  385.  
  386. ;output:
  387. ; eax = strlen
  388. align 4
  389. proc str_len, str1:dword
  390.         mov eax,[str1]
  391.         @@:
  392.                 cmp byte[eax],0
  393.                 je @f
  394.                 inc eax
  395.                 jmp @b
  396.         @@:
  397.         sub eax,[str1]
  398.         ret
  399. endp
  400.  
  401. ;input:
  402. ; eax = value
  403. ; edi = string buffer
  404. align 4
  405. tl_convert_to_str:
  406.         pushad
  407.         stdcall mem_clear,edi,12
  408.         call .str
  409.         popad
  410.         ret
  411.  
  412. align 4
  413. .str:
  414.         mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
  415.                 ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âõîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé
  416.         cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
  417.         jb @f
  418.                 xor edx,edx ;î÷èñòèòü edx
  419.                 div ecx     ;ðàçäåëèòü - îñòàòîê â edx
  420.                 push edx    ;ïîëîæèòü â ñòåê
  421.                 ;dec edi    ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
  422.                 call .str   ;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
  423.                 pop eax
  424.         @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
  425.         or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå
  426.         stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
  427.         ret
  428.