diff --git a/programs/media/animage/trunk/animage.asm b/programs/media/animage/trunk/animage.asm index 195d34b6a3..a27bbc9114 100644 --- a/programs/media/animage/trunk/animage.asm +++ b/programs/media/animage/trunk/animage.asm @@ -1,6 +1,10 @@ ;******************************************************* ;**************GRAPHICS EDITOR ANIMAGE ***************** ;******************************************************* +; version: 1.4 +; last update: 12/03/2016 +; changes: Use library 'libimg.obj' +;-------------------------------------------------------- ; version: 1.3 ; last update: 05/10/2010 ; written by: Marat Zakiyanov aka Mario79, aka Mario @@ -20,25 +24,28 @@ use32 org 0x0 - db 'MENUET01' dd 0x1 dd START dd IM_END - dd I_END ;0x19000;100 kb - dd stacktop ;0x19000; + dd I_END + dd stacktop dd file_path ;parameters dd cur_dir_path - include '../../../config.inc' ;for nightbuild -include '..\..\..\macros.inc' +include '../../../macros.inc' +include '../../../proc32.inc' +include '../../../KOSfuncs.inc' include '../../../develop/libraries/box_lib/load_lib.mac' - @use_library +include '../../../dll.inc' +include '../../../libio.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load + COLOR_ORDER equ MENUETOS include 'gif_lite.inc' include 'bmplib.inc' -;include 'dialog.inc' include 'dialog2.inc' include 'design.inc' include 'graphlib.inc' @@ -78,13 +85,13 @@ include 'init_data.inc' ;--------------------------------------------------------- ;---------Check loading of file from parameters----------- ;--------------------------------------------------------- -; mov eax,parameters -; mov ebx,file_path -; call check_loading_from_parameters mov eax,file_path cmp [eax],byte 0 jz @f call load_picture + call MovePictureToWorkScreen + mov [Scroll1CoordinatX],9 + mov [Scroll2CoordinatY],89 @@: ;--------------------------------------------------------------------- @@ -171,6 +178,7 @@ include 'width_lines.inc' dd 0 panel_picture: file 'panel_buttons.gif' +.end: ;****************cursors****************** brush_cursor: file 'brush.cur' @@ -314,28 +322,12 @@ align 4 CursorsID rd 10 ;--------------------------------------------------------------------- align 4 -file_path: - rb 4096 -;--------------------------------------------------------------------- -align 4 -filename_area: - rb 256 -;--------------------------------------------------------------------- -align 4 -temp_dir_pach: - rb 4096 -;--------------------------------------------------------------------- -align 4 -library_path: - rb 4096 -;--------------------------------------------------------------------- -align 4 -cur_dir_path: - rb 4096 -;--------------------------------------------------------------------- -align 4 -procinfo: - rb 1024 +file_path rb 4096 +filename_area rb 256 +temp_dir_pach rb 4096 +library_path rb 4096 +cur_dir_path rb 4096 +procinfo: rb 1024 ;--------------------------------------------------------------------- align 4 rb 4096 diff --git a/programs/media/animage/trunk/bmplib.inc b/programs/media/animage/trunk/bmplib.inc index 7a4cf994a4..b59342c5ed 100644 --- a/programs/media/animage/trunk/bmplib.inc +++ b/programs/media/animage/trunk/bmplib.inc @@ -1,235 +1,3 @@ -;************************************************************************** -;**********************DECODING BMP FILE(1,4,8,24 bits)********************* -;*************************************************************************** -; BMPTOIMG -Convert BMP format TO IMG format -;*************************************************************************** -bmptoimg: - - mov [bmp_load_area],esi - mov [img_dest_area],edi - xor eax,eax - mov ax,word[esi+28] - mov ebx,[esi+14] - mov ecx,[esi+18] - mov edx,[esi+22] - mov [bmp_bits_per_pixel],ax - mov [bmp_first_structure_size],ebx - mov [Bmp_SizeY],edx - mov [Bmp_SizeX],ecx - - xor eax,eax - mov ax,[esi+28] - mul dword [esi+18] - add eax,31 - shr eax,5 - mov dword [bmptoimg_data_area_dwps],eax ;dwps-doublewords per string - shl eax,2 - mov dword [bmptoimg_data_area_bps],eax ;bps-bytes per string - - cmp dword [esi+34],0 - jne yespicsize ;if picture size is defined - mul dword [esi+22] - mov dword [esi+34],eax - - yespicsize: - - mov eax,[bmp_load_area] - add eax, [esi+10] ;how mach bytes to begin bitmap - add eax, [esi+34] ;size of bitmap in BMP file - mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file - ;calculate bytes per string - mov eax, [esi+18] - lea eax,[eax+2*eax] ;3x pixels in eax - mov [bmp_bytes_per_string],eax - - mov esi,dword [bmptoimg_data_area_eop] - sub esi,dword [bmptoimg_data_area_bps] - - mov ebp,[img_dest_area] - mov edi,[img_dest_area] - mov ebx,[bmp_load_area] - add ebx, [bmp_first_structure_size] - add ebx,14 ;in ebx start of color table - - - cmp [bmp_bits_per_pixel],24 - je convert_to_24bpp - - cmp [bmp_bits_per_pixel],8 - je convert_to_8bpp - - cmp [bmp_bits_per_pixel],4 - je convert_to_4bpp - - cmp [bmp_bits_per_pixel],1 - je convert_to_1bpp - - jmp end_bmp - -;-------------------------------------------------- -;-----------Decoding 24 bit BMP file--------------- -;-------------------------------------------------- -convert_to_24bpp: - - mov ebx,[Bmp_SizeY] - loop_convert_to_24bpp_y: - - mov edi,ebp - mov ecx,[bmptoimg_data_area_dwps] - - cld - rep movsd - - sub esi,[bmptoimg_data_area_bps] - sub esi,[bmptoimg_data_area_bps] - - add ebp,eax - dec ebx - jnz loop_convert_to_24bpp_y - - jmp end_bmp -;----------------------------------------------------- -;--------------Decoding 8 bits BMP file--------------- -;----------------------------------------------------- - convert_to_8bpp: - - mov ebp,[Bmp_SizeY] - loop_convert_8bpp_y: - - mov ecx,[bmptoimg_data_area_bps] - push edi - - loop_convert_8bpp_x: - - xor eax,eax - mov al,byte [esi] - call converttable - inc esi - add edi,3 - - dec ecx - jnz loop_convert_8bpp_x - - pop edi - - add edi,[bmp_bytes_per_string] - sub esi,[bmptoimg_data_area_bps] - sub esi,[bmptoimg_data_area_bps] - - dec ebp - jnz loop_convert_8bpp_y - - jmp end_bmp -;----------------------------------------------------- -;--------------Decoding 4 bits BMP file--------------- -;----------------------------------------------------- - convert_to_4bpp: - - mov ebp,[Bmp_SizeY] - loop_convert_4bpp_y: - - mov ecx,[bmptoimg_data_area_bps] - push edi - - loop_convert_4bpp_x: - - mov [Bmp_save1],ecx - xor eax,eax - mov al,byte [esi] - xor ecx,ecx - mov cl,al - shr al,4 ;first pixel in byte - and cl,0xf ;second pixel in byte - call converttable ;draw first pixel of byte - mov eax,ecx ;move second pixel to register al and draw - add edi,3 - call converttable ;draw second pixel of byte - add edi,3 - mov ecx,[Bmp_save1] - inc esi - - dec ecx - jnz loop_convert_4bpp_x - - pop edi - - add edi,[bmp_bytes_per_string] - sub esi,[bmptoimg_data_area_bps] - sub esi,[bmptoimg_data_area_bps] - - dec ebp - jnz loop_convert_4bpp_y - - jmp end_bmp -;----------------------------------------------------- -;---------------Decoding 1 bit BMP file--------------- -;----------------------------------------------------- - convert_to_1bpp: - - mov ebp,[Bmp_SizeY] - loop_convert_1bpp_y: - - mov ecx,[bmptoimg_data_area_bps] - push edi - - loop_convert_1bpp_x: - - xor eax,eax - mov al,byte [esi] - mov [Bmp_save1],ecx - mov ecx,eax - mov edx,7 - nextbit: - xor eax,eax - bt ecx,edx - jnc noaddelem - inc eax - noaddelem: - - push edx - call converttable - pop edx - - add edi,3 - dec edx - jns nextbit - mov ecx,[Bmp_save1] - inc esi - dec ecx - jnz loop_convert_1bpp_x - - pop edi - - add edi,[bmp_bytes_per_string] - sub esi,[bmptoimg_data_area_bps] - sub esi,[bmptoimg_data_area_bps] - - dec ebp - jnz loop_convert_1bpp_y - - jmp end_bmp -;----------------------------------------------------- - converttable: - shl eax,2 - add eax,ebx - mov edx, dword [eax] - mov [edi],edx - ret -;----------------------------------------------------- -; DATA AREA -bmptoimg_data_area_bps dd 0 -bmptoimg_data_area_dwps dd 0 -bmptoimg_data_area_eop dd 0 -bmp_load_area dd 0 -img_dest_area dd 0 -bmp_bits_per_pixel dw 0 -bmp_first_structure_size dd 0 -bmp_bytes_per_string dd 0 - -end_bmp: - -ret - ;*************************************************************************** ;*******************CODING BMP FILE(1,4,8,24 bits)************************** ;*************************************************************************** diff --git a/programs/media/animage/trunk/files.inc b/programs/media/animage/trunk/files.inc index 9b6cc7140c..ba79070d8d 100644 --- a/programs/media/animage/trunk/files.inc +++ b/programs/media/animage/trunk/files.inc @@ -116,15 +116,7 @@ save_file: ;-------------file information structure------------------- ;---------------------------------------------------------- -file_information: - - dd 5 - dd 0 - dd 0 - dd 0 - dd bufer_for_info - dd 0 - dd filepath +file_information FileInfoBlock 5,0,0,0,bufer_for_info,0,filepath filepath rb 1040 diff --git a/programs/media/animage/trunk/icons.inc b/programs/media/animage/trunk/icons.inc index ac539e0810..858b4b7721 100644 --- a/programs/media/animage/trunk/icons.inc +++ b/programs/media/animage/trunk/icons.inc @@ -2,13 +2,13 @@ ;---load icons in memory and draw icons on panel----------- ;----------------------------------------------------------- load_icons: - mov esi,panel_picture - mov edi,[ScreenPointer] - add edi,(1200*1000*3) - ;mov edi,[PointerToIcons] - call ReadGIF - - ret + stdcall [img_decode], panel_picture, panel_picture.end-panel_picture, 0 + mov ebx,eax + mov edi,[ScreenPointer] + add edi,(1200*1000*3)+8 + stdcall [img_to_rgb2], ebx,edi ;преобразуем изображение к формату rgb + stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения + ret draw_icons: diff --git a/programs/media/animage/trunk/lib_data.inc b/programs/media/animage/trunk/lib_data.inc index d35b965400..424e90b7c6 100644 --- a/programs/media/animage/trunk/lib_data.inc +++ b/programs/media/animage/trunk/lib_data.inc @@ -1,19 +1,27 @@ ;--------------------------------------------------------------------- -system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 -;--------------------------------------------------------------------- head_f_i: head_f_l db 'System error',0 +;--------------------------------------------------------------------- +system_dir_1: db '/sys/lib/libimg.obj',0 +err_message_found_lib_1 db 39,'libimg.obj',39,' - Not found!',0 +err_message_import_1 db 39,'libimg.obj',39,' - Wrong import!',0 -err_message_found_lib2 db 'proc_lib.obj - Not found!',0 +system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 +err_message_found_lib2 db 39,'proc_lib.obj',39,' - Not found!',0 +err_message_import2 db 39,'proc_lib.obj',39,' - Wrong import!',0 -err_message_import2 db 'proc_lib.obj - Wrong import!',0 +system_dir_3: db '/sys/lib/kmenu.obj',0 +err_message_found_lib_3 db 39,'kmenu.obj',39,' - Not found!',0 +err_message_import_3 db 39,'kmenu.obj',39,' - Wrong import!',0 ;--------------------------------------------------------------------- align 4 l_libs_start: - -library02 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ -err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i - + lib1 l_libs system_dir_1+9, cur_dir_path, library_path, system_dir_1,\ + err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i + lib2 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ + err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i + lib3 l_libs system_dir_3+9, cur_dir_path, library_path, system_dir_3,\ + err_message_found_lib_3, head_f_l, import_libkmenu, err_message_import_3, head_f_i end_l_libs: ;--------------------------------------------------------------------- align 4 @@ -53,6 +61,8 @@ dd Filter.end - Filter .1: db 'BMP',0 db 'GIF',0 +db 'JPG',0 +db 'PNG',0 .end: db 0 @@ -60,6 +70,52 @@ db 0 path4 db '/sys/noname.bmp',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 + 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 ProcLib_import: OpenDialog_Init dd aOpenDialog_Init @@ -70,4 +126,28 @@ OpenDialog_Start dd aOpenDialog_Start aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 ;aOpenDialog_Version db 'Version_OpenDialog',0 + +align 4 +import_libkmenu: + kmenu_init dd akmenu_init + kmainmenu_draw dd akmainmenu_draw + kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent + ksubmenu_new dd aksubmenu_new + ksubmenu_delete dd aksubmenu_delete + ksubmenu_draw dd aksubmenu_draw + ksubmenu_add dd aksubmenu_add + kmenuitem_new dd akmenuitem_new + kmenuitem_delete dd akmenuitem_delete + kmenuitem_draw dd akmenuitem_draw +dd 0,0 + akmenu_init db 'kmenu_init',0 + akmainmenu_draw db 'kmainmenu_draw',0 + akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 + aksubmenu_new db 'ksubmenu_new',0 + aksubmenu_delete db 'ksubmenu_delete',0 + aksubmenu_draw db 'ksubmenu_draw',0 + aksubmenu_add db 'ksubmenu_add',0 + akmenuitem_new db 'kmenuitem_new',0 + akmenuitem_delete db 'kmenuitem_delete',0 + akmenuitem_draw db 'kmenuitem_draw',0 ;--------------------------------------------------------------------- \ No newline at end of file diff --git a/programs/media/animage/trunk/load_from_parameters.inc b/programs/media/animage/trunk/load_from_parameters.inc index c468851b5f..ab96010386 100644 --- a/programs/media/animage/trunk/load_from_parameters.inc +++ b/programs/media/animage/trunk/load_from_parameters.inc @@ -1,88 +1,54 @@ ; load picture from file to memory +align 4 +open_b rb 560 load_picture: - mov eax,file_path - mov ebx,[ScreenPointer] - add ebx,0x10000 + mov [file_information.Function], SSF_GET_INFO + mov [file_information.Position], 0 + mov [file_information.Flags], 0 + mov dword[file_information.Count], 0 + mov dword[file_information.Buffer], open_b + mov byte[file_information+20], 0 + mov dword[file_information.FileName], file_path + mcall SF_FILE,file_information + or eax,eax + jnz .end_open - call load_heading_of_file - - mov esi,[ScreenPointer] - add esi,0x10000 -;-------------is this BMP file ?---------------- - xor eax,eax - mov ax,[esi] - mov [type],ax - - cmp [type],word 'BM' - jne no_bmp_file_1 - - xor eax,eax - xor ebx,ebx - mov eax,[esi+18] - mov ebx,[esi+22] - mov [Picture_SizeX],eax - mov [Picture_SizeY],ebx - jmp exit_type_1 - -no_bmp_file_1: -;-------------is this GIF file ?---------------- - xor eax,eax - mov ax,[esi] - mov [type],ax - cmp [type],'GI' - jne no_gif_file_1 - - add esi,6 - xor eax,eax - xor ebx,ebx - mov ax,word[esi] - mov bx,word[esi+2] - mov [Picture_SizeX],eax - mov [Picture_SizeY],ebx - jmp exit_type_1 - -no_gif_file_1: - jmp no_unpakcing_file_1 - -exit_type_1: -;---------------------------------------------------------- -;Get momory for unpacking picture and for picture's bufers -;---------------------------------------------------------- - call GetMemory -;---------------------------------------------------------- -;--------------------Load file in memory------------------- -;---------------------------------------------------------- - - mov eax,file_path - mov ebx,[PointerToCopyPicture] - add ebx,1000 - call load_file - -;---------------------------------------------------------- -;-------------------Unpacking picture---------------------- -;---------------------------------------------------------- - mov esi,[PointerToCopyPicture] - add esi,1000 - mov edi,[PointerToPicture] - mov eax,[ScreenPointer] - cmp [type],'BM' - jne no_unpakcing_bmp_file_1 -;BMP DECODER - call bmptoimg - mov [save_flag],1 - jmp no_unpakcing_file_1 - -no_unpakcing_bmp_file_1: - cmp [type],'GI' - jne no_unpakcing_file_1 -;GIF DECODER - sub edi,8 - call ReadGIF - mov [save_flag],1 - -no_unpakcing_file_1: - call MovePictureToWorkScreen - mov [Scroll1CoordinatX],9 - mov [Scroll2CoordinatY],89 + mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах + add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 + mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] + mov [ScreenPointer],eax + add eax,0x10000 + sub ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 + mov [file_information.Function], SSF_READ_FILE + mov [file_information.Position], 0 + mov [file_information.Flags], 0 + mov [file_information.Count], ecx + mov [file_information.Buffer], eax + mov byte[file_information+20], 0 + mov [file_information.FileName], file_path + mcall SF_FILE,file_information ;загружаем файл изображения + cmp ebx,0xffffffff + je .end_open + ;определяем вид изображения и пишем его параметры + mov eax,[ScreenPointer] + add eax,0x10000 + stdcall [img_decode], eax,ebx,0 + push eax + ;определяем размер декодированного изображения + mov ecx,[eax+4] ;+4 = image width + mov dword[Picture_SizeX],ecx + mov eax,[eax+8] ;+8 = image height + mov dword[Picture_SizeY],eax + imul ecx,eax + imul ecx,15 + add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 + mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] + mov [ScreenPointer],eax + call prepare_data_pointers + pop ebx + stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb + stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения + mov [save_flag],1 + .end_open: ret diff --git a/programs/media/animage/trunk/menu_instruments.inc b/programs/media/animage/trunk/menu_instruments.inc index e2ecdcffbe..ae8d6a43ed 100644 --- a/programs/media/animage/trunk/menu_instruments.inc +++ b/programs/media/animage/trunk/menu_instruments.inc @@ -164,99 +164,14 @@ no_new: cmp [OpenDialog_data.status],1 jne still ;--------------------------------------------------------------------- -open_1: +;open_1: mcall 40,0x80000027 ; 100111b - mov eax,file_path - mov ebx,[ScreenPointer] - add ebx,0x10000 + call load_picture - call load_heading_of_file - - mov esi,[ScreenPointer] - add esi,0x10000 -;-------------is this BMP file ?---------------- - xor eax,eax - mov ax,[esi] - mov [type],ax - - cmp [type],word 'BM' - jne no_bmp_file - - xor eax,eax - xor ebx,ebx - mov eax,[esi+18] - mov ebx,[esi+22] - mov [Picture_SizeX],eax - mov [Picture_SizeY],ebx - jmp exit_type -;--------------------------------------------------------------------- -no_bmp_file: -;-------------is this GIF file ?---------------- - xor eax,eax - mov ax,[esi] - mov [type],ax - - cmp [type],'GI' - jne no_gif_file - - add esi,6 - xor eax,eax - xor ebx,ebx - mov ax,word[esi] - mov bx,word[esi+2] - mov [Picture_SizeX],eax - mov [Picture_SizeY],ebx - jmp exit_type -;--------------------------------------------------------------------- -no_gif_file: - jmp no_unpakcing_file -;--------------------------------------------------------------------- -exit_type: -;---------------------------------------------------------- -;Get momory for unpacking picture and for picture's bufers -;---------------------------------------------------------- - call GetMemory -;---------------------------------------------------------- -;--------------------Load file in memory------------------- -;---------------------------------------------------------- - mov eax,file_path - mov ebx,[PointerToCopyPicture] - add ebx,1000 - call load_file -;---------------------------------------------------------- -;-------------------Unpacking picture---------------------- -;---------------------------------------------------------- - mov esi,[PointerToCopyPicture] - add esi,1000 - mov edi,[PointerToPicture] - mov eax,[ScreenPointer] - - cmp [type],'BM' - jne no_unpakcing_bmp_file - ;BMP DECODER - - call bmptoimg - - mov [save_flag],1 - jmp draw_1 -;--------------------------------------------------------------------- -no_unpakcing_bmp_file: - cmp [type],'GI' - jne no_unpakcing_file - ;GIF DECODER - sub edi,8 - - call ReadGIF - - mov [save_flag],1 - jmp draw_1 -;--------------------------------------------------------------------- -no_unpakcing_file: call load_icons -draw_1: call drawwin -open_2: + mov [Scroll1CoordinatX],9 mov [Scroll2CoordinatY],89 and [number_panel],0 diff --git a/programs/media/animage/trunk/panel_data.inc b/programs/media/animage/trunk/panel_data.inc index 14b6a4f455..0de1c6a255 100644 --- a/programs/media/animage/trunk/panel_data.inc +++ b/programs/media/animage/trunk/panel_data.inc @@ -1,7 +1,7 @@ ;********************************************************** ;------------------TEXT DATA------------------------------- ;********************************************************** -name_of_program db 'ANIMAGE graphics editor v1.3',0 +name_of_program db 'ANIMAGE graphics editor v1.4',0 mouse_pos_x db 'X=' mouse_pos_y db 'Y=' new_text1 db 'PICTURE SIZE X'