Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-1


				TITLE	CHKFAT	- procedures that acces the fat
				 and/or fatmap
				page	,132					;
				
					.list
 0000  0005[			PHONEY_STACK DW 5 DUP(0)							;ac048;bgb
	   0000			
			 ]	
				
				
					pathlabl chkfat
				;*****************************************************************************	;an005;bgb
				;   CALC-FAT-ADDR - calculate the seg/off of the fat cell from the cell number	;an005;bgb
				;										;an005;bgb
				;   Inputs:   es - fat table segment
				;	      si - cluster number
				;
				;   Outputs:  es - fat table segment + cluster seg
				;	      di - cluster offset
				;										;an005;bgb
				; LARGE FAT SUPPORT								;an005;bgb
				;*******************								;an005;bgb
				; the offset into the fat table is cluster number times 2 (2 bytes per fat entry) ;an005;bgb
				; This will result not only in the segment boundary being passed, but also in	;an005;bgb
				; a single-word math overflow.	  So, we calculate the the address as follows:	;an005;bgb
				; 0. start with cluster number (1-65535)					;an005;bgb
				; 1. divide by 8 to get the number of paragraphs per fat-cell  (0-8191) 	;an005;bgb
				;    remainder =					       (0-7)		;an005;bgb
				; 2. multiply the remainder by 2 to get offset in bytes        (0-15)		;an005;bgb
				; You now have a paragraph-offset number that you can use to calc the addr into ;an005;bgb
				; the fat table.  To get the physical addr you must add it to the offset of the ;an005;bgb
				; table in memory.								;an005;bgb
				; 3. add the paras to the segment register					;an005;bgb
				; 4. add the offset to the offset register					;an005;bgb
				;****************************************************************************** ;an005;bgb
				Procedure calc_fat_addr,near							;an005;bgb
			     1							; 
			     1	Public	calc_fat_addr				;				;AN000; 
 000A                        1	calc_fat_addr    proc				;				;AN000; 
				    savereg <ax,bx,dx>		    ;						;an005;bgb
			     1	IRP reg,<ax,bx,dx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 000A  50                    2		PUSH    ax 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 000B  53                    2		PUSH    bx 
 = 0003                      2		?stackdepth = ?stackdepth + 1 
 000C  52                    2		PUSH    dx 
 000D  8B C6			    mov     ax,si		     ;get cluster number from si
 000F  BB 0008			    mov     bx,0008h		    ; div by para (* 2 bytes per clus)	;an005;bgb
 0012  33 D2			    xor     dx,dx		    ; zero dx for word divide			;an005;bgb
 0014  F7 F3			    div     bx			    ; do it				    ;an022;bgb;bgb
 0016  8C C3			    mov     bx,es		    ; get fat table segment			;an005;bgb
 0018  03 D8			    add     bx,ax		    ; add number of paras to the cluster	;an005;bgb
 001A  8E C3			    mov     es,bx		    ; move it back				;an005;bgb
 001C  D1 E2			    shl     dx,1		    ; remainder times 2 			;an005;bgb
 001E  8B FA			    mov     di,dx		    ; offset = 00 + remainder			;an005;bgb
				    restorereg <dx,bx,ax>							;an005;bgb
			     1	IRP reg,<dx,bx,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0002                      2		?stackdepth = ?stackdepth - 1 
 0020  5A                    2		POP     dx 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 0021  5B                    2		POP     bx 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 0022  58                    2		POP     ax 
				  return									;an005;bgb
			     1	.xcref 
 0023                        1	??0000: 
 0023  C3                    1		RET 
 = 0023                      1	ret_l = ??0000 
			     1	.cref 
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-2
                                                            

				EndProc calc_fat_addr								;an005;bgb
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 0024                        1	calc_fat_addr    ENDP 
				
				;=========================================================================
				; UNPACK	:	This routine calculates the position in the FAT
				;			where the cluster number resides and obtains
				;			its contents.
				;
				;	Inputs	:	SI - Cluster number
				;	Outputs :	DI - Cluster contents
				;			zero flag is set if fat cell = zero
				;
				; LOGIC
				;	- get addr of fat table
				;	- if 16-bit fat,
				;	  then get the address of the cell (calc_fat_addr)
				;	       mov it into di
				;	       set the zero flag
				;	  else multiply the cluster-number by 1.5 to get the byte-offset
				;	       move the contents of the cluster into di
				;	       if the cluster-number is odd,
				;	       then shift it right by 1 nibble
				;		    set the zero flag
				;	       else (its already shifted right)
				;		    set the zero flag
				;=========================================================================
 0024				UNPACK	proc	near				;ac005; dms;unpack FAT
 0024  06				push	es								;an005;bgb
 0025  8E 06 0000 E			mov	es,fattbl_seg			;point to FAT in memory 	;an005;bgb
 0029  8B FE				mov	DI,SI				;put cluster number in DI
 002B  80 3E 0000 E 00			cmp	[BIGFAT],0			;big fat?
				;	$IF	nz				;yes
 0030  74 0A				JZ $$IF1
 0032  E8 000A R				call	calc_fat_addr		;calc addr of cluster		;an005;bgb
 0035  26: 8B 3D				mov	di,word ptr es:[di]	;es:bx points to fat cluster	;an005;bgb
 0038  0B FF					or	DI,DI			; Set zero
				;	$ELSE					;small fat
 003A  EB 1F				JMP SHORT $$EN1
 003C				$$IF1:
 003C  D1 EF				       SHR     DI,1
 003E  03 FE				       ADD     DI,SI			; Mult by 1.5
 0040  26: 8B 3D			       mov     DI,word ptr es:[di]
 0043  F7 C6 0001			       TEST    SI,1			;is the cluster number odd?
				;	       $IF     nz	     ;last bit is non-zero; means it is odd
 0047  74 0E				       JZ $$IF3
 0049  D1 EF					       SHR     DI,1		;shift by 1 nibble
 004B  D1 EF					       SHR     DI,1
 004D  D1 EF					       SHR     DI,1
 004F  D1 EF					       SHR     DI,1
 0051  81 E7 0FFF				       and     di,0fffh 	;ac005; dms;
				;		$ELSE				;ac005; dms;even cluster bound.
 0055  EB 04					JMP SHORT $$EN3
 0057				$$IF3:
 0057  81 E7 0FFF				       AND     DI,0FFFH
				;		$ENDIF
 005B				$$EN3:
				;	$ENDIF
 005B				$$EN1:
 005B  07				pop	es
					return
			     1	.xcref 
 005C                        1	??0001: 
 005C  C3                    1		RET 
 = 005C                      1	ret_l = ??0001 
			     1	.cref 
 005D				UNPACK	endp					;ac005; dms;
				
				;=========================================================================
				; PACK		: This routine puts data into the FAT.
				;
				;	Inputs	: SI - Cluster number to be packed
				;		  dx - Data to be packed
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-3
                                                            

				;
				;	Outputs : Altered FAT
				; LOGIC
				;	- set the fat-changed-flags
				;	- get the seg of the fat-table
				;	- if 16-bit fat,
				;	  then get the address of the cell (calc_fat_addr)
				;	       mov the new value into it
				;	  else multiply the cluster-number by 1.5 to get the byte-offset
				;	       move the contents of the cluster into di
				;	       if the cluster-number is odd,
				;	       then shift it right by 1 nibble
				;		    set the zero flag
				;	       else (its already shifted right)
				;		    set the zero flag
				;=========================================================================
 005D				PACK	proc	near				;ac005; dms;
					savereg <si,di,es>							;ac048;bgb
			     1	IRP reg,<si,di,es> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 005D  56                    2		PUSH    si 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 005E  57                    2		PUSH    di 
 = 0003                      2		?stackdepth = ?stackdepth + 1 
 005F  06                    2		PUSH    es 
 0060  C6 06 0000 E 01			mov	[DIRTYFAT],1			;Set FAT dirty byte
 0065  C6 06 0000 E 01			mov	[HAVFIX],1			;Indicate a fix
 006A  8E 06 0000 E			mov	es,fattbl_seg			;				;an005;bgb
 006E  8B FE				mov	DI,SI
 0070  80 3E 0000 E 00			cmp	[BIGFAT],0
				;	$IF	nz				;ac005; dms;big fat?
 0075  74 08				JZ $$IF7
 0077  E8 000A R				call	calc_fat_addr		;calc addr of cluster		;an005;bgb
 007A  26: 89 15				mov	es:[di],dx		;move dx into cluster		;an005;bgb
				;	$ELSE
 007D  EB 25				JMP SHORT $$EN7
 007F				$$IF7:
 007F  D1 EF					shr	di,1		;offset = clus-num * 1.5
 0081  03 FE					add	di,si		;offset = clus-num * 1.5
 0083  57					push	di		;save cluster offset
 0084  26: 8B 3D				mov	DI,es:[di]	;get previous value, 4 nibbles
 0087  F7 C6 0001				test	si,1			;is the cluster number odd?
				;		$IF	nz	      ;last bit is non-zero; means it is odd
 008B  74 0D					JZ $$IF9
 008D  D1 E2						SHL	dx,1		;shift by 1 nibble
 008F  D1 E2						SHL	dx,1
 0091  D1 E2						SHL	dx,1
 0093  D1 E2						SHL	dx,1
 0095  83 E7 0F						AND	DI,0FH		;zero out 1st 3 nibbles '000f'
				;		$ELSE				;even cluster number
 0098  EB 04					JMP SHORT $$EN9
 009A				$$IF9:
 009A  81 E7 F000					AND	DI,0F000H	;zero out last 3 nibbles 'f000'
				;		$ENDIF
 009E				$$EN9:
 009E  0B FA					or	DI,dx			;put new value in with old
 00A0  5E					pop	si			;get cluster offset
 00A1  26: 89 3C				mov	es:[SI],DI
				;	$ENDIF
 00A4				$$EN7:
					restorereg <es,di,si>							;ac048;bgb
			     1	IRP reg,<es,di,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0002                      2		?stackdepth = ?stackdepth - 1 
 00A4  07                    2		POP     es 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 00A5  5F                    2		POP     di 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 00A6  5E                    2		POP     si 
 00A7  C3				ret
 00A8				PACK	endp					;ac005; dms;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-4
                                                            

				
				;=========================================================================	;an005;bgb
				; CROSSCHK	: this proc gets the value of the fatmap entry that is pointed	;an005;bgb
				;		    to by an orphan						;an005;bgb
				;										;an005;bgb
				;	Inputs	: si - cluster number of the orphan				;an005;bgb
				;										;an005;bgb
				;	Outputs : ah - contents of the fatmap pointed to by di			;an005;bgb
				; LOGIC 									;an005;bgb
				; ***** 									;an005;bgb
				;=========================================================================	;an005;bgb
				procedure	CROSSCHK							;an005;bgb
			     1							; 
			     1	Public	CROSSCHK				;				;AN000; 
 00A8                        1	CROSSCHK    proc				;				;AN000; 
 00A8  06				push	es
 00A9  8E 06 0000 E			mov	es,fatmap							;an005;bgb
 00AD  33 FF				xor	di,di								;an005;bgb
 00AF  03 FE				ADD	DI,SI
 00B1  26: 8A 25			mov	ah,es:[di]							;an005;bgb
 00B4  F6 C4 10				TEST	AH,10H
 00B7  07				pop	es
 00B8  C3				ret
				EndProc CROSSCHK								;an005;bgb
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 00B9                        1	CROSSCHK    ENDP 
				
				;*****************************************************************************	;an005;bgb
				; INIT_FATMAP									;an005;bgb
				; description: initialize the fatmap area to all zeros				;an005;bgb
				;										;an005;bgb
				; called from: main-routine							;an005;bgb
				;										;an005;bgb
				;Change History: Created    8/31/87	       bgb				;an005;bgb
				;										;an005;bgb
				;Input: segment addr of the fatmap						;an005;bgb
				;	number of clusters in the fat (1-65535) 				;an005;bgb
				;										;an005;bgb
				;Output: fatmap 								;an005;bgb
				;										;an005;bgb
				; LOGIC 									;an005;bgb
				;----------									;an005;bgb
				;*****************************************************************************	;an005;bgb
				Procedure init_fatmap,Near		   ;AN000;bgb				   ;an005;bgb
			     1							; 
			     1	Public	init_fatmap				;				;AN000; 
 00B9                        1	init_fatmap    proc				;				;AN000; 
				    savereg <es,di,ax,cx>
			     1	IRP reg,<es,di,ax,cx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 00B9  06                    2		PUSH    es 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 00BA  57                    2		PUSH    di 
 = 0003                      2		?stackdepth = ?stackdepth + 1 
 00BB  50                    2		PUSH    ax 
 = 0004                      2		?stackdepth = ?stackdepth + 1 
 00BC  51                    2		PUSH    cx 
 00BD  8E 06 0000 E		    mov     es,fatmap			;get seg of the fatmap			;an005;bgb
 00C1  33 FF			    xor     di,di			;get off of the fatmap			;an005;bgb
 00C3  8B 0E 0000 E		    mov     cx,[MCLUS]			;do once for each cluster
 00C7  32 C0			    xor     AL,AL			;zero means free
 00C9  F3/ AA			    REP     STOSB		    ;Initialize fatmap to all free
 00CB  26: 88 05		    mov     byte ptr es:[di],al 			   ;			;an010;bgb
				    restorereg <cx,ax,di,es>
			     1	IRP reg,<cx,ax,di,es> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0003                      2		?stackdepth = ?stackdepth - 1 
 00CE  59                    2		POP     cx 
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-5
                                                            

 = 0002                      2		?stackdepth = ?stackdepth - 1 
 00CF  58                    2		POP     ax 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 00D0  5F                    2		POP     di 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 00D1  07                    2		POP     es 
				    return
			     1	.xcref 
 00D2                        1	??0002: 
 00D2  C3                    1		RET 
 = 00D2                      1	ret_l = ??0002 
			     1	.cref 
				endproc init_fatmap			    ;				    ;AN000;
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 00D3                        1	init_fatmap    ENDP 
				;
				;*****************************************************************************	;an005;bgb
				; CALC_FATMAP_SEG								;an005;bgb
				; description: calculate the segment of the fatmap for addressing purposes	;an005;bgb
				;										;an005;bgb
				; called from: main-routine							;an005;bgb
				;										;an005;bgb
				;Change History: Created    8/31/87	       bgb				;an005;bgb
				;										;an005;bgb
				;Input: bytes-per-sector							;an005;bgb
				;	fatsiz									;an005;bgb
				;										;an005;bgb
				;Output: ram-based fat table							;an005;bgb
				;	 paras-per-fat	     - number of paragraphs of mem in the fat
				;	 fattbl-seg	     - segment number of fat table
				;	 fatmap 	     - segment number of the fat map table
				;										;an005;bgb
				; LOGIC 									;an005;bgb
				;----------									;an005;bgb
				;     - calc length fat-table (in paras)					 ;an005;bgb
				;	    = bytes-per-sector / 16 * sectors-per-fat				;an005;bgb
				;     - calc segment of fat table in memory					;an005;bgb
				;	    = es  +   64k							;an005;bgb
				;     - calc segment of fatmap area in memory					;an005;bgb
				;	    = es + 64k	+ length of fat-table					;an005;bgb
				;*****************************************************************************	;an005;bgb
				Procedure calc_fatmap_seg,Near		       ;AN000;bgb			       ;an005;bgb
			     1							; 
			     1	Public	calc_fatmap_seg				;				;AN000; 
 00D3                        1	calc_fatmap_seg    proc				;				;AN000; 
				; calc fat table length 							;an005;bgb
 00D3  06				push	es
 00D4  A1 0000 E			mov	ax,bytes_per_sector	; bytes per sector			;an005;bgb
 00D7  33 D2				xor	dx,dx								;an005;bgb
 00D9  BB 0010				mov	bx,16								;an005;bgb
 00DC  F7 F3				div	bx			; paras per sector		    ;an022;bgb;bgb
 00DE  8B 0E 0000 E			mov	cx,fatsiz		;2	   ; get sectors per fat	;an005;bgb
 00E2  33 D2				xor	dx,dx								;an005;bgb
 00E4  F7 E1				mul	cx			; paras per fat 			;an005;bgb
 00E6  A3 0000 E			mov	paras_per_fat,ax						;an005;bgb
				; calc fat table segment							 ;an005;bgb
 00E9  8C C3				mov	bx,es			;get seg of fat-table			;an005;bgb
 00EB  81 C3 1000			add	bx,01000h		;add 64k for end of pgm seg		;an005;bgb
 00EF  89 1E 0000 E			mov	fattbl_seg,bx		;starting segment of fattbl		;an005;bgb
				; calc fatmap segment								:an005;bgb
 00F3  03 C3				add	ax,bx		 ;seg of fatmap= seg of fattbl + size of fattbl ;an005;bgb
 00F5  A3 0000 E			mov	fatmap,ax		 ;this is the seg of the fatmap 	 ;an005;bgb
				; find segment number of end of fatmap						;an030;bgb
				;ptm p5000	  mov	  bx,paras_per_fat	  ;each fat cell is 2 bytes		  ;an030;bgb
				;ptm p5000	  shr	  bx,1			  ;each fatmap cell is 1 byte = 	  ;an030;bgb
 00F8  8B 1E 0000 E			mov	bx, [MCLUS]		;P5000 INIT_FATMAP use [MCLUS]
 00FC  D1 EB				shr	bx, 1			;P5000 convert it to para.
 00FE  D1 EB				shr	bx, 1			;P5000
 0100  D1 EB				shr	bx, 1			;P5000
 0102  D1 EB				shr	bx, 1			;P5000
 0104  03 C3				add	ax,bx			;add in fatmap seg	   =		;an030;bgb
 0106  40				inc	ax			;P5000
 0107  A3 0000 E			mov	end_of_fatmap,ax	;last seg value 			;an030;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-6
                                                            

 010A  07				pop	es
 010B  C3				ret				;				      ;AN000;
				endproc calc_fatmap_seg 		    ;				    ;AN000;
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 010C                        1	calc_fatmap_seg    ENDP 
				;
														;ac048;bgb
				;*****************************************************************************	;ac048;bgb
				; FIX_ENTRY - fill in the dir entry with the lost cluster information, give it	;ac048;bgb
				;	      unique filename, and write it back to disk.			;ac048;bgb
				;										;ac048;bgb
				; WARNING!! NOTE!! -->								;ac048;bgb
				;										;ac048;bgb
				; called by - CHAINREC								;ac048;bgb
				;										;ac048;bgb
				; inputs: AX - drive number							;ac048;bgb
				;	  BX - ram offset of beginning of sector				;ac048;bgb
				;	  CX -									;ac048;bgb
				;	  DX - sector number low						;ac048;bgb
				;	  SP -									;ac048;bgb
				;	  BP -									;ac048;bgb
				;	  SI - cluster number of first cluster in this lost chain		;ac048;bgb
				;	  DI - points to entry in ram						;ac048;bgb
				;										;ac048;bgb
				; output: AX -									;ac048;bgb
				;	  BX -									;ac048;bgb
				;	  CX -									;ac048;bgb
				;	  DX -									;ac048;bgb
				;	  SP -									;ac048;bgb
				;	  BP -									;ac048;bgb
				;	  SI -									;ac048;bgb
				;	  DI-									;ac048;bgb
				;										;ac048;bgb
				; Regs abused - di,si,cx							;ac048;bgb
				;										;ac048;bgb
				;logic: 1. save the starting cluster number					;ac048;bgb
				;										;ac048;bgb
				;	2. if the recovered file name already exists, then use the next one.	;ac048;bgb
				;	   do this until the name is unique.					;ac048;bgb
				;										;ac048;bgb
				;	3. move all the pertinant info into the dir entry.			;ac048;bgb
				;										;ac048;bgb
				;	4. write the dir entry out to disk.					;ac048;bgb
				;*****************************************************************************	;ac048;bgb
				procedure fix_entry,near							;ac048;bgb
			     1							; 
			     1	Public	fix_entry				;				;AN000; 
 010C                        1	fix_entry    proc				;				;AN000; 
 010C  89 75 1A			    mov     ds:[DI+26],SI		;move 1st clus num into dir entry	;ac048;bgb	   ;
				an005;bgb
				    savereg <ax,dx,bx>			;Save INT 26 data			;ac048;bgb
			     1	IRP reg,<ax,dx,bx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 010F  50                    2		PUSH    ax 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 0110  52                    2		PUSH    dx 
 = 0003                      2		?stackdepth = ?stackdepth + 1 
 0111  53                    2		PUSH    bx 
				;make sure this name is unique							;ac048;bgb
				    DOS_Call Disk_Reset 		;func 0d - flush buffers	  ;AC000;ac048;bgb;
			     1							; 
 0112  B4 0D                 1		mov	ah,Disk_Reset			;				;AN000; 
 0114  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 0116  BA 0000 E		    mov     dx,OFFSET DG:ORPHFCB	;point to filename file0000.chk 	;ac048;bgb
 0119  B4 0F			    mov     AH,FCB_OPEN 		;open the file just put into the dir	;ac048;bgb
 011B				OPAGAIN:									;ac048;bgb
				;   $do 									;ac048;bgb
 011B				$$DO13:
 011B  CD 21				INT	21H								;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-7
                                                            

 011D  0A C0				or	AL,AL			;did the open fail?			;ac048;bgb
				;   $leave  nz									;ac048;bgb
 011F  75 05			    JNZ $$EN13
 0121  E8 0000 E			call	MAKORPHNAM		;Try next name				;ac048;bgb
				;   $enddo									;ac048;bgb
 0124  EB F5			    JMP SHORT $$DO13
 0126				$$EN13:
 0126				GOTORPHNAM:				 ;di still points to entry		;ac048;bgb
 0126  BE 0001 E			mov	SI,OFFSET DG:ORPHFCB + 1 ;ORPHFCB Now has good name		;ac048;bgb
 0129  B9 000B				mov	cx,11			 ;move filename, ext			;ac048;bgb
 012C  F3/ A4				REP	MOVSB								;ac048;bgb
 012E  E8 0000 E			call	MAKORPHNAM		 ;Make next name			;ac048;bgb
 0131  33 C0				xor	ax,ax			 ;fill dir entry with zeros		;ac048;bgb
 0133  B9 000B				mov	cx,11								;ac048;bgb
 0136  F3/ AA				REP	STOSB								;ac048;bgb
				; Add in time for orphan file - BAS July 17/85					;ac048;bgb
 0138  52				push	dx			;save starting sector number		;ac048;bgb;an045;bgb
 0139  E8 0000 E			call	SYSTIME 							;ac048;bgb
 013C  AB				STOSW				; Time					;ac048;bgb
 013D  8B C2				mov	ax,dx								;ac048;bgb
 013F  AB				STOSW				; Date					;ac048;bgb
 0140  5A				pop	dx			;restore starting sector number 	;ac048;bgb ;an045;bg
				b
 0141  8B 35				mov	SI,ds:[DI]		;get starting cluster number		;ac048;bgb	
						     ;an005;bgb
 0143  47				inc	DI			;skip firstclus in entry		;ac048;bgb
 0144  47				inc	DI								;ac048;bgb
 0145  57				PUSH	DI			;save it from getfilsiz 		;ac048;bgb
 0146  E8 0000 E			call	GETFILSIZ		;calc file size from number of clus	;ac048;bgb
 0149  5F				POP	DI			;restore di				;ac048;bgb
 014A  AB				STOSW				;ax=file size low			;ac048;bgb
 014B  8B C2				mov	ax,dx			;dx=filesize high			;ac048;bgb
 014D  AB				STOSW				;					;ac048;bgb
					restorereg <bx,dx,ax>	;offset, sector num, drive num			;ac048;bgb
			     1	IRP reg,<bx,dx,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0002                      2		?stackdepth = ?stackdepth - 1 
 014E  5B                    2		POP     bx 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 014F  5A                    2		POP     dx 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 0150  58                    2		POP     ax 
 0151  B9 0001				mov	cx,1		;number of sectors = 1				;ac048;bgb
 0154  E8 0000 E			call	DOINT26 	;write it out to disk				;ac048;bgb
 0157  C3				ret									;ac048;bgb
				endproc fix_entry								;ac048;bgb
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 0158                        1	fix_entry    ENDP 
														;ac048;bgb
				;*****************************************************************************	;ac048;bgb;an047;bgb
				; NEXTORPH - find the cluster number of the next orphan.  This assumes that	;ac048;bgb;an047;bgb
				;	     there is at least one lost cluster available.			;ac048;bgb;an047;bgb
				;										;ac048;bgb;an047;bgb
				; WARNING!! NOTE!! -->								;ac048;bgb;an047;bgb
				;										;ac048;bgb;an047;bgb
				; called by - PROCEDURE NAME							;ac048;bgb;an047;bgb
				;										;ac048;bgb;an047;bgb
				; inputs: AX -									;ac048;bgb;an047;bgb
				;	  BX -									;ac048;bgb;an047;bgb
				;	  CX -									;ac048;bgb;an047;bgb
				;	  DX -								      ;a;ac048;bgbn047;bgb
				;	  SP -								       ;;ac048;bgban047;bgb
				;	  BP -								      ;a;ac048;bgbn047;bgb
				;	  SI - cluster number of the previous orphan			      ;a;ac048;bgbn047;bgb
				;	  DI -								      ;a;ac048;bgbn047;bgb
				;	  DS -								      ;a;ac048;bgbn047;bgb
				;	  ES - points to one byte map of the fat			      ;a;ac048;bgbn047;bgb
				;									      ;a;ac048;bgbn047;bgb
				; output: AX -								       ;;ac048;bgban047;bgb
				;	  BX -								      ;a;ac048;bgbn047;bgb
				;	  CX -								       ;;ac048;bgban047;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-8
                                                            

				;	  DX -								      ;a;ac048;bgbn047;bgb
				;	  SP -								      ;a;ac048;bgbn047;bgb
				;	  BP -								      ;a;ac048;bgbn047;bgb
				;	  SI - cluster number of one past the orphan				;ac048;bgb;an047;bgb
				;	  DI - cluster number of the orphan				      ;a;ac048;bgbn047;bgb
				;	  DS -								      ;a;ac048;bgbn047;bgb
				;	  ES -								      ;a;ac048;bgbn047;bgb
				;									      ;a;ac048;bgbn047;bgb
				; Regs abused - none								;ac048;bgb;an047;bgb
				;									       ;;ac048;bgban047;bgb
				;logic: 1. save ax & es, and point to fat map					;ac048;bgb;an047;bgb
				;									      ;a;ac048;bgbn047;bgb
				;	2. do until the head of a chain is found:				;ac048;bgb ;an047;bg
				b
				;									       ;;ac048;bgban047;bgb
				;	   3. get the next cell 						;ac048;bgb    ;an047
				;bgb
				;									       ;;ac048;bgban047;bgb
				;	   4. bump pointers into fat map					;ac048;bgb ;an047;bg
				b
				;									       ;;ac048;bgban047;bgb
				;	5. restore ax & es						       ;;ac048;bgban047;bgb
				;*****************************************************************************;a;ac048;bgbn047;bgb
				procedure NEXTORPH,near 						      ;a;ac048;bgbn047;bgb
			     1							; 
			     1	Public	NEXTORPH				;				;AN000; 
 0158                        1	NEXTORPH    proc				;				;AN000; 
				    savereg <ax,es>			;save regs abused			;ac048;bgb
			     1	IRP reg,<ax,es> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 0158  50                    2		PUSH    ax 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 0159  06                    2		PUSH    es 
 015A  8E 06 0000 E		    mov     es,[FATMAP] 		;point to fat map			;ac048;bgb
				;   $do 									;ac048;bgb
 015E				$$DO16:
 015E  26: 8A 04		loopno: mov	al,byte ptr es:[si]	;get the indicated fatmap entry 	;ac048;bgb   ;an005;
				bgb
 0161  46				inc	si			;point to the next one			;ac048;bgb   ;an005;
				bgb
 0162  47				inc	di			;point to the next one			;ac048;bgb   ;an005;
				bgb
 0163  3C 89				cmp	AL,89H			;stop when you find an	89		;ac048;bgb
				;   $leave    z 	       ;this means head(80), found(1), and orphan(8)	;ac048;bgb
 0165  74 02			    JZ $$EN16
				;   $enddo									;ac048;bgb
 0167  EB F5			    JMP SHORT $$DO16
 0169				$$EN16:
				    restorereg <es,ax>			;restore regs				;ac048;bgb
			     1	IRP reg,<es,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 0169  07                    2		POP     es 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 016A  58                    2		POP     ax 
				return										;ac048;bgb
			     1	.xcref 
 016B                        1	??0003: 
 016B  C3                    1		RET 
 = 016B                      1	ret_l = ??0003 
			     1	.cref 
				endproc nextorph								;ac048;bgb
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 016C                        1	nextorph    ENDP 
														;ac048;bgb
														;ac048;bgb
				
				;****************************************************************************
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-9
                                                            

				; MARKMAP - make a mark in the fat map for every cluster encountered
				;
				; called by - markfat,
				;
				; inputs  - AL - the mark
				;	    DI - cluster number
				;
				; outputs - CY if crosslink found
				;	  - AH - previous mark
				;	  - crosscnt (count of number of crosslinks found)
				;	  - fatmap marked
				;
				; LOGIC
				;******
				;	- point to fatmap with es
				;	- if that cell has been found before,
				;	    then mark it crossed x'10'
				;	    else mark it found	 al
				;****************************************************************************
 016C				markmap: savereg <si,es>			 ;Save registers		 ;AN000;
			     1	IRP reg,<si,es> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 016C  56                    2		PUSH    si 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 016D  06                    2		PUSH    es 
 016E  33 F6				xor	si,si				;Get addr of map		;an005;bgb
 0170  8E 06 0000 E			mov	es,[FATMAP]			;Get addr of map		;an005;bgb
 0174  26: 8A 25			mov	ah,es:[di]			   ;Get entry at that spot	;an005;bgb
 0177  0A E4				or	ah,ah				;Is it zero?			;     ;
				;	$IF	NZ ;already found - mark crossed;If not, we got crosslink	;AC000;
 0179  74 11				JZ $$IF19
 017B  83 06 0000 E 01			   add	   word ptr crosscnt,1		;Count the crosslink		;     ;
 0180  83 16 0002 E 00			   adc	   word ptr crosscnt+2,0	;Count the crosslink		;     ;
 0185  26: 80 0D 10			   or	   byte ptr es:[di],10H 	;Resets zero in map		;An005;bgb
 0189  F9				   stc					;Indicate crosslink on ret	;     ;
				;	$ELSE	  ;not found - mark found	;No crosslink			;     ;
 018A  EB 04				JMP SHORT $$EN19
 018C				$$IF19:
 018C  26: 88 05			   mov	es:[di],al			;Set mark in map		;Ac005;bgb
 018F  F8				   clc					;Indicate things okay		;     ;
				;	$ENDIF					;				;AN000;
 0190				$$EN19:
					restorereg <es,si>			;				;AN005;bgb
			     1	IRP reg,<es,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth - 1 
 0190  07                    2		POP     es 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 0191  5E                    2		POP     si 
 0192  C3				ret					;				;     ;
				
				
				;****************************************************************************
				; CHKMAP - Compare FAT and FATMAP looking for badsectors and orphans
				;
				; called by -
				;
				; inputs  - fatmap
				;	  - dsize - number of clusters on the disk
				;
				; outputs - badsiz -
				;	  -
				;	  -
				; LOGIC
				;******
				;	- get addr of fatmap
				;	- get offset of 1st cluster in fatmap
				;	- do for all the clusters on the disk:
				;	    - if the cluster has been found
				;	      then get the next cluster in its chain
				;		   if the cell was never pointed to by anyone (0)
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-10
                                                            

				;		   then get the contents of that cell from the fat
				;			(the contents of the fat cell should be zero, too)
				;			if the fat-cell is not zero
				;			then (it should only be a bad sector)
				;			     if it is a bad sector, inc the bad-sector-counter
				;			     otherwise, we have found an orphan sector
				;	  end-of-loop
				;	- if there are any orphans,
				;	  then recover them
				;****************************************************************************
 0193				CHKMAP:
 0193  06			    push    es									;an014;bgb
 0194  8E 06 0000 E		    mov     es,fatmap		    ;get segment of the fatmap			;an005;bgb
 0198  33 F6			    xor     si,si			;get the offset of the fatmap		;an005;bgb
 019A  BE 0002			    mov     si,2			;go past the first two (invalid) entries;an005;bgb
				;do for all the clusters on the disk
 019D  8B 0E 0000 E		    mov     cx,[DSIZE]		    ;loop for the number of clusters on the disk
 01A1				CHKMAPLP:
 01A1  26: 8A 04		    mov     al,es:[si]			;move a byte from the fatmap to al	;an005;bgb
 01A4  0A C0			    or	    al,al			;is the cluster found already?
				;   $IF     Z				;fatmap cell is zero
 01A6  75 1D			    JNZ $$IF22
 01A8  E8 0024 R			call	unpack			;get the contents of it
				;	$IF	NZ			;is there something in the cell?
 01AB  74 18				JZ $$IF23
 01AD  3B 3E 0000 E			    cmp     di,[badval] 	;is the fat cell pointing to a bad sector? fff7
				;	    $IF     Z			; yes
 01B1  75 0A				    JNZ $$IF24
 01B3  FF 06 0000 E				inc  [badsiz]		  ;inc the bad sector counter
 01B7  26: C6 04 04				mov  byte ptr es:[si],4 	      ;Flag the map		;an005;bgb
				;	    $ELSE			; no, not a bad sector
 01BB  EB 08				    JMP SHORT $$EN24
 01BD				$$IF24:
 01BD  FF 06 0000 E		orphan: 	inc  [orphsiz]		; then its an orphan
 01C1  26: C6 04 08				mov  byte ptr es:[si],8 	      ;Flag it			;an005;bgb
				;	    $ENDIF
 01C5				$$EN24:
				;	$ENDIF
 01C5				$$IF23:
				;   $ENDIF
 01C5				$$IF22:
 01C5				CONTLP:
 01C5  46			    inc     si				;point si to next cluster
 01C6  E2 D9			    loop    chkmaplp
 01C8  83 3E 0000 E 00		    cmp     [orphsiz],0 							;an005;bgb
				;   $IF     A		 ;if there are any orphans, go recover them		;an005;bgb
 01CD  76 03			    JNA $$IF29
 01CF  E8 0000 E			call	recover
				;   $ENDIF
 01D2				$$IF29:
 01D2  07			    pop  es									;an014;bgb
 01D3  C3			RET18:	ret
				
				;*****************************************************************************
				; PROMPTRECOVER - do the actual recovering of files
				;
				; inputs:   es - points to fatmap
				;	    ax -
				;	    bx -
				;	    cx -
				;	    dx -
				;
				; outputs:
				; LOGIC
				;	- ask the user if he wants to convert the orphans to files
				;	-
				;	-
				;***************************************************************************
 01D4				PromptRecover:
 01D4  BA 0000 E		    mov     dx,OFFSET DG:FREEMES
 01D7  E8 0000 E		    call    PROMPTYN			    ;Ask user
				;   $IF     Z
 01DA  75 03			    JNZ $$IF31
 01DC  E9 02CF R			jmp	CHAINREC
				;   $ENDIF
 01DF				$$IF31:
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-11
                                                            

 01DF				NOCHAINREC:
 01DF  8E 06 0000 E			mov	es,[fatmap]			;Free all orphans ;an005;bgb
 01E3  BE 0002				mov	si,2						  ;an005;bgb
 01E6  8B 0E 0000 E			mov	cx,[dsize]
 01EA  33 D2				xor	dx,dx	     ;dx is the new value (free)
 01EC				CHKMAPLP2:
 01EC  26: 8A 04			mov	al,es:[si]	 ;get next byte from fatmap into al
 01EF  A8 08				TEST	AL,8		 ; is it an orphan?
				;	$IF	NZ		 ;yes
 01F1  74 03				JZ $$IF33
 01F3  E8 005D R			    call    PACK	 ;si=cluster number dx=new value
				;	$ENDIF
 01F6				$$IF33:
 01F6				NEXTCLUS:
 01F6  46			       inc     si
 01F7  E2 F3				loop	CHKMAPLP2
 01F9  33 C0				xor	ax,ax
 01FB  87 06 0000 E			XCHG	ax,[ORPHSIZ]		;number of orphans = zero
 01FF  B9 0000 E			mov	cx,OFFSET DG:FREEBYMES1 ;print msg
 0202  80 3E 0000 E 00			cmp	[DOFIX],0
				;	$IF	Z
 0207  75 06				JNZ $$IF35
 0209  B9 0000 E			    mov     cx,OFFSET DG:FREEBYMES2
 020C  A3 0000 E			    mov     [LCLUS],ax		 ;move number of lost clust would be ;an049;bgb
				;	$ENDIF
 020F				$$IF35:
 020F				DISPFRB:				 ;ax=lost clusters (1-fff6)
 020F  53				push	bx			 ;save it			     ;an049;bgb
 0210  51				push	cx			 ;save it			     ;an049;bgb
 0211  8A 0E 0000 E			mov	cl,[csize]		 ;get sectors per cluster (1-32)     ;an049;bgb
 0215  32 ED				xor	ch,ch			 ;zero out high byte		     ;an049;bgb
 0217  33 D2				xor	dx,dx			 ;zero out hi word for word mult     ;an049;bgb
 0219  F7 E1				mul	cx			 ;cx*ax=dx:ax  lost sectors (1-1ffec0);an049;bgb
 021B  8B DA				mov	bx,dx			 ;move high word for call	     ;an049;bgb
 021D  8B 0E 0000 E			mov	cx,ssize		 ;word to mult with		     ;an049;bgb
 0221  E8 0000 E			call	multiply_32_bits	 ;bx:ax is result		     ;an049;bgb
 0224  A3 0000 E			mov	word ptr rarg1,ax	 ;low word into low word	     ;an049;bgb
 0227  89 1E 0002 E			mov	word ptr rarg1+2,bx	 ;hi  word into hi  word	      ;an049;bgb
 022B  A3 0000 E			mov	[free_arg1],ax
 022E  89 1E 0000 E			mov	[free_arg2],bx						     ;an049;bgb
 0232  89 0E 0000 E			mov	[free_arg3],cx
 0236  59				pop	cx
 0237  5B				pop	bx
 0238  8B D1				mov	dx,cx				;Point to right message;an049;bgb
 023A  E8 0000 E			call	printf_crlf
 023D  C3				ret
				
				
				
				
				;*****************************************************************************
				; FINDCHAIN  -
				;
				; called by - recover
				;
				; inputs:
				;
				; outputs:
				; LOGIC - search thru entire fatmap
				;	-
				;	-
				;***************************************************************************
 = 0000				lostdeb  equ	0	;set private build version on				    ;an047;bgb
 023E  30 30 30 30 30		lost_str db	'00000' ;max size of cluster number
 0243				FINDCHAIN:
				;Do chain recovery on orphans
 0243  8E 06 0000 E			mov	es,[FATMAP]		; point to fatmap
 0247  BE 0002				mov	SI,2			; point to fatmap
 024A  8B D6				mov	dx,si			; point to fatmap
 024C  8B 0E 0000 E			mov	cx,[DSIZE]		;get total number of clusters on disk
 0250				CHKMAPLP3:
 0250  26: 8A 04			mov	al,es:[si]		;get next fatmap entry
 0253  46				inc	si			;point to next fatmap entry
							;has to be an orphan(08)
 0254  A8 08				TEST	AL,8				;Orphan?
 0256  74 73				jz	NEXTCLUS2			;Nope
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-12
                                                            

							;make sure its not a regular file entry
 0258  A8 01				TEST	AL,1				;Seen before ?
 025A  75 6F				jnz	NEXTCLUS2			;Yup
				;recover this chain
					savereg <si,cx,dx>			;Save search environment
			     1	IRP reg,<si,cx,dx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 025C  56                    2		PUSH    si 
 = 0002                      2		?stackdepth = ?stackdepth + 1 
 025D  51                    2		PUSH    cx 
 = 0003                      2		?stackdepth = ?stackdepth + 1 
 025E  52                    2		PUSH    dx 
 025F  4E				dec	SI
 0260  26: 80 0C 81			or	byte ptr es:[si],81H		;Mark as seen and head
				
				
				
 0264  83 06 0000 E 01			add	word ptr orphcnt,1		;Found a chain
 0269  83 16 0002 E 00			adc	word ptr orphcnt+2,0		;Found a chain
 026E  8B F2				mov	SI,dx			;point to the next fatmap entry
 0270				CHAINLP:
 0270  E8 0024 R			call	UNPACK			;si = fat cell
 0273  87 F7				XCHG	SI,DI			;si=contents, di=cell number
 0275  3B 36 0000 E			cmp	SI,[EOFVAL]		;is this the end of the file?
 0279  73 4D				JAE	CHGOON			;yes, then we are done
 027B  57				PUSH	DI			;no, not eof
				;dont do this next part if any of two conditions:
				;   1. invalid cluster number
				;   2. points to itself
 027C  83 FE 02				cmp	SI,2			;well, is it a valid cluster number?
 027F  72 12				JB	INSERTEOF			;Bad cluster number
 0281  3B 36 0000 E			cmp	SI,[dsize]
 0285  77 0C				JA	INSERTEOF			;Bad cluster number
 0287  3B F7				cmp	SI,DI			;how bout if it points to itself?
 0289  74 08				jz	INSERTEOF			;Tight loop
				; find out what it points TO
 028B  E8 00A8 R			    call    CROSSCHK
 028E  F6 C4 08				    TEST    AH,8			    ;Points to a non-orphan?
 0291  75 13				    jnz     CHKCHHEAD			    ;Nope
							      ;orphan points to nothing
 0293				INSERTEOF:
				; you come here if:
				;   1. invalid cluster number
				;   2. points to itself
				;   3. points to nothing
 0293  5E				POP	SI			;the previous cluster number
 0294  BA 0FFF				mov	dx,0FFFH		;get eof value (12-bit)
 0297  80 3E 0000 E 00			cmp	[BIGFAT],0
 029C  74 03				jz	FAT12_4
 029E  BA FFFF				mov	dx,0FFFFH		;get eof value (16-bit)
 02A1				FAT12_4:
 02A1  E8 005D R			call	PACK			;stick it in!
 02A4  EB 22				jmp	SHORT CHGOON		;and we are done
				; orphan point to a head entry
 02A6				CHKCHHEAD:
 02A6  F6 C4 80				TEST	AH,80H				;Previosly marked head?
 02A9  74 11				jz	ADDCHAIN			;Nope
 02AB  26: 80 25 7F			AND	BYTE PTR es:[DI],NOT 80H	   ;Turn off head bit
 02AF  83 2E 0000 E 01			sub	word ptr orphcnt,1		;Wasn't really a head
 02B4  83 1E 0002 E 00			sbb	word ptr orphcnt+2,0		;Wasn't really a head
 02B9  5F				POP	DI				;Clean stack
 02BA  EB 0C				jmp	SHORT CHGOON
 02BC				ADDCHAIN:
 02BC  F6 C4 01				TEST	AH,1				;Previosly seen?
 02BF  75 D2				jnz	INSERTEOF			;Yup, don't make a cross link
 02C1  26: 80 0D 01			or	BYTE PTR es:[DI],1		   ;Mark as seen
 02C5  5F				POP	DI				;Clean stack
 02C6  EB A8				jmp	CHAINLP 			;Follow chain
 02C8				CHGOON:
 02C8  5A				POP	dx				;Restore search
 02C9  59				POP	cx
 02CA  5E				POP	SI
 02CB				NEXTCLUS2:
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-13
                                                            

 02CB  42				inc	dx
 02CC  E2 82				loop	CHKMAPLP3
 02CE  C3				ret
				
				
				
				;*****************************************************************************	;ac048;bgb
				; CHAINREC - the user has requested us to recover the lost clusters		;ac048;bgb
				;										;ac048;bgb
				; inputs:									;ac048;bgb
				; note: although called from PROMPTRECOVER, this routine returns control to	;ac048;bgb
				;	recover via the ret instruction.					;ac048;bgb
				;*****************************************************************************	;ac048;bgb
														;ac048;bgb
				;*****************************************************************************	;ac048;bgb
				; CHAINREC - The user has requested us to recover the lost clusters		;ac048;bgb
				;										;ac048;bgb
				; WARNING!! NOTE!! --> the count of the number of lost cluster chains remains,
				;		       for this proc, a single word.  More than 64k chains
				;		       will cause this proc to fail.
				;										;ac048;bgb
				; called by - PROCEDURE NAME							;ac048;bgb
				;										;ac048;bgb
				; inputs: AX - N/A								;ac048;bgb
				;	  bx -									;ac048;bgb
				;	  cx - N/A								;ac048;bgb
				;	  dx - N/A								;ac048;bgb
				;	  SP -									;ac048;bgb
				;	  BP - N/A								;ac048;bgb
				;	  SI - N/A								;ac048;bgb
				;	  DI - N/A								;ac048;bgb
				; data:   root_entries								;ac048;bgb
				;	  orphcnt								;ac048;bgb
				;										;ac048;bgb
				; output: AX -									;ac048;bgb
				;	  bx -									;ac048;bgb
				;	  cx -									;ac048;bgb
				;	  dx -									;ac048;bgb
				;	  SP -									;ac048;bgb
				;	  BP -									;ac048;bgb
				;	  SI -									;ac048;bgb
				;	  DI-									;ac048;bgb
				;										;ac048;bgb
				; Regs abused - 								;ac048;bgb
				;										;ac048;bgb
				;logic: 1.									;ac048;bgb
				;*****************************************************************************	;ac048;bgb
 02CF				CHAINREC:									;ac048;bgb
 02CF  06				push	es		;save es if it is used for anything		;ac048;bgb
 02D0  1E				push	ds		;make es point to data				;ac048;bgb
 02D1  07				pop	es								;ac048;bgb
				;find the cluster number of the orphan						;ac048;bgb
 02D2  BE 0002				mov	SI,2			;start at first cluster ;an005;bgb	;ac048;bgb
 02D5  BF 0001				mov	DI,1			;point to previous cluster?		;ac048;bgb
 02D8  E8 0158 R			call	NEXTORPH		;di points to orphan			;ac048;bgb
				;init for loop									;ac048;bgb
					savereg <si,di> 		;save orphan, orphan+1			;ac048;bgb
			     1	IRP reg,<si,di> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0004                      2		?stackdepth = ?stackdepth + 1 
 02DB  56                    2		PUSH    si 
 = 0005                      2		?stackdepth = ?stackdepth + 1 
 02DC  57                    2		PUSH    di 
 02DD  8B F7				mov	SI,DI			;si point to orphan			;ac048;bgb
 02DF  33 C0				xor	ax,ax		 ;set count of dir entries processed to zero;ac048;bgb
 02E1  8B 16 0000 E			mov	dx,word ptr orphcnt	;get low word of lost clusters		  ;ac048;bgb;an049;b
				gb
 02E5  89 16 0000 E			mov	word ptr temp_dd,dx	;get low word of lost clusters	     ;an049;bgb
 02E9  8B 16 0002 E			mov	dx,word ptr orphcnt+2	;get hi  word of lost clusters		  ;an049;bgb
 02ED  89 16 0002 E			mov	word ptr temp_dd+2,dx	;get hi  word of lost clusters	     ;an049;bgb
 02F1  BD 0000 R			mov	BP,OFFSET DG:PHONEY_STACK ;Set BP to point to "root"		;ac048;bgb
				;do for all dir entries:							;ac048;bgb
 02F4				MAKFILLP:									;ac048;bgb
				;   $DO 				;do for all root entries		;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-14
                                                            

 02F4				$$DO37:
					savereg <ax>		  ;cnt of entries processed, num orphans  ;ac048;bgb;an049;bgb
			     1	IRP reg,<ax> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0006                      2		?stackdepth = ?stackdepth + 1 
 02F4  50                    2		PUSH    ax 
 02F5  E8 0000 E			call	GETENT			;DI points to entry			;ac048;bgb
 02F8  80 3D E5				cmp	BYTE PTR ds:[DI],0E5H	;is this dir entry erased?	     ;an;ac048;bgb005;bgb
				;	$if	z,or								;ac048;bgb
 02FB  74 05				JZ $$LL38
 02FD  80 3D 00				cmp	BYTE PTR ds:[DI],0	;is this dir entry empty?	     ;an;ac048;bgb005;bgb
				;	$if	z								;ac048;bgb
 0300  75 36				JNZ $$IF38
 0302				$$LL38:
 0302  C6 06 0000 E 01		GOTENT:     mov     [HAVFIX],1		;Making a fix				;ac048;bgb
 0307  80 3E 0000 E 00			    cmp     [DOFIX],0		;/f parameter specified?		;ac048;bgb
				;	    $if     NZ			;yes- do the fix			;ac048;bgb
 030C  74 03				    JZ $$IF39
 030E  E8 010C R				call	fix_entry						;ac048;bgb
				;	    $endif								;ac048;bgb
 0311				$$IF39:
 0311				ENTMADE:    restorereg <ax,di,si>					     ;ac048;bgb;an049;bgb
			     1	IRP reg,<ax,di,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0005                      2		?stackdepth = ?stackdepth - 1 
 0311  58                    2		POP     ax 
 = 0004                      2		?stackdepth = ?stackdepth - 1 
 0312  5F                    2		POP     di 
 = 0003                      2		?stackdepth = ?stackdepth - 1 
 0313  5E                    2		POP     si 
 0314  83 2E 0000 E 01			    sub     word ptr temp_dd,1	 ;finished with one orphan		 ;ac048;bgb;an049;bg
				b
 0319  83 1E 0002 E 00			    sbb     word ptr temp_dd+2,0 ;finished with one orphan		 ;ac048;bgb;an049;bg
				b
 031E  83 3E 0000 E 00			    cmp     word ptr temp_dd,0	;is that the last one?			;ac048;bgb;an049;bgb
				;	    $IF     Z,AND		;no, check the hi word		     ;an049;bgb
 0323  75 0A				    JNZ $$IF41
 0325  83 3E 0002 E 00			    cmp     word ptr temp_dd+2,0;is that the last one?			;ac048;bgb;an049;bgb
				;	    $IF     Z			;neither are zero		     ;an049;bgb
 032A  75 03				    JNZ $$IF41
 032C  EB 2A 90					jmp	RET100		    ; yes,we are done			    ;ac048;bgb;an049
				;bgb
				;	    $endif							     ;an049;bgb
 032F				$$IF41:
 032F  E8 0158 R			    call    NEXTORPH		;get the cluster of the next one	;ac048;bgb
					    savereg <si,di>							;ac048;bgb
			     1	IRP reg,<si,di> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 = 0004                      2		?stackdepth = ?stackdepth + 1 
 0332  56                    2		PUSH    si 
 = 0005                      2		?stackdepth = ?stackdepth + 1 
 0333  57                    2		PUSH    di 
 0334  8B F7				    mov     SI,DI							;ac048;bgb
				;	$else				;dir entry was not erased or zero	;ac048;bgb
 0336  EB 01				JMP SHORT $$EN38
 0338				$$IF38:
 0338				NEXTENT:    restorereg <ax>						     ;ac048;bgb;an049;bgb
			     1	IRP reg,<ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0004                      2		?stackdepth = ?stackdepth - 1 
 0338  58                    2		POP     ax 
				;	$endif									;ac048;bgb
 0339				$$EN38:
 0339  40			NXTORP: inc	ax								;ac048;bgb
 033A  3B 06 0000 E			cmp	ax,root_entries 	;do for 0 to (root_entries - 1) 	;ac048;bgb
				;   $leave	z								;ac048;bgb
 033E  74 02			    JZ $$EN37
				;   $ENDDO									;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-15
                                                            

 0340  EB B2			    JMP SHORT $$DO37
 0342				$$EN37:
					restorereg <ax,ax>			;Clean Stack from si,di 	;ac048;bgb
			     1	IRP reg,<ax,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0003                      2		?stackdepth = ?stackdepth - 1 
 0342  58                    2		POP     ax 
 = 0002                      2		?stackdepth = ?stackdepth - 1 
 0343  58                    2		POP     ax 
 0344  29 16 0000 E			sub	word ptr orphcnt,dx		;Couldn't make them all         ;ac048;bgb
 0348  83 1E 0002 E 00			sbb	word ptr orphcnt+2,0		;Couldn't make them all         ;ac048;bgb
 034D  BA 0000 E			mov	dx,OFFSET DG:CREATMES						;ac048;bgb
 0350  C6 06 0000 E 00			mov	byte ptr [arg_buf],0						;ac048;bgb
 0355  E8 0000 E			call	EPRINT								;ac048;bgb
 0358  07			RET100: pop	es			;restore es				;ac048;bgb
 0359  C3				ret									;ac048;bgb
														;ac048;bgb
													       ;ac048;bgb
														;ac048;bgb
				
				;*****************************************************************************
				;*****************************************************************************
				SUBTTL	AMDONE	- Finish up routine
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-16
AMDONE	- Finish up routine                                  

				PAGE
				Public	AmDone
 035A				AMDONE:
				ASSUME	DS:NOTHING
 035A  36: 80 3E 0000 E 00		cmp	[DIRTYFAT],0
 0360  74 5F				jz	NOWRITE 			;FAT not dirty
 0362  36: 80 3E 0000 E 00		cmp	[DOFIX],0
 0368  74 57				jz	NOWRITE 			;Not supposed to fix
 036A				REWRITE:
 036A  36: C5 1E 0000 E			LDS	bx,[THISDPB]
				ASSUME	DS:NOTHING
 036F  8B 4F 0F				mov	cx,[bx.dpb_FAT_size]		;Sectors for one fat (DCR)	;AC000;
 0372  8B F9				mov	DI,cx
 0374  8A 4F 08				mov	CL,[bx.dpb_FAT_count]		;Number of FATs
 0377  8B 57 06				mov	dx,[bx.dpb_first_FAT]		;First sector of FAT
 037A  0E				PUSH	CS
 037B  1F				POP	DS
				ASSUME	DS:DG
 037C  C6 06 0000 E 00			mov	[ERRCNT],0
				; set up to write to the disk
 0381  33 DB				xor	bx,bx		     ;offset of the fat-table ;an005;bgb
 0383  8E 06 0000 E			mov	es,fattbl_seg	     ;segment of the fat-table ;an005;bgb
 0387  A0 0000 E			mov	AL,[ALLDRV]
 038A  FE C8				dec	AL
 038C  B4 01				mov	AH,1
 038E  51				PUSH	cx
 038F				WRTLOOP:
 038F  87 CF				XCHG	cx,DI
 0391  52				PUSH	dx
 0392  51				PUSH	cx
 0393  57				PUSH	DI
 0394  50				PUSH	ax
				
 0395  E8 0000 E			call	Write_Disk			;Do relative sector write		;AC000;
				
 0398  73 13				JNC	WRTOK
 039A  FE 06 0000 E			inc	[ERRCNT]
										;mov	 [badrw_str],offset dg:writing
 039E  58				POP	ax				; Get fat # in AH
 039F  50				PUSH	ax				; Back on stack
 03A0  86 C4				xchg	al,ah				; Fat # to AL
 03A2  32 E4				xor	ah,ah				; Make it a word
 03A4  A3 0000 E			mov	[badrw_num],ax
 03A7  BA 0000 E			mov	dx,offset dg:badw_arg
 03AA  E8 0000 E			call	PRINTf_crlf
 03AD				WRTOK:
 03AD  58				POP	ax
 03AE  59				POP	cx
 03AF  5F				POP	DI
 03B0  5A				POP	dx
 03B1  FE C4				inc	AH
 03B3  03 D7				ADD	dx,DI
 03B5  E2 D8				loop	WRTLOOP 			;Next FAT
 03B7  59				POP	cx				;Number of FATs
 03B8  3A 0E 0000 E			cmp	CL,[ERRCNT]			;Error on all?
				;	$if	e
 03BC  75 03				JNE $$IF47
 03BE  E9 0000 E			    jmp fatal
				;	$endif
 03C1				$$IF47:
				; make sure that the data fields are always adressable, because
				;we can come here after a ctl - break has happened. so point to them w/ cs:
 03C1				NOWRITE:
					DOS_Call Disk_Reset			;				;AC000;
			     1							; 
 03C1  B4 0D                 1		mov	ah,Disk_Reset			;				;AN000; 
 03C3  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 03C5  BA 0000 E			mov	dx,OFFSET DG:USERDIR		;Recover users directory
					DOS_Call ChDir				;				;AC000;
			     1							; 
 03C8  B4 3B                 1		mov	ah,ChDir			;				;AN000; 
 03CA  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 03CC  2E: 80 3E 0000 E 01		cmp	BYTE PTR cs:[FRAGMENT],1      ;Check for any fragmented files?	;an029;bgb
 03D2  75 03				jnz	DONE				;No -- we're finished
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Page     1-17
AMDONE	- Finish up routine                                  

 03D4  E8 0000 E			call	CHECKFILES			;Yes -- report any fragments
				Public	Done
 03D7				DONE:
				ASSUME	DS:NOTHING
 03D7  2E: 8A 16 0000 E			mov	DL,cs:[USERDEV] 		   ;Recover users drive 	;an029;bgb
					DOS_Call Set_Default_Drive		;				;AC000;
			     1							; 
 03DC  B4 0E                 1		mov	ah,Set_Default_Drive			;				;AN000; 
 03DE  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 03E0  C3				ret
				
				
				
				
				
				
				
				
				
				
				
					pathlabl chkfat
				
				
 03E1				CODE	ENDS
					END

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-1


