diff --git a/programs/media/log_el/docs/about.png b/programs/media/log_el/docs/about.png new file mode 100644 index 0000000000..3fef1926bb Binary files /dev/null and b/programs/media/log_el/docs/about.png differ diff --git a/programs/media/log_el/docs/mn4bit.png b/programs/media/log_el/docs/mn4bit.png new file mode 100644 index 0000000000..c8899c8696 Binary files /dev/null and b/programs/media/log_el/docs/mn4bit.png differ diff --git a/programs/media/log_el/docs/readme.htm b/programs/media/log_el/docs/readme.htm new file mode 100644 index 0000000000..aef9f5c774 --- /dev/null +++ b/programs/media/log_el/docs/readme.htm @@ -0,0 +1,122 @@ + + +╬уыртыхэшх + + + + + +

╦юушўхёъшх ¤ыхьхэЄ√ тхЁёш  юЄ 15.03.2012

+

╬уыртыхэшх

+ + +

╬ яЁюуЁрььх

+

╧ЁюуЁрььр фы  ьюфхышЁютрэш  ш яЁюёьюЄЁр ыюушўхёъшї ёїхь. ╦юушўхёъшх ёїхь√ ёюёЄю Є шч ыюушўхёъшї ¤ыхьхэЄют, ш ЁрёўшЄрэ√ эр ЁрсюЄє ё фтєь  тшфрьш ёшуэрыют 0 ш 1. + ═хъюЄюЁ√х шч ЇєэъЎшщ яЁюуЁрьь√ яюър х∙х эх ёфхырэ√. + ╦шЎхэчш  ётюсюфэр .

+

+

┬эх°эшщ тшф яЁюуЁрьь√.

+ +

╨рсюЄр ё яЁюуЁрььющ

+

╬ЄъЁ√Єшх Їрщыют

+

╤їхь√ їЁрэ Єё  т ЄхъёЄютюь тшфх, юЄъЁ√трЄ№ шї ьюцэю ўхЁхч ъэюяъє ё яюью∙№■ фшрыюуютюую юъэр.

+ +

╟ряєёъ / ╬ёЄрэютър / ╙яЁртыхэшх

+

╧юёых юЄъЁ√Єш  ёїхь√ фы  яЁюёьюЄЁр хх ЁрсюЄ√ эєцэю эрцрЄ№ ъэюяъє чряєёър . ╬ёЄрэютър ьюфхышЁютрэш  фхырхЄё  Єющ цх ёрьющ ъэюяъющ. ╧юёых чряєёър ёїхьр эрўшэрхЄ ЁрсюЄрЄ№ (ьюуєЄ фтшурЄ№ё  Ёрчэ√х ёшуэры√). ─ы  єяЁртыхэш  ЁрсюЄющ ёїхь√ яЁхфєёьюЄЁхэ√ юс·хъЄ√ эрфяшёхщ. ┼ёыш эрфяшё№ ёючфртрырё№ эх ъръ шэЇюЁьрЎшюээр  Єю яюы№чютрЄхы№ ьюцхЄ т√сЁрЄ№ Єръє■ эрфяшё№ т ёяшёъх ш ъэюяърьш ш юяЁхфхы Є№ ъръющ шч ёшуэрыют яюфртрЄ№ (0 шыш 1) эр Єю ьхёЄю ёїхь√, уфх эрїюфшЄё  фрээр  эрфяшё№.

+ +

╨хфръЄшЁютрэшх

+

╬яшёрэшх ъэюяюъ фы  ЁхфръЄшЁютрэш :

+

- ёсЁюё Ёхцшьр Ёшёютрэш  яЁютюфют

+

- єёЄрэютър Ёхцшьр Ёшёютрэш  яЁютюфют

+

- єёЄрэютър Ёхцшьр Ёшёютрэш  Єюўхъ фы  яЁютюфют схч яхЁхёхўхэшщ

+

- єёЄрэютър Ёхцшьр ёЄшЁрэш  яЁютюфют

+

