diff --git a/programs/media/iconedit/trunk/iconedit.asm b/programs/media/iconedit/trunk/iconedit.asm deleted file mode 100644 index 5bf27166de..0000000000 --- a/programs/media/iconedit/trunk/iconedit.asm +++ /dev/null @@ -1,983 +0,0 @@ -; -; Modified from original icon editor -; -; Compile with FASM for Menuet -; - use32 - org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; header version - dd START ; start of code - dd I_END ; size of image - dd 0x100000 ; memory for app - dd 0x7fff0 ; esp - dd 0x0 , 0x0 ; I_Param , I_Icon - -include 'lang.inc' -include '..\..\..\macros.inc' - -window_x_size equ 346 -window_y_size equ 312 - -START: ; start of execution - - call draw_window ; at first, draw the window - call get_screen_size ; get screen x and y size - -check_mouse: - - call draw_mouse ; are we editing the icon - call check_colour ; are we selecting a colour - -still: - - mov eax,23 ; wait here for event - mov ebx,1 ; for 1ms - mcall - - cmp eax,1 ; redraw request ? - je red - cmp eax,2 ; key in buffer ? - je key - cmp eax,3 ; button in buffer ? - je button - - jmp check_mouse ; start loop again - - red: ; redraw - call draw_window ; draw our window - jmp check_mouse ; start the loop again - key: - - mov eax,2 ; get a key - mcall ; do it - shr eax,8 ; move it to al - cmp byte [editstate],0 ; are we in edit mode - je check_mouse ; if not start loop again - cmp al,8 ; is it a backspace - jne no_bksp ; if no jump over backspace code - cmp byte [editpos],0 ; is it the first character - je no_del_last ; if yes jump over backspace code - dec byte [editpos] ; decrement our position - xor ebx,ebx ; clear pointer - mov bl,byte [editpos] ; get our position - add ebx,icon ; add our offset - mov byte [ebx],0 ; delete character -no_del_last: - call draw_filename ; update filename - jmp check_mouse ; start loop again -no_bksp: - cmp al,13 ; is it the enter key - jne no_enter ; no then jump over enter code - mov byte [editstate],0 ; get out of edit mode - call draw_filename ; update filename - jmp check_mouse ; start loop again -no_enter: - cmp al,31 ; are we below character 31 - jbe no_lit ; then must be illegal - cmp al,97 ; are we below character 97 - jb capital ; then must be ok - sub eax,32 ; else subtract 32 from it to make it legal -capital: - xor ebx,ebx ; clear our pointer - mov bl,byte [editpos] ; get our position - add ebx,icon ; add our offset - mov byte [ebx],al ; move our character into buffer - inc byte [editpos] ; increment our edit position - cmp byte [editpos],12 ; are we at our last position - jne no_null_state ; no then jump over last position code - mov byte [editstate],0 ; get out of edit mode -no_null_state: - call draw_filename ; update filename -no_lit: - jmp check_mouse ; start loop again - - button: ; button - mov eax,17 ; get id - mcall - - cmp ah,1 ; button id=1 ? - jne button_3 - mov eax,-1 ; close this program - mcall - button_3: - cmp ah,3 ; was it button 3 - FILENAME - jne button_4 ; no then try button 4 - cld ; - mov byte [editstate],1 ; enter edit mode - mov edi,icon ; point to our buffer - mov eax,0x20202020 ; file reg with 4 spaces - mov ecx,3 ; going to write it 3 times - rep stosd ; repeat giving 12 spaces - mov byte [editpos],0 ; zero our edit position - call draw_filename ; update filename - jmp check_mouse ; start loop again - button_4: - cmp ah,4 ; was it button 4 - LOAD - jne button_5 ; no then try button 5 - mov byte [editstate],0 ; dont want to be in edit mode - call draw_filename ; update filename - call load_file ; load the file - call draw_icon ; update icon screen - call draw_graph ; update edit screen - jmp check_mouse ; start loop again - button_5: - cmp ah,5 ; was it button 5 - SAVE - jne button_6 ; no then try button 6 - mov byte [editstate],0 ; dont want to be in edit mode - call draw_filename ; update filename - call save_file ; save the file - jmp check_mouse ; start loop again - button_6: - cmp ah,6 ; was it button 6 - CLEAR ICON - jne button_7 ; no then try button 7 - mov byte [editstate],0 ; dont want to be in edit mode - call draw_filename ; update filename - call clear_graph_icon ; clear the icon and edit screens - jmp check_mouse - - button_7: - cmp ah,7 ; was it button 7 - FLIP ICON - jne button_8 ; no then try button 8 - call flip_icon ; flip - jmp check_mouse - - button_8: - cmp ah,8 ; was it button 8 - MIRROR ICON - jne button_9 ; no then try button 9 - call flip_diag ; flip L/R and U/D - call flip_icon ; cheated now have to flip it - jmp check_mouse - - button_9: - cmp ah,9 ; was it button 9 - FLIP L/R and U/D - jne button_10 ; no then try button 10 - call flip_diag ; flip L/R and U/D - call draw_icon ; update icon - call draw_graph ; update graph - jmp check_mouse - - button_10: - cmp ah,10 ; was it button 9 - SET AS BGR - jne check_mouse ; no then exit - call set_background ; set as background - - jmp check_mouse ; start loop again - -; ********************************************* -; ******* WINDOW DEFINITIONS AND DRAW ******** -; ********************************************* -draw_window: - - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,1 ; 1, start of draw - mcall - ; DRAW WINDOW - mov eax,0 ; function 0 : define and draw window - mov ebx,100*65536+window_x_size ; [x start] *65536 + [x size] - mov ecx,100*65536+window_y_size ; [y start] *65536 + [y size] - mov edx,0x14ffffff ; color of work area 0x00RRGGBB - mov edi,title ; WINDOW LABEL - mcall - - mov eax,13 ; function 13 : draw bar - mov ebx,5*65536+window_x_size-9 ; [x start] *65536 + [x size] - mov ecx,(window_y_size-20)*65536+16 ; [y start] *65536 + [y size] - mov edx,0x7799bb ; colour 0x00RRGGBB - mcall - ; DEFINE BUTTON 3 : FILENAME - mov eax,8 ; function 8 : define button - mov ebx,5*65536+62 ; [x start] *65536 + [x size] - mov ecx,(window_y_size-19)*65536+14 ; [y start] *65536 + [y size] - mov edx,3 ; button id number - mov esi,0x7799bb ; button color 0x00RRGGBB - mcall - ; BUTTON 3 TEXT - mov eax,4 ; function 4 : write text to window - mov ebx,13*65536+window_y_size-15 ; [x start] *65536 + [y start] - mov ecx,0xddeeff ; text color 0x00RRGGBB - mov edx,button_text_3 ; pointer to text beginning - mov esi,8 ; text length - mcall - - call draw_filename ; update filename - - ; DEFINE BUTTON 4 : LOAD - mov eax,8 ; function 8 : define button - mov ebx,(window_x_size-87)*65536+38 ; [x start] *65536 + [x size] - mov ecx,(window_y_size-19)*65536+14 ; [y start] *65536 + [y size] - mov edx,4 ; button id number - mov esi,0x7799bb ; button color 0x00RRGGBB - mcall - ; DEFINE BUTTON 5 : SAVE - mov ebx,(window_x_size-43)*65536+38 ; [x start] *65536 + [x size] - mov edx,5 ; button id number - mcall - ; DEFINE BUTTON 6 : CLEAR ICON - mov ebx,268*65536+72 ; [x start] *65536 + [x size] - mov ecx,65*65536+14 ; [y start] *65536 + [y size] - mov edx,6 ; button id number - mcall - ; DEFINE BUTTON 7 : FLIP VERTICAL - mov ecx,85*65536+14 ; [y start] *65536 + [y size] - mov edx,7 ; button id number - mcall - ; DEFINE BUTTON 8 : FLIP HORIZONTAL - mov ecx,105*65536+14 ; [y start] *65536 + [y size] - mov edx,8 ; button id number - mcall - ; DEFINE BUTTON 9 : SET AS BACKGROUND - mov ecx,125*65536+14 ; [y start] *65536 + [y size] - mov edx,9 ; button id number - mcall - ; DEFINE BUTTON 10 : SET AS BACKGROUND - mov ecx,145*65536+14 ; [y start] *65536 + [y size] - mov edx,10 ; button id number - mcall - ; BUTTON 4 TEXT - mov eax,4 ; function 4 : write text to window - mov ebx,267*65536+window_y_size-15 ; [x start] *65536 + [y start] - mov ecx,0xddeeff ; text color 0x00RRGGBB - mov edx,button_text_4 ; pointer to text beginning - mov esi,4 ; text length - mcall - ; BUTTON 5 TEXT - mov ebx,311*65536+window_y_size-15 ; [x start] *65536 + [y start] - mov edx,button_text_5 ; pointer to text beginning - mcall - ; BUTTON 6 TEXT - mov ebx,275*65536+69 ; [x start] *65536 + [y start] - mov edx,button_text_6 ; pointer to text beginning - mov esi,10 ; text length - mcall - ; BUTTON 7 TEXT - mov ebx,275*65536+89 ; [x start] *65536 + [y start] - mov edx,button_text_7 ; pointer to text beginning - mcall - ; BUTTON 8 TEXT - mov ebx,275*65536+109 ; [x start] *65536 + [y start] - mov edx,button_text_8 ; pointer to text beginning - mcall - ; BUTTON 9 TEXT - mov ebx,275*65536+129 ; [x start] *65536 + [y start] - mov edx,button_text_9 ; pointer to text beginning - mcall - ; BUTTON 10 TEXT - mov ebx,275*65536+149 ; [x start] *65536 + [y start] - mov edx,button_text_10 ; pointer to text beginning - mcall - ; DRAW GRAPH BACKGROUND - mov eax,13 ; function 13 : draw bar - mov ebx,6*65536+257 ; [x start] *65536 + [x size] - mov ecx,26*65536+257 ; [y start] *65536 + [y size] - mov edx,0x7799bb ; colour 0x00RRGGBB - mcall - ; DRAW ICON BACKGROUND - mov ebx,268*65536+34 ; [x start] *65536 + [x size] - mov ecx,26*65536+34 ; [y start] *65536 + [y size] - mcall - ; DRAW PALETTE BACKGROUND - mov ebx,268*65536+34 ; [x start] *65536 + [x size] - mov ecx,217*65536+33 ; [y start] *65536 + [y size] - mcall - ; DRAW PALETTE BACKGROUND - mov ebx,268*65536+33 ; [x start] *65536 + [x size] - mov ecx,250*65536+33 ; [y start] *65536 + [y size] - mcall - ; DRAW PALETTE BACKGROUND - mov ebx,301*65536+33 ; [x start] *65536 + [x size] - mov ecx,249*65536+34 ; [y start] *65536 + [y size] - mcall - ; DRAW GREYSCALE BACKGROUND - mov ebx,307*65536+34 ; [x start] *65536 + [x size] - mov ecx,210*65536+34 ; [y start] *65536 + [y size] - mcall - ; DRAW SELECTED COLOUR BACKGROUND - mov ebx,268*65536+73 ; [x start] *65536 + [x size] - mov ecx,171*65536+34 ; [y start] *65536 + [y size] - mcall - ; DRAW WHITE TO START - mov ebx,269*65536+71 ; [x start] *65536 + [x size] - mov ecx,172*65536+32 ; [y start] *65536 + [y size] - mov edx,0xffffff ; colour 0x00RRGGBB - mcall - ; DRAW PALETTE RED + GREEN SECTION - xor edi,edi ; clear column loop count -next_r_g_outer: - xor esi,esi ; clear line loop count -next_r_g_inner: - mov eax,1 ; function 1 : putpixel - mov ebx,edi ; get column count - shr ebx,3 ; divide by 8 - add ebx,269 ; add our x offset - mov ecx,esi ; get our line count - shr ecx,3 ; divide by 8 - add ecx,218 ; add our y offset - mov edx,255 ; maximum red - sub edx,edi ; minus column count - shl edx,8 ; into position 0x0000RR00 - add edx,255 ; maximum green - sub edx,esi ; minus line count - shl edx,8 ; into position 0x00RRGG00 - mcall - add esi,5 ; colour in steps of 5 to keep small - cmp esi,255 ; have we done a line - jne next_r_g_inner ; nop then do next pixel - add edi,5 ; colour in steps of 5 to keep small - cmp edi,255 ; have we done all columns - jne next_r_g_outer ; no then start the next one - - ; DRAW PALETTE GREEN + BLUE SECTION - mov edi,0 ; as above -next_g_b_outer: - mov esi,0 -next_g_b_inner: - mov eax,1 - mov ebx,edi - shr ebx,3 - add ebx,269 - mov ecx,esi - shr ecx,3 - add ecx,250 - mov edx,255 - sub edx,edi - shl edx,16 - add edx,esi - mcall - add esi,5 - cmp esi,255 - jne next_g_b_inner - add edi,5 - cmp edi,255 - jne next_g_b_outer - - ; DRAW PALETTE BLUE + RED SECTION - mov edi,0 ; as above -next_b_r_outer: - mov esi,0 -next_b_r_inner: - mov eax,1 - mov ebx,edi - shr ebx,3 - add ebx,301 - mov ecx,esi - shr ecx,3 - add ecx,250 - mov edx,edi - shl edx,8 - add edx,esi - mcall - add esi,5 - cmp esi,255 - jne next_b_r_inner - add edi,5 - cmp edi,255 - jne next_b_r_outer - - ; DRAW GREYSCALE - mov edi,0 -next_b_w_outer: - mov esi,0 -next_b_w_inner: - mov eax,1 - mov ebx,edi - shr ebx,3 - add ebx,308 - mov ecx,esi - shr ecx,3 - add ecx,211 - mov edx,esi - shl edx,8 - add edx,esi - shl edx,8 - add edx,esi - mcall - add esi,5 - cmp esi,255 - jne next_b_w_inner - add edi,5 - cmp edi,255 - jne next_b_w_outer - - cmp [first_run],0 ; is it the first window draw - jne dont_load ; no then dont reload the file - call load_file ; load initial file - mov [first_run],1 ; first window draw done -dont_load: - call draw_icon ; draw icon area - call draw_graph ; draw edit area - - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,2 ; 2, end of draw - mcall - - ret ; return - -; ********************************************* -; ******* SET BACKGROUND ******** -; ********************************************* -set_background: - - mov ecx,image+3600 ; point to our decode buffer - mov edx,image+54+32*32*3-96 ; point to last line of bmp - - mov edi,0 ; zero line count -decode_line: - mov esi,0 ; zero column count -decode_column: - mov ebx,[edx] ; get our data - mov [ecx],ebx ; store our data - add ecx,4 ; add 4 bytes to pointer as using double word - add edx,4 ; add 4 bytes to pointer - inc esi ; increment column count - cmp esi,24 ; have we done all columns - jne decode_column ; no then do some more - sub edx,192 ; move back 2 lines of bmp data - inc edi ; increment line count - cmp edi,33 ; have we done all lines - jne decode_line ; no then do another one - - mov eax,15 ; background - mov ebx,1 ; set background size - mov ecx,32 ; x size - mov edx,32 ; y size - mcall ; do it - mov ebx,4 ; type of background draw - mov ecx,1 ; tile - mcall ; do it - mov ebx,5 ; blockmove image to os bgr memory - mov ecx,image+3600 ; point to image - mov edx,0 ; start of bgr memory - mov esi,32*32*3 ; byte count - mcall ; do it - mov ebx,3 ; draw background - mcall ; do it - - ret ; return - -; ********************************************* -; ******* GET SCREEN X and Y SIZE ******** -; ********************************************* -get_screen_size: - - mov eax,14 ; function 14 : get screen max - mcall ; returns eax : 0xXXXXYYYY - push eax ; save reg - and eax,0x0000ffff ; split out y size - add eax,1 ; add 1 to remove zero base - mov [y_size],eax ; store for later - pop eax ; restore reg - shr eax,16 ; move x size down the reg - add eax,1 ; add 1 to remove zero base - mov [x_size],eax ; store for later - - ret - -; ********************************************* -; ******* LOAD FILE ******** -; ********************************************* -load_file: - - mov eax,6 ; function 6 : load file - mov ebx,icon ; point to the name - mov ecx,0 ; reserved - mov edx,200000 ; reserved - mov esi,image ; point to image buffer - mcall ; do it - - ret ; return - -; ********************************************* -; ******* SAVE FILE ******** -; ********************************************* -save_file: - - mov eax,33 ; function 33 : save file - mov ebx,icon ; point to name - mov ecx,image ; point to our data - mov edx,54+32*32*3 ; how much data to transfer - xor esi,esi ; 0 - create a new file - mcall ; do it - - ret ; return - -; ********************************************* -; ******* DRAW FILENAME TO SCREEN ******** -; ********************************************* -draw_filename: - ; DRAW COLOUR BACKGROUND - pusha ; save all registers on stack - mov eax,13 ; function 13 : draw bar - mov ebx,73*65536+81 ; [x start] *65536 + [x size] - mov ecx,(window_y_size-19)*65536+15 ; [y start] *65536 + [y size] - mov edx,0x557799 ; colour 0x00RRGGBB - mcall - - mov eax,4 ; function 4 : write text to window - mov ebx,78*65536+(window_y_size-15) ; [y start] *65536 + [y size] - xor ecx,ecx ; colour 0x00RRGGBB = black - mov edx,icon ; point to text - mov esi,12 ; number of characters to write - cmp byte [editstate],1 ; are we in edit mode - jne no_active_1 ; no then jump over change colour - mov ecx,0x00112299 ; else change colour -no_active_1: - mcall ; do it - popa ; return all registers to original - ret ; return - -; ********************************************* -; ******* DRAW ICON FROM LOADED FILE ******** -; ********************************************* -draw_icon: - - mov ecx,27 ; y start position - mov eax,image+51+32*32*3 ; point to our bmp data - mov edi,0 ; line count -line: - mov esi,0 ; column count - mov ebx,269+31 ; x start position -pixel: - mov edx,[eax] ; colour 0x00RRGGBB from image data - push eax ; save our position - mov eax,1 ; function 1 : put pixel - mcall ; do it - pop eax ; restore our position - sub eax,3 ; point to next pixel colour - dec ebx ; move our x position - inc esi ; increment our column count - cmp esi,32 ; have we done all columns - jne pixel ; no then do next pixel - inc ecx ; move our y position - inc edi ; increment line count - cmp edi,32 ; have we done all lines - jne line ; no then do next line - - ret ; return - -; ********************************************* -; ******* DRAW GRAPH FROM LOADED FILE ******* -; ********************************************* -draw_graph: - - mov edi,0 ; line count - mov eax,image+51+32*32*3 ; point to our bmp data -next_lin: - mov ecx,edi ; use our line count for position - shl ecx,3 ; multiply by eight - add ecx,27 ; add y start position - shl ecx,16 ; move into top eight bytes [y start] - add ecx,7 ; add box height [y size] - mov esi,32 ; column count -next_bo: - mov ebx,esi ; use our column count for position - shl ebx,3 ; multiply by eight - add ebx,-1 ; add a correction - shl ebx,16 ; and move into top eight bytes [x start] - add ebx,7 ; add box width [x size] - mov edx,[eax] ; point to bmp data - push eax ; save our position - mov eax,13 ; function 13 : draw bar - mcall ; do it - pop eax ; restore our position - sub eax,3 ; point to next pixel colour - dec esi ; increment column count - cmp esi,0 ; have we done all columns - jne next_bo ; no then do the next column - inc edi ; increment line count - cmp edi,32 ; have we done all lines - jne next_lin ; no then do the next line - - ret ; return - -; ********************************************* -; ******* CLEAR GRAPH and ICON AREA ******** -; ********************************************* -clear_graph_icon: - - ; CLEAR IMAGE DATA - mov edi,image+54 ; point to our data - mov eax,0x00000000 ; data to write - mov ecx,(32*32*3)/4 ; how much data - rep stosd ; repeat until all data transfered - call draw_icon ; draw a blank icon - call draw_graph ; draw a blank graph - - ret ; return - -; ********************************************* -; ******* FLIP ICON TOP to BOTTOM ******** -; ********************************************* -flip_icon: - - mov ecx,image+54 ; point at first line - mov edx,image+54+32*32*3+96 ; point 1 line past end - - mov edi,0 ; zero line count -lines: - mov esi,0 ; zero column count - sub edx,192 ; move back 2 lines -columns: - mov eax,[ecx] ; get bytes - mov ebx,[edx] ; get bytes - mov [ecx],ebx ; swap bytes - mov [edx],eax ; swap bytes - add ecx,4 ; move pointer - add edx,4 ; move pointer - inc esi ; increment column count - cmp esi,24 ; have we done all columns - jne columns ; no then do next column - inc edi ; increment line count - cmp edi,16 ; have we done all lines - jne lines ; no then do next line - call draw_icon ; update icon - call draw_graph ; update graph - - ret ; return - -; ********************************************* -; ******* FLIP ICON DIAGONAL ******** -; ********************************************* -flip_diag: - - mov ecx,image+54 ; point line 1 first bytes - mov edx,image+3600 ; point to buffer - xor esi,esi ; zero byte count - - pusha ; save all registers -copy_out: - mov eax,[ecx] ; get bytes - mov [edx],eax ; copy bytes - add ecx,4 ; move pointer - add edx,4 ; move pointer - inc esi ; increment byte count - cmp esi,24*32 ; have we done all bytes - jne copy_out ; no then do the next - popa ; restore all registers - - mov edx,image+3600+32*32*3-3 ; point to last bytes -copy_in: - mov eax,[edx] ; get bytes - mov [ecx],eax ; copy to image first bytes - add ecx,3 ; move pointer 3 bytes - sub edx,3 ; move pointer 3 bytes - inc esi ; increment byte count - cmp esi,32*32 ; have we done all bytes - jne copy_in ; no then do next - - ret ; return - -; ********************************************* -; ******* DRAW MOUSE ON GRAPH / ICON ******** -; ********************************************* -draw_mouse: - - mov eax,37 ; function 37 - mov ebx,2 ; sub function 2 : check for mouse button - mcall ; do it - cmp eax,0 ; was a button pressed - je exit_mouse ; no then jump to exit - cmp eax,1 ; left hand button - je colour_mouse ; we are using selected colour - mov [draw_colour],0x000000 ; else draw with black - jmp blank ; jmp over colour select -colour_mouse: - mov eax,[sel_colour] ; get our selected colour - mov [draw_colour],eax ; save our selected colour -blank: - mov eax,37 ; function 37 - mov ebx,1 ; sub function 1 : get mouse position - mcall ; do it - push eax ; save our x/y position for later - and eax,0x0000ffff ; y is in lower bytes - add eax,1 ; add 1 because we are zero based - mov [my_pos],eax ; save y position - pop eax ; restore our x/y position - shr eax,16 ; shift x into lower bytes - add eax,1 ; add 1 because we are zero based - mov [mx_pos],eax ; save x position - cmp [mx_pos],7 ; check we are within x/y limits - jle exit_mouse - cmp [mx_pos],263 - jge exit_mouse - cmp [my_pos],27 - jle exit_mouse - cmp [my_pos],283 - jge exit_mouse - mov eax,[mx_pos] ; calculate nearest square and save - sub eax,7 ; subtract 7 graph zero offset - shr eax,3 ; divide by 8 (box size) loose remainder - mov [icon_x],eax ; save for use later in icon - shl eax,3 ; multiply by 8 to get box position - add eax,7 ; add 7 graph zero offset - mov [gx_pos],eax ; save graph x position - mov eax,[my_pos] ; repeat for y - sub eax,27 ; - shr eax,3 ; - mov [icon_y],eax ; - shl eax,3 ; - add eax,27 ; - mov [gy_pos],eax ; - mov eax,13 ; function 13 : draw bar - mov ebx,[gx_pos] ; load graph x position - shl ebx,16 ; shift into high bytes - add ebx,7 ; add box size - mov ecx,[gy_pos] ; repeat for y - shl ecx,16 ; - add ecx,7 ; - mov edx,[draw_colour] ; give it a colour - mcall ; do it - mov eax,1 ; function 1 : put pixel - mov ebx,[icon_x] ; icon x from above - add ebx,269 ; add icon x offset - mov ecx,[icon_y] ; icon y from above - add ecx,27 ; add icon y offset - mov edx,[draw_colour] ; give it a colour - mcall ; do it - mov ecx,image+54 ; point to our data - mov ebx,31 ; 32 lines in image zero based - sub ebx,[icon_y] ; get the correct line - mov eax,96 ; 96 or 3 bytes per colour * 32 columns - mul ebx ; multiply by 96 result in eax - add ecx,eax ; add to our position - mov ebx,[icon_x] ; get the correct column - mov eax,3 ; 3 bytes per colour - mul ebx ; multiply by 3 result in eax - add ecx,eax ; add to our position - mov ebx,[draw_colour] ; get our colour - mov [ecx],bl ; move blue into image data - mov [ecx+1],bh ; move green into image data - shr ebx,16 ; shift red down - mov [ecx+2],bl ; move red into image data -exit_mouse: - - ret ; return - -; ********************************************* -; ******* GET COLOUR TO DRAW WITH ******** -; ********************************************* -check_colour: - - mov eax,37 ; function 37 - mov ebx,2 ; sub function 2 : check for mouse button - mcall ; do it - cmp eax,0 ; was a button pressed - je exit_draw ; no then jump to exit - mov eax,37 ; function 37 - mov ebx,1 ; sub function 1 : get mouse position - mcall ; do it - push eax ; save our x/y position for later - and eax,0x0000ffff ; y is in lower bytes - add eax,1 ; add 1 because we are zero based - mov [my_pos],eax ; save y position - pop eax ; restore our x/y position - shr eax,16 ; shift x into lower bytes - add eax,1 ; add 1 because we are zero based - mov [mx_pos],eax ; save x position - cmp [mx_pos],270 ; check we are within x/y limits - jl check_rb - cmp [mx_pos],301 - jg check_rb - cmp [my_pos],219 - jl check_rb - cmp [my_pos],250 - jg check_rb - - call decode_mouse - - mov edi,0 -next_sel_rg_outer: - mov esi,0 -next_sel_rg_inner: - mov eax,1 - mov ebx,edi - shr ebx,3 - add ebx,308 - mov ecx,esi - shr ecx,3 - add ecx,211 - mov edx,[sel_colour] - add edx,esi - mcall - add esi,5 - cmp esi,255 - jne next_sel_rg_inner - add edi,5 - cmp edi,255 - jne next_sel_rg_outer - - -check_rb: - - cmp [mx_pos],270 ; check we are within x/y limits - jl check_bg - cmp [mx_pos],301 - jg check_bg - cmp [my_pos],251 - jle check_bg - cmp [my_pos],282 - jg check_bg - - call decode_mouse - - mov edi,0 -next_sel_rb_outer: - mov esi,0 -next_sel_rb_inner: - mov ebx,edi - shr ebx,3 - add ebx,308 - mov ecx,esi - shr ecx,3 - add ecx,211 - mov edx,[sel_colour] - mov eax,esi - shl eax,8 - add edx,eax - mov eax,1 - mcall - add esi,5 - cmp esi,255 - jne next_sel_rb_inner - add edi,5 - cmp edi,255 - jne next_sel_rb_outer - - -check_bg: - - cmp [mx_pos],301 ; check we are within x/y limits - jl get_colour - cmp [mx_pos],333 - jg get_colour - cmp [my_pos],251 - jl get_colour - cmp [my_pos],282 - jg get_colour - - call decode_mouse - - mov edi,0 -next_sel_bg_outer: - mov esi,0 -next_sel_bg_inner: - mov ebx,edi - shr ebx,3 - add ebx,308 - mov ecx,esi - shr ecx,3 - add ecx,211 - mov edx,[sel_colour] - mov eax,esi - shl eax,16 - add edx,eax - mov eax,1 - mcall - add esi,5 - cmp esi,255 - jne next_sel_bg_inner - add edi,5 - cmp edi,255 - jne next_sel_bg_outer - -get_colour: - - cmp [mx_pos],309 ; check we are within x/y limits - jl exit_draw - cmp [mx_pos],340 - jg exit_draw - cmp [my_pos],212 - jl exit_draw - cmp [my_pos],243 - jg exit_draw - - call decode_mouse - - mov eax,13 - mov ebx,269*65536+71 - mov ecx,172*65536+32 - mov edx,[sel_colour] - mcall - - mov eax,[sel_colour] - mov [draw_colour],eax - - mov eax,47 - xor ebx,ebx - mov ebx,6 - shl ebx,16 - mov bh,1 - mov ecx,[sel_colour] - mov edx,273*65536+176 - mov esi,0x000000 - mcall - -exit_draw: - - ret - -; ********************************************* -; ******* DECODE MOUSE POSITION GET PIX ***** -; ********************************************* - -decode_mouse: - - mov eax,37 - xor ebx,ebx - mcall - mov ebx,eax - mov ecx,eax - and ebx,0xffff0000 - shr ebx,16 - and ecx,0x0000ffff - mov eax,[x_size] - imul ecx,eax - add ebx,ecx - mov eax,35 - dec ebx - mcall - - mov [sel_colour],eax - - ret - -; ********************************************* -; ******* DATA AREA ***** -; ********************************************* - -mx_pos dd 0x0 -my_pos dd 0x0 - -gx_pos dd 0x0 -gy_pos dd 0x0 - -icon_x dd 0x0 -icon_y dd 0x0 - -x_size dd 0x0 -y_size dd 0x0 - -sel_colour dd 0x00ffffff -draw_colour dd 0x00ffffff - -button_text_3 db 'FILENAME' -button_text_4 db 'LOAD' -button_text_5 db 'SAVE' -button_text_6 db 'CLEAR ICON' -button_text_7 db 'FLIP VERT ' -button_text_8 db 'FLIP HORIZ' -button_text_9 db 'FLIP DIAG ' -button_text_10 db 'SET AS BGR' - -title db 'ICON EDITOR',0 - -icon: db 'WRITE.BMP ' - -editpos db 0 -editstate db 0 - -first_run db 0 - -image: - -I_END: diff --git a/programs/media/cdp/trunk/Tupfile.lua b/programs/other/outdated/cdp/trunk/Tupfile.lua similarity index 100% rename from programs/media/cdp/trunk/Tupfile.lua rename to programs/other/outdated/cdp/trunk/Tupfile.lua diff --git a/programs/media/cdp/trunk/build_en.bat b/programs/other/outdated/cdp/trunk/build_en.bat similarity index 100% rename from programs/media/cdp/trunk/build_en.bat rename to programs/other/outdated/cdp/trunk/build_en.bat diff --git a/programs/media/cdp/trunk/build_ru.bat b/programs/other/outdated/cdp/trunk/build_ru.bat similarity index 100% rename from programs/media/cdp/trunk/build_ru.bat rename to programs/other/outdated/cdp/trunk/build_ru.bat diff --git a/programs/media/cdp/trunk/cdp.asm b/programs/other/outdated/cdp/trunk/cdp.asm similarity index 99% rename from programs/media/cdp/trunk/cdp.asm rename to programs/other/outdated/cdp/trunk/cdp.asm index b52446f82c..4e7d29b2c9 100644 --- a/programs/media/cdp/trunk/cdp.asm +++ b/programs/other/outdated/cdp/trunk/cdp.asm @@ -4,7 +4,7 @@ ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -include "..\..\..\macros.inc" +include "..\..\..\..\macros.inc" include "lang.inc" FALSE equ 0 @@ -755,10 +755,10 @@ draw_window: mcall ; WINDOW TITLE mcall - mov eax,71 - mov ebx,1 - mov ecx,labelt - int 40h + mov eax,71 + mov ebx,1 + mov ecx,labelt + int 40h mov eax,13 ;bar mov ebx,8 shl 16 + 204 diff --git a/programs/media/iconedit/trunk/Tupfile.lua b/programs/other/outdated/iconedit/trunk/Tupfile.lua similarity index 100% rename from programs/media/iconedit/trunk/Tupfile.lua rename to programs/other/outdated/iconedit/trunk/Tupfile.lua diff --git a/programs/media/iconedit/trunk/build_en.bat b/programs/other/outdated/iconedit/trunk/build_en.bat similarity index 100% rename from programs/media/iconedit/trunk/build_en.bat rename to programs/other/outdated/iconedit/trunk/build_en.bat diff --git a/programs/media/iconedit/trunk/build_ru.bat b/programs/other/outdated/iconedit/trunk/build_ru.bat similarity index 100% rename from programs/media/iconedit/trunk/build_ru.bat rename to programs/other/outdated/iconedit/trunk/build_ru.bat diff --git a/programs/other/outdated/iconedit/trunk/iconedit.asm b/programs/other/outdated/iconedit/trunk/iconedit.asm new file mode 100644 index 0000000000..309698088a --- /dev/null +++ b/programs/other/outdated/iconedit/trunk/iconedit.asm @@ -0,0 +1,983 @@ +; +; Modified from original icon editor +; +; Compile with FASM for Menuet +; + use32 + org 0x0 + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd START ; start of code + dd I_END ; size of image + dd 0x100000 ; memory for app + dd 0x7fff0 ; esp + dd 0x0 , 0x0 ; I_Param , I_Icon + +include 'lang.inc' +include '..\..\..\..\macros.inc' + +window_x_size equ 346 +window_y_size equ 312 + +START: ; start of execution + + call draw_window ; at first, draw the window + call get_screen_size ; get screen x and y size + +check_mouse: + + call draw_mouse ; are we editing the icon + call check_colour ; are we selecting a colour + +still: + + mov eax,23 ; wait here for event + mov ebx,1 ; for 1ms + mcall + + cmp eax,1 ; redraw request ? + je red + cmp eax,2 ; key in buffer ? + je key + cmp eax,3 ; button in buffer ? + je button + + jmp check_mouse ; start loop again + + red: ; redraw + call draw_window ; draw our window + jmp check_mouse ; start the loop again + key: + + mov eax,2 ; get a key + mcall ; do it + shr eax,8 ; move it to al + cmp byte [editstate],0 ; are we in edit mode + je check_mouse ; if not start loop again + cmp al,8 ; is it a backspace + jne no_bksp ; if no jump over backspace code + cmp byte [editpos],0 ; is it the first character + je no_del_last ; if yes jump over backspace code + dec byte [editpos] ; decrement our position + xor ebx,ebx ; clear pointer + mov bl,byte [editpos] ; get our position + add ebx,icon ; add our offset + mov byte [ebx],0 ; delete character +no_del_last: + call draw_filename ; update filename + jmp check_mouse ; start loop again +no_bksp: + cmp al,13 ; is it the enter key + jne no_enter ; no then jump over enter code + mov byte [editstate],0 ; get out of edit mode + call draw_filename ; update filename + jmp check_mouse ; start loop again +no_enter: + cmp al,31 ; are we below character 31 + jbe no_lit ; then must be illegal + cmp al,97 ; are we below character 97 + jb capital ; then must be ok + sub eax,32 ; else subtract 32 from it to make it legal +capital: + xor ebx,ebx ; clear our pointer + mov bl,byte [editpos] ; get our position + add ebx,icon ; add our offset + mov byte [ebx],al ; move our character into buffer + inc byte [editpos] ; increment our edit position + cmp byte [editpos],12 ; are we at our last position + jne no_null_state ; no then jump over last position code + mov byte [editstate],0 ; get out of edit mode +no_null_state: + call draw_filename ; update filename +no_lit: + jmp check_mouse ; start loop again + + button: ; button + mov eax,17 ; get id + mcall + + cmp ah,1 ; button id=1 ? + jne button_3 + mov eax,-1 ; close this program + mcall + button_3: + cmp ah,3 ; was it button 3 - FILENAME + jne button_4 ; no then try button 4 + cld ; + mov byte [editstate],1 ; enter edit mode + mov edi,icon ; point to our buffer + mov eax,0x20202020 ; file reg with 4 spaces + mov ecx,3 ; going to write it 3 times + rep stosd ; repeat giving 12 spaces + mov byte [editpos],0 ; zero our edit position + call draw_filename ; update filename + jmp check_mouse ; start loop again + button_4: + cmp ah,4 ; was it button 4 - LOAD + jne button_5 ; no then try button 5 + mov byte [editstate],0 ; dont want to be in edit mode + call draw_filename ; update filename + call load_file ; load the file + call draw_icon ; update icon screen + call draw_graph ; update edit screen + jmp check_mouse ; start loop again + button_5: + cmp ah,5 ; was it button 5 - SAVE + jne button_6 ; no then try button 6 + mov byte [editstate],0 ; dont want to be in edit mode + call draw_filename ; update filename + call save_file ; save the file + jmp check_mouse ; start loop again + button_6: + cmp ah,6 ; was it button 6 - CLEAR ICON + jne button_7 ; no then try button 7 + mov byte [editstate],0 ; dont want to be in edit mode + call draw_filename ; update filename + call clear_graph_icon ; clear the icon and edit screens + jmp check_mouse + + button_7: + cmp ah,7 ; was it button 7 - FLIP ICON + jne button_8 ; no then try button 8 + call flip_icon ; flip + jmp check_mouse + + button_8: + cmp ah,8 ; was it button 8 - MIRROR ICON + jne button_9 ; no then try button 9 + call flip_diag ; flip L/R and U/D + call flip_icon ; cheated now have to flip it + jmp check_mouse + + button_9: + cmp ah,9 ; was it button 9 - FLIP L/R and U/D + jne button_10 ; no then try button 10 + call flip_diag ; flip L/R and U/D + call draw_icon ; update icon + call draw_graph ; update graph + jmp check_mouse + + button_10: + cmp ah,10 ; was it button 9 - SET AS BGR + jne check_mouse ; no then exit + call set_background ; set as background + + jmp check_mouse ; start loop again + +; ********************************************* +; ******* WINDOW DEFINITIONS AND DRAW ******** +; ********************************************* +draw_window: + + mov eax,12 ; function 12:tell os about windowdraw + mov ebx,1 ; 1, start of draw + mcall + ; DRAW WINDOW + mov eax,0 ; function 0 : define and draw window + mov ebx,100*65536+window_x_size ; [x start] *65536 + [x size] + mov ecx,100*65536+window_y_size ; [y start] *65536 + [y size] + mov edx,0x14ffffff ; color of work area 0x00RRGGBB + mov edi,title ; WINDOW LABEL + mcall + + mov eax,13 ; function 13 : draw bar + mov ebx,5*65536+window_x_size-9 ; [x start] *65536 + [x size] + mov ecx,(window_y_size-20)*65536+16 ; [y start] *65536 + [y size] + mov edx,0x7799bb ; colour 0x00RRGGBB + mcall + ; DEFINE BUTTON 3 : FILENAME + mov eax,8 ; function 8 : define button + mov ebx,5*65536+62 ; [x start] *65536 + [x size] + mov ecx,(window_y_size-19)*65536+14 ; [y start] *65536 + [y size] + mov edx,3 ; button id number + mov esi,0x7799bb ; button color 0x00RRGGBB + mcall + ; BUTTON 3 TEXT + mov eax,4 ; function 4 : write text to window + mov ebx,13*65536+window_y_size-15 ; [x start] *65536 + [y start] + mov ecx,0xddeeff ; text color 0x00RRGGBB + mov edx,button_text_3 ; pointer to text beginning + mov esi,8 ; text length + mcall + + call draw_filename ; update filename + + ; DEFINE BUTTON 4 : LOAD + mov eax,8 ; function 8 : define button + mov ebx,(window_x_size-87)*65536+38 ; [x start] *65536 + [x size] + mov ecx,(window_y_size-19)*65536+14 ; [y start] *65536 + [y size] + mov edx,4 ; button id number + mov esi,0x7799bb ; button color 0x00RRGGBB + mcall + ; DEFINE BUTTON 5 : SAVE + mov ebx,(window_x_size-43)*65536+38 ; [x start] *65536 + [x size] + mov edx,5 ; button id number + mcall + ; DEFINE BUTTON 6 : CLEAR ICON + mov ebx,268*65536+72 ; [x start] *65536 + [x size] + mov ecx,65*65536+14 ; [y start] *65536 + [y size] + mov edx,6 ; button id number + mcall + ; DEFINE BUTTON 7 : FLIP VERTICAL + mov ecx,85*65536+14 ; [y start] *65536 + [y size] + mov edx,7 ; button id number + mcall + ; DEFINE BUTTON 8 : FLIP HORIZONTAL + mov ecx,105*65536+14 ; [y start] *65536 + [y size] + mov edx,8 ; button id number + mcall + ; DEFINE BUTTON 9 : SET AS BACKGROUND + mov ecx,125*65536+14 ; [y start] *65536 + [y size] + mov edx,9 ; button id number + mcall + ; DEFINE BUTTON 10 : SET AS BACKGROUND + mov ecx,145*65536+14 ; [y start] *65536 + [y size] + mov edx,10 ; button id number + mcall + ; BUTTON 4 TEXT + mov eax,4 ; function 4 : write text to window + mov ebx,267*65536+window_y_size-15 ; [x start] *65536 + [y start] + mov ecx,0xddeeff ; text color 0x00RRGGBB + mov edx,button_text_4 ; pointer to text beginning + mov esi,4 ; text length + mcall + ; BUTTON 5 TEXT + mov ebx,311*65536+window_y_size-15 ; [x start] *65536 + [y start] + mov edx,button_text_5 ; pointer to text beginning + mcall + ; BUTTON 6 TEXT + mov ebx,275*65536+69 ; [x start] *65536 + [y start] + mov edx,button_text_6 ; pointer to text beginning + mov esi,10 ; text length + mcall + ; BUTTON 7 TEXT + mov ebx,275*65536+89 ; [x start] *65536 + [y start] + mov edx,button_text_7 ; pointer to text beginning + mcall + ; BUTTON 8 TEXT + mov ebx,275*65536+109 ; [x start] *65536 + [y start] + mov edx,button_text_8 ; pointer to text beginning + mcall + ; BUTTON 9 TEXT + mov ebx,275*65536+129 ; [x start] *65536 + [y start] + mov edx,button_text_9 ; pointer to text beginning + mcall + ; BUTTON 10 TEXT + mov ebx,275*65536+149 ; [x start] *65536 + [y start] + mov edx,button_text_10 ; pointer to text beginning + mcall + ; DRAW GRAPH BACKGROUND + mov eax,13 ; function 13 : draw bar + mov ebx,6*65536+257 ; [x start] *65536 + [x size] + mov ecx,26*65536+257 ; [y start] *65536 + [y size] + mov edx,0x7799bb ; colour 0x00RRGGBB + mcall + ; DRAW ICON BACKGROUND + mov ebx,268*65536+34 ; [x start] *65536 + [x size] + mov ecx,26*65536+34 ; [y start] *65536 + [y size] + mcall + ; DRAW PALETTE BACKGROUND + mov ebx,268*65536+34 ; [x start] *65536 + [x size] + mov ecx,217*65536+33 ; [y start] *65536 + [y size] + mcall + ; DRAW PALETTE BACKGROUND + mov ebx,268*65536+33 ; [x start] *65536 + [x size] + mov ecx,250*65536+33 ; [y start] *65536 + [y size] + mcall + ; DRAW PALETTE BACKGROUND + mov ebx,301*65536+33 ; [x start] *65536 + [x size] + mov ecx,249*65536+34 ; [y start] *65536 + [y size] + mcall + ; DRAW GREYSCALE BACKGROUND + mov ebx,307*65536+34 ; [x start] *65536 + [x size] + mov ecx,210*65536+34 ; [y start] *65536 + [y size] + mcall + ; DRAW SELECTED COLOUR BACKGROUND + mov ebx,268*65536+73 ; [x start] *65536 + [x size] + mov ecx,171*65536+34 ; [y start] *65536 + [y size] + mcall + ; DRAW WHITE TO START + mov ebx,269*65536+71 ; [x start] *65536 + [x size] + mov ecx,172*65536+32 ; [y start] *65536 + [y size] + mov edx,0xffffff ; colour 0x00RRGGBB + mcall + ; DRAW PALETTE RED + GREEN SECTION + xor edi,edi ; clear column loop count +next_r_g_outer: + xor esi,esi ; clear line loop count +next_r_g_inner: + mov eax,1 ; function 1 : putpixel + mov ebx,edi ; get column count + shr ebx,3 ; divide by 8 + add ebx,269 ; add our x offset + mov ecx,esi ; get our line count + shr ecx,3 ; divide by 8 + add ecx,218 ; add our y offset + mov edx,255 ; maximum red + sub edx,edi ; minus column count + shl edx,8 ; into position 0x0000RR00 + add edx,255 ; maximum green + sub edx,esi ; minus line count + shl edx,8 ; into position 0x00RRGG00 + mcall + add esi,5 ; colour in steps of 5 to keep small + cmp esi,255 ; have we done a line + jne next_r_g_inner ; nop then do next pixel + add edi,5 ; colour in steps of 5 to keep small + cmp edi,255 ; have we done all columns + jne next_r_g_outer ; no then start the next one + + ; DRAW PALETTE GREEN + BLUE SECTION + mov edi,0 ; as above +next_g_b_outer: + mov esi,0 +next_g_b_inner: + mov eax,1 + mov ebx,edi + shr ebx,3 + add ebx,269 + mov ecx,esi + shr ecx,3 + add ecx,250 + mov edx,255 + sub edx,edi + shl edx,16 + add edx,esi + mcall + add esi,5 + cmp esi,255 + jne next_g_b_inner + add edi,5 + cmp edi,255 + jne next_g_b_outer + + ; DRAW PALETTE BLUE + RED SECTION + mov edi,0 ; as above +next_b_r_outer: + mov esi,0 +next_b_r_inner: + mov eax,1 + mov ebx,edi + shr ebx,3 + add ebx,301 + mov ecx,esi + shr ecx,3 + add ecx,250 + mov edx,edi + shl edx,8 + add edx,esi + mcall + add esi,5 + cmp esi,255 + jne next_b_r_inner + add edi,5 + cmp edi,255 + jne next_b_r_outer + + ; DRAW GREYSCALE + mov edi,0 +next_b_w_outer: + mov esi,0 +next_b_w_inner: + mov eax,1 + mov ebx,edi + shr ebx,3 + add ebx,308 + mov ecx,esi + shr ecx,3 + add ecx,211 + mov edx,esi + shl edx,8 + add edx,esi + shl edx,8 + add edx,esi + mcall + add esi,5 + cmp esi,255 + jne next_b_w_inner + add edi,5 + cmp edi,255 + jne next_b_w_outer + + cmp [first_run],0 ; is it the first window draw + jne dont_load ; no then dont reload the file + call load_file ; load initial file + mov [first_run],1 ; first window draw done +dont_load: + call draw_icon ; draw icon area + call draw_graph ; draw edit area + + mov eax,12 ; function 12:tell os about windowdraw + mov ebx,2 ; 2, end of draw + mcall + + ret ; return + +; ********************************************* +; ******* SET BACKGROUND ******** +; ********************************************* +set_background: + + mov ecx,image+3600 ; point to our decode buffer + mov edx,image+54+32*32*3-96 ; point to last line of bmp + + mov edi,0 ; zero line count +decode_line: + mov esi,0 ; zero column count +decode_column: + mov ebx,[edx] ; get our data + mov [ecx],ebx ; store our data + add ecx,4 ; add 4 bytes to pointer as using double word + add edx,4 ; add 4 bytes to pointer + inc esi ; increment column count + cmp esi,24 ; have we done all columns + jne decode_column ; no then do some more + sub edx,192 ; move back 2 lines of bmp data + inc edi ; increment line count + cmp edi,33 ; have we done all lines + jne decode_line ; no then do another one + + mov eax,15 ; background + mov ebx,1 ; set background size + mov ecx,32 ; x size + mov edx,32 ; y size + mcall ; do it + mov ebx,4 ; type of background draw + mov ecx,1 ; tile + mcall ; do it + mov ebx,5 ; blockmove image to os bgr memory + mov ecx,image+3600 ; point to image + mov edx,0 ; start of bgr memory + mov esi,32*32*3 ; byte count + mcall ; do it + mov ebx,3 ; draw background + mcall ; do it + + ret ; return + +; ********************************************* +; ******* GET SCREEN X and Y SIZE ******** +; ********************************************* +get_screen_size: + + mov eax,14 ; function 14 : get screen max + mcall ; returns eax : 0xXXXXYYYY + push eax ; save reg + and eax,0x0000ffff ; split out y size + add eax,1 ; add 1 to remove zero base + mov [y_size],eax ; store for later + pop eax ; restore reg + shr eax,16 ; move x size down the reg + add eax,1 ; add 1 to remove zero base + mov [x_size],eax ; store for later + + ret + +; ********************************************* +; ******* LOAD FILE ******** +; ********************************************* +load_file: + + mov eax,6 ; function 6 : load file + mov ebx,icon ; point to the name + mov ecx,0 ; reserved + mov edx,200000 ; reserved + mov esi,image ; point to image buffer + mcall ; do it + + ret ; return + +; ********************************************* +; ******* SAVE FILE ******** +; ********************************************* +save_file: + + mov eax,33 ; function 33 : save file + mov ebx,icon ; point to name + mov ecx,image ; point to our data + mov edx,54+32*32*3 ; how much data to transfer + xor esi,esi ; 0 - create a new file + mcall ; do it + + ret ; return + +; ********************************************* +; ******* DRAW FILENAME TO SCREEN ******** +; ********************************************* +draw_filename: + ; DRAW COLOUR BACKGROUND + pusha ; save all registers on stack + mov eax,13 ; function 13 : draw bar + mov ebx,73*65536+81 ; [x start] *65536 + [x size] + mov ecx,(window_y_size-19)*65536+15 ; [y start] *65536 + [y size] + mov edx,0x557799 ; colour 0x00RRGGBB + mcall + + mov eax,4 ; function 4 : write text to window + mov ebx,78*65536+(window_y_size-15) ; [y start] *65536 + [y size] + xor ecx,ecx ; colour 0x00RRGGBB = black + mov edx,icon ; point to text + mov esi,12 ; number of characters to write + cmp byte [editstate],1 ; are we in edit mode + jne no_active_1 ; no then jump over change colour + mov ecx,0x00112299 ; else change colour +no_active_1: + mcall ; do it + popa ; return all registers to original + ret ; return + +; ********************************************* +; ******* DRAW ICON FROM LOADED FILE ******** +; ********************************************* +draw_icon: + + mov ecx,27 ; y start position + mov eax,image+51+32*32*3 ; point to our bmp data + mov edi,0 ; line count +line: + mov esi,0 ; column count + mov ebx,269+31 ; x start position +pixel: + mov edx,[eax] ; colour 0x00RRGGBB from image data + push eax ; save our position + mov eax,1 ; function 1 : put pixel + mcall ; do it + pop eax ; restore our position + sub eax,3 ; point to next pixel colour + dec ebx ; move our x position + inc esi ; increment our column count + cmp esi,32 ; have we done all columns + jne pixel ; no then do next pixel + inc ecx ; move our y position + inc edi ; increment line count + cmp edi,32 ; have we done all lines + jne line ; no then do next line + + ret ; return + +; ********************************************* +; ******* DRAW GRAPH FROM LOADED FILE ******* +; ********************************************* +draw_graph: + + mov edi,0 ; line count + mov eax,image+51+32*32*3 ; point to our bmp data +next_lin: + mov ecx,edi ; use our line count for position + shl ecx,3 ; multiply by eight + add ecx,27 ; add y start position + shl ecx,16 ; move into top eight bytes [y start] + add ecx,7 ; add box height [y size] + mov esi,32 ; column count +next_bo: + mov ebx,esi ; use our column count for position + shl ebx,3 ; multiply by eight + add ebx,-1 ; add a correction + shl ebx,16 ; and move into top eight bytes [x start] + add ebx,7 ; add box width [x size] + mov edx,[eax] ; point to bmp data + push eax ; save our position + mov eax,13 ; function 13 : draw bar + mcall ; do it + pop eax ; restore our position + sub eax,3 ; point to next pixel colour + dec esi ; increment column count + cmp esi,0 ; have we done all columns + jne next_bo ; no then do the next column + inc edi ; increment line count + cmp edi,32 ; have we done all lines + jne next_lin ; no then do the next line + + ret ; return + +; ********************************************* +; ******* CLEAR GRAPH and ICON AREA ******** +; ********************************************* +clear_graph_icon: + + ; CLEAR IMAGE DATA + mov edi,image+54 ; point to our data + mov eax,0x00000000 ; data to write + mov ecx,(32*32*3)/4 ; how much data + rep stosd ; repeat until all data transfered + call draw_icon ; draw a blank icon + call draw_graph ; draw a blank graph + + ret ; return + +; ********************************************* +; ******* FLIP ICON TOP to BOTTOM ******** +; ********************************************* +flip_icon: + + mov ecx,image+54 ; point at first line + mov edx,image+54+32*32*3+96 ; point 1 line past end + + mov edi,0 ; zero line count +lines: + mov esi,0 ; zero column count + sub edx,192 ; move back 2 lines +columns: + mov eax,[ecx] ; get bytes + mov ebx,[edx] ; get bytes + mov [ecx],ebx ; swap bytes + mov [edx],eax ; swap bytes + add ecx,4 ; move pointer + add edx,4 ; move pointer + inc esi ; increment column count + cmp esi,24 ; have we done all columns + jne columns ; no then do next column + inc edi ; increment line count + cmp edi,16 ; have we done all lines + jne lines ; no then do next line + call draw_icon ; update icon + call draw_graph ; update graph + + ret ; return + +; ********************************************* +; ******* FLIP ICON DIAGONAL ******** +; ********************************************* +flip_diag: + + mov ecx,image+54 ; point line 1 first bytes + mov edx,image+3600 ; point to buffer + xor esi,esi ; zero byte count + + pusha ; save all registers +copy_out: + mov eax,[ecx] ; get bytes + mov [edx],eax ; copy bytes + add ecx,4 ; move pointer + add edx,4 ; move pointer + inc esi ; increment byte count + cmp esi,24*32 ; have we done all bytes + jne copy_out ; no then do the next + popa ; restore all registers + + mov edx,image+3600+32*32*3-3 ; point to last bytes +copy_in: + mov eax,[edx] ; get bytes + mov [ecx],eax ; copy to image first bytes + add ecx,3 ; move pointer 3 bytes + sub edx,3 ; move pointer 3 bytes + inc esi ; increment byte count + cmp esi,32*32 ; have we done all bytes + jne copy_in ; no then do next + + ret ; return + +; ********************************************* +; ******* DRAW MOUSE ON GRAPH / ICON ******** +; ********************************************* +draw_mouse: + + mov eax,37 ; function 37 + mov ebx,2 ; sub function 2 : check for mouse button + mcall ; do it + cmp eax,0 ; was a button pressed + je exit_mouse ; no then jump to exit + cmp eax,1 ; left hand button + je colour_mouse ; we are using selected colour + mov [draw_colour],0x000000 ; else draw with black + jmp blank ; jmp over colour select +colour_mouse: + mov eax,[sel_colour] ; get our selected colour + mov [draw_colour],eax ; save our selected colour +blank: + mov eax,37 ; function 37 + mov ebx,1 ; sub function 1 : get mouse position + mcall ; do it + push eax ; save our x/y position for later + and eax,0x0000ffff ; y is in lower bytes + add eax,1 ; add 1 because we are zero based + mov [my_pos],eax ; save y position + pop eax ; restore our x/y position + shr eax,16 ; shift x into lower bytes + add eax,1 ; add 1 because we are zero based + mov [mx_pos],eax ; save x position + cmp [mx_pos],7 ; check we are within x/y limits + jle exit_mouse + cmp [mx_pos],263 + jge exit_mouse + cmp [my_pos],27 + jle exit_mouse + cmp [my_pos],283 + jge exit_mouse + mov eax,[mx_pos] ; calculate nearest square and save + sub eax,7 ; subtract 7 graph zero offset + shr eax,3 ; divide by 8 (box size) loose remainder + mov [icon_x],eax ; save for use later in icon + shl eax,3 ; multiply by 8 to get box position + add eax,7 ; add 7 graph zero offset + mov [gx_pos],eax ; save graph x position + mov eax,[my_pos] ; repeat for y + sub eax,27 ; + shr eax,3 ; + mov [icon_y],eax ; + shl eax,3 ; + add eax,27 ; + mov [gy_pos],eax ; + mov eax,13 ; function 13 : draw bar + mov ebx,[gx_pos] ; load graph x position + shl ebx,16 ; shift into high bytes + add ebx,7 ; add box size + mov ecx,[gy_pos] ; repeat for y + shl ecx,16 ; + add ecx,7 ; + mov edx,[draw_colour] ; give it a colour + mcall ; do it + mov eax,1 ; function 1 : put pixel + mov ebx,[icon_x] ; icon x from above + add ebx,269 ; add icon x offset + mov ecx,[icon_y] ; icon y from above + add ecx,27 ; add icon y offset + mov edx,[draw_colour] ; give it a colour + mcall ; do it + mov ecx,image+54 ; point to our data + mov ebx,31 ; 32 lines in image zero based + sub ebx,[icon_y] ; get the correct line + mov eax,96 ; 96 or 3 bytes per colour * 32 columns + mul ebx ; multiply by 96 result in eax + add ecx,eax ; add to our position + mov ebx,[icon_x] ; get the correct column + mov eax,3 ; 3 bytes per colour + mul ebx ; multiply by 3 result in eax + add ecx,eax ; add to our position + mov ebx,[draw_colour] ; get our colour + mov [ecx],bl ; move blue into image data + mov [ecx+1],bh ; move green into image data + shr ebx,16 ; shift red down + mov [ecx+2],bl ; move red into image data +exit_mouse: + + ret ; return + +; ********************************************* +; ******* GET COLOUR TO DRAW WITH ******** +; ********************************************* +check_colour: + + mov eax,37 ; function 37 + mov ebx,2 ; sub function 2 : check for mouse button + mcall ; do it + cmp eax,0 ; was a button pressed + je exit_draw ; no then jump to exit + mov eax,37 ; function 37 + mov ebx,1 ; sub function 1 : get mouse position + mcall ; do it + push eax ; save our x/y position for later + and eax,0x0000ffff ; y is in lower bytes + add eax,1 ; add 1 because we are zero based + mov [my_pos],eax ; save y position + pop eax ; restore our x/y position + shr eax,16 ; shift x into lower bytes + add eax,1 ; add 1 because we are zero based + mov [mx_pos],eax ; save x position + cmp [mx_pos],270 ; check we are within x/y limits + jl check_rb + cmp [mx_pos],301 + jg check_rb + cmp [my_pos],219 + jl check_rb + cmp [my_pos],250 + jg check_rb + + call decode_mouse + + mov edi,0 +next_sel_rg_outer: + mov esi,0 +next_sel_rg_inner: + mov eax,1 + mov ebx,edi + shr ebx,3 + add ebx,308 + mov ecx,esi + shr ecx,3 + add ecx,211 + mov edx,[sel_colour] + add edx,esi + mcall + add esi,5 + cmp esi,255 + jne next_sel_rg_inner + add edi,5 + cmp edi,255 + jne next_sel_rg_outer + + +check_rb: + + cmp [mx_pos],270 ; check we are within x/y limits + jl check_bg + cmp [mx_pos],301 + jg check_bg + cmp [my_pos],251 + jle check_bg + cmp [my_pos],282 + jg check_bg + + call decode_mouse + + mov edi,0 +next_sel_rb_outer: + mov esi,0 +next_sel_rb_inner: + mov ebx,edi + shr ebx,3 + add ebx,308 + mov ecx,esi + shr ecx,3 + add ecx,211 + mov edx,[sel_colour] + mov eax,esi + shl eax,8 + add edx,eax + mov eax,1 + mcall + add esi,5 + cmp esi,255 + jne next_sel_rb_inner + add edi,5 + cmp edi,255 + jne next_sel_rb_outer + + +check_bg: + + cmp [mx_pos],301 ; check we are within x/y limits + jl get_colour + cmp [mx_pos],333 + jg get_colour + cmp [my_pos],251 + jl get_colour + cmp [my_pos],282 + jg get_colour + + call decode_mouse + + mov edi,0 +next_sel_bg_outer: + mov esi,0 +next_sel_bg_inner: + mov ebx,edi + shr ebx,3 + add ebx,308 + mov ecx,esi + shr ecx,3 + add ecx,211 + mov edx,[sel_colour] + mov eax,esi + shl eax,16 + add edx,eax + mov eax,1 + mcall + add esi,5 + cmp esi,255 + jne next_sel_bg_inner + add edi,5 + cmp edi,255 + jne next_sel_bg_outer + +get_colour: + + cmp [mx_pos],309 ; check we are within x/y limits + jl exit_draw + cmp [mx_pos],340 + jg exit_draw + cmp [my_pos],212 + jl exit_draw + cmp [my_pos],243 + jg exit_draw + + call decode_mouse + + mov eax,13 + mov ebx,269*65536+71 + mov ecx,172*65536+32 + mov edx,[sel_colour] + mcall + + mov eax,[sel_colour] + mov [draw_colour],eax + + mov eax,47 + xor ebx,ebx + mov ebx,6 + shl ebx,16 + mov bh,1 + mov ecx,[sel_colour] + mov edx,273*65536+176 + mov esi,0x000000 + mcall + +exit_draw: + + ret + +; ********************************************* +; ******* DECODE MOUSE POSITION GET PIX ***** +; ********************************************* + +decode_mouse: + + mov eax,37 + xor ebx,ebx + mcall + mov ebx,eax + mov ecx,eax + and ebx,0xffff0000 + shr ebx,16 + and ecx,0x0000ffff + mov eax,[x_size] + imul ecx,eax + add ebx,ecx + mov eax,35 + dec ebx + mcall + + mov [sel_colour],eax + + ret + +; ********************************************* +; ******* DATA AREA ***** +; ********************************************* + +mx_pos dd 0x0 +my_pos dd 0x0 + +gx_pos dd 0x0 +gy_pos dd 0x0 + +icon_x dd 0x0 +icon_y dd 0x0 + +x_size dd 0x0 +y_size dd 0x0 + +sel_colour dd 0x00ffffff +draw_colour dd 0x00ffffff + +button_text_3 db 'FILENAME' +button_text_4 db 'LOAD' +button_text_5 db 'SAVE' +button_text_6 db 'CLEAR ICON' +button_text_7 db 'FLIP VERT ' +button_text_8 db 'FLIP HORIZ' +button_text_9 db 'FLIP DIAG ' +button_text_10 db 'SET AS BGR' + +title db 'ICON EDITOR',0 + +icon: db 'WRITE.BMP ' + +editpos db 0 +editstate db 0 + +first_run db 0 + +image: + +I_END: diff --git a/programs/media/mixer/trunk/Tupfile.lua b/programs/other/outdated/mixer/trunk/Tupfile.lua similarity index 100% rename from programs/media/mixer/trunk/Tupfile.lua rename to programs/other/outdated/mixer/trunk/Tupfile.lua diff --git a/programs/media/mixer/trunk/build_en.bat b/programs/other/outdated/mixer/trunk/build_en.bat similarity index 100% rename from programs/media/mixer/trunk/build_en.bat rename to programs/other/outdated/mixer/trunk/build_en.bat diff --git a/programs/media/mixer/trunk/build_ru.bat b/programs/other/outdated/mixer/trunk/build_ru.bat similarity index 100% rename from programs/media/mixer/trunk/build_ru.bat rename to programs/other/outdated/mixer/trunk/build_ru.bat diff --git a/programs/media/mixer/trunk/mixer.asm b/programs/other/outdated/mixer/trunk/mixer.asm similarity index 94% rename from programs/media/mixer/trunk/mixer.asm rename to programs/other/outdated/mixer/trunk/mixer.asm index 380bb1ad49..ef85f049df 100644 --- a/programs/media/mixer/trunk/mixer.asm +++ b/programs/other/outdated/mixer/trunk/mixer.asm @@ -6,18 +6,18 @@ ; include 'lang.inc' -include '..\..\..\macros.inc' +include '..\..\..\..\macros.inc' use32 - org 0x0 - db 'MENUET01' ; header - dd 0x01 ; header version - dd START ; entry point - dd I_END ; image size - dd 0x1000 ; required memory - dd 0x1000 ; esp - dd 0x0 , 0x0 ; I_Param , I_Path + org 0x0 + db 'MENUET01' ; header + dd 0x01 ; header version + dd START ; entry point + dd I_END ; image size + dd 0x1000 ; required memory + dd 0x1000 ; esp + dd 0x0 , 0x0 ; I_Param , I_Path diff --git a/programs/media/sb/trunk/Tupfile.lua b/programs/other/outdated/sb/trunk/Tupfile.lua similarity index 100% rename from programs/media/sb/trunk/Tupfile.lua rename to programs/other/outdated/sb/trunk/Tupfile.lua diff --git a/programs/media/sb/trunk/build_en.bat b/programs/other/outdated/sb/trunk/build_en.bat similarity index 100% rename from programs/media/sb/trunk/build_en.bat rename to programs/other/outdated/sb/trunk/build_en.bat diff --git a/programs/media/sb/trunk/build_ru.bat b/programs/other/outdated/sb/trunk/build_ru.bat similarity index 100% rename from programs/media/sb/trunk/build_ru.bat rename to programs/other/outdated/sb/trunk/build_ru.bat diff --git a/programs/media/sb/trunk/sb.asm b/programs/other/outdated/sb/trunk/sb.asm similarity index 99% rename from programs/media/sb/trunk/sb.asm rename to programs/other/outdated/sb/trunk/sb.asm index 541426b660..70b396c5bc 100644 --- a/programs/media/sb/trunk/sb.asm +++ b/programs/other/outdated/sb/trunk/sb.asm @@ -5,7 +5,7 @@ ; include 'lang.inc' -include '..\..\..\macros.inc' +include '..\..\..\..\macros.inc' use32