Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-1


				TITLE	CHKPROC - PART1 Procedures called from 
				chkdsk
				page	,132					;
				
					.list
				
				
 0000				DATA	SEGMENT PUBLIC PARA 'DATA'
					EXTRN	FIXMES_ARG:word,DIREC_ARG:word
					EXTRN	NULDMES:byte,NULNZ:byte,BADCLUS:byte,NORECDOT:byte
					EXTRN	NoRecDDot:Byte
					EXTRN	BADCHAIN:byte,NDOTMES:byte,CDDDMES:byte
					EXTRN	NORECDDOT1:byte,NORECDDOT2:byte,NORECDDOT3:byte
					EXTRN	STACKMES:byte
					EXTRN	BADDPBDIR:byte, BadSubDir:byte
					EXTRN	BADTARG_PTR:byte,BADTARG2:byte,JOINMES:byte
					EXTRN	PTRANDIR:byte,PTRANDIR2:byte
					EXTRN	CROSS_ARG:word,NOISY_ARG:word
					EXTRN	FILE_ARG1:WORD,FILE_ARG2:WORD,FILE_ARG:word
					EXTRN	DOTMES:byte,NOISY:byte,DOTENT:byte,HAVFIX:byte
					EXTRN	DOFIX:byte,DIRBUF:byte,PARSTR:byte,DDOTENT:byte
					EXTRN	NUL:byte,ERRSUB:word,SECONDPASS:byte,ALLFILE:byte
					EXTRN	HIDCNT:dword,HIDSIZ:word,FILCNT:dword,FILSIZ:word	   ;an049;bgb
					EXTRN	DIRCNT:dword							;an049;bgb
					EXTRN	DIRSIZ:word							;an049;bgb
					EXTRN	DIRTYFAT:byte,
					EXTRN	HECODE:byte
					EXTRN	ALLDRV:byte,FIXMFLG:byte,DIRCHAR:byte
					EXTRN	BIGFAT:byte,EOFVAL:word,BADVAL:word
					Extrn	fTrunc:BYTE							;ac048;bgb
					Extrn	dirsec:word							;ac048;bgb
				
					EXTRN	THISDPB:dword,DOTSNOGOOD:byte,NUL_ARG:byte,STACKLIM:word
					EXTRN	ZEROTRUNC:byte,NAMBUF:byte,SRFCBPT:word,FATMAP:word
					EXTRN	ISCROSS:byte,MCLUS:word,CSIZE:byte,SSIZE:word,fattbl:byte
					EXTRN	DSIZE:word,ARG1:word,ARG_BUF:byte,TMP_SPC:BYTE
					EXTRN	SECBUF:word
					EXTRN	Inv_XA_Msg:Byte,Alloc_XA_Msg:Byte
					Extrn	Data_Start_Low:Word,Data_Start_High:Word
					EXTRN	Read_Write_Relative:Byte
					EXTRN	MClus:Word,Chain_End:Word
				
 0000  0000			XA_Buffer XAL	<>				;XA buffer space to read in 1st sector	;AN000;
 0002  0000			
 0004  0000			
 0006  0000			
 0008  01F8[			
	   ??			
			 ]	
				
 0200  00			Head_Mark db	0				;Flag for MarkMap			;AN000;
 0201  0000			BClus	dw	0				;Bytes/Cluster
				public cross_clus
 0203  0000			Cross_Clus dw	0				;Cluster crosslink occurred on
 0205  0000			Cluster_Count dw 0				;				;AN000;
 0207  0000			First_Cluster dw 0				;				;AN000;
 0209  0000			Previous_Cluster	dw	0		;				;AN000;
 020B  00			XA_Pass db	0				;				;AN000;
 020C  0000			File_Size_High dw 0				;				;AN000;
 020E  0000			File_Size_Low dw 0				;				;AN000;
 0210  0000			Chain_Size_Low	dw	0			;				;AN000;
 0212  0000			Chain_Size_High dw	0			;				;AN000;
				
				
				public Head_Mark
				public BClus
				public Cluster_Count
				public First_Cluster
				public Previous_Cluster
				public XA_Pass
				public File_Size_High
				public File_Size_Low
				public Chain_Size_Low
				public Chain_Size_High
 0214				DATA	ENDS
				
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-2
                                                            

				
 0000				CODE	SEGMENT PUBLIC PARA 'CODE'
				ASSUME	CS:DG,DS:DG,ES:DG,SS:DG
				;Structures used by DIRPROC
				SRCHFCB STRUC
 0000  002C[				DB	44 DUP (?)
	   ??			
			 ]	
				
 002C				SRCHFCB ENDS
 = 002C				SFCBSIZ EQU	SIZE SRCHFCB
					EXTRN	PRINTF_CRLF:NEAR,SUBERRP:NEAR,FCB_TO_ASCZ:NEAR
					EXTRN	FIGREC:NEAR,EPRINT:NEAR
					EXTRN	DOINT26:NEAR,PROMPTYN:NEAR
					EXTRN	DOTCOMBMES:NEAR,FATAL:NEAR,MARKMAP:NEAR,GETFILSIZ:NEAR
					EXTRN	SYSTIME:NEAR, Read_Disk:Near,DoCRLF:Near
					extrn	crosschk:near
					extrn	UNPACK:near, PACK:near
				public DOTDOTHARDWAY, NODOT, DOEXTMES1, MESD1, CANTREC, DOTGOON, NODDOT
				public DOEXTMES2, MESD2, NFIX, CANTREC2, NULLDIRERR, DOEXTMES3, DOTSBAD
				public dotsbad2, DIRPROC, STACKISOK, NOPRINT, JOINERR
				public NONULLDERr, DOTOK, DATTOK, DLINKOK, BADDSIZ, DSIZOK, CHKDOTDOT
				public DOTDOTOK, DDATTOK, DDLINKOK, BADDDSIZ, DDSIZOK, ROOTDIR
				public DODDH, DIRDONE, MOREDIR, FPROC1, NOPRINT2, HIDENFILE, NORMFILE, NEWDIR
				public DPROC1, CONVDIR, DPROC2, CANTTARG, BogusDir, ASKCONV
				public PRINTTRMES, CROSSLOOK, CHLP, CROSSLINK, CHAINDONE
				public FIXENT2, RET20, FIXENT, GETENT, CLUSISOK
				public SKIPLP, GOTCLUS, DOROOTDIR, RDRETRY, RDOK2, WANTROOT, CHECKNOFMES, ret14
				public CHECKERR, get_currdirERR, ok_pri_dir, get_thiselERR, ok_pri_el
				public get_THISEL, get_THISEL2, get_currdir, GET_END, ERRLOOP, LPDONE
				public CHECK_SPLICE, NT_SPLC, MarkFAT, Bad_Cluster, Check_Chain_Sizes
				public print_filename								;ac048;bgb
				public NOTROOT									;ac048;bgb
				public FIXDOT									;ac048;bgb
				
				
					pathlabl chkproc
				SUBTTL	DIRPROC -- Recursive directory processing
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-3
DIRPROC -- Recursive directory processing                   

				PAGE
				;**************************************************************************
				; DOTDOTHARDWAY - change dir to the previous directory using '..'
				;
				; called by -
				;
				; inputs - parse string '..'
				;
				; outputs - new default directory
				;
				;NOTE
				; On versions of DOS < 2.50 "cd .." would fail if there was no ".."
				;    entry in the current directory. On versions >= 2.50 "cd .."
				;    is handled as a string manipulation and therefore should always
				;    work. On < 2.50 this routine didddled the current directory string
				;    INSIDE THE DOS DATA STRUCTURES. This is no longer desirable, or
				;    needed.
				;**************************************************************************
				procedure dotdothardway,near
			     1							; 
			     1	Public	dotdothardway				;				;AN000; 
 0000                        1	dotdothardway    proc				;				;AN000; 
 0000  BA 0000 E			MOV	DX,OFFSET DG:PARSTR
					DOS_Call ChDir				;				;AC000;
			     1							; 
 0003  B4 3B                 1		mov	ah,ChDir			;				;AN000; 
 0005  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 0007  C3				RET
				endproc dotdothardway
			     1		IFDIF   <>,<NoCheck>       ; 
			     1		IF2 
			     1		ENDIF 
			     1		ENDIF 
 0008                        1	dotdothardway    ENDP 
				
				
				;**************************************************************************	;ac048;bgb
				; NODOT - come here if there is no . entry in the first entry of the sub-	;ac048;bgb
				;	  directory.  The . entry is a pointer to the subdirectory itself.	;ac048;bgb
				;	  The entry from the search first did not find it, and the subdir is	;ac048;bgb
				;	  not joined.  So, try to put a new . entry into the first slot.	;ac048;bgb
				;										;ac048;bgb
				; called by - nonullderr							;ac048;bgb
				;										;ac048;bgb
				; inputs -  SI - points to arg_buf, which is a filespec 			;ac048;bgb
				;	    DI - points to tmp_spc, which is a filespec 			;ac048;bgb
				;	    AX - return value from search first 				;ac048;bgb
				;										;ac048;bgb
				; outputs - if the /f parm was entered, tries to replace the . entry		;ac048;bgb
				;	    AX - saves the return value from search first			;ac048;bgb
				;										;ac048;bgb
				; logic: 1. go display error messages.	Different messages are displayed,	;ac048;bgb
				;	    depending on /f and /v parms.					;ac048;bgb
				;										;ac048;bgb
				;	2. go get the sector number and read it into ram			;ac048;bgb
				;										;ac048;bgb
				;	3. if the first entry is erased (begins with hex e5), then we can	;ac048;bgb
				;	   fill it with the corrected . entry. Otherwise, go to #6.		;ac048;bgb
				;										;ac048;bgb
				;	4. So, fill entry with all the dir fields - name, ext, attr, date,	;ac048;bgb
				;	   time, size, cluster #.						;ac048;bgb
				;										;ac048;bgb
				;	5. write it back to disk.						;ac048;bgb
				;										;ac048;bgb
				;	6. go check out the .. entry						;ac048;bgb
				;**************************************************************************	;ac048;bgb
 0008				NODOT:						;No .				;ac048;bgb
 0008  50				PUSH	AX			;save the return value from search 1st	;ac048;bgb
				;display msgs				;;;;;;;;jnz	doextmes1		;ac048;bgb
 0009  80 3E 0000 E 00			CMP	[NOISY],OFF		;was /v parm entered?			;ac048;bgb;AC000;
				;	$IF	Z			;display no /v msgs			;ac048;bgb
 000E  75 05				JNZ $$IF1
 0010  E8 0000 E			    call    suberrp							;ac048;bgb
									;;;;;;;;jmp	short mesd1		;ac048;bgb
				;	$ELSE				;display /v msgs			;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-4
