1 PAGE
,132 ; \ f ;AN000;
2 ; SCCSID = @(#)IFSERROR.INC 1.0 87/05/11 ;AN000;
3 TITLE IFSFUNC ERROR ROUTINES
;AN000;
5 ;************************************************************************************ ;AN000;
7 ; IFS error Routines ;AN000;
12 ; SET_EXTERR_INFO ;AN000;
15 ; REVISION HISTORY: ;AN000;
16 ; Evolved from Network Redirector NETERROR: MAY 11 1987 ;AN000;
17 ; A000 - Original version 4.00 MAY 1987 ;AN000;
18 ; A001 - PTM 842 Messages
19 ; A002 - PTM 1602 INT 2f-5 interface ds bug RG 10/87
20 ; A003 - PTM 1683/1769 error msg problems RG 10/87
21 ; A004 - PTM 2827 error proc chgs RG 1/88
22 ; A005 - PTM 4140 int 2f 5 interface change RMG 4/12/88
23 ; A006 - P4789 message problems w/no ifs drivers loaded 5/18/88 RMG
24 ; A007 - P4962 I24 AH not set right for printer 5/24/88 RMG
25 ; A008 - P5030 I24 tempbuf conflict 6/03/88 RMG
29 ;************************************************************************************ ;AN000;
33 INCLUDE IFSSYM
.INC ;AN000;
34 INCLUDE IFSFSYM
.INC ;AN000;
35 INCLUDE DOSSYM
.INC ;AN000;
36 INCLUDE DEVSYM
.INC ;AN000;
38 msg_utilname
<IFSFUNC
>
42 AsmVars
<IBM
, Installed
, Debug
> ;AN000;
44 ; define the base code segment of the network support first ;AN000;
46 IFSSEG
SEGMENT BYTE PUBLIC 'IFSSEG' ;AN000;
49 ; include the rest of the segment definitions for normal MSDOS ;AN000;
51 include dosseg
.asm
;AN000;
53 DATA SEGMENT WORD PUBLIC 'DATA' ;AN000;
54 ; DOSGROUP Data ;AN000;
55 Extrn THISDPB
:DWORD ;AN000;
56 Extrn EXTERR
:WORD ;AN000;
57 Extrn EXTERR_ACTION
:BYTE ;AN000;
58 Extrn EXTERR_CLASS
:BYTE ;AN000;
59 Extrn EXTERR_LOCUS
:BYTE ;AN000;
60 Extrn ALLOWED
:BYTE ;AN000;
61 Extrn ExitHold
:DWORD ;AN000;
62 Extrn ERR_TABLE_21
:BYTE
65 IFSSEG
SEGMENT BYTE PUBLIC 'IFSSEG' ;AN000;
66 ASSUME
SS:DOSGROUP
,CS:IFSSEG
;AN000;
69 Extrn IFSDRV
:BYTE ;AN000;
70 Extrn IFSR
:WORD ;AN000;
71 Extrn TEMPBUF
:BYTE ;AN003;
72 Extrn IFSPROC_FLAGS
:WORD ;AN003;
75 Extrn THISIFS
:DWORD ;AN006;
77 ; Phoney DPB used by IFS Share/Lock errors ;AN000;
79 DUMMY_DPB
LABEL BYTE ;AN000;
80 DB 0 ; dpb_drive ;AN000;
81 DB 0 ; dpb_UNIT ;AN000;
82 DW 512 ; dpb_sector_size ;AN000;
83 DB 0 ; dpb_cluster_mask ;AN000;
84 DB 0 ; dpb_cluster_shift ;AN000;
85 DW 1 ; dpb_first_FAT ;AN000;
86 DB 1 ; dpb_FAT_count ;AN000;
87 DW 16 ; dpb_root_entries ;AN000;
88 DW 3 ; dpb_first_sector ;AN000;
89 DW 3 ; dpb_max_cluster ;AN000;
90 DB 1 ; dpb_FAT_size ;AN000;
91 DW 2 ; dpb_dir_sector ;AN000;
92 DD ?
; dpb_driver_addr ;AN000;
93 DB 0F8H ; dpb_media ;AN000;
94 DB -1 ; dpb_first_access ;AN000;
95 DW -1 ; dpb_next_dpb low ;AN000;
96 DW -1 ; dpb_next_dpb high ;AN000;
97 DW 0 ; dpb_next_free ;AN000;
98 DW -1 ; dpb_free_cnt ;AN000;
100 ; Phoney device headers used by IFS INT 24H ;AN000;
102 PHONEY_BLOCK
LABEL BYTE ;AN000;
103 DD ?
; Pointer ;AN000;
104 DW ISNET
; Block net dev ;AN000;
105 DW ?
; Strat entry ;AN000;
106 DW ?
; Int entry ;AN000;
109 PHONEY_DEVICE
LABEL BYTE ;AN000;
110 DD ?
; Pointer ;AN000;
111 DW DEVTYP
+ ISNET
; Char net dev ;AN000;
112 DW ?
; Strat entry ;AN000;
113 DW ?
; Int entry ;AN000;
115 PUBLIC PHONEY_NAME
;AN000;
116 PHONEY_NAME
DB " " ;AN000;
119 NEXT_2F_5
DD ?
;AN000;
120 PUBLIC NEXT_2F_5
;AN000;
124 MAXERR EQU
89 ; Don't know errors above 79 ;AN000;
127 RODS_LABEL
LABEL BYTE
130 MSG_SERVICES
<IFSFUNC
.CL1
>
135 ; The following table defines CLASS ACTION and LOCUS info for the INT 21H/24H
136 ; errors. Each entry is 5 bytes long:
138 ; Err#,Class,Action,Locus,Allowed_Val
141 ERR_TABLE_IFS
LABEL BYTE
142 DB errCLASS_BadFmt
, errACT_User
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;50 ;AN003;
143 DB errCLASS_TempSit
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;51 ;AN003;
144 DB errCLASS_Already
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;52 ;AN003;
145 DB errCLASS_NotFnd
, errACT_User
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;53 ;AN003;
146 DB errCLASS_TempSit
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;54 ;AN003;
147 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;55 ;AN003;
148 DB errCLASS_OutRes
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;56 ;AN003;
149 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;57 ;AN003;
150 DB errCLASS_BadFmt
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;58 ;AN003;
151 DB errCLASS_SysFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;59 ;AN003;
152 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;60 ;AN003;
153 DB errCLASS_OutRes
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;61 ;AN003;
154 DB errCLASS_OutRes
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;62 ;AN003;
155 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;63 ;AN003;
156 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;64 ;AN003;
157 DB errCLASS_Auth
, errACT_User
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;65 ;AN003;
158 DB errCLASS_BadFmt
, errACT_User
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;66 ;AN003;
159 DB errCLASS_NotFnd
, errACT_User
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;67 ;AN003;
160 DB errCLASS_OutRes
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;68 ;AN003;
161 DB errCLASS_OutRes
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;69 ;AN003;
162 DB errCLASS_TempSit
, errACT_DlyRet
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;70 ;AN003;
163 DB errCLASS_BadFmt
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;71 ;AN003;
164 DB errCLASS_TempSit
, errACT_Retry
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;72 ;AN003;
165 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;73 ;AN003;
166 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;74 ;AN003;
167 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;75 ;AN003;
168 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;76 ;AN003;
169 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;77 ;AN003;
170 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;78 ;AN003;
171 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;79 ;AN003;
172 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;80 ;AN003;
173 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;81 ;AN003;
174 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;82 ;AN003;
175 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;83 ;AN003;
176 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;84 ;AN003;
177 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;85 ;AN003;
178 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;86 ;AN003;
179 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;87 ;AN003;
180 DB errCLASS_HrdFail
, errACT_Abort
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;88 ;AN003;
181 DB errCLASS_Unk
, errACT_Panic
, errLOC_Disk
, Allowed_FAIL
+Allowed_RETRY
;?? ;AN003;
184 ; We need to map old int 24 errors and device driver errors into the new set
185 ; of errors. The following table is indexed by the new errors
188 DB error_write_protect
; 0
189 DB error_bad_unit
; 1
190 DB error_not_ready
; 2
191 DB error_bad_command
; 3
193 DB error_bad_length
; 5
195 DB error_not_DOS_disk
; 7
196 DB error_sector_not_found
; 8
197 DB error_out_of_paper
; 9
198 DB error_write_fault
; A
199 DB error_read_fault
; B
200 DB error_gen_failure
; C
201 DB error_gen_failure
; D RESERVED
202 DB error_gen_failure
; E RESERVED
203 DB error_wrong_disk
; F
205 ErrMap24End
LABEL BYTE
208 BREAK <INT_2F_5
-- Routine for Extended error messages
>
210 ;************************************************************************************
214 ; Called by: COMMAND.COM
216 ; Routines called: CALL_IFS
218 ; Input: [THISIFS] set
219 ; BX = extended error number ;AN005;
220 ; AL = component ID 0 - install check ;AN005;
221 ; 1 - command.com ;AN005;
222 ; 2 - message retriever ;AN005;
224 ; This handler uses 2F multiplex number 5. It allows the INT 24H
225 ; Handler in COMMAND to get message texts for NET extended errors.
231 ; ³ IF AL .NE. 0 THEN
233 ; ³ ³ IF AL >= 50 .AND. AL <= 74 THEN /* or AL = 88 */
235 ; ³ ³ ³ Prep IFSRH below
236 ; ³ ³ ³ * IFSR_LENGTH DW 28 ; Request length
237 ; ³ ³ ³ * IFSR_FUNCTION DB 6 ; Get Criter Text
238 ; ³ ³ ³ *+ IFSR_RETCODE DB ? ; AL
239 ; ³ ³ ³ IFSR_RETCLASS DB ?
240 ; ³ ³ ³ IFSR_RESV1 DB 17 DUP(0)
241 ; ³ ³ ³ *+ IFSR_MSG@ DD ? ; Msg buffer address
242 ; ³ ³ ³ *+ IFSR_MSG_TYPE DB ? ; Msg type
243 ; ³ ³ ³ IFSR_RESV2 DB ?
245 ; ³ ³ ³ Call IFS specified in [THISIFS]
246 ; ³ ³ ³ IF IFSR_RETCODE = 0 THEN
248 ; ³ ³ ³ ES:DI = IFSR_MSG@
249 ; ³ ³ ³ AL = IFSR_MSG_TYPE
251 ; ³ ³ ³ ELSE get ifsfunc standard msg
259 ; ³ AL = 0FFH /* install check */
267 ; ELSE jump far to [NEXT_2F_5]
270 ; Output: carry clear - AL = msg type (0 or 1)
271 ; If EType is 1 then message is printed in form
273 ; Abort, Retry Ignore
274 ; If EType is 0 then message is printed in form
275 ; <message> error (read/writ)ing (drive/device) XXX
276 ; Abort, Retry Ignore
277 ; The message is ASCIZ and DOES NOT
278 ; include a trailing CR,LF
279 ; ES:DI -> message text
280 ; carry set - no message
282 ; Notes: all destroyed
284 ;************************************************************************************
286 procedure INT_2F_5
,FAR ;AN000;
287 ASSUME
DS:NOTHING
,ES:NOTHING
,SS:NOTHING
;AN000;
289 ifsr_fcn_def CRITMSG
;AN000;
291 CMP AH,5 ; check for IFS error 2F call ;AN000;
293 JMP [NEXT_2F_5
] ;AN000;
295 I2F5_20: ; call ok ;AN000;
296 STI ; INTs OK ;AN000;
299 IRET ; IRET on reserved functions ;AN000;
303 MOV AL,0FFH ; Tell Ellen I'm here ;AN000;
306 ;;;;;;;;CMP AL,error_NET_write_fault ; check for special error ;AN000;
307 ;;;;;;;;JE I2F5_80 ;AN000;
310 JMP I2F5_1000
; Carry set ;AN000;
312 CMP BX,MAXERR
;AC005;
316 JMP I2F5_1000
;AN000;
319 CMP WORD PTR CS:[THISIFS
+2],NULL_PTR
;if no ifs driver set, quit w/carry ;AN006;
321 CMP WORD PTR CS:[THISIFS
],NULL_PTR
;AN006;
324 TEST CS:IFSSEM
,MR_ERRMSG_SEM
; if already in msgret loop, exit fast ;AN005;
326 MOV CS:IFSPROC_FLAGS
,0 ;AN005;
327 CMP AL,I2F5_MsgRet
;AN005;
329 OR CS:IFSPROC_FLAGS
,IsMsgRet
;AN005;
330 OR CS:IFSSEM
,MR_ERRMSG_SEM
; set msgret error msg semaphore ;AN005;
332 SaveReg
<DS,SI,BX,CS> ; save command.com regs ;AN002;AC003;
333 RestoreReg
<DS> ; set ds-ifsseg ;AN002;
334 MOV AX,BX ; whole ax now ext error ;AN003;;AC005;
335 SaveReg
<AX> ; save ext err # ;AN000;
336 invoke PREP_IFSR
; zero out ifsr, sets es:bx -> ifsr ;AN000;
337 MOV ES:[BX.IFSR_LENGTH
],LENGTH_CRITMSG
;AN000;
338 MOV ES:[BX.IFSR_FUNCTION
],IFSCRITMSG
;AN000;
339 MOV ES:[BX.IFSR_RETCODE
],AX ;AN003;
341 ;***********************************************************************************************
342 invoke CALL_IFS
; call ifs with chance to set errmsg ;AN000;
343 ;***********************************************************************************************
346 POP AX ; fs error set - get ifsfunc msg ;AN000;
347 TEST CS:IFSPROC_FLAGS
,IsMsgRet
; if msg ret don't call msg ret for ;AN005;
348 JZ I2F5_95
; default msg - just fail ;AN005;
350 JMP SHORT I2F5_220
;AN005;
353 CALL SYSGETMSG
; puts msg in dssi,cx=msg size ;AN000;
354 MOV AH,1 ; set al = msg type 0 or 1 ;AN000;
355 CMP AL,55 ; all but 55,64,65,88 are 1 ;AN000;
371 SaveReg
<CS> ; msg ret has 0D0A24 at end of msg ;AN003;
372 RestoreReg
<ES> ; must change this to asciiz ;AN003;
373 MOV DI,OFFSET
CS:TEMPBUF
+80 ; move to temp buff and put 0 at 0DH ;AN003;;AC008;(80)
374 SaveReg
<DI,AX> ; preserve msg offset and msg type ;AN003;
375 REP MOVSB ; move msg to temp buff ;AN003;
377 STOSB ; store zero at end ;AN003;
379 RestoreReg
<AX,DI> ; msg type/ msg offset ;AN003;
380 JMP SHORT I2F5_220
;AN000;
383 I2F5_200: ; fs supplies error msg ;AN000;
384 MOV AL,ES:[BX.IFSR_MSG_TYPE
] ; grab ifs msg info ;AN000;
385 MOV DI,WORD PTR ES:[BX.IFSR_MSG@
] ;AN000;
386 MOV ES,WORD PTR ES:[BX.IFSR_MSG@
+2] ;AN000;
387 ADD SP,2 ; restore stack ;AN000;
389 PUSHF ; save carry ;AN005;
390 TEST CS:IFSPROC_FLAGS
,IsMsgRet
; if msgret reset semaphore ;AN005;
392 AND CS:IFSSEM
,NOT MR_ERRMSG_SEM
;AN005;
394 POPF ; restore carry ;AN005;
395 RestoreReg
<BX,SI,DS> ; retrieve command.com regs ;AN002;AC003;
398 RET 2 ; Fakey IRET ;AN000;
400 EndProc INT_2F_5
;AN000;
402 ASSUME
SS:DOSGROUP
;AN000;
406 BREAK <SET_EXTERR_INFO
-- Set IBMDOS error info
> ;AN000;
408 ;************************************************************************************ ;AN000;
410 ; SET_EXTERR_INFO ;AN000;
413 ; AL is extended error ;AN000;
417 ; Set all the EXTERR stuff and ALLOWED ;AN000;
420 ; following set: ;AN000;
421 ; EXTERR word ;AN000;
422 ; EXTERR_ACTION byte ;AN000;
423 ; EXTERR_CLASS " ;AN000;
424 ; EXTERR_LOCUS " ;AN000;
427 ; Regs: all preserved ;AN000;
429 ;************************************************************************************ ;AN000;
431 procedure SET_EXTERR_INFO
,NEAR ;AN000;
432 ASSUME
DS:IFSSEG
,ES:NOTHING
;AN000;
434 ifsr_fcn_def EXECAPI
;AN000;
437 SaveReg
<AX,CX,SI,DS> ;AC003;
439 XOR AH,AH ; set unknown ah=0 ;AN003;
440 MOV SS:[EXTERR
],AX ; Set extended error ;AC003;
441 MOV SI,OFFSET ERR_TABLE_IFS
;AC003;
443 RestoreReg
<DS> ; ds-ifsseg to access err_table_ifs ;AN003;
444 CMP AL,50 ; if err not in range, set to ?? ;AN003;
452 SUB AL,50 ; space to correct table entry ;AN003;
458 LODSW ; AL is CLASS, AH is ACTION ;AN003;
459 MOV [EXTERR_ACTION
],AH ; Set ACTION ;AN003;
460 MOV [EXTERR_CLASS
],AL ; Set CLASS ;AN003;
461 LODSW ; al- LOCUS ah- ALLOWED ;AN003;
462 TEST IFSPROC_FLAGS
,ISCDS
;AN003;
466 MOV [EXTERR_LOCUS
],AL ;AN003;
467 MOV [ALLOWED
],AH ;AN003;
469 MOV SI,BX ; Set ds:si -> ifsr so can use ;AN003;
470 SaveReg
<ES> ; lodsw to get cl,act,loc,allowed ;AN003;
471 RestoreReg
<DS> ;AN003;
472 ADD SI,IFSR_ERROR_CLASS
;AN003;
473 ; only set if ifs set (not -1) ;AN000;
474 LODSW ; AH = action, AL = class ;AN000;
475 CMP AL,ERROR_INFO_NOT_SET
;AN000;
477 MOV [EXTERR_CLASS
],AL ; set class ;AN000;
479 CMP AH,ERROR_INFO_NOT_SET
;AN000;
481 MOV [EXTERR_ACTION
],AH ; set action ;AN000;
483 LODSW ; AH = allowed, AL = locus ;AN000;
484 CMP AL,ERROR_INFO_NOT_SET
;AN000;
486 MOV [EXTERR_LOCUS
],AL ; Set locus ;AN000;
488 CMP AH,ERROR_INFO_NOT_SET
;AN000;
490 MOV [ALLOWED
],AH ;AN000;
493 RestoreReg
<DS,SI,CX,AX> ;AN000;
497 EndProc SET_EXTERR_INFO
;AN000;
500 BREAK <DEVICE2EXTERR
-- Convert device error to extended error
> ;AN004;
502 ;************************************************************************************
510 ; Convert device error to extended error
511 ; This is essentially the same routine as in IBMDOS
514 ; AX = extended error
516 ; Regs: all preserved
518 ;************************************************************************************
520 procedure DEVICE2EXTERR
,NEAR ;AN004;
524 MOV AX,OFFSET ErrMap24End
;AN004;
525 SUB AX,OFFSET ErrMap24
; AX is the index of the first ;AN004;
526 ; unavailable error. ;AN004;
527 ; Do not translate if >= AX. ;AN004;
531 MOV AL,ErrMap24
[DI] ;AN004;
534 RestoreReg
<DI> ;AN004;
537 EndProc DEVICE2EXTERR
;AN004;
539 BREAK <IFS_I24
-- Do an
INT 24 error
> ;AN000;
541 ;************************************************************************************ ;AN000;
545 ; Called by: CALL_IFS ;AN000;
547 ; Routines called: DOS: NET_I24_ENTRY ;AN000;
550 ; [IFSDRV] set (-1 = device, PHONEY_NAME set) ;AN000;
551 ; [EXTERR...] Set ;AN000;
552 ; [ALLOWED] Set ;AN000;
556 ; DI = Mapped I 24 error code (0-12) ;AN000;
557 ; AH is bit info (if block) ;AN000;
558 ; Perform I 24 error to get user response ;AN000;
568 ; Regs: DI, AX Revised ;AN000;
570 ;************************************************************************************ ;AN000;
572 procedure IFS_I24
,NEAR ;AN000;
573 ASSUME
DS:NOTHING
,ES:NOTHING
;AN000;
575 XOR AH,AH ; AL - extended error (retcode) ;AD007;
576 MOV DI,AX ; set DI = i24 error code C-general fail ;AC007;
577 MOV WORD PTR [EXITHOLD
+2],ES ; save es:bp here since fetchi ;AN000;
578 MOV WORD PTR [EXITHOLD
],BP ; restores in NET_I24_ENTRY ;AN000;
580 POP BP ; BP=seg part of BP:SI dev ptr ;AN000;
582 MOV AL,[IFSDRV
] ; set dev hdr offset ;AN000;
585 MOV SI,OFFSET PHONEY_BLOCK
; block device ;AN000;
586 JMP SHORT I24_40
;AN000;
588 MOV SI,OFFSET PHONEY_DEVICE
; char device ;AN000;
589 MOV AH,87H
; char dev, write, data area ;AN007;
592 OR AH,ES:[BX.IFSR_ALLOWED
] ; bit 7 = 0-disk or 1(other),... ;AC007;
594 CallInstall NET_I24_ENTRY
,MultDOS
,6,<AX>,<SI> ;AN000;
598 EndProc IFS_I24
;AN000;
600 BREAK <PHONEY_DPB
-- Set up a phoney DPB for sharing NET
INT 24 errors
> ;AN000;
602 ;************************************************************************************ ;AN000;
607 ; [IFSDRV] Set ;AN000;
610 ; Build a phoney DPB for IFS Share/Lock errors ;AN000;
613 ; [THISDPB] Set ;AN000;
615 ; Regs: ALL preserved ;AN000;
617 ;************************************************************************************ ;AN000;
619 procedure PHONEY_DPB
,NEAR ;AN000;
620 ASSUME
DS:DOSGROUP
,ES:NOTHING
;AN000;
623 MOV WORD PTR [THISDPB
],OFFSET DUMMY_DPB
;AN000;
624 MOV WORD PTR [THISDPB
+2],CS ;AN000;
625 MOV AL,[IFSDRV
] ;AN000;
626 MOV BYTE PTR [DUMMY_DPB
+ dpb_drive
],AL ;AN000;
627 MOV WORD PTR [DUMMY_DPB
+ dpb_driver_addr
],OFFSET PHONEY_BLOCK
;AN000;
628 MOV WORD PTR [DUMMY_DPB
+ dpb_driver_addr
+ 2],CS ;AN000;
632 EndProc PHONEY_DPB
;AN000;
634 include msgdcl
.inc ;AN000;