diff --git a/programs/develop/libraries/box_lib/trunk/t_edit.mac b/programs/develop/libraries/box_lib/trunk/t_edit.mac index a3039e2a1e..546f129ce3 100644 --- a/programs/develop/libraries/box_lib/trunk/t_edit.mac +++ b/programs/develop/libraries/box_lib/trunk/t_edit.mac @@ -1,6 +1,6 @@ ; макрос для системной библиотеки box_lib.obj ; элемент TextEditor для Kolibri OS -; файл последний раз изменялся 22.08.2011 IgorA +; файл последний раз изменялся 19.06.2012 IgorA ; на код применена GPL2 лицензия ;input: @@ -2339,15 +2339,60 @@ endp ; ebx = колличество прочитанных байт align 4 proc ted_open_file, edit:dword, file:dword, f_name:dword ;функция открытия файла - push edi + push ecx edx edi mov edi,dword[edit] + ; *** проверяем размер памяти и если не хватает то увеличиваем *** + ;пробуем получить информацию о файле + mov eax,70 + mov ebx,dword[file] + mov dword[ebx], 5 + mov dword[ebx+4], 0 + mov dword[ebx+8], 0 + mov dword[ebx+12], 0 + m2m dword[ebx+16], ted_tex + mov byte[ebx+20], 0 + push dword[f_name] + pop dword[ebx+21] + int 0x40 + cmp eax,0 + je .end_0 + mov edx,ted_max_chars + cmp eax,2 ;функция не поддерживается для данной файловой системы + je @f + jmp .ret_f + .end_0: + ;проверяем хватит ли памяти для загрузки файла + mov ecx,ted_max_chars + sub ecx,2 ;ecx = максимальное число байт, для которых была выделена память + mov edx,ted_tex + mov edx,dword[edx+32] ;+32 = +0x20: qword: размер файла в байтах + cmp edx,ecx + jl @f + ;увеличиваем память если не хватило + mov ecx,edx ;память необходимая для открытия файла + add ecx,2 ;память для служебных начального и конечного символов + add ecx,ted_increase_size ;память для редактирования файла + mov ted_max_chars,ecx + imul ecx,sizeof.symbol + invoke mem.realloc, ted_tex,ecx + mov ted_tex,eax + mov ted_tex_1,eax + add ted_tex_1,sizeof.symbol + add eax,ecx + mov ted_tex_end,eax + mov ecx,ted_tex_1 + add ecx,sizeof.symbol + mov ted_ptr_free_symb,ecx + @@: + + ; *** пробуем открыть файл *** mov eax,70 mov ebx,dword[file] mov dword[ebx], 0 mov dword[ebx+4], 0 mov dword[ebx+8], 0 - m2m dword[ebx+12], ted_max_chars ;число байт, которые могут быть считаны с файла + m2m dword[ebx+12], edx ;число байт, которые могут быть считаны с файла (не больше чем ted_max_chars) m2m dword[ebx+16], ted_tex mov byte[ebx+20], 0 push dword[f_name] @@ -2365,7 +2410,7 @@ proc ted_open_file, edit:dword, file:dword, f_name:dword ; ;if open file call ted_on_open_file .ret_f: - pop edi + pop edi edx ecx ret endp diff --git a/programs/media/voxel_editor/trunk/vaz2106.vox b/programs/media/voxel_editor/trunk/vaz2106.vox index c92cfa43f2..6df5b8cca7 100644 Binary files a/programs/media/voxel_editor/trunk/vaz2106.vox and b/programs/media/voxel_editor/trunk/vaz2106.vox differ diff --git a/programs/media/voxel_editor/trunk/voxel_editor.asm b/programs/media/voxel_editor/trunk/voxel_editor.asm index 90b8b4e96a..69b339bf24 100644 --- a/programs/media/voxel_editor/trunk/voxel_editor.asm +++ b/programs/media/voxel_editor/trunk/voxel_editor.asm @@ -17,7 +17,7 @@ include 'dll.inc' include 'vox_draw.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -caption db 'Voxel editor 12.06.12',0 ;подпись окна +caption db 'Voxel editor 19.06.12',0 ;подпись окна struct FileInfoBlock Function dd ? @@ -474,13 +474,13 @@ draw_pok: mov edi,[sc.work_button] int 0x40 ;масштаб mov ecx,[v_cur_x] - add edx,(6*2)*65536+9 - int 0x40 ; + add edx,9 + int 0x40 ;курсор x mov ecx,[v_cur_y] - add edx,(6*0)*65536+9 - int 0x40 ; + add edx,9 + int 0x40 ;курсор y mov ecx,[n_plane] - add edx,(6*0)*65536+9 + add edx,9 int 0x40 ;номер сечения mov eax,4 ;рисование текста @@ -914,7 +914,8 @@ push edi mov ebx,[scaled_zoom] sub eax,ebx inc ebx - stdcall [buf2d_vox_obj_draw_3g_scaled], buf_r_img, buf_r_z, buf_vox, [open_file_vox], 0,0, 0, ebx, [cam_x],[cam_y],[cam_z],eax, 0xd080d0 + stdcall [buf2d_vox_obj_draw_3g_scaled], buf_r_img, buf_r_z, buf_vox,\ + [open_file_vox], 0,0, 0, ebx, [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] bt dword[mode_light],0 jnc @f stdcall [buf2d_vox_obj_draw_3g_shadows], buf_r_img, buf_r_z, buf_vox, 0,0, 0, ebx, 3 @@ -1038,14 +1039,66 @@ draw_objects: stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, 0,0, 0, [scaled_zoom], 3 .end_2: .end_0: - pop ecx ebx eax + call draw_vox_cursor stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране stdcall [buf2d_draw], buf_pl ;обновляем буфер на экране .end_f: ret +;рисование курсора +align 4 +draw_vox_cursor: +pushad + mov ecx,[v_zoom] + cmp ecx,[scaled_zoom] + jle @f + mov ecx,[scaled_zoom] + @@: + xor edx,edx + inc edx + shl edx,cl + + mov eax,[v_cur_x] + cmp eax,edx + jge .end_f ;курсор за пределами поля + mov edi,TILE_SIZE + imul eax,edi + add eax,OT_MAP_X + mov ebx,edx + dec ebx + sub ebx,[v_cur_y] + imul ebx,edi + add ebx,OT_MAP_Y + inc eax + inc ebx + sub edi,2 + stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph] + dec ebx + add edi,2 + + ;горизонтальные линии + sub eax,2 + mov ecx,edi + imul edi,edx + shr ecx,1 + add ebx,ecx ;центровка по середине клетки + mov ecx,OT_MAP_X + add edi,ecx + stdcall [buf2d_line], buf_pl, ecx,ebx, eax,ebx,[sc.work_graph] + add eax,TILE_SIZE + inc eax + cmp eax,edi + jge @f ;если курсор на краю поля + dec edi + stdcall [buf2d_line], buf_pl, eax,ebx, edi,ebx,[sc.work_graph] + @@: + + .end_f: +popad + ret + if 0 ;input: ; buf - указатель на строку, число должно быть в 10 или 16 ричном виде diff --git a/programs/other/t_edit/readme.htm b/programs/other/t_edit/readme.htm index b3c6afb4ec..9ee3c8deea 100644 --- a/programs/other/t_edit/readme.htm +++ b/programs/other/t_edit/readme.htm @@ -76,16 +76,10 @@ table яюфётхЄър чрЁрэхх чр°шЄр т яЁюуЁрььєяюфётхЄър схЁхЄё  шч Їрщыют, ъюЄюЁ√х ьюцхЄ єърчрЄ№ яюы№чютрЄхы№. ╥ръцх хёЄ№ тючьюцэюёЄ№ яюыєўрЄ№ ёяЁртъє яю яюфётхўштрхь√ь ёыютрь (хёыш юэр хёЄ№ т Їрщырї яюфётхЄъш, эртхёЄш ъєЁёюЁ эр ёыютю ш эрцрЄ№ F1). ╠эюуюъЁрЄэр  юЄьхэр/яютЄюЁ фхщёЄтшщ эхЄхёЄ№ -╬уЁрэшўхэш  эр ЁрчьхЁ Їрщыют - эхЄхёЄ№ яЁш юЄъЁ√Єшш Їрщыют, яЁш ЁхфръЄшЁютрэшш эхЄ

═хъюЄюЁ√х эхфюЁрсюЄъш