DIRPROC -- Recursive directory processing                   

 0013  EB 0C				JMP SHORT $$EN1
 0015				$$IF1:
 0015  BE 0000 E		DOEXTMES1:  mov     si,offset dg:dotmes ;first find out where we are		;ac048;bgb
 0018  E8 060D R			    call    get_currdirerr						;ac048;bgb
 001B  BA 0000 E			    mov     dx,offset dg:ndotmes ;print dir, dot, and 'not found' msg	;ac048;bgb
 001E  E8 0000 E			    call    eprint							;ac048;bgb
				;	$ENDIF									;ac048;bgb
 0021				$$EN1:
														;ac048;bgb
				;go find the sector								;ac048;bgb
 0021  33 C0			MESD1:	XOR	AX,AX			;set entry number to zero		;ac048;bgb
 0023  53				PUSH	BX			;save					;ac048;bgb
 0024  55				PUSH	BP			;save					;ac048;bgb
 0025  E8 0583 R			CALL	GETENT			;get the sector number			;ac048;bgb
 0028  5D				POP	BP			;restore bp				;ac048;bgb
 0029  55				PUSH	BP			;put it back				;ac048;bgb
 002A  80 3D E5				CMP	BYTE PTR [DI],0E5H	;is this 1st entry erased/open? 	;ac048;bgb
				;	$if	nz								;ac048;bgb
 002D  74 14				JZ $$IF4
				;cant fill . entry			 ;JNZ	  CANTREC			;ac048;bgb  ;Nope
 002F  FE 06 0000 E		CANTREC:    INC     [DOTSNOGOOD]						;ac048;bgb
 0033  80 3E 0000 E 00			    CMP     [NOISY],OFF 		    ;				;ac048;bgb    ;AC000
				;
				;	    $if     nz								;ac048;bgb
 0038  74 06				    JZ $$IF5
										 ;JZ	  DOTGOON		;ac048;bgb
 003A  BA 0000 E				MOV	DX,OFFSET DG:NORECDOT					;ac048;bgb
 003D  E8 0000 E				CALL	EPRINT							;ac048;bgb
				;	    $endif								;ac048;bgb
 0040				$$IF5:
 0040  EB 34 90				    jmp     dotgoon							;ac048;bgb
				;	$endif									;ac048;bgb
 0043				$$IF4:
				
				;get filename
 0043  BE 0000 E		fixdot: MOV	SI,OFFSET DG:DOTENT	;point to valid . entry
 0046  B9 000B				MOV	CX,11			;move filename and ext
 0049  F3/ A4				REP	MOVSB				;Name
 004B  50				PUSH	AX			;save disk number
				;move attr byte
 004C  B0 10				MOV	AL,ISDIR		;hex 10
 004E  AA				STOSB					;Attribute
				; Add in time for directory - BAS July 17/85
 004F  83 C7 0A				ADD	DI,10
 0052  52				push	dx			;save starting sector number		;ac048;bgb
 0053  E8 0000 E			CALL	SYSTIME
 0056  AB				STOSW					; Time
 0057  8B C2				MOV	AX,DX
 0059  AB				STOSW					; Date
 005A  8B 46 06				MOV	AX,[BP+6]
 005D  AB				STOSW					;Alloc #
 005E  33 C0				XOR	AX,AX
 0060  AB				STOSW
 0061  AB				STOSW					;Size
 0062  5A				pop	dx			;restore starting sector number 	;ac048;bgbb
 0063  58				POP	AX			;
				;write back to disk
 0064  C6 06 0000 E 01			MOV	[HAVFIX],1			;Have a fix
 0069  80 3E 0000 E 00			CMP	[DOFIX],0		; /f parm entered?
				;	$if	nz								;ac048;bgb
 006E  74 06				JZ $$IF8
									 ;JZ	  DOTGOON			;ac048;bgbif not F
 0070  B9 0001				    MOV     CX,1							;ac048;bgb
 0073  E8 0000 E			    CALL    DOINT26							;ac048;bgb
									 ;JMP	  SHORT DOTGOON 		;ac048;bgb
				;	$endif									;ac048;bgb
 0076				$$IF8:
				;go check out .. entry
 0076  5D			DOTGOON: POP	 BP
 0077  5B				POP	BX
 0078  58				POP	AX
 0079  BE 0000 E			MOV	SI,OFFSET DG:DIRBUF
 007C  E9 0229 R			JMP	CHKDOTDOT			;Go look for ..
				;*****************************************************************************
				
				
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-5
DIRPROC -- Recursive directory processing                   

				
				
 007F				NODDOT	label	far				;No ..
 007F  50				PUSH	AX				;Return from SRCH
 0080  80 3E 0000 E 00			CMP	[NOISY],OFF			;				;AC000;
 0085  75 05				JNZ	DOEXTMES2
 0087  E8 0000 E			CALL	SUBERRP
 008A  EB 0C				JMP	SHORT MESD2
 008C				DOEXTMES2:
 008C  BE 0000 E			MOV	SI,OFFSET DG:PARSTR
 008F  E8 060D R			CALL	get_currdirERR
 0092  BA 0000 E			MOV	DX,OFFSET DG:NDOTMES
 0095  E8 0000 E			CALL	EPRINT
				
 0098				MESD2:
 0098  B8 0001				MOV	AX,1
 009B  53				PUSH	BX
 009C  55				PUSH	BP
 009D  E8 0583 R			CALL	GETENT
 00A0  5D				POP	BP
 00A1  55				PUSH	BP
 00A2  80 3D E5				CMP	BYTE PTR [DI],0E5H		;Place to put it?
 00A5  75 3E				JNZ	CANTREC2			;Nope
 00A7  BE 0000 E			MOV	SI,OFFSET DG:DDOTENT
 00AA  B9 000B				MOV	CX,11
 00AD  F3/ A4				REP	MOVSB				;Name
 00AF  50				PUSH	AX
 00B0  B0 10				MOV	AL,ISDIR
 00B2  AA				STOSB					;Attribute
 00B3  83 C7 0A				ADD	DI,10
				;
				; Add in time for directory - BAS July 17/85
 00B6  52				push	dx			;save starting sector number		;ac048;bgb
 00B7  E8 0000 E			CALL	SYSTIME
 00BA  AB				STOSW					; Time
 00BB  8B C2				MOV	AX,DX
 00BD  AB				STOSW					; Date
 00BE  8B 46 04				MOV	AX,[BP+4]
 00C1  AB				STOSW					;Alloc #
 00C2  33 C0				XOR	AX,AX
 00C4  AB				STOSW
 00C5  AB				STOSW					;Size
 00C6  5A				pop	dx			;restore starting sector number 	;ac048;bgbb
 00C7  58				POP	AX
 00C8  C6 06 0000 E 01			MOV	[HAVFIX],1			;Got a fix
 00CD  80 3E 0000 E 00			CMP	[DOFIX],0
 00D2  74 06				JZ	NFIX				;No fix if no F, carry clear
 00D4  B9 0001				MOV	CX,1
 00D7  E8 0000 E			CALL	DOINT26
 00DA				NFIX:
					restorereg <bp,bx,ax>							;ac048;bgb
			     1	IRP reg,<bp,bx,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0001                      2		?stackdepth = ?stackdepth - 1 
 00DA  5D                    2		POP     bp 
 =-0002                      2		?stackdepth = ?stackdepth - 1 
 00DB  5B                    2		POP     bx 
 =-0003                      2		?stackdepth = ?stackdepth - 1 
 00DC  58                    2		POP     ax 
 00DD  BE 0000 E			MOV	SI,OFFSET DG:DIRBUF
 00E0  EA 02A9 ---- R			JMP	far ptr ROOTDIR 			;Process files
				
 00E5				CANTREC2:
					restorereg <bp,bx,ax>							;ac048;bgb
			     1	IRP reg,<bp,bx,ax> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0004                      2		?stackdepth = ?stackdepth - 1 
 00E5  5D                    2		POP     bp 
 =-0005                      2		?stackdepth = ?stackdepth - 1 
 00E6  5B                    2		POP     bx 
 =-0006                      2		?stackdepth = ?stackdepth - 1 
 00E7  58                    2		POP     ax 
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-6
DIRPROC -- Recursive directory processing                   

 00E8  80 3E 0000 E 00			CMP	[NOISY],OFF			;				;AC000;
 00ED  74 2D				JZ	DOTSBAD2
 00EF  BA 0000 E			MOV	DX,OFFSET DG:NORECDDOT
 00F2  EB 16 90				JMP	DOTSBAD
				
 00F5				NULLDIRERR label far	    ;dir is empty
 00F5  80 3E 0000 E 00			CMP	[NOISY],OFF			;				;AC000;
 00FA  75 05				JNZ	DOEXTMES3
 00FC  E8 0000 E			CALL	SUBERRP
 00FF  EB 1B				JMP	SHORT DOTSBAD2
 0101				DOEXTMES3:
 0101  BE 0000 E			MOV	SI,OFFSET DG:NUL
 0104  E8 060D R			CALL	get_currdirERR
 0107  BA 0000 E			MOV	DX,OFFSET DG:NULDMES
 010A				DOTSBAD:					;Can't recover
 010A  C7 06 0000 E 0000 E		mov	[file_arg2],offset dg:badtarg2
 0110  FE 06 0000 E			inc	byte ptr [nul_arg]
 0114  C6 06 0000 E FF			MOV	fTrunc,TRUE
 0119  E8 0000 E			CALL	EPRINT
 011C				dotsbad2:
 011C  E8 0000 R			CALL	DOTDOTHARDWAY
 011F  FE 06 0000 E			INC	[DOTSNOGOOD]
 0123  8B E5				MOV	SP,BP				;Pop local vars
 0125  5D				POP	BP				;Restore frame
 0126  C2 0004				RET	4				;Pop args
				
				
				
				
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-7
DIRPROC -- Recursive directory processing                   

				PAGE
				;***************************************************************************
				; DIRPROC - recursive tree walker
				;
				; called by - main-routine in chkdsk1.sal
				;
				; inputs    - ax=0
				;	    - two words of 0 on the stack
				;
				;Recursive tree walker
				;dirproc(self,parent)
				;****************************************************************************
 0129				DIRPROC:
 0129  C6 06 0000 E 00		    MOV     [DOTSNOGOOD],0   ;Init to dots OK - set . or .. error flag to false
 012E  C7 06 0000 E 0000	    MOV     [ERRSUB],0			    ;No subdir errors yet
 0134  55			    PUSH    BP				    ;Save frame pointer - 0
 0135  8B EC			    MOV     BP,SP			    ;ffe2 - 2c = ffb6
 0137  83 EC 2C			    SUB     SP,SFCBSIZ			    ;Only local var
				
				; are we at stack overflow ?
 013A  3B 26 0000 E		    CMP     SP,[STACKLIM]		    ; ffb6 vs. 5943		    ;an005;bgb
				;   $IF     NA
 013E  77 06			    JA $$IF10
				;;;;;;;;JA	STACKISOK
 0140  BB 0000 E			MOV	BX,OFFSET DG:STACKMES		;Out of stack
 0143  E9 0000 E			JMP	FATAL
				;   $ENDIF
 0146				$$IF10:
				
 0146				STACKISOK:
				;print the files as they are found
 0146  80 3E 0000 E 00		    CMP     [NOISY],off 	    ; off= 0				    ;AC000;
				;   $IF     NZ				;if not noisy, dont print filenames
 014B  74 13			    JZ $$IF12
				;;;;;;;;JZ	NOPRINT
 014D  80 3E 0000 E 00			CMP	[SECONDPASS],False		;				;AC000;
				;	$IF	Z		      ;only print on the first pass
 0152  75 0C				JNZ $$IF13
				;;;;;;;;;;;;JNZ     NOPRINT			    ;Don't do it again on second pass
 0154  BE 0000 E			    MOV     SI,OFFSET DG:NUL
 0157  E8 0637 R			    CALL    get_CURRDIR
 015A  BA 0000 E			    mov     dx,offset dg:DIREC_arg	    ;Tell user where we are
 015D  E8 0000 E			    CALL    PRINTf_crlf
				;	$ENDIF
 0160				$$IF13:
				;   $ENDIF
 0160				$$IF12:
				
				; initialize search fcb
 0160				NOPRINT:
 0160  BE 0000 E		    MOV     SI,OFFSET DG:ALLFILE    ;extended fcb
 0163  8B FC			    MOV     DI,SP
 0165  57			    PUSH    DI
 0166  B9 002C			    MOV     CX,SFCBSIZ		    ;move 44dec bytes
 0169  F3/ A4			    REP     MOVSB		    ;from allfile (ds:si) to es:di
				; find this file
 016B  5A			    POP     DX			    ; from push bp
 016C  8B DA			    MOV     BX,DX			    ;BX points to SRCH FCB
				    DOS_Call Dir_Search_First		;search for any file		    ;AC000;
			     1							; 
 016E  B4 11                 1		mov	ah,Dir_Search_First			;				;AN000; 
 0170  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
				;
 0172  83 7E 06 00		    CMP     WORD PTR [BP+6],0	 ;attribute byte- root will = zero
				;   $if     z
 0176  75 05			    JNZ $$IF16
 0178  EA 02A9 ---- R			jmp  far ptr rootdir	 ;yes, we are at the root
				;   $endif
 017D				$$IF16:
 017D  0A C0				OR	AL,AL		 ;check return code from search first
 017F  74 2A				JZ	NONULLDERR
 0181  E8 0675 R			CALL	CHECK_SPLICE			; See if dir is spliced
				;	$if	c
 0184  73 05				JNC $$IF18
				;;;;;;;;;;;;JC	    nulldirerr			    ; Not spliced, error
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-8
DIRPROC -- Recursive directory processing                   

 0186  EA 00F5 ---- R			    jmp     nulldirerr
				;	$endif
 018B				$$IF18:
 018B				JOINERR:
 018B  BE 0000 E			MOV	SI,OFFSET DG:NUL
 018E  E8 0637 R			CALL	get_currdir
 0191  C6 06 0000 E FF			mov	fTrunc,TRUE
 0196  BA 0000 E			mov	dx,offset dg:joinmes		;				;AC000;
 0199  E8 0000 E			call	Printf_Crlf			;				;AC000;
 019C  BA 0000 E			mov	dx,offset dg:badtarg2		;				;AC000;
 019F  E8 0000 E			call	Printf_CRLF			;				;AC000;
 01A2  E8 0000 R			CALL	DOTDOTHARDWAY
 01A5  8B E5				MOV	SP,BP				;Pop local vars
 01A7  5D				POP	BP				;Restore frame
 01A8  C2 0004				RET	4				;Pop args
				
				
				
 01AB				NONULLDERR:
 01AB  BE 0008 E			MOV	SI,OFFSET DG:DIRBUF + DIRNAM
 01AE  BF 0000 E			MOV	DI,OFFSET DG:DOTENT
 01B1  B9 000B				MOV	CX,11
 01B4  F3/ A6				REP	CMPSB
 01B6  74 0F				JZ	DOTOK				;Got a . as first entry
 01B8  50				push	ax			;save return code from search first	;an045;bgb
 01B9  E8 0675 R			CALL	CHECK_SPLICE			; See if dir is spliced
				;	$IF	C			;carry means no join on this dir	;an045;bgb
 01BC  73 06				JNC $$IF20
 01BE  58				    pop ax			;restore return code			 ;an045;bgb
 01BF  E9 0008 R			    jmp nodot			;goto no . entry code			;an045;bgb
				;	$ELSE				;no carry means dir is joined		;an045;bgb
 01C2  EB 03				JMP SHORT $$EN20
 01C4				$$IF20:
 01C4  58				    pop ax			;restore return code			 ;an045;bgb
 01C5  EB C4				    jmp joinerr 		;goto join error code			;an045;bgb
				;	$ENDIF				;no carry means dir is joined		;an045;bgb
 01C7				$$EN20:
				;;;;;;;;JNC	JOINERR 			; spliced, stop 		;an045;bgb
				;;;;;;;;JMP	NODOT				;No .				;an045;bgb
				
 01C7				DOTOK:
 01C7  BE 0000 E			MOV	SI,OFFSET DG:DIRBUF
 01CA  8A 44 13				MOV	AL,[SI.DIRATT]
 01CD  A8 10				TEST	AL,ISDIR
 01CF  75 12				JNZ	DATTOK
 01D1  56				PUSH	SI				;. not a dir?
 01D2  BE 0000 E			MOV	SI,OFFSET DG:DOTMES
										;MOV	 DX,OFFSET DG:BADATT
 01D5  BA 0000 E			mov	dx,offset dg:norecddot2 	;				;AN000;
 01D8  E8 0000 E			CALL	DOTCOMBMES
 01DB  5E				POP	SI
 01DC  80 4C 13 10			OR	[SI.DIRATT],ISDIR
 01E0  E8 055B R			CALL	FIXENT				;Fix it
 01E3				DATTOK:
 01E3  8B 44 22				MOV	AX,[SI.DIRCLUS]
 01E6  3B 46 06				CMP	AX,[BP+6]			;. link = MYSELF?
 01E9  74 14				JZ	DLINKOK
 01EB  56				PUSH	SI				;Link messed up
 01EC  BE 0000 E			MOV	SI,OFFSET DG:DOTMES
										;MOV	 DX,OFFSET DG:CLUSBAD
 01EF  BA 0000 E			mov	dx,offset dg:norecddot1 	;				;AN000;
 01F2  E8 0000 E			CALL	DOTCOMBMES
 01F5  5E				POP	SI
 01F6  8B 46 06				MOV	AX,[BP+6]
 01F9  89 44 22				MOV	[SI.DIRCLUS],AX
 01FC  E8 055B R			CALL	FIXENT				;Fix it
 01FF				DLINKOK:
 01FF  8B 44 24				MOV	AX,WORD PTR [SI.DIRESIZ]
 0202  0B C0				OR	AX,AX
 0204  75 07				JNZ	BADDSIZ
 0206  8B 44 26				MOV	AX,WORD PTR [SI.DIRESIZ+2]
 0209  0B C0				OR	AX,AX
 020B  74 16				JZ	DSIZOK
 020D				BADDSIZ:					;Size should be zero
 020D  56				PUSH	SI
 020E  BE 0000 E			MOV	SI,OFFSET DG:DOTMES
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-9
DIRPROC -- Recursive directory processing                   

										;MOV	 DX,OFFSET DG:BADSIZM
 0211  BA 0000 E			mov	dx,offset dg:norecddot3 	;				;AN000;
 0214  E8 0000 E			CALL	DOTCOMBMES
 0217  5E				POP	SI
 0218  33 C0				XOR	AX,AX
 021A  89 44 24				MOV	WORD PTR [SI.DIRESIZ],AX
 021D  89 44 26				MOV	WORD PTR [SI.DIRESIZ+2],AX
 0220  E8 055B R			CALL	FIXENT				;Fix it
 0223				DSIZOK: 					;Get next (should be ..)
 0223  8B D3				MOV	DX,BX
					DOS_Call Dir_Search_Next		;				;AC000;
			     1							; 
 0225  B4 12                 1		mov	ah,Dir_Search_Next			;				;AN000; 
 0227  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 0229				CHKDOTDOT:					;Come here after . failure
 0229  0A C0				OR	AL,AL
 022B  74 05				JZ	DOTDOTOK
 022D  EA 007F ---- R			 JMP	NODDOT				;No ..
 0232				DOTDOTOK:
 0232  BE 0008 E			MOV	SI,OFFSET DG:DIRBUF + DIRNAM
 0235  BF 0000 E			MOV	DI,OFFSET DG:DDOTENT
 0238  B9 000B				MOV	CX,11
 023B  F3/ A6				REP	CMPSB
				;	$if	nz
 023D  74 05				JZ $$IF23
 023F  EA 007F ---- R			    jmp     noddot
				;;; ;;;;;;;;JNZ     NODDOT			    ;No ..
				;	$endif
 0244				$$IF23:
 0244  BE 0000 E			MOV	SI,OFFSET DG:DIRBUF
 0247  8A 44 13				MOV	AL,[SI.DIRATT]
 024A  A8 10				TEST	AL,ISDIR
 024C  75 12				JNZ	DDATTOK 			;.. must be a dir
 024E  56				PUSH	SI
 024F  BE 0000 E			MOV	SI,OFFSET DG:PARSTR
										;MOV	 DX,OFFSET DG:BADATT
 0252  BA 0000 E			mov	dx,offset dg:norecddot2 	;				;AN000;
 0255  E8 0000 E			CALL	DOTCOMBMES
 0258  5E				POP	SI
 0259  80 4C 13 10			OR	[SI.DIRATT],ISDIR
 025D  E8 055B R			CALL	FIXENT				;Fix it
 0260				DDATTOK:
 0260  56				PUSH	SI
 0261  8B 44 22				MOV	AX,[SI.DIRCLUS]
 0264  3B 46 04				CMP	AX,[BP+4]			;.. link must be PARENT
 0267  74 13				JZ	DDLINKOK
 0269  BE 0000 E			MOV	SI,OFFSET DG:PARSTR
										;MOV	 DX,OFFSET DG:CLUSBAD
 026C  BA 0000 E			mov	dx,offset dg:norecddot1 	;				;AN000;
 026F  E8 0000 E			CALL	DOTCOMBMES
 0272  5E				POP	SI
 0273  8B 46 04				MOV	AX,[BP+4]
 0276  89 44 22				MOV	[SI.DIRCLUS],AX
 0279  E8 055B R			CALL	FIXENT				;Fix it
 027C				DDLINKOK:
 027C  8B 44 24				MOV	AX,WORD PTR [SI.DIRESIZ]
 027F  0B C0				OR	AX,AX
 0281  75 0A				JNZ	BADDDSIZ
 0283  8B 44 26				MOV	AX,WORD PTR [SI.DIRESIZ+2]
 0286  0B C0				OR	AX,AX
				;	$if	z
 0288  75 03				JNZ $$IF25
 028A  EB 17 90				    jmp     DDSIZOK
				;	$endif
 028D				$$IF25:
 028D				BADDDSIZ:					;.. size should be 0
 028D  56				PUSH	SI
 028E  BE 0000 E			MOV	SI,OFFSET DG:PARSTR
										;MOV	 DX,OFFSET DG:BADSIZM
 0291  BA 0000 E			mov	dx,offset dg:norecddot3 	;				;AN000;
 0294  E8 0000 E			CALL	DOTCOMBMES
 0297  5E				POP	SI
 0298  33 C0				XOR	AX,AX
 029A  89 44 24				MOV	WORD PTR [SI.DIRESIZ],AX
 029D  89 44 26				MOV	WORD PTR [SI.DIRESIZ+2],AX
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-10
DIRPROC -- Recursive directory processing                   

 02A0  E8 055B R			CALL	FIXENT				;Fix it
				
				
				;***************************************************************************
				; DDSIZOK - search for the next file in this directory
				;***************************************************************************
 02A3				DDSIZOK label far
 02A3  8B D3				MOV	DX,BX				;search for Next entry
					DOS_Call Dir_Search_Next		;func=12			;AC000;
			     1							; 
 02A5  B4 12                 1		mov	ah,Dir_Search_Next			;				;AN000; 
 02A7  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
				
 02A9				ROOTDIR label far	;come here after search first .. failure also
 02A9  0A C0				OR	AL,AL			; was a matching filename found?
 02AB  74 2B				JZ	MOREDIR     ;zero = yes 	;More to go
 02AD  83 7E 06 00			CMP	WORD PTR [BP+6],0 ;nz=no	;Am I the root?
 02B1  74 1F				JZ	DIRDONE 			;Yes, no chdir
 02B3  BA 0000 E			MOV	DX,OFFSET DG:PARSTR
					DOS_Call ChDir				;				;AC000;
			     1							; 
 02B6  B4 3B                 1		mov	ah,ChDir			;				;AN000; 
 02B8  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 02BA  73 16				JNC	DIRDONE 			;Worked
				
				; NOTE************************************************
				;   On DOS >= 2.50 "cd .." should ALWAYS work since it is
				;   a string manipulation. Should NEVER get to here.
				
 02BC  80 3E 0000 E 00			CMP	[NOISY],OFF			;				;AC000;
 02C1  74 0C				JZ	DODDH
 02C3  BE 0000 E			MOV	SI,OFFSET DG:NUL
 02C6  E8 060D R			CALL	get_currdirERR
 02C9  BA 0000 E			MOV	DX,OFFSET DG:CDDDMES
 02CC  E8 0000 E			CALL	EPRINT
 02CF				DODDH:
 02CF  E8 0000 R			CALL	DOTDOTHARDWAY			;Try again
 02D2				DIRDONE:
 02D2  8B E5				MOV	SP,BP				;Pop local vars
 02D4  5D				POP	BP				;Restore frame
 02D5  C2 0004				RET	4				;Pop args
				
				
				
				;*****************************************************************
				; found at least one file in this subdir!
				;*****************************************************************
 02D8				MOREDIR:
 02D8  BE 0000 E			MOV	SI,OFFSET DG:DIRBUF  ;point to where ext fcb of found file is
 02DB  F6 44 13 10			TEST	[SI.DIRATT],ISDIR    ;attr 010h = sub-directory
 02DF  75 6B				JNZ	NEWDIR				;Is a new directory?
 02E1  80 3E 0000 E 00			CMP	[SECONDPASS],False		;no, same dir			;AC000;
 02E6  74 05				JZ	FPROC1				;2nd pass here
 02E8  E8 0445 R			CALL	CROSSLOOK			;Check for cross links
 02EB  EB B6				JMP	DDSIZOK 		      ;Next
				
 02ED				FPROC1:
 02ED  80 3E 0000 E 00			CMP	[NOISY],OFF			;				;AC000;
				;	$IF	NZ		 ;print filenames?
 02F2  74 03				JZ $$IF27
 02F4  E8 0814 R			    call    print_filename
				;	$ENDIF
 02F7				$$IF27:
 02F7				NOPRINT2:
 02F7  C7 06 0205 R 0000		mov	Cluster_Count,0 		;No clusters for vol label	;AN000;
 02FD  B9 0000				mov	cx,0				;setup cx for 0 size vol labels ;an016;bgb
 0300  F6 44 13 08			TEST	[SI.DIRATT],VOLIDA   ;attr=08	;Don't chase chains on labels   ;AC000;
				;	$IF	Z		     ;no, regular file
 0304  75 20				JNZ $$IF29
 0306  B0 81				    MOV     AL,81H			    ;Head of file
 0308  8B 7C 24				    mov     di,word ptr [si].DIRESIZ+0	    ;Get file size
 030B  89 3E 020E R			    mov     File_Size_Low,di		    ;
 030F  8B 7C 26				    mov     di,word ptr [si].DIRESIZ+2	    ;
 0312  89 3E 020C R			    mov     File_Size_High,di		    ;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-11