Macros:

		N a m e			Lines

ARGVAR . . . . . . . . . . . . .  	  23
ASMVAR . . . . . . . . . . . . .  	   3
ASMVARS  . . . . . . . . . . . .  	   3
ASSERT . . . . . . . . . . . . .  	   0
CALLINSTALL  . . . . . . . . . .  	  12
DOSASSUME  . . . . . . . . . . .  	   3
DOS_CALL . . . . . . . . . . . .  	   4
ENTER  . . . . . . . . . . . . .  	   3
ENTERCRIT  . . . . . . . . . . .  	   1
ERRNZ  . . . . . . . . . . . . .  	   4
EXTENDED_MESSAGE . . . . . . . .  	   8
FMT  . . . . . . . . . . . . . .  	   0
LEAVE  . . . . . . . . . . . . .  	   2
LEAVECRIT  . . . . . . . . . . .  	   1
LOCALVAR . . . . . . . . . . . .  	  23
MESSAGE  . . . . . . . . . . . .  	   4
PARSE_MESSAGE  . . . . . . . . .  	   8
PATHLABL . . . . . . . . . . . .  	  10
POPFF  . . . . . . . . . . . . .  	   6
SET_DATA_SEGMENT . . . . . . . .  	   9

Structures and Records:

                N a m e                 Width   # fields
                                        Shift   Width   Mask    Initial

