Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-1


					PAGE	,132				; 					 ;AN000;
				;	SCCSID = @(#)ifsutil.asm	1.0 87/05/05					 ;AN000;
				TITLE	IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;
				NAME	IFSUTIL 									 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; Miscellaneous routines								 ;AN000;
				;											 ;AN000;
				;   IFSFlushBuf 									 ;AN000;
				;   IFS_UPDATE_CB	(Part II)							 ;AN000;
				;   SERVER_DOSCALL_CLOSEFILES_FOR_UID							 ;AN000;
				;   SERVER_IFSFUNC_DATA_AREA								 ;AN000;
				;   DRIVE_FROM_CDS									 ;AN000;
				;   DRIVE_FROM_SFT									 ;AN000;
				;   PREP_IFSR										 ;AN000;
				;   CALL_IFS										 ;AN000;
				;   CREATE_DFL_ENTRY									 ;AN000;
				;;;alias ENTER_NAMES_LIST								 ;AN000;
				;   DELETE_DFL_ENTRY									 ;AN000;
				;;;alias EXIT_NAMES_LIST								 ;AN000;
				;   DFL_MATCH										 ;AN000;
				;   DFL_SINGLE_FILE_CHECK								 ;AN000;
				;;;alias PROCESS_ALIAS									 ;AN000;
				;   CDS_TO_CD										 ;AN000;
				;   CD_TO_CDS										 ;AN000;
				;   DFL_TO_DF										 ;AN000;
				;   DF_TO_DFL										 ;AN000;
				;   SFT_TO_SFF										 ;AN000;
				;   SF_TO_SFT										 ;AN000;
				;   XCHGP										 ;AN000;
				;   CONSIST_SFT 									 ;AN000;
				;   CONSIST_DFL 									 ;AN000;
				;   PRN_CHECK										 ;AN000;
				;   IFSDrvFromCDS									 ;AN000;
				;   SET_THISIFS_UNC									 ;AN000;
				;   SET_CATEGORY									 ;AN000;
				;   SET_DEPIOCTL_IFSR									 ;AN000;
				;   GET_UNC_FS_NAME
				;   MOVE_DRIVER_NAME									 ;AN000;
				;   CONVERT_NAME_ASCIIZ 								 ;AN000;
				;   CHECK_SEQ										 ;AN000;
				;   CHECK_REAL_DEVICE									 ;AN000;
				;   NET_TRANS										 ;AN000;
				;   STRIP_WFP_START
				;   CHECK_IFS_ATTRIBUTE
				;   CHECK_IFS_SUPPORT
				;											 ;AN000;
				;   REVISION HISTORY:									 ;AN000;
				;	A000	Original version 4.00   May 1987 					 ;AN000;
				;	A001	P453 - Correct $NameTrans processing on connect part of string		 ;AN000;
				;		RGazzia Aug 25,1987
				;	A002	D158 - merge redir info into attach stuff		8/87 RGazzia
				;	A003	P635 - read problem - sff-to-sft problem		8/87 RGazzia
				;	A004	P764 - printer attach problem				8/87 RGazzia
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-2


				;	A005	P845 - Disk reset infinitely calls			8/87 RGazzia
				;	A006	P868 - Lock problems					8/87 RGazzia
				;	A007	P849 - Printer open problems				8/87 RGazzia
				;	A008	P2307- Critical error problems			       11/87 RGazzia
				;	A009	P2364- Chkdsk fails if afs loaded		       11/87 RGazzia
				;		       due to losing cx in flush buf loop
				;	A010	P2385- check for ifs support of multifile/device fcns  11/87 RGazzia
				;	A011	P2827- ifs driver error mapping 		       12/87 RGazzia
				;	A012	P3225- prn to lpt1 problems				1/88 RGazzia
				;	A013	P3251- Net trans buffer problems			1/88 RGazzia
				;	A014	P3692- detach of attached ptr problem			3/88 RGazzia
				;	A015	P3745- commit problem due to sft flags problem		3/88 RGazzia
				;	A016	P3810- new sff field - sft entry id			3/88 RGazzia
				;	A017	P3680- sft changes					3/88 RGazzia
				;	A018	P3883- Share violation problems 			3/16/88 RMG
				;	A019	P3971- pause problems					3/24/88 RMG
				;	A020	P4055  Make sure THISDFL reset to null			3/30/88 RMG
				;	A021	P4172  share violation fail - wrong dos extended error	4/08/88 RMG
				;	A022	P4188  names=0 problems 				4/08/88 RMG
				;	A023	P4227  Austin garbage attach problem			4/11/88 RMG
				;	A024	P4392  Yet another sft change				4/18/88 RMG
				;	A025	P4751  retry logic fix					5/05/88 RMG
				;	A026	P4802  NET821 retry hang/ fail hang			5/10/88 RMG
				;	A027	P4839  ctrl-prtsc problems (consist_sft)		5/13/88 RMG
				;	A028	P4863  criter/parms problem				5/14/88 RMG
				;	A029	P4968  I24 DI not set right				5/25/88 RMG
				;	A030	P5004  Cap of device name corrupted			6/01/88 RMG
				;	A031	P5006  ctrl prtsc problems - pause back to real 	6/02/88 RMG
				;			 consist_sft
				;
				;   LOC - 696
				;************************************************************************************	 ;AN000;
															 ;AN000;
				.list											 ;AN000;
															 ;AN000;
				AsmVars <IBM, Installed, DEBUG> 							 ;AN000;
															 ;AN000;
				; define the base code segment of the network support first				 ;AN000;
															 ;AN000;
 0000				IFSSEG	SEGMENT BYTE PUBLIC 'IFSSEG'                                                     ;AN000;
 0000				IFSSEG	ENDS										 ;AN000;
															 ;AN000;
				; include the rest of the segment definitions for normal MSDOS				 ;AN000;
															 ;AN000;
				include dosseg.asm									 ;AN000;
			     C	;	SCCSID = @(#)dosseg.asm	1.1 85/04/10
			     C	;	SCCSID = @(#)dosseg.asm	1.1 85/04/10
			     C	;
			     C	; segment ordering for MSDOS
			     C	;
			     C	
 0000                        C	START		SEGMENT BYTE PUBLIC 'START'
 0000                        C	START		ENDS
			     C	
 0000                        C	CONSTANTS	SEGMENT WORD PUBLIC 'CONST'
 0000                        C	CONSTANTS	ENDS
			     C	
 0000                        C	DATA		SEGMENT WORD PUBLIC 'DATA'
 0000                        C	DATA		ENDS
			     C	
 0000                        C	TABLE		SEGMENT BYTE PUBLIC 'TABLE'
 0000                        C	TABLE		ENDS
			     C	
 0000                        C	CODE		SEGMENT BYTE PUBLIC 'CODE'
 0000                        C	CODE		ENDS
			     C	
 0000                        C	LAST		SEGMENT PARA PUBLIC 'LAST'
 0000                        C	LAST		ENDS
			     C	
			     C	DOSGROUP    GROUP   START,CONSTANTS,DATA,TABLE,CODE,LAST
															 ;AN000;
 0000				DATA		SEGMENT WORD PUBLIC 'DATA'                                               ;AN000;
					;DOSGROUP Data									 ;AN000;
					Extrn	sft_addr:DWORD								 ;AN000;
					Extrn	sftFCB:DWORD								 ;AN000;
					Extrn	WFP_START:WORD								 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-3
                                                            

					Extrn	THISCDS:DWORD								 ;AN000;
					Extrn	THISSFT:DWORD								 ;AN000;
					Extrn	CDSADDR:DWORD								 ;AN000;
					Extrn	CDSCOUNT:BYTE								 ;AN000;
					Extrn	CurrentPDB:WORD 							 ;AN000;
					Extrn	RetryCount:WORD 							 ;AN000;
					Extrn	SysInitTable:BYTE							 ;AN000;
					Extrn	CurrentPDB:WORD 							 ;AN000;
					Extrn	IFS_HEADER:DWORD							 ;AN000;
					Extrn	NULDEV:DWORD								 ;AN000;
					Extrn	SWAP_AREA_TABLE:BYTE							 ;AN000;
					Extrn	EXTERR:WORD								 ;AN011;
					Extrn	EXTERR_ACTION:BYTE							 ;AN011;
					Extrn	EXTERR_CLASS:BYTE							 ;AN011;
					Extrn	EXTERR_LOCUS:BYTE							 ;AN011;
					Extrn	ALLOWED:BYTE								 ;AN011;
 0000				DATA		ENDS									 ;AN000;
															 ;AN000;
				; define our own code segment								 ;AN000;
															 ;AN000;
 0000				IFSSEG	SEGMENT BYTE PUBLIC 'IFSSEG'                                                     ;AN000;
					ASSUME	SS:DOSGROUP,CS:IFSSEG							 ;AN000;
				
															 ;AN000;
					Extrn	ifs_ErrMap24End:BYTE
					Extrn	ifs_ErrMap24:BYTE
					;IFS Data									 ;AN000;
					Extrn	IFSPROC_FLAGS:WORD							 ;AN000;
					Extrn	IFSFUNC_FLAGS:WORD							 ;AN000;
				;;;aliasExtrn	NLAddr:DWORD								 ;AN000;
					Extrn	TEMPBUF:BYTE								 ;AN000;
					Extrn	DFLAddr:DWORD								 ;AN000;
					Extrn	DFLCount:BYTE								 ;AN000;
					Extrn	UNC_FS_HDR:DWORD							 ;AN000;
					Extrn	THISIFS:DWORD								 ;AN000;
					Extrn	THISDFL:DWORD								 ;AN000;
					Extrn	IFSR:WORD								 ;AN000;
					Extrn	CD1:WORD								 ;AN000;
					Extrn	DF1:WORD								 ;AN000;
					Extrn	SFF1:WORD								 ;AN000;
					Extrn	IFSDRV:BYTE								 ;AN000;
					Extrn	PHONEY_NAME:BYTE							 ;AN000;
					Extrn	DEVICE_CB@_OFFSET:WORD							 ;AN000;
					Extrn	SAVE_CB@:DWORD								 ;AN000;
					Extrn	IFSF_SWAP_START:BYTE							 ;AN000;
					Extrn	IFSF_SWAP_END:BYTE							 ;AN000;
															 ;AN000;
					PUBLIC	LPT1_NAME								 ;AN000;
 0000  4C 50 54 31 00		LPT1_NAME	DB	"LPT1",0                                                         ;AN000;
 0005  50 52 4E 00		PRN_NAME	DB	"PRN",0                                                          ;AN000;
															 ;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					 ;AN013;
				; The following buffer was created 1/88 to temporarily hold canonicalized		 ;AN013;
				; path name for $Nametrans call for Redir						 ;AN013;
				; Some area of TEMPBUF should be used instead for optimized storage space but		 ;AN013;
				; I didn't have time to research the best way to use it as time was short to             ;AN013;
				; fix ptm										 ;AN013;
				; This buffer should later be taken out when time permits to do this right		 ;AN013;
				;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					 ;AN013;
 0009  0080[			NET_TRANS_BUFFER DB	128 DUP (0)		; temporary buffer used for $Nametrans	 ;AN013;
	   00			
			 ]	
				
										; storage of canonicalized pathname	 ;AN013;
															 ;AN000;
				BREAK <IFSFlushBuf -- Flush all Net Cache Buffers>					 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-4
IFSFlushBuf -- Flush all Net Cache Buffers                  

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; IFSFlushBuf										 ;AN000;
				;											 ;AN000;
				; Called by:	   Dispatcher								 ;AN000;
				;											 ;AN000;
				; Routines called: CD_TO_CDS								 ;AN000;
				;		   CDS_TO_CD								 ;AN000;
				;		   CALL_IFS								 ;AN000;
				;											 ;AN000;
				; Input: AL = 0  Flush all Net buffers. 						 ;AN000;
				;	      -1     "    "       "   plus invalidate them.                              ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	FOR I = 1 to # CDSs								 ;AN000;
				;	  DO										 ;AN000;
				;	    IF CURDIR_ISIFS = true THEN 						 ;AN000;
				;	       DO									 ;AN000;
				;		 Prepare IFSRH: 							 ;AN000;
				;		 *  IFSR_LENGTH      DW     40	     ; Request length			 ;AN000;
				;		 *  IFSR_FUNCTION    DB      4	     ; Execute API function		 ;AN000;
				;		  + IFSR_RETCODE     DW      ?						 ;AN000;
				;		  + IFSR_RETCLASS    DB      ?						 ;AN000;
				;		    IFSR_RESV1	     DB     16 DUP(0)					 ;AN000;
				;		 *  IFSR_APIFUNC     DB      1	     ; Drive Reset			 ;AN000;
				;		  + IFSR_ERROR_CLASS DB      ?						 ;AN000;
				;		  + IFSR_ERROR_ACTION DB     ?						 ;AN000;
				;		  + IFSR_ERROR_LOCUS DB      ?						 ;AN000;
				;		  + IFSR_ALLOWED     DB      ?						 ;AN000;
				;		  + IFSR_I24_RETRY   DB      ?						 ;AN000;
				;		  + IFSR_I24_RESP    DB      ?						 ;AN000;
				;		    IFSR_RESV2	     DB      ?						 ;AN000;
				;		 *+ IFSR_DEVICE_CB@  DD      ?	     ; Call CDS_TO_CD to convert	 ;AN000;
				;						    ; CDS to CD and set this as 	 ;AN000;
				;						    ; pointer to it.			 ;AN000;
				;		    IFSR_OPEN_CB@    DD      ?						 ;AN000;
				;		 *  IFSR_FUNC	     DB      ?	     ; 0 IF AL=0.  1 IF AL=-1.		 ;AN000;
				;		    IFSR_RESV2	     DB      0						 ;AN000;
				;											 ;AN000;
				;		 CALL routine, CALL_IFS, with pointer to CURDIR_IFSR_HDR		 ;AN000;
				;	       ENDDO									 ;AN000;
				;	    ENDIF									 ;AN000;
				;	  ENDDO 									 ;AN000;
				;											 ;AN000;
				; Output:  None 									 ;AN000;
				;											 ;AN000;
				; Notes:   all destroyed								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure   IFSFlushBuf,NEAR							 ;AN000;
 0089                        1	IFSFlushBuf    PROC    NEAR 
				ASSUME	DS:DOSGROUP,ES:NOTHING								  ;AN000;
															 ;AN000;
					ifsr_fcn_def  EXECAPI								 ;AN000;
					ifsr_api_def  DRIVERESET							 ;AN000;
															 ;AN000;
 0089  8A 0E 0000 E			MOV	CL,CDSCount			; CX = # CDS's                           ;AN000;
 008D  BA 0058				MOV	DX,SIZE curdir_list		; DX = size CDS entry			 ;AN000;
 0090  C5 36 0000 E			LDS	SI,[CDSAddr]			; Get addr 1st CDS			 ;AN000;
															 ;AN000;
 0094				IFB_20: 										 ;AN000;
 0094  F7 44 43 8000			TEST	DS:[SI.curdir_flags],curdir_isnet					 ;AN000;
 0099  74 36				JZ	IFB_60									 ;AN000;
										; Is IFS.  Send drive reset request	 ;AN000;
					invoke	PREP_IFSR			; sets es:bx -> ifsr (zeroed out)	 ;AN000;
 009B  E8 01C6 R             1		CALL    PREP_IFSR 
 009E  26: C7 07 0028			MOV	ES:[BX.IFSR_LENGTH],LENGTH_DRIVERESET					 ;AN000;
 00A3  26: C6 47 02 05			MOV	ES:[BX.IFSR_FUNCTION],IFSEXECAPI					 ;AN000;
 00A8  26: C6 47 16 01			MOV	ES:[BX.IFSR_APIFUNC],IFSDRIVERESET					 ;AN000;
					SaveReg <DS,SI> 			; save cds ptr				 ;AN000;
 00AD  1E                    2		PUSH    DS 
 00AE  56                    2		PUSH    SI 
 00AF  2E: C7 06 0000 E 001E		MOV	CS:DEVICE_CB@_OFFSET,IFSR_DEVICE_CB@					 ;AN000;
					invoke	CDS_TO_CD								 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-5
IFSFlushBuf -- Flush all Net Cache Buffers                  

 00B6  E8 066E R             1		CALL    CDS_TO_CD 
 00B9  26: 88 47 26			MOV	ES:[BX.IFSR_FUNC],AL							 ;AN000;
															 ;AN000;
					SaveReg <CX>				; preserve loop count
 00BD  51                    2		PUSH    CX 
					invoke	CALL_IFS			; Call IFS				 ;AN000;
 00BE  E8 01DF R             1		CALL    CALL_IFS 
					RestoreReg <CX> 			; retrieve loop count
 00C1  59                    2		POP     CX 
 00C2  73 04				JNC	IFB_30									 ;AN000;
					RestoreReg <SI,DS>			; restore cds ptr			 ;AN000;
 00C4  5E                    2		POP     SI 
 00C5  1F                    2		POP     DS 
 00C6  EB 09				JMP	SHORT IFB_60								 ;AN000;
 00C8				IFB_30: 										 ;AN000;
					RestoreReg <DI,ES>			; restore cds ptr into es:di		 ;AN000;
 00C8  5F                    2		POP     DI 
 00C9  07                    2		POP     ES 
 00CA  E8 06D7 R			CALL	CD_TO_CDS			; update CDS if retcode ok		 ;AN000;
 00CD  06				PUSH	ES				; get cds ptr into ds:si		 ;AN000;
 00CE  1F				POP	DS									 ;AN000;
 00CF  8B F7				MOV	SI,DI									 ;AN000;
															 ;AN000;
 00D1				IFB_60: 										 ;AN000;
 00D1  03 F2				ADD	SI,DX				; Skip to next CDS			 ;AN000;
 00D3  E2 BF				LOOP	IFB_20									 ;AN000;
 00D5  EB 03 90				JMP	IFS_990 								 ;AN000;
															 ;AN000;
				;***********************************************************************************	 ;AN000;
				;						  ifs common return area		 ;AN000;
				;***********************************************************************************	 ;AN000;
					entry  IFS_980									 ;AN000;
 00D8                        1	IFS_980: 
 00D8  F9				STC										 ;AN000;
					return										 ;AN000;
 00D9                        1	??0000: 
 00D9  C3                    1		RET 
					entry  IFS_990									 ;AN000;
 00DA                        1	IFS_990: 
 00DA  F8				CLC										 ;AN000;
					entry  IFS_1000 								 ;AN000;
 00DB                        1	IFS_1000: 
					return										 ;AN000;
 00DB                        1	??0001: 
 00DB  C3                    1		RET 
															 ;AN000;
															 ;AN000;
				EndProc IFSFlushBuf									 ;AN000;
 00DC                        1	IFSFlushBuf    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <IFS_UPDATE_CB  Update SFT entry> 						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-6
IFS_UPDATE_CB  Update SFT entry                             

															 ;AN000;
				;****************************************************************************** 	 ;AN000;
				;											 ;AN000;
				; IFS_UPDATE_CB 									 ;AN000;
				;											 ;AN000;
				; Called by:  IFSFUNC Dispatcher  (Share)						 ;AN000;
				;											 ;AN000;
				; Routines called:									 ;AN000;
				;		     SFT_TO_SFF 							 ;AN000;
				;		     SF_TO_SFT								 ;AN000;
				;		     CALL_IFS								 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	DS:SI -> SFT									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Prep IFSRH:									 ;AN000;
				;	*  IFS_LENGTH	   DW	  28	   ; Request length				 ;AN000;
				;	*  IFS_FUNCTION    DB	   6	   ; Control Block Update			 ;AN000;
				;	   IFS_RETCODE	   DW	   ?							 ;AN000;
				;	   IFS_RETCLASS    DB	   ?							 ;AN000;
				;	   IFS_RESV1	   DB	  16 DUP(0)						 ;AN000;
				;	*  IFS_CB@	   DD	   ?	   ; Control Block Address			 ;AN000;
				;	*  IFS_TYPE	   DB	   ?	   ; Control Block Type 			 ;AN000;
				;	     IFSOPEN	   EQU	   0	   ;  Open instnce (SFT) entry			 ;AN000;
				;	     IFSCB	   EQU	  -1	   ;  See CB Type Field 			 ;AN000;
				;	   IFS_RESV2	   DB	   0							 ;AN000;
				;											 ;AN000;
				;	Call IFS specified in SFT							 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	Carry set on error.  Error code in AX.						 ;AN000;
				;											 ;AN000;
				; Regs: 										 ;AN000;
				;											 ;AN000;
				; Programming notes:									 ;AN000;
				;											 ;AN000;
				;****************************************************************************** 	 ;AN000;
															 ;AN000;
					procedure IFS_UPDATE_CB,NEAR							 ;AN000;
 00DC                        1	IFS_UPDATE_CB    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					ifsr_fcn_def	UPDATECB							 ;AN000;
										; Reset ifsfunc processing flags	 ;AN000;
 00DC  2E: C7 06 0000 E 0041		MOV	CS:IFSPROC_FLAGS,ISCTLFCN+ISSFT ; Set this so SFT_TO_SFF sets		 ;AN000;
										; ifsr_cb@ instead of ifsr_open_cb@	 ;AN000;
										; ISSFT set so sft_to_sff sets		 ;AN000;
										; thisifs				 ;AN000;
					invoke	PREP_IFSR			; sets es:bx -> ifsr (zeroed out)	 ;AN000;
 00E3  E8 01C6 R             1		CALL    PREP_IFSR 
					Context DS									 ;AN000;
 00E6  16                    1		PUSH    SS 
 00E7  1F                    1		POP     DS 
					invoke	SFT_TO_SFF			; SFT: sets [THISIFS]			 ;AN000;
 00E8  E8 04CE R             1		CALL    SFT_TO_SFF 
										;	    ES:BX -> IFSRH		 ;AN000;
										;	    IFSR_CB@			 ;AN000;
										;	    ds - IFSSEG 		 ;AN000;
 00EB  26: C7 07 001C			MOV	ES:[BX.IFSR_LENGTH],LENGTH_UPDATECB	; prep IFSRH			 ;AN000;
 00F0  26: C6 47 02 07			MOV	ES:[BX.IFSR_FUNCTION],IFSUPDATECB					 ;AN000;
 00F5  26: C6 47 1A 00			MOV	ES:[BX.IFSR_TYPE],IFSOPEN						 ;AN000;
															 ;AN000;
					invoke	CALL_IFS								 ;AN000;
 00FA  E8 01DF R             1		CALL    CALL_IFS 
 00FD  72 DC				JC	ifs_1000			; cf already set			 ;AN000;
					invoke	SFF_TO_SFT								 ;AN000;
 00FF  E8 05BB R             1		CALL    SFF_TO_SFT 
 0102  EB D6				JMP	ifs_990 								 ;AN000;
															 ;AN000;
				EndProc IFS_UPDATE_CB									 ;AN000;
 0104                        1	IFS_UPDATE_CB    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <SERVER_DOSCALL_CLOSEFILES_FOR_UID>						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-7
SERVER_DOSCALL_CLOSEFILES_FOR_UID                           

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; SERVER_DOSCALL_CLOSEFILES_FOR_UID							 ;AN000;
				;											 ;AN000;
				; Called by:	   IFSFUNC Dispatcher							 ;AN000;
				;											 ;AN000;
				; Routines called:									 ;AN000;
				;	CALL_IFS									 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[CurrentPDB] set to UID of user aborting					 ;AN000;
				; Function:										 ;AN000;
				;	Get address of IFS driver chain.						 ;AN000;
				;	FOR I = 1 to last IFS driver							 ;AN000;
				;	    Send request below to IFS driver						 ;AN000;
				;											 ;AN000;
				;	IFSRH:										 ;AN000;
				;	*  IFSR_LENGTH	    DW	   40	    ; Request length				 ;AN000;
				;	*  IFSR_FUNCTION    DB	    4	    ; Execute API function			 ;AN000;
				;	   IFSR_RETCODE     DW	    ?							 ;AN000;
				;	   IFSR_RETCLASS    DB	    ?							 ;AN000;
				;	   IFSR_RESV1	    DB	   16 DUP(0)						 ;AN000;
				;	*  IFSR_APIFUNC     DB	   19	    ; End of Computer ID			 ;AN000;
				;	   IFSR_ERROR_CLASS DB	    ?							 ;AN000;
				;	   IFSR_ERROR_ACTION DB     ?							 ;AN000;
				;	   IFSR_ERROR_LOCUS DB	    ?							 ;AN000;
				;	 + IFSR_ALLOWED     DB	    ?							 ;AN000;
				;	 + IFSR_I24_RETRY   DB	    ?							 ;AN000;
				;	 + IFSR_I24_RESP    DB	    ?							 ;AN000;
				;	   IFSR_RESV2	    DB	    ?							 ;AN000;
				;	   IFSR_DEVICE_CB@  DD	    ?	    ; CD					 ;AN000;
				;	   IFSR_OPEN_CB@    DD	    ?							 ;AN000;
				;	*  IFSR_UID	    DW	    ?							 ;AN000;
				;											 ;AN000;
				; Outputs: None 									 ;AN000;
				;											 ;AN000;
				; Regs: All destroyed									 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure   SERVER_DOSCALL_CLOSEFILES_FOR_UID,NEAR				 ;AN000;
 0104                        1	SERVER_DOSCALL_CLOSEFILES_FOR_UID    PROC    NEAR 
				ASSUME	DS:DOSGROUP,ES:NOTHING								 ;AN000;
															 ;AN000;
					ifsr_fcn_def EXECAPI								 ;AN000;
					ifsr_api_def EOCID								 ;AN000;
															 ;AN000;
 0104  C5 36 0000 E			LDS	SI,IFS_HEADER			; get 1st ifs driver			 ;AN000;
				ASSUME	DS:NOTHING									 ;AN000;
															 ;AN000;
 0108				SDC_20: 					; ** Loop here on ifs drivers		 ;AN000;
 0108  2E: 89 36 0000 E			MOV	CS:WORD PTR [THISIFS],SI	; Send end of process request		 ;AN000;
 010D  2E: 8C 1E 0002 E			MOV	CS:WORD PTR [THISIFS+2],DS	; to all fs drivers.			 ;AN000;
										; Set thisifs for call_ifs		 ;AN000;
					invoke	PREP_IFSR			; sets es:bx -> ifsr (zeroed out)	 ;AN000;
 0112  E8 01C6 R             1		CALL    PREP_IFSR 
 0115  26: C7 07 0028			MOV	ES:[BX.IFSR_LENGTH],LENGTH_EOCID					 ;AN000;
 011A  26: C6 47 02 05			MOV	ES:[BX.IFSR_FUNCTION],IFSEXECAPI					 ;AN000;
 011F  26: C6 47 16 13			MOV	ES:[BX.IFSR_APIFUNC],IFSEOCID						 ;AN000;
 0124  36: A1 0000 E			MOV	AX,[CurrentPDB] 							 ;AN000;
 0128  26: 89 47 26			MOV	ES:[BX.IFSR_UID],AX							 ;AN000;
															 ;AN000;
					SaveReg <DS,CS> 								 ;AN000;
 012C  1E                    2		PUSH    DS 
 012D  0E                    2		PUSH    CS 
					RestoreReg <DS> 								 ;AN000;
 012E  1F                    2		POP     DS 
				ASSUME	DS:IFSSEG				; ds - ifsseg				 ;AN000;
															 ;AN000;
					invoke	CALL_IFS								 ;AN000;
 012F  E8 01DF R             1		CALL    CALL_IFS 
															 ;AN000;
					RestoreReg <DS> 			; ds - fs driver			 ;AN000;
 0132  1F                    2		POP     DS 
 0133  C5 34				LDS	SI,[SI.IFS_NEXT]		; Do next fs driver			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-8
SERVER_DOSCALL_CLOSEFILES_FOR_UID                           

 0135  83 FE FF				CMP	SI,NULL_PTR			; if ptr null, no more			 ;AN000;
 0138  75 CE				JNE	SDC_20									 ;AN000;
 013A  1E				PUSH	DS									 ;AN000;
 013B  58				POP	AX									 ;AN000;
 013C  3D FFFF				CMP	AX,NULL_PTR								 ;AN000;
 013F  75 C7				JNE	SDC_20									 ;AN000;
															 ;AN000;
 0141  EB 98				jmp	ifs_1000			; go return				 ;AN000;
															 ;AN000;
															 ;AN000;
				EndProc SERVER_DOSCALL_CLOSEFILES_FOR_UID						 ;AN000;
 0143                        1	SERVER_DOSCALL_CLOSEFILES_FOR_UID    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <SERVER_IFSFUNC_DATA_AREA - IFSFUNC swappable data area>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-9
SERVER_IFSFUNC_DATA_AREA - IFSFUNC swappable data area      

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; SERVER_IFSFUNC_DATA_AREA								 ;AN000;
				;											 ;AN000;
				; Called by:	    Dispatcher								 ;AN000;
				;											 ;AN000;
				; Routines called:  None								 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	DS - DOSGroup									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Put IFSFUNC swappable data area info in ibmdos's swap_area_table
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	swap_area_table filled in:							 ;AN000;
				;			dw	num areas - 3						 ;AN000;
				;			dd	ibmdos swap indos area address
				;			dw	ibmdos swap indos area length
				;			dd	ibmdos swap always area address
				;			dw	ibmdos swap always area length
				;			dd	ifsfunc swap indos area address
				;			dw	ifsfunc swap indos area length
				;											 ;AN000;
				; Regs: All preserved
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure   SERVER_IFSFUNC_DATA_AREA,NEAR					 ;AN000;
 0143                        1	SERVER_IFSFUNC_DATA_AREA    PROC    NEAR 
				ASSUME	DS:DOSGROUP,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <AX,ES,DI,DS,SI,DX,CS>							 ;AN000;
 0143  50                    2		PUSH    AX 
 0144  06                    2		PUSH    ES 
 0145  57                    2		PUSH    DI 
 0146  1E                    2		PUSH    DS 
 0147  56                    2		PUSH    SI 
 0148  52                    2		PUSH    DX 
 0149  0E                    2		PUSH    CS 
					RestoreReg <ES> 								 ;AN000;
 014A  07                    2		POP     ES 
 014B  BF 0000 E			MOV	DI,OFFSET CS:IFSF_SWAP_START						 ;AN000;
 014E  BA 0000 E			MOV	DX,OFFSET CS:IFSF_SWAP_END						 ;AN000;
 0151  2B D7				SUB	DX,DI									 ;AN000;
 0153  8D 36 0000 E			LEA	SI,SWAP_AREA_TABLE	; get offset address of swap area table 	 ;AN000;
				
 0157  C7 04 0003			MOV	WORD PTR DS:[SI],3	; number of data areas increased from 2 to 3	 ;AN000;
 015B  83 C6 0E				ADD	SI,14			; skip to ifsfunc area				 ;AN000;
 015E  89 3C				MOV	WORD PTR DS:[SI],DI	; fill in ifsfunc data area address		 ;AN000;
 0160  8C 44 02				MOV	WORD PTR DS:[SI+2],ES							 ;AN000;
 0163  89 54 04				MOV WORD PTR DS:[SI+4],DX	; fill in ifsfunc data area length		 ;AN000;
															 ;AN000;
					RestoreReg <DX,SI,DS,DI,ES,AX>							 ;AN000;
 0166  5A                    2		POP     DX 
 0167  5E                    2		POP     SI 
 0168  1F                    2		POP     DS 
 0169  5F                    2		POP     DI 
 016A  07                    2		POP     ES 
 016B  58                    2		POP     AX 
															 ;AN000;
					return										 ;AN000;
 016C                        1	??0002: 
 016C  C3                    1		RET 
															 ;AN000;
				EndProc SERVER_IFSFUNC_DATA_AREA							 ;AN000;
 016D                        1	SERVER_IFSFUNC_DATA_AREA    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <DRIVE_FROM_XXX -- Compute a drive index from a CDS or SFT>			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-10
DRIVE_FROM_XXX -- Compute a drive index from a CDS or SFT   

															 ;AN000;
					procedure DRIVE_FROM_CDS,NEAR							 ;AN000;
 016D                        1	DRIVE_FROM_CDS    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DRIVE_FROM_CDS									 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISCDS] Set									 ;AN000;
				;	DS - DOSGROUP									 ;AN000;
				; Function:										 ;AN000;
				;	Compute drive letter from THISCDS						 ;AN000;
				; Outputs:										 ;AN000;
				;	[IFSDRV] = Drive # (0=A)							 ;AN000;
				; No registers Revised 								 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
 016D  53				PUSH	BX									 ;AN000;
 016E  50				PUSH	AX									 ;AN000;
 016F  2E: C6 06 0000 E FE		MOV	[IFSDRV],0FEH		; Default to ?, 0FEH + 'A' = '?'                 ;AN000;
 0175  36: A1 0000 E			MOV	AX,WORD PTR [THISCDS]							 ;AN000;
 0179  3D FFFF				CMP	AX,-1									 ;AN000;
 017C  74 03				JZ	DFC_20									 ;AN000;
 017E  E8 0909 R			CALL	IFSDrvFromCDS								 ;AN000;
 0181				DFC_20: 										 ;AN000;
 0181  58				POP	AX									 ;AN000;
 0182  5B				POP	BX									 ;AN000;
 0183  E9 00DB R			jmp	ifs_1000		; go return					 ;AN000;
															 ;AN000;
				EndProc DRIVE_FROM_CDS									 ;AN000;
 0186                        1	DRIVE_FROM_CDS    ENDP 
															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DRIVE_FROM_SFT									 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISSFT] Set	   DS-Dosgroup							 ;AN000;
				; Function:										 ;AN000;
				;	Compute drive letter from THISSFT						 ;AN000;
				; Outputs:										 ;AN000;
				;	[IFSDRV] = Drive # (0=A)							 ;AN000;
				;	[IFSDRV] = -1 if printer							 ;AN000;
				;		PHONEY_NAME								 ;AN000;
				; No registers Revised 								 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure DRIVE_FROM_SFT,NEAR							 ;AN000;
 0186                        1	DRIVE_FROM_SFT    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <DS,BX,CX>								 ;AC006;
 0186  1E                    2		PUSH    DS 
 0187  53                    2		PUSH    BX 
 0188  51                    2		PUSH    CX 
 0189  36: C5 1E 0000 E			LDS	BX,[THISSFT]								 ;AN000;
 018E  F7 47 05 0800			TEST	[BX.sf_flags],sf_net_spool						 ;AN000;
 0193  75 18				JNZ	DFS_100 								 ;AN000;
 0195  8A 5F 05				MOV	BL,BYTE PTR [BX.sf_flags]						 ;AN000;
 0198  80 E3 3F				AND	BL,devid_file_mask_drive						 ;AN000;
 019B  80 FB 3E				CMP	BL,0FEH AND devid_file_mask_drive	; UNC ????			 ;AN000;
 019E  75 02				JNZ	DFS_20			; No						 ;AN000;
 01A0  B3 FE				MOV	BL,0FEH 		; Restore lost bits if UNC			 ;AN000;
 01A2				DFS_20: 										 ;AN000;
 01A2  2E: 88 1E 0000 E			MOV	[IFSDRV],BL								 ;AN000;
					RestoreReg <CX,BX,DS>								 ;AC006;
 01A7  59                    2		POP     CX 
 01A8  5B                    2		POP     BX 
 01A9  1F                    2		POP     DS 
 01AA  E9 00DB R			JMP	ifs_1000		; go return					 ;AN000;
															 ;AN000;
 01AD				DFS_100:										 ;AN000;
					SaveReg <ES,DI,SI>								 ;AN000;
 01AD  06                    2		PUSH    ES 
 01AE  57                    2		PUSH    DI 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-11
DRIVE_FROM_XXX -- Compute a drive index from a CDS or SFT   

 01AF  56                    2		PUSH    SI 
 01B0  BF 0000 E			MOV	DI,OFFSET CS:[PHONEY_NAME]	; Set name for I24 handler		 ;AN000;
 01B3  0E				PUSH	CS									 ;AN000;
 01B4  07				POP	ES									 ;AN000;
 01B5  8B F3				MOV	SI,BX									 ;AN000;
 01B7  83 C6 20				ADD	SI,SF_NAME								 ;AN000;
 01BA  B9 0008				MOV	CX,8									 ;AC007;
 01BD  F3/ A4				REP	MOVSB									 ;AN000;
															 ;AN000;
					RestoreReg <SI,DI,ES>								 ;AN000;
 01BF  5E                    2		POP     SI 
 01C0  5F                    2		POP     DI 
 01C1  07                    2		POP     ES 
 01C2  B3 FF				MOV	BL,-1									 ;AN000;
 01C4  EB DC				JMP	DFS_20									 ;AN000;
															 ;AN000;
				EndProc DRIVE_FROM_SFT									 ;AN000;
 01C6                        1	DRIVE_FROM_SFT    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <PREP_IFSR -- zero out ifsr>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-12
PREP_IFSR -- zero out ifsr                                  

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; PREP_IFSR										 ;AN000;
				;											 ;AN000;
				; Called by:	all function routines							 ;AN000;
				;											 ;AN000;
				; Inputs: none										 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	set all ifsrh fields to zero							 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	ES:BX -> IFSRH									 ;AN000;
				;											 ;AN000;
				; Regs: all except ES,BX saved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure PREP_IFSR,NEAR							 ;AN000;
 01C6                        1	PREP_IFSR    PROC    NEAR 
															 ;AN000;
					SaveReg <DS,DI,AX,CX>			; save regs				 ;AN000;
 01C6  1E                    2		PUSH    DS 
 01C7  57                    2		PUSH    DI 
 01C8  50                    2		PUSH    AX 
 01C9  51                    2		PUSH    CX 
															 ;AN000;
					SaveReg <CS,CS> 			; get ds,es -> ifsseg			 ;AN000;
 01CA  0E                    2		PUSH    CS 
 01CB  0E                    2		PUSH    CS 
					RestoreReg <DS,ES>								 ;AN000;
 01CC  1F                    2		POP     DS 
 01CD  07                    2		POP     ES 
				ASSUME	DS:IFSSEG,ES:IFSSEG								 ;AN000;
															 ;AN000;
 01CE  BF 0000 E			MOV	DI,OFFSET IFSR			; es:di -> ifsrh			 ;AN000;
 01D1  8B DF				MOV	BX,DI				; es:bx -> ifsrh			 ;AN000;
 01D3  B9 0024				MOV	CX,SIZE IFSRH  /2							 ;AN000;
 01D6  33 C0				XOR	AX,AX									 ;AN000;
 01D8  F3/ AB				REP	STOSW				; fill ifsr w/zeros			 ;AN000;
															 ;AN000;
					RestoreReg <CX,AX,DI,DS>		; restore regs				 ;AN000;
 01DA  59                    2		POP     CX 
 01DB  58                    2		POP     AX 
 01DC  5F                    2		POP     DI 
 01DD  1F                    2		POP     DS 
															 ;AN000;
					return										 ;AN000;
 01DE                        1	??0003: 
 01DE  C3                    1		RET 
															 ;AN000;
				EndProc PREP_IFSR									 ;AN000;
 01DF                        1	PREP_IFSR    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <CALL_IFS - call IFS Driver>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-13
CALL_IFS - call IFS Driver                                  

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CALL_IFS										 ;AN000;
				;											 ;AN000;
				; Called by:	all function routines							 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISIFS] set									 ;AN000;
				;	ES:BX -> IFS request header							 ;AN000;
				;	DS - IFSSEG									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Call file system function entry point						 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	Outputs of call 								 ;AN000;
				;											 ;AN000;
				; Regs: none preserved									 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CALL_IFS,NEAR 							 ;AN000;
 01DF                        1	CALL_IFS    PROC    NEAR 
															 ;AN000;
 01DF  E8 0A1B R			CALL	CHECK_IFS_SUPPORT		; 1st check if this request ok for ifs	 ;AN010;
 01E2  FF 36 0000 E			PUSH	WORD PTR [THISIFS]		; save thisifs offset			 ;AN000;
				
 01E6  E8 0928 R			CALL	SET_CATEGORY			; do this to determine unc or ifs	 ;AN000;
 01E9  0A C9				OR	CL,CL				; cl-1 for unc, 0 for ifs		 ;AN000;
 01EB  75 05				JNZ	CI_05									 ;AN000;
					invoke	EcritIFS			; enter ifs critical section		 ;AN000;
 01ED  E8 0000 E             1		CALL    EcritIFS 
 01F0  EB 03				JMP	SHORT CI_10								 ;AN000;
 01F2				CI_05:											 ;AN000;
					invoke	EcritNET			; enter network critical section	 ;AN000;
 01F2  E8 0000 E             1		CALL    EcritNET 
				
 01F5				CI_10:
 01F5  C5 36 0000 E			LDS	SI,[THISIFS]			; set thisifs=fs driver fcn entry pt	 ;AN000;
 01F9  8B 44 14				MOV	AX,DS:[SI.IFS_CALL@]		; offset=contents of ifs_call@		 ;AN000;
															 ;AN000;
 01FC  0E				PUSH	CS									 ;AN000;
 01FD  1F				POP	DS									 ;AN000;
				ASSUME	DS:IFSSEG									 ;AN000;
															 ;AN000;
 01FE  A3 0000 E			MOV	WORD PTR [THISIFS],AX							 ;AN000;
 0201  51				PUSH	CX				; save this for later unc vs. ifs check  ;AN000;
				;----------------------------------------------------------------------------		 ;AN000;
 0202  FF 1E 0000 E			CALL	[THISIFS]			; call fs driver with request		 ;AN000;
				;----------------------------------------------------------------------------		 ;AN000;
 0206  59				POP	CX				; unc or ifs result			 ;AN000;
 0207  8F 06 0000 E			POP	WORD PTR [THISIFS]		; restore thisifs offset		 ;AN000;
				
 020B  0A C9				OR	CL,CL				; again, determine whether to exit ifs	 ;AN000;
 020D  75 05				JNZ	CI_15				; or unc critical section		 ;AN000;
					invoke	LcritIFS			; leave ifs critical section		 ;AN000;
 020F  E8 0000 E             1		CALL    LcritIFS 
 0212  EB 03				JMP	SHORT CI_17								 ;AN000;
 0214				CI_15:											 ;AN000;
					invoke	LcritNET			; leave network critical section	 ;AN000;
 0214  E8 0000 E             1		CALL    LcritNET 
				
 0217				CI_17:											 ;AN000;
 0217  26: 8A 47 05			MOV	AL,ES:[BX.IFSR_RETCLASS]	; check for error (class)		 ;AN000;
 021B  3C 00				CMP	AL,IFSR_NO_ERROR		; (any err must have class set) 	 ;AN000;
 021D  75 03				JNE	CI_20									 ;AN000;
 021F  E9 00DA R			JMP	ifs_990 			; no error, go ret no carry		 ;AN000;
															 ;AN000;
				;-----------------------------------------------; error processing			 ;AN000;
 0222				CI_20:											 ;AN000;
 0222  F7 06 0000 E 2000		TEST	IFSPROC_FLAGS,IsInit		; if in init code, skip error proc	 ;AN011;
 0228  74 03				JZ	CI_22									 ;AN011;
 022A  E9 00D8 R			JMP	ifs_980 			; init error- just go stc and quit	 ;AN011;
 022D				CI_22:											 ;AN011;
 022D  3C 03				CMP	AL,IFSR_INT21H_CRITER		; critical error?			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-14
