Subversion Repositories Kolibri OS

Rev

Rev 7113 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7113 GerdtR 1
; ret:
2
; 0 - not found param
3
; 1 - found param
4
; 2 - error parsing
5
 
6
proc getLastParam	;последний параметр пишет в fInp
7
xor	al, al		;to end sring
8
	mov	edi, params
9
	mov	ecx, 4096
10
	repne	scasb
11
	dec	edi
12
	dec	edi
13
	test	ecx, ecx
14
	jz	errorParsing
15
 
16
	mov	eax, ecx       ; - spaces
17
	mov	ecx, 4096
18
	sub	ecx, eax
19
	mov	al, ' '
20
	std
21
	repe	scasb
22
	cld
23
	inc	edi
24
	inc	ecx
25
 
26
	cmp	edi, params
27
	je	.noparams
28
 
29
	cmp	[edi], byte '"'
30
	je	.quotation
31
 
32
	mov	al, ' ' 	;find previous space or begin string
33
	std
34
	repne	scasb
35
	cld
36
	inc	edi
37
	inc	edi
38
 
39
	mov	esi, edi	;copy
40
	mov	ebx, edi
41
	mov	edi, fInp
42
 
43
	xor	ecx, ecx
44
     @@:lodsb
45
	cmp	al, ' '
46
	je	@f
47
	test	al, al
48
	je	@f
49
	stosb
50
	inc	ecx
51
	jmp	@b
52
     @@:
53
	mov	[edi], byte 0
54
	inc	edi
55
 
56
	mov	edi, ebx	;clear
57
	mov	al, ' '
58
	rep stosb
59
 
60
	jmp	.end
61
 .quotation:
62
	dec	edi
63
	mov	al, '"'
64
	std
65
	repne	scasb
66
	cld
67
	add	edi, 2
68
	cmp	[edi-1], byte '"'
69
	jne	.err
70
 
71
	mov	esi, edi
72
	mov	ebx, edi
73
	mov	edi, fInp
74
	xor	ecx, ecx
75
     @@:lodsb
76
	cmp	al, '"'
77
	je	@f
78
	test	al, al
79
	je	@f
80
	stosb
81
	inc	ecx
82
	jmp	@b
83
     @@:
84
	mov	[edi], byte 0
85
	inc	edi
86
 
87
	mov	edi, ebx
88
	dec	edi
89
	mov	al, ' '
90
	add	ecx, 2
91
	rep stosb
92
 
93
.end:
94
	mov	eax, 1
95
	ret
96
.err:
97
	mov	eax, 2
98
	ret
99
.noparams:
100
	xor	eax, eax
101
endp
102
 
103
 
104
proc getParam2
105
locals
106
retrn rd 0
107
endl
108
	mov	[retrn], 0
109
	mov	ebx, params
110
  .find_o:
111
	cmp	[ebx], word '-o'
112
	jne	.find_o2
113
	mov	edx, ebx
114
	lea	esi, [ebx+3]
115
   @@:				;skiping spaces
116
	cmp	esi, pathOut+1024
117
	jae	.errorParsing
118
	cmp	byte[esi], ' '
119
	jne	@f
120
	inc	esi
121
	jmp	@b
122
   @@:				;copying        ; -o "file"
123
	mov	ecx, 3
124
	cmp	byte[esi], '"'
125
	jne	._notspace
126
	inc	esi
127
	add	ecx, 2
128
	mov	edi, pathOut
129
	mov	[retrn], 1
130
    @@: lodsb
131
	cmp	al, '"'
132
	je	.clear
133
	stosb
134
	inc	ecx
135
	cmp	esi, pathOut+1024
136
	jae	errorParsing
137
	jmp	@b
138
 
139
     ._notspace:		;copying        ; -o file
140
	mov	edi, pathOut
141
    @@: lodsb
142
	stosb
143
	inc	ecx
144
	cmp	al, ' '
145
	je	.clear
146
	cmp	esi, pathOut+1024
147
	jae	errorParsing
148
	jmp	@b
149
 
150
     .clear:			;cleaning param
151
	mov	[edi], byte 0
152
	inc	edi
153
	mov	[retrn], 1
154
      @@:
155
	mov	byte[edx], ' '
156
	inc	edx
157
	loop	@b
158
	jmp	@f
159
 
160
  .find_o2:
161
	inc	ebx
162
	cmp	ebx, pathOut+1024
163
	jae	@f
164
	cmp	byte[ebx], 0
165
	je	@f
166
	jmp	.find_o
167
  @@:
168
 
169
 
170
 
171
	mov	eax, [retrn]
172
	ret
173
.errorParsing:
174
	mov	eax, 2
175
	ret
176
endp
177
 
178
 
179
proc getParam key:word
180
locals
181
retrn rd 0
182
endl
183
	mov	[retrn], 0
184
	mov	ebx, params
185
 
186
  .find_o:
187
	mov	ax, [key]
188
	cmp	[ebx], ax
189
	jne	.find_o2
190
 
191
	mov	edx, ebx
192
	lea	esi, [ebx+3]
193
 
194
   @@:				;skiping spaces
195
	cmp	esi, params+4096
196
	jae	.errorParsing
197
	cmp	byte[esi], ' '
198
	jne	@f
199
	inc	esi
200
	jmp	@b
201
   @@:
202
 
203
				;copying        ; -f "file"
204
	mov	ecx, 3
205
	cmp	byte[esi], '"'
206
	jne	._notspace
207
	inc	esi
208
	add	ecx, 2
209
	mov	edi, [endPointer]
210
	mov	[retrn], 1
211
    @@: lodsb
212
	cmp	al, '"'
213
	je	.clear
214
	stosb
215
	inc	ecx
216
	cmp	esi, params+4096
217
	jae	errorParsing
218
	jmp	@b
219
 
220
     ._notspace:		;copying        ; -f file
221
	mov	edi, [endPointer]
222
    @@: lodsb
223
	stosb
224
	inc	ecx
225
	cmp	al, ' '
226
	je	.clear
227
	cmp	esi, params+4096
228
	jae	errorParsing
229
	jmp	@b
230
 
231
 
232
     .clear:			;cleaning param
233
	mov	[edi], byte 0
234
	inc	edi
235
	mov	[endPointer], edi
236
	mov	[retrn], 1
237
      @@:
238
	mov	byte[edx], ' '
239
	inc	edx
240
	loop	@b
241
 
242
	jmp	@f
243
 
244
  .find_o2:
245
	inc	ebx
246
	cmp	ebx, params+4096
247
	jae	@f
248
	cmp	byte[ebx], 0
249
	je	@f
250
	jmp	.find_o
251
  @@:
252
 
253
 
254
 
255
	mov	eax, [retrn]
256
	ret
257
.errorParsing:
258
	mov	eax, 2
259
	ret
260
endp