ARENA  . . . . . . . . . . . . .  	0010	0005
  ARENA_SIGNATURE  . . . . . . .  	0000
  ARENA_OWNER  . . . . . . . . .  	0001
  ARENA_SIZE . . . . . . . . . .  	0003
  ARENA_RESERVED . . . . . . . .  	0005
  ARENA_NAME . . . . . . . . . .  	0008
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
A_DEVICEPARAMETERS . . . . . . .  	0026	0012
  SPECIALFUNCTIONS . . . . . . .  	0000
  DEVICETYPE . . . . . . . . . .  	0001
  DEVICEATTRIBUTES . . . . . . .  	0002
  NUMBEROFCYLINDERS  . . . . . .  	0004
  MEDIATYPE  . . . . . . . . . .  	0006
  BYTEPERSECTOR  . . . . . . . .  	0007
  SECTORSPERCLUSTER  . . . . . .  	0009
  RESERVEDSECTORS  . . . . . . .  	000A
  NUMBEROFFATS . . . . . . . . .  	000C
  ROOTENTRIES  . . . . . . . . .  	000D
  TOTALSECTORS . . . . . . . . .  	000F
  MEDIADESCRIPTOR  . . . . . . .  	0011
  SECTORSPERFAT  . . . . . . . .  	0012
  SECTORSPERTRACK  . . . . . . .  	0014
  HEADS  . . . . . . . . . . . .  	0016
  HIDDENSECTORS  . . . . . . . .  	0018
  EXT_TOTAL_SECTORS  . . . . . .  	001C
  RESERVEDAREA . . . . . . . . .  	0020