DIRPROC -- Recursive directory processing                   

 0316  8B 7C 22				    mov     di,[si].DirClus		    ;First cluster of file	    ;AN000;
 0319  E8 06A3 R			    CALL    MARKFAT
 031C  8B 0E 0205 R			    MOV     CX,Cluster_Count		    ;Get number of clusters
				;;;;;;;;;;;;PUSH    CX				    ;Save them
				;;;;;;;;;;;;CALL    Check_Extended_Attributes	    ;See if XA exist, and handle    ;AN000;
				;;;;;;;;;;;;POP     CX				    ;Get File length clusters
				;;;;;;;;;;;;ADD     CX,Cluster_Count		    ;Add in XA clusters
 0320  F6 44 13 02			    TEST    [SI.DIRATT],HIDDN		    ;
 0324  74 13				    JZ	    NORMFILE			    ;
				;	$ENDIF
 0326				$$IF29:
 0326				hidenfile:
 0326  83 06 0000 E 01			add	word ptr hidcnt,1	;found another hidden file	       ;an049;bgb
 032B  83 16 0002 E 00			adc	word ptr hidcnt+2,0	;add high word if > 64k files	     ;an049;bgb
 0330  01 0E 0000 E			add	hidsiz,cx		;it was this many bytes 	     ;an049;bgb
 0334  EA 02A3 ---- R			JMP	ddsizok 			;Next
 0339				NORMFILE:
 0339  83 06 0000 E 01			add	word ptr filcnt,1	;inc file counter		     ;an049;bgb
 033E  83 16 0002 E 00			adc	word ptr filcnt+2,0	;add high word if >64k files	     ;an049;bgb
 0343  01 0E 0000 E			add	filsiz,cx		;add in size of file		     ;an049;bgb
 0347  EA 02A3 ---- R			JMP	ddsizok 			;Next
				
				
				;***************************************************************************
				; NEWDIR - come here whenever you find another directory entry
				; inputs: SI - points to directory entry
				;***************************************************************************
 034C				NEWDIR:
 034C  80 3E 0000 E 00			CMP	[SECONDPASS],False	;are we on 2nd pass?			;AC000;
 0351  74 05				JZ	DPROC1			;zero means no - skip next part
 0353  E8 0445 R			CALL	CROSSLOOK		;2nd pass - Check for cross links
 0356  EB 3A				JMP	SHORT DPROC2		;goto dproc2
 0358				DPROC1: 				;1st pass
 0358  B0 82				MOV	AL,82H				;Head of dir
 035A  8B 7C 22				mov	di,[si].DirClus 	;get 1st clus num from dir entry	;AN000;
 035D  C7 06 020E R 0000		mov	File_Size_Low,0 	;	;Set to zero, shouldn't         ;AN000;
 0363  C7 06 020C R 0000		mov	File_Size_High,0		; be looked at for dir		;AN000;
 0369  E8 06A3 R			CALL	MARKFAT
 036C  83 06 0000 E 01			add	word ptr dircnt,1	 ;add 1 to the dir counter	     ;an047;bgb
 0371  83 16 0002 E 00			adc	word ptr dircnt+2,0	 ;add 1 to the high word if carry    ;an047;bgb
 0376  8B 0E 0205 R			MOV	CX,Cluster_Count		;Add count of clusters in files ;AN000;
 037A  80 3E 0000 E 00			CMP	[ZEROTRUNC],0		;did we modify the file size?		;an026;bgb
 037F  74 11				JZ	DPROC2				;Dir not truncated
 0381				CONVDIR:				;yes, dir size truncated
 0381  80 64 13 EF			AND	[SI.DIRATT],NOT ISDIR		;Turn into file
 0385  E8 055B R			CALL	FIXENT
 0388  5B				POP	BX			;Get my SRCH FCB pointer back
 0389  8F 06 0000 E			POP	[ERRSUB]		;restore from prev dir
 038D  EA 02A3 ---- R			JMP	ddsizok 			;Next
 0392				DPROC2:
 0392  01 0E 0000 E			add	dirsiz,cx		;add in siz of clusters 		;an049;bgb
				; put 4 words on the stack - for next call to dirproc?
 0396  FF 36 0000 E			PUSH	[ERRSUB]		;save the fcb ptr from prev dir
 039A  53				PUSH	BX				;Save my srch FCB pointer
 039B  8B 44 22				MOV	AX,[SI].DirCLus 	;get 1st cluster number
 039E  50				PUSH	AX			; Give him his own first clus pointer
 039F  FF 76 06				PUSH	[BP+6]				; His PARENT is me
				;copy fcb name to msg string name
 03A2  83 C6 08				ADD	SI,DIRNAM		;point to name, +08
 03A5  BF 0000 E			MOV	DI,OFFSET DG:NAMBUF
					savereg <di,ax> 		;copy to msg string
			     1	IRP reg,<di,ax> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 =-0005                      2		?stackdepth = ?stackdepth + 1 
 03A8  57                    2		PUSH    di 
 =-0004                      2		?stackdepth = ?stackdepth + 1 
 03A9  50                    2		PUSH    ax 
 03AA  E8 0000 E			CALL	FCB_TO_ASCZ
					restorereg <ax,di>
			     1	IRP reg,<ax,di> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0005                      2		?stackdepth = ?stackdepth - 1 
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-12
DIRPROC -- Recursive directory processing                   

 03AD  58                    2		POP     ax 
 =-0006                      2		?stackdepth = ?stackdepth - 1 
 03AE  5F                    2		POP     di 
				;check out validity of dir
 03AF  0B C0				OR	AX,AX			;does the 1st clus in dir point to zero?
 03B1  74 34				JZ	BogusDir		; no, it is bogus
 03B3  8B D7				mov	dx,di
					DOS_Call ChDir			; chdir to it				;AC000;
			     1							; 
 03B5  B4 3B                 1		mov	ah,ChDir			;				;AN000; 
 03B7  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 03B9  72 14				JC	CANTTARG		; carry means bad dir
				; go check out new dir
 03BB  E8 0129 R			CALL	DIRPROC
 03BE  5B				POP	BX			;Get my SRCH FCB pointer back
 03BF  8F 06 0000 E			POP	[ERRSUB]		;restore from prev dir
 03C3  80 3E 0000 E 00			CMP	[DOTSNOGOOD],0
 03C8  75 2B				JNZ	ASKCONV
 03CA  EA 02A3 ---- R			JMP	ddsizok 			;Next
				;newdir error routines
 03CF				CANTTARG:
				;cant chdir
 03CF  83 C4 08				ADD	SP,8				; Clean stack
 03D2  8B F2				mov	SI,dx				; Pointer to bad DIR
 03D4  E8 060D R			CALL	get_currdirERR
 03D7  BA 0000 E			MOV	DX,OFFSET DG:BADTarg_PTR
 03DA  C6 06 0000 E FF			mov	fTrunc,TRUE
 03DF  E8 0000 E			call	printf_crlf
 03E2  EA 02A3 ---- R			JMP	ddsizok 			;Next
 03E7				BogusDir:
				;bad dir entry
 03E7  83 C4 08				ADD	SP,8				; clean off stack
 03EA  8B F2				MOV	SI,DX				; pointer to bad dir
 03EC  E8 060D R			CALL	get_currdirERR			; output message with dir
 03EF  BA 0000 E			MOV	DX,OFFSET DG:BadSubDir		; real error message
 03F2  E8 0000 E			CALL	EPRINT				; to stderr...
 03F5				ASKCONV:
 03F5  80 3E 0000 E 00			CMP	[SECONDPASS],False		;				;AC000;
				;	$if	nz
 03FA  74 05				JZ $$IF31
 03FC  EA 02A3 ---- R			    jmp    ddsizok
				;;;;;;;;;;;;JNZ     DDSIZOK			    ;Leave on second pass
				;	$endif
 0401				$$IF31:
 0401  80 3E 0000 E 01			cmp	[NOISY],on		; /v entered ?			  ;An027;bgb
				;	$IF	E			; no, skip next msg		  ;An027;bgb
 0406  75 06				JNE $$IF33
 0408  BA 0000 E			    MOV     DX,OFFSET DG:PTRANDIR   ;unrecoverable error in directory ;An027;bgb
 040B  E8 0000 E			    call    printf_crlf 	    ;display msg		      ;An027;bgb
				;	$ENDIF
 040E				$$IF33:
 040E				PRINTTRMES:
 040E  BA 0000 E			MOV	DX,OFFSET DG:PTRANDIR2	;either case - "convert dir to file?" ;An027;bgb
 0411  E8 0000 E			CALL	PROMPTYN			;Ask user what to do
				;	$if	nz
 0414  74 05				JZ $$IF35
 0416  EA 02A3 ---- R			    jmp    ddsizok
				;;;;;;;;;;; JNZ     DDSIZOK			    ;Leave on second pass
				;	$endif
 041B				$$IF35:
 041B  55				PUSH	BP
 041C  53				PUSH	BX
 041D  8B 47 14				MOV	AX,[BX+THISENT] 		;Entry number
 0420  E8 0583 R			CALL	GETENT				;Get the entry
 0423  8B F7				MOV	SI,DI
 0425  BF 0000 E			MOV	DI,OFFSET DG:DIRBUF
 0428  57				PUSH	DI
 0429  83 C7 08				ADD	DI,DIRNAM
 042C  B9 0020				MOV	CX,32
 042F  F3/ A4				REP	MOVSB				;Transfer entry to DIRBUF
 0431  5E				POP	SI
 0432  56				PUSH	SI
 0433  8B 74 22				MOV	SI,[SI.DIRCLUS] 		;First cluster
 0436  E8 0000 E			CALL	GETFILSIZ
 0439  5E				POP	SI
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-13
DIRPROC -- Recursive directory processing                   

 043A  5B				POP	BX
 043B  5D				POP	BP
 043C  89 44 24				MOV	WORD PTR [SI.DIRESIZ],AX	;Fix entry
 043F  89 54 26				MOV	WORD PTR [SI.DIRESIZ+2],DX
 0442  E9 0381 R			JMP	CONVDIR 				   ;convert directory
				;*****************************************************************************
				;end of newdir
				;*****************************************************************************
				
				
				
				SUBTTL	fat-Look routines
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-14
fat-Look routines                                           

				PAGE
				;*****************************************************************************
				; CROSSLOOK - look at the fat, check for cross linked files
				; called by -
				;****************************************************************************
 0445				CROSSLOOK:
				;Same as MRKFAT only simpler for pass 2
 0445  89 1E 0000 E			MOV	[SRFCBPT],BX				   ;an014;bgb
 0449  8B DE				MOV	BX,SI					   ;an014;bgb
 044B  8B 77 22				MOV	SI,[BX.DIRCLUS] 			   ;an014;bgb
 044E  E8 0000 E			CALL	CROSSCHK				   ;an014;bgb
 0451  75 53				JNZ	CROSSLINK				   ;an014;bgb
				;;;;;;;;mov	XA_Pass,False				   ;an014;bgb			   ;an014;bg
				b
				
 0453				CHLP:
 0453  53				PUSH	BX					   ;an014;bgb
 0454  E8 0000 E			CALL	UNPACK					   ;an014;bgb
 0457  5B				POP	BX					   ;an014;bgb
 0458  87 F7				XCHG	SI,DI					   ;an014;bgb
 045A  3B 36 0000 E			CMP	SI,[EOFVAL]				   ;an014;bgb
 045E  73 64				jae	chaindone				   ;an014;bgb			   ;an014;bg
				b
				;;;;;;;;JAE	Check_XA_Cross				   ;an014;bgb			   ;an014;bg
				b
 0460  E8 0000 E			CALL	CROSSCHK				   ;an014;bgb
 0463  74 EE				JZ	CHLP					   ;an014;bgb
 0465  EB 3F				JMP SHORT CROSSLINK				   ;an014;bgb
											   ;an014;bgb
 0467				Check_XA_Cross: 			;					;AN000;
				
				;;;;;;;;mov	SI,[BX.DIR_XA]		;See if extended attribute ;an014;bgb		   ;AN000;
				;;;;;;;;cmp	si,0			;Is there?		   ;an014;bgb		   ;AN000;
				;;;;;;;;je	ChainDoneJ		;No if zero		   ;an014;bgb		   ;AN000;
				;	CALL	CROSSCHK		;Yes, see if crosslinked   ;an014;bgb		   ;AN000;
				;	JNZ	CROSSLINKJ		;NZ means yes		   ;an014;bgb		   ;AN000;
				;A_Cross_Loop:				;			   ;an014;bgb		   ;AN000;
				;	PUSH	BX			;			   ;an014;bgb		   ;AN000;
				;	CALL	UNPACK			;Get next cluster	   ;an014;bgb		   ;AN000;
				;	POP	BX			;			   ;an014;bgb		   ;AN000;
				;	XCHG	SI,DI			;			   ;an014;bgb		   ;AN000;
				;	CMP	SI,[EOFVAL]		;Reach the end? 	   ;an014;bgb		   ;AN000;
				;	JAE	ChainDoneJ	       ;Leave if so		   ;an014;bgb		  ;AN000;
				;	CALL	CROSSCHK		;See if crosslink	   ;an014;bgb		   ;AN000;
				;	JZ	XA_Cross_Loop		;Go check next cluster if not		;AN000;
				;	jmp	CrossLink		;Go handle crosslink	   ;an014;bgb		   ;AN000;
				;
				
				;NOCLUSTERSJ: JMP NOCLUSTERS
				
				
 0467				 CHASELOOP:							   ;an014;bgb
 0467  53				 PUSH	 BX						   ;an014;bgb
 0468  E8 0000 E			 CALL	 UNPACK 					   ;an014;bgb
 046B  5B				 POP	 BX						   ;an014;bgb
 046C  41				 INC	 CX						   ;an014;bgb
 046D  87 F7				 XCHG	 SI,DI						   ;an014;bgb
 046F  3B 36 0000 E			 CMP	 SI,[EOFVAL]					   ;an014;bgb
 0473  73 4F				 JAE	 CHAINDONE					   ;an014;bgb
 0475  83 FE 02				 CMP	 SI,2						   ;an014;bgb
 0478  72 06				 JB	 MRKBAD 					   ;an014;bgb
 047A  3B 36 0000 E			 CMP	 SI,[MCLUS]					   ;an014;bgb
 047E  76 21				 JBE	 MRKOK						   ;an014;bgb
 0480				 MRKBAD:					 ;Bad cluster # in chain
 0480  51				 PUSH	 CX						   ;an014;bgb
 0481  57				 PUSH	 DI						   ;an014;bgb
 0482  E8 061C R			 CALL	 get_THISELERR					   ;an014;bgb
 0485  BA 0000 E			 MOV	 DX,OFFSET dg:BADCHAIN				   ;an014;bgb
 0488  E8 0000 E			 CALL	 EPRINT 					   ;an014;bgb
 048B  5E				 POP	 SI						   ;an014;bgb
 048C  BA 0FFF				 MOV	 DX,0FFFH			 ;Insert EOF	   ;an014;bgb
 048F  80 3E 0000 E 00			 CMP	 [BIGFAT],0					   ;an014;bgb
 0494  74 03				 JZ	 FAT12_1					   ;an014;bgb
 0496  BA FFFF				 MOV	 DX,0FFFFH					   ;an014;bgb
 0499				 FAT12_1:							   ;an014;bgb ;an014;bgb ;an014;bgb
 0499  53				 PUSH	 BX						   ;an014;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-15