CALL_IFS - call IFS Driver                                  

 022F  74 03				JE	CI_23									 ;AN029;
 0231  E9 02B6 R			JMP	CI_30									 ;AC029;
 0234				CI_23:											 ;AN029;
 0234  26: 8B 47 03			MOV	AX,ES:[BX.IFSR_RETCODE] 	; put retcode in al before condition	 ;AN000;
				
				
 0238  3D 0013				CMP	AX,error_write_protect							 ;AN029;
 023B  72 08				JB	NO_UNMAP								 ;AN029;
 023D  3D 001F				CMP	AX,error_gen_failure							 ;AN029;
 0240  77 03				JA	NO_UNMAP								 ;AN029;
 0242  2D 0013				SUB	AX,error_write_protect	; BIAS old errors back down into 0-12 range	 ;AN029;
 0245				NO_UNMAP:										 ;AN029;
 0245  8B F8				MOV	DI,AX									 ;AN029;
 0247  B8 0000 E			MOV	AX,OFFSET ifs_ErrMap24End
 024A  2D 0000 E			SUB	AX,OFFSET ifs_ErrMap24
				;											 ;AN029;
				; AX is the index of the first unavailable error.  Do not translate if			 ;AN029;
				; greater or equal to AX.								 ;AN029;
				;											 ;AN029;
 024D  3B F8				CMP	DI,AX									 ;AN029;
 024F  8B C7				MOV	AX,DI									 ;AN029;
 0251  73 07				JAE	NoTrans 								 ;AN029;
 0253  2E: 8A 85 0000 E			MOV	AL,cs:ifs_ErrMap24[DI] 							 ;AN029;
 0258  32 E4				XOR	AH,AH									 ;AN029;
 025A				NoTrans:										 ;AN029;
					invoke	SET_EXTERR_INFO 		; yes - set error info			 ;AN000;
 025A  E8 0000 E             1		CALL    SET_EXTERR_INFO 
				
 025D				CI_25:											 ;AN011;
					SaveReg <DS,SI,ES,DI,CX,AX>		; temporarily save ifsr in tempbuf over  ;AN008;
 025D  1E                    2		PUSH    DS 
 025E  56                    2		PUSH    SI 
 025F  06                    2		PUSH    ES 
 0260  57                    2		PUSH    DI 
 0261  51                    2		PUSH    CX 
 0262  50                    2		PUSH    AX 
					SaveReg <ES>				; next call				 ;AN008;
 0263  06                    2		PUSH    ES 
					RestoreReg <DS> 			; Set dssi -> ifsr (current esbx)	 ;AN008;
 0264  1F                    2		POP     DS 
 0265  8B F3				MOV	SI,BX									 ;AN008;
 0267  B9 0024				MOV	CX,36				; half size of max ifsr 		 ;AN008;
 026A  BF 0000 E			MOV	DI,OFFSET TEMPBUF		; set esdi -> tempbuf			 ;AN008;
 026D  FC				CLD					; next instr auto-increment		 ;AN008;
 026E  F3/ A5				REP	MOVSW				; copy the ifsr over (word move)	 ;AN008;
 0270  2E: A1 0000 E			MOV	AX,CS:IFSPROC_FLAGS		; preserve ifsproc_flags		 ;AN026;
 0274  AB				STOSW										 ;AN026;
					RestoreReg <AX,CX,DI,ES,SI,DS>		; restore regs				 ;AN008;
 0275  58                    2		POP     AX 
 0276  59                    2		POP     CX 
 0277  5F                    2		POP     DI 
 0278  07                    2		POP     ES 
 0279  5E                    2		POP     SI 
 027A  1F                    2		POP     DS 
				
 027B  83 FF 0C				CMP	DI,error_I24_gen_failure						 ;AN029;
 027E  76 03				JBE	CI_26									 ;AN029;
 0280  BF 000C				MOV	DI,error_I24_gen_failure						 ;AN029;
 0283				CI_26:											 ;AN029;
					SaveReg <AX>				; preserve dos ext err			 ;AN021;
 0283  50                    2		PUSH    AX 
					invoke	IFS_I24 			;	do int 24h			 ;AN000;
 0284  E8 0000 E             1		CALL    IFS_I24 
				
					SaveReg <DS,SI,ES,DI,CX,AX>		; restore original ifsr (over criter one);AN008;
 0287  1E                    2		PUSH    DS 
 0288  56                    2		PUSH    SI 
 0289  06                    2		PUSH    ES 
 028A  57                    2		PUSH    DI 
 028B  51                    2		PUSH    CX 
 028C  50                    2		PUSH    AX 
					SaveReg <CS,CS> 			; set dssi -> tempbuf			 ;AN008;
 028D  0E                    2		PUSH    CS 
 028E  0E                    2		PUSH    CS 
					RestoreReg <DS,ES>			; set esdi -> ifsr			 ;AN008;
 028F  1F                    2		POP     DS 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-15
CALL_IFS - call IFS Driver                                  

 0290  07                    2		POP     ES 
 0291  BE 0000 E			MOV	SI,OFFSET TEMPBUF		;					 ;AN008;
 0294  BF 0000 E			MOV	DI,OFFSET IFSR			;					 ;AN008;
 0297  B9 0024				MOV	CX,36				; half size of max ifsr 		 ;AN008;
 029A  FC				CLD					; next instr auto-increment		 ;AN008;
 029B  F3/ A5				REP	MOVSW				; copy the ifsr over (word move)	 ;AN008;
 029D  AD				LODSW					; restore ifsproc_flags 		 ;AN026;
 029E  2E: A3 0000 E			MOV	CS:IFSPROC_FLAGS,AX		;					 ;AN026;
					RestoreReg <AX,CX,DI,ES,SI,DS>		; restore regs				 ;AN008;
 02A2  58                    2		POP     AX 
 02A3  59                    2		POP     CX 
 02A4  5F                    2		POP     DI 
 02A5  07                    2		POP     ES 
 02A6  5E                    2		POP     SI 
 02A7  1F                    2		POP     DS 
				
 02A8  3C 01				CMP	AL,RETRY			;	if retry, restart request	 ;AN000;
 02AA  74 04				JE	CI_27				;	else, go ret w/carry		 ;AC011;
					RestoreReg <AX> 			; retrieve dos ext err			 ;AN021;;AM0
				25;
 02AC  58                    2		POP     AX 
 02AD  E9 00D8 R			JMP	ifs_980 								 ;AN000;
 02B0				CI_27:											 ;AN011;
 02B0  83 C4 02				ADD	SP,2				; restore stack (dos ext error #)	 ;AN025;
 02B3  E9 034D R			JMP	CI_80									 ;AN011;
															 ;AN000;
 02B6				CI_30:						; not critical error:			 ;AN000;
 02B6  3C FF				CMP	AL,IFSR_BAD_FORMAT		; map ifsr bad format error to general	 ;AN011;
 02B8  75 26				JNE	CI_32				; failure (12) critical error		 ;AN011;
 02BA  B0 0C				MOV	AL,12
 02BC  36: C7 06 0000 E 001F		MOV	SS:[EXTERR],31			; set dos error variables for abort	 ;AN011;
 02C3  36: C6 06 0000 E 04		MOV	SS:[EXTERR_CLASS],4		; (Internal)				 ;AN011;
 02C9  36: C6 06 0000 E 04		MOV	SS:[EXTERR_ACTION],4		; (Abort)				 ;AN011;
 02CF  36: C6 06 0000 E 01		MOV	SS:[EXTERR_LOCUS],1		; (Unknown)				 ;AN011;
 02D5  36: C6 06 0000 E 08		MOV	SS:[ALLOWED],08H		; allow only fail			 ;AN011;
 02DB  8B F8				MOV	DI,AX									 ;AN029;
 02DD  E9 025D R			JMP	CI_25				; go back & treat as critical error	 ;AN011;
 02E0				CI_32:											 ;AN011;
 02E0  3C 02				CMP	AL,IFSR_DRIVER_ERROR							 ;AN011;
 02E2  75 2B				JNE	CI_37									 ;AC011;
 02E4  26: 8B 47 03			MOV	AX,ES:[BX.IFSR_RETCODE] 	; *** driver error class ***		 ;AN011;
 02E8  3D FFFF				CMP	AX,IFSR_NO_FCN_SUPPORT							 ;AN011;
 02EB  7F 06				JG	CI_34									 ;AN011;
 02ED  B8 0032				MOV	AX,50				; request not supported by file system	 ;AN011;
 02F0  E9 0379 R			JMP	CI_100									 ;AN011;
 02F3				CI_34:											 ;AN011;
 02F3  3D 0003				CMP	AX,IFSR_ACCESS_DENIED							 ;AN011;
 02F6  75 06				JNE	CI_35									 ;AN011;
 02F8  B8 0041				MOV	AX,65				; access denied by file system		 ;AN011;
 02FB  EB 7C 90				JMP	CI_100									 ;AN011;
 02FE				CI_35:											 ;AN011;
 02FE  3D 0004				CMP	AX,IFSR_DEVICE_TYPE_MISMATCH						 ;AN011;
 0301  75 06				JNE	CI_36									 ;AN011;
 0303  B8 0042				MOV	AX,66				; file sytem device type incorrect	 ;AN011;
 0306  EB 71 90				JMP	CI_100									 ;AN011;
 0309				CI_36:											 ;AN011;
 0309  B8 003B				MOV	AX,59				; fs experienced an unexpected error	 ;AN011;
 030C  EB 6B 90				JMP	CI_100									 ;AN011;
				
 030F				CI_37:											 ;AN011;
 030F  3C 04				CMP	AL,IFSR_DEVICE_ERROR		; fs got device error			 ;AN011;
 0311  75 0A				JNE	CI_38									 ;AN011;
 0313  26: 8B 47 03			MOV	AX,ES:[BX.IFSR_RETCODE] 						 ;AN011;
					invoke	DEVICE2EXTERR			; convert device - ext error		 ;AN011;
 0317  E8 0000 E             1		CALL    DEVICE2EXTERR 
 031A  EB 5D 90				JMP	CI_100				; go set class/action/locus		 ;AN011;
 031D				CI_38:											 ;AN011;
 031D  26: 8B 47 03			MOV	AX,ES:[BX.IFSR_RETCODE] 						 ;AN011;
 0321  3D 0020				CMP	AX,error_sharing_violation						 ;AN000;
 0324  75 53				JNZ	CI_100									 ;AN000;
															 ;AN000;
					SaveReg <DS>				;  save ifsseg				 ;AN018;
 0326  1E                    2		PUSH    DS 
					Context DS				;     Share error			 ;AN000;
 0327  16                    1		PUSH    SS 
 0328  1F                    1		POP     DS 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-16
CALL_IFS - call IFS Driver                                  

					invoke	PHONEY_DPB			;     Set phoney NET DPB for INT 24	 ;AN000;
 0329  E8 0000 E             1		CALL    PHONEY_DPB 
 032C  26: 80 7F 16 09			CMP	ES:[BX.IFSR_APIFUNC],IFSOPENFILE ; on open/create - share error,no int24 ;AN018;
 0331  75 07				JNE	CI_39									 ;AN018;
					CallInstall SHARE_ERROR,MultDOS,11						 ;AN018;
 0333  B8 120B               1		MOV     AX,(MultDOS SHL 8) + 11 
 0336  CD 2F                 1		INT     2Fh 
 0338  EB 05				JMP	SHORT  CI_39_20 							 ;AN018;
 033A				CI_39:											 ;AN018;
					CallInstall SHARE_VIOLATION,MultDOS,10						 ;AN000;
 033A  B8 120A               1		MOV     AX,(MultDOS SHL 8) + 10 
 033D  CD 2F                 1		INT     2Fh 
 033F				CI_39_20:										 ;AN018;
					RestoreReg <DS> 								 ;AN018;
 033F  1F                    2		POP     DS 
															 ;AN000;
 0340  73 09				JNC	CI_40									 ;AN000;
 0342  B8 0020				MOV	AX,error_sharing_violation	;      carry set - quit w/error 	 ;AN000;
					invoke	SET_EXTERR_INFO 							 ;AN000;
 0345  E8 0000 E             1		CALL    SET_EXTERR_INFO 
 0348  E9 00D8 R			JMP	ifs_980 								 ;AN000;
															 ;AN000;
 034B				CI_40:						;      carry clear - retry		 ;AN000;
 034B  B0 01				MOV	AL,RETRY								 ;AN000;
				
 034D				CI_80:											 ;AN000;
 034D  26: FE 47 1B			INC	ES:[BX.IFSR_I24_COUNT]		;	retry: inc retry count		 ;AN000;
 0351  26: 88 47 1C			MOV	ES:[BX.IFSR_I24_RESP],AL	;	     store i24 response 	 ;AN000;
 0355  26: C7 47 03 0000		MOV	ES:[BX.IFSR_RETCODE],0		;	     reset retcode and class	 ;AN008;
 035B  26: C6 47 05 00			MOV	ES:[BX.IFSR_RETCLASS],0 						 ;AN008;
 0360  26: C6 47 17 00			MOV	ES:[BX.IFSR_ERROR_CLASS],0	;	     reset retcode and class	 ;AN025;
 0365  26: C6 47 18 00			MOV	ES:[BX.IFSR_ERROR_ACTION],0						 ;AN025;
 036A  26: C6 47 19 00			MOV	ES:[BX.IFSR_ERROR_LOCUS],0	;	     reset retcode and class	 ;AN025;
 036F  26: C6 47 1A 00			MOV	ES:[BX.IFSR_ALLOWED],0							 ;AN025;
					SaveReg <CS>				;	       restore ds-ifsseg	 ;AN000;
 0374  0E                    2		PUSH    CS 
					RestoreReg <DS> 								 ;AN000;
 0375  1F                    2		POP     DS 
				ASSUME	DS:IFSSEG									 ;AN000;
 0376  E9 01DF R			JMP	CALL_IFS								 ;AN000;
															 ;AN000;
 0379				CI_100: 					;     non-critical error		 ;AN000;
 0379  2E: F7 06 0000 E 8000		TEST	CS:IFSPROC_FLAGS,IsMsgRet	;     if msg ret call to int 2f-5 stack  ;AN028;
 0380  75 03				JNZ	CI_120				;     not dosgroup so can't call next    ;AN028;
 0382  E8 0000 E			CALL	SET_EXTERR_INFO 		;     set exterr info and		 ;AN000;
 0385				CI_120: 										 ;AN028;
 0385  E9 00D8 R			JMP	ifs_980 			;     go ret w/carry			 ;AN000;
															 ;AN000;
															 ;AN000;
				EndProc CALL_IFS									 ;AN000;
 0388                        1	CALL_IFS    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <CREATE_DFL_ENTRY - fill in DFL entry, add to names list if alias>		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-17
CREATE_DFL_ENTRY - fill in DFL entry, add to names list if a

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CREATE_DFL_ENTRY									 ;AN000;
				;											 ;AN000;
				; Routine called by:  ATTACH_START							 ;AN000;
				;		      PROCESS_ALIAS							 ;AN000;
				;											 ;AN000;
				; Routines called:    DFL_TO_DF 							 ;AN000;
				;		      ENTER_NAMES_LIST							 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISIFS] set									 ;AN000;
				;	BL = macro type 								 ;AN000;
				;	CX = user word
				;	DS:SI -> ASCIIZ device name							 ;AN000;
				;	ES:DI -> Target driver to attach to and parms.					 ;AN000;
				;			  DW ASCIIZ  -	FS name 					 ;AN000;
				;			  DW n	     -	number of parms 				 ;AN000;
				;			  DB ASCIIZ,... parms						 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	WHILE DFL entries								 ;AN000;
				;	  IF entry not in use THEN							 ;AN000;
				;	     DO 									 ;AN000;
				;	       Set in progress flag for this entry					 ;AN000;
				;	       DFL_TYPE = BL								 ;AN000;
				;	       DFL_DEV_NAME = name pointed to by DS:SI					 ;AN000;
				;	       DFL_USER_WORD = CX
				;	       IF alias, Call ENTER_NAMES_LIST						 ;AN000;
				;	       DFL_IFS_HDR = [THISIFS]							 ;AN000;
				;	       Set in use flag								 ;AN000;
				;	       Reset in progress flag							 ;AN000;
				;	       Set [THISDFL]								 ;AN000;
				;	       Call DFL_TO_DF								 ;AN000;
				;	       LEAVE WHILE								 ;AN000;
				;	     ENDDO									 ;AN000;
				;	  ELSE DO									 ;AN000;
				;		 Get next DFL entry							 ;AN000;
				;		 IF no entry THEN							 ;AN000;
				;		    Set error_out_of_structures 					 ;AN000;
				;		 ENDIF									 ;AN000;
				;	       ENDDO									 ;AN000;
				;	ENDWHILE									 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;    carry clear:									 ;AN000;
				;	DFL entry created.  Names list addition if alias.				 ;AN000;
				;	[THISDFL] set									 ;AN000;
				;	DS:SI -> DFL									 ;AN000;
				;	If not alias:									 ;AN000;
				;	  DF loaded									 ;AN000;
				;	  ES:BX -> IFSRH								 ;AN000;
				;	  IFSR_DEVICE_CB@ -> DF 							 ;AN000;
				;											 ;AN000;
				;    carry set on error, ax - error							 ;AN000;
				;											 ;AN000;
				; Regs: DS:SI -> DFL, all others destroyed						 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CREATE_DFL_ENTRY,NEAR 						 ;AN000;
 0388                        1	CREATE_DFL_ENTRY    PROC    NEAR 
															 ;AN000;
					SaveReg <DS,SI> 			; save input DS:SI (devname)		 ;AN000;
 0388  1E                    2		PUSH    DS 
 0389  56                    2		PUSH    SI 
 038A  8B D1				MOV	DX,CX				; save user word in dx			 ;AN002;
															 ;AN000;
 038C  2E: C5 36 0000 E			LDS	SI,CS:[DFLAddr] 		; Set DS:SI -> 1st DFL entry		 ;AN000;
 0391  2E: 8A 0E 0000 E			MOV	CL,CS:DFLCount			; CX = # DFL entries			 ;AN000;
 0396  0A C9				OR	CL,CL				; check for available dfl structure	 ;AN022;
 0398  74 0F				JZ	CDE_30
 039A  32 ED				XOR	CH,CH									 ;AN000;
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
 039C  E8 0871 R			CALL	CONSIST_DFL			; reset all in_prog flags		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-18
CREATE_DFL_ENTRY - fill in DFL entry, add to names list if a

 039F				CDE_20: 										 ;AN000;
 039F  F6 04 40				TEST	[SI.DFLL_FLAGS],DFL_INUSE	; look for unused DFL			 ;AN000;
 03A2  74 0D				JZ	CDE_40				; entry 				 ;AN000;
 03A4  83 C6 1E				ADD	SI,SIZE DFLL_LIST							 ;AN000;
 03A7  E2 F6				LOOP	CDE_20									 ;AN000;
 03A9				CDE_30:
 03A9  B8 0054				MOV	AX,error_out_of_structures						 ;AN000;
					RestoreReg <SI,DS>			; restore stack 			 ;AN000;
 03AC  5E                    2		POP     SI 
 03AD  1F                    2		POP     DS 
 03AE  E9 00D8 R			JMP	ifs_980 			; go return w/carry			 ;AN000;
 03B1				CDE_40: 										 ;AN000;
 03B1  E8 09B6 R			CALL	INIT_DFL			; zero out dfl entry			 ;AN000;
 03B4  80 0C 80				OR	[SI.DFLL_FLAGS],DFL_INPROG	; Found DFL entry -			 ;AN000;
										; Set in progress flag			 ;AN000;
 03B7  88 5C 01				MOV	[SI.DFLL_TYPE],BL		; Store DFL_TYPE			 ;AN000;
 03BA  89 54 0A				MOV	[SI.DFLL_USER_WORD],DX		; store user word			 ;AN002;
															 ;AN000;
					RestoreReg <DI,ES>			; get dev name ptr off stack		 ;AN000;
 03BD  5F                    2		POP     DI 
 03BE  07                    2		POP     ES 
 03BF  E8 0902 R			CALL	XCHGP				; Set DS:SI -> devname			 ;AN000;
 03C2  57				PUSH	DI				;     ES:DI -> DFL			 ;AN000;
										; save dfl start offset 		 ;AN000;
 03C3				CDE_60: 										 ;AN000;
 03C3  47				INC	DI				; mov di to dfl_dev_name		 ;AN000;
 03C4  47				INC	DI									 ;AN000;
 03C5  B9 0008				MOV	CX,8				; Devs max of 8 ch and ':', and a NUL    ;AN000;
 03C8				CDE_70: 					; dssi->source, esdi->dfl_dev_name	 ;AN000;
 03C8  AC				LODSB					; just store 1st 8 padded to right	 ;AN000;
					CallInstall UCase,multDOS,19,<AX>,<BX>	; w/blanks				 ;AC030; ax 
				chg to bx
 03C9  50                    3		PUSH    AX 
 03CA  B8 1213               1		MOV     AX,(multDOS SHL 8) + 19 
 03CD  CD 2F                 1		INT     2Fh 
 03CF  5B                    3		POP     BX 
 03D0  0A C0				OR	AL,AL				; 0 . : signal end			 ;AN000;
 03D2  74 0D				JZ	CDE_73									 ;AN000;
 03D4  3C 2E				CMP	AL,'.'                                                                   ;AN000;
 03D6  74 09				JZ	CDE_73									 ;AN000;
 03D8  3C 3A				CMP	AL,':'                                                                   ;AN000;
 03DA  74 05				JZ	CDE_73									 ;AN000;
 03DC  AA				STOSB										 ;AN000;
 03DD  E2 E9				LOOP	CDE_70									 ;AN000;
 03DF  EB 05				JMP	SHORT CDE_80								 ;AN000;
 03E1				CDE_73: 										 ;AN000;
 03E1  B0 20				MOV	AL," "                                                                   ;AN000;
 03E3				CDE_76: 										 ;AN000;
 03E3  AA				STOSB										 ;AN000;
 03E4  E2 FD				LOOP	CDE_76									 ;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	 ;AN000;
				;;;aliasCMP	BL,TYPE_ALIAS								 ;AN000;
				;;;;;;;;JNE	CDE_80									 ;AN000;
				;;;;;;;;CALL	ENTER_NAMES_LIST			; Store alias index		 ;AN000;
				;;;;;;;;JNC	CDE_120 								 ;AN000;
				;;;;;;;;POP	DI					; if error back out		 ;AN000;
				;;;;;;;;AND	[SI.DFLL_FLAGS],NOT DFL_INPROG		; go exit with carry		 ;AN000;
				;;;aliasJMP	ifs_980 								 ;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	 ;AN000;
 03E6				CDE_80: 										 ;AN000;
 03E6  83 C7 04				ADD	DI,4					; skip alias index and user wd	 ;AC004;
				;;;;	INC	DI									 ;AD004;
 03E9				CDE_100:										 ;AN000;
 03E9  2E: A1 0000 E			MOV	AX,WORD PTR [THISIFS]							 ;AN000;
 03ED  AB				STOSW						; Set DFL_IFS_HDR to		 ;AN000;
 03EE  2E: A1 0002 E			MOV	AX,WORD PTR [THISIFS+2] 		; [THISIFS]			 ;AN000;
 03F2  AB				STOSW										 ;AN000;
 03F3				CDE_120:										 ;AN000;
 03F3  5F				POP	DI					; retrieve dfl start		 ;AN000;
 03F4  2E: 89 3E 0000 E			MOV	WORD PTR CS:[THISDFL],DI		; Set [thisdfl] 		 ;AN000;
 03F9  2E: 8C 06 0002 E			MOV	WORD PTR CS:[THISDFL+2],ES						 ;AN000;
															 ;AN000;
 03FE  06				PUSH	ES					; Set DS:SI -> DFL		 ;AN000;
 03FF  1F				POP	DS									 ;AN000;
 0400  8B F7				MOV	SI,DI									 ;AN000;
															 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-19
CREATE_DFL_ENTRY - fill in DFL entry, add to names list if a

 0402  E8 089A R			CALL	CHECK_REAL_DEVICE			; this will set dfl_dev_real	 ;AN000;
															 ;AN000;
 0405  80 0C 40				OR	[SI.DFLL_FLAGS],DFL_INUSE						 ;AN000;
 0408  80 24 7F				AND	[SI.DFLL_FLAGS],NOT DFL_INPROG						 ;AN000;
															 ;AN000;
				;;;aliasCMP	BL,TYPE_ALIAS								 ;AN000;
				;;;aliasJNE	CDE_140 								 ;AN000;
				;;;aliasJMP	ifs_990 			; go ret no carry			 ;AN000;
 040B				CDE_140:										 ;AN000;
					invoke	PREP_IFSR			; init req hdr				 ;AN000;
 040B  E8 01C6 R             1		CALL    PREP_IFSR 
					invoke	DFL_TO_DF								 ;AN000;
 040E  E8 070C R             1		CALL    DFL_TO_DF 
 0411  E9 00DA R			JMP	ifs_990 								 ;AN000;
															 ;AN000;
				EndProc CREATE_DFL_ENTRY								 ;AN000;
 0414                        1	CREATE_DFL_ENTRY    ENDP 
															 ;AN000;
				BREAK <DELETE_DFL_ENTRY - Delete DFL entry, remove from names list if alias>		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-20
DELETE_DFL_ENTRY - Delete DFL entry, remove from names list 

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DELETE_DFL_ENTRY									 ;AN000;
				;											 ;AN000;
				; Routine called by:  IFS_ASSOPER							 ;AN000;
				;											 ;AN000;
				; Routines called:									 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISDFL] set									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;    carry clear:									 ;AN000;
				;	DFL entry deleted.								 ;AN000;
				;    carry set on error, ax - error							 ;AN000;
				;											 ;AN000;
				; Regs: everything preserved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure DELETE_DFL_ENTRY,NEAR 						 ;AN000;
 0414                        1	DELETE_DFL_ENTRY    PROC    NEAR 
															 ;AN000;
 0414  2E: C5 36 0000 E			LDS	SI,[THISDFL]			; simply reset in_use bit		 ;AN000;
 0419  80 24 BF				AND	DS:[SI.DFLL_FLAGS],NOT DFL_INUSE 					 ;AN000;
				;;;aliasCMP	DS:[SI.DFLL_TYPE],TYPE_ALIAS	; if alias, must remove name		 ;AN000;
				;;;aliasJE	DDE_20				; from names list, and reset		 ;AN000;
 041C  E9 00DB R			JMP	ifs_1000								 ;AN000;
				;;;aliasDDE_20: 									 ;AN000;
				;;;aliasCALL	EXIT_NAMES_LIST 		; all alias indicies			 ;AN000;
				;;;aliasJMP	ifs_1000								 ;AN000;
															 ;AN000;
				EndProc DELETE_DFL_ENTRY								 ;AN000;
 041F                        1	DELETE_DFL_ENTRY    ENDP 
															 ;AN000;
				;BREAK <ENTER_NAMES_LIST - add alias name to Names List>				 ;AN000;
				;;;alias										 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; ENTER_NAMES_LIST									 ;AN000;
				;											 ;AN000;
				; Routine called by:  CREATE_DFL_ENTRY							 ;AN000;
				;											 ;AN000;
				; Routines called:	DOS: DStrLen							 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	  DS:SI -> DFL									 ;AN000;
				;	  ES:DI -> Target driver to attach to and parms.				 ;AN000;
				;			  DW ASCIIZ  -	FS name 					 ;AN000;
				;			  DW n	     -	number of parms 				 ;AN000;
				;			  DB ASCIIZ,... parms						 ;AN000;
				; Function:										 ;AN000;
				;	Place one and only parameter (alias) into names list.				 ;AN000;
				; Outputs:										 ;AN000;
				;	carry clear: name added 							 ;AN000;
				;	carry set:   AX error								 ;AN000;
				;											 ;AN000;
				; Notes:  all preserved except AX							 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;	procedure ENTER_NAMES_LIST							 ;AN000;
				;SSUME	DS:IFSSEG,ES:IFSSEG								 ;AN000;
				;											 ;AN000;
				;	SaveReg <ES,DI,CX,DX,DS,SI>							 ;AN000;
				;	PUSH	ES									 ;AN000;
				;	POP	DS									 ;AN000;
				;	MOV	SI,DI									 ;AN000;
				;	ADD	SI,4				; ds:si -> alias name			 ;AN000;
				;	CallInstall DStrlen,multDOS,37		; get size of alias name in cx		 ;AN000;
				;	LES	DI,[NLAddr]			; get address of names list		 ;AN000;
				;	MOV	DX,WORD PTR ES:[DI]		; DX=total size of names list		 ;AN000;
				;	INC	DI									 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-21