BPBLOCK  . . . . . . . . . . . .  	000D	0008
  BPSECSZ  . . . . . . . . . . .  	0000
  BPCLUS . . . . . . . . . . . .  	0002
  BPRES  . . . . . . . . . . . .  	0003
  BPFTCNT  . . . . . . . . . . .  	0005
  BPDRCNT  . . . . . . . . . . .  	0006
  BPSCCNT  . . . . . . . . . . .  	0008
  BPMEDIA  . . . . . . . . . . .  	000A
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-2


  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
  EMS_PAGEFRAME_NUMBER . . . . .  	001A
  EMS_SEG_CNT  . . . . . . . . .  	001C
  EMS_PAGE_FRAME . . . . . . . .  	001E
  EMS_RESERVED . . . . . . . . .  	0020
  EMS_MAP_BUFF . . . . . . . . .  	0022
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
DIRENT . . . . . . . . . . . . .  	0028	000C
  DIRNAM . . . . . . . . . . . .  	0008
  DIRATT . . . . . . . . . . . .  	0013
  DIRCP  . . . . . . . . . . . .  	0014
  DIR_XA . . . . . . . . . . . .  	0016
  DIRATT2  . . . . . . . . . . .  	0018
  DIRRES . . . . . . . . . . . .  	0019
  DIRTIM . . . . . . . . . . . .  	001E
  DIRDAT . . . . . . . . . . . .  	0020
  DIRCLUS  . . . . . . . . . . .  	0022
  DIRESIZ  . . . . . . . . . . .  	0024
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
DPB  . . . . . . . . . . . . . .  	0021	0012
  DPB_DRIVE  . . . . . . . . . .  	0000
  DPB_UNIT . . . . . . . . . . .  	0001
  DPB_SECTOR_SIZE  . . . . . . .  	0002
  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
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-3


  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
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
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
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-4


