Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 127 → Rev 131

/programs/demos/numcalc/trunk/@numcalc.asm
File deleted
Property changes:
Deleted: svn:executable
-*
\ No newline at end of property
/programs/demos/numcalc/trunk/build.bat
File deleted
\ No newline at end of file
/programs/demos/bgitest/trunk/bgifont.inc
570,6 → 570,12
jg .nobold
end if
mov edx,[.color]
; \begin{diamond}[18.08.2006]
; starting from K0530 kernel interprets flag 0x1000000 as
; negate existing pixels colors, disregarding passed color
; we do not want this
and edx, 0xFFFFFF
; \end{diamond}[18.08.2006]
mov eax,38
int 0x40
test ebp,BGI_BOLD
/programs/demos/bgitest/trunk/bgitest.asm
68,11 → 68,10
dd 0x0
not1strun dd 0x0
 
include 'lang.inc'
include 'lang.inc'
include 'macros.inc'
;include 'debug.inc'
include 'bgifont.inc'
lang equ en;ru;en
 
START:
mov [help],0
/programs/develop/examples/numcalc/trunk/@numcalc.asm
0,0 → 1,49
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd mem
dd mem
dd 0
dd 0
 
start:
push 66
pop eax
push 4
pop ebx
mov cl, 45h ; NumLock scancode
xor edx, edx
int 40h
mov al, 40 ; ñòàðøèå áèòû óæå îáíóëåíû
mov bl, 2 ; ñòàðøèå áèòû óæå îáíóëåíû
int 40h
event:
push 10
pop eax
int 40h
; ó íàñ ìîæåò áûòü òîëüêî îäíî ñîáûòèå - íàæàòà êëàâèøà
mov al, 2
int 40h
cmp al, 2
jnz event
; ó íàñ åñòü òîëüêî îäíà ãîðÿ÷àÿ êëàâèøà
push 70
pop eax
mov ebx, fileinfo
int 40h
jmp event
 
fileinfo:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/rd/1/calc',0
 
i_end:
align 16
rb 16
mem:
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/programs/develop/examples/numcalc/trunk/build.bat
0,0 → 1,2
@fasm @numcalc.asm @numcalc
@pause
/programs/develop/heed/trunk/heed.asm
1159,7 → 1159,7
add edx,14 ;help_text addr.
add esi,37 ; = 51 - length 1 line
mov ecx,0x00ffffff
mov edi,15
mov edi,(help_end-help_text)/51
@@:
add ebx,0x10
int 0x40
1329,6 → 1329,7
;text for help_window
help_label: db 'Help for HeEd.'
help_text:
if lang eq ru
db '1.HeEd ¢ á®áâ®ï­¨¨ ®âªàëâì ä ©« ⮫쪮 ®¤¨­ à § ¨ '
db ' ­ã¦­®¥ ç¨á«® à § á®åà ­¨âì ¥£®. '
db '2.à¨ ®âªàë⨨ ä ©«  ¡¥§ à áè¨à¥­¨ï ­ ¤® íâ® à áè¨-'
1344,12 → 1345,27
db ' ¤¨âáï ¯ ¬ïâì á  ¤à¥á  0å80000, ­® à §¬¥à ä ©«  '
db ' à ¢¥­ 0xFFFFFFFF. '
db ' (á¬. ¨­ä® "About") '
else
db '1.HeEd can once open file and many times save it. '
db '2.To open file without extension it is required to '
db ' specify anyway as three spaces after a dot. '
db '3.File is opened when the button "Go" is pressed. '
db '4.Creation of new files in the menu is not provided'
db ' but you can edit... '
db '5.Only number of bytes which was file size when '
db ' opening is written to file. '
db '6.If you press "Go" with empty filename field, '
db ' memory starting from address 0x80000 is output, '
db ' but file size equals to 0xFFFFFFFF. '
db ' (see info "About") '
end if
help_end:
;text for about_window
about_label: db 'About this funny.'
about_text:
if lang eq ru
db '¥ª®â®à ï ¨­ä®à¬ æ¨ï ¤«ï â¥å, ªâ® § å®ç¥â ¤®¯¨á âì '
db 'á çâ®-⮠᢮¥: ª®¤ ¯à ªâ¨çªáª¨ ­¥ ®¯â¨¬¨§¨à®¢ ­,'
db 'á çâ®-⮠᢮¥: ª®¤ ¯à ªâ¨ç¥áª¨ ­¥ ®¯â¨¬¨§¨à®¢ ­,'
db 'â ª çâ® à §®¡à âìáï ¡ã¤¥â ­¥ â ª 㦠᫮¦­®. ‘âப¨ '
db '¤«ï ª­®¯®ª ¬¥­î ¤®«¦­ë ¨¤â¨ ¯àאַ ¤à㣠§  ¤à㣮¬, '
db 'â. ª. ï ¯à¨ ¢ë¢®¤¥ ¨á¯®«ì§ãî ­¥ mov esi,à §¬¥à ¨ '
1363,6 → 1379,23
db 'ப á GUI MeOS ¨ ¯®í⮬㠭¥ ¯à¥â¥­¤ã¥â ­  çâ®-â® '
db '¡®«ì襥, 祬 ¯à¨¬¥à. à®áâ® ­ ¤®¥«  íâ  â¥¬ ,   ¢ë-'
db 'ª¨­ãâì ¦ «ª®. mailto:babalbes@yandex.ru '
else
db 'Some information for those who want add to this '
db 'something their own: the code is practically not '
db 'optimized, so investigation is not complicated. '
db 'Strings for menu buttons must rank after each other'
db 'as I use not mov esi,size and mov edx,address when '
db 'output but simply add offsets. For encodins and '
db 'file sizes for save, it remains only add buttons '
db 'with text in menu (at addition one should take into'
db 'account that buttons ID are recognized as dec ah '
db 'rather than cmp ah,ID). Nevertheless if study is '
db 'unpleasant, you can write and ask. This program has'
db 'been written in course of study GUI MeOS and does '
db 'not therefore pretend on some more than example. '
db 'Just this theme bothers, but I regret to delete. '
db ' mailto:babalbes@yandex.ru '
end if
about_end:
 
I_END:
/programs/fs/sysxtree/trunk/SYSTR12.GIF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/fs/sysxtree/trunk/ascgl.inc
20,8 → 20,8
;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.10 all macros optimized by Halyavin A., add at ~07.06.2004
;0.11 many macros optimized by Halyavin A., 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
369,8 → 369,8
;DrawBox
macro drawfbox x,y,xs,ys,color
{
wordstoreg ebx,x,xs ;x*65536+xs
wordstoreg ecx,y,ys ;y*65536+ys
words2reg ebx,x,xs ;x*65536+xs
words2reg ecx,y,ys ;y*65536+ys
mov edx,color
mov eax,13
int 0x40
385,8 → 385,8
jmp spdat
savetime dd 0
fps_cntr dd 0
fps dd 0
ttt dd 0
fps dd 0
ttt dd 0
spdat:
get_time:
mov eax,3
395,7 → 395,7
jne new_time
inc [fps_cntr]
cmp dword [ttt],0
je out_fps
je out_fps
dec dword [ttt]
jmp no_out_fps
new_time:
405,7 → 405,7
mov [fps_cntr],0
out_fps:
if ~(delcolor eq )
mov ebx,x*65536+30
mov ebx,x*65536+36
mov ecx,y*65536+7
mov edx,delcolor
mov eax,13
413,7 → 413,7
end if
mov dword [ttt],fps_show_frequency
mov eax,47
mov ebx,5*65536
mov ebx,6*65536
; mov bl,0
mov edx,x*65536+y
mov esi,color
427,44 → 427,44
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
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
cmp ebx,eax
jb anot
add eax,esi
cmp eax,ebx
jbe nbc
bc:
mov ecx,1
ret
mov ecx,1
ret
anot:
add ebx,edi
cmp ebx,eax
ja bc
cmp ebx,eax
ja bc
nbc:
xor ecx,ecx
ret
xor ecx,ecx
ret
end if
bounce:
mov otv,1
exit:
bounce:
mov otv,1
exit:
}
 
macro rgbtobgr image
495,7 → 495,7
shl ecx,16
add cx,[arg3+4]
; wordstoreg ecx,[arg3],[arg3+4]
wordstoreg edx, x , y ;arg1*65536+arg2
words2reg edx, x , y ;arg1*65536+arg2
int 0x40
}
 
504,7 → 504,7
mov eax,7
mov ebx,arg3
add ebx,8
wordstoreg edx, x , y ;arg1*65536+arg2
words2reg edx, x , y ;arg1*65536+arg2
add edx,dword [arg3]
mov ecx,dword [arg3+4]
int 0x40
697,7 → 697,7
sub esi,dword [bmptoimg_data_area_bps]
sub esi,dword [bmptoimg_data_area_bps]
cmp esi,dword [bmptoimg_data_area_sop]
jb end_bmp
jb end_bmp
add edi,eax
add ebp,eax
jmp nextstring
705,7 → 705,7
convertno32:
mov ebx,bmp_load_area
add ebx, [bmp_load_area+14]
add ebx,14 ;start of color table
add ebx,14 ;start of color table
push esi
add esi,dword [bmptoimg_data_area_bps]
mov dword [bmptoimg_data_area_eos],esi
714,9 → 714,9
push eax
movzx eax,byte [esi]
cmp word [bmp_load_area+28],4
je convert4bpp
je convert4bpp
cmp word [bmp_load_area+28],1
je convert1bpp
je convert1bpp
call converttable
 
convert2:
750,7 → 750,7
mov edx,7
nextbit:
xor eax,eax
bt ecx,edx
bt ecx,edx
jnc noaddelem
inc eax
noaddelem:
758,7 → 758,7
call converttable
pop edx
dec edx
js convert2
js convert2
add edi,3
 
add ebp,3
776,12 → 776,12
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_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
bmptoimg_data_area_sop dd 0
bmptoimg_data_area_eop dd 0
bmptoimg_data_area_eos dd 0
end if
 
end_bmp:
806,7 → 806,7
local Gif_get_sym, shift, nextbl, noblock, loop1, exx
local Gif_output, next, loop2
 
_null equ 0x1000 ; 0x1000
_null = 0x1000 ; 0x1000
 
; jmp sss
; if defined gif_hash_offset
816,13 → 816,13
; end if
;sss:
 
mov esi,gifsrc ;“ª § â¥«ì ­  ƒˆ” ä ¨« ¢ ¯ ¬ïâ¨
mov edi,imgsrc ;“ª § â¥«ì ­  ᯨ᮪ ª à⨭®ª
mov esi,gifsrc ;“ª § â¥«ì ­  ƒˆ” ä ¨« ¢ ¯ ¬ïâ¨
mov edi,imgsrc ;“ª § â¥«ì ­  ᯨ᮪ ª à⨭®ª
 
if defined gif_hash_offset
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
else
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
end if
 
call ReadGIF
845,12 → 845,12
mov [img_count],eax
inc eax
cmp dword[esi],'GIF8'
jne er ; signature
jne er ; signature
mov ecx,[esi+0xa]
inc eax
add esi,0xd
mov edi,esi
bt ecx,7
bt ecx,7
jnc nextblock
mov [globalColor],esi
call Gif_skipmap
891,8 → 891,8
push edi
movzx ecx,word[esi]
inc esi
bt ecx,7
jc uselocal
bt ecx,7
jc uselocal
push [globalColor]
mov edi,esi
jmp setPal
909,7 → 909,7
mov edi,[table_ptr]
xor eax,eax
cld
lodsb ; eax - block_count
lodsb ; eax - block_count
add eax,esi
mov [block_ofs],eax
mov [bit_count],8
933,7 → 933,7
pop [compsize]
call Gif_get_sym
cmp eax,[CC]
je reinit
je reinit
call Gif_output
cycle:
movzx ebx,ax
941,9 → 941,9
cmp eax,edx
jae notintable
cmp eax,[CC]
je reinit
je reinit
cmp eax,[EOI]
je zend
je zend
call Gif_output
zadd:
push eax
997,7 → 997,7
; out: edi - pointer to area after colormap
 
and ecx,111b
inc ecx ; color map size
inc ecx ; color map size
mov ebx,1
shl ebx,cl
lea ebx,[ebx*2+ebx]
1015,7 → 1015,7
jnz loop1
inc esi
cmp esi,[block_ofs]
jb noblock
jb noblock
push eax
xor eax,eax
lodsb
1057,14 → 1057,14
add esi,[Palette]
 
if COLOR_ORDER eq MENUETOS
mov esi,[esi]
bswap esi
shr esi,8
mov [edi],esi
add edi,3
mov esi,[esi]
bswap esi
shr esi,8
mov [edi],esi
add edi,3
else
movsw
movsb
movsw
movsb
end if
 
loop loop2
1073,7 → 1073,7
 
globalColor dd 1
img_count dd 1
cur_info dd 1 ; image table pointer
cur_info dd 1 ; image table pointer
img_start dd 1
codesize dd 1
compsize dd 1
1101,15 → 1101,15
local Gif_get_sym, shift, nextbl, noblock, loop1, exx
local Gif_output, next, loop2
 
_null fix 0x1000 ; 0x1000
_null = 0x1000 ; 0x1000
 
mov esi,gifsrc ;“ª § â¥«ì ­  ƒˆ” ä ¨« ¢ ¯ ¬ïâ¨
mov edi,imgsrc ;“ª § â¥«ì ­  ᯨ᮪ ª à⨭®ª
mov esi,gifsrc ;“ª § â¥«ì ­  ƒˆ” ä ¨« ¢ ¯ ¬ïâ¨
mov edi,imgsrc ;“ª § â¥«ì ­  ᯨ᮪ ª à⨭®ª
 
if defined gif_hash_offset
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
mov eax,gif_hash_offset ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
else
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
mov eax,hasharea ; ¡®ç ï ®¡« áâì ¬¨­¨¬ã¬ 4096*4 ¡ ©â
end if
 
call ReadGIF
1130,12 → 1130,12
mov [img_count],eax
inc eax
cmp dword[esi],'GIF8'
jne er ; signature
jne er ; signature
mov ecx,[esi+0xa]
inc eax
add esi,0xd
mov edi,esi
bt ecx,7
bt ecx,7
jnc nextblock
mov [globalColor],esi
call Gif_skipmap
1187,8 → 1187,8
push edi
movzx ecx,word[esi]
inc esi
bt ecx,7
jc uselocal
bt ecx,7
jc uselocal
push [globalColor]
mov edi,esi
jmp setPal
1205,7 → 1205,7
mov edi,[table_ptr]
xor eax,eax
cld
lodsb ; eax - block_count
lodsb ; eax - block_count
add eax,esi
mov [block_ofs],eax
mov [bit_count],8
1229,7 → 1229,7
pop [compsize]
call Gif_get_sym
cmp eax,[CC]
je reinit
je reinit
call Gif_output
cycle:
movzx ebx,ax
1237,9 → 1237,9
cmp eax,edx
jae notintable
cmp eax,[CC]
je reinit
je reinit
cmp eax,[EOI]
je zend
je zend
call Gif_output
zadd:
push eax
1291,9 → 1291,8
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
inc ecx ; color map size
mov ebx,1
shl ebx,cl
lea ebx,[ebx*2+ebx]
1311,7 → 1310,7
jnz loop1
inc esi
cmp esi,[block_ofs]
jb noblock
jb noblock
push eax
xor eax,eax
lodsb
1353,14 → 1352,14
add esi,[Palette]
 
if COLOR_ORDER eq MENUETOS
mov esi,[esi]
bswap esi
shr esi,8
mov [edi],esi
add edi,3
mov esi,[esi]
bswap esi
shr esi,8
mov [edi],esi
add edi,3
else
movsw
movsb
movsw
movsb
end if
 
loop loop2
1369,7 → 1368,7
 
globalColor dd 1
img_count dd 1
cur_info dd 1 ; image table pointer
cur_info dd 1 ; image table pointer
img_start dd 1
codesize dd 1
compsize dd 1
/programs/fs/sysxtree/trunk/ascgml.inc
0,0 → 1,49
lang equ ru
 
;
; Assembler
; SMALL
; CODE
; GaMe
; Libary
;
; Ver 0.03 By Pavlushin Evgeni (RUSSIA)
; www.waptap@mail.ru
 
;InfoList
;0.01 correct
;0.02 control ~14.05.2004
;0.03 all macros optimized by halyavin, add at ~07.06.2004
 
 
; corectiryemoe,corectnoe,step
macro correct arg1,arg2,arg3
{
local plus,minus,equal
mov eax,arg2
cmp arg1,eax
je equal
mov eax,arg3
ja minus
plus:
add arg1,eax
jmp equal
minus:
sub arg1,eax
equal:
}
 
macro control min,max,arg
{
local gr,low,norm
mov eax,max
cmp arg,eax
jg gr
mov eax,min
cmp arg,eax
jnl norm
gr:
low:
mov arg,eax
norm:
}
/programs/fs/sysxtree/trunk/ascl.inc
27,11 → 27,13
;0.12 open/save dialog ~13.09.2004
;0.13 dialogs bugs deleted
;0.14 drawlbut ~03.10.2004
;0.15 extendet label!
 
; 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
59,25 → 61,75
}
 
 
macro wordstoreg reg,hiword,loword
;macro wordstoreg reg,hiword,loword
;{
;if hiword eqtype 0 & loword eqtype 0
; mov reg,dword hiword*65536+loword
;else if hiword eqtype 12 & loword eqtype eax
; mov reg,dword hiword*65536
; add reg,dword loword
;else if hiword eqtype 12 & loword eqtype [123]
; mov reg,dword hiword*65536
; add reg,dword loword
;else
; mov reg,dword hiword
; shl reg,16
; add reg,dword loword
;end if
;}
 
macro dword2reg reg,doubleword
{
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 )
if doubleword eq
; not changes
else
mov reg,hiword
shl reg,16
add reg,loword
mov reg,dword doubleword
end if
}
 
