kolibrios-fun/programs/fs/unz/parse.inc

265 lines
3.4 KiB
PHP
Raw Normal View History

; ret:
; 0 - not found param
; 1 - found param
; 2 - error parsing
proc getLastParam ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> fInp
xor al, al ;to end string
mov edi, params
mov ecx, 4096
repne scasb
dec edi
dec edi
test ecx, ecx
jz errorParsing
mov eax, ecx ; - spaces
mov ecx, 4096
sub ecx, eax
mov al, ' '
std
repe scasb
cld
inc edi
inc ecx
cmp edi, params
je .noparams
cmp [edi], byte '"'
je .quotation
mov al, ' ' ;find previous space or begin string
std
repne scasb
cld
inc edi
inc edi
mov esi, edi ;copy
mov ebx, edi
mov edi, fInp
xor ecx, ecx
@@:lodsb
cmp al, ' '
je @f
test al, al
je @f
stosb
inc ecx
jmp @b
@@:
mov [edi], byte 0
inc edi
mov edi, ebx ;clear
mov al, ' '
rep stosb
jmp .end
.quotation:
dec edi
mov al, '"'
std
repne scasb
cld
add edi, 2
cmp [edi-1], byte '"'
jne .err
mov esi, edi
mov ebx, edi
mov edi, fInp
xor ecx, ecx
@@:lodsb
cmp al, '"'
je @f
test al, al
je @f
stosb
inc ecx
jmp @b
@@:
mov [edi], byte 0
inc edi
mov edi, ebx
dec edi
mov al, ' '
add ecx, 2
rep stosb
.end:
mov eax, 1
ret
.err:
mov eax, 2
ret
.noparams:
xor eax, eax
endp
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pathOut
proc getParamOutPath
locals
retrn rd 0
endl
mov [retrn], 0
mov ebx, params
.find_o:
cmp [ebx], word '-o'
jne .find_o2
mov edx, ebx
lea esi, [ebx+3]
@@: ;skiping spaces
cmp esi, params+4096
jae .errorParsing
cmp byte[esi], ' '
jne @f
inc esi
jmp @b
@@:
;copying ; -o "file"
mov ecx, 3
cmp byte[esi], '"'
jne ._notspace
inc esi
add ecx, 2
mov edi, pathOut
mov [retrn], 1
@@: lodsb
cmp al, '"'
je .clear
stosb
inc ecx
cmp esi, params+1024
jae errorParsing
jmp @b
._notspace: ;copying ; -o file
mov edi, pathOut
@@: lodsb
stosb
inc ecx
cmp al, ' '
je .clear
cmp esi, params+1024
jae errorParsing
jmp @b
.clear: ;cleaning param
mov [edi], byte 0
inc edi
mov [retrn], 1
@@:
mov byte[edx], ' '
inc edx
loop @b
jmp @f
.find_o2:
inc ebx
cmp ebx, params+1024
jae @f
cmp byte[ebx], 0
je @f
jmp .find_o
@@:
mov eax, [retrn]
ret
.errorParsing:
mov eax, 2
ret
endp
proc getParam key:word
locals
retrn rd 0
endl
mov [retrn], 0
mov ebx, params
.find_o:
mov ax, [key]
cmp [ebx], ax
jne .find_o2
mov edx, ebx
lea esi, [ebx+3]
@@: ;skiping spaces
cmp esi, params+4096
jae .errorParsing
cmp byte[esi], ' '
jne @f
inc esi
jmp @b
@@:
;variant1: copying ; -f "file"
mov ecx, 3
cmp byte[esi], '"'
jne ._notspace
inc esi
add ecx, 2
mov edi, [endPointer]
mov [retrn], 1
@@: lodsb
cmp al, '"'
je .clear
stosb
inc ecx
cmp esi, params+4096
jae errorParsing
jmp @b
._notspace: ;variant2: copying ; -f file
mov edi, [endPointer]
@@: lodsb
stosb
inc ecx
cmp al, ' '
je .clear
cmp esi, params+4096
jae errorParsing
jmp @b
.clear: ;cleaning param
mov [edi], byte 0
inc edi
mov [endPointer], edi
mov [retrn], 1
@@:
mov byte[edx], ' '
inc edx
loop @b
jmp @f
.find_o2:
inc ebx
cmp ebx, params+4096
jae @f
cmp byte[ebx], 0
je @f
jmp .find_o
@@:
mov eax, [retrn]
ret
.errorParsing:
mov eax, 2
ret
endp