RELATIVE_SECTOR_BUFFER . . . . .  	000A	0005
  START_SECTOR_LOW . . . . . . .  	0000
  START_SECTOR_HIGH  . . . . . .  	0002
  NUMBER_SECTORS . . . . . . . .  	0004
  BUFFER_OFFSET  . . . . . . . .  	0006
  BUFFER_SEGMENT . . . . . . . .  	0008
SF . . . . . . . . . . . . . . .  	0008	0003
  SFLINK . . . . . . . . . . . .  	0000
  SFCOUNT  . . . . . . . . . . .  	0004
  SFTABLE  . . . . . . . . . . .  	0006
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
  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
SUBLIST_STRUC  . . . . . . . . .  	000B	0009
  SUBLIST_SIZE . . . . . . . . .  	0000
  SUBLIST_RSV  . . . . . . . . .  	0001
  SUBLIST_OFFSET . . . . . . . .  	0002
  SUBLIST_SEGMENT  . . . . . . .  	0004
  SUBLIST_NUMBER . . . . . . . .  	0006
  SUBLIST_TYPE . . . . . . . . .  	0007
  SUBLIST_MAX  . . . . . . . . .  	0008
  SUBLIST_MIN  . . . . . . . . .  	0009
  SUBLIST_CHAR . . . . . . . . .  	000A
