Subversion Repositories Kolibri OS

Rev

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