macro words2reg reg,hiword,lowword
{
if hiword eq
if lowword eq
; not changes
else
if lowword eqtype 12
and reg,dword 0xffff0000
add reg,dword lowword
else
and reg,dword 0xffff0000
add reg,dword lowword
end if
end if
else
if lowword eq
if hiword eqtype 12
and reg,dword 0x0000ffff
add reg,dword hiword*65536
else
shl reg,16
add reg,dword hiword
ror reg,16
end if
else
if lowword eqtype 12 & hiword eqtype 12
if lowword eq 0 & hiword eq 0
xor reg,reg
else
mov reg,dword hiword*65536+lowword
end if
else
mov reg,dword hiword
shl reg,16
add reg,dword lowword
end if
end if
end if
}
 
 
 
 
; DRAW BUTTON with label
 
macro drawlbut x,y,xs,ys,text,id,bcolor,tcolor
86,8 → 138,8
jmp asd
lab db text ;arg label
asd:
wordstoreg ebx,x,xs
wordstoreg ecx,y,ys
words2reg ebx,x,xs
words2reg ecx,y,ys
mov edx,id
mov esi,bcolor
mov eax,8
328,7 → 380,7
db '/RD/1/SYSXTREE',0
 
procinfo:
times 256 db 0
times 1024 db 0
}
 
 
390,7 → 442,7
mov eax,60
mov ebx,1 ; define IPC
mov ecx,path ; offset of area
mov edx,120 ; size 150 bytes
mov edx,150 ; size 150 bytes
int 0x40
 
; change wanted events list 7-bit IPC event
458,6 → 510,7
call redproc
jmp getmesloop
mkey:
mov eax,2
int 0x40 ; read (eax=2)
jmp getmesloop
mbutton:
526,8 → 579,8
DLGPID dd 0
 
param:
rb 4 ; My dec PID
rb 6 ; Type of dialog
dd 0 ; My dec PID
dd 0,0 ; Type of dialog
 
run_fileinfo:
dd 16
535,11 → 588,11
dd param
dd 0
dd procinfo
run_filepath:
;run_filepath:
db '/RD/1/SYSXTREE',0
 
procinfo:
times 256 db 0
times 1024 db 0
}
 
 
635,10 → 688,15
; mov ebx,x
; shl ebx,16
; add ebx,y
wordstoreg ebx,x,y
mov ecx,color
mov edx,offs
mov esi,size
words2reg ebx,x,y
 
dword2reg ecx,color
dword2reg edx,offs
dword2reg esi,size
 