SYMBOL_ENTRY . . . . . . . . . .  	0106	0004
  SYM_VALUE  . . . . . . . . . .  	0000
  SYM_TYPE . . . . . . . . . . .  	0004
  SYM_LEN  . . . . . . . . . . .  	0006
  SYM_NAME . . . . . . . . . . .  	0007
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
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-5


  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
  USER_BP  . . . . . . . . . . .  	000C
  USER_DS  . . . . . . . . . . .  	000E
  USER_ES  . . . . . . . . . . .  	0010
  USER_IP  . . . . . . . . . . .  	0012
  USER_CS  . . . . . . . . . . .  	0014
  USER_F . . . . . . . . . . . .  	0016
XAL  . . . . . . . . . . . . . .  	0200	0005
  XAL_TSIZE  . . . . . . . . . .  	0000
  XAL_TCOUNT . . . . . . . . . .  	0002
  XAL_LSIZE  . . . . . . . . . .  	0004
  XAL_LCOUNT . . . . . . . . . .  	0006
  XAL_DATA . . . . . . . . . . .  	0008

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DG . . . . . . . . . . . . . . .  	GROUP
  DATA . . . . . . . . . . . . .  	0000	PARA	PUBLIC	'DATA'
  CONST  . . . . . . . . . . . .  	0000	PARA	PUBLIC	'DATA'
  CODE . . . . . . . . . . . . .  	03E1	PARA	PUBLIC	'CODE'
  CSTACK . . . . . . . . . . . .  	0000	PARA	STACK	'STACK'
  LASTSEG  . . . . . . . . . . .  	0000	PARA	PUBLIC	'LAST'
PSP  . . . . . . . . . . . . . .  	0000	PARA	PUBLIC	'DUMMY'

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	
ADDCHAIN . . . . . . . . . . . .  	L NEAR	02BC	CODE	Global
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	
ALLDRV . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
ALLOC  . . . . . . . . . . . . .  	NUMBER	0048	
ALLOCOPER  . . . . . . . . . . .  	NUMBER	0058	
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	
AMDONE . . . . . . . . . . . . .  	L NEAR	035A	CODE	Global
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-6


APPEND_OFF . . . . . . . . . . .  	NUMBER	0000	
APPEND_ON  . . . . . . . . . . .  	NUMBER	0001	
APPEND_X . . . . . . . . . . . .  	NUMBER	B706	
APPEND_X_SET . . . . . . . . . .  	NUMBER	0001	
ARENA_OWNER_SYSTEM . . . . . . .  	NUMBER	0000	
ARENA_SIGNATURE_END  . . . . . .  	NUMBER	005A	
ARENA_SIGNATURE_NORMAL . . . . .  	NUMBER	004D	
ARG1 . . . . . . . . . . . . . .  	V WORD	0000	DATA	External
ARG_BUF  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
ASCIIZ_END . . . . . . . . . . .  	NUMBER	0000	
ASSIGNOPER . . . . . . . . . . .  	NUMBER	005F	
ASSIGN_CHECK . . . . . . . . . .  	NUMBER	8000	
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	

badrw_num  . . . . . . . . . . .  	V WORD	0000	CONST	External
BADRW_STR  . . . . . . . . . . .  	V WORD	0000	CONST	External
BADSIZ . . . . . . . . . . . . .  	V WORD	0000	CONST	External
BADVAL . . . . . . . . . . . . .  	V WORD	0000	CONST	External
BADW_ARG . . . . . . . . . . . .  	V WORD	0000	CONST	External
BAD_EXIT . . . . . . . . . . . .  	NUMBER	00FF	
BIGFAT . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
BIG_FAT_THRESHOLD  . . . . . . .  	NUMBER	0FF6	
BLANK  . . . . . . . . . . . . .  	NUMBER	0020	
BUFFERFLAG . . . . . . . . . . .  	NUMBER	FFFF	
BUFINSIZ . . . . . . . . . . . .  	NUMBER	0014	
BUF_DIRTY  . . . . . . . . . . .  	NUMBER	0040	
BUF_DPB  . . . . . . . . . . . .  		000D	
BUF_FILL . . . . . . . . . . . .  		0011	
BUF_FLAGS  . . . . . . . . . . .  		0005	
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	
bytes_per_sector . . . . . . . .  	V WORD	0000	DATA	External

calc_fatmap_seg  . . . . . . . .  	N PROC	00D3	CODE	Global	Length = 0039
calc_fat_addr  . . . . . . . . .  	N PROC	000A	CODE	Global	Length = 001A
CARGS  . . . . . . . . . . . . .  	NUMBER	0000	
CHAINLP  . . . . . . . . . . . .  	L NEAR	0270	CODE	Global
CHAINREC . . . . . . . . . . . .  	L NEAR	02CF	CODE	Global
CHAR_OPER  . . . . . . . . . . .  	NUMBER	0037	
CHDIR  . . . . . . . . . . . . .  	NUMBER	003B	
CHECKFILES . . . . . . . . . . .  	L NEAR	0000	CODE	External
CHECKNOFMES  . . . . . . . . . .  	L NEAR	0000	CODE	External
CHGOON . . . . . . . . . . . . .  	L NEAR	02C8	CODE	Global
CHKCHHEAD  . . . . . . . . . . .  	L NEAR	02A6	CODE	Global
CHKMAP . . . . . . . . . . . . .  	L NEAR	0193	CODE	Global
CHKMAPLP . . . . . . . . . . . .  	L NEAR	01A1	CODE	Global
CHKMAPLP2  . . . . . . . . . . .  	L NEAR	01EC	CODE	Global
CHKMAPLP3  . . . . . . . . . . .  	L NEAR	0250	CODE	Global
CHK_ERROR  . . . . . . . . . . .  	NUMBER	0001	
CHMOD  . . . . . . . . . . . . .  	NUMBER	0043	
CLOSE  . . . . . . . . . . . . .  	NUMBER	003E	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-7