DELETE_DFL_ENTRY - Delete DFL entry, remove from names list 

				;	INC	DI									 ;AN000;
				;	MOV	AX,WORD PTR ES:[DI]		; AX=used size of names list		 ;AN000;
				;	PUSH	AX				; save used size for dfl_alias_index	 ;AN000;
				;	ADD	AX,CX				; AX=hopefully new used size		 ;AN000;
				;	CMP	DX,AX				; check that new string fits		 ;AN000;
				;	JAE	ENL_20									 ;AN000;
				;	MOV	AX,error_out_of_structures	; error - doesn't fit                    ;AN000;
				;	JMP	ENL_980 			; ret w/carry				 ;AN000;
				;NL_20: 					; ok - fits				 ;AN000;
				;	STOSW					; store new used size			 ;AN000;
				;	POP	AX				; get index from stack			 ;AN000;
				;	PUSH	AX									 ;AN000;
				;	INC	DI									 ;AN000;
				;	INC	DI									 ;AN000;
				;	ADD	DI,AX				; Space to spot in list to put name	 ;AN000;
				;	REP	MOVSB									 ;AN000;
				;	RestoreReg <SI,DS>			; Set dfl alias index to byte offset	 ;AN000;
				;	POP	AX				; (+4) of name in list			 ;AN000;
				;	MOV	DS:WORD PTR [SI.DFL_ALIAS_INDEX],AX					 ;AN000;
				;	JMP	ENL_990 			; go ret no carry			 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				;NL_980:					; Return area				 ;AN000;
				;	STC					; error 				 ;AN000;
				;	RestoreReg <SI,DS,DX,CX,DI,ES>							 ;AN000;
				;	return										 ;AN000;
				;NL_990:										 ;AN000;
				;	CLC					; no error				 ;AN000;
				;	RestoreReg <DX,CX,DI,ES>							 ;AN000;
				;NL_1000:										 ;AN000;
				;	return										 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				;ndProc ENTER_NAMES_LIST								 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				;REAK <EXIT_NAMES_LIST - remove alias name from Names List>				 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; EXIT_NAMES_LIST									 ;AN000;
				;											 ;AN000;
				; Routine called by:  DELETE_DFL_ENTRY							 ;AN000;
				;											 ;AN000;
				; Routines called:	DOS: StrLen							 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	  DS:SI -> DFL									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Remove alias name from Names List						 ;AN000;
				; Outputs:										 ;AN000;
				;	name removed									 ;AN000;
				;											 ;AN000;
				; Notes:  all preserved 								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;	procedure EXIT_NAMES_LIST							 ;AN000;
				;SSUME	DS:IFSSEG,ES:IFSSEG								 ;AN000;
				;											 ;AN000;
				;	MOV	DX,DS:[SI.DFL_ALIAS_INDEX]	; DX=index				 ;AN000;
				;	LES	DI,[NLAddr]								 ;AN000;
				;	MOV	AX,ES:WORD PTR [DI+2]		; AX=used size				 ;AN000;
				;	SaveReg <ES,DI,AX>								 ;AN000;
				;	ADD	DI,DX+4 								 ;AN000;
				;	CallInstall StrLen,multDOS,18		; CX=size of alias name 		 ;AN000;
				;	PUSH	ES									 ;AN000;
				;	POP	DS									 ;AN000;
				;	MOV	SI,DI									 ;AN000;
				;	ADD	SI,CX									 ;AN000;
				;	MOV	BX,CX									 ;AN000;
				;	SUB	AX,SI				; CX= #bytes to move =			 ;AN000;
				;	MOV	CX,AX				; used size - index of next name	 ;AN000;
				;	REP	MOVSB				; move names up 			 ;AN000;
				;											 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-22
DELETE_DFL_ENTRY - Delete DFL entry, remove from names list 

				;	RestoreReg <AX,DI,ES>			; adjust used size			 ;AN000;
				;	SUB	AX,BX									 ;AN000;
				;	MOV	ES:WORD PTR [DI+2],AX							 ;AN000;
				;											 ;AN000;
				;	LDS	SI,[DFLAddr]			; loop thru all dfl entries to		 ;AN000;
				;	MOV	DI,SIZE DFL_LIST		; adjust alias indicies above		 ;AN000;
				;	MOV	CL,[DFLCount]			; index removed 			 ;AN000;
				;	XOR	CH,CH									 ;AN000;
				;XNL_20:					; ** Loop here on dfl entries		 ;AN000;
				;	TEST	DS:[SI.DFLL_FLAGS],DFL_INUSE						 ;AN000;
				;	JZ	EXNL_40 								 ;AN000;
				;	MOV	AX,DS:[SI.DFL_ALIAS_INDEX]	; 0 if not alias			 ;AN000;
				;	CMP	AX,DX									 ;AN000;
				;	JB	EXNL_40 								 ;AN000;
				;	SUB	AX,BX				; adjust by size of name deleted	 ;AN000;
				;	MOV	DS:[SI.DFL_ALIAS_INDEX],AX						 ;AN000;
				;XNL_40:										 ;AN000;
				;	ADD	SI,DX									 ;AN000;
				;	LOOP	EXNL_20 								 ;AN000;
				;											 ;AN000;
				;	JMP	ifs_1000			; go return				 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				;ndProc EXIT_NAMES_LIST 								 ;AN000;
															 ;AN000;
				BREAK <DFL_SINGLE_FILE_CHECK - support single file check>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-23
DFL_SINGLE_FILE_CHECK - support single file check           

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DFL_SINGLE_FILE_CHECK 								 ;AN000;
				;											 ;AN000;
				; Routine called by:  IFS_FILE_ATTRIBUTES						 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	  [THISDFL]									 ;AN000;
				;	  [WFP_START]									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	IF [THISDFL] .NOT. NULL THEN							 ;AN000;
				;	   DO										 ;AN000;
				;	     Get IFS header from DFL_IFS_HDR						 ;AN000;
				;	     IF IFSDEVICE true THEN							 ;AN000;
				;		DO									 ;AN000;
				;		  Call DFL_TO_DF							 ;AN000;
				;		  Clear carry								 ;AN000;
				;		ENDDO									 ;AN000;
				;	     ELSE   Set error - device doesn't support single file fcn                   ;AN000;
				;	     ENDIF									 ;AN000;
				;	   ENDDO									 ;AN000;
				;	ELSE DO 									 ;AN000;
				;	       CALL DFL_MATCH								 ;AN000;
				;	       IF match found THEN							 ;AN000;
				;		  DO									 ;AN000;
				;		    Get IFS header from DFL_IFS_HDR					 ;AN000;
				;		    IF IFSDEVICE true THEN						 ;AN000;
				;		       DO								 ;AN000;
				;			 Call DFL_TO_DF 						 ;AN000;
				;			 Clear carry							 ;AN000;
				;		       ENDDO								 ;AN000;
				;		    ELSE Set error - device doesn't support single file fcn              ;AN000;
				;		  ENDDO 								 ;AN000;
				;	       ELSE Set error - device not IFS						 ;AN000;
				;	       ENDIF									 ;AN000;
				;	     ENDDO									 ;AN000;
				;	ENDIF										 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	no carry:		carry: error						 ;AN000;
				;	  [THISIFS] set 								 ;AN000;
				;	  ES:BX -> IFSRH								 ;AN000;
				;	  IFSR_DEVICE_CB@								 ;AN000;
				;	  ds - IFSSEG									 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure DFL_SINGLE_FILE_CHECK 						 ;AN000;
 041F                        1	DFL_SINGLE_FILE_CHECK    PROC     
				ASSUME	DS:IFSSEG,ES:IFSSEG								 ;AN000;
				;; assume thisdfl aready set up here							 ;AN000;
				;; don't want to write another parse routine                                             ;AN000;
				;;	CMP	WORD PTR [THISDFL],MINUS_ONE						 ;AN000;
				;;	JNZ	DSFC_20 								 ;AN000;
				;;	CALL	DFL_MATCH			; check for dfl entry			 ;AN000;
				;;	JNC	DSFC_20 								 ;AN000;
				;;	MOV	AX,error_not_ifs_device 						 ;AN000;
				;;	JMP	ifs_1000								 ;AN000;
															 ;AN000;
 041F				DSFC_20:										 ;AN000;
 041F  2E: C4 3E 0000 E			LES	DI,CS:[THISDFL] 							 ;AN000;
 0424  26: C4 7D 0E			LES	DI,ES:[DI.DFLL_IFS_HDR]		; check that ifs device supports	 ;AN000;
 0428  26: F7 45 0C 8000		TEST	ES:[DI.IFS_ATTRIBUTE],IFSDEVICE ; single file function			 ;AN000;
 042E  75 06				JNZ	DSFC_60 								 ;AN000;
 0430  B8 0002				MOV	AX,error_file_not_found 	; no - set error & go return w/carry	 ;AN000;
 0433  E9 00D8 R			JMP	ifs_980 								 ;AN000;
 0436				DSFC_60:										 ;AN000;
					invoke	DFL_TO_DF								 ;AN000;
 0436  E8 070C R             1		CALL    DFL_TO_DF 
 0439  E9 00DA R			JMP	ifs_990 								 ;AN000;
															 ;AN000;
															 ;AN000;
				EndProc DFL_SINGLE_FILE_CHECK								 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-24
DFL_SINGLE_FILE_CHECK - support single file check           

 043C                        1	DFL_SINGLE_FILE_CHECK    ENDP 
															 ;AN000;
				;BREAK <PROCESS_ALIAS -- add alias name>						 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; PROCESS_ALIAS 									 ;AN000;
				;											 ;AN000;
				; Called by: ATTACH_START								 ;AN000;
				;											 ;AN000;
				; Routines called:  DFL_MATCH								 ;AN000;
				;		    CREATE_DFL_ENTRY							 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	    DS:SI -> ASCIIZ source name 						 ;AN000;
				;	    ES:DI -> ALIAS name 							 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;											 ;AN000;
				; Regs: 										 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;	Procedure   PROCESS_ALIAS,NEAR							 ;AN000;
				;SSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
				;											 ;AN000;
				;	CALL	DFL_MATCH								 ;AN000;
				;	JC	PA_20									 ;AN000;
				;;;???	match found, error or override???						 ;AN000;
				;A_20:											 ;AN000;
				;	CALL	CREATE_DFL_ENTRY							 ;AN000;
				;	JMP	ifs_1000								 ;AN000;
				;											 ;AN000;
				;											 ;AN000;
				;ndProc PROCESS_ALIAS									 ;AN000;
															 ;AN000;
															 ;AN000;
				BREAK <DFL_MATCH -- check for DFL entry>						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-25
DFL_MATCH -- check for DFL entry                            

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DFL_MATCH										 ;AN000;
				;											 ;AN000;
				; Called by: ATTACH_START  CONSIST_SFT							 ;AN000;
				;	     IFS_DELETE 								 ;AN000;
				;											 ;AN000;
				; Routines called:									 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	    DS:SI -> Asciiz Device name 						 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Search DFL for match on name							 ;AN000;
				;	If match found - set [THISDFL] and clear carry					 ;AN000;
				;	Else set carry									 ;AN000;
				;											 ;AN000;
				; Output:										 ;AN000;
				;	carry clear - match found, [THISDFL] set					 ;AN000;
				;	carry set   - match not found							 ;AN000;
				;											 ;AN000;
				; Regs: all preserved									 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					Procedure   DFL_MATCH								 ;AN000;
 043C                        1	DFL_MATCH    PROC     
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <DS,SI,ES,DI,AX,CX,BX>		; save registers			 ;AN000;
 043C  1E                    2		PUSH    DS 
 043D  56                    2		PUSH    SI 
 043E  06                    2		PUSH    ES 
 043F  57                    2		PUSH    DI 
 0440  50                    2		PUSH    AX 
 0441  51                    2		PUSH    CX 
 0442  53                    2		PUSH    BX 
															 ;AN000;
					SaveReg    <CS> 			; store canonicalized version of	 ;AN000;
 0443  0E                    2		PUSH    CS 
					RestoreReg <ES> 			; source asciiz dev name in		 ;AN000;
 0444  07                    2		POP     ES 
 0445  BF 000A E			MOV	DI,OFFSET TEMPBUF+10		; tempbuf+10				 ;AN000;
 0448  B9 000A				MOV	CX,10				; devs max of 8 ch and : and nul	 ;AN000;
 044B				DM_20:											 ;AN000;
 044B  AC				LODSB										 ;AN000;
					CallInstall UCase,multDOS,19,<AX>,<BX>						 ;AN000;
 044C  50                    3		PUSH    AX 
 044D  B8 1213               1		MOV     AX,(multDOS SHL 8) + 19 
 0450  CD 2F                 1		INT     2Fh 
 0452  5B                    3		POP     BX 
 0453  AA				STOSB										 ;AN000;
 0454  0A C0				OR	AL,AL									 ;AN000;
 0456  74 0C				JZ	DM_60									 ;AN000;
 0458  3C 2E				CMP	AL,"."                                                                   ;AN000;
 045A  74 02				JZ	DM_40									 ;AN000;
 045C  E2 ED				LOOP	DM_20									 ;AN000;
 045E				DM_40:											 ;AN000;
 045E  32 C0				XOR	AL,AL									 ;AN000;
 0460  26: 88 45 FF			MOV	BYTE PTR ES:[DI-1],AL							 ;AN000;
 0464				DM_60:											 ;AN000;
 0464  26: 80 7D FE 3A			CMP	BYTE PTR ES:[DI-2],":"                                                   ;AN000;
 0469  75 05				JNZ	DM_80									 ;AN000;
 046B  26: C6 45 FE 00			MOV	BYTE PTR ES:[DI-2],0							 ;AN000;
															 ;AN000;
 0470				DM_80:											 ;AN000;
 0470  33 C0				XOR	AX,AX				; ax is counter through DFL entries	 ;AN000;
 0472  2E: C5 36 0000 E			LDS	SI,[DFLAddr]			; dssi -> dfl entry			 ;AN000;
 0477				DM_100: 					; <<<<< matching loop >>>>>		 ;AN000;
 0477  2E: 3A 06 0000 E			CMP	AL,CS:[DFLCount]							 ;AN000;
 047C  73 26				JAE	DM_980									 ;AN000;
 047E  F6 04 40				TEST	DS:[SI.DFLL_FLAGS],DFL_INUSE						 ;AN000;
 0481  74 1A				JZ	DM_160									 ;AN000;
					SaveReg <SI>				; dfl entry offset			 ;AN000;
 0483  56                    2		PUSH    SI 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-26
DFL_MATCH -- check for DFL entry                            

 0484  83 C6 02				ADD	SI,DFL_DEV_NAME 							 ;AN000;
 0487  BF 0000 E			MOV	DI,OFFSET TEMPBUF							 ;AN000;
 048A  E8 0986 R			CALL	CONVERT_NAME_ASCIIZ		; moves dev name into tempbuf		 ;AN000;
										; in asciiz form - di preserved 	 ;AN000;
 048D  BE 000A E			MOV	SI,OFFSET TEMPBUF+10							 ;AN000;
 0490  E8 0882 R			Call	PRN_CHECK			; if si->prn - chg si->lpt1		 ;AN012;
					CallInstall StrCmp,multDOS,30,<AX>,<AX> ; check for match			 ;AN000;
 0493  50                    3		PUSH    AX 
 0494  B8 121E               1		MOV     AX,(multDOS SHL 8) + 30 
 0497  CD 2F                 1		INT     2Fh 
 0499  58                    3		POP     AX 
					RestoreReg <SI> 			; dfl entry offset			 ;AN000;
 049A  5E                    2		POP     SI 
 049B  74 19				JZ	DM_990									 ;AN000;
 049D				DM_160: 										 ;AN000;
 049D  83 C6 1E				ADD	SI,SIZE DFLL_LIST							 ;AN000;
 04A0  FE C0				INC	AL									 ;AN000;
 04A2  EB D3				JMP	SHORT DM_100			; go up & try next entry		 ;AN000;
															 ;AN000;
 04A4				DM_980: 										 ;AN000;
					SaveReg <AX,CS> 			; set thisdfl null on error		 ;AN020;
 04A4  50                    2		PUSH    AX 
 04A5  0E                    2		PUSH    CS 
					RestoreReg <DS> 								 ;AN020;
 04A6  1F                    2		POP     DS 
 04A7  B8 FFFF				MOV	AX,NULL_PTR								 ;AN020;
 04AA  2E: A3 0000 E			MOV	WORD PTR [THISDFL],AX							 ;AN020;
 04AE  2E: A3 0002 E			MOV	WORD PTR [THISDFL+2],AX 						 ;AN020;
					RestoreReg <AX> 								 ;AN020;
 04B2  58                    2		POP     AX 
 04B3  F9				STC										 ;AN000;
 04B4  EB 10				JMP	SHORT DM_1000								 ;AN000;
 04B6				DM_990: 										 ;AN000;
 04B6  F6 04 20				TEST	DS:[SI.DFLL_FLAGS],dfl_paused	; if printer paused, no match		 ;AN019;
 04B9  75 E9				JNZ	DM_980									 ;AN019;
				
 04BB  2E: 89 36 0000 E			MOV	CS:WORD PTR [THISDFL],SI						 ;AN000;
 04C0  2E: 8C 1E 0002 E			MOV	CS:WORD PTR [THISDFL+2],DS						 ;AN000;
 04C5  F8				CLC					; es:di -> dfl on match 		 ;AN000;
 04C6				DM_1000:										 ;AN000;
					RestoreReg <BX,CX,AX,DI,ES,SI,DS>	; restore regs				 ;AN000;
 04C6  5B                    2		POP     BX 
 04C7  59                    2		POP     CX 
 04C8  58                    2		POP     AX 
 04C9  5F                    2		POP     DI 
 04CA  07                    2		POP     ES 
 04CB  5E                    2		POP     SI 
 04CC  1F                    2		POP     DS 
					return										 ;AN000;
 04CD                        1	??0004: 
 04CD  C3                    1		RET 
															 ;AN000;
				EndProc DFL_MATCH									 ;AN000;
 04CE                        1	DFL_MATCH    ENDP 
															 ;AN000;
				BREAK <SFT_TO_SFF -- Convert SFT to SFF>						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-27
SFT_TO_SFF -- Convert SFT to SFF                            

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; SFT_TO_SFF										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISSFT] set									 ;AN000;
				;	DS - DOSGROUP									 ;AN000;
				; Function:										 ;AN000;
				;	Load SFF from SFT								 ;AN000;
				;											 ;AN000;
				;	  SFF_TYPE	=  0								 ;AN000;
				;	  SFF_TYPE+1	=  0								 ;AN000;
				;	  SFF_FLAGS	=  SF_FLAGS							 ;AN000;
				;	  SFF_MODE	=  SF_MODE							 ;AN000;
				;	  SFF_RESV1	=  0								 ;AN000;
				;	  SFF_ATTR	=  SF_ATTR							 ;AN000;
				;	  SFF_UID	=  SF_UID							 ;AN000;
				;	  SFF_PID	=  SF_PID							 ;AN000;
				;	  SFF_SIZE	=  SF_SIZE							 ;AN000;
				;	  SFF_POSITION	=  SF_POSITION							 ;AN000;
				;	  SFF_TIME	=  SF_TIME							 ;AN000;
				;	  SFF_DATE	=  SF_DATE							 ;AN000;
				;	  SFF_NAME	=  SF_NAME							 ;AN000;
				;	  SFF_EXT	=  SF_NAME+8							 ;AN000;
				;	  SFF_RESV2	=  0								 ;AN000;
				;	  SFF_SF_ID	=  math on sft address
				;	  SFF_FSDA	=  SF_CLUSPOS							 ;AN000;
				;	  SFF_FSDA + 2	=  SF_DIRSEC							 ;AN000;
				;	  SFF_FSDA + 4	=  SF_DIRSEC+2							 ;AN000;
				;	  SFF_FSDA + 6	=  SF_LSTCLUS							 ;AN000;
				; Outputs:										 ;AN000;
				;	SF loaded									 ;AN000;
				;	ES:BX -> IFSRH									 ;AN000;
				;	IFSR_OPEN_CB@ set								 ;AN000;
				;	If SetDeviceCB set then IFSR_DEVICE_CB@ set					 ;AN000;
				;	DS - IFSSEG									 ;AN000;
				;											 ;AN000;
				; notes: all except ES,BX,DS preserved							 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure SFT_TO_SFF,NEAR							 ;AN000;
 04CE                        1	SFT_TO_SFF    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <DI,SI,AX,CX>			; save regs				 ;AN000;
 04CE  57                    2		PUSH    DI 
 04CF  56                    2		PUSH    SI 
 04D0  50                    2		PUSH    AX 
 04D1  51                    2		PUSH    CX 
															 ;AN000;
					SaveReg <CS>									 ;AN000;
 04D2  0E                    2		PUSH    CS 
					RestoreReg <ES> 								 ;AN000;
 04D3  07                    2		POP     ES 
				ASSUME	ES:IFSSEG									 ;AN000;
 04D4  BF 0000 E			MOV	DI,OFFSET SFF1			; DS:SI -> SFT				 ;AN000;
 04D7  36: C5 36 0000 E			LDS	SI,[THISSFT]			; ES:DI -> SFF				 ;AN000;
															 ;AN000;
					SaveReg <DI>				; save SFF offset			 ;AN000;
 04DC  57                    2		PUSH    DI 
 04DD  B4 00				MOV	AH,CBTYPE_SFF			; sff_type				 ;AN000;
 04DF  32 C0				XOR	AL,AL									 ;AN000;
 04E1  AB				STOSW										 ;AN000;
															 ;AN000;
 04E2  8B 44 05				MOV	AX,WORD PTR [SI.SF_FLAGS]	; sff_flags				 ;AN000;
 04E5  AB				STOSW										 ;AN015;
 04E6  8B 44 02				MOV	AX,WORD PTR [SI.SF_MODE]	; sff_mode				 ;AN000;
				;;;;;;;;PUSH	BX									 ;AD015;
				;;;;;;;;AND	BX,8000H								 ;AD015;
				;;;;;;;;OR	AX,BX									 ;AD015;
 04E9  AB				STOSW										 ;AN000;
				;;;;;;;;POP	AX									 ;AD015;
				;;;;;;;;AND	AX,0EFFFH								 ;AD015;
				;;;;;;;;STOSW										 ;AD015;
				;;;;;;;;MOV	AX,WORD PTR [SI.SF_IOMODE]	; sff_iomode				 ;AD024;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-28
SFT_TO_SFF -- Convert SFT to SFF                            

 04EA  33 C0				XOR	AX,AX				; just put zero in reserved area	 ;AN024;
 04EC  AB				STOSW										 ;AN000;
 04ED  8A 44 04				MOV	AL,BYTE PTR [SI.SF_ATTR]	; sff_attr				 ;AN000;
				;;;;;;;;MOV	AH,BYTE PTR [SI.SF_ATTR_HI]	; sff_attr_hi  - no longer exists	 ;AD024;
 04F0  AB				STOSW										 ;AN000;
 04F1  8B 44 2F				MOV	AX,WORD PTR [SI.SF_UID] 	; sff_uid				 ;AN000;
 04F4  AB				STOSW										 ;AN000;
 04F5  8B 44 31				MOV	AX,WORD PTR [SI.SF_PID] 	; sff_pid				 ;AN000;
 04F8  AB				STOSW										 ;AN000;
					SaveReg <SI>									 ;AN000;
 04F9  56                    2		PUSH    SI 
 04FA  83 C6 11				ADD	SI,SF_SIZE								 ;AN000;
 04FD  B9 0004				MOV	CX,4									 ;AN000;
 0500  F3/ A5				REP	MOVSW				; sff_size & position			 ;AN000;
					RestoreReg <SI> 								 ;AN000;
 0502  5E                    2		POP     SI 
 0503  8B 44 0D				MOV	AX,WORD PTR [SI.SF_TIME]	; sff_time				 ;AN000;
 0506  AB				STOSW										 ;AN000;
 0507  8B 44 0F				MOV	AX,WORD PTR [SI.SF_DATE]	; sff_date				 ;AN000;
 050A  AB				STOSW										 ;AN000;
															 ;AN000;
					SaveReg <SI>				; sff_name/ext/cp			 ;AN000;
 050B  56                    2		PUSH    SI 
 050C  83 C6 20				ADD	SI,SF_NAME								 ;AN000;
 050F  B9 000B				MOV	CX,11				;   (name - 11, cp - 2 bytes) cp out	 ;AC024;
 0512  F3/ A4				REP	MOVSB									 ;AN000;
 0514  33 C0				XOR	AX,AX									 ;AN024;
 0516  AB				STOSW					; just put zero in reserved area	 ;AN024;
				
					RestoreReg <SI> 			; sff_sf_id				 ;AN000;
 0517  5E                    2		POP     SI 
					SaveReg <SI,DS,DS>			;     calculate based on sft address	 ;AN016
 0518  56                    2		PUSH    SI 
 0519  1E                    2		PUSH    DS 
 051A  1E                    2		PUSH    DS 
					RestoreReg <AX> 								 ;AN016;
 051B  58                    2		POP     AX 
 051C  B1 04				MOV	CL,4									 ;AN016;
 051E  D3 E0				SHL	AX,CL									 ;AN016;
 0520  03 F0				ADD	SI,AX									 ;AN016;
					RestoreReg <AX> 								 ;AN016;
 0522  58                    2		POP     AX 
 0523  25 F000				AND	AX,0F000H								 ;AN016;
 0526  03 C6				ADD	AX,SI									 ;AN016;
 0528  AB				STOSW										 ;AN016;
					RestoreReg <SI> 								 ;AN016;
 0529  5E                    2		POP     SI 
															 ;AN000;
 052A  83 C7 0C				ADD	DI,SIZE SFF_RESV		; sff_fsda  1st word			 ;AN000;
					SaveReg <SI>				; save si for issft case		 ;AN015;
 052D  56                    2		PUSH    SI 
 052E  83 C6 19				ADD	SI,SF_CLUSPOS								 ;AN000;
 0531  B9 0003				MOV	CX,3									 ;AC017;
 0534  F3/ A5				REP	MOVSW									 ;AN000;
				;;;;;;;;ADD	SI,12									 ;AN017;;AD0
				24;
				;;;;;;;;MOVSW										 ;AN017;;AD0
				24;
					RestoreReg <SI> 								 ;AN015;
 0536  5E                    2		POP     SI 
 0537  8B 44 35				MOV	AX,WORD PTR [SI.SF_LSTCLUS]	; manually put lstclus in fsda+6	 ;AN024;
 053A  AB				STOSW										 ;AN024;
															 ;AN000;
 053B  2E: F7 06 0000 E 0040		TEST	CS:[IFSPROC_FLAGS],ISSFT						 ;AN000;
 0542  74 0E				JZ	SFT_20									 ;AN000;
 0544  8B 44 37				MOV	AX,WORD PTR [SI.SF_IFS_HDR]	; Set [THISIFS] only if 		 ;AN000;
 0547  2E: A3 0000 E			MOV	WORD PTR CS:[THISIFS],AX	;   no yet set by cds_to_cd or		 ;AN000;
 054B  8B 44 39				MOV	AX,WORD PTR [SI.SF_IFS_HDR+2]	;   dfl_to_df				 ;AN000;
 054E  2E: A3 0002 E			MOV	WORD PTR CS:[THISIFS+2],AX						 ;AN000;
															 ;AN000;
 0552				SFT_20: 										 ;AN000;
					RestoreReg <DI> 			; restore ES:DI -> start of SFF 	 ;AN000;
 0552  5F                    2		POP     DI 
					SaveReg    <ES> 			; set DS:DI -> SFF			 ;AN000;
 0553  06                    2		PUSH    ES 
					RestoreReg <DS> 								 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-29
SFT_TO_SFF -- Convert SFT to SFF                            

 0554  1F                    2		POP     DS 
				ASSUME	DS:IFSSEG									 ;AN000;
															 ;AN000;
 0555  BB 0000 E			MOV	BX,OFFSET IFSR			 ; set ES:BX -> IFSRH			 ;AN000;
															 ;AN000;
 0558  2E: F7 06 0000 E 0001		TEST	CS:IFSPROC_FLAGS,ISCTLFCN						 ;AN000;
 055F  75 0B				JNZ	SFT_40					; API fcn -			 ;AN000;
 0561  26: 89 7F 22			MOV	WORD PTR ES:[BX.IFSR_OPEN_CB@],DI	; set IFSR_OPEN_CB@		 ;AN000;
 0565  26: 8C 5F 24			MOV	WORD PTR ES:[BX.IFSR_OPEN_CB@+2],DS					 ;AN000;
 0569  EB 09 90				JMP	SFT_60									 ;AN000;
 056C				SFT_40: 					; Ctl fcn -				 ;AN000;
 056C  26: 89 7F 16			MOV	WORD PTR ES:[BX.IFSR_CB@],DI	; set IFSR_CB@				 ;AN000;
 0570  26: 8C 5F 18			MOV	WORD PTR ES:[BX.IFSR_CB@+2],DS						 ;AN000;
															 ;AN000;
 0574				SFT_60: 										 ;AN000;
 0574  F7 06 0000 E 0100		TEST	IFSPROC_FLAGS,SetDeviceCB	; check whether to set			 ;AN000;
 057A  74 38				JZ	SFT_1000			; device cb or not			 ;AN000;
 057C  36: C5 36 0000 E			LDS	SI,[THISSFT]								 ;AN000;
 0581  83 7C 07 FF			CMP	WORD PTR DS:[SI.SF_DEVPTR],NULL_PTR  ; null if seq			 ;AN000;
 0585  74 2D				JE	SFT_1000								 ;AN000;
 0587  F7 44 05 0080			TEST	DS:[SI.SF_FLAGS],DEVID_DEVICE	; cds or dfl?				 ;AM007;
 058C  C5 74 07				LDS	SI,DS:[SI.SF_DEVPTR]		; get device ptr (cds/dfl)		 ;AM007;
 058F  75 16				JNZ	SFT_100 			; jmp if dfl				 ;AN000;
 0591  2E: 89 36 0000 E			MOV	WORD PTR CS:SAVE_CB@,SI 	; CDS					 ;AN000;
 0596  2E: 8C 1E 0002 E			MOV	WORD PTR CS:SAVE_CB@+2,DS						 ;AN000;
 059B  F7 44 43 8000			TEST	DS:[SI.CURDIR_FLAGS],CURDIR_ISIFS					 ;AN000;
 05A0  74 12				JZ	SFT_1000								 ;AN000;
 05A2  E8 066E R			CALL	CDS_TO_CD								 ;AN000;
 05A5  EB 0D				JMP	SHORT SFT_1000								 ;AN000;
															 ;AN000;
 05A7				SFT_100:										 ;AN000;
 05A7  2E: 89 36 0000 E			MOV	WORD PTR CS:[THISDFL],SI	; DFL					 ;AN000;
 05AC  2E: 8C 1E 0002 E			MOV	WORD PTR CS:[THISDFL+2],DS	; set this cause dfl-df 		 ;AN000;
 05B1  E8 070C R			CALL	DFL_TO_DF			; expects it				 ;AN000;
															 ;AN000;
															 ;AN000;
 05B4				SFT_1000:										 ;AN000;
					RestoreReg <CX,AX,SI,DI>		; restore regs				 ;AN000;
 05B4  59                    2		POP     CX 
 05B5  58                    2		POP     AX 
 05B6  5E                    2		POP     SI 
 05B7  5F                    2		POP     DI 
					SaveReg <CS>									 ;AN000;
 05B8  0E                    2		PUSH    CS 
					RestoreReg <DS> 			; set ds -ifsseg			 ;AN000;
 05B9  1F                    2		POP     DS 
															 ;AN000;
					return										 ;AN000;
 05BA                        1	??0005: 
 05BA  C3                    1		RET 
															 ;AN000;
				EndProc SFT_TO_SFF									 ;AN000;
 05BB                        1	SFT_TO_SFF    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <SFF_TO_SFT -- Convert SFF to SFT>						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-30
SFF_TO_SFT -- Convert SFF to SFT                            

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; SFF_TO_SFT										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISSFT] set									 ;AN000;
				; Function:										 ;AN000;
				;	Update SFT with SFF								 ;AN000;
				;	SF_FLAGS     =	SFF_FLAGS							 ;AN000;
				;	SF_MODE      =	SFF_MODE							 ;AN000;
				;	SF_ATTR      =	SFF_ATTR							 ;AN000;
				;	SF_UID	     =	SFF_UID 							 ;AN000;
				;	SF_PID	     =	SFF_PID 							 ;AN000;
				;	SF_SIZE      =	SFF_SIZE							 ;AN000;
				;	SF_POSITION  =	SFF_POSITION							 ;AN000;
				;	SF_TIME      =	SFF_TIME							 ;AN000;
				;	SF_DATE      =	SFF_DATE							 ;AN000;
				;	SF_NAME      =	SFF_NAME							 ;AN000;
				;	SF_NAME+8    =	SFF_EXT 							 ;AN000;
				;	SF_CLUSPOS   =	SFF_FSDA							 ;AN000;
				;	SF_DIRSEC    =	SFF_FSDA + 2							 ;AN000;
				;	SF_DIRSEC+2  =	SFF_FSDA + 4							 ;AN000;
				;	SF_LSTCLUS   =	SFF_FSDA + 6							 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	SFT loaded									 ;AN000;
				; notes: all regs preserved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure SFF_TO_SFT,NEAR							 ;AN000;
 05BB                        1	SFF_TO_SFT    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <ES,DI,DS,SI,AX,CX>		; save regs				 ;AC003;
 05BB  06                    2		PUSH    ES 
 05BC  57                    2		PUSH    DI 
 05BD  1E                    2		PUSH    DS 
 05BE  56                    2		PUSH    SI 
 05BF  50                    2		PUSH    AX 
 05C0  51                    2		PUSH    CX 
															 ;AN000;
 05C1  16				PUSH	SS									 ;AN000;
 05C2  1F				POP	DS									 ;AN000;
				ASSUME	DS:DOSGROUP									 ;AN000;
 05C3  C4 3E 0000 E			LES	DI,[THISSFT]			; DS:SI -> SFF				 ;AN000;
 05C7  0E				PUSH	CS									 ;AN000;
 05C8  1F				POP	DS									 ;AN000;
				ASSUME	DS:IFSSEG									 ;AN000;
 05C9  BE 0000 E			MOV	SI,OFFSET SFF1			; ES:DI -> SFT				 ;AN000;
 05CC  46				INC	SI									 ;AN000;
 05CD  46				INC	SI									 ;AN000;
															 ;AN000;
 05CE  AD				LODSW					; sff_flags				 ;AN000;
				;;;;;;;;AND	AX,0EFFFH			; (hi bit sft_flags - also mode       )  ;AD015;
 05CF  26: 89 45 05			MOV	WORD PTR ES:[DI.SF_FLAGS],AX	; sft_flags				 ;AC015;
 05D3  AD				LODSW										 ;AN000;
				;;;;;;;;AND	AX,0EFFFH								 ;AD015;
 05D4  26: 89 45 02			MOV	WORD PTR ES:[DI.SF_MODE],AX	; sft_mode				 ;AC015;
 05D8  AD				LODSW										 ;AN000;
				;;;;;;;;MOV	WORD PTR ES:[DI.SF_IOMODE],AX	; sft_iomode	...no longer exists	 ;AD024;
 05D9  AD				LODSW										 ;AN000;
 05DA  26: 88 45 04			MOV	BYTE PTR ES:[DI.SF_ATTR],AL	; sft_attr				 ;AN000;
				;;;;;;;;MOV	BYTE PTR ES:[DI.SF_ATTR_HI],AH	;    no longer exists			 ;AD024;
 05DE  AD				LODSW										 ;AN000;
 05DF  26: 89 45 2F			MOV	WORD PTR ES:[DI.SF_UID],AX	; sft_uid				 ;AN000;
 05E3  AD				LODSW										 ;AN000;
 05E4  26: 89 45 31			MOV	WORD PTR ES:[DI.SF_PID],AX	; sft_pid				 ;AN000;
					SaveReg <DI>									 ;AN000;
 05E8  57                    2		PUSH    DI 
 05E9  83 C7 11				ADD	DI,SF_SIZE								 ;AN000;
 05EC  B9 0004				MOV	CX,4									 ;AN000;
 05EF  F3/ A5				REP	MOVSW				; sft_size & position			 ;AN000;
					RestoreReg <DI> 								 ;AN000;
 05F1  5F                    2		POP     DI 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-31