fat-Look routines                                           

 049A  E8 0000 E			 CALL	 PACK						   ;an014;bgb
 049D  5B				 POP	 BX						   ;an014;bgb
 049E  59				 POP	 CX						   ;an014;bgb
 049F  EB 23				 JMP SHORT CHAINDONE					   ;an014;bgb
				
 04A1				 MRKOK:
 04A1  E8 0000 E			 CALL	 MARKMAP					   ;an014;bgb
 04A4  74 C1				 JZ	 CHASELOOP					   ;an014;bgb
				Public	CrossLink
 04A6				CROSSLINK:					;File is cross linked
 04A6  FE 06 0000 E			INC	[ISCROSS]					       ;an014;bgb
 04AA  80 3E 0000 E 00			CMP	[SECONDPASS],False		;		       ;an014;bgb	   ;AC000;
 04AF  74 13				JZ	CHAINDONE			;Crosslinks only on second pass ;an014;bgb
 04B1  89 36 0203 R			mov	[cross_clus],si 		;Cluster number    ;an014;bgb
 04B5  E8 062A R			CALL	get_THISEL					   ;an014;bgb
					Message File_Arg			;Print file out    ;an014;bgb		   ;AN000;
			     1							; 
 04B8  BA 0000 E             1		mov	dx,offset dg:File_Arg	;				;AN000; 
 04BB  E8 0000 E             1		call	Display_Interface		;				;AN000; 
			     1							; 
 04BE  BA 0000 E			MOV	DX,OFFSET DG:CROSS_arg		;Print message out ;an014;bgb		   ;AC000;
 04C1  E8 0000 E			CALL	PRINTf_crlf					   ;an014;bgb
				Public	ChainDone
 04C4				CHAINDONE:
 04C4  F6 47 13 10			 TEST	 [BX.DIRATT],ISDIR
 04C8  75 45				 JNZ	 NOSIZE 			 ;Don't size dirs
 04CA  80 3E 0000 E 00			 CMP	 [ISCROSS],0
 04CF  75 3E				 JNZ	 NOSIZE 			 ;Don't size cross linked files;an014;bgb
 04D1  80 3E 0000 E 00			 CMP	 [SECONDPASS],False		 ;
 04D6  75 37				 JNZ	 NOSIZE 			 ;Don't size on pass 2  (CX garbage)
 04D8  A0 0000 E			 MOV	 AL,[CSIZE]
 04DB  32 E4				 XOR	 AH,AH
 04DD  F7 26 0000 E			 MUL	 [SSIZE]
 04E1  50				 PUSH	 AX				 ;Size in bytes of one alloc unit
 04E2  F7 E1				 MUL	 CX
 04E4  8B FA				 MOV	 DI,DX				 ;Save allocation size
 04E6  8B F0				 MOV	 SI,AX
 04E8  2B 47 24				 SUB	 AX,WORD PTR [BX.DIRESIZ]
 04EB  1B 57 26				 SBB	 DX,WORD PTR [BX.DIRESIZ+2]
 04EE  72 0A				 JC	 BADFSIZ			 ;Size to big
 04F0  0B D2				 OR	 DX,DX
 04F2  75 06				 JNZ	 BADFSIZ			 ;Size to small
 04F4  5A				 POP	 DX
 04F5  3B C2				 CMP	 AX,DX
 04F7  72 16				 JB	 NOSIZE 			 ;Size within one Alloc unit
 04F9  52				 PUSH	 DX				 ;Size too small
				 PUBLIC  BadFSiz
 04FA				 BADFSIZ:
 04FA  5A				 POP	 DX
 04FB  51				 PUSH	 CX				 ;Save size of file
 04FC  89 77 24				 MOV	 WORD PTR [BX.DIRESIZ],SI
 04FF  89 7F 26				 MOV	 WORD PTR [BX.DIRESIZ+2],DI
 0502  E8 054B R			 CALL	 FIXENT2			 ;Fix it
 0505  E8 061C R			 CALL	 get_THISELERR
 0508  BA 0000 E			 MOV	 DX,OFFSET DG:BADCLUS
 050B  E8 0000 E			 CALL	 EPRINT
 050E  59				 POP	 CX				 ;Restore size of file
 050F				 NOSIZE:
 050F  8B F3				MOV	SI,BX
 0511  8B 1E 0000 E			MOV	BX,[SRFCBPT]
 0515  C3				RET
				
 0516				 NOCLUSTERS:
										 ;File is zero length
 0516  0B F6				 OR	 SI,SI
 0518  74 1F				 JZ	 CHKSIZ 			 ;Firclus is OK, Check size
 051A  BA 0000 E			 MOV	 DX,OFFSET DG:NULNZ
 051D				 ADJUST:
 051D  52				 PUSH	 DX
 051E  E8 061C R			 CALL	 get_THISELERR
 0521  5A				 POP	 DX
 0522  E8 0000 E			 CALL	 EPRINT
 0525  33 F6				 XOR	 SI,SI
 0527  89 77 22				 MOV	 [BX.DIRCLUS],SI		 ;Set it to 0
 052A  89 77 24				 MOV	 WORD PTR [BX.DIRESIZ],SI	 ;Set size too
 052D  89 77 26				 MOV	 WORD PTR [BX.DIRESIZ+2],SI
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-16
fat-Look routines                                           

 0530  E8 054B R			 CALL	 FIXENT2			 ;Fix it
 0533  FE 06 0000 E			 INC	 [ZEROTRUNC]			 ;Indicate truncation
 0537  EB 8B				 JMP	 CHAINDONE
				
				 PUBLIC  ChkSiz
 0539				 CHKSIZ:
 0539  BA 0000 E			 MOV	 DX,OFFSET DG:BADCLUS
 053C  83 7F 24 00			 CMP	 WORD PTR [BX.DIRESIZ],0
 0540  75 DB				 JNZ	 ADJUST 			 ;Size wrong
 0542  83 7F 26 00			 CMP	 WORD PTR [BX.DIRESIZ+2],0
 0546  75 D5				 JNZ	 ADJUST 			 ;Size wrong
 0548  E9 04C4 R			 JMP	 CHAINDONE			 ;Size OK
				
				
				SUBTTL	Routines for manipulating dir entries
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-17
Routines for manipulating dir entries                       

				PAGE
				
 054B				FIXENT2:
				;Same as FIXENT only [SRFCBPT] points to the search FCB, BX points to the entry
					savereg <si,bx,cx>
			     1	IRP reg,<si,bx,cx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 =-0005                      2		?stackdepth = ?stackdepth + 1 
 054B  56                    2		PUSH    si 
 =-0004                      2		?stackdepth = ?stackdepth + 1 
 054C  53                    2		PUSH    bx 
 =-0003                      2		?stackdepth = ?stackdepth + 1 
 054D  51                    2		PUSH    cx 
 054E  8B F3				MOV	SI,BX
 0550  8B 1E 0000 E			MOV	BX,[SRFCBPT]
 0554  E8 055B R			CALL	FIXENT
					restorereg <cx,bx,si>
			     1	IRP reg,<cx,bx,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0004                      2		?stackdepth = ?stackdepth - 1 
 0557  59                    2		POP     cx 
 =-0005                      2		?stackdepth = ?stackdepth - 1 
 0558  5B                    2		POP     bx 
 =-0006                      2		?stackdepth = ?stackdepth - 1 
 0559  5E                    2		POP     si 
 055A  C3			RET20:	RET
				
 055B				FIXENT:
				;BX Points to search FCB
				;SI Points to Entry to fix
 055B  C6 06 0000 E 01			MOV	[HAVFIX],1			;Indicate a fix
 0560  80 3E 0000 E 00			CMP	[DOFIX],0		;did the user enter /f flag?
 0565  74 1B				JZ	fixret			;zero means no - dont fix it
					savereg <bp,bx,si,si>
			     1	IRP reg,<bp,bx,si,si> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 =-0005                      2		?stackdepth = ?stackdepth + 1 
 0567  55                    2		PUSH    bp 
 =-0004                      2		?stackdepth = ?stackdepth + 1 
 0568  53                    2		PUSH    bx 
 =-0003                      2		?stackdepth = ?stackdepth + 1 
 0569  56                    2		PUSH    si 
 =-0002                      2		?stackdepth = ?stackdepth + 1 
 056A  56                    2		PUSH    si 
 056B  8B 47 14				MOV	AX,[BX+THISENT] 		;Entry number
 056E  E8 0583 R			CALL	GETENT
 0571  5E				POP	SI				;Entry pointer
 0572  83 C6 08				ADD	SI,DIRNAM			;Point to start of entry
 0575  B9 0020				MOV	CX,32
 0578  F3/ A4				REP	MOVSB
 057A  FE C1				INC	CL
 057C  E8 0000 E			CALL	DOINT26
					restorereg <si,bx,bp>
			     1	IRP reg,<si,bx,bp> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0003                      2		?stackdepth = ?stackdepth - 1 
 057F  5E                    2		POP     si 
 =-0004                      2		?stackdepth = ?stackdepth - 1 
 0580  5B                    2		POP     bx 
 =-0005                      2		?stackdepth = ?stackdepth - 1 
 0581  5D                    2		POP     bp 
 0582  C3			fixret: RET
				
				
				
				;*****************************************************************************	;ac048;bgb
				; GETENT - calculate, and read into ram, the sector of the directory entry	;ac048;bgb
				;	   that is invalid.  This entry can be in either the root directory,	;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-18
