forked from KolibriOS/kolibrios
6e3f4100a5
git-svn-id: svn://kolibrios.org@2296 a494cfbc-eb01-0410-851d-a64ba20cac60
697 lines
10 KiB
PHP
697 lines
10 KiB
PHP
;
|
||
; ‘âàãªâãà ¤«ï äãªæ¨¨ 70
|
||
;
|
||
|
||
struc sinfo
|
||
{
|
||
.subfnc_name dd 0
|
||
.pos_in_file dd 0
|
||
.reserved dd 0
|
||
.bytes_to_read dd 0
|
||
.pbuffer dd 0
|
||
.null db 0
|
||
.pname dd 0
|
||
}
|
||
|
||
|
||
|
||
|
||
;
|
||
; â ¡«¨æë § 票©
|
||
;
|
||
; +----+-------------+-----------------+
|
||
; | in | Variable | Variable |
|
||
; | de | name | string |
|
||
; | x | | |
|
||
; | | | |
|
||
; +----+-------------+-----------------+
|
||
; | | | |
|
||
; | | | |
|
||
; | 1 | UIN | 'XXXXX..XX',0 |
|
||
; | | | |
|
||
; +----+-------------+-----------------+
|
||
; | | |
|
||
;
|
||
; § £à㧪 int ¯®ª ¥ ॠ«¨§®¢
|
||
;
|
||
; +----+-------------+-----------------+
|
||
; | in | Variable | Variable |
|
||
; | de | name | int |
|
||
; | x | | |
|
||
; | | | |
|
||
; +----+-------------+-----------------+
|
||
; | | | |
|
||
; | | | |
|
||
; | 1 | BUFFSIZE | XXXXXXXX |
|
||
; | | | |
|
||
; +----+-------------+-----------------+
|
||
; | | |
|
||
;
|
||
;
|
||
|
||
|
||
TABLE_SIZE equ 16
|
||
VNAME_LEN equ 8
|
||
VAR_LEN equ 16
|
||
|
||
;
|
||
; Ž¯¨á ¨¥ â ¡«¨æë § 票©
|
||
|
||
virtual at 0
|
||
vartable:
|
||
.uin db VAR_LEN dup ?
|
||
.pass db VAR_LEN dup ?
|
||
.icqip db VAR_LEN dup ?
|
||
|
||
|
||
|
||
end virtual
|
||
|
||
|
||
;
|
||
; Š®¤ë ®è¨¡®ª ä ©«®¢®© á¨á⥬ë
|
||
;
|
||
|
||
FIO_SUCCESS equ 0
|
||
FIO_UNSUPPORTED equ 2
|
||
FIO_UNKNOWNFS equ 3
|
||
FIO_FILENOTFOUND equ 5
|
||
FIO_EOF equ 6
|
||
FIO_BADPOINTER equ 7
|
||
FIO_DISKFULL equ 8
|
||
FIO_FATDAMAGED equ 9
|
||
FIO_DENIED equ 10
|
||
FIO_ERRORDEVICE equ 11
|
||
|
||
|
||
IOBUFF_SIZE equ 128
|
||
|
||
|
||
|
||
|
||
;
|
||
; ¬ ªà®á ¤«ï ¯®¨áª í«¥¬¥â ¢ áâப¥
|
||
; ¢®§¢à é ¥â ¢ eax ®¬¥à í«¥¬¥â ¨«¨ -1 ¥á«¨ ¥ ©¤¥
|
||
macro findchar string, len, char
|
||
{
|
||
local ..fc_endstr, ..fc_end
|
||
|
||
push ebx
|
||
push ecx
|
||
push edi
|
||
|
||
|
||
mov edi, string
|
||
mov ecx, len
|
||
mov ebx, ecx
|
||
cld
|
||
mov al, char
|
||
repne scasb
|
||
jcxz ..fc_endstr
|
||
|
||
sub ebx, ecx ; <EFBFBD>®¬¥à =
|
||
mov eax, ebx
|
||
jmp ..fc_end
|
||
|
||
..fc_endstr:
|
||
mov eax, -1
|
||
|
||
|
||
..fc_end:
|
||
pop edi
|
||
pop ecx
|
||
pop ebx
|
||
|
||
}
|
||
|
||
;
|
||
; Œ ªà®á ¤«ï ¯®¨áª í«¥¬¥â áâப¨, ®â«¨ç î饣®áï ®â
|
||
; § ¤ ®£®
|
||
|
||
macro findother string, len, char
|
||
{
|
||
local ..fc_endstr, ..fc_end
|
||
|
||
push ebx
|
||
push ecx
|
||
push edi
|
||
|
||
|
||
mov edi, string
|
||
mov ecx, len
|
||
mov ebx, ecx
|
||
cld
|
||
mov al, char
|
||
repe scasb ; …᫨ ᨬ¢®« ¥ char - ¢ë室¨¬
|
||
jcxz ..fc_endstr ; áâப ¨§ char
|
||
|
||
sub ebx, ecx ; ¢ ebx - ®¬¥à í«¥¬¥â ®â«¨ç®£® ®â char
|
||
mov eax, ebx
|
||
jmp ..fc_end
|
||
|
||
..fc_endstr:
|
||
mov eax, -1
|
||
|
||
|
||
..fc_end:
|
||
pop edi
|
||
pop ecx
|
||
pop ebx
|
||
}
|
||
|
||
;
|
||
; Œ ªà®á ¤«ï ª®¯¨à®¢ ¨ï áâப
|
||
;
|
||
macro mstrcpy from, to, leng
|
||
{
|
||
|
||
push ecx
|
||
push esi
|
||
push edi
|
||
|
||
mov ecx, leng
|
||
mov esi, from
|
||
mov edi, to
|
||
cld
|
||
rep movsb
|
||
|
||
pop edi
|
||
pop esi
|
||
pop ecx
|
||
|
||
}
|
||
|
||
|
||
;
|
||
; ˆ¨æ¨ «¨§¨àã¥â â ¡«¨æë
|
||
;
|
||
|
||
; inittables:
|
||
;
|
||
;
|
||
; mstrcpy name1, nvtable, VNAME_LEN
|
||
; mstrcpy name2, (nvtable + NAME_LEN), VNAME_LEN
|
||
; mstrcpy name3, (nvtable + NAME_LEN * 2), VNAME_LEN
|
||
;
|
||
;
|
||
;
|
||
; ret
|
||
|
||
|
||
;
|
||
; § ¯®«ï¥â â ¡«¨æë § 票ﬨ
|
||
; IN eax - ASCIIZ ¨¬ï ä ©«
|
||
; OUT eax - १ã«ìâ â ç⥨ï
|
||
; ¥á«¨ १ã«ìâ â -1, ä®à¬ â ä ©« ¥¯à ¢¨«ìë©
|
||
;
|
||
parseconf:
|
||
push edi
|
||
push esi
|
||
;push eax
|
||
push ebx
|
||
push ecx
|
||
push edx
|
||
|
||
mov [strnum], dword 0
|
||
|
||
;
|
||
; <EFBFBD>à®ç¨â âì ¯®áâà®ç® ª®ä¨£
|
||
; ¥á«¨ áâப ç¨ ¥âáï á ;, # - ª®¬¬¥â ਩
|
||
; ”®à¬ â UIN="1234567890"
|
||
; PASS="******" ¨ â.¤.
|
||
|
||
;
|
||
; ‘¡à®á ᬥ饨ï
|
||
mov [shift], dword 0
|
||
|
||
mov esi, eax
|
||
|
||
pc_still:
|
||
|
||
mov edx, esi
|
||
mov ecx, IOBUFF_SIZE
|
||
mov ebx, iobuff
|
||
|
||
call getstr
|
||
|
||
inc [strnum]
|
||
|
||
push eax
|
||
|
||
;
|
||
;<EFBFBD>஢¥àª ¯®«ã祮© áâப¨
|
||
;
|
||
movzx eax, byte [iobuff]
|
||
|
||
test eax, eax
|
||
jz pc_next
|
||
|
||
cmp al, '#'
|
||
jz pc_next
|
||
|
||
cmp al, ';'
|
||
jz pc_next
|
||
|
||
;
|
||
; <EFBFBD> ©â¨ ¨¬ï ¯¥à¥¬¥®©
|
||
;
|
||
findother iobuff, ebx, ' '
|
||
cmp eax, -1
|
||
jz pc_next
|
||
|
||
mov [stnpos], eax ; ç «® ¨¬¥¨
|
||
|
||
;
|
||
; ©â¨ =
|
||
;
|
||
mov ecx, ebx ; ˆáª âì ®â ©¤¥®£® ᨬ¢®«
|
||
sub ecx, eax ;
|
||
|
||
mov edi, iobuff
|
||
add edi, eax
|
||
|
||
findchar edi, ecx, '='
|
||
|
||
cmp eax, -1
|
||
jz pc_badformat
|
||
|
||
mov edi, [stnpos]
|
||
add eax, edi ; ¢ eax - ᬥ饨¥ ®â ç « áâப¨
|
||
mov [eqpos], eax
|
||
|
||
mov ecx, ebx
|
||
sub ecx, eax
|
||
|
||
;
|
||
; ¯à®¢¥à¨âì "
|
||
;
|
||
mov dl, [iobuff + eax]
|
||
cmp dl, '"'
|
||
jnz pc_badformat
|
||
;
|
||
; ©â¨ § ªàë¢ îéãî "
|
||
;
|
||
mov edi, iobuff
|
||
add edi, eax
|
||
|
||
inc edi
|
||
|
||
findchar edi, ecx, '"'
|
||
|
||
cmp eax, -1
|
||
jz pc_badformat
|
||
|
||
inc eax
|
||
|
||
mov edx, [eqpos]
|
||
add eax, edx
|
||
mov [edvpos], eax
|
||
|
||
;
|
||
; “áâ ®¢¨âì § 票¥
|
||
;
|
||
; „®¡ ¢¨âì § ¢¥àè î騥 0
|
||
|
||
mov eax, [stnpos]
|
||
dec eax
|
||
|
||
|
||
mov ebx, [eqpos]
|
||
mov ecx, ebx
|
||
dec ecx ; ª®«¨ç¥á⢮ ᨬ¢®«®¢ ¤® =
|
||
inc ebx ; <20>யãáâ¨âì "
|
||
|
||
mov [iobuff + ecx], byte 0
|
||
|
||
mov edx, [edvpos]
|
||
dec edx
|
||
|
||
mov [iobuff + edx], byte 0
|
||
|
||
lea eax, [iobuff + eax]
|
||
lea ebx, [iobuff + ebx]
|
||
call setavar
|
||
|
||
jmp pc_next
|
||
|
||
|
||
|
||
|
||
pc_badformat:
|
||
pop eax
|
||
|
||
mov ebx, [strnum]
|
||
jmp pc_err
|
||
|
||
|
||
pc_next:
|
||
pop eax
|
||
|
||
cmp eax, FIO_EOF
|
||
jz pc_eof
|
||
cmp eax, FIO_SUCCESS
|
||
jnz pc_err
|
||
|
||
jmp pc_still
|
||
|
||
|
||
|
||
pc_eof:
|
||
pc_err:
|
||
pop edx
|
||
pop ecx
|
||
pop ebx
|
||
;pop eax
|
||
pop esi
|
||
pop edi
|
||
ret
|
||
|
||
; <EFBFBD>®¨áª ¢ â ¡«¨æ¥ ¯¥à¥¬¥®© ¨ ãáâ ®¢ª ¥ñ § 票ï
|
||
; IN eax - §¢ ¨¥ ¯¥à¥¬¥®© 㪠§ ⥫ì ASCIIZ
|
||
; IN ebx - § 票¥ ¯¥à¥¬¥®© 㪠§ ⥫ì ASCIIZ
|
||
; OUT eax -१ã«ìâ â 0 = OK, -1 = ¥â ¢ â ¡«¨æ¥ ¯¥à¥¬¥ëå
|
||
; OUT § ¯®«ï¥â £«®¡ «ìãî â ¡«¨æã
|
||
setavar:
|
||
;push ebx
|
||
push ecx
|
||
push edx
|
||
push esi
|
||
push edi
|
||
push ebx
|
||
|
||
;
|
||
; Ž¯à¥¤¥«¨âì ¤«¨ã áâப¨ - §¢ ¨¥ ¯¥à¥¬¥®©
|
||
;
|
||
mov edi, eax
|
||
push eax
|
||
|
||
mov ecx, VNAME_LEN
|
||
|
||
xor eax, eax ;ˆé¥¬ \0
|
||
cld
|
||
repne scasb
|
||
|
||
mov eax, VNAME_LEN
|
||
sub eax, ecx ; ‚ ecx - ®áâ ⮪ ¤® ¬ ªá¨¬ «ì®£® à §¬¥à áâப¨
|
||
mov ebx, eax
|
||
|
||
|
||
pop eax
|
||
;
|
||
; ˆáª âì ¢ â ¡«¨æ¥ ¯®¤å®¤ï饥 ¨¬ï
|
||
;
|
||
xor edx, edx ;index
|
||
|
||
sv_next:
|
||
mov ecx, ebx
|
||
push eax
|
||
mov esi, eax
|
||
mov edi, nvtable
|
||
mov eax, edx
|
||
imul eax, VNAME_LEN ;offset
|
||
add edi, eax
|
||
pop eax
|
||
cld
|
||
|
||
repe cmpsb
|
||
jz sv_match
|
||
|
||
sv_inc:
|
||
inc edx
|
||
cmp edx, TABLE_SIZE
|
||
jae sv_fail
|
||
jmp sv_next
|
||
|
||
sv_match:
|
||
cmp ebx, VNAME_LEN ;‚ ebx - ¤«¨ ¨á室®© áâà®çª¨
|
||
jz sv_match2
|
||
|
||
push eax
|
||
mov edi, nvtable
|
||
mov eax, edx
|
||
imul eax, VNAME_LEN ;offset
|
||
add edi, eax
|
||
pop eax
|
||
|
||
cmp [edi + ebx], byte 0 ; …᫨ ¨¬ï ¢ â ¡«¨æ¥ ª®à®ç¥ ¬ ªá¨¬ «ì®£®,
|
||
jnz sv_inc ; § ª 稢 ¥âáï 0
|
||
|
||
sv_match2:
|
||
pop edi ;
|
||
push edi
|
||
;
|
||
; Ž¯à¥¤¥«ïâì ¤«¨ã áâப¨ - ¯¥à¥¬¥ ï
|
||
;
|
||
xor eax, eax
|
||
mov ecx, VAR_LEN
|
||
cld
|
||
repne scasb
|
||
|
||
mov eax, VAR_LEN
|
||
sub eax, ecx
|
||
mov ecx, eax
|
||
mov ebx, eax
|
||
|
||
;
|
||
; Š®¯¨à®¢ âì ¯¥à¥¬¥ãî ¢ â ¡«¨æã
|
||
;
|
||
|
||
pop esi
|
||
push esi
|
||
|
||
mov eax, VAR_LEN
|
||
imul eax, edx
|
||
mov edi, vtable
|
||
add edi, eax
|
||
cld
|
||
rep movsb
|
||
|
||
;
|
||
; …᫨ áâப ª®à®ç¥ ¯®«ï ¢ â ¡«¨æ¥, § ¯¨á âì ¢ ª®¥æ 0
|
||
;
|
||
cmp ebx, VAR_LEN
|
||
jz sv_end
|
||
mov [edi + ebx], byte 0
|
||
|
||
|
||
|
||
sv_end:
|
||
xor eax, eax
|
||
jmp sv_fin
|
||
|
||
sv_fail:
|
||
mov eax, -1
|
||
|
||
sv_fin:
|
||
|
||
pop ebx
|
||
pop edi
|
||
pop esi
|
||
pop edx
|
||
pop ecx
|
||
;pop ebx
|
||
ret
|
||
|
||
|
||
|
||
|
||
|
||
;
|
||
; —⥨¥ ASCIIZ áâப¨ ¨§ ä ©«
|
||
; IN ebx - 㪠§ â¥«ì ¡ãä¥à
|
||
; ecx - à §¬¥à ¡ãä¥à
|
||
; edx - 㪠§ ⥫ì áâப㠨¬ï ä ©«
|
||
; OUT ebx - ¤«¨ áâப¨
|
||
; eax - १ã«ìâ â ç⥨ï
|
||
|
||
getstr:
|
||
;push eax
|
||
;push ebx
|
||
push ecx
|
||
push edx
|
||
push esi
|
||
|
||
;xor edx, edx
|
||
xor esi, esi
|
||
|
||
gs_read:
|
||
;
|
||
; ‡ ¯®«ï¥¬ áâàãªâãàã
|
||
;
|
||
mov [finfo.subfnc_name], 0
|
||
mov eax, [shift]
|
||
mov [finfo.pos_in_file], eax
|
||
mov [finfo.bytes_to_read], ecx
|
||
mov [finfo.pbuffer], ebx
|
||
mov [finfo.pname], edx
|
||
|
||
push ebx
|
||
|
||
;
|
||
; —¨â¥¬
|
||
;
|
||
;mov eax, 70
|
||
;mov ebx, finfo
|
||
;int 40h
|
||
mcall 70, finfo
|
||
|
||
mov ecx, ebx ; ‚ ebx ª®«¨ç¥á⢮ ¯à®çâ¥ëå ¡ ©â
|
||
|
||
pop ebx
|
||
|
||
;
|
||
; <EFBFBD>஢¥à¨âì १ã«ìâ â ç⥨ï - ¥á«¨ ¥ EOF ¨ 0,
|
||
; ¢ë室¨¬
|
||
cmp eax, FIO_EOF
|
||
jz gs_loop
|
||
cmp eax, 0
|
||
jz gs_loop
|
||
|
||
jmp gs_ok
|
||
|
||
|
||
;
|
||
; Ž¡à ¡®âª ¯®«ã祮£® ¡«®ª
|
||
;
|
||
gs_loop:
|
||
mov dl, [ebx + esi]
|
||
cmp dl, 0Ah ;cr
|
||
jz gs_cr
|
||
inc esi
|
||
cmp esi, ecx
|
||
jnb gs_err
|
||
jmp gs_loop
|
||
|
||
gs_err:
|
||
;
|
||
; ‚ ¡ãä¥à¥ ¥â ᨬ¢®« ¯¥à¥®á áâப¨, â.¥. áâப ᫨誮¬ ¤«¨ ï
|
||
; Žâ¡à áë¢ ¥¬ ¢á¥ ¤® ¡«¨¦ ©è¥£® ᨬ¢®« ¯¥à¥®á áâப¨
|
||
; ¥á«¨ ª®¥æ ä ©« - ¢ë室¨¬
|
||
cmp eax, FIO_EOF
|
||
jz gs_endf
|
||
add [shift], ecx
|
||
jmp gs_read
|
||
|
||
|
||
gs_endf:
|
||
xor ebx, ebx
|
||
jmp gs_ok
|
||
|
||
gs_cr:
|
||
;
|
||
; ‘¡à®á¨âì १ã«ìâ â ç⥨ï
|
||
;
|
||
xor eax, eax
|
||
|
||
mov dl, [ebx + esi - 1]
|
||
cmp dl, 0Dh ;le
|
||
jz gs_le
|
||
|
||
mov [ebx + esi], byte 0
|
||
mov ebx, esi
|
||
|
||
|
||
inc esi
|
||
add [shift], esi
|
||
|
||
jmp gs_ok
|
||
|
||
gs_le:
|
||
mov [ebx + esi - 1], byte 0
|
||
mov [ebx + esi], byte 0
|
||
lea ebx, [esi - 1]
|
||
|
||
inc esi
|
||
add [shift], esi
|
||
|
||
gs_ok:
|
||
|
||
|
||
pop esi
|
||
pop edx
|
||
pop ecx
|
||
;pop ebx
|
||
;pop eax
|
||
ret
|
||
|
||
|
||
;
|
||
; ”ãªæ¨ï ¤«ï ¢ë¢®¤ § £à㦥®© ¨äë
|
||
;
|
||
|
||
showcfg:
|
||
push eax
|
||
push ebx
|
||
push ecx
|
||
push edx
|
||
push edi
|
||
|
||
|
||
xor edx, edx ; áç¥â稪
|
||
|
||
sc_loop:
|
||
|
||
cmp edx, TABLE_SIZE
|
||
jnb sc_end
|
||
|
||
;
|
||
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¨¬ï ¨ § 票¥ ¯¥à¥¬¥®©
|
||
;
|
||
mov eax, VNAME_LEN
|
||
imul eax, edx
|
||
lea eax, [nvtable + eax]
|
||
|
||
mov cl, [eax]
|
||
cmp cl, byte 0
|
||
jz sc_next
|
||
|
||
push eax
|
||
call strlen
|
||
|
||
mov ecx, eax
|
||
pop eax
|
||
|
||
mov ebx, cfgbuff
|
||
|
||
call strcpy
|
||
|
||
mov [cfgbuff + ecx], ':'
|
||
|
||
lea ebx, [cfgbuff + ecx + 1]
|
||
|
||
mov eax, VAR_LEN
|
||
imul eax, edx
|
||
lea eax, [vtable + eax]
|
||
|
||
push eax
|
||
call strlen
|
||
|
||
mov ecx, eax
|
||
pop eax
|
||
|
||
call strcpy
|
||
|
||
mov [ebx + ecx], byte 0
|
||
|
||
mov eax, cfgbuff
|
||
xor ebx, ebx
|
||
call writemsg
|
||
|
||
sc_next:
|
||
|
||
inc edx
|
||
|
||
jmp sc_loop
|
||
|
||
|
||
|
||
sc_end:
|
||
pop edi
|
||
pop edx
|
||
pop ecx
|
||
pop ebx
|
||
pop eax
|
||
|
||
ret
|
||
|