Rev 345 | Rev 357 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 345 | Rev 346 | ||
---|---|---|---|
Line 296... | Line 296... | ||
296 | 296 | ||
Line 297... | Line 297... | ||
297 | mov edx, [edx+SRV.fd] |
297 | mov edx, [edx+SRV.fd] |
298 | jmp @B |
298 | jmp @B |
299 | .not_load: |
299 | .not_load: |
300 | stdcall find_service, [sz_name] |
- | |
301 | test eax, eax |
- | |
302 | jz @F |
300 | pop ebp |
303 | stdcall load_driver, eax |
301 | jmp load_driver |
304 | @@: |
- | |
305 | ret |
- | |
306 | .ok: |
302 | .ok: |
307 | mov eax, edx |
303 | mov eax, edx |
308 | ret |
304 | ret |
309 | endp |
305 | endp |
Line 310... | Line 306... | ||
310 | 306 | ||
311 | align 4 |
- | |
312 | proc find_service stdcall ,sz_name:dword |
- | |
313 | - | ||
314 | mov eax, [sz_name] |
- | |
315 | test eax, eax |
- | |
316 | jz .fail |
- | |
317 | - | ||
318 | mov esi, services |
- | |
319 | @@: |
- | |
320 | mov eax, [esi] |
- | |
321 | test eax, eax |
- | |
322 | jz .fail |
- | |
323 | push esi |
- | |
324 | stdcall strncmp, eax, [sz_name], 16 |
- | |
325 | pop esi |
- | |
326 | test eax, eax |
- | |
327 | je .ok |
- | |
328 | - | ||
329 | add esi, 8 |
- | |
330 | jmp @B |
- | |
331 | .ok: |
- | |
332 | mov eax, [esi+4] |
- | |
333 | ret |
- | |
334 | .fail: |
- | |
335 | xor eax, eax |
- | |
336 | ret |
- | |
337 | endp |
- | |
338 | - | ||
339 | align 4 |
307 | align 4 |
340 | reg_service: |
308 | reg_service: |
341 | .sz_name equ esp+4 |
309 | .sz_name equ esp+4 |
342 | .handler equ esp+8 |
310 | .handler equ esp+8 |
343 | mov eax, [.sz_name] |
311 | mov eax, [.sz_name] |
Line 703... | Line 671... | ||
703 | ret |
671 | ret |
704 | endp |
672 | endp |
705 | 673 | ||
Line 706... | Line 674... | ||
706 | align 4 |
674 | align 4 |
707 | proc load_driver stdcall, file_name:dword |
675 | proc load_driver stdcall, driver_name:dword |
708 | locals |
676 | locals |
709 | coff dd ? |
677 | coff dd ? |
710 | sym dd ? |
678 | sym dd ? |
711 | strings dd ? |
679 | strings dd ? |
712 | img_size dd ? |
680 | img_size dd ? |
713 | img_base dd ? |
681 | img_base dd ? |
714 | start dd ? |
682 | start dd ? |
Line 715... | Line 683... | ||
715 | 683 | ||
716 | exports dd ? ;fake exports table |
684 | exports dd ? ;fake exports table |
- | 685 | dd ? |
|
717 | dd ? |
686 | file_name rb 14+16+4+1 ; '/rd/1/drivers/ |
Line -... | Line 687... | ||
- | 687 | endl |
|
- | 688 | ||
- | 689 | lea edx, [file_name] |
|
- | 690 | mov dword [edx], '/rd/' |
|
- | 691 | mov dword [edx+4], '1/dr' |
|
- | 692 | mov dword [edx+8], 'iver' |
|
- | 693 | mov word [edx+12], 's/' |
|
- | 694 | mov esi, [driver_name] |
|
- | 695 | lea edi, [edx+14] |
|
- | 696 | mov ecx, 16 |
|
- | 697 | @@: |
|
- | 698 | lodsb |
|
- | 699 | test al, al |
|
- | 700 | jz @f |
|
- | 701 | stosb |
|
- | 702 | loop @b |
|
- | 703 | @@: |
|
718 | endl |
704 | mov dword [edi], '.obj' |
Line 719... | Line 705... | ||
719 | 705 | mov byte [edi+4], 0 |
|
720 | stdcall load_file, [file_name] |
706 | stdcall load_file, edx |
Line 721... | Line 707... | ||
721 | 707 | ||
Line 833... | Line 819... | ||
833 | 819 | ||
Line 834... | Line 820... | ||
834 | .ver_fail: |
820 | .ver_fail: |
835 | mov esi, msg_CR |
821 | mov esi, msg_CR |
836 | call sys_msg_board_str |
822 | call sys_msg_board_str |
837 | mov esi, [file_name] |
823 | mov esi, [driver_name] |
838 | call sys_msg_board_str |
824 | call sys_msg_board_str |
839 | mov esi, msg_CR |
825 | mov esi, msg_CR |
840 | call sys_msg_board_str |
826 | call sys_msg_board_str |
841 | mov esi, msg_version |
827 | mov esi, msg_version |
842 | call sys_msg_board_str |
828 | call sys_msg_board_str |
Line 846... | Line 832... | ||
846 | 832 | ||
Line 847... | Line 833... | ||
847 | .link_fail: |
833 | .link_fail: |
848 | mov esi, msg_module |
834 | mov esi, msg_module |
849 | call sys_msg_board_str |
835 | call sys_msg_board_str |
850 | mov esi, [file_name] |
836 | mov esi, [driver_name] |
851 | call sys_msg_board_str |
837 | call sys_msg_board_str |
852 | mov esi, msg_CR |
838 | mov esi, msg_CR |
853 | call sys_msg_board_str |
839 | call sys_msg_board_str |
854 | .cleanup: |
840 | .cleanup: |
855 | stdcall kernel_free,[img_base] |
841 | stdcall kernel_free,[img_base] |
Line 1039... | Line 1025... | ||
1039 | call free ;release object memory |
1025 | call free ;release object memory |
1040 | ret |
1026 | ret |
Line 1041... | Line -... | ||
1041 | - | ||
1042 | - | ||
1043 | drv_sound db '/rd/1/drivers/unisound.obj', 0 |
- | |
1044 | drv_infinity db '/rd/1/drivers/infinity.obj', 0 |
- | |
1045 | drv_hw_mouse db '/rd/1/drivers/ati2d.obj',0 |
1027 | |
1046 | 1028 | ||
1047 | szSound db 'SOUND',0 |
1029 | ;szSound db 'SOUND',0 |
Line 1048... | Line 1030... | ||
1048 | szInfinity db 'INFINITY',0 |
1030 | ;szInfinity db 'INFINITY',0 |
1049 | szHwMouse db 'HWCURSOR',0 |
1031 | szHwMouse db 'ATI2D',0 |
1050 | 1032 | ||
Line 1061... | Line 1043... | ||
1061 | align 4 |
1043 | align 4 |
1062 | create_cursor dd 0 |
1044 | create_cursor dd 0 |
1063 | set_hw_cursor dd 0 |
1045 | set_hw_cursor dd 0 |
1064 | hw_restore dd 0 |
1046 | hw_restore dd 0 |
1065 | - | ||
1066 | align 16 |
- | |
1067 | services: |
- | |
1068 | dd szSound, drv_sound |
- | |
1069 | dd szInfinity, drv_infinity |
- | |
1070 | dd szHwMouse, drv_hw_mouse |
- | |
1071 | dd 0 |
- |