Routines for manipulating dir entries                       

				;	   or in a sub-directory.  If it is in the root, it can be in the first ;ac048;bgb
				;	   sector of the root dir, or in a subsequent sector.  If it is in a	;ac048;bgb
				;	   subdirectory, it can be in the first cluster of the subdir, or in	;ac048;bgb
				;	   any subsequent cluster.  It can also be in the first sector of the	;ac048;bgb
				;	   cluster, or in any of the following sectors within that cluster.	;ac048;bgb
				;										;ac048;bgb
				; WARNING!! NOTE!! --> this procedure has a limit on the input value of 64k	;ac048;bgb
				;		       entries.  If the disk fails on an entry in a subdir	;ac048;bgb
				;		       which has an invalid entry past this value, then the	;ac048;bgb
				;		       calling procedure will probably wrap on this word value, ;ac048;bgb
				;		       causing getent to calc the wrong sector, and then	;ac048;bgb
				;		       corrupting the disk.  Not likely, but poss.		;ac048;bgb
				;										;ac048;bgb
				; called by - nodot/mesd1	 - no . entry found  (always subdir)		;ac048;bgb
				;	    - noddot/mesd2	 - no .. entry found (always subdir)		;ac048;bgb
				;	    - askconv/printtrmes - convert dir to file (can be in root) 	;ac048;bgb
				;	    - makfillp		 - find root entry in which to place lost clus	;ac048;bgb
				;										;ac048;bgb
				; inputs - AX - desired entry num (in curr dir, reffed off BP)			;ac048;bgb
				;		0=.   1=..   2=first entry					;ac048;bgb
				;	   DX - number of lost clusters
				;	   BP - ptr to extended fcb for this dir				;ac048;bgb
				;	   BP+6 - 1st cluster number of this dir				;ac048;bgb
				;										;ac048;bgb
				; output - AX - contains number of the disk to use for int26			;ac048;bgb
				;	   DI - points to entry in subdir in ram				;ac048;bgb
				;	   DX - low sector number of the dir					;ac048;bgb
				;	   BX - ram offset of the sector					;ac048;bgb
				;	   Read_Write_Relative.Start_Sector_Hi - hi sector number of the dir	;ac048;bgb
				;										;ac048;bgb
				; Regs abused - all of 'em !! (ok, well, maybe not bp...)                       ;ac048;bgb
				;										;ac048;bgb
				;logic: 1. make sure there will not be a problem with the cluster number. This	;ac048;bgb
				;	   should not be a problem, since if the cluster number is invalid, it	;ac048;bgb
				;	   should have been flagged by previous routines.			;ac048;bgb
				;										;ac048;bgb
				;	2. calc clus-num & offset						;ac048;bgb
				;	   Entries * bytes/entry / BPS --> number of sectors from the beg of	;ac048;bgb
				;	   the dir.  There are 16 entries per sector (starting at zero).  The	;ac048;bgb
				;	   bytes/entry and bytes/sector are condensed, giving a div by 16,	;ac048;bgb
				;	   instead of "* 32 / 512".  Now we have the first cluster (0-fff7),	;ac048;bgb
				;	   the sector-offset (0-fff), and the entry-offset (0-f).		;ac048;bgb
				;										;ac048;bgb
				;	   forumla: entry (0-ffff)  /  16 = sector-offset (0-fff)  ax		;ac048;bgb
				;					  = entry-offset  (0-f)    dx		;ac048;bgb
				;										;ac048;bgb
				;      3. if we are in the root directory, then we have the correct sector	;ac048;bgb
				;	  number, so just add it to the starting sector number of the		;ac048;bgb
				;	  directory.								;ac048;bgb
				;										;ac048;bgb
				;      4. otherwise, we are in a subdirectory.	Here, we need to get the	;ac048;bgb
				;	  cluster-offset, since the sector-offset can be more than 1 cluster	;ac048;bgb
				;	  in length.  So, divide the sectors by (secs/clus) to get cluster-	;ac048;bgb
				;	  offset.  This value is now a power of 2, from 2 up to 16.		;ac048;bgb
				;										;ac048;bgb
				;	   / sectors/cluster (2-16)   = cluster offset AL			;ac048;bgb
				;				      = sector	offset AH			;ac048;bgb
				;										;ac048;bgb
				;      5. If AL > 0, then we have to walk the fat chain to find the cluster	;ac048;bgb
				;	  where this sector is.  Fortunately, we have the starting cluster	;ac048;bgb
				;	  number (BX), UNPACK will find the next cluster number, and we have	;ac048;bgb
				;	  the number of clusters to jump (AL).	So, move the appropriate	;ac048;bgb
				;	  into the regs, and loop until completed.  Now BX has the correct	;ac048;bgb
				;	  cluster number.							;ac048;bgb
				;										;ac048;bgb
				;      6. Now we need to translate the cluster and sector numbers into an	;ac048;bgb
				;	  absolute, double word, sector number.  FIGREC will do this.		;ac048;bgb
				;										;ac048;bgb
				;      7. Now, from either root dir, or from subdir, we have the absolute	;ac048;bgb
				;	  sector, so set up the regs, and call READ_DISK to read it into ram.	;ac048;bgb
				;	  Now DX contains the sector number (low), and BX points to the 	;ac048;bgb
				;	  sector in ram.							;ac048;bgb
				;										;ac048;bgb
				;      8. Finally, get the entry-offset that we had stored on the stack, and	;ac048;bgb
				;	  translate it into a byte-offset by multpying it times the number of	;ac048;bgb
				;	  bytes per entry (32).  Now DI points to the entry in ram.		;ac048;bgb
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-19
Routines for manipulating dir entries                       

				;*****************************************************************************	;ac048;bgb
 0583				GETENT: 									;ac048;bgb
 0583  8B 5E 06				mov	bx,[bp+6]		;Get 1st cluster of subdir		;ac048;bgb
				;double check for invalid cluster						;ac048;bgb
 0586  3B 1E 0000 E			cmp	bx,[eofval]		;Last entry in cluster? 		;ac048;bgb
				;	$IF	NB								;ac048;bgb
 058A  72 06				JB $$IF37
 058C  BB 0000 E			    mov     bx,offset dg:baddpbdir	    ;This should never happen	;ac048;bgb
 058F  E9 0000 E			    jmp     fatal			    ;Danger, warning Phil Robins;ac048;bgbon
				;	$ENDIF									;ac048;bgb
 0592				$$IF37:
														;ac048;bgb
 0592				CLUSISOK:									;ac048;bgb
				;calc cluster number and offset 						;ac048;bgb
 0592  B9 0010				mov	cx,16			;32 bytes/entry  /  512 bytes/sec	;ac048;bgb
 0595  33 D2				xor	dx,dx			;zero out hi word for divide		;ac048;bgb
 0597  F7 F1				div	cx    ;NOW- bx=first clus, ax=sec-offset, dx=entry-offset	;ac048;bgb
								    ;NOTE: ax can be > 1 cluster		;ac048;bgb
				;are we at the root?								;ac048;bgb
 0599  0B DB				or	bx,bx			;cluster zero?				;ac048;bgb
				;	$IF	Z			;yes, then we are in root dir		;ac048;bgb
 059B  75 0F				JNZ $$IF39
					    ;;;;;;;;jz	    wantroot		    ;Cluster 0 means root dir	;ac048;bgb
 059D  52			WANTROOT:   push    dx			;restored as di- ptr to invalid entry	;ac048;bgb
 059E  8B D0				    mov     dx,ax		;get sector offset			;ac048;bgb
 05A0  03 16 0000 E			    add     dx,[dirsec] 	;add in first sector of dir		;ac048;bgb
 05A4  C7 06 0002 E 0000		    mov     Read_Write_Relative.Start_Sector_High,0  ;save hi value	;ac048;bgb
					    ;;;;;;;;;;;JMP     DOROOTDIR ;now ready for int25			;ac048;bgb
														;ac048;bgb
				;	$ELSE		;not in root dir					;ac048;bgb
 05AA  EB 1B				JMP SHORT $$EN39
 05AC				$$IF39:
 05AC  F6 36 0000 E		NOTROOT:    div     csize		;divide by sectors/cluster (2-16)	;ac048;bgb
							     ;AL=# cluster-offset (QUO), AH= sector-offset (REM);ac048;bgb
 05B0  8A C8				    mov     cl,al		;get cluster offset from al		;ac048;bgb
 05B2  32 ED				    xor     ch,ch		;zero out hi byte to make word value	;ac048;bgb
 05B4  0B C9				    or	    cx,cx    ;do we have more than one cluster worth to go yet? ;ac048;bgb
				;	    $IF     NZ	     ;yes - we have to walk the chain to find it	;ac048;bgb
 05B6  74 0B				    JZ $$IF41
					    ;;;;;;;;JCXZ    GOTCLUS		    ;jump if cx reg = zero	;ac048;bgb
 05B8  8B F3					mov	si,bx		    ;move the cluster num for input	;ac048;bgb
 05BA  E8 0000 E		SKIPLP: 	call	unpack		    ;find the next cluster number	;ac048;bgb
 05BD  87 F7					xchg	si,di		    ;move it into input position	;ac048;bgb
 05BF  E2 F9					loop	skiplp		    ;do for number of cluster-offset	;ac048;bgb
 05C1  8B DE					mov	bx,si		    ;now we have the cluster number	;ac048;bgb
				;	    $ENDIF								;ac048;bgb
 05C3				$$IF41:
														;ac048;bgb
				;calculate the sector from the cluster & sec-offset				;ac048;bgb
 05C3  52			GOTCLUS:    push    dx		     ;restored as di -> entry offset		;ac048;bgb
 05C4  E8 0000 E			    call    figrec	     ;Convert to sector # - ax=low, dx=hi	;ac048;bgb
				;	$ENDIF	;are we in root dir?						;ac048;bgb
 05C7				$$EN39:
														;ac048;bgb
 05C7				DOROOTDIR:									;ac048;bgb
 05C7  8B 1E 0000 E			mov	bx,[secbuf]		;get offset of ram area 		;ac048;bgb
 05CB  A0 0000 E			mov	al,[alldrv]		;get drive number			;ac048;bgb
 05CE  FE C8				dec	al			;adjust for int25			;ac048;bgb
 05D0  B9 0001			RDRETRY: mov	 cx,1			 ;read 1 sector 			;ac048;bgb
 05D3  E8 0000 E			call	Read_Disk		;do it					;ac048;bgb
 05D6  73 02				jnc	rdok2			;was it good?				;ac048;bgb
				;Need to handle 'Fail' option of critical error here				;ac048;bgb
 05D8  74 F6				JZ	RDRETRY 							;ac048;bgb
														;ac048;bgb
 05DA  58			RDOK2:	pop	ax			;get byte-offset into sector		;ac048;bgb
 05DB  B1 05				mov	cl,5		    ;value of 32= bytes per entry		;ac048;bgb
 05DD  D3 E0				shl	ax,cl		    ;mul entry offset to get byte offset	;ac048;bgb
 05DF  03 C3				add	ax,bx			;add in offset of dir in ram		;ac048;bgb
 05E1  8B F8				mov	di,ax								;ac048;bgb
 05E3  A0 0000 E			mov	al,[alldrv]		;get drive number			;ac048;bgb
 05E6  FE C8				dec	al			;adjust for int26			;ac048;bgb
 05E8  C3				RET				;di now points to offending entry	;ac048;bgb
				;*****************************************************************************	;ac048;bgb
				
				
				
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-20
Routines for manipulating dir entries                       

				
 05E9				CHECKNOFMES:
 05E9  B0 01				MOV	AL,1
 05EB  86 06 0000 E			XCHG	AL,[FIXMFLG]
 05EF  0A C0				OR	AL,AL
 05F1  75 10				JNZ	RET14				;Don't print it more than once
 05F3  80 3E 0000 E 00			CMP	[DOFIX],0
 05F8  75 09				JNZ	RET14				;Don't print it if F switch specified
 05FA  BA 0000 E			mov	dx,offset dg:FIXMES_arg
 05FD  E8 0000 E			CALL	PRINTf_crlf
 0600  E8 0000 E			call	DoCRLF				;				;AN000;
 0603  C3			ret14:	RET
				
 0604				CHECKERR:
 0604  E8 05E9 R			CALL	CHECKNOFMES
 0607  80 3E 0000 E 00			CMP	[SECONDPASS],False		;				;AC000;
 060C  C3				RET
				
 060D				get_currdirERR:
 060D  E8 0604 R			CALL	CHECKERR
 0610  74 06				jz	ok_pri_dir
 0612  C6 06 0000 E 00			mov	byte ptr [arg_buf],0
 0617  C3				ret
 0618				ok_pri_dir:
 0618  E8 0637 R			CALL	get_currdir
 061B  C3				ret
				
 061C				get_thiselERR:
 061C  E8 0604 R			CALL	CHECKERR
 061F  74 05				jz	ok_pri_el
 0621  C6 06 0000 E 00			mov	byte ptr [arg_buf],0
 0626				ok_pri_el:
 0626  E8 062A R			CALL	get_thisel
 0629  C3				RET
				
 062A				get_THISEL:
 062A  8B F3				MOV	SI,BX
 062C  83 C6 08				ADD	SI,DIRNAM
				;*****************************************************************************
				; called by: checkfiles
				; inputs:	AX - number of fragments
				;		SI
				;*****************************************************************************
 062F				get_THISEL2:
 062F  BF 0000 E			MOV	DI,OFFSET DG:NAMBUF
 0632  57				PUSH	DI
 0633  E8 0000 E			CALL	FCB_TO_ASCZ
 0636  5E				POP	SI
 0637				get_currdir:
 0637  56				PUSH	SI
				; get drive letter prefix (c:\)
 0638  BF 0000 E			mov	di,offset dg:arg_buf
 063B  A0 0000 E			MOV	al,[ALLDRV]
 063E  04 40				ADD	al,'@'
 0640  AA				stosb
 0641  B0 3A				MOV	al,[DRVCHAR]
 0643  AA				stosb
 0644  A0 0000 E			mov	al,[DIRCHAR]
 0647  AA				stosb
 0648  8B F7				MOV	SI,DI
				; get the name of the current directory, and put it into es:di
 064A  8A 16 0000 E			MOV	DL,[ALLDRV]
					DOS_Call Current_Dir			;				;AC000;
			     1							; 
 064E  B4 47                 1		mov	ah,Current_Dir			;				;AN000; 
 0650  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 0652				GET_END:
				;find the end of the string - it will be hex zero
 0652  AC				LODSB
 0653  0A C0				OR	AL,AL
 0655  75 FB				JNZ	GET_END
				;
 0657  4E				DEC	SI				; Point at NUL
 0658  8B FE				MOV	DI,SI
 065A  5E				POP	SI			;point to begin of string
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-21
Routines for manipulating dir entries                       

 065B  80 3C 00				CMP	BYTE PTR [SI],0
 065E  74 11				JZ	LPDONE				;If tail string NUL, no '/'
				; move '\' for between path and filename
 0660  A0 0000 E			MOV	al,[DIRCHAR]
 0663  38 45 FF				CMP	BYTE PTR [DI - 1],AL
 0666  74 01				JZ	ERRLOOP 			; Don't double '/' if root
 0668  AA				stosb
 0669				ERRLOOP:
				; move filename from ds:si to es:di until find hex zero
 0669  AC				LODSB
 066A  0A C0				OR	AL,AL
 066C  74 03				JZ	LPDONE
 066E  AA				stosb
 066F  EB F8				JMP	ERRLOOP
 0671				LPDONE:
				; finish off string with hex zero for asciiz
 0671  B0 00				mov	al,0
 0673  AA				stosb
 0674  C3				RET
				
 0675				CHECK_SPLICE:
				; Carry set if current directory is NOT spliced (joined) onto.
				; Carry clear if current directory is spliced (joined) onto.
				
 0675  BE 0000 E			MOV	SI,OFFSET DG:NUL
 0678  E8 0637 R			CALL	get_currdir			; Build ASCIZ text of current dir
										;  at arg_buf
 067B  BE 0000 E			mov	si,offset dg:arg_buf
 067E  BF 0000 E			mov	di,offset dg:TMP_SPC
					DOS_Call xNameTrans			;				;AC000;
			     1							; 
 0681  B4 60                 1		mov	ah,xNameTrans			;				;AN000; 
 0683  CD 21                 1		int	21h				;				;AN000; 
			     1							; 
 0685  72 1A				JC	NT_SPLC 			; Say NOT spliced if error
 0687  81 3E 0001 E 5C3A		CMP	WORD PTR [TMP_SPC+1],"\" SHL 8 OR ":"
 068D  75 12				JNZ	NT_SPLC
 068F  80 3E 0003 E 00			CMP	BYTE PTR [TMP_SPC+3],0
 0694  75 0B				JNZ	NT_SPLC
 0696  A0 0000 E			MOV	AL,BYTE PTR [arg_buf]		; Source drive letter
 0699  3A 06 0000 E			CMP	AL,BYTE PTR [TMP_SPC]		; Different from dest if spliced
 069D  74 02				JZ	NT_SPLC 			; Drive letter didn't change
 069F  F8				CLC
 06A0  C3				RET
				
 06A1				NT_SPLC:
 06A1  F9				STC
 06A2  C3				RET
				
				
				;*****************************************************************************
				;Routine name: MarkFAT
				;*****************************************************************************
				;
				;Description: Trace the fat chain for a single file, marking entries in FATMap,
				;	      and handling errors -
				;	      (crosslink, truncation, allocation error, invalid cluster entry)
				;
				; called by :	moredir
				;		newdir
				;
				;Called Procedures: Unpack
				;		    Bad_Cluster
				;		    MarkMap
				;		    Check_Chain_Sizes
				;		    ThisEl
				;		    Eprint
				;
				;Change History: Created	5/10/87 	MT
				;
				;Input: BX = pointer to search FCB
				;	AL is head mark with app type =81h
				;	SI = points to dir entry
				;	DI = cluster entry of file or XA in directory
				;	File_Size_Low/High = bytes length directory or XA structure says
				;				the data area is
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-22
Routines for manipulating dir entries                       

				;	SecondPass = TRUE/FALSE
				;	XA_Pass = TRUE/FALSE
				;	EOFVal = 0FF8h/0FFF8h
				;
				;Output:
				;	 ZEROTRUNC is non zero if the file was trimmed to zero length
				;	 ISCROSS is non zero if the file is cross linked
				;	 BX,SI preserved
				;	 Cluster_Count = number of clusters in chain
				;	 carry flag is set if the clusters are ok
				;	 fatmap entries - 81h = head of file,
				;			  01h = used cluster
				;
				;Psuedocode
				;----------
				;
				;	ZeroTrunc,IsCross = FALSE, SRFCBPT = BX, Cluster_Count = 0
				;	Get file cluster entry (CALL Unpack)
				;	IF cluster < 2 or > maximum cluster (MClus)
				;	   Go handle invalid cluster (CALL Bad_Cluster)
				;	ELSE
				;	   SEARCH
				;	      Go mark cluster in FATMap (CALL MarkMAP)
				;	      Turn off head bit on FATMap marker
				;	   EXITIF Crosslink
				;	      IsCross = TRUE
				;	      IF SecondPass = FALSE
				;		 Setup filename for message (CALL ThisEl)
				;		 Display crosslink message (Call Eprint)
				;	      ENDIF
				;	   ORELSE (no crosslink)
				;	      Get next cluster (CALL Unpack)
				;	      IF Cluster >= EOFVAL [(0/F)FF8h]
				;		 Verify file sizes (CALL Check_Chain_Sizes)
				;		 clc  (Force loop to end)
				;	      ELSE
				;		 IF cluster < 2 or > maximum cluster (MClus)
				;		    Go handle invalid cluster (CALL Bad_Cluster)
				;		    clc  (Force loop to end)
				;		 ELSE
				;		     stc  (Force loop to keep goining
				;		 ENDIF
				;	      ENDIF
				;	   ENDLOOP clc
				;	   ENDSRCH
				;	ENDIF
				;	ret
				;*****************************************************************************
				Procedure MarkFAT				;			       ;AN000;
			     1							; 
			     1	Public	MarkFAT				;				;AN000; 
 06A3                        1	MarkFAT    proc				;				;AN000; 
 06A3  56				push	si				;AN000;
 06A4  53				push	bx				;AN000;
 06A5  A2 0200 R			mov	Head_Mark,al			;Save flag to put in map	;AN000;
 06A8  C6 06 0000 E 00			mov	ZeroTrunc,False 		;Init values			;     ;
 06AD  C6 06 0000 E 00			mov	IsCross,False			;				;     ;
 06B2  C7 06 0205 R 0000		mov	Cluster_Count,0 		;Init count of clusters 	;     ;
 06B8  89 1E 0000 E			mov	SrFCBPt,bx			;Pointer to search FCB		;     ;
 06BC  89 3E 0207 R			mov	First_Cluster,di		;				;AN000;
 06C0  89 3E 0209 R			mov	Previous_Cluster,di		;Init pointer
 06C4  83 FF 02				cmp	di,2				;Cluster < 2?			;AC000;
				;	$IF	B,OR				;    or 			;AC000;
 06C7  72 06				JB $$LL44
 06C9  3B 3E 0000 E			cmp	di,MClus			;Cluster > total clusters?	;AC000;
				;	$IF	A				;				;AC000;
 06CD  76 11				JNA $$IF44
 06CF				$$LL44:
 06CF  83 7C 22 00			    cmp word ptr [si].dirclus,0 ;if both cluster and size = 0,		;an025;bgb
				;	    $IF NE,OR			;then its not an error, 		;an025;bgb
 06D3  75 06				    JNE $$LL45
 06D5  83 7C 24 00			    cmp word ptr [si].diresiz,0 ;and dont print msg			;an025;bgb
				;	    $IF NE								;an025;bgb
 06D9  74 03				    JE $$IF45
 06DB				$$LL45:
 06DB  E8 074A R				call	Bad_Cluster		     ;Yes, go indicate bad stuff     ;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-23
Routines for manipulating dir entries                       

				;	    $ENDIF
 06DE				$$IF45:
				;	$ELSE					;Cluster in valid range 	;AN000;
 06DE  EB 67				JMP SHORT $$EN44
 06E0				$$IF44:
				;	   $SEARCH				;Chase the cluster chain	;AN000;
 06E0				$$DO48:
 06E0  A0 0200 R			      mov     al,Head_Mark		;Get flag for map 01		;AC000;
 06E3  E8 0000 E			      call    MarkMap			;Mark the cluster (SI)		;AC000;
 06E6  50				      push    ax			;Save head mark 		;AN000;
 06E7  9F				      lahf				;Save CY status
 06E8  80 26 0200 R 7F			      and     Head_Mark,Head_Mask	;Turn off head bit of map flag	;AC000;
 06ED  9E				      sahf				;Get CY flags back
 06EE  58				      pop     ax			;Get haed mark back		;AN000;
				;	   $EXITIF C				;Quit if crosslink		;AC000;
 06EF  73 27				   JNC $$IF48
 06F1  C6 06 0000 E FF			      mov     IsCross,True		;Set crosslink flag		;AC000;
 06F6  80 3E 0000 E FF			      cmp     SecondPass,True		;Handle crosslink 2nd pass only ;AC000;
				;	      $IF     E 			;This is first pass		;AC000;
 06FB  75 19				      JNE $$IF50
 06FD  89 3E 0203 R				 mov	 Cross_Clus,di		;Put cluster in message 	;AN000;
 0701  53					 push	 bx			;Get dir pointer into bx	;AN000;
 0702  56					 push	 si			;				;AN000;
 0703  8B DE					 mov	 bx,si			; for the call			;AN000;
 0705  E8 061C R				 call	 Get_ThisELErr		;				;AC000;
 0708  BA 0000 E				 mov	 dx,offset DG:Cross_arg ;Specify error message		;AC000;
 070B  E8 0000 E				 call	 EPrint 		;Go print file and error	;AC000;
 070E  5E					 pop	 si			;				;AN000;
 070F  5B					 pop	 bx			;				;AN000;
						 Message Cross_Arg		;				;AC000;
			     1							; 
 0710  BA 0000 E             1		mov	dx,offset dg:Cross_Arg	;				;AN000; 
 0713  E8 0000 E             1		call	Display_Interface		;				;AN000; 
			     1							; 
				;	      $ENDIF				;				;AN000;
 0716				$$IF50:
				;	   $ORELSE				;No crosslink found		;AN000;
 0716  EB 2F				   JMP SHORT $$SR48
 0718				$$IF48:
 0718  56				      push    si			;Save dir pointer
 0719  8B F7				      mov     si,di			;Provide current cluster
 071B  89 3E 0209 R			      mov     Previous_Cluster,di	;Save current cluster
 071F  E8 0000 E			      call    UnPack			;Get next cluster entry (di)	;AC000;
 0722  FF 06 0205 R			      inc     Cluster_Count		;Got a cluster			;AN000;
 0726  5E				      pop     si			;Get dir pointer back
 0727  3B 3E 0000 E			      cmp     di,EOFVal 		;Is it the last clus in file?	;AC000;
				;	      $IF     AE			;Yes - good chain so far	;AN000;
 072B  72 06				      JNAE $$IF53
 072D  E8 07A6 R				 call	 Check_Chain_Sizes	;Go verify file sizes		;AN000;
 0730  F8					 clc				;Clear CY to force exit 	;AN000;
				;	      $ELSE				;Not end of chain
 0731  EB 12				      JMP SHORT $$EN53
 0733				$$IF53:
 0733  83 FF 02					 cmp	 di,2			;Cluster < 2?			;AC000;
				;		 $IF	 B,OR			;    or 			;AC000;
 0736  72 06					 JB $$LL55
 0738  3B 3E 0000 E				 cmp	 di,MClus		;Cluster > total clusters?	;AC000;
				;		 $IF	 A			;Yep				;AN000;
 073C  76 06					 JNA $$IF55
 073E				$$LL55:
 073E  E8 074A R				    call    Bad_Cluster 	;Yes, go indicate bad stuff	;AN000;
 0741  F8					    clc 			;Clear CY to force loop exit	;AN000;
				;		 $ELSE				;No, more clusters to go	;AN000;
 0742  EB 01					 JMP SHORT $$EN55
 0744				$$IF55:
 0744  F9					    stc 			;Set CY to keep going		;AN000;
				;		 $ENDIF 			;				;AN000;
 0745				$$EN55:
				;	      $ENDIF				;
 0745				$$EN53:
				;	   $ENDLOOP NC				;Exit if done with chain	;AN000;
 0745  72 99				   JC $$DO48
				;	   $ENDSRCH				;End of chain chase loop       ;AN000;
 0747				$$SR48:
				;	$ENDIF					;
 0747				$$EN44:
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-24
Routines for manipulating dir entries                       

 0747  5B				pop	bx				;Restore registers		;AN000;
 0748  5E				pop	si				;				;AN000;
 0749  C3				ret					;				;AN000;
 074A				MarkFAT endp					;				;AN000;
				
				;*****************************************************************************
				;Routine name: Bad_Cluster
				;*****************************************************************************
				;
				;description: IF first cluster =0, truncate file or XA to zero length.
				;	      If bad cluster elsewhere, put in EOFVal.
				;
				;Called Procedures: Get_ThisElErr
				;		    Eprint
				;		       FixENT2
				;
				;Change History: Created	5/10/87 	MT
				;
				;Input: First_Cluster
				;	   Chain_End
				;	   XA_PASS = TRUE/FALSE
				;	   DI = Cluster entry
				;	   SI = dir block pointer
				;	   First_Cluster = first cluster or extended XA
				;	   Previous_Cluster = last good cluster number
				;
				;Output: ZeroTrunc = TRUE/FALSE
				;
				;Psuedocode
				;----------
				;
				;	Setup filename for any messages (Call Get_ThisELErr)
				;	IF cluster = First_Cluster
				;	   IF XA_PASS = FALSE
				;		 Zero out file length in DIR
				;		 Setup message (CALL Get_ThisElErr)
				;		 Display message (Call Eprint)
				;	   ELSE (XA pass)
				;	      Zero out XA pointer
				;	      Setup message (CALL Get_ThisElErr)
				;	      Display message (Call Eprint)
				;	   ENDIF
				;	   Write out corrected directory (CALL FixENT2)
				;	ELSE (cluster other than first in chain)
				;	   IF XA_Pass = TRUE
				;	     Display Bad XA cluster message
				;	   ELSE (!XA_Pass)
				;	     Display bad file chain message
				;	   ENDIF
				;	   Move EOF into bad cluster (CALL PACK - Chain_End)
				;	ENDIF
				;	ret
				;*****************************************************************************
				Procedure Bad_Cluster				;				;AN000;
			     1							; 
			     1	Public	Bad_Cluster				;				;AN000; 
 074A                        1	Bad_Cluster    proc				;				;AN000; 
					savereg <si,di,dx,si,di,bx>		;Preserve registers		;AN000;
			     1	IRP reg,<si,di,dx,si,di,bx> 
			     1		?stackdepth = ?stackdepth + 1 
			     1		PUSH    reg 
			     1	ENDM 
 =-0004                      2		?stackdepth = ?stackdepth + 1 
 074A  56                    2		PUSH    si 
 =-0003                      2		?stackdepth = ?stackdepth + 1 
 074B  57                    2		PUSH    di 
 =-0002                      2		?stackdepth = ?stackdepth + 1 
 074C  52                    2		PUSH    dx 
 =-0001                      2		?stackdepth = ?stackdepth + 1 
 074D  56                    2		PUSH    si 
 = 0000                      2		?stackdepth = ?stackdepth + 1 
 074E  57                    2		PUSH    di 
 = 0001                      2		?stackdepth = ?stackdepth + 1 
 074F  53                    2		PUSH    bx 
 0750  8B DE				mov	bx,si				; for the call			;AN000;
 0752  E8 061C R			call	Get_ThisElErr			;Setup message			;AC000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-25
Routines for manipulating dir entries                       

					restorereg <bx,di,si>
			     1	IRP reg,<bx,di,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 = 0000                      2		?stackdepth = ?stackdepth - 1 
 0755  5B                    2		POP     bx 
 =-0001                      2		?stackdepth = ?stackdepth - 1 
 0756  5F                    2		POP     di 
 =-0002                      2		?stackdepth = ?stackdepth - 1 
 0757  5E                    2		POP     si 
 0758  3B 3E 0207 R			cmp	di,First_Cluster	;does 1st clus point to itself? 	;Need to change the 
				directory	;AC000;
				;	$IF	E,OR			;yes					; pointer if the dir
				 cluster or ;AC000;
 075C  74 0C				JE $$LL62
 075E  57				push	di			;if not, try this next test		; XA is bad, or the 
				last good	;AN000;
 075F  8B 3E 0209 R			mov	di,Previous_Cluster	;get prev cluster			; entry was the dir 
				cluster or	;AN000;
 0763  3B 3E 0207 R			cmp	di,First_Cluster	;does prev clus = 1st clus?		; XA cluster.	
						;AN000;
 0767  5F				pop	di			;means the 1st cluster is bad
				;	$IF	E			;yes	       ;			       ;AN000;
 0768  75 27				JNE $$IF62
 076A				$$LL62:
 076A  83 7C 22 00			    cmp word ptr [si].dirclus,0 ;is cluster num already 0?		;an025;bgb
				;	    $IF NE			;no, its bad				;an025;bgb
 076E  74 10				    JE $$IF63
 0770  BA 0000 E				mov	dx,offset DG:NulNZ	  ;1st cluster number is invalid;an025;bgb
 0773  E8 0000 E				call	EPrint			  ;Go print file and error	;an025;bgb
 0776  C7 44 22 0000				mov	word ptr [si].dirclus,0   ;set cluster number to 0	;an025;bgb
 077B  C6 06 0000 E FF				mov	zerotrunc,true	;modified the file size 		;an026;bgb
				;	    $ENDIF			;already set to 0, dont print err msg	;an025;bgb
 0780				$$IF63:
 0780  C7 44 24 0000			    mov     word ptr [si].DIRESIZ,0   ;set file size to 0	      ;Kill the file size
					      ;AC000;
 0785  C7 44 26 0000			    mov     word ptr [si].DIRESIZ+2,0				      ;Kill the file size
					    ;AC000;0;
 078A  8B DE				    mov  bx,si				 ;Get pointer to directory	 ;AN000;
 078C  E8 054B R			    call    FixEnt2			 ;Write out updated directory	 ;AC000;
				;	$ELSE					;Not first cluster in chain	;AN000;
 078F  EB 11				JMP SHORT $$EN62
 0791				$$IF62:
 0791  BA 0000 E			      mov     dx,offset dg:Badchain	;Tell user file and error	;AN000;
 0794  E8 0000 E			      call    EPrint							;AN000;
 0797  8B 16 0000 E			   mov	   dx,Chain_End 		;Terminate chain at bad spot	;AC000;
 079B  8B 36 0209 R			   mov	   si,Previous_Cluster		;Change the last good cluster	;AC000;
 079F  E8 0000 E			   call    Pack 			;Go fix it			;AC000;
				;	$ENDIF					;				;AN000;
 07A2				$$EN62:
					restorereg <dx,di,si>
			     1	IRP reg,<dx,di,si> 
			     1		?stackdepth = ?stackdepth - 1 
			     1		POP     reg 
			     1	ENDM 
 =-0003                      2		?stackdepth = ?stackdepth - 1 
 07A2  5A                    2		POP     dx 
 =-0004                      2		?stackdepth = ?stackdepth - 1 
 07A3  5F                    2		POP     di 
 =-0005                      2		?stackdepth = ?stackdepth - 1 
 07A4  5E                    2		POP     si 
 07A5  C3				ret					;
 07A6				Bad_Cluster endp				;				;AN000;
				
				;*****************************************************************************
				;Routine name: Check_Chain_Sizes
				;*****************************************************************************
				;
				;description: See if length of chain as listed in dir or XA matches up
				;	      with the number of clusters allocated. Don't check if crosslink
				;	      error, or chasing directory chain.
				;
				;Called Procedures: FixEnt
				;		    Bad_Chain_Size
				;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-26
Routines for manipulating dir entries                       

				;
				;Change History: Created	5/10/87 	MT
				;
				;Input: CSIZE = sectors per cluster
				;	SSIZE = bytes per sector
				;	Cluster_Count = number of clusters in chain
				;	File_Size_Low/High = bytes dir or XA says is in chain
				;	SI = Pointer to Dir entry
				;
				;Output: Cluster_Count = Size of chain in clusters
				;	 SI = Pointer to dir entry
				;	 BX = SRFCBPT
				;
				;Psuedocode
				;----------
				;
				;	IF !Directory attribute,AND
				;	IF !Crosslinked (ISCROSS = FALSE),AND
				;	IF !Second pass (SecondPass = FALSE)
				;	   Compute bytes/cluster
				;	   Compute bytes/chain
				;	   IF size > File_Size_High/Low
				;	      Fix the size (CALL Bad_Chain_Size)
				;	      ELSE
				;		 Subtract file size from chain length
				;		 IF Difference in Chain_Length and Size >= bytes/cluster
				;		    Fix the size (CALL Bad_Chain_Size)
				;		 ENDIF
				;	      ENDIF
				;	   ENDIF
				;	ENDIF
				;	CX = Cluster_Count  (kept for compatibility with old code)
				;	BX = SRFCPT (kept for compatibility with old code)
				;	ret
				;*****************************************************************************
				Procedure Check_Chain_Sizes			;AN000;
			     1							; 
			     1	Public	Check_Chain_Sizes				;				;AN000; 
 07A6                        1	Check_Chain_Sizes    proc				;				;AN000; 
 07A6  56				push	si				;				;AN000;
 07A7  50				push	ax				;				;AN000;
 07A8  F6 44 13 10			test	[si].DirAtt,Dir_Attribute	;Is this a directory?		;AC000;
				;	$IF	Z,AND				;No				;AC000;
 07AC  75 5F				JNZ $$IF67
 07AE  80 3E 0000 E 00			cmp	IsCross,False			; and,is it crosslinked?	;AC000;
				;	$IF	E,AND				;No				;AC000;
 07B3  75 58				JNE $$IF67
 07B5  80 3E 0000 E 00			cmp	SecondPass,False		;and, is this the first pass?	;AC000;
				;	$IF	E				;Yes,				;AC000;
 07BA  75 51				JNE $$IF67
 07BC  33 C0				   xor	   ax,ax			;AX =0				;AC000;
 07BE  A1 0000 E			   mov	   ax,SSize			;Get (bytes/sector) *		;AC000;
 07C1  8A 0E 0000 E			   mov	   cl,CSize			; (Sectors/cluster)		;AC000;
 07C5  F7 E1				   mul	   cx				;AX=Bytes/cluster  (< 64k)	;AC000;
 07C7  A3 0201 R			   mov	   BClus,ax			;Save Bytes/cluster		 ;AN000;
 07CA  8B 0E 0205 R			   mov	   cx,Cluster_Count		;Number of clusters in chain	;AC000;
 07CE  F7 E1				   mul	   cx				;DX:AX = bytes/chain		;AC000;
 07D0  A3 0210 R			   mov	   Chain_Size_Low,ax		;Save allocation size in bytes	;AN000;
 07D3  89 16 0212 R			   mov	   Chain_Size_High,dx		;				;AN000;
 07D7  3B 16 020C R			   cmp	   dx,File_Size_High		;See if file size if greater	;AN000;
				;	   $IF	   E,AND			; than chain length - if	;AN000;
 07DB  75 0B				   JNE $$IF68
 07DD  3B 06 020E R			   cmp	   ax,File_Size_Low		; so, than there is an		;AC000;
				;	   $IF	   B				; allocation error.		;AC000;
 07E1  73 05				   JNB $$IF68
 07E3  E8 0824 R			      call    Bad_Chain_Size		;Fix it!			;AC013;bgb
				;	   $ELSE				;Chain larger than file 	;AC000;
 07E6  EB 25				   JMP SHORT $$EN68
 07E8				$$IF68:
 07E8  3B 16 020C R			      cmp     dx,File_Size_High 	;See if high part lower 	;AN000;
				;	      $IF     B 			;Chain < filsize if so		;AN000;
 07EC  73 05				      JNB $$IF70
 07EE  E8 0824 R				 call	 Bad_Chain_Size 	;Fix it!			;AC013;bgb
				;	      $ELSE				;Chain > filesize		;AN000;
 07F1  EB 1A				      JMP SHORT $$EN70
 07F3				$$IF70:
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-27
Routines for manipulating dir entries                       

 07F3  8B 0E 020E R				 mov	 cx,File_Size_Low	;See if within 1 cluster	;AN000;
 07F7  8B 1E 020C R				 mov	 bx,File_Size_High	;				;AN000;
 07FB  2B C1					 sub	 ax,cx			;Subtract file size from	;AC000;
 07FD  1B D3					 sbb	 dx,bx			; the chain size		;AN000;
 07FF  83 FA 00					 cmp	 dx,0			;See if within 1 cluster	;AN000;
				;		 $IF	 NE,OR			;Not if high size set,or	;AN000;
 0802  75 06					 JNE $$LL72
 0804  3B 06 0201 R				 cmp	 ax,BClus		;Within (bytes/cluster -1)?	;AC000;
				;		 $IF	 AE			;Nope, allocation error 	;AC000;
 0808  72 03					 JNAE $$IF72
 080A				$$LL72:
 080A  E8 0824 R				    call    Bad_Chain_Size	;Go fix the chain		;AN013;bgb
				;		 $ENDIF 			;				;AN000;
 080D				$$IF72:
				;	      $ENDIF				;				;AN000;
 080D				$$EN70:
				;	   $ENDIF				;				;AN000;
 080D				$$EN68:
				;	$ENDIF					;				;AN000;
 080D				$$IF67:
 080D  8B 1E 0000 E			mov	bx,SrFCBPt			; Needed for compat		;AC000;
 0811  58				pop	ax				;Restore used regs		;AN000;
 0812  5E				pop	si				;SI = Dir pointer		;AN000;
 0813  C3				ret					;				;     ;
 0814				check_chain_sizes endp				;				;AN000;
				
				
				
				Procedure print_filename			;AN000;
			     1							; 
			     1	Public	print_filename				;				;AN000; 
 0814                        1	print_filename    proc				;				;AN000; 
 0814  53				    PUSH    BX
 0815  8B DE				    MOV     BX,SI
 0817  E8 062A R			    CALL    get_THISEL
 081A  BA 0000 E			    mov     dx,offset dg:noisy_arg
 081D  E8 0000 E			    call    printf_crlf
 0820  8B F3				    MOV     SI,BX
 0822  5B				    POP     BX
					    return
			     1	.xcref 
 0823                        1	??0000: 
 0823  C3                    1		RET 
 = 0823                      1	ret_l = ??0000 
			     1	.cref 
 0824				print_filename	  endp				;				;AN000;
				
				;these procedures were for the extended attribute support, which was removed	;an006;bgb
				
				;*****************************************************************************
				;Routine name: Bad_Chain_Size
				;*****************************************************************************
				;
				;Description: adjust
				;	      filesize to allocation length.
				;
				;Called Procedures: Truncate_XA
				;		    FixEnt2
				;		    Get_ThisElErr
				;		    Eprint
				;
				;Change History: Created	5/11/87 	MT
				;
				;Input: XA_Pass = TRUE/FALSE
				;	Chain_Size_High/Low
				;	SI = Dir pointer
				;	Chain_Size_Low/High = length in bytes of allocation chain
				;
				;Output: None
				;
				;Psuedocode
				;----------
				;
				;	IF XA_Pass
				;	   Delete XA chain (CALL Truncate_XA)
				;	ELSE
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-28
Routines for manipulating dir entries                       

				;	   Set directory entry to length = Total allocation size
				;	   Go write out (CALL FixEnt2)
				;	   Setup message (CALL Get_Thiselerr)
				;	   Display it (Call Eprint)
				;	ENDIF
				;	ret
				;*****************************************************************************
				Procedure Bad_Chain_Size			;				;AN000;
			     1							; 
			     1	Public	Bad_Chain_Size				;				;AN000; 
 0824                        1	Bad_Chain_Size    proc				;				;AN000; 
 0824  06				push	es
 0825  50				push	ax				;Save register			;AN000;
				
 0826  1E				push	ds		 ;make es point to dg
 0827  07				pop	es
				;;;;;; cmp     XA_Pass,True		       ;Are we handling XA's?          ;AN013;bgb
				;;;;;;;;$IF	E				;Yes				;AN013;bgb
				;;;;;;;;;;;call    Truncate_XA			;Go truncate the chain		;AN013;bgb
				;;;;;;;;$ELSE					;Normal file chain		;AN013;bgb
 0828  A1 0210 R			   mov	   ax,Chain_Size_Low		;Get length of allocation	;AN000;
 082B  8B 16 0212 R			   mov	   dx,Chain_Size_High		; chain for filesize		;AN000;
 082F  89 44 24				   mov	   word ptr [si].DirESiz,ax	;Put it in the directory	;AC000;
 0832  89 54 26				   mov	   word ptr [si+2].DirESiz,dx	;   "  "       "  "		;AC000;
 0835  53				   push    bx				;				;AN000;
 0836  56				   push    si				;				;AN000;
 0837  8B DE				   mov	   bx,si			;Get pointer to directory	;AN000;
 0839  E8 054B R			   call    FixENT2			;Write dir to disk		;AC000;
 083C  E8 061C R			   call    Get_ThisElErr		;Setup message			;AC000;
 083F  BA 0000 E			   mov	   dx,offset DG:BadClus 	;Specify error message		;AC000;
 0842  E8 0000 E			   call    EPrint			;Go print file and error	;AC000;
 0845  5E				   pop	   si				;				;AN000;
 0846  5B				   pop	   bx				;				;AN000;
				;;;;;;;;$ENDIF					;				;AN013;bgb
 0847  58				pop	ax				;Restore registers		;AN000;
 0848  07				pop	es
 0849  C3				ret					;
				
 084A				Bad_Chain_Size endp				;				;AN000;
				
				;*****************************************************************************
				;Routine name: Truncate_XA
				;*****************************************************************************
				;
				;Description: If /F entered, than truncate XA chain and remove pointer.
				;	      If XA allocation error, than deallocate all of XA chain.
				;
				;Called Procedures: Get_ThisElErr
				;		    Eprint
				;		    MarkMap
				;		    Unpack
				;		    Pack
				;
				;Change History: Created	5/11/87 	MT
				;
				;Input: First_Cluster
				;	   Chain_End
				;	   SI = directory entry pointer
				;
				;
				;Output: FATMap entries for XA chain zero'd out
				;
				;Psuedocode
				;----------
				;
				;	Set XA pointer in dir to 0
				;	Write it out (CALL FixEnt2)
				;	Setup message (Call get_ThisElErr
				;	Display message (Call Eprint)
				;	Get first cluster number (First_Cluster)
				;	DO
				;	   Get first cluster entry (Call Unpack)
				;	   Go mark cluster in FATMap with "Open" (CALL MarkMAP)
				;	   Set cluster entry with 0000 (Call Pack)
				;	ENDDO cluster value >= EOFVal
				;	ret
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-29
Routines for manipulating dir entries                       

				;*****************************************************************************
				
				;rocedure Truncate_XA				;				;AN000;
				;
				;	push	si			     ;Save dir pointer			;AN000;
				;	push	bx			     ;					;AN000;
				;	push	si			     ;					;AN000;
				;	mov	bx,si			     ;Get directory pointer		;AN000;
				;	call	Get_ThisEl		     ;Setup message			;AN000;
				;	mov	dx,offset DG:Alloc_XA_Msg    ;Specify error message		;AC000;
				;	call	EPrint			     ;Go print file and error		;AC000;
				;	pop	si			     ;					;AN000;
				;	mov	word ptr [si].DIR_XA,No_Ext_Attrib ;Erase XA pointer		;AN000;
				;	call	FixENT2 		     ;Write dir entry out		;AN000;
				;	pop	bx			     ;					;AN000;
				;	mov	si,First_Cluster	     ;Get first cluster 		;AN000;
				;	$DO				     ;Chase and erase XA chain		;AN000;
				;	   call    Unpack		     ;Get next cluster			;AN000;
				;	   push    di			     ;Save it- DI next, SI current	;AN000;
				;	   mov	   al,No_Entry		     ;Free entry in map 		;AN000;
				;	   call    MarkMap		     ; "  "    "  "			;AN000;
				;	   mov	   dx,No_Entry		     ;Free up cluster in Fat		;AN000;
				;	   call    Pack 		     ; "  "    "  "			;AN000;
				;	   pop	   si			     ;Get back next cluster		;AN000;
				;	   cmp	   si,[EOFVal]		     ;Reached end of chain?		;AN000;
				;	$ENDDO	   AE			     ;Keep looping if not		;AN000;
				;	pop	si			     ;Restore Dir pointer		;AN000;
				;	ret				     ;					;AN000;
				;
				;runcate_XA endp			     ;					;AN000;
				
				;*****************************************************************************
				;Routine name: Check_Extended_Attributes
				;*****************************************************************************
				;
				;Description: Get the first cluster of XA chain, if it is zero, than erase
				;	      extended attribute pointer (/F only). Otherwise, map the
				;	      cluster in the FATMAP. If crosslink found on first cluster,
				;	      no more processing is done. If value other than EOF mark
				;	      found in first cluster
				;
				;Called Procedures: Load_XA
				;		    Fix_Bad_XA
				;		    Check_XA_Structure
				;		    MarkFAT
				;
				;Change History: Created	5/10/87 	MT
				;
				;Input: SI = pointer to directory entry
				;
				;Output: FATMap marked with XA_Cluster for each XA cluster found
				;	    XA_PASS = NO
				;
				;Psuedocode
				;----------
				;
				;	IF (XA exists for file)
				;	   XA_PASS = YES
				;	   DI = XA entry cluster in dir
				;	   Load in first sector of XA (CALL Load_XA)
				;	   IF !error
				;	      File_Size_Low/High = length of XA's in bytes
				;	      AL = chain head mark (XA_Chain)
				;	      Trace chain and map it (CALL MarkFAT)
				;	   ELSE
				;	      call Bad_Cluster
				;	   ENDIF
				;	ENDIF
				;	ret
				;*****************************************************************************
				
				;rocedure Check_Extended_Attributes		;				;AN000;
				;
				;	push	ax				;Save register			;AN000;
				;	push	cx				;				;AN000;
				;	push	dx				;				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-30
Routines for manipulating dir entries                       

				;	push	di				;				;AN000;
				;	mov	ax,[si].DIR_XA			;Get first cluster of XA's      ;AN000;
				;	cmp	ax,No_Ext_Attrib		;Are there extended attrib's    ;AN000;
				;	$IF	NE				;Quit if no			;AN000;
				;	   mov	   di,ax			;Pointer to current cluster	;AN000;
				;	   mov	   First_Cluster,di		;Remember first cluster 	;AN000;
				;	   mov	   XA_Pass,Yes			;Indicate processing XA's       ;AN000;
				;	   call    Load_XA			;Go load sector 		;AN000;
				;	   $IF	   NC				;CY means load error		;AN000;
				;	      mov     ax,XA_Buffer.XAL_TSIZE	;Get bytes in XA chain		;AN000;
				;	      mov     File_Size_High,0		;Save it			;AN000;
				;	      mov     File_Size_Low,ax		;				;AN000;
				;	      mov     al,XA_Chain		;Set up mark for map		;AN000;
				;	      call    MarkFAT			;Go map out chain		;AN000;
				;	   $ELSE				;Error on read of XA		;AN000;
				;	      call    Bad_Cluster		;Delete extended attribs	;AN000;
				;;	   $ENDIF				;				;AN000;
				;	$ENDIF
				;	pop	di				;Restore registers
				;	pop	dx				;				;AN000;
				;	pop	cx				;				;AN000;
				;	pop	ax				;				;AN000;
				;	ret					;				;AN000;
				;
				;heck_Extended_Attributes endp			;				;AN000;
				
				
				;*****************************************************************************
				;Routine name: Load_XA
				;*****************************************************************************
				;
				;description: Read in the first XA cluster
				;
				;Called Procedures: Read_Disk
				;
				;
				;Change History: Created	5/13/87 	MT
				;
				;Input: AX has start cluster of XA chain
				;	SI = dir pointer
				;Output: CY if read failed
				;
				;Psuedocode
				;----------
				;
				;	Get start of data area
				;	Get start cluster
				;	Compute XA location from starting cluster
				;	Read it in (CALL Read_Disk)
				;	IF error
				;	   stc
				;	ENDIF  (NC if didn't take IF)
				;	ret
				;*****************************************************************************
				
				;rocedure Load_XA				;				;AN000;
				;
				;	push	si				;Save used registers		;AN000;
				;	push	cx				;				;AN000;
				;	push	dx				;				;AN000;
				;	push	bx				;				;AN000;
				;	sub	ax,2				;Make cluster 0 based		;AN000;
				;	mov	cl,CSize			;Get sectors/cluster		;AN000;
				;	mul	cl				;Offset sec in data area	;AN000;
				;	add	ax,Data_Start_Low		;Get actual sector in partition ;AN000;
				;	adc	dx,Data_Start_High		;   "  "    "  "		;AN000;
				;	mov	Read_Write_Relative.Start_Sector_High,dx ;Setup high sector addr;AN000;
				;	mov	bx,offset dg:XA_Buffer		;Read into buffer		;AN000;
				;	mov	cx,1				;Get just first sector		;AN000;
				;	mov	dx,ax				;Get logical sector low 	;AN000;
				;	mov	al,AllDrv			;Get drive number 1=A,2=B	;AN000;
				;	dec	al				;Make 0 based drive 0=A 	;AN000;
				;	call	Read_Disk			;Read in sector 		;AN000;
				;	$IF	C				;Problem?			;AN000;
				;	   stc					;				;AN000;
				;	$ENDIF					;				;AN000;
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Page     1-31
Routines for manipulating dir entries                       

				;	pop	bx				;Restore registers		;AN000;
				;	pop	dx				;				;AN000;
				;	pop	cx				;				;AN000;
				;	pop	si				;				;AN000;
				;	ret					;				;AN000;
				;
				;oad_XA endp					;				;AN000;
				
				;****************************************************************************
				;WARNING!!! this must be the last label in the code section
				;	    any changes to chkdsk.arf must take into account this area.
				;	    it is used for reading things from disk into memory, such as dir
				Public	CHKPRMT_End
 084A				Chkprmt_End label byte
				;****************************************************************************
					pathlabl chkproc
 084A				CODE	ENDS
					END

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               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:14
CHKPROC - PART1 Procedures called from chkdsk               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:14
CHKPROC - PART1 Procedures called from chkdsk               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:14
CHKPROC - PART1 Procedures called from chkdsk               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
SRCHFCB  . . . . . . . . . . . .  	002C	0001
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
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-5


  FCB_DRIVE  . . . . . . . . . .  	0000
  FCB_NAME . . . . . . . . . . .  	0001
  FCB_EXT  . . . . . . . . . . .  	0009
  FCB_EXTENT . . . . . . . . . .  	000C
  FCB_RECSIZ . . . . . . . . . .  	000E
  FCB_FILSIZ . . . . . . . . . .  	0010
  FCB_DRVBP  . . . . . . . . . .  	0012
  FCB_FDATE  . . . . . . . . . .  	0014
  FCB_FTIME  . . . . . . . . . .  	0016
  FCB_RESERVED . . . . . . . . .  	0018
  FCB_NR . . . . . . . . . . . .  	0020
  FCB_RR . . . . . . . . . . . .  	0021
USER_ENVIRON . . . . . . . . . .  	0018	000C
  USER_AX  . . . . . . . . . . .  	0000
  USER_BX  . . . . . . . . . . .  	0002
  USER_CX  . . . . . . . . . . .  	0004
  USER_DX  . . . . . . . . . . .  	0006
  USER_SI  . . . . . . . . . . .  	0008
  USER_DI  . . . . . . . . . . .  	000A
  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 . . . . . . . . . . . . .  	0214	PARA	PUBLIC	'DATA'
  CONST  . . . . . . . . . . . .  	0000	PARA	PUBLIC	'DATA'
  CODE . . . . . . . . . . . . .  	084A	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	
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	
ADJUST . . . . . . . . . . . . .  	L NEAR	051D	CODE
ALLDRV . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
ALLFILE  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
ALLOC  . . . . . . . . . . . . .  	NUMBER	0048	
ALLOCOPER  . . . . . . . . . . .  	NUMBER	0058	
Alloc_XA_Msg . . . . . . . . . .  	V BYTE	0000	DATA	External
ALLOWED_FAIL . . . . . . . . . .  	NUMBER	0008	
ALLOWED_IGNORE . . . . . . . . .  	NUMBER	0020	
ALLOWED_RETRY  . . . . . . . . .  	NUMBER	0010	
ALTVECT  . . . . . . . . . . . .  	ALIAS	 FALSE		
ALT_EXPECTED_VERSION . . . . . .  	NUMBER	1A05	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-6


ALT_MAJOR_VERSION  . . . . . . .  	NUMBER	0005	
ALT_MINOR_VERSION  . . . . . . .  	NUMBER	001A	
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	
ASKCONV  . . . . . . . . . . . .  	L NEAR	03F5	CODE	Global
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	

BADCHAIN . . . . . . . . . . . .  	V BYTE	0000	DATA	External
BADCLUS  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
BADDDSIZ . . . . . . . . . . . .  	L NEAR	028D	CODE	Global
BADDPBDIR  . . . . . . . . . . .  	V BYTE	0000	DATA	External
BADDSIZ  . . . . . . . . . . . .  	L NEAR	020D	CODE	Global
BadFSiz  . . . . . . . . . . . .  	L NEAR	04FA	CODE	Global
BadSubDir  . . . . . . . . . . .  	V BYTE	0000	DATA	External
BADTARG2 . . . . . . . . . . . .  	V BYTE	0000	DATA	External
BADTARG_PTR  . . . . . . . . . .  	V BYTE	0000	DATA	External
BADVAL . . . . . . . . . . . . .  	V WORD	0000	DATA	External
Bad_Chain_Size . . . . . . . . .  	N PROC	0824	CODE	Global	Length = 0026
Bad_Cluster  . . . . . . . . . .  	N PROC	074A	CODE	Global	Length = 005C
BAD_EXIT . . . . . . . . . . . .  	NUMBER	00FF	
BClus  . . . . . . . . . . . . .  	L WORD	0201	DATA	Global
BIGFAT . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
BIG_FAT_THRESHOLD  . . . . . . .  	NUMBER	0FF6	
BLANK  . . . . . . . . . . . . .  	NUMBER	0020	
BogusDir . . . . . . . . . . . .  	L NEAR	03E7	CODE	Global
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	

CANTREC  . . . . . . . . . . . .  	L NEAR	002F	CODE	Global
CANTREC2 . . . . . . . . . . . .  	L NEAR	00E5	CODE	Global
CANTTARG . . . . . . . . . . . .  	L NEAR	03CF	CODE	Global
CARGS  . . . . . . . . . . . . .  	NUMBER	0000	
CDDDMES  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
CHAINDONE  . . . . . . . . . . .  	L NEAR	04C4	CODE	Global
Chain_End  . . . . . . . . . . .  	V WORD	0000	DATA	External
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-7


Chain_Size_High  . . . . . . . .  	L WORD	0212	DATA	Global
Chain_Size_Low . . . . . . . . .  	L WORD	0210	DATA	Global
CHAR_OPER  . . . . . . . . . . .  	NUMBER	0037	
CHASELOOP  . . . . . . . . . . .  	L NEAR	0467	CODE
CHDIR  . . . . . . . . . . . . .  	NUMBER	003B	
CHECKERR . . . . . . . . . . . .  	L NEAR	0604	CODE	Global
CHECKNOFMES  . . . . . . . . . .  	L NEAR	05E9	CODE	Global
Check_Chain_Sizes  . . . . . . .  	N PROC	07A6	CODE	Global	Length = 006E
CHECK_SPLICE . . . . . . . . . .  	L NEAR	0675	CODE	Global
CHECK_XA_CROSS . . . . . . . . .  	L NEAR	0467	CODE
CHKDOTDOT  . . . . . . . . . . .  	L NEAR	0229	CODE	Global
CHKPRMT_End  . . . . . . . . . .  	L BYTE	084A	CODE	Global
ChkSiz . . . . . . . . . . . . .  	L NEAR	0539	CODE	Global
CHK_ERROR  . . . . . . . . . . .  	NUMBER	0001	
CHLP . . . . . . . . . . . . . .  	L NEAR	0453	CODE	Global
CHMOD  . . . . . . . . . . . . .  	NUMBER	0043	
CLOSE  . . . . . . . . . . . . .  	NUMBER	003E	
CLUSISOK . . . . . . . . . . . .  	L NEAR	0592	CODE	Global
Cluster_Count  . . . . . . . . .  	L WORD	0205	DATA	Global
COMMIT . . . . . . . . . . . . .  	NUMBER	0068	
CONVDIR  . . . . . . . . . . . .  	L NEAR	0381	CODE	Global
CREAT  . . . . . . . . . . . . .  	NUMBER	003C	
CREATENEWFILE  . . . . . . . . .  	NUMBER	005B	
CREATETEMPFILE . . . . . . . . .  	NUMBER	005A	
CREATE_PROCESS_DATA_BLOCK  . . .  	NUMBER	0026	
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 . . . . . . . . . . . .  	L NEAR	0000	CODE	External
CROSSLINK  . . . . . . . . . . .  	L NEAR	04A6	CODE	Global
CROSSLOOK  . . . . . . . . . . .  	L NEAR	0445	CODE	Global
CROSS_ARG  . . . . . . . . . . .  	V WORD	0000	DATA	External
cross_clus . . . . . . . . . . .  	L WORD	0203	DATA	Global
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	

Data_Start_High  . . . . . . . .  	V WORD	0000	DATA	External
Data_Start_Low . . . . . . . . .  	V WORD	0000	DATA	External
DATTOK . . . . . . . . . . . . .  	L NEAR	01E3	CODE	Global
DAY_MASK . . . . . . . . . . . .  	NUMBER	001F	
DBCS . . . . . . . . . . . . . .  	NUMBER	0000	
DDATTOK  . . . . . . . . . . . .  	L NEAR	0260	CODE	Global
DDLINKOK . . . . . . . . . . . .  	L NEAR	027C	CODE	Global
DDOTENT  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DDSIZOK  . . . . . . . . . . . .  	L FAR 	02A3	CODE	Global
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	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-8


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	
DIRBUF . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DIRCHAR  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DIRCNT . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
DIRDONE  . . . . . . . . . . . .  	L NEAR	02D2	CODE	Global
DIREC_ARG  . . . . . . . . . . .  	V WORD	0000	DATA	External
DIRPROC  . . . . . . . . . . . .  	L NEAR	0129	CODE	Global
dirsec . . . . . . . . . . . . .  	V WORD	0000	DATA	External
DIRSIZ . . . . . . . . . . . . .  	V WORD	0000	DATA	External
DIRSTRLEN  . . . . . . . . . . .  	NUMBER	0043	
DIRTYFAT . . . . . . . . . . . .  	V BYTE	0000	DATA	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	
Display_Interface  . . . . . . .  	L NEAR	0000		External
DLINKOK  . . . . . . . . . . . .  	L NEAR	01FF	CODE	Global
DoCRLF . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
DODDH  . . . . . . . . . . . . .  	L NEAR	02CF	CODE	Global
DOEXTMES1  . . . . . . . . . . .  	L NEAR	0015	CODE	Global
DOEXTMES2  . . . . . . . . . . .  	L NEAR	008C	CODE	Global
DOEXTMES3  . . . . . . . . . . .  	L NEAR	0101	CODE	Global
DOFIX  . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DOINT26  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
DOROOTDIR  . . . . . . . . . . .  	L NEAR	05C7	CODE	Global
DOTCOMBMES . . . . . . . . . . .  	L NEAR	0000	CODE	External
DOTDOTHARDWAY  . . . . . . . . .  	N PROC	0000	CODE	Global	Length = 0008
DOTDOTOK . . . . . . . . . . . .  	L NEAR	0232	CODE	Global
DOTENT . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DOTGOON  . . . . . . . . . . . .  	L NEAR	0076	CODE	Global
DOTMES . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
DOTOK  . . . . . . . . . . . . .  	L NEAR	01C7	CODE	Global
DOTSBAD  . . . . . . . . . . . .  	L NEAR	010A	CODE	Global
dotsbad2 . . . . . . . . . . . .  	L NEAR	011C	CODE	Global
DOTSNOGOOD . . . . . . . . . . .  	V BYTE	0000	DATA	External
DO_INCLUDE . . . . . . . . . . .  	NUMBER	0001	
DPBSIZ . . . . . . . . . . . . .  	NUMBER	0021	
DPROC1 . . . . . . . . . . . . .  	L NEAR	0358	CODE	Global
DPROC2 . . . . . . . . . . . . .  	L NEAR	0392	CODE	Global
DRIVE_NOT_READY  . . . . . . . .  	NUMBER	0002	
DRVCHAR  . . . . . . . . . . . .  	NUMBER	003A	
DSIZE  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
DSIZOK . . . . . . . . . . . . .  	L NEAR	0223	CODE	Global
DSKSIZ . . . . . . . . . . . . .  	NUMBER	000D	
DUP_PDB  . . . . . . . . . . . .  	NUMBER	0055	

ECS_CALL . . . . . . . . . . . .  	NUMBER	0063	
EMS_MAP_BUFF_SIZE  . . . . . . .  	NUMBER	000C	
ENTRYPOINT . . . . . . . . . . .  	NUMBER	00C0	
ENTSIZ . . . . . . . . . . . . .  	NUMBER	0028	
EOFVAL . . . . . . . . . . . . .  	V WORD	0000	DATA	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	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-9


ERRCLASS_INTRN . . . . . . . . .  	NUMBER	0004	
ERRCLASS_LOCKED  . . . . . . . .  	NUMBER	000A	
ERRCLASS_MEDIA . . . . . . . . .  	NUMBER	000B	
ERRCLASS_NOTFND  . . . . . . . .  	NUMBER	0008	
ERRCLASS_OUTRES  . . . . . . . .  	NUMBER	0001	
ERRCLASS_SYSFAIL . . . . . . . .  	NUMBER	0006	
ERRCLASS_TEMPSIT . . . . . . . .  	NUMBER	0002	
ERRCLASS_UNK . . . . . . . . . .  	NUMBER	000D	
ERRLOC_DISK  . . . . . . . . . .  	NUMBER	0002	
ERRLOC_MEM . . . . . . . . . . .  	NUMBER	0005	
ERRLOC_NET . . . . . . . . . . .  	NUMBER	0003	
ERRLOC_SERDEV  . . . . . . . . .  	NUMBER	0004	
ERRLOC_UNK . . . . . . . . . . .  	NUMBER	0001	
ERRLOOP  . . . . . . . . . . . .  	L NEAR	0669	CODE	Global
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	
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	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-10


ERROR_WRONG_DISK . . . . . . . .  	NUMBER	0022	
ERRSUB . . . . . . . . . . . . .  	V WORD	0000	DATA	External
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	
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_1  . . . . . . . . . . . .  	L NEAR	0499	CODE
FATAL  . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
FATMAP . . . . . . . . . . . . .  	V WORD	0000	DATA	External
fattbl . . . . . . . . . . . . .  	V BYTE	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	
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	
FIGREC . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
FILCNT . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
FILDIRENT  . . . . . . . . . . .  	NUMBER	0010	
FILE_ARG . . . . . . . . . . . .  	V WORD	0000	DATA	External
FILE_ARG1  . . . . . . . . . . .  	V WORD	0000	DATA	External
FILE_ARG2  . . . . . . . . . . .  	V WORD	0000	DATA	External
File_Size_High . . . . . . . . .  	L WORD	020C	DATA	Global
File_Size_Low  . . . . . . . . .  	L WORD	020E	DATA	Global
FILE_TIMES . . . . . . . . . . .  	NUMBER	0057	
FILPERPROC . . . . . . . . . . .  	NUMBER	0014	
FILSIZ . . . . . . . . . . . . .  	V WORD	0000	DATA	External
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-11


FIND_FIRST . . . . . . . . . . .  	NUMBER	004E	
FIND_NEXT  . . . . . . . . . . .  	NUMBER	004F	
First_Cluster  . . . . . . . . .  	L WORD	0207	DATA	Global
FIXDOT . . . . . . . . . . . . .  	L NEAR	0043	CODE	Global
FIXENT . . . . . . . . . . . . .  	L NEAR	055B	CODE	Global
FIXENT2  . . . . . . . . . . . .  	L NEAR	054B	CODE	Global
FIXMES_ARG . . . . . . . . . . .  	V WORD	0000	DATA	External
FIXMFLG  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
FIXRET . . . . . . . . . . . . .  	L NEAR	0582	CODE
FOUND_NO . . . . . . . . . . . .  	NUMBER	0000	
FOUND_YES  . . . . . . . . . . .  	NUMBER	0001	
FPROC1 . . . . . . . . . . . . .  	L NEAR	02ED	CODE	Global
FSPCHK . . . . . . . . . . . . .  	NUMBER	0004	
fTrunc . . . . . . . . . . . . .  	V BYTE	0000	DATA	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	0583	CODE	Global
GETEXTCNTRY  . . . . . . . . . .  	NUMBER	0065	
GETEXTENDEDERROR . . . . . . . .  	NUMBER	0059	
GETFILSIZ  . . . . . . . . . . .  	L NEAR	0000	CODE	External
GETSETCDPG . . . . . . . . . . .  	NUMBER	0066	
GETSETMEDIAID  . . . . . . . . .  	NUMBER	0069	
get_currdir  . . . . . . . . . .  	L NEAR	0637	CODE	Global
get_currdirERR . . . . . . . . .  	L NEAR	060D	CODE	Global
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_END  . . . . . . . . . . . .  	L NEAR	0652	CODE	Global
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_THISEL . . . . . . . . . . .  	L NEAR	062A	CODE	Global
get_THISEL2  . . . . . . . . . .  	L NEAR	062F	CODE	Global
get_thiselERR  . . . . . . . . .  	L NEAR	061C	CODE	Global
GET_TIME . . . . . . . . . . . .  	NUMBER	002C	
GET_VERIFY_ON_WRITE  . . . . . .  	NUMBER	0054	
GET_VERSION  . . . . . . . . . .  	NUMBER	0030	
GOTCLUS  . . . . . . . . . . . .  	L NEAR	05C3	CODE	Global

HANDLE_FAIL_I24  . . . . . . . .  	NUMBER	0100	
HAVFIX . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
Head_Mark  . . . . . . . . . . .  	L BYTE	0200	DATA	Global
HEAD_MASK  . . . . . . . . . . .  	NUMBER	007F	
HECODE . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
HIDCNT . . . . . . . . . . . . .  	V DWORD	0000	DATA	External
HIDDN  . . . . . . . . . . . . .  	NUMBER	0002	
HIDENFILE  . . . . . . . . . . .  	L NEAR	0326	CODE	Global
HIDSIZ . . . . . . . . . . . . .  	V WORD	0000	DATA	External
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	
INSTALLED  . . . . . . . . . . .  	NUMBER	FFFF	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-12


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	
Inv_XA_Msg . . . . . . . . . . .  	V BYTE	0000	DATA	External
IOCTL  . . . . . . . . . . . . .  	NUMBER	0044	
IO_MODE_ID . . . . . . . . . . .  	NUMBER	0002	
ISCROSS  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
ISDIR  . . . . . . . . . . . . .  	NUMBER	0010	

JAPAN  . . . . . . . . . . . . .  	ALIAS	 FALSE		
JOINERR  . . . . . . . . . . . .  	L NEAR	018B	CODE	Global
JOINMES  . . . . . . . . . . . .  	V BYTE	0000	DATA	External

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

LBL_CHKPROC  . . . . . . . . . .  	NUMBER	0001	
LOCKOPER . . . . . . . . . . . .  	NUMBER	005C	
LPDONE . . . . . . . . . . . . .  	L NEAR	0671	CODE	Global
LSEEK  . . . . . . . . . . . . .  	NUMBER	0042	

MAJOR_VERSION  . . . . . . . . .  	NUMBER	0004	
MarkFAT  . . . . . . . . . . . .  	N PROC	06A3	CODE	Global	Length = 00A7
MARKMAP  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
MAXBUCKETINPAGE  . . . . . . . .  	NUMBER	0002	
MAXBUFFINBUCKET  . . . . . . . .  	NUMBER	000F	
MCLUS  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
MEMS . . . . . . . . . . . . . .  	NUMBER	0001	
MESD1  . . . . . . . . . . . . .  	L NEAR	0021	CODE	Global
MESD2  . . . . . . . . . . . . .  	L NEAR	0098	CODE	Global
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	
MOREDIR  . . . . . . . . . . . .  	L NEAR	02D8	CODE	Global
MRKBAD . . . . . . . . . . . . .  	L NEAR	0480	CODE
MRKOK  . . . . . . . . . . . . .  	L NEAR	04A1	CODE
MSVER  . . . . . . . . . . . . .  	NUMBER	0000	
MULTDOS  . . . . . . . . . . . .  	NUMBER	0012	
MULTIFS  . . . . . . . . . . . .  	NUMBER	0011	
MULTIPLEX  . . . . . . . . . . .  	NUMBER	002F	
MULTNET  . . . . . . . . . . . .  	NUMBER	0011	
MULTSHARE  . . . . . . . . . . .  	NUMBER	0010	

NAMBUF . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NDOTMES  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NET_CHECK  . . . . . . . . . . .  	NUMBER	1200	
NEWDIR . . . . . . . . . . . . .  	L NEAR	034C	CODE	Global
NFIX . . . . . . . . . . . . . .  	L NEAR	00DA	CODE	Global
NLSFUNC  . . . . . . . . . . . .  	NUMBER	0014	
NO . . . . . . . . . . . . . . .  	NUMBER	0000	
NOCLUSTERS . . . . . . . . . . .  	L NEAR	0516	CODE
NODDOT . . . . . . . . . . . . .  	L FAR 	007F	CODE	Global
NODOT  . . . . . . . . . . . . .  	L NEAR	0008	CODE	Global
NOISY  . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-13


NOISY_ARG  . . . . . . . . . . .  	V WORD	0000	DATA	External
NONULLDERr . . . . . . . . . . .  	L NEAR	01AB	CODE	Global
NOPRINT  . . . . . . . . . . . .  	L NEAR	0160	CODE	Global
NOPRINT2 . . . . . . . . . . . .  	L NEAR	02F7	CODE	Global
NoRecDDot  . . . . . . . . . . .  	V BYTE	0000	DATA	External
NORECDDOT1 . . . . . . . . . . .  	V BYTE	0000	DATA	External
NORECDDOT2 . . . . . . . . . . .  	V BYTE	0000	DATA	External
NORECDDOT3 . . . . . . . . . . .  	V BYTE	0000	DATA	External
NORECDOT . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NORMFILE . . . . . . . . . . . .  	L NEAR	0339	CODE	Global
NOSIZE . . . . . . . . . . . . .  	L NEAR	050F	CODE
NOTROOT  . . . . . . . . . . . .  	L NEAR	05AC	CODE	Global
NOT_EXISTS_MASK  . . . . . . . .  	NUMBER	00F0	
NOT_INCLUDE  . . . . . . . . . .  	NUMBER	0000	
NO_CODE_PAGE_CHECK . . . . . . .  	NUMBER	0100	
NO_ENTRY . . . . . . . . . . . .  	NUMBER	0000	
NO_ERROR . . . . . . . . . . . .  	NUMBER	0000	
NO_EXT_ATTRIB  . . . . . . . . .  	NUMBER	0000	
NO_FOUND . . . . . . . . . . . .  	NUMBER	0000	
NT_SPLC  . . . . . . . . . . . .  	L NEAR	06A1	CODE	Global
NUL  . . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NULDMES  . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NULLDIRERR . . . . . . . . . . .  	L FAR 	00F5	CODE	Global
NULNZ  . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
NUL_ARG  . . . . . . . . . . . .  	V BYTE	0000	DATA	External

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	
ok_pri_dir . . . . . . . . . . .  	L NEAR	0618	CODE	Global
ok_pri_el  . . . . . . . . . . .  	L NEAR	0626	CODE	Global
ON . . . . . . . . . . . . . . .  	NUMBER	0001	
OPEN . . . . . . . . . . . . . .  	NUMBER	003D	
OPEN_FOR_BOTH  . . . . . . . . .  	NUMBER	0002	
OPEN_FOR_READ  . . . . . . . . .  	NUMBER	0000	
OPEN_FOR_WRITE . . . . . . . . .  	NUMBER	0001	

PACK . . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
PARSE_FILE_DESCRIPTOR  . . . . .  	NUMBER	0029	
PARSTR . . . . . . . . . . . . .  	V BYTE	0000	DATA	External
PATHPARSE  . . . . . . . . . . .  	NUMBER	0061	
PDB_APPEND . . . . . . . . . . .  	BYTE	003D	
PDB_INTERCON . . . . . . . . . .  	BYTE	003C	
Previous_Cluster . . . . . . . .  	L WORD	0209	DATA	Global
PRINTF_CRLF  . . . . . . . . . .  	L NEAR	0000	CODE	External
PRINTTRMES . . . . . . . . . . .  	L NEAR	040E	CODE	Global
print_filename . . . . . . . . .  	N PROC	0814	CODE	Global	Length = 0010
PROMPTYN . . . . . . . . . . . .  	L NEAR	0000	CODE	External
PTRANDIR . . . . . . . . . . . .  	V BYTE	0000	DATA	External
PTRANDIR2  . . . . . . . . . . .  	V BYTE	0000	DATA	External

RAW_CON_INPUT  . . . . . . . . .  	NUMBER	0007	
RAW_CON_IO . . . . . . . . . . .  	NUMBER	0006	
RDOK2  . . . . . . . . . . . . .  	L NEAR	05DA	CODE	Global
RDONLY . . . . . . . . . . . . .  	NUMBER	0001	
RDRETRY  . . . . . . . . . . . .  	L NEAR	05D0	CODE	Global
READ . . . . . . . . . . . . . .  	NUMBER	003F	
Read_Disk  . . . . . . . . . . .  	L NEAR	0000	CODE	External
Read_Write_Relative  . . . . . .  	V BYTE	0000	DATA	External
REDIRECTOR . . . . . . . . . . .  	NUMBER	0000	
RENAME . . . . . . . . . . . . .  	NUMBER	0056	
RESERVED_BITS_MASK . . . . . . .  	NUMBER	FE00	
ret14  . . . . . . . . . . . . .  	L NEAR	0603	CODE	Global
RET20  . . . . . . . . . . . . .  	L NEAR	055A	CODE	Global
RET_L  . . . . . . . . . . . . .  	NEAR	0823	CODE
RMDIR  . . . . . . . . . . . . .  	NUMBER	003A	
ROOTDIR  . . . . . . . . . . . .  	L FAR 	02A9	CODE	Global

SECBUF . . . . . . . . . . . . .  	V WORD	0000	DATA	External
SECONDPASS . . . . . . . . . . .  	V BYTE	0000	DATA	External
SERVERCALL . . . . . . . . . . .  	NUMBER	005D	
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-14


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	
SFCBSIZ  . . . . . . . . . . . .  	NUMBER	002C	
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	
SKIPLP . . . . . . . . . . . . .  	L NEAR	05BA	CODE	Global
SRFCBPT  . . . . . . . . . . . .  	V WORD	0000	DATA	External
SSIZE  . . . . . . . . . . . . .  	V WORD	0000	DATA	External
STACKISOK  . . . . . . . . . . .  	L NEAR	0146	CODE	Global
STACKLIM . . . . . . . . . . . .  	V WORD	0000	DATA	External
STACKMES . . . . . . . . . . . .  	V BYTE	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	
SUBERRP  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
SYSTIME  . . . . . . . . . . . .  	L NEAR	0000	CODE	External
SYSTM  . . . . . . . . . . . . .  	NUMBER	0004	

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

UNLINK . . . . . . . . . . . . .  	NUMBER	0041	
UNPACK . . . . . . . . . . . . .  	L NEAR	0000	CODE	External
USEROPER . . . . . . . . . . . .  	NUMBER	005E	

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

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14
CHKPROC - PART1 Procedures called from chkdsk               Symbols-15


WAITPROCESS  . . . . . . . . . .  	NUMBER	004D	
WANTROOT . . . . . . . . . . . .  	L NEAR	059D	CODE	Global
WRITE  . . . . . . . . . . . . .  	NUMBER	0040	
WRITE_PROTECT  . . . . . . . . .  	NUMBER	0000	

XA_BUFFER  . . . . . . . . . . .  	L 	0000	DATA
XA_CHAIN . . . . . . . . . . . .  	NUMBER	0084	
XA_Pass  . . . . . . . . . . . .  	L BYTE	020B	DATA	Global
XDUP . . . . . . . . . . . . . .  	NUMBER	0045	
XDUP2  . . . . . . . . . . . . .  	NUMBER	0046	
XNAMETRANS . . . . . . . . . . .  	NUMBER	0060	

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

ZEROTRUNC  . . . . . . . . . . .  	V BYTE	0000	DATA	External

$$A_START_chkproc  . . . . . . .  	L NEAR	0000	CODE	Global
$$A_STOP_chkproc . . . . . . . .  	L NEAR	084A	CODE	Global
$$DO48 . . . . . . . . . . . . .  	L NEAR	06E0	CODE
$$EN1  . . . . . . . . . . . . .  	L NEAR	0021	CODE
$$EN20 . . . . . . . . . . . . .  	L NEAR	01C7	CODE
$$EN39 . . . . . . . . . . . . .  	L NEAR	05C7	CODE
$$EN44 . . . . . . . . . . . . .  	L NEAR	0747	CODE
$$EN53 . . . . . . . . . . . . .  	L NEAR	0745	CODE
$$EN55 . . . . . . . . . . . . .  	L NEAR	0745	CODE
$$EN62 . . . . . . . . . . . . .  	L NEAR	07A2	CODE
$$EN68 . . . . . . . . . . . . .  	L NEAR	080D	CODE
$$EN70 . . . . . . . . . . . . .  	L NEAR	080D	CODE
$$IF1  . . . . . . . . . . . . .  	L NEAR	0015	CODE
$$IF10 . . . . . . . . . . . . .  	L NEAR	0146	CODE
$$IF12 . . . . . . . . . . . . .  	L NEAR	0160	CODE
$$IF13 . . . . . . . . . . . . .  	L NEAR	0160	CODE
$$IF16 . . . . . . . . . . . . .  	L NEAR	017D	CODE
$$IF18 . . . . . . . . . . . . .  	L NEAR	018B	CODE
$$IF20 . . . . . . . . . . . . .  	L NEAR	01C4	CODE
$$IF23 . . . . . . . . . . . . .  	L NEAR	0244	CODE
$$IF25 . . . . . . . . . . . . .  	L NEAR	028D	CODE
$$IF27 . . . . . . . . . . . . .  	L NEAR	02F7	CODE
$$IF29 . . . . . . . . . . . . .  	L NEAR	0326	CODE
$$IF31 . . . . . . . . . . . . .  	L NEAR	0401	CODE
$$IF33 . . . . . . . . . . . . .  	L NEAR	040E	CODE
$$IF35 . . . . . . . . . . . . .  	L NEAR	041B	CODE
$$IF37 . . . . . . . . . . . . .  	L NEAR	0592	CODE
$$IF39 . . . . . . . . . . . . .  	L NEAR	05AC	CODE
$$IF4  . . . . . . . . . . . . .  	L NEAR	0043	CODE
$$IF41 . . . . . . . . . . . . .  	L NEAR	05C3	CODE
$$IF44 . . . . . . . . . . . . .  	L NEAR	06E0	CODE
$$IF45 . . . . . . . . . . . . .  	L NEAR	06DE	CODE
$$IF48 . . . . . . . . . . . . .  	L NEAR	0718	CODE
$$IF5  . . . . . . . . . . . . .  	L NEAR	0040	CODE
$$IF50 . . . . . . . . . . . . .  	L NEAR	0716	CODE
$$IF53 . . . . . . . . . . . . .  	L NEAR	0733	CODE
$$IF55 . . . . . . . . . . . . .  	L NEAR	0744	CODE
$$IF62 . . . . . . . . . . . . .  	L NEAR	0791	CODE
$$IF63 . . . . . . . . . . . . .  	L NEAR	0780	CODE
$$IF67 . . . . . . . . . . . . .  	L NEAR	080D	CODE
$$IF68 . . . . . . . . . . . . .  	L NEAR	07E8	CODE
$$IF70 . . . . . . . . . . . . .  	L NEAR	07F3	CODE
$$IF72 . . . . . . . . . . . . .  	L NEAR	080D	CODE
$$IF8  . . . . . . . . . . . . .  	L NEAR	0076	CODE
$$LL44 . . . . . . . . . . . . .  	L NEAR	06CF	CODE
$$LL45 . . . . . . . . . . . . .  	L NEAR	06DB	CODE
$$LL55 . . . . . . . . . . . . .  	L NEAR	073E	CODE
$$LL62 . . . . . . . . . . . . .  	L NEAR	076A	CODE
$$LL72 . . . . . . . . . . . . .  	L NEAR	080A	CODE
$$SR48 . . . . . . . . . . . . .  	L NEAR	0747	CODE
??0000 . . . . . . . . . . . . .  	L NEAR	0823	CODE
?PLM . . . . . . . . . . . . . .  	NUMBER	0000	
?WIN . . . . . . . . . . . . . .  	NUMBER	0000	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  chkproc		
@VERSION . . . . . . . . . . . .  	TEXT  510		

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:14

CHKPROC - PART1 Procedures called from chkdsk               Symbols-16






   4965 Source  Lines
   5282 Total   Lines
   1124 Symbols

  40910 + 151558 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