SFF_TO_SFT -- Convert SFF to SFT                            

 05F2  AD				LODSW										 ;AN000;
 05F3  26: 89 45 0D			MOV	WORD PTR ES:[DI.SF_TIME],AX	; sft_time				 ;AN000;
 05F7  AD				LODSW										 ;AN000;
 05F8  26: 89 45 0F			MOV	WORD PTR ES:[DI.SF_DATE],AX	; sft_date				 ;AN000;
															 ;AN000;
															 ;AN000;
 05FC  57				PUSH	DI				; sft_name/ext/cp			 ;AN000;
 05FD  83 C7 20				ADD	DI,SF_NAME								 ;AN000;
 0600  B9 000B				MOV	CX,11				;   (name - 11, cp - 2 bytes)		 ;AN000;
 0603  F3/ A4				REP	MOVSB									 ;AN000;
															 ;AN000;
 0605  83 C6 0C				ADD	SI,SIZE SFF_RESV		; sft_fsda  1st word			 ;AN000;
 0608  83 C6 04				ADD	SI,4				; for sff_sf_id 			 ;AN016;;AC0
				24;
 060B  5F				POP	DI									 ;AN000;
															 ;AN000;
					SaveReg <DI>									 ;AN003;
 060C  57                    2		PUSH    DI 
 060D  83 C7 19				ADD	DI,SF_CLUSPOS								 ;AN000;
 0610  B9 0003				MOV	CX,3									 ;AC017;
 0613  F3/ A5				REP	MOVSW									 ;AN000;
				;;;;;;;;ADD	DI,12									 ;AN017;;AD0
				24;
				;;;;;;;;MOVSW										 ;AN017;;AD0
				24;
 0615  AD				LODSW										 ;AN024;
					RestoreReg <DI> 								 ;AN003;;AM0
				24;
 0616  5F                    2		POP     DI 
 0617  26: 89 45 35			MOV	WORD PTR ES:[DI.SF_LSTCLUS],AX						 ;AN024;
															 ;AN000;
 061B  F7 06 0000 E 0100		TEST	IFSPROC_FLAGS,SetDeviceCB	; check whether to update		 ;AN000;
 0621  74 44				JZ	SFF_1000			; device cb or not			 ;AN000;
 0623  F7 06 0000 E 0020		TEST	IFSPROC_FLAGS,IsSeq							 ;AN000;
 0629  75 3C				JNZ	SFF_1000								 ;AN000;
															 ;AN000;
 062B  26: F7 45 05 0080		TEST	ES:[DI.SF_FLAGS],DEVID_DEVICE	; cds or dfl?				 ;AM007;
 0631  9C				PUSHF					;  save results of this test for later	 ;AN007;
 0632  26: C4 7D 07			LES	DI,ES:[DI.SF_DEVPTR]		; get device ptr (cds/dfl)		 ;AN000;
 0636  83 FF FF				CMP	DI,NULL_PTR								 ;AN000;
 0639  75 04				JNE	SFF_20									 ;AN000;
 063B  9D				POPF										 ;AN000;
 063C  EB 29 90				JMP	SFF_1000								 ;AN000;
				
 063F				SFF_20: 										 ;AN000;
 063F  9D				POPF					; retrieve cd/df test results		 ;AN000;
 0640  75 18				JNZ	SFF_100 			; jmp if dfl				 ;AN000;
 0642  2E: 8B 3E 0000 E			MOV	DI,WORD PTR CS:SAVE_CB@ 	; CDS					 ;AN000;
 0647  2E: FF 36 0002 E			PUSH	WORD PTR CS:SAVE_CB@+2							 ;AN000;
 064C  07				POP	ES									 ;AN000;
 064D  26: F7 45 43 8000		TEST	ES:[DI.CURDIR_FLAGS],CURDIR_ISIFS
 0653  74 12				JZ	SFF_1000
 0655  E8 06D7 R			CALL	CD_TO_CDS								 ;AN000;
 0658  EB 0D				JMP	SHORT SFF_1000								 ;AN000;
															 ;AN000;
 065A				SFF_100:										 ;AN000;
 065A  2E: 89 3E 0000 E			MOV	WORD PTR CS:[THISDFL],DI	; DFL					 ;AN000;
 065F  2E: 8C 06 0002 E			MOV	WORD PTR CS:[THISDFL+2],ES	; set this cause DF_TO_DFL		 ;AN000;
 0664  E8 0774 R			CALL	DF_TO_DFL			; expects it				 ;AN000;
															 ;AN000;
 0667				SFF_1000:										 ;AN000;
					RestoreReg <CX,AX,SI,DS,DI,ES>		; restore regs				 ;AC003;
 0667  59                    2		POP     CX 
 0668  58                    2		POP     AX 
 0669  5E                    2		POP     SI 
 066A  1F                    2		POP     DS 
 066B  5F                    2		POP     DI 
 066C  07                    2		POP     ES 
															 ;AN000;
					return										 ;AN000;
 066D                        1	??0006: 
 066D  C3                    1		RET 
															 ;AN000;
				EndProc SFF_TO_SFT									 ;AN000;
 066E                        1	SFF_TO_SFT    ENDP 
															 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-32
SFF_TO_SFT -- Convert SFF to SFT                            

				BREAK <CDS_TO_CD -- Convert CDS to CD>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-33
CDS_TO_CD -- Convert CDS to CD                              

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CDS_TO_CD										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	DS:SI -> CDS									 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Load CD from CDS								 ;AN000;
				;	  CD_TYPE   = 1 								 ;AN000;
				;	  CD_TYPE+1 = 0 								 ;AN000;
				;	  CD_END    = CURDIR_END							 ;AN000;
				;	  CD_TEXT   = CURDIR_TEXT							 ;AN000;
				;	  CD_FSDA   = CURDIR_ID 							 ;AN000;
				;	  CD_FSDA+2 = CURDIR_ID+2							 ;AN000;
				;	  CD_FSDA+4 = CURDIR_USER_WORD							 ;AN000;
				;	  CD_FSDA+6 = CURDIR_FSDA							 ;AN000;
				; Outputs:										 ;AN000;
				;	CD loaded									 ;AN000;
				;	ES:BX -> IFSRH									 ;AN000;
				;	IFSR_DEVICE_CB@ -> CD								 ;AN000;
				;	[THISIFS] = CURDIR_IFS_HDR							 ;AN000;
				;	DS - IFSSEG									 ;AN000;
				;											 ;AN000;
				; Regs: all except DS,ES,BX saved							 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CDS_TO_CD,NEAR							 ;AN000;
 066E                        1	CDS_TO_CD    PROC    NEAR 
															 ;AN000;
					SaveReg <DI,SI,AX,CX>			; save regs				 ;AN000;
 066E  57                    2		PUSH    DI 
 066F  56                    2		PUSH    SI 
 0670  50                    2		PUSH    AX 
 0671  51                    2		PUSH    CX 
															 ;AN000;
 0672  0E				PUSH	CS									 ;AN000;
 0673  07				POP	ES				; DS:SI -> CDS				 ;AN000;
				ASSUME	ES:IFSSEG				; ES:DI -> CD				 ;AN000;
 0674  BF 0000 E			MOV	DI,OFFSET CS:CD1							 ;AN000;
															 ;AN000;
 0677  57				PUSH	DI				; save cd offset			 ;AN000;
 0678  B0 01				MOV	AL,CBTYPE_CD			; cd_type				 ;AN000;
 067A  2E: F7 06 0000 E 0200		TEST	CS:IFSPROC_FLAGS,ISDUMMYCDS	;    check for dummy cd 		 ;AN000;
 0681  74 02				JZ	CCD_10									 ;AN000;
 0683  B0 03				MOV	AL,CBTYPE_DUMMYCD							 ;AN000;
 0685				CCD_10: 										 ;AN000;
 0685  32 E4				XOR	AH,AH									 ;AN000;
 0687  AB				STOSW					; move di down thru cd during store	 ;AN000;
															 ;AN000;
 0688  8B 44 4F				MOV	AX,WORD PTR [SI.CURDIR_END]	; cd_end				 ;AN000;
 068B  AB				STOSW										 ;AN000;
															 ;AN000;
 068C  56				PUSH	SI				; cd_text				 ;AN000;
 068D  B9 0043				MOV	CX,DIRSTRLEN								 ;AN000;
 0690  F3/ A4				REP	MOVSB									 ;AN000;
 0692  5E				POP	SI									 ;AN000;
															 ;AN000;
 0693  8B 44 49				MOV	AX,WORD PTR [SI.CURDIR_ID]	; cd_fsda				 ;AN000;
 0696  83 C7 05				ADD	DI,SIZE CD_RESV 							 ;AN000;
 0699  AB				STOSW										 ;AN000;
 069A  8B 44 4B				MOV	AX,WORD PTR [SI.CURDIR_ID+2]						 ;AN000;
 069D  AB				STOSW										 ;AN000;
 069E  8B 44 4D				MOV	AX,WORD PTR [SI.CURDIR_USER_WORD]					 ;AN000;
 06A1  AB				STOSW										 ;AN000;
 06A2  8B 44 56				MOV	AX,WORD PTR [SI.CURDIR_FSDA]						 ;AN000;
 06A5  AB				STOSW										 ;AN000;
															 ;AN000;
 06A6  2E: F7 06 0000 E 0002		TEST	CS:IFSPROC_FLAGS,THISIFS_SET						 ;AN000;
 06AD  75 0E				JNZ	CCD_20									 ;AN000;
 06AF  8B 44 52				MOV	AX,WORD PTR [SI.CURDIR_IFS_HDR] ; Set [THISIFS] 			 ;AN000;
 06B2  2E: A3 0000 E			MOV	WORD PTR CS:[THISIFS],AX						 ;AN000;
 06B6  8B 44 54				MOV	AX,WORD PTR [SI.CURDIR_IFS_HDR+2]					 ;AN000;
 06B9  2E: A3 0002 E			MOV	WORD PTR CS:[THISIFS+2],AX						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-34
CDS_TO_CD -- Convert CDS to CD                              

 06BD				CCD_20: 										 ;AN000;
 06BD  5F				POP	DI				; restore CD offset			 ;AN000;
 06BE  0E				PUSH	CS				; get DS -> IFSSEG			 ;AN000;
 06BF  1F				POP	DS									 ;AN000;
				ASSUME	DS:IFSSEG									 ;AN000;
															 ;AN000;
 06C0  BB 0000 E			MOV	BX,OFFSET IFSR			; ES:BX -> IFSRH			 ;AN000;
					SaveReg <BX>									 ;AN000;
 06C3  53                    2		PUSH    BX 
 06C4  03 1E 0000 E			ADD	BX,DEVICE_CB@_OFFSET							 ;AN000;
 06C8  26: 89 3F			MOV	WORD PTR ES:[BX],DI		; set IFSR_DEVICE_CB@			 ;AN000;
 06CB  83 C3 02				ADD	BX,2									 ;AN000;
 06CE  26: 8C 07			MOV	WORD PTR ES:[BX],ES							 ;AN000;
					RestoreReg <BX> 								 ;AN000;
 06D1  5B                    2		POP     BX 
															 ;AN000;
					RestoreReg <CX,AX,SI,DI>		; restore regs				 ;AN000;
 06D2  59                    2		POP     CX 
 06D3  58                    2		POP     AX 
 06D4  5E                    2		POP     SI 
 06D5  5F                    2		POP     DI 
															 ;AN000;
					return										 ;AN000;
 06D6                        1	??0007: 
 06D6  C3                    1		RET 
															 ;AN000;
				EndProc CDS_TO_CD									 ;AN000;
 06D7                        1	CDS_TO_CD    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <CD_TO_CDS -- Convert CD to CDS>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-35
CD_TO_CDS -- Convert CD to CDS                              

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CD_TO_CDS										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	ES:DI -> CDS									 ;AN000;
				;	DS    -> IFSSEG 								 ;AN000;
				; Function:										 ;AN000;
				;	Update CDS with CD								 ;AN000;
				;	  CURDIR_TEXT	   =	CD_TEXT 						 ;AN000;
				;	  CURDIR_ID	   =	CD_FSDA 						 ;AN000;
				;	  CURDIR_ID+2	   =	CD_FSDA+2						 ;AN000;
				;	  CURDIR_USER_WORD =	CD_FSDA+4						 ;AN000;
				;	  CURDIR_END	   =	CD_END							 ;AN000;
				;	  CURDIR_FSDA	   =	CD_FSDA+6						 ;AN000;
				; Outputs:										 ;AN000;
				;	CDS updated									 ;AN000;
				;											 ;AN000;
				; notes: all regs preserved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CD_TO_CDS,NEAR							 ;AN000;
 06D7                        1	CD_TO_CDS    PROC    NEAR 
				ASSUME	DS:IFSSEG,ES:IFSSEG								 ;AN000;
															 ;AN000;
					SaveReg <ES,DI,DS,SI,AX,CX>		; save regs				 ;AC005;
 06D7  06                    2		PUSH    ES 
 06D8  57                    2		PUSH    DI 
 06D9  1E                    2		PUSH    DS 
 06DA  56                    2		PUSH    SI 
 06DB  50                    2		PUSH    AX 
 06DC  51                    2		PUSH    CX 
															 ;AN000;
 06DD  BE 0000 E			MOV	SI,OFFSET CD1			; ES:DI -> CDS				 ;AN000;
										; DS:SI -> CD				 ;AN000;
 06E0  46				INC	SI									 ;AN000;
 06E1  46				INC	SI									 ;AN000;
															 ;AN000;
 06E2  AD				LODSW					; curdir_end				 ;AN000;
 06E3  26: 89 45 4F			MOV	ES:[DI.CURDIR_END],AX							 ;AN000;
															 ;AN000;
 06E7  57				PUSH	DI									 ;AN000;
 06E8  B9 0043				MOV	CX,DIRSTRLEN								 ;AN000;
 06EB  F3/ A4				REP	MOVSB									 ;AN000;
 06ED  5F				POP	DI									 ;AN000;
															 ;AN000;
 06EE  83 C6 05				ADD	SI,SIZE CD_RESV 		; curdir_id				 ;AN000;
 06F1  AD				LODSW										 ;AN000;
 06F2  26: 89 45 49			MOV	WORD PTR ES:[DI.CURDIR_ID],AX						 ;AN000;
 06F6  AD				LODSW										 ;AN000;
 06F7  26: 89 45 4B			MOV	WORD PTR ES:[DI.CURDIR_ID+2],AX 					 ;AN000;
 06FB  AD				LODSW					; curdir_user_word			 ;AN000;
 06FC  26: 89 45 4D			MOV	WORD PTR ES:[DI.CURDIR_USER_WORD],AX					 ;AN000;
 0700  AD				LODSW					; curdir_fsda				 ;AN000;
 0701  26: 89 45 56			MOV	WORD PTR ES:[DI.CURDIR_FSDA],AX 					 ;AN000;
															 ;AN000;
					RestoreReg <CX,AX,SI,DS,DI,ES>		; restore regs				 ;AC005;
 0705  59                    2		POP     CX 
 0706  58                    2		POP     AX 
 0707  5E                    2		POP     SI 
 0708  1F                    2		POP     DS 
 0709  5F                    2		POP     DI 
 070A  07                    2		POP     ES 
															 ;AN000;
					return										 ;AN000;
 070B                        1	??0008: 
 070B  C3                    1		RET 
															 ;AN000;
				EndProc CD_TO_CDS									 ;AN000;
 070C                        1	CD_TO_CDS    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <DFL_TO_DF -- Convert DFL to DF>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-36
DFL_TO_DF -- Convert DFL to DF                              

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DFL_TO_DF										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISDFL]									 ;AN000;
				; Function:										 ;AN000;
				;	Load DF from DFL								 ;AN000;
				;											 ;AN000;
				;	  DF_TYPE     = 2								 ;AN000;
				;	  DF_TYPE + 1 = 0								 ;AN000;
				;	  DF_DEV_NAME = DFL_DEV_NAME							 ;AN000;
				;	  DF_FSDA     = DFL_FSDA							 ;AN000;
				; Outputs:										 ;AN000;
				;	DF loaded									 ;AN000;
				;	ES:BX -> IFSRH									 ;AN000;
				;	IFSR_DEVICE_CB@ -> DF								 ;AN000;
				;	[THISIFS] = DFL_IFS_HDR 							 ;AN000;
				;	DS - IFSSEG									 ;AN000;
				;											 ;AN000;
				; notes: es,bx,ds Revised, others saved						 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure DFL_TO_DF,NEAR							 ;AN000;
 070C                        1	DFL_TO_DF    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <DI,SI,AX>			; save regs				 ;AN000;
 070C  57                    2		PUSH    DI 
 070D  56                    2		PUSH    SI 
 070E  50                    2		PUSH    AX 
															 ;AN000;
 070F  0E				PUSH	CS									 ;AN000;
 0710  07				POP	ES									 ;AN000;
				ASSUME	ES:IFSSEG									 ;AN000;
 0711  BF 0000 E			MOV	DI,OFFSET DF1			; es:di -> df				 ;AN000;
															 ;AN000;
 0714  BB 0000 E			MOV	BX,OFFSET IFSR			; set es:bx - ifsrh			 ;AN000;
 0717  53				PUSH	BX				; fill in device cb@			 ;AN000;
 0718  2E: 03 1E 0000 E			ADD	BX,CS:DEVICE_CB@_OFFSET 						 ;AN000;
 071D  26: 89 3F			MOV	WORD PTR ES:[BX],DI							 ;AN000;
 0720  83 C3 02				ADD	BX,2									 ;AN000;
 0723  26: 8C 07			MOV	WORD PTR ES:[BX],ES							 ;AN000;
 0726  5B				POP	BX									 ;AN000;
															 ;AN000;
 0727  26: C5 36 0000 E			LDS	SI,[THISDFL]			; ds:si -> dfl				 ;AN000;
															 ;AN000;
 072C  B0 02				MOV	AL,CBTYPE_DF			; df_type				 ;AN000;
 072E  32 E4				XOR	AH,AH									 ;AN000;
 0730  AB				STOSW										 ;AN000;
															 ;AN000;
 0731  56				PUSH	SI				; df_dev_name				 ;AN000;
 0732  83 C6 02				ADD	SI,DFL_DEV_NAME 							 ;AN000;
 0735  B9 0008				MOV	CX,8									 ;AN000;
 0738  F3/ A4				REP	MOVSB									 ;AN000;
 073A  5E				POP	SI									 ;AN000;
 073B  56				PUSH	SI									 ;AN000;
 073C  83 C6 0A				ADD	SI,DFL_FSDA			; df_fsda				 ;AN000;
				
 073F  2E: F7 06 0000 E 0100		TEST	CS:IFSPROC_FLAGS,SetDeviceCB	; if this flag set, i24 already taken	 ;AN004;
 0746  75 12				JNZ	DDF_20				; care of, otherwise take care of it	 ;AN004;
					SaveReg <DI,SI> 			; df, dfl dev name offsets		 ;AN004;
 0748  57                    2		PUSH    DI 
 0749  56                    2		PUSH    SI 
 074A  BF 0000 E			MOV	DI,OFFSET CS:[PHONEY_NAME]	; set phoney name and ifsdrv		 ;AN004;
 074D  B9 0004				MOV	CX,4									 ;AN004;
 0750  F3/ A5				REP	MOVSW									 ;AN004;
 0752  2E: C6 06 0000 E FF		MOV	CS:[IFSDRV],-1								 ;AN004;
					RestoreReg <SI,DI>			; dfl dev name, df offsets		 ;AN004;
 0758  5E                    2		POP     SI 
 0759  5F                    2		POP     DI 
				
 075A				DDF_20: 										 ;AN004;
 075A  B9 0008				MOV	CX,SIZE DFL_FSDA 							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-37
DFL_TO_DF -- Convert DFL to DF                              

 075D  F3/ A4				REP	MOVSB									 ;AN000;
 075F  5E				POP	SI									 ;AN000;
															 ;AN000;
 0760  8B 44 0E				MOV	AX,WORD PTR DS:[SI.DFLL_IFS_HDR] ; Set [THISIFS] 			 ;AN000;
 0763  26: A3 0000 E			MOV	WORD PTR [THISIFS],AX							 ;AN000;
 0767  8B 44 10				MOV	AX,WORD PTR DS:[SI.DFLL_IFS_HDR+2]					 ;AN000;
 076A  26: A3 0002 E			MOV	WORD PTR [THISIFS+2],AX 						 ;AN000;
															 ;AN000;
 076E  0E				PUSH	CS				; set ds - ifsseg			 ;AN000;
 076F  1F				POP	DS									 ;AN000;
															 ;AN000;
					RestoreReg <AX,SI,DI>			; restore regs				 ;AN000;
 0770  58                    2		POP     AX 
 0771  5E                    2		POP     SI 
 0772  5F                    2		POP     DI 
															 ;AN000;
					return										 ;AN000;
 0773                        1	??0009: 
 0773  C3                    1		RET 
															 ;AN000;
				EndProc DFL_TO_DF									 ;AN000;
 0774                        1	DFL_TO_DF    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <DF_TO_DFL -- Convert DF to DFL>							 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-38
DF_TO_DFL -- Convert DF to DFL                              

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; DF_TO_DFL										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	[THISDFL] set									 ;AN000;
				; Function:										 ;AN000;
				;	Update DFL with DF								 ;AN000;
				;	  DFL_DEV_NAME = DF_DEV_NAME							 ;AN000;
				;	  DFL_FSDA     = DF_FSDA							 ;AN000;
				; Outputs:										 ;AN000;
				;	DFL updated									 ;AN000;
				;											 ;AN000;
				; notes: all regs preserved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure DF_TO_DFL,NEAR							 ;AN000;
 0774                        1	DF_TO_DFL    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <ES,DI,DS,SI>			; save regs				 ;AN000;
 0774  06                    2		PUSH    ES 
 0775  57                    2		PUSH    DI 
 0776  1E                    2		PUSH    DS 
 0777  56                    2		PUSH    SI 
															 ;AN000;
 0778  2E: C4 3E 0000 E			LES	DI,[THISDFL]			; esdi -> dfl				 ;AN000;
 077D  0E				PUSH	CS									 ;AN000;
 077E  1F				POP	DS									 ;AN000;
				ASSUME	DS:IFSSEG									 ;AN000;
 077F  BE 0000 E			MOV	SI,OFFSET DF1			; dssi -> df				 ;AN000;
															 ;AN000;
 0782  46				INC	SI				; space si,di to dev_name		 ;AN000;
 0783  46				INC	SI									 ;AN000;
 0784  57				PUSH	DI									 ;AN000;
 0785  83 C7 02				ADD	DI,DFL_DEV_NAME 							 ;AN000;
 0788  B9 0008				MOV	CX,8									 ;AN000;
 078B  F3/ A4				REP	MOVSB				; update dfl_dev_name for some reason	 ;AN000;
															 ;AN000;
 078D  5F				POP	DI									 ;AN000;
 078E  83 C7 0A				ADD	DI,DFL_FSDA								 ;AN000;
 0791  B9 0008				MOV	CX,SIZE DFL_FSDA							 ;AN000;
 0794  F3/ A4				REP	MOVSB				; update dfl_fsda			 ;AN000;
															 ;AN000;
					RestoreReg <SI,DS,DI,ES>		; restore regs				 ;AN000;
 0796  5E                    2		POP     SI 
 0797  1F                    2		POP     DS 
 0798  5F                    2		POP     DI 
 0799  07                    2		POP     ES 
															 ;AN000;
					return										 ;AN000;
 079A                        1	??000A: 
 079A  C3                    1		RET 
															 ;AN000;
				EndProc DF_TO_DFL									 ;AN000;
 079B                        1	DF_TO_DFL    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <CONSIST_SFT -- Make SFT caches consistent with state of IFSFUNC> 		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-39
CONSIST_SFT -- Make SFT caches consistent with state of IFSF

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CONSIST_SFT										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	None										 ;AN000;
				;											 ;AN000;
				; Function:										 ;AN000;
				;	Make sure all device SFTs are consistent with current IFSFUNC state		 ;AN000;
				;											 ;AN000;
				; Outputs:										 ;AN000;
				;	None										 ;AN000;
				;											 ;AN000;
				; Regs: DS,ES,SI,DI preserved others destroyed						 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CONSIST_SFT,NEAR							 ;AN000;
 079B                        1	CONSIST_SFT    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
 079B  2E: 80 3E 0000 E 00		CMP	CS:[DFLCount],0 	; if no dfl, forget it				 ;AN022;
 07A1  74 33				JE	CS_20
					SaveReg <DS,SI,ES,DI>								 ;AN000;
 07A3  1E                    2		PUSH    DS 
 07A4  56                    2		PUSH    SI 
 07A5  06                    2		PUSH    ES 
 07A6  57                    2		PUSH    DI 
 07A7  FA				CLI				; This scan of the SFT tables is		 ;AN000;
									;  a critical section we must protect		 ;AN000;
									;  with CLI and STI as CritNET must		 ;AN000;
									;  be disjoint from all other critical		 ;AN000;
									;  sections					 ;AN000;
 07A8  36: C5 36 0000 E			LDS	SI,[SFTFCB]								 ;AN000;
				ASSUME	DS:NOTHING									 ;AN000;
 07AD  8B 4C 04				MOV	CX,[SI].sfCount 							 ;AN000;
 07B0  8D 74 06				LEA	SI,[SI].sfTable 							 ;AN000;
 07B3  E3 03				JCXZ	DONE_LOOK_FCB								 ;AN000;
 07B5  E8 07D7 R			CALL	LOOK_FIX								 ;AN000;
 07B8				DONE_LOOK_FCB:										 ;AN000;
 07B8  36: C5 36 0000 E			LDS	SI,[SFT_Addr]		; get pointer to beginning of table		 ;AN000;
 07BD				ScanLoop:										 ;AN000;
 07BD  8B 4C 04				MOV	CX,[SI].SFCount 							 ;AN000;
 07C0  1E				PUSH	DS									 ;AN000;
 07C1  56				PUSH	SI									 ;AN000;
 07C2  8D 74 06				LEA	SI,[SI].sfTable 							 ;AN000;
 07C5  E8 07D7 R			CALL	LOOK_FIX								 ;AN000;
 07C8  5E				POP	SI									 ;AN000;
 07C9  1F				POP	DS									 ;AN000;
 07CA  C5 34				LDS	SI,[SI].SFLink		; get next table segment			 ;AN000;
 07CC  83 FE FF				CMP	SI,-1			; end of tables?				 ;AN000;
 07CF  75 EC				JNZ	ScanLoop		; no, try again 				 ;AN000;
 07D1  FB				STI										 ;AN000;
					RestoreReg <DI,ES,SI,DS>							 ;AN000;
 07D2  5F                    2		POP     DI 
 07D3  07                    2		POP     ES 
 07D4  5E                    2		POP     SI 
 07D5  1F                    2		POP     DS 
 07D6				CS_20:
					return										 ;AN000;
 07D6                        1	??000B: 
 07D6  C3                    1		RET 
															 ;AN000;
 07D7				LOOK_FIX:										 ;AN000;
 07D7  83 3C 00				CMP	[SI].sf_ref_count,0							 ;AN000;
 07DA  74 72				JZ	NEXT_SFT		; Ignore Free ones				 ;AN000;
 07DC  F7 44 05 0080			TEST	[SI].sf_flags,devid_device						 ;AN000;
 07E1  74 6B				JZ	NEXT_SFT		; Only look at device SFTs			 ;AN000;
 07E3  F7 44 05 8000			TEST	[SI].sf_flags,sf_isnet
				;AN000;
 07E8  51				PUSH	CX			; sft loop count				 ;AN000;
 07E9  1E				PUSH	DS			; sft ptr					 ;AN000;
 07EA  56				PUSH	SI									 ;AN000;
 07EB  9C				PUSHF				; Save result of above TEST			 ;AN000;
 07EC  83 C6 20				ADD	SI,sf_name		; put asciiz form of sf_name in tempbuf 	 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-40
CONSIST_SFT -- Make SFT caches consistent with state of IFSF

 07EF  0E				PUSH	CS			; to call dfl_match with			 ;AN000;
 07F0  07				POP	ES									 ;AN000;
 07F1  BF 0000 E			MOV	DI,OFFSET TEMPBUF							 ;AN000;
 07F4  E8 0986 R			CALL	CONVERT_NAME_ASCIIZ							 ;AN000;
 07F7  0E				PUSH	CS									 ;AN000;
 07F8  1F				POP	DS									 ;AN000;
 07F9  8B F7				MOV	SI,DI									 ;AN000;
 07FB  E8 043C R			CALL	DFL_MATCH		; is this sft attached? cf1-no,cf0-yes		 ;AN000;
 07FE  72 45				JC	NOT_R_DEV								 ;AN000;
 0800  0E				PUSH	CS			; IS ATTACHED - recover test for sf_isnet	 ;AN000;
 0801  E8 0844 R			CALL	PIRET									 ;AN000;
 0804  75 45				JNZ	NOT_REDIR		; jmp if marked attached - ok			 ;AN000;
				; [THISDFL] dfl entry									 ;AN000;
				; (TOS+2):(TOS) -> SFT									 ;AN000;
				; (TOS+4) = CX loop count								 ;AN000;
									; Not marked attached, but should & will be	 ;AN000;
 0806  2E: C4 3E 0000 E			LES	DI,[THISDFL]								 ;AN000;
 080B  5E				POP	SI									 ;AN000;
 080C  1F				POP	DS			; DS:SI -> SFT					 ;AN000;
 080D  8B 44 09				MOV	AX,WORD PTR [SI.sf_devptr+2]	; save original devptr			 ;AN031;
 0810  26: 89 45 1C			MOV	WORD PTR ES:[DI.DFLL_DEVPTR+2],AX					 ;AN031;
 0814  8B 44 07				MOV	AX,WORD PTR [SI.sf_devptr]						 ;AN031;
 0817  26: 89 45 1A			MOV	WORD PTR ES:[DI.DFLL_DEVPTR],AX						 ;AN031;
 081B  8C 44 09				MOV	WORD PTR [SI.sf_devptr+2],ES						 ;AC027;
 081E  89 7C 07				MOV	WORD PTR [SI.sf_devptr],DI						 ;AC027;
 0821  26: 8B 45 0A			MOV	AX,WORD PTR ES:[DI.DFL_FSDA]	 ; put dfl fsda into sft fsda		 ;AN027;
 0825  89 44 19				MOV	WORD PTR [SI.sf_cluspos],AX						 ;AN027;
 0828  26: 8B 45 0C			MOV	AX,WORD PTR ES:[DI.DFL_FSDA+2]						 ;AN027;
 082C  89 44 1B				MOV	WORD PTR [SI.sf_dirsec],AX						 ;AN027;
 082F  26: 8B 45 0E			MOV	AX,WORD PTR ES:[DI.DFL_FSDA+4]						 ;AN027;
 0833  89 44 1D				MOV	WORD PTR [SI.sf_dirsec+2],AX						 ;AN027;
 0836  26: 8B 45 10			MOV	AX,WORD PTR ES:[DI.DFL_FSDA+6]						 ;AN027;
 083A  89 44 35				MOV	WORD PTR [SI.sf_lstclus],AX						 ;AN027;
 083D  81 4C 05 8800			OR	[SI.sf_flags],sf_isnet + sf_net_spool ; Turn on bits			 ;AC027;
 0842  EB 09				JMP	SHORT CLEAN_CX								 ;AN000;
															 ;AN000;
 0844				PIRET:											 ;AN000;
 0844  CF				IRET										 ;AN000;
															 ;AN000;
 0845				NOT_R_DEV:										 ;AN000;
 0845  0E				PUSH	CS			; NOT ATTACHED - recover test for sf_isnet	 ;AN000;
 0846  E8 0844 R			CALL	PIRET									 ;AN000;
 0849  75 09				JNZ	UNDO_BITS		; jmp if marked attached - problem		 ;AN000;
 084B				NOT_REDIR:										 ;AN000;
 084B  5E				POP	SI									 ;AN000;
 084C  1F				POP	DS									 ;AN000;
 084D				CLEAN_CX:										 ;AN000;
 084D  59				POP	CX									 ;AN000;
 084E				NEXT_SFT:										 ;AN000;
 084E  83 C6 3B				ADD	SI,size sf_entry							 ;AN000;
 0851  E2 84				LOOP	LOOK_FIX								 ;AN000;
					return										 ;AN000;
 0853                        1	??000C: 
 0853  C3                    1		RET 
															 ;AN000;
				; [THISDFL] dfl entry									 ;AN000;
				; (TOS+2):(TOS) -> SFT									 ;AN000;
				; (TOS+4) = CX loop count								 ;AN000;
 0854				UNDO_BITS:				; device not attached, but marked so		 ;AN000;
 0854  5E				POP	SI			; unmark it, restore original devptr		 ;AN000;
 0855  1F				POP	DS			; DS:SI -> SFT					 ;AN000;
 0856  81 64 05 77FF			AND	[SI.sf_flags],NOT (sf_isnet + sf_net_spool) ; Turn off bits		 ;AN000;
 085B  8E 44 09				MOV	ES,WORD PTR [SI.sf_devptr+2]	    ; set esdi -> dfl			 ;AN031;
 085E  8B 7C 07				MOV	DI,WORD PTR [SI.sf_devptr]						 ;AN031;
 0861  26: 8B 45 1C			MOV	AX,WORD PTR ES:[DI.DFLL_DEVPTR+2]    ; restore original devptr		 ;AN031;
 0865  89 44 09				MOV	WORD PTR [SI.sf_devptr+2],AX						 ;AN031;
 0868  26: 8B 45 1A			MOV	AX,WORD PTR ES:[DI.DFLL_DEVPTR]						 ;AN031;
 086C  89 44 07				MOV	WORD PTR [SI.sf_devptr],AX						 ;AN031;
 086F  EB DC				JMP	SHORT CLEAN_CX								 ;AN000;
															 ;AN000;
				EndProc CONSIST_SFT									 ;AN000;
 0871                        1	CONSIST_SFT    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <CONSIST_DFL -- Reset all DFL in_prog flags>					 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-41
