/programs/filemngrs/copy2/trunk/copy2.asm |
---|
0,0 → 1,427 |
; project name: SYSTREE FILE COPIER |
; version: 1.1b |
; last update: 18/07/2004 |
; compiler: FASM 1.52 |
; written by: Ivan Poddubny |
; e-mail: ivan-yar@bk.ru |
; copying-policy: GPL |
; History: |
; 18/07/2004 strings using "lsz" macro + french language (not 100%!) |
; 04/06/2004 Bugfix for memory - thanks to Ville |
; ... |
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
dd 0x20201 ; memory for app |
dd 0x10000 ; esp |
dd 0x0 , 0x0 ; I_Param , I_Icon |
include 'lang.inc' |
include 'macros.inc' ; very useful stuff for MeOS |
STRLEN = 48 ; maximal length of filename |
START: ; start of execution |
red: |
call draw_window ; at first, draw the window |
still: ; main cycle of application begins here |
mov eax,10 ; wait here for event |
int 0x40 |
dec eax ; redraw request ? |
jz red |
dec eax ; key in buffer ? |
jz key |
dec eax ; button in buffer ? |
jz button |
jmp still |
key: ; key event handler |
mov eax,2 ; just read it and ignore |
int 0x40 |
jmp still ; return to main loop |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? (close_btn) |
jz close |
cmp ah,2 ; copy ? |
je copy_file |
; read_string: |
cmp ah,5 ; user pressed dest button ? |
jz dstbtn |
cmp ah,4 ; user pressed src button ? |
jnz still |
srcbtn: |
mov [addr],dword source |
mov [ya],dword 36 |
jmp rk |
dstbtn: |
mov [addr],dword destination |
mov [ya],dword 36+16 |
rk: |
mov edi,[addr] ; load the address of the string |
mov al,0 ; the symbol we will search for |
mov ecx,STRLEN+1 ; length of the string (+1) |
cld ; search forward |
repne scasb ; do search now |
inc ecx ; we've found a zero or ecx became 0 |
mov eax,STRLEN+1 |
sub eax,ecx ; eax = address of <0> character |
mov [temp],eax ; position |
call print_text |
mov edi,[addr] ; address of string |
add edi,[temp] ; cursor position |
.waitev: |
mov eax,10 |
int 0x40 |
cmp eax,2 |
jnz still |
; mov eax,2 |
int 0x40 |
shr eax,8 |
cmp eax,8 |
jnz .nobs ; BACKSPACE |
cmp edi,[addr] |
jz .waitev |
dec edi |
mov [edi],byte 0 |
call print_text |
jmp .waitev |
.nobs: |
cmp eax,13 ; ENTER |
je still |
cmp eax,192 |
jne .noclear |
xor al,al |
mov edi,[addr] |
mov ecx,STRLEN |
rep stosb |
mov edi,[addr] |
call print_text |
jmp .waitev |
.noclear: |
mov [edi],al |
call print_text |
inc edi |
mov esi,[addr] |
add esi,STRLEN |
cmp esi,edi |
jnz .waitev |
jmp still |
close: |
or eax,-1 ; close program |
int 0x40 |
;==================================================== |
; copy_file |
; This piece of code copies src file to dst file, |
; then it pass the control to copy_error routine, |
; which returns to the main cycle of the app. |
; It's NOT a function! It's reached by direct jump |
; from the button handler. |
;==================================================== |
copy_file: |
; at first we must get the size of the source file |
mov [source_info.blocks],1 ; load only 512 bytes |
mov eax,58 |
mov ebx,source_info |
int 0x40 |
; now eax contains error code |
; and ebx contains file size in bytes |
test eax,eax ; check if eax is equal to zero (success) |
je .ok_getsize ; eax = 0 => continue |
cmp eax,6 |
jna @f |
mov eax,7 ; if error code is above 6, it will be 7 |
@@: |
cmp eax,5 ; file might be copied successfully altrough |
; the system reports an error 5 |
jne copy_error ; print error code now |
.ok_getsize: |
; allocate memory |
push ebx ; save file size |
mov ecx,ebx |
add ecx,0x20000 ; size of memory needed = 0x20000+filesize |
mov eax,64 ; func 64 |
mov ebx,1 ; resize application memory |
int 0x40 |
pop ebx ; restore filesize |
; check if alloc function failed |
test eax,eax ; non-zero value means error |
je .ok_memory |
mov eax,5 ; error 5 - out of memory |
jmp copy_error ; print error code now |
.ok_memory: |
; save number of blocks to source_info |
add ebx,511 |
shr ebx,9 ; round up to 512 boundary |
mov [source_info.blocks],ebx |
; read the source file |
mov eax,58 |
mov ebx,source_info |
int 0x40 |
; ebx = file size |
; save loaded file |
mov [dest_info.bytes2write],ebx ; file size in bytes |
mov eax,58 |
mov ebx,dest_info |
int 0x40 |
; check if 58 function failed |
test eax,eax |
je .ok_write |
add eax,7 ; error number += 7 |
cmp eax,6+7 |
jna copy_error |
mov eax,7+7 |
jmp copy_error |
.ok_write: |
; return to the initial amount of memory |
mov eax,64 |
mov ebx,1 |
mov ecx,0x20201 |
int 0x40 |
xor eax,eax ; eax = message number (0-OK) |
; print message now |
copy_error: |
mov edi,eax |
mov eax,4 |
mov ebx,20*65536+83 |
mov ecx,0x10ff0000 |
mov edx,[errors+edi*8] |
mov esi,[errors+edi*8+4] |
int 0x40 |
jmp still |
; print strings (source & destination) |
print_text: |
mov eax,13 |
mov ebx,107*65536+STRLEN*6 |
mov ecx,[ya] |
shl ecx,16 |
add ecx,9 |
mov edx,0xf2f2f2 |
int 0x40 |
mov eax,4 |
mov ebx,109*65536 |
add ebx,[ya] |
xor ecx,ecx |
mov edx,[addr] |
mov esi,STRLEN |
int 0x40 |
ret |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
mov eax, 12 ; function 12:tell os about windowdraw |
mov ebx, 1 ; 1, start of draw |
int 0x40 |
; DRAW WINDOW |
xor eax, eax ; function 0 : define and draw window |
mov ebx, 160*65536+415 ; [x start] *65536 + [x size] |
mov ecx, 160*65536+100 ; [y start] *65536 + [y size] |
mov edx, 0x03DDDDDD ; color of work area RRGGBB |
int 0x40 |
; WINDOW LABEL |
mov eax, 4 ; function 4 : write text to window |
mov ebx, 8*65536+8 ; [x start] *65536 + [y start] |
mov ecx, 0x10ffffff ; color of text RRGGBB |
mov edx, header ; pointer to text beginning |
mov esi, header.size ; text length |
int 0x40 |
mov eax, 8 ; COPY BUTTON |
mov ebx, 20*65536+375 |
mov ecx, 63*65536+16 |
mov edx, 2 |
mov esi, 0xCCCCCC |
int 0x40 |
mov ebx, 105*65536+290 |
mov ecx, 33*65536+12 |
mov edx, 4 |
mov esi, 0xEBEBEB |
int 0x40 |
mov ebx, 105*65536+290 |
mov ecx, 49*65536+12 |
mov edx, 5 |
mov esi, 0xEBEBEB |
int 0x40 |
mov esi, source |
mov edi, text+14 |
mov ecx, STRLEN |
rep movsb |
mov esi, destination |
mov edi, text+STRLEN+59-45+14 |
mov ecx, STRLEN |
rep movsb |
mov ebx, 25*65536+36 ; print filenames |
xor ecx, ecx |
mov edx, text |
mov esi, STRLEN+59-45 |
newline: |
mov eax, 4 |
int 0x40 |
add ebx, 16 |
add edx, STRLEN+59-45 |
cmp [edx], byte 'x' |
jnz newline |
mov eax, 12 ; function 12:tell os about windowdraw |
mov ebx, 2 ; 2, end of draw |
int 0x40 |
ret |
; DATA AREA |
align 4 |
source_info: ; SOURCE FILEINFO |
.mode dd 0 ; read file |
.start_block dd 0x0 ; block to read |
.blocks dd 0x700 ; num of blocks |
.address dd 0x20000 |
.workarea dd 0x10000 |
source db '/HD/1/KERNEL/KERNEL.MNT',0 |
times (STRLEN-23) db 0 |
dest_info: ; DESTINATION FILEINFO |
.mode dd 1 ; write |
.notused dd 0x0 ; not used |
.bytes2write dd 0 ; bytes to write |
.address dd 0x20000 |
.workarea dd 0x10000 |
destination db '/RD/1/KERNEL.MNT',0 |
times (STRLEN-16) db 0 |
align 4 |
addr dd 0x0 |
ya dd 0x0 |
temp dd 0 |
lsz text,\ |
ru, ' : | ®áá¨ï, à®á« ¢«ì ',\ |
ru, ' : | ®¤¤ã¡ë© ¢ , ivan-yar@bk.ru ',\ |
ru, ' ',\ |
ru, 'x',\ ; <- END MARKER, DONT DELETE |
\ |
en, 'SOURCE: | Russia, Yaroslavl ',\ |
en, 'DESTINATION: | Poddubny Ivan, ivan-yar@bk.ru ',\ |
en, ' COPY SOURCE -> DESTINATION ',\ |
en, 'x',\ ; <- END MARKER, DONT DELETE |
\ |
fr, 'SOURCE: | ',\ |
fr, 'DESTINATION: | ',\ |
fr, ' COPIER ',\ |
fr, 'x' |
lsz header,\ |
ru, ' ',\ |
en, 'SYSTREE FILE COPIER',\ |
fr, 'COPIER LE FICHIER' |
; This macro is used to define a string table in format <pointer;length> |
macro strtbl name,[string] |
{ |
common |
label name dword |
forward |
local str,size |
dd str,size |
forward |
str db string |
size = $ - str |
} |
if lang eq ru |
strtbl errors,\ |
"ä ©« ᪮¯¨à®¢ ãᯥè®",\ |
"(ç⥨¥) ¥ § ¤ ¡ § ¦¤",\ |
"(ç⥨¥) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
"(ç⥨¥) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
"(ç⥨¥) ¥ § ¤ à §¤¥« ¦¤",\ |
"¥¤®áâ â®ç® ¯ ¬ïâ¨",\ |
"(ç⥨¥) ª®¥æ ä ©« ",\ |
"(ç⥨¥) ¥¨§¢¥áâ ï ®è¨¡ª ",\ |
"(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
"(§ ¯¨áì) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï",\ |
"(§ ¯¨áì) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ ",\ |
"(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤",\ |
"?",\ |
"(§ ¯¨áì) ä ©« ¥ ©¤¥",\ |
"(§ ¯¨áì) ¥¨§¢¥áâ ï ®è¨¡ª " |
else |
strtbl errors,\ |
"Success!",\ |
"(read) no hd base or partition defined",\ |
"(read) unsupported file system",\ |
"(read) unknown file system",\ |
"(read) hd partition not defined",\ |
"out of memory",\ |
"(read) end of file",\ |
"(read) unknown error",\ |
"(write) no hd base or partition defined",\ |
"(write) unsupported file system",\ |
"(write) unknown file system",\ |
"(write) hd partition not defined",\ |
"?",\ |
"(write) end of file",\ |
"(write) unknown error" |
end if |
I_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/copy2/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm copy2.asm copy2 |
@pause |
/programs/filemngrs/copy2/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm copy2.asm copy2 |
@pause |
/programs/filemngrs/copy2/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/copyr/trunk/ascl.inc |
---|
0,0 → 1,835 |
lang equ ru ; ru en fr ge fi |
; |
; Assembler |
; SMALL |
; CODE |
; Libary |
; |
; Ver 0.14 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;Please compile aplications on FASM ver1.54 or higer!!! |
;InfoList |
;0.01 scank,putpix,puttxt |
;0.02 label,random,colors |
;0.03 window,startwd,endwd,attributes |
;0.04 close,delay,scevent ~30.04.2004 |
;0.05 small random, ~04.05.2004 |
;0.06 wtevent ~09.05.2004 |
;0.07 timeevent ~23.05.2004 |
;0.08 txtput ~14.06.2004 |
;0.09 opendialog,savedialog ~20.06.2004 |
;0.10 wordstoreg by halyavin, add at ~30.08.2004 |
; random bug deleted eax is use. |
;0.11 loadfile from me +puttxt bug del ~07.09.2004 |
;0.12 open/save dialog ~13.09.2004 |
;0.13 dialogs bugs deleted |
;0.14 drawlbut ~03.10.2004 |
; LOADFILE |
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area |
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area |
macro loadfile file_name,file_load_area,file_temp_area |
{ |
local open,fileinfo,string |
jmp open |
fileinfo: |
dd 0 |
dd 0 |
dd 1 |
dd file_load_area |
dd file_temp_area |
string: |
db file_name,0 |
open: |
mov dword [fileinfo+8],1 ; how many blocks to read (1) |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
mov eax,[file_load_area+2] |
shr eax,9 ; ¯®¤¥«¨¬ 512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢ |
inc eax |
mov dword [fileinfo+8],eax |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
} |
macro wordstoreg reg,hiword,loword |
{ |
if hiword eqtype 0 & loword eqtype 0 |
mov reg,hiword*65536+loword |
else if hiword eqtype 12 & loword eqtype eax |
mov reg,hiword*65536 |
add reg,loword |
else if hiword eqtype 12 & loword eqtype [123] |
mov reg,hiword*65536 |
add reg,loword |
else |
mov reg,hiword |
shl reg,16 |
add reg,loword |
end if |
} |
; DRAW BUTTON with label |
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor |
{ |
local asd,lab |
jmp asd |
lab db text ;arg label |
asd: |
wordstoreg ebx,x,xs |
wordstoreg ecx,y,ys |
mov edx,id |
mov esi,bcolor |
mov eax,8 |
int 0x40 |
mov eax,asd-lab ;calc size |
mov ebx,6 |
mul ebx |
mov esi,eax |
mov eax,xs |
sub eax,esi |
shr eax,1 |
add eax,x |
mov edx,ys |
sub edx,7 |
shr edx,1 |
add edx,y |
mov ebx,eax |
shl ebx,16 |
add ebx,edx |
mov ecx,tcolor ;arg4 color |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
int 0x40 |
} |
macro opendialog redproc,openoff,erroff,path |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog) |
; |
; STEP2 prepare IPC area for get messages |
; |
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,150 ; size 150 bytes |
int 0x40 |
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
int 0x40 |
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
mov eax,58 |
mov ebx,run_fileinfo |
int 0x40 |
call redproc |
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
int 0x40 |
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
int 0x40 |
mov ebp,eax |
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
int 0x40 |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
jmp erroff |
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
mred: |
call redproc |
jmp getmesloop |
mkey: |
mov eax,2 |
int 0x40 ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
int 0x40 |
mgetmes: |
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
; First message is number of PID SYSXTREE dialog |
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
jmp openoff |
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
param: |
dd 0 ; My dec PID |
dd 0,0 ; Type of dialog |
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo ; 0x10000 |
;run_filepath |
db '/RD/1/SYSXTREE',0 |
procinfo: |
times 256 db 0 |
} |
macro savedialog redproc,openoff,erroff,path |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, run_filepath, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog) |
; |
; STEP2 prepare IPC area for get messages |
; |
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,120 ; size 150 bytes |
int 0x40 |
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
int 0x40 |
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
mov eax,58 |
mov ebx,run_fileinfo |
int 0x40 |
call redproc |
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
int 0x40 |
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
int 0x40 |
mov ebp,eax |
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
int 0x40 |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
jmp erroff |
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
mred: |
call redproc |
jmp getmesloop |
mkey: |
int 0x40 ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
int 0x40 |
mgetmes: |
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
; First message is number of PID SYSXTREE dialog |
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
jmp openoff |
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
param: |
rb 4 ; My dec PID |
rb 6 ; Type of dialog |
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo |
run_filepath: |
db '/RD/1/SYSXTREE',0 |
procinfo: |
times 256 db 0 |
} |
; RANDOM - generate random count (small) |
; (SYNTAX) RANDOM MaxCount,OutArgument |
; (SAMPLE) RANDOM 10000,eax |
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations |
randomuse = 0 |
macro random arg1,arg2 |
{ |
local rxproc |
randomuse = randomuse + 1 |
jmp rxproc |
if defined randomuse & randomuse = 1 |
randomproc: |
jmp rnj |
rsx1 dw 0x4321 |
rsx2 dw 0x1234 |
rnj: |
; mov eax,arg1 |
push bx |
push cx |
push dx |
push si |
push di |
mov cx,ax |
mov ax,word ptr rsx1 |
mov bx,word ptr rsx2 |
mov si,ax |
mov di,bx |
mov dl,ah |
mov ah,al |
mov al,bh |
mov bh,bl |
xor bl,bl |
rcr dl,1 |
rcr ax,1 |
rcr bx,1 |
add bx,di |
adc ax,si |
add bx,0x62e9 |
adc ax,0x3619 |
mov word ptr rsx1,bx |
mov word ptr rsx2,ax |
xor dx,dx |
cmp ax,0 |
je nodiv |
cmp cx,0 |
je nodiv |
div cx |
nodiv: |
mov ax,dx |
pop di |
pop si |
pop dx |
pop cx |
pop bx |
and eax,0000ffffh |
; mov arg2,0 |
; mov arg2,eax |
ret |
end if |
rxproc: |
mov eax,arg1 |
call randomproc |
mov arg2,eax |
} |
macro scank |
{ |
mov eax,10 |
int 0x40 |
} |
macro putpix x,y,color |
{ |
mov ebx,x |
mov ecx,y |
mov edx,color |
mov eax,1 |
int 0x40 |
} |
macro puttxt x,y,offs,size,color |
{ |
; mov ebx,x |
; shl ebx,16 |
; add ebx,y |
wordstoreg ebx,x,y |
mov ecx,color |
mov edx,offs |
mov esi,size |
mov eax,4 |
int 0x40 |
} |
macro outcount data, x, y, color, numtype |
{ |
mov ecx,data |
mov ebx,numtype |
mov bl,0 |
; mov edx,x*65536+y |
wordstoreg edx,x,y |
mov esi,color |
mov eax,47 |
int 0x40 |
} |
; SCEVENT - Scan event |
macro scevent red,key,but |
{ |
mov eax,11 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; WTEVENT - Wait event |
macro wtevent red,key,but |
{ |
mov eax,10 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; TIMEEVENT - Wite for event with timeout |
macro timeevent xfps,noevent,red,key,but |
{ |
mov eax,23 |
mov ebx,xfps |
int 0x40 |
cmp eax,0 |
je noevent |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; CLOSE - Close program |
macro close |
{ |
mov eax,-1 |
int 0x40 |
} |
; DELAY - Create delay 1/100 sec |
; (SYNTAX) Delay time |
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec |
macro delay arg1 |
{ |
mov eax,5 |
mov ebx,arg1 |
int 0x40 |
} |
; WINDOW - Draw window |
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color |
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned |
macro window arg1,arg2,arg3,arg4,arg5 |
{ |
; mov ebx,arg1*65536+arg3 |
; mov ecx,arg2*65536+arg4 |
wordstoreg ebx,arg1,arg3 |
wordstoreg ecx,arg2,arg4 |
mov edx,arg5 |
mov eax,0 |
int 0x40 |
} |
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7 |
{ |
mov ebx,arg1*65536+arg3 |
mov ecx,arg2*65536+arg4 |
mov edx,arg5 |
mov esi,arg6 |
mov edi,arg7 |
mov eax,0 |
int 0x40 |
} |
; STARTWD - Start of window draw |
macro startwd |
{ |
mov eax,12 |
mov ebx,1 |
int 0x40 |
} |
; ENDWD - End window draw |
macro endwd |
{ |
mov eax,12 |
mov ebx,2 |
int 0x40 |
} |
; LABEL - Put text to frame |
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color |
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big |
macro label arg1,arg2,arg3,arg4 |
{ |
local asd,lab |
jmp asd |
lab db arg3 ;arg label |
asd: |
; mov ebx,arg1 ;arg1=y arg2=x |
; shl ebx,16 |
; add ebx,arg2 |
wordstoreg ebx,arg1,arg2 |
mov ecx,arg4 ;arg4 color |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
int 0x40 |
} |
;Key's |
key_Up equ 178 |
key_Down equ 177 |
key_Right equ 179 |
key_Left equ 176 |
key_Esc equ 27 |
key_Space equ 32 |
key_Enter equ 13 |
key_Bspace equ 8 |
key_F1 equ 50 |
key_F2 equ 51 |
key_F3 equ 52 |
key_F4 equ 53 |
key_F5 equ 54 |
key_F6 equ 55 |
key_F7 equ 56 |
key_F8 equ 57 |
key_F9 equ 48 |
key_F10 equ 49 |
key_F11 equ 68 |
key_F12 equ 255 |
key_Home equ 180 |
key_End equ 181 |
key_PgUp equ 184 |
key_PgDown equ 183 |
;Attributes |
;Window Attributes |
window_Skinned equ 0x03000000 |
window_Type2 equ 0x02000000 |
window_Type1 equ 0x00000000 |
window_Reserve equ 0x01000000 |
;Font Attributes |
font_Big equ 0x10000000 |
;Colors |
cl_White equ 0x00ffffff |
cl_Black equ 0x00000000 |
cl_Grey equ 0x00888888 |
cl_Red equ 0x00ff0000 |
cl_Lime equ 0x0000ff00 |
cl_Green equ 0x0000af00 |
cl_Blue equ 0x000000ff |
cl_Purple equ 0x008080ff |
cl_Violet equ 0x008040ff |
cl_Cyan equ 0x0040e0ff |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/copyr/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm copyr.asm copyr |
@pause |
/programs/filemngrs/copyr/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm copyr.asm copyr |
@pause |
/programs/filemngrs/copyr/trunk/copyr.asm |
---|
0,0 → 1,341 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ; |
; FILE COPY - system module for copy ; |
; files.Prog for SYS X-TREE BROWSER v22 ; |
; ; |
; Create by Pavlushin Evgeni waptap@mail.ru ; |
; homepage www.deck4.narod.ru ; |
; ; |
; On base SYSTREE FILE COPIER 1.02 ; |
; Ivan Poddubny ivan-yar@bk.ru ; |
; ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ï ¯à®£ ¥é¥ áëà ï ¨ £«îç ï ® 㦥 ª®¥ ª ª à ¡®â ¥â |
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
dd 0x20000 ; memory for app |
dd 0x10000 ; esp |
dd param_area , 0x0 ; I_Param , I_Icon |
include 'lang.inc' |
include 'macros.inc' ; very useful stuff for MeOS |
include 'ascl.inc' |
STRLEN = 48 ; maximal length of filename |
START: ; start of execution |
; à ¬¥âàë: |
; ®â 0 ¤® 100 ¯ãâì ª ¨áâ®ç¨ªã |
; ®â 100 ¤® 200 ¯ãâì ª ¯à¨¥¬¨ªã |
; |
;get param |
mov eax,15 |
cmp byte [param_area],0 |
je err_exit ;source not found |
mov eax,16 |
cmp byte [param_area+100],0 |
je err_exit ;dest not found |
mov ecx,199 |
cdf: |
mov al,[param_area+ecx] |
cmp al,byte 32 |
jne nor |
mov al,byte 0 |
nor: |
mov al,[param_area+ecx] |
dec ecx |
jns cdf |
mov ecx,STRLEN - 4 |
copysp: |
mov al,[param_area+ecx] |
mov [source+ecx],al |
dec ecx |
jns copysp |
mov [source+42],byte 0 |
mov ecx,STRLEN - 4 |
copydp: |
mov al,[param_area+ecx+100] |
mov [destination+ecx],al |
dec ecx |
jns copydp |
mov [destination+42],byte 0 |
call draw_window |
call copy_file |
dexit: |
wtevent red,key,button |
jmp dexit |
red: |
call draw_window |
jmp dexit |
key: |
button: |
exit: |
close |
err_exit: |
push eax |
call draw_window |
pop eax |
jmp copy_error |
; print message now |
copy_error: |
mov ebp,43 |
mul ebp |
mov ebp,eax |
mov eax,4 |
mov ebx,20*65536+70 |
mov ecx,0x10ff0000 |
mov edx,errors ;*8] |
add edx,ebp |
mov esi,43 ;[errors+edi*8+4] |
int 0x40 |
jmp dexit |
;closep: |
; or eax,-1 ; close program |
; int 0x40 |
;==================================================== |
; copy_file |
; This piece of code copies src file to dst file, |
; then it pass the control to copy_error routine, |
; which returns to the main cycle of the app. |
; It's NOT a function! It's reached by direct jump |
; from the button handler. |
;==================================================== |
copy_file: |
; at first we must get the size of the source file |
mov [source_info.blocks],1 ; load only 512 bytes |
mov eax,58 |
mov ebx,source_info |
int 0x40 |
; now eax contains error code |
; and ebx contains file size in bytes |
test eax,eax ; check if eax is equal to zero (success) |
je .ok_getsize ; eax = 0 => continue |
cmp eax,6 |
jna @f |
mov eax,7 ; if error code is above 6, it will be 7 |
@@: |
cmp eax,5 ; file might be copied successfully altrough |
; the system reports an error 5 |
jne copy_error ; print error code now |
.ok_getsize: |
; allocate memory |
push ebx ; save file size |
mov ecx,ebx |
add ecx,0x20000 ; size of memory needed = 0x20000+filesize |
mov eax,64 ; func 64 |
mov ebx,1 ; resize application memory |
int 0x40 |
pop ebx ; restore filesize |
; check if alloc function failed |
test eax,eax ; non-zero value means error |
je .ok_memory |
mov eax,5 ; error 5 - out of memory |
jmp copy_error ; print error code now |
.ok_memory: |
; save number of blocks to source_info |
shr ebx,9 ; divide by 512 |
inc ebx ; blocks++ |
mov [source_info.blocks],ebx |
; read the source file |
mov eax,58 |
mov ebx,source_info |
int 0x40 |
; ebx = file size |
; save loaded file |
mov [dest_info.bytes2write],ebx ; file size in bytes |
mov eax,58 |
mov ebx,dest_info |
int 0x40 |
; check if 58 function failed |
test eax,eax |
je .ok_write |
add eax,7 ; error number += 7 |
cmp eax,6+7 |
jna copy_error |
mov eax,7+7 |
jmp copy_error |
.ok_write: |
; return to the initial amount of memory |
mov eax,64 |
mov ebx,1 |
mov ecx,0x20000 |
int 0x40 |
xor eax,eax ; eax = message number (0-OK) |
; print strings (source & destination) |
print_text: |
mov eax,13 |
mov ebx,107*65536+STRLEN*6 |
mov ecx,[ya] |
shl ecx,16 |
add ecx,9 |
mov edx,0xf2f2f2 |
int 0x40 |
mov eax,4 |
mov ebx,109*65536 |
add ebx,[ya] |
xor ecx,ecx |
mov edx,[addr] |
mov esi,STRLEN |
int 0x40 |
ret |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
int 0x40 |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,160*65536+415 ; [x start] *65536 + [x size] |
mov ecx,160*65536+90 ; [y start] *65536 + [y size] |
mov edx,0x03DDDDDD ; color of work area RRGGBB |
int 0x40 |
; WINDOW LABEL |
mov eax,4 ; function 4 : write text to window |
mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
mov ecx,0x10ffffff ; color of text RRGGBB |
mov edx,labelt ; pointer to text beginning |
mov esi,labellen-labelt ; text length |
int 0x40 |
mov eax,8 |
mov ebx,105*65536+290 |
mov ecx,33*65536+12 |
mov edx,4 |
mov esi,0xEBEBEB |
int 0x40 |
mov ebx,105*65536+290 |
mov ecx,49*65536+12 |
mov edx,5 |
mov esi,0xEBEBEB |
int 0x40 |
mov esi,source |
mov edi,text+14 |
mov ecx,STRLEN |
rep movsb |
mov esi,destination |
mov edi,text+STRLEN+59-45+14 |
mov ecx,STRLEN |
rep movsb |
mov ebx,25*65536+36 ; print filenames |
xor ecx,ecx |
mov edx,text |
mov esi,STRLEN+59-45 |
newline: |
mov eax,4 |
int 0x40 |
add ebx,16 |
add edx,STRLEN+59-45 |
cmp [edx],byte 'x' |
jnz newline |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
ret |
; DATA AREA |
align 4 |
param_area: |
times 256 db 0 |
source_info: ; SOURCE FILEINFO |
.mode dd 0 ; read file |
.start_block dd 0x0 ; block to read |
.blocks dd 0x700 ; num of blocks |
.address dd 0x20000 |
.workarea dd 0x10000 |
source: |
times (STRLEN) db 32 |
db 0 |
dest_info: ; DESTINATION FILEINFO |
.mode dd 1 ; write |
.notused dd 0x0 ; not used |
.bytes2write dd 0 ; bytes to write |
.address dd 0x20000 |
.workarea dd 0x10000 |
destination: |
times (STRLEN) db 32 |
db 0 |
align 4 |
addr dd 0x0 |
ya dd 0x0 |
temp dd 0 |
text: |
db ' : |®áá¨ï, ¥«ï⨮, ®áª¢ , 1 ãàá ' |
db ' : | ¢«îè¨ ¢£¥¨©, waptap@mail.ru ' |
db ' ' |
db 'x' ; <- END MARKER, DONT DELETE |
labelt: |
db ' ' |
labellen: |
errors: |
db "ä ©« ᪮¯¨à®¢ ãá¯¥è® " |
db "(ç⥨¥) ¥ § ¤ ¡ § ¦¤ " |
db "(ç⥨¥) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï" |
db "(ç⥨¥) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ " |
db "(ç⥨¥) ¥ § ¤ à §¤¥« ¦¤ " |
db "¥¤®áâ â®ç® ¯ ¬ï⨠" |
db "(ç⥨¥) ª®¥æ ä ©« " |
db "(ç⥨¥) ¥¨§¢¥áâ ï ®è¨¡ª " |
db "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤ " |
db "(§ ¯¨áì) ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï" |
db "(§ ¯¨áì) ¥¨§¢¥áâ ï ä ©«®¢ ï á¨á⥬ " |
db "(§ ¯¨áì) ¥ § ¤ à §¤¥« ¦¤ " |
db "oh shit! " |
db "(§ ¯¨áì) ä ©« ¥ ©¤¥ " |
db "(§ ¯¨áì) ¥¨§¢¥áâ ï ®è¨¡ª " |
db "ãâì ª ¨áâ®ç¨ªã ¨ ¯à¨¥¬¨ªã ¥ 㪠§ ë!!! " |
db "ãâì ª ¯à¨¥¬¨ªã ¥ 㪠§ !!! " |
;0123456789012345678901234567890123456789012 |
I_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/copyr/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/hexhd/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm hexhd.asm hexhd |
@pause |
/programs/filemngrs/hexhd/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm hexhd.asm hexhd |
@pause |
/programs/filemngrs/hexhd/trunk/hexhd.asm |
---|
0,0 → 1,235 |
; |
; EXAMPLE APPLICATION |
; |
; Compile with FASM for Menuet |
; |
use32 |
org 0x0 |
db 'MENUET00' ; 8 byte id |
dd 38 ; required os |
dd START ; program start |
dd I_END ; program image size |
dd 0x5000 ; required amount of memory |
dd 0x5000 ; esp = 0x7FFF0 |
dd 0x00000000 ; reserved=no extended header |
include 'lang.inc' |
include 'macros.inc' |
START: ; start of execution |
call open_file |
call draw_window ; at first, draw the window |
still: |
mov eax,10 ; wait here for event |
int 0x40 |
cmp eax,1 ; redraw request ? |
je red |
cmp eax,2 ; key in buffer ? |
je key |
cmp eax,3 ; button in buffer ? |
je button |
jmp still |
red: ; redraw |
call draw_window |
jmp still |
key: ; key |
mov eax,2 ; just read it and ignore |
int 0x40 |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne noclose |
mov eax,-1 ; close this program |
int 0x40 |
noclose: |
cmp ah,2 |
jne noexam |
jmp still |
noexam: |
cmp ah,3 |
jne noback |
mov edi,block |
cmp dword [edi],0 |
je nonext |
dec dword [edi] |
call open_file |
call draw_window |
noback: |
cmp ah,4 |
jne nonext |
mov edi,block |
inc dword [edi] |
call open_file |
call draw_window |
nonext: |
jmp still |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
int 0x40 |
; DRAW WINDOW |
mov eax,0 ; function 0 : define and draw window |
mov ebx,0*65536+400 ; [x start] *65536 + [x size] |
mov ecx,0*65536+270+200 ; [y start] *65536 + [y size] |
mov edx,0x038899aa;1111cc ; color of work area RRGGBB,8->c |
int 0x40 |
mov eax,4 ; function 4 : write text to window |
mov ebx,144*65536+8 ; [x start] *65536 + [y start] |
mov ecx,0x00ffffff ; color of text RRGGBB |
mov edx,labelt ; pointer to text beginning |
mov esi,labellen-labelt ; text length |
int 0x40 |
mov eax,47 ;decimal |
mov ecx,[block] |
mov edx,64*65536+34 |
mov ebx,10 |
shl ebx,16 |
mov esi,0x00ffffff |
int 0x40 |
add edx,128*65536 ;hex |
mov bh,1 |
int 0x40 |
mov eax,8 |
mov ebx,280*65536+16*6 |
mov ecx,30*65536+14 |
mov edx,2 |
mov esi,0x3f49df;5599cc |
int 0x40 |
mov ebx,15*65536+32 |
add edx,1 |
mov eax,8 |
int 0x40 |
add ebx,127*65536 |
add edx,1 |
mov eax,8 |
int 0x40 |
mov eax,4 |
mov ebx,14*65536+33 |
mov ecx,0xffffff |
mov edx,buttons |
mov esi,blen-buttons |
int 0x40 |
mov ebx,280*65536+65 ; draw info text with function 4 |
mov ecx,0xffffff |
mov edx,text |
mov esi,16 |
mov edi,16*2 |
newline: |
pusha ; hext |
mov edi,16 |
mov ecx,edx |
mov edx,ebx |
sub edx,265*65536 |
newhex: |
mov eax,47 |
mov ebx,0x00020101 |
xor esi,0xffff00 |
int 0x40 |
add edx,16*65536 |
add ecx,1 |
dec edi |
jne newhex |
popa |
mov eax,4 ; text |
int 0x40 |
add ebx,12 |
add edx,16 |
dec edi |
jnz newline |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
ret |
open_file: |
pusha |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
popa |
ret |
; DATA AREA |
fileinfo: |
dd 8 |
block dd 0 |
dd 1 |
dd text |
dd os |
db '/HARDDISK/FIRST',0 |
labelt: |
db 'EDITOR HEXADECIMAL' |
labellen: |
buttons db ' << >> << OPTIONS >> ' |
blen: |
os: |
times 16384 db ? |
text: |
I_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/hexhd/trunk/macros.inc |
---|
0,0 → 1,265 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a { ; mike.dld |
if ~a eq |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm mfar.asm mfar |
@pause |
/programs/filemngrs/mfar/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm mfar.asm mfar |
@pause |
/programs/filemngrs/mfar/trunk/macros.inc |
---|
0,0 → 1,226 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; code profiling |
macro STARTTIMER |
{ |
push ecx |
push ebx |
rdtsc |
push edx |
push eax |
} |
macro STOPTIMER ;edx:eax = cpu cycles ellapsed |
{ |
rdtsc |
pop ebx |
pop ecx |
clc |
sbb eax,ebx |
sbb edx,ecx |
pop ebx |
pop ecx |
} |
; optimize the code for size |
macro add arg1,arg2 |
{ |
if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
if arg2 eqtype 0 |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if arg2 eqtype 0 |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
if arg2 eqtype 0 |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/menuet.inc |
---|
0,0 → 1,180 |
;------------------------------------------------------------------------------ |
;///// SYSTEM FUNCTIONS /////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
MF_TERMINATE = -1 |
MF_DEFWINDOW = 0 |
WS_GRADIENT = $80000000 |
WS_NOSIZE = $00000000 |
WS_TRANSP = $01000000 |
WS_NORMAL = $02000000 |
WS_SKINNED = $03000000 |
MF_PUTPIXEL = 1 |
MF_GETKEY = 2 |
MF_GETTIME = 3 |
MF_DRAWTEXT = 4 |
DT_FIXED = $00000000 |
DT_VARIABLE = $10000000 |
MF_DELAY = 5 |
MF_RDREADFILE = 6 |
MF_PUTIMAGE = 7 |
MF_DEFBUTTON = 8 |
DB_ADD = $00000000 |
DB_DELETE = $80000000 |
BS_HIDDEN = $40000000 |
MF_PRINFO = 9 |
PI_SELF = $FFFFFFFF |
MF_WAITEVENT = 10 |
MF_CHKEVENT = 11 |
MF_WNDDRAW = 12 |
WD_BEGINDRAW = 1 |
WD_ENDDRAW = 2 |
MF_FILLRECT = 13 |
FR_GRADIENT = $80000000 |
MF_GETSCRDIM = 14 |
MF_SETBKGND = 15 |
BG_SETSIZE = 1 |
BG_PUTPIXEL = 2 |
BG_REDRAW = 3 |
BG_SETSTYLE = 4 |
BGS_TILE = 1 |
BGS_STRETCH = 2 |
BG_SETIMAGE = 5 |
MF_RAM2FLOP = 16 |
R2F_ALL = 1 |
MF_GETPRSDBTNID = 17 |
MF_SYSSERV = 18 |
SYS_QUIT = 1 |
SYS_KILLPR = 2 |
SYS_SETFOCUS = 3 |
SYS_GETIDLE = 4 |
SYS_SETSPEED = 5 |
SYS_RAM2HARD = 6 |
MF_STARTPRG = 19 |
MF_MIDI = 20 |
MIDI_RESET = 1 |
MIDI_OUTPUT = 2 |
MF_DEVSETUP = 21 |
DEV_MIDI = 1 |
DEV_KEYB = 2 |
DEV_CD = 3 |
DEV_SB16 = 4 |
DEV_LANG = 5 |
DEV_WSS = 6 |
DEV_HD = 7 |
DEV_HDPART = 8 |
DEV_DMA = 10 |
DEV_LOWHDACC = 11 |
DEV_PCIACC = 12 |
DEV_VIDEODRV = 13 |
MF_WAITEVWTO = 23 |
MF_CDAUDIO = 24 |
CDA_PLAY = 1 |
CDA_GETPLIST = 2 |
CDA_STOP = 3 |
MF_SB16M1 = 25 |
SB_SETMAINVOL = 1 |
SB_SETCDVOL = 2 |
MF_GETDEVPREF = 26 |
DEV_GETTICKS = 9 |
MF_SOUNDPROPS = 27 |
MF_SB16M2 = 28 |
MF_GETDATE = 29 |
MF_HDREADFILE = 30 |
MF_HDSTARTPRG = 31 |
MF_RDDELFILE = 32 |
MF_RDWRITEFILE = 33 |
MF_RDREADDIR = 34 |
MF_GETPIXEL = 35 |
MF_MOUSEINFO = 37 |
MI_SCREENCRD = 0 |
MI_CLIENTCRD = 1 |
MI_BUTTONS = 2 |
MB_NONE = 0 |
MB_LEFT = 1 |
MB_RIGHT = 2 |
MB_BOTH = 3 |
MF_DRAWLINE = 38 |
MF_GETBKGND = 39 |
GB_SIZE = 1 |
GB_PIXEL = 2 |
GB_STYLE = 4 |
MF_SETEVMASK = 40 |
MF_GETIRQOWNER = 41 |
MF_GETIRQDATA = 42 |
MF_PORTIO = 43 |
MF_SETIRQTABLE = 44 |
MF_MANAGEIRQS = 45 |
IRQ_RESERVE = 0 |
IRQ_RELEASE = 1 |
MF_MANAGEPORTS = 46 |
PORT_RESERVE = 0 |
PORT_RELEASE = 1 |
MF_DRAWNUMBER = 47 |
DN_NUMBER = $00000000 |
DN_POINTER = $00000001 |
DN_DEC = $00000000 |
DN_HEX = $00000100 |
DN_BIN = $00000200 |
MF_WINPROPS = 48 |
WP_REDRAW = 0 |
WPR_DESKTOP = 0 |
WP_SETBTNSTYLE = 1 |
BS_FLAT = 0 |
BS_3D = 1 |
WP_SETSYSCLRS = 2 |
WP_GETSYSCLRS = 3 |
WP_GETSKINH = 4 |
MF_WINFREEFORM = 50 |
FF_SETSHAPE = 0 |
FF_SETSCALE = 1 |
MF_THREAD = 51 |
TH_CREATE = 1 |
MF_STACK = 52 |
MF_SOCKET = 53 |
MF_SOUND = 55 |
SND_LOADBLOCK = 0 |
SND_PLAYBLOCK = 1 |
SND_SETFORMAT = 2 |
SF_SETLENGTH = 1 |
MF_HDWRITEFILE = 56 |
MF_HDDELFILE = 57 |
MF_FSACCESS = 58 |
FS_READ = 0 |
FS_WRITE = 1 |
FS_DELETE = 2 |
FS_APPEND = 3 |
FS_LBAREAD = 8 |
FS_LBAWRITE = 9 |
FS_EXECUTE = 16 |
MF_SYSTRACE = 59 |
ST_GETEVENTS = 0 |
MF_IPC = 60 |
IPC_SETAREA = 1 |
IPC_SENDMSG = 2 |
MF_GRAPHPROPS = 61 |
GP_PERMIT = 1 |
GP_GETBPP = 2 |
GP_GETBPS = 3 |
MF_PCI = 62 |
MF_DEBUGBRD = 63 |
DBG_WRITE = 1 |
DBG_READ = 2 |
MF_MEMRESIZE = 64 |
MR_SETSIZE = 1 |
MF_UTF = 65 |
MF_KEYBMODE = 66 |
KM_SETMODE = 1 |
KM_GETMODE = 2 |
;------------------------------------------------------------------------------ |
;///// ERROR CODES //////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
ERR_SUCCESS = 0 |
ERR_FS_FIRST = 1 |
ERR_FS_LAST = 6 |
ERR_IRQ_NODATA = 1 |
ERR_IRQ_BADOWNER = 2 |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/mf-copy.inc |
---|
0,0 → 1,204 |
;------------------------------------------------------------------------------ |
;///// COPYING //////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func copy_file |
pushad |
cmp [active_panel],0 |
jne ._00 |
push f_path0 |
push [f_plen0] |
mov eax,[d_lpos] |
shl eax,4 |
add eax,lstart |
push eax |
mov esi,f_path1 |
mov eax,[f_plen1] |
jmp @f |
._00: |
push f_path1 |
push [f_plen1] |
mov eax,[d_rpos] |
shl eax,4 |
add eax,rstart |
push eax |
mov esi,f_path0 |
mov eax,[f_plen0] |
@@: |
mov ebx,[esp] |
test byte[ebx+11],FA_FOLDER |
jz @f |
add esp,3*4 |
stc |
jmp .close |
@@: |
mov edi,fc_info.path |
call get_normal_path |
mov eax,[len] |
mov byte[edi+eax-1],'/' |
mov [fc_len2],eax |
pop esi |
call get_file_info |
mov eax,[f_size] |
mov [fc_size],eax |
pop eax |
pop esi |
mov edi,f_info.path |
call get_normal_path |
mov eax,[len] |
mov byte[edi+eax-1],'/' |
mov [fc_len1],eax |
jmp .redraw_copy |
.redraw: |
call draw_window_full |
.redraw_copy: |
call draw_window_copy_main |
.still: |
mcall MF_WAITEVENT |
jmpe al,.still,\ |
EV_REDRAW,.redraw,\ |
EV_KEY,.key,\ |
EV_BUTTON,.button |
.key: |
mcall MF_GETKEY |
jmpe ah,.still,\ |
VK_ESCAPE,._close,\ |
VK_RETURN,.copy |
.button: |
jmp .still |
.copy: |
mov ecx,[fc_size] |
shr ecx,9 |
inc ecx |
push ecx |
shl ecx,9 |
add ecx,MEM_USED |
mcall MF_MEMRESIZE,MR_SETSIZE |
or eax,eax |
jnz .close |
mov edi,file_info |
mov al,' ' |
mov ecx,13 |
repne scasb |
sub ecx,12 |
neg ecx |
push ecx |
mov esi,file_info |
mov edi,f_info.path |
add edi,[fc_len1] |
rep movsb |
mov byte[edi],0 |
pop ecx |
mov esi,file_info |
mov edi,fc_info.path |
add edi,[fc_len2] |
rep movsb |
mov byte[edi],0 |
xor eax,eax ; FS_READ |
mov [f_info],eax |
mov [f_info+4],eax |
pop eax |
mov [f_info+8],eax |
mov dword[f_info+12],MEM_USED |
mcall MF_FSACCESS,f_info |
mov eax,[fc_size] |
mov [fc_info+8],eax |
mcall MF_FSACCESS,fc_info |
mcall MF_MEMRESIZE,MR_SETSIZE,MEM_USED |
._close: |
clc |
.close: |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
func draw_window_copy_main |
mcall2 MF_FILLRECT,oX+tW*2,tW*76,oY+tH*7,tH*8,0x00C0C0C0 |
mmov esi,oX+tW*4+2,oX+tW*75+3 |
mmov edi,oY+tH*8+3,oY+tH*13+5 |
xor edx,edx |
call draw_frame |
mmov esi,oX+tW*4+4,oX+tW*75+1 |
mmov edi,oY+tH*8+5,oY+tH*13+3 |
call draw_frame |
mcall2 MF_DRAWLINE,oX+tW*4+4,oX+tW*75+1,oY+tH*11+3,oY+tH*11+3,0 |
mcall2 MF_FILLRECT,oX+tW*40-(sz_copy.size-2)*tW/2-tW,sz_copy.size*tW,\ |
oY+tH*8+3,3,0x00C0C0C0 |
mcall1 MF_DRAWTEXT,oX+tW*40-(sz_copy.size-2)*tW/2,oY+tH*8,\ |
0x00000000,sz_copy,sz_copy.size-2 |
mcall1 ,oX+tW*6,oY+tH*9,,,sz_copy.size |
mov edi,file_info |
mov al,' ' |
mov ecx,13 |
repne scasb |
madd ebx,(sz_copy.size)*tW,0 |
mov esi,ecx |
sub esi,12 |
neg esi |
mcall MF_DRAWTEXT,,,file_info |
imul esi,tW |
shl esi,16 |
add ebx,esi |
mcall ,,,sz_copyto,sz_copyto.size |
call draw_copy_input |
ret |
endf |
;------------------------------------------------------------------------------ |
func draw_copy_input |
mcall2 MF_FILLRECT,oX+tW*6,tW*68,oY+tH*10,tH,0x00008080 |
mov edx,fc_info.path |
mov esi,[fc_len2] |
cmp esi,68 |
jb @f |
sub esi,68 |
lea edx,[edx+esi+1] |
mov esi,67 |
@@: |
mcall1 MF_DRAWTEXT,oX+tW*6,oY+tH*10+1,0x00000000 |
ret |
endf |
;------------------------------------------------------------------------------ |
;fc_pst db 0 |
;fc_cur db 0 |
align 4 |
fc_size dd ? |
fc_len1 dd 0 |
fc_len2 dd 0 |
fc_info: |
dd 1 |
dd 0 |
dd ? |
dd MEM_USED |
dd MEM_FOR_OS |
.path: |
rb 200 |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/mf-lang.inc |
---|
0,0 → 1,39 |
;------------------------------------------------------------------------------ |
;///// LOCALIZED STRINGS ////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
lsz lname,\ |
ru,'•',\ |
en,'Name',\ |
fr,'Nom',\ |
ge,'Name' |
lsz sort_kind,\ |
ru,'¨à',\ |
en,'nx',\ |
fr,'ne',\ |
ge,'ne' |
lsz btmkeys,\ |
ru,'®¬®éì ®«ì§ à®á¬ ¥¤ ªâ ®¯¨à ',\ |
ru,'¥à¥ ¯ª ¤ «¥ ®ä ë室',\ |
en,'Help UserMn View Edit Copy ',\ |
en,'RenMov MkFold Delete ConfMn Quit',\ |
fr,'Aide UserMn Vue Editer Copier ',\ |
fr,'RenDep CrÎeRp Efface ConfMn Quitter',\ |
ge,'Hilfe Menà Anzeig Bearb. Kopie ',\ |
ge,'UmbBew MkDir LÂsche Funkt. Ende' |
lsz sz_cancel,\ |
ru,'⬥ ',\ |
en,'Cancel',\ |
fr,'Annuler',\ |
ge,'Beenden' |
;---------- COPY DIALOG ---------- |
lsz sz_copy,\ |
ru,'®¯¨à®¢ âì "',\ |
en,'Copy "',\ |
fr,'Copier "',\ |
ge,'Kopiere "' |
lsz sz_copyto,\ |
ru,'" ¢:',\ |
en,'" to:',\ |
fr,'" vers:',\ |
ge,'" nach:' |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/mf-sort.inc |
---|
0,0 → 1,140 |
;------------------------------------------------------------------------------ |
;///// SORTING //////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
r_sort db 1 |
l_sort db 1 |
align 4 |
compare_table: |
dd compare_by_name |
dd compare_by_extension |
; AL = panel |
func mfar_sort |
pusha |
cmp al,0 |
jne ._00 |
mov eax,[d_lcnt] |
mov edi,lstart |
movzx edx,[l_sort] |
jmp @f |
._00: |
mov eax,[d_rcnt] |
mov edi,rstart |
movzx edx,[r_sort] |
@@: |
mov edx,[edx*4+compare_table] |
cmp eax,2 |
jbe .exit |
dec eax |
shl eax,4 |
add eax,edi |
cmp word[edi],'..' |
jne @f |
add edi,16 |
@@: |
push edi |
mov esi,edi |
add edi,16 |
.next_file: |
call edx |
add edi,16 |
cmp edi,eax |
jbe .next_file |
mov ebx,12 |
@@: |
mov ecx,[ebx+eax] |
xchg [ebx+esi],ecx |
mov [ebx+eax],ecx |
sub ebx,4 |
jge @b |
mov esi,[esp] |
mov edi,esi |
add edi,16 |
sub eax,16 |
cmp eax,edi |
jge .next_file |
pop edi |
.exit: |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
; ESI = pointer to 1st file info |
; EDI = pointer to 2nd file info |
func compare_by_name |
mov ecx,11 |
push edi esi |
repe cmpsb |
pop esi edi |
pushfd |
test byte[esi+11],FA_FOLDER |
jnz ._00 |
test byte[edi+11],FA_FOLDER |
jz ._01 |
jmp ._03 |
._00: |
test byte[edi+11],FA_FOLDER |
jz ._02 |
._01: |
popfd |
jg ._04 |
mov esi,edi |
ret |
._02: |
popfd |
mov esi,edi |
ret |
._03: |
popfd |
._04: |
ret |
endf |
;------------------------------------------------------------------------------ |
; ESI = pointer to 1st file info |
; EDI = pointer to 2nd file info |
func compare_by_extension |
push edi esi |
mov ecx,3 |
add esi,8 |
add edi,8 |
repe cmpsb |
jne ._00 |
mov esi,[esp] |
mov edi,[esp+4] |
mov ecx,8 |
repe cmpsb |
._00: |
pop esi edi |
pushfd |
test byte[esi+11],FA_FOLDER |
jnz ._01 |
test byte[edi+11],FA_FOLDER |
jz ._02 |
jmp ._04 |
._01: |
test byte[edi+11],FA_FOLDER |
jz ._03 |
._02: |
popfd |
jg ._05 |
mov esi,edi |
ret |
._03: |
popfd |
mov esi,edi |
ret |
._04: |
popfd |
._05: |
ret |
endf |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/mfar.asm |
---|
0,0 → 1,1181 |
; MENUET FAR [MFAR] PRE-ALPHA-8.1 |
; 2003-2004 (C) Mike Semenyako aka mike.dld |
; Compile with FASM for Menuet |
use32 |
org 0 |
db 'MENUET01' ; 8 byte id |
dd $01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
dd MEM_USED ; memory for app |
dd $007FF0 ; esp |
dd $00,$00 ; I_Param , I_Icon |
; |
; START:SIZE |
; |
; +00000000:00007FF0 - image |
; +00007FF0:00007FF0 - stack |
; +00008000:00000300 - path strings buffer |
; +00008300:0003FD00 - files data |
; +00048000:00000300 - temporary file read area |
; +00048300:00004000 - memory for OS (read/write buffer) |
; +0004C300:FFFB3CFF - dinamically allocated for copy, view, edit etc. |
; |
include 'lang.inc' |
include 'macros.inc' |
include 'menuet.inc' |
include 'mfar.inc' |
START: |
mcall MF_RDREADFILE,fcfile,0,-1,fc ; read user colors |
mov esi,p_rd ; left panel = RD |
mov edi,f_path0 |
mov ecx,p_rd.size |
rep movsb |
mov esi,p_hd ; right panel = HD |
mov edi,f_path1 |
mov ecx,p_hd.size |
rep movsb |
redraw_all: |
call draw_window_full |
jmp still |
redraw_files: |
call draw_files |
still: |
mcall MF_WAITEVWTO,100 ; waiting 1 sec |
jmpe al,,\ |
EV_REDRAW,redraw_all,\ |
EV_KEY,key,\ |
EV_BUTTON,button |
; after every 1 second [when no other events occur] updating files info |
; eg. requesting ACTIVE panel files data and drawing it |
;; timed redraw { |
mov dl,[active_panel] |
cmp dl,0 |
jne ._00 |
push [d_ltsz] |
jmp @f |
._00: |
push [d_rtsz] |
@@: |
call get_files_data |
pop eax |
cmp dl,0 |
jne ._01 |
cmp eax,[d_ltsz] |
jmp @f |
._01: |
cmp eax,[d_rtsz] |
@@: |
je still ; nothing happened, waiting again |
mov al,dl |
jmp redraw_files |
;; } |
; key pressed event |
key: |
mcall MF_GETKEY ; get key-code |
movzx ecx,[active_panel] |
jmpe ah,k_directional,\ |
VK_RETURN,k_return,\ ; execute something |
VK_TAB,k_tab,\ ; change active panel |
VK_F5,k_f5,\ ; copy |
VK_F10,mfar_exit,\ ; terminate |
VK_CTRLF3,k_ctrl_f3,\ ; sort by name |
VK_CTRLF4,k_ctrl_f4 ; sort by extension |
;------------------------------------------------------------------------------ |
k_return: |
call execute_current_file |
jmp still |
;------------------------------------------------------------------------------ |
k_tab: |
mov edi,[fc.background] |
call draw_sel ; hide current file selection |
xor [active_panel],1 ; changing active panel |
call draw_path ; drawing path of new panel |
mov dl,[active_panel] |
call get_files_data ; requesting panel files info |
mov edi,sel_color |
call draw_sel ; show current file |
mov al,[active_panel] |
call draw_file_info ; and its info (size,date) |
jmp still |
;------------------------------------------------------------------------------ |
k_f5: |
call copy_file |
jc still |
jmp redraw_all |
;------------------------------------------------------------------------------ |
k_ctrl_f3: |
jecxz ._00 |
cmp [r_sort],0 |
je still |
mov [r_sort],0 |
jmp @f |
._00: |
cmp [l_sort],0 |
je still |
mov [l_sort],0 |
@@: |
mov al,cl |
call mfar_sort |
jmp redraw_files |
;------------------------------------------------------------------------------ |
k_ctrl_f4: |
jecxz ._00 |
cmp [r_sort],1 |
je still |
mov [r_sort],1 |
jmp @f |
._00: |
cmp [l_sort],1 |
je still |
mov [l_sort],1 |
@@: |
mov al,al |
call mfar_sort |
jmp redraw_files |
;------------------------------------------------------------------------------ |
k_directional: |
cmp ah,VK_LEFT ; non-directional keys ? |
jb still ; ignore them |
cmp ah,VK_END |
ja still |
jecxz ._00 |
mov edx,[d_rpos] |
mov ebx,[d_rtop] |
mov esi,[d_rcnt] |
jmp @f |
._00: |
mov edx,[d_lpos] |
mov ebx,[d_ltop] |
mov esi,[d_lcnt] |
@@: |
xor ebp,ebp ; redraw whole panel [0-no, 1-yes] |
;------------------------------------------------------------------------------ |
jmpe ah,show_cur,\ |
VK_LEFT,k_left,\ |
VK_DOWN,k_down,\ |
VK_UP,k_up,\ |
VK_RIGHT,k_right,\ |
VK_HOME,k_home,\ |
VK_END,k_end |
k_left: |
cmp edx,0 |
je still |
sub edx,FPC |
jge @f |
xor edx,edx |
@@: |
mov eax,edx |
sub eax,ebx |
jge show_cur |
inc ebp |
sub ebx,FPC |
jge show_cur |
xor ebx,ebx |
jmp show_cur |
;------------------------------------------------------------------------------ |
k_down: |
lea eax,[esi-1] |
cmp edx,eax |
je still |
inc edx |
mov eax,edx |
sub eax,ebx |
cmp eax,FPC*3-1 |
jle show_cur |
inc ebp |
inc ebx |
jmp show_cur |
;------------------------------------------------------------------------------ |
k_up: |
cmp edx,0 |
je still |
dec edx |
mov eax,ebx |
cmp edx,eax |
jge show_cur |
inc ebp |
dec ebx |
jmp show_cur |
;------------------------------------------------------------------------------ |
k_right: |
lea eax,[esi-1] |
cmp edx,eax |
je still |
add edx,FPC |
cmp edx,eax |
jle @f |
mov edx,eax |
@@: |
mov eax,edx |
sub eax,ebx |
cmp eax,FPC*3-1 |
jle show_cur |
inc ebp |
add ebx,FPC |
jmp show_cur |
;------------------------------------------------------------------------------ |
k_home: |
cmp edx,0 |
je still |
inc ebp |
xor edx,edx |
xor ebx,ebx |
jmp show_cur |
;------------------------------------------------------------------------------ |
k_end: |
lea eax,[esi-1] |
cmp edx,eax |
je still |
mov edx,eax |
mov edi,eax |
sub edi,ebx |
cmp edi,FPC*3-1 |
jle show_cur |
inc ebp |
sub eax,FPC*3-1 |
mov ebx,eax |
;------------------------------------------------------------------------------ |
show_cur: |
mov edi,[fc.background] |
call draw_sel |
jecxz ._00 |
mov [d_rpos],edx |
mov [d_rtop],ebx |
jmp @f |
._00: |
mov [d_lpos],edx |
mov [d_ltop],ebx |
@@: |
cmp ebp,0 |
mov al,cl |
jne redraw_files |
mov edi,[fc.selection] |
call draw_sel |
call draw_file_info |
jmp still |
button: |
mcall MF_GETPRSDBTNID |
cmp ah,1 |
jne noclose |
mfar_exit: |
mcall MF_RDDELFILE,fcfile ; delete existing mfar.dat |
mcall MF_RDWRITEFILE,fcfile,fc,12*4,0 ; create new mfar.dat |
mcall MF_TERMINATE ; close program |
noclose: |
jmp still |
;------------------------------------------------------------------------------ |
;///// DRAW WINDOW //////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func draw_window |
mcall MF_WINPROPS,WP_GETSYSCLRS,sc,sizeof.system_colors |
mcall MF_WNDDRAW,WD_BEGINDRAW |
mov edx,[fc.background] |
or edx,WS_SKINNED |
mcall2 MF_DEFWINDOW,90,oX+tW*80+4,45,oY+tH*25+4 |
mcall1 MF_DRAWTEXT,8,8,[sc.grab_text],caption,caption.size |
mmov esi,oX+2,oX+tW*39+2 |
mmov edi,oY+3,oY+tH*22+3 |
mov edx,[fc.default] |
call draw_frame |
mmov esi,oX+tW*40+2,oX+tW*79+2 |
call draw_frame |
mcall2 MF_DRAWLINE,oX+tW*13+2,oX+tW*13+2,oY+tH,oY+tH*20+3 |
madd ebx,tW*13,tW*13 |
mcall |
mcall2 ,oX+3,oX+tW*39+1,oY+tH*20+3,oY+tH*20+3 |
mcall2 ,oX+tW*53+2,oX+tW*53+2,oY+tH,oY+tH*20+3 |
madd ebx,tW*13,tW*13 |
mcall |
mcall2 ,oX+tW*40+3,oX+tW*79+1,oY+tH*20+3,oY+tH*20+3 |
mcall1 MF_DRAWTEXT,oX+tW*5,oY+tH,$00ffff00,lname,lname.size |
mcall1 ,oX+tW*18,oY+tH |
mcall1 ,oX+tW*31,oY+tH |
mcall1 ,oX+tW*45,oY+tH |
mcall1 ,oX+tW*58,oY+tH |
mcall1 ,oX+tW*71,oY+tH |
movzx edi,[l_sort] |
lea edx,[edi+sort_kind] |
mcall1 ,oX+tW,oY+tH,$00ffff00,,1 |
movzx edi,[r_sort] |
lea edx,[edi+sort_kind] |
mcall1 ,oX+tW*41,oY+tH |
call draw_path |
call draw_bottom_keys |
mcall MF_WNDDRAW,WD_ENDDRAW |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func draw_window_full |
call draw_window |
mov edx,1 |
call get_files_data |
mov al,1 |
call draw_files |
mov edx,0 |
call get_files_data |
mov al,0 |
call draw_files |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
align 4 |
len dd ? |
func get_normal_path |
pusha |
mov ecx,5 |
rep movsb |
dec esi |
dec edi |
mov ecx,5 |
push eax |
@@: |
dec dword[esp] |
jz @f |
lodsb |
cmp al,0 |
je @b |
cmp al,' ' |
je @b |
stosb |
inc ecx |
jmp @b |
@@: |
pop eax |
mov byte[edi],'>' |
mov [len],ecx |
popa |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; EAX = length needed |
; ECX = current length |
; EDI = path string |
func get_path_ellipses |
cmp ecx,eax |
jbe @f |
pushad |
lea esi,[edi+ecx+3+6] ; ... + /??/?/ |
sub esi,eax |
add ecx,edi |
sub ecx,esi |
mov dword[edi+6],'... ' |
add edi,9 |
cld |
rep movsb |
mov [len],eax |
popad |
@@: |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func draw_path |
pushad |
cmp [active_panel],0 |
jne ._00 |
mov esi,f_path0 |
mov eax,[f_plen0] |
jmp @f |
._00: |
mov esi,f_path1 |
mov eax,[f_plen1] |
@@: |
mov edi,f_pathn |
call get_normal_path |
mov eax,39 |
mov ecx,[len] |
mov edi,f_pathn |
call get_path_ellipses |
mcall2 MF_FILLRECT,oX-1,tW*80+1,oY+tH*23-1,tH,[fc.pathbg] |
mcall1 MF_DRAWTEXT,oX,oY+tH*23,[fc.path],f_pathn,[len] |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; AL = panel |
func draw_files |
push eax |
mmov ecx,oY+tH*2-1,tH*FPC |
mov edx,[fc.background] |
cmp al,0 |
mov eax,MF_FILLRECT |
jne ._00 |
mcall1 ,oX+tW-2,tW*12+3 |
mcall1 ,oX+tW*14-2,tW*12+3 |
mcall1 ,oX+tW*27-2,tW*12+3 |
mmov ebx,oX+tW,oY+tH*2 |
mov edx,[d_ltop] |
shl edx,4 |
add edx,lstart |
mov edi,[d_lcnt] |
mov esi,edi |
sub edi,[d_ltop] |
jmp @f |
._00: |
mcall1 ,oX+tW*41-2,tW*12+3 |
mcall1 ,oX+tW*54-2,tW*12+3 |
mcall1 ,oX+tW*67-2,tW*12+3 |
mmov ebx,oX+tW*41,oY+tH*2 |
mov edx,[d_rtop] |
shl edx,4 |
add edx,rstart |
mov edi,[d_rcnt] |
mov esi,edi |
sub edi,[d_rtop] |
@@: |
cmp esi,0 |
je .exit_nok ; no files |
mov ecx,3 |
.next_col: |
push ecx |
mov ecx,FPC |
.next_row: |
dec edi |
jge @f |
pop eax |
jmp .exit_ok |
@@: |
push ecx |
call get_file_color |
mov esi,edx |
call get_file_name |
push edx |
mcall 4,,,f_name,12 ; draw file name |
pop edx ecx |
add ebx,tH |
add edx,16 |
dec ecx |
jnz .next_row |
pop ecx |
dec ecx |
jz .exit_ok |
madd ebx,tW*13,0 |
mov bx,oY+tH*2 |
jmp .next_col |
.exit_ok: |
mov edi,sel_color |
call draw_sel |
.exit_nok: |
pop eax |
call draw_file_info |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func draw_bottom_keys |
pushad |
mcall2 MF_FILLRECT,oX-1,tW*80+1,oY+tH*24-1,tH+1,[fc.pathbg] |
dec ecx |
mcall1 ,oX+tW-1,tW*6+1,,[fc.keysbg] |
mov esi,7 |
@@: |
madd ebx,tW*8,0 |
mcall |
dec esi |
jge @b |
mcall1 ,oX+tW*73-1,tW*7+1 |
mcall MF_DRAWNUMBER,$00010100,1,oX*65536+(oY+tH*24),[fc.path] |
sub edx,$00010000 |
@@: |
inc cl |
madd edx,tW*8,0 |
mcall |
cmp cl,10 |
jb @b |
mcall1 MF_DRAWTEXT,oX+tW,oY+tH*24,[fc.keys],btmkeys,btmkeys.size |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; ESI = X1*65536+X2 |
; EDI = Y1*65536+Y2 |
; EDX = color |
func draw_frame |
mov ecx,edi |
mov ebx,edi |
shr ebx,16 |
mov cx,bx |
mcall MF_DRAWLINE,esi |
mov ecx,edi |
shl ecx,16 |
mov cx,di |
mcall |
mov ebx,esi |
mov ecx,esi |
shr ecx,16 |
mov bx,cx |
mcall ,,edi |
mov ebx,esi |
shl ebx,16 |
mov bx,si |
mcall |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; EDX = pointer to file data |
func get_file_color |
push esi |
mov cl,[edx+11] |
test cl,(FA_HIDDEN or FA_SYSTEM) |
jz @f |
mov ecx,[fc.system] |
jmp .exit |
@@: |
test cl,FA_FOLDER |
jz @f |
mov ecx,[fc.folder] |
jmp .exit |
@@: |
mov ecx,[edx+7] |
and ecx,$ffffff00 |
or ecx,$00000020 |
mov esi,ext0-4 |
@@: |
lodsd |
or eax,eax |
jz @f |
cmp ecx,eax |
jne @b |
mov ecx,[fc.executable] |
jmp .exit |
@@: |
lodsd |
or eax,eax |
jz @f |
cmp ecx,eax |
jne @b |
mov ecx,[fc.bitmap] |
jmp .exit |
@@: |
lodsd |
or eax,eax |
je @f |
cmp ecx,eax |
jne @b |
mov ecx,[fc.source] |
jmp .exit |
@@: |
mov ecx,[fc.default] |
.exit: |
pop esi |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; EDI = color |
func draw_sel |
pushad |
cmp [active_panel],0 |
jne ._00 |
mov eax,[d_lpos] |
sub eax,[d_ltop] |
mov esi,[d_lcnt] |
jmp @f |
._00: |
mov eax,[d_rpos] |
sub eax,[d_rtop] |
mov esi,[d_rcnt] |
@@: |
cmp esi,0 |
je .exit |
mov cl,FPC |
div cl |
mov bp,ax |
and eax,$000000FF |
mov cl,tW*13 |
mul cl |
add ax,oX+tW-2 |
push eax |
shl eax,16 |
mov ax,tW*12+3 |
mov ebx,eax |
mov ax,bp |
shr eax,8 |
and eax,$000000FF |
mov cl,tH |
mul cl |
add ax,oY+tH*2-1 |
push eax |
shl eax,16 |
mov ax,tH |
mov ecx,eax |
mov edx,edi |
cmp [active_panel],0 |
je @f |
madd ebx,(40*6),0 |
@@: |
mcall MF_FILLRECT |
pop eax |
movzx ebx,ax |
inc bx |
pop eax |
add ax,2 |
shl eax,16 |
or ebx,eax |
cmp [active_panel],0 |
jne ._01 |
mov edx,[d_lpos] |
shl edx,4 |
add edx,lstart |
jmp @f |
._01: |
mov edx,[d_rpos] |
shl edx,4 |
add edx,rstart |
@@: |
mov esi,edx |
call get_file_name |
call get_file_color |
cmp ecx,edi |
jne @f |
xor ecx,ecx |
@@: |
cmp [active_panel],0 |
je @f |
madd ebx,tW*40,0 |
@@: |
mcall MF_DRAWTEXT,,,f_name,12 |
.exit: |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; AL = panel |
func draw_file_info |
push eax |
mmov ecx,oY+tH*21,tH |
mov edx,[fc.background] |
cmp al,0 |
mov eax,MF_FILLRECT |
jne ._00 |
mcall1 ,oX+tW,tW*38+1 |
mov esi,[d_lpos] |
shl esi,4 |
add esi,lstart |
mov edi,[d_lcnt] |
jmp @f |
._00: |
mcall1 ,oX+tW*41,tW*38+1 |
mov esi,[d_rpos] |
shl esi,4 |
add esi,rstart |
mov edi,[d_rcnt] |
@@: |
cmp edi,0 |
jne @f |
pop eax |
ret |
@@: |
call get_file_info |
mov dword[file_info+17],' ' |
mov word[file_info+15],' ' |
test byte[esi+11],FA_FOLDER |
jz @f |
mov dword[file_info+21],' DIR' |
jmp .no_size |
@@: |
mov dword[file_info+21],' ' |
mov eax,[f_size] |
mov esi,file_info+24 |
mov ebx,10 |
mov ecx,ebx |
@@: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [esi],dl |
or eax,eax |
jz .no_size |
dec esi |
loop @b |
.no_size: |
pop eax |
mmov edx,oX+tW*35,oY+tH*21 |
mmov ebx,oX+tW,oY+tH*21 |
cmp al,0 |
je @f |
madd edx,tW*40,0 |
madd ebx,tW*40,0 |
@@: |
push edx |
mcall MF_DRAWTEXT,,[fc.default],file_info,34 |
pop edx |
mov esi,ecx |
mov cx,[f_year] |
mcall MF_DRAWNUMBER,$00040000 |
sub edx,$00240000 ; 6*6 = $24 |
movzx ecx,[f_day] |
mcall ,$00020000 |
add edx,$00120000 |
mov cl,[f_mnth] |
mcall |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func get_file_name |
pushad |
mov eax,[esi+0] |
mov [f_name+0],eax |
mov eax,[esi+4] |
mov [f_name+4],eax |
mov eax,[esi+8] |
shl eax,8 |
and eax,$FFFFFF00 |
or al,$00000020 |
mov [f_name+8],eax |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; ESI = pointer to file data |
func get_file_info |
pushad |
mov eax,[esi+12] |
mov dword[f_info],FS_READ |
mov [f_info+4],eax |
mov dword[f_info+12],read_area |
mcall MF_FSACCESS,f_info |
cmp eax,ERR_SUCCESS |
je @f |
cmp eax,ERR_FS_LAST |
ja @f |
popad |
stc |
ret |
@@: |
mov eax,read_area |
mov ecx,16 |
.next_file: |
mov edx,[esi+0] |
cmp [eax+0],edx |
jne @f |
mov edx,[esi+4] |
cmp [eax+4],edx |
jne @f |
mov edx,[esi+8] |
cmp [eax+8],edx |
jne @f |
mov esi,eax |
jmp .found |
@@: |
add eax,32 |
loop .next_file |
.found: |
push esi |
mov eax,' ' |
mov ecx,3 |
mov edi,file_info |
rep stosd |
mov edi,file_info |
mov ecx,2 |
rep movsd |
mov edi,file_info |
@@: |
cmp byte[edi],' ' |
jbe @f |
inc edi |
jmp @b |
@@: |
mov eax,[esi] |
shl eax,8 |
mov al,'.' |
cmp eax,'. ' |
je @f |
mov [edi],eax |
@@: |
pop esi |
mov eax,[esi+28] |
mov [f_size],eax |
mov eax,[esi+24] |
mov [f_day],al |
and [f_day],00011111b |
shr eax,5 |
mov [f_mnth],al |
and [f_mnth],00001111b |
shr eax,4 |
mov [f_year],ax |
and [f_year],01111111b |
add [f_year],1980 |
popad |
clc |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
; DL = panel |
func get_files_data |
pushad |
mov [d_tcnt],0 |
mov [d_ttsz],0 |
cmp dl,0 |
jne ._00 |
mov esi,f_path0 |
mov ecx,[f_plen0] |
jmp @f |
._00: |
mov esi,f_path1 |
mov ecx,[f_plen1] |
@@: |
push edi |
mov edi,f_info.path |
mov byte[edi+ecx],0 |
rep movsb |
pop edi |
cmp dl,0 |
jne ._01 |
mov edi,lstart |
jmp @f |
._01: |
mov edi,rstart |
@@: |
push edx |
xor ebp,ebp |
mov dword[f_info],FS_READ ; read |
mov dword[f_info+8],1 ; 1 block |
mov dword[f_info+12],read_area ; to read_area |
.next_block: |
mov dword[f_info+4],ebp ; starting from block #ebp |
mcall MF_FSACCESS,f_info |
cmp eax,ERR_SUCCESS |
je @f |
cmp eax,ERR_FS_LAST |
ja @f |
jmp .exit |
@@: |
mov esi,read_area |
mov ecx,16 |
.next_file: |
cmp word[esi],0 ; end of entries |
je .exit |
cmp word[esi],'. ' ; self-pointer |
je .skip |
test byte[esi+11],FA_LABEL ; disk label |
jnz .skip |
cmp byte[esi+11],$0F ; fat32 |
je .skip |
cmp byte[esi],$E5 ; erased |
je .skip |
mov eax,[esi+28] ; add file size |
add [d_ttsz],eax ; to folder size |
push ecx |
mov ecx,3 |
rep movsd ; copy name, attriputes |
mov [edi],ebp ; and block number |
add edi,4 |
add esi,20 |
inc [d_tcnt] ; increase folder files counter |
; cmp [d_tcnt],max_cnt |
; je .exit |
pop ecx |
jmp @f |
.skip: |
add esi,32 |
@@: |
loop .next_file |
cmp [d_tcnt],max_cnt |
je .exit |
inc ebp |
jmp .next_block |
.exit: |
pop edx |
push [d_ttsz] |
mov eax,[d_tcnt] |
cmp dl,0 |
jne ._02 |
mov [d_lcnt],eax |
pop [d_ltsz] |
jmp @f |
._02: |
mov [d_rcnt],eax |
pop [d_rtsz] |
@@: |
popad |
mov al,dl |
call mfar_sort |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func execute_current_file |
pushad |
cmp [active_panel],0 |
jne ._00 |
mov esi,[d_lpos] |
shl esi,4 |
add esi,lstart |
mov edi,f_path0 |
mov ecx,f_plen0 |
jmp @f |
._00: |
mov esi,[d_rpos] |
shl esi,4 |
add esi,rstart |
mov edi,f_path1 |
mov ecx,f_plen1 |
@@: |
call get_file_info |
test byte[esi+11],FA_FOLDER |
jz .file |
cmp word[esi],'..' |
jne .enter_dir |
add edi,[ecx] |
dec edi |
@@: |
dec [f_plen1] |
cmp byte[edi],'/' |
je @f |
dec edi |
jmp @b |
@@: |
mov dword[edi],0 |
jmp @f |
.enter_dir: |
add edi,[ecx] |
push ecx edi |
mov byte[edi],'/' |
inc edi |
mov esi,file_info |
mov ecx,3 |
cld |
rep movsd |
mov dword[edi],0 |
pop esi ecx |
sub edi,esi |
add dword[ecx],edi |
mov [d_rpos],0 |
mov [d_rtop],0 |
@@: |
mov dl,[active_panel] |
call get_files_data |
call draw_path |
mov al,dl |
call draw_files |
jmp .exit |
.file: |
mov eax,[esi+8] |
shl eax,8 |
and eax,$FFFFFF00 |
or eax,$00000020 |
cmp eax,' ' |
jne .exit |
mov esi,edi |
mov eax,[ecx] |
mov edi,f_pathn |
call get_normal_path |
mov esi,f_pathn |
mov ecx,[len] |
dec ecx |
mov edi,f_info.path |
rep movsb |
mov byte[edi],'/' |
inc edi |
mov esi,file_info |
@@: |
movsb |
cmp byte[esi],0 |
je @f |
cmp byte[esi],' ' |
jne @b |
@@: |
mov byte[edi],0 |
mov dword[f_info],FS_EXECUTE |
mov dword[f_info+12],0 |
mcall MF_FSACCESS,f_info |
.exit: |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;////////////////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
func delete_current_file |
pushad |
popad |
ret |
endf |
;------------------------------------------------------------------------------ |
;///// INCLUDES /////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
include 'mf-copy.inc' |
include 'mf-sort.inc' |
;------------------------------------------------------------------------------ |
;///// DATA /////////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
align 4 |
f_size dd ? |
f_day db ? |
f_mnth db ? |
f_year dw ? |
d_lpos dd 0 |
d_ltop dd 0 |
d_lcnt dd 0 |
d_ltsz dd 0 |
d_rpos dd 0 |
d_rtop dd 0 |
d_rcnt dd 0 |
d_rtsz dd 0 |
d_tpos dd ? |
d_ttop dd ? |
d_tcnt dd ? |
d_ttsz dd ? |
f_info: |
dd 0 |
dd 0 |
dd ? |
dd read_area |
dd MEM_FOR_OS |
.path: |
rb 200 |
f_plen0 dd 5 |
f_plen1 dd 5 |
sz caption,'MFAR : PRE-ALPHA-8.1' |
sz fcfile,'MFAR DAT' |
sz p_hd,'/HD/1',0 |
sz p_rd,'/RD/1',0 |
ext0: |
db ' EXE COM BAT CMD' |
dd 0 |
ext1: |
db ' BMP GIF JPG PNG WMF' |
dd 0 |
ext2: |
db ' ASM INC' |
dd 0 |
;----- LANGUAGE-SPECIFIC STRINGS ----- |
include 'mf-lang.inc' |
;------------------------------------- |
f_name: rb 12 |
file_info: db ' . .' |
active_panel db 0 |
;--------------------------------- |
sel_color = $00008080 |
FPC = 18 |
MEM_FOR_OS = $48300 |
MEM_USED = $4C300 |
read_area = $48000 |
fdata_size = $40000-$300 |
max_cnt = fdata_size/32 |
lstart = $8000+$300 |
rstart = lstart+max_cnt*16 |
f_path0 = $8000 |
f_path1 = $8000+$100 |
f_pathn = $8000+$200 |
align 4 |
sc system_colors |
fc mfar_colors |
I_END: |
; 16 bytes per entry: |
; -> 8 bytes - name |
; -> 3 bytes - extension |
; -> 1 byte - attributes |
; -> 4 bytes - block number |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/mfar.inc |
---|
0,0 → 1,147 |
oX = 6 |
oY = 22+3 |
tW = 6 |
tH = 9 |
VK_TAB = 9 |
VK_RETURN = 13 |
VK_ESCAPE = 27 |
VK_F10 = 49 |
VK_F5 = 54 |
VK_LEFT = 176 |
VK_DOWN = 177 |
VK_UP = 178 |
VK_RIGHT = 179 |
VK_HOME = 180 |
VK_END = 181 |
VK_PGDOWN = 183 |
VK_PGUP = 184 |
VK_CTRLF3 = 212 |
VK_CTRLF4 = 213 |
FA_READONLY = 00000001b |
FA_HIDDEN = 00000010b |
FA_SYSTEM = 00000100b |
FA_LABEL = 00001000b |
FA_FOLDER = 00010000b |
FA_ARCHIVED = 00100000b |
struc mfar_colors { |
.background dd $00000080 |
.default dd $0000FFFF |
.system dd $00008080 |
.selection dd $00009090 |
.folder dd $00FFFFFF |
.executable dd $0000FF00 |
.bitmap dd $00FF00FF |
.source dd $00FF0000 |
.path dd $00C0C0C0 |
.pathbg dd $00000000 |
.keys dd $00000000 |
.keysbg dd $00008080 |
} |
struct mfar_colors |
macro __mov reg,a { |
if ~a eq |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int $40 |
} |
macro mcall1 a,b1,b2,c,d,e,f { |
__mov eax,a |
if (~b1 eq)|(~b2 eq) |
mov ebx,(b1)*65536+(b2) |
end if |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int $40 |
} |
macro mcall2 a,b1,b2,c1,c2,d,e,f { |
__mov eax,a |
if (~b1 eq)|(~b2 eq) |
mov ebx,(b1)*65536+(b2) |
end if |
if (~c1 eq)|(~c2 eq) |
mov ecx,(c1)*65536+(c2) |
end if |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int $40 |
} |
macro sz name,[data] { |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro mmov reg,a1,a2 { |
mov reg,(a1)*65536+a2 |
} |
macro madd reg,a1,a2 { |
add reg,(a1)*65536+a2 |
} |
macro msub reg,a1,a2 { |
sub reg,(a1)*65536+a2 |
} |
macro jmpe reg,def,[val,lab] { |
forward |
cmp reg,val |
je lab |
common |
if ~def eq |
jmp def |
end if |
} |
macro func name { |
if used name |
label name |
} |
macro endf { |
end if |
} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/mfar/trunk/readme.txt |
---|
0,0 → 1,80 |
; MFAR pre-alpha 8.1 |
; 2003-2004 (C) Semenyako Mike a.k.a. mike.dld |
; e-mail: mike.dld@tut.by |
;------------------------------------------------------------------------------ |
;///// ENGLISH //////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
---[ ATTENTION ]--------------------------------------------------------------- |
This MFAR version is far from being RELEASE! |
So, use it carefully, paying special attention to the new features. |
---[ ABOUT ]------------------------------------------------------------------- |
MFAR was intended as SYSTREE-alternative & at the same time as file-manager |
with well-known & handy interface for MenuetOS. It'll be look like FAR |
(farmanager.com) which i really like BTW. |
---[ FEATURES ]---------------------------------------------------------------- |
- displaying RD (left) & HD (right) file structure |
- color highlighting for files (depending on their extensions) |
- sotring (by name or extension) |
- selected file info: date, size |
- MeOS apps execution |
---[ TODO ]-------------------------------------------------------------------- |
- copying (moving), deleting files |
- disk selection |
- other sort types |
- not only apps execution |
- ... |
---[ HOTKEYS ]----------------------------------------------------------------- |
Up, Down, Left, Right, Home, End - if you worked in any DOS-based file- |
manager (NC, VC, DN, ...), even a few minutes, you may know that this |
keys direct the caret (light pen) |
F5 - copy !FILE! from one panel to another (in development) |
F10 - exit program |
Ctrl+F3 - sort by name |
Ctrl+F4 - sort by extension |
;------------------------------------------------------------------------------ |
;///// //////////////////////////////////////////////////////////////// |
;------------------------------------------------------------------------------ |
---[ ¨¬ ¨¥ ]---------------------------------------------------------------- |
âã ¢¥àá¨î MFAR ¨ª ª ¥«ì§ï áç¨â âì ५¨§®¬! |
à®£à ¬¬ 室¨âáï ¢ à §à ¡®âª¥ ¨ ï ®ç¥ì ᮦ «¥î ® ⮬, çâ® ¥ ¢ ᨫ å |
¯®ª çâ® ¯à¥¤áâ ¢¨âì ¬ ¯®«®æ¥ë© ä ©«-¬¥¥¤¦¥à, å®âï ¡ë ¯à¨¡«¨§¨â¥«ì® |
áà ¢¨¬ë© ¯® äãªæ¨® «ìë¬ ¢®§¬®¦®áâï¬ á «®£¨ç묨 ¯à®¥ªâ ¬¨ ¯®¤ *nix |
¨ *dows. |
---[ ¯à®£à ¬¬¥ ]------------------------------------------------------------- |
MFAR ¡ë« § ¤ã¬ ª ª «ìâ¥à ⨢ SYSTREE ¨ ®¤®¢à¥¬¥® ª ª ä ©«-¬¥¥¤¦¥à |
á® § ª®¬ë¬ ¨ 㤮¡ë¬ ¨â¥à䥩ᮬ ¯®¤ MenuetOS. § §¢ ¨ï ¬®¦® ¤®£ ¤ âìáï, |
çâ® ¢¥è¨© ¢¨¤ ¯à®£à ¬¬ë ¡ã¤¥â ¥ ®á®¡® ®â«¨ç âìáï ®â FAR' (farmanager.com), |
®ç¥ì, ªáâ â¨, ¬®î «î¡¨¬®£® ¨ 㢠¦ ¥¬®£® ¯à®¥ªâ . |
---[ ⮠ᤥ« ® ]------------------------------------------------------------- |
- ®â®¡à ¦¥¨¥ ä ©«®¢®© áâàãªâãàë ®¡à § (á«¥¢ ) ¨ (á¯à ¢ ) |
- ¯®¤á¢¥âª ¨¬¥ ä ©«®¢ à §ë¬¨ 梥⠬¨ (¢ § ¢¨á¨¬®á⨠®â ä®à¬ â ) |
- á®àâ¨à®¢ª (¯® ¨¬¥¨ ¨«¨ à áè¨à¥¨î) |
- à §¬¥à ¨ ¤ â á®§¤ ¨ï (¨§¬¥¥¨ï) ¤«ï ¢ë¤¥«¥®£® ä ©« |
- § ¯ã᪠¨á¯®«ï¥¬ëå ä ©«®¢ |
---[ â® å®â¥«®áì ¡ë ᤥ« âì ]------------------------------------------------- |
- ª®¯¨à®¢ ¨¥ (¯¥à¥¬¥é¥¨¥), 㤠«¥¨¥ ä ©«®¢ |
- ¢ë¡®à ªâ¨¢®£® ¤¨áª ¤«ï ¯ ¥«¥© |
- ¤à㣨¥ ¢¨¤ë á®àâ¨à®¢®ª |
- § ¯ã᪠¥ ⮫쪮 ¨á¯®«ï¥¬ëå ä ©«®¢ |
- ... |
---[ ®ç¥â ¨ï ª« ¢¨è ]-------------------------------------------------------- |
Up, Down, Left, Right, Home, End - ªâ® å®âï ¡ë à § à ¡®â « ¢ ®¢áª®¬ |
ä ©«-¬¥¥¤¦¥à¥ (NC, VC, DN, ...) § ¥â, çâ® á ¯®¬®éìî íâ¨å ª« ¢¨è ¬®¦® |
ã¯à ¢«ïâì ¯®«®¦¥¨¥¬ ªãàá®à (ᢥ⮢®£® ¯¥à ) |
F5 - ª®¯¨à®¢ âì ä ©« ¨§ ®¤®© ¯ ¥«¨ ¢ ¤àã£ãî (¢ à §à ¡®âª¥) |
F10 - ¢ë室 ¨§ ¯à®£à ¬¬ë |
Ctrl+F3 - á®àâ¨à®¢ âì ¯® ¨¬¥¨ |
Ctrl+F4 - á®àâ¨à®¢ âì ¯® à áè¨à¥¨î |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/rdfdel/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm rdfdel.asm rdfdel |
@pause |
/programs/filemngrs/rdfdel/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm rdfdel.asm rdfdel |
@pause |
/programs/filemngrs/rdfdel/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/rdfdel/trunk/rdfdel.asm |
---|
0,0 → 1,232 |
; |
; FILE COPIER |
; |
; Compile with FASM for Menuet |
; |
use32 |
org 0x0 |
db 'MENUET00' ; 8 byte id |
dd 38 ; required os |
dd START ; program start |
dd I_END ; program image size |
dd 0x1000 ; required amount of memory |
dd 0x1000 |
dd 0 ; reserved=no extended header |
include "lang.inc" |
include "macros.inc" |
START: ; start of execution |
call draw_window ; at first, draw the window |
still: |
mov eax,10 ; wait here for event |
int 0x40 |
cmp eax,1 ; redraw request ? |
jz red |
cmp eax,2 ; key in buffer ? |
jz key |
cmp eax,3 ; button in buffer ? |
jz button |
jmp still |
red: ; redraw |
call draw_window |
jmp still |
key: ; key |
mov eax,2 ; just read it and ignore |
int 0x40 |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jnz noclose |
mov eax,0xffffffff ; close this program |
int 0x40 |
noclose: |
cmp ah,3 ; delete ? |
jnz nodelete |
mov eax,32 |
mov ebx,destination |
int 0x40 |
jmp still |
nodelete: |
cmp ah,4 |
jz f2 |
jmp nof12 |
f2: |
mov [addr],dword destination |
mov [ya],dword 35 |
jmp rk |
rk: |
mov edi,[addr] |
mov al,' ' |
mov ecx,11 |
rep stosb |
call print_text |
mov edi,[addr] |
f11: |
mov eax,10 |
int 0x40 |
cmp eax,2 |
jz fbu |
jmp still |
fbu: |
mov eax,2 |
int 0x40 |
shr eax,8 |
cmp eax,8 |
jnz nobs |
cmp edi,[addr] |
jz f11 |
sub edi,1 |
mov [edi],byte 0 |
call print_text |
jmp f11 |
nobs: |
cmp eax,dword 31 |
jbe f11 |
cmp eax,dword 95 |
jb keyok |
sub eax,32 |
keyok: |
mov [edi],al |
call print_text |
add edi,1 |
mov esi,[addr] |
add esi,11 |
cmp esi,edi |
jnz f11 |
jmp still |
print_text: |
mov eax,13 |
mov ebx,109*65536+11*6 |
mov ecx,[ya] |
shl ecx,16 |
mov cx,8 |
mov edx,0xffffff |
int 0x40 |
mov eax,4 |
mov ebx,109*65536 |
add ebx,[ya] |
mov ecx,0x000000 |
mov edx,[addr] |
mov esi,11 |
int 0x40 |
ret |
nof12: |
jmp still |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
int 0x40 |
; DRAW WINDOW |
mov eax,0 ; function 0 : define and draw window |
mov ebx,100*65536+230 ; [x start] *65536 + [x size] |
mov ecx,100*65536+105 ; [y start] *65536 + [y size] |
mov edx,0x03ffffff ; color of work area RRGGBB |
int 0x40 |
; WINDOW LABEL |
mov eax,4 ; function 4 : write text to window |
mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
mov ecx,0x10ffffff ; color of text RRGGBB |
mov edx,header ; pointer to text beginning |
mov esi,header.len ; text length |
int 0x40 |
mov esi,0xbbbbbb |
mov eax,8 ; DELETE BUTTON |
mov ebx,20*65536+190 |
mov ecx,63*65536+15 |
mov edx,3 |
int 0x40 |
mov eax,8 |
mov ebx,200*65536+10 |
mov ecx,33*65536+10 |
mov edx,4 |
int 0x40 |
mov esi,destination |
mov edi,text+14 |
mov ecx,11 |
cld |
rep movsb |
mov ebx,25*65536+35 ; draw info text with function 4 |
mov ecx,0x0 |
mov edx,text |
mov esi,40 |
newline: |
mov eax,4 |
int 0x40 |
add ebx,16*2 |
add edx,40 |
cmp [edx],byte 'x' |
jnz newline |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
ret |
; DATA AREA |
destination db 'EXAMPLE.ASM' |
addr dd 0x0 |
ya dd 0x0 |
text: |
db 'FILENAME : yyyyyyyyyyy ' |
db ' DELETE FROM RAMDISK ' |
db 'x' ; <- END MARKER, DONT DELETE |
header: |
db 'RAMDISK FILE DELETE' |
.len = $ - header |
I_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/sysxtree/trunk/SYSTR12.GIF |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/filemngrs/sysxtree/trunk/ascgl.inc |
---|
0,0 → 1,1385 |
lang equ ru |
; |
; Assembler |
; SMALL |
; CODE |
; Graphics |
; Libary |
; |
; Ver 0.18 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;InfoList |
;0.01 LoadImage |
;0.02 SetBmp |
;0.03 Bmptoimg, Setimg ~01.03.2004 |
;0.04 Bug deleted, copyimg ~03.05.2004 |
;0.05 fullimg, collimg ~05.05.2004 |
;0.06 getimg ~09.05.2004 |
;0.07 convbmp ~13.05.2004 |
;0.08 fps ~14.05.2004 |
;0.09 drawfbox ~03.06.2004 |
;0.10 all macros optimized by halyavin, add at ~07.06.2004 |
;0.11 many macros optimized by halyavin, add at ~30.08.2004 |
;0.12 bmptoimg ~07.09.2004 |
;0.13 imgtoimg ~08.09.2004 |
;0.14 imgtoimg modify not brake bmp pict! ~09.09.2004 |
;0.15 giftoimg, giftoani ~10.09.2004 |
;0.16 setframe, rgbtobgr, setbmp deleted ~20.09.2004 |
;0.17 modification giftoimg, giftoani, getframeoff ~01.10.2004 |
;0.18 aframetoimg,aimgtoimg,frametoimg ~03.10.2004 |
aframetoimg_use_count=0 |
macro aframetoimg img, x, y, canvas,acol |
{ |
local loo,loo2,acolor |
aframetoimg_use_count=aframetoimg_use_count+1 |
if aframetoimg_use_count = 1 |
jmp end_aframetoimg_proc |
acolor dd 0 |
aframetoimg_proc: |
;getout coord |
mov [acolor],ebp |
mov edx,ebx ;img ;xsize |
movzx eax,word [edx] |
add eax,esi ;y cor |
; mov eax,esi ;y cor |
mul dword [ecx] ;canvas xsize |
add eax,edi ;x cor |
mov ebp,ebx ;img ;xsize |
movzx edx,word [ebp] |
add eax,edx |
mov ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,ecx ;canvas+8;start |
add ebp,8 |
;get img size |
add ebx,4 |
mov eax,ebx ;img ;xsize |
movzx esi,word [eax] |
movzx edi,word [eax+2] |
add ebx,4 |
mov edx,ebx ;img+8 |
loo2: |
push esi |
loo: |
;test on alpha color |
mov eax,[edx] |
shl eax,8 |
shr eax,8 |
cmp eax,[acolor] |
jne yx |
add edx,3 |
add ebp,3 |
jmp nx |
yx: |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
nx: |
dec esi |
jnz loo |
pop esi |
sub ebp,3 |
mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
sub eax,esi |
add ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,3 |
dec edi |
jnz loo2 |
ret |
end_aframetoimg_proc: |
end if |
push img |
push canvas |
push x |
push y |
push acol |
pop ebp |
pop esi |
pop edi |
pop ecx |
pop ebx |
call aframetoimg_proc |
} |
frametoimg_use_count=0 |
macro frametoimg img, x, y, canvas |
{ |
local loo,loo2 |
frametoimg_use_count=frametoimg_use_count+1 |
if frametoimg_use_count = 1 |
jmp end_frametoimg_proc |
frametoimg_proc: |
;getout coord |
mov edx,ebx ;img ;xsize |
movzx eax,word [edx] |
add eax,esi ;y cor |
; mov eax,esi ;y cor |
mul dword [ecx] ;canvas xsize |
add eax,edi ;x cor |
mov ebp,ebx ;img ;xsize |
movzx edx,word [ebp] |
add eax,edx |
mov ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,ecx ;canvas+8;start |
add ebp,8 |
;get img size |
add ebx,4 |
mov eax,ebx ;img ;xsize |
movzx esi,word [eax] |
movzx edi,word [eax+2] |
add ebx,4 |
mov edx,ebx ;img+8 |
loo2: |
push esi |
loo: |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
dec esi |
jnz loo |
pop esi |
sub ebp,3 |
mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
sub eax,esi |
add ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,3 |
dec edi |
jnz loo2 |
ret |
end_frametoimg_proc: |
end if |
push img |
push canvas |
push x |
push y |
pop esi |
pop edi |
pop ecx |
pop ebx |
call frametoimg_proc |
} |
aimgtoimg_use_count=0 |
macro aimgtoimg img, x, y, canvas,acol |
{ |
local loo,loo2,acolor |
aimgtoimg_use_count=aimgtoimg_use_count+1 |
if aimgtoimg_use_count = 1 |
jmp end_aimgtoimg_proc |
acolor dd 0 |
aimgtoimg_proc: |
;getout coord |
mov [acolor],ebp |
mov eax,esi ;y cor |
mul dword [ecx] ;canvas xsize |
add eax,edi ;x cor |
mov ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,ecx ;canvas+8;start |
add ebp,8 |
;get img size |
mov eax,ebx ;img ;xsize |
mov esi,[eax] |
add ebx,4 |
mov eax,ebx ; img+4 ;ysize |
mov edi,[eax] |
add ebx,4 |
mov edx,ebx ;img+8 |
loo2: |
push esi |
loo: |
;test on alpha color |
mov eax,[edx] |
shl eax,8 |
shr eax,8 |
cmp eax,[acolor] |
jne yx |
add edx,3 |
add ebp,3 |
jmp nx |
yx: |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
nx: |
dec esi |
jnz loo |
pop esi |
sub ebp,3 |
mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
sub eax,esi |
add ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,3 |
dec edi |
jnz loo2 |
ret |
end_aimgtoimg_proc: |
end if |
push img |
push canvas |
push x |
push y |
push acol |
pop ebp |
pop esi |
pop edi |
pop ecx |
pop ebx |
call aimgtoimg_proc |
} |
imgtoimg_use_count=0 |
macro imgtoimg img, x, y, canvas |
{ |
local loo,loo2 |
imgtoimg_use_count=imgtoimg_use_count+1 |
if imgtoimg_use_count = 1 |
jmp end_imgtoimg_proc |
imgtoimg_proc: |
;getout coord |
mov eax,esi ;y cor |
mul dword [ecx] ;canvas xsize |
add eax,edi ;x cor |
mov ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,ecx ;canvas+8;start |
add ebp,8 |
;get img size |
mov eax,ebx ;img ;xsize |
mov esi,[eax] |
add ebx,4 |
mov eax,ebx ; img+4 ;ysize |
mov edi,[eax] |
add ebx,4 |
mov edx,ebx ;img+8 |
loo2: |
push esi |
loo: |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
mov al,byte [edx] |
mov byte [ebp],al |
inc ebp |
inc edx |
dec esi |
jnz loo |
pop esi |
sub ebp,3 |
mov eax,[ecx] ;offset = offset+((canxsize-imgxsize)*3) |
sub eax,esi |
add ebp,eax |
shl eax,1 |
add ebp,eax |
add ebp,3 |
dec edi |
jnz loo2 |
ret |
end_imgtoimg_proc: |
end if |
push img |
push canvas |
push x |
push y |
pop esi |
pop edi |
pop ecx |
pop ebx |
call imgtoimg_proc |
} |
;DrawBox |
macro drawfbox x,y,xs,ys,color |
{ |
wordstoreg ebx,x,xs ;x*65536+xs |
wordstoreg ecx,y,ys ;y*65536+ys |
mov edx,color |
mov eax,13 |
int 0x40 |
} |
; FPS - Set Frame Per Second Display |
fps_show_frequency=40 |
macro fps x,y,color,delcolor |
{ |
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt |
local no_out_fps |
jmp spdat |
savetime dd 0 |
fps_cntr dd 0 |
fps dd 0 |
ttt dd 0 |
spdat: |
get_time: |
mov eax,3 |
int 0x40 |
cmp eax,[savetime] |
jne new_time |
inc [fps_cntr] |
cmp dword [ttt],0 |
je out_fps |
dec dword [ttt] |
jmp no_out_fps |
new_time: |
mov [savetime],eax |
mov ebx,[fps_cntr] |
mov [fps],ebx |
mov [fps_cntr],0 |
out_fps: |
if ~(delcolor eq ) |
mov ebx,x*65536+30 |
mov ecx,y*65536+7 |
mov edx,delcolor |
mov eax,13 |
int 0x40 |
end if |
mov dword [ttt],fps_show_frequency |
mov eax,47 |
mov ebx,5*65536 |
; mov bl,0 |
mov edx,x*65536+y |
mov esi,color |
mov ecx,[fps] |
int 0x40 |
no_out_fps: |
} |
; COLLIMG - Collusion image's |
_1dbounce_count=0; |
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv |
{ |
local bounce,exit,anot,bc,nbc |
mov esi,[img1_off] ;xs1 |
mov edi,[img2_off] ;ys2 |
mov eax,x1 ; |
mov ebx,x2 ; |
call _1dbounce |
mov edx,ecx |
mov esi,[img1_off+4] ;ys1 |
mov edi,[img2_off+4] ;ys2 |
mov eax,y1 ; |
mov ebx,y2 ; |
call _1dbounce |
add edx,ecx |
cmp edx,2 |
je bounce |
mov otv,0 |
jmp exit |
_1dbounce_count=_1dbounce_count+1 |
if _1dbounce_count = 1 |
_1dbounce: |
cmp ebx,eax |
jb anot |
add eax,esi |
cmp eax,ebx |
jbe nbc |
bc: |
mov ecx,1 |
ret |
anot: |
add ebx,edi |
cmp ebx,eax |
ja bc |
nbc: |
xor ecx,ecx |
ret |
end if |
bounce: |
mov otv,1 |
exit: |
} |
macro rgbtobgr image |
{ |
local loo |
mov eax,[image] |
mul dword [image+4] |
mov ecx,eax |
mov esi,image+8 |
; add esi,8 |
loo: |
mov al,[esi] |
mov bl,[esi+2] |
mov [esi],bl |
mov [esi+2],al |
add esi,3 |
dec ecx |
jnz loo |
} |
macro setimg x , y ,arg3 |
{ |
mov eax,7 |
mov ebx,arg3 |
add ebx,8 |
mov cx,[arg3] |
shl ecx,16 |
add cx,[arg3+4] |
; wordstoreg ecx,[arg3],[arg3+4] |
wordstoreg edx, x , y ;arg1*65536+arg2 |
int 0x40 |
} |
macro setframe x , y ,arg3 |
{ |
mov eax,7 |
mov ebx,arg3 |
add ebx,8 |
wordstoreg edx, x , y ;arg1*65536+arg2 |
add edx,dword [arg3] |
mov ecx,dword [arg3+4] |
int 0x40 |
} |
macro getimg imgsrc,x,y,xs,ys,imgdest |
{ |
local cyc |
if xs eqtype 0 |
mov dword [imgdest],xs |
else |
mov eax,xs |
mov dword [imgdest],eax |
end if |
if ys eqtype 0 |
mov dword [imgdest+4],ys |
else |
mov eax,ys |
mov dword [imgdest+4],eax |
end if |
mov eax,dword [imgsrc] ;getx size |
; lea ecx,[eax+2*eax] |
mov ecx,eax |
shl ecx,1 |
add ecx,eax |
mov ebx,y |
mul ebx |
add eax,x |
mov edx,ecx |
lea eax,[eax+2*eax] ;eax=offset on imsrc |
; mov ebp,eax |
; shl eax,1 |
; add eax,ebp |
mov ecx,xs |
mov ebx,ys |
mov edi,8+imgdest |
lea esi,[eax+8+imgsrc] |
; mov esi,eax |
; add esi,8 |
; add esi,imgsrc |
cld |
cyc: |
movsw |
movsb |
dec ecx |
jne cyc |
add esi,edx |
mov ecx,xs |
sub esi,ecx |
sub esi,ecx |
sub esi,ecx |
dec ebx |
jne cyc |
} |
macro copyimg img2_off,img1_off |
{ |
mov eax,dword [img1_off] |
mov ebx,dword [img1_off+4] |
mul ebx |
lea ecx,[eax+2*eax] |
lea esi,[img1_off+8] |
lea edi,[img2_off+8] |
cld |
rep movsb |
} |
macro fullimg img_off,xs,ys,color |
{ |
local cop |
mov eax,xs |
mov ebx,ys |
mov dword [img_off],eax |
mov dword [img_off+4],ebx |
mul ebx |
lea ebp,[eax+2*eax] |
mov esi,color |
if color eqtype 0 |
mov ecx,color/65536 |
else |
mov ecx,esi |
shr ecx,16 |
end if |
xor edi,edi |
cop: |
mov word [img_off+8+edi],si |
add edi,2 |
mov byte [img_off+8+edi],cl |
inc edi |
cmp edi,ebp |
jne cop |
} |
; number of frame in ecx |
; callculatin offset of raw data |
macro getframeoff num_of_frame,offset_of_animation,offset_of_frame |
{ |
local loo,setpic |
mov ebp,num_of_frame ;ecx |
mov esi,offset_of_animation;Image |
loo: |
cmp ebp,0 |
je setpic |
movzx eax,word [esi+4] |
movzx ebx,word [esi+6] |
mul ebx ;dword [esi+4] |
mov ebx,3 |
mul ebx |
add eax,8 |
add esi,eax |
dec ebp |
jmp loo |
setpic: |
mov dword offset_of_frame,esi |
} |
; BMPTOIMG -Convert BMP format TO IMG format |
; (SYNTAX) BMPTOIMG BMP_source_offset,IMG_dest_ofset |
; (SAMPLE) View BMPLS.ASM sample. |
; ( NOTE ) This is macros is not brake bmp structure! Tested in 32,8,4 bits |
bmptoimg_data_area_count=0 |
macro bmptoimg bmp_load_area,img_dest_area |
{ |
local fileinfo,string,end_bmp,nodix |
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2 |
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize |
;local qwe,bmpfn |
; convert: |
movzx eax,word [bmp_load_area+28] |
mul dword [bmp_load_area+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 [bmp_load_area+34],0 |
jne yespicsize ;if picture size is defined |
mul dword [bmp_load_area+22] |
mov dword [bmp_load_area+34],eax |
yespicsize: |
mov ebp,img_dest_area+8 |
mov eax,bmp_load_area |
mov ebx,eax |
add ebx, [bmp_load_area+2];file size |
inc ebx |
mov dword [bmptoimg_soi],ebx ;soi-start of image area for drawing |
add eax, [bmp_load_area+10] |
mov dword [bmptoimg_data_area_sop],eax ;sop-start of picture in file |
add eax, [bmp_load_area+34] |
mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file |
mov eax, [bmp_load_area+18] |
lea eax,[eax+2*eax] ;3x pixels in eax |
mov edi,dword [bmptoimg_soi] ;initializing |
mov esi,dword [bmptoimg_data_area_eop] |
sub esi,dword [bmptoimg_data_area_bps] |
nextstring: |
push edi |
push ebp |
cmp word [bmp_load_area+28],24 |
jne convertno32 |
mov edi,ebp |
mov ecx,[bmptoimg_data_area_dwps] |
cld |
rep movsd |
convert1: |
pop ebp |
pop edi |
sub esi,dword [bmptoimg_data_area_bps] |
sub esi,dword [bmptoimg_data_area_bps] |
cmp esi,dword [bmptoimg_data_area_sop] |
jb end_bmp |
add edi,eax |
add ebp,eax |
jmp nextstring |
convertno32: |
mov ebx,bmp_load_area |
add ebx, [bmp_load_area+14] |
add ebx,14 ;start of color table |
push esi |
add esi,dword [bmptoimg_data_area_bps] |
mov dword [bmptoimg_data_area_eos],esi |
pop esi |
nextelem: |
push eax |
movzx eax,byte [esi] |
cmp word [bmp_load_area+28],4 |
je convert4bpp |
cmp word [bmp_load_area+28],1 |
je convert1bpp |
call converttable |
convert2: |
pop eax |
inc esi |
cmp esi,dword [bmptoimg_data_area_eos] |
jae convert1 |
add edi,3 |
add ebp,3 |
jmp nextelem |
convert4bpp: |
shl ax,4 |
shr al,4 |
push ax |
movzx eax,ah |
call converttable |
add edi,3 |
add ebp,3 |
pop ax |
movzx eax,al |
call converttable |
jmp convert2 |
convert1bpp: |
mov ecx,eax |
mov edx,7 |
nextbit: |
xor eax,eax |
bt ecx,edx |
jnc noaddelem |
inc eax |
noaddelem: |
push edx |
call converttable |
pop edx |
dec edx |
js convert2 |
add edi,3 |
add ebp,3 |
jmp nextbit |
converttable: |
shl eax,2 |
add eax,ebx |
mov edx, dword [eax] |
; mov dword [edi],edx |
mov [ebp],edx |
ret |
bmptoimg_data_area_count=bmptoimg_data_area_count+1 |
if bmptoimg_data_area_count = 1 |
; DATA AREA |
bmptoimg_soi dd 0 |
bmptoimg_data_area_bps dd 0 |
bmptoimg_data_area_dwps dd 0 |
bmptoimg_data_area_sop dd 0 |
bmptoimg_data_area_eop dd 0 |
bmptoimg_data_area_eos dd 0 |
end if |
end_bmp: |
mov eax,dword [bmp_load_area+18] |
mov ebx,dword [bmp_load_area+22] |
mov dword [img_dest_area],eax |
mov dword [img_dest_area+4],ebx |
} |
; For convert RGB to BGR |
COLOR_ORDER equ MENUETOS |
macro giftoani gifsrc,imgsrc,num_of_frames |
{ |
local hasharea, ReadGIF, nextblock,_null |
local globalColor, img_count, cur_info, img_start |
local codesize, compsize, bit_count, CC, EOI, Palette |
local block_ofs, table_ptr, gifmacend |
local no_gc, block_skip, no_comm, noextblock, uselocal |
local setPal, filltable, reinit, cycle, zadd, noinc |
local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
local Gif_output, next, loop2 |
_null equ 0x1000 ; 0x1000 |
; jmp sss |
; if defined gif_hash_offset |
; else |
; hasharea: |
; times 4096 dd 0 ;4096 |
; end if |
;sss: |
mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
if defined gif_hash_offset |
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
else |
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
end if |
call ReadGIF |
push ecx |
pop dword num_of_frames |
jmp gifmacend |
if defined gif_hash_offset |
else |
hasharea: |
times 4096 dd 0 ;4096 |
end if |
ReadGIF: |
push esi edi |
mov [table_ptr],eax |
mov [cur_info],edi |
xor eax,eax |
mov [globalColor],eax |
mov [img_count],eax |
inc eax |
cmp dword[esi],'GIF8' |
jne er ; signature |
mov ecx,[esi+0xa] |
inc eax |
add esi,0xd |
mov edi,esi |
bt ecx,7 |
jnc nextblock |
mov [globalColor],esi |
call Gif_skipmap |
nextblock: |
cmp byte[edi],0x21 |
jne noextblock |
inc edi |
cmp byte[edi],0xf9 ; Graphic Control Ext |
jne no_gc |
add edi,7 |
jmp nextblock |
no_gc: |
cmp byte[edi],0xfe ; Comment Ext |
jne no_comm |
inc edi |
block_skip: |
movzx eax,byte[edi] |
lea edi,[edi+eax+1] |
cmp byte[edi],0 |
jnz block_skip |
inc edi |
jmp nextblock |
no_comm: |
cmp byte[edi],0xff ; Application Ext |
jne nextblock |
add edi,13 |
jmp block_skip |
noextblock: |
cmp byte[edi],0x2c ; image beginning |
jne er |
inc [img_count] |
inc edi |
mov esi,[cur_info] |
xchg esi,edi |
movsd |
movsd |
push edi |
movzx ecx,word[esi] |
inc esi |
bt ecx,7 |
jc uselocal |
push [globalColor] |
mov edi,esi |
jmp setPal |
uselocal: |
call Gif_skipmap |
push esi |
setPal: |
movzx ecx,byte[edi] |
inc ecx |
mov [codesize],ecx |
dec ecx |
pop [Palette] |
lea esi,[edi+1] |
mov edi,[table_ptr] |
xor eax,eax |
cld |
lodsb ; eax - block_count |
add eax,esi |
mov [block_ofs],eax |
mov [bit_count],8 |
mov eax,1 |
shl eax,cl |
mov [CC],eax |
inc eax |
mov [EOI],eax |
lea ecx,[eax-1] |
mov eax, _null shl 16 |
filltable: |
stosd |
inc eax |
loop filltable |
pop edi |
mov [img_start],edi |
reinit: |
mov edx,[EOI] |
inc edx |
push [codesize] |
pop [compsize] |
call Gif_get_sym |
cmp eax,[CC] |
je reinit |
call Gif_output |
cycle: |
movzx ebx,ax |
call Gif_get_sym |
cmp eax,edx |
jae notintable |
cmp eax,[CC] |
je reinit |
cmp eax,[EOI] |
je zend |
call Gif_output |
zadd: |
push eax |
mov eax,[table_ptr] |
mov [eax+edx*4],ebx |
pop eax |
cmp edx,0xFFF |
jae cycle |
inc edx |
bsr ebx,edx |
cmp ebx,[compsize] |
jne noinc |
inc [compsize] |
noinc: |
jmp cycle |
notintable: |
push eax |
mov eax,ebx |
call Gif_output |
push ebx |
movzx eax,bx |
call Gif_output |
pop ebx eax |
jmp zadd |
er: |
pop edi |
jmp ex |
zend: |
; mov eax,[.cur_info] ; skip offset to next frame |
; mov [eax],edi |
mov [cur_info],edi |
add esi,2 |
xchg esi,edi |
nxt: |
cmp byte[edi],0 |
jnz continue |
inc edi |
jmp nxt |
continue: |
cmp byte[edi],0x3b ;read next frame |
jne nextblock |
xor eax,eax |
stosd |
mov ecx,[img_count] |
ex: |
pop edi esi |
ret |
Gif_skipmap: |
; in: ecx - image descriptor, esi - pointer to colormap |
; out: edi - pointer to area after colormap |
and ecx,111b |
inc ecx ; color map size |
mov ebx,1 |
shl ebx,cl |
lea ebx,[ebx*2+ebx] |
lea edi,[esi+ebx] |
ret |
Gif_get_sym: |
mov ecx,[compsize] |
push ecx |
xor eax,eax |
shift: |
ror byte[esi],1 |
rcr eax,1 |
dec [bit_count] |
jnz loop1 |
inc esi |
cmp esi,[block_ofs] |
jb noblock |
push eax |
xor eax,eax |
lodsb |
test eax,eax |
jnz nextbl |
mov eax,[EOI] |
sub esi,2 |
add esp,8 |
jmp exx |
nextbl: |
add eax,esi |
mov [block_ofs],eax |
pop eax |
noblock: |
mov [bit_count],8 |
loop1: |
loop shift |
pop ecx |
rol eax,cl |
exx: |
xor ecx,ecx |
ret |
Gif_output: |
push esi eax edx |
mov edx,[table_ptr] |
next: |
push word[edx+eax*4] |
mov ax,word[edx+eax*4+2] |
inc ecx |
cmp ax,_null |
jnz next |
shl ebx,16 |
mov bx,[esp] |
loop2: |
pop ax |
lea esi,[eax+eax*2] |
add esi,[Palette] |
if COLOR_ORDER eq MENUETOS |
mov esi,[esi] |
bswap esi |
shr esi,8 |
mov [edi],esi |
add edi,3 |
else |
movsw |
movsb |
end if |
loop loop2 |
pop edx eax esi |
ret |
globalColor dd 1 |
img_count dd 1 |
cur_info dd 1 ; image table pointer |
img_start dd 1 |
codesize dd 1 |
compsize dd 1 |
bit_count dd 1 |
CC dd 1 |
EOI dd 1 |
Palette dd 1 |
block_ofs dd 1 |
table_ptr dd 1 |
gifmacend: |
} |
macro giftoimg gifsrc,imgsrc |
{ |
local hasharea, ReadGIF, nextblock,_null |
local globalColor, img_count, cur_info, img_start |
local codesize, compsize, bit_count, CC, EOI, Palette |
local block_ofs, table_ptr, gifmacend |
local no_gc, block_skip, no_comm, noextblock, uselocal |
local setPal, filltable, reinit, cycle, zadd, noinc |
local notintable, er, zend, nxt, continue, ex, Gif_skipmap |
local Gif_get_sym, shift, nextbl, noblock, loop1, exx |
local Gif_output, next, loop2 |
_null fix 0x1000 ; 0x1000 |
mov esi,gifsrc ;ª § ⥫ì ä ¨« ¢ ¯ ¬ï⨠|
mov edi,imgsrc ;ª § ⥫ì ᯨ᮪ ª à⨮ª |
if defined gif_hash_offset |
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
else |
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨¨¬ã¬ 4096*4 ¡ ©â |
end if |
call ReadGIF |
jmp gifmacend |
if defined gif_hash_offset |
else |
hasharea: |
times 4096 dd 0 ;4096 |
end if |
ReadGIF: |
push esi edi |
mov [table_ptr],eax |
mov [cur_info],edi |
xor eax,eax |
mov [globalColor],eax |
mov [img_count],eax |
inc eax |
cmp dword[esi],'GIF8' |
jne er ; signature |
mov ecx,[esi+0xa] |
inc eax |
add esi,0xd |
mov edi,esi |
bt ecx,7 |
jnc nextblock |
mov [globalColor],esi |
call Gif_skipmap |
nextblock: |
cmp byte[edi],0x21 |
jne noextblock |
inc edi |
cmp byte[edi],0xf9 ; Graphic Control Ext |
jne no_gc |
add edi,7 |
jmp nextblock |
no_gc: |
cmp byte[edi],0xfe ; Comment Ext |
jne no_comm |
inc edi |
block_skip: |
movzx eax,byte[edi] |
lea edi,[edi+eax+1] |
cmp byte[edi],0 |
jnz block_skip |
inc edi |
jmp nextblock |
no_comm: |
cmp byte[edi],0xff ; Application Ext |
jne nextblock |
add edi,13 |
jmp block_skip |
noextblock: |
cmp byte[edi],0x2c ; image beginning |
jne er |
inc [img_count] |
inc edi |
mov esi,[cur_info] |
xchg esi,edi |
; movsd |
; movsd |
mov bp,word[esi+4] |
movzx ebx,bp |
mov [edi],ebx |
mov bp,word[esi+6] |
movzx ebx,bp |
mov [edi+4],ebx |
add edi,8 |
add esi,8 |
push edi |
movzx ecx,word[esi] |
inc esi |
bt ecx,7 |
jc uselocal |
push [globalColor] |
mov edi,esi |
jmp setPal |
uselocal: |
call Gif_skipmap |
push esi |
setPal: |
movzx ecx,byte[edi] |
inc ecx |
mov [codesize],ecx |
dec ecx |
pop [Palette] |
lea esi,[edi+1] |
mov edi,[table_ptr] |
xor eax,eax |
cld |
lodsb ; eax - block_count |
add eax,esi |
mov [block_ofs],eax |
mov [bit_count],8 |
mov eax,1 |
shl eax,cl |
mov [CC],eax |
inc eax |
mov [EOI],eax |
lea ecx,[eax-1] |
mov eax, _null shl 16 |
filltable: |
stosd |
inc eax |
loop filltable |
pop edi |
mov [img_start],edi |
reinit: |
mov edx,[EOI] |
inc edx |
push [codesize] |
pop [compsize] |
call Gif_get_sym |
cmp eax,[CC] |
je reinit |
call Gif_output |
cycle: |
movzx ebx,ax |
call Gif_get_sym |
cmp eax,edx |
jae notintable |
cmp eax,[CC] |
je reinit |
cmp eax,[EOI] |
je zend |
call Gif_output |
zadd: |
push eax |
mov eax,[table_ptr] |
mov [eax+edx*4],ebx |
pop eax |
cmp edx,0xFFF |
jae cycle |
inc edx |
bsr ebx,edx |
cmp ebx,[compsize] |
jne noinc |
inc [compsize] |
noinc: |
jmp cycle |
notintable: |
push eax |
mov eax,ebx |
call Gif_output |
push ebx |
movzx eax,bx |
call Gif_output |
pop ebx eax |
jmp zadd |
er: |
pop edi |
jmp ex |
zend: |
; mov eax,[.cur_info] ; skip offset to next frame |
; mov [eax],edi |
mov [cur_info],edi |
add esi,2 |
xchg esi,edi |
nxt: |
cmp byte[edi],0 |
jnz continue |
inc edi |
jmp nxt |
continue: |
; cmp byte[edi],0x3b ;read next frame |
; jne nextblock |
xor eax,eax |
stosd |
mov ecx,[img_count] |
ex: |
pop edi esi |
ret |
Gif_skipmap: |
; in: ecx - image descriptor, esi - pointer to colormap |
; out: edi - pointer to area after colormap |
and ecx,111b |
inc ecx ; color map size |
mov ebx,1 |
shl ebx,cl |
lea ebx,[ebx*2+ebx] |
lea edi,[esi+ebx] |
ret |
Gif_get_sym: |
mov ecx,[compsize] |
push ecx |
xor eax,eax |
shift: |
ror byte[esi],1 |
rcr eax,1 |
dec [bit_count] |
jnz loop1 |
inc esi |
cmp esi,[block_ofs] |
jb noblock |
push eax |
xor eax,eax |
lodsb |
test eax,eax |
jnz nextbl |
mov eax,[EOI] |
sub esi,2 |
add esp,8 |
jmp exx |
nextbl: |
add eax,esi |
mov [block_ofs],eax |
pop eax |
noblock: |
mov [bit_count],8 |
loop1: |
loop shift |
pop ecx |
rol eax,cl |
exx: |
xor ecx,ecx |
ret |
Gif_output: |
push esi eax edx |
mov edx,[table_ptr] |
next: |
push word[edx+eax*4] |
mov ax,word[edx+eax*4+2] |
inc ecx |
cmp ax,_null |
jnz next |
shl ebx,16 |
mov bx,[esp] |
loop2: |
pop ax |
lea esi,[eax+eax*2] |
add esi,[Palette] |
if COLOR_ORDER eq MENUETOS |
mov esi,[esi] |
bswap esi |
shr esi,8 |
mov [edi],esi |
add edi,3 |
else |
movsw |
movsb |
end if |
loop loop2 |
pop edx eax esi |
ret |
globalColor dd 1 |
img_count dd 1 |
cur_info dd 1 ; image table pointer |
img_start dd 1 |
codesize dd 1 |
compsize dd 1 |
bit_count dd 1 |
CC dd 1 |
EOI dd 1 |
Palette dd 1 |
block_ofs dd 1 |
table_ptr dd 1 |
gifmacend: |
} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/sysxtree/trunk/ascl.inc |
---|
0,0 → 1,838 |
lang equ ru ; ru en fr ge fi |
; |
; Assembler |
; SMALL |
; CODE |
; Libary |
; |
; Ver 0.14 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;Please compile aplications on FASM ver1.54 or higer!!! |
;InfoList |
;0.01 scank,putpix,puttxt |
;0.02 label,random,colors |
;0.03 window,startwd,endwd,attributes |
;0.04 close,delay,scevent ~30.04.2004 |
;0.05 small random, ~04.05.2004 |
;0.06 wtevent ~09.05.2004 |
;0.07 timeevent ~23.05.2004 |
;0.08 txtput ~14.06.2004 |
;0.09 opendialog,savedialog ~20.06.2004 |
;0.10 wordstoreg by halyavin, add at ~30.08.2004 |
; random bug deleted eax is use. |
;0.11 loadfile from me +puttxt bug del ~07.09.2004 |
;0.12 open/save dialog ~13.09.2004 |
;0.13 dialogs bugs deleted |
;0.14 drawlbut ~03.10.2004 |
; LOADFILE |
; (SYNTAX) LOADFILE 'full_path_to_file',file_load_area,file_temp_area |
; (SAMPLE) LOADFILE '/rd/1/clock.bmp',load_area,temp_area |
macro loadfile file_name,file_load_area,file_temp_area |
{ |
local open,fileinfo,string |
jmp open |
fileinfo: |
dd 0 |
dd 0 |
dd 1 |
dd file_load_area |
dd file_temp_area |
string: |
db file_name,0 |
open: |
mov dword [fileinfo+8],1 ; how many blocks to read (1) |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
mov eax,[file_load_area+2] |
shr eax,9 ; ¯®¤¥«¨¬ 512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢ |
inc eax |
mov dword [fileinfo+8],eax |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
} |
macro wordstoreg reg,hiword,loword |
{ |
if hiword eqtype 0 & loword eqtype 0 |
mov reg,(hiword)*65536+(loword) |
else if hiword eqtype 12 & loword eqtype eax |
mov reg,(hiword)*65536 |
add reg,loword |
else if hiword eqtype 0 & loword eqtype [123] |
mov reg,(hiword)*65536 |
add reg,loword |
else if (hiword eq ) & (loword eq ) |
else |
mov reg,hiword |
shl reg,16 |
add reg,loword |
end if |
} |
; DRAW BUTTON with label |
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor |
{ |
local asd,lab |
jmp asd |
lab db text ;arg label |
asd: |
wordstoreg ebx,x,xs |
wordstoreg ecx,y,ys |
mov edx,id |
mov esi,bcolor |
mov eax,8 |
int 0x40 |
mov eax,asd-lab ;calc size |
mov ebx,6 |
mul ebx |
mov esi,eax |
mov eax,xs |
sub eax,esi |
shr eax,1 |
add eax,x |
mov edx,ys |
sub edx,7 |
shr edx,1 |
add edx,y |
mov ebx,eax |
shl ebx,16 |
add ebx,edx |
mov ecx,tcolor ;arg4 color |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
int 0x40 |
} |
macro opendialog redproc,openoff,erroff,path |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog) |
; |
; STEP2 prepare IPC area for get messages |
; |
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,150 ; size 150 bytes |
int 0x40 |
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
int 0x40 |
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
mov eax,58 |
mov ebx,run_fileinfo |
int 0x40 |
call redproc |
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
int 0x40 |
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
int 0x40 |
mov ebp,eax |
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
int 0x40 |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
jmp erroff |
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
mred: |
call redproc |
jmp getmesloop |
mkey: |
mov eax,2 |
int 0x40 ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
int 0x40 |
mgetmes: |
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
; First message is number of PID SYSXTREE dialog |
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
jmp openoff |
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
param: |
dd 0 ; My dec PID |
dd 0,0 ; Type of dialog |
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo ; 0x10000 |
;run_filepath |
db '/RD/1/SYSXTREE',0 |
procinfo: |
times 256 db 0 |
} |
macro savedialog redproc,openoff,erroff,path |
{ |
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc |
local run_fileinfo, run_filepath, param |
local getmesloop, loox, mred, mkey, mbutton, mgetmes |
local dlg_is_work, ready, procinfo |
; |
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec, |
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save) |
; |
cld |
;; mov esi,path |
mov edi,path |
mov eax,0 |
mov ecx,200 |
rep stosb |
;mov [get_loops],0 |
mov [dlg_pid_get],0 |
; Get my PID in dec format 4 bytes |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
; convert eax bin to param dec |
mov eax,dword [procinfo+30] ;offset of myPID |
mov edi,param+4-1 ;offset to 4 bytes |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
; wirite 1 byte space to param |
mov [param+4],byte 32 ;Space for next parametr |
; and 1 byte type of dialog to param |
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog) |
; |
; STEP2 prepare IPC area for get messages |
; |
; prepare IPC area |
mov [path],dword 0 |
mov [path+4],dword 8 |
; define IPC memory |
mov eax,60 |
mov ebx,1 ; define IPC |
mov ecx,path ; offset of area |
mov edx,120 ; size 150 bytes |
int 0x40 |
; change wanted events list 7-bit IPC event |
mov eax,40 |
mov ebx,01000111b |
int 0x40 |
; |
; STEP 3 run SYSTEM XTREE with parameters |
; |
mov eax,58 |
mov ebx,run_fileinfo |
int 0x40 |
call redproc |
mov [get_loops],0 |
getmesloop: |
mov eax,23 |
mov ebx,50 ;0.5 sec |
int 0x40 |
cmp eax,1 |
je mred |
cmp eax,2 |
je mkey |
cmp eax,3 |
je mbutton |
cmp eax,7 |
je mgetmes |
; Get number of procces |
mov ebx,procinfo |
mov ecx,-1 |
mov eax,9 |
int 0x40 |
mov ebp,eax |
loox: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,ebp |
int 0x40 |
mov eax,[DLGPID] |
cmp [procinfo+30],eax ;IF Dialog find |
je dlg_is_work ;jmp to dlg_is_work |
dec ebp |
jnz loox |
jmp erroff |
dlg_is_work: |
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated |
je erroff ;TESTODP2 terminated too |
cmp [dlg_pid_get],dword 1 |
je getmesloop |
inc [get_loops] |
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated |
jae erroff |
jmp getmesloop |
mred: |
call redproc |
jmp getmesloop |
mkey: |
int 0x40 ; read (eax=2) |
jmp getmesloop |
mbutton: |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne getmesloop |
mov eax,-1 ; close this program |
int 0x40 |
mgetmes: |
; If dlg_pid_get then second message get jmp to still |
cmp [dlg_pid_get],dword 1 |
je ready |
; First message is number of PID SYSXTREE dialog |
; convert PID dec to PID bin |
movzx eax,byte [path+16] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [path+16+3] |
add eax,ebx |
sub eax,48 |
mov [DLGPID],eax |
; Claear and prepare IPC area for next message |
mov [path],dword 0 |
mov [path+4],dword 8 |
mov [path+8],dword 0 |
mov [path+12],dword 0 |
mov [path+16],dword 0 |
; Set dlg_pid_get for get next message |
mov [dlg_pid_get],dword 1 |
call redproc ;show DLG_PID |
jmp getmesloop |
ready: |
; |
; The second message get |
; Second message is 100 bytes path to SAVE/OPEN file |
; shl path string on 16 bytes |
; |
cld |
mov esi,path+16 |
mov edi,path |
mov ecx,200 |
rep movsb |
mov [edi],byte 0 |
jmp openoff |
; DATA AREA |
get_loops dd 0 |
dlg_pid_get dd 0 |
DLGPID dd 0 |
param: |
rb 4 ; My dec PID |
rb 6 ; Type of dialog |
run_fileinfo: |
dd 16 |
dd 0 |
dd param |
dd 0 |
dd procinfo |
run_filepath: |
db '/RD/1/SYSXTREE',0 |
procinfo: |
times 256 db 0 |
} |
; RANDOM - generate random count (small) |
; (SYNTAX) RANDOM MaxCount,OutArgument |
; (SAMPLE) RANDOM 10000,eax |
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations |
randomuse = 0 |
macro random arg1,arg2 |
{ |
local rxproc |
randomuse = randomuse + 1 |
jmp rxproc |
if defined randomuse & randomuse = 1 |
randomproc: |
jmp rnj |
rsx1 dw 0x4321 |
rsx2 dw 0x1234 |
rnj: |
; mov eax,arg1 |
push bx |
push cx |
push dx |
push si |
push di |
mov cx,ax |
mov ax,word ptr rsx1 |
mov bx,word ptr rsx2 |
mov si,ax |
mov di,bx |
mov dl,ah |
mov ah,al |
mov al,bh |
mov bh,bl |
xor bl,bl |
rcr dl,1 |
rcr ax,1 |
rcr bx,1 |
add bx,di |
adc ax,si |
add bx,0x62e9 |
adc ax,0x3619 |
mov word ptr rsx1,bx |
mov word ptr rsx2,ax |
xor dx,dx |
cmp ax,0 |
je nodiv |
cmp cx,0 |
je nodiv |
div cx |
nodiv: |
mov ax,dx |
pop di |
pop si |
pop dx |
pop cx |
pop bx |
and eax,0000ffffh |
; mov arg2,0 |
; mov arg2,eax |
ret |
end if |
rxproc: |
mov eax,arg1 |
call randomproc |
mov arg2,eax |
} |
macro scank |
{ |
mov eax,10 |
int 0x40 |
} |
macro putpix x,y,color |
{ |
mov ebx,x |
mov ecx,y |
mov edx,color |
mov eax,1 |
int 0x40 |
} |
macro puttxt x,y,offs,size,color |
{ |
; mov ebx,x |
; shl ebx,16 |
; add ebx,y |
wordstoreg ebx,x,y |
mov ecx,color |
mov edx,offs |
mov esi,size |
mov eax,4 |
int 0x40 |
} |
macro outcount data, x, y, color, numtype |
{ |
mov ecx,data |
mov ebx,numtype |
mov bl,0 |
; mov edx,x*65536+y |
wordstoreg edx,x,y |
mov esi,color |
mov eax,47 |
int 0x40 |
} |
; SCEVENT - Scan event |
macro scevent red,key,but |
{ |
mov eax,11 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; WTEVENT - Wait event |
macro wtevent red,key,but |
{ |
mov eax,10 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; TIMEEVENT - Wite for event with timeout |
macro timeevent xfps,noevent,red,key,but |
{ |
mov eax,23 |
mov ebx,xfps |
int 0x40 |
cmp eax,0 |
je noevent |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; CLOSE - Close program |
macro close |
{ |
mov eax,-1 |
int 0x40 |
} |
; DELAY - Create delay 1/100 sec |
; (SYNTAX) Delay time |
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec |
macro delay arg1 |
{ |
mov eax,5 |
mov ebx,arg1 |
int 0x40 |
} |
; WINDOW - Draw window |
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color |
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned |
macro window arg1,arg2,arg3,arg4,arg5 |
{ |
; mov ebx,arg1*65536+arg3 |
; mov ecx,arg2*65536+arg4 |
wordstoreg ebx,arg1,arg3 |
wordstoreg ecx,arg2,arg4 |
mov edx,arg5 |
mov eax,0 |
int 0x40 |
} |
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7 |
{ |
mov ebx,arg1*65536+arg3 |
mov ecx,arg2*65536+arg4 |
mov edx,arg5 |
mov esi,arg6 |
mov edi,arg7 |
mov eax,0 |
int 0x40 |
} |
; STARTWD - Start of window draw |
macro startwd |
{ |
mov eax,12 |
mov ebx,1 |
int 0x40 |
} |
; ENDWD - End window draw |
macro endwd |
{ |
mov eax,12 |
mov ebx,2 |
int 0x40 |
} |
; LABEL - Put text to frame |
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color |
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big |
macro label arg1,arg2,arg3,arg4 |
{ |
local asd,lab |
jmp asd |
lab db arg3 ;arg label |
asd: |
; mov ebx,arg1 ;arg1=y arg2=x |
; shl ebx,16 |
; add ebx,arg2 |
wordstoreg ebx,arg1,arg2 |
if ~(arg4 eq ) |
mov ecx,arg4 ;arg4 color |
end if |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
int 0x40 |
} |
;Key's |
key_Up equ 178 |
key_Down equ 177 |
key_Right equ 179 |
key_Left equ 176 |
key_Esc equ 27 |
key_Space equ 32 |
key_Enter equ 13 |
key_Bspace equ 8 |
key_F1 equ 50 |
key_F2 equ 51 |
key_F3 equ 52 |
key_F4 equ 53 |
key_F5 equ 54 |
key_F6 equ 55 |
key_F7 equ 56 |
key_F8 equ 57 |
key_F9 equ 48 |
key_F10 equ 49 |
key_F11 equ 68 |
key_F12 equ 255 |
key_Home equ 180 |
key_End equ 181 |
key_PgUp equ 184 |
key_PgDown equ 183 |
;Attributes |
;Window Attributes |
window_Skinned equ 0x03000000 |
window_Type2 equ 0x02000000 |
window_Type1 equ 0x00000000 |
window_Reserve equ 0x01000000 |
;Font Attributes |
font_Big equ 0x10000000 |
;Colors |
cl_White equ 0x00ffffff |
cl_Black equ 0x00000000 |
cl_Grey equ 0x00888888 |
cl_Red equ 0x00ff0000 |
cl_Lime equ 0x0000ff00 |
cl_Green equ 0x0000af00 |
cl_Blue equ 0x000000ff |
cl_Purple equ 0x008080ff |
cl_Violet equ 0x008040ff |
cl_Cyan equ 0x0040e0ff |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/sysxtree/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm sysxtree.asm sysxtree |
@pause |
/programs/filemngrs/sysxtree/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm sysxtree.asm sysxtree |
@pause |
/programs/filemngrs/sysxtree/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a { ; mike.dld |
if ~a eq |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; language for programs |
lang fix ru ; ru en fr ge fi |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/filemngrs/sysxtree/trunk/sysxtree.asm |
---|
0,0 → 1,2758 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ; |
; SYSTEM X-TREE BROWSER ; |
; ; |
; Author: Pavlushin Evgeni waptap@mail.ru ; |
; site: www.deck4.narod.ru ; |
; ; |
; Compile with FASM for MenuetOS ; |
; ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;Bug report +bug deleted -bug not deleted |
;show/fade del notwork+ |
;64Ver Run file from HD bug deleted. |
;65Ver The bad scroll realization |
;66Ver The good scroll realization, url line anti-flick |
;67Ver Url line monolith procedure |
;68Ver Mini icon on left of file name |
;69Ver Getimg proc size minus 900 bytes |
;70Ver Del data area ramsize minus 140000 bytes |
;72Ver Quick sort, ramsize minus 200000 bytes |
;73Ver Url flick and out bugs delete |
;74Ver scroll bug deleted |
;75Ver hd partition fast change button. Add bmp,txt,exec,asm and inc icons. |
; sort type in headmenu bug del |
;78Ver directory extension bug fix by Asko Vuori |
;79Ver Asko Vuori volume label add and "put in command line" bug fix |
;80Ver prompt edit fatal bug deleted, antiflick when move list up/down |
;81Ver Save Dialog bug deleted |
;600000 bytes memory! |
;****************************************************************************** |
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; program start |
dd I_END ; program image size |
dd RAM_END ; memory |
dd RAM_END ; stack |
dd param_area ,0x0 ; param,icon |
; dd 0,0 |
;****************************************************************************** |
include 'lang.inc' |
include 'macros.inc' |
include 'ascl.inc' |
include 'ascgl.inc' |
gif_hash_offset = gif_hash |
START: ; start of execution |
; //// Willow |
mov eax,58 |
mov ebx,MRUfile |
int 0x40 |
; //// Willow |
mov eax,40 |
mov ebx,0100111b |
int 0x40 |
cmp byte [param_area],0 ;test parameters line |
jne no_brow ;it's dialog |
mov [browser],dword 1 ;it's browser |
no_brow: |
cmp [browser],dword 1 |
je no_dlg |
mov al,byte [param_area+5] |
mov [dlg_type],al |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
mov eax,dword [procinfo+30] |
mov edi,MYPID+4-1 |
mov ecx,4 |
mov ebx,10 |
cld |
new_d: |
xor edx,edx |
div ebx |
add dl,'0' |
mov [edi],dl |
dec edi |
loop new_d |
movzx eax,byte [param_area] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+3] |
add eax,ebx |
sub eax,48 |
mov ecx,eax ;pid to ecx |
mov eax,60 |
mov ebx,2 |
mov edx,MYPID |
mov esi,4 |
int 0x40 |
no_dlg: |
giftoimg but_file,tempimg |
;************************ |
; Get images |
;************************ |
mov eax,0 ;x |
mov ebx,0 ;y |
mov esi,286 ;xs |
mov edi,16 ;ys |
mov ecx,tempimg ;src |
mov edx,butimg ;dest |
call getimgproc |
mov eax,288 |
mov esi,60 |
mov edx,logoimg ;dest |
call getimgproc |
mov eax,0 ;x |
mov ebx,16 ;y |
mov esi,51 ;xs |
mov edi,esi ;ys |
mov edx,logoinfimg ;dest |
call getimgproc |
mov eax,51 ;x |
mov esi,8 ;xs |
mov edi,9 ;ys |
mov edx,upsb ;dest |
call getimgproc |
mov eax,51+8 ;x |
mov edx,dnsb ;dest |
call getimgproc |
mov eax,51+16 ;x |
mov ebx,16 ;y |
mov esi,12 ;xs |
mov edi,9 ;ys |
mov ecx,tempimg ;src |
mov edx,hdico ;dest |
mov ebp,9 |
loogetimg: |
call getimgproc |
add edx,9*12*3+8 |
add eax,12 |
dec ebp |
jnz loogetimg |
jmp endgip |
getimgproc: |
pushad |
mov dword [edx],esi ;xs |
mov dword [edx+4],edi ;ys |
mov ebp,eax |
mov eax,dword [ecx] ;getx size |
push edx |
push ecx |
lea ecx,[eax+2*eax] |
mul ebx |
add eax,ebp ;x |
mov edx,ecx |
lea eax,[eax+2*eax] ;eax=offset on imsrc |
mov ecx,esi ;xs |
mov ebx,edi ;ys |
mov ebp,esi |
pop edi |
lea esi,[eax+8+edi] |
pop edi |
add edi,8 |
cld |
cyc: |
movsw |
movsb |
dec ecx |
jne cyc |
add esi,edx |
mov ecx,ebp ;xs |
sub esi,ecx |
sub esi,ecx |
sub esi,ecx |
dec ebx |
jne cyc |
popad |
ret |
endgip: |
call read_directory |
; call convertation |
red: |
call draw_window ; at first, draw the window |
still: |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
wtevent red,key,button |
scrolltest: |
mov eax,37 |
mov ebx,2 |
int 0x40 |
cmp eax,1 |
jne still |
scrl: |
mov eax,37 |
mov ebx,1 |
int 0x40 |
mov ebx,eax |
shr eax,16 ;x |
and ebx,0xffff ;y |
mov ebp,eax |
sub ebp,[listx] ;[procinfo.x_size] |
sub ebp,[listxsize] |
add ebp,[scrollsize] |
cmp ebp,dword [scrollsize] ;8 |
ja menu_test ; still |
mov ebp,ebx |
sub ebp,[listy] ;76 ;up scroll |
sub ebp,[scrollbutsize] |
cmp ebp,0 |
jl menu_test |
mov [mousey],ebp |
push eax ebx edx |
mov edx,0 |
mov eax,[listysize] |
sub eax,2 |
mov ebx,dword 10 |
div ebx |
mov [filelistsize],eax |
mov ebx,eax |
cmp ebx,[listsize] ;filelistsize in ebx |
ja notusescrl |
mov edx,0 |
mov eax,[listysize] |
sub eax,[scrollbutsize] |
sub eax,[scrollbutsize] |
shl eax,16+6 |
div dword [listsize] |
mul ebx |
shr eax,16+6 |
mov ebp,eax ; in ebp ysize of scroll |
mov edx,0 |
mov eax,[listsize] |
mov ebx,[listysize] |
sub ebx,[scrollbutsize] |
sub ebx,[scrollbutsize] |
shl eax,16 |
div ebx ;dword [listsize] |
mul [mousey] |
shr eax,16 |
mov ebx,[listsize] |
sub ebx,[filelistsize] |
cmp eax,ebx |
jnae no_cor |
mov eax,[listsize] ;correction for full dirs (1000 files) |
sub eax,[filelistsize] |
no_cor: |
mov [filecursor],eax |
jmp usescrl |
notusescrl: |
mov [filecursor],0 ;ebp |
usescrl: |
pop edx ebx eax |
mov esi,[listy];[procinfo.y_size] |
add esi,[listysize] |
sub esi,[scrollbutsize] |
cmp ebx,esi |
jna oks ;menu_test ;still |
sub esi,ebp |
inc esi ;correction |
cmp ebx,esi |
ja menu_test ;still |
oks: |
mov [flick],1 |
jmp anti_flick ;red |
menu_test: |
cmp [pmenu_draw],1 ;if menu is show, update all |
jne still |
mov [pmenu_draw],0 |
jmp red ;update all window |
;this function not use in dialog when poup menu's is not used |
;in dialog's |
;=================== |
; Test keyboard |
;=================== |
key: ; key |
mov eax,2 |
int 0x40 |
cmp dword [focus],0 |
jne con_edit |
cmp ah,key_Up |
jne no_upk |
mov ebx,1 |
jmp up |
no_upk: |
cmp ah,key_Down |
jne no_downk |
mov ebx,1 |
jmp down |
no_downk: |
cmp ah,key_PgUp |
jne no_pgup |
mov ebx,10 |
jmp up |
no_pgup: |
cmp ah,key_PgDown |
jne no_pgdown |
mov ebx,10 |
jmp down |
no_pgdown: |
cmp ah,key_Enter |
jne no_k_ent |
jmp kfad |
no_k_ent: |
cmp ah,key_Bspace |
je back |
cmp ah,key_F2 |
je viewset |
cmp ah,key_F3 |
je textopen |
cmp ah,key_F5 |
je copy_to_clip |
cmp ah,key_F6 |
je paste_from_clip |
cmp ah,key_F11 |
je edit_prompt |
cmp ah,key_F12 |
je update |
jmp still |
; test input string |
con_edit: |
cmp ah,key_Enter |
jne no_con_ent |
not [focus] |
jmp savetest |
jmp update |
no_con_ent: |
cmp ah,key_Left |
jne no_con_left |
dec [cursor] |
mov [flick],2 |
jmp anti_flick ;red |
no_con_left: |
cmp ah,key_Right |
jne no_con_right |
inc [cursor] |
mov [flick],2 |
jmp anti_flick ;red |
no_con_right: |
cmp ah,key_Bspace |
jne no_con_bspace |
mov ecx,[cursor] |
cmp ecx,0 |
je still |
dec ecx |
mov ebp,[cursor] |
lobsp: |
mov bl,byte [path+ebp] |
mov byte [path+ebp-1],bl |
inc ebp |
cmp ebp,100 |
jne lobsp |
dec [cursor] |
mov [flick],2 |
jmp anti_flick ;red |
no_con_bspace: |
mov ecx,[cursor] |
dec ecx |
mov ebp,100 ;[cursor] |
losx: |
mov bl,byte [path+ebp] |
mov byte [path+ebp+1],bl |
dec ebp |
cmp ebp,ecx ;100 |
jne losx |
mov ebp, [cursor] |
cmp ebp,100 |
ja still |
mov byte [path+ebp],ah |
inc dword [cursor] |
mov [flick],2 |
jmp anti_flick |
;---------------------------- |
;Test on mouse button |
;----------------------------- |
button: ; button |
mov eax,17 |
int 0x40 |
cmp ah,2 ;Edit prompt line? |
je edit_prompt |
cmp ah,4 |
jne no_filelist |
mousetest: |
mov eax,37 |
mov ebx,1 |
int 0x40 |
mov ebx,eax |
shr eax,16 ;x |
and ebx,0xffff ;y |
sub ebx,[listy] ;80 |
mov [mousey],ebx |
mov ecx,[listx] |
cmp eax,ecx |
jl still |
add ecx,[listxsize] |
cmp eax,ecx |
jg still |
filexadd: |
; Enter in directory |
file_add: |
mov edx,0 ;for div correct work div |
mov eax,dword [mousey] |
mov ebx,10 |
div ebx |
add eax,[filecursor] |
jmp no_kfad |
kfad: |
mov eax,[filecursor] |
no_kfad: |
mov ebx,62 |
mul ebx |
mov ebp,eax |
mov edi,paramtest ;clear param string |
mov ecx,256 |
mov al,0 |
rep stosb |
mov esi,0 |
lll2: |
mov al,byte [path+esi] |
cmp al,byte 0 ;' '; '/' |
je fis2 |
cmp al,byte ' '; '/' |
je fis2 |
inc esi |
cmp esi,100 |
jna lll2 |
jmp fis2 |
fis2: |
mov edi,ebp |
cmp [convinfo+edi+26],dword 'FOL ' |
jne openf |
mov [path+esi],byte '/' |
inc esi |
mov ebp,8 |
los: ;directory extension bug fix |
mov al,[convinfo+edi] |
cmp al,' ' |
jz skip_name_space |
mov [path+esi],al |
inc esi |
skip_name_space: |
inc edi |
dec ebp |
jnz los |
cmp byte [convinfo+edi],'.' |
jnz dir_name_end |
cmp byte [convinfo+edi+1],' ' |
jz dir_name_end |
mov ebp,4 |
dir_ext_char: |
mov al,[convinfo+edi] |
cmp al,' ' |
jz dir_name_end |
mov [path+esi],al |
inc esi |
inc edi |
dec ebp |
jnz dir_ext_char |
dir_name_end: |
mov [filecursor],0 |
;los: |
; mov al,[convinfo+edi] |
; mov [path+esi],al |
; inc esi |
; inc edi |
; dec ebp |
; jnz los |
; mov [filecursor],0 |
; cmp byte [dlg_type],'S' |
; je savetest |
;no_save: |
call read_directory |
;; call convertation |
call draw_window |
; jmp still |
;Savetest |
savetest: |
cmp byte [dlg_type],'S' |
je savetest_yes |
jmp still |
savetest_yes: |
mov ecx,100 |
savetestloop: |
cmp [path+ecx],byte 0 |
je next_byte |
cmp [path+ecx],byte 32 |
je next_byte |
cmp [path+ecx],byte '.' |
je openf ;it's file |
; cmp [path+ecx],byte '/' |
; je no_save ;it's dir |
next_byte: |
dec ecx |
jnz savetestloop |
jmp still |
;Open/Run file |
openf: |
mov ecx,100 |
lopt: |
mov al,[path+ecx] |
mov [paramtest+ecx],al |
dec ecx |
jns lopt |
; mov ebp,100 |
;loow: |
; cmp [paramtest+ebp],byte '.' |
; je file_set |
; dec ebp |
; jnz loow ;is file set not file add |
cmp dword [focus],0 ;if prompt line with focus no add file name from frame |
jne file_set |
mov [paramtest+esi],byte '/' |
inc esi |
mov ebp,8+4 |
mov edx,edi |
losf: |
mov al,[convinfo+edi] |
mov [paramtest+esi],al |
inc esi |
inc edi |
dec ebp |
jnz losf |
file_set: |
cmp [browser],0 |
jne is_brow |
movzx eax,byte [param_area] |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+1] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+2] |
add eax,ebx |
sub eax,48 |
imul eax,10 |
movzx ebx,byte [param_area+3] |
add eax,ebx |
sub eax,48 |
mov ecx,eax ;pid to ecx |
mov eax,60 |
mov ebx,2 |
mov edx,paramtest |
mov esi,100 |
int 0x40 |
jmp exit |
is_brow: |
; cmp [convinfo+edi+26],dword 'Fvol' |
; je edit |
mov eax,dword [convinfo+edx+8] |
cmp eax,'. ' |
jne noexecute |
mov ebx,0 |
jmp execute |
noexecute: |
cmp eax,'.JPG' |
jne nojv |
jpg_jpe: |
mov ebx,jpgview |
jmp run |
nojv: |
cmp eax,'.JPE' |
je jpg_jpe |
cmp eax,'.GIF' |
jne nojv1 |
mov ebx,gifview |
jmp run |
nojv1: |
cmp eax,'.WAV' |
jne nojv12 |
mov ebx,ac97wav |
jmp run |
nojv12: |
cmp eax,'.BMP' |
jne nobv |
mov ebx,bmpview |
jmp run |
nobv: |
; //// Willow |
cmp eax,'.PNG' |
jne nopngv |
mov ebx,pngview |
jmp run |
nopngv: |
; //// Willow |
cmp eax,'.ASM' |
je edit |
cmp eax,'.TXT' |
je edit |
cmp eax,'.INC' |
je edit |
cmp eax,'.DAT' |
je edit |
jmp still |
edit: |
mov ebx,editor |
jmp run |
execute: |
mov ecx,0 ;200 |
loexe: |
mov al,[paramtest+ecx] |
; cmp al,0 |
; je setzr |
; cmp al,' ' |
; je setzr |
; je badl |
cmp al,'.' |
je setzr |
; je badl |
; jmp okl |
;badl: |
; mov al,0 |
okl: |
mov [open_path+ecx],al |
inc ecx |
cmp ecx,200 |
jnae loexe |
setzr: |
; add ecx,3 |
; mov al,0 |
mov [open_path+ecx],byte 0 ;al |
mov eax,58 |
mov ebx,fileinfo_start |
int 0x40 |
jmp still |
run: |
mov ecx,paramtest |
mov eax,19 |
int 0x40 |
jmp still |
no_filelist: |
cmp ah,5 ;OPEN/SAVE button |
je kfad |
cmp ah,6 ;Scroll up |
jne no_scrlup |
mov ebx,1 |
jmp up |
no_scrlup: |
cmp ah,7 ;Scroll down |
jne no_scrldown |
mov ebx,1 |
jmp down |
no_scrldown: |
cmp ah,8 |
jne no_update |
update: |
call read_directory |
; call convertation |
; mov [filecursor],0 |
call draw_window |
no_update: |
cmp ah,9 |
jne no_textopen |
textopen: |
mov esi,0 |
xlll2: |
mov al,byte [path+esi] |
cmp al,byte '/' |
jne xfis2 |
inc esi |
cmp esi,12*20 |
jnae xlll2 |
jmp still |
xfis2: |
mov al,byte [path+esi] |
cmp al,byte ' ' |
je xaa2 |
inc esi |
cmp esi,12*20 |
jnae xfis2 |
jmp still |
xaa2: |
mov eax,[filecursor] |
mov ebx,62 |
mul ebx |
mov edi,eax |
cmp [convinfo+edi+26],dword 'FOL ' |
je still |
mov ecx,12*20 |
xlopt: |
mov al,[path+ecx] |
mov [paramtest+ecx],al |
dec ecx |
jns xlopt |
mov [paramtest+esi],byte '/' |
inc esi |
mov ebp,8+4 |
mov edx,edi |
xlosf: |
mov al,[convinfo+edi] |
mov [paramtest+esi],al |
inc esi |
inc edi |
dec ebp |
jnz xlosf |
mov [paramtest+esi],byte 0 |
mov ebx,editor |
mov ecx,paramtest |
mov eax,19 |
int 0x40 |
jmp red ;still |
no_textopen: |
cmp ah,11 |
jne no_view |
viewset: |
; not dword [delflag] |
inc dword [viewmode] |
cmp dword [viewmode],8 |
jnae not_cm |
mov [viewmode],0 |
not_cm: |
call read_directory |
; call convertation |
mov [filecursor],0 |
call draw_window |
jmp still |
no_view: |
cmp ah,12 ;move back |
jne no_back |
back: |
mov esi,12*20 |
lll: |
mov al,byte [path+esi] |
cmp al,byte ' ' |
jne findsl |
dec esi |
jnz lll |
jmp still |
findsl: |
dec esi |
fis: |
mov al,byte [path+esi] |
cmp al,byte '/' |
je aa |
mov [path+esi],byte 0 ;' ' |
dec esi |
jnz fis |
aa: |
mov [path+esi],byte 0 ;' ' |
mov [filecursor],0 |
call read_directory |
; call convertation |
call draw_window |
jmp still |
no_back: |
cmp ah,13 ;string up? |
jne no_up |
mov ebx,1 ;step |
up: |
mov [downstop],0 |
sub [filecursor],ebx |
cmp [filecursor],0 |
jnl cr_ok |
mov [filecursor],0 |
cr_ok: |
jmp draw_wd |
no_up: |
cmp ah,14 ;string down? |
jne no_dn |
mov ebx,1 ;step |
down: |
cmp [downstop],1 |
je no_dn |
add [filecursor],ebx |
jmp draw_wd |
no_dn: |
cmp ah,15 |
jne no_copyclip ;copy to clipboard |
copy_to_clip: |
mov ebx,param_area ;clipfilp |
mov eax,32 |
int 0x40 |
mov esi,0 |
wlll2: |
mov al,byte [path+esi] |
cmp al,byte '/' |
jne wfis2 |
inc esi |
cmp esi,12*20 |
jnae wlll2 |
jmp still |
wfis2: |
mov al,byte [path+esi] |
cmp al,byte ' ' |
je waa2 |
inc esi |
cmp esi,12*20 |
jnae wfis2 |
jmp still |
waa2: |
mov eax,[filecursor] |
mov ebx,62 |
mul ebx |
mov edi,eax |
cmp [convinfo+edi+26],dword 'FOL ' |
je still |
mov ecx,12*20 |
wlopt: |
mov al,[path+ecx] |
mov [paramtest+ecx],al |
dec ecx |
jns wlopt |
mov [paramtest+esi],byte '/' |
inc esi |
mov ebp,8+4 |
mov edx,edi |
wlosf: |
mov al,[convinfo+edi] |
mov [paramtest+esi],al |
inc esi |
inc edi |
dec ebp |
jnz wlosf |
mov [paramtest+esi],byte 0 |
mov ebx,param_area ;clipfile |
mov ecx,paramtest |
mov edx,100 |
mov esi,0 |
mov eax,33 |
int 0x40 |
jmp still |
no_copyclip: |
cmp ah,16 |
jne no_clippaste |
paste_from_clip: |
mov ebx,param_area ;clipfile |
mov ecx,0 |
mov edx,-1 |
mov esi,sourcepath |
mov eax,6 |
int 0x40 |
mov ecx,99 |
cdestp: |
mov al,[path+ecx] |
mov [destpath+ecx],al |
dec ecx |
jns cdestp |
mov esi,0 |
zlll2: |
mov al,byte [destpath+esi] |
cmp al,byte '/' |
jne zfis2 |
inc esi |
cmp esi,100 |
jnae zlll2 |
jmp still |
zfis2: |
mov al,byte [destpath+esi] |
cmp al,byte ' ' |
je zaa2 |
inc esi |
cmp esi,100 |
jnae zfis2 |
jmp still |
zaa2: |
mov byte [destpath+esi],'/' |
inc esi |
mov edi,0 |
qlll2: |
mov al,byte [sourcepath+edi] |
cmp al,byte '.' |
je qfis2 |
inc edi |
cmp edi,100 |
jnae qlll2 |
jmp still |
qfis2: |
sub edi,8 ;.-8=start of file name |
mov ecx,11 ;11 sybols |
cfname: |
mov al,[sourcepath+edi] |
cmp al,byte ' ' |
je dar |
mov [destpath+esi],al |
inc esi |
dar: |
inc edi |
dec ecx |
jns cfname |
; mov [destpath+esi],byte 0 |
mov ecx,199 |
cdestjp: |
mov al,[sourcepath+ecx] |
cmp al,byte 0 |
jne nor |
mov al,byte 32 |
nor: |
mov [sourcepath+ecx],al |
dec ecx |
jns cdestjp |
cmp [browser],dword 1 |
jne no_outpath |
mov eax,4 ; function 4 : write text to window |
mov ebx,10*65536+67 ; [x start] *65536 + [y start] |
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB |
mov edx,sourcepath ; pointer to text beginning |
mov esi,100 ;12*20 ; text length |
int 0x40 |
mov ebx,250*65536+67 ; [x start] *65536 + [y start] |
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB |
mov edx,destpath ; pointer to text beginning |
mov esi,100 ;12*20 ; text length |
int 0x40 |
no_outpath: |
mov ebx,copyrfile |
mov ecx,sourcepath |
mov eax,19 |
int 0x40 |
delay 50 ;wait recoed file |
jmp update ;still |
no_clippaste: |
cmp ah,19 ;Delete from floppy |
delete_file: |
jne no_delt |
cmp dword [path],'/RD/' |
jne no_delt |
cmp byte [path+4],'1' |
jne no_delt |
mov eax,[filecursor] |
mov ebx,62 |
mul ebx |
mov edi,eax |
add edi,convinfo |
mov ebp,edi |
mov eax,dword [edi] |
mov dword [paramtest],eax |
mov eax,dword [edi+4] |
mov dword [paramtest+4],eax |
mov eax,dword [edi+4+4+1] |
mov dword [paramtest+4+4],eax |
mov ebx,paramtest |
mov eax,32 |
int 0x40 |
jmp update |
no_delt: |
cmp ah,20 ;I - Help |
je help_scr |
cmp ah,22 |
jne no_headfile |
mov [drawhf],1 |
call draw_window |
mov [drawhf],0 |
mov [pmenu_draw],1 |
jmp still |
no_headfile: |
cmp ah,23 |
jne no_headview |
mov [drawhv],1 |
call draw_window |
mov [drawhv],0 |
mov [pmenu_draw],1 |
jmp still |
no_headview: |
cmp ah,24 |
jne no_headinfo |
mov [drawhi],1 |
call draw_window |
mov [drawhi],0 |
mov [pmenu_draw],1 |
jmp still |
no_headinfo: |
;FILE MENU |
cmp ah,30 |
je kfad |
cmp ah,31 |
je copy_to_clip ;Copy |
cmp ah,32 |
je paste_from_clip ;Paste |
cmp ah,33 |
je delete_file ;Delte |
cmp ah,34 |
je textopen ;Edit in Tinypad |
cmp ah,37 |
je exit |
;VIEW MENU |
cmp ah,40 ;Sort by name show del |
jne no_sn |
; mov dword [viewmode],0 |
and dword [viewmode],100b |
jmp update |
no_sn: |
cmp ah,41 ;Sort by extension show del |
jne no_se |
and dword [viewmode],1101b |
or dword [viewmode],0001b |
jmp update |
no_se: |
cmp ah,42 ;Sort by size show del |
jne no_ss |
and dword [viewmode],1110b |
or dword [viewmode],0010b |
jmp update |
no_ss: |
cmp ah,43 ;Sort by date show del |
jne no_sd |
or dword [viewmode],0011b |
jmp update |
no_sd: |
cmp ah,44 ;Show del files |
jne no_ds |
or dword [viewmode],0100b |
jmp update |
no_ds: |
cmp ah,45 ;Fade del files |
jne no_df |
and dword [viewmode],11111011b |
jmp update |
no_df: |
;HELP MENU |
cmp ah,50 ;Help? |
je help_scr |
cmp ah,51 ;Info? |
je info_scr |
cmp ah,83 |
ja no_hd_part |
cmp ah,80 |
jb no_hd_part |
mov ecx,0 |
sub ah,80 |
inc ah |
mov cl,ah |
mov eax,21 |
mov ebx,8 ;7 |
int 0x40 |
no_hd_part: |
cmp ah,1 ; test on exit button |
je exit |
jmp still |
exit: |
; //// Willow |
mov eax,58 |
mov ebx,MRUfile |
mov dword[ebx+8],255 |
inc dword[ebx] |
int 0x40 |
; //// Willow |
mov eax,-1 |
int 0x40 |
draw_wd: |
; call draw_window |
; jmp still |
mov [flick],1 |
jmp anti_flick |
edit_prompt: |
not [focus] |
jmp red |
help_scr: |
mov esi,14 |
mov ebp,help_text |
jmp screen |
info_scr: |
mov esi,6 |
mov ebp,info_text |
jmp screen |
screen: |
cmp [browser],dword 1 ;it's browser? |
jne dialogscr |
mov eax,[procinfo.y_size] |
sub eax,90 |
drawfbox 40,76,300,eax,0x00000000 |
mov eax,[procinfo.y_size] |
sub eax,92 |
drawfbox 41,77,298,eax,0x00ffffff |
mov edi,esi ;14 |
mov ebx,(41+26)*65536+(77+20) |
mov ecx,cl_Black |
mov edx,ebp ;help_text |
jmp outlab |
dialogscr: |
mov eax,[procinfo.y_size] |
sub eax,84 |
drawfbox 16,54,270,eax,0x00000000 |
mov eax,[procinfo.y_size] |
sub eax,86 |
drawfbox 17,55,268,eax,0x00ffffff |
mov edi,esi ;14 |
mov ebx,(17+10)*65536+(55+1) |
mov ecx,cl_Black |
mov edx,ebp ;help_text |
outlab: ;out labels |
mov eax,4 |
mov esi,40 |
helploo: |
int 0x40 |
add ebx,11 |
add edx,40 |
dec edi |
jnz helploo |
setimg 48,84,logoinfimg |
jmp still |
;HELP TEXT |
help_text: |
;0123456789012345678901234567890123456789 |
db ' ~~~~~ SYSTEM X-TREE ~~~~~ ' |
db ' HELP ' |
db ' ' |
db ' ' |
db 'F2 - CHANGE SORTMODE (name,ext,size,dat)' |
db 'F3 - VIEW file in tinypad ' |
db 'F5 - COPY FILE to clipboard ' |
db 'F6 - PASTE FILE from clipboard ' |
db 'F11- EDIT PROMPT string ' |
db 'F12- UPDATE directory sources ' |
db ' ' |
db 'Enter - input to directory ' |
db 'Backspace - back to previos directory ' |
db 'PageDn/PageUp, Up/Down - move cursor ' |
info_text: |
db ' ~~~~~ SYSTEM X-TREE ~~~~~ ' |
db ' INFO 81 Ver ' |
db ' ' |
db ' Create by Pavlushin Evgeni ' |
db ' with ASCL libary special for Menuet OS ' |
db ' www.deck4.narod.ru waptap@mail.ru ' |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ******** FILE BROWSER / DIALOG ********* |
;draw_browser_window: |
draw_window: |
; mov eax,9 |
; mov ebx,procinfo |
; mov ecx,-1 |
; int 0x40 |
; mov eax,[procinfo.x_size] |
; cmp eax,66 |
; jg temp12345 |
; ret |
; temp12345: |
mov eax,48 |
mov ebx,3 |
mov ecx,sc |
mov edx,sizeof.system_colors |
int 0x40 |
mov eax,[sc.work_button] |
mov [b_color],eax |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
int 0x40 |
;Window |
xor eax,eax ; function 0 : define and draw window |
cmp [browser],dword 1 ;it's browser |
jne nob1 |
mov ebx,140*65536+400 ; [x start] *65536 + [x size] |
mov ecx,160*65536+280 ; [y start] *65536 + [y size] |
jmp isb1 |
nob1: |
mov ebx,140*65536+320 ; [x start] *65536 + [x size] |
mov ecx,260*65536+240 ; [y start] *65536 + [y size] |
isb1: |
; mov edx,[sc.work] ; color of work area RRGGBB |
or edx,0x03ffffff;000000 |
int 0x40 |
;Get proc info |
mov eax,9 |
mov ebx,procinfo |
mov ecx,-1 |
int 0x40 |
mov eax,[procinfo.x_size] |
cmp eax,66 |
jg temp12345 |
ret |
temp12345: |
cmp [browser],dword 1 ;it's browser |
jne nob9 |
mov [listx],120 |
mov eax,[procinfo.x_size] |
sub eax,[listx] |
sub eax,7 |
mov [listxsize],eax |
mov [listy],73 |
mov eax,[procinfo.y_size] |
sub eax,[listy] |
sub eax,7 |
mov [listysize],eax |
jmp isb9 |
nob9: |
mov [listx],10 |
mov eax,[procinfo.x_size] |
sub eax,[listx] |
sub eax,7 |
mov [listxsize],eax |
mov [listy],54 |
mov eax,[procinfo.y_size] |
sub eax,[listy] |
sub eax,34 |
mov [listysize],eax |
isb9: |
;Draw only browser components |
cmp [browser],dword 1 ;it's browser |
jne nob2 |
mov eax,[sc.grab_text] ; color of text RRGGBB |
or eax,0x10000000 |
label 8,8,'SYSTEM X-TREE FILE BROWSER',eax |
;Draw buttons headers |
mov eax,8 |
mov ebx,8*65536+(6*8-1) ;start pos x |
mov ecx,23*65536+10 ;start pos y |
mov edx,22;+1000000000000000000000000000000b ;spoke butt |
mov edi,3 ;draw 13 button's |
mov esi,0x00339933 |
int 0x40 |
dec edi |
nexthbut: |
add ebx,(6*8)*65536 |
inc edx |
int 0x40 |
dec edi |
jnz nexthbut |
;DRAW PARTITION BUTTONS |
mov eax,8 |
mov ebx,340*65536+5 ;start pos x |
mov ecx,24*65536+8 ;start pos y |
mov edx,80;+1000000000000000000000000000000b ;spoke butt |
mov edi,4 ;draw 13 button's |
mov esi,0x00339933 |
int 0x40 |
dec edi |
nextpbut: |
add ebx,6*65536 |
inc edx |
int 0x40 |
dec edi |
jnz nextpbut |
;DRAW PARTITON TEXT |
label 341,25,'1234',cl_White;Black |
;File STRING |
label 8,25,' FILE VIEW INFO ', ;cl_White ;Black |
;BlackLine |
mov eax,[procinfo.x_size] |
sub eax,10 |
drawfbox 5,35, eax, 1, cl_Black |
;BlackLine2 |
mov eax,[procinfo.x_size] |
sub eax,10 |
drawfbox 5,68, eax, 1, cl_Black |
;BlackLine2 vertical |
; mov eax,[procinfo.y_size] |
; sub eax,69+4 |
; drawfbox 115, 69, 1, eax, cl_Black |
;Set logo img |
setimg 34,88,logoinfimg |
label 20,165,'SYSTEM X-TREE',cl_Black |
add ebx,10 |
label ,,'FOR MENUETOS', |
add ebx,9*65536+20 |
label ,,'welcome to',cl_Green |
add ebx,-15*65536+10 |
label ,,'www.menuetos.org',cl_Green |
; label ,,'Create by',cl_Green |
; add ebx,10 |
; label ,,' Pavlushin', |
; add ebx,10 |
; label ,,' Evgeni', |
;Draw head->file buttons |
cmp [drawhf],1 |
jne no_drawhf |
mov ebx,8*65536+6*12 ;start pos x |
mov ecx,35*65536+10 ;start pos y |
mov edx,30 ;spoke butt |
mov edi,8 ;draw 4 button's |
mov esi,cl_Grey |
call menubutton |
no_drawhf: |
;Draw head->view buttons |
cmp [drawhv],1 |
jne no_drawhv |
mov ebx,(8+6*8)*65536+6*12 ;start pos x |
mov ecx,35*65536+10 ;start pos y |
mov edx,40 ;spoke butt |
mov edi,6 ;draw 4 button's |
mov esi,cl_Grey |
call menubutton |
no_drawhv: |
;Draw head->info buttons |
cmp [drawhi],1 |
jne no_drawhi |
mov ebx,(8+12*8)*65536+6*12 ;start pos x |
mov ecx,35*65536+10 ;start pos y |
mov edx,50 ;spoke butt |
mov edi,2 ;draw 2 button's |
mov esi,cl_Grey |
call menubutton |
no_drawhi: |
nob2: |
;Draw buttons instruments |
mov eax,8 |
cmp [browser],dword 1 ;it's browser |
jne nob3 |
mov ebx,10*65536+16+5 ;start pos x |
mov ecx,37*65536+15 ;start pos y |
jmp isb3 |
nob3: |
mov ebx,16*65536+16+5 ;start pos x |
mov ecx,29*65536+15 ;start pos y |
isb3: |
mov edx,8;+1000000000000000000000000000000b ;spoke butt |
mov edi,13 ;draw 13 button's |
mov esi,cl_Grey |
int 0x40 |
dec edi |
nextbut: |
add ebx,(16+6)*65536 |
inc edx |
int 0x40 |
dec edi |
jnz nextbut |
cmp [browser],dword 1 ;it's browser |
jne nob4 |
;But img browser |
setimg 10,37,butimg |
;left logo |
add eax,[procinfo.x_size] |
sub eax,80 |
mov [temp],eax |
setimg [temp],37,logoimg |
jmp isb4 |
nob4: |
;But img dialog |
setimg 16,29,butimg |
isb4: |
cmp [browser],dword 1 ;it's browser |
jne nob5 |
mov [urlx],48 |
mov [urly],55 |
mov eax,[procinfo.x_size] |
sub eax,48+10 |
mov [urlxsize],eax |
mov [urlysize],12 |
label 20,57,"URL:",cl_Black |
;Out view mode info |
mov eax,[viewmode] |
mov ebx,16 |
mul ebx |
mov edx,eax |
mov eax,4 |
mov ebx,180*65536+25 |
mov ecx,cl_Black |
add edx,modetext |
mov esi,16 |
int 0x40 |
;List size |
outcount [listsize],294,25,cl_Black,4*65536 |
jmp isb5 |
head_dlg: db 'OPEN FILE' |
db 'SAVE FILE' |
but_dlg: db 'OPEN' |
db 'SAVE' |
nob5: |
mov [urlx],10 |
mov eax,[procinfo.y_size] |
sub eax,24 |
mov [urly],eax |
mov eax,[procinfo.x_size] |
sub eax,80 |
mov [urlxsize],eax |
mov [urlysize],12 |
cmp byte [dlg_type],'O' ;if byte O - is Open dialog |
jne no_openh |
mov edx,head_dlg ;draw in head OPEN FILE |
jmp out_laby |
no_openh: |
cmp byte [dlg_type],'S' ;if byte S - is Save dialog |
jne no_saveh |
mov edx,head_dlg+9 ;draw in head SAVE FILE |
out_laby: |
mov ebx,8*65536+8 |
mov ecx,[sc.grab_text] ; color of text RRGGBB |
or ecx,0x10000000 |
mov esi,9 |
mov eax,4 |
int 0x40 |
no_saveh: |
;Draw OPEN\SAVE button |
mov ebx,0*65536+50 |
mov ecx,0*65536+12 |
mov eax,[procinfo.x_size] |
sub eax,63 |
shl eax,16 |
add ebx,eax |
mov eax,[procinfo.y_size] |
sub eax,25 |
shl eax,16 |
add ecx,eax |
mov eax,8 |
mov edx,5 ;button ID |
mov esi,0x006699aa ;gradient!!! |
int 0x40 |
; label OPEN or SAVE |
mov ebx,[procinfo.x_size] |
sub ebx,48 |
mov eax,[procinfo.y_size] |
sub eax,22 |
shl ebx,16 |
add ebx,eax |
cmp byte [dlg_type],'O' ;if byte O - is Open dialog |
jne no_openb |
mov edx,but_dlg ;draw in head OPEN FILE |
jmp out_labx |
no_openb: |
cmp byte [dlg_type],'S' ;if byte S - is Save dialog |
jne no_saveb |
mov edx,but_dlg+4 ;draw in head SAVE FILE |
out_labx: |
mov ecx,cl_White |
mov esi,4 |
mov eax,4 |
int 0x40 |
no_saveb: |
isb5: |
anti_flick: |
cmp [flick],2 |
je draw_url |
cmp [flick],0 |
jne no_flick_url |
;*************************** |
; DRAW URL LINE |
;*************************** |
draw_url: |
;Draw URL focus button |
mov ebx,[urlx] |
shl ebx,16 |
add ebx,[urlxsize] |
mov ecx,[urly] |
shl ecx,16 |
add ecx,[urlysize] |
dec ebx |
dec ecx |
mov eax,8 |
mov edx,2 ;button ID |
mov esi,0x00aaaaaa ;gradient!!! |
int 0x40 |
;Draw URL String |
mov eax,13 |
mov edx,cl_Black |
int 0x40 |
add ebx,1*65536-2+1 |
add ecx,1*65536-2+1 |
mov edx,cl_White |
int 0x40 |
;Draw URL Cursor |
mov eax,6 |
mul [cursor] |
mov ebx,[urlx] |
add ebx,eax |
shl ebx,16 |
add ebx,2*65536+1 |
mov ecx,[urly] |
shl ecx,16 |
add ecx,[urlysize] |
add ecx,2*65536-4 |
mov eax,13 |
mov edx,cl_Black |
int 0x40 |
; OUT TEXT |
mov eax,[urlxsize] ;calculating text leight |
sub eax,8 |
mov ebx,6 |
div ebx |
mov esi,eax |
mov ebx,[urlx] |
shl ebx,16 |
add ebx,[urly] |
add ebx,3*65536+2 |
mov eax,4 ; function 4 : write text to window |
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB |
mov edx,path ; pointer to text beginning |
int 0x40 |
cmp [flick],2 |
jne no_flick_url |
mov [flick],0 |
jmp still |
no_flick_url: |
;*************************** |
; DRAW FILE LIST |
;*************************** |
;Draw Scroll Line |
mov eax,13 |
mov ebx,[listx] |
add ebx,[listxsize] |
sub ebx,[scrollsize] |
shl ebx,16 |
add ebx,dword [scrollsize] |
mov ecx,[listy] |
add ecx,[scrollbutsize] |
shl ecx,16 |
add ecx,[listysize] |
sub ecx,[scrollbutsize] |
sub ecx,[scrollbutsize] |
mov edx,[scrollcolor] ;0x00006600 |
int 0x40 |
;Draw Scroll Box |
mov edx,0 |
mov eax,[listysize] |
sub eax,2 |
mov ebx,dword 10 |
div ebx |
mov edx,0 |
mov ebx,eax |
cmp ebx,[listsize] ;filelistsize in ebx |
ja notusescroll |
;usescroll |
mov eax,[listysize] |
sub eax,[scrollbutsize] |
sub eax,[scrollbutsize] |
shl eax,16 |
div dword [listsize] |
mul ebx |
shr eax,16 |
mov esi,[mousey] |
shl esi,16 |
add esi,eax |
mov eax,13 |
mov ebx,[listx] |
add ebx,[listxsize] |
sub ebx,[scrollsize] |
shl ebx,16 |
add ebx,dword [scrollsize] |
mov ecx,[listy] |
add ecx,[scrollbutsize] |
shl ecx,16 |
add ecx,esi |
mov edx,[scrollboxcol] |
int 0x40 |
notusescroll: |
;Draw list button for get file name |
mov ebx,[listx] |
shl ebx,16 |
add ebx,[listxsize] |
sub ebx,15 ;right free zone |
sub ebx,[scrollsize] |
mov ecx,[listy] |
shl ecx,16 |
add ecx,[listysize] |
mov eax,8 |
mov edx,4+1000000000000000000000000000000b ;spoke butt |
int 0x40 |
add ebx,15 |
mov eax,13 |
mov edx,[listcolor] ;ffffff |
int 0x40 |
;Draw up/down buttons |
mov ebx,[listx] |
add ebx,[listxsize] |
sub ebx,[scrollsize] |
shl ebx,16 |
add ebx,[scrollsize] |
mov ecx,[listy] |
shl ecx,16 |
add ecx,[scrollbutsize] |
dec ecx ;correction |
mov eax,8 |
mov edx,6+1000000000000000000000000000000b ;spoke butt |
int 0x40 |
inc ecx |
mov eax,13 |
mov edx,[scrollbutcol] ;ffffff |
int 0x40 |
; Draw image on up button |
pushad |
shr ebx,16 |
mov edx,ebx |
shl edx,16 |
shr ecx,16 |
add edx,ecx |
mov ecx,8*65536+9 |
mov ebx,upsb+8 |
mov eax,7 |
int 0x40 |
popad |
dec ecx ;correction |
mov edx,7+1000000000000000000000000000000b ;spoke butt |
mov eax,[listysize] |
sub eax,[scrollbutsize] |
shl eax,16 |
add ecx,eax |
mov eax,8 |
int 0x40 |
inc ecx |
mov eax,13 |
mov edx,[scrollbutcol] ;ffffff |
int 0x40 |
; Draw image on down button |
pushad |
shr ebx,16 |
mov edx,ebx |
shl edx,16 |
shr ecx,16 |
add edx,ecx |
mov ecx,8*65536+9 |
mov ebx,dnsb+8 |
mov eax,7 |
int 0x40 |
popad |
; Draw text in file list |
mov eax,[listxsize] |
sub eax,40*6 ;leight of string |
shr eax,1 |
add eax,[listx] |
shl eax,16 |
add eax,[listy] |
add eax,2 |
mov [filelistxy],eax ;dword 19*65536+58 |
mov edx,0 |
mov eax,[listysize] |
sub eax,2 |
mov ebx,dword 10 |
div ebx |
mov [filelistsize],eax ;dword 40 |
; OUT FILE DATA |
mov eax,[filecursor] ;calc cursor position |
mov ebx,62 |
mul ebx |
;OUT TEXT |
mov ebp,4096 ; 16 ;out strings process |
sub ebp,[filecursor] |
mov edx,convinfo ;fileinfo+11 |
add edx,eax |
mov ebx,dword [filelistxy] |
loo: |
mov ecx,0x00888888 ;for another file's color white |
cmp [edx+26],dword 'FOL ' ;folder yellow |
jne nb |
mov ecx,0x00006666 |
jmp cset1 |
nb: |
mov eax,[edx+8] |
;Color set |
cmp eax,dword '.TXT' ;text's blue |
je itx |
cmp eax,dword '.INC' |
je itx |
cmp eax,dword '.ASM' |
je itx |
jmp nt |
itx: |
mov ecx,0x00446666 |
jmp cset |
nt: |
cmp eax,dword '.BMP' ;picture's pure |
je ipic |
cmp eax,dword '.JPG' |
je ipic |
cmp eax,dword '.JPE' |
je ipic |
cmp eax,dword '.GIF' |
je ipic |
; //// Willow |
cmp eax,dword '.PNG' |
je ipic |
; //// Willow |
cmp eax,dword '.WAV' |
je ipic |
jmp np |
ipic: |
mov ecx,0x00226688 |
jmp cset |
np: |
cmp eax,dword '. ' ;execute's green |
jne nexec |
mov ecx,0x00008866 |
jmp cset |
nexec: |
cset: |
cset1: |
mov esi,40 ;symbols out 62 ;32 |
mov eax,4 |
pushad |
int 0x40 |
; popad |
; pushad |
cmp [edx+26],dword 'Fvol' ;volume label |
jne no_volico |
push hdico+8 |
jmp out_ico |
no_volico: |
cmp [edx+26],dword 'FOL ' |
jne no_folico |
cmp [edx+9],dword 'HARD' |
jne no_hdico |
push hdico+8 |
jmp out_ico |
no_hdico: |
cmp [edx+9],dword 'RAMD' |
jne no_rdico |
push rdico+8 |
jmp out_ico |
no_rdico: |
push folico+8 |
jmp out_ico |
no_folico: |
cmp [edx+8],dword '.BMP' |
je is_imgico |
cmp [edx+8],dword '.JPG' |
je is_imgico |
cmp [edx+8],dword '.JPE' |
je is_imgico |
cmp [edx+8],dword '.GIF' |
je is_imgico |
; //// Willow |
cmp [edx+8],dword '.PNG' |
je is_imgico |
; //// Willow |
cmp [edx+8],dword '.WAV' |
je is_imgico |
jmp no_imgico |
is_imgico: |
push imgico+8 |
jmp out_ico |
no_imgico: |
cmp [edx+8],dword '.ASM' |
je is_asmincico |
cmp [edx+8],dword '.INC' |
je is_asmincico |
jmp no_asmincico |
is_asmincico: |
push asmincico+8 |
jmp out_ico |
no_asmincico: |
cmp [edx+8],dword '.TXT' |
jne no_txtico |
push txtico+8 |
jmp out_ico |
no_txtico: |
cmp [edx+8],dword '. ' |
jne no_execico |
push execico+8 |
jmp out_ico |
no_execico: |
cmp [edx+26],dword 'DAT ' |
jne no_datico |
push datico+8 |
jmp out_ico |
no_datico: |
cmp [edx+26],dword 'DEL ' |
jne no_out_ico |
push delico+8 |
jmp out_ico |
out_ico: |
mov edx,ebx |
sub edx,14*65536+1 |
mov ecx,12*65536+9 |
; mov ebx,upsb+8 |
pop ebx |
mov eax,7 |
int 0x40 |
no_out_ico: |
popad |
add ebx,10 |
noout: |
add edx,62 |
dec [filelistsize] |
cmp [filelistsize],dword 0 |
je extloo |
dec ebp |
jnz loo |
dext: |
mov [downstop],1 |
extloo: |
cmp [browser],dword 1 ;it's browser |
jne nob8 |
;Draw text for head->file buttons |
cmp [drawhf],1 |
jne no_drawhftext |
drawfbox 8,35,(6*12)+1,11*8,0x00000000 |
drawfbox 9,36,(6*12)-1,(11*8)-2,0x00ffffff |
mov edi,8 |
mov ebx,9*65536+37 |
mov ecx,cl_Black |
mov edx,file_text_label |
call drawmenu |
jmp no_drawhftext |
file_text_label: |
db ' Open ' |
db ' Copy ' |
db ' Paste ' |
db ' Delete ' |
db ' Tinypad ' |
db ' Edit ' |
db ' ' |
db ' Exit ' |
no_drawhftext: |
;Draw text for head->view buttons |
cmp [drawhv],1 |
jne no_drawhvtext |
drawfbox (8+6*8),35,(6*12)+1,(11*6),0x00000000 |
drawfbox (9+6*8),36,(6*12)-1,(11*6)-2,0x00ffffff |
mov edi,6 ;4 |
mov ebx,(9+6*8)*65536+37 |
mov ecx,cl_Black |
mov edx,view_text_label |
call drawmenu |
jmp no_drawhvtext |
view_text_label: |
db ' Name sort ' |
db ' Ext. sort ' |
db ' Size sort ' |
db ' Date sort ' |
db ' Show DEL ' |
db ' Fade DEL ' |
no_drawhvtext: |
;Draw text for head->info buttons |
cmp [drawhi],1 |
jne no_drawhitext |
drawfbox (8+12*8),35,(6*12)+1,(11*2),0x00000000 |
drawfbox (9+12*8),36,(6*12)-1,(11*2)-2,0x00ffffff |
mov edi,2 |
mov eax,4 |
mov ebx,(9+12*8)*65536+37 |
mov ecx,cl_Black |
mov edx,info_text_label |
call drawmenu |
jmp no_drawhitext |
info_text_label: |
db ' Help ' |
db ' About ' |
no_drawhitext: |
nob8: |
cmp [flick],1 |
jne no_flick |
mov [flick],0 |
jmp still |
no_flick: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
ret |
;FILE LIST PARAMETRS |
listx dd 15 |
listy dd 72 |
listxsize dd 350 |
listysize dd 41 |
filelistxy dd 0 |
filelistsize dd 0 |
scrollsize dd 8 |
listcolor dd 0xffffff ;0xeeeeee |
scrollcolor dd 0x778877 |
scrollboxcol dd 0x335533 |
scrollbutcol dd 0x224422 |
scrollbutsize dd 9 |
usescroll dd 1 |
;URL LINE PARAMETRS |
urlx dd 10 |
urly dd 20 |
urlxsize dd 350 |
urlysize dd 12 |
drawmenu: |
mov eax,4 |
mov esi,12 |
menuloo: |
int 0x40 |
add ebx,11 |
add edx,12 |
dec edi |
jnz menuloo |
ret |
menubutton: |
mov eax,8 |
nextmenubut: |
int 0x40 |
add ecx,11*65536 |
inc edx |
dec edi |
jnz nextmenubut |
ret |
;***************************** |
; READ FILE STRUCTURE PROC |
;***************************** |
read_directory: |
; STEP 0 SEt TYPE OF SORT |
mov eax,[viewmode] |
;with no show del files |
and eax,0FFFFFFFBh |
cmp eax,0 |
jnz no_sort_by_name |
mov [start],0 |
mov [x0],12 |
mov [x1],99 |
mov [x2],99 |
mov [x3],99 |
jmp sortset |
no_sort_by_name: |
dec eax |
jnz no_sort_by_ext |
mov [start],9 |
mov [x0],9 |
mov [x1],99 |
mov [x2],99 |
mov [x3],12 |
jmp sortset |
no_sort_by_ext: |
dec eax |
jnz no_sort_by_size |
mov [start],30 |
mov [x0],12 |
mov [x1],99 |
mov [x2],99 |
mov [x3],38 |
jmp sortset |
no_sort_by_size: |
dec eax |
mov [start],21 |
mov [x0],12 |
mov [x1],17 |
mov [x2],20 |
mov [x3],26 |
jmp sortset ;sort by date |
;SORT VARILE |
start dd 0 |
x0 dd 0 |
x1 dd 0 |
x2 dd 0 |
x3 dd 0 |
sortset: |
;STEP 1 CLEAR CONVINFO |
mov edi,convinfo |
mov al,255 |
mov ecx,4096*62 ;512 |
cld |
rep stosb |
;STEP 2 TEST ON HD OR PARTITION |
cmp [path],byte '/' |
je nstep |
mov ecx,61+62 |
loxhd: |
mov al,[hdimg+ecx] |
mov [convinfo+ecx],al |
dec ecx |
jns loxhd |
mov [listsize],0 |
ret |
nstep: |
cmp [path+3],byte '/' |
je nstep2 |
mov ecx,61+62 |
loxpt: |
mov al,[ptimg+ecx] |
mov [convinfo+ecx],al |
dec ecx |
jns loxpt |
mov [listsize],0 |
ret |
nstep2: |
;STEP 3 CLEAR OUTINFO |
mov edi,outinfo ;0x14000 ;0x20000 |
xor eax,eax |
mov ecx,4096*32 ;512 |
cld |
rep stosb |
;STEP 4 READ DATA FROM HD |
mov dword [farea],outinfo |
mov dword [readblock],0 |
loorhd: |
mov eax,[readblock] |
mov [fileinfoblock+4],eax |
mov eax,58 |
mov ebx,fileinfoblock |
int 0x40 |
cmp eax,0 |
jne hd_err |
add dword [farea],512 |
inc dword [readblock] |
cmp dword [readblock],4096/16 |
jna loorhd |
hd_err: |
mov ebx,dword [readblock] |
shl ebx,4 |
mov dword [blocksread],ebx ; for quick resorting |
cmp eax,5 |
je end_of_dir |
; It's erorr's test is poor code |
cmp eax,1 |
jne no_inv_part |
label 10,10,'Invalid partition or hd base',cl_Red+font_Big |
jmp end_of_dir |
no_inv_part: |
cmp eax,3 |
jne no_unk_fs |
label 10,10,'Unknow file system',cl_Red+font_Big |
jmp end_of_dir |
no_unk_fs: |
end_of_dir: |
mov [dirlen],ebx |
; command succesful |
mov esi,outinfo ;data_area+1024 |
; mov edi,fileinfo+11 |
mov edx,0 ;4096 ;16 |
newlineb: |
mov edi,fileinfo+11 |
pushad ; clear |
mov al,32 |
mov ecx,58 |
sub edi,11 |
cld |
rep stosb |
popad |
mov cl,[esi] ; end of entries ? |
cmp cl,6 |
jnz noib0 |
mov [edi+26],dword 'EOE ' |
add esi,32 |
; add edi,62 |
jmp inf |
noib0: |
mov cl,[esi+0] |
cmp cl,0xe5 |
je yesdelfil |
mov cl,[esi+11] ; long fat32 name ? |
cmp cl,0xf |
jnz noib1 |
mov [edi+26],dword 'F32 ' |
add esi,32 |
; add edi,62 |
jmp inf |
noib1: |
mov eax,'DAT ' ; data or .. ? |
mov cl,[esi+0] ; deleted file |
cmp cl,0xe5 |
je yesdelfil |
cmp cl,0x0 |
je yesdelfil |
jmp nodelfil |
yesdelfil: |
mov eax,'DEL ' |
jmp ffile |
nodelfil: |
mov cl,[esi+11] ; folder |
and cl,0x10 |
jz ffile |
mov eax,'FOL ' |
mov [edi+26],eax |
jmp nosize |
ffile: |
; Asko patch for v79 |
mov cl,[esi+11] ; fold |
and cl,0xf |
cmp cl,0xf ; skip long filename |
jz novol |
test cl,0x8 ; is it fold label? |
jz novol ; no |
mov eax,'Fvol' |
mov [edi+26],eax |
jmp nosize |
novol: |
mov [edi+26],eax |
pusha ; size |
mov eax,[esi+28] |
mov esi,edi |
add esi,37 |
mov ebx,10 |
mov ecx,8 |
newnum: |
xor edx,edx |
div ebx |
add dl,48 |
mov [esi],dl |
test eax,eax |
jz zernum |
dec esi |
loop newnum |
zernum: |
popa |
nosize: |
pusha ; date |
mov [edi+17],dword '. .' |
movzx eax,word [esi+24] |
shr eax,9 ; year |
add eax,1980 |
mov ecx,4 |
newdel1: |
dec ecx |
xor edx,edx |
mov ebx,10 |
div ebx |
add edx,48 |
mov [edi+ecx+21],dl |
test ecx,ecx |
jnz newdel1 |
movzx eax,word [esi+24] |
shr eax,5 ; month |
and eax,0x0f |
mov ecx,2 |
newdel2: |
dec ecx |
xor edx,edx |
mov ebx,10 |
div ebx |
add edx,48 |
mov [edi+ecx+18],dl |
test ecx,ecx |
jnz newdel2 |
movzx eax,word [esi+24] |
and eax,0x1f ; day |
mov ecx,2 |
newdel3: |
dec ecx |
xor edx,edx |
mov ebx,10 |
div ebx |
add edx,48 |
mov [edi+ecx+15],dl |
test ecx,ecx |
jnz newdel3 |
popa |
pusha ; number |
mov eax,edx |
sub eax,4096 |
neg eax |
xor edx,edx |
mov ebx,10 |
div ebx |
add dl,48 |
mov [edi+43],dl ;0001 |
xor edx,edx |
div ebx |
add dl,48 |
mov [edi+42],dl ;0010 |
xor edx,edx |
div ebx |
add al,48 |
add dl,48 |
mov [edi+41],dl ;0100 |
mov [edi+40],byte 0 ;1000 |
popa |
mov ecx,8 ; first 8 |
cld |
rep movsb |
mov [edi],byte '.' |
inc edi |
mov ecx,3 ; last 3 |
cld |
rep movsb |
add esi,(32-11) |
; add edi,(60-12+2) |
inf: |
pushad |
;STEP 5 Test on WRITE OR NOTWRITE |
mov edx,fileinfo+11 |
looo: |
; Delete del, eoe, f32 and another head-names |
cmp [viewmode],3 ;0-3 no outdel |
ja del_out |
cmp [edx+26],dword 'DEL ' |
je nextfl |
del_out: |
cmp [edx+26],dword 'DEL ' |
jne no_del |
cmp [edx],dword 0 ;431 ;435 ;484 +10% speed |
je nextfl |
no_del: |
cmp [edx+26],dword 'EOE ' |
je nextfl |
cmp [edx+26],dword 'F32 ' ;F32 not useles |
je nextfl |
cmp [edx],dword '. ' |
je nextfl |
cmp [edx],dword '.. ' |
je nextfl |
cmp [edx],dword 'FIRS' |
je nextfl |
; ---------_______-------_______ --------_________----------- |
; SORT by name and del deletet files or f32 headers from list |
; _________-------_______ --------_______---------___________ |
; STEP 6 UNIVERSAL SORT ALGORYTHM |
xxx: |
mov esi,0 ;[tekfilename] ;0 |
mov ebx,[start] ; 0 |
; At first Fold after Dat and Del |
ftestname: |
cmp byte [fileinfo+11+26],'F' |
je F |
cmp byte [fileinfo+11+26],'D' |
je D |
jmp add_element |
D: cmp byte [convinfo+esi+26],'D' |
je add_element |
cmp byte [convinfo+esi+26],'F' |
je skipfile |
jmp add_element |
F: cmp byte [convinfo+esi+26],'D' |
je writenow |
; cmp byte [convinfo+esi+26],'F' |
; je add_element |
; jmp add_element |
add_element: |
mov al,[fileinfo+ebx+11] |
cmp al,[convinfo+esi+ebx] |
je equal |
jb writenow |
skipfile: |
add esi,62 |
mov ebx,[start] ;0 |
jmp ftestname |
equal: |
inc ebx |
cmp ebx,[x0] |
je writefile |
cmp ebx,[x1] |
je x1p |
cmp ebx,[x2] |
je x2p |
cmp ebx,[x3] |
jae x3p |
jmp add_element |
x1p: |
mov ebx,18 |
jmp add_element |
x2p: |
mov ebx,15 |
jmp add_element |
x3p: |
mov ebx,0 |
jmp add_element |
writenow: |
mov ecx,4096*62 |
sub ecx,esi |
ldloop: |
mov al,[convinfo+ecx+esi] |
mov [convinfo+ecx+esi+62],al |
dec ecx |
jns ldloop |
writefile: |
mov ecx,61 |
wfloop: |
mov al,[fileinfo+ecx+11] |
mov [convinfo+ecx+esi],al |
dec ecx |
jns wfloop |
nextfile: |
nextfl: |
; popad |
; pushad |
mov eax,edx |
shl eax,26 |
cmp eax,0 |
jne no_outcnt |
push edx |
drawfbox 294,25,(4*6),10,cl_White |
pop ebp |
outcount ebp,294,25,cl_Black,4*65536 |
no_outcnt: |
popad |
inc edx |
cmp edx,4096 |
jnae newlineb |
;STEP 8 GET SIZE OF RESORTING LIST |
mov ecx,0 |
mov edi,0 |
mov eax,[blocksread] |
mov ebx,62 |
mul ebx |
mov edx,eax |
loogs: |
mov eax,dword [convinfo+edi+26] |
cmp eax,dword 0xffffffff |
je endgs |
add edi,62 |
inc ecx |
cmp edi,edx ;4096*62 |
jnae loogs |
endgs: |
mov [listsize],ecx |
ret |
;****************************************************************************** |
; DATA AREA |
pmenu_draw dd 0 ;if poup menu is draw,update all window |
flick dd 0 ;anti flick on ? |
drawhf dd 0 ;draw file menu? |
drawhv dd 0 ;draw view menu? |
drawhi dd 0 ;draw info menu? |
browser dd 0 ;0-dialog, 1-browser |
cursor dd 0 ;cursor in prompt line |
focus dd 0 ;prompt edit or window? |
viewmode dd 0 ;folder sort & not del |
downstop dd 0 |
filecursor dd 0 |
mousex dd 0 |
mousey dd 0 |
blocksread dd 0 |
listsize dd 0 ;num of files in directory |
temp dd 0 |
readblock dd 1 |
dlg_type db 0 ;S-save O-open |
;01234567890123456789012345678901234567890123456789012345678912 |
hdimg db 'HD HARDDISK FOL ' |
db 'RD RAMDISK FOL ' |
ptimg db '1 FIRST PARTITION FOL ' |
db '2 SECOND PARTITION FOL ' |
modetext: |
;0123456789012345 |
db 'SORT BY NAME 0' |
db 'SORT BY EXT. 1' |
db 'SORT BY SIZE 2' ;type sort |
db 'SORT BY DATE 3' |
db 'DEL SORT NAME 4' |
db 'DEL SORT EXT. 5' |
db 'DEL SORT SIZE 6' ;type sort |
db 'DEL SORT DATE 7' |
dirlen dd 0x1 |
b_color dd 0x6677cc |
; //// Willow |
MRUfile: |
dd 0x0 |
dd 0x0 |
dd 0x1 |
dd path |
dd tempzone |
db '/RD/1/MRU.LST',0 |
; //// Willow |
;Name of programs |
editor db 'TINYPAD ' |
bmpview db 'MV ' |
jpgview db 'JPEGVIEW ' |
gifview db 'GIFVIEW ' |
ac97wav db 'AC97WAV ' |
copyrfile db 'COPYR ' |
; //// Willow |
pngview db '@RCHER ' |
; //// Willow |
fileinfo_start: |
dd 16 |
dd 0 |
dd 0 ;tempzone+1000; |
dd 0 |
dd tempzone ;0x10000 |
open_path: |
times 256 db 0 ;run app path |
fileinfoblock: |
dd 0x0 ; read |
dd 0x0 ; first block |
dd 0x1 ; number of blocks to read |
farea: |
dd outinfo ; ret offset |
dd tempzone ; work size of sytemram |
path: |
times 256 db 0 ;path |
;rb 256 |
but_file: |
file 'systr12.GIF' |
butimg: |
rb 400*16*3+8 ;buttons (left pice of picture) |
logoimg: |
rb 70*16*3+8 ;logo (right pice of picture) |
logoinfimg: |
rb 60*60*3+8 ;logoinfo (right pice of picture) |
upsb: |
rb 8*9*3+8 ;up scroll button |
dnsb: |
rb 8*9*3+8 ;down scroll button |
;ICONS RESERVE AREA |
hdico: |
rb 12*9*3+8 |
rdico: |
rb 12*9*3+8 |
folico: |
rb 12*9*3+8 |
datico: |
rb 12*9*3+8 |
delico: |
rb 12*9*3+8 |
imgico: |
rb 12*9*3+8 |
txtico: |
rb 12*9*3+8 |
asmincico: |
rb 12*9*3+8 |
execico: |
rb 12*9*3+8 |
tempimg: ;reserve ram for images |
rb 400*100*3+8 ;for picture |
rb 8000 |
gif_hash: |
rd 4096 |
tempzone: ;temp zone for 58 function |
rb 4000 |
sourcepath rb 100 |
destpath rb 100 |
MYPID: |
rd 8 |
I_END: |
param_area: |
rb 256 |
paramtest: |
rb 256 |
filedir: |
rb 256 |
procinfo process_information |
sc system_colors |
fileinfo: |
rb 200 ;4096*62+1024 |
outinfo: |
rb 4096*34+1024 |
convinfo: |
rb 4096*62+1024 |
RAM_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |