Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 130 → 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
72,7 → 72,6
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
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
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
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
1101,7 → 1101,7
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 ;“ª § â¥«ì ­  ᯨ᮪ ª à⨭®ª
1291,7 → 1291,6
Gif_skipmap:
; in: ecx - image descriptor, esi - pointer to colormap
; out: edi - pointer to area after colormap
 
and ecx,111b
inc ecx ; color map size
mov ebx,1
/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
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,loword
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
{
77,35 → 89,72
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
end if
forward
if used name
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
db data
.size = $-name
.maxl = m
end if
}
 
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld]
common
local s,m,c
m = 0
c = 0
if used name
label name
end if
forward
if (used name)&(lang eq lng)
if lang eq lng
virtual at 0
db data
s = $
end virtual
d#elsz s
if m < s
m = s
end if
db data
c = c+1
end if
common
if used name
.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>
 
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
{
{ 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
name name
sizeof.#name = $ - name
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
/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
42,18 → 42,44
; dd 0,0
 
;******************************************************************************
include 'lang.inc'
include 'macros.inc'
include 'ascl.inc'
include 'ascgl.inc'
 
gif_hash_offset = gif_hash
 
START: ; start of execution
; //// Willow
mov eax,58
mov ebx,MRUfile
int 0x40
; 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
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
1173,11 → 1207,11
 
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
1365,7 → 1399,7
 
mov eax,[sc.grab_text] ; color of text RRGGBB
or eax,0x10000000
label 8,8,'SYSTEM X-TREE FILE BROWSER',eax
glabel 8,8,'SYSTEM X-TREE FILE BROWSER',eax
 
;Draw buttons headers
mov eax,8
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
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]
1873,6 → 1907,8
je itx
cmp eax,dword '.ASM'
je itx
cmp eax,dword '.RTF'
je itx
jmp nt
itx:
mov ecx,0x00446666
1892,6 → 1928,8
; //// Willow
cmp eax,dword '.WAV'
je ipic
cmp eax,dword '.MID'
je ipic
jmp np
ipic:
mov ecx,0x00226688
1929,6 → 1967,11
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:
1946,6 → 1989,8
; //// Willow
cmp [edx+8],dword '.WAV'
je is_imgico
cmp [edx+8],dword '.MID'
je is_imgico
jmp no_imgico
is_imgico:
push imgico+8
1960,8 → 2005,11
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:
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
2262,12 → 2356,12
 
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:
 
2625,12 → 2719,39
readblock dd 1
dlg_type db 0 ;S-save O-open
 
hdimg1 db 'HD0 HARDDISK FOL '
hdimg2 db 'HD1 HARDDISK FOL '
hdimg3 db 'HD2 HARDDISK FOL '
hdimg4 db 'HD3 HARDDISK FOL '
 
;01234567890123456789012345678901234567890123456789012345678912
hdimg db 'HD HARDDISK FOL '
db 'RD RAMDISK FOL '
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
2647,13 → 2768,13
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
2663,9 → 2784,11
gifview db 'GIFVIEW '
ac97wav db 'AC97WAV '
copyrfile db 'COPYR '
rtfread db 'RTFREAD '
; //// Willow
pngview db '@RCHER '
; //// Willow
midamp db 'MIDAMP '
 
fileinfo_start:
dd 16
2685,6 → 2808,10
dd tempzone ; work size of sytemram
path:
times 256 db 0 ;path
 
table_area:
rb 10
 
;rb 256
but_file:
file 'systr12.GIF'
/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,25 → 16,36
;
;
; 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
43,43 → 54,38
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 I_END+1024 ; reguired amount of memory
dd I_END+1024 ; esp
dd 0x0,0x0 ; I_PARAM, I_ICON
include 'lang.inc'
include 'macros.inc'
 
 
START: ; start of execution
 
mov eax,3 ;
int 0x40 ;
mov cl,16 ;
 
; -- quickcode - start
 
mov eax,3
int 0x40
mov cl,16
ror eax,cl ; to make seconds more significant
mov [generator],eax ;
call random ;
mov [generator],eax
call random
 
mov byte[status],'0'
mov byte[menu],'0'
; -- quickcode - end
 
 
call clear_table_tetris
call new_block
call draw_window ; at first, draw the window
 
still:
 
cmp byte[status],'2'
je attesa
 
cmp byte[status],'1'
 
jne attesa
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
int 0x40
 
91,35 → 97,34
check_button:
cmp eax,3 ; button in buffer ?
jnz scendi
mov eax,-1 ; close this program
int 0x40
jmp button
 
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
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
blabla_1:
 
 
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
mov ebx,5
sub ebx,[speed]
movzx ebx,byte [delay]
int 0x40
jmp still
 
130,6 → 135,7
call check_full_line
call draw_table
call new_block
inc dword [score]
call write_score
call check_crash
jz adr400
140,96 → 146,729
call draw_window
adr10000: cmp eax,3
jne aspetta
 
new_game: mov dword [score],0
mov dword [lines],0
mov dword [level],0
mov dword [speed],0
mov byte [status],'1'
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 first_block
call new_block
call draw_window
 
adr400: movzx edx,byte [current_block_color]
call draw_block
mov eax,5
movzx ebx,byte [delay]
int 0x40
jmp still
 
include 'key.inc'
include 'mouse.inc'
include 'menu.inc'
include 'window.inc'
include 'block.inc'
include 'table.inc'
include 'random.inc'
include 'score.inc'
key: mov eax,2
int 0x40
 
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
 
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
 
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
 
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
level: dd 0
speed: dd 0
lines: dd 0
TMP_0: dd 0
TMP_1: dd 0
generator: dd 0
237,17 → 876,10
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
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,12 → 16,13
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
dd mem ; required amount of memory
dd mem ; stack pointer
dd 0, 0 ; param, icon
include 'lang.inc'
include 'macros.inc'
37,37 → 38,29
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
dec eax
jnz button
jmp still
red:
call draw_window
jmp still
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:
; it was not close button, so it must be send code button
cmp ah,2 ; SEND CODE ?
je send_xcode
 
jmp still
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; SEND CODE TO REMOTE ;;
92,17 → 79,11
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
320,7 → 371,7
call RunViewer
and [arc_base],0
and [Flags],STAY_MODE
; dps 'Before Quit2'
quit:
QueryFile
test eax,eax
332,7 → 383,10
test [Flags],TAR_MODE
jz .notar
Msg 37
test [Flags],LIST_MODE
jne quit
mcall 58,outfile
.pad:
call StartPad
.notar:
Msg 12
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
/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
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
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
300,6 → 362,10
call get_6ASCII_num
jmp .fofs
.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
71,45 → 82,61
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
19,7 → 19,6
dd 0x4ff0 ; esp
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,6 → 211,13
; 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
1016,7 → 1022,7
warning_loop:
mov eax,5
mov ebx,10
mov ebx,13
int 0x40
mov eax,11
int 40h