CONSIST_DFL -- Reset all DFL in_prog flags                  

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; CONSIST_DFL										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	DS:SI -> 1st DFL entry								 ;AN000;
				;	CX = DFLCount									 ;AN000;
				; Function:										 ;AN000;
				;	Set all dfl_inprog flags to zero						 ;AN000;
				; Outputs:										 ;AN000;
				;	dfl_inprog flags all zero							 ;AN000;
				;											 ;AN000;
				; notes: all regs preserved								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure CONSIST_DFL,NEAR							 ;AN000;
 0871                        1	CONSIST_DFL    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <SI,DX,CX>								 ;AC023;
 0871  56                    2		PUSH    SI 
 0872  52                    2		PUSH    DX 
 0873  51                    2		PUSH    CX 
 0874  BA 001E				MOV	DX,SIZE DFLL_LIST							 ;AN000;
 0877				CD_20:						; reset loop				 ;AN000;
 0877  80 24 7F				AND	BYTE PTR DS:[SI],NOT DFL_INPROG 					 ;AN000;
 087A  03 F2				ADD	SI,DX									 ;AN000;
 087C  E2 F9				LOOP	CD_20									 ;AN000;
															 ;AN000;
					RestoreReg <CX,DX,SI>								 ;AC023;
 087E  59                    2		POP     CX 
 087F  5A                    2		POP     DX 
 0880  5E                    2		POP     SI 
					return										 ;AN000;
 0881                        1	??000D: 
 0881  C3                    1		RET 
															 ;AN000;
				EndProc CONSIST_DFL									 ;AN000;
 0882                        1	CONSIST_DFL    ENDP 
				
				
				BREAK <PRN_CHECK -- change PRN to LPT1>
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-42
PRN_CHECK -- change PRN to LPT1                             

				
				;************************************************************************************
				;
				; PRN_CHECK
				;
				; Inputs:
				;	DS -> IFSSEG
				;	SI -> asciiz canonicalized device name
				; Function:
				;	IF DSSI-> "PRN",0 THEN
				;	   Set SI -> LPT1_NAME
				;	ENDIF
				; Outputs:
				;	SI possibly Revised
				;
				; notes: all but si preserved
				;
				;************************************************************************************
				
					procedure PRN_CHECK,NEAR							 ;AN012;
 0882                        1	PRN_CHECK    PROC    NEAR 
				ASSUME	DS:IFSSEG,ES:NOTHING								 ;AN012;
				
					SaveReg <ES,DI,AX,CS>								 ;AN012;;AC0
				14;
 0882  06                    2		PUSH    ES 
 0883  57                    2		PUSH    DI 
 0884  50                    2		PUSH    AX 
 0885  0E                    2		PUSH    CS 
					RestoreReg <ES> 								 ;AN012;
 0886  07                    2		POP     ES 
 0887  BF 0005 R			MOV	DI,OFFSET PRN_NAME							 ;AN012;
					SaveReg <SI>									 ;AN012;
 088A  56                    2		PUSH    SI 
					CallInstall StrCmp,MultDOS,30							 ;AN012;
 088B  B8 121E               1		MOV     AX,(MultDOS SHL 8) + 30 
 088E  CD 2F                 1		INT     2Fh 
					RestoreReg <SI> 								 ;AN012;
 0890  5E                    2		POP     SI 
 0891  75 03				JNZ	PC_20									 ;AN012;
 0893  BE 0000 R			MOV	SI,OFFSET LPT1_NAME							 ;AN012;
 0896				PC_20:											 ;AN012;
					RestoreReg <AX,DI,ES>								 ;AN012;;AC0
				14;
 0896  58                    2		POP     AX 
 0897  5F                    2		POP     DI 
 0898  07                    2		POP     ES 
					return										 ;AN012;
 0899                        1	??000E: 
 0899  C3                    1		RET 
				
				EndProc PRN_CHECK									 ;AN012;
 089A                        1	PRN_CHECK    ENDP 
				
				
				BREAK <CHECK_REAL_DEVICE -- Match dfl_dev_name to real device>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-43
CHECK_REAL_DEVICE -- Match dfl_dev_name to real device      

															 ;AN000;
				;************************************************************************************
				;
				; CHECK_REAL_DEVICE
				;
				; Inputs:
				;	DS:SI -> DFL entry
				;
				; Function:
				;	Match device name to device driver chain names
				;	IF match found
				;	   set dfl_dev_real
				;	IF device name = "prn" THEN
				;	   set to "LPT1"
				; Outputs:
				;	dfl_dev_real set
				;	device name changed to "LPT1" if "PRN"
				;
				; Regs: AX,CX destroyed.  All others preserved.
				;
				;************************************************************************************
															 ;AN000;
					procedure CHECK_REAL_DEVICE,NEAR						 ;AN000;
 089A                        1	CHECK_REAL_DEVICE    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <ES,DI,DS,SI,CS>							 ;AN000;
 089A  06                    2		PUSH    ES 
 089B  57                    2		PUSH    DI 
 089C  1E                    2		PUSH    DS 
 089D  56                    2		PUSH    SI 
 089E  0E                    2		PUSH    CS 
					RestoreReg <ES> 								 ;AN000;
 089F  07                    2		POP     ES 
				ASSUME	ES:IFSSEG									 ;AN000;
 08A0  BF 000A E			MOV	DI,OFFSET TEMPBUF+10		; esdi-> tempbuf+10			 ;AN000;
 08A3  83 C6 02				ADD	SI,DFL_DEV_NAME 		; dssi -> dfl_dev_name			 ;AN000;
 08A6  E8 0986 R			CALL	CONVERT_NAME_ASCIIZ		; asciiz form of dfl_dev_name		 ;AN000;
										; at tempbuf+10 			 ;AN000;
										; Use this to match real devnames	 ;AN000;
															 ;AN000;
					Context DS				; get addressability to dosgroup	 ;AN000;
 08A9  16                    1		PUSH    SS 
 08AA  1F                    1		POP     DS 
										; to access device driver chain 	 ;AN000;
 08AB  C5 36 0000 E			LDS	SI,NULDEV			; dssi -> real device driver chain	 ;AN000;
 08AF				CRD_20: 					; <<< matching loop on dev drvrs >>>	 ;AN000;
					SaveReg <DS,SI> 								 ;AN000;
 08AF  1E                    2		PUSH    DS 
 08B0  56                    2		PUSH    SI 
 08B1  83 C6 0A				ADD	SI,SDEVNAME			; dssi -> real dev name 		 ;AN000;
 08B4  BF 0000 E			MOV	DI,OFFSET TEMPBUF							 ;AN000;
 08B7  E8 0986 R			CALL	CONVERT_NAME_ASCIIZ							 ;AN000;
					SaveReg <ES>									 ;AN000;
 08BA  06                    2		PUSH    ES 
					RestoreReg <DS> 								 ;AN000;
 08BB  1F                    2		POP     DS 
 08BC  8B F7				MOV	SI,DI				; dssi -> tempbuf    (real)		 ;AN000;
 08BE  83 C7 0A				ADD	DI,10				; esdi -> tempbuf+10 (dfl)		 ;AN000;
					CallInstall StrCmp,MultDOS,30		; compare (case insensitive)		 ;AN000;
 08C1  B8 121E               1		MOV     AX,(MultDOS SHL 8) + 30 
 08C4  CD 2F                 1		INT     2Fh 
					RestoreReg <SI,DS>			; device driver chain			 ;AN000;
 08C6  5E                    2		POP     SI 
 08C7  1F                    2		POP     DS 
 08C8  74 0B				JZ	CRD_40									 ;AN000;
 08CA  C5 34				LDS	SI,DS:[SI.SDEVNEXT]							 ;AN000;
 08CC  83 FE FF				CMP	SI,NULL_PTR								 ;AN000;
 08CF  75 DE				JNE	CRD_20									 ;AN000;
				;;;;;;;;SaveReg <DS>				; only offset null			 ;AD022;
				;	RestoreReg <AX> 								 ;AD022;
				;	CMP	AX,NULL_PTR								 ;AD022;
				;;;;;;;;JNE	CRD_20									 ;AD022;
					RestoreReg <SI,DS>			; dfl entry				 ;AN000;
 08D1  5E                    2		POP     SI 
 08D2  1F                    2		POP     DS 
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-44
CHECK_REAL_DEVICE -- Match dfl_dev_name to real device      

 08D3  EB 05				JMP	SHORT CRD_100			; go check "prn"                         ;AN000;
															 ;AN000;
 08D5				CRD_40: 					; match found				 ;AN000;
					RestoreReg <SI,DS>			; dfl entry				 ;AN000;
 08D5  5E                    2		POP     SI 
 08D6  1F                    2		POP     DS 
 08D7  80 0C 10				OR	DS:[SI.DFLL_FLAGS],DFL_DEV_REAL						 ;AN000;
															 ;AN000;
 08DA				CRD_100:										 ;AN000;
					SaveReg <DS,SI> 			; dfl entry				 ;AN000;
 08DA  1E                    2		PUSH    DS 
 08DB  56                    2		PUSH    SI 
					SaveReg <CS>									 ;AN000;
 08DC  0E                    2		PUSH    CS 
					RestoreReg <DS> 								 ;AN000;
 08DD  1F                    2		POP     DS 
				ASSUME	DS:IFSSEG									 ;AN000;
 08DE  BE 0005 R			MOV	SI,OFFSET PRN_NAME		; ds:si -> "prn",0                       ;AN000;
										; es:di -> tempbuf+10 (dfl)		 ;AN000;
					CallInstall StrCmp,MultDOS,30		; compare (case insensitive)		 ;AN000;
 08E1  B8 121E               1		MOV     AX,(MultDOS SHL 8) + 30 
 08E4  CD 2F                 1		INT     2Fh 
					RestoreReg <SI,DS>			; dfl entry				 ;AN000;
 08E6  5E                    2		POP     SI 
 08E7  1F                    2		POP     DS 
 08E8  75 15				JNZ	CRD_120 								 ;AN000;
										; prn match				 ;AN000;
 08EA  E8 0902 R			CALL	XCHGP				; after call: ds ifsseg 		 ;AN000;
										;	      esdi->dfl entry		 ;AN000;
				ASSUME	DS:IFSSEG									 ;AN000;
 08ED  BE 0000 R			MOV	SI,OFFSET LPT1_NAME							 ;AN000;
					SaveReg <ES,DI> 			; dfl entry offset			 ;AN000;
 08F0  06                    2		PUSH    ES 
 08F1  57                    2		PUSH    DI 
 08F2  83 C7 02				ADD	DI,DFL_DEV_NAME 		; make dfl_dev_name = "LPT1    "         ;AN000;
 08F5  B9 0004				MOV	CX,4									 ;AN000;
 08F8  F3/ A4				REP	MOVSB									 ;AN000;
					RestoreReg <SI,DS>			; dfl entry offset			 ;AN000;
 08FA  5E                    2		POP     SI 
 08FB  1F                    2		POP     DS 
 08FC  80 0C 10				OR	DS:[SI.DFLL_FLAGS],DFL_DEV_REAL						 ;AN022;
															 ;AN000;
 08FF				CRD_120:										 ;AN000;
					RestoreReg <DI,ES>			; restore es,di 			 ;AN000;
 08FF  5F                    2		POP     DI 
 0900  07                    2		POP     ES 
					return										 ;AN000;
 0901                        1	??000F: 
 0901  C3                    1		RET 
															 ;AN000;
				EndProc CHECK_REAL_DEVICE								 ;AN000;
 0902                        1	CHECK_REAL_DEVICE    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<XCHGP - exchange source and destination pointers>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-45
XCHGP - exchange source and destination pointers            

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				; XCHGP 										 ;AN000;
				;											 ;AN000;
				; Inputs:										 ;AN000;
				;	DS:SI & ES:DI									 ;AN000;
				; Function:										 ;AN000;
				;	Swap ds:si with es:di								 ;AN000;
				; Outputs:										 ;AN000;
				;	ds<=>es, si<=>di								 ;AN000;
				;											 ;AN000;
				; notes: all preserved									 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure XCHGP,NEAR									 ;AN000;
 0902                        1	XCHGP    PROC    NEAR 
					SaveReg <DS,ES> 								 ;AN000;
 0902  1E                    2		PUSH    DS 
 0903  06                    2		PUSH    ES 
					RestoreReg  <DS,ES>								 ;AN000;
 0904  1F                    2		POP     DS 
 0905  07                    2		POP     ES 
 0906  87 F7				XCHG	SI,DI									 ;AN000;
					return										 ;AN000;
 0908                        1	??0010: 
 0908  C3                    1		RET 
				EndProc XCHGP										 ;AN000;
 0909                        1	XCHGP    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<IFSDrvFromCDS - convert an offset to a CDS into the 0-based drive>		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-46
IFSDrvFromCDS - convert an offset to a CDS into the 0-based 

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   IFSDrvFromCDS - convert an offset to a CDS into a 0-based drive number.		 ;AN000;
				;   Sets IFSDrv also.									 ;AN000;
				;											 ;AN000;
				;   Inputs:	AX contains offset from the beginning of CDSAddr			 ;AN000;
				;   Outputs:	AL contains the 0-based drive number					 ;AN000;
				;		IFSDrv is set								 ;AN000;
				;   Registers Revised: AH, BL								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   IFSDrvFromCDS,NEAR								 ;AN000;
 0909                        1	IFSDrvFromCDS    PROC    NEAR 
					ASSUME	DS:NOTHING,ES:NOTHING							 ;AN000;
 0909  36: 2B 06 0000 E			SUB	AX,WORD PTR [CDSADDR]	; AX is offset of THISCDS			 ;AN000;
 090E  B3 58				MOV	BL,SIZE CurDir_list	; size in convenient spot			 ;AN000;
 0910  F6 F3				DIV	BL			; get drive number				 ;AN000;
 0912  2E: A2 0000 E			MOV	CS:[IFSDRV],AL								    ;AN000;
					return										 ;AN000;
 0916                        1	??0011: 
 0916  C3                    1		RET 
				EndProc IFSDrvFromCDS									 ;AN000;
 0917                        1	IFSDrvFromCDS    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<SET_THISIFS_UNC - put UNC_FS_HDR into [THISIFS]>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-47
SET_THISIFS_UNC - put UNC_FS_HDR into [THISIFS]             

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   SET_THISIFS_UNC									 ;AN000;
				;											 ;AN000;
				;   Inputs:	DS - IFSSEG, UNC_FS_HDR set						 ;AN000;
				;   Outputs:	[THISIFS] = UNC_FS_HDR							 ;AN000;
				;											 ;AN000;
				;   Registers Revised: none								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   SET_THISIFS_UNC,NEAR							 ;AN000;
 0917                        1	SET_THISIFS_UNC    PROC    NEAR 
 0917  2E: A1 0000 E			MOV	AX,CS:WORD PTR [UNC_FS_HDR]						 ;AN000;
 091B  2E: A3 0000 E			MOV	CS:WORD PTR [THISIFS],AX						 ;AN000;
 091F  2E: A1 0002 E			MOV	AX,CS:WORD PTR [UNC_FS_HDR+2]						 ;AN000;
 0923  2E: A3 0002 E			MOV	CS:WORD PTR [THISIFS+2],AX						 ;AN000;
					return										 ;AN000;
 0927                        1	??0012: 
 0927  C3                    1		RET 
				EndProc SET_THISIFS_UNC 								 ;AN000;
 0928                        1	SET_THISIFS_UNC    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<SET_CATEGORY - set category for ifs dependent ioctl request>			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-48
SET_CATEGORY - set category for ifs dependent ioctl request 

															 ;AN000;
				;************************************************************************************
				;
				;   SET_CATEGORY
				;
				;   Inputs:	DS - IFSSEG, ES:BX -> IFSR, THISIFS set
				;   Outputs:	CL set to 1 for unc fs, 0 otherwize
				;
				;   Registers Revised: CX
				;
				;************************************************************************************
															 ;AN000;
				Procedure   SET_CATEGORY,NEAR								 ;AN000;
 0928                        1	SET_CATEGORY    PROC    NEAR 
					SaveReg <AX>				; preserve used regs			 ;AN000;
 0928  50                    2		PUSH    AX 
 0929  32 ED				XOR	CH,CH									 ;AN000;
 092B  B1 00				MOV	CL,CATEGORY_FS			; set category: 0 - non-UNC		 ;AN000;
 092D  2E: F7 06 0000 E 0080		TEST	IFSFUNC_FLAGS,UNC_INSTALLED	; check if unc fs installed		 ;AN000;
 0934  74 18				JZ	SC_20				; no unc - go set category to fs	 ;AN000;
 0936  2E: A1 0000 E			MOV	AX,WORD PTR [THISIFS]		; now must check if thisifs=unc 	 ;AN000;
 093A  2E: 3B 06 0000 E			CMP	AX,WORD PTR [UNC_FS_HDR]						 ;AN000;
 093F  75 0D				JNE	SC_20									 ;AN000;
 0941  2E: A1 0002 E			MOV	AX,WORD PTR [THISIFS+2] 						 ;AN000;
 0945  2E: 3B 06 0002 E			CMP	AX,WORD PTR [UNC_FS_HDR+2]						 ;AN000;
 094A  75 02				JNE	SC_20									 ;AN000;
 094C  FE C1				INC	CL				; is unc - inc category to 1=unc	 ;AN000;
 094E				SC_20:											 ;AN000;
					RestoreReg <AX> 								 ;AN000;
 094E  58                    2		POP     AX 
					return										 ;AN000;
 094F                        1	??0013: 
 094F  C3                    1		RET 
				EndProc SET_CATEGORY									 ;AN000;
 0950                        1	SET_CATEGORY    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<SET_DEPIOCTL_IFSR - set length,function,apifunc,func ifsr fields>		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-49
SET_DEPIOCTL_IFSR - set length,function,apifunc,func ifsr fi

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   SET_DEPIOCTL_IFSR									 ;AN000;
				;											 ;AN000;
				;   Inputs:	ES:BX -> IFSR
				;   Outputs:	IFSR_LENGTH, IFSR_FUNCTION, IFSR_APIFUNC, IFSR_FUNC set 		 ;AN000;
				;											 ;AN000;
				;   Registers Revised: none								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   SET_DEPIOCTL_IFSR,NEAR							 ;AN000;
 0950                        1	SET_DEPIOCTL_IFSR    PROC    NEAR 
					ifsr_fcn_def	EXECAPI 							 ;AN000;
					ifsr_api_def	DEPIOCTL							 ;AN000;
 0950  26: C7 07 0030			MOV	ES:[BX.IFSR_LENGTH],LENGTH_DEPIOCTL					 ;AN000;
 0955  26: C6 47 02 05			MOV	ES:[BX.IFSR_FUNCTION],IFSEXECAPI					 ;AN000;
 095A  26: C6 47 16 10			MOV	ES:[BX.IFSR_APIFUNC],IFSDEPIOCTL					 ;AN000;
 095F  26: C6 47 26 00			MOV	ES:[BX.IFSR_FUNC],GEN_IOCTL_BY_DEVNUM					 ;AN000;
					return										 ;AN000;
 0964                        1	??0014: 
 0964  C3                    1		RET 
				EndProc SET_DEPIOCTL_IFSR								 ;AN000;
 0965                        1	SET_DEPIOCTL_IFSR    ENDP 
															 ;AN000;
				
				Break	<GET_UNC_FS_NAME - put UNC ifs driver name into esdi>				    ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-50
GET_UNC_FS_NAME - put UNC ifs driver name into esdi         

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   GET_UNC_FS_NAME									 ;AN000;
				;											 ;AN000;
				;   Inputs:
				;		ES:DI -> BUFFER 							 ;AN000;
				;											 ;AN000;
				;   Outputs:	Buffer contains asciiz form of ifs driver name				 ;AN000;
				;											 ;AN000;
				;   Registers Revised: none								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   GET_UNC_FS_NAME,NEAR							;AN000;
 0965                        1	GET_UNC_FS_NAME    PROC    NEAR 
															 ;AN000;
					SaveReg <DS,SI,DI>
 0965  1E                    2		PUSH    DS 
 0966  56                    2		PUSH    SI 
 0967  57                    2		PUSH    DI 
 0968  2E: C5 36 0000 E			LDS	SI,CS:UNC_FS_HDR
 096D  E8 0974 R			CALL	MOVE_DRIVER_NAME
					RestoreReg <DI,SI,DS>								 ;AN000;
 0970  5F                    2		POP     DI 
 0971  5E                    2		POP     SI 
 0972  1F                    2		POP     DS 
					return										 ;AN000;
 0973                        1	??0015: 
 0973  C3                    1		RET 
				EndProc GET_UNC_FS_NAME 								;AN000;
 0974                        1	GET_UNC_FS_NAME    ENDP 
				
															 ;AN000;
				Break	<MOVE_DRIVER_NAME - put ifs driver name into esdi>				 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-51
MOVE_DRIVER_NAME - put ifs driver name into esdi            

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   MOVE_DRIVER_NAME									 ;AN000;
				;											 ;AN000;
				;   Inputs:	DS:SI -> IFS DRIVER							 ;AN000;
				;		ES:DI -> BUFFER 							 ;AN000;
				;											 ;AN000;
				;   Outputs:	Buffer contains asciiz form of ifs driver name				 ;AN000;
				;											 ;AN000;
				;   Registers Revised: SI,DI								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   MOVE_DRIVER_NAME,NEAR							 ;AN000;
 0974                        1	MOVE_DRIVER_NAME    PROC    NEAR 
															 ;AN000;
 0974  83 C6 04				ADD	SI,IFS_NAME			; space to name in ifs hdr		 ;AN000;
 0977  B9 0008				MOV	CX,8									 ;AN000;
 097A				MDN_20: 					; move name into buffer 		 ;AN000;
 097A  AC				LODSB					; move till 1st space or 8 chars	 ;AN000;
 097B  3C 20				CMP	AL," "                          ; then add 0                             ;AN000;
 097D  74 03				JE	MDN_40									 ;AN000;
 097F  AA				STOSB										 ;AN000;
 0980  E2 F8				LOOP	MDN_20									 ;AN000;
 0982				MDN_40: 										 ;AN000;
 0982  32 C0				XOR	AL,AL									 ;AN000;
 0984  AA				STOSB										 ;AN000;
															 ;AN000;
					return										 ;AN000;
 0985                        1	??0016: 
 0985  C3                    1		RET 
				EndProc MOVE_DRIVER_NAME								 ;AN000;
 0986                        1	MOVE_DRIVER_NAME    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<CONVERT_NAME_ASCIIZ - put name into buffer in asciiz form>			 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-52
CONVERT_NAME_ASCIIZ - put name into buffer in asciiz form   

				
				;************************************************************************************
				;
				;   CONVERT_NAME_ASCIIZ
				;
				;   Inputs:	DS:SI -> NAME
				;		ES:DI -> BUFFER
				;
				;   Outputs:	Buffer contains asciiz form of name
				;
				;   Regs:	All but SI preserved
				;
				;************************************************************************************
				
				Procedure   CONVERT_NAME_ASCIIZ,NEAR							 ;AN000;
 0986                        1	CONVERT_NAME_ASCIIZ    PROC    NEAR 
					SaveReg <DI,AX> 			; esdi buffer offset			 ;AC014;
 0986  57                    2		PUSH    DI 
 0987  50                    2		PUSH    AX 
 0988  FC				CLD					; store name in asciiz format		 ;AN000;
 0989  B9 0008				MOV	CX,8				; in esdi buffer			 ;AN000;
 098C				CNA_20: 										 ;AN000;
 098C  AC				LODSB										 ;AN000;
 098D  3C 20				CMP	AL," "                                                                   ;AN000;
 098F  74 03				JE	CNA_40									 ;AN000;
 0991  AA				STOSB										 ;AN000;
 0992  E2 F8				LOOP	CNA_20									 ;AN000;
 0994				CNA_40: 										 ;AN000;
 0994  32 C0				XOR	AL,AL									 ;AN000;
 0996  AA				STOSB										 ;AN000;
															 ;AN000;
					RestoreReg <AX,DI>			; esdi buffer offset			 ;AC014;
 0997  58                    2		POP     AX 
 0998  5F                    2		POP     DI 
															 ;AN000;
					return										 ;AN000;
 0999                        1	??0017: 
 0999  C3                    1		RET 
															 ;AN000;
				EndProc CONVERT_NAME_ASCIIZ								 ;AN000;
 099A                        1	CONVERT_NAME_ASCIIZ    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<CHECK_SEQ - check for unc vs ifs device>					 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-53
CHECK_SEQ - check for unc vs ifs device                     

															 ;AN000;
				;************************************************************************************
				;
				;   CHECK_SEQ
				;
				;   Inputs:	[THISCDS],[THISDFL]
				;		DS - dosgroup
				;
				;   Function:	Check whether function has device_cb@ associated with it.
				;		(Rule out deviceless attach function)
				;
				;   Outputs:	cf = 0 seq (deviceless)
				;		cf = 1 device
				;
				;   Registers Revised: none
				;
				;************************************************************************************
				
				Procedure   CHECK_SEQ,NEAR								 ;AN000;
 099A                        1	CHECK_SEQ    PROC    NEAR 
				ASSUME	DS:DOSGROUP									 ;AN000;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				;	SaveReg <SI,AX> 	    ;							 ;AD007;
				;	MOV	SI,[WFP_START]	    ;							 ;AD007;
				;	LODSW			    ;							 ;AD007;
				;	CMP	AX,"\\"             ;                                                    ;AD007;
				;	JE	CS_10		    ;							 ;AD007;
				;	STC			    ;							 ;AD007;
				;	JMP	SHORT CS_20	    ;							 ;AD007;
				;S_10:				    ;							 ;AD007;
				;	CLC			    ;							 ;AD007;
				;				    ;							 ;AD007;
				;S_20:				    ;							 ;AD007;
				;	RestoreReg <AX,SI>	    ;							 ;AD007;
				;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					SaveReg <DS,SI> 		; save used regs				 ;AN007;
 099A  1E                    2		PUSH    DS 
 099B  56                    2		PUSH    SI 
 099C  C5 36 0000 E			LDS	SI,[THISCDS]		; check for cds 				 ;AN007;
 09A0  83 FE FF				CMP	SI,NULL_PTR								 ;AN007;
 09A3  75 0D				JNE	CS_10									 ;AN007;
 09A5  2E: C5 36 0000 E			LDS	SI,CS:[THISDFL] 	; no cds, check dfl				 ;AN007;
 09AA  83 FE FF				CMP	SI,NULL_PTR								 ;AN007;
 09AD  75 03				JNE	CS_10									 ;AN007;
 09AF  F8				CLC				; no cds, no dfl  - is deviceless - clear carry  ;AN007;
 09B0  EB 01				JMP	SHORT CS_1000								 ;AN007;
															 ;AN007;
 09B2				CS_10:											 ;AN007;
 09B2  F9				STC				; has device - set carry			 ;AN007;
															 ;AN007;
 09B3				CS_1000:										 ;AN007;
					RestoreReg <SI,DS>		; restore used regs				 ;AN007;
 09B3  5E                    2		POP     SI 
 09B4  1F                    2		POP     DS 
					return										 ;AN000;
 09B5                        1	??0018: 
 09B5  C3                    1		RET 
															 ;AN000;
				EndProc CHECK_SEQ									 ;AN000;
 09B6                        1	CHECK_SEQ    ENDP 
															 ;AN000;
															 ;AN000;
				Break	<INIT_DFL - zero out dfl entry> 						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-54
INIT_DFL - zero out dfl entry                               

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   INIT_DFL										 ;AN000;
				;											 ;AN000;
				;   Inputs:	DS:SI -> dfl entry							 ;AN000;
				;											 ;AN000;
				;   Outputs:	dfl entry zeroed out							 ;AN000;
				;											 ;AN000;
				;   Registers Revised: none								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   INIT_DFL,NEAR								 ;AN000;
 09B6                        1	INIT_DFL    PROC    NEAR 
					SaveReg <ES,DI,AX,CX,DS>							 ;AN000;
 09B6  06                    2		PUSH    ES 
 09B7  57                    2		PUSH    DI 
 09B8  50                    2		PUSH    AX 
 09B9  51                    2		PUSH    CX 
 09BA  1E                    2		PUSH    DS 
					RestoreReg <ES> 								 ;AN000;
 09BB  07                    2		POP     ES 
 09BC  8B FE				MOV	DI,SI									 ;AN000;
 09BE  B9 000F				MOV	CX,SIZE DFLL_LIST / 2							 ;AN000;
 09C1  33 C0				XOR	AX,AX									 ;AN000;
 09C3  FC				CLD										 ;AN000;
 09C4  F3/ AB				REP	STOSW									 ;AN000;
					RestoreReg <CX,AX,DI,ES>							 ;AN000;
 09C6  59                    2		POP     CX 
 09C7  58                    2		POP     AX 
 09C8  5F                    2		POP     DI 
 09C9  07                    2		POP     ES 
															 ;AN000;
					return										 ;AN000;
 09CA                        1	??0019: 
 09CA  C3                    1		RET 
															 ;AN000;
				EndProc INIT_DFL									 ;AN000;
 09CB                        1	INIT_DFL    ENDP 
															 ;AN000;
															 ;AN000;
				BREAK <NET_TRANS -- A Routine which does NAMETRANS on session start strings>		 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-55
NET_TRANS -- A Routine which does NAMETRANS on session start

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   NET_TRANS										 ;AN000;
				;											 ;AN000;
				;   Inputs:										 ;AN000;
				;	ES:DI -> Double string session start string for blockredir			 ;AC001;
				;		 or printerredir.							 ;AN000;
				;											 ;AN000;
				;   Function:										 ;AN000;
				;	Perform NAMETRANS DOS function on the connect part of the string		 ;AN000;
				;											 ;AN000;
				;   Outputs:										 ;AN000;
				;		ES:DI points to NAMETRANSed REDIR string				 ;AC001;
				;		password, or extra 0, appended at end of string 			 ;AC001;
				;											 ;AN000;
				;   Registers Revised: 								 ;AN000;
				;		ES,DI Revised, others preserved					 ;AC001;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
					procedure NET_TRANS,NEAR							 ;AN000;
 09CB                        1	NET_TRANS    PROC    NEAR 
				ASSUME	DS:NOTHING,ES:NOTHING								 ;AN000;
															 ;AN000;
					SaveReg <DS,SI,AX,BX>								 ;AC001;
 09CB  1E                    2		PUSH    DS 
 09CC  56                    2		PUSH    SI 
 09CD  50                    2		PUSH    AX 
 09CE  53                    2		PUSH    BX 
															 ;AN000;
					SaveReg <ES>				; set ds:si -> string			 ;AN001;
 09CF  06                    2		PUSH    ES 
					RestoreReg <DS> 			; for nametrans input			 ;AN001;
 09D0  1F                    2		POP     DS 
 09D1  8B F7				MOV	SI,DI									 ;AN001;
				
 09D3  0E				PUSH	CS									 ;AN000;
 09D4  07				POP	ES									 ;AN000;
 09D5  BF 0009 R			MOV	DI,OFFSET NET_TRANS_BUFFER	; name transed string will be placed	 ;AC013;
										; in temporary buffer
					SaveReg <DI,DS,SI>			; $NAMETRANS zaps these 		 ;AC013;
 09D8  57                    2		PUSH    DI 
 09D9  1E                    2		PUSH    DS 
 09DA  56                    2		PUSH    SI 
					CallInstall  $Nametrans,MultDOS,33						 ;AN000;
 09DB  B8 1221               1		MOV     AX,(MultDOS SHL 8) + 33 
 09DE  CD 2F                 1		INT     2Fh 
					RestoreReg <SI,DS>								 ;AN000;
 09E0  5E                    2		POP     SI 
 09E1  1F                    2		POP     DS 
 09E2  73 03				JNC	NT_20									 ;AN023;
					RestoreReg <DI> 			; nametrans error - set carry & exit	 ;AN023;
 09E4  5F                    2		POP     DI 
 09E5  EB 0C				JMP	SHORT	NT_60								 ;AN023;
				
										; dssi -> input target string
 09E7				NT_20:						; esdi -> nametrans version in nettranbuf;AC001;;AC0
				13;
 09E7  AC				LODSB					; move password or zero 		 ;AC001;
 09E8  0A C0				OR	AL,AL									 ;AC001;
 09EA  75 FB				JNZ	NT_20				; skip to password  (or zero)		 ;AC001;
				;;;;;;;;MOV	DI,OFFSET TEMPBUF		; no need for this;			 ;AC001;;AD0
				13;
				;	SaveReg <DI>				; nametrans already does it;		 ;AC001;;AD0
				13;
				;NT_40: 							  ;			  ;AC001;;AD
				013;
				;	 MOV	 AL,BYTE PTR ES:[DI]				  ;			  ;AC001;;AD
				013;
				;	 INC	 DI						  ;			  ;AC001;;AD
				013;
				;	 OR	 AL,AL						  ;			  ;AC001;;AD
				013;
				;;;;;;;;;JNZ	 NT_40				 ; Skip first part;			  ;AD013;
					CallInstall  StrCpy,MultDOS,17	; Copy password string				 ;AC001;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-56
NET_TRANS -- A Routine which does NAMETRANS on session start

 09EC  B8 1211               1		MOV     AX,(MultDOS SHL 8) + 17 
 09EF  CD 2F                 1		INT     2Fh 
					RestoreReg <DI> 								 ;AC001;
 09F1  5F                    2		POP     DI 
 09F2  F8				CLC										 ;AN023;
 09F3				NT_60:											 ;AN023;
					RestoreReg <BX,AX,SI,DS>							 ;AC001;
 09F3  5B                    2		POP     BX 
 09F4  58                    2		POP     AX 
 09F5  5E                    2		POP     SI 
 09F6  1F                    2		POP     DS 
															 ;AN001;
					return										 ;AN000;
 09F7                        1	??001A: 
 09F7  C3                    1		RET 
															 ;AN000;
				EndProc NET_TRANS									 ;AN000;
 09F8                        1	NET_TRANS    ENDP 
															 ;AN000;
				
				Break	<STRIP_WFP_START - strip leading d:\ >						 ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-57
