Subversion Repositories Kolibri OS

Rev

Rev 2086 | Rev 2125 | 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.         ;stdcall [ted_init_scroll_bars], tedit0,4
  155.         ;stdcall [ted_draw], tedit0
  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.                 jmp .end_f1_calc
  233.         @@:
  234.                 stdcall str_cat,esi,capt_null
  235.         .end_f1_calc:
  236.  
  237.         mov esi,text_buffer
  238.         stdcall str_len,esi ;óçíàåì äëèííó âñåé ñòðîêè
  239.         stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
  240.  
  241. mov ecx,edi
  242. mov edi,text_buffer
  243. mov byte[edi],','
  244. inc edi
  245. mov byte[edi],0
  246.         xor eax,eax
  247.         mov al,byte[ecx+MAX_COLOR_WORD_LEN+4] ;wwo
  248.         stdcall str_cat_value,edi,eax
  249.         stdcall str_len,edi
  250.         add edi,eax
  251.         mov byte[edi],','
  252.         inc edi
  253.  
  254.         xor eax,eax
  255.         mov ax,word[ecx+MAX_COLOR_WORD_LEN+4+1] ;(escc shl 8)+endc
  256.         cmp ax,0 ;ïðîâåðÿåì åñòü ëè çàâåðøàþùèé è ýêðàíèíóþùèé ñèìâîë
  257.         je @f
  258.                 stdcall str_cat_value,edi,eax
  259.                 stdcall str_len,edi
  260.                 add edi,eax
  261.         @@:
  262.         mov byte[edi],','
  263.         inc edi
  264.  
  265.         xor eax,eax
  266.         mov al,byte[ecx+MAX_COLOR_WORD_LEN+4+2] ;color
  267.         stdcall str_cat_value,edi,eax
  268.         stdcall str_len,edi
  269.         add edi,eax
  270.         mov byte[edi],13
  271.         inc edi
  272.         mov byte[edi],0
  273.  
  274.         mov esi,text_buffer
  275.         stdcall str_len,esi
  276.         stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_move_cursor
  277.  
  278.         popad
  279.         ret
  280. endp
  281.  
  282. align 4
  283. proc print_word_f1, text:dword, index:dword
  284.         pushad
  285.         mov edi,dword[text]
  286.         mov esi,dword[edi+MAX_COLOR_WORD_LEN] ;f1
  287.         cmp esi,0
  288.         je @f
  289.                 mov ebx,text_buffer
  290.                 mov byte[ebx],0
  291.                 stdcall str_cat,ebx,capt_point
  292.                 stdcall str_cat_value,ebx,[index]
  293.                 stdcall str_cat,ebx,capt_beg_db
  294.                 stdcall str_len,ebx
  295.                 add ebx,eax
  296.                
  297.                 add esi,dword[tex_help_f1]
  298.                 stdcall code_string,esi,ebx ;êîäèðóåì ñòðîêó
  299.                 stdcall str_cat,ebx,capt_end_word_f1
  300.  
  301.                 mov ebx,text_buffer
  302.                 stdcall str_len,ebx
  303.                 stdcall [ted_text_add], tedit0,ebx,eax,ted_opt_ed_move_cursor
  304.         @@:
  305.         popad
  306.         ret
  307. endp
  308.  
  309. align 4
  310. proc code_string, text:dword, out_text:dword
  311.         pushad
  312.         mov esi,dword[text]
  313.         stdcall str_len,esi
  314.         mov ecx,eax
  315.         mov edi,dword[out_text]
  316.  
  317.         .copy:
  318.                 mov al,byte[esi]
  319.                 inc esi
  320.                 cmp al,9
  321.                 je @f
  322.                 cmp al,13
  323.                 je @f
  324.                 cmp al,39
  325.                 je @f
  326.                         mov byte[edi],al
  327.                         inc edi
  328.                         loop .copy
  329.                         jmp .end_copy
  330.                 @@:
  331.                         mov byte[edi],39
  332.                         mov byte[edi+1],','
  333.                         add edi,2
  334.                         and eax,0xff
  335.                         mov dword[edi],0
  336.                         call tl_convert_to_str
  337.                         stdcall str_len,edi
  338.                         add edi,eax
  339.                         mov byte[edi],','
  340.                         mov byte[edi+1],39
  341.                         add edi,2
  342.         loop .copy
  343.         .end_copy:
  344.         mov byte[edi],0
  345.         popad
  346.         ret
  347. endp
  348.  
  349. align 4
  350. proc mem_clear, mem:dword, len:dword
  351.         push eax ecx edi
  352.         cld
  353.         xor al,al
  354.         mov edi, dword[mem]
  355.         mov ecx, dword[len]
  356.         repne stosb
  357.         pop edi ecx eax
  358.         ret
  359. endp
  360.  
  361. align 4
  362. proc str_cat, str1:dword, str2:dword
  363.         push eax ecx edi esi
  364.         mov esi,dword[str2]
  365.         stdcall str_len,esi
  366.         mov ecx,eax
  367.         inc ecx
  368.         mov edi,dword[str1]
  369.         stdcall str_len,edi
  370.         add edi,eax
  371.         cld
  372.         repne movsb
  373.         pop esi edi ecx eax
  374.         ret
  375. endp
  376.  
  377. align 4
  378. proc str_cat_value, str1:dword, value:dword
  379.         pushad
  380.         mov edi,[str1]
  381.         stdcall str_len,edi
  382.         add edi,eax
  383.         mov eax,[value]
  384.         call tl_convert_to_str
  385.         popad
  386.         ret
  387. endp
  388.  
  389. ;output:
  390. ; eax = strlen
  391. align 4
  392. proc str_len, str1:dword
  393.         mov eax,[str1]
  394.         @@:
  395.                 cmp byte[eax],0
  396.                 je @f
  397.                 inc eax
  398.                 jmp @b
  399.         @@:
  400.         sub eax,[str1]
  401.         ret
  402. endp
  403.  
  404. ;input:
  405. ; eax = value
  406. ; edi = string buffer
  407. align 4
  408. tl_convert_to_str:
  409.         pushad
  410.         stdcall mem_clear,edi,12
  411.         call .str
  412.         popad
  413.         ret
  414.  
  415. align 4
  416. .str:
  417.         mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
  418.                 ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âõîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé
  419.         cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
  420.         jb @f
  421.                 xor edx,edx ;î÷èñòèòü edx
  422.                 div ecx     ;ðàçäåëèòü - îñòàòîê â edx
  423.                 push edx    ;ïîëîæèòü â ñòåê
  424.                 ;dec edi    ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
  425.                 call .str   ;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
  426.                 pop eax
  427.         @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
  428.         or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå
  429.         stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
  430.         ret
  431.