$ od -c -N 50000 [Indigo]<AltoSource>BFSSOURCES.DM!4 0000000 377 \0 \0 B F S . d \0 373 224 227 374 257 \0 \0 0000020 376 001 \0 341 022 / / B F S . D - - 0000040 B a s i c F i l e S y s t 0000060 e m f o r D i a b l o d i 0000100 s k c o n t r o l l e r \r / / 0000120 \t O r i g i a l d e s i g n 0000140 b y B u t l e r L a m p s 0000160 o n \r / / \t E l a b o r a t e 0000200 d b y B o b S p r o u l l 0000220 , D a v i d B o g g s , a 0000240 n d E d T a f t \r / / C o 0000260 p y r i g h t X e r o x C o 0000300 r p o r a t i o n 1 9 7 9 \r / 0000320 / L a s t m o d i f i e d 0000340 D e c e m b e r 3 1 , 1 9 7 0000360 9 4 : 4 9 P M b y B o 0000400 g g s \r \r / / M u s t b e 0000420 p r e c e 376 001 \0 263 / d e d b y 0000440 : \r / / g e t " A l t o F i 0000460 l e S y s . d " \r / / g e t 0000500 " D i s k s . d " \r \r m a n i f 0000520 e s t \r [ \r / / S h a p e o 0000540 f a D i a b l o d i s k \r 0000560 B F S m N D i s k s = 1 \r B 0000600 F S 3 1 N T r a c k s = 2 0 0000620 3 \r B F S 4 4 N T r a c k s = 0000640 4 0 6 \r B F S m N H e a d s 0000660 = 2 \r B F S m N S e c t o r s 0000700 = 1 2 \r \r B F S l n W o r d 0000720 s P e r P a g e = 8 \r B F S 0000740 w o r d s P e r P a g e = 2 0000760 5 6 \r B F S m a x D D P a g e 0001000 = 1 7 \t / / 1 f o r t h 0001020 e K D H + 1 6 376 001 \0 ^ 235 0001040 f o r t h e b i t t a b l 0001060 e \r \r / / D e f i n e d i n 0001100 A l t o D e f s . d : \r / / 0001120 d i s k C o m m a n d = 5 2 0001140 1 b \r / / d i s k S t a t u s 0001160 = 5 2 2 b \r / / d i s k A 0001200 d d r e s s = 5 2 3 b \r ] \r 0001220 \r / / u s e d b y A s s i 0001240 g n / R e l e a s e D i s k P a 0001260 g e t o c o m p u t e b i 0001300 t l o c a t i o n s \r / / - - 0001320 - - - - - - - - - - - - - - - - * 0001420 - - - - - - - - - - \r s t r u 376 0001440 001 \0 305 226 c t u r e V D A : \r / 0001460 / - - - - - - - - - - - - - - - 0001500 - - - - - - - - - - - - - - - - * 0001560 - - - - - - - - - - - - - \r [ \r 0001600 w o r d N u m b i t 1 2 = 0001620 \t / / w o r d i n d e x i 0001640 n w h o l e f i l e \r 0001660 [ \r p a g e N u m b i t 0001700 1 2 - B F S l n W o r d s P e 0001720 r P a g e \r w o r d N u m 0001740 I n P a g e b i t B F S l n 0001760 W o r d s P e r P a g e \r 0002000 ] \r b i t N u m b i t 4 \t \t 0002020 / / b i t i n d e x \r ] \r \f 0002040 \r / / - 376 001 \0 255 323 - - - - - - - 0002060 - - - - - - - - - - - - - - - - * 0002160 - - - - \r s t r u c t u r e D 0002200 S T : \t \t / / D i s k S t a 0002220 t u s . S e e A l t o H 0002240 a r d w a r e M a n u a l \r / 0002260 / - - - - - - - - - - - - - - - 0002300 - - - - - - - - - - - - - - - - * 0002360 - - - - - - - - - - - - - \r [ \r 0002400 s e c t o r b i t 4 \r d o n 0002420 e b i t 4 \r s e e k F a i l 0002440 b i t \r s e e k 376 001 \0 300 304 i n 0002460 g b i t \r n o t R e a d y b 0002500 i t \r d a t a L a t e b i t \r 0002520 n o T r a n s f e r b i t \r c 0002540 h e c k s u m E r r o r b i t 0002560 \r f i n a l S t a t u s b i t 0002600 2 \r ] \r \r m a n i f e s t \r [ 0002620 \r / / d i s k s t a t u s 0002640 b i t s \r d o n e = 7 4 0 0 0002660 B \r s e e k F a i l = 2 0 0 0002700 B \r s e e k i n g = 1 0 0 B 0002720 \r n o t R e a d y = 4 0 B \r 0002740 d a t a L a t e = 2 0 B \r n 0002760 o T r a n s f e r = 1 0 B \r 0003000 c h e c k s u m E r r o r = 0003020 4 \r \r / / f i n a l s t a t 0003040 u s v a l u e s \r b a d S 376 001 0003060 \0 251 365 e c t o r = 3 \r c h e 0003100 c k E r r o r = 2 \r h a r d 0003120 w a r e E r r o r = 1 \r / / 0003140 g o o d S t a t u s = 0 \r 0003160 \r D S T d o n e B i t s = d 0003200 o n e \r D S T e r r o r B i t s 0003220 = s e e k F a i l + n o 0003240 t R e a d y + d a t a L a t 0003260 e + c h e c k s u m E r r o 0003300 r + b a d S e c t o r \r D S 0003320 T g o o d S t a t u s M a s k 0003340 = D S T e r r o r B i t s % 0003360 D S T d o n e B i t s \r D S T 0003400 g o o d S t a t u s = d o n 0003420 e \r D S T f r e e S t a t u s 0003440 = 4 0 0 B \r D S T f a k e E r 0003460 r o r 376 001 \0 E 336 = d o n e 0003500 + h a r d w a r e E r r o r \r 0003520 ] \r \f \r / / H e a d e r , L 0003540 a b e l , a n d D a t a f 0003560 o r m a t s o n d i s k \r \r 0003600 / / - - - - - - - - - - - - - - 0003620 - - - - - - - - - - - - - - - - * 0003700 - - - - - - - - - - - - - - \r s 0003720 t r u c t u r e D A : \t \t / / 0003740 D i s k A d d r e s s ( r 0003760 e a l ) \r / / - - - - - - - - - 0004000 - - - - - - - - - - - - - - - - * 0004060 - - - - - - - - 376 001 \0 306 245 - - - 0004100 - - - - - - - - \r [ \r s e c t o 0004120 r b i t 4 \r t r a c k b i 0004140 t 9 \t \t / / m i s n a m e d 0004160 . r e a l l y c y l i n d 0004200 e r a d d r e s s \r h e a d 0004220 b i t 1 \r d i s k b i t 1 0004240 \r r e s t o r e b i t 1 \r ] 0004260 \r \r / / - - - - - - - - - - - - 0004300 - - - - - - - - - - - - - - - - * 0004400 \r s t r u c t u r e D H : \t \t 0004420 / / D i s k H e a d e r \r / 0004440 / - - - - - - - - - - - - - - - 0004460 - - - - - - - - - - - - - 376 001 \0 0004500 227 254 - - - - - - - - - - - - - - 0004520 - - - - - - - - - - - - - - - - * 0004560 - - \r [ \r p a c k I D w o r d 0004600 \t \t / / m u s t b e 0 \r d 0004620 i s k A d d r e s s @ D A \r ] 0004640 \r \r / / - - - - - - - - - - - - 0004660 - - - - - - - - - - - - - - - - * 0004760 \r s t r u c t u r e F I D : \t 0005000 \t / / F i l e I d e n t i f 0005020 i e r ( u s e d o n l y o 0005040 n a d i s k l a b e l ) \r 0005060 / / - - - - - - - - - - - - - - 0005100 - - 376 001 \0 021 324 - - - - - - - - - 0005120 - - - - - - - - - - - - - - - - * 0005200 - - - \r [ \r v e r s i o n w o 0005220 r d \r s e r i a l N u m b e r 0005240 @ S N \r ] \r m a n i f e s t l 0005260 F I D = s i z e F I D / 1 0005300 6 \r \r / / - - - - - - - - - - - 0005320 - - - - - - - - - - - - - - - - * 0005420 - \r s t r u c t u r e D L : \t 0005440 \t / / D i s k L a b e l . 0005460 * = s e t b y D o D i s k C 0005500 o m m a n d \r 376 001 \0 273 + / / - - 0005520 - - - - - - - - - - - - - - - - * 0005620 - - - - - - - - - - \r [ \r n e x 0005640 t w o r d \t \t / / d i s k 0005660 a d d r e s s o f n e x t 0005700 f i l e p a g e , o r e o 0005720 f D A \r p r e v i o u s w o r 0005740 d \t \t / / d i s k a d d r e 0005760 s s o f p r e v i o u s f 0006000 i l e p a g e , o r e o f 0006020 D A \r b l a n k w o r d \r n u 0006040 m C h a r s w o r d \t \t / / 0006060 b e t w e e n 0 a n d c h 0006100 a r s P e r P a g e i 376 001 \0 031 0006120 334 n c l u s i v e . \r \t \t \t / / 0006140 n e c h a r s P e r P a g e 0006160 o n l y o n l a s t p a 0006200 g e \r p a g e N u m b e r w o 0006220 r d \t \t / / * l e a d e r 0006240 i s p a g e 0 , f i r s t 0006260 d a t a p a g e i s p a 0006300 g e 1 \r f i l e I d @ F I D 0006320 \t \t / / * \r ] \r m a n i f e s 0006340 t l D L = s i z e D L / 0006360 1 6 \r \f \r / / N o t e : t h 0006400 e b i g d i s k s o n D 0006420 0 a n d D o r a d o a r e 0006440 p a r t i t i o n e d i n t 0006460 o a n u m b e r \r / / o f 0006500 s i m u l a t e d D i a b l 0006520 o 376 001 \0 Q 4 d i s k s . T 0006540 h e p a r t i t i o n s a r 0006560 e n u m b e r e d 1 t h r 0006600 o u g h 7 ; \r / / p a r t i 0006620 t i o n 0 r e f e r s t o 0006640 t h e c u r r e n t " d e 0006660 f a u l t " p a r t i t i o n 0006700 k n o w n a b o u t \r / / 0006720 b y t h e m i c r o c o d e 0006740 . A B F S D S K o b j e 0006760 c t f o r a p a r t i c u 0007000 l a r p a r t i t i o n m a 0007020 y \r / / b e c o n s t r u c 0007040 t e d b y p a s s i n g t 0007060 h e p a r t i t i o n n u m 0007100 b e r e m b e d d e d i n 0007120 t h e \r / / 376 001 \0 201 210 d r i v 0007140 e N u m b e r a r g u m e n t 0007160 o f B F S I n i t o r B 0007200 F S N e w D i s k . T h e 0007220 p a r t i t i o n i s \r / / 0007240 p a s s e d t o t h e m i 0007260 c r o c o d e e m b e d d e d 0007300 i n t h e c o m m a n d 0007320 b l o c k s e a l . \r \r / / - 0007340 - - - - - - - - - - - - - - - - * 0007440 - - - - - - - - - - - \r s t r u 0007460 c t u r e D r i v e N u m b e 0007500 r : \t / / i n t e r p r e t a 0007520 t i o n o f B F S 376 001 \0 t 367 0007540 D S K . d r i v e N u m b e r 0007560 c e l l \r / / - - - - - - - - - 0007600 - - - - - - - - - - - - - - - - * 0007700 - - - \r [ \r b l a n k b i t 0007720 1 2 \r p a r t i t i o n b i t 0007740 3 \r d r i v e b i t 1 \r ] 0007760 \r \r / / - - - - - - - - - - - - 0010000 - - - - - - - - - - - - - - - - * 0010100 \r s t r u c t u r e D C : \t \t 0010120 / / d i s k c o m m a n d \r 0010140 376 001 \0 7 H / / - - - - - - - - - 0010160 - - - - - - - - - - - - - - - - * 0010260 - - - \r [ \r s e a l b i t 8 0010300 = \t \t / / m u s t b e 1 0010320 1 0 B o n a n A l t o \r 0010340 [ \t \t \t / / f o r s i m 0010360 u l a t e d m u l t i p l e 0010400 d i s k s o n D 0 a n d 0010420 D o r a d o : \r s h o r t 0010440 S e a l b i t 5 \t / / m u 0010460 s t b e 1 1 B \r p a r 0010500 t i t i o n b i t 3 \t / / 0010520 0 : d e f a u l t ; 1 - 7 : 0010540 s p e c 376 001 \0 332 255 i f i c p 0010560 a r t i t i o n n u m b e r \r 0010600 ] \r a c t i o n b i t 0010620 8 = \r [ \r h e a d 0010640 e r A c t i o n b i t 2 \r 0010660 l a b e l A c t i o n b i 0010700 t 2 \r d a t a A c t i o 0010720 n b i t 2 \r s e e k O 0010740 n l y b i t 1 \r e x c 0010760 h a n g e D i s k s b i t 1 0011000 \t / / c o n t r o l l e r i 0011020 n v e r t s K C B . d i s k A 0011040 d d r e s s i f s e t \r 0011060 ] \r ] \r \r m a n i f e s t \r [ 0011100 \r / / d i s k c o m m a n d 0011120 s a s f u l l - w o r d c 0011140 o n s t a n t s \r c 376 001 \0 266 / o 0011160 m m a n d S e a l = 4 4 0 0 0011200 0 B \r \r r e a d H L D = 4 4 0011220 0 0 0 B \t / / R e a d H e 0011240 a d e r , R e a d L a b e 0011260 l , R e a d D a t a \r r e 0011300 a d L D = 4 4 1 0 0 B \t \t / 0011320 / C h e c k H e a d e r , 0011340 R e a d L a b e l , R e a 0011360 d D a t a \r r e a d D = 0011400 4 4 1 2 0 B \t \t / / C h e c k 0011420 H e a d e r , C h e c k L 0011440 a b e l , R e a d D a t a 0011460 \r w r i t e H L D = 4 4 2 5 0011500 0 B \t / / W r i t e H e a d 0011520 e r , W r i t e L a b e l , 0011540 W r i t e D a t a \r w r i 376 0011560 001 \0 213 330 t e L D = 4 4 1 5 0 0011600 B \t / / C h e c k H e a d e 0011620 r , W r i t e L a b e l , 0011640 W r i t e D a t a \r w r i t e 0011660 D = 4 4 1 3 0 B \t \t / / C 0011700 h e c k H e a d e r , C h e 0011720 c k L a b e l , W r i t e 0011740 D a t a \r s e e k O n l y = 0011760 4 4 0 0 2 B \t / / n o t r a 0012000 n s f e r \r ] \r \r / / d i s k 0012020 c o m m a n d b l o c k . \r 0012040 / / \t * = s e t b y D o D i 0012060 s k C o m m a n d , \r / / \t $ = 0012100 d e f a u l t e d b y D o D 0012120 i s k C o m m a n d i f 0 \r 0012140 / / - - - - - - - - - - - - - - 0012160 - - - - 376 001 \0 023 371 - - - - - - - 0012200 - - - - - - - - - - - - - - - - * 0012260 - - - \r s t r u c t u r e K C 0012300 B : \r / / - - - - - - - - - - - 0012320 - - - - - - - - - - - - - - - - * 0012420 - \r [ \r l i n k w o r d \t \t / 0012440 / * - > n e x t K C B 0012460 o r 0 i f e n d o f c 0012500 h a i n \r s t a t u s @ D S T 0012520 \t \t / / s e t w h e n c o 0012540 m m a n d i s c o m p l e t 0012560 e d \r c o m m a n 376 001 \0 242 } d 0012600 @ D C \t \t / / * \r h e a d e r 0012620 A d d r e s s w o r d \t / / 0012640 * m e m o r y a d d r e s s 0012660 e s f o r h e a d e r r e 0012700 c o r d \r l a b e l A d d r e s 0012720 s w o r d \t / / $ m e m o 0012740 r y a d d r e s s e s f o r 0012760 l a b e l r e c o r d \r d a 0013000 t a A d d r e s s w o r d \t / 0013020 / * m e m o r y a d d r e 0013040 s s e s f o r d a t a r e 0013060 c o r d \r n o r m a l W a k e u 0013100 p s w o r d \t / / $ \r e r r 0013120 o r W a k e u p s w o r d \t / 0013140 / $ \r h e a d e r @ D H = 0013160 \r [ \r b l a n k 376 001 0013200 \0 364 c w o r d \r d i s k 0013220 A d d r e s s @ D A \t / / * 0013240 i f D A a r g u m e n t 0013260 n e f i l l I n D A \r ] 0013300 \r ] \r m a n i f e s t l K C B 0013320 = s i z e K C B / 1 6 \r \f 0013340 \r / / B F S s p e c i a l i 0013360 z a t i o n o f t h e D i 0013400 s k C B Z \r / / - - - - - - - 0013420 - - - - - - - - - - - - - - - - * 0013520 - - - - - \r s t r u c t u r e 0013540 B F S C B Z : \r / / - - - - - - 0013560 - - - - - - - - - - - - - - - - 0013600 - - - 376 001 \0 345 222 - - - - - - - - 0013620 - - - - - - - - - - - - - - - - * 0013660 - - - - - - - - - - - \r [ \r @ C 0013700 B Z = \t \t \t / / s t a n d a 0013720 r d - - s e e D i s k s . 0013740 d \r [ \t \t \t / / s e e 0013760 c o m m e n t b e l o w \r 0014000 b l a n k w o r d o f f s 0014020 e t C B Z . e r r o r C o u n 0014040 t / 1 6 \r s a w C h e c k 0014060 E r r o r b i t 1 \r b 0014100 f s E r r o r C o u n t b i t 0014120 1 5 \r ] \r C B s w o r 0014140 d 0 \t \t / / * a s m a n 0014160 y C B s a s w i l l f i 0014200 t s t a r t 376 001 \0 0 U h e r 0014220 e \r ] \r m a n i f e s t l B F 0014240 S C B Z = s i z e B F S C 0014260 B Z / 1 6 \t / / f i x e d p 0014300 a r t o f C B Z \r \r / / T 0014320 h e h i g h b i t o f C 0014340 B Z . e r r o r C o u n t i s 0014360 b o r r o w e d b y t h e 0014400 B F S a n d u s e d \r / / 0014420 a s a f l a g t o r e 0014440 c o r d t h e o c c u r a n 0014460 c e o f a c h e c k e r 0014500 r o r . T h i s p e r m i 0014520 t s \r / / B F S D o D i s k C 0014540 o m m a n d t o t e l l B 0014560 F S A c t O n P a g e s t h a 0014600 t a n e r r o r w a 376 001 \0 0014620 \a 233 s a c h e c k e r r o 0014640 r . \r / / T h i s m a k e s 0014660 t h e r e t u r n O n C h e 0014700 c k E r r o r a r g u m e n t 0014720 w o r k . \r \r / / e a c h 0014740 C B Z c o n t a i n s a C 0014760 B f o r e a c h p o s s i 0015000 b l e t r a n s f e r e n q 0015020 u e u e d \r / / t h e K C B 0015040 m u s t c o m e f i r s t 0015060 f o l l o w e d b y t h e 0015100 l a b e l ( f o r c h a i 0015120 n i n g ) \r / / a f r e e 0015140 C B m u s t h a v e s t a 0015160 t u s = D S T f r e e S t a 0015200 t u s ( i n i t i a l i z a t 0015220 i o 376 001 \0 024 271 n d o e s t h 0015240 a t ) \r / / * = i n i t i a l 0015260 i z e d b y I n i t i a l i 0015300 z e C b S t o r a g e ; e v e 0015320 r y t h i n g e l s e i s 0015340 z e r o e d \r / / - - - - - - - 0015360 - - - - - - - - - - - - - - - - * 0015460 - - - - - \r s t r u c t u r e 0015500 C B : \r / / - - - - - - - - - - 0015520 - - - - - - - - - - - - - - - - * 0015620 - - \r [ \r / / 376 001 \0 336 v T h e 0015640 K C B m u s t c o m e f 0015660 i r s t \r @ K C B \t \t \t / / * 0015700 f r e e C B m u s t h a 0015720 v e s t a t u s = D S T g 0015740 o o d S t a t u s \r l a b e l 0015760 @ D L \r t r u e P a g e N u m b 0016000 e r w o r d \r / / r e m a i 0016020 n i n g w o r d s a r e n 0016040 o t z e r o e d b y B f s 0016060 G e t C b \r c b z w o r d \t \t 0016100 / / * - > C B Z w h i c 0016120 h o w n s t h i s c b \r n 0016140 e x t C B w o r d \t \t / / * 0016160 - > n e x t C B o n C 0016200 B Z q u e u e \r ] \r m a n i f 0016220 e s t \r [ \r l C B = 376 001 \0 . 0016240 216 s i z e C B / 1 6 \r l V a r 0016260 C B = o f f s e t C B . c 0016300 b z / 1 6 \r C B z o n e L e n g 0016320 t h = l B F S C B Z + 3 * l 0016340 C B / / 3 C B s r e q 0016360 u i r e d t o r u n d i s 0016400 k a t f u l l s p e e d \r 0016420 ] \r \f \r / / - - - - - - - - - - 0016440 - - - - - - - - - - - - - - - - * 0016540 - \r s t r u c t u r e B F S D 0016560 S K : \t / / E x t e n d e d 0016600 v e r s i o n o f t h e D 0016620 S K s t r u c t u r e \r / / - 0016640 - 376 001 \0 251 " - - - - - - - - - - 0016660 - - - - - - - - - - - - - - - - * 0016740 - - - - - - - - - - - - - - - \r 0016760 [ \r @ D S K \t \t \t / / s t a n 0017000 d a r d - - s e e D i s k 0017020 s . d \r @ K D H \t \t \t / / s t 0017040 a n d a r d - - s e e A l 0017060 t o F i l e S y s . d \r i n i t 0017100 m o d e w o r d \t \t / / n o 0017120 n z e r o i f p e r m i t t 0017140 e d t o c r e a t e / d e l 0017160 e t e f i l e s \r z o n e w 0017200 o r d \t \t / / z o n e f r o 0017220 m w h i c h t h i s D S K 0017240 w a s a 376 001 \0 _ 265 l l o c a 0017260 t e d \r d d M g r w o r d \t \t 0017300 / / - > d i s k d e s c r 0017320 i p t o r m a n a g e r \r l a 0017340 s t P a g e A l l o c w o r d 0017360 \t / / l a s t V D A a l l 0017400 o c a t e d - - f o r b i 0017420 a s i n g s e a r c h \r f p B 0017440 F S S y s D i r b l k w o r d 0017460 l F P \t / / s t o r a g e 0017500 f o r F P \r f p B F S D D b l 0017520 k w o r d l F P \t / / s t 0017540 o r a g e f o r F P \r f p B 0017560 F S W D b l k w o r d l F P 0017600 \t / / s t o r a g e f o r 0017620 F P \r W D N a m e b l k w o r 0017640 d m a x L e n g t h 376 001 \0 8 264 0017660 F n I n W o r d s / / s t 0017700 o r a g e f o r w o r k i n 0017720 g D i r n a m e \r V D A d i s 0017740 k D D ^ 1 , B F S m a x D D P a 0017760 g e w o r d \t / / V D A s 0020000 o f t h e d a t a p a r t 0020020 o f D D \r ] \r m a n i f e s 0020040 t l B F S D S K = s i z e 0020060 B F S D S K / 1 6 \r \r / / ' 0020100 D i s k D e s c r i p t o r ' 0020120 c o n t a i n s a K D H ( 0020140 1 6 w o r d s ) f o l l o w 0020160 e d b y a v a r i a b l e 0020200 \r / / n u m b e r o f p a 0020220 g e s c o n t a i n i n g t 0020240 h e b i t t a b l e . T 0020260 376 001 \0 223 \ h e n u m b e r o 0020300 f v a l i d \r / / w o r d s 0020320 i n t h e b i t t a b l 0020340 e i s g i v e n i n K D 0020360 H . d i s k B T s i z e . \r \r m 0020400 a n i f e s t \r [ \r / / U s e 0020420 d b y A s s i g n / R e l e 0020440 a s e D i s k P a g e t o s 0020460 k i p o v e r t h e K D H 0020500 w h i c h \r / / c o m e s 0020520 b e f o r e t h e b i t t 0020540 a b l e i n t h e D i s k 0020560 D e s c r i p t o r f i l e . 0020600 \r b i t T a b l e B i a s = 0020620 l K D H e a d e r l s h i f t 0020640 4 \r \r / / E r r o r c o d 0020660 e s r e 376 \0 307 1 232 g i s t e r 0020700 e d i n S y s . e r r o r s 0020720 : \r e c U n R e c o v D i s k E 0020740 r r o r = 1 1 0 1 \r e c D i 0020760 s k F u l l = 1 1 0 2 \r e c 0021000 B a d A c t i o n = 1 1 0 3 0021020 \r e c B f s Q u e u e = 1 1 0021040 0 4 \r e c N o C r e a t i o n A 0021060 b i l i t y = 1 1 0 5 \r e c 0021100 E s s e n t i a l F i l e = 0021120 1 1 0 6 \r e c B a d A s s i g n 0021140 P a g e = 1 1 0 7 \r e c B a 0021160 d B t P a g e = 1 1 0 8 \r ] 0021200 \r 377 \0 \0 B F S I n i t . b c p l 0021220 \0 373 226 @ 225 S \0 \0 376 001 \0 < 214 / / 0021240 B F S I n i t . b c p l \r / / 0021260 C o p y r i g h t X e r o x 0021300 C o r p o r a t i o n 1 9 7 9 0021320 , 1 9 8 0 \r / / L a s t m 0021340 o d i f i e d N o v e m b e r 0021360 1 7 , 1 9 8 0 6 : 2 2 0021400 P M b y B o g g s \r \r g e t 0021420 " A l t o F i l e S y s . d " 0021440 \r g e t " D i s k s . d " \r g 0021460 e t " B F S . d " \r g e t " 0021500 S t r e a m s . d " \r g e t " 0021520 A l t o D e f s . d " \r \r e x t 0021540 e r n a l \r [ \r / / o u t g o 0021560 i n g p r o c e d u r e s \r B 0021600 F S I n i t ; B F S T r y D i 0021620 s k \r \r / / i n c o m i 376 001 \0 0021640 E 205 n g p r o c e d u r e s 0021660 f r o m o t h e r B F S m 0021700 o d u l e s \r B F S A c t O n P 0021720 a g e s ; B F S V i r t u a l 0021740 D A ; B F S R e a l D A ; B 0021760 F S N o n E x \r B f s I n i t i 0022000 a l i z e C b S t o r a g e ; 0022020 B f s D o D i s k C o m m a n d 0022040 ; B f s G e t C b \r B F S W r 0022060 i t e P a g e s ; B F S C r e 0022100 a t e F i l e ; B F S D e l e 0022120 t e P a g e s \r B F S A s s i g 0022140 n D i s k P a g e ; B F S R e 0022160 l e a s e D i s k P a g e ; B 0022200 F S C r e a t e D D M g r ; B 0022220 F S C l o s e \r \r / / i n c o 0022240 m i 376 001 \0 = 313 n g p r o c e d 0022260 u r e s f r o m t h e O S 0022300 \r A c t O n D i s k P a g e s ; 0022320 V i r t u a l D i s k D A ; 0022340 O p e n D D \r Z e r o ; M o v 0022360 e B l o c k ; D o u b l e A d 0022400 d ; U s c \r D e f a u l t A r 0022420 g s ; A l l o c a t e ; F r 0022440 e e ; R e t u r n F r o m \r R 0022460 e a d B l o c k ; C l o s e s 0022500 ; G e t s ; G e t C u r r e 0022520 n t F a ; P o s i t i o n P a 0022540 g e \r O p e n F i l e ; S e t 0022560 W o r k i n g D i r \r ] \r \f \r / 0022600 / - - - - - - - - - - - - - - - 0022620 - - - - - - - - - - - - - - - - 0022640 - - - - - - - 376 001 \0 ) 324 - - - - 0022660 - - - - - - - - - - - - - - - - * 0022720 - - \r l e t B F S I n i t ( d 0022740 i s k Z o n e , a l l o c a t 0022760 e , d r i v e N u m , d d M 0023000 g r , f r e s h D i s k , \r 0023020 t e m p Z o n e ; n u m 0023040 a r g s n a ) = v a l o f 0023060 \r / / - - - - - - - - - - - - - 0023100 - - - - - - - - - - - - - - - - * 0023160 - - - - - - - - - - - - - - - \r 0023200 / / d i s k Z o n e i s t 0023220 h e f r e e s t o r a g e 0023240 z o n e f r o m w h 376 001 \0 340 0023260 o i c h p e r m a n e n t d 0023300 i s k s t r u c t u r e s \r / 0023320 / a r e a l l o c a t e d 0023340 . \r / / I f a l l o c a t e 0023360 i s f a l s e , o p e r a 0023400 t i o n s i n v o l v i n g 0023420 p a g e a l l o c a t i o n / 0023440 d e a l l o c a t i o n \r / / 0023460 a r e n o t p e r m i t t 0023500 e d . \r / / D r i v e N u m 0023520 i s t h e p h y s i c a l 0023540 u n i t n u m b e r o n w 0023560 h i c h S y s D i r s t a r 0023600 t s . \r / / I t m a y i 0023620 n c l u d e a p a r t i t i 0023640 o n n u m b e r ( s e e B 0023660 f 376 001 \0 275 = s . d ) . \r / / I 0023700 f d d M g r i s z e r o , 0023720 a d d M g r i s c r e a 0023740 t e d . \r / / I f f r e s h 0023760 D i s k i s t r u e , D i 0024000 s k D e s c r i p t o r i s 0024020 N O T r e a d . \r / / T e m 0024040 p Z o n e ( w h i c h d e f 0024060 a u l t s t o d i s k Z o n 0024100 e ) i s u s e d f o r t 0024120 e m p o r a r y s t o r a g e 0024140 \r / / n e e d s d u r i n 0024160 g B F S I n i t . \r [ \r D e f 0024200 a u l t A r g s ( l v n a , 0024220 - 1 , 0 , 0 , 0 , f a l 0024240 s e , d i s k Z o n e ) \r \r / 0024260 / F i r s 376 001 \0 021 312 t s e e 0024300 i f t h e d r i v e i s 0024320 o n l i n e \r u n l e s s 0024340 B F S T r y D i s k ( d r i v e 0024360 N u m , 0 ) r e s u l t i s 0024400 0 \r \r / / S e t u p s t r 0024420 u c t u r e s n e e d e d f 0024440 o r s u b s e q u e n t a c 0024460 c e s s e s \r l e t d i s k 0024500 = A l l o c a t e ( d i s k Z 0024520 o n e , l B F S D S K ) ; Z 0024540 e r o ( d i s k , l B F S D S 0024560 K ) \r d i s k > > B F S D S K . 0024600 z o n e = d i s k Z o n e \r 0024620 d i s k > > B F S D S K . i n i 0024640 t m o d e = a l l o c a t e 0024660 \r \r d i s k > > D S K 376 001 \0 310 263 0024700 . A c t O n D i s k P a g e s 0024720 = B F S A c t O n P a g e s \r 0024740 d i s k > > D S K . W r i t e D 0024760 i s k P a g e s = B F S W r 0025000 i t e P a g e s \r d i s k > > D 0025020 S K . C r e a t e D i s k F i l 0025040 e = B F S C r e a t e F i l 0025060 e \r d i s k > > D S K . D e l e 0025100 t e D i s k P a g e s = B F 0025120 S D e l e t e P a g e s \r d i s 0025140 k > > D S K . A s s i g n D i s 0025160 k P a g e = B F S A s s i g 0025200 n D i s k P a g e \r d i s k > > 0025220 D S K . R e l e a s e D i s k P 0025240 a g e = B F S R e l e a s e 0025260 D i s k P a g e \r d i s k > > D 0025300 376 001 \0 \a 224 S K . C l o s e D i s 0025320 k = B F S C l o s e \r d i s 0025340 k > > D S K . V i r t u a l D i 0025360 s k D A = B F S V i r t u a 0025400 l D A \r d i s k > > D S K . R e 0025420 a l D i s k D A = B F S R e 0025440 a l D A \r d i s k > > D S K . I 0025460 n i t i a l i z e D i s k C B Z 0025500 = B f s I n i t i a l i z e 0025520 C b S t o r a g e \r d i s k > > 0025540 D S K . D o D i s k C o m m a n 0025560 d = B f s D o D i s k C o m 0025600 m a n d \r d i s k > > D S K . G 0025620 e t D i s k C b = B f s G e 0025640 t C b \r \r / / D e n y a c c 0025660 e s s i n c e r t a i n c 0025700 a s e s \r 376 001 \0 I 377 / / W r i 0025720 t e D i s k P a g e s i s N 0025740 O T i n c l u d e d b e c a 0025760 u s e i t h a s s e v e r 0026000 a l u s e s \r / / t h a t 0026020 d o n o t r e q u i r e 0026040 m o d i f i c a t i o n s t o 0026060 t h e b i t t a b l e . \r 0026100 u n l e s s a l l o c a t e 0026120 d o \r [ \r d i s k > 0026140 > D S K . C r e a t e D i s k F 0026160 i l e = B F S N o n E x \r 0026200 d i s k > > D S K . D e l e 0026220 t e D i s k P a g e s = B F 0026240 S N o n E x \r d i s k > > 0026260 D S K . A s s i g n D i s k P a 0026300 g e = B F S N o 376 001 \0 030 237 n 0026320 E x \r d i s k > > D S K . 0026340 R e l e a s e D i s k P a g e 0026360 = B F S N o n E x \r ] \r 0026400 \r / / F P ' s \r d i s k > > D 0026420 S K . f p S y s D i r = l v 0026440 d i s k > > B F S D S K . f p 0026460 B F S S y s D i r b l k \r d i s 0026500 k > > D S K . f p D i s k D e s 0026520 c r i p t o r = l v d i s 0026540 k > > B F S D S K . f p B F S D 0026560 D b l k \r d i s k > > D S K . f 0026600 p W o r k i n g D i r = l v 0026620 d i s k > > B F S D S K . f p 0026640 B F S W D b l k \r \r / / O t h 0026660 e r p a r a m e t e r s \r d i 0026700 s k > > D S K . l n P a g e S 376 0026720 001 \0 \f 223 i z e = B F S l n W 0026740 o r d s P e r P a g e \r d i s k 0026760 > > D S K . d r i v e N u m b e 0027000 r = d r i v e N u m \r d i s 0027020 k > > D S K . r e t r y C o u n 0027040 t = 8 \r d i s k > > D S K . 0027060 t o t a l E r r o r s = 0 \r 0027100 d i s k > > D S K . d i s k K d 0027120 = l v d i s k > > B F S D 0027140 S K . k d \r d i s k > > D S K . 0027160 l e n g t h C B Z = l B F S 0027200 C B Z \r d i s k > > D S K . l e 0027220 n g t h C B = l C B \r \f \r / 0027240 / B F S I n i t ( c o n t ' 0027260 d ) \r \r / / T h i s i s t 0027300 h e p h y s i c a l s h a p 0027320 e o f 376 001 \0 E 237 t h e d i 0027340 s k . \r / / I f w e r e a 0027360 d D i s k D e s c r i p t o r 0027400 d o w n b e l o w , \r / / 0027420 w e m a y i n s t a l l 0027440 a d i f f e r e n t l o g i 0027460 c a l s h a p e \r d i s k > > 0027500 B F S D S K . n D i s k s = 0027520 d r i v e N u m < < D r i v e N 0027540 u m b e r . d r i v e e q 1 0027560 ? 1 , \r B F S T r y D i s k 0027600 ( d r i v e N u m + 1 , 0 ) ? 0027620 2 , 1 \r d i s k > > B F S D 0027640 S K . n T r a c k s = B F S 0027660 T r y D i s k ( d r i v e N u m 0027700 , 2 0 3 ) ? B F S 4 4 N T r 0027720 a c k s , B F S 376 001 \0 5 \v 3 1 0027740 N T r a c k s \r d i s k > > B F 0027760 S D S K . n H e a d s = B F 0030000 S m N H e a d s \r d i s k > > B 0030020 F S D S K . n S e c t o r s = 0030040 B F S T r y D i s k ( d r i v 0030060 e N u m , 0 , 1 3 ) ? 1 4 0030100 , B F S m N S e c t o r s \r \r 0030120 / / S e t u p d i r e c t o 0030140 r y f p a n d d e f a u l 0030160 t w o r k i n g d i r \r l e 0030200 t f p B F S S y s D i r = 0030220 l v d i s k > > B F S D S K . 0030240 f p B F S S y s D i r b l k \r M 0030260 o v e B l o c k ( f p B F S S y 0030300 s D i r , t a b l e [ 1 0 0030320 0 0 0 0 b ; 1 0 0 ; 1 ; 376 001 0030340 \0 024 | 0 ; 1 ] , l F P ) 0030360 \r d i s k > > D S K . n a m e W 0030400 o r k i n g D i r = l v d 0030420 i s k > > B F S D S K . W D N a 0030440 m e b l k \r S e t W o r k i n g 0030460 D i r ( " < S y s D i r . " , 0030500 f p B F S S y s D i r , d i s 0030520 k ) \r \r u n l e s s f r e s h 0030540 D i s k d o / / R e a d 0030560 t h e d i s k d e s c r i 0030600 p t o r \r [ \r / / 0030620 Q u i c k b l u n d e r c h 0030640 e c k : \r l e t D A s 0030660 = v e c 2 ; D A s ! 1 = 0030700 1 \r l e t b u f = 0030720 A l l o c a t e ( t e m p Z o n 0030740 e , 376 001 \0 \f j B F S w o r d s 0030760 P e r P a g e ) \r u n l e 0031000 s s A c t O n D i s k P a g e 0031020 s ( d i s k , 0 , D A s + 1 0031040 , f p B F S S y s D i r , 0 0031060 , 0 , D C r e a d D , \r 0031100 0 , 0 , b u f , 0 , 0031120 l v B F S I n i t E r r o r , 0031140 t r u e ) e q 0 d o \r 0031160 [ F r e e ( t e m p 0031200 Z o n e , b u f ) ; F r e e 0031220 ( d i s k Z o n e , d i s k ) 0031240 ; r e s u l t i s 0 ] 0031260 / / n o S y s D i r \r \r 0031300 / / G e t t h e d i s k 0031320 s h a p e f r o m t h e D 0031340 S H A P E f i 376 001 \0 016 g l e 0031360 p r o p e r t y i n S y s D 0031400 i r ' s \r / / l e a d e 0031420 r p a g e , i f p r e s e 0031440 n t . \r i f b u f > > L 0031460 D . p r o p e r t y B e g i n 0031500 g e o f f s e t L D . l e a 0031520 d e r P r o p s / 1 6 & \r 0031540 b u f > > L D . p r o p e r 0031560 t y B e g i n + b u f > > L 0031600 D . p r o p e r t y L e n g t h 0031620 l e \r ( o f f s e t 0031640 L D . l e a d e r P r o p s + 0031660 s i z e L D . l e a d e r P 0031700 r o p s ) / 1 6 t h e n \r 0031720 [ \r l e t 0031740 f P r o p = b u f + 376 001 \0 0031760 * ] b u f > > L D . p r o p e 0032000 r t y B e g i n \r l 0032020 e t m a x F P r o p = f P 0032040 r o p + b u f > > L D . p r 0032060 o p e r t y L e n g t h \r 0032100 u n t i l f P r o p > > 0032120 F P R O P . t y p e e q 0 0032140 d o \r [ \r 0032160 l e t l e n g t 0032200 h = f P r o p > > F P R O P 0032220 . l e n g t h \r 0032240 i f l e n g t h e q 0 0032260 % f P r o p + l e n g t h g 0032300 r m a x F P r o p b r e a k 0032320 \r i f f P r 0032340 o p > > F P R O P . t y p e e 0032360 q 376 001 \0 272 k f p r o p T y p e 0032400 D S h a p e t h e n \r 0032420 [ \r 0032440 i f l e n g t h 0032460 n e l D S H A P E + 1 b r e 0032500 a k \r l 0032520 e t d S h a p e = f P r o 0032540 p + 1 \r 0032560 d i s k > > B F S D S K . n D i 0032600 s k s = d S h a p e > > D S 0032620 H A P E . n D i s k s \r 0032640 d i s k > > B F 0032660 S D S K . n T r a c k s = d 0032700 S h a p e > > D S H A P E . n T 0032720 r a c k s \r 0032740 d i s k > > B F S D S K . n 0032760 H e a d s = 376 001 \0 224 222 d S h 0033000 a p e > > D S H A P E . n H e a 0033020 d s \r d 0033040 i s k > > B F S D S K . n S e c 0033060 t o r s = d S h a p e > > D 0033100 S H A P E . n S e c t o r s \r 0033120 ] \r 0033140 f P r o p = f P 0033160 r o p + l e n g t h \r 0033200 ] \r ] \r 0033220 \r / / I f t h e r e 0033240 a r e t w o d i s k s , t 0033260 h e n t r y r e a d i n g 0033300 a s e c t o r o n D P 1 . 0033320 \r / / I f w e g e t 0033340 a h e a d e r c h e c k 0033360 e r r o r , t h e n 376 001 \0 341 0033400 030 i t s p r o b a b l y D P 0033420 0 o f s o m e \r / / 0033440 o t h e r f i l e s y s t 0033460 e m . T h i s i s b y 0033500 n o m e a n s a f o o l - 0033520 p r o o f c h e c k . \r 0033540 i f d i s k > > B F S D S K . 0033560 n D i s k s e q 2 t h e n 0033600 \r [ \r l 0033620 e t r e a l D A = 0 ; r 0033640 e a l D A < < D A . d i s k = 0033660 1 \r l e t D A s 0033700 = v e c 2 ; D A s ! 1 0033720 = V i r t u a l D i s k D A ( 0033740 d i s k , l v r e a l D A ) 0033760 \r u n l e s s A c 0034000 t 376 001 \0 321 205 O n D i s k P a g e 0034020 s ( d i s k , 0 , D A s + 1 0034040 , 0 , 0 , 0 , D C r e a 0034060 d L D , \r 0 , 0 0034100 , b u f , 0 , l v B F S 0034120 I n i t E r r o r , t r u e ) 0034140 e q 0 d o \r 0034160 [ F r e e ( t e m p Z o n 0034200 e , b u f ) ; F r e e ( d i 0034220 s k Z o n e , d i s k ) ; r 0034240 e s u l t i s 0 ] \r 0034260 ] \r F r e e ( t e m p 0034300 Z o n e , b u f ) \r \f \r / / 0034320 B F S I n i t ( c o n t ' d ) 0034340 \r \r l e t d d s = O 0034360 p e n F i l e ( " D i s k D e s 0034400 c r i p t o 376 001 \0 347 372 r " , k 0034420 s T y p e R e a d O n l y , w 0034440 o r d I t e m , 0 , \r 0034460 d i s k > > D S K . f p D i 0034500 s k D e s c r i p t o r , 0 , 0034520 t e m p Z o n e , 0 , d i 0034540 s k ) \r i f d d s e q 0034560 0 t h e n [ F r e e ( d 0034600 i s k Z o n e , d i s k ) ; 0034620 r e s u l t i s 0 ] / / 0034640 n o D i s k D e s c r i p t o 0034660 r \r R e a d B l o c k ( d 0034700 d s , d i s k > > D S K . d i 0034720 s k K d , l K D H e a d e r ) 0034740 / / K D H \r \r / / B 0034760 u m p t h e s e r i a l n 0035000 u m b e r t o t r 376 001 \0 X 005 0035020 y t o a v o i d d u p l i 0035040 c a t e s \r l e t s n A 0035060 d r = l v d i s k > > B F 0035100 S D S K . l a s t S n \r D 0035120 o u b l e A d d ( s n A d r , 0035140 t a b l e [ 0 ; 5 ] ) \r 0035160 s n A d r > > S N . d i r 0035200 e c t o r y = 0 / / m 0035220 a k e s u r e t h e t e r 0035240 r i f y i n g b i t s a r e 0035260 o f f \r s n A d r > > S 0035300 N . r a n d o m = 0 \r 0035320 s n A d r > > S N . n o l o g 0035340 = 0 \r \r / / D o n ' t 0035360 b e t o o g u l l i b l e 0035400 : \r i f U s c ( d i s k 0035420 376 001 \0 261 251 > > B F S D S K . d e 0035440 f a u l t V e r s i o n s K e p 0035460 t , 7 ) g r 0 t h e n \r 0035500 d i s k > > B F S D 0035520 S K . d e f a u l t V e r s i o 0035540 n s K e p t = 7 \r \r / 0035560 / c o u n t f r e e p a g 0035600 e s i n t h e f i l e s 0035620 y s t e m \r l e t f r e 0035640 e P a g e s = 0 \r l e 0035660 t d i s k B T s i z e = d 0035700 i s k > > B F S D S K . d i s k 0035720 B T s i z e \r f o r i 0035740 = 1 t o d i s k B T s i z 0035760 e d o \r [ \r 0036000 l e t w = G e t s ( 0036020 d d s ) \r 376 001 \0 275 H 0036040 t e s t w e q 0 \r 0036060 i f s o f r e e P a 0036100 g e s = f r e e P a g e s 0036120 + 1 6 \r i f n 0036140 o t i f w n e - 1 t h 0036160 e n \r f 0036200 o r j = 0 t o 1 5 d 0036220 o \r 0036240 i f ( ( w r s h i f t j 0036260 ) & 1 ) e q 0 t h e n 0036300 \r 0036320 f r e e P a g e s = f 0036340 r e e P a g e s + 1 \r 0036360 ] \r d i s k > > B F S 0036400 D S K . f r e e P a g e s = 0036420 f r e e P a g e s \r 376 001 \0 201 255 \r 0036440 / / S a v e v i r t u 0036460 a l d i s k a d d r e s s e 0036500 s o f d i s k d e s c r i 0036520 p t o r p a g e s \r f o 0036540 r i = 1 t o ( l K D H 0036560 e a d e r + d i s k B T s i z e 0036600 - 1 ) r s h i f t B F S l n 0036620 W o r d s P e r P a g e + 1 0036640 d o \r [ \r 0036660 P o s i t i o n P a g e ( d d 0036700 s , i ) \r l e t 0036720 f a = v e c l F A \r 0036740 G e t C u r r e n t F a ( 0036760 d d s , f a ) \r d 0037000 i s k > > B F S D S K . V D A d 0037020 i s k D D ^ i = f a > > F 376 0037040 001 \0 o } A . d a \r ] 0037060 \r \r C l o s e s ( d d s ) 0037100 \r ] \r \r / / s e t u p 0037120 D D m a n a g e r , i f 0037140 n e e d e d \r i f a l l o c a 0037160 t e t h e n \r [ \r 0037200 i f d d M g r e q 0 t h 0037220 e n \r d d M g r = 0037240 B F S C r e a t e D D M g r ( 0037260 d i s k Z o n e ) \r d i s 0037300 k > > B F S D S K . d d M g r 0037320 = d d M g r \r O p e n D 0037340 D ( d d M g r , d i s k ) \r 0037360 ] \r \r / / R e t u r n h 0037400 a n d l e o n d i s k o b 0037420 j e c t \r r e s u l t i s d i 0037440 s k \r ] 376 001 \0 G 342 \r \f \r / / T 0037460 h i s p r o c e d u r e i s 0037500 p a s s e d t o A c t O n 0037520 D i s k P a g e s b y B F S 0037540 I n i t w h e n \r / / a t 0037560 t e m p t i n g t o r e a d 0037600 t h e l e a d e r p a g e 0037620 o f s y s D i r t o s e 0037640 e i f i t i s t h e r e 0037660 . \r / / I t m a y q u i t 0037700 e l e g i t i m a t e l y n 0037720 o t b e , a n d w e d o 0037740 n ' t w a n t t o g o i 0037760 n t o S w a t . \r / / - - - - 0040000 - - - - - - - - - - - - - - - - * 0040040 - - - - - - - - - 376 001 \0 001 032 - - 0040060 - - - - - - - - - - - - - - - - 0040100 - - - - - - - - - - - - - \r a n 0040120 d B F S I n i t E r r o r ( n 0040140 i l , n i l , n i l ) b e 0040160 R e t u r n F r o m ( A c t O 0040200 n D i s k P a g e s , - 1 ) \r 0040220 / / - - - - - - - - - - - - - - 0040240 - - - - - - - - - - - - - - - - * 0040320 - - - - - - - - - - - - - - \r \r 0040340 / / - - - - - - - - - - - - - - 0040360 - - - - - - - - - - - - - - - - * 0040440 - - - - - - - - - - - - - - 376 001 0040460 \0 - \n \r a n d B F S T r y D i 0040500 s k ( d r i v e , c y l i n d 0040520 e r , s e c t o r ; n u m a 0040540 r g s n a ) = v a l o f \r 0040560 / / - - - - - - - - - - - - - - 0040600 - - - - - - - - - - - - - - - - * 0040660 - - - - - - - - - - - - - - \r / 0040700 / I f t r a c k N u m b e r 0040720 i s 0 , r e t u r n s t 0040740 r u e i f d i s k i s o 0040760 n l i n e \r / / I f t r a 0041000 c k N u m b e r i s 2 0 3 , 0041020 r e t u r n s t r u e i f 0041040 d i s k i s m o d e l 4 0041060 4 \r [ 376 001 \0 235 237 \r / / f o r 0041100 D o r a d o s a n d D 0 s , 0041120 v e r i f y t h e p a r t 0041140 i t i o n n u m b e r \r l e t 0041160 p a r t i t i o n = d r i 0041200 v e < < D r i v e N u m b e r . 0041220 p a r t i t i o n \r i f p a r 0041240 t i t i o n n e 0 t h e n 0041260 \r [ \r l e t c u r 0041300 r e n t P a r t i t i o n = 0041320 S e t P a r t i t i o n ( 0 ) 0041340 / / r e m e m b e r w h e 0041360 r e w e a r e . . . \r 0041400 u n l e s s S e t P a r t i t 0041420 i o n ( p a r t i t i o n ) r 0041440 e s u l t i s f a l s e / 0041460 / n o s u c 376 001 \0 004 252 h p 0041500 a r t i t i o n \r S e t P 0041520 a r t i t i o n ( c u r r e n t 0041540 P a r t i t i o n ) / / g 0041560 e t b a c k t o w h e r e 0041600 w e w e r e \r ] \r \r / 0041620 / t r y s e e k i n g t o 0041640 a c y l i n d a r a d d r 0041660 e s s i n t h a t p a r t 0041700 i t i o n \r l e t k c b = 0041720 v e c l K C B ; Z e r o ( k 0041740 c b , l K C B ) \r k c b > > K 0041760 C B . c o m m a n d = s e e 0042000 k O n l y \r k c b > > K C B . c 0042020 o m m a n d . p a r t i t i o n 0042040 = p a r t i t i o n \r k c b 0042060 > > K C B . d i s k A d d 376 001 \0 0042100 243 337 r e s s . d i s k = d r 0042120 i v e / / < < D r i v e N 0042140 u m b e r . d r i v e \r k c b > 0042160 > K C B . d i s k A d d r e s s 0042200 . t r a c k = c y l i n d e 0042220 r \r i f n a g e 3 t h e 0042240 n k c b > > K C B . d i s k A 0042260 d d r e s s . s e c t o r = 0042300 s e c t o r \r u n t i l @ d i 0042320 s k C o m m a n d e q 0 l 0042340 o o p \r @ d i s k C o m m a n d 0042360 = k c b \r u n t i l k c b 0042400 > > K C B . s t a t u s . d o n 0042420 e l o o p \r r e s u l t i s 0042440 ( k c b > > K C B . s t a t u s 0042460 & D S T g o o d S t a t u s 0042500 M a 376 \0 371 _ a s k ) e q D S 0042520 T g o o d S t a t u s \r ] \r \r / 0042540 / - - - - - - - - - - - - - - - 0042560 - - - - - - - - - - - - - - - - * 0042640 - - - - - - - - - - - - - \r a n 0042660 d S e t P a r t i t i o n ( p 0042700 a r t i t i o n ) = ( t a b 0042720 l e [ 6 1 0 3 7 b ; 1 4 0 0042740 1 b ] ) ( p a r t i t i o n ) 0042760 \r / / - - - - - - - - - - - - - 0043000 - - - - - - - - - - - - - - - - * 0043060 - - - - - - - - - - - - - - - \r 0043100 377 \0 \0 B F S B a s e . b c p l \0 0043120 373 230 316 204 265 \0 \0 376 001 \0 \ 031 / / B 0043140 F S B a s e . B c p l - A l 0043160 t o B a s i c F i l e S y 0043200 s t e m \r / / C o p y r i g h 0043220 t X e r o x C o r p o r a t 0043240 i o n 1 9 7 9 , 1 9 8 1 , 0043260 1 9 8 2 \r / / L a s t m o d 0043300 i f i e d M a r c h 2 8 , 0043320 1 9 8 2 4 : 4 7 P M b y 0043340 B o g g s \r \r / / N O T 0043360 E T h e w h o l e d i 0043400 s k o b j e c t d e p e n d 0043420 s o n e r r o r s o f a 0043440 n y k i n d s t o p p i n g 0043460 \r / / s u b s e q u e n t t 0043500 r a n s f e r s . F o r e 0043520 x a m p l e , W r i t 376 001 \0 304 0043540 252 e B l o c k w i l l i n 0043560 g e n e r a l w r i t e \r / / 0043600 a p a g e f r o m t h e 0043620 s t r e a m b u f f e r , 0043640 w r i t e a f e w p a g e 0043660 s f r o m c o r e , a n d 0043700 R E A D \r / / t h e l a s 0043720 t p a g e i n t o t h e 0043740 s t r e a m b u f f e r . 0043760 I f t h e d i s k i s a 0044000 l l o w e d t o c o n t i n 0044020 u e \r / / d o w n i t s c 0044040 h a i n , e v e n t h o u g 0044060 h a n e r r o r o c c u r 0044100 r e d o n t h e f i r s t 0044120 ( w r i t e o f \r / / s t 0044140 r 376 001 \0 232 200 e a m b u f f e r 0044160 ) , t h e s t r e a m b u 0044200 f f e r w i l l b e c o m e 0044220 c l o b b e r e d w i t h 0044240 b a d d a t a \r / / f r o m 0044260 t h e l a s t p a g e . 0044300 R e t r y i n g w i l l w 0044320 r i t e b a d d a t a i n 0044340 t o t h e f i r s t p a g 0044360 e ! \r \r g e t " A l t o F i l 0044400 e S y s . d " \t / / D e f i n 0044420 i t i o n s f o r s t r u c 0044440 t u r e s i n t h e f i l 0044460 e s y s t e m \r g e t " A l 0044500 t o D e f s . d " \t / / D e f 0044520 i n i t i o n s o f A l t o 0044540 - s p e c i 376 001 \0 ` 251 f i c p 0044560 l a c e s a n d t h i n g s 0044600 \r g e t " D i s k s . d " \t \t 0044620 / / D e f i n i t i o n s f 0044640 o r t h e d i s k o b j e 0044660 c t \r g e t " B f s . d " \t \t 0044700 / / D e f i n i t i o n s f 0044720 o r t h e D i a b l o 3 1 0044740 / 4 4 d i s k \r \r e x t e r n 0044760 a l \r [ \r / / o u t g o i n g 0045000 p r o c e d u r e s \r B f s I 0045020 n i t i a l i z e C b S t o r a 0045040 g e ; B f s D o D i s k C o m 0045060 m a n d ; B f s G e t C b \r B 0045100 F S A c t O n P a g e s ; B F 0045120 S V i r t u a l D A ; B F S R 0045140 e a l D A \r D e f a u 376 001 \0 7 315 0045160 l t B f s E r r o r R t n ; B 0045200 F S N o n E x ; B f s M a k e 0045220 F p F r o m L a b e l \r \r / / 0045240 i n c o m i n g p r o c e d u 0045260 r e s \r I n i t i a l i z e D i 0045300 s k C B Z ; G e t D i s k C b 0045320 ; D o D i s k C o m m a n d \r 0045340 R e a l D i s k D A ; V i r t 0045360 u a l D i s k D A \r Z e r o ; 0045400 M o v e B l o c k ; U s c ; 0045420 I d l e ; R e t u r n T o ; 0045440 N o o p \r D e f a u l t A r g s 0045460 ; S y s E r r \r \r / / i n c 0045500 o m i n g s t a t i c s f r 0045520 o m B F S M L \r o n e B i t s 0045540 ; f r e e P a g e I d \r ] \r \r 0045560 376 001 \0 F 313 m a n i f e s t B F 0045600 S r e s t o r e = 5 2 5 b \r 0045620 \r c o m p i l e i f n e w n a 0045640 m e d e b u g t h e n [ 0045660 m a n i f e s t [ d e b u g 0045700 = f a l s e ] ] \r \r / / 0045720 " B c p l / f B f s B a s e . 0045740 b c p l d e b u g / M " C 0045760 o m p i l e s c o d e t o : 0046000 \r / / C a l l B F S E v e n 0046020 t ( c b ) e a c h t i m e 0046040 a c b i s c l e a n e d 0046060 u p . \r / / S e n d s a 0046100 P u p E v e n t R e p o r t 0046120 o n c b . \r / / S e e 0046140 B F S E v e n t . b c p l f o 0046160 r d e t 376 001 \0 f 243 a i l s . \r 0046200 / / I f R a n d o m N u m b 0046220 e r & 7 7 b l s B F S E 0046240 r r o r R a t e t h e n f a 0046260 k e a n e r r o r i n c 0046300 b \r / / 0 = > n o e r 0046320 r o r s \r / / 4 0 b = > 0046340 5 0 % o f K C B s e n d 0046360 w i t h a n e r r o r \r / / 0046400 1 0 0 b = > s o l i d 0046420 e r r o r s \r \r c o m p i l e i 0046440 f d e b u g t h e n \r [ \r e 0046460 x t e r n a l [ B F S E v e 0046500 n t ] \r s t a t i c [ B F 0046520 S E r r o r R a t e ] \r ] \r \f 0046540 \r / / - - - - - - - - - - - - - 0046560 - - - - - - - - - - 376 001 \0 367 2 - 0046600 - - - - - - - - - - - - - - - - * 0046660 - - - - \r l e t B F S V i r t 0046700 u a l D A ( d i s k , l v R e 0046720 a l D A ) = v a l o f \r / / 0046740 - - - - - - - - - - - - - - - - * 0047040 - - - - - - - - - - - - \r [ \r l 0047060 e t r e a l D A = @ l v R 0047100 e a l D A \r i f r e a l D A 0047120 e q 0 t h e n r e s u l t 0047140 i s e o f D A \r r e s u l t i 0047160 s ( ( ( ( ( r e a l D A < < 376 0047200 001 \0 H 335 D A . d i s k * d i 0047220 s k > > B F S D S K . n T r a c 0047240 k s ) + r e a l D A < < D A 0047260 . t r a c k ) * \r d i s k > 0047300 > B F S D S K . n H e a d s ) 0047320 + r e a l D A < < D A . h e a 0047340 d ) * \r d i s k > > B F S D 0047360 S K . n S e c t o r s ) + r 0047400 e a l D A < < D A . s e c t o r 0047420 \r ] \r \r / / - - - - - - - - - - 0047440 - - - - - - - - - - - - - - - - * 0047540 - - \r a n d B F S R e a l D A 0047560 ( d i s k , v i r t u a l D A 0047600 , l v 376 001 \0 214 330 R e a l D A ) 0047620 = v a l o f \r / / - - - - - 0047640 - - - - - - - - - - - - - - - - * 0047740 - - - - - - - \r [ \r / / D i v 0047760 ( x ) r e t u r n s v i r t 0050000 u a l D A / x a n d l e a v 0050020 e s t h e r e m a i n d e r 0050040 i n v i r t u a l D A \r l e 0050060 t D i v = t a b l e \r 0050100 [ \r 5 5 0 0 1 b \t / / 0050120 s t a 3 s a v e d P C , 2 0050140 \r 2 5 0 0 5 b \t / / l 0050160 d a 1 s e c o n d A r g , 2 0050200 \r 1 5 5 0 0 376 001 \0 220 5 0 b 0050220 \t / / m o v 2 3 \r 1 0050240 1 1 0 0 0 b \t / / m o v 0 0050260 2 \r 1 0 2 4 6 0 b \t / / 0050300 m k z e r o 0 0 \r 6 0050320 1 0 2 1 b \t / / d i v \r 0050340 7 7 4 0 0 b \t / / s w a t 0050360 \r 1 7 1 0 0 0 b \t / / m 0050400 o v 3 2 \r 4 5 0 0 5 0050420 b \t / / s t a 1 s e c o n 0050440 d A r g , 2 \r 3 5 0 0 1 0050460 b \t / / l d a 3 s a v e d 0050500 P C , 2 \r 1 4 0 1 b \t 0050520 / / j m p 1 , 3 \r ] \r 0050540 \r l v R e a l D A ! 0 = 0 \r 0050560 i f v i r t u a l D A n e 0050600 e o f D A t h e n \r 376 001 0050620 \0 Z + [ \r l v R e a l D A 0050640 > > D A . s e c t o r = D i 0050660 v ( d i s k > > B F S D S K . n 0050700 S e c t o r s ) \r l v R e 0050720 a l D A > > D A . h e a d = 0050740 D i v ( d i s k > > B F S D S K 0050760 . n H e a d s ) \r l v R e 0051000 a l D A > > D A . t r a c k = 0051020 D i v ( d i s k > > B F S D S 0051040 K . n T r a c k s ) \r l v 0051060 R e a l D A > > D A . d i s k 0051100 = v i r t u a l D A \r ] 0051120 \r \r / / R e t u r n t r u e 0051140 i f d i s k a d d r e s s 0051160 a p p e a r s l e g a l . \r 0051200 r e s u l t i s U s c ( v i r 0051220 t u a 376 001 \0 324 9 l D A , d i s 0051240 k > > B F S D S K . n D i s k s 0051260 ) l s 0 \r ] \r \r / / - - - - 0051300 - - - - - - - - - - - - - - - - * 0051400 - - - - - - - - \r a n d B F S 0051420 N o n E x ( d i s k ) b e S 0051440 y s E r r ( d i s k , e c N o 0051460 C r e a t i o n A b i l i t y ) 0051500 \r / / - - - - - - - - - - - - - 0051520 - - - - - - - - - - - - - - - - * 0051600 - - - - - - - - - - - - - - - \r 0051620 \r / / - - - - - 376 001 \0 036 e - - - 0051640 - - - - - - - - - - - - - - - - * 0051740 - - - - \r a n d D e f a u l t 0051760 B f s E r r o r R t n ( a d d r 0052000 , c b , e r r N o ) b e 0052020 S y s E r r ( 0 , e r r N o , 0052040 c b ) \r / / - - - - - - - - - 0052060 - - - - - - - - - - - - - - - - * 0052160 - - - \r \f \r / / - - - - - - - - 0052200 - - - - - - - - - - - - - - - - 0052220 - - - - - - - - - - - - - 376 001 \0 0052240 252 246 - - - - - - - - - - - - - - 0052260 - - - - - - - - - - - - - - - - 0052300 - - - - - - - - - \r a n d B f 0052320 s I n i t i a l i z e C b S t o 0052340 r a g e ( d i s k , c b z , 0052360 f i r s t P a g e , l e n g t 0052400 h , r e t r y , e r r o r R 0052420 t n ; \r n u m a r g s 0052440 n a ) b e \r / / - - - - - - 0052460 - - - - - - - - - - - - - - - - * 0052560 - - - - - - \r / / I n i t t 0052600 h e c b z s u c h t h a t 0052620 s u b s e q u e n t l y i t 0052640 c 376 001 \0 344 @ a n b e u s e 0052660 d f o r B F S t r a n s f 0052700 e r s \r [ \r i f n a g e 4 0052720 t h e n \r [ \r Z e 0052740 r o ( c b z , l e n g t h ) \r 0052760 c b z > > C B Z . l e n g 0053000 t h = l e n g t h \r c 0053020 b z > > C B Z . e r r o r R t n 0053040 = n a g e 6 & e r r 0053060 o r R t n ? e r r o r R t n , 0053100 l v D e f a u l t B f s E r 0053120 r o r R t n \r c b z > > C 0053140 B Z . r e t r y = r e t r y 0053160 \r c b z > > C B Z . c l e 0053200 a n u p R o u t i n e = N o 0053220 o p \r ] \r c b z > > C B Z 0053240 . d i s k = 376 001 \0 037 y d i s 0053260 k \r c b z > > C B Z . c u r r e 0053300 n t P a g e = f i r s t P a 0053320 g e \r c b z > > C B Z . q u e u 0053340 e H e a d = l v c b z > > 0053360 C B Z . h e a d \t / / f o r 0053400 b a c k w a r d c o m p a t i 0053420 b i l i t y \r l e t c b = 0053440 l v c b z > > B F S C B Z . C 0053460 B s \r c b z > > C B Z . h e a d 0053500 = c b \r [ \r c b 0053520 z > > C B Z . t a i l = c b 0053540 \r c b > > C B . c b z = 0053560 c b z \r c b > > C B . s 0053600 t a t u s = D S T f r e e S 0053620 t a t u s \r c b = c b 0053640 + l C B \r i f c 376 001 \0 9 0053660 274 b + l C B g r c b z + c b 0053700 z > > C B Z . l e n g t h t h 0053720 e n c b = 0 \r c b z 0053740 > > C B Z . t a i l > > C B . n 0053760 e x t C B = c b \r ] 0054000 r e p e a t u n t i l c b e 0054020 q 0 \r ] \r \f \r / / - - - - - - 0054040 - - - - - - - - - - - - - - - - * 0054140 - - - - - \r a n d B f s D o D 0054160 i s k C o m m a n d ( d i s k , 0054200 c b , C A , D A , f p , 0054220 p a g e N u m b e r , a c t 0054240 i o n , \r n e x t C b ; 0054260 376 001 \0 344 ? n u m a r g s n a 0054300 ) b e \r / / - - - - - - - - - 0054320 - - - - - - - - - - - - - - - - * 0054420 - - \r / / E x p e c t s c o 0054440 m m a n d a n d l a b e l 0054460 t o b o t h b e z e r o e 0054500 d o n e n t r y , o r \r / 0054520 / o t h e r w i s e a p p 0054540 r o p r i a t e l y i n i t i 0054560 a l i z e d \r [ \r l e t c b z 0054600 = c b > > C B . c b z \r \r / 0054620 / S e t u p h e a d e r , 0054640 l a b e l , a n d d a t a 0054660 b l o c k 376 001 \0 253 u a d d r e 0054700 s s e s \r c b > > C B . h e a d 0054720 e r A d d r e s s = l v c 0054740 b > > C B . h e a d e r \r l e t 0054760 l a = c b > > C B . l a b 0055000 e l A d d r e s s \r i f l a 0055020 e q 0 t h e n \r [ \r 0055040 l a = n a g e 8 & 0055060 n e x t C b ? l v n e x t 0055100 C b > > C B . d i s k A d d r e 0055120 s s , l v c b > > C B . l a 0055140 b e l \r c b > > C B . l a 0055160 b e l A d d r e s s = l a \r 0055200 ] \r c b > > C B . d a t a 0055220 A d d r e s s = C A \r \r / / 0055240 * N o b o d y u s e s i n 0055260 t e r r u p t s , a 376 001 \0 232 337 0055300 n d i t ' s u n l i k e l y 0055320 t h a t t h i s w o u l d 0055340 w o r k i f \r / / * a n y 0055360 o n e t r i e d t o . \r / / 0055400 * i f c b > > C B . n o r m 0055420 a l W a k e u p s e q 0 t 0055440 h e n \r / / * c b > > C 0055460 B . n o r m a l W a k e u p s 0055500 = c b z > > C B Z . n o r m a 0055520 l W a k e u p s \r / / * i f 0055540 c b > > C B . e r r o r W a k e 0055560 u p s e q 0 t h e n \r / / 0055600 * c b > > C B . e r r o 0055620 r W a k e u p s = c b z > > 0055640 C B Z . e r r o r W a k e u p s 0055660 \r \r / / S e t u p f o r l 0055700 376 001 \0 331 240 a b e l c o m p a r 0055720 e \r l a > > D L . f i l e I d . 0055740 s e r i a l N u m b e r . w o r 0055760 d 1 = f p > > F P . s e r i 0056000 a l N u m b e r . w o r d 1 \r l 0056020 a > > D L . f i l e I d . s e r 0056040 i a l N u m b e r . w o r d 2 0056060 = f p > > F P . s e r i a l N 0056100 u m b e r . w o r d 2 \r l a > > 0056120 D L . f i l e I d . v e r s i o 0056140 n = f p > > F P . v e r s i 0056160 o n \r l a > > D L . p a g e N u 0056200 m b e r = p a g e N u m b e 0056220 r \r c b > > C B . t r u e P a g 0056240 e N u m b e r = p a g e N u 0056260 m b e r \r \r / / P o s s i b l 0056300 y p u t 376 001 \0 8 305 i n t h 0056320 e d i s k a d d r e s s f 0056340 o r t h i s c o m m a n d . 0056360 \r / / D A e q f i l l I n 0056400 D A m e a n s i t i s a 0056420 l r e a d y s e t u p , o 0056440 r w i l l b e f i l l e d 0056460 \r / / i n f r o m t h e 0056500 p r e v i o u s l a b e l 0056520 t r a n s f e r . \r i f D A 0056540 n e f i l l I n D A t h e n 0056560 R e a l D i s k D A ( d i s k 0056600 , D A , l v c b > > C B . 0056620 d i s k A d d r e s s ) \r \r / / 0056640 f i l l i n c o m m a n d 0056660 , c h e c k i n g f o r i 0056700 l l e g a l a c t 376 001 \0 ^ y i 0056720 o n s \r l e t a c t = a c 0056740 t i o n - d i s k M a g i c 0056760 \r i f U s c ( a c t , 6 ) 0057000 g r 0 t h e n \r t e s 0057020 t a c t i o n e q B F S r 0057040 e s t o r e \r i f s 0057060 o \r [ \r 0057100 c b > > C B . d i s 0057120 k A d d r e s s . r e s t o r e 0057140 = 1 \r c b 0057160 > > C B . d i s k A d d r e s s 0057200 . t r a c k = 0 \r 0057220 a c t = D C s e e k 0057240 O n l y - d i s k M a g i c \r 0057260 ] \r 0057300 i f n o t S y s E r r ( a c 376 0057320 001 \0 037 s t i o n , e c B a d A 0057340 c t i o n ) \r c b > > C B . c o 0057360 m m a n d = ( t a b l e \r 0057400 [ r e a d H L D ; r e a 0057420 d L D ; r e a d D ; w r i t 0057440 e H L D ; w r i t e L D ; w 0057460 r i t e D ; s e e k O n l y 0057500 ] ) ! a c t \r \r c b > > C B . c 0057520 o m m a n d . e x c h a n g e D 0057540 i s k s = ( d i s k > > D S 0057560 K . d r i v e N u m b e r ) / 0057600 / < < D r i v e N u m b e r . 0057620 d r i v e \r c b > > C B . c o m 0057640 m a n d . p a r t i t i o n = 0057660 ( d i s k > > D S K . d r i v 0057700 e N u m b e r ) < < D r i v e N 0057720 u m b e 376 001 \0 r 363 r . p a r t i 0057740 t i o n \r \f \r / / B f s D o D 0057760 i s k C o m m a n d ( c o n t 0060000 ' d ) \r \r / / E n q u e u e 0060020 t h e K C B o n t h e d 0060040 i s k c o m m a n d c h a i 0060060 n \r / / * D i s a b l e I n t 0060100 e r r u p t s ( ) \r l e t p 0060120 = @ d i s k C o m m a n d \r i 0060140 f p n e 0 t h e n \r 0060160 [ \r [ \r 0060200 l e t n p = p > > C B . 0060220 l i n k \r i f n p 0060240 e q 0 b r e a k \r 0060260 p = n p \r ] 0060300 r e p e a t \r p > > C B 0060320 . l i n k = c 376 001 \0 270 < b \r 0060340 ] \r \r / / I f t h e r 0060360 e a r e n o d i s k c o 0060400 m m a n d s q u e u e d a t 0060420 t h e m o m e n t , b e 0060440 v e r y c a r e f u l \r / / 0060460 a b o u t p l o p p i n g d 0060500 o w n a p o i n t e r t o 0060520 o u r c b . W e m u s 0060540 t b e s u r e t h a t t 0060560 h e \r / / p r e v i o u s c 0060600 b f o r t h i s z o n e 0060620 h a s N O T e n c o u n t e 0060640 r e d a n e r r o r ( i t 0060660 ' s O K \r / / i f i t i 0060700 s f r e e o r h a s b e 0060720 e n t r a n s f e r r e d 376 001 0060740 \0 346 001 a l r e a d y , b u t 0060760 n o t O K i f t h e r e 0061000 \r / / i s a n e r r o r 0061020 o r i f i t h a s n o t 0061040 b e e n t r a n s f e r r e 0061060 d a t a l l ) \r i f @ d i 0061100 s k C o m m a n d e q 0 t 0061120 h e n \r [ \r / / t 0061140 a k e f r o m h e a d , a 0061160 d d t o t a i l = > t a 0061200 i l n e w e s t \r l e t 0061220 p r e v C b = c b z > > C 0061240 B Z . h e a d ? c b z > > C B 0061260 Z . t a i l , 0 \r l e t 0061300 s t a t = p r e v C b > > 0061320 C B . s t a t u s & D S T g 0061340 o o d 376 001 \0 ~ [ S t a t u s M a 0061360 s k \r i f p r e v C b 0061400 e q 0 % ( s t a t n e 0061420 0 & ( s t a t & D S T e 0061440 r r o r B i t s ) e q 0 ) 0061460 t h e n \r @ d i s k 0061500 C o m m a n d = c b \r 0061520 ] \r / / * E n a b l e I n t e 0061540 r r u p t s ( ) \r \r / / P u t 0061560 t h i s C B o n t h e 0061600 t a i l o f t h e a v a i 0061620 l a b l e q u e u e \r c b > > 0061640 C B . n e x t C B = 0 \r t e 0061660 s t c b z > > C B Z . h e a d 0061700 e q 0 \r i f s o c b 0061720 z > > C B Z . h e a d = c b 0061740 \r i f n o 376 001 \0 313 230 t c 0061760 b z > > C B Z . t a i l > > C B 0062000 . n e x t C B = c b \r c b z 0062020 > > C B Z . t a i l = c b \r 0062040 ] \r \r / / - - - - - - - - - - - 0062060 - - - - - - - - - - - - - - - - * 0062160 \r a n d B f s M a k e F p F r 0062200 o m L a b e l ( f p , l a ) 0062220 b e \r / / - - - - - - - - - - - 0062240 - - - - - - - - - - - - - - - - * 0062340 \r [ \r f p > > F P . s e r 376 001 \0 0062360 303 a i a l N u m b e r . w o r d 0062400 1 = l a > > D L . f i l e I 0062420 d . s e r i a l N u m b e r . w 0062440 o r d 1 \r f p > > F P . s e r i 0062460 a l N u m b e r . w o r d 2 = 0062500 l a > > D L . f i l e I d . s 0062520 e r i a l N u m b e r . w o r d 0062540 2 \r f p > > F P . v e r s i o n 0062560 = l a > > D L . f i l e I d 0062600 . v e r s i o n \r ] \r \f \r / / - 0062620 - - - - - - - - - - - - - - - - * 0062720 - - - - - - - - - - \r a n d B 0062740 f s G e t C b ( d i s k , c b 0062760 z , 376 001 \0 343 M d o n t C l e a 0063000 r , r e t u r n I f N o C B ; 0063020 n u m a r g s n a ) = v 0063040 a l o f \r / / - - - - - - - - - 0063060 - - - - - - - - - - - - - - - - * 0063160 - - \r / / H e r e w e w a 0063200 i t f o r a t r a n s f e 0063220 r t o c o m p l e t e . 0063240 I f , f o r s o m e r e a 0063260 s o n , 5 2 1 \r / / ( d i s 0063300 k C o m m a n d ) h a s b e 0063320 e n z e r o e d , w h i c h 0063340 m e a n s t h a t d i s k 0063360 h a s \r / / 376 001 \0 344 P g o n 0063400 e i d l e w i t h o u t e 0063420 x e c u t i n g t h i s c o 0063440 m m a n d , w e f a k e a 0063460 n e r r o r \r / / i n t h 0063500 i s c o m m a n d i n o r 0063520 d e r t o g e t t h e r 0063540 e s t o f t h i s ( B f s 0063560 G e t C b ) c o d e \r / / e 0063600 x e c u t e d . T h e z o 0063620 n e w i l l b e r e b u i 0063640 l t , a n d t h e t r a n 0063660 s f e r r e - q u e u e d . \r 0063700 / / T h i s m e a n s t h 0063720 a t s e v e r a l c a l l e 0063740 r s o f t h e B f s a c 0063760 t i v e a t o n c e 376 001 \0 240 0064000 253 \r / / ( i . e . , d i s k 0064020 c o m m a n d s f r o m s 0064040 e v e r a l z o n e s a r e 0064060 q u e u e d ) s h o u l d 0064100 a l l \r / / w o r k : i f 0064120 n o e r r o r s h a p p e n 0064140 d u r i n g t r a n s f e r 0064160 , e v e r y t h i n g i s 0064200 f i n e . I f \r / / e r r 0064220 o r s o c c u r i n o n e 0064240 z o n e , a l l w i l l 0064260 s t o p . T h e n , a s 0064300 t h e c o n t r o l \r / / b 0064320 l o c k s b e c o m e " c l 0064340 e a n e d u p , " w e w i 0064360 l l e v e n t u a l l y f i 0064400 n 376 001 \0 240 337 d , i n e a c h 0064420 \r / / z o n e , o n e t h 0064440 a t w a s n o t e x e c u 0064460 t e d ( a n d w i t h t h 0064500 e d i s k i d l e ) . S 0064520 o t h e \r / / m e c h a n i 0064540 s m f o r " f a k i n g " 0064560 a n e r r o r ( D S T f a k 0064600 e E r r o r ) w i l l c a u 0064620 s e \r / / t h e p r o p e r 0064640 t r a n s f e r s t o b e 0064660 r e - q u e u e d . \r [ \r / / 0064700 F i n d t h e n e x t C 0064720 B \r l e t c b = c b z > > 0064740 C B Z . h e a d \r i f c b e 0064760 q 0 t e s t n a g e 4 0065000 & r e t 376 001 \0 232 301 u r n I f 0065020 N o C B \r i f s o r e s 0065040 u l t i s 0 \r i f n o t 0065060 S y s E r r ( c b z , e c B 0065100 f s Q u e u e ) \r \r / / H e r 0065120 e i s w h e r e w e w a 0065140 i t f o r c o m p l e t i o 0065160 n \r [ \r i f ( c b 0065200 > > C B . s t a t u s & D S 0065220 T d o n e B i t s ) n e 0 0065240 b r e a k \r t e s t @ d 0065260 i s k C o m m a n d e q 0 0065300 & ( c b > > C B . s t a t u s 0065320 & D S T d o n e B i t s ) 0065340 e q 0 \r i f s o 0065360 c b > > C B . s t a t u s = 0065400 D S T f a k e E r r o 376 001 \0 v 035 0065420 r \r i f n o t i f 0065440 n a g e 4 & r e t u r 0065460 n I f N o C B r e s u l t i s 0065500 0 \r I d l e ( ) / / 0065520 L e t s o m e o n e e l s e 0065540 i n \r ] r e p e a t \r 0065560 \r / / D e q u e u e i t \r c 0065600 b z > > C B Z . h e a d = c 0065620 b > > C B . n e x t C B \r \r / / 0065640 R e m o v e s e a l \r c b > 0065660 > C B . c o m m a n d . s h o r 0065700 t S e a l = 0 \r \r / / T h 0065720 i s b l o c k r e t u r n s 0065740 t r u e i f f t h e c b 0065760 c o r r e s p o n d s t o 0066000 a c o m p l e t e d t r a n 0066020 376 001 \0 266 021 s f e r . \r i f v a 0066040 l o f \r [ \r / / T 0066060 h e r e a r e v a r i o u s 0066100 w a y s t h a t c b c a 0066120 n b e f o u n d u s a b l 0066140 e : \r l e t s = c b 0066160 > > C B . s t a t u s & D S 0066200 T g o o d S t a t u s M a s k \r 0066220 i f s e q D S T f r 0066240 e e S t a t u s r e s u l t i 0066260 s f a l s e \r \r c o m p 0066300 i l e i f d e b u g t h e n 0066320 \r [ \r B 0066340 F S E v e n t ( c b ) \r 0066360 i f B F S E r r o r R a t 0066400 e n e 0 t h e n \r 0066420 376 001 \0 F 277 [ 0066440 / / r c l 0066460 k ; m o v 1 0 ; j m p 0066500 1 , 3 \r l e t 0066520 r = ( t a b l e [ 6 1 0066540 0 0 3 b ; 1 2 1 0 0 0 b ; 1 0066560 4 0 1 b ] ) ( ) \r 0066600 r = r r s h i f t 0066620 ( ( t a b l e [ 6 1 0 1 4 b 0066640 ; 1 4 0 1 b ] ) ( ) < < V E 0066660 R S . e n g g r 1 ? 2 , 0066700 6 ) \r i f ( 0066720 r & 7 7 b ) l s B F S E 0066740 r r o r R a t e t h e n s 0066760 = 0 \r ] \r 0067000 ] \r \r / / R e 0067020 s t o r e c o m m 376 001 \0 215 265 a 0067040 n d s c a n o n l y b e 0067060 i n i t i a t e d f r o m w 0067100 i t h i n B f s G e t C b , \r 0067120 / / s o t h i s i 0067140 s o u r c o m m a n d , n 0067160 o t t h e c l i e n t ' s . 0067200 T r e a t c b a s f r 0067220 e e . \r i f c b > > C B 0067240 . d i s k A d d r e s s . r e s 0067260 t o r e e q 1 r e s u l t 0067300 i s f a l s e \r \r i f 0067320 s e q D S T g o o d S t a t 0067340 u s r e s u l t i s t r u e 0067360 \r \f \r / / B f s G e t C b ( 0067400 c o n t ' d ) \r \r / / E 0067420 r r o r . W a i t f o r 376 0067440 001 \0 n q t h e d i s k t o 0067460 s t o p s p i n n i n g b 0067500 e f o r e s t a r t i n g r 0067520 e c o v e r y . \r u n t i 0067540 l @ d i s k C o m m a n d e 0067560 q 0 d o I d l e ( ) \r \r 0067600 / / A l t o I I s g e 0067620 t l o t s o f d a t a l 0067640 a t e e r r o r s . M c C 0067660 r e i g h t & B o g g s \r 0067700 / / c o n j e c t u r e 0067720 t h a t t h e r e i s a 0067740 m i s s i n g T A S K i n 0067760 t h e m i c r o c o d e s 0070000 o m e w h e r e . \r / / 0070020 A s m a l l p i e c e o f 0070040 h a r 376 001 \0 204 | d w a r e a 0070060 n d a l o g i c a n a l y 0070100 z e r a r e n e e d e d t 0070120 o f i n d i t . \r / / 0070140 I n t h e m e a n t i m 0070160 e , w e w i l l j u s t 0070200 r e t r y d a t a l a t e s 0070220 f o r e v e r . . . \r l 0070240 e t e c = c b z > > B F S 0070260 C B Z . b f s E r r o r C o u n 0070300 t \r i f c b > > C B . s 0070320 t a t u s . d a t a L a t e e 0070340 q 0 t h e n c b z > > B F 0070360 S C B Z . b f s E r r o r C o u 0070400 n t = e c + 1 \r i f 0070420 c b z > > B F S C B Z . b f s 0070440 E r r o r C o u n 376 001 \0 6 032 t 0070460 g e d i s k > > D S K . r e t 0070500 r y C o u n t t h e n \r 0070520 [ \r l e t e 0070540 r r o r R t n = c b z > > C 0070560 B Z . e r r o r R t n \r 0070600 ( @ e r r o r R t n ) ( e r 0070620 r o r R t n , c b , e c U n 0070640 R e c o v D i s k E r r o r ) \r 0070660 r e s u l t i s t 0070700 r u e / / I f e r r o r R 0070720 t n r e t u r n s , a c t 0070740 l i k e c o m m a n d c o m 0070760 p l e t e d O K \r 0071000 ] \r \r c b z > > C B Z . e 0071020 r r o r D A = V i r t u a l 0071040 D i s k D A ( d i s k , l 376 001 0071060 \0 330 ( v c b > > C B . d i s k 0071100 A d d r e s s ) \r i f c 0071120 b > > C B . s t a t u s . f i n 0071140 a l S t a t u s e q c h e c 0071160 k E r r o r t h e n \r 0071200 c b z > > B F S C B Z . s a 0071220 w C h e c k E r r o r = t r 0071240 u e \r \r / / N o w r e 0071260 b u i l d t h e c b z : \r 0071300 I n i t i a l i z e D i s k 0071320 C B Z ( d i s k , c b z , c 0071340 b > > C B . t r u e P a g e N u 0071360 m b e r ) \r \r / / I f 0071400 t h e e r r o r c o u n t 0071420 i s l a r g e e n o u g h , 0071440 i n i t i a t e a r e s t 0071460 o r e 376 001 \0 1 257 . \r / / 0071500 N o t e t h a t t h e c o 0071520 m m a n d i s i s s u e d , 0071540 b u t w e d o n o t w 0071560 a i t t o \r / / b e 0071600 s u r e t h a t i t c o 0071620 m p l e t e s . \r i f e 0071640 c g r ( d i s k > > D S K . 0071660 r e t r y C o u n t r s h i f 0071700 t 1 ) t h e n \r 0071720 [ \r @ d i s k A d d 0071740 r e s s = - 1 \r 0071760 D o D i s k C o m m a n d ( d i 0072000 s k , G e t D i s k C b ( d i 0072020 s k , c b z ) , 0 , c b z 0072040 > > C B Z . e r r o r D A , 0 0072060 , \r 376 001 \0 177 217 c b 0072100 z > > C B Z . c u r r e n t P a 0072120 g e , B F S r e s t o r e ) \r 0072140 ] \r R e t u r 0072160 n T o ( c b z > > C B Z . r e t 0072200 r y ) \r ] t h e n \r 0072220 [ \r / / c b w a s 0072240 f o r a s u c c e s s f u l 0072260 l y c o m p l e t e d t r a 0072300 n s f e r . \r / / M o v 0072320 e s o m e u s e f u l s t 0072340 u f f f r o m l a b e l t 0072360 o c b z , t h e n c a l l 0072400 c l e a n u p r o u t i n e 0072420 . \r c b z > > C B Z . c u 0072440 r r e n t N u m C h a r s = 0072460 c b > > C B . l a b e l A 376 001 \0 0072500 332 025 d d r e s s > > D L . n u m 0072520 C h a r s \r c b z > > C B 0072540 Z . n e x t D A = V i r t u 0072560 a l D i s k D A ( d i s k , l 0072600 v c b > > C B . l a b e l A d 0072620 d r e s s > > D L . n e x t ) \r 0072640 c b z > > C B Z . e r r o 0072660 r C o u n t = 0 / / a l 0072700 s o c l e a r s B F S C B Z 0072720 . s a w C h e c k E r r o r \r 0072740 c b z > > C B Z . c l e a n 0072760 u p R o u t i n e ( d i s k , 0073000 c b , c b z ) \r ] \r u n 0073020 l e s s n a g e 3 & d 0073040 o n t C l e a r d o Z e r o 0073060 ( c b , l V a r C B ) \r r e s 0073100 u l 376 001 \0 255 v t i s c b \r ] \r 0073120 \f \r / / - - - - - - - - - - - - 0073140 - - - - - - - - - - - - - - - - * 0073220 - - - - - - - - - - - - - - - \r 0073240 a n d B F S A c t O n P a g e 0073260 s ( d i s k , C A s , D A s 0073300 , f p , f i r s t P a g e , 0073320 l a s t P a g e , a c t i o 0073340 n , \r l v N u m C h a r s , 0073360 l a s t A c t i o n , f i x 0073400 e d C A , c l e a n u p R o u 0073420 t i n e , e r r o r R t n , \r 0073440 r e t u r n O n C h e c k E 0073460 r r o r , h i n t L a s t P a 0073500 g e ; n u m 376 001 \0 } 4 a r g s 0073520 n a ) = v a l o f \r / / - 0073540 - - - - - - - - - - - - - - - - * 0073640 - - - - - - - - - - \r / / R e 0073660 t u r n s t h e p a g e n 0073700 u m b e r o f t h e l a s 0073720 t p a g e s u c c e s s f u 0073740 l l y a c t e d o n . \r / / 0073760 C A s ( c o r e a d d r e 0074000 s s e s ) a n d D A s ( d 0074020 i s k a d d r e s s e s ) a 0074040 r e v e c t o r s \r / / i 0074060 n d e x e d b y p a g e n 0074100 u m b e r ( e . g . 376 001 \0 245 0074120 376 C A s ! f i r s t P a g e ) . 0074140 \r / / T h e a r g u m e n t 0074160 s f o l l o w i n g a c t i 0074200 o n a r e o p t i o n a l ; 0074220 i f o n e o f t h e m 0074240 i s \r / / o m i t t e d o 0074260 r 0 , t h e d e f a u l t 0074300 a c t i o n i s t a k e n 0074320 . \r / / I f r e t u r n O n 0074340 C h e c k E r r o r i s t r 0074360 u e , A c t O n P a g e s r 0074400 e t u r n s m i n u s ( t h 0074420 e n u m b e r o f \r / / 0074440 t h e l a s t p a g e s u 0074460 c c e s s f u l l y r e a d 0074500 + 1 0 0 b ) a s s o o n 0074520 a 376 001 \0 q 305 s t h e d i s k 0074540 r e p o r t s a \r / / c 0074560 h e c k e r r o r . \r [ \r D e 0074600 f a u l t A r g s ( l v n a , 0074620 - 7 , l v n a , a c t i 0074640 o n , 0 , B f s D e f a u l 0074660 t C l e a n u p R t n , \r 0 , 0074700 f a l s e , l a s t P a g e 0074720 ) \r \r / / I n i t i a l i z e 0074740 f o r t r a n s f e r s \r l 0074760 e t r e s u l t = n i l \r 0075000 l e t c b z = v e c C B 0075020 z o n e L e n g t h \r I n i t i 0075040 a l i z e D i s k C B Z ( d i s 0075060 k , c b z , f i r s t P a g 0075100 e , C B z o n e L e n g t h , 0075120 A r e t r 376 001 \0 w _ y , e r 0075140 r o r R t n ) \r c b z > > C B Z 0075160 . D A s = D A s \r c b z > > 0075200 C B Z . c l e a n u p R o u t i 0075220 n e = c l e a n u p R o u t 0075240 i n e \r i f U s c ( h i n t L 0075260 a s t P a g e - f i r s t P a g 0075300 e , l a s t P a g e - f i r s 0075320 t P a g e ) g r 0 t h e n 0075340 \r h i n t L a s t P a g e 0075360 = l a s t P a g e / / 0075400 h i n t L a s t P a g e n o t 0075420 i n [ f i r s t P a g e . . 0075440 l a s t P a g e ] \r \r / / E a 0075460 c h c b i s u s e d t w 0075500 i c e : \r / / \t t o h o l d 0075520 t h e D L f o r 376 001 \0 217 344 0075540 p a g e i - 1 ( i f c h a 0075560 i n i n g ) , a n d \r / / \t t 0075600 o h o l d t h e K C B f 0075620 o r p a g e i . \r / / I t 0075640 i s n ' t r e u s e d u n 0075660 t i l t h e c o m m a n d 0075700 f o r p a g e i i s d o 0075720 n e , a n d t h a t i s \r 0075740 / / g u a r a n t e e d t o 0075760 b e a f t e r t h e D L 0076000 f o r p a g e i - 1 i s 0076020 n o l o n g e r n e e d e 0076040 d , \r / / s i n c e e v e r 0076060 y t h i n g i s d o n e s 0076100 t r i c t l y s e q u e n t i 0076120 a l l y b y p a g e n u m 0076140 376 001 \0 + 026 b e r . \r \r / / I n 0076160 s i d e t h i s l o o p , 0076200 t h e r e m a y b e d i s 0076220 k c o m m a n d s p e n d i 0076240 n g \r / / ( i . e . p o i n 0076260 t e d t o b y d i s k C o 0076300 m m a n d ) . B f s D o D i 0076320 s k C o m m a n d \r / / i n 0076340 i t i a t e s t h e m ( a l 0076360 s o B f s G e t C b m a y 0076400 i n i t i a t e a r e s t o 0076420 r e ) . H e n c e \r / / d 0076440 o n o t s i m p l y " r e 0076460 t u r n " f r o m i n s i d 0076500 e t h e l o o p u n l e s 0076520 s y o u a r e \r / / a b s 0076540 o l u t e 376 001 \0 332 210 l y s u r 0076560 e t h a t n o d i s k a 0076600 c t i v i t y i s q u e u e 0076620 d . \r \r / / N o t e : i f 0076640 t h e h i n t L a s t P a g e 0076660 l o o k s r e a s o n a b l 0076700 e a n d i s l e s s t h 0076720 a n l a s t P a g e , \r / / 0076740 w e t r a n s f e r p a g e 0076760 s u p t o t h a t p o i 0077000 n t , t h e n c h e c k t 0077020 o s e e w h e t h e r t h 0077040 e l a s t \r / / p a g e t 0077060 r a n s f e r r e d r e a l l 0077100 y w a s t h e l a s t p 0077120 a g e o f t h e f i l e . 0077140 I f s o , w 376 001 \0 264 256 e 0077160 r e t u r n \r / / w i t h o 0077200 u t h a v i n g c a u s e d 0077220 t h e d i s k t o s e e 0077240 k t o c y l i n d e r 0 0077260 a s a r e s u l t o f \r / 0077300 / c h a i n i n g f o r w a 0077320 r d f r o m t h e l a s t 0077340 p a g e . I f t h e h 0077360 i n t w a s w r o n g , w 0077400 e h a v e t o \r / / q u e 0077420 u e u p t h e r e m a i n 0077440 d e r o f t h e t r a n s 0077460 f e r s ; t h i s c o s t s 0077500 a n e x t r a d i s k r 0077520 o t a t i o n . \r \f \r / / B F 0077540 S A c t O n P a g e s ( c o 376 0077560 001 \0 n i n t ' d ) \r \r A r e t r 0077600 y : \t / / G e t D i s k C b d 0077620 o e s a n o n - l o c a l 0077640 G O T O h e r e w h e n a 0077660 n e r r o r h a p p e n s \r 0077700 [ \r / / G e t a 0077720 f i r s t C B \r r e s 0077740 u l t = h i n t L a s t P a 0077760 g e \r l e t c b = G 0100000 e t D i s k C b ( d i s k , c 0100020 b z ) \r f o r p a g e N 0100040 u m b e r = c b z > > C B Z 0100060 . c u r r e n t P a g e t o 0100100 h i n t L a s t P a g e d o \r 0100120 [ \r i f 0100140 D A s ! p a g e N u m b e r 0100160 e q e 376 001 \0 S 257 o f D A t h 0100200 e n / / L a s t p a g e 0100220 h a s b e e n f i x e d 0100240 u p \r [ r e 0100260 s u l t = p a g e N u m b e 0100300 r - 1 ; b r e a k ] \r \r 0100320 l e t t h i s C B a c 0100340 t i o n = p a g e N u m b e 0100360 r e q l a s t P a g e ? l 0100400 a s t A c t i o n , a c t i o 0100420 n \r i f t h i s C 0100440 B a c t i o n e q D C d o N 0100460 o t h i n g l o o p \r \r 0100500 / / F o l l o w i n g 0100520 r e t u r n g u a r a n t e e 0100540 s n o d i s k a c t i v i 0100560 t y , b e c a u 376 001 \0 ^ 4 s e 0100600 w e j u s t \r / 0100620 / r e t u r n e d f r o m 0100640 a n e r r o r t h a t w 0100660 i l l n o t y e t h a v e 0100700 d o n e a r e s t o r e . 0100720 \r i f r e t u r n 0100740 O n C h e c k E r r o r & c 0100760 b z > > B F S C B Z . s a w C h 0101000 e c k E r r o r & \r 0101020 ( c b z > > B F S C B Z . b 0101040 f s E r r o r C o u n t g e 0101060 d i s k > > D S K . r e t r y C 0101100 o u n t r s h i f t 1 ) t 0101120 h e n \r r e s 0101140 u l t i s - ( p a g e N u m b 0101160 e r + 7 7 B ) \r \r 376 001 0101200 \0 006 002 / / I f w e a r e 0101220 c h a i n i n g , c a u s e 0101240 t h i s c o m m a n d t o 0101260 f i l l i n \r / 0101300 / t h e d i s k a d d r 0101320 e s s p a r t o f t h e 0101340 n e x t c o m m a n d . \r 0101360 l e t n e x t C b = 0101400 G e t D i s k C b ( d i s k , 0101420 c b z ) \r c b > > 0101440 C B . l a b e l A d d r e s s 0101460 = D A s ! ( p a g e N u m b e 0101500 r + 1 ) e q f i l l I n D A 0101520 ? \r l v n e x t 0101540 C b > > C B . d i s k A d d r e 0101560 s s , l v n e x t C b > > C 0101600 B . l 376 001 \0 224 353 a b e l \r 0101620 D o D i s k C o m m a n d 0101640 ( d i s k , c b , ( f i x e 0101660 d C A n e 0 ? f i x e d C 0101700 A , C A s ! p a g e N u m b e 0101720 r ) , \r D A s ! p 0101740 a g e N u m b e r , f p , p 0101760 a g e N u m b e r , t h i s C 0102000 B a c t i o n ) \r c 0102020 b = n e x t C b \r 0102040 ] \r w h i l e c b z > 0102060 > C B Z . h e a d n e 0 d 0102100 o G e t D i s k C b ( d i s k 0102120 , c b z ) \r i f r e s 0102140 u l t e q l a s t P a g e 0102160 % D A s ! ( r e s u l t + 1 ) 0102200 e q e o f D 376 001 \0 374 201 A t 0102220 h e n b r e a k \r \r / / 0102240 S t o p p e d b e f o r e 0102260 l a s t P a g e b e c a u s e 0102300 h i n t L a s t P a g e w a 0102320 s l e s s t h a n l a s t 0102340 P a g e , \r / / b u t 0102360 t h e h i n t w a s w r o 0102400 n g . I g n o r e t h e 0102420 h i n t a n d r e s u m e 0102440 t h e t r a n s f e r . \r 0102460 h i n t L a s t P a g e = 0102500 l a s t P a g e \r I n i t 0102520 i a l i z e D i s k C B Z ( d i 0102540 s k , c b z , r e s u l t + 0102560 1 ) \r ] r e p e a t \r \r 0102600 @ l v N u m C h a r s = 376 001 \0 0102620 374 255 c b z > > C B Z . c u r r 0102640 e n t N u m C h a r s \r r e s u 0102660 l t i s r e s u l t \r ] \r \r / 0102700 / - - - - - - - - - - - - - - - 0102720 - - - - - - - - - - - - - - - - * 0103000 - - - - - - - - - - - - \r a n d 0103020 B f s D e f a u l t C l e a n 0103040 u p R t n ( d i s k , c b , 0103060 c b z ) b e \r / / - - - - - - 0103100 - - - - - - - - - - - - - - - - * 0103200 - - - - - \r / / T h e d e f 0103220 a u 376 001 \0 003 350 l t c l e a n u 0103240 p R o u t i n e s u b s t i t 0103260 u t e s t h e a c t u a l 0103300 v i r t u a l D A \r / / f 0103320 o r e a c h i n s t a n c e 0103340 o f f i l l I n D A i n 0103360 t h e D A s v e c t o r . \r 0103400 [ \r l e t l v D A = l v 0103420 ( ( c b z > > C B Z . D A s ) ! 0103440 ( c b > > C B . t r u e P a g e 0103460 N u m b e r ) ) \r i f l v D A 0103500 ! 1 e q f i l l I n D A t 0103520 h e n l v D A ! 1 = c b z 0103540 > > C B Z . n e x t D A \r i f 0103560 l v D A ! - 1 e q f i l l I 0103600 n D A t h e n \r l v D A 0103620 ! - 1 = V 376 \0 : 355 * i r t u 0103640 a l D i s k D A ( d i s k , l 0103660 v c b > > C B . l a b e l A d 0103700 d r e s s > > D L . p r e v i o 0103720 u s ) \r ] \r 377 \0 \0 B F S W r i t 0103740 e . b c p l \0 373 230 005 366 276 \0 \0 376 001 0103760 \0 241 / / / B F S W r i t e . B 0104000 c p l - - R o u t i n e s 0104020 t o e x t e n d f i l e s . 0104040 \r / / C o p y r i g h t X 0104060 e r o x C o r p o r a t i o n 0104100 1 9 7 9 , 1 9 8 1 \r / / L 0104120 a s t m o d i f i e d O c t 0104140 o b e r 2 7 , 1 9 8 1 3 0104160 : 5 3 P M b y B o g g s \r 0104200 \r g e t " A l t o F i l e S y 0104220 s . d " \t / / D e f i n i t i 0104240 o n s f o r s t r u c t u r 0104260 e s i n t h e f i l e s 0104300 y s t e m \r g e t " D i s k s 0104320 . d " \t \t / / D e f i n i t i 0104340 o n s f o r t h e d i s k 0104360 o b 376 001 \0 251 x j e c t \r g e t 0104400 " B f s . d " \t \t / / D e f 0104420 i n i t i o n s f o r t h e 0104440 D i a b l o 3 1 / 4 4 d i 0104460 s k \r \r e x t e r n a l \r [ \r / 0104500 / o u t g o i n g p r o c e 0104520 d u r e s \r B F S W r i t e P a 0104540 g e s ; B F S A s s i g n D i 0104560 s k P a g e \r \r / / i n c o m 0104600 i n g p r o c e d u r e s f 0104620 r o m B F S B a s e . b c p l 0104640 \r D e f a u l t B f s E r r o r 0104660 R t n \r \r / / i n c o m i n g 0104700 p r o c e d u r e s f r o m 0104720 t h e O S \r I n i t i a l i 0104740 z e D i s k C B Z ; G e t D i 0104760 s k C b ; D o 376 001 \0 ~ $ D i s 0105000 k C o m m a n d \r A c t O n D i 0105020 s k P a g e s ; A s s i g n D 0105040 i s k P a g e \r V i r t u a l D 0105060 i s k D A ; R e a l D i s k D 0105100 A \r R e a d D D P a g e ; L o 0105120 c k D D ; U n l o c k D D \r M 0105140 o v e B l o c k ; Z e r o ; 0105160 S e t B l o c k \r D e f a u l t 0105200 A r g s \r \r / / i n c o m i n 0105220 g s t a t i c s F r o m B 0105240 f s M l . A s m \r f r e e P a g 0105260 e F p ; f r e e P a g e F i d 0105300 ; o n e B i t s \r ] \r \f \r / / 0105320 - - - - - - - - - - - - - - - - * 0105360 - - - - - - - - - - - - - 376 001 \0 0105400 t 326 - - - - - - - - - - - - - - 0105420 - - - - - - - - - - - - - - - - 0105440 - \r l e t B F S W r i t e P a 0105460 g e s ( d i s k , C A s , D 0105500 A s , f p , f i r s t P a g 0105520 e , l a s t P a g e , l a s 0105540 t A c t i o n , \r l v N u m 0105560 C h a r s , l a s t N u m C h 0105600 a r s , f i x e d C A , n i 0105620 l , e r r o r R t n , n i l 0105640 , h i n t L a s t P a g e ; \r 0105660 n u m a r g s n a ) = 0105700 v a l o f \r / / - - - - - - - - 0105720 - - - - - - - - - - - - - - - - * 0106000 - - 376 001 \0 357 200 - - - - - - - - - 0106020 - - - - - - - - - \r / / N o t 0106040 e t h a t D A s ! ( f i r s 0106060 t p a g e - 1 ) w i l l b e 0106100 r e f e r e n c e d e x c e 0106120 p t w h e n t h e \r / / 0106140 l a b e l o f f i r s t P a 0106160 g e d o e s n ' t n e e d 0106200 t o b e r e w r i t t e n . 0106220 \r / / T h e a r g u m e n t 0106240 s f o l l o w i n g l a s t 0106260 P a g e a r e o p t i o n a 0106300 l , a s f o r A c t O n D 0106320 i s k P a g e s \r [ \r l e t n 0106340 u m C h a r s , f i r s t N e 0106360 w P a g e = n i l , n i l 0106400 \r D e f a u l 376 001 \0 B 265 t A r g 0106420 s ( l v n a , 6 , 0 , 0 0106440 , B F S w o r d s P e r P a g 0106460 e * 2 , 0 , n i l , \r l v 0106500 D e f a u l t B f s E r r o r 0106520 R t n , n i l , 0 ) \r i f 0106540 l a s t A c t i o n e q 0 0106560 t h e n l a s t A c t i o n 0106600 = D C w r i t e D \r i f l v 0106620 N u m C h a r s e q 0 t h 0106640 e n l v N u m C h a r s = 0106660 l v n u m C h a r s \r \r i f 0106700 l a s t A c t i o n n e - 1 0106720 t h e n \r [ \r / / 0106740 F i r s t p r o c e e d a 0106760 s f o r a r e a d u n t 0107000 i l t h e r e a r e 376 001 \0 274 0107020 n o m o r e \r / / 0107040 p r e a l l o c a t e d p a 0107060 g e s t o w r i t e i n t 0107100 o \r t e s t D A s ! f i 0107120 r s t P a g e e q f i l l I 0107140 n D A \r i f s o f 0107160 i r s t N e w P a g e = f i 0107200 r s t P a g e \r i f 0107220 n o t \r [ \r 0107240 f i r s t P a g 0107260 e = A c t O n D i s k P a g 0107300 e s ( d i s k , C A s , D A 0107320 s , f p , f i r s t P a g e 0107340 , \r l a s t 0107360 P a g e , D C w r i t e D , 0107400 l v N u m C h a r s , l a s t 0107420 A 376 001 \0 357 301 c t i o n , f i x 0107440 e d C A , 0 , e r r o r R t 0107460 n , \r f a l 0107500 s e , h i n t L a s t P a g e 0107520 ) \r i f f i 0107540 r s t P a g e e q l a s t P 0107560 a g e & ( l a s t A c t i o 0107600 n n e D C w r i t e D % \r 0107620 @ l v N u m 0107640 C h a r s e q l a s t N u m 0107660 C h a r s ) r e s u l t i s 0107700 l a s t P a g e \r 0107720 f i r s t N e w P a g e = 0107740 f i r s t P a g e + 1 \r 0107760 ] \r \r / / 0110000 c o d e t o a s s i g n m 0110020 o r e p a 376 001 \0 9 5 g e s \r 0110040 [ \r l e t 0110060 s i n k = v e c 2 5 6 \r 0110100 f o r i = f i 0110120 r s t N e w P a g e t o l a 0110140 s t P a g e d o \r 0110160 [ \r D A 0110200 s ! i = A s s i g n D i s k 0110220 P a g e ( d i s k , D A s ! ( 0110240 i - 1 ) ) \r i 0110260 f D A s ! i e q - 1 t h 0110300 e n \r [ 0110320 ( @ e r r o r R t n ) ( e r r 0110340 o r R t n , 0 , e c D i s k 0110360 F u l l ) ] r e p e a t \r 0110400 ] \r 0110420 A c t O n D i s k P a 376 001 \0 207 361 0110440 g e s ( d i s k , 0 , D A s 0110460 , f r e e P a g e F p , f i 0110500 r s t N e w P a g e , \r 0110520 l a s t P a g e , D C r 0110540 e a d L D , 0 , 0 , s i n 0110560 k , C h e c k F r e e P a g e 0110600 , e r r o r R t n ) \r 0110620 f o r i = f i r s t N 0110640 e w P a g e t o l a s t P a 0110660 g e d o \r [ 0110700 \r D A s ! f i 0110720 r s t N e w P a g e = D A s 0110740 ! i \r i f D 0110760 A s ! i n e f i l l I n D A 0111000 t h e n f i r s t N e w P a 0111020 g e = f i r s t N e w P a g 0111040 376 001 \0 030 L e + 1 \r 0111060 ] \r ] r e p 0111100 e a t u n t i l f i r s t N e 0111120 w P a g e g r l a s t P a g 0111140 e \r ] \r \f \r / / B F S W 0111160 r i t e P a g e s ( c o n t ' 0111200 d ) \r \r / / A l l t h e p 0111220 a g e s h a v e b e e n c 0111240 h e c k e d . W r i t e l 0111260 a b e l s a n d d a t a . \r 0111300 / / T h e C B z o n e r 0111320 e s u e s t h e s a m e s 0111340 t a c k s p a c e a s t h 0111360 e s i n k v e c t o r . \r @ 0111400 l v N u m C h a r s = l a s 0111420 t N u m C h a r s \r l e t c b 0111440 z = v 376 001 \0 ` 362 e c C B z 0111460 o n e L e n g t h \r I n i t i a 0111500 l i z e D i s k C B Z ( d i s k 0111520 , c b z , f i r s t P a g e 0111540 , C B z o n e L e n g t h , 0111560 W r e t r y , e r r o r R t n 0111600 ) \r \r W r e t r y : \r [ \r 0111620 f o r i = c b z > > 0111640 C B Z . c u r r e n t P a g e 0111660 t o l a s t P a g e d o \r 0111700 [ \r l e t 0111720 c b = G e t D i s k C b ( 0111740 d i s k , c b z ) \r \r 0111760 / / S e t u p e o f D 0112000 A a s t h e p a g e a f 0112020 t e r t h e e n d o f t 0112040 h e f i l e \r 376 001 \0 337 232 0112060 i f ( ( i e q l a s 0112100 t P a g e & l a s t N u m C 0112120 h a r s n e B F S w o r d s 0112140 P e r P a g e * 2 ) % \r 0112160 ( D A s ! ( i + 1 ) e 0112200 q f i l l I n D A ) ) t h e 0112220 n D A s ! ( i + 1 ) = e o 0112240 f D A \r \r / / S e 0112260 t u p l a b e l t o b e 0112300 w r i t t e n o n t h i s 0112320 p a g e \r R e a l 0112340 D i s k D A ( d i s k , D A s 0112360 ! ( i + 1 ) , l v c b > > C 0112400 B . l a b e l . n e x t ) \r 0112420 R e a l D i s k D A ( d 0112440 i s k , D A s ! ( i - 1 ) , 376 0112460 001 \0 % 236 l v c b > > C B . l 0112500 a b e l . p r e v i o u s ) \r 0112520 c b > > C B . l a b e 0112540 l . n u m C h a r s = i e 0112560 q l a s t P a g e ? l a s t 0112600 N u m C h a r s , B F S w o r 0112620 d s P e r P a g e * 2 \r \r 0112640 D o D i s k C o m m a n d 0112660 ( d i s k , c b , ( f i x e 0112700 d C A n e 0 ? f i x e d C 0112720 A , C A s ! i ) , \r 0112740 D A s ! i , f p , i , 0112760 D C w r i t e L D ) \r 0113000 ] \r w h i l e c b z > 0113020 > C B Z . h e a d n e 0 d 0113040 o G e t D i s k C b ( d i s k 0113060 , c b 376 001 \0 231 ( z ) \r ] 0113100 / / E n d o f W r e t r 0113120 y b l o c k \r \r r e s u l t i 0113140 s l a s t P a g e \r ] \r \r / / 0113160 - - - - - - - - - - - - - - - - * 0113260 - - - - - - - - - - - - \r a n d 0113300 C h e c k F r e e P a g e ( d 0113320 i s k , c b , c b z ) b e 0113340 \r / / - - - - - - - - - - - - - 0113360 - - - - - - - - - - - - - - - - * 0113440 - - - - - - - - - - - - - - - \r 0113460 [ \r l e t f i d 376 001 \0 025 343 = 0113500 l v c b > > C B . l a b e l 0113520 A d d r e s s > > D L . f i l e 0113540 I d \r f o r i = 0 t o 0113560 l F I D - 1 d o i f f i d 0113600 ! i n e f r e e P a g e F i 0113620 d ! i t h e n / / o o p ! 0113640 b i t t a b l e l i e d \r 0113660 ( c b z > > C B Z . D A s 0113700 ) ! ( c b > > C B . t r u e P a 0113720 g e N u m b e r ) = f i l l 0113740 I n D A \r ] \r \f \r / / - - - - - 0113760 - - - - - - - - - - - - - - - - * 0114060 - - - - - - - \r a n d B F 376 001 0114100 \0 336 @ S A s s i g n D i s k P a 0114120 g e ( d i s k , v d a , n i 0114140 l ; n u m a r g s n a ) = 0114160 v a l o f \r / / - - - - - - - 0114200 - - - - - - - - - - - - - - - - * 0114300 - - - - - \r / / A s s i g n s 0114320 i n a s e q u e n t i a l 0114340 m a n n e r , i n o r d e 0114360 r o f i n c r e a s i n g \r 0114400 / / v i r t u a l d i s k 0114420 a d d r e s s . S e c o n 0114440 d a r g u m e n t i s t h 0114460 e V D A p r e v i o u s l y 0114500 \r / / 376 001 \0 203 A a s s i g n 0114520 e d ; t h e c o d e t r i 0114540 e s t o a s s i g n p a g 0114560 e s s e q u e n t i a l l y 0114600 i n t h i s c a s e . \r / / 0114620 H o w e v e r , f o r a 0114640 n e w f i l e t h e V D A 0114660 p a s s e d i s e o f D A 0114700 ; i n t h i s c a s e \r / 0114720 / t h e c o d e r e s u 0114740 m e s l o o k i n g i n t 0114760 h e b i t t a b l e w h e 0115000 r e i t l a s t l e f t 0115020 o f f \r / / t r y i n g t 0115040 o a l l o c a t e a f i l 0115060 e . T h e i d e a i s 0115100 t o r e d u c 376 001 \0 033 227 e b 0115120 i t t a b l e \r / / s c a 0115140 n n i n g t i m e a n d a 0115160 l s o p a g e i n / o u t s 0115200 . \r / / R e t u r n s - 1 0115220 i f t h e b i t t a b l e 0115240 i s f u l l ; e l s e t 0115260 h e V D A o f t h e p a 0115300 g e a s s i g n e d . \r / / 0115320 S p e c i a l t h r e e - a r 0115340 g u m e n t f o r d o e s 0115360 n o t r e a l l y d o a n 0115400 a s s i g n m e n t . \r / / 0115420 R e t u r n s f a l s e i f 0115440 V D A + 1 i s a s s i g n 0115460 e d ; t r u e i f i t i 0115500 s a v a i l a b l e . \r 376 001 \0 0115520 332 200 [ \r l e t d d M g r = 0115540 d i s k > > B F S D S K . d d M 0115560 g r \r L o c k D D ( d d M g r , 0115600 d i s k ) \r v d a = v d a 0115620 e q e o f D A ? d i s k > 0115640 > B F S D S K . l a s t P a g e 0115660 A l l o c , v d a + 1 \r \r / / 0115700 T h e f i r s t l K D H e 0115720 a d e r w o r d s o f D D 0115740 a r e n ' t b i t t a b l 0115760 e b i t s \r v d a = v d a 0116000 + b i t T a b l e B i a s \r 0116020 \r / / M a y h a v e t o 0116040 d o a s m a n y a s n + 0116060 2 i t e r a t i o n s , \r / / 0116100 w h e r e n i s t h e 0116120 n u 376 001 \0 O 220 m b e r o f b 0116140 i t t a b l e p a g e s . \r 0116160 l e t d i s k B T s i z e = 0116200 d i s k > > B F S D S K . d i 0116220 s k B T s i z e \r f o r i = 0116240 1 t o ( d i s k B T s i z 0116260 e + l K D H e a d e r ) r s h 0116300 i f t B F S l n W o r d s P e 0116320 r P a g e + 3 d o \r [ 0116340 \r / / A t t o p o f 0116360 l o o p : v d a = V D A 0116400 t o b e e x a m i n e d 0116420 n e x t . \r i f v d a < 0116440 < V D A . w o r d N u m g e 0116460 d i s k B T s i z e + l K D H e 0116500 a d e r t h e n \r 0116520 v d a = b 376 001 \0 224 021 i t T a 0116540 b l e B i a s / / W r a p 0116560 a r o u n d \r l e t p a 0116600 = v d a < < V D A . p a g e 0116620 N u m \r l e t d i s k B 0116640 T a d d r = R e a d D D P a 0116660 g e ( d d M g r , d i s k , 0116700 p a + 1 ) \r \r / / 0116720 T e s t t h e b i t c o r 0116740 r e s p o n d i n g t o " v 0116760 d a " . I f i t f a i l 0117000 s , t e s t t h e r e m a 0117020 i n d e r \r / / o f t 0117040 h e w o r d o n e b i t 0117060 a t a t i m e . \r l e 0117100 t w a = v d a < < V D A . 0117120 w o r d N u m I n P a g 376 001 \0 340 0117140 250 e \r l e t b i t M a s 0117160 k = o n e B i t s ! ( v d a 0117200 < < V D A . b i t N u m ) \r 0117220 [ \r l e t 0117240 f r e e = ( ( d i s k B T a 0117260 d d r ! w a ) & b i t M a s 0117300 k ) e q 0 \r i f 0117320 n a e q 3 t h e n [ 0117340 U n l o c k D D ( d d M g r , 0117360 d i s k ) ; r e s u l t i s 0117400 f r e e ] \r i f 0117420 f r e e t h e n \r 0117440 [ \r v d 0117460 a = v d a - b i t T a b 0117500 l e B i a s \r 0117520 d i s k B T a d d r ! w a = 0117540 ( 376 001 \0 344 230 d i s k B T a d d r 0117560 ! w a ) % b i t M a s k \r 0117600 d i s k > > B F 0117620 S D S K . f r e e P a g e s = 0117640 d i s k > > B F S D S K . f r 0117660 e e P a g e s - 1 \r 0117700 d i s k > > B F S D S K . 0117720 l a s t P a g e A l l o c = 0117740 v d a \r U n l 0117760 o c k D D ( d d M g r , d i s 0120000 k , t r u e ) / / m a r k 0120020 b t p a g e d i r t y \r 0120040 r e s u l t i s 0120060 v d a \r ] \r 0120100 b i t M a s k = 0120120 b i t M a s k r s h i f t 1 0120140 \r 376 001 \0 ` 032 v d a 0120160 = v d a + 1 \r ] 0120200 r e p e a t u n t i l b i t M 0120220 a s k e q 0 \r \r 0120240 / / N o w s e a r c h t h 0120260 e r e s t o f t h e p a 0120300 g e o n e w o r d a t a 0120320 t i m e . \r / / O n 0120340 t h e l a s t p a g e w e 0120360 m a y r u n p a s t t h 0120400 e e n d o f r e a l d a 0120420 t a , b u t t h a t ' s o 0120440 k \r / / b e c a u s e 0120460 o n t h e n e x t p a s s 0120500 v d a w i l l b e w r a 0120520 p p e d a r o u n d t o z 0120540 e r o . \r w a 376 001 \0 - 251 0120560 = w a + 1 r e p e a t u n t 0120600 i l w a g e B F S w o r d 0120620 s P e r P a g e % d i s k B 0120640 T a d d r ! w a n e - 1 \r \r 0120660 / / w a n o w a d d 0120700 r e s s e s a w o r d c o 0120720 n t a i n i n g o t h e r t 0120740 h a n - 1 i f o n e w a 0120760 s f o u n d . \r / / w 0121000 a e q B F S w o r d s P e r 0121020 P a g e o t h e r w i s e . \r 0121040 v d a = ( p a l s h 0121060 i f t B F S l n W o r d s P e 0121100 r P a g e + w a ) l s h i 0121120 f t 4 \r ] \r \r U n l o c 0121140 k D D ( d d M g r , d i s k ) 0121160 376 \0 " # Y \r r e s u l t i s - 0121200 1 / / B i t t a b l e 0121220 f u l l \r ] \r 377 \0 \0 B F S C r e 0121240 a t e . b c p l \0 373 224 006 ( 367 \0 \0 0121260 376 001 \0 324 327 / / B F S C r e a t 0121300 e . B c p l - - R o u t i n 0121320 e s t o c r e a t e a n d 0121340 d e l e t e f i l e s . \r 0121360 / / C o p y r i g h t X e r 0121400 o x C o r p o r a t i o n 1 0121420 9 7 9 \r / / L a s t m o d i 0121440 f i e d S e p t e m b e r 1 0121460 8 , 1 9 7 9 4 : 2 5 P M 0121500 b y T a f t \r \r g e t " A 0121520 l t o F i l e S y s . d " \t / / 0121540 D e f i n i t i o n s f o r 0121560 s t r u c t u r e s i n t 0121600 h e f i l e s y s t e m \r g 0121620 e t " D i s k s . d " \t \t / / 0121640 D e f i n i t i o n s f o r 0121660 t h e 376 001 \0 343 265 d i s k o 0121700 b j e c t \r g e t " B f s . d 0121720 " \t \t / / D e f i n i t i o n 0121740 s f o r t h e D i a b l o 0121760 3 1 / 4 4 d i s k \r \r e x t 0122000 e r n a l \r [ \r / / o u t g o 0122020 i n g p r o c e d u r e s \r B 0122040 F S C r e a t e F i l e ; B F 0122060 S D e l e t e P a g e s ; B F 0122100 S R e l e a s e D i s k P a g e 0122120 \r \r / / i n c o m i n g p r 0122140 o c e d u r e s \r A c t O n D i 0122160 s k P a g e s ; W r i t e D i 0122200 s k P a g e s \r D e l e t e D i 0122220 s k P a g e s ; R e l e a s e 0122240 D i s k P a g e \r R e a d D D P 0122260 a g e ; L o c k D 376 001 \0 234 024 D 0122300 ; U n l o c k D D \r D e f a u 0122320 l t A r g s ; D v e c \r M o v 0122340 e B l o c k ; Z e r o ; S e 0122360 t B l o c k \r R e a d C a l e n 0122400 d a r \r \r / / i n c o m i n g 0122420 s t a t i c s \r f r e e P a g 0122440 e F p ; o n e B i t s \r ] \r \r 0122460 m a n i f e s t b i t e S i z 0122500 e = 1 2 8 \r \f \r / / - - - - 0122520 - - - - - - - - - - - - - - - - * 0122620 - - - - - - - - \r l e t B F S 0122640 C r e a t e F i l e ( d i s k , 0122660 n a m e , f p , d i r F 376 0122700 001 \0 g 313 p , w o r d 1 , u s 0122720 e O l d F p , p a g e B u f ; 0122740 \r n u m a r g s n a ) 0122760 b e \r / / - - - - - - - - - - 0123000 - - - - - - - - - - - - - - - - * 0123100 - - \r / / C r e a t e a f 0123120 i l e b y w r i t i n g a 0123140 l e a d e r p a g e a n d 0123160 p a g e 1 . \r / / I f u 0123200 s e O l d F p , t h e r e w 0123220 a s a n e x i s t i n g f 0123240 i l e ; r e - u s e i t , 0123260 b u t c h a n g e t h e F 0123300 P . \r / 376 001 \0 250 371 / I f p a 0123320 g e B u f s u p p l i e d , 0123340 i t i s u s e d a s a 0123360 p a g e b u f f e r r a t h 0123400 e r t h a n D V e c i n g . 0123420 \r [ \r D e f a u l t A r g s ( l 0123440 v n a , 3 , 0 , 0 , f 0123460 a l s e , 0 ) \r i f p a g e 0123500 B u f e q 0 t h e n \r 0123520 [ \r p a g e B u f = 0123540 B F S w o r d s P e r P a g e \r 0123560 D v e c ( B F S C r e a t 0123600 e F i l e , l v p a g e B u 0123620 f ) \r ] \r l e t o l d F 0123640 p = v e c l F P ; M o v 0123660 e B l o c k ( o l d F p , f p 0123700 , l F P ) \r \r / 376 001 \0 ' 302 / 0123720 g e n e r a t e a n e w F 0123740 P : \r Z e r o ( f p , l F P ) 0123760 \r f p > > F P . v e r s i o n 0124000 = 1 \r l e t l a s t S n = 0124020 l v d i s k > > B F S D S K 0124040 . l a s t S n \r l e t t = 0124060 l a s t S n > > S N . p a r t 2 0124100 + 1 ; l a s t S n > > S N . p 0124120 a r t 2 = t \r i f t e q 0124140 0 t h e n l a s t S n > > 0124160 S N . w o r d 1 = l a s t S 0124200 n > > S N . w o r d 1 + 1 \r M o 0124220 v e B l o c k ( l v f p > > F 0124240 P . s e r i a l N u m b e r , 0124260 l a s t S n , l S N ) \r f p > 0124300 > F P . s e r i a l N u m b 376 001 0124320 \0 314 345 e r . w o r d 1 = f p 0124340 > > F P . s e r i a l N u m b e 0124360 r . w o r d 1 % w o r d 1 \r 0124400 \r l e t D A s = v e c 4 0124420 \r M o v e B l o c k ( D A s , 0124440 t a b l e [ e o f D A ; f 0124460 i l l I n D A ; f i l l I n D 0124500 A ; e o f D A ] , 4 ) \r D 0124520 A s = D A s + 1 \r \r / / I 0124540 f t h e r e w a s a n e 0124560 x i s t i n g f i l e , " r 0124600 e n a m e " i t : \r i f u s 0124620 e O l d F p t h e n \r [ 0124640 \r l e t d a = o l d 0124660 F p > > F P . l e a d e r V i r 0124700 t u a l D a \r D e l e t e 0124720 D i s 376 001 \0 ~ k k P a g e s ( d 0124740 i s k , p a g e B u f , d a 0124760 , o l d F p , 0 , f p ) \r 0125000 D A s ! 0 = d a \r 0125020 ] \r \r / / S e t u p t h 0125040 e l e a d e r p a g e \r Z e 0125060 r o ( p a g e B u f , B F S w 0125100 o r d s P e r P a g e ) \r R e a 0125120 d C a l e n d a r ( l v p a g 0125140 e B u f > > L D . c r e a t e d 0125160 ) \r M o v e B l o c k ( l v p 0125200 a g e B u f > > L D . n a m e , 0125220 n a m e , s i z e L D . n 0125240 a m e / 1 6 ) \r i f d i r F p 0125260 n e 0 t h e n M o v e B 0125300 l o c k ( l v p a g e B u f > 0125320 > L D . d i r F 376 001 \0 222 324 p , 0125340 d i r F p , l F P ) \r p a g e 0125360 B u f > > L D . p r o p e r t y 0125400 B e g i n = o f f s e t L 0125420 D . l e a d e r P r o p s / 1 6 0125440 \r p a g e B u f > > L D . p r o 0125460 p e r t y L e n g t h = s i 0125500 z e L D . l e a d e r P r o p 0125520 s / 1 6 \r \r / / A c t u a l l 0125540 y w r i t e o u t t h e 0125560 l e a d e r p a g e a n d 0125600 t h e f i r s t d a t a p 0125620 a g e \r ( u s e O l d F p ? A 0125640 c t O n D i s k P a g e s , W 0125660 r i t e D i s k P a g e s ) ( d 0125700 i s k , 0 , D A s , f p , 0125720 0 , 1 , \r D C w r i 376 001 \0 0125740 \f 374 t e D , 0 , 0 , p a g 0125760 e B u f ) \r f p > > F P . l e a 0126000 d e r V i r t u a l D a = D 0126020 A s ! 0 \r ] \r \f \r / / - - - - - 0126040 - - - - - - - - - - - - - - - - * 0126140 - - - - - - - \r a n d B F S D 0126160 e l e t e P a g e s ( d i s k , 0126200 C A , f i r s t D A , f p 0126220 , f i r s t P a g e , n e w 0126240 F p , h i n t L a s t P a g e 0126260 ; \r n u m a r g s n a 0126300 ) b e \r / / - - - - - - - - - 0126320 - - - - - - - - - - - - - - - - 0126340 - - 376 001 \0 322 5 - - - - - - - - - 0126360 - - - - - - - - - - - - - - - - * 0126420 - - - - - - - - \r / / D e l e 0126440 t e p a g e s s t a r t i n 0126460 g a t f i r s t D A a n d 0126500 c o n t i n u i n g t o t 0126520 h e e n d o f \r / / t h e 0126540 f i l e . C A i s a 0126560 p a g e - s i z e b u f f e r 0126600 w h i c h i s z e r o e d 0126620 \r / / O p t i o n a l 6 t h 0126640 a r g u m e n t i s t h e 0126660 " n e w " F P t o i n s 0126700 t a l l : \r [ \r D e f a u l t A 0126720 r g s ( l v n a , - 5 , f 0126740 r e e P a g e 376 001 \0 233 250 F p , 0126760 0 ) \r w h i l e f i r s t D A 0127000 n e e o f D A d o \r 0127020 [ \r l e t D A s = 0127040 v e c b i t e S i z e + 1 \r 0127060 S e t B l o c k ( D A s , 0127100 f i l l I n D A , b i t e S 0127120 i z e + 2 ) \r \r / / T h 0127140 e r e a s o n f o r e x t 0127160 r a 1 i s t h a t D A s 0127200 ! ( f i r s t p a g e - 1 ) i 0127220 s r e f e r e n c e d b y 0127240 \r / / t h e d e f a u 0127260 l t c l e a n u p r o u t i 0127300 n e . \r D A s = D A s 0127320 + 1 - f i r s t P a g e \r 0127340 D A s ! f i r s t P a g 376 001 \0 271 0127360 214 e = f i r s t D A \r \r 0127400 / / C o l l e c t d i s k 0127420 a d d r e s s e s o f p a 0127440 g e s i n f i l e \r l 0127460 e t l a s t N u m C h a r s 0127500 = n i l \r l e t l a s 0127520 t P a g e F o u n d = A c t 0127540 O n D i s k P a g e s ( d i s k 0127560 , 0 , D A s , f p , f i 0127600 r s t P a g e , \r f 0127620 i r s t P a g e + b i t e S i z 0127640 e - 1 , D C r e a d D , l v 0127660 l a s t N u m C h a r s , 0 0127700 , C A , \r 0 , 0 0127720 , 0 , h i n t L a s t P a g 0127740 e ) \r \r / / W r i t e 0127760 n 376 001 \0 002 Y e w F p i n a l 0130000 l t h e l a b e l s . \r 0130020 / / T h e d a t a m u s 0130040 t b e z e r o e d i n t 0130060 h e c a s e t h a t w e 0130100 a r e " r e n a m i n g ' \r 0130120 / / a n e x i s t i n g 0130140 f i l e . \r Z e r o ( C 0130160 A , B F S w o r d s P e r P a 0130200 g e ) \r W r i t e D i s k 0130220 P a g e s ( d i s k , 0 , D 0130240 A s , n e w F p , f i r s t 0130260 P a g e , \r l a s t 0130300 P a g e F o u n d , - 1 , 0 0130320 , l a s t N u m C h a r s , 0130340 C A ) \r \r / / D e l e t 0130360 i n g a 376 001 \0 361 337 f i l e 0130400 i s r e a l l y j u s t r 0130420 e n a m i n g i t t o ' f 0130440 r e e ' a n d \r / / m 0130460 a r k i n g i t s p a g e s 0130500 f r e e i n t h e b i t 0130520 t a b l e . \r i f n e 0130540 w F p e q f r e e P a g e F 0130560 p t h e n \r f o r 0130600 i = f i r s t P a g e t 0130620 o l a s t P a g e F o u n d 0130640 d o R e l e a s e D i s k P a 0130660 g e ( d i s k , D A s ! i ) \r 0130700 \r f i r s t P a g e = 0130720 l a s t P a g e F o u n d + 1 0130740 \r f i r s t D A = D A 0130760 s ! f i r s t P a g e 376 001 \0 273 8 0131000 \r ] \r ] \r \r / / - - - - - 0131020 - - - - - - - - - - - - - - - - * 0131120 - - - - - - - \r a n d B F S R 0131140 e l e a s e D i s k P a g e ( d 0131160 i s k , v d a ) b e \r / / - 0131200 - - - - - - - - - - - - - - - - * 0131300 - - - - - - - - - - - \r [ \r l e 0131320 t d d M g r = d i s k > > 0131340 B F S D S K . d d M g r \r L o c 0131360 k D D ( d d M g r , d i s k ) 0131400 376 001 \0 360 354 \r \r / / T h e f i 0131420 r s t l K D H e a d e r w o 0131440 r d s o f D i s k D e s c r 0131460 i p t o r a r e n ' t b i t 0131500 t a b l e b i t s \r v d a 0131520 = v d a + b i t T a b l e 0131540 B i a s \r \r / / M a k e s u 0131560 r e a p p r o p r i a t e B 0131600 T p a g e i s i n t h e 0131620 b u f f e r \r l e t b u f 0131640 = R e a d D D P a g e ( d d M 0131660 g r , d i s k , v d a < < V 0131700 D A . p a g e N u m + 1 ) \r \r l 0131720 e t w a = v d a < < V D A 0131740 . w o r d N u m I n P a g e \r l 0131760 e t m a s k = o n e B i t 0132000 s ! ( v d 376 \0 331 354 027 a < < V D A 0132020 . b i t N u m ) \r i f ( b u f 0132040 ! w a & m a s k ) n e 0 0132060 t h e n \r [ \r / / 0132100 R e s e t c o r r e c t b 0132120 i t o f p a g e \r b u 0132140 f ! w a = b u f ! w a & 0132160 n o t m a s k \r d i s k 0132200 > > B F S D S K . f r e e P a g 0132220 e s = d i s k > > B F S D S 0132240 K . f r e e P a g e s + 1 \r 0132260 ] \r \r / / N o t e d i r t 0132300 y B T \r U n l o c k D D ( d d 0132320 M g r , d i s k , t r u e ) 0132340 \r ] \r 377 \0 \0 B F S C l o s e . b 0132360 c p l \0 373 224 006 ) J \0 \0 376 001 \0 373 356 0132400 / / B F S C l o s e . b c p l 0132420 - - p r o c e d u r e s t 0132440 o c l e a n u p a n d c 0132460 l o s e a d i s k \r / / C 0132500 o p y r i g h t X e r o x C 0132520 o r p o r a t i o n 1 9 7 9 \r 0132540 / / L a s t m o d i f i e d 0132560 N o v e m b e r 1 7 , 1 9 0132600 7 8 3 : 0 9 P M b y B 0132620 o g g s \r \r g e t " A l t o f 0132640 i l e s y s . d " \r g e t " D 0132660 i s k s . d " \r g e t " B F S 0132700 . d " \r \r e x t e r n a l \r [ \r 0132720 / / o u t g o i n g p r o c 0132740 e d u r e s \r B F S C l o s e ; 0132760 B F S W r i t e D i s k D e s 0133000 376 001 \0 343 m c r i p t o r \r \r / / 0133020 i n c o m i n g p r o c e d 0133040 u r e s \r C l o s e D D ; D e 0133060 s t r o y D D M g r ; R e a d 0133100 D D P a g e \r L o c k D D ; U 0133120 n l o c k D D ; F l u s h D D 0133140 \r F r e e ; M o v e B l o c k 0133160 \r ] \r \r \r / / - - - - - - - - - 0133200 - - - - - - - - - - - - - - - - * 0133300 - - - \r l e t B F S C l o s e 0133320 ( d i s k , d o n t F r e e ; 0133340 n u m a r g s n a ) = v 0133360 a l o f \r / / - - - - - - - - - 0133400 - - - - - 376 001 \0 241 002 - - - - - - 0133420 - - - - - - - - - - - - - - - - * 0133500 - - - - - - - - \r [ \r i f d i 0133520 s k > > B F S D S K . i n i t m 0133540 o d e n e 0 t h e n \r 0133560 [ \r B F S W r i t e D i 0133600 s k D e s c r i p t o r ( d i s 0133620 k ) \r C l o s e D D ( d i 0133640 s k > > B F S D S K . d d M g r 0133660 , d i s k ) \r u n l e s 0133700 s n a g r 1 & d o n t 0133720 F r e e d o D e s t r o y D 0133740 D M g r ( d i s k > > B F S D S 0133760 K . d d M g r ) \r ] \r F r 0134000 e e ( d i s k > > B 376 001 \0 \t - F 0134020 S D S K . z o n e , d i s k ) 0134040 \r r e s u l t i s 0 \r ] \r \r / 0134060 / - - - - - - - - - - - - - - - 0134100 - - - - - - - - - - - - - - - - * 0134160 - - - - - - - - - - - - - \r a n 0134200 d B F S W r i t e D i s k D e 0134220 s c r i p t o r ( d i s k ) b 0134240 e \r / / - - - - - - - - - - - - 0134260 - - - - - - - - - - - - - - - - * 0134360 \r [ \r i f d i s k > > B F S D 0134400 S K . i n i t m o d e n e 376 0134420 \0 367 027 243 0 t h e n \r [ \r 0134440 l e t d d M g r = d 0134460 i s k > > B F S D S K . d d M g 0134500 r \r L o c k D D ( d d M g 0134520 r , d i s k ) \r l e t 0134540 b u f = R e a d D D P a g e 0134560 ( d d M g r , d i s k , 1 ) 0134600 / / R e a d p a g e c 0134620 o n t a i n i n g K D H \r 0134640 M o v e B l o c k ( b u f , 0134660 d i s k > > D S K . d i s k K d 0134700 , l K D H e a d e r ) \r 0134720 U n l o c k D D ( d d M g r , 0134740 d i s k , t r u e ) \r F 0134760 l u s h D D ( d d M g r , d i 0135000 s k ) \r ] \r ] \r 377 \0 \0 B F 0135020 S D D M g r . b c p l \0 373 224 213 R 0135040 033 \0 \0 376 001 \0 ` 273 / / B F S D D 0135060 M g r . b c p l - - p r o c 0135100 e d u r e s t o m a n a g e 0135120 D i s k D e s c r i p t o r 0135140 p a g e s \r / / C o p y r i g 0135160 h t X e r o x C o r p o r a 0135200 t i o n 1 9 7 9 \r / / L a s 0135220 t m o d i f i e d D e c e m 0135240 b e r 2 2 , 1 9 7 9 1 : 0135260 1 8 A M b y B o g g s \r \r 0135300 g e t " A l t o f i l e s y s 0135320 . d " \r g e t " D i s k s . d 0135340 " \r g e t " B F S . d " \r \r e 0135360 x t e r n a l \r [ \r / / O u t 0135400 g o i n g p r o c e d u r e s 0135420 \r B F S C r e a t e D D M g r \r 0135440 \r / / T h e s 376 001 \0 324 r e a 0135460 r e p r i v a t e p r o c e 0135500 d u r e s d e c l a r e d e 0135520 x t e r n a l b e c a u s e 0135540 t h e y m u s t \r / / b e 0135560 d e c l a r e d O v e r l a y 0135600 E n t r y P o i n t s ( O 0135620 E P s ) i f t h i s m o d 0135640 u l e l i v e s i n a n 0135660 o v e r l a y . \r B F S L o c k 0135700 D D ; B F S R e a d D D P a g 0135720 e ; B F S U n l o c k D D ; 0135740 B F S F l u s h D D ; B F S C 0135760 l o s e D D ; B F S D e s t r 0136000 o y D D M g r \r \r / / I n c o 0136020 m i n g p r o c e d u r e s \r 0136040 A c t O n D i s k P a g e 376 001 \0 0136060 0 ' s ; I d l e ; S y s E r 0136100 r ; A l l o c a t e ; F r e 0136120 e ; Z e r o ; N o o p \r ] \r 0136140 \r / / A D D M g r i s a 0136160 n o b j e c t f o r m a n 0136200 a g i n g p a g e s o f t 0136220 h e D i s k D e s c r i p t o 0136240 r ( D D ) f i l e s \r / / 0136260 o n o n e o r m o r e d 0136300 i s k s . I t i s c r e 0136320 a t e d b y c a l l i n g : 0136340 \r / / \t d d M g r = C r e a 0136360 t e D D M g r ( z o n e ) \r / / 0136400 T h e r e a f t e r , t h e 0136420 f o l l o w i n g o p e r a 0136440 t i o n s a r e d e f i n e 0136460 d 376 001 \0 347 032 o n i t : \r / / 0136500 \t B F S O p e n D D ( d d M g r 0136520 , d i s k ) \r / / \t \t A d d s 0136540 d i s k t o t h e s e t 0136560 o f D D s m a n a g e d 0136600 b y d d M g r . \r / / \t B F S 0136620 L o c k D D ( d d M g r , d i 0136640 s k ) \r / / \t \t L o c k s o u 0136660 t a l l o t h e r a c c e 0136700 s s t o t h e D D o n 0136720 t h e s p e c i f i e d d i 0136740 s k . \r / / \t b u f = B F S 0136760 R e a d D D P a g e ( d d M g r 0137000 , d i s k , p a g e ) \r / / 0137020 \t \t R e t u r n s a p o i n 0137040 t e r t o a c o p y ( i 0137060 n m e m o r 376 001 \0 217 265 y ) o 0137100 f t h e s p e c i f i e d \r 0137120 / / \t \t D D p a g e o n t 0137140 h e s p e c i f i e d d i s 0137160 k . T h e K D H s t a r 0137200 t s i n p a g e 1 \r / / \t 0137220 \t f o l l o w e d b y t h e 0137240 b i t m a p . \r / / \t \t G u 0137260 a r a n t e e s t h a t b u 0137300 f w i l l n o t m o v e 0137320 u n t i l e i t h e r t h e 0137340 n e x t \r / / \t \t B F S R e a 0137360 d D D P a g e o r B F S U n 0137400 l o c k D D . T h e D D 0137420 m u s t b e l o c k e d . \r 0137440 / / \t B F S U n l o c k D D ( d 0137460 d M g r , d i s k , 376 001 \0 303 0137500 237 d i r t y [ f a l s e ] ) \r 0137520 / / \t \t U n l o c k s a D D 0137540 p r e v i o u s l y l o c k 0137560 e d . I f d i r t y i s 0137600 t r u e , m a r k s \r / / \t 0137620 \t a s d i r t y t h e p a 0137640 g e m o s t r e c e n t l y 0137660 r e a d b y B F S R e a d 0137700 D D P a g e . \r / / \t B F S F l 0137720 u s h D D ( d d M g r , d i s 0137740 k ) \r / / \t \t F l u s h a n y 0137760 d i r t y D D p a g e s 0140000 o u t t o t h e s p e c i 0140020 f i e d d i s k . \r / / \t \t T 0140040 h e D D m u s t N O T b 0140060 e l o c k e d . \r / / \t B F S 0140100 C 376 001 \0 373 226 l o s e D D ( d d M 0140120 g r , d i s k ) \r / / \t \t R e 0140140 m o v e s d i s k f r o m 0140160 t h e s e t o f D D s m 0140200 a n a g e d b y d d M g r . 0140220 \r / / \t \t I t i s t h e c 0140240 a l l e r ' s r e s p o n s i 0140260 b i l i t y t o d o a B 0140300 F S F l u s h D D f i r s t . 0140320 \r / / \t B F S D e s t r o y D D 0140340 M g r ( d d M g r ) \r / / \t \t D 0140360 e s t r o y s d d M g r . \r \r 0140400 / / - - - - - - - - - - - - - - 0140420 - - - - - - - - - - - - - - - - * 0140500 - - - - - - 376 001 \0 307 016 - - - - - 0140520 - - - \r s t r u c t u r e B F 0140540 S D D M g r : \r / / - - - - - - 0140560 - - - - - - - - - - - - - - - - * 0140660 - - - - - - \r [ \r / / D e f i 0140700 n e d o p e r a t i o n s \r @ 0140720 D D M g r \r \r / / I n s t a n 0140740 c e d a t a ( f o r t h i 0140760 s i m p l e m e n t a t i o n 0141000 ) \r z o n e w o r d \t \t / / 0141020 Z o n e f r o m w h i c h 0141040 a l l o c a t e d \r b u f f e r 0141060 w o r d \t \t / / B i t t a 0141100 b l e b u f f e r \r 376 001 \0 C 021 0141120 d i s k w o r d \t \t / / D i 0141140 s k t h a t o w n s c u r 0141160 r e n t c o n t e n t s o f 0141200 b u f f e r \r p a g e w o r 0141220 d \t \t / / D D p a g e n u 0141240 m b e r o f c u r r e n t 0141260 c o n t e n t s o f b u f f 0141300 e r \r d i r t y w o r d \t \t / 0141320 / N o n z e r o i f b u f 0141340 f e r i s d i r t y \r l o c 0141360 k e d w o r d \t \t / / N o n 0141400 z e r o i f D D i s l o 0141420 c k e d \r ] \r m a n i f e s t 0141440 l e n B F S D D M g r = s i 0141460 z e B F S D D M g r / 1 6 \r \f 0141500 \r / / - - - - - - - - - - - - - 0141520