STRIP_WFP_START - strip leading d:\                         

															 ;AN000;
				;************************************************************************************	 ;AN000;
				;											 ;AN000;
				;   STRIP_WFP_START									 ;AN000;
				;
				;   Called by:	IFS_SEARCH_FIRST
				;											 ;AN000;
				;   Inputs:	DS:SI -> WFP_START							 ;AN000;
				;											 ;AN000;
				;   Outputs:	none									 ;AN000;
				;											 ;AN000;
				;   Registers Revised: none								 ;AN000;
				;											 ;AN000;
				;************************************************************************************	 ;AN000;
															 ;AN000;
				Procedure   STRIP_WFP_START,NEAR							 ;AN000;
 09F8                        1	STRIP_WFP_START    PROC    NEAR 
															 ;AN000;
 09F8  80 7C 01 3A			CMP	BYTE PTR DS:[SI+1],":"                                                   ;AN000;
 09FC  75 0E				JNE	SW_1000 								 ;AN000;
 09FE  83 C6 02				ADD	SI,2									 ;AN000;
 0A01  80 3C 5C				CMP	BYTE PTR DS:[SI],"\"                                                     ;AN000;
 0A04  74 05				JE	SW_20									 ;AN000;
 0A06  80 3C 2F				CMP	BYTE PTR DS:[SI],"/"                                                     ;AN000;
 0A09  75 01				JNE	SW_1000 								 ;AN000;
 0A0B				SW_20:											 ;AN000;
 0A0B  46				INC	SI									 ;AN000;
															 ;AN000;
 0A0C				SW_1000:										 ;AN000;
					return										 ;AN000;
 0A0C                        1	??001B: 
 0A0C  C3                    1		RET 
															 ;AN000;
				EndProc STRIP_WFP_START 								 ;AN000;
 0A0D                        1	STRIP_WFP_START    ENDP 
				
				
				Break	<CHECK_IFS_ATTRIBUTE - check if fs supports function in DX>
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-58
CHECK_IFS_ATTRIBUTE - check if fs supports function in DX   

				
				;************************************************************************************
				;
				;   CHECK_IFS_ATTRIBUTE
				;
				;   Called by:	IFS_DEPENDENT_IOCTL
				;
				;   Inputs:	DX = ifs_attribute equate
				;
				;   Outputs:	ZF = attribute not supported
				;		NZ = attribute supported
				;
				;   Registers Revised: none
				;
				;************************************************************************************
															 ;AN000;
				Procedure   CHECK_IFS_ATTRIBUTE,NEAR							     ;AN000;
 0A0D                        1	CHECK_IFS_ATTRIBUTE    PROC    NEAR 
															 ;AN000;
					SaveReg <ES,DI>
 0A0D  06                    2		PUSH    ES 
 0A0E  57                    2		PUSH    DI 
				
 0A0F  2E: C4 3E 0000 E			LES	DI,[THISIFS]		 ; esdi -> ifs header
 0A14  26: 85 55 0C			TEST	ES:[DI.IFS_ATTRIBUTE],DX ; test attribute
				
					RestoreReg <DI,ES>
 0A18  5F                    2		POP     DI 
 0A19  07                    2		POP     ES 
															 ;AN000;
					return										 ;AN000;
 0A1A                        1	??001C: 
 0A1A  C3                    1		RET 
															 ;AN000;
				EndProc CHECK_IFS_ATTRIBUTE								 ;AN000;
 0A1B                        1	CHECK_IFS_ATTRIBUTE    ENDP 
				
				
				Break	<CHECK_IFS_SUPPORT - check if IFS supports request>
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Page     1-59
CHECK_IFS_SUPPORT - check if IFS supports request           

				
				;************************************************************************************
				;
				;   CHECK_IFS_SUPPORT
				;
				;   Called by:	CALL_IFS
				;
				;   Inputs:	TBD
				;
				;   Outputs:	TBD
				;
				;
				;   Registers Revised: TBD
				;
				;************************************************************************************
															   ;AN000;
				Procedure   CHECK_IFS_SUPPORT,NEAR							   ;AN000;
 0A1B                        1	CHECK_IFS_SUPPORT    PROC    NEAR 
				
					return										 ;AN010;
 0A1B                        1	??001D: 
 0A1B  C3                    1		RET 
				
				EndProc CHECK_IFS_SUPPORT								 ;AN010;
 0A1C                        1	CHECK_IFS_SUPPORT    ENDP 
				
															 ;AN000;
 0A1C				IFSSEG	ENDS										 ;AN000;
				    END 										 ;AN000;

Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-1


Macros:

		N a m e			Lines

ARGVAR . . . . . . . . . . . . .  	  23
ASMVAR . . . . . . . . . . . . .  	   3
ASMVARS  . . . . . . . . . . . .  	   3
ASSERT . . . . . . . . . . . . .  	   0
CALLINSTALL  . . . . . . . . . .  	  12
DOSASSUME  . . . . . . . . . . .  	   3
ENTER  . . . . . . . . . . . . .  	   3
ENTERCRIT  . . . . . . . . . . .  	   1
ERRNZ  . . . . . . . . . . . . .  	   4
FMT  . . . . . . . . . . . . . .  	   0
IFSR_API_DEF . . . . . . . . . .  	 192
IFSR_FCN_DEF . . . . . . . . . .  	  75
LEAVE  . . . . . . . . . . . . .  	   2
LEAVECRIT  . . . . . . . . . . .  	   1
LOCALVAR . . . . . . . . . . . .  	  23

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

ABS_32RW . . . . . . . . . . . .  	000A	0003
  SECTOR_RBA . . . . . . . . . .  	0000
  ABS_RW_COUNT . . . . . . . . .  	0004
  BUFFER_ADDR  . . . . . . . . .  	0006
ARENA  . . . . . . . . . . . . .  	0010	0005
  ARENA_SIGNATURE  . . . . . . .  	0000
  ARENA_OWNER  . . . . . . . . .  	0001
  ARENA_SIZE . . . . . . . . . .  	0003
  ARENA_RESERVED . . . . . . . .  	0005
  ARENA_NAME . . . . . . . . . .  	0008
ATTACH_PARMS . . . . . . . . . .  	0003	0002
  AP_COUNT . . . . . . . . . . .  	0000
  AP_STRING  . . . . . . . . . .  	0002
A_BPB  . . . . . . . . . . . . .  	001F	000F
  BPB_BYTESPERSECTOR . . . . . .  	0000
  BPB_SECTORSPERCLUSTER  . . . .  	0002
  BPB_RESERVEDSECTORS  . . . . .  	0003
  BPB_NUMBEROFFATS . . . . . . .  	0005
  BPB_ROOTENTRIES  . . . . . . .  	0006
  BPB_TOTALSECTORS . . . . . . .  	0008
  BPB_MEDIADESCRIPTOR  . . . . .  	000A
  BPB_SECTORSPERFAT  . . . . . .  	000B
  BPB_SECTORSPERTRACK  . . . . .  	000D
  BPB_HEADS  . . . . . . . . . .  	000F
  BPB_HIDDENSECTORS  . . . . . .  	0011
  BPB_BIGTOTALSECTORS  . . . . .  	0015
BPBLOCK  . . . . . . . . . . . .  	000D	0008
  BPSECSZ  . . . . . . . . . . .  	0000
  BPCLUS . . . . . . . . . . . .  	0002
  BPRES  . . . . . . . . . . . .  	0003
  BPFTCNT  . . . . . . . . . . .  	0005
  BPDRCNT  . . . . . . . . . . .  	0006
  BPSCCNT  . . . . . . . . . . .  	0008
  BPMEDIA  . . . . . . . . . . .  	000A
  BPFTSEC  . . . . . . . . . . .  	000B
BUFFER_HASH_ENTRY  . . . . . . .  	0008	0004
  EMS_PAGE_NUM . . . . . . . . .  	0000
  BUFFER_BUCKET  . . . . . . . .  	0002
  DIRTY_COUNT  . . . . . . . . .  	0006
  BUFFER_RESERVED  . . . . . . .  	0007
BUFFINFO . . . . . . . . . . . .  	0023	000F
  HASH_PTR . . . . . . . . . . .  	0000
  HASH_COUNT . . . . . . . . . .  	0004
  CACHE_PTR  . . . . . . . . . .  	0006
  CACHE_COUNT  . . . . . . . . .  	000A
  EMS_SAFE_FLAG  . . . . . . . .  	000C
  EMS_LAST_PAGE  . . . . . . . .  	000D
  EMS_FIRST_PAGE . . . . . . . .  	0011
  EMS_NPA640 . . . . . . . . . .  	0015
  EMS_MODE . . . . . . . . . . .  	0017
  EMS_HANDLE . . . . . . . . . .  	0018
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-2


  EMS_PAGEFRAME_NUMBER . . . . .  	001A
  EMS_SEG_CNT  . . . . . . . . .  	001C
  EMS_PAGE_FRAME . . . . . . . .  	001E
  EMS_RESERVED . . . . . . . . .  	0020
  EMS_MAP_BUFF . . . . . . . . .  	0022
CD . . . . . . . . . . . . . . .  	0054	0005
  CD_TYPE  . . . . . . . . . . .  	0000
  CD_END . . . . . . . . . . . .  	0002
  CD_TEXT  . . . . . . . . . . .  	0004
  CD_RESV  . . . . . . . . . . .  	0047
  CD_FSDA  . . . . . . . . . . .  	004C
CONTINFO . . . . . . . . . . . .  	0034	000F
  CI_SEARCH_FN . . . . . . . . .  	0000
  CI_SEARCH_FN_EXT . . . . . . .  	0008
  CI_SEARCH_ATTR . . . . . . . .  	000B
  CI_FSDA  . . . . . . . . . . .  	000C
  CI_FOUND_FN  . . . . . . . . .  	0014
  CI_FOUND_FN_EXT  . . . . . . .  	001C
  CI_FOUND_ATTRL . . . . . . . .  	001F
  CI_CP  . . . . . . . . . . . .  	0020
  CI_RESV1 . . . . . . . . . . .  	0022
  CI_FOUND_ATTRH . . . . . . . .  	0024
  CI_RESV2 . . . . . . . . . . .  	0025
  CI_FILE_TIME . . . . . . . . .  	002A
  CI_FILE_DATE . . . . . . . . .  	002C
  CI_FSWORD  . . . . . . . . . .  	002E
  CI_FILE_SIZE . . . . . . . . .  	0030
CURDIR_LIST  . . . . . . . . . .  	0058	000A
  CURDIR_TEXT  . . . . . . . . .  	0000
  CURDIR_FLAGS . . . . . . . . .  	0043
  CURDIR_DEVPTR  . . . . . . . .  	0045
  CURDIR_ID  . . . . . . . . . .  	0049
  CURDIR_USER_WORD . . . . . . .  	004D
  CURDIR_END . . . . . . . . . .  	004F
  CURDIR_TYPE  . . . . . . . . .  	0051
  CURDIR_IFS_HDR . . . . . . . .  	0052
  CURDIR_FSDA  . . . . . . . . .  	0056
DEV_OPER_BUFFER  . . . . . . . .  	0002	0002
  OPER_FUNC  . . . . . . . . . .  	0000
  TRUNC_FLAG . . . . . . . . . .  	0001
DFL  . . . . . . . . . . . . . .  	0012	0003
  DFL_TYPE . . . . . . . . . . .  	0000
  DFL_DEV_NAME . . . . . . . . .  	0002
  DFL_FSDA . . . . . . . . . . .  	000A
DFLL_LIST  . . . . . . . . . . .  	001E	0008
  DFLL_FLAGS . . . . . . . . . .  	0000
  DFLL_TYPE  . . . . . . . . . .  	0001
  DFLL_DEV_NAME  . . . . . . . .  	0002
  DFLL_USER_WORD . . . . . . . .  	000A
  DFLL_ALIAS_INDEX . . . . . . .  	000C
  DFLL_IFS_HDR . . . . . . . . .  	000E
  DFLL_FSDA  . . . . . . . . . .  	0012
  DFLL_DEVPTR  . . . . . . . . .  	001A
DIR_ENTRY  . . . . . . . . . . .  	0020	000B
  DIR_NAME . . . . . . . . . . .  	0000
  DIR_ATTR . . . . . . . . . . .  	000B
  DIR_CODEPG . . . . . . . . . .  	000C
  DIR_EXTCLUSTER . . . . . . . .  	000E
  DIR_ATTR2  . . . . . . . . . .  	0010
  DIR_PAD  . . . . . . . . . . .  	0011
  DIR_TIME . . . . . . . . . . .  	0016
  DIR_DATE . . . . . . . . . . .  	0018
  DIR_FIRST  . . . . . . . . . .  	001A
  DIR_SIZE_L . . . . . . . . . .  	001C
  DIR_SIZE_H . . . . . . . . . .  	001E
DOS_VALUE_BUFFER . . . . . . . .  	0010	0008
  VAL_BUF_SIZE . . . . . . . . .  	0000
  VAL_BUF_FILES  . . . . . . . .  	0002
  VAL_BUF_FCBS . . . . . . . . .  	0004
  VAL_BUF_BUFS . . . . . . . . .  	0008
  VAL_BUF_LDRV . . . . . . . . .  	000C
  VAL_BUF_SSZ  . . . . . . . . .  	000E
DPB  . . . . . . . . . . . . . .  	0021	0012
  DPB_DRIVE  . . . . . . . . . .  	0000
  DPB_UNIT . . . . . . . . . . .  	0001
  DPB_SECTOR_SIZE  . . . . . . .  	0002
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-3


  DPB_CLUSTER_MASK . . . . . . .  	0004
  DPB_CLUSTER_SHIFT  . . . . . .  	0005
  DPB_FIRST_FAT  . . . . . . . .  	0006
  DPB_FAT_COUNT  . . . . . . . .  	0008
  DPB_ROOT_ENTRIES . . . . . . .  	0009
  DPB_FIRST_SECTOR . . . . . . .  	000B
  DPB_MAX_CLUSTER  . . . . . . .  	000D
  DPB_FAT_SIZE . . . . . . . . .  	000F
  DPB_DIR_SECTOR . . . . . . . .  	0011
  DPB_DRIVER_ADDR  . . . . . . .  	0013
  DPB_MEDIA  . . . . . . . . . .  	0017
  DPB_FIRST_ACCESS . . . . . . .  	0018
  DPB_NEXT_DPB . . . . . . . . .  	0019
  DPB_NEXT_FREE  . . . . . . . .  	001D
  DPB_FREE_CNT . . . . . . . . .  	001F
EXEC0  . . . . . . . . . . . . .  	000E	0004
  EXEC0_ENVIRON  . . . . . . . .  	0000
  EXEC0_COM_LINE . . . . . . . .  	0002
  EXEC0_5C_FCB . . . . . . . . .  	0006
  EXEC0_6C_FCB . . . . . . . . .  	000A
EXEC1  . . . . . . . . . . . . .  	0016	0008
  EXEC1_ENVIRON  . . . . . . . .  	0000
  EXEC1_COM_LINE . . . . . . . .  	0002
  EXEC1_5C_FCB . . . . . . . . .  	0006
  EXEC1_6C_FCB . . . . . . . . .  	000A
  EXEC1_SP . . . . . . . . . . .  	000E
  EXEC1_SS . . . . . . . . . . .  	0010
  EXEC1_IP . . . . . . . . . . .  	0012
  EXEC1_CS . . . . . . . . . . .  	0014
EXEC3  . . . . . . . . . . . . .  	0004	0002
  EXEC3_LOAD_ADDR  . . . . . . .  	0000
  EXEC3_RELOC_FAC  . . . . . . .  	0002
EXE_FILE . . . . . . . . . . . .  	0020	000F
  EXE_SIGNATURE  . . . . . . . .  	0000
  EXE_LEN_MOD_512  . . . . . . .  	0002
  EXE_PAGES  . . . . . . . . . .  	0004
  EXE_RLE_COUNT  . . . . . . . .  	0006
  EXE_PAR_DIR  . . . . . . . . .  	0008
  EXE_MIN_BSS  . . . . . . . . .  	000A
  EXE_MAX_BSS  . . . . . . . . .  	000C
  EXE_SS . . . . . . . . . . . .  	000E
  EXE_SP . . . . . . . . . . . .  	0010
  EXE_CHKSUM . . . . . . . . . .  	0012
  EXE_IP . . . . . . . . . . . .  	0014
  EXE_CS . . . . . . . . . . . .  	0016
  EXE_RLE_TABLE  . . . . . . . .  	0018
  EXE_IOV  . . . . . . . . . . .  	001A
  EXE_SYM_TAB  . . . . . . . . .  	001C
EXT_OPEN_PARM  . . . . . . . . .  	0006	0002
  EXT_SET_LIST . . . . . . . . .  	0000
  EXT_NUM_OF_PARM  . . . . . . .  	0004
FIND_BUF . . . . . . . . . . . .  	002B	000C
  FIND_BUF_DRIVE . . . . . . . .  	0000
  FIND_BUF_NAME  . . . . . . . .  	0001
  FIND_BUF_SATTR . . . . . . . .  	000C
  FIND_BUF_LASTENT . . . . . . .  	000D
  FIND_BUF_DIRSTART  . . . . . .  	000F
  FIND_BUF_NETID . . . . . . . .  	0011
  FIND_BUF_ATTR  . . . . . . . .  	0015
  FIND_BUF_TIME  . . . . . . . .  	0016
  FIND_BUF_DATE  . . . . . . . .  	0018
  FIND_BUF_SIZE_L  . . . . . . .  	001A
  FIND_BUF_SIZE_H  . . . . . . .  	001C
  FIND_BUF_PNAME . . . . . . . .  	001E
IFSHEADER  . . . . . . . . . . .  	0016	0006
  IFS_NEXT . . . . . . . . . . .  	0000
  IFS_NAME . . . . . . . . . . .  	0004
  IFS_ATTRIBUTE  . . . . . . . .  	000C
  IFS_VERSION  . . . . . . . . .  	000E
  IFS_DOSCALL@ . . . . . . . . .  	0010
  IFS_CALL@  . . . . . . . . . .  	0014
IFSRH  . . . . . . . . . . . . .  	0048	0006
  IFSR_LENGTH  . . . . . . . . .  	0000
  IFSR_FUNCTION  . . . . . . . .  	0002
  IFSR_RETCODE . . . . . . . . .  	0003
  IFSR_RETCLASS  . . . . . . . .  	0005
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-4


  IFSR_RESV1 . . . . . . . . . .  	0006
  IFSR_FCN_PARMS . . . . . . . .  	0016
INTERNAT_BLOCK . . . . . . . . .  	0018	0015
  DATE_TIM_FORMAT  . . . . . . .  	0000
  CURRENCY_SYM . . . . . . . . .  	0002
  THOUS_SEP  . . . . . . . . . .  	0007
  DECIMAL_SEP  . . . . . . . . .  	0009
  DATE_SEP . . . . . . . . . . .  	000B
  TIME_SEP . . . . . . . . . . .  	000D
  BIT_FIELD  . . . . . . . . . .  	000F
  CURRENCY_CENTS . . . . . . . .  	0010
  TIME_24  . . . . . . . . . . .  	0011
  MAP_CALL . . . . . . . . . . .  	0012
  DATA_SEP . . . . . . . . . . .  	0016
IOCTL_REQ  . . . . . . . . . . .  	0017	0006
  MAJORFUNCTION  . . . . . . . .  	000D
  MINORFUNCTION  . . . . . . . .  	000E
  REG_SI . . . . . . . . . . . .  	000F
  REG_DI . . . . . . . . . . . .  	0011
  GENERICIOCTL_PACKET  . . . . .  	0013
MEDIA_ID_INFO  . . . . . . . . .  	0019	0004
  MEDIA_LEVEL  . . . . . . . . .  	0000
  MEDIA_SERIAL . . . . . . . . .  	0002
  MEDIA_LABEL  . . . . . . . . .  	0006
  MEDIA_SYSTEM . . . . . . . . .  	0011
PACKET . . . . . . . . . . . . .  	0004	0002
  PACKLEN  . . . . . . . . . . .  	0000
  PACKCPID . . . . . . . . . . .  	0002
PROCESS_DATA_BLOCK . . . . . . .  	005C	0011
  PDB_EXIT_CALL  . . . . . . . .  	0000
  PDB_BLOCK_LEN  . . . . . . . .  	0002
  PDB_CPM_CALL . . . . . . . . .  	0005
  PDB_EXIT . . . . . . . . . . .  	000A
  PDB_CTRL_C . . . . . . . . . .  	000E
  PDB_FATAL_ABORT  . . . . . . .  	0012
  PDB_PARENT_PID . . . . . . . .  	0016
  PDB_JFN_TABLE  . . . . . . . .  	0018
  PDB_ENVIRON  . . . . . . . . .  	002C
  PDB_USER_STACK . . . . . . . .  	002E
  PDB_JFN_LENGTH . . . . . . . .  	0032
  PDB_JFN_POINTER  . . . . . . .  	0034
  PDB_NEXT_PDB . . . . . . . . .  	0038
  PDB_PAD1 . . . . . . . . . . .  	003C
  PDB_CALL_SYSTEM  . . . . . . .  	0050
  PDB_PAD2 . . . . . . . . . . .  	0055
SF . . . . . . . . . . . . . . .  	0008	0003
  SFLINK . . . . . . . . . . . .  	0000
  SFCOUNT  . . . . . . . . . . .  	0004
  SFTABLE  . . . . . . . . . . .  	0006
SFF  . . . . . . . . . . . . . .  	003D	0011
  SFF_TYPE . . . . . . . . . . .  	0000
  SFF_FLAGS  . . . . . . . . . .  	0002
  SFF_MODE . . . . . . . . . . .  	0004
  SFF_RESV1  . . . . . . . . . .  	0006
  SFF_ATTR . . . . . . . . . . .  	0008
  SFF_UID  . . . . . . . . . . .  	000A
  SFF_PID  . . . . . . . . . . .  	000C
  SFF_SIZE . . . . . . . . . . .  	000E
  SFF_POSITION . . . . . . . . .  	0012
  SFF_TIME . . . . . . . . . . .  	0016
  SFF_DATE . . . . . . . . . . .  	0018
  SFF_NAME . . . . . . . . . . .  	001A
  SFF_EXT  . . . . . . . . . . .  	0022
  SFF_RESV2  . . . . . . . . . .  	0025
  SFF_SF_ID  . . . . . . . . . .  	0027
  SFF_RESV . . . . . . . . . . .  	0029
  SFF_FSDA . . . . . . . . . . .  	0035
SF_ENTRY . . . . . . . . . . . .  	003B	0014
  SF_REF_COUNT . . . . . . . . .  	0000
  SF_MODE  . . . . . . . . . . .  	0002
  SF_ATTR  . . . . . . . . . . .  	0004
  SF_FLAGS . . . . . . . . . . .  	0005
  SF_DEVPTR  . . . . . . . . . .  	0007
  SF_FIRCLUS . . . . . . . . . .  	000B
  SF_TIME  . . . . . . . . . . .  	000D
  SF_DATE  . . . . . . . . . . .  	000F
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-5


  SF_SIZE  . . . . . . . . . . .  	0011
  SF_POSITION  . . . . . . . . .  	0015
  SF_CLUSPOS . . . . . . . . . .  	0019
  SF_DIRSEC  . . . . . . . . . .  	001B
  SF_DIRPOS  . . . . . . . . . .  	001F
  SF_NAME  . . . . . . . . . . .  	0020
  SF_CHAIN . . . . . . . . . . .  	002B
  SF_UID . . . . . . . . . . . .  	002F
  SF_PID . . . . . . . . . . . .  	0031
  SF_MFT . . . . . . . . . . . .  	0033
  SF_LSTCLUS . . . . . . . . . .  	0035
  SF_IFS_HDR . . . . . . . . . .  	0037
SRHEAD . . . . . . . . . . . . .  	000D	0005
  REQLEN . . . . . . . . . . . .  	0000
  REQUNIT  . . . . . . . . . . .  	0001
  REQFUNC  . . . . . . . . . . .  	0002
  REQSTAT  . . . . . . . . . . .  	0003
SYMBOL_ENTRY . . . . . . . . . .  	0106	0004
  SYM_VALUE  . . . . . . . . . .  	0000
  SYM_TYPE . . . . . . . . . . .  	0004
  SYM_LEN  . . . . . . . . . . .  	0006
  SYM_NAME . . . . . . . . . . .  	0007
SYSDEV . . . . . . . . . . . . .  	0012	0005
  SDEVNEXT . . . . . . . . . . .  	0000
  SDEVATT  . . . . . . . . . . .  	0004
  SDEVSTRAT  . . . . . . . . . .  	0006
  SDEVINT  . . . . . . . . . . .  	0008
  SDEVNAME . . . . . . . . . . .  	000A
SYSINITVARS  . . . . . . . . . .  	0047	0018
  SYSI_DPB . . . . . . . . . . .  	0000
  SYSI_SFT . . . . . . . . . . .  	0004
  SYSI_CLOCK . . . . . . . . . .  	0008
  SYSI_CON . . . . . . . . . . .  	000C
  SYSI_MAXSEC  . . . . . . . . .  	0010
  SYSI_BUF . . . . . . . . . . .  	0012
  SYSI_CDS . . . . . . . . . . .  	0016
  SYSI_FCB . . . . . . . . . . .  	001A
  SYSI_KEEP  . . . . . . . . . .  	001E
  SYSI_NUMIO . . . . . . . . . .  	0020
  SYSI_NCDS  . . . . . . . . . .  	0021
  SYSI_DEV . . . . . . . . . . .  	0022
  SYSI_ATTR  . . . . . . . . . .  	0026
  SYSI_STRAT . . . . . . . . . .  	0028
  SYSI_INTER . . . . . . . . . .  	002A
  SYSI_NAME  . . . . . . . . . .  	002C
  SYSI_SPLICE  . . . . . . . . .  	0034
  SYSI_IBMDOS_SIZE . . . . . . .  	0035
  SYSI_IFS_DOSCALL@  . . . . . .  	0037
  SYSI_IFS . . . . . . . . . . .  	003B
  SYSI_BUFFERS . . . . . . . . .  	003F
  SYSI_BOOT_DRIVE  . . . . . . .  	0043
  SYSI_DWMOVE  . . . . . . . . .  	0044
  SYSI_EXT_MEM . . . . . . . . .  	0045
SYSINITVARS_EXT  . . . . . . . .  	0008	0002
  SYSI_INITVARS  . . . . . . . .  	0000
  SYSI_COUNTRY_TAB . . . . . . .  	0004
SYS_FCB  . . . . . . . . . . . .  	0025	000C
  FCB_DRIVE  . . . . . . . . . .  	0000
  FCB_NAME . . . . . . . . . . .  	0001
  FCB_EXT  . . . . . . . . . . .  	0009
  FCB_EXTENT . . . . . . . . . .  	000C
  FCB_RECSIZ . . . . . . . . . .  	000E
  FCB_FILSIZ . . . . . . . . . .  	0010
  FCB_DRVBP  . . . . . . . . . .  	0012
  FCB_FDATE  . . . . . . . . . .  	0014
  FCB_FTIME  . . . . . . . . . .  	0016
  FCB_RESERVED . . . . . . . . .  	0018
  FCB_NR . . . . . . . . . . . .  	0020
  FCB_RR . . . . . . . . . . . .  	0021
USER_ENVIRON . . . . . . . . . .  	0018	000C
  USER_AX  . . . . . . . . . . .  	0000
  USER_BX  . . . . . . . . . . .  	0002
  USER_CX  . . . . . . . . . . .  	0004
  USER_DX  . . . . . . . . . . .  	0006
  USER_SI  . . . . . . . . . . .  	0008
  USER_DI  . . . . . . . . . . .  	000A
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-6


  USER_BP  . . . . . . . . . . .  	000C
  USER_DS  . . . . . . . . . . .  	000E
  USER_ES  . . . . . . . . . . .  	0010
  USER_IP  . . . . . . . . . . .  	0012
  USER_CS  . . . . . . . . . . .  	0014
  USER_F . . . . . . . . . . . .  	0016

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DOSGROUP . . . . . . . . . . . .  	GROUP
  START  . . . . . . . . . . . .  	0000	BYTE	PUBLIC	'START'
  CONSTANTS  . . . . . . . . . .  	0000	WORD	PUBLIC	'CONST'
  DATA . . . . . . . . . . . . .  	0000	WORD	PUBLIC	'DATA'
  TABLE  . . . . . . . . . . . .  	0000	BYTE	PUBLIC	'TABLE'
  CODE . . . . . . . . . . . . .  	0000	BYTE	PUBLIC	'CODE'
  LAST . . . . . . . . . . . . .  	0000	PARA	PUBLIC	'LAST'
IFSSEG . . . . . . . . . . . . .  	0A1C	BYTE	PUBLIC	'IFSSEG'

Symbols:            

                N a m e         	Type	 Value	 Attr

ABORT  . . . . . . . . . . . . .  	NUMBER	0000	
ACCESS_MASK  . . . . . . . . . .  	NUMBER	000F	
ACTION_CREATED_OPENED  . . . . .  	NUMBER	0002	
ACTION_OPENED  . . . . . . . . .  	NUMBER	0001	
ACTION_REPLACED_OPENED . . . . .  	NUMBER	0003	
ACTIVE_PROCESS_INFO  . . . . . .  	NUMBER	0001	
ADDR_INT_ABORT . . . . . . . . .  	NUMBER	0080	
ADDR_INT_COMMAND . . . . . . . .  	NUMBER	0084	
ADDR_INT_CTRL_C  . . . . . . . .  	NUMBER	008C	
ADDR_INT_DISK_READ . . . . . . .  	NUMBER	0094	
ADDR_INT_DISK_WRITE  . . . . . .  	NUMBER	0098	
ADDR_INT_FASTCON . . . . . . . .  	NUMBER	00A4	
ADDR_INT_FATAL_ABORT . . . . . .  	NUMBER	0090	
ADDR_INT_IBM . . . . . . . . . .  	NUMBER	00A8	
ADDR_INT_KEEP_PROCESS  . . . . .  	NUMBER	009C	
ADDR_INT_SPOOLER . . . . . . . .  	NUMBER	00A0	
ADDR_INT_TERMINATE . . . . . . .  	NUMBER	0088	
ALLOC  . . . . . . . . . . . . .  	NUMBER	0048	
ALLOCOPER  . . . . . . . . . . .  	NUMBER	0058	
ALLOWED  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
ALLOWED_FAIL . . . . . . . . . .  	NUMBER	0008	
ALLOWED_IGNORE . . . . . . . . .  	NUMBER	0020	
ALLOWED_RETRY  . . . . . . . . .  	NUMBER	0010	
ALTVECT  . . . . . . . . . . . .  	ALIAS	 FALSE		
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
ARENA_OWNER_SYSTEM . . . . . . .  	NUMBER	0000	
ARENA_SIGNATURE_END  . . . . . .  	NUMBER	005A	
ARENA_SIGNATURE_NORMAL . . . . .  	NUMBER	004D	
ASSIGNOPER . . . . . . . . . . .  	NUMBER	005F	
ATTR_ALL . . . . . . . . . . . .  	NUMBER	0016	
ATTR_ARCHIVE . . . . . . . . . .  	NUMBER	0020	
ATTR_CHANGEABLE  . . . . . . . .  	NUMBER	0027	
ATTR_DEVICE  . . . . . . . . . .  	NUMBER	0040	
ATTR_DIRECTORY . . . . . . . . .  	NUMBER	0010	
ATTR_HIDDEN  . . . . . . . . . .  	NUMBER	0002	
ATTR_IGNORE  . . . . . . . . . .  	NUMBER	0061	
ATTR_READ_ONLY . . . . . . . . .  	NUMBER	0001	
ATTR_SYSTEM  . . . . . . . . . .  	NUMBER	0004	
ATTR_VOLUME_ID . . . . . . . . .  	NUMBER	0008	
AUTO_COMMIT_WRITE  . . . . . . .  	NUMBER	4000	

BLOCK_GENERIC  . . . . . . . . .  	NUMBER	000D	
BREAK_INFORMATION  . . . . . . .  	NUMBER	0003	
BUFFERFLAG . . . . . . . . . . .  	NUMBER	FFFF	
BUFINSIZ . . . . . . . . . . . .  	NUMBER	0014	
BUF_DIRTY  . . . . . . . . . . .  	NUMBER	0040	
BUF_DPB  . . . . . . . . . . . .  		000D	
BUF_FILL . . . . . . . . . . . .  		0011	
BUF_FLAGS  . . . . . . . . . . .  		0005	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-7


BUF_FREE . . . . . . . . . . . .  	NUMBER	00FF	
BUF_ID . . . . . . . . . . . . .  		0004	
BUF_ISDATA . . . . . . . . . . .  	NUMBER	0008	
BUF_ISDIR  . . . . . . . . . . .  	NUMBER	0004	
BUF_ISFAT  . . . . . . . . . . .  	NUMBER	0002	
BUF_ISNET  . . . . . . . . . . .  	NUMBER	0080	
BUF_NETID  . . . . . . . . . . .  	ALIAS	 BUFINSIZ		
BUF_NEXT . . . . . . . . . . . .  		0000	
BUF_OFFSET . . . . . . . . . . .  	DWORD	0006	
BUF_PREV . . . . . . . . . . . .  		0002	
BUF_RESERVED . . . . . . . . . .  		0013	
BUF_SECTOR . . . . . . . . . . .  		0006	
BUF_SNBUF  . . . . . . . . . . .  	NUMBER	0010	
BUF_TYPE_0 . . . . . . . . . . .  	NUMBER	00F1	
BUF_VISIT  . . . . . . . . . . .  	NUMBER	0020	
BUF_WRTCNT . . . . . . . . . . .  		000A	
BUF_WRTCNTINC  . . . . . . . . .  		000B	

CALL_IFS . . . . . . . . . . . .  	N PROC	01DF	IFSSEG	Global	Length = 01A9
CALL_INTERRUPT_ROUTINE . . . . .  	NUMBER	0001	
CANCEL_ATTACH  . . . . . . . . .  	NUMBER	0004	
CARGS  . . . . . . . . . . . . .  	NUMBER	0000	
CATEGORY_FS  . . . . . . . . . .  	NUMBER	0000	
CATEGORY_PRINTER . . . . . . . .  	NUMBER	0005	
CATEGORY_REDIR . . . . . . . . .  	NUMBER	0001	
CBTYPE_CD  . . . . . . . . . . .  	NUMBER	0001	
CBTYPE_DF  . . . . . . . . . . .  	NUMBER	0002	
CBTYPE_DUMMYCD . . . . . . . . .  	NUMBER	0003	
CBTYPE_SFF . . . . . . . . . . .  	NUMBER	0000	
CCD_10 . . . . . . . . . . . . .  	L NEAR	0685	IFSSEG
CCD_20 . . . . . . . . . . . . .  	L NEAR	06BD	IFSSEG
CD1  . . . . . . . . . . . . . .  	V WORD	0000	IFSSEG	External
CDE_100  . . . . . . . . . . . .  	L NEAR	03E9	IFSSEG
CDE_120  . . . . . . . . . . . .  	L NEAR	03F3	IFSSEG
CDE_140  . . . . . . . . . . . .  	L NEAR	040B	IFSSEG
CDE_20 . . . . . . . . . . . . .  	L NEAR	039F	IFSSEG
CDE_30 . . . . . . . . . . . . .  	L NEAR	03A9	IFSSEG
CDE_40 . . . . . . . . . . . . .  	L NEAR	03B1	IFSSEG
CDE_60 . . . . . . . . . . . . .  	L NEAR	03C3	IFSSEG
CDE_70 . . . . . . . . . . . . .  	L NEAR	03C8	IFSSEG
CDE_73 . . . . . . . . . . . . .  	L NEAR	03E1	IFSSEG
CDE_76 . . . . . . . . . . . . .  	L NEAR	03E3	IFSSEG
CDE_80 . . . . . . . . . . . . .  	L NEAR	03E6	IFSSEG
CDSADDR  . . . . . . . . . . . .  	V DWORD	0000	DATA	External
CDSCOUNT . . . . . . . . . . . .  	V BYTE	0000	DATA	External
CDS_TO_CD  . . . . . . . . . . .  	N PROC	066E	IFSSEG	Global	Length = 0069
CD_20  . . . . . . . . . . . . .  	L NEAR	0877	IFSSEG
CD_TO_CDS  . . . . . . . . . . .  	N PROC	06D7	IFSSEG	Global	Length = 0035
CHARDEV  . . . . . . . . . . . .  	NUMBER	8000	
CHAR_GENERIC . . . . . . . . . .  	NUMBER	000C	
CHAR_OPER  . . . . . . . . . . .  	NUMBER	0037	
CHDIR  . . . . . . . . . . . . .  	NUMBER	003B	
CHECK_IFS_ATTRIBUTE  . . . . . .  	N PROC	0A0D	IFSSEG	Global	Length = 000E
CHECK_IFS_SUPPORT  . . . . . . .  	N PROC	0A1B	IFSSEG	Global	Length = 0001
CHECK_REAL_DEVICE  . . . . . . .  	N PROC	089A	IFSSEG	Global	Length = 0068
CHECK_REMOVABLE  . . . . . . . .  	NUMBER	4408	
CHECK_SEQ  . . . . . . . . . . .  	N PROC	099A	IFSSEG	Global	Length = 001C
CHMOD  . . . . . . . . . . . . .  	NUMBER	0043	
CI_05  . . . . . . . . . . . . .  	L NEAR	01F2	IFSSEG
CI_10  . . . . . . . . . . . . .  	L NEAR	01F5	IFSSEG
CI_100 . . . . . . . . . . . . .  	L NEAR	0379	IFSSEG
CI_120 . . . . . . . . . . . . .  	L NEAR	0385	IFSSEG
CI_15  . . . . . . . . . . . . .  	L NEAR	0214	IFSSEG
CI_17  . . . . . . . . . . . . .  	L NEAR	0217	IFSSEG
CI_20  . . . . . . . . . . . . .  	L NEAR	0222	IFSSEG
CI_22  . . . . . . . . . . . . .  	L NEAR	022D	IFSSEG
CI_23  . . . . . . . . . . . . .  	L NEAR	0234	IFSSEG
CI_25  . . . . . . . . . . . . .  	L NEAR	025D	IFSSEG
CI_26  . . . . . . . . . . . . .  	L NEAR	0283	IFSSEG
CI_27  . . . . . . . . . . . . .  	L NEAR	02B0	IFSSEG
CI_30  . . . . . . . . . . . . .  	L NEAR	02B6	IFSSEG
CI_32  . . . . . . . . . . . . .  	L NEAR	02E0	IFSSEG
CI_34  . . . . . . . . . . . . .  	L NEAR	02F3	IFSSEG
CI_35  . . . . . . . . . . . . .  	L NEAR	02FE	IFSSEG
CI_36  . . . . . . . . . . . . .  	L NEAR	0309	IFSSEG
CI_37  . . . . . . . . . . . . .  	L NEAR	030F	IFSSEG
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-8