; mov ecx,color
; mov edx,offs
; mov esi,size
mov eax,4
int 0x40
}
649,7 → 707,7
mov ebx,numtype
mov bl,0
; mov edx,x*65536+y
wordstoreg edx,x,y
words2reg edx,x,y
mov esi,color
mov eax,47
int 0x40
728,8 → 786,8
{
; mov ebx,arg1*65536+arg3
; mov ecx,arg2*65536+arg4
wordstoreg ebx,arg1,arg3
wordstoreg ecx,arg2,arg4
words2reg ebx,arg1,arg3
words2reg ecx,arg2,arg4
mov edx,arg5
mov eax,0
int 0x40
769,7 → 827,7
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
 
macro label arg1,arg2,arg3,arg4
macro glabel arg1,arg2,arg3,arg4
{
local asd,lab
jmp asd
778,10 → 836,11
; 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
 
words2reg ebx,arg1,arg2
 
dword2reg ecx,arg4
 
mov edx,lab
mov esi,asd-lab ;calc size
mov eax,4
/programs/fs/sysxtree/trunk/ascml.inc
0,0 → 1,93
lang equ ru
 
;
; Assembler
; SMALL
; CODE
; Massive operation
; Libary
;
; Ver 0.1 By Pavlushin Evgeni (RUSSIA)
; www.waptap@mail.ru
 
;InfoList
;0.01 readmas,compmas,findmas
 
macro readmas masoff,obroff
{
local loo
mov edi,masoff
add edi,8
mov ebp,[masoff] ;elements
mov edx,[masoff+4] ;elemsize
mov eax,0 ;count
loo:
pushad
call obroff
popad
add edi,edx
inc eax
cmp eax,ebp
jne loo
}
 
macro compmas masoff1,masoff2,obroff
{
local loo,loo2
mov esi,masoff2
add esi,8
mov ecx,[masoff2]
mov ebx,[masoff2+4]
mov eax,0
 
loo2:
push eax
 
mov edi,masoff1
add edi,8
mov ebp,[masoff1] ;elements1
mov edx,[masoff1+4] ;elemsize1
mov eax,0 ;count
loo:
pushad
call obroff
popad
add edi,edx
inc eax
cmp eax,ebp
jne loo
 
add esi,ebx
pop eax
inc eax
cmp eax,ecx
jne loo2
}
 
 
macro findmas masoff,obroff
{
local loo,looend,lend
mov edi,masoff
add edi,8
mov ebp,[masoff] ;elements
mov edx,[masoff+4] ;elemsize
mov eax,0 ;count
loo:
pushad
mov eax,0
call obroff
cmp eax,1
je looend
popad
add edi,edx
inc eax
cmp eax,ebp
jne loo
stc
jmp lend
looend:
popad
clc
lend:
}
/programs/fs/sysxtree/trunk/macros.inc
1,3 → 1,15
; language for programs
lang fix en ; ru en fr ge fi
 
@^ fix macro comment {
^@ fix }
 
 
macro m2m dest,src {
push src
pop dest
}
 
; new application structure
macro meos_app_start
{
74,38 → 86,75
 
 
; strings
macro sz name,[data] { ; from MFAR [mike.dld]
common
if used name
label name
end if
forward
if used name
macro sz name,[data] { ; from MFAR [mike.dld]
common
if used name
name db data
.size = $-name
end if
}
 
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
common
if used name
label name
forward
if lang eq lng
db data
end if
common
.size = $-name
end if
}
 
macro szc name,elsz,[data] { ; from MFAR [mike.dld]
common
local s,m
m = 0
if used name
label name
virtual at 0
db data
s = $
end virtual
d#elsz s
if m < s
m = s
end if
common
if used name
.size = $-name
end if
db data
.size = $-name
.maxl = m
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)
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld]
common
local s,m,c
m = 0
c = 0
if used name
label name
forward
if lang eq lng
virtual at 0
db data
s = $
end virtual
d#elsz s
if m < s
m = s
end if
common
if used name
.size = $-name
end if
db data
c = c+1
end if
common
.size = $-name
.maxl = m
.count = c
end if
}
 
 
 
; easy system call macro
macro mpack dest, hsrc, lsrc
{
123,8 → 172,16
end if
}
 
macro __mov reg,a { ; mike.dld
if ~a eq
;macro __mov reg,a { ; mike.dld
; if ~a eq
; mov reg,a
; 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
}
140,12 → 197,72
}
 
 
; -------------------------
macro header a,[b] {
common
use32
org 0
db 'MENUET',a
forward
if b eq
dd 0
else
dd b
end if }
macro section name { align 16
label name }
macro func name {
if ~used name
display 'FUNC NOT USED: ',`name,13,10
else
align 4
name:
;pushad
;pushfd
;dps `name
;newline
;mcall 5,1
;popfd
;popad
}
macro endf { end if }
 
; language for programs
lang fix ru ; ru en fr ge fi
macro diff16 title,l1,l2
{
local s,d
s = l2-l1
display title,': 0x'
repeat 8
d = '0' + s shr ((8-%) shl 2) and $0F
if d > '9'
d = d + 'A'-'9'-1
end if
display d
end repeat
display 13,10
}
 
macro diff10 title,l1,l2
{
local s,d,z,m
s = l2-l1
z = 0
m = 1000000000
display title,': '
repeat 10
d = '0' + s / m
s = s - (s/m)*m
m = m / 10
if d <> '0'
z = 1
end if
if z <> 0
display d
end if
end repeat
display 13,10
}
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
153,9 → 270,9
{
if (arg2 eqtype 0)
if (arg2) = 1
inc arg1
inc arg1
else
add arg1,arg2
add arg1,arg2
end if
else
add arg1,arg2
166,9 → 283,9
{
if (arg2 eqtype 0)
if (arg2) = 1
dec arg1
dec arg1
else
sub arg1,arg2
sub arg1,arg2
end if
else
sub arg1,arg2
179,17 → 296,17
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg2) = 0
xor arg1,arg1
xor arg1,arg1
else if (arg2) = 1
xor arg1,arg1
inc arg1
xor arg1,arg1
inc arg1
else if (arg2) = -1
or arg1,-1
or arg1,-1
else if (arg2) > -128 & (arg2) < 128
push arg2
pop arg1
push arg2
pop arg1
else
mov arg1,arg2
mov arg1,arg2
end if
else
mov arg1,arg2
197,48 → 314,230
}
 
 
macro RGB [a] {
common
match (r=,g=,b),a \{
\dd ((r) shl 16) or ((g) shl 8) or (b)
\}
}
 
 
struc POINT _t,_dx,_dy {
.x _t _dx
.y _t _dy
}
 
 
; Macroinstructions for defining data structures
 
macro struct name
{
virtual at 0
name name
sizeof.#name = $ - name
end virtual
}
{ fields@struct equ name
match child parent, name \{ fields@struct equ child,fields@\#parent \}
sub@struct equ
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
macro db [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,db,<val> \}
macro dw [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dw,<val> \}
macro du [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,du,<val> \}
macro dd [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dd,<val> \}
macro dp [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dp,<val> \}
macro dq [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dq,<val> \}
macro dt [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dt,<val> \}
macro rb count \{ \local anonymous
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
macro rw count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
macro rd count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
macro rp count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
macro rq count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
macro rt count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
macro union \{ fields@struct equ fields@struct,,union,<
sub@struct equ union \}
macro struct \{ fields@struct equ fields@struct,,substruct,<
sub@struct equ substruct \}
virtual at 0 }
 
macro ends
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
restruc rb,rw,rd,rp,rq,rt
purge db,dw,du,dd,dp,dq,dt
purge rb,rw,rd,rp,rq,rt
purge union,struct
match name=,fields,fields@struct \\{ fields@struct equ
make@struct name,fields
fields@\\#name equ fields \\}
end virtual \}
match any, sub@struct \{ fields@struct equ fields@struct> \}
restore sub@struct }
 
macro make@struct name,[field,type,def]
{ common
if $
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
err
end if
local define
define equ name
forward
local sub
match , field \{ make@substruct type,name,sub def
define equ define,.,sub, \}
match any, field \{ define equ define,.#field,type,<def> \}
common
match fields, define \{ define@struct fields \} }
 
macro define@struct name,[field,type,def]
{ common
local list
list equ
forward
if ~ field eq .
name#field type def
sizeof.#name#field = $ - name#field
else
rb sizeof.#type
end if
local value
match any, list \{ list equ list, \}
list equ list <value>
common
sizeof.#name = $
restruc name
match values, list \{
struc name value \\{
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
match , fields@struct \\\{ label .
forward
match , value \\\\{ field type def \\\\}
match any, value \\\\{ field type value
if ~ field eq .
rb sizeof.#name#field - ($-field)
end if \\\\}
common \\\} \\} \} }
 
macro enable@substruct
{ macro make@substruct substruct,parent,name,[field,type,def]
\{ \common
\local define
define equ parent,name
\forward
\local sub
match , field \\{ match any, type \\\{ enable@substruct
make@substruct type,name,sub def
purge make@substruct
define equ define,.,sub, \\\} \\}
match any, field \\{ define equ define,.\#field,type,<def> \\}
\common
match fields, define \\{ define@\#substruct fields \\} \} }
 
enable@substruct
 
macro define@union parent,name,[field,type,def]
{ common
virtual at 0
forward
if ~ field eq .
virtual at 0
parent#field type def
sizeof.#parent#field = $ - parent#field
end virtual
if sizeof.#parent#field > $
rb sizeof.#parent#field - $
end if
else if sizeof.#type > $
rb sizeof.#type - $
end if
common
sizeof.#name = $
end virtual
struc name [value] \{ \common
label .\#name
last@union equ
forward
match any, last@union \\{ virtual at .\#name
field type def
end virtual \\}
match , last@union \\{ match , value \\\{ field type def \\\}
match any, value \\\{ field type value \\\} \\}
last@union equ field
common rb sizeof.#name - ($ - .\#name) \} }
 
macro define@substruct parent,name,[field,type,def]
{ common
virtual at 0
forward
if ~ field eq .
parent#field type def
sizeof.#parent#field = $ - parent#field
else
rb sizeof.#type
end if
local value
common
sizeof.#name = $
end virtual
struc name value \{
label .\#name
forward
match , value \\{ field type def \\}
match any, value \\{ field type value
if ~ field eq .
rb sizeof.#parent#field - ($-field)
end if \\}
common \} }
 
; 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
struct 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
ends
 
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
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 ?
ends
 
 
; constants
247,16 → 546,16
EV_IDLE = 0
EV_TIMER = 0
EV_REDRAW = 1
EV_KEY = 2
EV_KEY = 2
EV_BUTTON = 3
EV_EXIT = 4
EV_BACKGROUND = 5
EV_MOUSE = 6
EV_IPC = 7
EV_IPC = 7
EV_STACK = 8
 
; event mask bits for function 40
EVM_REDRAW = 1b
EVM_REDRAW = 1b
EVM_KEY = 10b
EVM_BUTTON = 100b
EVM_EXIT = 1000b
263,4 → 562,4
EVM_BACKGROUND = 10000b
EVM_MOUSE = 100000b
EVM_IPC = 1000000b
EVM_STACK = 10000000b
EVM_STACK = 10000000b
/programs/fs/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/fs/sysxtree/trunk/sysxtree.asm
31,29 → 31,55
 
;******************************************************************************
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
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
START: ; start of execution
; //// Willow
mov eax,58
mov ebx,MRUfile
int 0x40
; mov eax,58
; mov ebx,MRUfile
; int 0x40
; //// Willow
mcall 18,11,1,table_area
mov edi,hdimg+62*2
cmp [table_area+2],byte 0
je no_hdpartition_on_hd0
mov esi,hdimg1
mov ecx,62
rep movsb
no_hdpartition_on_hd0:
cmp [table_area+3],byte 0
je no_hdpartition_on_hd1
mov esi,hdimg2
mov ecx,62
rep movsb
no_hdpartition_on_hd1:
cmp [table_area+4],byte 0
je no_hdpartition_on_hd2
mov esi,hdimg3
mov ecx,62
rep movsb
no_hdpartition_on_hd2:
cmp [table_area+5],byte 0
je no_hdpartition_on_hd3
mov esi,hdimg4
mov ecx,62
rep movsb
no_hdpartition_on_hd3:
 
mov eax,40
mov ebx,0100111b
60,12 → 86,12
int 0x40
 
cmp byte [param_area],0 ;test parameters line
jne no_brow ;it's dialog
jne no_brow ;it's dialog
mov [browser],dword 1 ;it's browser
no_brow:
 
cmp [browser],dword 1
je no_dlg
je no_dlg
 
mov al,byte [param_area+5]
mov [dlg_type],al
119,9 → 145,9
;************************
 
mov eax,0 ;x
mov ebx,0 ;y
mov ebx,0 ;y
mov esi,286 ;xs
mov edi,16 ;ys
mov edi,16 ;ys
mov ecx,tempimg ;src
mov edx,butimg ;dest
call getimgproc
130,14 → 156,14
mov edx,logoimg ;dest
call getimgproc
mov eax,0 ;x
mov ebx,16 ;y
mov esi,51 ;xs
mov ebx,16 ;y
mov esi,51 ;xs
mov edi,esi ;ys
mov edx,logoinfimg ;dest
mov edx,logoinfimg ;dest
call getimgproc
mov eax,51 ;x
mov esi,8 ;xs
mov edi,9 ;ys
mov eax,51 ;x
mov esi,8 ;xs
mov edi,9 ;ys
mov edx,upsb ;dest
call getimgproc
mov eax,51+8 ;x
145,9 → 171,9
call getimgproc
 
mov eax,51+16 ;x
mov ebx,16 ;y
mov esi,12 ;xs
mov edi,9 ;ys
mov ebx,16 ;y
mov esi,12 ;xs
mov edi,9 ;ys
 
mov ecx,tempimg ;src
mov edx,hdico ;dest
209,7 → 235,7
call read_directory
; call convertation
red:
call draw_window ; at first, draw the window
call draw_window ; at first, draw the window
 
still:
mov eax,9
231,7 → 257,7
mov ebx,1
int 0x40
mov ebx,eax
shr eax,16 ;x
shr eax,16 ;x
and ebx,0xffff ;y
 
mov ebp,eax
245,7 → 271,7
sub ebp,[listy] ;76 ;up scroll
sub ebp,[scrollbutsize]
cmp ebp,0
jl menu_test
jl menu_test
mov [mousey],ebp
 
push eax ebx edx
258,7 → 284,7
mov [filelistsize],eax
mov ebx,eax
cmp ebx,[listsize] ;filelistsize in ebx
ja notusescrl
ja notusescrl
 
mov edx,0
mov eax,[listysize]
287,7 → 313,7
sub ebx,[filelistsize]
cmp eax,ebx
jnae no_cor
mov eax,[listsize] ;correction for full dirs (1000 files)
mov eax,[listsize] ;correction for full dirs (1000 files)
sub eax,[filelistsize]
no_cor:
mov [filecursor],eax
309,7 → 335,7
sub esi,ebp
inc esi ;correction
cmp ebx,esi
ja menu_test ;still
ja menu_test ;still
oks:
 
mov [flick],1
319,7 → 345,7
cmp [pmenu_draw],1 ;if menu is show, update all
jne still
mov [pmenu_draw],0
jmp red ;update all window
jmp red ;update all window
 
;this function not use in dialog when poup menu's is not used
;in dialog's
327,7 → 353,7
;===================
; Test keyboard
;===================
key: ; key
key: ; key
mov eax,2
int 0x40
cmp dword [focus],0
357,19 → 383,19
jmp kfad
no_k_ent:
cmp ah,key_Bspace
je back
je back
cmp ah,key_F2
je viewset
je viewset
cmp ah,key_F3
je textopen
je textopen
cmp ah,key_F5
je copy_to_clip
je copy_to_clip
cmp ah,key_F6
je paste_from_clip
je paste_from_clip
cmp ah,key_F11
je edit_prompt
je edit_prompt
cmp ah,key_F12
je update
je update
jmp still
 
; test input string
397,7 → 423,7
 
mov ecx,[cursor]
cmp ecx,0
je still
je still
dec ecx
mov ebp,[cursor]
lobsp:
423,7 → 449,7
 
mov ebp, [cursor]
cmp ebp,100
ja still
ja still
 
mov byte [path+ebp],ah
inc dword [cursor]
436,12 → 462,12
;Test on mouse button
;-----------------------------
 
button: ; button
button: ; button
mov eax,17
int 0x40
 
cmp ah,2 ;Edit prompt line?
je edit_prompt
cmp ah,2 ;Edit prompt line?
je edit_prompt
 
cmp ah,4
jne no_filelist
451,7 → 477,7
mov ebx,1
int 0x40
mov ebx,eax
shr eax,16 ;x
shr eax,16 ;x
and ebx,0xffff ;y
 
sub ebx,[listy] ;80
459,10 → 485,10
 
mov ecx,[listx]
cmp eax,ecx
jl still
jl still
add ecx,[listxsize]
cmp eax,ecx
jg still
jg still
 
filexadd:
 
492,9 → 518,9
lll2:
mov al,byte [path+esi]
cmp al,byte 0 ;' '; '/'
je fis2
je fis2
cmp al,byte ' '; '/'
je fis2
je fis2
inc esi
cmp esi,100
jna lll2
508,10 → 534,10
inc esi
mov ebp,8
 
los: ;directory extension bug fix
los: ;directory extension bug fix
mov al,[convinfo+edi]
cmp al,' '
jz skip_name_space
jz skip_name_space
mov [path+esi],al
inc esi
skip_name_space:
522,12 → 548,12
cmp byte [convinfo+edi],'.'
jnz dir_name_end
cmp byte [convinfo+edi+1],' '
jz dir_name_end
jz dir_name_end
mov ebp,4
dir_ext_char:
mov al,[convinfo+edi]
cmp al,' '
jz dir_name_end
jz dir_name_end
mov [path+esi],al
inc esi
inc edi
556,17 → 582,17
;Savetest
savetest:
cmp byte [dlg_type],'S'
je savetest_yes
je savetest_yes
jmp still
savetest_yes:
mov ecx,100
savetestloop:
cmp [path+ecx],byte 0
je next_byte
je next_byte
cmp [path+ecx],byte 32
je next_byte
je next_byte
cmp [path+ecx],byte '.'
je openf ;it's file
je openf ;it's file
; cmp [path+ecx],byte '/'
; je no_save ;it's dir
next_byte:
653,7 → 679,7
jmp run
nojv:
cmp eax,'.JPE'
je jpg_jpe
je jpg_jpe
cmp eax,'.GIF'
jne nojv1
mov ebx,gifview
664,6 → 690,11
mov ebx,ac97wav
jmp run
nojv12:
cmp eax,'.MID'
jne nojv13
mov ebx,midamp
jmp run
nojv13:
cmp eax,'.BMP'
jne nobv
mov ebx,bmpview
676,6 → 707,11
jmp run
nopngv:
; //// Willow
cmp eax,'.RTF'
jne nortf
mov ebx,rtfread
jmp run
nortf:
cmp eax,'.ASM'
je edit
cmp eax,'.TXT'
682,8 → 718,6
je edit
cmp eax,'.INC'
je edit
cmp eax,'.DAT'
je edit
jmp still
edit:
mov ebx,editor
729,16 → 763,16
 
no_filelist:
 
cmp ah,5 ;OPEN/SAVE button
je kfad
cmp ah,5 ;OPEN/SAVE button
je kfad
 
cmp ah,6 ;Scroll up
cmp ah,6 ;Scroll up
jne no_scrlup
mov ebx,1
jmp up
no_scrlup:
 
cmp ah,7 ;Scroll down
cmp ah,7 ;Scroll down
jne no_scrldown
mov ebx,1
jmp down
768,7 → 802,7
xfis2:
mov al,byte [path+esi]
cmp al,byte ' '
je xaa2
je xaa2
inc esi
cmp esi,12*20
jnae xfis2
779,7 → 813,7
mul ebx
mov edi,eax
cmp [convinfo+edi+26],dword 'FOL '
je still
je still
mov ecx,12*20
xlopt:
mov al,[path+ecx]
822,7 → 856,7
jmp still
no_view:
 
cmp ah,12 ;move back
cmp ah,12 ;move back
jne no_back
back:
mov esi,12*20
838,7 → 872,7
fis:
mov al,byte [path+esi]
cmp al,byte '/'
je aa
je aa
mov [path+esi],byte 0 ;' '
dec esi
jnz fis
852,9 → 886,9
jmp still
 
no_back:
cmp ah,13 ;string up?
cmp ah,13 ;string up?
jne no_up
mov ebx,1 ;step
mov ebx,1 ;step
up:
mov [downstop],0
sub [filecursor],ebx
864,18 → 898,18
cr_ok:
jmp draw_wd
no_up:
cmp ah,14 ;string down?
cmp ah,14 ;string down?
jne no_dn
mov ebx,1 ;step
mov ebx,1 ;step
down:
cmp [downstop],1
je no_dn
je no_dn
add [filecursor],ebx
jmp draw_wd
no_dn:
 
cmp ah,15
jne no_copyclip ;copy to clipboard
jne no_copyclip ;copy to clipboard
copy_to_clip:
mov ebx,param_area ;clipfilp
mov eax,32
892,7 → 926,7
wfis2:
mov al,byte [path+esi]
cmp al,byte ' '
je waa2
je waa2
inc esi
cmp esi,12*20
jnae wfis2
903,7 → 937,7
mul ebx
mov edi,eax
cmp [convinfo+edi+26],dword 'FOL '
je still
je still
mov ecx,12*20
wlopt:
mov al,[path+ecx]
960,7 → 994,7
zfis2:
mov al,byte [destpath+esi]
cmp al,byte ' '
je zaa2
je zaa2
inc esi
cmp esi,100
jnae zfis2
973,7 → 1007,7
qlll2:
mov al,byte [sourcepath+edi]
cmp al,byte '.'
je qfis2
je qfis2
inc edi
cmp edi,100
jnae qlll2
985,7 → 1019,7
cfname:
mov al,[sourcepath+edi]
cmp al,byte ' '
je dar
je dar
mov [destpath+esi],al
inc esi
dar:
1008,15 → 1042,15
 
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 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 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 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 edx,destpath ; pointer to text beginning
mov esi,100 ;12*20 ; text length
int 0x40
no_outpath:
1029,7 → 1063,7
jmp update ;still
no_clippaste:
 
cmp ah,19 ;Delete from floppy
cmp ah,19 ;Delete from floppy
delete_file:
jne no_delt
cmp dword [path],'/RD/'
1056,8 → 1090,8
jmp update
no_delt:
 
cmp ah,20 ;I - Help
je help_scr
cmp ah,20 ;I - Help
je help_scr
 
cmp ah,22
jne no_headfile
1091,22 → 1125,22
je kfad
 
cmp ah,31
je copy_to_clip ;Copy
je copy_to_clip ;Copy
 
cmp ah,32
je paste_from_clip ;Paste
je paste_from_clip ;Paste
 
cmp ah,33
je delete_file ;Delte
je delete_file ;Delte
 
cmp ah,34
je textopen ;Edit in Tinypad
je textopen ;Edit in Tinypad
 
cmp ah,37
je exit
je exit
 
;VIEW MENU
cmp ah,40 ;Sort by name show del
cmp ah,40 ;Sort by name show del
jne no_sn
; mov dword [viewmode],0
and dword [viewmode],100b
1113,33 → 1147,33
jmp update
no_sn:
 
cmp ah,41 ;Sort by extension show del
cmp ah,41 ;Sort by extension show del
jne no_se
and dword [viewmode],1101b
or dword [viewmode],0001b
or dword [viewmode],0001b
jmp update
no_se:
 
cmp ah,42 ;Sort by size show del
cmp ah,42 ;Sort by size show del
jne no_ss
and dword [viewmode],1110b
or dword [viewmode],0010b
or dword [viewmode],0010b
jmp update
no_ss:
 
cmp ah,43 ;Sort by date show del
cmp ah,43 ;Sort by date show del
jne no_sd
or dword [viewmode],0011b
or dword [viewmode],0011b
jmp update
no_sd:
 
cmp ah,44 ;Show del files
cmp ah,44 ;Show del files
jne no_ds
or dword [viewmode],0100b
or dword [viewmode],0100b
jmp update
no_ds:
 
cmp ah,45 ;Fade del files
cmp ah,45 ;Fade del files
jne no_df
and dword [viewmode],11111011b
jmp update
1146,16 → 1180,16
no_df:
 
;HELP MENU
cmp ah,50 ;Help?
je help_scr
cmp ah,50 ;Help?
je help_scr
 
cmp ah,51 ;Info?
je info_scr
cmp ah,51 ;Info?
je info_scr
 
cmp ah,83
ja no_hd_part
ja no_hd_part
cmp ah,80
jb no_hd_part
jb no_hd_part
mov ecx,0
sub ah,80
inc ah
1166,18 → 1200,18
 
no_hd_part:
 
cmp ah,1 ; test on exit button
je exit
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
; mov eax,58
; mov ebx,MRUfile
; mov dword[ebx+8],255
; inc dword[ebx]
; int 0x40
; //// Willow
mov eax,-1
int 0x40
1230,7 → 1264,7
mov ecx,cl_Black
mov edx,ebp ;help_text
 
outlab: ;out labels
outlab: ;out labels
mov eax,4
mov esi,40
helploo:
1299,25 → 1333,25
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
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
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]
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]
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
or edx,0x03ffffff;000000
int 0x40
 
;Get proc info
1328,7 → 1362,7
 
mov eax,[procinfo.x_size]
cmp eax,66
jg temp12345
jg temp12345
ret
temp12345:
 
1363,9 → 1397,9
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
mov eax,[sc.grab_text] ; color of text RRGGBB
or eax,0x10000000
glabel 8,8,'SYSTEM X-TREE FILE BROWSER',eax
 
;Draw buttons headers
mov eax,8
1372,7 → 1406,7
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 edi,3 ;draw 13 button's
mov esi,0x00339933
int 0x40
dec edi
1388,7 → 1422,7
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 edi,4 ;draw 13 button's
mov esi,0x00339933
int 0x40
dec edi
1400,10 → 1434,10
jnz nextpbut
 
;DRAW PARTITON TEXT
label 341,25,'1234',cl_White;Black
glabel 341,25,'1234',cl_White;Black
 
;File STRING
label 8,25,' FILE VIEW INFO ', ;cl_White ;Black
glabel 8,25,' FILE VIEW INFO ', ;cl_White ;Black
 
;BlackLine
mov eax,[procinfo.x_size]
1422,20 → 1456,20
 
;Set logo img
setimg 34,88,logoinfimg
label 20,165,'SYSTEM X-TREE',cl_Black
glabel 20,165,'SYSTEM X-TREE',cl_Black
add ebx,10
label ,,'FOR MENUETOS',
glabel ,,'FOR MENUETOS',
 
add ebx,9*65536+20
label ,,'welcome to',cl_Green
glabel ,,'welcome to',cl_Green
add ebx,-15*65536+10
label ,,'www.menuetos.org',cl_Green
glabel ,,'www.menuetos.org',cl_Green
 
; label ,,'Create by',cl_Green
; glabel ,,'Create by',cl_Green
; add ebx,10
; label ,,' Pavlushin',
; glabel ,,' Pavlushin',
; add ebx,10
; label ,,' Evgeni',
; glabel ,,' Evgeni',
 
 
;Draw head->file buttons
1444,7 → 1478,7
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 edi,8 ;draw 4 button's
mov esi,cl_Grey
call menubutton
no_drawhf:
1455,7 → 1489,7
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 edi,6 ;draw 4 button's
mov esi,cl_Grey
call menubutton
no_drawhv:
1466,7 → 1500,7
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 edi,2 ;draw 2 button's
mov esi,cl_Grey
call menubutton
no_drawhi:
1485,7 → 1519,7
mov ecx,29*65536+15 ;start pos y
isb3:
mov edx,8;+1000000000000000000000000000000b ;spoke butt
mov edi,13 ;draw 13 button's
mov edi,13 ;draw 13 button's
mov esi,cl_Grey
int 0x40
dec edi
1522,7 → 1556,7
mov [urlxsize],eax
mov [urlysize],12
 
label 20,57,"URL:",cl_Black
glabel 20,57,"URL:",cl_Black
 
;Out view mode info
mov eax,[viewmode]
1541,9 → 1575,9
jmp isb5
 
head_dlg: db 'OPEN FILE'
db 'SAVE FILE'
db 'SAVE FILE'
but_dlg: db 'OPEN'
db 'SAVE'
db 'SAVE'
 
nob5:
 
1556,18 → 1590,18
mov [urlxsize],eax
mov [urlysize],12
 
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
jne no_openh
mov edx,head_dlg ;draw in head OPEN FILE
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
cmp byte [dlg_type],'S' ;if byte S - is Save dialog
jne no_saveh
mov edx,head_dlg+9 ;draw in head SAVE FILE
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 ecx,[sc.grab_text] ; color of text RRGGBB
or ecx,0x10000000
mov esi,9
mov eax,4
int 0x40
1598,14 → 1632,14
shl ebx,16
add ebx,eax
 
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
jne no_openb
mov edx,but_dlg ;draw in head OPEN FILE
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
cmp byte [dlg_type],'S' ;if byte S - is Save dialog
jne no_saveb
mov edx,but_dlg+4 ;draw in head SAVE FILE
mov edx,but_dlg+4 ;draw in head SAVE FILE
out_labx:
mov ecx,cl_White
mov esi,4
1666,7 → 1700,7
int 0x40
 
; OUT TEXT
mov eax,[urlxsize] ;calculating text leight
mov eax,[urlxsize] ;calculating text leight
sub eax,8
mov ebx,6
div ebx
1676,9 → 1710,9
shl ebx,16
add ebx,[urly]
add ebx,3*65536+2
mov eax,4 ; function 4 : write text to window
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
mov edx,path ; pointer to text beginning
int 0x40
 
cmp [flick],2
1718,8 → 1752,8
 
mov edx,0
mov ebx,eax
cmp ebx,[listsize] ;filelistsize in ebx
ja notusescroll
cmp ebx,[listsize] ;filelistsize in ebx
ja notusescroll
;usescroll
mov eax,[listysize]
sub eax,[scrollbutsize]
1751,7 → 1785,7
mov ebx,[listx]
shl ebx,16
add ebx,[listxsize]
sub ebx,15 ;right free zone
sub ebx,15 ;right free zone
sub ebx,[scrollsize]
mov ecx,[listy]
shl ecx,16
1775,7 → 1809,7
mov ecx,[listy]
shl ecx,16
add ecx,[scrollbutsize]
dec ecx ;correction
dec ecx ;correction
mov eax,8
mov edx,6+1000000000000000000000000000000b ;spoke butt
int 0x40
1799,7 → 1833,7
popad
 
 
dec ecx ;correction
dec ecx ;correction
mov edx,7+1000000000000000000000000000000b ;spoke butt
mov eax,[listysize]
sub eax,[scrollbutsize]
1848,7 → 1882,7
mov [filelistsize],eax ;dword 40
 
; OUT FILE DATA
mov eax,[filecursor] ;calc cursor position
mov eax,[filecursor] ;calc cursor position
mov ebx,62
mul ebx
 
1868,11 → 1902,13
mov eax,[edx+8]
;Color set
cmp eax,dword '.TXT' ;text's blue
je itx
je itx
cmp eax,dword '.INC'
je itx
je itx
cmp eax,dword '.ASM'
je itx
je itx
cmp eax,dword '.RTF'
je itx
jmp nt
itx:
mov ecx,0x00446666
1879,19 → 1915,21
jmp cset
nt:
cmp eax,dword '.BMP' ;picture's pure
je ipic
je ipic
cmp eax,dword '.JPG'
je ipic
je ipic
cmp eax,dword '.JPE'
je ipic
je ipic
cmp eax,dword '.GIF'
je ipic
je ipic
; //// Willow
cmp eax,dword '.PNG'
je ipic
je ipic
; //// Willow
cmp eax,dword '.WAV'
je ipic
je ipic
cmp eax,dword '.MID'
je ipic
jmp np
ipic:
mov ecx,0x00226688
1929,23 → 1967,30
push rdico+8
jmp out_ico
no_rdico:
cmp [edx+9],dword 'FLOP'
jne no_fdico
push rdico+8
jmp out_ico
no_fdico:
push folico+8
jmp out_ico
no_folico:
cmp [edx+8],dword '.BMP'
je is_imgico
je is_imgico
cmp [edx+8],dword '.JPG'
je is_imgico
je is_imgico
cmp [edx+8],dword '.JPE'
je is_imgico
je is_imgico
cmp [edx+8],dword '.GIF'
je is_imgico
je is_imgico
; //// Willow
cmp [edx+8],dword '.PNG'
je is_imgico
je is_imgico
; //// Willow
cmp [edx+8],dword '.WAV'
je is_imgico
je is_imgico
cmp [edx+8],dword '.MID'
je is_imgico
jmp no_imgico
is_imgico:
push imgico+8
1952,16 → 1997,19
jmp out_ico
no_imgico:
cmp [edx+8],dword '.ASM'
je is_asmincico
je is_asmincico
cmp [edx+8],dword '.INC'
je is_asmincico
je is_asmincico
jmp no_asmincico
is_asmincico:
push asmincico+8
jmp out_ico
no_asmincico:
cmp [edx+8],dword '.RTF'
je @f
cmp [edx+8],dword '.TXT'
jne no_txtico
@@:
push txtico+8
jmp out_ico
no_txtico:
1998,7 → 2046,7
 
dec [filelistsize]
cmp [filelistsize],dword 0
je extloo
je extloo
 
dec ebp
jnz loo
2024,14 → 2072,14
jmp no_drawhftext
 
file_text_label:
db ' Open '
db ' Copy '
db ' Paste '
db ' Delete '
db ' Tinypad '
db ' Edit '
db ' '
db ' Exit '
db ' Open '
db ' Copy '
db ' Paste '
db ' Delete '
db ' Tinypad '
db ' Edit '
db ' '
db ' Exit '
 
no_drawhftext:
 
2049,12 → 2097,12
jmp no_drawhvtext
 
view_text_label:
db ' Name sort '
db ' Ext. sort '
db ' Size sort '
db ' Date sort '
db ' Show DEL '
db ' Fade DEL '
db ' Name sort '
db ' Ext. sort '
db ' Size sort '
db ' Date sort '
db ' Show DEL '
db ' Fade DEL '
 
no_drawhvtext:
 
2073,8 → 2121,8
jmp no_drawhitext
 
info_text_label:
db ' Help '
db ' About '
db ' Help '
db ' About '
 
no_drawhitext:
 
2085,8 → 2133,8
jmp still
no_flick:
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
 
ret
2093,8 → 2141,8
 
;FILE LIST PARAMETRS
 
listx dd 15
listy dd 72
listx dd 15
listy dd 72
listxsize dd 350
listysize dd 41
 
2110,8 → 2158,8
 
;URL LINE PARAMETRS
 
urlx dd 10
urly dd 20
urlx dd 10
urly dd 20
urlxsize dd 350
urlysize dd 12
 
2205,7 → 2253,7
;STEP 2 TEST ON HD OR PARTITION
cmp [path],byte '/'
je nstep
mov ecx,61+62
mov ecx,61+62*5
loxhd:
mov al,[hdimg+ecx]
mov [convinfo+ecx],al
2216,7 → 2264,53
nstep:
cmp [path+3],byte '/'
je nstep2
cmp [path+4],byte '/'
je nstep2
cmp [path+1],word 'RD'
jne nostep_RD
mov ecx,61
jmp loxpt
nostep_RD:
cmp [path+1],word 'FD'
jne nostep_FD
mov ecx,61+62
jmp loxpt
nostep_FD:
cmp [path+1],dword 'HD0'
jne nostep_HD0
mov cl,[table_area+2]
movzx ecx,cl
imul ecx,62
dec ecx
jmp loxpt
nostep_HD0:
cmp [path+1],dword 'HD1'
jne nostep_HD1
mov cl,[table_area+3]
movzx ecx,cl
imul ecx,62
dec ecx
jmp loxpt
nostep_HD1:
cmp [path+1],dword 'HD2'
jne nostep_HD2
mov cl,[table_area+4]
movzx ecx,cl
imul ecx,62
dec ecx
jmp loxpt
nostep_HD2:
cmp [path+1],dword 'HD3'
jne nostep_HD3
mov cl,[table_area+5]
movzx ecx,cl
imul ecx,62
dec ecx
jmp loxpt
nostep_HD3:
 
mov ecx,61+62 ;+496
 
loxpt:
mov al,[ptimg+ecx]
mov [convinfo+ecx],al
2256,18 → 2350,18
mov dword [blocksread],ebx ; for quick resorting
 
cmp eax,5
je end_of_dir
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
glabel 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
glabel 10,10,'Unknow file system',cl_Red+font_Big
jmp end_of_dir
no_unk_fs:
 
2284,7 → 2378,7
 
mov edi,fileinfo+11
 
pushad ; clear
pushad ; clear
mov al,32
mov ecx,58
sub edi,11
2292,7 → 2386,7
rep stosb
popad
 
mov cl,[esi] ; end of entries ?
mov cl,[esi] ; end of entries ?
cmp cl,6
jnz noib0
 
2305,9 → 2399,9
 
mov cl,[esi+0]
cmp cl,0xe5
je yesdelfil
je yesdelfil
 
mov cl,[esi+11] ; long fat32 name ?
mov cl,[esi+11] ; long fat32 name ?
cmp cl,0xf
jnz noib1
 
2318,13 → 2412,13
 
noib1:
 
mov eax,'DAT ' ; data or .. ?
mov eax,'DAT ' ; data or .. ?
 
mov cl,[esi+0] ; deleted file
mov cl,[esi+0] ; deleted file
cmp cl,0xe5
je yesdelfil
je yesdelfil
cmp cl,0x0
je yesdelfil
je yesdelfil
jmp nodelfil
yesdelfil:
mov eax,'DEL '
2332,9 → 2426,9
 
nodelfil:
 
mov cl,[esi+11] ; folder
mov cl,[esi+11] ; folder
and cl,0x10
jz ffile
jz ffile
mov eax,'FOL '
mov [edi+26],eax
jmp nosize
2341,12 → 2435,12
ffile:
 
; Asko patch for v79
mov cl,[esi+11] ; fold
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
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
2354,7 → 2448,7
 
mov [edi+26],eax
 
pusha ; size
pusha ; size
mov eax,[esi+28]
mov esi,edi
add esi,37
2366,7 → 2460,7
add dl,48
mov [esi],dl
test eax,eax
jz zernum
jz zernum
dec esi
loop newnum
zernum:
2373,11 → 2467,11
popa
nosize:
 
pusha ; date
pusha ; date
mov [edi+17],dword '. .'
 
movzx eax,word [esi+24]
shr eax,9 ; year
shr eax,9 ; year
add eax,1980
mov ecx,4
newdel1:
2391,7 → 2485,7
jnz newdel1
 
movzx eax,word [esi+24]
shr eax,5 ; month
shr eax,5 ; month
and eax,0x0f
mov ecx,2
newdel2:
2420,7 → 2514,7
popa
 
 
pusha ; number
pusha ; number
mov eax,edx
sub eax,4096
neg eax
2429,25 → 2523,25
mov ebx,10
div ebx
add dl,48
mov [edi+43],dl ;0001
mov [edi+43],dl ;0001
xor edx,edx
div ebx
add dl,48
mov [edi+42],dl ;0010
mov [edi+42],dl ;0010
xor edx,edx
div ebx
add al,48
add dl,48
mov [edi+41],dl ;0100
mov [edi+41],dl ;0100
mov [edi+40],byte 0 ;1000
popa
 
mov ecx,8 ; first 8
mov ecx,8 ; first 8
cld
rep movsb
mov [edi],byte '.'
inc edi
mov ecx,3 ; last 3
mov ecx,3 ; last 3
cld
rep movsb
 
2464,25 → 2558,25
 
; Delete del, eoe, f32 and another head-names
cmp [viewmode],3 ;0-3 no outdel
ja del_out
ja del_out
cmp [edx+26],dword 'DEL '
je nextfl
je nextfl
del_out:
cmp [edx+26],dword 'DEL '
jne no_del
cmp [edx],dword 0 ;431 ;435 ;484 +10% speed
je nextfl
je nextfl
no_del:
cmp [edx+26],dword 'EOE '
je nextfl
cmp [edx+26],dword 'F32 ' ;F32 not useles
je nextfl
je nextfl
cmp [edx+26],dword 'F32 ' ;F32 not useles
je nextfl
cmp [edx],dword '. '
je nextfl
je nextfl
cmp [edx],dword '.. '
je nextfl
je nextfl
cmp [edx],dword 'FIRS'
je nextfl
je nextfl
 
; ---------_______-------_______ --------_________-----------
; SORT by name and del deletet files or f32 headers from list
2498,14 → 2592,14
 
ftestname:
cmp byte [fileinfo+11+26],'F'
je F
je F
cmp byte [fileinfo+11+26],'D'
je D
je D
jmp add_element
D: cmp byte [convinfo+esi+26],'D'
je add_element
je add_element
cmp byte [convinfo+esi+26],'F'
je skipfile
je skipfile
jmp add_element
F: cmp byte [convinfo+esi+26],'D'
je writenow
2516,8 → 2610,8
add_element:
mov al,[fileinfo+ebx+11]
cmp al,[convinfo+esi+ebx]
je equal
jb writenow
je equal
jb writenow
skipfile:
add esi,62
mov ebx,[start] ;0
2526,11 → 2620,11
equal:
inc ebx
cmp ebx,[x0]
je writefile
je writefile
cmp ebx,[x1]
je x1p
je x1p
cmp ebx,[x2]
je x2p
je x2p
cmp ebx,[x3]
jae x3p
jmp add_element
2607,30 → 2701,57
 
; 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?
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?
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
mousex dd 0
mousey dd 0
blocksread dd 0
listsize dd 0 ;num of files in directory
temp dd 0
temp dd 0
readblock dd 1
dlg_type db 0 ;S-save O-open
 
;01234567890123456789012345678901234567890123456789012345678912
hdimg db 'HD HARDDISK FOL '
db 'RD RAMDISK FOL '
hdimg1 db 'HD0 HARDDISK FOL '
hdimg2 db 'HD1 HARDDISK FOL '
hdimg3 db 'HD2 HARDDISK FOL '
hdimg4 db 'HD3 HARDDISK FOL '
 
;01234567890123456789012345678901234567890123456789012345678912
hdimg db 'RD RAMDISK FOL '
db 'FD FLOPPYDISK FOL '
db ' '
db ' '
db ' '
db ' '
 
ptimg db '1 FIRST PARTITION FOL '
db '2 SECOND PARTITION FOL '
db '3 NEXT PARTITION FOL '
db '4 NEXT PARTITION FOL '
db '5 NEXT PARTITION FOL '
db '6 NEXT PARTITION FOL '
db '7 NEXT PARTITION FOL '
db '8 NEXT PARTITION FOL '
db '9 NEXT PARTITION FOL '
db '10 NEXT PARTITION FOL '
db '11 NEXT PARTITION FOL '
db '12 NEXT PARTITION FOL '
db '13 NEXT PARTITION FOL '
db '14 NEXT PARTITION FOL '
db '15 NEXT PARTITION FOL '
db '16 NEXT PARTITION FOL '
db '17 NEXT PARTITION FOL '
db '18 NEXT PARTITION FOL '
db '19 NEXT PARTITION FOL '
db '20 NEXT PARTITION FOL '
 
modetext:
;0123456789012345
2643,29 → 2764,31
db 'DEL SORT SIZE 6' ;type sort
db 'DEL SORT DATE 7'
 
dirlen dd 0x1
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
;MRUfile:
; dd 0x0
; dd 0x0
; dd 0x1
; dd path
; dd tempzone
; db '/RD/1/MRU.LST',0
; //// Willow
 
;Name of programs
editor db 'TINYPAD '
editor db 'TINYPAD '
bmpview db 'MV '
jpgview db 'JPEGVIEW '
gifview db 'GIFVIEW '
ac97wav db 'AC97WAV '
copyrfile db 'COPYR '
rtfread db 'RTFREAD '
; //// Willow
pngview db '@RCHER '
; //// Willow
midamp db 'MIDAMP '
 
fileinfo_start:
dd 16
2674,30 → 2797,34
dd 0
dd tempzone ;0x10000
open_path:
times 256 db 0 ;run app path
times 256 db 0 ;run app path
 
fileinfoblock:
dd 0x0 ; read
dd 0x0 ; first block
dd 0x1 ; number of blocks to read
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
dd outinfo ; ret offset
dd tempzone ; work size of sytemram
path:
times 256 db 0 ;path
times 256 db 0 ;path
 
table_area:
rb 10
 
;rb 256
but_file:
file 'systr12.GIF'
butimg:
rb 400*16*3+8 ;buttons (left pice of picture)
rb 400*16*3+8 ;buttons (left pice of picture)
logoimg:
rb 70*16*3+8 ;logo (right pice of picture)
rb 70*16*3+8 ;logo (right pice of picture)
logoinfimg:
rb 60*60*3+8 ;logoinfo (right pice of picture)
rb 60*60*3+8 ;logoinfo (right pice of picture)
upsb:
rb 8*9*3+8 ;up scroll button
rb 8*9*3+8 ;up scroll button
dnsb:
rb 8*9*3+8 ;down scroll button
rb 8*9*3+8 ;down scroll button
 
;ICONS RESERVE AREA
hdico:
2719,8 → 2846,8
execico:
rb 12*9*3+8
 
tempimg: ;reserve ram for images
rb 400*100*3+8 ;for picture
tempimg: ;reserve ram for images
rb 400*100*3+8 ;for picture
rb 8000
 
gif_hash:
/programs/fs/sysxtree/trunk/xtree.bmp
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/fs/sysxtree/trunk/xtree.ico
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/fs/sysxtree/trunk/xtreeinf.txt
0,0 → 1,87
SYSTEM X-TREE
 
The new file browser with support sorting file by name, extension, size, date
Develop by Pavlushin Evgeni for Menuet OS e-mail: waptap@mail.ru
site (slow update) : www.deck4.narod.ru
 
~~~Manuals~~~
 
Copy program COPYR to ramdisk !!! for work feuters - copy and paste file's
 
~~~Keys~~~
PageUp\PageDown , Up Arrow/Down Arrow -Navigation
Blackspace - goto to previous folder
Enter - enter to folder or run/view/edit file
F2 - change sort mode (name,extension,size,date,sohw/fade del files)
F3 - view file in notepad
F5 - copy file to clipboard
F6 - paste file from clipboard
F12 - update source
 
SYSTEM X-TREE
 
Íîâûé ôàéëîâûé áðàóçåð ïîäåððæèâàþùèé ñîðòèðîâêó ôîèëîâ ïî èìåíè,
ðàñøèðåíèþ, ðàçìåðó è äàòå.
Ðàçðàáîòàë Ïàâëþøèí Åâãåíèé äëÿ Menuet OS e-mail: waptap@mail.ru
ñàéò (ìåäëåííî îáíîâëÿåòñÿ) : www.deck4.narod.ru
 
~~~Èíñòðóêöèÿ~~~
 
Ñêîïèðóéòå ïðîãó COPYR íà ramdisk !!! äëÿ âîçìîæíîñòè êîïèðîâàòü è âñòàâëÿòü ôàèëû
 
~~~Êëàâèøè~~~
PageUp\PageDown , Up Arrow/Down Arrow - Íàâèãàöèÿ
Blackspace - Ïåðåéòè ê ïðåäèäóùåé ïàïêå
Enter - Çàéòè â ïàïêó èëè çàïóñòèòü/ïðîñìîòðåòü/ðåäàêòèðîâàòü ôàèë
F2 - Ñìåíèòü ðåæèì ñîðòèðîâêè (Ïî èìåíè,ðàñøèðåíèþ,ðàçìåðó,äàòå,ïîêàçûâàòü óäàë. ôàèëû)
F3 - Ïðîñìîòðåòü ôàèë â òåêñòîâîì áëîêíîòå
F5 - êîïèðîâàòü ôàèë â clipboard
F6 - âñòàâèòü ôàèë èç clipboard'à
F12 - Îáíîâèòü ñîäåðæèìîå îêíà
 
Translate of russian documentation for xtree
Sorry i'm write in English very poor.
 
The new concept of dialogues, now dialogues
is made do not use file system for an exchange
with the client, and use IPC - Inter process comunication
(Support since 52 Versions).
52 Version support IPC of dialogues
53 Version is added protection dialogs from
external processes.
Test with TESTOPDG 54 Version IPC protection it is
improved Test with TESTOPD2 That testing dialogues
copy SYSTRE54 on ramdisk under name SYSXTREE and start TESTOPD2
 
In window TESTOPD2 the following information is displayed:
In heading at the left???
Below parameters transferred SYSTEM XTREE,
namely PID TESTOPD2, the blank and
type of dialogue of one byte (O-Open, S-Save)
is even lower PID SYSTEM XTREE and current num of the
started processes After file will be open in dialogue,
it will be displayed in window TESTOPD2 below heading,
and dialogue will be closed.
 
Protection TESTOPD2:
1) If at start SYSTEM XTREE from XTREE don't it is
received it PID during 2 sec, 54 version XTREE or
not XTREE at all means on ramdisk not, TESTOPD2
comes to the end.
2) If worked SYSTEM XTREE it was closed not
having sent path to file (itself or from CPU programs)
TESTOPD2 comes to the end since parameters from XTREE
have not been received and since XTREE is closed
that already and don't are received.
 
;78Ver input in dir whith extension (for example TEST.DIR\XT\) bug deleted
;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
;sort type in headmenu bug del
/programs/fs/sysxtree/trunk/xtreinfo.txt
0,0 → 1,80
Ñäåëàíà íîâàÿ êîíöåïöèÿ äèàëîãîâ, òåïåðü äèàëîãè íå èñïîëüçóþò
ôàéëîâóþ ñèñòåìó äëÿ îáìåíà ñ êëèåíòîì, à èñïîëüçóþò IPC -
Inter process comunication (Ïîääåðæêà íà÷èíàÿ ñ 52 Âåðñèè).
 
52 Âåðñèÿ ïîääåðæêà IPC äèàëîãîâ
53 Âåðñèÿ äîáàâëåíà çàùèòû äèîëîãîâ îò âíåøíèõ ïðîöåññîâ.
Òåñòèðóéòå ñ TESTOPDG
 
54 Âåðñèÿ IPC çàùèòà óëó÷øåíà
Òåñòèðóéòå ñ TESTOPD2
 
×òî-áû ïðîòåñòèòü äèàëîãè ñêîïèðóéòå SYSTRE54 íà ðàìäèñê ïîä
èìåíåì SYSXTREE è çàïóñòèòå TESTOPD2
 
 îêíå TESTOPD2 îòîáðàæàåòñÿ ñëåäóþùàÿ èíôîðìàöèÿ:
 çàãîëîâêå ñëåâà ???
Íèæå ïàðàìåòðû ïåðåäàííûå SYSTEM XTREE , à èìåííî PID TESTOPD2,
ïðîáåë è òèï äèàëîãà îäèí áàéò (O-Open,S-Save)
Åùå íèæå PID SYSTEM XTREE è òåêóùåå êîë-âî çàïóùåííûõ ïðîöåññîâ
 
Ïîñëå òîãî êàê ôàèë áóäåò îòêðûò â äèàëîãå, îí îòîáðàçèòñÿ â
îêíå TESTOPD2 íèæå çàãîëîâêà, à äèàëîã çàêðîåòñÿ.
 
Çàùèòà TESTOPD2:
1) Åñëè ïðè çàïóñêå SYSTEM XTREE îò XTREE íåáûë ïîëó÷åí åãî PID
â òå÷åíèè 2 ñåê, çíà÷èò íà ðàìäèñêå íå 54 âåðñèÿ XTREE èëè íå XTREE
âîâñå, TESTOPD2 çàâåðøàåòñÿ.
2) Åñëè çàïóùåíûé SYSTEM XTREE çàêðûëñÿ íå îòîñëàâ ïóòüôàèëà(ñàì èëè
îò CPU ïðîãè),òî TESTOPD2 çàâåðøàåòñÿ ò.ê. ïàðàìåòðû îò XTREE íå
áûëè ïîëó÷åíû à ò.ê. XTREE çàêðûò òî óæå è íåáóäóò ïîëó÷åíû.
 
68 Âåðñèÿ
 
Çà äâà äíÿ ÿ äîáèëñÿ ïðèëè÷íûõ óñïåõîâ ïî ìîäåðíèçàöèè X-TREE
È òàê øî íîâîãî...
 
60Ver Òåïåðü FileList è â äèàëîãå è â áðàóçåðå âûâîäèòñÿ îäíîé
ïðîöåäóðîé íóæíî òîëüêî óêàçàòü êîîðäèíàòû è ðàçìåð ëèñòà îòñëåæèâàíèå
è ïðîðèñîâêà ñêðîëëáàðà âûïîëíÿåòñÿ ïðîöåäóðîé.
 
61Ver Íàñòðîèë êîîðäèíàòû ÔàèëËèñòà
 
62Ver Äàáàâèë ïàíåëüêó ñëåâà â îêíå (êàê â Âèíäàõ) äëÿ êðàñîòû
 
63Ver Èçìåíèë ñêèí è äîáàâèë êàðòèíêè íà êíîïî÷êè ñêðîëëáàðà
 
64Ver Óäàëèë ñòàðûé äîáðûé áàã - îøèáêà çàïóñêà ïðîã ñ HD êîòîðàÿ
âûíîñèò Ìåîñ íàôèã íå èñêëþ÷àþ, ÷òî ýòîò áàã óäàëåí íå äî êîíöà
 
65Ver Èçìåíèë îáðàáîòêó è ïðîðèñîâêó ñêðîëëà
 
66Ver Äîâåë äî êîíöà ïðîðèñîâêó ñêðîëëà, äîáàâèë ïðîòèâîìèãàþùèé
êîä äëÿ URL ñòðîêè
 
67Ver Òåïåðü URL ñòðîêà è â äèàëîãå è â áðàóçåðå âûâîäèòñÿ îäíîé
ïðîöåäóðîé íóæíî òîëüêî óêàçàòü êîîðäèíàòû è ðàçìåð ñòðîêè.
 
68Ver Äîáàâèë ìèíè èêîíêè ñëåâà îò ôàèë íåéìà (î÷åíü ïðèêîëüíî ñìîòðèòñÿ).
 
 
73 Âåðñèÿ
 
69Ver Getimg âûïîëíèë â âèäå ïðîöåññà, à íå ìàêðîñà êîä óìåíüøèëñÿ
íà 900 áàéò
 
70Ver data_area òåïåðü íå èñïîäëüçóåòñÿ, à çíà÷èò ïàìÿòè òðåáóåòñÿ
òåïåðü íà 140000 áàéò ìåíüøå!
 
72Ver Áîëåå áûñòðàÿ ñîðòèðîâêà , fileinfo òðåáóò òîëüêî 200 áàéò,
à çíà÷èò ïàìÿòè òåïðü òðåáóåòñÿ íà 200000 áàéò ìåíüøå!
 
73Ver Ìèãàíèå Url ñòðîêè áàã èñïðàâëåí.
 
Èòîãî êîä óìåíüøåí ãäå-òî íà 900 áàéò. Åñëè ðàíüøå òðåáîâàëîñü ïàìÿòè
1 ÌÁ, òî òåïåðü âñåãî 600Êá, à ýòî ïî÷òè â äâà ðàçà ìåíüøå.
 
 
80Ver Äèàëîãè îïÿòü ðàáîòàþò, óäàëåí áàã ðåäàêòèðîâàíåèÿ ñòðîêè URL
 
81Ver Save äèàëîã ðàáîòàåò áîëåå êîððåêòíî
/programs/games/c4/trunk/c4.asm
69,7 → 69,7
LABEL_STATUS_X equ 14
LABEL_STATUS_Y equ 279
LABEL_STATUS_WIDTH equ 220
LABEL_STATUS_HEIGHT equ 8
LABEL_STATUS_HEIGHT equ 12
 
 
 
/programs/games/tetris/trunk/random.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/key.inc
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/table.inc
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/mouse.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/window.inc
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/score.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/menu.inc
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/block.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/blocks.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/games/tetris/trunk/tetris.asm
16,238 → 16,870
;
;
; Changelog:
;
; 09.11.2005 - fix for work under MeosDebug & better random - Andrey Halyavin
; 23.09.2005 - fixed bug, when 011111111111111-like sequence interpreted
; as _11111111111111 in check_full_line - Sergey Kuzmin aka Wildwest
; 18.09.2005 - added 'Pause' button and made appropriate code and interface redesign
; BTW, you can MOVE and ROTATE block during Pause ;) - Sergey Kuzmin aka Wildwest
; 03.11.2003 - added new blocks & random - Ivan Poddubny
; 31.10.2001 - rdtsc replaced - quickcode <quickcode@mail.ru>
; 28.06.2001 - fasm port & framed blocks - Ville Turjanmaa
; 31.10.2001 - rdtsc replaced - quickcode <quickcode@mail.ru>
; 03.11.2003 - added new blocks & random - Ivan Poddubny
;
;
 
LEN_X equ 14
LEN_Y equ 24
BORDER_LEFT equ 2
BORDER_RIGHT equ 2
LEN_X equ 19 ;width of table
LEN_Y equ 29 ; height of table
BORDER_LEFT equ 1
BORDER_RIGHT equ 1
BORDER_TOP equ 1
BORDER_BOTTOM equ 1
ADOBE_SIZE equ 12
X_LOCATION equ 6
Y_LOCATION equ 21
 
X_LOCATION equ 30 ; distance to table from left side
Y_LOCATION equ 50 ; distance to table from header
 
UP_KEY equ 130+48
DOWN_KEY equ 129+48
LEFT_KEY equ 128+48
RIGHT_KEY equ 131+48
BACKGROUND equ 03000080h
 
_MAXBLOCKS_ = 7*4
SCORE_TO_NEW_LEVEL equ 100000
 
 
use32
 
org 0x0
org 0x0
 
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; program start
dd I_END ; program image size
dd IM_END ; reguired amount of memory
dd IM_END ; esp
dd 0x0,0x0 ; I_PARAM, I_ICON
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; program start
dd I_END ; program image size
dd I_END+1024 ; reguired amount of memory
dd I_END+1024 ; esp
dd 0x0,0x0 ; I_PARAM, I_ICON
include 'lang.inc'
START: ; start of execution
include 'macros.inc'
 
mov eax,3 ;
int 0x40 ;
mov cl,16 ;
ror eax,cl ; to make seconds more significant
mov [generator],eax ;
call random ;
 
mov byte[status],'0'
mov byte[menu],'0'
call draw_window ; at first, draw the window
START: ; start of execution
 
still:
 
cmp byte[status],'2'
je attesa
; -- quickcode - start
 
cmp byte[status],'1'
mov eax,3
int 0x40
mov cl,16
ror eax,cl ; to make seconds more significant
mov [generator],eax
call random
 
jne attesa
; -- quickcode - end
 
 
call clear_table_tetris
call new_block
call draw_window ; at first, draw the window
 
still:
xor edx,edx
 
call draw_block
 
 
attesa:
 
call mouse
;disabled because of bug
;EDIT: the bug is somewhere else..
;NOTE: dont release this without fixing the bug you lazy bastard!
 
mov eax,11 ; get event
mov eax,11 ; get event
int 0x40
 
cmp eax,1 ; redraw request ?
jz red
cmp eax,2 ; key in buffer ?
cmp eax,1 ; redraw request ?
jz red
cmp eax,2 ; key in buffer ?
jnz check_button
jmp key
check_button:
cmp eax,3 ; button in buffer ?
cmp eax,3 ; button in buffer ?
jnz scendi
mov eax,-1 ; close this program
int 0x40
jmp button
 
red: ; redraw
red: ; redraw
call draw_window
jmp still
 
parallel dd 1
 
scendi: cmp byte[status],'1'
jne still
 
cmp byte[blabla],10
je blabla_0
inc byte[blabla]
jmp blabla_1
blabla_0:
mov byte[blabla],0
inc dword [current_block_y]
call check_crash
jne block_crash
blabla_1:
scendi:
;///////////////////////////////////////////////// Wildwest
cmp dword [pauses], 0
je ok
jne not_ok
not_ok:
inc dword [current_block_y]
dec dword [current_block_y]
call check_crash
jne block_crash
jmp draw
ok:
;/////////////////////////////////////////////////
inc dword [current_block_y]
call check_crash
jne block_crash
draw: movzx edx,byte [current_block_color]
call draw_block
mov eax,5
movzx ebx,byte [delay]
int 0x40
jmp still
 
block_crash: dec dword [current_block_y]
movzx edx,byte [current_block_color]
call draw_block
call fix_block
call check_full_line
call draw_table
call new_block
inc dword [score]
call write_score
call check_crash
jz adr400
aspetta: mov eax,10
int 0x40
cmp eax,1
jne adr10000
call draw_window
adr10000: cmp eax,3
jne aspetta
new_game: mov eax,17
int 0x40
cmp ah,1
jnz adr401
jmp end_program
adr401:
;///////////////////////////////////////////////////// Wildwest
mov dword [pauses], 0
;////////////////////////////////////////////////////
mov dword [score],0
call clear_table_tetris
call new_block
call draw_window
 
draw: movzx edx,byte [current_block_color]
call draw_block
mov eax,5
mov ebx,5
sub ebx,[speed]
int 0x40
jmp still
adr400: movzx edx,byte [current_block_color]
call draw_block
mov eax,5
movzx ebx,byte [delay]
int 0x40
jmp still
 
block_crash: dec dword [current_block_y]
movzx edx,byte [current_block_color]
call draw_block
call fix_block
call check_full_line
call draw_table
call new_block
call write_score
call check_crash
jz adr400
aspetta: mov eax,10
int 0x40
cmp eax,1
jne adr10000
call draw_window
adr10000: cmp eax,3
jne aspetta
key: mov eax,2
int 0x40
 
new_game: mov dword [score],0
mov dword [lines],0
mov dword [level],0
mov dword [speed],0
mov byte [status],'1'
call clear_table_tetris
call first_block
call new_block
call draw_window
adr32: cmp ah,LEFT_KEY
jne adr_30
dec dword [current_block_x]
call check_crash
jz adr4000
inc dword [current_block_x]
adr4000: jmp scendi
 
adr400: movzx edx,byte [current_block_color]
call draw_block
jmp still
adr_30: cmp ah,RIGHT_KEY
jne adr_31
inc dword [current_block_x]
call check_crash
jz adr3000
dec dword [current_block_x]
adr3000: jmp scendi
 
include 'key.inc'
include 'mouse.inc'
include 'menu.inc'
include 'window.inc'
include 'block.inc'
include 'table.inc'
include 'random.inc'
include 'score.inc'
adr_31: cmp ah,UP_KEY
jne adr51
mov edx,[current_block_pointer]
mov edx,[edx+16]
mov esi,[current_block_pointer]
mov [current_block_pointer],edx
call check_crash
jz adr50
mov [current_block_pointer],esi
adr50: jmp scendi
 
adr51: cmp ah,DOWN_KEY
jne adr61
mov byte [delay],5 ;!!! 2
adr52: jmp scendi
 
adr61: cmp ah,' '
jne adr62
mov byte [delay],5 ;!!! 2
adr62: jmp scendi
 
 
button: ; button
mov eax,17
int 0x40
cmp ah,1 ; button id=1 ?
jz end_program
cmp ah,2
jz go_new_game
cmp ah,3 ; button id=3 ? ///Wildwest's 'Pause' button
jz pause_program
jmp still
 
end_program:
mov eax,0xffffffff ; close this program
int 0x40
 
go_new_game:
jmp new_game
;//////////////////////////////////////////////////// Wildwest
pause_program:
cmp dword [pauses], 0
je incr
mov dword [pauses], 0
jmp still
incr:
mov dword [pauses], 1
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,320*65536+(LEN_X-BORDER_LEFT-BORDER_RIGHT)*ADOBE_SIZE+X_LOCATION*2
mov ecx,25*65536+ (LEN_Y-BORDER_TOP-BORDER_BOTTOM)*ADOBE_SIZE+Y_LOCATION+30
mov edx,BACKGROUND ; color of work area RRGGBB
mov esi,0x006688ee;99bbff ; color of grab bar RRGGBB,8->col
mov edi,0x007799ff;99bbee ; color of frames 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
 
; CLOSE BUTTON
; mov eax,8 ; function 8 : define and draw button
; mov ebx,243*65536+12 ; [x start] *65536 + [x size]
; mov ecx,5*65536+12 ; [y start] *65536 + [y size]
; mov edx,1 ; button id
; mov esi,0x5580cc;22aacc ; button color RRGGBB
; int 0x40
 
mov eax,8
mov ebx,30*65536+102
mov ecx,378*65536+18
mov edx,2
mov esi,0xA24466;5580cc;22aacc
int 0x40
;/////////////////////////////////////////////// Wildwest's 'Pause' button
mov eax,8
mov ebx,132*65536+102
mov ecx,378*65536+18
mov edx,3
mov esi,0x0FA0F0;
int 0x40
 
mov eax,4 ; function 4 : write text to window
mov ebx,164*65536+384 ; [x start] *65536 + [y start]
mov ecx,0x10ffffff ; color of text RRGGBB
mov edx,labe ; pointer to text beginning
mov esi,labelen-labe ; text length
int 0x40
;///////////////////////////////////////////////
mov eax,4
mov ebx,49*65536+384
xor ecx,ecx
mov ecx,0x10ffffff
mov edx,game_finished
mov esi,size_of_game_finished-game_finished
int 0x40
 
call draw_table
 
movzx edx,byte [current_block_color]
call draw_block
 
cld
mov ebx,38*65536+35 ; draw info text with function 4
mov ecx,0x10ffffff ; color
mov edx,text
mov esi,7
mov eax,4
int 0x40
 
call write_score
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
 
ret
 
;-------------------------------------------------------------
; CHECK CRASH
; output Z flag => OK
; NZ flag => NO
;-------------------------------------------------------------
 
check_crash: mov ebx,[current_block_pointer]
 
mov edx,[current_block_y]
imul edx,LEN_X
add edx,[current_block_x] ;find the offset in tetris_t
 
add edx,table_tetris
 
mov ecx,4
xor ax,ax
 
adr_1: cmp byte [ebx],1
jne adr_2
add al,[edx]
adc ah,0
adr_2: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_3
add al,[edx]
adc ah,0
adr_3: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_4
add al,[edx]
adc ah,0
adr_4: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_5
add al,[edx]
adc ah,0
adr_5: inc ebx
add edx,LEN_X-3
 
loop adr_1
or ax,ax
ret
;-------------------------------------------------------------
;NEW BLOCK
;-------------------------------------------------------------
new_block: mov dword [current_block_y],1
mov dword [current_block_x],7
 
call random
and al,7
setz ah
add al,ah
mov [current_block_color],al
 
call random
;and eax,15
; ---- Ivan ----
and eax,0xff
@@:
cmp eax,_MAXBLOCKS_
jl @f
add eax,-(_MAXBLOCKS_)
jmp @b
@@:
; ---- Ivan ----
mov edx,[block_table+eax*4]
mov [current_block_pointer],edx
 
mov byte [delay],22 ;19 ;!!! 15
ret
;-------------------------------------------------------------
; FIX BLOCK
;-------------------------------------------------------------
fix_block: mov ebx,[current_block_pointer]
 
mov edx,[current_block_y]
imul edx,LEN_X
add edx,[current_block_x] ;find the offset in tetris_t
 
add edx,table_tetris
 
mov ecx,4
mov al,[current_block_color]
 
adr_21: cmp byte [ebx],1
jne adr_22
mov [edx],al
adr_22: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_23
mov [edx],al
adr_23: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_24
mov [edx],al
adr_24: inc ebx
inc edx
 
cmp byte [ebx],1
jne adr_25
mov [edx],al
adr_25: inc ebx
add edx,LEN_X-3
 
loop adr_21
ret
 
;--------------------------------------------------------------
; DRAW_TABLE
;--------------------------------------------------------------
draw_table: mov esi,table_tetris+LEN_X*BORDER_TOP+BORDER_LEFT
 
mov ebx,X_LOCATION*65536+ADOBE_SIZE
mov ecx,Y_LOCATION*65536+ADOBE_SIZE
mov edi,LEN_Y-BORDER_TOP-BORDER_BOTTOM
y_draw: push edi
 
mov edi,LEN_X-BORDER_LEFT-BORDER_RIGHT
x_draw: push edi
; pusha
; mov eax,5
; mov ebx,10
; int 0x40
; popa
mov ax,13
movzx edx,byte [esi]
mov edx,[color_table+edx*4]
int 0x40
call draw_frames
inc esi
add ebx,65536*ADOBE_SIZE
pop edi
dec edi
jnz x_draw
 
add esi,BORDER_LEFT+BORDER_RIGHT
mov ebx,X_LOCATION*65536+ADOBE_SIZE
add ecx,65536*ADOBE_SIZE
pop edi
dec edi
jnz y_draw
 
ret
;--------------------------------------------------------------
;DRAW BLOCK
;
; ebx=x [0..LEN_X-1]
; ecx=y [0..LEN_Y-1]
; edi=pointer block
;--------------------------------------------------------------
draw_block:
mov eax,13
mov edx,[color_table+edx*4]
 
mov ebx,[current_block_x]
mov ecx,[current_block_y]
mov edi,[current_block_pointer]
 
sub ebx,BORDER_LEFT
imul ebx,ADOBE_SIZE
add ebx,X_LOCATION
shl ebx,16
mov bx,ADOBE_SIZE
 
sub ecx,BORDER_TOP
imul ecx,ADOBE_SIZE
add ecx,Y_LOCATION
shl ecx,16
mov cx,ADOBE_SIZE
 
mov dword [TMP_1],4
adr_122: mov dword [TMP_0],4
adr_121: cmp byte [edi],0
je adr_120
 
int 040h
 
call draw_frames
 
adr_120: inc edi
add ebx,ADOBE_SIZE*65536
dec dword [TMP_0]
jnz adr_121
sub ebx,4*ADOBE_SIZE*65536
add ecx,ADOBE_SIZE*65536
dec dword [TMP_1]
jnz adr_122
 
ret
 
draw_frames:
cmp edx,0
jne df1
ret
df1:
pusha
mov bx,1
add edx,0x282828
mov eax,13
int 0x40
popa
 
pusha
mov cx,1
add edx,0x282828
mov eax,13
int 0x40
popa
 
pusha
push ebx
sub bx,1
add [esp+2],bx
pop ebx
mov bx,1
shr edx,1
and edx,0x7f7f7f
mov eax,13
int 0x40
popa
 
pusha
push ecx
sub cx,1
add [esp+2],cx
pop ecx
mov cx,1
shr edx,1
and edx,0x7f7f7f
mov eax,13
int 0x40
popa
 
ret
 
 
;--------------------------------------------------------------
clear_table_tetris:
cld
mov al,1
mov edi,table_tetris
mov ecx,LEN_X*BORDER_TOP
rep stosb
 
mov edx,LEN_Y-BORDER_TOP-BORDER_BOTTOM
adr300: mov cl,BORDER_LEFT
rep stosb
dec ax ;AL=0
mov cl,LEN_X-BORDER_LEFT-BORDER_RIGHT
rep stosb
inc ax ;AL=1
mov cl,BORDER_RIGHT
rep stosb
dec dx
jne adr300
 
mov ecx,LEN_X*BORDER_BOTTOM
rep stosb
ret
;--------------------------------------------------------------
;edx = pointer
;ebx = contatore
check_full_line:
std
mov al,0
mov edx,table_tetris+LEN_X*(LEN_Y-BORDER_BOTTOM)-1
mov ebx,(LEN_Y-BORDER_TOP-BORDER_BOTTOM-1)*LEN_X
 
adr_5000: mov edi,edx
mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT+1;Wildwest's fix for bug
;(was LEN_X-BORDER_LEFT-BORDER_RIGHT)
repne scasb
jz no_full_line
 
lea esi,[edx-LEN_X]
mov edi,edx
mov ecx,ebx
rep movsb
sub edi,BORDER_RIGHT
mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT
rep stosb
add dword [score],50
jmp adr_5000
 
no_full_line: sub edx,LEN_X
sub ebx,LEN_X
jnz adr_5000
 
ret
;--------------------------------------------------------------
random: mov eax,[generator]
add eax,-43ab45b5h
ror eax,1
xor eax,32c4324fh
ror eax,1
mov [generator],eax
; --- IVAN ---
push ebx
mov eax,26
mov ebx,9
int 0x40
pop ebx
xor eax,0xdeadbeef
add eax,[generator]
; --- IVAN ---
mov [generator],eax ; Halyavin
ret
;--------------------------------------------------------------
number_to_str: mov edi,end_number_str-1
mov ecx,9;size_of_number_str
mov ebx,10
cld
new_digit: xor edx,edx
div ebx
add dl,'0'
mov [edi],dl
dec edi
loop new_digit
ret
;--------------------------------------------------------------
write_score:
mov eax,[score]
call number_to_str
 
mov ebx,100*65536+100 ;clear box to write new score
mov ecx,35*65536+15
mov edx,BACKGROUND
mov eax,13
int 40h
 
mov ebx,100*65536+35 ; draw info text with function 4
mov ecx,0xffff00 ; color
mov edx,number_str
mov esi,[size_of_number_str]
mov eax,4
int 0x40
ret
 
; DATA AREA
 
include 'blocks.inc'
;--------------------------------------------------------------
;DEFINITION BLOCKS
;--------------------------------------------------------------
t_block_0: db 0,0,0,0
db 1,1,1,0
db 0,1,0,0
db 0,0,0,0
dd t_block_3
 
labelt: db 'TETRIS II'
scoretext: db 'Score:'
linestext: db 'Lines:'
speedtext: db 'Speed:'
leveltext: db 'Level:'
startgame: db 'START'
instr: db 'INSTRUCTIONS'
hist: db 'HISTORY'
quit: db 'EXIT'
paused: db 'PAUSED'
txt_end:
t_block_1: db 0,1,0,0
db 1,1,0,0
db 0,1,0,0
db 0,0,0,0
dd t_block_0
 
history:
db 'TETRIS for MENUET v2.0 '
db ' '
db ' '
db 'Originally made '
db ' by Paolo Minazzi '
db ' '
db 'Port & framed blocks '
db ' by Ville Turjanmaa '
db ' '
db 'RDTSC replaced '
db ' by quickcode '
db ' '
db 'New blocks & better random '
db ' by Ivan Poddubny '
db ' '
db 'Better control, logo, menu, pause '
db ' by Jeffrey Amelynck'
t_block_2: db 0,1,0,0
db 1,1,1,0
db 0,0,0,0
db 0,0,0,0
dd t_block_1
 
db 'x <- END MARKER, DONT DELETE '
t_block_3 db 0,1,0,0
db 0,1,1,0
db 0,1,0,0
db 0,0,0,0
dd t_block_2
;--------------------------------------------------------------
i_block_0: db 0,1,0,0
db 0,1,0,0
db 0,1,0,0
db 0,1,0,0
dd i_block_1
 
instructions:
db 'TETRIS for MENUET v2.0 '
db ' '
db 'Controls: '
db ' '
db 'Use left & right key to navigate '
db 'Use up key to turn the block '
db 'Use down key to make block fall '
db 'Use P to pause game '
db 'Use N to start a new game '
db 'Use ESC to go back to menu or exit'
db 'You can also use the mouse to move'
db 'the blocks, left button to let the'
db 'blocks fall and right button to '
db 'rotate them '
db 'you can pause the game by pressing'
db 'both mouse buttons '
db ' '
db 'DONT FORGET: move mouse out of the'
db 'window if you want to use keyboard'
i_block_1: db 0,0,0,0
db 1,1,1,1
db 0,0,0,0
db 0,0,0,0
dd i_block_0
;--------------------------------------------------------------
q_block_0: db 0,1,1,0
db 0,1,1,0
db 0,0,0,0
db 0,0,0,0
dd q_block_0
;--------------------------------------------------------------
s_block_0:
db 0,0,0,0
db 0,1,1,0
db 1,1,0,0
db 0,0,0,0
dd s_block_1
 
db 'x <- END MARKER, DONT DELETE '
s_block_1: db 1,0,0,0
db 1,1,0,0
db 0,1,0,0
db 0,0,0,0
dd s_block_0
;--------------------------------------------------------------
l_block_0: db 0,0,0,0
db 1,1,1,0
db 1,0,0,0
db 0,0,0,0
dd l_block_3
 
I_END:
l_block_1: db 1,1,0,0
db 0,1,0,0
db 0,1,0,0
db 0,0,0,0
dd l_block_0
 
score: dd 0
level: dd 0
speed: dd 0
lines: dd 0
TMP_0: dd 0
TMP_1: dd 0
generator: dd 0
current_block_x: dd 0
current_block_y: dd 0
current_block_pointer: dd 0
current_block_color: db 0
next_block_pointer: dd 0
next_block_color: db 0
blabla dd 0
lastmousebutton dd 0
number_str: db 0,0,0,0,0,0,0,0,0
l_block_2: db 0,0,1,0
db 1,1,1,0
db 0,0,0,0
db 0,0,0,0
dd l_block_1
 
l_block_3: db 0,1,0,0
db 0,1,0,0
db 0,1,1,0
db 0,0,0,0
dd l_block_2
;-----------------------------------------------
 
g_block_0:
 
db 0,1,0,0
db 0,1,0,0
db 1,1,0,0
db 0,0,0,0
dd g_block_1
 
g_block_1:
db 0,0,0,0
db 1,1,1,0
db 0,0,1,0
db 0,0,0,0
dd g_block_2
 
g_block_2:
db 0,1,1,0
db 0,1,0,0
db 0,1,0,0
db 0,0,0,0
dd g_block_3
 
g_block_3:
db 1,0,0,0
db 1,1,1,0
db 0,0,0,0
db 0,0,0,0
dd g_block_0
 
;-----------------------------------
 
k_block_0:
db 0,0,0,0
db 1,1,0,0
db 0,1,1,0
db 0,0,0,0
dd k_block_1
 
k_block_1:
db 0,1,0,0
db 1,1,0,0
db 1,0,0,0
db 0,0,0,0
dd k_block_0
 
;-----------------------------------
 
color_table: dd 00000000h ;black 0
dd 00cccccch ;white 1
dd 00cc0000h ;red 2
dd 0000cc00h ;green 3
dd 000000cch ;blue 4
dd 00cccc00h ;yellow 5
dd 0000cccch ;cyan 6
dd 00cc00cch ;pink 7
 
block_table:
dd t_block_0 ; t
dd t_block_1
dd t_block_2
dd t_block_3
dd i_block_0 ; i
dd i_block_1
dd i_block_0
dd i_block_1
dd q_block_0 ; q
dd q_block_0
dd q_block_0
dd q_block_0
dd s_block_0 ; s
dd s_block_1
dd s_block_0
dd s_block_1
dd l_block_0 ; l
dd l_block_1
dd l_block_2
dd l_block_3
dd g_block_0 ; g
dd g_block_1
dd g_block_2
dd g_block_3
dd k_block_0 ; k
dd k_block_1
dd k_block_0
dd k_block_1
 
if lang eq ru
 
labelt:
db '’…’ˆ‘ 1.6 - ‘’…‹Šˆ ˆ Ž…‹'
labellen:
labe:
db '€“‡€'
labelen:
text: db 'Žçª¨: '
game_finished: db ' €—€’œ'
size_of_game_finished:
 
else
 
labelt:
db 'TETRIS 1.6 - ARROWS & SPACE'
labellen:
labe:
db 'PAUSE'
labelen:
text: db 'Score: '
game_finished: db 'NEW GAME'
size_of_game_finished:
 
end if
 
pauses dd 0 ;/// Wildwest
parallel dd 1
score: dd 0
TMP_0: dd 0
TMP_1: dd 0
generator: dd 0
current_block_x: dd 0
current_block_y: dd 0
current_block_pointer: dd 0
current_block_color: db 0
number_str: db 0,0,0,0,0,0,0,0,0
end_number_str:
size_of_number_str dd 7
delay: dd 5
status: dd 0 ; 0=menu, 1=playing, 2=paused, 3=history , 4=instructions
menu: dd 0 ; 0=start, 1=instructions, 2=history, 3=exit
size_of_number_str dd 9
delay: db 40
table_tetris:
 
table_tetris: rb 2048+55
 
IM_END:
I_END:
/programs/network/netsendc/trunk/netsendc.asm
16,14 → 16,15
org 0x0
db 'MENUET00' ; 8 byte id
dd 38 ; required os
db 'MENUET01' ; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; program image size
dd 0x100000 ; required amount of memory
dd 0x00000000 ; reserved=no extended header
include 'lang.inc'
dd mem ; required amount of memory
dd mem ; stack pointer
dd 0, 0 ; param, icon
include 'lang.inc'
include 'macros.inc'
START: ; start of execution
36,38 → 37,30
int 0x40
mov [socketNum], eax
 
red:
call draw_window ; at first, draw the window
still:
mov eax,23 ; wait here for event
mov ebx,1
mov eax,10 ; wait here for event
int 0x40
cmp eax,1 ; redraw request ?
 
dec eax
jz red
cmp eax,2 ; key in buffer ?
jz key
cmp eax,3 ; button in buffer ?
jz button
jmp still
red:
call draw_window
jmp still
dec eax
jnz button
 
key:
mov eax,2
mov al,2
int 0x40
jmp still
button:
mov eax,17
mov al,17
int 0x40
cmp ah,1 ; button id=1 ?
dec ah ; button id=1 ?
jnz noclose
mov eax, 53
mov ebx, 1
76,14 → 69,8
mov eax,-1
int 0x40
noclose:
cmp ah,2 ; SEND CODE ?
je send_xcode
; it was not close button, so it must be send code button
 
jmp still
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; SEND CODE TO REMOTE ;;
92,19 → 79,13
send_xcode:
 
mov esi,send_data ; header
mov edi,I_END
mov ecx,end_message-send_data
cld
rep movsb
mov eax,53 ; SEND CODE TO REMOTE
mov ebx,4
mov ecx,[socketNum]
mov edx,end_message-send_data
mov esi,I_END
mov esi,send_data
int 0x40
 
jmp still
124,8 → 105,6
mov ebx,100*65536+250 ; [x start] *65536 + [x size]
mov ecx,60*65536+150 ; [y start] *65536 + [y size]
mov edx,0x03ffffff ; color of work area RRGGBB
mov esi,0x80aabbcc ; color of grab bar RRGGBB,8->color gl
mov edi,0x00aabbcc ; color of frames RRGGBB
int 0x40
; WINDOW LABEL
143,7 → 122,6
mov esi,0x667788
int 0x40
cld
mov ebx,25*65536+50 ; draw info text with function 4
mov ecx,0x000000
mov edx,text
152,7 → 130,7
mov eax,4
int 0x40
add ebx,16
add edx,40
add edx,esi
cmp [edx],byte 'x'
jnz newline
165,7 → 143,7
; DATA AREA
if lang eq ru
text:
db ' ®á« âì á®®¡é¥­¨¥ '
db ' '
172,27 → 150,31
db ' ‹®ª «ì­ë©  ¤à¥á : 192.168.0.1 '
db ' “¤ «ñ­­ë©  ¤à¥á : 192.168.0.2 '
db '’¥ªáâ ¨  ¤à¥á ¢ ª®­æ¥ ¨á室­¨ª  '
db 'x <- END MARKER, DONT DELETE '
db 'x' ; <- END MARKER, DONT DELETE
else
text:
db ' Send message '
db ' '
db ' Local address : 192.168.0.1 '
db ' Remote address : 192.168.0.2 '
db 'Text and address in end of source '
db 'x' ; <- END MARKER, DONT DELETE
end if
labeltext: db 'NetSend(Client)' ;
lte:
socketNum dd 0x0
remote_ip db 192,168,1,2
picture_position dd 0x0
send_data db 'à¨¢¥â,íâ® â¥áâ!Hello,this is a test!'
end_message:
 
I_END:
align 4
socketNum dd ?
 
rb 32 ; this is for stack
 
mem:
 
/programs/network/netsends/trunk/netsends.asm
183,14 → 183,20
; DATA AREA
if lang eq ru
text:
db '„ ­­ë©  ¤à¥á : 192.168.0.2 '
db 'à®á«ã訢 ¥¬ë© ¯®àâ : 0x5000 '
db 'à¨á« ­­ë¥ á®®¡é¥­¨ï: '
db 'x <- END MARKER, DONT DELETE '
db 'x' ; <- END MARKER, DONT DELETE
else
text:
db 'This address : 192.168.0.2 '
db 'Used port : 0x5000 '
db 'Received messages: '
db 'x' ; <- END MARKER, DONT DELETE
end if
labeltext: db 'NetSend(Server)'
lte:
198,10 → 204,3
 
I_END:
/programs/other/archer/trunk/@RCHER.ASM
1,4 → 1,4
; @RCHER - DEflate unpacker v1.0
; @RCHER - Deflate unpacker v2.0 beta
;
; Written in pure assembler by Ivushkin Andrey aka Willow
;
8,15 → 8,17
;
; Compile with FASM
 
 
SYS equ meos
PARAM_PTR equ png_image
OUTBUF equ 4*1024*1024
png_imag = output+OUTBUF
PARAM_PTR = os_work;png_image
MEMINIT=next_code;output
DUMPFILE equ '/hd/1/out.txt'
 
SHOW_RBLOCK equ 0;1
SHOW_PNG_SEC equ 0;1
SHOW_METH equ 0;1
FILE_NUM equ 0
FILE_NUM equ 15;8
MEMORY equ 0x800000
 
BITS equ 16
28,7 → 30,6
SHOW_CHARS equ 0
BSIZE equ 512
INBUF equ BUFSIZE*BSIZE*2
OUTBUF equ 4*1024*1024
IGNORE_DIRS equ 0
 
MOVE_SLINE_LEV equ 8
40,6 → 41,9
IPC_MODE equ 100000b
RAW_MODE equ 1000000b
THREAD_YES equ 10000000b
LIST_MODE equ 100000000b
MEM_MODE equ 1000000000b
FIND_MODE equ 10000000000b
 
if SYS eq win
format PE console
57,8 → 61,8
dd 0x01
dd start
dd I_END
dd MEMORY
dd MEMORY-2048
dd MEMINIT
dd main_stack;MEMORY-2048
if PARAM_PTR eq param
dd 0
else
65,12 → 69,11
dd PARAM_PTR
end if
dd 0x0
include "lang.inc"
 
if PARAM_PTR eq param
param db 'RQ'
db '000037'
db '/hd/1/zip/png.zip',0
param db 'N'
db '000015'
db '/hd/1/zip/gz/fasm-1~1.tgz',0
end if
;match =meos,SYS
;{
77,14 → 80,17
include "macros.inc"
; purge mov
include "debug.inc"
include 'dump.inc'
;}
end if
 
language equ en
include 'lang.inc'
language equ lang
 
if SYS eq win
section '.text' code readable executable writeable
end if
 
include "arcmacro.inc"
include "parser.inc"
include "deflate.inc"
107,6 → 113,12
mcall 40,10000101b
; jmp again
CmdLine
cmdl:
test [Flags],LIST_MODE
jz red
 
; Dump [lpath],[lpath_len],os_work
; ud2
red:
call draw_window
mcall 12,2
134,12 → 146,15
mcall -1
.noquit:
mcall 17
mcall 64,1,MEMINIT
QueryFile
and [FileNum],0
mov [FileNum],FILE_NUM
test eax,eax
jnz still
end if
again:
; Dump Flags,4,os_work
mov [fat_],fat
Newline
xor eax,eax
; and [Flags],STAY_MODE
153,6 → 168,11
Msg 14
jmp quit
.sizeok2:
call KillViewer
xor eax,eax
mov ecx,(child_stack-fat)/4
mov edi,fat
rep stosd
mov [filesize],ebx
test [Flags],RAW_MODE
jz .norawm
213,13 → 233,37
jmp exit
.sizeok1:
if ~ SYS eq win
call KillViewer
end if
Msg 39
Msg 39 ; unpacking PNG
mov ecx,[unp_size]
add ecx,output
mov [png_],ecx
mov eax,[PNG_info.Width]
imul eax,[PNG_info.Height]
lea eax,[eax+eax*2]
add ecx,eax
; dps 'Mem='
; dpd ecx
mcall 64,1
test eax,eax
jz .ok
Msg 41
jmp exit
.ok:
mov edi,[outp]
call Deflate.blkbegin
jmp .defl_end
.sizeok:
mov ecx,[unp_size]
dpd ecx
add ecx,output
; mov [png_],ecx
mcall 64,1
test eax,eax
jz .ok2
Msg 41
jmp exit
.ok2:
call Deflate ; <===========
.defl_end:
test [bits],7
252,6 → 296,8
pop ecx esi
jmp .skipAdler
.skipCRC:
; dps 'Out='
; dpd ecx
call UAdler
Msg 10
mov eax,[Adler32]
283,6 → 329,9
else
test [Flags],PNG_MODE
jnz .nosave
test [Flags],LIST_MODE
jnz quit
 
test [Flags],TAR_MODE
jnz .nomsg
Msg 37
289,9 → 338,11
.nomsg:
mov [outfile.out],ebx
mcall 58,outfile
; dps 'Before Quit1'
; ud2
test [Flags],TAR_MODE
jnz .nosave
call StartPad
jz exit.pad
; call StartPad
.nosave:
end if
test [Flags],PNG_MODE
300,7 → 351,7
mov edi,filters
mov ecx,6
rep stosd
mov edi,png_image
mov edi,[png_]
mov esi,output
;//
mov [outp],edi
310,7 → 361,7
mov [outfile.size],edi
mov ebx,[outp];png_image
if SYS eq win
exit:
exit:
Msg 12
invoke CreateFile,outfile,GENERIC_WRITE, FILE_SHARE_WRITE, NULL, \
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL
317,27 → 368,30
mov [hnd],eax
invoke WriteFile, eax,ebx,[outfile.size],cparam1,NULL
invoke CloseHandle, [hnd]
call RunViewer
and [arc_base],0
call RunViewer
and [arc_base],0
and [Flags],STAY_MODE
quit:
; dps 'Before Quit2'
quit:
QueryFile
test eax,eax
jnz again
invoke ExitProcess,0
else
exit:
exit:
mov [outfile.out],ebx
test [Flags],TAR_MODE
jz .notar
Msg 37
test [Flags],LIST_MODE
jne quit
mcall 58,outfile
.pad:
call StartPad
.notar:
.notar:
Msg 12
call RunViewer
and [arc_base],0
call RunViewer
and [arc_base],0
and [Flags],STAY_MODE
quit:
test [Flags],STAY_MODE
352,16 → 406,19
else
jz still
end if
mov ecx,dumpf_len
mov esi,dumpfile
mov edi,filename
rep movsb
call OpenFile
test ebx,ebx
jz again.sizebadq
; Dump output,255,os_work
; ud2
; mov ecx,dumpf_len
; mov esi,dumpfile
; mov edi,filename
; rep movsb
; call OpenFile
; test ebx,ebx
; jz again.sizebadq
call TarParse
mov ecx,[FileNum]
call TarFindN
; dpd [outfile.size]
cmp [outfile.size],0
jz again.sizebadq
mov ebx,esi
397,22 → 454,22
WriteFile,'WriteFile',\
SetFilePointer,'SetFilePointer',\
CloseHandle,'CloseHandle',\
GetStdHandle,'GetStdHandle',\
WriteConsole,'WriteConsoleA',\
ReadConsole,'ReadConsoleA',\
CreateProcess,'CreateProcessA',\
WritePrivateProfileString,'WritePrivateProfileStringA',\
ExitProcess,'ExitProcess'
GetStdHandle,'GetStdHandle',\
WriteConsole,'WriteConsoleA',\
ReadConsole,'ReadConsoleA',\
CreateProcess,'CreateProcessA',\
WritePrivateProfileString,'WritePrivateProfileStringA',\
ExitProcess,'ExitProcess'
 
import comdlg,\
GetOpenFileName,'GetOpenFileNameA'
 
import user,\
wsprintf,'wsprintfA',\
SendMessage,'SendMessageA',\
FindWindowEx,'FindWindowExA',\
WaitForInputIdle,'WaitForInputIdle'
wsprintf,'wsprintfA',\
SendMessage,'SendMessageA',\
FindWindowEx,'FindWindowExA',\
WaitForInputIdle,'WaitForInputIdle'
 
section '.reloc' fixups data readable discardable
end if
/programs/other/archer/trunk/arcmacro.inc
177,6 → 177,7
' ',\ ;38
<'®¤£®â®¢ª  ¨§®¡à ¦¥­¨ï...',13,10>,\ ;39
<'“ª ¦¨â¥ "R" ¤«ï ®¡à ¡®âª¨ áëàëå ¤ ­­ëå. Žâ¬¥­ .',13,10>,\ ;40
<'¥ 墠⠥⠯ ¬ïâ¨! Žâ¬¥­ .',13,10>,\ ; 41
' ',\ ;
' ',\ ;
' ',\ ;
185,7 → 186,6
' ',\ ;
' ',\ ;
' ',\ ;
' ',\ ;
' <- ­¥¨§¢¥áâ­ë© ¬¥â®¤ ᦠâ¨ï',\ ;50
' <- § è¨ä஢ ­',\ ;51
<'¥ ZIP  à娢',13,10> ; 52
232,6 → 232,7
' ',\ ;38
<'Preparing bitmap...',13,10>,\ ;39
<'Specify "R" to force raw data. Abort.',13,10>,\ ;40
<'Not enough memory! Abort.',13,10>,\ ;
' ',\ ;
' ',\ ;
' ',\ ;
240,7 → 241,6
' ',\ ;
' ',\ ;
' ',\ ;
' ',\ ;
' <- unknown compression method',\ ;50
' <- encrypted',\ ;51
<'Not a ZIP archive',13,10> ; 52
/programs/other/archer/trunk/data.inc
61,7 → 61,7
else
if ~ FNAME eq
db FNAME
end if
end if
; db '/hd/1/zip/png.zip',0
; db '/hd/1/zip/files/opossum.png'
; db '/rd/1/www.zip',0
84,6 → 84,11
Dheader rb 12
Dpassword rb PASSW_LEN
 
png_ dd ?
fat_ dd ?
fat_fnum dd ?
lpath dd ?
lpath_len dd ?
png_bpp dd ?
sline_len dd ?
IDATcount dd ?
120,6 → 125,15
hclen db ?
max_len dw ?
 
fat:
rb 4096;512
child_stack:
rb 1024
main_stack:
area:
rb INBUF
os_work rb 4*1024
 
bl_count rb BITS
 
next_code rw BITS
143,16 → 157,10
Distance rw 32
Dist_c rw 32
 
 
area:
rb INBUF
 
os_work rb 4*1024
 
output:
rb OUTBUF
;rb OUTBUF
 
png_image:
;png_image:
if SYS eq win
rb OUTBUF
end if
/programs/other/archer/trunk/debug.inc
73,10 → 73,16
@@:
ret
 
_debug_crlf db 13, 10, 0
 
macro newline
{
dps <13,10>
pushf
pushad
mov edx, _debug_crlf
call debug_outstr
popad
popf
}
 
macro print message
/programs/other/archer/trunk/deflate.inc
113,7 → 113,7
jb .no81
add eax,0x58
jmp .noend
.no81:
.no81:
sub eax,0x30
stosb
jmp .next
128,7 → 128,7
end if
pusha
xor eax,eax
mov ecx,(area-bl_count) / 4
mov ecx,(output-bl_count) / 4
mov edi,bl_count
rep stosd
popa
/programs/other/archer/trunk/dump.inc
0,0 → 1,55
; Include file for dumping user apps' memory through new debug BOARD
 
; Max amount of bytes to be dumped
IPC_BUF equ 160
 
; Dump macro parameters:
; ptr - pointer to memory dumped
; len - dump length
; workarea - any work area for sysfunc 9
; run_new - if not empty, run BOARD unless it is running already
 
macro Dump ptr, len, workarea,run_new
{
local .exist,.lt
pusha
mov ebx,workarea
call Board_seek
if ~ run_new eq
test edx,edx
jne .exist
mcall 19,Board_seek.board_fn,0
mov edx,eax
mcall 5,20
end if
.exist:
mov esi,len
cmp esi,IPC_BUF
jbe .lt
mov esi,IPC_BUF
.lt:
mcall 60,2,edx,ptr
popa
}
 
if used Board_seek
Board_seek:
; ebx - prcinfo
xor edx,edx
mcall 9,,-1
mov ecx,eax
mov esi,dword[.board_fn]
.lp:
mcall 9
cmp dword[ebx+10],esi
; jne .no
; cmp dword[ebx+42],399
je .ok
.no:
loop .lp
ret
.ok:
mov edx,[ebx+30]
ret
.board_fn db 'BOARD '
end if
/programs/other/archer/trunk/macros.inc
143,9 → 143,6
 
 
 
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
177,7 → 174,7
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
/programs/other/archer/trunk/parser.inc
22,12 → 22,86
rep movsb
mov dword[edi],0x00a0d
call DebugPrint
; mcall 10
; mcall 2
popa
call Add2Fat
ret
 
Add2Fat:
; edx - ptr, ecx - len
 
pusha
test [Flags],LIST_MODE
jz .ex
mov ebp,8
mov edi,edx
lea ebx,[edx+ecx]
mov ecx,[lpath_len]
cmp ecx,1
je .lbl
mov esi,[lpath]
repe cmpsb
jne .full
mov eax,[lpath_len]
sub dword[esp+24],eax;path_len-path
cmp edi,ebx
je .full
mov edx,edi
.lbl:
mov ecx,[esp+24]
mov al,'/'
repne scasb
mov eax,[fat_]
mov ecx,[esp+24]
jne .nofol
cmp edi,ebx
jne .full
lea ecx,[edi-1]
sub ecx,edx
or byte[eax+11],0x10
; sub edx,ecx
.nofol:
 
push [fat_fnum]
pop dword[eax+12]
mov edi,eax
mov esi,edx
.lp1:
 
mov bl,[esi]
lea edx,[eax+ebp]
inc esi
cmp bl,'.'
jne .nodot
lea edi,[eax+ebp]
mov ebp,11
jmp .ll
.nodot:
cmp edi,edx
jae .ll
mov [edi],bl
inc edi
.ll:
loop .lp1
mov ecx,11
dec eax
.lp2:
cmp byte[eax+ecx],0
jne .no0
mov byte[eax+ecx],' '
.no0:
loop .lp2
cmp eax,child_stack-1
jae .full
add [fat_],32
.full:
inc [fat_fnum]
.ex:
popa
ret
 
;path db '/';'fasm/examples/elfexe/'
;path_len:
 
; Parse routines:
; out: edx= 0 if all ok, 1 - central dir, 2-EOD
; 50 - encrypted
78,16 → 152,19
popa
end if
Newline
; Dump fat,160,os_work
ret
 
ZipFindN:
; ecx - file #
Msg 33
or [Flags],FIND_MODE
cmp ecx,[file_count]
jae .err
push ecx
call ResetFile
.nxt:
 
call ZipCrawl
cmp edx,51
je .ok2
111,6 → 188,7
add esi,eax
mov edx,5
.ex:
and [Flags],-1-FIND_MODE
push edx
Msg edx
pop edx
159,6 → 237,8
cmp byte[edx+ecx-1],'/'
je .skipdp
end if
test [Flags],FIND_MODE
jnz .skipdp
call PrintFilename
.skipdp:
movzx ecx,word[esi+28]
252,7 → 332,19
mov [PNG_info.Width],eax
mov eax,[PNG_info.Height]
bswap eax
mov ebx,eax
mov [PNG_info.Height],eax
call scanline_calc
; dps 'All='
cmp [PNG_info.Color_type],3
jne .nopal
shl eax,3
inc eax
.nopal:
inc eax
imul eax,ebx
mov [unp_size],eax
; dpd eax
add esi,25
cmp byte[esi-5],0
rep_err e,52,29
423,7 → 515,8
ret
 
TarParse:
call ResetFile
mov esi,output
; call ResetFile
.nxt:
call TarCrawl
; wait
436,8 → 529,9
inc [file_count]
.skipinc:
add eax,ecx
mov ebx,1
call FileSeek
; mov ebx,1
add esi,eax
; call FileSeek
jmp .nxt
 
TarFindN:
447,7 → 541,8
cmp ecx,[file_count]
jae .err
push ecx
call ResetFile
mov esi,output
; call ResetFile
.nxt:
call TarCrawl
if IGNORE_DIRS eq 1
461,8 → 556,9
dec dword[esp]
.seek:
add eax,ecx
mov ebx,1
call FileSeek
; mov ebx,1
add esi,eax
; call FileSeek
jmp .nxt
.err:
mov edx,4
559,13 → 655,8
.err:
ret
 
; Created: May 31, 2005
FiltCall:
dd PngFilter.nofilt,Filt_sub,Filt_up,Filt_av,Filt_paeth,PngFilter.nofilt
PngFilter:
; esi - filtered uncompressed image data
; edi - destination
mov cl,[PNG_info.Color_type]
scanline_calc:
movzx ecx,byte[PNG_info.Color_type]
mov eax,1
cmp cl,3
je .palette
594,6 → 685,15
jnz .noz2
inc eax
.noz2:
ret
 
; Created: May 31, 2005
FiltCall:
dd PngFilter.nofilt,Filt_sub,Filt_up,Filt_av,Filt_paeth,PngFilter.nofilt
PngFilter:
; esi - filtered uncompressed image data
; edi - destination
call scanline_calc
mov [sline_len],eax ; scanline length
push edi
and [Flags],not 1
/programs/other/archer/trunk/sys.inc
105,7 → 105,7
else
test [Flags],THREAD_YES
jnz .ex
mcall 51,1,thread,MEMORY
mcall 51,1,thread,child_stack;MEMORY
mov [child],eax
end if
.ex:
191,7 → 191,7
mov ecx,[PNG_info.Width]
shl ecx,16
add ecx,[PNG_info.Height]
mcall 7,png_image,,10 shl 16+25
mcall 7,[png_],,10 shl 16+25
mcall 12,2
.still:
mcall 10
208,6 → 208,7
jne .still
.close:
and [child],0
mcall 64,1,MEMINIT
mcall -1
 
KillViewer:
256,7 → 257,68
mov ecx,255
mov edi,filename
rep movsb
jmp again
; test [Flags],LIST_MODE
; jz again
xor eax,eax
mov edi,filename
mov ecx,255
repne scasb
cmp byte[edi-2],'/'
je .slash
mov byte[edi-1],'/'
inc edi
.slash:
; Dump filename,255,os_work
; ud2
mov ecx,edi
; dec ecx
mov edx,ecx
mov dword[Finfo],13
; mov dword[Finfo.count],1
mov edi,filename+5
sub ecx,edi
.lp:
mov al,'/'
repne scasb
; jne .ex
; dpd ecx
and byte[edi-1],0
mcall 58,Finfo
mov byte[edi-1],'/'
test ebx,32
jz .lp
test [Flags],LIST_MODE
jne .listm
and byte[edi-1],0
; Dump filename,255,os_work
jmp .agg
; ud2
.listm:
lea esi,[edi-1+ecx]
lea edi,[esi+1]
std
rep movsb
and byte[edi],0
cld
; dpd filename
 
inc edi
dpd edi
cmp edx,edi
jne .slash2
; cmp byte[edi],'/'
; je .slash2
mov byte[edi],'/'
inc edx
.slash2:
sub edx,edi
mov [lpath],edi
mov [lpath_len],edx
dpd edx
.agg:
mov dword[Finfo],0
; ud2
jmp again;cmdl
.yespar:
cmp al,'N'
jne .nonum
291,7 → 353,7
cmp al,'q'
jne .noofs
lodsd
.fofs:
.fofs:
mov [arc_base],eax
jmp .parse
.noofs:
299,7 → 361,11
jne .noofs2
call get_6ASCII_num
jmp .fofs
.noofs2:
.noofs2:
cmp al,'L'
jne .nolist
or [Flags],LIST_MODE
.nolist:
jmp .parse
 
get_6ASCII_num:
319,8 → 385,20
}
 
StartPad:
mcall 19,editorcmd,dumpfile
; mcall 19,editorcmd,dumpfile
pusha
mov esi,[outfile.size]
; dpd esi
mov [par_fsize],esi
mcall 19,editorcmd,editor_par
mov ecx,eax
mcall 5,20
mcall 60,2,,[outfile.out];output
mcall 64,1,MEMINIT
popa
ret
 
editorcmd db 'TINYPAD '
editor_par db '*'
par_fsize dd ?
end if
/programs/system/board/trunk/board.asm
5,9 → 5,16
;
; Compile with FASM for Menuet
;
LMARGIN equ (15+5)
TMARGIN equ (35+5)
HSPACE equ 16
VSPACE equ 12
IPC_BUF equ 160
DR_GRID equ 0;1
 
FL_KRNL equ 1
 
include 'lang.inc'
include 'macros.inc'
 
use32
org 0x0
15,18 → 22,20
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x2000 ; memory for app (4 Kb)
dd 0x2000 ; esp
dd i_end+0x2000 ; memory for app (4 Kb)
dd i_end+0x2000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
 
include 'MACROS.INC'
include 'debug.inc'
purge newline
MAXSTRINGS = 16
TMP = 80*(MAXSTRINGS+1)
 
xpos dd 0x0
ypos dd 0
 
 
START: ; start of execution
 
mcall 60,1,ipcbuff,IPC_BUF+20
mcall 40,1000111b
mov [ipcbuff+4],8
mov ecx,1024
flush:
mov eax,63
34,20 → 43,21
int 0x40
loop flush
 
mov ecx, 80*(MAXSTRINGS+1)
mov ecx, TMP
xor eax, eax
mov edi, text
mov edi, [targ]
rep stosb
 
mov [tmp],'x'
mov [tmp1],'x'
mov [tmp2],'x'
 
mov eax,14
int 0x40
and eax,0xffff0000
sub eax,400 shl 16
add eax,400
sub eax,399 shl 16
add eax,399
mov [xstart],eax
 
red:
call draw_window
 
still:
62,7 → 72,8
je key
cmp eax,3 ; button in buffer ?
je button
 
cmp eax,7
je ipc
mov eax,63
mov ebx,2
int 0x40
69,47 → 80,63
 
cmp ebx,1
jne still
 
new_data:
 
mov ebp,[targ]
.no4:
cmp al,13
jne no13
mov [xpos],0
and dword[ebp-8],0
jmp new_check
no13:
cmp al,10
jne no10
inc [ypos]
cmp [ypos],MAXSTRINGS
jbe noypos
mov [ypos],MAXSTRINGS
mov esi,text+80
mov edi,text
inc dword[ebp-4]
cmp dword[ebp-4],MAXSTRINGS
jbe .noypos
mov dword[ebp-4],MAXSTRINGS
lea esi,[ebp+80]
mov edi,ebp
mov ecx,80*(MAXSTRINGS)
cld
rep movsb
 
mov esi,[ypos]
mov esi,[ebp-4]
imul esi,80
add esi,[xpos]
add esi,text
add esi,[ebp-8]
add esi,ebp
mov ecx,80
xor al,al
rep stosb
noypos:
.noypos:
mov [targ],text2
and [krnl_cnt],0
jmp new_check
no10:
cmp ebp,text1
je add2
mov ecx,[krnl_cnt]
cmp al,[krnl_msg+ecx]
jne .noknl
inc [krnl_cnt]
cmp [krnl_cnt],4
jne new_check
mov [targ],text1
.noknl:
mov ebp,[targ]
jecxz .add
push eax
mov esi,krnl_msg
.l1:
lodsb
call add_char
loop .l1
pop eax
.add:
and [krnl_cnt],0
add2:
call add_char
 
mov esi,[ypos]
imul esi,80
add esi,[xpos]
mov [text+esi],al
inc [xpos]
cmp [xpos],80
jb xposok
mov [xpos],79
xposok:
 
new_check:
 
mov eax,63
119,36 → 146,127
cmp ebx,1
je new_data
 
cmp [vmode],2
je still
call draw_window
 
jmp still
 
 
red: ; redraw
call draw_window
jmp still
 
ipc:
mov [vmode],2
mov eax,ipcbuff
mov esi,[eax+8]
mov byte[eax],1
push dword[eax+12]
pop [dump_len]
mcall 9,work,-1
mov ecx,eax
.lp:
mcall 9
cmp [ebx+30],esi
je .ok
loop .lp
and [dump_len],0
jmp red
.ok:
mov [pid],esi
lea esi,[ebx+10]
mov edi,dump_title+10
mov ecx,12
rep movsb
jmp red
key: ; key
mov eax,2 ; just read it and ignore
int 0x40
cmp ah,' '
je button.no_krnl_flt
cmp [vmode],2
jne still
cmp ah,176 ;left
jb still
cmp ah,179 ;right
ja still
mov ecx,[offs]
shr eax,8
sub eax,176
add ecx,[arrows+eax*4]
shl ecx,12
shr cx,12
jmp button.check_sel
.nol:
jmp still
 
arrows dd -1,16,-16,1
 
button: ; button
mov eax,17 ; get id
int 0x40
 
cmp ah,1 ; button id=1 ?
jne noclose
jne .noclose
 
mov eax,-1 ; close this program
int 0x40
noclose:
.noclose:
shr eax,8
cmp eax,10
jb .nodump
lea edi,[eax-10]
mcall 37,1
sub eax,[edi*4+dump_cell_marg]
sub eax,TMARGIN+VSPACE
push eax
and eax,0xffff
xor edx,edx
div word[edi*4+dump_cell_size+2]
mov ecx,eax
shl ecx,16
xor edx,edx
pop eax
shr eax,16
div word[edi*4+dump_cell_size]
mov cx,ax
.check_sel:
mov eax,ecx
shl ax,12
shr eax,12
inc eax
cmp eax,[dump_len]
ja still;.nosel
mov dword[sel_byte],ecx
dec eax
mov [offs],eax
jmp red
 
.nodump:
cmp eax,2
jne .no_krnl_flt
xor [flag],FL_KRNL
jmp still
.no_krnl_flt:
mov [ipcbuff+4],8
and byte[ipcbuff],0
inc [vmode]
cmp [vmode],3
jb .vmok
and [vmode],0
.vmok:
jmp red
 
add_char:
push esi
mov esi,[ebp-4]
imul esi,80
add esi,[ebp-8]
mov [ebp+esi],al
inc dword[ebp-8]
cmp dword[ebp-8],80
jb .ok
mov dword[ebp-8],79
.ok:
pop esi
ret
 
 
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
170,7 → 288,7
mov eax,0 ; function 0 : define and draw window
; mov ebx,50*65536+400 ; [x start] *65536 + [x size]
mov ebx,[xstart]
mov ecx,MAXSTRINGS*10+40 ; [y start] *65536 + [y size]
mov ecx,MAXSTRINGS*10+45 ; [y start] *65536 + [y size]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0x03000000
int 0x40
184,9 → 302,24
mov esi,header.len ; text length
int 0x40
 
mov ecx,4
mov esi,[sc.work]
mov ebx,316 shl 16+5*6
mov edx,3;+1 shl 30
mcall 8,,<5,12>
mov edx,[vmode]
lea edx,[edx*4+duk]
mcall 4,<320,8>,,,4
 
cmp [vmode],2
je no_mdbg
mov ebx,15*65536+33 ; draw info text with function 4
mov ecx,[sc.work_text]
mov edx,text
mov edx,text1
cmp [vmode],0
je .kern
mov edx,text2
.kern:
mov esi,80
newline:
mov eax,4
195,7 → 328,18
add edx,80
cmp [edx],byte 'x'
jne newline
 
jmp enddraw
no_mdbg:
if DUMP_TEST eq 1
mov esi,0
mov [dump_len],100;IPC_BUF
else
mov esi,ipcbuff+16
end if
mov ecx,[dump_len]
call dump_btn
call draw_dump
enddraw:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
202,9 → 346,181
 
ret
 
if DR_GRID eq 1
draw_grid:
mov ecx,11
mov edi,(TMARGIN+VSPACE)shl 16+TMARGIN+VSPACE
.l1:
push ecx
mov ebx,LMARGIN shl 16+LMARGIN+16*HSPACE
mcall 38,,edi,0
add edi,VSPACE shl 16+VSPACE
pop ecx
loop .l1
mov ecx,17
mov edi,(TMARGIN+VSPACE)shl 16+TMARGIN+VSPACE*10
mov ebx,LMARGIN shl 16+LMARGIN
.l2:
push ecx
mcall 38,,edi,0
add ebx,HSPACE shl 16+HSPACE
pop ecx
loop .l2
ret
end if
 
draw_numbers:
mcall 4,(LMARGIN+2) shl 16+180,0,numb,numb_len-numb
mov eax,dword[sel_byte]
shl ax,12
shr eax,12
mov edi,eax
if ~ DUMP_TEST eq 1
add edi,ipcbuff+16
end if
mov edx,(LMARGIN+2+6*6)shl 16+180
mov ebx,0x30000
movzx ecx,byte[edi]
mcall 47,,,,0x4e00e7
add ebx,0x20000
add edx,(6*10)shl 16
movzx ecx,word[edi]
mcall
add ebx,0x50000
add edx,(6*13)shl 16
mov ecx,[edi]
mcall
mov ebx,0x80100
add edx,(6*19)shl 16
mcall
.ex:
ret
 
draw_dump:
; esi - data ptr, ecx - length
jecxz draw_numbers.ex
pusha
call draw_numbers
mcall 4,(LMARGIN+2) shl 16+27,0,dump_title,dump_t_len-dump_title
mcall 47,0x30101,ipcbuff+8,(LMARGIN+2+6*29)shl 16+27
add edx,(6*27) shl 16
mov ecx,offs
mcall
sub edx,(5*6)shl 16
mcall ,0x30001
mov ecx,16
mov edi,HSPACE shl 16
mov ebx,(LMARGIN+5)shl 16+42
call draw_marks
mov ecx,[esp+24]
dec ecx
shr ecx,4
inc ecx
mov ebx,(LMARGIN-10)shl 16+TMARGIN+2+VSPACE
mov edi,VSPACE
call draw_marks
popa
mov edx,TMARGIN+2
mov edi,ecx
.lp:
add edx,(LMARGIN+2) shl 16+VSPACE
mov ecx,16
cmp edi,ecx
jae .less
mov ecx,edi
.less:
sub edi,ecx
push esi ecx
mov ebx,0x20100
.lp1:
push ecx esi
movzx ecx,byte[esi]
mcall 47,,,,0
add edx,HSPACE shl 16
pop esi ecx
inc esi
loop .lp1
pusha
mov ebx,edx
and ebx,0xffff
add ebx,(LMARGIN+16*HSPACE+15)shl 16
mov edx,[esp+36]
mov esi,[esp+32]
mcall 4,,0
popa
add esp,8
and edx,0xffff
test edi,edi
jnz .lp
.ex:
ret
 
draw_marks:
; ebx -xy, edi-addition, ecx -cycles
pusha
mov edx,__hexdigits
mov eax,4
mov esi,1
.tt:
push ecx
mcall ,,0xffffff
add ebx,edi
inc edx
pop ecx
loop .tt
popa
ret
 
dump_btn: ; ecx-length
jecxz draw_dump.ex
pusha
test ecx,0xffff
je .even
add ecx,16
.even:
shr ecx,4
imul ecx,VSPACE
add ecx,(TMARGIN+VSPACE)shl 16-5
mcall 8,LMARGIN shl 16+16*HSPACE-5,,10+3 shl 29,[sc.work]
inc edx
mcall ,(LMARGIN+16*HSPACE+15)shl 16+6*16
mov edx,0xff0000
mov esi,dump_cell_size
xor eax,eax
movzx ebx,[sel_byte]
lodsw
imul bx,ax
shl ebx,16
lea ebx,[ebx+eax+LMARGIN shl 16]
movzx ecx,[sel_byte+2]
lodsw
imul cx,ax
shl ecx,16
lea ecx,[ecx+eax+(TMARGIN+VSPACE) shl 16]
mcall 13
movzx ebx,[sel_byte]
lodsw
imul bx,ax
shl ebx,16
lea ebx,[ebx+eax+(LMARGIN+16*HSPACE+15)shl 16]
mcall 13
popa
.ex:
ret
 
krnl_msg db 'K : '
duk db 'KernUserDump'
numb db 'Byte: Word: Dword: Hex:'
numb_len:
dump_title db 'Dump from (pid= h) Offset: ( h)'
dump_t_len:
 
; DATA AREA
 
dump_cell_marg dd LMARGIN shl 16,(LMARGIN+16*HSPACE+15)shl 16
dump_cell_size dw HSPACE,VSPACE,6,VSPACE
; 11,11 > 0,-1
; 5,11 > 0,-1
if lang eq ru
header:
db '„Ž‘Š€ Ž’‹€„Šˆ ˆ ‘ŽŽ™…ˆ‰'
214,8 → 530,27
db 'GENERAL DEBUG & MESSAGE BOARD'
.len = $ - header
end if
krnl_cnt dd 0
vmode dd 0
targ dd text2
I_END:
text rb 80*(MAXSTRINGS+1)
tmp db ?
offs dd ?
flag rb 1
ipcbuff rb IPC_BUF+20
rd 2
; x1pos dd ?
; y1pos dd ?
text1 rb 80*(MAXSTRINGS+1)
tmp1 db ?
rd 2
; x2pos dd ?
; y2pos dd ?
text2 rb 80*(MAXSTRINGS+1)
tmp2 db ?
work rb 4096
sel_byte dw ?,?
pid dd ?
xstart dd ?
sc system_colors
dump_len dd ?
sc system_colors
i_end:
/programs/system/panel/trunk/@PANEL.ASM
1982,7 → 1982,7
end_name db '/RD/1/END',0
menu_name db '/RD/1/MENU',0
calendar_name db '/RD/1/CALENDAR',0
sysmeter_name db '/RD/1/SYSMETER',0
sysmeter_name db '/RD/1/GMON',0
 
dat_fileinfo:
dd 0
/programs/system/pic4/trunk/pic4.asm
107,29 → 107,6
jmp bg2
 
 
set_default_colours:
 
pusha
 
mov eax,6 ; load default color map
mov ebx,defcol
mov ecx,0
mov edx,-1
mov esi,0x8000
int 0x40
 
mov eax,48 ; set default color map
mov ebx,2
mov ecx,0x8000
mov edx,10*4
int 0x40
 
popa
ret
 
defcol db 'DEFAULT.DTP'
 
 
check_parameters:
 
cmp [I_Param],dword 'BOOT'
137,7 → 114,6
ret
@@:
 
call set_default_colours
call load_texture
 
mov eax,15
148,7 → 124,8
 
mov eax,15
mov ebx,5
mov ecx,0x40000+1
mov ecx,0x40000 ; <<< 0x40000 for blue, 0x40000+1 for red,
; <<< 0x40000+2 for green background at boot
mov edx,0
mov esi,256*3*256
int 0x40
308,7 → 285,7
ylup:
mov ebx,0
 
call precalcbar
; call precalcbar
 
xlup:
push edi
342,10 → 319,10
 
mov eax,esi ; now evaluate color...
 
cmp eax,255*24
jbe ok2
; cmp eax,255*24
; jbe ok2
; imul eax,12
ok2:
; ok2:
 
mov edi,24 ; 50 = max shaded distance
idiv edi
376,21 → 353,21
nowrap:
ret
 
precalcbar:
pusha
mov eax,1
mov ebx,ecx
add ebx,18
mov ecx,44
mov edx,0x00000060
bar:
add ecx,2
add edx,0x00020100
;precalcbar:
; pusha
; mov eax,1
; mov ebx,ecx
; add ebx,18
; mov ecx,44
; mov edx,0x00000060
; bar:
; add ecx,2
; add edx,0x00020100
; int 0x40
cmp ecx,298
jb bar
popa
ret
; cmp ecx,298
; jb bar
; popa
; ret
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW *********
517,12 → 494,7
mov ecx,(y_add2+40)*65536+14 ; button start y & size
 
newcb:
push edx
sub edx,14
shl edx,2
add edx,colors
mov esi,[edx]
pop edx
mov esi,[(edx-14)*4+colors]
 
mov eax,8
int 0x40
/programs/system/vrr/trunk/vrr.asm
11,15 → 11,14
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x5000 ; memory for app
dd 0x5000 ; memory for app
dd 0x4ff0 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
dd 0x0 , 0x0 ; I_Param , I_Icon
include 'lang.inc'
include 'macros.inc'
START: ; start of execution
204,7 → 203,7
mov eax,0 ; function 0 : define and draw window
mov ebx,100*65536+400 ; [x start] *65536 + [x size]
mov ecx,100*65536+200 ; [y start] *65536 + [y size]
mov edx,0x030020C0;0x00000040 ; color of work area RRGGBB,8->color glide
mov edx,0x020020C0;0x00000040 ; color of work area RRGGBB,8->color glide
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color glide
mov edi,0x00ffffff ; color of frames RRGGBB
int 0x40
212,7 → 211,14
; WINDOW LABEL
call print_my_title
; CLOSE BUTTON
mov eax,8 ; function 8 : define and draw button
mov ebx,(400-19)*65536+12 ; [x start] *65536 + [x size]
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
mov edx,1 ; button id
mov esi,0x5599cc ; button color RRGGBB
int 0x40
; BUTTONS
xor eax,eax
mov edx,eax
1016,7 → 1022,7
warning_loop:
mov eax,5
mov ebx,10
mov ebx,13
int 0x40
mov eax,11
int 40h