COMMIT . . . . . . . . . . . . .  	NUMBER	0068	
CONTCH . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
CONTLP . . . . . . . . . . . . .  	L NEAR	01C5	CODE	Global
CREAT  . . . . . . . . . . . . .  	NUMBER	003C	
CREATENEWFILE  . . . . . . . . .  	NUMBER	005B	
CREATETEMPFILE . . . . . . . . .  	NUMBER	005A	
CREATE_PROCESS_DATA_BLOCK  . . .  	NUMBER	0026	
CREATMES . . . . . . . . . . . .  	V BYTE	0000	CONST	External
CRITASSIGN . . . . . . . . . . .  	NUMBER	0008	
CRITDEVICE . . . . . . . . . . .  	NUMBER	0002	
CRITDISK . . . . . . . . . . . .  	NUMBER	0001	
CRITICAL_ERROR_FAIL  . . . . . .  	NUMBER	0003	
CRITIFS  . . . . . . . . . . . .  	NUMBER	0006	
CRITMEM  . . . . . . . . . . . .  	NUMBER	0001	
CRITNET  . . . . . . . . . . . .  	NUMBER	0005	
CRITSFT  . . . . . . . . . . . .  	NUMBER	0001	
CRITSHARE  . . . . . . . . . . .  	NUMBER	0001	
CROSSCHK . . . . . . . . . . . .  	N PROC	00A8	CODE	Global	Length = 0011
CROSSCNT . . . . . . . . . . . .  	V DWORD	0000	CONST	External
CSIZE  . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
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	
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	

DAY_MASK . . . . . . . . . . . .  	NUMBER	001F	
DBCS . . . . . . . . . . . . . .  	NUMBER	0000	
DEALLOC  . . . . . . . . . . . .  	NUMBER	0049	
DEBUG  . . . . . . . . . . . . .  	NUMBER	0000	
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	
DIRCHAR  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
DIRPROC  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
DIRSTRLEN  . . . . . . . . . . .  	NUMBER	0043	
DIRTYFAT . . . . . . . . . . . .  	V BYTE	0000	CONST	External
DIR_ATTRIBUTE  . . . . . . . . .  	NUMBER	0010	
DIR_ENTRIES_PER_SECTOR . . . . .  	NUMBER	0010	
DIR_SEARCH_FIRST . . . . . . . .  	NUMBER	0011	
DIR_SEARCH_NEXT  . . . . . . . .  	NUMBER	0012	
DISK_ERROR . . . . . . . . . . .  	NUMBER	0080	
DISK_RESET . . . . . . . . . . .  	NUMBER	000D	
DISPFRB  . . . . . . . . . . . .  	L NEAR	020F	CODE	Global
Display_Interface  . . . . . . .  	L NEAR	0000		External
DOCRLF . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
DOFIX  . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
DOINT26  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
DONE . . . . . . . . . . . . . .  	L NEAR	03D7	CODE	Global
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-8


DO_INCLUDE . . . . . . . . . . .  	NUMBER	0001	
DPBSIZ . . . . . . . . . . . . .  	NUMBER	0021	
DRIVE_NOT_READY  . . . . . . . .  	NUMBER	0002	
DRVCHAR  . . . . . . . . . . . .  	NUMBER	003A	
DSIZE  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
DSKSIZ . . . . . . . . . . . . .  	NUMBER	000D	
DUP_PDB  . . . . . . . . . . . .  	NUMBER	0055	

ECS_CALL . . . . . . . . . . . .  	NUMBER	0063	
EMS_MAP_BUFF_SIZE  . . . . . . .  	NUMBER	000C	
end_of_fatmap  . . . . . . . . .  	V WORD	0000	DATA	External
ENTMADE  . . . . . . . . . . . .  	L NEAR	0311	CODE	Global
ENTRYPOINT . . . . . . . . . . .  	NUMBER	00C0	
ENTSIZ . . . . . . . . . . . . .  	NUMBER	0028	
EOFVAL . . . . . . . . . . . . .  	V WORD	0000	CONST	External
EPRINT . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
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	
ERRCNT . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
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	
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	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-9


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_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	
EXIT . . . . . . . . . . . . . .  	NUMBER	004C	
ExitStatus . . . . . . . . . . .  	V BYTE	0000	DATA	External
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	
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	
EXT_OPEN_I24_OFF . . . . . . . .  	NUMBER	0002	
EXT_OPEN_ON  . . . . . . . . . .  	NUMBER	0001	

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FAT12_4  . . . . . . . . . . . .  	L NEAR	02A1	CODE	Global
fatal  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
FATAL_END  . . . . . . . . . . .  	V WORD	0000	CONST	External
fatcnt . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
FATMAP . . . . . . . . . . . . .  	V WORD	0000	DATA	External
fatsiz . . . . . . . . . . . . .  	V WORD	0000	DATA	External
fattbl . . . . . . . . . . . . .  	V WORD	0000	DATA	External
fattbl_seg . . . . . . . . . . .  	V WORD	0000	DATA	External
FCB  . . . . . . . . . . . . . .  	NUMBER	005C	
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	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-10


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	
FCB_TO_ASCZ  . . . . . . . . . .  	L NEAR	0000	CODE	External
FCHK . . . . . . . . . . . . . .  	NUMBER	0001	
FDELIM . . . . . . . . . . . . .  	NUMBER	0002	
FFCB . . . . . . . . . . . . . .  	NUMBER	0008	
FILDIRENT  . . . . . . . . . . .  	NUMBER	0010	
FILE_TIMES . . . . . . . . . . .  	NUMBER	0057	
FILPERPROC . . . . . . . . . . .  	NUMBER	0014	
FINDCHAIN  . . . . . . . . . . .  	L NEAR	0243	CODE	Global
FIND_FIRST . . . . . . . . . . .  	NUMBER	004E	
FIND_NEXT  . . . . . . . . . . .  	NUMBER	004F	
FIXMES_ARG . . . . . . . . . . .  	V WORD	0000	CONST	External
FIXMFLG  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
fix_entry  . . . . . . . . . . .  	N PROC	010C	CODE	Global	Length = 004C
FOUND_NO . . . . . . . . . . . .  	NUMBER	0000	
FOUND_YES  . . . . . . . . . . .  	NUMBER	0001	
FRAGMENT . . . . . . . . . . . .  	V BYTE	0000	CONST	External
FREEBYMES1 . . . . . . . . . . .  	V BYTE	0000	CONST	External
FREEBYMES2 . . . . . . . . . . .  	V BYTE	0000	CONST	External
FREEMES  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
FREE_ARG1  . . . . . . . . . . .  	V WORD	0000	CONST	External
FREE_ARG2  . . . . . . . . . . .  	V WORD	0000	CONST	External
FREE_ARG3  . . . . . . . . . . .  	V WORD	0000	CONST	External
FSPCHK . . . . . . . . . . . . .  	NUMBER	0004	
fTrunc . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
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	

GETCURRENTPSP  . . . . . . . . .  	NUMBER	0062	
GETENT . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
GETEXTCNTRY  . . . . . . . . . .  	NUMBER	0065	
GETEXTENDEDERROR . . . . . . . .  	NUMBER	0059	
getfilsiz  . . . . . . . . . . .  	L NEAR	0000	CODE	External
GETSETCDPG . . . . . . . . . . .  	NUMBER	0066	
GETSETMEDIAID  . . . . . . . . .  	NUMBER	0069	
GET_CURRENT_PDB  . . . . . . . .  	NUMBER	0051	
GET_DATE . . . . . . . . . . . .  	NUMBER	002A	
GET_DEFAULT_DPB  . . . . . . . .  	NUMBER	001F	
GET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	0019	
GET_DMA  . . . . . . . . . . . .  	NUMBER	002F	
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_VARS  . . . . . . . . . .  	NUMBER	0052	
GET_TIME . . . . . . . . . . . .  	NUMBER	002C	
GET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	0054	
GET_VERSION  . . . . . . . . . .  	NUMBER	0030	
GOTENT . . . . . . . . . . . . .  	L NEAR	0302	CODE	Global
GOTORPHNAM . . . . . . . . . . .  	L NEAR	0126	CODE	Global

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-11


HANDLE_FAIL_I24  . . . . . . . .  	NUMBER	0100	
HARDCH . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
HAVFIX . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
HEAD_MASK  . . . . . . . . . . .  	NUMBER	007F	
HECODE . . . . . . . . . . . . .  	V BYTE	0000	CONST	External
HIDDN  . . . . . . . . . . . . .  	NUMBER	0002	
HONGEUL  . . . . . . . . . . . .  	NUMBER	0063	
HOUR_MASK  . . . . . . . . . . .  	NUMBER	F800	

I24_AREA . . . . . . . . . . . .  	NUMBER	0006	
I24_CLASS  . . . . . . . . . . .  	NUMBER	0080	
I24_OPERATION  . . . . . . . . .  	NUMBER	0001	
IBM  . . . . . . . . . . . . . .  	ALIAS	 IBMVER		
IBMCOPYRIGHT . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPAN . . . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPVER  . . . . . . . . . . .  	ALIAS	 FALSE		
IBMVER . . . . . . . . . . . . .  	ALIAS	 TRUE		
IFS_IOCTL  . . . . . . . . . . .  	NUMBER	006B	
init_fatmap  . . . . . . . . . .  	N PROC	00B9	CODE	Global	Length = 001A
INSERTEOF  . . . . . . . . . . .  	L NEAR	0293	CODE	Global
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	
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	
ISDIR  . . . . . . . . . . . . .  	NUMBER	0010	

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

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

LBL_CHKFAT . . . . . . . . . . .  	NUMBER	0001	
LCLUS  . . . . . . . . . . . . .  	V WORD	0000	CONST	External
LOCKOPER . . . . . . . . . . . .  	NUMBER	005C	
LOOPNO . . . . . . . . . . . . .  	L NEAR	015E	CODE
LOSTDEB  . . . . . . . . . . . .  	NUMBER	0000	
LOST_STR . . . . . . . . . . . .  	L BYTE	023E	CODE
LSEEK  . . . . . . . . . . . . .  	NUMBER	0042	

MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MAKFILLP . . . . . . . . . . . .  	L NEAR	02F4	CODE	Global
makorphnam . . . . . . . . . . .  	L NEAR	0000	CODE	External
MARKMAP  . . . . . . . . . . . .  	L NEAR	016C	CODE	Global
MAXBUCKETINPAGE  . . . . . . . .  	NUMBER	0002	
MAXBUFFINBUCKET  . . . . . . . .  	NUMBER	000F	
MCLUS  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
MEMS . . . . . . . . . . . . . .  	NUMBER	0001	
MINOR_VERSION  . . . . . . . . .  	NUMBER	0000	
MINUTE_MASK  . . . . . . . . . .  	NUMBER	07E0	
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	
MONTH_MASK . . . . . . . . . . .  	NUMBER	01E0	
MSVER  . . . . . . . . . . . . .  	NUMBER	0000	
MULTDOS  . . . . . . . . . . . .  	NUMBER	0012	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-12


MULTIFS  . . . . . . . . . . . .  	NUMBER	0011	
MULTIPLEX  . . . . . . . . . . .  	NUMBER	002F	
multiply_32_bits . . . . . . . .  	L NEAR	0000	CODE	External
MULTNET  . . . . . . . . . . . .  	NUMBER	0011	
MULTSHARE  . . . . . . . . . . .  	NUMBER	0010	