CI_38  . . . . . . . . . . . . .  	L NEAR	031D	IFSSEG
CI_39  . . . . . . . . . . . . .  	L NEAR	033A	IFSSEG
CI_39_20 . . . . . . . . . . . .  	L NEAR	033F	IFSSEG
CI_40  . . . . . . . . . . . . .  	L NEAR	034B	IFSSEG
CI_80  . . . . . . . . . . . . .  	L NEAR	034D	IFSSEG
CLEAN_CX . . . . . . . . . . . .  	L NEAR	084D	IFSSEG
CLOSE  . . . . . . . . . . . . .  	NUMBER	003E	
CLOSE_SPOOL_FILES  . . . . . . .  	NUMBER	0009	
CNA_20 . . . . . . . . . . . . .  	L NEAR	098C	IFSSEG
CNA_40 . . . . . . . . . . . . .  	L NEAR	0994	IFSSEG
COMMIT . . . . . . . . . . . . .  	NUMBER	0068	
COMMON_ERR_2 . . . . . . . . . .  	NUMBER	0002	
COMMON_ERR_3 . . . . . . . . . .  	NUMBER	0003	
CONFIG_SYS_VALUES  . . . . . . .  	NUMBER	0005	
CONSIST_DFL  . . . . . . . . . .  	N PROC	0871	IFSSEG	Global	Length = 0011
CONSIST_SFT  . . . . . . . . . .  	N PROC	079B	IFSSEG	Global	Length = 00D6
CONVERT_NAME_ASCIIZ  . . . . . .  	N PROC	0986	IFSSEG	Global	Length = 0014
COUNTRY_INFO . . . . . . . . . .  	NUMBER	0007	
CPSW_INFORMATION . . . . . . . .  	NUMBER	0002	
CRD_100  . . . . . . . . . . . .  	L NEAR	08DA	IFSSEG
CRD_120  . . . . . . . . . . . .  	L NEAR	08FF	IFSSEG
CRD_20 . . . . . . . . . . . . .  	L NEAR	08AF	IFSSEG
CRD_40 . . . . . . . . . . . . .  	L NEAR	08D5	IFSSEG
CREAT  . . . . . . . . . . . . .  	NUMBER	003C	
CREATENEWFILE  . . . . . . . . .  	NUMBER	005B	
CREATETEMPFILE . . . . . . . . .  	NUMBER	005A	
CREATE_DFL_ENTRY . . . . . . . .  	N PROC	0388	IFSSEG	Global	Length = 008C
CREATE_PROCESS_DATA_BLOCK  . . .  	NUMBER	0026	
CRITASSIGN . . . . . . . . . . .  	NUMBER	0008	
CRITDEVICE . . . . . . . . . . .  	NUMBER	0002	
CRITDISK . . . . . . . . . . . .  	NUMBER	0001	
CRITIFS  . . . . . . . . . . . .  	NUMBER	0006	
CRITMEM  . . . . . . . . . . . .  	NUMBER	0001	
CRITNET  . . . . . . . . . . . .  	NUMBER	0005	
CRITSFT  . . . . . . . . . . . .  	NUMBER	0001	
CRITSHARE  . . . . . . . . . . .  	NUMBER	0001	
CRIT_MSG_TYPE_1  . . . . . . . .  	NUMBER	0001	
CS_10  . . . . . . . . . . . . .  	L NEAR	09B2	IFSSEG
CS_1000  . . . . . . . . . . . .  	L NEAR	09B3	IFSSEG
CS_20  . . . . . . . . . . . . .  	L NEAR	07D6	IFSSEG
CTLFUNC_DEVCLOSE . . . . . . . .  	NUMBER	0005	
CTLFUNC_DEVECHOCHECK . . . . . .  	NUMBER	0003	
CTLFUNC_DEVOPER  . . . . . . . .  	NUMBER	0006	
CTLFUNC_GET_UNC_ITEM . . . . . .  	NUMBER	0004	
CTLFUNC_PRINTER_GET_FLAGS  . . .  	NUMBER	0002	
CTLFUNC_PRINTER_GET_STRING . . .  	NUMBER	0001	
CTLFUNC_PRINTER_SET_FLAGS  . . .  	NUMBER	0022	
CTLFUNC_PRINTER_SET_STRING . . .  	NUMBER	0021	
CTLFUNC_PRINT_OFF  . . . . . . .  	NUMBER	0007	
CTLFUNC_PRINT_ON . . . . . . . .  	NUMBER	0027	
CTLFUNC_QUERY_PREPLIST . . . . .  	NUMBER	006B	
CTLFUNC_QUERY_SELECTED . . . . .  	NUMBER	006A	
CTLFUNC_SELECT . . . . . . . . .  	NUMBER	004A	
CTRL_BREAK_FLAG  . . . . . . . .  	NUMBER	0200	
CURDIRLEN  . . . . . . . . . . .  	NUMBER	0058	
CURDIR_INUSE . . . . . . . . . .  	NUMBER	4000	
CURDIR_ISIFS . . . . . . . . . .  	NUMBER	8000	
CURDIR_ISNET . . . . . . . . . .  	NUMBER	8000	
CURDIR_LOCAL . . . . . . . . . .  	NUMBER	1000	
CURDIR_NETID . . . . . . . . . .  	DWORD	0049	
CURDIR_SPLICE  . . . . . . . . .  	NUMBER	2000	
CurrentPDB . . . . . . . . . . .  	V WORD	0000	DATA	External
CURRENT_DIR  . . . . . . . . . .  	NUMBER	0047	
C_BS . . . . . . . . . . . . . .  	NUMBER	0008	
C_CR . . . . . . . . . . . . . .  	NUMBER	000D	
C_DEL  . . . . . . . . . . . . .  	NUMBER	007F	
C_ETB  . . . . . . . . . . . . .  	NUMBER	0017	
C_ETX  . . . . . . . . . . . . .  	NUMBER	0003	
C_HT . . . . . . . . . . . . . .  	NUMBER	0009	
C_LF . . . . . . . . . . . . . .  	NUMBER	000A	
C_NAK  . . . . . . . . . . . . .  	NUMBER	0015	

DBCS . . . . . . . . . . . . . .  	NUMBER	0000	
DBCS_VOLID . . . . . . . . . . .  	NUMBER	0080	
DBCS_VOLID2  . . . . . . . . . .  	NUMBER	0100	
DBPBHL . . . . . . . . . . . . .  	NUMBER	0016	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-9


DDF_20 . . . . . . . . . . . . .  	L NEAR	075A	IFSSEG
DDKEY  . . . . . . . . . . . . .  	NUMBER	0400	
DEALLOC  . . . . . . . . . . . .  	NUMBER	0049	
DEBUG  . . . . . . . . . . . . .  	NUMBER	0000	
DEFINE_MACRO . . . . . . . . . .  	NUMBER	0003	
DEFKEEPVAL . . . . . . . . . . .  	NUMBER	0000	
DEFNUMFCB  . . . . . . . . . . .  	NUMBER	0004	
DELETE_DFL_ENTRY . . . . . . . .  	N PROC	0414	IFSSEG	Global	Length = 000B
DEV320 . . . . . . . . . . . . .  	NUMBER	0040	
DEVBPB . . . . . . . . . . . . .  	NUMBER	0002	
DEVCLS . . . . . . . . . . . . .  	NUMBER	000E	
DEVGETOWN  . . . . . . . . . . .  	NUMBER	0017	
DEVICE2EXTERR  . . . . . . . . .  	L NEAR	0000	IFSSEG	External
DEVICE_CB@_OFFSET  . . . . . . .  	V WORD	0000	IFSSEG	External
DEVICE_MACRO . . . . . . . . . .  	NUMBER	0003	
DEVICE_NOT_ATTACHED  . . . . . .  	NUMBER	000F	
DEVID_BLOCK_DEV  . . . . . . . .  	NUMBER	001F	
DEVID_DEVICE . . . . . . . . . .  	NUMBER	0080	
DEVID_DEVICE_CLOCK . . . . . . .  	NUMBER	0008	
DEVID_DEVICE_CON_IN  . . . . . .  	NUMBER	0001	
DEVID_DEVICE_CON_OUT . . . . . .  	NUMBER	0002	
DEVID_DEVICE_EOF . . . . . . . .  	NUMBER	0040	
DEVID_DEVICE_NULL  . . . . . . .  	NUMBER	0004	
DEVID_DEVICE_RAW . . . . . . . .  	NUMBER	0020	
DEVID_DEVICE_SPECIAL . . . . . .  	NUMBER	0010	
DEVID_EOF  . . . . . . . . . . .  	NUMBER	0040	
DEVID_FILE_CLEAN . . . . . . . .  	NUMBER	0040	
DEVID_FILE_MASK_DRIVE  . . . . .  	NUMBER	003F	
DEVID_ISCIN  . . . . . . . . . .  	NUMBER	0001	
DEVID_ISCLK  . . . . . . . . . .  	NUMBER	0008	
DEVID_ISCOT  . . . . . . . . . .  	NUMBER	0002	
DEVID_ISDEV  . . . . . . . . . .  	NUMBER	0080	
DEVID_ISNUL  . . . . . . . . . .  	NUMBER	0004	
DEVID_RAW  . . . . . . . . . . .  	NUMBER	0020	
DEVID_SPECIAL  . . . . . . . . .  	NUMBER	0010	
DEVIFL . . . . . . . . . . . . .  	NUMBER	0007	
DEVINIT  . . . . . . . . . . . .  	NUMBER	0000	
DEVIOCTL . . . . . . . . . . . .  	NUMBER	4000	
DEVIST . . . . . . . . . . . . .  	NUMBER	0006	
DEVMDCH  . . . . . . . . . . . .  	NUMBER	0001	
DEVOFL . . . . . . . . . . . . .  	NUMBER	000B	
DEVOPCL  . . . . . . . . . . . .  	NUMBER	0800	
DEVOPN . . . . . . . . . . . . .  	NUMBER	000D	
DEVOST . . . . . . . . . . . . .  	NUMBER	000A	
DEVOUT . . . . . . . . . . . . .  	NUMBER	0010	
DEVOUTL  . . . . . . . . . . . .  	ALIAS	 DEVWRT		
DEVRD  . . . . . . . . . . . . .  	NUMBER	0004	
DEVRDIOCTL . . . . . . . . . . .  	NUMBER	0003	
DEVRDND  . . . . . . . . . . . .  	NUMBER	0005	
DEVRMD . . . . . . . . . . . . .  	NUMBER	000F	
DEVSETOWN  . . . . . . . . . . .  	NUMBER	0018	
DEVTYP . . . . . . . . . . . . .  	NUMBER	8000	
DEVWRIOCTL . . . . . . . . . . .  	NUMBER	000C	
DEVWRT . . . . . . . . . . . . .  	NUMBER	0008	
DEVWRTV  . . . . . . . . . . . .  	NUMBER	0009	
DF1  . . . . . . . . . . . . . .  	V WORD	0000	IFSSEG	External
DFC_20 . . . . . . . . . . . . .  	L NEAR	0181	IFSSEG
DFLAddr  . . . . . . . . . . . .  	V DWORD	0000	IFSSEG	External
DFLCount . . . . . . . . . . . .  	V BYTE	0000	IFSSEG	External
DFLSHL . . . . . . . . . . . . .  	NUMBER	000F	
DFL_DEV_REAL . . . . . . . . . .  	NUMBER	0010	
DFL_INPROG . . . . . . . . . . .  	NUMBER	0080	
DFL_INUSE  . . . . . . . . . . .  	NUMBER	0040	
DFL_MATCH  . . . . . . . . . . .  	N PROC	043C	IFSSEG	Global	Length = 0092
DFL_PAUSED . . . . . . . . . . .  	NUMBER	0020	
DFL_SINGLE_FILE_CHECK  . . . . .  	N PROC	041F	IFSSEG	Global	Length = 001D
DFL_TO_DF  . . . . . . . . . . .  	N PROC	070C	IFSSEG	Global	Length = 0068
DFS_100  . . . . . . . . . . . .  	L NEAR	01AD	IFSSEG
DFS_20 . . . . . . . . . . . . .  	L NEAR	01A2	IFSSEG
DF_TO_DFL  . . . . . . . . . . .  	N PROC	0774	IFSSEG	Global	Length = 0027
DINITHL  . . . . . . . . . . . .  	NUMBER	001A	
DIRSTRLEN  . . . . . . . . . . .  	NUMBER	0043	
DIR_SEARCH_FIRST . . . . . . . .  	NUMBER	0011	
DIR_SEARCH_NEXT  . . . . . . . .  	NUMBER	0012	
DISABLE_EOF_I24  . . . . . . . .  	NUMBER	0040	
DISK_RESET . . . . . . . . . . .  	NUMBER	000D	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-10


DMEDHL . . . . . . . . . . . . .  	NUMBER	000F	
DM_100 . . . . . . . . . . . . .  	L NEAR	0477	IFSSEG
DM_1000  . . . . . . . . . . . .  	L NEAR	04C6	IFSSEG
DM_160 . . . . . . . . . . . . .  	L NEAR	049D	IFSSEG
DM_20  . . . . . . . . . . . . .  	L NEAR	044B	IFSSEG
DM_40  . . . . . . . . . . . . .  	L NEAR	045E	IFSSEG
DM_60  . . . . . . . . . . . . .  	L NEAR	0464	IFSSEG
DM_80  . . . . . . . . . . . . .  	L NEAR	0470	IFSSEG
DM_980 . . . . . . . . . . . . .  	L NEAR	04A4	IFSSEG
DM_990 . . . . . . . . . . . . .  	L NEAR	04B6	IFSSEG
DONE_LOOK_FCB  . . . . . . . . .  	L NEAR	07B8	IFSSEG
DOPCLHL  . . . . . . . . . . . .  	NUMBER	000D	
DOS2NET_DATE . . . . . . . . . .  	NUMBER	0022	
DOS_STRCMP . . . . . . . . . . .  	NUMBER	0024	
DOS_STRCPY . . . . . . . . . . .  	NUMBER	0025	
DPBSIZ . . . . . . . . . . . . .  	NUMBER	0021	
DRDNDHL  . . . . . . . . . . . .  	NUMBER	000E	
DRDWRHL  . . . . . . . . . . . .  	NUMBER	0016	
DRIVE_FROM_CDS . . . . . . . . .  	N PROC	016D	IFSSEG	Global	Length = 0019
DRIVE_FROM_SFT . . . . . . . . .  	N PROC	0186	IFSSEG	Global	Length = 0040
DRIVE_MACRO  . . . . . . . . . .  	NUMBER	0004	
DSFC_20  . . . . . . . . . . . .  	L NEAR	041F	IFSSEG
DSFC_60  . . . . . . . . . . . .  	L NEAR	0436	IFSSEG
DSKSIZ . . . . . . . . . . . . .  	NUMBER	000D	
DSTATHL  . . . . . . . . . . . .  	NUMBER	000D	
DUP_PDB  . . . . . . . . . . . .  	NUMBER	0055	

EcritIFS . . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
EcritNET . . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
ECS_CALL . . . . . . . . . . . .  	NUMBER	0063	
EMS_MAP_BUFF_SIZE  . . . . . . .  	NUMBER	000C	
ENTRYPOINT . . . . . . . . . . .  	NUMBER	00C0	
EOP_ABORT  . . . . . . . . . . .  	NUMBER	0001	
EOP_NORMAL . . . . . . . . . . .  	NUMBER	0000	
ERRACT_ABORT . . . . . . . . . .  	NUMBER	0004	
ERRACT_DLYRET  . . . . . . . . .  	NUMBER	0002	
ERRACT_IGNORE  . . . . . . . . .  	NUMBER	0006	
ERRACT_INTRET  . . . . . . . . .  	NUMBER	0007	
ERRACT_PANIC . . . . . . . . . .  	NUMBER	0005	
ERRACT_RETRY . . . . . . . . . .  	NUMBER	0001	
ERRACT_USER  . . . . . . . . . .  	NUMBER	0003	
ERRCLASS_ALREADY . . . . . . . .  	NUMBER	000C	
ERRCLASS_APPERR  . . . . . . . .  	NUMBER	0007	
ERRCLASS_AUTH  . . . . . . . . .  	NUMBER	0003	
ERRCLASS_BADFMT  . . . . . . . .  	NUMBER	0009	
ERRCLASS_HRDFAIL . . . . . . . .  	NUMBER	0005	
ERRCLASS_INTRN . . . . . . . . .  	NUMBER	0004	
ERRCLASS_LOCKED  . . . . . . . .  	NUMBER	000A	
ERRCLASS_MEDIA . . . . . . . . .  	NUMBER	000B	
ERRCLASS_NOTFND  . . . . . . . .  	NUMBER	0008	
ERRCLASS_OUTRES  . . . . . . . .  	NUMBER	0001	
ERRCLASS_SYSFAIL . . . . . . . .  	NUMBER	0006	
ERRCLASS_TEMPSIT . . . . . . . .  	NUMBER	0002	
ERRCLASS_UNK . . . . . . . . . .  	NUMBER	000D	
ERRLOC_DISK  . . . . . . . . . .  	NUMBER	0002	
ERRLOC_MEM . . . . . . . . . . .  	NUMBER	0005	
ERRLOC_NET . . . . . . . . . . .  	NUMBER	0003	
ERRLOC_SERDEV  . . . . . . . . .  	NUMBER	0004	
ERRLOC_UNK . . . . . . . . . . .  	NUMBER	0001	
ERROR_ACCESS_DENIED  . . . . . .  	NUMBER	0005	
ERROR_ALREADY_ASSIGNED . . . . .  	NUMBER	0055	
ERROR_ARENA_TRASHED  . . . . . .  	NUMBER	0007	
ERROR_BAD_COMMAND  . . . . . . .  	NUMBER	0016	
ERROR_BAD_ENVIRONMENT  . . . . .  	NUMBER	000A	
ERROR_BAD_FORMAT . . . . . . . .  	NUMBER	000B	
ERROR_BAD_LENGTH . . . . . . . .  	NUMBER	0018	
ERROR_BAD_UNIT . . . . . . . . .  	NUMBER	0014	
ERROR_CANNOT_MAKE  . . . . . . .  	NUMBER	0052	
ERROR_CODE_PAGE_MISMATCHED . . .  	NUMBER	0025	
ERROR_CRC  . . . . . . . . . . .  	NUMBER	0017	
ERROR_CURRENT_DIRECTORY  . . . .  	NUMBER	0010	
ERROR_DUP_FCB  . . . . . . . . .  	NUMBER	0051	
ERROR_FAIL_I24 . . . . . . . . .  	NUMBER	0053	
ERROR_FCB_UNAVAILABLE  . . . . .  	NUMBER	0023	
ERROR_FILE_EXISTS  . . . . . . .  	NUMBER	0050	
ERROR_FILE_NOT_FOUND . . . . . .  	NUMBER	0002	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-11


ERROR_GEN_FAILURE  . . . . . . .  	NUMBER	001F	
ERROR_HANDLE_DISK_FULL . . . . .  	NUMBER	0027	
ERROR_HANDLE_EOF . . . . . . . .  	NUMBER	0026	
ERROR_I24_BAD_COMMAND  . . . . .  	NUMBER	0003	
ERROR_I24_BAD_LENGTH . . . . . .  	NUMBER	0005	
ERROR_I24_BAD_UNIT . . . . . . .  	NUMBER	0001	
ERROR_I24_CRC  . . . . . . . . .  	NUMBER	0004	
ERROR_I24_GEN_FAILURE  . . . . .  	NUMBER	000C	
ERROR_I24_NOT_DOS_DISK . . . . .  	NUMBER	0007	
ERROR_I24_NOT_READY  . . . . . .  	NUMBER	0002	
ERROR_I24_OUT_OF_PAPER . . . . .  	NUMBER	0009	
ERROR_I24_READ_FAULT . . . . . .  	NUMBER	000B	
ERROR_I24_SECTOR_NOT_FOUND . . .  	NUMBER	0008	
ERROR_I24_SEEK . . . . . . . . .  	NUMBER	0006	
ERROR_I24_WRITE_FAULT  . . . . .  	NUMBER	000A	
ERROR_I24_WRITE_PROTECT  . . . .  	NUMBER	0000	
ERROR_I24_WRONG_DISK . . . . . .  	NUMBER	000F	
ERROR_INFO_NOT_SET . . . . . . .  	NUMBER	-0001	
ERROR_INVALID_ACCESS . . . . . .  	NUMBER	000C	
ERROR_INVALID_BLOCK  . . . . . .  	NUMBER	0009	
ERROR_INVALID_DATA . . . . . . .  	NUMBER	000D	
ERROR_INVALID_DRIVE  . . . . . .  	NUMBER	000F	
ERROR_INVALID_FUNCTION . . . . .  	NUMBER	0001	
ERROR_INVALID_HANDLE . . . . . .  	NUMBER	0006	
ERROR_INVALID_PARAMETER  . . . .  	NUMBER	0057	
ERROR_INVALID_PASSWORD . . . . .  	NUMBER	0056	
ERROR_LOCK_VIOLATION . . . . . .  	NUMBER	0021	
ERROR_NET_WRITE_FAULT  . . . . .  	NUMBER	0058	
ERROR_NOT_DOS_DISK . . . . . . .  	NUMBER	001A	
ERROR_NOT_ENOUGH_MEMORY  . . . .  	NUMBER	0008	
ERROR_NOT_READY  . . . . . . . .  	NUMBER	0015	
ERROR_NOT_SAME_DEVICE  . . . . .  	NUMBER	0011	
ERROR_NOT_SUPPORTED  . . . . . .  	NUMBER	0032	
ERROR_NO_MORE_FILES  . . . . . .  	NUMBER	0012	
ERROR_OUT_OF_PAPER . . . . . . .  	NUMBER	001C	
ERROR_OUT_OF_STRUCTS . . . . . .  	NUMBER	0038	
ERROR_OUT_OF_STRUCTURES  . . . .  	NUMBER	0054	
ERROR_PATH_NOT_FOUND . . . . . .  	NUMBER	0003	
ERROR_READ_FAULT . . . . . . . .  	NUMBER	001E	
ERROR_SECTOR_NOT_FOUND . . . . .  	NUMBER	001B	
ERROR_SEEK . . . . . . . . . . .  	NUMBER	0019	
ERROR_SHARING_BUFFER_EXCEEDED  .  	NUMBER	0024	
ERROR_SHARING_VIOLATION  . . . .  	NUMBER	0020	
ERROR_SYS_COMP_NOT_LOADED  . . .  	NUMBER	005A	
ERROR_TOO_MANY_OPEN_FILES  . . .  	NUMBER	0004	
ERROR_WRITE_FAULT  . . . . . . .  	NUMBER	001D	
ERROR_WRITE_PROTECT  . . . . . .  	NUMBER	0013	
ERROR_WRONG_DISK . . . . . . . .  	NUMBER	0022	
EXEC . . . . . . . . . . . . . .  	NUMBER	004B	
EXEC_FUNC_NO_EXECUTE . . . . . .  	NUMBER	0001	
EXEC_FUNC_OVERLAY  . . . . . . .  	NUMBER	0002	
EXE_VALID_OLD_SIGNATURE  . . . .  	NUMBER	4D5A	
EXE_VALID_SIGNATURE  . . . . . .  	NUMBER	5A4D	
EXISTS_MASK  . . . . . . . . . .  	NUMBER	000F	
EXIST_ACT_FAIL . . . . . . . . .  	NUMBER	0000	
EXIST_ACT_OPEN . . . . . . . . .  	NUMBER	0001	
EXIST_ACT_REP_OPEN . . . . . . .  	NUMBER	0002	
EXIT . . . . . . . . . . . . . .  	NUMBER	004C	
EXIT_ABORT . . . . . . . . . . .  	NUMBER	0000	
EXIT_CTRL_C  . . . . . . . . . .  	NUMBER	0001	
EXIT_HARD_ERROR  . . . . . . . .  	NUMBER	0002	
EXIT_KEEP_PROCESS  . . . . . . .  	NUMBER	0003	
EXIT_TERMINATE . . . . . . . . .  	NUMBER	0000	
EXPECTED_VERSION . . . . . . . .  	NUMBER	0004	
EXTDRVR  . . . . . . . . . . . .  	NUMBER	0002	
EXTENTBIT  . . . . . . . . . . .  	NUMBER	0400	
EXTERR . . . . . . . . . . . . .  	V WORD	0000	DATA	External
EXTERR_ACTION  . . . . . . . . .  	V BYTE	0000	DATA	External
EXTERR_CLASS . . . . . . . . . .  	V BYTE	0000	DATA	External
EXTERR_LOCUS . . . . . . . . . .  	V BYTE	0000	DATA	External
EXTHANDLE  . . . . . . . . . . .  	NUMBER	0067	
EXTOPEN  . . . . . . . . . . . .  	NUMBER	006C	
EXT_EXISTS_FAIL  . . . . . . . .  	NUMBER	0000	
EXT_EXISTS_OPEN  . . . . . . . .  	NUMBER	0001	
EXT_FILE_NOT_EXISTS  . . . . . .  	NUMBER	0004	
EXT_NEXISTS_CREATE . . . . . . .  	NUMBER	0010	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-12


EXT_OPEN_I24_OFF . . . . . . . .  	NUMBER	0002	
EXT_OPEN_ON  . . . . . . . . . .  	NUMBER	0001	

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FCBDEVICE  . . . . . . . . . . .  	NUMBER	0040	
FCBMASK  . . . . . . . . . . . .  	NUMBER	00C0	
FCBNETWORK . . . . . . . . . . .  	NUMBER	0080	
FCBSHARE . . . . . . . . . . . .  	NUMBER	00C0	
FCBSPECIAL . . . . . . . . . . .  	NUMBER	0080	
FCB_CLOSE  . . . . . . . . . . .  	NUMBER	0010	
FCB_CREATE . . . . . . . . . . .  	NUMBER	0016	
FCB_DELETE . . . . . . . . . . .  	NUMBER	0013	
FCB_L_ATTR . . . . . . . . . . .  	BYTE	001E	
FCB_L_DRIVE  . . . . . . . . . .  	BYTE	0019	
FCB_L_FIRCLUS  . . . . . . . . .  	WORD	001A	
FCB_L_MFS  . . . . . . . . . . .  	WORD	001C	
FCB_NETID  . . . . . . . . . . .  	DWORD	001C	
FCB_NET_DRIVE  . . . . . . . . .  	BYTE	0019	
FCB_NET_HANDLE . . . . . . . . .  	WORD	001A	
FCB_NSLD_DRIVE . . . . . . . . .  	BYTE	0019	
FCB_NSLD_DRVPTR  . . . . . . . .  	DWORD	001A	
FCB_NSL_BITS . . . . . . . . . .  	BYTE	001A	
FCB_NSL_DIRPOS . . . . . . . . .  	BYTE	001F	
FCB_NSL_DIRSEC . . . . . . . . .  	WORD	001D	
FCB_NSL_DRIVE  . . . . . . . . .  	BYTE	0019	
FCB_NSL_FIRCLUS  . . . . . . . .  	WORD	001B	
FCB_OPEN . . . . . . . . . . . .  	NUMBER	000F	
FCB_RANDOM_READ  . . . . . . . .  	NUMBER	0021	
FCB_RANDOM_READ_BLOCK  . . . . .  	NUMBER	0027	
FCB_RANDOM_WRITE . . . . . . . .  	NUMBER	0022	
FCB_RANDOM_WRITE_BLOCK . . . . .  	NUMBER	0028	
FCB_RENAME . . . . . . . . . . .  	NUMBER	0017	
FCB_SEQ_READ . . . . . . . . . .  	NUMBER	0014	
FCB_SEQ_WRITE  . . . . . . . . .  	NUMBER	0015	
FCB_SFN  . . . . . . . . . . . .  	BYTE	0018	
FCHK . . . . . . . . . . . . . .  	NUMBER	0001	
FDELIM . . . . . . . . . . . . .  	NUMBER	0002	
FFCB . . . . . . . . . . . . . .  	NUMBER	0008	
FILDIRENT  . . . . . . . . . . .  	NUMBER	0010	
FILESYS_STATUS . . . . . . . . .  	NUMBER	1000	
FILE_CREATED . . . . . . . . . .  	NUMBER	0002	
FILE_OPENED  . . . . . . . . . .  	NUMBER	0001	
FILE_REPLACED  . . . . . . . . .  	NUMBER	0003	
FILE_TIMES . . . . . . . . . . .  	NUMBER	0057	
FILPERPROC . . . . . . . . . . .  	NUMBER	0014	
FIND_FIRST . . . . . . . . . . .  	NUMBER	004E	
FIND_NEXT  . . . . . . . . . . .  	NUMBER	004F	
FIND_SECTOR  . . . . . . . . . .  	NUMBER	0008	
FLUSH_DOS_BUFFERS  . . . . . . .  	NUMBER	000D	
FORCE_I24_FAIL . . . . . . . . .  	NUMBER	0020	
FREE_DOS_BUFFER  . . . . . . . .  	NUMBER	000C	
FROM_DISK_RESET  . . . . . . . .  	NUMBER	0004	
FROM_DOS_WRITE . . . . . . . . .  	NUMBER	0010	
FROM_STRING_OUTPUT . . . . . . .  	NUMBER	0008	
FSPCHK . . . . . . . . . . . . .  	NUMBER	0004	
FS_DRIVER_NOT_FOUND  . . . . . .  	NUMBER	0043	
FUNC_CLOSE . . . . . . . . . . .  	NUMBER	0000	
FUNC_COMMIT  . . . . . . . . . .  	NUMBER	0001	
FUNC_FLUSH . . . . . . . . . . .  	NUMBER	0000	
FUNC_FLUSH_INVALIDATE  . . . . .  	NUMBER	0001	
FUNC_GET_BY_HANDLE . . . . . . .  	NUMBER	0000	
FUNC_GET_BY_NAME . . . . . . . .  	NUMBER	0002	
FUNC_LOCK  . . . . . . . . . . .  	NUMBER	0000	
FUNC_SET_BY_HANDLE . . . . . . .  	NUMBER	0001	
FUNC_SET_BY_NAME . . . . . . . .  	NUMBER	0003	
FUNC_UNLOCK  . . . . . . . . . .  	NUMBER	0001	
F_AUX  . . . . . . . . . . . . .  	NUMBER	0010	
F_CARRY  . . . . . . . . . . . .  	NUMBER	0001	
F_DIRECTION  . . . . . . . . . .  	NUMBER	0400	
F_INTERRUPT  . . . . . . . . . .  	NUMBER	0200	
F_OVERFLOW . . . . . . . . . . .  	NUMBER	0800	
F_PARITY . . . . . . . . . . . .  	NUMBER	0004	
F_SIGN . . . . . . . . . . . . .  	NUMBER	0080	
F_TRACE  . . . . . . . . . . . .  	NUMBER	0100	
F_ZERO . . . . . . . . . . . . .  	NUMBER	0040	

Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-13


GENIOCTL . . . . . . . . . . . .  	NUMBER	0013	
GEN_IOCTL_BY_DEVNUM  . . . . . .  	NUMBER	0000	
GEN_IOCTL_BY_HANDLE  . . . . . .  	NUMBER	0001	
GEN_IOCTL_FN_TST . . . . . . . .  	NUMBER	0020	
GEN_IOCTL_RD_TRK . . . . . . . .  	NUMBER	0060	
GEN_IOCTL_WRT_TRK  . . . . . . .  	NUMBER	0040	
GETCURRENTPSP  . . . . . . . . .  	NUMBER	0062	
GETEXTCNTRY  . . . . . . . . . .  	NUMBER	0065	
GETEXTENDEDERROR . . . . . . . .  	NUMBER	0059	
GETSETCDPG . . . . . . . . . . .  	NUMBER	0066	
GETSETMEDIAID  . . . . . . . . .  	NUMBER	0069	
GET_ASSIGN_LIST  . . . . . . . .  	NUMBER	0002	
GET_ASSIGN_MODE  . . . . . . . .  	NUMBER	0021	
GET_CURRENT_PDB  . . . . . . . .  	NUMBER	0051	
GET_DATE . . . . . . . . . . . .  	NUMBER	002A	
GET_DEFAULT_DPB  . . . . . . . .  	NUMBER	001F	
GET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	0019	
GET_DMA  . . . . . . . . . . . .  	NUMBER	002F	
GET_DOS_VALUE  . . . . . . . . .  	NUMBER	0020	
GET_DPB  . . . . . . . . . . . .  	NUMBER	0032	
GET_DRIVE_FREESPACE  . . . . . .  	NUMBER	0036	
GET_FCB_FILE_LENGTH  . . . . . .  	NUMBER	0023	
GET_FCB_POSITION . . . . . . . .  	NUMBER	0024	
GET_INDOS_FLAG . . . . . . . . .  	NUMBER	0034	
GET_INTERRUPT_VECTOR . . . . . .  	NUMBER	0035	
GET_IN_VAR . . . . . . . . . . .  	NUMBER	0052	
GET_IN_VARS  . . . . . . . . . .  	NUMBER	0052	
GET_MODE . . . . . . . . . . . .  	NUMBER	0000	
GET_TIME . . . . . . . . . . . .  	NUMBER	002C	
GET_TRUNCATE_FLAG  . . . . . . .  	NUMBER	0007	
GET_UNC_FS_NAME  . . . . . . . .  	N PROC	0965	IFSSEG	Global	Length = 000F
GET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	0054	
GET_VERSION  . . . . . . . . . .  	NUMBER	0030	

HANDLE_FAIL_I24  . . . . . . . .  	NUMBER	0100	
HONGEUL  . . . . . . . . . . . .  	NUMBER	0063	

