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 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 @^ ; commenting out, file.aux.match_wildcard is no longer exported 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,0 cmp dword[buf],'102' jne exit invoke ini.get_str,s_ini,s_sec,s_key2,buf,1024,0 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