╨хфръЄшЁютрэшх ьэюушї юс·хъЄют х∙х эх ёфхырэю :( ... ╧юър ьюцэю ЁхфръЄшЁютрЄ№ Їрщы√ ёю ёїхьрьш ЄхъёЄют√ьш ЁхфръЄюЁрьш, эю ¤Єю эх єфюсэю. ╧юЄюьє ёючфрэшх эют√ї ёїхь ёхщўрё яЁюсыхьрЄшўэю.

+ +

╤юїЁрэхэшх

+

─ы  ёюїЁрэхэш  ёїхь√ эрцьшЄх эр ъэюяъє ёюїЁрэхэш  .

+ +

╧ЁшьхЁ

+

╤їхьр фы  яхЁхьэюцхэш  4 сшЄэ√ї ўшёхы:

+

+

═р Ёшёєэъх ўшёыю a (a0+a1 = 1+2 = 3) єьэюцрхЄё  эр b (b1+b3 = 2+8 = 10) ш эр т√їюфх яюыєўрхЄё  c (c1+c2+c3+c4 = 2+4+8+16 = 30).

+ +

┬шф√ юс·хъЄют

+

┬ Їрщырї ёю ёїхьрьш хёЄ№ 4 тшфр юс·хъЄют.

+ +

╩ы■ўхтр  Єюўър

+

╩ы■ўхтр  Єюўър ¤Єю яЁюьхцєЄюўэ√щ юс·хъЄ, ъюЄюЁ√щ ёыєцшЄ фы  ёючфрэш  яЁютюфют. ╩ы■ўхтр  Єюўър ёюёЄюшЄ шч 2-ї ъююЁфшэрЄ ш яхЁхьхээющ эряЁртыхэшщ. ═ряЁртыхэшщ ьюцхЄ с√Є№ ьръёшьєь 4 (ттхЁї, тэшч, тыхтю, тяЁртю). ╬эш юяЁхфхы ■Є т ъръє■ ёЄюЁюэє юЄ фрэющ Єюўъш ЁшёютрЄ№ яЁютюф. ╧Ёш тёЄЁхўх фЁєующ ъы■ўхтющ Єюўъш шыш фюёЄшцхэшш ъюэЎр ёїхь√ Ёшёютрэшх яЁютюфр яЁхъЁр∙рхЄё . ╥ръшь юсЁрчюь ъы■ўхт√х Єюўъш ¤Єю тхъЄюЁэ√х юс·хъЄ√ эр юёэютх ъюЄюЁ√ї Ёшёє■Єё  яЁютюфр, ўЄю яючтюы хЄ єьхэ№°шЄ№ ЁрчьхЁ Їрщыр ёю ёїхьющ.

+ +

╧Ёютюф схч яхЁхёхўхэш 

+

┬ёх яЁютюфр ъюЄюЁ√х яхЁхёхър■Єё  эр ёїхьх ёўшЄр■Єё  ёюхфшэхээ√ьш ьхцфє ёюсющ. ┼ёыш тючэшърхЄ эхюсїюфшьюёЄ№ ёючфрЄ№ яхЁхёхър■∙шхё  эю эх ёюхфшэхээ√х яЁютюфр шёяюы№чєхЄё  юс·хъЄ яЁютюфр схч яхЁхёхўхэш .

+ +

╦юуўхёъшщ ¤ыхьхэЄ

+

╦юуўхёъшх ¤ыхьхэЄ√ ¤Єю ёїхь√ ъюЄюЁ√х шьх■Є тїюф√ ш т√їюф√. ╦юушўхёъшщ ¤ыхьхэЄ рэрышчшЁєхЄ ёшуэры√ ъюЄюЁ√х яюёЄєяр■Є хьє эр тїюф√ ш т чртшёшьюёЄш юЄ эшї ЇюЁьшЁєхЄ ёшуэры√ эр т√їюфрї. ═р ёїхьх юэш Ёшёє■Єё  яЁ ьюєуюы№эшърьш ё тїюфэ√ьш ш т√їюфэ√ьш эюурьш. ╦■сє■ ыюушўхёъє■ ёїхьє ьюцэю ёюёЄртшЄ№ шч 3-ї юёэютэ√ї ыюушўхёъшї ¤ыхьхэЄют: "эх", "ш", "шыш". ═шсюыхх ЁрёяЁюёЄЁрэхээ√х ыюушўхёъшх ¤ыхьхэЄ√ ьюфхышЁє■Єё  яЁюуЁрььющ, ёЁхфш эшї: "эх", "ш", "шыш", "шёъы■ўр■∙хх шыш" ш "ёєььрЄюЁ". ╩рцф√щ тшф ыюушўхёъюую ¤ыхьхэЄр т яЁюуЁрььх шьххЄ ётющ ЎтхЄ (їюЄ  яю яЁртшырь Ёшёютрэш  ыюушўхёъшї ёїхь тёх ¤ыхьхэЄ√ Ёшёє■Єё  ўхЁэю схы√ьш).

+ +

═рфяшё№

+

═рфяшёш с√тр■Є 2-ї тшфют: шэЇюЁьршюээ√х ш єяЁрты хь√х. ╚эЇюЁьрЎшюээ√х ёыєцрЄ фы  яюфяшёхщ юяЁхфхыхээ√ї ўрёЄхщ ёїхь√. └ ўхЁхч єяЁрты хьє■ эрфяшё№ ьюцэю яюфртрЄ№ эр ёїхьє ёшуэры√ 0 шыш 1.

+ +

└тЄюЁ

+

╚уюЁ№ └. (IgorA) - ЁрчЁрсюЄър яЁюуЁрьь√.

+ + + \ No newline at end of file diff --git a/programs/media/log_el/docs/tb_0.png b/programs/media/log_el/docs/tb_0.png new file mode 100644 index 0000000000..b5e8db070a Binary files /dev/null and b/programs/media/log_el/docs/tb_0.png differ diff --git a/programs/media/log_el/docs/tb_1.png b/programs/media/log_el/docs/tb_1.png new file mode 100644 index 0000000000..abb066fde0 Binary files /dev/null and b/programs/media/log_el/docs/tb_1.png differ diff --git a/programs/media/log_el/docs/tb_cursor.png b/programs/media/log_el/docs/tb_cursor.png new file mode 100644 index 0000000000..05348c2f64 Binary files /dev/null and b/programs/media/log_el/docs/tb_cursor.png differ diff --git a/programs/media/log_el/docs/tb_eraser.png b/programs/media/log_el/docs/tb_eraser.png new file mode 100644 index 0000000000..839b0bda70 Binary files /dev/null and b/programs/media/log_el/docs/tb_eraser.png differ diff --git a/programs/media/log_el/docs/tb_open.png b/programs/media/log_el/docs/tb_open.png new file mode 100644 index 0000000000..f8e086b0d1 Binary files /dev/null and b/programs/media/log_el/docs/tb_open.png differ diff --git a/programs/media/log_el/docs/tb_pen_1.png b/programs/media/log_el/docs/tb_pen_1.png new file mode 100644 index 0000000000..815a8649b0 Binary files /dev/null and b/programs/media/log_el/docs/tb_pen_1.png differ diff --git a/programs/media/log_el/docs/tb_pen_2.png b/programs/media/log_el/docs/tb_pen_2.png new file mode 100644 index 0000000000..f6ecf4dea8 Binary files /dev/null and b/programs/media/log_el/docs/tb_pen_2.png differ diff --git a/programs/media/log_el/docs/tb_run.png b/programs/media/log_el/docs/tb_run.png new file mode 100644 index 0000000000..08dc68e69e Binary files /dev/null and b/programs/media/log_el/docs/tb_run.png differ diff --git a/programs/media/log_el/docs/tb_save.png b/programs/media/log_el/docs/tb_save.png new file mode 100644 index 0000000000..a709a2b8da Binary files /dev/null and b/programs/media/log_el/docs/tb_save.png differ diff --git a/programs/media/log_el/trunk/and_2.txt b/programs/media/log_el/trunk/and_2.txt new file mode 100644 index 0000000000..d4e9b3cffc --- /dev/null +++ b/programs/media/log_el/trunk/and_2.txt @@ -0,0 +1,9 @@ +size 80 60 +elements 1 + 24 24 0 and[2] +captions 3 + 10 8 z x1 + 10 44 z x2 + 56 26 n y1 +points 4 + 10 25 9 10 27 3 10 44 8 56 26 4 diff --git a/programs/media/log_el/trunk/and_3.txt b/programs/media/log_el/trunk/and_3.txt new file mode 100644 index 0000000000..d6fc1c6623 --- /dev/null +++ b/programs/media/log_el/trunk/and_3.txt @@ -0,0 +1,10 @@ +size 80 60 +elements 1 + 24 24 0 and[3] +captions 4 + 10 8 z x1 + 10 44 z x2 + 30 44 z x3 + 56 27 n y1 +points 5 + 10 25 9 10 27 3 10 44 8 56 27 4 22 44 9 diff --git a/programs/media/log_el/trunk/build_ru.bat b/programs/media/log_el/trunk/build_ru.bat new file mode 100644 index 0000000000..8310508924 --- /dev/null +++ b/programs/media/log_el/trunk/build_ru.bat @@ -0,0 +1,9 @@ +if not exist bin mkdir bin +if not exist bin\font6x9.bmp @copy ..\..\..\fs\kfar\trunk\font6x9.bmp bin\font6x9.bmp +@copy *.png bin\*.png +@copy *.txt bin\*.txt +@fasm.exe -m 16384 log_el.asm bin\log_el.kex +@kpack bin\log_el.kex +if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj +@kpack bin\buf2d.obj +pause diff --git a/programs/media/log_el/trunk/calc.txt b/programs/media/log_el/trunk/calc.txt new file mode 100644 index 0000000000..87d735c03b --- /dev/null +++ b/programs/media/log_el/trunk/calc.txt @@ -0,0 +1,60 @@ +size 168 108 +elements 19 + 67 33 0 or[2] + 67 39 0 or[2] + 67 11 0 or[2] + 67 5 0 or[2] + 81 15 0 sm[1] + 81 25 0 sm[1] +121 44 0 and[3] +121 52 0 and[3] +121 60 0 and[3] +121 68 0 and[3] +121 76 0 and[3] +121 92 0 and[3] +121 84 0 and[3] + 94 19 0 not +101 29 0 not + 94 29 0 not +101 19 0 not + 94 15 0 not +101 15 0 not +captions 8 + 11 14 z a1 + 27 14 z a2 + 43 14 o a3 + 11 44 z b1 + 27 44 o b2 + 43 44 z b3 +146 44 n 0 +146 92 n 6 +points 105 + 63 36 3 61 40 3 107 45 11 65 6 4 63 42 11 57 6 3 + 65 40 4 65 36 4 65 42 4 61 12 3 65 12 4 65 8 4 + 63 8 3 109 77 11 111 79 11 79 13 6 79 23 8 119 65 4 +111 87 9 146 55 4 75 41 12 119 77 4 75 7 6 99 27 9 + 75 26 1 77 28 3 119 93 4 117 89 9 63 14 1 119 81 4 +119 89 4 119 87 4 119 79 4 73 31 9 75 31 6 73 18 1 +113 95 9 90 26 8 109 93 9 119 95 4 99 13 3 111 27 6 +115 33 6 90 20 1 43 14 2 43 16 9 63 16 12 27 20 9 + 27 14 2 113 71 11 119 69 4 61 20 12 57 22 12 11 22 9 + 11 14 2 43 44 2 43 46 9 63 46 12 61 50 12 27 50 9 + 27 44 2 11 44 2 11 52 9 57 52 12 99 33 9 57 34 3 +119 97 4 115 97 9 146 87 4 111 55 11 109 16 4 146 79 4 +119 49 4 115 49 11 119 47 4 119 57 4 117 57 11 117 30 6 +119 61 4 146 63 4 146 71 4 119 85 4 119 73 4 146 47 4 +107 61 11 146 95 4 119 55 4 119 53 4 113 20 6 119 45 4 +117 73 11 119 71 4 115 81 11 107 69 9 111 47 11 107 53 11 + 90 16 1 115 65 11 90 23 4 109 85 11 90 30 1 119 63 4 +107 13 2 113 63 11 77 35 4 +subpoints 74 + 63 40 63 12 75 18 61 16 57 20 57 16 61 46 57 50 + 57 46 75 35 75 13 117 49 113 47 107 20 109 20 107 27 +109 27 107 30 115 47 109 30 111 30 113 30 117 55 115 55 +113 55 109 53 111 53 113 53 115 53 113 33 111 33 109 33 +107 33 117 65 115 63 117 63 109 61 111 61 113 61 115 61 +115 71 117 71 117 69 115 69 113 69 111 69 109 69 117 53 +117 81 113 79 115 79 117 79 111 77 113 77 115 77 115 93 +113 93 115 95 117 61 117 87 117 85 115 85 115 87 113 87 +113 85 111 85 117 77 117 47 109 45 111 45 113 45 115 45 +117 45 107 16 diff --git a/programs/media/log_el/trunk/dll.inc b/programs/media/log_el/trunk/dll.inc new file mode 100644 index 0000000000..5f13fbbc16 --- /dev/null +++ b/programs/media/log_el/trunk/dll.inc @@ -0,0 +1,99 @@ + +proc dll.Load, import_table:dword + mov esi,[import_table] + .next_lib: mov edx,[esi] + or edx,edx + jz .exit + push esi + mov esi,[esi+4] + mov edi,s_libdir.fname + @@: lodsb + stosb + or al,al + jnz @b + mcall 68,19,s_libdir + or eax,eax + jz .fail + stdcall dll.Link,eax,edx + push eax + mov eax, [eax] + cmp dword [eax], 'lib_' + pop eax + jnz @f + stdcall dll.Init,[eax+4] + @@: + pop esi + add esi,8 + jmp .next_lib + .exit: xor eax,eax + ret + .fail: add esp,4 + xor eax,eax + inc eax + ret +endp + +proc dll.Link, exp:dword,imp:dword + push eax + mov esi,[imp] + test esi,esi + jz .done + .next: lodsd + test eax,eax + jz .done + stdcall dll.GetProcAddress,[exp],eax + or eax,eax + jz @f + mov [esi-4],eax + jmp .next + @@: mov dword[esp],0 + .done: pop eax + ret +endp + +proc dll.Init, dllentry:dword + pushad + mov eax,mem.Alloc + mov ebx,mem.Free + mov ecx,mem.ReAlloc + mov edx,dll.Load + stdcall [dllentry] + popad + ret +endp + +proc dll.GetProcAddress, exp:dword,sz_name:dword + mov edx,[exp] + xor eax,eax + .next: or edx,edx + jz .end + cmp dword[edx],0 + jz .end + stdcall strcmp,[edx],[sz_name] + test eax,eax + jz .ok + add edx,8 + jmp .next + .ok: mov eax,[edx+4] + .end: ret +endp + +proc strcmp, str1:dword,str2:dword + push esi edi + mov esi,[str1] + mov edi,[str2] + xor eax,eax + @@: lodsb + scasb + jne .fail + or al,al + jnz @b + jmp .ok + .fail: or eax,-1 + .ok: pop edi esi + ret +endp + +s_libdir: + db '/sys/lib/' + .fname rb 32 diff --git a/programs/media/log_el/trunk/le_libs.inc b/programs/media/log_el/trunk/le_libs.inc new file mode 100644 index 0000000000..27c548c540 --- /dev/null +++ b/programs/media/log_el/trunk/le_libs.inc @@ -0,0 +1 @@ +;include 'load_lib.mac' ;include 'mem.inc' ;include 'dll.inc' ;@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load head_f_i: head_f_l db 'Системная ошибка',0 system_dir_0 db '/sys/lib/' lib_name_0 db 'proc_lib.obj',0 err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0 err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0 system_dir_1 db '/sys/lib/' lib_name_1 db 'libimg.obj',0 err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0 err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0 system_dir_2 db '/sys/lib/' lib_name_2 db 'box_lib.obj',0 err_message_found_lib_2 db 'Не найдена библиотека ',39,'box_lib.obj',39,0 err_message_import_2 db 'Ошибка при импорте библиотеки ',39,'box_lib.obj',39,0 system_dir_7 db '/sys/lib/' lib_name_7 db 'buf2d.obj',0 err_msg_found_lib_7 db 'Не найдена библиотека ',39,'buf2d.obj',39,0 err_msg_import_7 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0 l_libs_start: lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\ err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\ err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i lib2 l_libs lib_name_2, sys_path, file_name, system_dir_2,\ err_message_found_lib_2, head_f_l, import_box_lib, err_message_import_2, head_f_i lib_7 l_libs lib_name_7, sys_path, library_path, system_dir_7,\ err_msg_found_lib_7,head_f_l,import_buf2d,err_msg_import_7,head_f_i l_libs_end: align 4 proclib_import: ;описание экспортируемых функций OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 align 4 import_libimg: dd alib_init1 img_is_img dd aimg_is_img img_info dd aimg_info img_from_file dd aimg_from_file img_to_file dd aimg_to_file img_from_rgb dd aimg_from_rgb img_to_rgb dd aimg_to_rgb img_to_rgb2 dd aimg_to_rgb2 img_decode dd aimg_decode img_encode dd aimg_encode img_create dd aimg_create img_destroy dd aimg_destroy img_destroy_layer dd aimg_destroy_layer img_count dd aimg_count img_lock_bits dd aimg_lock_bits img_unlock_bits dd aimg_unlock_bits img_flip dd aimg_flip img_flip_layer dd aimg_flip_layer img_rotate dd aimg_rotate img_rotate_layer dd aimg_rotate_layer img_draw dd aimg_draw dd 0,0 alib_init1 db 'lib_init',0 aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение aimg_info db 'img_info',0 aimg_from_file db 'img_from_file',0 aimg_to_file db 'img_to_file',0 aimg_from_rgb db 'img_from_rgb',0 aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB aimg_to_rgb2 db 'img_to_rgb2',0 aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных aimg_encode db 'img_encode',0 aimg_create db 'img_create',0 aimg_destroy db 'img_destroy',0 aimg_destroy_layer db 'img_destroy_layer',0 aimg_count db 'img_count',0 aimg_lock_bits db 'img_lock_bits',0 aimg_unlock_bits db 'img_unlock_bits',0 aimg_flip db 'img_flip',0 aimg_flip_layer db 'img_flip_layer',0 aimg_rotate db 'img_rotate',0 aimg_rotate_layer db 'img_rotate_layer',0 aimg_draw db 'img_draw',0 align 4 import_box_lib: dd alib_init2 ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ; version_ed dd aVersion_ed check_box_draw dd aCheck_box_draw check_box_mouse dd aCheck_box_mouse ; version_ch dd aVersion_ch ; option_box_draw dd aOption_box_draw ; option_box_mouse dd aOption_box_mouse ; version_op dd aVersion_op scrollbar_ver_draw dd aScrollbar_ver_draw ; scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw ; scrollbar_hor_mouse dd aScrollbar_hor_mouse ; version_scrollbar dd aVersion_scrollbar tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec tl_node_move_up dd sz_tl_node_move_up tl_node_move_down dd sz_tl_node_move_down tl_save_mem dd sz_tl_save_mem tl_load_mem dd sz_tl_load_mem tl_get_mem_size dd sz_tl_get_mem_size tl_node_poi_get_info dd sz_tl_node_poi_get_info tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info tl_node_poi_get_data dd sz_tl_node_poi_get_data dd 0,0 alib_init2 db 'lib_init',0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ; aVersion_ed db 'version_ed',0 aCheck_box_draw db 'check_box_draw',0 aCheck_box_mouse db 'check_box_mouse',0 ; aVersion_ch db 'version_ch',0 ; aOption_box_draw db 'option_box_draw',0 ; aOption_box_mouse db 'option_box_mouse',0 ; aVersion_op db 'version_op',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 ; aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 ; aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 ; aVersion_scrollbar db 'version_scrollbar',0 sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_tl_node_move_up db 'tl_node_move_up',0 sz_tl_node_move_down db 'tl_node_move_down',0 sz_tl_save_mem db 'tl_save_mem',0 sz_tl_load_mem db 'tl_load_mem',0 sz_tl_get_mem_size db 'tl_get_mem_size',0 sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 align 4 import_buf2d: init dd sz_init buf2d_create dd sz_buf2d_create buf2d_create_f_img dd sz_buf2d_create_f_img buf2d_clear dd sz_buf2d_clear buf2d_draw dd sz_buf2d_draw buf2d_delete dd sz_buf2d_delete buf2d_line dd sz_buf2d_line buf2d_rect_by_size dd sz_buf2d_rect_by_size buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size buf2d_circle dd sz_buf2d_circle buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 buf2d_bit_blt dd sz_buf2d_bit_blt buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha buf2d_curve_bezier dd sz_buf2d_curve_bezier buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix buf2d_draw_text dd sz_buf2d_draw_text buf2d_crop_color dd sz_buf2d_crop_color buf2d_offset_h dd sz_buf2d_offset_h buf2d_flood_fill dd sz_buf2d_flood_fill buf2d_set_pixel dd sz_buf2d_set_pixel dd 0,0 sz_init db 'lib_init',0 sz_buf2d_create db 'buf2d_create',0 sz_buf2d_create_f_img db 'buf2d_create_f_img',0 sz_buf2d_clear db 'buf2d_clear',0 sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 sz_buf2d_line db 'buf2d_line',0 sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 sz_buf2d_circle db 'buf2d_circle',0 sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 sz_buf2d_bit_blt db 'buf2d_bit_blt',0 sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 sz_buf2d_draw_text db 'buf2d_draw_text',0 sz_buf2d_crop_color db 'buf2d_crop_color',0 sz_buf2d_offset_h db 'buf2d_offset_h',0 sz_buf2d_flood_fill db 'buf2d_flood_fill',0 sz_buf2d_set_pixel db 'buf2d_set_pixel',0 \ No newline at end of file diff --git a/programs/media/log_el/trunk/le_pole.inc b/programs/media/log_el/trunk/le_pole.inc new file mode 100644 index 0000000000..03ef8f44d5 --- /dev/null +++ b/programs/media/log_el/trunk/le_pole.inc @@ -0,0 +1,1262 @@ +; +; функци для создания и редактирования проводов +; + +;-------------------------------------- +struct Cell + x dd ? ;+0 + y dd ? ;+4 + liv db ? ;+8 + napr db ? ;+9 +ends + +offs_cell_x equ 0 +offs_cell_y equ 4 +offs_cell_liv equ 8 +offs_cell_napr equ 9 + +;структура для создания поля +align 4 +pole: +.index dd 0 +cell dd 0 ;указатель на память со структурами ячеек +.max_cell dd 90000 +.b_sort dd 0 ;граница для сортированных ячеек + +pole_index equ dword[edi] +pole_data equ dword[edi +4] ;указатель на память со структурами ячеек +pole_max_cell equ dword[edi +8] +pole_b_sort equ dword[edi+12] ;граница для сортированных ячеек + +macro get_cell_offset reg,ind +{ + mov reg,ind + imul reg,sizeof.Cell + add reg,dword[cell] +} + +er_oom db 0 ;на случай исчерпания памяти +Cor_x dd 0 +Cor_y dd 0 +zoom db 3 ;масштаб поля +txt_zoom db 'Масштаб:',0 +txt_osob db 'Точек:',0 +txt_info: db 'Размер: ' +.size: rb 16 +txt_mull db '*',0 +txt_space db ' ',0 +txt_nl db 13,10,0 +txt_buf rb 32 + + +align 4 +proc pole_init uses eax ebx edi, pole:dword + mov edi,dword[pole] + + ;*** код с одной областью в памяти *** + mov ebx,4 + add ebx,sizeof.Cell + imul ebx,pole_max_cell + stdcall mem.Alloc,ebx + mov pole_index,eax + + mov ebx,pole_max_cell + shl ebx,2 + add eax,ebx + mov pole_data,eax + + stdcall pole_clear, edi + stdcall pole_paint, edi ;рисование поля в буфере (не на экране) + ret +endp + +align 4 +proc pole_delete uses edi, pole:dword + mov edi,dword[pole] + stdcall mem.Free,pole_index + ret +endp + +;чистка проводов на схеме +align 4 +proc pole_clear uses eax ecx edi, pole:dword + mov edi,dword[pole] + + xor eax,eax + mov pole_b_sort,eax + mov byte[er_oom],al + cld + mov ecx,pole_max_cell + imul ecx,sizeof.Cell + mov edi,pole_data + repne stosb ;memset(cell,0,sizeof(Cell)*pole_max_cell); + + mov edi,dword[pole] + mov ecx,pole_max_cell + mov edi,pole_index + @@: + stosd ;for(i=0;i i + ;ecx -> firstC + ;edx -> &pole_index[i] + ;esi -> cell[pole_index[i]] + mov ecx,pole_index + mov ebx,pole_b_sort + mov edx,ebx + shl edx,2 + add edx,ecx + inc ebx + mov ecx,dword[ecx] + .cycle_b: ;for(i=pole_b_sort+1;i<=fristC;i++) + add edx,4 + get_cell_offset esi,dword[edx] + mov eax,dword[x] + cmp dword[esi],eax ;+0 = .x + jne .if_e + mov eax,dword[y] + cmp dword[esi+4],eax ;+4 = .y + jne .if_e + ;if(cell[pole_index[i]].x==x && cell[pole_index[i]].y==y){ + mov eax,dword[edx] ;fnd=pole_index[i]; + jmp .cycle_e ;break; + .if_e: + inc ebx + cmp ebx,ecx + jle .cycle_b + xor eax,eax ;восстанавливаем нулевое значение если не нашли ячейку (в цикле eax портится при проверке координат) + .cycle_e: + pop esi edx ecx ebx + @@: + .fun_e: + ret +endp + +;output: +; eax - index +align 4 +proc pole_bin_find uses ebx ecx edx edi, mas:dword, fx:dword, fy:dword, k:dword + xor eax,eax + mov ebx,1 ;ebx - максимальный порядок для дерева + @@: + cmp dword[k],ebx + jle @f ;while(k>por) + shl ebx,1 ;por<<=1; + jmp @b + @@: + cmp dword[k],ebx + jge @f ;if(k>=1; + @@: + mov ecx,ebx ;i=por; + + ;ecx -> i + ;edi -> mas[i] + .cycle_b: ;do{ + shr ebx,1 ;por>>=1; + + mov edi,ecx + shl edi,2 + add edi,dword[mas] + ;if(compare_cells_mb(mas[i],fx,fy)){ + stdcall pole_compare_cells_mb_coords, dword[edi],[fx],[fy] + cmp dl,0 + je .if_u0_e + @@: ;while(i+por>k) + mov edx,ecx + add edx,ebx + cmp edx,dword[k] ;i+por>k + jle @f + shr ebx,1 ;por>>=1; + jmp @b + @@: + add ecx,ebx ;i+=por; + jmp .if_e + .if_u0_e: + ;else if(compare_cells_bm(mas[i],fx,fy))i-=por; + stdcall pole_compare_cells_bm_coords, dword[edi],[fx],[fy] + cmp dl,0 + je .if_u1_e + sub ecx,ebx + jmp .if_e + .if_u1_e: + ;else { m=i; por=0; } + mov eax,ecx + xor ebx,ebx + .if_e: + cmp ebx,0 + jne .cycle_b ;}while(por); + + ret +endp + +;output: +; dl +align 4 +proc pole_compare_cells_bm_coords uses eax ebx ecx, i0:dword, fx:dword, fy:dword + get_cell_offset eax,[i0] + ;eax -> cell[i0] + mov ebx,dword[fx] + cmp dword[eax],ebx + jle @f + mov dl,1 + jmp .fun_e + @@: + mov ecx,dword[fy] + cmp dword[eax+4],ecx + jle @f + cmp dword[eax],ebx + jne @f + mov dl,1 + jmp .fun_e + @@: + xor dl,dl + .fun_e: + ret +endp + +;output: +; dl +align 4 +proc pole_compare_cells_mb_coords uses eax ebx ecx, i0:dword, fx:dword, fy:dword + get_cell_offset eax,[i0] + ;eax -> cell[i0] + mov ebx,dword[fx] + cmp dword[eax],ebx + jge @f + mov dl,1 + jmp .fun_e + @@: + mov ecx,dword[fy] + cmp dword[eax+4],ecx + jge @f + cmp dword[eax],ebx + jne @f + mov dl,1 + jmp .fun_e + @@: + xor dl,dl + .fun_e: + ret +endp + +;output: +; dl +align 4 +proc pole_compare_cells_bm, i0:dword, i1:dword + push eax ebx ecx + get_cell_offset eax,[i0] ;eax -> cell[i0] + get_cell_offset ebx,[i1] ;ebx -> cell[i1] + mov ecx,dword[ebx] ;+0 = .x + cmp dword[eax],ecx + jle @f ;x0>x1 + mov dl,1 + jmp .fun_e + @@: + jne @f ;x0==x1 + mov ecx,dword[ebx+4] ;+4 = .y + cmp dword[eax+4],ecx + jle @f ;y0>y1 + mov dl,1 + jmp .fun_e + @@: + xor dl,dl + .fun_e: + pop ecx ebx eax + ret +endp + +;description: +; чистка ячеек (проводов), установка на всех проводах 0-го сигнала +; нужно вызывать при формировании или перед запуском схемы +align 4 +proc pole_reset_cells uses eax ebx ecx edi, pole:dword + mov edi,dword[pole] + mov eax,pole_index + cmp dword[eax],0 + je .fun_e ;если нет ячеек (проводов) то выход + + mov ecx,dword[eax] + cld + @@: ;цикл по всем ячейкам + add eax,4 + mov ebx,[eax] + imul ebx,sizeof.Cell + add ebx,pole_data + ;and byte[ebx+offs_cell_liv],0xfe ;сброс младшего бита + cmp byte[ebx+offs_cell_liv],2 + je .no_clear + mov byte[ebx+offs_cell_liv],0 + .no_clear: + loop @b + .fun_e: + ret +endp + +align 4 +proc p_paint_elems uses eax esi + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + @@: + cmp esi,0 + je @f + cmp word[esi],el_icon_elems ;получение через esi тип иконки + jne .end_element + stdcall [tl_node_poi_get_data], esi, tree1 + pop eax + stdcall el_draw, eax + .end_element: + cmp word[esi],el_icon_captions ;получение через esi тип иконки + jne .end_caption + stdcall [tl_node_poi_get_data], esi, tree1 + pop eax + stdcall capt_draw, eax + .end_caption: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp @b + @@: + ret +endp + +;description: +; функция рисования элемента на поле +align 4 +proc el_draw, h_elem:dword + pushad +;el_offs_nam + mov edi,[h_elem] + mov eax,[edi] ;coord x + mov ebx,[edi+4] ;coord y + + movzx edi,byte[edi+sp_offs_el_type] + imul edi,size_el_opt + add edi,el_opt_beg ;edi - указатель на структуру со свойствами элемента + + movzx ecx,byte[edi+el_offs_box_x] + movzx edx,byte[edi+el_offs_box_y] + dec ecx + dec edx + + push eax ebx + mov esi,[h_elem] + movzx esi,byte[esi+8] + push dword[edi+el_offs_col] + push ebx + push eax + stdcall move_rotate_n90, ecx,edx,esi + stdcall draw_scaled_rect, eax,ebx ;рисовани корпуса элемента + pop ebx eax + + ;*** алгоритм рисования ног *** + movzx esi,byte[zoom] + cmp esi,1 + jne .end_m1 + ;*** рисование ног при 1-м масштабе *** + ;входные ноги + mov esi,[h_elem] + stdcall el_get_leg_coords,esi,0 ;установка параметров 0-й ноги + add eax,[Cor_x] + add ebx,[Cor_y] + movzx esi,byte[esi+8] + stdcall move_rotate_n90, 1,0,esi + mov edx,el_offs_legs_inp + inc edx + @@: + stdcall [buf2d_set_pixel], buf_0, eax,ebx,dword[edi+el_offs_col] + movzx ecx,byte[edi+edx] + cmp ecx,0 + je @f + stdcall move_rotate_n90, 0,ecx,esi + inc edx + jmp @b + @@: + + ;выходные ноги + mov esi,[h_elem] + stdcall el_get_leg_coords,esi,(1 shl 16) ;установка параметров 0-й ноги + add eax,[Cor_x] ;для работы с buf2d_line + add ebx,[Cor_y] ;для работы с buf2d_line + movzx esi,byte[esi+8] + stdcall move_rotate_n90, -2,0,esi + mov edx,el_offs_legs_out + inc edx + @@: + push dword[edi+el_offs_col] + stdcall move_rotate_n90, 1,0,esi + push ebx + push eax + stdcall move_rotate_n90, -1,0,esi + ;stdcall draw_scaled_rect, eax,ebx + stdcall [buf2d_line], buf_0, eax,ebx + movzx ecx,byte[edi+edx] + cmp ecx,0 + je @f + stdcall move_rotate_n90, 0,ecx,esi + inc edx + jmp @b + @@: + + jmp .end_mn + .end_m1: + ;*** рисование ног при n-м масштабе *** + ;входные ноги + xor edx,edx + @@: + stdcall el_get_leg_coords,[h_elem],edx + mov ecx,eax + or ecx,ebx + jz @f + mov ecx,[h_elem] + movzx ecx,byte[ecx+8] + stdcall move_rotate_n90, 1,0,ecx + add eax,[Cor_x] + add ebx,[Cor_y] + imul eax,esi + imul ebx,esi + stdcall [buf2d_filled_rect_by_size], buf_0, eax,ebx,esi,esi, dword[edi+el_offs_col] + inc edx + jmp @b + @@: + + ;выходные ноги + mov edx,(1 shl 16) + @@: + stdcall el_get_leg_coords,[h_elem],edx + mov ecx,eax + or ecx,ebx + jz @f + mov ecx,[h_elem] + movzx ecx,byte[ecx+8] + + push dword[edi+el_offs_col] + stdcall move_rotate_n90, -2,0,ecx + push ebx + push eax + stdcall move_rotate_n90, 1,0,ecx + stdcall draw_scaled_rect, eax,ebx + + inc edx + jmp @b + @@: + .end_mn: + popad + ret +endp + +align 4 +proc capt_draw uses eax ebx edi esi, h_capt:dword + mov edi,[h_capt] + mov eax,[edi] ;coord x + mov ebx,[edi+4] ;coord y + add eax,[Cor_x] + add ebx,[Cor_y] + + movzx esi,byte[zoom] + cmp esi,1 + jle @f + imul eax,esi + imul ebx,esi + @@: + + add edi,capt_offs ;edi - указатель на полную подпись (с координатами) + call str_next_val + call str_next_val + ;call str_next_val + stdcall [buf2d_draw_text], buf_0, buf_font,edi,eax,ebx,color_caption ;рисуем строку с текстом + ret +endp + +;description: +; подфункция для рисования увеличенных прямоугольников на схеме +align 4 +proc draw_scaled_rect uses eax ebx ecx edx edi, x0:dword,y0:dword,x1:dword,y1:dword, color:dword + movzx edi,byte[zoom] + mov edx,[y1] + mov ecx,[x1] + mov ebx,[y0] + mov eax,[x0] + + cmp eax,ecx + jle @f + xchg eax,ecx + @@: + sub ecx,eax + cmp ebx,edx + jle @f + xchg ebx,edx + @@: + sub edx,ebx + + inc ecx + inc edx + + imul edx,edi + imul ecx,edi + add ebx,[Cor_y] + imul ebx,edi + add eax,[Cor_x] + imul eax,edi + + stdcall [buf2d_filled_rect_by_size], buf_0, eax,ebx,ecx,edx, dword[color] + ret +endp + +align 4 +proc pole_paint, pole:dword + pushad + + ;*** роисование рамки + mov eax,[Cor_x] + mov ebx,[Cor_y] + mov ecx,[shem_w] + mov edx,[shem_h] + movzx esi,byte[zoom] + cmp esi,1 + jle @f + imul eax,esi + imul ebx,esi + imul ecx,esi + imul edx,esi + @@: + dec eax + dec ebx + add ecx,2 + add edx,2 + stdcall [buf2d_rect_by_size], buf_0, eax,ebx, ecx,edx, color_border + + ;eax -> firstC + ;ebx -> i + ;ecx -> cell[pole_index[i]] + ;edx -> color + + mov edi,dword[pole] + mov eax,pole_index + cmp dword[eax],0 + je .no_draw + + mov eax,dword[eax] + mov ebx,1 + +;--- + @@: ;while(i pole_index[firstC] + ;ebx -> pole_index[i] + ;edi -> coord_x + ;esi -> coord_y + shl eax,2 + shl ebx,2 + add eax,pole_index + add ebx,pole_index + + cmp byte[zoom],2 + jge .zoom2 + @@: ;for(;i<=fristC;i++){ + get_cell_offset ecx,dword[ebx] +;... + mov edi,dword[Cor_x] + add edi,dword[ecx] ;+0 = .x + mov esi,dword[Cor_y] + add esi,dword[ecx+4] ;+4 = .y + movzx edx,byte[ecx+offs_cell_liv] + and edx,3 ;ограничение + shl edx,2 + add edx,shem_colors + stdcall [buf2d_set_pixel], buf_0, edi, esi, [edx] +;... + add ebx,4 + cmp ebx,eax + jle @b + + jmp .no_draw + .zoom2: + + @@: ;for(;i<=fristC;i++){ + get_cell_offset ecx,dword[ebx] + + movzx edx,byte[zoom] ;edx используется для внесения zoom в 4 байтное число + mov edi,dword[ecx] ;+0 = .x + add edi,dword[Cor_x] + imul edi,edx + mov esi,dword[ecx+4] ;+4 = .y + add esi,dword[Cor_y] + imul esi,edx + + movzx edx,byte[ecx+offs_cell_liv] + and edx,3 ;ограничение + shl edx,2 + add edx,shem_colors + + movzx ecx,byte[zoom] + ;;;dec ecx + stdcall [buf2d_filled_rect_by_size], buf_0, edi, esi, ecx, ecx, [edx] + add ebx,4 + cmp ebx,eax + jle @b + + .no_draw: + popad + call p_paint_elems + ret +endp + +;Сортировка ячеек поля, нужна для более быстрого поиска +align 4 +proc pole_sort uses eax edi, pole:dword + mov edi,dword[pole] + mov eax,pole_index + mov eax,dword[eax] ;firstC -> eax + stdcall pole_fl_sort, pole_index,eax ;сортируем все ячейки + mov pole_b_sort,eax ;ставим число отсортированных ячеек равное числу всех существующих ячеек + ret +endp + +;Сортировка вектора a[1..n] методом Флойда +;Элемент a[0] в сортировке не участвует +align 4 +proc pole_fl_sort uses eax ecx edx edi esi, a:dword, n:dword + mov ecx,dword[a] + ;Формировать исходное частично упорядоченное дерево + mov eax,dword[n] + shr eax,1 + @@: ;for(i=n>>1; i>=2; i--) + stdcall pole_fl_surface, ecx,eax,[n] ;(a,i,n) + dec eax + cmp eax,2 + jge @b + ;Выполнить процедуру всплытия Флойда для каждого поддерева + mov eax,dword[n] + @@: ;for(i=n; i>=2; i--){ + stdcall pole_fl_surface, ecx,1,eax ;(a,1,i) + ;Поместить найденный максимальный элемент в конец списка + mov edi,eax + shl edi,2 + add edi,ecx ;edi -> &a[i] + mov esi,dword[edi] ;w=a[i]; + mov edx,dword[ecx+4] + mov dword[edi],edx ;a[i]=a[1]; + mov dword[ecx+4],esi ;a[1]=w; + + dec eax + cmp eax,2 + jge @b + ret +endp + +;Процедура всплытия Флойда по дереву a[1..k] +align 4 +proc pole_fl_surface, a:dword, i:dword, k:dword +locals + copy dd ? +endl + pushad + ;edx -> ... + ;edi -> m + ;esi -> j + mov eax,dword[a] + mov ebx,dword[i] + mov ecx,dword[k] + + mov edx,ebx + shl edx,2 + add edx,eax + mov edx,dword[edx] + mov dword[copy],edx ;copy=a[i]; + mov edi,ebx + shl edi,1 ;m=i<<1; + .cycle_b: ;while (m<=k) { + cmp edi,ecx + jg .cycle_e + jne @f ;if (m==k) j=m; + mov esi,edi + jmp .else_e + @@: ;else if (pole_compare_cells_bm(a[m],a[m+1])) j=m; + mov edx,edi + shl edx,2 + add edx,eax + stdcall pole_compare_cells_bm, dword[edx],dword[edx+4] + cmp dl,0 + je @f + mov esi,edi + jmp .else_e + @@: ;else j=m+1; + mov esi,edi + inc esi + .else_e: + + ;if (pole_compare_cells_bm(a[j],copy)) { + mov edx,esi + shl edx,2 + add edx,eax + stdcall pole_compare_cells_bm, dword[edx],dword[copy] + cmp dl,0 + je .cycle_e ;} else break; //выход из цикла + + mov edx,esi + shl edx,2 + add edx,eax + push dword[edx] ;push a[j]; + mov edx,ebx + shl edx,2 + add edx,eax + pop dword[edx] ;a[i]=a[j]; + mov ebx,esi ;i=j; + mov edi,ebx + shl edi,1 ;m=i<<1; + + jmp .cycle_b + .cycle_e: + + ;значения многих регистров уже не важны т. к. конец функции + shl ebx,2 + add eax,ebx + mov edx,dword[copy] + mov dword[eax],edx ;a[i]=copy; + + popad + ret +endp +;-------------------------------------- + +align 4 +proc pole_draw_pok uses eax ebx ecx edx edi esi, pole:dword + ;mov edi,dword[pole] + + mov eax,4 ;рисование текста + mov ebx,325*65536+5 + mov ecx,[sc.work_text] + or ecx,0x80000000 ;or (1 shl 30) + mov edx,txt_zoom + ;mov edi,[sc.work] + int 0x40 + + add bx,9 + mov edx,txt_osob + int 0x40 + + add bx,9 + mov edx,txt_info + int 0x40 + + mov eax,47 + movzx ecx,byte[zoom] + mov ebx,(2 shl 16) + mov edx,(325+6*9)*65536+5 + mov esi,[sc.work_button_text] + or esi,(1 shl 30) + mov edi,[sc.work_button] + int 0x40 ;масштаб + + mov edi,dword[pole] + mov ecx,pole_index + mov ecx,[ecx] + mov edi,[sc.work_button] + mov ebx,(5 shl 16) + add edx,(6*0)*65536+9 + int 0x40 ;число точек + ret +endp + +align 4 +but_zoom_p: + cmp byte[zoom],16 + jge @f + pushad + ;вычисление сдвигов для поля, которые обеспечат центровку поля при увеличении масштаба + movzx ecx,byte[zoom] + xor edx,edx + mov eax,dword[buf_0.w] + shr eax,1 ;в eax половина ширины поля + mov ebx,eax ;делаем резервную копию eax + div ecx ;делим eax на текущий масштаб + xchg eax,ebx + xor edx,edx + inc ecx + div ecx ;делим eax на новый масштаб + sub ebx,eax ;вычисляется сдвиг поля который обеспечит центровку поля + sub dword[Cor_x],ebx ;сдвигаем поле зрения по оси x + xor ecx,ecx + mov cl,byte[zoom] + xor edx,edx + mov eax,dword[buf_0.h] + shr eax,1 + mov ebx,eax + div ecx + xchg eax,ebx + xor edx,edx + inc ecx + div ecx + sub ebx,eax + sub dword[Cor_y],ebx ;сдвигаем поле зрения по оси y + + inc byte[zoom] + stdcall pole_draw_pok, pole + popad + + .buf_clear: + call redraw_pole + @@: + ret + +align 4 +but_zoom_m: + cmp byte[zoom],1 + jle @f + pushad + ;вычисление сдвигов для поля, которые обеспечат центровку поля при уменьшении масштаба + movzx ecx,byte[zoom] + xor edx,edx + mov eax,dword[buf_0.w] + shr eax,1 ;в eax половина ширины поля + mov ebx,eax ;делаем резервную копию eax + div ecx ;делим eax на текущий масштаб + xchg eax,ebx + xor edx,edx + dec ecx + div ecx ;делим eax на новый масштаб + sub ebx,eax ;вычисляется сдвиг поля который обеспечит центровку поля + sub dword[Cor_x],ebx ;сдвигаем поле зрения по оси x + xor ecx,ecx + mov cl,byte[zoom] + xor edx,edx + mov eax,dword[buf_0.h] + shr eax,1 + mov ebx,eax + div ecx + xchg eax,ebx + xor edx,edx + dec ecx + div ecx + sub ebx,eax + sub dword[Cor_y],ebx ;сдвигаем поле зрения по оси y + + dec byte[zoom] + stdcall pole_draw_pok, pole + popad + + .buf_clear: + call redraw_pole + @@: + ret + +;центровка схемы по центру экрана +align 4 +proc but_center uses eax ebx ecx edx + movzx ecx,byte[zoom] + cmp ecx,1 + jle .end_m_1 + mov eax,[buf_0.w] + mov ebx,[shem_w] + imul ebx,ecx + + sub eax,ebx + xor edx,edx + shl ecx,1 + cmp eax,0 + jge @f + neg eax + inc eax + div ecx + neg eax + inc eax + jmp .set_x + @@: + div ecx + .set_x: + mov [Cor_x],eax + mov eax,[buf_0.h] + mov ebx,[shem_h] + shr ecx,1 + imul ebx,ecx + sub eax,ebx + xor edx,edx + shl ecx,1 + cmp eax,0 + jge @f + neg eax + inc eax + div ecx + neg eax + inc eax + jmp .set_y + @@: + div ecx + .set_y: + mov [Cor_y],eax + jmp .end_m_n + .end_m_1: + mov eax,[buf_0.w] + sub eax,[shem_w] + shr eax,1 + bt eax,30 + jnc @f + bts eax,31 + @@: + mov [Cor_x],eax + mov eax,[buf_0.h] + sub eax,[shem_h] + shr eax,1 + bt eax,30 + jnc @f + bts eax,31 + @@: + mov [Cor_y],eax + .end_m_n: + call redraw_pole + ret +endp + +align 4 +but_pole_up: + push eax ecx edx + mov eax,dword[buf_0.h] + shr eax,2 + movzx ecx,byte[zoom] + cmp cx,2 + jl @f ;деление на величину zoom + xor edx,edx + div ecx + @@: + add dword[Cor_y],eax + pop edx ecx eax + call redraw_pole + ret + +align 4 +but_pole_dn: + push eax ecx edx + mov eax,dword[buf_0.h] + shr eax,2 + xor ecx,ecx + mov cl,byte[zoom] + cmp cx,2 + jl @f ;деление на величину zoom + xor edx,edx + div ecx + @@: + sub dword[Cor_y],eax + pop edx ecx eax + call redraw_pole + ret + +align 4 +but_pole_left: + push eax ecx edx + mov eax,dword[buf_0.w] + shr eax,2 + xor ecx,ecx + mov cl,byte[zoom] + cmp cx,2 + jl @f ;деление на величину zoom + xor edx,edx + div ecx + @@: + add dword[Cor_x],eax + pop edx ecx eax + call redraw_pole + ret + +align 4 +but_pole_right: + push eax ecx edx + mov eax,dword[buf_0.w] + shr eax,2 + xor ecx,ecx + mov cl,byte[zoom] + cmp cx,2 + jl @f ;деление на величину zoom + xor edx,edx + div ecx + @@: + sub dword[Cor_x],eax + pop edx ecx eax + call redraw_pole + ret + +;output: +; edx - count created points +align 4 +proc shem_create_line uses eax ebx ecx edi, x:dword, y:dword, opt:dword + mov edi,pole + xor edx,edx + + mov ebx,[x] + mov ecx,[y] + bt dword[opt],0 + jnc @f + .line_lr: + inc ebx + cmp ebx,[shem_w] + jge @f + stdcall pole_cell_find, pole,ebx,ecx + cmp eax,0 + je .u0 + imul eax,sizeof.Cell + add eax,pole_data + cmp byte[eax+offs_cell_liv],1 + jne @f + .u0: + stdcall pole_cell_creat, pole,ebx,ecx,1 + inc edx + jmp .line_lr + @@: + + mov ebx,[x] + ;mov ecx,[y] + bt dword[opt],2 + jnc @f + .line_rl: + dec ebx + cmp ebx,0 + jl @f + stdcall pole_cell_find, pole,ebx,ecx + cmp eax,0 + je .u1 + imul eax,sizeof.Cell + add eax,pole_data + cmp byte[eax+offs_cell_liv],1 + jne @f + .u1: + stdcall pole_cell_creat, pole,ebx,ecx,1 + inc edx + jmp .line_rl + @@: + + mov ebx,[x] + mov ecx,[y] + bt dword[opt],3 + jnc @f + .line_du: + dec ecx + cmp ecx,0 + jl @f + stdcall pole_cell_find, pole,ebx,ecx + cmp eax,0 + je .u2 + imul eax,sizeof.Cell + add eax,pole_data + cmp byte[eax+offs_cell_liv],1 + jne @f + .u2: + stdcall pole_cell_creat, pole,ebx,ecx,1 + inc edx + jmp .line_du + @@: + + ;mov ebx,[x] + mov ecx,[y] + bt dword[opt],1 + jnc @f + .line_ud: + inc ecx + cmp ecx,[shem_h] + jge @f + stdcall pole_cell_find, pole,ebx,ecx + cmp eax,0 + je .u3 + imul eax,sizeof.Cell + add eax,pole_data + cmp byte[eax+offs_cell_liv],1 + jne @f + .u3: + stdcall pole_cell_creat, pole,ebx,ecx,1 + inc edx + jmp .line_ud + @@: + + ret +endp + +align 4 +redraw_pole: + stdcall [buf2d_clear], buf_0, [buf_0.color] + stdcall pole_paint, pole + stdcall [buf2d_draw], buf_0 + ret diff --git a/programs/media/log_el/trunk/le_signal.inc b/programs/media/log_el/trunk/le_signal.inc new file mode 100644 index 0000000000..9846c7a7e1 --- /dev/null +++ b/programs/media/log_el/trunk/le_signal.inc @@ -0,0 +1 @@ +; ; функци для создания сигналов ; ;color_s0 - сигнал 0 ;color_s1 - сигнал 1 ;color_s2 - точка без пересечения ;color_s3 - временное значение для сохранения size_sign equ 10 sign_x equ 0 sign_y equ 4 sign_a equ 8 sign_z equ 9 sign_data dd 0 ;указатель на массив со структурами сигналов sign_count dd 0 ;текущ. кол. сигналов sign_max dd 0 ;макс. кол. сигналов align 4 proc sign_init uses eax ecx, m_count:dword mov ecx,[m_count] mov [sign_max],ecx imul ecx,size_sign stdcall mem.Alloc, ecx mov [sign_data],eax call sign_clear ret endp ;очистка всех сигналов align 4 proc sign_clear uses eax ecx edi xor eax,eax mov dword[time],eax mov dword[sign_count],eax mov ecx,[sign_max] imul ecx,size_sign mov edi,[sign_data] cld rep stosb ret endp ;очистка одного сигнала align 4 proc sign_clear_one uses ecx edi esi, p_sign:dword mov ecx,size_sign mov esi,[sign_count] dec esi imul esi,ecx add esi,[sign_data] mov edi,[p_sign] cld rep movsb dec dword[sign_count] ret endp ;освобождение памяти занятой массивами для сигналов align 4 proc sign_delete stdcall mem.Free, dword[sign_data] ret endp ;функция для перемещения сигналов align 4 proc sign_move pushad mov ecx,[sign_count] cmp ecx,1 jl .end_f mov esi,ecx dec esi imul esi,size_sign add esi,[sign_data] ;cld .cycle_beg: mov eax,[esi+sign_x] mov ebx,[esi+sign_y] movzx edi,byte[esi+sign_a] movzx edx,byte[esi+sign_z] cmp edx,0 je @f or edi,0x100 @@: ;пытаемся создать разветвление сигнала stdcall move_rotate_n90, 0,-1,edi inc edi stdcall sign_creat,eax,ebx,edi stdcall move_rotate_n90, -2,0,edi add edi,2 stdcall sign_creat,eax,ebx,edi mov eax,[esi+sign_x] mov ebx,[esi+sign_y] inc edi mov eax,[esi+sign_x] mov ebx,[esi+sign_y] shl edx,2 add edx,shem_colors stdcall draw_signal_rect, eax,ebx, dword[edx] ;рисуем сигнал на поле .move_1: stdcall move_rotate_x_n90, 1,edi mov edi,eax stdcall pole_cell_find, pole, edi,ebx cmp eax,0 jne @f stdcall sign_clear_one,esi ;удаление сигнала, если он зашел в тупик jmp .cycle_next @@: imul eax,sizeof.Cell add eax,dword[cell] movzx edx,byte[esi+sign_z] cmp byte[eax+offs_cell_liv],2 jne @f ;если стоит пересечение проводов mov eax,edi movzx edi,byte[esi+sign_a] jmp .move_1 @@: cmp byte[eax+offs_cell_liv],dl jne @f stdcall sign_clear_one,esi ;удаление сигнала, если он попал на область закрашеную данным цветом jmp .cycle_next @@: mov byte[eax+offs_cell_liv],dl ;ставим на поле знак сигнала mov [esi+sign_x],edi mov [esi+sign_y],ebx .cycle_next: sub esi,size_sign ;loop .cycle_beg dec ecx jnz .cycle_beg stdcall [buf2d_draw], buf_0 .end_f: popad ret endp align 4 proc sign_creat uses eax ebx ecx edx edi esi, coord_x:dword, coord_y:dword, opt:dword mov edi,[sign_count] cmp edi,[sign_max] jge .end_f mov esi,[coord_x] mov ebx,[coord_y] .found: stdcall pole_cell_find, pole, esi,ebx cmp eax,0 je .end_f mov ecx,[opt] get_cell_offset edx,eax cmp byte[edx+offs_cell_liv],2 jne @f mov eax,esi stdcall move_rotate_x_n90,1,ecx mov esi,eax jmp .found @@: cmp ch,byte[edx+offs_cell_liv] ;проверяем на поле знак сигнала je .end_f ;доделать установку метки в провод, что-бы избежать дублирования сигналов на широких проводах imul edi,size_sign add edi,[sign_data] mov [edi+sign_x],esi mov [edi+sign_y],ebx mov [edi+sign_a],cl mov [edi+sign_z],ch inc dword[sign_count] mov [edx+offs_cell_liv],ch ;ставим на поле знак сигнала ;stdcall draw_signal_rect, [coord_x],[coord_y], 0x800080 .end_f: ret endp ;description: ; подфункция для рисования сигналов на схеме align 4 proc draw_signal_rect uses eax ebx edi, x0:dword,y0:dword, color:dword movzx edi,byte[zoom] mov ebx,[y0] mov eax,[x0] add ebx,[Cor_y] imul ebx,edi add eax,[Cor_x] imul eax,edi stdcall [buf2d_filled_rect_by_size], buf_0, eax,ebx,edi,edi, dword[color] ret endp align 4 proc sign_from_elems locals s_inp dd ? n_leg dd ? endl pushad mov edi,pole ;*** создание сигналов из логических элементов *** stdcall dword[tl_node_poi_get_info],0,tree1 pop esi @@: cmp esi,0 je @f cmp word[esi],el_icon_elems ;получение через esi тип иконки jne .end_add_p3 stdcall [tl_node_poi_get_data], esi, tree1 pop ecx ;*** проверка сигналов на входных ногах mov dword[s_inp],0 mov dword[n_leg],0 ;word[n_leg] - номер входной ноги mov edx,1 .add_p1: stdcall el_get_leg_coords, ecx,dword[n_leg] test eax,eax jnz .get1 test ebx,ebx jnz .get1 jmp .end_add_p1 ;если координаты не взялись (eax=0 && ebx=0), выход из цикла .get1: stdcall pole_cell_find, pole, eax,ebx cmp eax,0 je .get2 imul eax,sizeof.Cell add eax,pole_data cmp byte[eax+offs_cell_liv],1 jne .get2 or dword[s_inp],edx .get2: inc dword[n_leg] shl edx,1 jmp .add_p1 .end_add_p1: ;*** определяем выходную комбинацию битов на основе заданной таблицы работы элемента movzx eax,byte[ecx+sp_offs_el_type] imul eax,size_el_opt add eax,el_opt_beg+el_offs_table mov ebx,[eax] add ebx,dword[s_inp] mov ebx,[ebx] mov dword[s_inp],ebx ;*** установка сигналов на выходных ногах mov dword[n_leg],(1 shl 16) ;word[n_leg] - номер выходной ноги .add_p2: stdcall el_get_leg_coords, ecx,dword[n_leg] test eax,eax jnz .get3 test ebx,ebx jnz .get3 jmp .end_add_p2 ;если координаты не взялись (eax=0 && ebx=0), выход из цикла .get3: movzx edx,byte[ecx+8] ;dl - направление сигнала bt dword[s_inp],0 jnc .set1 or edx,0x100 ;dh - значение сигнала 0 или 1 .set1: stdcall sign_creat,eax,ebx,edx inc dword[n_leg] shr dword[s_inp],1 jmp .add_p2 .end_add_p2: .end_add_p3: stdcall dword[tl_node_poi_get_next_info],esi,tree1 pop esi ;переходим к следущему узлу jmp @b @@: popad ret endp ;создание сигналов на основе подписей align 4 proc sign_from_captions pushad mov edi,pole ;*** создание сигналов из подписей *** stdcall dword[tl_node_poi_get_info],0,tree1 pop esi @@: cmp esi,0 je @f cmp word[esi],el_icon_captions ;получение через esi тип иконки jne .end_add_p3 stdcall [tl_node_poi_get_data], esi, tree1 pop ecx cmp byte[ecx+8],'n' je .end_add_p3 ;если надпись информационная, то не создаем сигнала xor edx,edx ;*** определяем выходой бит, ;который был установлен в but_set_0 и but_set_1 cmp byte[ecx+8],'o' jne .end_add_p1 or edx,0x100 .end_add_p1: stdcall sign_creat,dword[ecx],dword[ecx+4],edx .end_add_p3: stdcall dword[tl_node_poi_get_next_info],esi,tree1 pop esi ;переходим к следущему узлу jmp @b @@: popad ret endp \ No newline at end of file diff --git a/programs/media/log_el/trunk/log_el.asm b/programs/media/log_el/trunk/log_el.asm new file mode 100644 index 0000000000..b3652fe52b --- /dev/null +++ b/programs/media/log_el/trunk/log_el.asm @@ -0,0 +1,2140 @@ +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x1 + dd start + dd i_end ;размер приложения + dd mem + dd stacktop + dd 0 + dd sys_path + +color_border equ 0xff0000 +color_s0 equ 0xff ;сигнал 0 +color_s1 equ 0xffffff ;сигнал 1 +color_s2 equ 0xff00 ;точка без пересечения +color_s3 equ 0xff0000 ;временное значение для сохранения +color_caption equ 0x808080 + +;номара иконок: +el_icon_group equ 0 ;групповая +el_icon_points equ 1 ;точки +el_icon_sub_points equ 2 ;изоляции +el_icon_elems equ 3 ;элемента +el_icon_captions equ 4 ;подписи + +size_el_opt equ 34 ;размер структуры с опциями элемента +el_offs_nam equ 0 ;смещение для начала имени элемента +el_offs_col equ 16 ;цвет элемента +el_offs_box_x equ 20 ;ширина коробки элемента +el_offs_box_y equ 21 ;высота коробки элемента +el_offs_table equ 22 ;указатель на таблицу работы элемента +el_offs_legs_inp equ 26 ;смещение на описание входных ног +el_offs_legs_out equ 30 ;смещение на описание выходных ног + +sp_offs_el_type equ 9 ;смещение для типа элемента в списке + +points_max equ 1000 +capt_offs equ 10 ;смещение для начала подписи в листе tree1 + +include '../../../macros.inc' +include '../../../proc32.inc' +include '../../../develop/libraries/box_lib/load_lib.mac' +include '../../../develop/libraries/box_lib/trunk/box_lib.mac' +include 'mem.inc' +include 'dll.inc' +include 'le_pole.inc' +include 'le_signal.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +caption db 'Логические элементы 15.03.12',0 ;подпись окна + +panel_0_coord_top equ 5 ;верхняя координата 0-го ряда панели инструментов +panel_1_coord_top equ 35 +panel_2_coord_top equ 60 +panel_3_coord_top equ 85 + +align 4 +proc move_rotate_x_n90 uses ecx edi, d_x:dword, angle:dword + mov edi,[angle] ;угол поворота / 90 (от 0-3) + and edi,3 + shl edi,4 ;edi*=16 + add edi,mcs + + mov ecx,[d_x] + imul ecx,dword[edi] + add eax,ecx + + mov ecx,[d_x] + imul ecx,dword[edi+8] + add ebx,ecx + + ret +endp + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + db ? + FileName dd ? +ends + +macro elOpt nam,col,box_x,box_y,table, il0, il1, il2, ol0, ol1, ol2 +{ + @@: db nam + rb @b+16-$ + dd col + db box_x + db box_y + dd table+0 ;+el_offs_table +;+26 + db il0+0 ;0-я входная нога + db il1+0 ;1-я входная нога + db il2+0 + db 0 +;+30 + db ol0+0 + db ol1+0 + db ol2+0 + db 0 +} + +align 4 +el_opt_beg: +elOpt 'or[2]', 0xff00ff,5,5,tbl_or, 1,2,, 2 +elOpt 'or[3]', 0xff00ff,5,7,tbl_or, 1,2,2, 3 +elOpt 'and[2]',0xffff00,5,5,tbl_and.2, 1,2,, 2 +elOpt 'and[3]',0xffff00,5,7,tbl_and.3, 1,2,2, 3 +elOpt 'not', 0xffff,3,3,tbl_not, 1,,, 1 +elOpt 'xor', 0x8000ff,5,5,tbl_xor, 1,2,, 2 +elOpt 'sm[1]', 0x8080ff,7,7,tbl_sm, 1,2,2, 1,4 +.end: +elOpt '???', 0x808080,3,3,tbl_and.3, 1,,, 1 ;не опознанный элемент + +;таблицы по которым задаются правила работы элементов +align 4 +tbl_or db 0,1,1,1, 1,1,1,1 ;or2, or3 +tbl_and: +.3: db 0,0,0,0 +.2: db 0,0,0,1 +tbl_xor db 0,1,1,0 +tbl_sm db 0,2,2,1, 2,1,1,3 +tbl_not db 1,0 ;not + +time dd 0 +tim_ch db 0 +pen_mode dd 0 ;режим рисования провода + +txt_set_0 db '0',0 +txt_set_1 db '1',0 +txt_mov_l db 27,0 ;<- +txt_mov_r db 26,0 ;-> + +txt_size db 'size',0 +txt_elements db 'elements',0 +txt_points db 'points',0 +txt_sub_points db 'subpoints',0 +txt_captions db 'captions',0 + +;матрица косинусов и синусов, используемая для поворотов сигналов и элементов +align 4 +mcs dd 1, 0, 0, 1,\ + 0, 1,-1, 0,\ + -1, 0, 0,-1,\ + 0,-1, 1, 0 + +run_file_70 FileInfoBlock +image_data dd 0 ;указатель на временную память. для нужен преобразования изображения + +IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 +IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*15 +image_data_toolbar dd 0 + +TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;размер bmp файла с системными иконками +icon_tl_sys dd 0 ;указатель на память для хранения системных иконок +TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*5+54 ;размер bmp файла с иконками объектов +icon_toolbar dd 0 ;указатель на память для хранения иконок объектов + +IMAGE_FONT_SIZE equ 128*144*3 +image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0x0 + else + copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,70 ;70-я функция работа с файлами + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall dword[img_decode], dword[buf],ebx,0 + mov dword[image_data],eax + ;преобразуем изображение к формату rgb + stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + ;удаляем временный буфер image_data + stdcall dword[img_destroy], dword[image_data] + @@: +} + + + +align 4 +start: + load_libraries l_libs_start,l_libs_end + ;проверка на сколько удачно загузилась библиотека + mov ebp,lib_7 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mcall 48,3,sc,sizeof.system_colors + mcall 40,0x27 + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + stdcall [buf2d_create], buf_0 ;создание буфера + load_image_file 'toolbar.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE + + stdcall pole_init, pole + stdcall dword[tl_data_init], tree1 + + ;системные иконки 16*16 для tree_list + load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE + ;если изображение не открылось, то в icon_tl_sys будут + ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img_sys],eax + + load_image_file 'objects.png', icon_toolbar,TOOLBAR_ICON_BMP_SIZE + mov eax,dword[icon_toolbar] + mov dword[tree1.data_img],eax + + load_image_file 'font6x9.bmp', image_data_gray,IMAGE_FONT_SIZE + stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;создаем буфер + stdcall mem.Free,[image_data_gray] ;освобождаем память + + stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_font + + stdcall sign_init, 3000 + + mcall 26,9 + mov [last_time],eax + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 26,9 + mov ebx,[last_time] + add ebx,10 ;задержка + cmp ebx,eax + jge @f + mov ebx,eax + @@: + sub ebx,eax + ;cmp ebx,10 ;задержка + ;ja timer_funct + ;test ebx,ebx + ;jz timer_funct + mcall 23 + cmp eax,0 + je timer_funct + + cmp al,1 + jz red_win + cmp al,EV_KEY + jz key + cmp al,3 + jz button + cmp al,EV_MOUSE + jne @f + call mouse + @@: + jmp still + +align 4 +timer_funct: + pushad + mcall 26,9 + mov [last_time],eax + + cmp byte[tim_ch],0 + je @f + inc dword[time] + call sign_move + mov eax,[time] + and eax,11b ;кратность 4-м + jnz @f + call sign_from_elems + call sign_from_captions + @@: + + popad + jmp still + +align 4 +mouse: + stdcall [tl_mouse], tree1 + + push eax ebx ecx edx + mcall 37,2 ;нажатые кнопки мыши + bt eax,0 ;левая кнопка нажата? + jnc .end_buf_wnd + + mcall 37,1 ;eax = (x shl 16) + y + cmp ax,word[buf_0.t] + jl .end_buf_wnd ;не попали в окно буфера по оси y + + mov ebx,eax + shr ebx,16 + cmp bx,word[buf_0.l] + jl .end_buf_wnd ;не попали в окно буфера по оси x + + and eax,0xffff ;оставляем координату y + sub ax,word[buf_0.t] + sub bx,word[buf_0.l] + ;*** деление на zoom + movzx ecx,byte[zoom] + xor edx,edx + div ecx + xchg eax,ebx ;ebx делим на ecx + xor edx,edx + div ecx + + sub eax,[Cor_x] + sub ebx,[Cor_y] + + ;*** проверка на попадение в схему + bt eax,31 + jc .end_buf_wnd + bt ebx,31 + jc .end_buf_wnd + cmp eax,[shem_w] + jge .end_buf_wnd + cmp ebx,[shem_h] + jge .end_buf_wnd + + cmp byte[pen_mode],1 + jne @f + ;режим рисования провода + stdcall pole_cell_creat, pole,eax,ebx,0 + ;ничего не убралось redraw_pole не подходит, т. к. чистить поле не нужно + stdcall pole_paint, pole + stdcall [buf2d_draw], buf_0 + ;stdcall but_test_pole, pole + jmp .end_buf_wnd + @@: + cmp byte[pen_mode],2 + jne @f + ;режим рисования изоляции для провода + stdcall pole_cell_creat, pole,eax,ebx,2 + stdcall pole_paint, pole + stdcall [buf2d_draw], buf_0 + ;stdcall but_test_pole, pole + jmp .end_buf_wnd + @@: + cmp byte[pen_mode],3 + jne @f + ;режим стирания провода + stdcall pole_cell_delete, pole,eax,ebx + call redraw_pole + ;stdcall but_test_pole, pole + jmp .end_buf_wnd + @@: + + .end_buf_wnd: + pop edx ecx ebx eax + ret + +align 4 +draw_window: +pushad + mcall 12,1 + + ; *** рисование главного окна (выполняется 1 раз при запуске) *** + xor eax,eax + mov ebx,(20 shl 16)+520 + mov ecx,(20 shl 16)+415 + mov edx,[sc.work] + or edx,(3 shl 24)+0x10000000+0x20000000 + mov edi,caption + int 0x40 + + ; *** создание кнопок на панель *** + mov eax,8 + mov ebx,(5 shl 16)+20 + mov ecx,(panel_0_coord_top shl 16)+20 + mov edx,3 + mov esi,[sc.work_button] + int 0x40 + + mov ebx,(30 shl 16)+20 + mov edx,4 + int 0x40 + + mov ebx,(55 shl 16)+20 + mov edx,5 + int 0x40 + + mov ebx,(85 shl 16)+20 + mov edx,6 + int 0x40 + + mov ebx,(110 shl 16)+20 + mov edx,7 + int 0x40 + + mov ebx,(135 shl 16)+20 + mov edx,8 + int 0x40 + + mov ebx,(160 shl 16)+20 + mov edx,9 + int 0x40 + + mov ebx,(185 shl 16)+20 + mov edx,10 + int 0x40 + + mov ebx,(210 shl 16)+20 + mov edx,11 + int 0x40 + + mov ebx,(235 shl 16)+20 + mov edx,12 + int 0x40 + + mov ebx,(265 shl 16)+20 + mov edx,13 + int 0x40 + + ; *** рисование иконок на кнопках *** + mov eax,7 + mov ebx,[image_data_toolbar] + mov ecx,(16 shl 16)+16 + mov edx,(7 shl 16)+panel_0_coord_top+2 ;icon new + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon open + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon save + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(30 shl 16) ;+ + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;- + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ; + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;m + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;m + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;m + int 0x40 + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;m + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(30 shl 16) ;center + int 0x40 + + ; *** рисование буфера *** + stdcall [buf2d_draw], buf_0 + mov dword[wScrObj.all_redraw],1 + stdcall [tl_draw], tree1 + stdcall pole_draw_pok, pole + + ; *** создание кнопок установки сигналов set_0 и set_1 *** + mov eax,8 + mov ebx,(5 shl 16)+20 + mov ecx,(panel_1_coord_top shl 16)+20 + mov edx,20 + mov esi,[sc.work_button] + int 0x40 + + add ebx,25 shl 16 + mov edx,21 + int 0x40 + + add ebx,30 shl 16 + mov edx,22 + int 0x40 + + add ebx,25 shl 16 + mov edx,23 + int 0x40 + + add ebx,25 shl 16 + mov edx,24 + int 0x40 + + add ebx,25 shl 16 + mov edx,25 + int 0x40 + + mov eax,4 ;рисование текста + mov ebx,(10 shl 16)+panel_1_coord_top+5 + mov ecx,[sc.work_text] + or ecx,0x80000000 ;or (1 shl 30) + mov edx,txt_set_0 + ;mov edi,[sc.work] + int 0x40 + + add ebx,25 shl 16 + mov edx,txt_set_1 + int 0x40 + + add ebx,35 shl 16 + mov edx,txt_mov_l + int 0x40 + + add ebx,25 shl 16 + mov edx,txt_mov_r + int 0x40 + + ; *** создание кнопок рисования провода *** + mov eax,8 + mov ebx,(5 shl 16)+20 + mov ecx,(panel_2_coord_top shl 16)+20 + mov edx,30 + mov esi,[sc.work_button] + int 0x40 + + add ebx,25 shl 16 + mov edx,31 + int 0x40 + + add ebx,25 shl 16 + mov edx,32 + int 0x40 + + add ebx,25 shl 16 + mov edx,33 + int 0x40 + + ; *** рисование иконок на кнопках *** + mov eax,7 + mov ebx,[image_data_toolbar] + mov ecx,(16 shl 16)+16 + mov edx,(7 shl 16)+panel_2_coord_top+2 ;иконка стрела + + add ebx,IMAGE_TOOLBAR_ICON_SIZE*11 + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon pen 1 + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon pen 2 + int 0x40 + + add ebx,IMAGE_TOOLBAR_ICON_SIZE + add edx,(25 shl 16) ;icon pen 3 + int 0x40 + + mcall 12,2 +popad + ret + +align 4 +key: + mcall 2 + stdcall [tl_key], dword tree1 + jmp still + + +align 4 +button: + mcall 17 + cmp ah,3 + jne @f + call but_new_file + @@: + cmp ah,4 + jne @f + call but_open_file + @@: + cmp ah,5 + jne @f + call but_save_file + @@: + cmp ah,6 + jne @f + call but_run_stop + @@: + cmp ah,7 + jne @f + call but_zoom_p + @@: + cmp ah,8 + jne @f + call but_zoom_m + @@: + cmp ah,9 + jne @f + call but_pole_left + @@: + cmp ah,10 + jne @f + call but_pole_right + @@: + cmp ah,11 + jne @f + call but_pole_up + @@: + cmp ah,12 + jne @f + call but_pole_dn + @@: + cmp ah,13 + jne @f + call but_center + @@: + cmp ah,20 + jne @f + call but_set_0 + @@: + cmp ah,21 + jne @f + call but_set_1 + @@: + cmp ah,22 + jne @f + call but_mov_l + @@: + cmp ah,23 + jne @f + call but_mov_r + @@: + cmp ah,24 + jne @f + call but_mov_u + @@: + cmp ah,25 + jne @f + call but_mov_d + @@: + cmp ah,30 + jne @f + call but_set_none + @@: + cmp ah,31 + jne @f + call but_set_pen_1 + @@: + cmp ah,32 + jne @f + call but_set_pen_2 + @@: + cmp ah,33 + jne @f + call but_set_pen_3 + @@: + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 + stdcall [buf2d_delete],buf_font + stdcall mem.Free,[image_data_toolbar] + stdcall pole_delete, pole + call sign_delete + stdcall [tl_data_clear], tree1 + mcall -1 + + +align 4 +but_new_file: + stdcall pole_clear, pole + call redraw_pole + ret + +align 4 +f_size dd 0 ;размер открываемого файла +shem_w dd 192 ;ширина схемы +shem_h dd 128 ;высота схемы +shem_points dd 0 ;колличество узлов на схеме +shem_sub_points dd 0 ;колличество изолированных узлов на схеме +shem_elems dd 0 ;колличество элементов на схеме +shem_captions dd 0 +shem_colors: + dd color_s0, color_s1, color_s2, color_s3 + +align 4 +open_file_lif: + rb 2*4096 ;область для открытия файлов +.end: + +align 4 +but_open_file: + pushad + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],0 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_open_file + ;код при удачном открытии диалога + + mov eax,70 ;70-я функция работа с файлами + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], open_file_lif.end-open_file_lif + m2m [run_file_70.Buffer], open_file_lif + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mov ebx,run_file_70 + int 0x40 ;загружаем файл + cmp ebx,0xffffffff + je .end_open_file + + mov dword[f_size],ebx + add ebx,open_file_lif + mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом + mcall 71,1,openfile_path + ;--- + + ;задаем минимальные значения, на случай если в файле будут некоректные размеры + mov dword[shem_w],5 + mov dword[shem_h],5 + + mov esi,txt_size + call str_analiz_r + cmp edi,0 + je @f + stdcall str_len,esi + add edi,eax + stdcall conv_str_to_int,edi + cmp eax,5 + jl @f ;ошибка в файле (на .end_open_file не переходим, пытаемся прочитать другую информацию) + mov dword[shem_w],eax + + call str_next_val + stdcall conv_str_to_int,edi + cmp eax,5 + jl @f ;ошибка в файле + mov dword[shem_h],eax + @@: + + stdcall [tl_info_clear],tree1 + + ;*** добавление в список логических элементов *** + stdcall [tl_node_add], txt_elements-capt_offs,(el_icon_group shl 16), tree1 + stdcall [tl_cur_next], tree1 + + mov esi,txt_elements + call str_analiz_r + cmp edi,0 + je .end_elems + stdcall str_len,esi + add edi,eax + stdcall conv_str_to_int,edi + cmp eax,0 + jle .end_elems ;если число элементов = 0 + mov [shem_elems],eax + mov ecx,eax + .cycle_elem: + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf],eax ;координата x + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf+4],eax ;координата y + call str_next_val + stdcall conv_str_to_int,edi + mov byte[txt_buf+8],al ;направление + call str_next_val + ;по адресу edi название элемента + stdcall el_get_name, edi + mov byte[txt_buf+sp_offs_el_type],al ;тип элемента + + stdcall make_list_capts,txt_buf,edi + + stdcall [tl_node_add], txt_buf,(el_icon_elems shl 16)+1, tree1 + stdcall [tl_cur_next], tree1 + dec ecx + jnz .cycle_elem + .end_elems: + + ;*** добавление в список текстовых подписей *** + stdcall [tl_node_add], txt_captions-capt_offs,(el_icon_group shl 16), tree1 + stdcall [tl_cur_next], tree1 + + mov esi,txt_captions + call str_analiz_r + cmp edi,0 + je .end_captions + stdcall str_len,esi + add edi,eax + stdcall conv_str_to_int,edi + cmp eax,0 + jle .end_captions ;если число подписей = 0 + mov [shem_captions],eax + mov ecx,eax + .cycle_captions: + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf],eax ;координата x + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf+4],eax ;координата y + call str_next_val + mov al,byte[edi] + mov byte[txt_buf+8],al ;вид подписи ('z' - сигнал с 0, 'o' - сигнал с 1, 'n' - нет сигнала) + call str_next_val + + stdcall make_list_capts,txt_buf,edi + + stdcall [tl_node_add], txt_buf,(el_icon_captions shl 16)+1, tree1 + stdcall [tl_cur_next], tree1 + dec ecx + jnz .cycle_captions + .end_captions: + + mov byte[txt_buf+capt_offs],0 ;обнуление подписей + + ;*** добавление в список ключевых точек *** + stdcall [tl_node_add], txt_points-capt_offs,(el_icon_group shl 16), tree1 + stdcall [tl_cur_next], tree1 + + mov dword[shem_points],0 + mov esi,txt_points + call str_analiz_r + cmp edi,0 + je .end_points ;если описания точек нет в файле + stdcall str_len,esi + add edi,eax + stdcall conv_str_to_int,edi + cmp eax,0 + jle .end_points ;если число точек = 0 + mov [shem_points],eax + mov ecx,eax + .cycle_poi: + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf],eax ;координата x + call str_next_val + stdcall conv_str_to_int,edi + mov dword[txt_buf+4],eax ;координата y + call str_next_val + stdcall conv_str_to_int,edi + mov byte[txt_buf+8],al ;направления + +; stdcall make_list_capts,txt_buf,0 + + stdcall [tl_node_add], txt_buf,(el_icon_points shl 16)+1, tree1 + stdcall [tl_cur_next], tree1 + dec ecx + jnz .cycle_poi + .end_points: + + stdcall [tl_cur_beg], tree1 + + ;*** добавление точечных объектов *** + stdcall pole_clear, pole + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + @@: + cmp esi,0 + je @f + cmp word[esi],el_icon_points ;получение через esi тип иконки, и пропуск не точечных объектов + jne .end_add_p0 + stdcall [tl_node_poi_get_data], esi, tree1 + pop eax + stdcall pole_cell_creat, pole,dword[eax],dword[eax+4],0 + .end_add_p0: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp @b + @@: + stdcall pole_sort, pole + + ;*** добавление точечных объектов (на основе логических элементов) *** + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + @@: + cmp esi,0 + je @f + cmp word[esi],el_icon_elems ;получение через esi тип иконки + jne .end_add_p3 + stdcall [tl_node_poi_get_data], esi, tree1 + pop ecx + + xor edx,edx ;edx - номер входной ноги + .add_p1: + stdcall el_get_leg_coords, ecx,edx + test eax,eax + jnz .add_beg1 + test ebx,ebx + jnz .add_beg1 + jmp .end_add_p1 ;если координаты не взялись (eax=0 && ebx=0), выход из цикла + .add_beg1: + stdcall pole_cell_creat, pole,eax,ebx,0 + inc edx + jmp .add_p1 + .end_add_p1: + + mov edx,(1 shl 16) ;edx - номер выходной ноги + .add_p2: + stdcall el_get_leg_coords, ecx,edx + test eax,eax + jnz .add_beg2 + test ebx,ebx + jnz .add_beg2 + jmp .end_add_p2 ;если координаты не взялись (eax=0 && ebx=0), выход из цикла + .add_beg2: + stdcall pole_cell_creat, pole,eax,ebx,0 + inc edx + jmp .add_p2 + .end_add_p2: + + .end_add_p3: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp @b + @@: + stdcall pole_sort, pole + + ;*** добавление точечных объектов (на основе подписей) *** + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + @@: + cmp esi,0 + je @f + cmp word[esi],el_icon_captions ;получение через esi тип иконки + jne .end_add_p6 + stdcall [tl_node_poi_get_data], esi, tree1 + pop ecx + cmp byte[ecx+8],'n' + je .end_add_p6 + stdcall pole_cell_creat, pole,[ecx],[ecx+4],0 + .end_add_p6: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp @b + @@: + stdcall pole_sort, pole + + ;*** рисование проводов (на основе точечных объектов) *** + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + xor ecx,ecx + @@: + cmp esi,0 + je @f + cmp word[esi],el_icon_points ;получение через esi тип иконки, и пропуск не точечных объектов + jne .end_add_p4 + stdcall [tl_node_poi_get_data], esi, tree1 + pop eax + movzx ebx,byte[eax+8] + stdcall shem_create_line, dword[eax],dword[eax+4],ebx + add ecx,edx + .end_add_p4: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + cmp ecx,250 ;ecx - число добавленных точек + jl @b + xor ecx,ecx + stdcall pole_sort, pole ;сортируем для оптимизации быстродействия + jmp @b + @@: + stdcall pole_sort, pole + + stdcall pole_reset_cells, pole ;чистка проводов + + ;*** добавление изоляционных объектов (прямо из файла, минуя запись в список) *** + mov dword[shem_sub_points],0 + mov esi,txt_sub_points + call str_analiz_r + cmp edi,0 + je .end_sub_points ;если описания точек нет в файле + stdcall str_len,esi + add edi,eax + stdcall conv_str_to_int,edi + cmp eax,0 + jle .end_sub_points ;если число точек = 0 + mov [shem_sub_points],eax + mov ecx,eax + .cycle_sub_poi: + call str_next_val + stdcall conv_str_to_int,edi + mov ebx,eax ;координата x + call str_next_val + stdcall conv_str_to_int,edi ;координата y + stdcall pole_cell_creat, pole,ebx,eax,2 + + dec ecx + jnz .cycle_sub_poi + .end_sub_points: + + stdcall pole_sort, pole + + ;*** удаление ключевых точек со списка *** + mov ecx,[shem_points] + inc ecx + cld + @@: + stdcall [tl_info_undo],tree1 + loop @b + + ;*** формирование подписей о параметрах схемы *** + mov dword[txt_info.size],0 + mov eax,dword[shem_w] + mov edi,txt_info.size + call convert_int_to_str + stdcall str_cat, edi,txt_mull + mov eax,dword[shem_h] + mov edi,txt_buf + call convert_int_to_str + stdcall str_cat, txt_info.size,edi + stdcall str_cat, txt_info.size,txt_space ;завершающий пробел + + ;--- + call but_center ;центровка схемы с учетом shem_w и shem_h + .end_open_file: + popad + ret + +align 4 +proc but_save_file +locals + napr dd ? +endl +pushad + ;*** вызов диалогового окна для сохранения файла + copy_path open_dialog_name,communication_area_default_path,file_name,0 + mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],1 ;if status==1 then save + jne .end_save_file + + ;*** проверка есть ли провода на схеме + mov edi,pole + mov esi,pole_index + cmp dword[esi],0 + je .cycle1_beg ;.end_save_file ;если нет ячеек (проводов) то выход + + ;*** устанавливаем метки на ключевые точки, которые будут сохранены в файл + mov dword[shem_points],0 ;для переопределения точек + mov dword[shem_sub_points],0 + mov ecx,dword[esi] + .cycle0: ;цикл по всем точкам + add esi,4 + mov ebx,[esi] + imul ebx,sizeof.Cell + add ebx,pole_data + + cmp byte[ebx+offs_cell_liv],2 + jne @f + inc dword[shem_sub_points] + jmp .cycle0_next + @@: + + mov dword[napr],0 + + mov edx,[ebx+offs_cell_y] + push edx + mov edx,[ebx+offs_cell_x] + inc edx + push edx + stdcall pole_cell_find, edi + cmp eax,0 + je @f + or dword[napr],1 + @@: + + mov edx,[ebx+offs_cell_y] + inc edx + push edx + mov edx,[ebx+offs_cell_x] + push edx + stdcall pole_cell_find, edi + cmp eax,0 + je @f + or dword[napr],2 + @@: + + mov edx,[ebx+offs_cell_y] + push edx + mov edx,[ebx+offs_cell_x] + dec edx + push edx + stdcall pole_cell_find, edi + cmp eax,0 + je @f + or dword[napr],4 + @@: + + mov edx,[ebx+offs_cell_y] + dec edx + push edx + mov edx,[ebx+offs_cell_x] + push edx + stdcall pole_cell_find, edi + cmp eax,0 + je @f + or dword[napr],8 + @@: + + cmp dword[napr],5 + je @f + cmp dword[napr],10 + je @f + cmp dword[napr],15 + je @f + mov eax,dword[napr] + mov byte[ebx+offs_cell_liv],3 ;установка метки + mov byte[ebx+offs_cell_napr],al ;установка направлений + inc dword[shem_points] + @@: + .cycle0_next: + dec ecx + jnz .cycle0 + + ;*** снятие метки с точек, которые находятся на входных ногах логических элементов + .cycle1_beg: + mov dword[shem_elems],0 ;для пепеопределения числа элементов + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + .cycle1: + cmp esi,0 + je .cycle1_end + cmp word[esi],el_icon_elems ;получение через esi тип иконки + jne .end_add_p1 + stdcall [tl_node_poi_get_data], esi, tree1 + pop ecx + inc dword[shem_elems] + + xor edx,edx ;edx - номер входной ноги + @@: + stdcall el_get_leg_coords, ecx,edx + test eax,eax + jz @f ;если координаты не взялись (eax=0 && ebx=0) + test ebx,ebx + jz @f ;если координаты не взялись (eax=0 && ebx=0) + stdcall pole_cell_find, edi,eax,ebx + test eax,eax + jz .no_erase + get_cell_offset ebx,eax + mov byte[ebx+offs_cell_liv],0 ;снятие метки + dec dword[shem_points] + .no_erase: + inc edx + jmp @b + @@: + ;mov edx,(1 shl 16) ;edx - номер выходной ноги + + .end_add_p1: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp .cycle1 + .cycle1_end: + + ;*** создание информации для записи в файл *** + mov edi,open_file_lif + stdcall mem_copy,edi,txt_size,5 + stdcall str_cat,edi,txt_space + mov eax,dword[shem_w] + add edi,5 + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,[shem_h] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_nl + + ;*** сохранение логических элементов *** + stdcall str_cat,edi,txt_elements + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,[shem_elems] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_nl + + cmp eax,1 + jl .cycle2_end + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + .cycle2: + cmp esi,0 + je .cycle2_end + cmp word[esi],el_icon_elems ;получение через esi тип иконки + jne .end_add_p2 + stdcall [tl_node_poi_get_data], esi, tree1 + pop ecx + + stdcall str_len,edi + add edi,eax + mov eax,[ecx] ;coord x + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + mov eax,[ecx+4] ;coord y + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + movzx eax,byte[ecx+8] ;angle + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + ;имя элемента + movzx eax,byte[ecx+sp_offs_el_type] + imul eax,size_el_opt + add eax,el_opt_beg+el_offs_nam + stdcall str_cat,edi,eax + + stdcall str_cat,edi,txt_nl + + .end_add_p2: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp .cycle2 + .cycle2_end: + + ;*** сохранение подписей *** + stdcall str_cat,edi,txt_captions + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,[shem_captions] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_nl + + cmp eax,1 + jl .cycle3_end + stdcall dword[tl_node_poi_get_info],0,tree1 + pop esi + .cycle3: + cmp esi,0 + je .cycle3_end + cmp word[esi],el_icon_captions ;получение через esi тип иконки + jne .end_add_p3 + stdcall [tl_node_poi_get_data], esi, tree1 + pop ecx + + stdcall str_len,edi + add edi,eax + mov eax,[ecx] ;coord x + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + mov eax,[ecx+4] ;coord y + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + movzx eax,byte[ecx+8] ;n,z,o + mov ah,' ' ;пробел после буквы, что бы не добавлять txt_space + mov dword[edi],eax ;al + + ;имя элемента + mov ebx,edi + mov edi,ecx + add edi,capt_offs + call str_next_val + call str_next_val + ;call str_next_val + xchg ebx,edi + stdcall str_cat,edi,ebx + + stdcall str_cat,edi,txt_nl + + .end_add_p3: + stdcall dword[tl_node_poi_get_next_info],esi,tree1 + pop esi ;переходим к следущему узлу + jmp .cycle3 + .cycle3_end: + + ;*** сохранение ключевых точек *** + stdcall str_cat,edi,txt_points + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,[shem_points] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_nl + + mov eax,edi + mov edi,pole + mov esi,pole_index + cmp dword[esi],0 + je .no_points ;если нет ячеек (проводов) то пропуск + mov ebx,pole_data + mov dword[napr],ebx + mov edi,eax + + mov ecx,dword[esi] + .cycle4: ;цикл по всем точкам + add esi,4 + mov ebx,[esi] + imul ebx,sizeof.Cell + add ebx,dword[napr] ;pole_data + + movzx edx,word[ebx+offs_cell_liv] ;also use offs_cell_napr + cmp dl,3 + jne @f + stdcall str_len,edi + add edi,eax + mov eax,dword[ebx+offs_cell_x] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + mov eax,dword[ebx+offs_cell_y] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + movzx eax,dh + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + ;stdcall str_cat,edi,txt_nl + @@: + dec ecx + jnz .cycle4 + stdcall str_cat,edi,txt_nl + + ;*** сохранение изоляционных точек *** + stdcall str_cat,edi,txt_sub_points + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,[shem_sub_points] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_nl + + mov eax,edi + mov edi,pole + mov esi,pole_index + ;cmp dword[esi],0 + ;je .no_points ;если нет ячеек (проводов) то пропуск + ;mov ebx,pole_data + ;mov dword[napr],ebx + mov edi,eax + + mov ecx,dword[esi] + .cycle5: ;цикл по всем точкам + add esi,4 + mov ebx,[esi] + imul ebx,sizeof.Cell + add ebx,dword[napr] ;pole_data + + movzx edx,byte[ebx+offs_cell_liv] + cmp dl,2 + jne @f + stdcall str_len,edi + add edi,eax + mov eax,dword[ebx+offs_cell_x] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + stdcall str_len,edi + add edi,eax + mov eax,dword[ebx+offs_cell_y] + stdcall convert_int_to_str + stdcall str_cat,edi,txt_space + + ;stdcall str_cat,edi,txt_nl + @@: + dec ecx + jnz .cycle5 + stdcall str_cat,edi,txt_nl + + .no_points: + + ;*** определение параметров файла + mov edi,open_file_lif + stdcall str_len,edi + mov ecx,eax + + ;*** запись файла + mov eax,70 + mov [run_file_70.Function], 2 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], ecx + mov [run_file_70.Buffer], edi + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mov ebx,run_file_70 + int 0x40 ;сохраняем файл + + call redraw_pole + .end_save_file: +popad + ret +endp + +;формирование подписи для списка +align 4 +proc make_list_capts uses eax ebx ecx edi, buf:dword, txt:dword + mov ebx,dword[buf] + + mov edi,ebx + add edi,capt_offs + mov dword[edi],' ' ;пробелы для выравнивания маленьких чисел + + mov eax,dword[ebx] ;+0 - offset coord x + cmp eax,100 + jge @f + inc edi + @@: + cmp eax,10 + jge @f + inc edi + @@: + call convert_int_to_str ;координата x (для подписи) + stdcall str_cat,edi,txt_space + stdcall str_len,edi + add edi,eax + mov eax,dword[ebx+4] ;+4 - offset coord y + call convert_int_to_str ;координата y (для подписи) + stdcall str_cat,edi,txt_space + + mov edi,dword[txt] + cmp edi,0 + je .end_f + stdcall str_len,edi ;eax = strlen([edi]) + mov ecx,edi + call str_next_spaces + sub edi,ecx ;определяем длинну подписи + + cmp edi,eax + jle @f + mov edi,eax ;если строка закончилась не пробелом + @@: + ;cmp edi,1 + ;jge @f + ; mov edi,1 ;минимум 1 символ + ;@@: + + add ebx,capt_offs + stdcall str_n_cat, ebx,ecx,edi + .end_f: + ret +endp + +;output: +; eax - тип элемента +align 4 +proc el_get_name uses ecx edi esi, str:dword + mov edi,[str] + mov esi,el_opt_beg+el_offs_nam + xor ecx,ecx + @@: + stdcall str_instr, edi,esi + cmp eax,0 + je @f + add esi,size_el_opt + cmp esi,el_opt_beg.end + jge @f + inc ecx + jmp @b + @@: + mov eax,ecx + ret +endp + +;input: +; el_data - указатель на данные элемента +; l_opt - номер ноги, для которой ищутся координаты, входная/выходная нога +;output: +; eax - coord x (if not found eax=0) +; ebx - coord y (if not found ebx=0) +align 4 +proc el_get_leg_coords uses ecx edx edi esi, el_data:dword, l_opt:dword + mov edi,[el_data] ;данные элемента + movzx esi,byte[edi+sp_offs_el_type] ;тип элемента + imul esi,size_el_opt + add esi,el_opt_beg + ;esi+el_offs_legs_inp - указатель на параметры 0-й входной ноги + + mov eax,[edi+0] + mov ebx,[edi+4] + mov edx,[l_opt] + movzx edi,byte[edi+8] ;угол поворота / 90 (от 0-3) + + btr edx,16 ;входная/выходная нога + jc .output_leg + + ;если нога входная + inc edx ;номерация ног начинается с нуля, потому добавляем 1 + stdcall move_rotate_x_n90, -2,edi + add esi,el_offs_legs_inp + @@: + movzx ecx,byte[esi] + cmp ecx,0 + je .not_found ;ноги кончились раньше, чем ожидалось + stdcall move_rotate_n90, 0,ecx,edi + inc esi + dec edx + jnz @b + jmp .end_f + + ;если нога выходная + .output_leg: + inc edx ;номерация ног начинается с нуля, потому добавляем 1 + movzx ecx,byte[esi+el_offs_box_x] + add ecx,2 + stdcall move_rotate_x_n90, ecx,edi + add esi,el_offs_legs_out + @@: + movzx ecx,byte[esi] + cmp ecx,0 + je .not_found ;ноги кончились раньше, чем ожидалось + stdcall move_rotate_n90, 0,ecx,edi + inc esi + dec edx + jnz @b + jmp .end_f + + .not_found: + xor eax,eax + xor ebx,ebx + .end_f: + ret +endp + +align 4 +proc move_rotate_n90 uses ecx edi, d_x:dword, d_y:dword, angle:dword + mov edi,[angle] ;угол поворота / 90 (от 0-3) + and edi,3 + shl edi,4 ;edi*=16 + add edi,mcs + + mov ecx,[d_x] + imul ecx,dword[edi] + add eax,ecx + mov ecx,[d_y] + imul ecx,dword[edi+4] + add eax,ecx + + mov ecx,[d_x] + imul ecx,dword[edi+8] + add ebx,ecx + mov ecx,[d_y] + imul ecx,dword[edi+12] + add ebx,ecx + ret +endp + +align 4 +proc mem_copy, destination:dword, source:dword, len:dword + push ecx esi edi + cld + mov esi, dword[source] + mov edi, dword[destination] + mov ecx, dword[len] + rep movsb + pop edi esi ecx + ret +endp + +;description: +; Функция пропускает одно слово (или число) с учетом разделительных символов: +; пробела, табуляции, новой строки. Нужна для последовательного считывани чисел из строки +;input: +; edi - указатель на пробел или слово +;output: +; edi - указатель на следующее слово +align 4 +str_next_val: + call str_skip_spaces + @@: + cmp byte[edi],0 + je @f + + cmp byte[edi],' ' + je @f + cmp byte[edi],9 + je @f + cmp byte[edi],10 + je @f + cmp byte[edi],13 + je @f + + inc edi + jmp @b + @@: + call str_skip_spaces + ret + +align 4 +str_skip_spaces: + dec edi + @@: + inc edi + cmp byte[edi],' ' + je @b + cmp byte[edi],9 + je @b + cmp byte[edi],10 + je @b + cmp byte[edi],13 + je @b + ret + +align 4 +str_next_spaces: + dec edi + @@: + inc edi + cmp byte[edi],0 + je @f + cmp byte[edi],' ' + je @f + cmp byte[edi],9 + je @f + cmp byte[edi],10 + je @f + cmp byte[edi],13 + je @f + jmp @b + @@: + ret + +;input: +; esi - указатель на искомое слово +;output: +; edi - указатель на позицию в которой слово найдено, если слово не найдено то edi=0 +;портятся регистры: +; eax ecx +align 4 +str_analiz_r: + mov edi,open_file_lif + mov ecx,dword[f_size] + @@: + mov al,byte[esi] ;устанавливаем первый символ для поиска + cld + repnz scasb + cmp ecx,0 + je @f ;если закончился весь текст, то выход из функции + ;первый символ по адресу edi-1 должен быть из строки esi + dec edi + stdcall str_instr, edi,esi ;проверяем слово на совпадение + inc edi + cmp al,0 + jne @b ;если слово не совпало, ищем в строке следующий первый символ для сравнения + ;сюда попадаем если нашли слово esi по адресу edi + jmp .exit_f + @@: + ;сюда попадаем если не нашли слово esi по адресу edi + xor edi,edi + .exit_f: + ret + +;description: +; проверяет содержится ли строка str1 в строке str0 +; проверка делается только начиная с первых символов, указанных в str0 и str1 +; пример 1: если str0='aaabbbccc', str1='bbb' совпадения не будет +; пример 2: если str0='aaabbbccc', str1='aaa' совпадение будет +;output: +; al = 0 если строка str1 содержится в str0 +; al != 0 если строка str1 не содержится в str0 +align 4 +proc str_instr uses edi esi, str0:dword, str1:dword + ;xor eax,eax + mov edi,[str0] + mov esi,[str1] + cld + @@: + mov al,[esi] + cmp al,0 + je .e1 + inc esi + scasb ;сравниваем символы + jz @b ;если совпали, то переходим к сравнению следующих + ;сюда попадаем если строки не совпали + sub al,[edi-1] + .e1: ;сюда попадаем если строка str1 (esi) закончилась + ret +endp + +align 4 +proc but_run_stop + xor byte[tim_ch],1 + cmp byte[tim_ch],0 + jne @f + ;остановка схемы + stdcall pole_reset_cells, pole ;чистка проводов + call redraw_pole + jmp .end_f + @@: + ;подготовка схемы к запуску + call sign_clear + .end_f: + ret +endp + +align 4 +proc but_set_0 uses eax + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f +;el_icon_captions +; cmp byte[eax+8],'n' +; je .end_f + cmp byte[eax+8],'o' ;временное отсечение, пока нет проверки типа текущей иконки + jne .end_f + mov byte[eax+8],'z' + .end_f: + ret +endp + +align 4 +proc but_set_1 uses eax + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f +;el_icon_captions +; cmp byte[eax+8],'n' +; je .end_f + cmp byte[eax+8],'z' ;временное отсечение, пока нет проверки типа текущей иконки + jne .end_f + mov byte[eax+8],'o' + .end_f: + ret +endp + +;сдвиг объекта влево +align 4 +proc but_mov_l uses eax edi + cmp byte[tim_ch],0 + jne .end_f + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f + cmp dword[eax],1 + jle .end_f + dec dword[eax] + mov edi,eax + stdcall mem_copy,txt_buf,eax,capt_offs + add edi,capt_offs + call str_next_val + call str_next_val + stdcall make_list_capts,txt_buf,edi + stdcall mem_copy,eax,txt_buf,32 ;capt_offs + call redraw_pole + stdcall [tl_draw],tree1 + .end_f: + ret +endp + +;сдвиг объекта вправо +align 4 +proc but_mov_r uses eax edi + cmp byte[tim_ch],0 + jne .end_f + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f + inc dword[eax] + mov edi,eax + stdcall mem_copy,txt_buf,eax,capt_offs + add edi,capt_offs + call str_next_val + call str_next_val + stdcall make_list_capts,txt_buf,edi + stdcall mem_copy,eax,txt_buf,32 ;capt_offs + call redraw_pole + stdcall [tl_draw],tree1 + .end_f: + ret +endp + +align 4 +proc but_mov_u uses eax edi + cmp byte[tim_ch],0 + jne .end_f + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f + cmp dword[eax+4],1 + jle .end_f + dec dword[eax+4] + mov edi,eax + stdcall mem_copy,txt_buf,eax,capt_offs + add edi,capt_offs + call str_next_val + call str_next_val + stdcall make_list_capts,txt_buf,edi + stdcall mem_copy,eax,txt_buf,32 ;capt_offs + call redraw_pole + stdcall [tl_draw],tree1 + .end_f: + ret +endp + +align 4 +proc but_mov_d uses eax edi + cmp byte[tim_ch],0 + jne .end_f + stdcall [tl_node_get_data], tree1 + pop eax + test eax,eax + jz .end_f + inc dword[eax+4] + mov edi,eax + stdcall mem_copy,txt_buf,eax,capt_offs + add edi,capt_offs + call str_next_val + call str_next_val + stdcall make_list_capts,txt_buf,edi + stdcall mem_copy,eax,txt_buf,32 ;capt_offs + call redraw_pole + stdcall [tl_draw],tree1 + .end_f: + ret +endp + +;установка обычного режима, без рисования +align 4 +proc but_set_none + mov byte[pen_mode],0 + ret +endp + +;установка режима рисования провода +align 4 +proc but_set_pen_1 + mov byte[pen_mode],1 + ret +endp + +; +align 4 +proc but_set_pen_2 + mov byte[pen_mode],2 + ret +endp + +;установка режима стирания провода +align 4 +proc but_set_pen_3 + mov byte[pen_mode],3 + ret +endp + +;данные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.procinfo dd procinfo ;+4 +.com_area_name dd communication_area_name ;+8 +.com_area dd 0 ;+12 +.opendir_path dd plugin_path ;+16 +.dir_default_path dd default_dir ;+20 +.start_path dd file_name ;+24 путь к диалогу открытия файлов +.draw_window dd draw_window ;+28 +.status dd 0 ;+32 +.openfile_path dd openfile_path ;+36 путь к открываемому файлу +.filename_area dd filename_area ;+40 +.filter_area dd Filter +.x: +.x_size dw 420 ;+48 ; Window X size +.x_start dw 10 ;+50 ; Window X position +.y: +.y_size dw 320 ;+52 ; Window y size +.y_start dw 10 ;+54 ; Window Y position + +default_dir db '/rd/1',0 + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/rd/1/File managers/',0 + +Filter: +dd Filter.end - Filter ;.1 +.1: +db 'TXT',0 +db 'ASM',0 +.end: +db 0 + +include 'le_libs.inc' + +mouse_dd dd 0x0 +sc system_colors +last_time dd 0 + + + +align 16 +procinfo process_information + +align 4 +buf_0: dd 0 ; +.l: dw 170 ;+4 left +.t: dw panel_1_coord_top ;+6 top +.w: dd 335 ;+8 w +.h: dd 340 ;+12 h +.color: dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_font: ;буфер со шрифтом + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 96 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +el_focus dd 0 +tree1 tree_list 32,points_max+2, tl_key_no_edit, 16,16,\ + 0x8080ff,0x0000ff,0xffffff, 5,panel_3_coord_top,145,250, 0,capt_offs,0,\ + el_focus, wScrObj,0 +align 4 +wScrObj: +.x: +.size_x dw 16 ;+0 +.start_x dw 0 ;+2 +.y: +.size_y dw 150 ;+4 +.start_y dw 0 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +.cur_area dd 30 ;+20 +.position dd 0 ;+24 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +align 4 +proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword + mov esi,dword[str2] + mov ecx,dword[n] + mov edi,dword[str1] + stdcall str_len,edi + add edi,eax + cld + repne movsb + mov byte[edi],0 + ret +endp + +align 4 +proc str_cat uses eax ecx edi esi, str1:dword, str2:dword + mov esi,dword[str2] + stdcall str_len,esi + mov ecx,eax + inc ecx + mov edi,dword[str1] + stdcall str_len,edi + add edi,eax + cld + repne movsb + ret +endp + +;output: +; eax = strlen +align 4 +proc str_len, str1:dword + mov eax,[str1] + @@: + cmp byte[eax],0 + je @f + inc eax + jmp @b + @@: + sub eax,[str1] + ret +endp + +;input: +; buf - указатель на строку, число должно быть в 10 или 16 ричном виде +;output: +; eax - число +align 4 +proc conv_str_to_int, buf:dword + xor eax,eax + push ebx ecx esi + xor ebx,ebx + mov esi,[buf] + + ;на случай если перед числом находятся пробелы + @@: + cmp byte[esi],' ' + jne @f + inc esi + jmp @b + @@: + + ;определение отрицательных чисел + xor ecx,ecx + inc ecx + cmp byte[esi],'-' + jne @f + dec ecx + inc esi + @@: + + cmp word[esi],'0x' + je .load_digit_16 + + .load_digit_10: ;считывание 10-тичных цифр + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'9' + jg @f + sub bl,'0' + imul eax,10 + add eax,ebx + inc esi + jmp .load_digit_10 + jmp @f + + .load_digit_16: ;считывание 16-ричных цифр + add esi,2 + .cycle_16: + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'f' + jg @f + cmp bl,'9' + jle .us1 + cmp bl,'A' + jl @f ;отсеиваем символы >'9' и <'A' + .us1: ;составное условие + cmp bl,'F' + jle .us2 + cmp bl,'a' + jl @f ;отсеиваем символы >'F' и <'a' + sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки + .us2: ;составное условие + sub bl,'0' + cmp bl,9 + jle .cor1 + sub bl,7 ;convert 'A' to '10' + .cor1: + shl eax,4 + add eax,ebx + inc esi + jmp .cycle_16 + @@: + cmp ecx,0 ;если число отрицательное + jne @f + sub ecx,eax + mov eax,ecx + @@: + pop esi ecx ebx + ret +endp + +;этот код не мой, он преобразует число в строку +;input: +; eax = value +; edi = string buffer +;output: +align 4 +convert_int_to_str: + pushad + mov dword[edi+1],0;0x20202020 + call .str + popad + ret + +align 4 +.str: + mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число + ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной + cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax + jb @f + xor edx,edx ;очистить edx + div ecx ;разделить - остаток в edx + push edx ;положить в стек + ;dec edi ;смещение необходимое для записи с конца строки + call .str ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx + pop eax + @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) + or al,0x30 ;данная команда короче чем две выше + stosb ;записать элемент из регистра al в ячеку памяти es:edi + ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться + +i_end: + rb 1024 +stacktop: + sys_path rb 1024 + file_name: + rb 1024 ;4096 + library_path rb 1024 + plugin_path rb 4096 + openfile_path rb 4096 + filename_area rb 256 +mem: diff --git a/programs/media/log_el/trunk/mem.inc b/programs/media/log_el/trunk/mem.inc new file mode 100644 index 0000000000..ec78fbf7f6 --- /dev/null +++ b/programs/media/log_el/trunk/mem.inc @@ -0,0 +1,48 @@ +;----------------------------------------------------------------------------- +proc mem.Alloc,size ;///////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[size] + ;*** add ecx,4 + mcall 68,12 + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + pop ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.ReAlloc,mptr,size ;////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx edx + mov ecx,[size] + or ecx,ecx + jz @f + ;*** add ecx,4 + @@: mov edx,[mptr] + or edx,edx + jz @f + ;*** add edx,-4 + @@: mcall 68,20 + or eax,eax + jz @f + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + @@: pop edx ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.Free,mptr ;////////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[mptr] + or ecx,ecx + jz @f + ;*** add ecx,-4 + @@: mcall 68,13 + pop ecx ebx + ret +endp diff --git a/programs/media/log_el/trunk/mn_4bit.txt b/programs/media/log_el/trunk/mn_4bit.txt new file mode 100644 index 0000000000..7f0f45ca93 --- /dev/null +++ b/programs/media/log_el/trunk/mn_4bit.txt @@ -0,0 +1,101 @@ +size 204 192 +elements 36 +111 44 3 sm[1] +123 44 3 sm[1] +135 44 3 sm[1] +147 44 3 sm[1] +159 44 3 sm[1] + 80 35 0 and[2] + 67 35 0 and[2] + 54 35 0 and[2] +123 71 3 sm[1] +135 71 3 sm[1] +147 71 3 sm[1] +159 71 3 sm[1] +135 98 3 sm[1] +147 98 3 sm[1] +159 98 3 sm[1] +183 98 3 sm[1] +147 125 3 sm[1] +159 125 3 sm[1] +183 125 3 sm[1] +195 125 3 sm[1] + 41 62 0 and[2] + 54 62 0 and[2] + 67 62 0 and[2] + 80 62 0 and[2] + 41 89 0 and[2] + 54 89 0 and[2] + 67 89 0 and[2] + 80 89 0 and[2] + 41 116 0 and[2] + 54 116 0 and[2] + 67 116 0 and[2] + 80 116 0 and[2] + 41 35 0 and[2] +171 71 3 sm[1] +171 98 3 sm[1] +171 125 3 sm[1] +captions 10 + 76 9 z a0 + 63 9 z a1 + 50 9 z a2 + 37 9 z a3 + 11 122 z b0 + 11 95 z b1 + 11 68 z b2 + 11 41 z b3 +190 183 n c0 +106 183 n c7 +points 167 +190 183 8 37 117 9 106 183 8 37 60 10 115 39 6 108 39 3 +106 13 2 173 135 9 50 117 9 132 93 3 178 13 2 63 117 9 +139 135 9 158 122 3 161 108 9 170 95 3 122 68 3 185 135 9 + 76 117 9 149 108 9 142 13 2 78 122 12 146 95 3 52 122 13 +154 53 2 115 81 9 178 183 8 166 13 2 78 95 12 190 13 2 +182 108 12 78 68 12 194 135 12 182 135 12 142 53 2 130 53 2 +170 81 12 161 135 9 78 41 12 125 81 9 130 13 2 76 36 11 + 63 36 11 50 36 11 37 33 10 134 68 3 50 63 11 134 95 3 + 63 63 11 161 122 6 76 63 11 166 183 8 149 135 9 76 90 11 + 63 90 11 50 90 11 37 87 10 39 41 13 39 68 13 39 95 13 + 39 122 13 173 95 6 52 95 13 182 122 3 52 68 13 142 183 8 + 52 41 13 118 183 8 122 81 12 65 41 13 65 68 13 65 95 13 + 65 122 13 192 118 6 137 68 6 139 93 6 180 114 6 74 114 3 +130 80 2 149 81 9 158 95 3 118 53 2 61 112 3 168 112 6 +173 108 9 170 108 12 156 110 6 48 110 3 142 107 2 149 122 6 +173 122 6 37 36 1 48 83 3 144 83 6 146 68 3 127 108 9 +156 85 6 61 85 3 142 80 2 146 135 12 185 122 6 154 80 2 + 74 87 3 168 87 6 154 13 2 137 95 6 180 91 6 146 122 3 +170 122 3 168 64 6 149 95 6 137 108 9 156 60 6 74 60 3 +178 107 2 170 135 12 130 183 8 166 80 2 61 58 3 144 58 6 +134 108 12 158 108 12 132 56 6 48 56 3 37 63 1 127 66 6 +158 135 12 37 90 1 48 29 3 120 29 6 161 68 6 134 81 12 +132 31 6 61 31 3 154 107 2 161 81 9 161 95 6 166 107 2 + 74 33 3 144 33 6 137 81 9 149 68 6 156 37 6 118 13 2 +158 81 12 158 54 12 149 54 9 149 41 6 146 41 3 146 81 12 +154 183 8 146 54 12 137 54 9 137 41 6 134 41 3 120 66 3 +146 108 12 134 54 12 125 54 9 125 41 6 122 41 3 158 68 3 +125 68 6 122 54 12 113 54 9 113 41 6 110 41 3 +subpoints 174 + 76 41 63 41 50 41 37 41 144 37 76 33 132 37 132 33 + 76 31 63 31 120 37 120 33 120 31 76 29 63 29 50 29 +118 81 166 64 154 64 142 64 130 64 118 64 115 64 106 64 + 76 60 106 60 115 60 118 60 37 68 50 68 63 68 76 68 +142 108 37 95 50 95 154 108 166 108 178 108 106 118 118 118 +130 118 63 95 76 95 106 91 118 91 178 91 166 91 154 91 +142 91 130 91 106 87 118 87 130 87 142 87 142 118 154 118 +166 118 178 118 154 87 166 87 168 91 63 85 130 60 142 60 +154 60 156 64 63 58 76 58 106 58 118 58 76 85 106 85 +118 85 130 85 190 118 180 118 178 114 166 114 142 85 154 85 +156 87 156 91 50 83 63 83 76 83 115 58 130 58 142 58 +144 60 144 64 50 56 63 56 106 83 118 83 130 83 142 83 +154 114 144 85 144 87 144 91 142 114 130 114 118 114 130 108 +127 91 76 56 106 56 127 87 106 114 76 114 127 85 63 112 + 76 112 106 112 118 112 130 112 142 112 127 83 127 81 115 56 +118 56 166 81 154 81 130 54 142 54 154 54 118 54 115 54 +130 56 132 58 132 60 132 64 142 81 130 81 154 112 106 29 +106 31 106 33 106 37 118 37 118 33 118 31 118 29 130 31 +130 33 130 37 142 37 142 33 154 37 166 112 168 114 168 118 +156 118 156 114 156 112 154 110 142 110 130 110 118 110 106 110 + 76 110 63 110 50 110 142 135 139 118 139 114 139 112 139 110 +139 108 154 135 166 135 178 135 190 135 76 87 diff --git a/programs/media/log_el/trunk/objects.png b/programs/media/log_el/trunk/objects.png new file mode 100644 index 0000000000..b8fa44ed1b Binary files /dev/null and b/programs/media/log_el/trunk/objects.png differ diff --git a/programs/media/log_el/trunk/or_2.txt b/programs/media/log_el/trunk/or_2.txt new file mode 100644 index 0000000000..e514fdfe53 --- /dev/null +++ b/programs/media/log_el/trunk/or_2.txt @@ -0,0 +1,9 @@ +size 80 60 +elements 1 + 24 24 0 or[2] +captions 3 + 10 8 z x1 + 10 44 z x2 + 56 26 n y1 +points 4 + 10 25 9 10 27 3 10 44 8 56 26 4 diff --git a/programs/media/log_el/trunk/or_3.txt b/programs/media/log_el/trunk/or_3.txt new file mode 100644 index 0000000000..41c85e94b2 --- /dev/null +++ b/programs/media/log_el/trunk/or_3.txt @@ -0,0 +1,10 @@ +size 80 60 +elements 1 + 24 24 0 or[3] +captions 4 + 10 8 z x1 + 10 44 z x2 + 30 44 z x3 + 56 27 n y1 +points 5 + 10 25 9 10 27 3 10 44 8 56 27 4 22 44 9 diff --git a/programs/media/log_el/trunk/test1.txt b/programs/media/log_el/trunk/test1.txt new file mode 100644 index 0000000000..ddc56632f2 --- /dev/null +++ b/programs/media/log_el/trunk/test1.txt @@ -0,0 +1,40 @@ +size 80 80 +elements 1 + 6 32 0 not +points 171 + 28 52 2 50 75 8 29 52 2 30 52 2 31 52 2 32 52 2 + 33 52 2 34 52 2 35 52 2 36 52 2 37 52 2 38 52 2 + 39 52 2 40 52 2 41 52 2 42 52 2 43 52 2 44 52 2 + 45 52 2 46 52 2 47 52 2 48 52 2 49 52 2 50 52 2 + 51 52 2 51 75 8 49 75 8 48 75 8 47 75 8 46 75 8 + 45 75 8 44 75 8 43 75 8 42 75 8 41 75 8 40 75 8 + 39 75 8 38 75 8 37 75 8 36 75 8 35 75 8 34 75 8 + 33 75 8 32 75 8 31 75 8 30 75 8 29 75 8 28 75 8 + 37 65 8 37 69 2 38 69 2 39 69 2 40 69 2 41 69 2 + 38 65 8 39 65 8 40 65 8 41 65 8 52 75 8 53 75 8 + 54 75 8 55 75 8 56 75 8 57 75 8 58 75 8 59 75 8 + 51 49 8 50 49 8 49 49 8 48 49 8 47 49 8 46 49 8 + 45 49 8 44 49 8 43 49 8 42 49 8 41 49 8 40 49 8 + 39 49 8 38 49 8 37 49 8 36 49 8 35 49 8 34 49 8 + 33 49 8 32 49 8 31 49 8 30 49 8 29 49 8 28 49 8 + 28 4 2 29 4 2 30 4 2 31 4 2 32 4 2 33 4 2 + 34 4 2 35 4 2 36 4 2 37 4 2 38 4 2 39 4 2 + 40 4 2 41 4 2 42 4 2 43 4 2 44 4 2 45 4 2 + 46 4 2 47 4 2 48 4 2 49 4 2 50 4 2 51 4 2 + 52 4 2 53 4 2 54 4 2 55 4 2 56 4 2 57 4 2 + 58 4 2 59 4 2 60 4 2 61 4 2 62 4 2 63 4 2 + 64 4 2 65 4 2 66 4 2 67 4 2 68 4 2 69 4 2 + 70 4 2 71 4 2 72 4 2 73 4 2 74 4 2 75 4 2 + 60 75 8 61 75 8 62 75 8 63 75 8 64 75 8 65 75 8 + 66 75 8 67 75 8 68 75 8 69 75 8 70 75 8 71 75 8 + 72 75 8 73 75 8 74 75 8 75 75 8 11 30 3 4 30 3 + 27 30 4 39 14 8 39 17 2 40 17 2 41 17 2 42 17 2 + 43 17 2 44 17 2 45 17 2 45 14 8 44 14 8 43 14 8 + 42 14 8 41 14 8 40 14 8 +subpoints 41 + 58 34 58 36 58 38 58 40 58 42 58 44 58 46 58 48 + 58 50 58 52 58 54 58 56 58 58 58 60 56 60 54 60 + 52 60 50 60 48 60 46 60 44 60 42 60 40 60 38 60 + 36 60 58 32 58 30 56 30 54 30 52 30 50 30 48 30 + 46 30 44 30 42 30 40 30 38 30 36 30 34 30 32 30 + 30 30 diff --git a/programs/media/log_el/trunk/test2.txt b/programs/media/log_el/trunk/test2.txt new file mode 100644 index 0000000000..b9efeced64 --- /dev/null +++ b/programs/media/log_el/trunk/test2.txt @@ -0,0 +1,19 @@ +size 250 200 +elements 1 +126 97 0 not +points 86 +131 95 6 124 95 6 122 95 2 122 101 1 120 103 9 118 105 9 +116 107 9 114 109 9 112 111 9 110 113 9 108 115 9 106 117 9 +104 119 9 102 121 9 100 123 9 98 125 9 96 127 9 94 129 9 + 92 131 9 90 133 9 88 135 9 86 137 9 84 139 9 82 141 9 +133 101 12 135 103 12 137 105 12 139 107 12 141 109 12 143 111 12 +145 113 12 147 115 12 149 117 12 151 119 12 153 121 12 155 123 12 +157 125 12 159 127 12 161 129 12 163 131 12 165 133 12 167 135 12 +169 137 12 171 139 12 173 141 12 133 93 6 135 91 6 137 89 6 +139 87 6 141 85 6 143 83 6 145 81 6 147 79 6 149 77 6 +151 75 6 153 73 6 155 71 6 157 69 6 159 67 6 161 65 6 +163 63 6 165 61 6 167 59 6 169 57 6 171 55 6 173 53 6 +120 93 3 118 91 3 116 89 3 114 87 3 112 85 3 110 83 3 +108 81 3 106 79 3 104 77 3 102 75 3 100 73 3 98 71 3 + 96 69 3 94 67 3 92 65 3 90 63 3 88 61 3 86 59 3 + 84 57 3 82 55 3 diff --git a/programs/media/log_el/trunk/test3.txt b/programs/media/log_el/trunk/test3.txt new file mode 100644 index 0000000000..7e4522898c --- /dev/null +++ b/programs/media/log_el/trunk/test3.txt @@ -0,0 +1,20 @@ +size 300 200 +elements 1 +126 97 0 not +points 95 +131 95 6 124 95 6 122 95 2 122 101 1 120 103 9 118 105 9 +116 107 9 114 109 9 112 111 9 110 113 9 108 115 9 106 117 9 +104 119 9 102 121 9 100 123 9 98 125 9 96 127 9 94 129 9 + 92 131 9 90 133 9 88 135 9 86 137 9 84 139 9 82 141 9 +133 101 12 135 103 12 137 105 12 139 107 12 141 109 12 143 111 12 +145 113 12 147 115 12 149 117 12 151 119 12 153 121 12 155 123 12 +157 125 12 159 127 12 161 129 12 163 131 12 165 133 12 167 135 12 +169 137 12 171 139 12 173 141 12 133 93 6 135 91 6 137 89 6 +139 87 6 141 85 6 143 83 6 145 81 6 147 79 6 149 77 6 +151 75 6 153 73 6 155 71 6 157 69 6 159 67 6 161 65 6 +163 63 6 165 61 6 167 59 6 169 57 6 171 55 6 173 53 6 +120 93 3 118 91 3 116 89 3 114 87 3 112 85 3 110 83 3 +108 81 3 106 79 3 104 77 3 102 75 3 100 73 3 98 71 3 + 96 69 3 94 67 3 92 65 3 90 63 3 88 61 3 86 59 3 + 84 57 3 82 55 3 127 101 2 127 95 12 122 98 6 131 98 1 + 80 53 0 127 51 0 175 98 0 127 143 0 80 98 0 diff --git a/programs/media/log_el/trunk/test4.txt b/programs/media/log_el/trunk/test4.txt new file mode 100644 index 0000000000..012f04b19d --- /dev/null +++ b/programs/media/log_el/trunk/test4.txt @@ -0,0 +1,33 @@ +size 104 80 +captions 1 + 7 30 o A +points 169 + 52 52 2 74 75 8 53 52 2 54 52 2 55 52 2 56 52 2 + 57 52 2 58 52 2 59 52 2 60 52 2 61 52 2 62 52 2 + 63 52 2 64 52 2 65 52 2 66 52 2 67 52 2 68 52 2 + 69 52 2 70 52 2 71 52 2 72 52 2 73 52 2 74 52 2 + 75 52 2 75 75 8 73 75 8 72 75 8 71 75 8 70 75 8 + 69 75 8 68 75 8 67 75 8 66 75 8 65 75 8 64 75 8 + 63 75 8 62 75 8 61 75 8 60 75 8 59 75 8 58 75 8 + 57 75 8 56 75 8 55 75 8 54 75 8 53 75 8 52 75 8 + 61 65 8 61 69 2 62 69 2 63 69 2 64 69 2 65 69 2 + 62 65 8 63 65 8 64 65 8 65 65 8 76 75 8 77 75 8 + 78 75 8 79 75 8 80 75 8 81 75 8 82 75 8 83 75 8 + 75 49 8 74 49 8 73 49 8 72 49 8 71 49 8 70 49 8 + 69 49 8 68 49 8 67 49 8 66 49 8 65 49 8 64 49 8 + 63 49 8 62 49 8 61 49 8 60 49 8 59 49 8 58 49 8 + 57 49 8 56 49 8 55 49 8 54 49 8 53 49 8 52 49 8 + 52 4 2 53 4 2 54 4 2 55 4 2 56 4 2 57 4 2 + 58 4 2 59 4 2 60 4 2 61 4 2 62 4 2 63 4 2 + 64 4 2 65 4 2 66 4 2 67 4 2 68 4 2 69 4 2 + 70 4 2 71 4 2 72 4 2 73 4 2 74 4 2 75 4 2 + 76 4 2 77 4 2 78 4 2 79 4 2 80 4 2 81 4 2 + 82 4 2 83 4 2 84 4 2 85 4 2 86 4 2 87 4 2 + 88 4 2 89 4 2 90 4 2 91 4 2 92 4 2 93 4 2 + 94 4 2 95 4 2 96 4 2 97 4 2 98 4 2 99 4 2 + 84 75 8 85 75 8 86 75 8 87 75 8 88 75 8 89 75 8 + 90 75 8 91 75 8 92 75 8 93 75 8 94 75 8 95 75 8 + 96 75 8 97 75 8 98 75 8 99 75 8 64 14 8 65 14 8 + 51 30 4 63 14 8 63 17 2 64 17 2 65 17 2 66 17 2 + 67 17 2 68 17 2 69 17 2 69 14 8 68 14 8 67 14 8 + 66 14 8 diff --git a/programs/media/log_el/trunk/test5.txt b/programs/media/log_el/trunk/test5.txt new file mode 100644 index 0000000000..5ecf9dbdc7 --- /dev/null +++ b/programs/media/log_el/trunk/test5.txt @@ -0,0 +1,21 @@ +size 300 200 +elements 1 + 47 94 0 not +points 102 + 52 92 7 45 92 2 117 92 8 275 34 2 273 32 2 274 33 2 +272 31 2 276 35 2 277 36 2 278 37 2 124 13 1 123 14 1 +122 15 1 121 16 1 120 17 1 119 18 1 118 19 1 117 20 1 +116 21 1 115 22 1 114 23 1 113 24 1 112 25 1 111 26 1 +110 27 1 109 28 1 108 29 1 107 30 1 106 31 1 105 32 1 +104 33 1 103 34 1 102 35 1 101 36 1 100 37 1 99 38 1 + 98 39 1 97 40 1 96 41 1 279 38 2 282 41 2 281 40 2 +283 42 2 280 39 2 284 43 2 288 47 2 287 46 2 286 45 2 +285 44 2 271 30 2 270 29 2 269 28 2 268 27 2 267 26 2 +266 25 2 265 24 2 264 23 2 263 22 2 262 21 2 261 20 2 +260 19 2 259 18 2 258 17 2 257 16 2 256 15 2 255 14 2 +254 13 2 254 155 4 255 154 4 256 153 4 257 152 4 258 151 4 +259 150 4 260 149 4 261 148 4 262 147 4 263 146 4 264 145 4 +265 144 4 266 143 4 267 142 4 268 141 4 269 140 4 270 139 4 +271 138 4 272 137 4 273 136 4 274 135 4 275 134 4 276 133 4 +277 132 4 278 131 4 279 130 4 280 129 4 281 128 4 282 127 4 +283 126 4 284 125 4 285 124 4 286 123 4 287 122 4 288 121 4 diff --git a/programs/media/log_el/trunk/tl_sys_16.png b/programs/media/log_el/trunk/tl_sys_16.png new file mode 100644 index 0000000000..073e8a9b05 Binary files /dev/null and b/programs/media/log_el/trunk/tl_sys_16.png differ diff --git a/programs/media/log_el/trunk/toolbar.png b/programs/media/log_el/trunk/toolbar.png new file mode 100644 index 0000000000..16c0a6c9d9 Binary files /dev/null and b/programs/media/log_el/trunk/toolbar.png differ diff --git a/programs/media/log_el/trunk/triger_dc.txt b/programs/media/log_el/trunk/triger_dc.txt new file mode 100644 index 0000000000..563e147fc3 --- /dev/null +++ b/programs/media/log_el/trunk/triger_dc.txt @@ -0,0 +1,20 @@ +size 124 28 +elements 9 + 66 17 0 not + 66 6 0 not + 56 5 0 and[2] + 56 16 0 and[2] + 48 5 0 not + 48 18 0 not + 38 4 0 and[2] + 38 17 0 and[2] + 30 19 0 not +captions 2 + 4 5 z D + 4 7 z C +points 17 + 63 7 1 54 11 9 71 7 3 54 13 3 71 18 9 63 18 1 + 64 11 6 71 15 6 64 15 9 71 13 12 53 19 1 45 19 1 + 35 20 1 53 6 1 45 6 1 36 7 6 28 5 7 +subpoints 2 + 64 13 28 7 diff --git a/programs/media/log_el/trunk/triger_rs.txt b/programs/media/log_el/trunk/triger_rs.txt new file mode 100644 index 0000000000..9007790701 --- /dev/null +++ b/programs/media/log_el/trunk/triger_rs.txt @@ -0,0 +1,14 @@ +size 96 32 +elements 4 + 28 5 0 or[2] + 38 6 0 not + 28 16 0 or[2] + 38 17 0 not +captions 2 + 6 6 z R + 6 19 z S +points 12 + 35 7 1 26 11 9 43 7 3 26 13 3 43 18 9 35 18 1 + 36 11 6 43 15 6 36 15 9 43 13 12 6 6 1 6 19 1 +subpoints 1 + 36 13 diff --git a/programs/media/log_el/trunk/triger_web.txt b/programs/media/log_el/trunk/triger_web.txt new file mode 100644 index 0000000000..6583928994 --- /dev/null +++ b/programs/media/log_el/trunk/triger_web.txt @@ -0,0 +1,26 @@ +size 80 64 +elements 12 + 47 20 0 and[2] + 57 21 0 not + 47 32 0 and[2] + 57 33 0 not + 38 20 0 not + 38 34 0 not + 28 19 0 and[2] + 28 32 0 and[3] + 28 8 0 and[2] + 28 46 0 and[2] + 38 47 0 not + 38 9 0 not +captions 2 + 4 35 z C + 4 49 z D +points 36 + 62 22 3 62 34 9 54 22 1 45 26 9 54 26 2 62 28 4 + 45 28 2 54 30 1 62 30 2 54 34 1 43 21 11 43 35 3 + 35 21 1 35 35 1 26 30 3 43 15 6 24 35 13 35 10 1 + 35 48 1 26 15 9 43 40 12 26 17 3 35 17 8 35 13 1 + 43 13 8 24 22 1 22 9 1 22 52 9 43 42 2 26 44 3 + 35 44 8 26 42 9 35 40 1 43 52 8 43 30 12 4 49 1 +subpoints 5 + 35 15 54 28 22 35 35 42 22 49