Subversion Repositories Kolibri OS

Rev

Rev 269 | Rev 281 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 269 Rev 278
Line 279... Line 279...
279
restore  out_size
279
restore  out_size
280
 
280
 
Line 281... Line 281...
281
align 4
281
align 4
282
proc get_service stdcall, sz_name:dword
282
proc get_service stdcall, sz_name:dword
283
	   locals
-
 
284
	     srv_ptr  dd ?
-
 
285
	     counter  dd ?
-
 
286
           endl
-
 
287
 
-
 
288
           mov eax, [sz_name]
283
           mov eax, [sz_name]
289
           test eax, eax
284
           test eax, eax
290
           jnz @F
285
           jnz @F
291
           ret
286
           ret
292
@@:
287
@@:
293
           mov [srv_ptr], srv_tab
-
 
294
           mov [counter], 16
288
           mov edx, [srv.fd]
295
@@:
289
@@:
-
 
290
           cmp edx, srv.fd-SRV_FD_OFFSET
-
 
291
           je .not_load
-
 
292
 
296
           stdcall strncmp, [srv_ptr], [sz_name], 16
293
           stdcall strncmp, edx, [sz_name], 16
297
           test eax, eax
294
           test eax, eax
298
           je .ok
295
           je .ok
Line 299... Line 296...
299
 
296
 
300
           add [srv_ptr], SRV_SIZE
-
 
301
           dec [counter]
297
           mov edx, [edx+SRV.fd]
302
           jnz @B
298
           jmp @B
303
.not_load:
299
.not_load:
304
           stdcall find_service, [sz_name]
300
           stdcall find_service, [sz_name]
305
           test eax, eax
301
           test eax, eax
306
           jnz @F
-
 
307
           ret
-
 
308
@@:
302
           jz @F
-
 
303
           stdcall load_driver, eax
309
           stdcall load_driver, eax
304
@@:
310
           ret
305
           ret
311
.ok:
306
.ok:
312
           mov eax, [srv_ptr]
307
           mov eax, edx
313
           ret
308
           ret
Line 314... Line 309...
314
endp
309
endp
315
 
310
 
Line 341... Line 336...
341
           ret
336
           ret
342
endp
337
endp
343
 
338
 
Line 344... Line 339...
344
align 4
339
align 4
345
proc reg_service stdcall, sz_name:dword, handler:dword
-
 
346
	   locals
340
reg_service:
347
	     srv dd ?
341
.sz_name equ esp+4
348
	   endl
342
.handler equ esp+8
349
 
-
 
350
	   mov eax, [sz_name]
343
           mov eax, [.sz_name]
351
	   test eax, eax
344
	   test eax, eax
352
	   jz .fail
345
	   jz .fail
Line 353... Line 346...
353
 
346
 
354
	   mov ebx, [handler]
347
           mov ebx, [.handler]
355
	   test ebx, ebx
348
	   test ebx, ebx
Line -... Line 349...
-
 
349
	   jz .fail
356
	   jz .fail
350
 
357
 
351
           mov eax, SRV_SIZE
358
	   call alloc_service
352
           call malloc           ;call alloc_service
Line 359... Line -...
359
	   test eax, eax
-
 
360
	   jz .fail
353
	   test eax, eax
361
 
354
	   jz .fail
362
	   mov [srv], eax
355
 
363
	   mov edi, eax
356
	   mov edi, eax
-
 
357
           mov esi, [.sz_name]
-
 
358
           mov ecx, 16/4
-
 
359
           rep movsd
-
 
360
 
-
 
361
           mov [eax+SRV.magic], ' SRV'
-
 
362
           mov [eax+SRV.size], SRV_SIZE
-
 
363
 
-
 
364
           mov ebx, srv.fd-SRV_FD_OFFSET
-
 
365
           mov edx, [ebx+SRV.fd]
-
 
366
           mov [eax+SRV.fd], edx
Line 364... Line -...
364
	   mov esi, [sz_name]
-
 
365
	   mov ecx, 16
-
 
366
	   rep movsb
-
 
367
 
367
           mov [eax+SRV.bk], ebx
368
	   mov edi, eax
368
           mov [ebx+SRV.fd], eax
369
	   mov [edi+SRV.magic], ' SRV'
-
 
370
	   mov [edi+SRV.size], SRV_SIZE
369
           mov [edx+SRV.bk], eax
371
	   mov ebx, [handler]
370
 
372
	   mov [edi+SRV.srv_proc], ebx
371
           mov ecx, [.handler]
373
           mov eax, [srv]
372
           mov [eax+SRV.srv_proc], ecx
374
	   ret
-
 
Line 375... Line 373...
375
.fail:
373
	   ret
376
	   xor eax, eax
374
.fail:
Line 377... Line 375...
377
	   ret
375
	   xor eax, eax
Line 965... Line 963...
965
           xor eax, eax
963
           xor eax, eax
966
           ret
964
           ret
967
endp
965
endp
968
 
966
 
Line -... Line 967...
-
 
967
 
969
align 4
968
align 4
970
proc stop_all_services
969
proc stop_all_services
-
 
970
 
971
           not [srv_map]
971
           mov edx, [srv.fd]
972
.next:
972
.next:
973
           bsf eax, [srv_map]
973
           cmp edx,  srv.fd-SRV_FD_OFFSET
974
           jnz .find
974
           je .done
975
           ret
-
 
976
.find:
-
 
977
           btr [srv_map], eax
-
 
978
           shl eax,0x02
-
 
979
           lea eax,[srv_tab+eax+eax*8]   ;srv_tab+eax*36
-
 
980
           cmp [eax+SRV.magic], ' SRV'
975
           cmp [edx+SRV.magic], ' SRV'
981
           jne .next
976
           jne .next
982
           cmp [eax+SRV.size], SRV_SIZE
977
           cmp [edx+SRV.size], SRV_SIZE
983
           jne .next
978
           jne .next
984
           mov ebx, [eax+SRV.entry]
979
           mov ebx, [edx+SRV.entry]
-
 
980
           mov edx, [edx+SRV.fd]
-
 
981
           push edx
985
           stdcall ebx, dword -1
982
           stdcall ebx, dword -1
-
 
983
           pop edx
986
           jmp .next
984
           jmp .next
-
 
985
.done:
-
 
986
           ret
987
endp
987
endp
Line 988... Line 988...
988
 
988
 
989
 
989