Subversion Repositories Kolibri OS

Rev

Rev 7575 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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