I24_AREA . . . . . . . . . . . .  	NUMBER	0006	
I24_CLASS  . . . . . . . . . . .  	NUMBER	0080	
I24_OPERATION  . . . . . . . . .  	NUMBER	0001	
I24_RESP_IGNORE  . . . . . . . .  	NUMBER	0000	
I24_RESP_RETRY . . . . . . . . .  	NUMBER	0001	
I2F5_MSGRET  . . . . . . . . . .  	NUMBER	0002	
IBM  . . . . . . . . . . . . . .  	ALIAS	 IBMVER		
IBMCOPYRIGHT . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPAN . . . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPVER  . . . . . . . . . . .  	ALIAS	 FALSE		
IBMVER . . . . . . . . . . . . .  	ALIAS	 TRUE		
ICOLON . . . . . . . . . . . . .  	NUMBER	003A	
IFB_20 . . . . . . . . . . . . .  	L NEAR	0094	IFSSEG
IFB_30 . . . . . . . . . . . . .  	L NEAR	00C8	IFSSEG
IFB_60 . . . . . . . . . . . . .  	L NEAR	00D1	IFSSEG
IFSATTEND  . . . . . . . . . . .  	NUMBER	0004	
IFSATTSTART  . . . . . . . . . .  	NUMBER	0002	
IFSATTSTAT . . . . . . . . . . .  	NUMBER	0003	
IFSCB  . . . . . . . . . . . . .  	NUMBER	-0001	
IFSCHDIR . . . . . . . . . . . .  	NUMBER	0005	
IFSCLOSEFILE . . . . . . . . . .  	NUMBER	000E	
IFSCRITMSG . . . . . . . . . . .  	NUMBER	0006	
IFSDELFILE . . . . . . . . . . .  	NUMBER	0006	
IFSDEPIOCTL  . . . . . . . . . .  	NUMBER	0010	
IFSDEVICE  . . . . . . . . . . .  	NUMBER	8000	
IFSDEVIOCTL  . . . . . . . . . .  	NUMBER	0011	
IFSDISK  . . . . . . . . . . . .  	NUMBER	4000	
IFSDISKATTR  . . . . . . . . . .  	NUMBER	0002	
IFSDRIVERESET  . . . . . . . . .  	NUMBER	0001	
IFSDRV . . . . . . . . . . . . .  	V BYTE	0000	IFSSEG	External
IFSDrvFromCDS  . . . . . . . . .  	N PROC	0909	IFSSEG	Global	Length = 000E
IFSEOCID . . . . . . . . . . . .  	NUMBER	0013	
IFSEOP . . . . . . . . . . . . .  	NUMBER	0012	
IFSEXECAPI . . . . . . . . . . .  	NUMBER	0005	
IFSFILEATTR  . . . . . . . . . .  	NUMBER	000F	
IFSFILTER  . . . . . . . . . . .  	NUMBER	0400	
IFSFINSTALLED  . . . . . . . . .  	NUMBER	00FF	
IFSFlushBuf  . . . . . . . . . .  	N PROC	0089	IFSSEG	Global	Length = 0053
IFSFUNC_FLAGS  . . . . . . . . .  	V WORD	0000	IFSSEG	External
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-14


IFSF_SWAP_END  . . . . . . . . .  	V BYTE	0000	IFSSEG	External
IFSF_SWAP_START  . . . . . . . .  	V BYTE	0000	IFSSEG	External
IFSINIT  . . . . . . . . . . . .  	NUMBER	0001	
IFSIOCTL . . . . . . . . . . . .  	NUMBER	0002	
IFSLOCKFILE  . . . . . . . . . .  	NUMBER	000D	
IFSLSEEKFILE . . . . . . . . . .  	NUMBER	000A	
IFSMKDIR . . . . . . . . . . . .  	NUMBER	0003	
IFSOPEN  . . . . . . . . . . . .  	NUMBER	0000	
IFSOPENFILE  . . . . . . . . . .  	NUMBER	0009	
IFSPROC_FLAGS  . . . . . . . . .  	V WORD	0000	IFSSEG	External
IFSR . . . . . . . . . . . . . .  	V WORD	0000	IFSSEG	External
IFSREADFILE  . . . . . . . . . .  	NUMBER	000B	
IFSREMOTE  . . . . . . . . . . .  	NUMBER	0800	
IFSRENFILE . . . . . . . . . . .  	NUMBER	0007	
IFSRMDIR . . . . . . . . . . . .  	NUMBER	0004	
IFSR_ACCESS_DENIED . . . . . . .  	NUMBER	0003	
IFSR_ALLOWED . . . . . . . . . .  	BYTE	001A	
IFSR_APIFUNC . . . . . . . . . .  	BYTE	0016	
IFSR_API_PARMS . . . . . . . . .  	BYTE	0026	
IFSR_BAD_FORMAT  . . . . . . . .  	NUMBER	-0001	
IFSR_BUFFER@ . . . . . . . . . .  	DWORD	0028	
IFSR_BUFSIZE . . . . . . . . . .  	WORD	002C	
IFSR_CATEGORY  . . . . . . . . .  	BYTE	002E	
IFSR_CB@ . . . . . . . . . . . .  	DWORD	0016	
IFSR_CTLFUNC . . . . . . . . . .  	BYTE	002F	
IFSR_DEVICE_CB@  . . . . . . . .  	DWORD	001E	
IFSR_DEVICE_ERROR  . . . . . . .  	NUMBER	0004	
IFSR_DEVICE_TYPE_MISMATCH  . . .  	NUMBER	0004	
IFSR_DRIVER_ERROR  . . . . . . .  	NUMBER	0002	
IFSR_ERROR_ACTION  . . . . . . .  	BYTE	0018	
IFSR_ERROR_CLASS . . . . . . . .  	BYTE	0017	
IFSR_ERROR_LOCUS . . . . . . . .  	BYTE	0019	
IFSR_FUNC  . . . . . . . . . . .  	BYTE	0026	
IFSR_I24_COUNT . . . . . . . . .  	BYTE	001B	
IFSR_I24_RESP  . . . . . . . . .  	BYTE	001C	
IFSR_INT21H_CRITER . . . . . . .  	NUMBER	0003	
IFSR_INT21H_ERROR  . . . . . . .  	NUMBER	0001	
IFSR_NONSPEC_ERROR . . . . . . .  	NUMBER	0001	
IFSR_NOT_FOUND_ERROR . . . . . .  	NUMBER	0002	
IFSR_NO_ERROR  . . . . . . . . .  	NUMBER	0000	
IFSR_NO_FCN_SUPPORT  . . . . . .  	NUMBER	-0001	
IFSR_NO_SUBFCN_SUPPORT . . . . .  	NUMBER	-0002	
IFSR_OPEN_CB@  . . . . . . . . .  	DWORD	0022	
IFSR_TYPE  . . . . . . . . . . .  	BYTE	001A	
IFSR_UID . . . . . . . . . . . .  	WORD	0026	
IFSSEARCHFILE  . . . . . . . . .  	NUMBER	0008	
IFSSEARCH_FIRST  . . . . . . . .  	NUMBER	0001	
IFSSEARCH_NEXT . . . . . . . . .  	NUMBER	0002	
IFSUNC . . . . . . . . . . . . .  	NUMBER	2000	
IFSUPDATECB  . . . . . . . . . .  	NUMBER	0007	
IFSUSESHARE  . . . . . . . . . .  	NUMBER	0001	
IFSWRITEFILE . . . . . . . . . .  	NUMBER	000C	
IFS_1000 . . . . . . . . . . . .  	L NEAR	00DB	IFSSEG	Global
IFS_980  . . . . . . . . . . . .  	L NEAR	00D8	IFSSEG	Global
IFS_990  . . . . . . . . . . . .  	L NEAR	00DA	IFSSEG	Global
IFS_ABSRW  . . . . . . . . . . .  	NUMBER	0001	
IFS_DRIVE_RESET  . . . . . . . .  	NUMBER	0002	
ifs_ErrMap24 . . . . . . . . . .  	V BYTE	0000	IFSSEG	External
ifs_ErrMap24End  . . . . . . . .  	V BYTE	0000	IFSSEG	External
IFS_HEADER . . . . . . . . . . .  	V DWORD	0000	DATA	External
IFS_I24  . . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
IFS_IOCTL  . . . . . . . . . . .  	NUMBER	006B	
IFS_UPDATE_CB  . . . . . . . . .  	N PROC	00DC	IFSSEG	Global	Length = 0028
INIT_DFL . . . . . . . . . . . .  	N PROC	09B6	IFSSEG	Global	Length = 0015
INSTALLED  . . . . . . . . . . .  	NUMBER	FFFF	
INSTALLEDDATA  . . . . . . . . .  	NUMBER	0000	
INTBASE  . . . . . . . . . . . .  	NUMBER	0080	
INTERNAT . . . . . . . . . . . .  	ALIAS	 FALSE		
INTERNATIONAL  . . . . . . . . .  	NUMBER	0038	
INTERNAT_BLOCK_MAX . . . . . . .  	NUMBER	0020	
INTTAB . . . . . . . . . . . . .  	NUMBER	0020	
INT_24_ERROR . . . . . . . . . .  	NUMBER	2000	
INT_ABORT  . . . . . . . . . . .  	ALIAS	 INTTAB		
INT_COMMAND  . . . . . . . . . .  	NUMBER	0021	
INT_CTRL_C . . . . . . . . . . .  	NUMBER	0023	
INT_DISK_READ  . . . . . . . . .  	NUMBER	0025	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-15


INT_DISK_WRITE . . . . . . . . .  	NUMBER	0026	
INT_FASTCON  . . . . . . . . . .  	NUMBER	0029	
INT_FATAL_ABORT  . . . . . . . .  	NUMBER	0024	
INT_IBM  . . . . . . . . . . . .  	NUMBER	002A	
INT_KEEP_PROCESS . . . . . . . .  	NUMBER	0027	
INT_SPOOLER  . . . . . . . . . .  	NUMBER	0028	
INT_TERMINATE  . . . . . . . . .  	NUMBER	0022	
IOCTL  . . . . . . . . . . . . .  	NUMBER	0044	
IO_MODE_ID . . . . . . . . . . .  	NUMBER	0002	
ISCDS  . . . . . . . . . . . . .  	NUMBER	0080	
ISCIN  . . . . . . . . . . . . .  	NUMBER	0001	
ISCLOCK  . . . . . . . . . . . .  	NUMBER	0008	
ISCLOSE  . . . . . . . . . . . .  	NUMBER	0010	
ISCOUT . . . . . . . . . . . . .  	NUMBER	0002	
ISCREATE . . . . . . . . . . . .  	NUMBER	8000	
ISCRITIFS  . . . . . . . . . . .  	NUMBER	0002	
ISCTLFCN . . . . . . . . . . . .  	NUMBER	0001	
ISDUMMYCDS . . . . . . . . . . .  	NUMBER	0200	
ISFATBYDEV . . . . . . . . . . .  	NUMBER	2000	
ISGET  . . . . . . . . . . . . .  	NUMBER	0010	
ISINIT . . . . . . . . . . . . .  	NUMBER	2000	
ISMSGRET . . . . . . . . . . . .  	NUMBER	8000	
ISNET  . . . . . . . . . . . . .  	NUMBER	1000	
ISNETWORK  . . . . . . . . . . .  	NUMBER	0400	
ISNULL . . . . . . . . . . . . .  	NUMBER	0004	
ISOLDCREATE  . . . . . . . . . .  	NUMBER	0008	
ISOLDOPEN  . . . . . . . . . . .  	NUMBER	0010	
ISREN  . . . . . . . . . . . . .  	NUMBER	0010	
ISRESETENVIRN  . . . . . . . . .  	NUMBER	4000	
ISSEQ  . . . . . . . . . . . . .  	NUMBER	0020	
ISSFT  . . . . . . . . . . . . .  	NUMBER	0040	
ISSHARE  . . . . . . . . . . . .  	NUMBER	0080	
ISSPEC . . . . . . . . . . . . .  	NUMBER	0010	

JAPAN  . . . . . . . . . . . . .  	ALIAS	 FALSE		

KANJI  . . . . . . . . . . . . .  	ALIAS	 FALSE		
KEEP_PROCESS . . . . . . . . . .  	NUMBER	0031	
KOREA  . . . . . . . . . . . . .  	ALIAS	 FALSE		

LcritIFS . . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
LcritNET . . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
LENGTH_DEPIOCTL  . . . . . . . .  	NUMBER	0030	
LENGTH_DEVECHOCHECK_BUFFER . . .  	NUMBER	0001	
LENGTH_DRIVERESET  . . . . . . .  	NUMBER	0028	
LENGTH_EOCID . . . . . . . . . .  	NUMBER	0028	
LENGTH_UPDATECB  . . . . . . . .  	NUMBER	001C	
LOCKOPER . . . . . . . . . . . .  	NUMBER	005C	
LOOK_FIX . . . . . . . . . . . .  	L NEAR	07D7	IFSSEG
LPT1_NAME  . . . . . . . . . . .  	L BYTE	0000	IFSSEG	Global
LSEEK  . . . . . . . . . . . . .  	NUMBER	0042	

MACHINE_NAME . . . . . . . . . .  	NUMBER	0006	
MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MARK_SECTOR_CHANGED  . . . . . .  	NUMBER	0009	
MAXBUCKETINPAGE  . . . . . . . .  	NUMBER	0002	
MAXBUFFINBUCKET  . . . . . . . .  	NUMBER	000F	
MAX_PRE_STRING . . . . . . . . .  	NUMBER	0040	
MDN_20 . . . . . . . . . . . . .  	L NEAR	097A	IFSSEG
MDN_40 . . . . . . . . . . . . .  	L NEAR	0982	IFSSEG
MEMS . . . . . . . . . . . . . .  	NUMBER	0001	
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MINUS_ONE  . . . . . . . . . . .  	NUMBER	-0001	
MI_INT . . . . . . . . . . . . .  	NUMBER	00CD	
MI_LONG_CALL . . . . . . . . . .  	NUMBER	009A	
MI_LONG_JMP  . . . . . . . . . .  	NUMBER	00EA	
MI_LONG_RET  . . . . . . . . . .  	NUMBER	00CB	
MI_NEAR_RET  . . . . . . . . . .  	NUMBER	00C3	
MKDIR  . . . . . . . . . . . . .  	NUMBER	0039	
MODE2  . . . . . . . . . . . . .  	NUMBER	0002	
MOVE_DRIVER_NAME . . . . . . . .  	N PROC	0974	IFSSEG	Global	Length = 0012
MR_ERRMSG_SEM  . . . . . . . . .  	NUMBER	0080	
MSNET_TIMING . . . . . . . . . .  	NUMBER	0000	
MSVER  . . . . . . . . . . . . .  	NUMBER	0000	
MULTDOS  . . . . . . . . . . . .  	NUMBER	0012	
MULTIFS  . . . . . . . . . . . .  	NUMBER	0011	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-16


MULTNET  . . . . . . . . . . . .  	NUMBER	0011	
MULTSHARE  . . . . . . . . . . .  	NUMBER	0010	

NET2DOS_DATE . . . . . . . . . .  	NUMBER	0023	
NET_CALL_INT . . . . . . . . . .  	NUMBER	002A	
NET_TRANS  . . . . . . . . . . .  	N PROC	09CB	IFSSEG	Global	Length = 002D
NET_TRANS_BUFFER . . . . . . . .  	L BYTE	0009	IFSSEG	Length = 0080
NEWKEEPVAL . . . . . . . . . . .  	NUMBER	0008	
NEWNUMFCB  . . . . . . . . . . .  	NUMBER	0010	
NEW_EXPECTED_VERSION . . . . . .  	NUMBER	2605	
NEW_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
NEW_MINOR_VERSION  . . . . . . .  	NUMBER	0026	
NEXT_SFT . . . . . . . . . . . .  	L NEAR	084E	IFSSEG
NLSFUNC  . . . . . . . . . . . .  	NUMBER	0014	
NOTEXIST_ACT_CREATE  . . . . . .  	NUMBER	0001	
NOTEXIST_ACT_FAIL  . . . . . . .  	NUMBER	0000	
NOTRANS  . . . . . . . . . . . .  	L NEAR	025A	IFSSEG
NOT_EXISTS_MASK  . . . . . . . .  	NUMBER	00F0	
NOT_REDIR  . . . . . . . . . . .  	L NEAR	084B	IFSSEG
NOT_R_DEV  . . . . . . . . . . .  	L NEAR	0845	IFSSEG
NO_CODE_PAGE_CHECK . . . . . . .  	NUMBER	0100	
NO_CTRL_BREAK_FLAG . . . . . . .  	NUMBER	FDFF	
NO_DISABLE_EOF_I24 . . . . . . .  	NUMBER	FFBF	
NO_FORCE_I24_FAIL  . . . . . . .  	NUMBER	FFDF	
NO_FROM_DISK_RESET . . . . . . .  	NUMBER	FFFB	
NO_FROM_DOS_WRITE  . . . . . . .  	NUMBER	FFEF	
NO_FROM_STRING_OUTPUT  . . . . .  	NUMBER	FFF7	
NO_IFS_ABSRW . . . . . . . . . .  	NUMBER	FFFE	
NO_IFS_DRIVERS . . . . . . . . .  	NUMBER	0040	
NO_IFS_DRIVE_RESET . . . . . . .  	NUMBER	FFFD	
NO_RETRY . . . . . . . . . . . .  	NUMBER	0000	
NO_UNMAP . . . . . . . . . . . .  	L NEAR	0245	IFSSEG
NT_20  . . . . . . . . . . . . .  	L NEAR	09E7	IFSSEG
NT_60  . . . . . . . . . . . . .  	L NEAR	09F3	IFSSEG
NULDEV . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
NULL_PTR . . . . . . . . . . . .  	NUMBER	-0001	

OEM_C1 . . . . . . . . . . . . .  	NUMBER	00F9	
OEM_C2 . . . . . . . . . . . . .  	NUMBER	00FA	
OEM_C3 . . . . . . . . . . . . .  	NUMBER	00FB	
OEM_C4 . . . . . . . . . . . . .  	NUMBER	00FC	
OEM_C5 . . . . . . . . . . . . .  	NUMBER	00FD	
OEM_C6 . . . . . . . . . . . . .  	NUMBER	00FE	
OEM_C7 . . . . . . . . . . . . .  	NUMBER	00FF	
OLDCREATENEW_FLAG  . . . . . . .  	NUMBER	0010	
OLDCREATE_FLAG . . . . . . . . .  	NUMBER	0112	
OLDCREATE_MODE . . . . . . . . .  	NUMBER	0002	
OLDOPEN_FLAG . . . . . . . . . .  	NUMBER	0101	
OLDOPEN_MODE . . . . . . . . . .  	NUMBER	2180	
OPEN . . . . . . . . . . . . . .  	NUMBER	003D	
OPEN_FOR_BOTH  . . . . . . . . .  	NUMBER	0002	
OPEN_FOR_READ  . . . . . . . . .  	NUMBER	0000	
OPEN_FOR_WRITE . . . . . . . . .  	NUMBER	0001	
OUTTILBUSY . . . . . . . . . . .  	NUMBER	2000	
OWNHL  . . . . . . . . . . . . .  	NUMBER	000D	

PARSE_ERR_1  . . . . . . . . . .  	NUMBER	0001	
PARSE_ERR_10 . . . . . . . . . .  	NUMBER	000A	
PARSE_ERR_5  . . . . . . . . . .  	NUMBER	0005	
PARSE_ERR_6  . . . . . . . . . .  	NUMBER	0006	
PARSE_FILE_DESCRIPTOR  . . . . .  	NUMBER	0029	
PATHGEN  . . . . . . . . . . . .  	NUMBER	FFFF	
PATHPARSE  . . . . . . . . . . .  	NUMBER	0061	
PAUSE_MODE_OFF . . . . . . . . .  	NUMBER	0000	
PAUSE_MODE_ON  . . . . . . . . .  	NUMBER	0001	
PC_20  . . . . . . . . . . . . .  	L NEAR	0896	IFSSEG
PDB_APPEND . . . . . . . . . . .  	BYTE	003D	
PDB_INTERCON . . . . . . . . . .  	BYTE	003C	
PHONEY_DPB . . . . . . . . . . .  	L NEAR	0000	IFSSEG	External
PHONEY_NAME  . . . . . . . . . .  	V BYTE	0000	IFSSEG	External
PIRET  . . . . . . . . . . . . .  	L NEAR	0844	IFSSEG
PREP_IFSR  . . . . . . . . . . .  	N PROC	01C6	IFSSEG	Global	Length = 0019
PRINTER_GET_FLAGS  . . . . . . .  	NUMBER	0005	
PRINTER_GET_STRING . . . . . . .  	NUMBER	0003	
PRINTER_SET_FLAGS  . . . . . . .  	NUMBER	0004	
PRINTER_SET_STRING . . . . . . .  	NUMBER	0002	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-17


PRINT_ON . . . . . . . . . . . .  	NUMBER	0080	
PRN_CHECK  . . . . . . . . . . .  	N PROC	0882	IFSSEG	Global	Length = 0018
PRN_NAME . . . . . . . . . . . .  	L BYTE	0005	IFSSEG

QUERY_OS_TYPE  . . . . . . . . .  	NUMBER	0002	

RAW_CON_INPUT  . . . . . . . . .  	NUMBER	0007	
RAW_CON_IO . . . . . . . . . . .  	NUMBER	0006	
READ . . . . . . . . . . . . . .  	NUMBER	003F	
READ_DEVICE  . . . . . . . . . .  	NUMBER	0002	
READ_DOS_BUFFER  . . . . . . . .  	NUMBER	000B	
READ_SECTORS . . . . . . . . . .  	NUMBER	0002	
REDIRECTOR . . . . . . . . . . .  	NUMBER	FFFF	
REMHL  . . . . . . . . . . . . .  	NUMBER	000D	
RENAME . . . . . . . . . . . . .  	NUMBER	0056	
RESERVED_BITS_MASK . . . . . . .  	NUMBER	FE00	
RESET_ENVIRONMENT  . . . . . . .  	NUMBER	0002	
RETRY  . . . . . . . . . . . . .  	NUMBER	0001	
RetryCount . . . . . . . . . . .  	V WORD	0000	DATA	External
RET_L  . . . . . . . . . . . . .  	NEAR	0A1B	IFSSEG
RMDIR  . . . . . . . . . . . . .  	NUMBER	003A	

SAVE_CB@ . . . . . . . . . . . .  	V DWORD	0000	IFSSEG	External
SCANLOOP . . . . . . . . . . . .  	L NEAR	07BD	IFSSEG
SC_20  . . . . . . . . . . . . .  	L NEAR	094E	IFSSEG
SDC_20 . . . . . . . . . . . . .  	L NEAR	0108	IFSSEG
SEARCH_FASTOPEN  . . . . . . . .  	NUMBER	0400	
SERVERCALL . . . . . . . . . . .  	NUMBER	005D	
SERVER_DOSCALL_CLOSEFILES_FOR_U   	N PROC	0104	IFSSEG	Global	Length = 003F
SERVER_IFSFUNC_DATA_AREA . . . .  	N PROC	0143	IFSSEG	Global	Length = 002A
SETBLOCK . . . . . . . . . . . .  	NUMBER	004A	
SETBP  . . . . . . . . . . . . .  	NUMBER	0800	
SETDEVICECB  . . . . . . . . . .  	NUMBER	0100	
SETDPB . . . . . . . . . . . . .  	NUMBER	0053	
SET_CATEGORY . . . . . . . . . .  	N PROC	0928	IFSSEG	Global	Length = 0028
SET_CTRL_C_TRAPPING  . . . . . .  	NUMBER	0033	
SET_CURRENT_PDB  . . . . . . . .  	NUMBER	0050	
SET_DATE . . . . . . . . . . . .  	NUMBER	002B	
SET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	000E	
SET_DEPIOCTL_IFSR  . . . . . . .  	N PROC	0950	IFSSEG	Global	Length = 0015
SET_DMA  . . . . . . . . . . . .  	NUMBER	001A	
SET_EXTERR_INFO  . . . . . . . .  	L NEAR	0000	IFSSEG	External
SET_INTERRUPT_VECTOR . . . . . .  	NUMBER	0025	
SET_MODE . . . . . . . . . . . .  	NUMBER	0001	
SET_OEM_HANDLER  . . . . . . . .  	NUMBER	00F8	
SET_PRINTER_FLAG . . . . . . . .  	NUMBER	0064	
SET_THISIFS_UNC  . . . . . . . .  	N PROC	0917	IFSSEG	Global	Length = 0011
SET_TIME . . . . . . . . . . . .  	NUMBER	002D	
SET_TRUNCATE_FLAG  . . . . . . .  	NUMBER	0008	
SET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	002E	
SFF1 . . . . . . . . . . . . . .  	V WORD	0000	IFSSEG	External
SFF_100  . . . . . . . . . . . .  	L NEAR	065A	IFSSEG
SFF_1000 . . . . . . . . . . . .  	L NEAR	0667	IFSSEG
SFF_20 . . . . . . . . . . . . .  	L NEAR	063F	IFSSEG
SFF_CLOSE_NODATE . . . . . . . .  	NUMBER	4000	
SFF_DEVICE_RAW . . . . . . . . .  	NUMBER	0020	
SFF_FILECLEAN  . . . . . . . . .  	NUMBER	0040	
SFF_ISDEVICE . . . . . . . . . .  	NUMBER	0080	
SFF_ISFCB  . . . . . . . . . . .  	NUMBER	8000	
SFF_NET_SPOOL  . . . . . . . . .  	NUMBER	0800	
SFF_TO_SFT . . . . . . . . . . .  	N PROC	05BB	IFSSEG	Global	Length = 00B3
sftFCB . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
SFT_100  . . . . . . . . . . . .  	L NEAR	05A7	IFSSEG
SFT_1000 . . . . . . . . . . . .  	L NEAR	05B4	IFSSEG
SFT_20 . . . . . . . . . . . . .  	L NEAR	0552	IFSSEG
SFT_40 . . . . . . . . . . . . .  	L NEAR	056C	IFSSEG
SFT_60 . . . . . . . . . . . . .  	L NEAR	0574	IFSSEG
sft_addr . . . . . . . . . . . .  	V DWORD	0000	DATA	External
SFT_TO_SFF . . . . . . . . . . .  	N PROC	04CE	IFSSEG	Global	Length = 00ED
SF_BUSY  . . . . . . . . . . . .  	NUMBER	-0001	
SF_CLOSE_NODATE  . . . . . . . .  	NUMBER	4000	
SF_DEFAULT_NUMBER  . . . . . . .  	NUMBER	0005	
SF_FSDA  . . . . . . . . . . . .  	BYTE	0019	
SF_ISFCB . . . . . . . . . . . .  	NUMBER	8000	
SF_ISNET . . . . . . . . . . . .  	NUMBER	8000	
SF_LRU . . . . . . . . . . . . .  	WORD	0015	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-18


SF_NETID . . . . . . . . . . . .  	BYTE	0019	
SF_NET_SPOOL . . . . . . . . . .  	NUMBER	0800	
SF_NO_INHERIT  . . . . . . . . .  	NUMBER	1000	
SF_OPENAGE . . . . . . . . . . .  	WORD	0017	
SF_PIPE  . . . . . . . . . . . .  	NUMBER	2000	
SF_SERIAL_ID . . . . . . . . . .  	WORD	000B	
SHAREF . . . . . . . . . . . . .  	NUMBER	0000	
SHARE_RETRY_COUNT  . . . . . . .  	NUMBER	0008	
SHARING_COMPAT . . . . . . . . .  	NUMBER	0000	
SHARING_DENY_BOTH  . . . . . . .  	NUMBER	0010	
SHARING_DENY_NONE  . . . . . . .  	NUMBER	0040	
SHARING_DENY_READ  . . . . . . .  	NUMBER	0030	
SHARING_DENY_WRITE . . . . . . .  	NUMBER	0020	
SHARING_MASK . . . . . . . . . .  	NUMBER	00F0	
SHARING_NET_FCB  . . . . . . . .  	NUMBER	0070	
SHARING_NO_INHERIT . . . . . . .  	NUMBER	0080	
STBUI  . . . . . . . . . . . . .  	NUMBER	0200	
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
STDON  . . . . . . . . . . . . .  	NUMBER	0100	
STDOUT . . . . . . . . . . . . .  	NUMBER	0001	
STDPRN . . . . . . . . . . . . .  	NUMBER	0004	
STD_AUX_INPUT  . . . . . . . . .  	NUMBER	0003	
STD_AUX_OUTPUT . . . . . . . . .  	NUMBER	0004	
STD_CON_INPUT  . . . . . . . . .  	NUMBER	0001	
STD_CON_INPUT_FLUSH  . . . . . .  	NUMBER	000C	
STD_CON_INPUT_NO_ECHO  . . . . .  	NUMBER	0008	
STD_CON_INPUT_STATUS . . . . . .  	NUMBER	000B	
STD_CON_OUTPUT . . . . . . . . .  	NUMBER	0002	
STD_CON_STRING_INPUT . . . . . .  	NUMBER	000A	
STD_CON_STRING_OUTPUT  . . . . .  	NUMBER	0009	
STD_PRINTER_OUTPUT . . . . . . .  	NUMBER	0005	
STECODE  . . . . . . . . . . . .  	NUMBER	00FF	
STERR  . . . . . . . . . . . . .  	NUMBER	8000	
STRIP_WFP_START  . . . . . . . .  	N PROC	09F8	IFSSEG	Global	Length = 0015
SUBFUNC_EA . . . . . . . . . . .  	NUMBER	0002	
SUBFUNC_EA_NAMES . . . . . . . .  	NUMBER	0003	
SUBFUNC_INLINE . . . . . . . . .  	NUMBER	0000	
SWAP_AREA_TABLE  . . . . . . . .  	V BYTE	0000	DATA	External
SW_1000  . . . . . . . . . . . .  	L NEAR	0A0C	IFSSEG
SW_20  . . . . . . . . . . . . .  	L NEAR	0A0B	IFSSEG
SysInitTable . . . . . . . . . .  	V BYTE	0000	DATA	External

TEMPBUF  . . . . . . . . . . . .  	V BYTE	0000	IFSSEG	External
TEMPLEN  . . . . . . . . . . . .  	NUMBER	0086	
THISCDS  . . . . . . . . . . . .  	V DWORD	0000	DATA	External
THISDFL  . . . . . . . . . . . .  	V DWORD	0000	IFSSEG	External
THISIFS  . . . . . . . . . . . .  	V DWORD	0000	IFSSEG	External
THISIFS_SET  . . . . . . . . . .  	NUMBER	0002	
THISSFT  . . . . . . . . . . . .  	V DWORD	0000	DATA	External
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	
TRUEBYTE . . . . . . . . . . . .  	NUMBER	00FF	
TYPE0  . . . . . . . . . . . . .  	NUMBER	0000	
TYPE1  . . . . . . . . . . . . .  	NUMBER	0001	
TYPE_DEVICE  . . . . . . . . . .  	NUMBER	0001	
TYPE_DRIVE . . . . . . . . . . .  	NUMBER	0002	
TYPE_NET_DEVICE  . . . . . . . .  	NUMBER	0003	
TYPE_NET_DRIVE . . . . . . . . .  	NUMBER	0004	
TYPE_NONE  . . . . . . . . . . .  	NUMBER	0000	

UNC_FS_HDR . . . . . . . . . . .  	V DWORD	0000	IFSSEG	External
UNC_INSTALLED  . . . . . . . . .  	NUMBER	0080	
UNDO_BITS  . . . . . . . . . . .  	L NEAR	0854	IFSSEG
UNLINK . . . . . . . . . . . . .  	NUMBER	0041	
USEROPER . . . . . . . . . . . .  	NUMBER	005E	
USE_SYSTEM_TIMEDATE  . . . . . .  	NUMBER	0000	
USE_USER_TIMEDATE  . . . . . . .  	NUMBER	0001	
UTIL_ERR_4 . . . . . . . . . . .  	NUMBER	0004	

VERIFY_INFORMATION . . . . . . .  	NUMBER	0004	

WAITPROCESS  . . . . . . . . . .  	NUMBER	004D	
WFP_START  . . . . . . . . . . .  	V WORD	0000	DATA	External
WRITE  . . . . . . . . . . . . .  	NUMBER	0040	
WRITE_DEVICE . . . . . . . . . .  	NUMBER	0003	
Microsoft (R) Macro Assembler Version 5.10                  9/18/25 23:16:01
IFSFUNC UTILITY ROUTINES - Routines for IFSFUNC 				 ;AN000;Symbols-19


WRITE_DOS_BUFFER . . . . . . . .  	NUMBER	000A	
WRITE_SECTORS  . . . . . . . . .  	NUMBER	0003	

X25_SPECIAL  . . . . . . . . . .  	NUMBER	0800	
XCHGP  . . . . . . . . . . . . .  	N PROC	0902	IFSSEG	Global	Length = 0007
XDUP . . . . . . . . . . . . . .  	NUMBER	0045	
XDUP2  . . . . . . . . . . . . .  	NUMBER	0046	
XNAMETRANS . . . . . . . . . . .  	NUMBER	0060	

ZERO . . . . . . . . . . . . . .  	NUMBER	0000	

??0000 . . . . . . . . . . . . .  	L NEAR	00D9	IFSSEG
??0001 . . . . . . . . . . . . .  	L NEAR	00DB	IFSSEG
??0002 . . . . . . . . . . . . .  	L NEAR	016C	IFSSEG
??0003 . . . . . . . . . . . . .  	L NEAR	01DE	IFSSEG
??0004 . . . . . . . . . . . . .  	L NEAR	04CD	IFSSEG
??0005 . . . . . . . . . . . . .  	L NEAR	05BA	IFSSEG
??0006 . . . . . . . . . . . . .  	L NEAR	066D	IFSSEG
??0007 . . . . . . . . . . . . .  	L NEAR	06D6	IFSSEG
??0008 . . . . . . . . . . . . .  	L NEAR	070B	IFSSEG
??0009 . . . . . . . . . . . . .  	L NEAR	0773	IFSSEG
??000A . . . . . . . . . . . . .  	L NEAR	079A	IFSSEG
??000B . . . . . . . . . . . . .  	L NEAR	07D6	IFSSEG
??000C . . . . . . . . . . . . .  	L NEAR	0853	IFSSEG
??000D . . . . . . . . . . . . .  	L NEAR	0881	IFSSEG
??000E . . . . . . . . . . . . .  	L NEAR	0899	IFSSEG
??000F . . . . . . . . . . . . .  	L NEAR	0901	IFSSEG
??0010 . . . . . . . . . . . . .  	L NEAR	0908	IFSSEG
??0011 . . . . . . . . . . . . .  	L NEAR	0916	IFSSEG
??0012 . . . . . . . . . . . . .  	L NEAR	0927	IFSSEG
??0013 . . . . . . . . . . . . .  	L NEAR	094F	IFSSEG
??0014 . . . . . . . . . . . . .  	L NEAR	0964	IFSSEG
??0015 . . . . . . . . . . . . .  	L NEAR	0973	IFSSEG
??0016 . . . . . . . . . . . . .  	L NEAR	0985	IFSSEG
??0017 . . . . . . . . . . . . .  	L NEAR	0999	IFSSEG
??0018 . . . . . . . . . . . . .  	L NEAR	09B5	IFSSEG
??0019 . . . . . . . . . . . . .  	L NEAR	09CA	IFSSEG
??001A . . . . . . . . . . . . .  	L NEAR	09F7	IFSSEG
??001B . . . . . . . . . . . . .  	L NEAR	0A0C	IFSSEG
??001C . . . . . . . . . . . . .  	L NEAR	0A1A	IFSSEG
??001D . . . . . . . . . . . . .  	L NEAR	0A1B	IFSSEG
?PLM . . . . . . . . . . . . . .  	NUMBER	0000	
?WIN . . . . . . . . . . . . . .  	NUMBER	0000	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  ifsutil		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   6226 Source  Lines
   9594 Total   Lines
   1398 Symbols

  41462 + 107998 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
