0,0 → 1,417 |
|
use32 |
org 0x0 |
|
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x1000 |
dd 0x1000 |
dd 0x0 |
dd 0x0 |
|
FALSE = 0 |
TRUE = 1 |
|
include '../../../../../proc32.inc' |
include '../../../../../macros.inc' |
include '../../libio/libio.inc' |
include '../dll.inc' |
|
yy dd 20 |
|
proc draw xx,color,key,val |
pushad |
|
mov esi,[key] |
mov edi,buf |
cld |
mov al,"'" |
stosb |
@@: lodsb |
stosb |
or al,al |
jnz @b |
mov word[edi-1],"'" |
|
mov esi,[val] |
or esi,esi |
je .noval |
mov eax," = '" |
stosd |
@@: lodsb |
stosb |
or al,al |
jnz @b |
mov word[edi-1],"'" |
.noval: |
|
or [color],0x80000000 |
mcall 4,<[xx],[yy]>,[color],buf |
add [yy],10 |
popad |
ret |
endp |
|
proc callb_k f_name,sec_name,key_name,key_val |
stdcall draw,224,0x0000FF,[key_name],[key_val] |
mov eax,TRUE |
ret |
endp |
|
proc callb f_name,sec_name |
stdcall draw,200,0xFF0000,[sec_name],0 |
invoke ini.enum_keys,[f_name],[sec_name],callb_k |
mov eax,TRUE |
ret |
endp |
|
;--------------------------------------------------------------------- |
;--- ÍÀ×ÀËÎ ÏÐÎÃÐÀÌÌÛ ---------------------------------------------- |
;--------------------------------------------------------------------- |
|
s_key1 db "LeftViewMode",0 |
s_key2 db "RightViewMode",0 |
|
s_null db "",0 |
|
macro wildcard_test_data label1, label2, label3, [str1, str2, res] |
{ |
common |
label label1 |
forward |
local ..lbl |
dd ..lbl - $ |
db str1,0 |
..lbl: |
common |
dd 0 |
label label2 |
forward |
local ..lbl |
dd ..lbl - $ |
db str2,0 |
..lbl: |
common |
label label3 |
forward |
if res = "t" |
dd 1 |
else |
dd 0 |
end if |
} |
|
wildcard_test_data _str1, _str2, _str3, \ |
"" ,"" ,"t", "" ,"a" ,"f", \ |
"a" ,"a" ,"t", "a" ,"b" ,"f", \ |
"?" ,"b" ,"t", "??" ,"bc" ,"t", \ |
"?c" ,"bc" ,"t", "b?" ,"bc" ,"t", \ |
"[a-z]" ,"b" ,"t", "[A-Z]" ,"b" ,"f", \ |
"*" ,"a" ,"t", "**" ,"a" ,"t", \ |
"*" ,"" ,"t", "*bc*hij" ,"abcdfghij","t", \ |
"*b*a*" ,"b" ,"f", "*bc*hik" ,"abcdfghij","f", \ |
"abc*" ,"abc" ,"t", "abc**" ,"abc" ,"t", \ |
"[^]]" ,"^" ,"t", "[^]]" ,"]" ,"f", \ |
"[^abc]" ,"d" ,"t", "[^abc]" ,"b" ,"f", \ |
"*???" ,"abc" ,"t", "*???" ,"ab" ,"f", \ |
"*???" ,"abcd" ,"t", "*?*" ,"abcd" ,"t", \ |
"*bc" ,"abc" ,"t", "*cc" ,"abc" ,"f", \ |
"[a-c]*" ,"d" ,"f", "*[a-e]" ,"d" ,"t", \ |
"*a*" ,"de" ,"f", "*[a-c]" ,"d" ,"f", \ |
"[a-c]" ,"d" ,"f", "[b-d]" ,"a" ,"f", \ |
"[]abc]" ,"b" ,"t", "[]abc]" ,"d" ,"f", \ |
"[z-a]" ,"-" ,"t", "[z-a]" ,"b" ,"f", \ |
"[A-]" ,"-" ,"t", "[A-]" ,"]" ,"f", \ |
"[-a]" ,"-" ,"t", "[-[]" ,"-" ,"t", \ |
"[-]" ,"-" ,"t", "[^-b]" ,"a" ,"t", \ |
"[^-b]" ,"-" ,"f", "[-b]" ,"a" ,"f", \ |
"[a-g]lorian","florian","t", "[a-g]*rorian","f" ,"f", \ |
"*???*" ,"123" ,"t" |
|
START: |
mcall 68,11 |
|
stdcall dll.Load,@IMPORT |
or eax,eax |
jnz exit |
|
mov esi,_str1 + 4 |
mov edi,_str2 + 4 |
mov ecx,_str3 |
xor ebx,ebx |
inc ebx |
@@: invoke file.aux.match_wildcard,edi,esi,0 |
cmp eax,[ecx] |
je .ok |
mcall -1 |
.ok: inc ebx |
add esi,[esi-4] |
add edi,[edi-4] |
add ecx,4 |
cmp dword[esi-4],0 |
jnz @b |
|
invoke ini.set_int,s_ini,s_sec,s_key1,100 |
invoke ini.set_int,s_ini,s_sec,s_key2,101 |
|
invoke ini.get_int,s_ini,s_sec,s_key1,-1 |
cmp eax,100 |
jne exit |
invoke ini.get_int,s_ini,s_sec,s_key2,-1 |
cmp eax,101 |
jne exit |
|
mov dword[buf],'102' |
invoke ini.set_str,s_ini,s_sec,s_key1,buf,3 |
mov dword[buf],'103' |
invoke ini.set_str,s_ini,s_sec,s_key2,buf,3 |
|
invoke ini.get_str,s_ini,s_sec,s_key1,buf,1024,s_null |
cmp dword[buf],'102' |
jne exit |
invoke ini.get_str,s_ini,s_sec,s_key2,buf,1024,s_null |
cmp dword[buf],'103' |
jne exit |
|
invoke ini.enum_sections,s_ini,callb |
|
; invoke file.open,s_ininame,O_WRITE+O_CREATE |
; or eax,eax |
; jnz @f |
; int3 |
; @@: mov [fh],eax |
; invoke file.seek,[fh],SEEK_SET,8192 |
; invoke file.write,[fh],s_ininame,16 |
; invoke file.seteof,[fh] |
; invoke file.close,[fh] |
|
red: |
|
call draw_window |
|
;--------------------------------------------------------------------- |
;--- ÖÈÊË ÎÁÐÀÁÎÒÊÈ ÑÎÁÛÒÈÉ ---------------------------------------- |
;--------------------------------------------------------------------- |
|
still: |
mcall 10 |
|
cmp eax,1 |
je red |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
|
jmp still |
|
;--------------------------------------------------------------------- |
|
key: |
mcall 2 |
jmp still |
|
;--------------------------------------------------------------------- |
|
button: |
mcall 17 |
|
cmp ah,1 |
jne still |
|
exit: |
mcall -1 |
|
;--------------------------------------------------------------------- |
;--- ÎÏÐÅÄÅËÅÍÈÅ È ÎÒÐÈÑÎÂÊÀ ÎÊÍÀ ---------------------------------- |
;--------------------------------------------------------------------- |
|
ctx dd ? |
|
draw_window: |
invoke gfx.open,TRUE |
mov [ctx],eax |
mcall 0,<200,700>,<200,200>,0x33FFFFFF,,s_header |
invoke gfx.pen.color,[ctx],0x00FF0000 |
invoke gfx.line,[ctx],0,0,50,50 |
invoke gfx.framerect,[ctx],10,10,100,70 |
invoke gfx.brush.color,[ctx],0x000000FF |
invoke gfx.fillrect,[ctx],15,15,95,65 |
invoke gfx.pen.color,[ctx],0x00008800 |
invoke gfx.brush.color,[ctx],0x00CCCCFF |
invoke gfx.rectangle,[ctx],20,20,90,60 |
invoke gfx.move.to,[ctx],13,5 |
invoke gfx.line.to,[ctx],105,5 |
invoke gfx.line.to,[ctx],105,75 |
invoke gfx.line.to,[ctx],5,75 |
invoke gfx.line.to,[ctx],5,13 |
invoke gfx.line.to,[ctx],13,5 |
invoke gfx.pen.color,[ctx],0x00888888 |
invoke gfx.polyline,[ctx],poly_points,11 |
invoke gfx.close,[ctx] |
|
mov [yy],10 |
invoke ini.enum_sections,s_ini,callb |
|
invoke file.find_first,_f_path,_f_mask,FA_ANY-FA_FOLDER |
cmp eax,0 |
jle .finished |
mov ebp,eax |
mov [yy],10 |
@@: lea edx,[ebp+FileInfo.FileName] |
mcall 4,<450,[yy]>,0x80000000 |
add [yy],10 |
invoke file.find_next,ebp |
cmp eax,0 |
jg @b |
invoke file.find_close,ebp |
|
.finished: |
|
ret |
|
_f_path db '/rd/1/lib',0 |
_f_mask db '*ini*',0 |
|
;----------------------------------------------------------------------------- |
proc mem.Alloc size ;///////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
mov eax,[size] |
lea ecx,[eax+4+4095] |
and ecx,not 4095 |
mcall 68,12 |
add ecx,-4 |
mov [eax],ecx |
add eax,4 |
pop ecx ebx |
ret |
endp |
|
;----------------------------------------------------------------------------- |
proc mem.ReAlloc mptr,size;/////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx esi edi eax |
mov eax,[mptr] |
mov ebx,[size] |
or eax,eax |
jz @f |
lea ecx,[ebx+4+4095] |
and ecx,not 4095 |
add ecx,-4 |
cmp ecx,[eax-4] |
je .exit |
@@: mov eax,ebx |
call mem.Alloc |
xchg eax,[esp] |
or eax,eax |
jz .exit |
mov esi,eax |
xchg eax,[esp] |
mov edi,eax |
mov ecx,[esi-4] |
cmp ecx,[edi-4] |
jbe @f |
mov ecx,[edi-4] |
@@: add ecx,3 |
shr ecx,2 |
cld |
rep movsd |
xchg eax,[esp] |
call mem.Free |
.exit: |
pop eax edi esi ecx ebx |
ret |
endp |
|
;----------------------------------------------------------------------------- |
proc mem.Free mptr ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[mptr] |
or eax,eax |
jz @f |
push ebx ecx |
lea ecx,[eax-4] |
mcall 68,13 |
pop ecx ebx |
@@: ret |
endp |
|
;--------------------------------------------------------------------- |
;--- ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ ---------------------------------------------- |
;--------------------------------------------------------------------- |
|
s_header db 'EXAMPLE APPLICATION',0 |
|
s_ini db '/rd/1/test001.ini',0 |
s_sec db 'Panels',0 |
s_key db 'param1',0 |
|
align 4 |
poly_points dd \ |
140, 10, \ |
150, 10, \ |
150, 20, \ |
160, 20, \ |
160, 30, \ |
170, 30, \ |
170, 40, \ |
180, 40, \ |
180, 50, \ |
140, 50, \ |
140, 10 |
|
;--------------------------------------------------------------------- |
|
align 16 |
@IMPORT: |
|
library \ |
libini,'libini.obj',\ |
libio ,'libio.obj',\ |
libgfx,'libgfx.obj' |
|
import libini, \ |
ini.get_str,'ini.get_str',\ |
ini.set_str,'ini.set_str',\ |
ini.get_int,'ini.get_int',\ |
ini.set_int,'ini.set_int',\ |
ini.enum_sections,'ini.enum_sections',\ |
ini.enum_keys,'ini.enum_keys' |
|
import libio, \ |
file.aux.match_wildcard,'file.aux.match_wildcard',\ |
file.find_first,'file.find_first',\ |
file.find_next,'file.find_next',\ |
file.find_close,'file.find_close',\ |
file.open,'file.open',\ |
file.seek,'file.seek',\ |
file.write,'file.write',\ |
file.truncate,'file.truncate',\ |
file.close,'file.close' |
|
import libgfx, \ |
gfx.open ,'gfx.open',\ |
gfx.close ,'gfx.close',\ |
gfx.pen.color ,'gfx.pen.color',\ |
gfx.brush.color ,'gfx.brush.color',\ |
gfx.pixel ,'gfx.pixel',\ |
gfx.move.to ,'gfx.move.to',\ |
gfx.line.to ,'gfx.line.to',\ |
gfx.line ,'gfx.line',\ |
gfx.polyline ,'gfx.polyline',\ |
gfx.polyline.to ,'gfx.polyline.to',\ |
gfx.fillrect ,'gfx.fillrect',\ |
gfx.fillrect.ex ,'gfx.fillrect.ex',\ |
gfx.framerect ,'gfx.framerect',\ |
gfx.framerect.ex,'gfx.framerect.ex',\ |
gfx.rectangle ,'gfx.rectangle',\ |
gfx.rectangle.ex,'gfx.rectangle.ex' |
|
I_END: |
|
fh dd ? |
|
buf rb 1024 |