NAMBUF . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NET_CHECK  . . . . . . . . . . .  	NUMBER	1200	
NEXTCLUS . . . . . . . . . . . .  	L NEAR	01F6	CODE	Global
NEXTCLUS2  . . . . . . . . . . .  	L NEAR	02CB	CODE	Global
NEXTENT  . . . . . . . . . . . .  	L NEAR	0338	CODE	Global
nextorph . . . . . . . . . . . .  	N PROC	0158	CODE	Global	Length = 0014
NLSFUNC  . . . . . . . . . . . .  	NUMBER	0014	
NO . . . . . . . . . . . . . . .  	NUMBER	0000	
NOCHAINREC . . . . . . . . . . .  	L NEAR	01DF	CODE	Global
NOT_EXISTS_MASK  . . . . . . . .  	NUMBER	00F0	
NOT_INCLUDE  . . . . . . . . . .  	NUMBER	0000	
NOWRITE  . . . . . . . . . . . .  	L NEAR	03C1	CODE	Global
NO_CODE_PAGE_CHECK . . . . . . .  	NUMBER	0100	
NO_ENTRY . . . . . . . . . . . .  	NUMBER	0000	
NO_ERROR . . . . . . . . . . . .  	NUMBER	0000	
NO_EXT_ATTRIB  . . . . . . . . .  	NUMBER	0000	
NO_FOUND . . . . . . . . . . . .  	NUMBER	0000	
NUL_ARG  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NXTORP . . . . . . . . . . . . .  	L NEAR	0339	CODE	Global

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	
OFF  . . . . . . . . . . . . . .  	NUMBER	0000	
ON . . . . . . . . . . . . . . .  	NUMBER	0001	
OPAGAIN  . . . . . . . . . . . .  	L NEAR	011B	CODE	Global
OPEN . . . . . . . . . . . . . .  	NUMBER	003D	
OPEN_FOR_BOTH  . . . . . . . . .  	NUMBER	0002	
OPEN_FOR_READ  . . . . . . . . .  	NUMBER	0000	
OPEN_FOR_WRITE . . . . . . . . .  	NUMBER	0001	
ORPHAN . . . . . . . . . . . . .  	L NEAR	01BD	CODE	Global
ORPHCNT  . . . . . . . . . . . .  	V DWORD	0000	CONST	External
ORPHEXT  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
ORPHFCB  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
ORPHSIZ  . . . . . . . . . . . .  	V WORD	0000	CONST	External

pack . . . . . . . . . . . . . .  	N PROC	005D	CODE	Global	Length = 004B
paras_per_64k  . . . . . . . . .  	V WORD	0000	DATA	External
paras_per_fat  . . . . . . . . .  	V WORD	0000	DATA	External
PARSE_FILE_DESCRIPTOR  . . . . .  	NUMBER	0029	
PATHPARSE  . . . . . . . . . . .  	NUMBER	0061	
PDB_APPEND . . . . . . . . . . .  	BYTE	003D	
PDB_INTERCON . . . . . . . . . .  	BYTE	003C	
PHONEY_STACK . . . . . . . . . .  	L WORD	0000	CODE	Length = 0005
PRINTF_CRLF  . . . . . . . . . .  	L NEAR	0000	CODE	External
PromptRecover  . . . . . . . . .  	L NEAR	01D4	CODE	Global
PROMPTYN . . . . . . . . . . . .  	L NEAR	0000	CODE	External

rarg1  . . . . . . . . . . . . .  	V WORD	0000	CONST	External
RAW_CON_INPUT  . . . . . . . . .  	NUMBER	0007	
RAW_CON_IO . . . . . . . . . . .  	NUMBER	0006	
RDONLY . . . . . . . . . . . . .  	NUMBER	0001	
READ . . . . . . . . . . . . . .  	NUMBER	003F	
Read_Write_Relative  . . . . . .  	V BYTE	0000	DATA	External
recover  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
REDIRECTOR . . . . . . . . . . .  	NUMBER	0000	
RENAME . . . . . . . . . . . . .  	NUMBER	0056	
RESERVED_BITS_MASK . . . . . . .  	NUMBER	FE00	
RET100 . . . . . . . . . . . . .  	L NEAR	0358	CODE	Global
RET18  . . . . . . . . . . . . .  	L NEAR	01D3	CODE	Global
RET_L  . . . . . . . . . . . . .  	NEAR	016B	CODE
REWRITE  . . . . . . . . . . . .  	L NEAR	036A	CODE	Global
RMDIR  . . . . . . . . . . . . .  	NUMBER	003A	
root_entries . . . . . . . . . .  	V WORD	0000	DATA	External

SECONDPASS . . . . . . . . . . .  	V BYTE	0000	CONST	External
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-13


secs_per_64k . . . . . . . . . .  	V WORD	0000	DATA	External
sec_count  . . . . . . . . . . .  	V WORD	0000	DATA	External
SERVERCALL . . . . . . . . . . .  	NUMBER	005D	
SETBLOCK . . . . . . . . . . . .  	NUMBER	004A	
SETDPB . . . . . . . . . . . . .  	NUMBER	0053	
SET_APPEND_X . . . . . . . . . .  	NUMBER	B707	
SET_CTRL_C_TRAPPING  . . . . . .  	NUMBER	0033	
SET_CURRENT_PDB  . . . . . . . .  	NUMBER	0050	
SET_DATE . . . . . . . . . . . .  	NUMBER	002B	
SET_DEFAULT_DRIVE  . . . . . . .  	NUMBER	000E	
SET_DMA  . . . . . . . . . . . .  	NUMBER	001A	
SET_INTERRUPT_VECTOR . . . . . .  	NUMBER	0025	
SET_OEM_HANDLER  . . . . . . . .  	NUMBER	00F8	
SET_PRINTER_FLAG . . . . . . . .  	NUMBER	0064	
SET_TIME . . . . . . . . . . . .  	NUMBER	002D	
SET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	002E	
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	
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	
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	
SRFCBPT  . . . . . . . . . . . .  	V WORD	0000	DATA	External
SSIZE  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
STDAUX . . . . . . . . . . . . .  	NUMBER	0003	
STDERR . . . . . . . . . . . . .  	NUMBER	0002	
STDIN  . . . . . . . . . . . . .  	NUMBER	0000	
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	
STRING_DONE  . . . . . . . . . .  	NUMBER	0000	
systime  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
SYSTM  . . . . . . . . . . . . .  	NUMBER	0004	

TEMPLEN  . . . . . . . . . . . .  	NUMBER	0086	
temp_dd  . . . . . . . . . . . .  	V DWORD	0000	CONST	External
THISDPB  . . . . . . . . . . . .  	V DWORD	0000	DATA	External
THISENT  . . . . . . . . . . . .  	NUMBER	0014	
TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	
TRUEBYTE . . . . . . . . . . . .  	NUMBER	00FF	

UNLINK . . . . . . . . . . . . .  	NUMBER	0041	
unpack . . . . . . . . . . . . .  	N PROC	0024	CODE	Global	Length = 0039
USERDEV  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
USERDIR  . . . . . . . . . . . .  	V BYTE	0000	CONST	External
USEROPER . . . . . . . . . . . .  	NUMBER	005E	

VOLIDA . . . . . . . . . . . . .  	NUMBER	0008	
VOL_ATTRIBUTE  . . . . . . . . .  	NUMBER	0008	

WAITPROCESS  . . . . . . . . . .  	NUMBER	004D	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:15
CHKFAT	- procedures that acces the fat and/or fatmap        Symbols-14


WRITE  . . . . . . . . . . . . .  	NUMBER	0040	
write_disk . . . . . . . . . . .  	L NEAR	0000	CODE	External
WRITE_PROTECT  . . . . . . . . .  	NUMBER	0000	
WRTLOOP  . . . . . . . . . . . .  	L NEAR	038F	CODE	Global
WRTOK  . . . . . . . . . . . . .  	L NEAR	03AD	CODE	Global

XA_CHAIN . . . . . . . . . . . .  	NUMBER	0084	
XDUP . . . . . . . . . . . . . .  	NUMBER	0045	
XDUP2  . . . . . . . . . . . . .  	NUMBER	0046	
XNAMETRANS . . . . . . . . . . .  	NUMBER	0060	

YEAR_MASK  . . . . . . . . . . .  	NUMBER	FE00	
YES  . . . . . . . . . . . . . .  	NUMBER	FFFF	
YES_FOUND  . . . . . . . . . . .  	NUMBER	0001	

$$A_START_chkfat . . . . . . . .  	L NEAR	000A	CODE	Global
$$A_STOP_chkfat  . . . . . . . .  	L NEAR	03E1	CODE	Global
$$DO13 . . . . . . . . . . . . .  	L NEAR	011B	CODE
$$DO16 . . . . . . . . . . . . .  	L NEAR	015E	CODE
$$DO37 . . . . . . . . . . . . .  	L NEAR	02F4	CODE
$$EN1  . . . . . . . . . . . . .  	L NEAR	005B	CODE
$$EN13 . . . . . . . . . . . . .  	L NEAR	0126	CODE
$$EN16 . . . . . . . . . . . . .  	L NEAR	0169	CODE
$$EN19 . . . . . . . . . . . . .  	L NEAR	0190	CODE
$$EN24 . . . . . . . . . . . . .  	L NEAR	01C5	CODE
$$EN3  . . . . . . . . . . . . .  	L NEAR	005B	CODE
$$EN37 . . . . . . . . . . . . .  	L NEAR	0342	CODE
$$EN38 . . . . . . . . . . . . .  	L NEAR	0339	CODE
$$EN7  . . . . . . . . . . . . .  	L NEAR	00A4	CODE
$$EN9  . . . . . . . . . . . . .  	L NEAR	009E	CODE
$$IF1  . . . . . . . . . . . . .  	L NEAR	003C	CODE
$$IF19 . . . . . . . . . . . . .  	L NEAR	018C	CODE
$$IF22 . . . . . . . . . . . . .  	L NEAR	01C5	CODE
$$IF23 . . . . . . . . . . . . .  	L NEAR	01C5	CODE
$$IF24 . . . . . . . . . . . . .  	L NEAR	01BD	CODE
$$IF29 . . . . . . . . . . . . .  	L NEAR	01D2	CODE
$$IF3  . . . . . . . . . . . . .  	L NEAR	0057	CODE
$$IF31 . . . . . . . . . . . . .  	L NEAR	01DF	CODE
$$IF33 . . . . . . . . . . . . .  	L NEAR	01F6	CODE
$$IF35 . . . . . . . . . . . . .  	L NEAR	020F	CODE
$$IF38 . . . . . . . . . . . . .  	L NEAR	0338	CODE
$$IF39 . . . . . . . . . . . . .  	L NEAR	0311	CODE
$$IF41 . . . . . . . . . . . . .  	L NEAR	032F	CODE
$$IF47 . . . . . . . . . . . . .  	L NEAR	03C1	CODE
$$IF7  . . . . . . . . . . . . .  	L NEAR	007F	CODE
$$IF9  . . . . . . . . . . . . .  	L NEAR	009A	CODE
$$LL38 . . . . . . . . . . . . .  	L NEAR	0302	CODE
??0000 . . . . . . . . . . . . .  	L NEAR	0023	CODE
??0001 . . . . . . . . . . . . .  	L NEAR	005C	CODE
??0002 . . . . . . . . . . . . .  	L NEAR	00D2	CODE
??0003 . . . . . . . . . . . . .  	L NEAR	016B	CODE
?PLM . . . . . . . . . . . . . .  	NUMBER	0000	
?WIN . . . . . . . . . . . . . .  	NUMBER	0000	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  chkfat		
@VERSION . . . . . . . . . . . .  	TEXT  510		


   4137 Source  Lines
   4543 Total   Lines
   1031 Symbols

  41956 + 156324 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
