e _vߋt ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***  $t:#z xQz kzNNz*O:z \U84w($  % *wz n e  <CCOMP8K09JUN80172104CCOMP8 [001,001] DECFILE11A 6R.t:#z09JUN80172104#]. xQz09JUN80172104'(N. kz09JUN80172104A .NNz09JUN80172104&N.*O:z09JUN80172104>.@@Ǝz09JUN80172601`.@@23|8_09JUN8017265509JUN801726261*.@@./jL_09JUN8017273009JUN80172702-\. @@#Ddq09JUN8017275409JUN80172739L. @@&Fd09JUN8017281909JUN80172803D. @@-d09JUN8017284509JUN80172829[. @@%FdM09JUN8017290909JUN80172854P. @@%Fd209JUN8017293409JUN80172919pw.@@'HdvK09JUN8017295809JUN80172943.@@%FdK09JUN8017302309JUN80173008P.@@$Ddh09JUN8017304809JUN80173033i.@@&Fdj09JUN8017311209JUN80173057.@@$Ddf09JUN8017313609JUN80173122.@@$DdTq09JUN8017320009JUN80173146.@@009JUN8017322309JUN80173210|?.@@*^ 09JUN8017324709JUN801732349.@@*p^09JUN8017331109JUN80173258.@@JK @09JUN8017335909JUN80173322I.@@CD): @09JUN8017345009JUN80173412B.@@:M209JUN8017352809JUN80173507)g.@@MjL_09JUN8017361409JUN80173545-/.@@&]09JUN8017365309JUN80173633I.@@)t!kQ09JUN8017373309JUN80173712Jҍ.@@2jL_09JUN8017381809JUN80173752K.@@)S @09JUN8017390209JUN80173837 \֑.@@pp09JUN8017394509JUN80173923j. @@*RA;v209JUN8017402709JUN80174005k].!@@ !K8_09JUN8017411909JUN80174048m."@@jLjL_09JUN8017421209JUN80174141$.#@@9pp09JUN8017430109JUN801742363t:#z xQz kzNNz*O:zƎzB .dsabl reg .enabl gbl .psect c$data[.event$1:m .word .end.globl .settop .globl .endo .globl sbreakm .title sbreak. .psect c$textosbreak:h jsr %5,c$sav mov $1,%4 mov %4,%0. bic #-2,%0 add %0,%4a mov %4,%0 add 4(%5),%0 mov 4(%5),%1 bic #-2,%1 add %1,%00 mov %0,4(%5)mov 4(%5),(%6)jsr %7,.settop cmp %0,4(%5)beq $3 mov $1,(%6)ejsr %7,.settopclr %0br $2 $3: ;37i mov 4(%5),$1 mov %4,%0$2:o jmp c$ret .endline to the terminal*bnext, *pbuf; LONG lseek, lact, lenXO  , p2zj  j j}j@'L;j<@'u:Zp:d`;kjmYjp:#!'""`j@, j, ',;"j,@`',f'.q'.r'.Dj<9X';L;j9;Kj<;X9j|L*}j?M'qQW'xQZXr'YjN`M'aS\g|\g\g(\g2\gv\g@y\g\g*\gTqaTqwTq`EwdFw*}jwxR'y""'yjyw:'zYz*}'*}*} }dXajp'qK'N`M'\g2Fw*}jzY*}*}  O *\g2Lz@,8^@ @*}@@w@@@@*Y@e @L;@ `"@ s"@*  @ <@<@@#!@""`@* #}@;L;@|L*}@N`M@\g@*Tqa@Uq5a@Fwy@xR@yw:@**}*}@qR@(a (aSh*}h #(u:hZp:hd`;hh*\g|hH\g(hx\g2h$\g@yhV\gh\g*h a  "*2: (08 *redefinedillegal definitionillegal : .:=  #*w DBE57!    $#!(& 3    *@ <@ a 3""`#! $a *J,    ""`\g*p5 EU@] a ""`4w `"a @@>,RLfe*  #>  # #  #  #Tdcba9*  #  # #  #  #h87654*  #  # #  #  #*|3210Hillegal operands f*  #  # #  #  #Hor %punknown binop!  #*w eu%W- uW-  *@UW-  W-*@e5uuuW-*  5   5, ( *B   %     a ""`&*}*}*hN& N&  } }*N  we  N`M a ""` `"*ˋ@w P |Lt@`e a @ <* t@`e e5*N& t 5t` e*& f& J%t`   ע LL@@ z a   #h*hw D ,@K H2-  |L*}*D `a % 5 5* 2-@|L*},8^|L*}*   2ayw:yw:*` % 2E Y a z*&UI44 ,@7wf yw:$ `"*L N&  p\g#!#!$#!*rww eD5 5   s"   @&|L*}* \   F ,@ #!|L*}#!*@!  &\g<@$@*& %  w(Tqaa wqRUq5a `"  ,  a can't create temp file  #$*$f  & %7 qRe  a  &a J w""` #} s"a can't backup .  #V*Vf  w   a ""` s"| a Hputval!*  #  # #  #  #  #*w DE@w   a  <&L;*  wjE"Fwy;L;Fwy `" a j* f @  @ a  ""`* @ @@t  \g .w s" O **}*}L(a (*}*}hb  a *JWWJKWWKIDD &*&IIWWIHEDBC $&LBDCBCD~DBxDCr ~x"rr*r6b,6269,605d,5459,504d,444b,42f9*40L3R6L3,R3a,WR32,WL2a,WR22,WL1*a12a21L4,WRBECEDEXE$ EB EC EDEX  *f5e5d5c5f1e1d1c1DMCMD@D  C&@*C=CD:= ::*:ebebe3e3D{wsWoW{w s&o `Hj jjjc6,R80R4L33L49R4WWHd6,R90R5L3bL4WWH ce,R88R4WWH de,R98RWWH e6,Ra0RWWH ee,Ra8Re  W7WH2722 2f6,Rb0R<<WSWHNSNN Nfe,Rb8RXXWlWjljjjf7WW 1f17WW37,1f37,17WWb7,1fb7,17IL e9c3,WR I c2L0,WRBD CD $73,23,7271,23,70BD1CD(1 (((5e,23,564e,23,46DDF FFF7e,23,66,6fWW^ ^^^2fbbF * F  v<Xn:*<Xn  :RRV O *zYL@@ `"@ s"@*  @ <@<@@""`@ #}@*<9X@Ky@M @\g@\gvL@*Iq@*y}@}@}@(*a (r #(p:hxQhR\gh*\gvh\ghTqahRTqwh`Tq`hf*EwdhwhzYh0hJ a   can't write temp file  #*w De&   &}*&%e    44 } a ""` #} Lw `"a   TD?  #R*Rw D      "(*y}*xe ') H ", a ) a "*&e$ % ` a $ a  % w `"a *!*pN.putcode!*  #p  #N #.  #  #  #&w @*wWpW &  a * <a a *WpNe Wp@ep*a a a a $a *@`Hw  ( a  a  `" a  a *B WpNe Wp*a  a a a $a *hq  7> ( a a a "a >&""`*w N 5!@f  Ky* %N f %ww }Ky}$ `"(  *eĕ @  tE*Ae@` 07`>*&Na %N f }Ky(} L%w `"a GGtoo many public symbols  #R*Rw 0 0 ĕB      @<@*x"% %G , a G""`@*,rmU25<@*  e N N *zB 5.!U *  `  6 \g\gvL*6 &  N \g<9X*\ww  & &  e " `"  }M $a * ׭wÝ  5 (a  `"a  a $a *    &a \g a \gvL"a *E@`Wt@`t"a a a "a *7  ! tU a *eP eU e \g\g(\g*@  ` $ a  \gvL\g a $\gvL*ff NE A vNE \g(\g*ww Nf Nf ~ s"  *  !eaeaA@5*@ w w Nf 4  `"  *eNf e *$ҒSww DB w `"  ( `"a __bad temp file read  #J*Jw   Nf` %   }"Iq"p  _  aw a _""` #} `"jO *Fw*}L,8^@@ `"@* s"@  @ <@Zp:@d`;@*, @,@,@`@?M@ZXr@*\g%@Fwy@y""@yw:@z*}@*qK@(a ( hL;h,*;L;h5|L*}h: #(zh  h^*}hvkhmYh""`h$@, hd*,;"h.Dh9;Kh8<;X9hpYh"Fw*}hyhDdXaht a *  +&PQRSTULWBCDE  #*w D I3   z*},8^z*}*& e`   *Le@`wf< < p>  `"a < a < (a >rw s"a DD*  #  # #  #  # X   # #  #v*vw DE@Dw    a D <*  -    *- w,  `" a ,$Fwy*,5 5   a , a 5Fwy a 5  a `*`NOHAIFGHAIillegal []illegal subscript  #*w DBE  P   *Dw wEf `& a w `" a fFwy $a `"jl EP4l a la ^20*  #  # #^  #2  #0*illegal publicillegal =i  #  #  #*llegal !illegal -illegal *illegal &  #*w @E@@E@  *w I    T @ a  < a *AAEUApw H @A `"*AEUIp A%G  &a * @U  T   &a *F@AA p  ( *l @AAA p I  a *  @,@ vN  a (d`;* fe` % z*}"*  :U@Uw  a $Nff %@UwZp:a  %i:  #$*$f  %Nf " ?M a y""\g%&y"" J% ww (\g% a y""\g%ZXr s"f < << >  (  a <a <a < a >!  w,?M `"a '\ pmissing %acbtnvfr*  #  # #  #p #*w wN j    a  < a *!   %A Z*e  !ew a Fwy* %0% 9"e > B  `"*2et " & te*X@PE   ~E a !|&*^*  #  # #  #  #*-,+><*  #  # #  #  #>=:987*  #  # #  #  #R65432*  #  # #  #  #f1:0'"]*  #  #: #  #  #z[)( ;*  #  # #  #  #&/illegal character %ac"  #  #  # #*w    %  *w     a  <* w `"*"  8@7 '$qK* zt`7H &qKqK*B . xĕÕ0ĕ7   qK*h!%a  f  H%A* F%aW%A70(qK*Dt`w e7   qKqK* Wp `@e7 bH qKqK* wxw    ,@` `"(, *& wPw D%a!z  a   *L%A!Z!.!_ ww & `"*rD%0!9 wfW-   `"*HW-A ww e5 u- s"  *"@@m 5@ @m*@ 5 B5! @5  *  @ 5  @ 0@mwu `"a string too long  #D*Df  ~p " yw:yw:yw: yw: &a *j7ww D%A!Ze yw: s"  w `"O *N`MLz@  @@*Y@Yy@e @ `"@  @* <@u:@Zp:@k@mY@*""`@ #}@&`@&`;@@, @*,&@,a'@.D@9;K@<;X9@*Ky@aS@\g|@\g(@\g2@*\g*@Fw*}@yp:@ya@y@*(a (m@h<@h#!h*<9Xh?MhZXrhxRhy""h*yw:hz*}hphqKh #(*, h,@`h,fh.qh .rhpqQWhN`Mhb a *WPQRSTUXB*  $(*&CD& "&*LE*  $(r *publiccalljpojpejnzjncjmp*cpocpecnzcncspjzjpjm*jchldeczcpcmccbcafl*hedcba"&*  +*  $(*>  z& "&zdupupp*p=a^<^><-><+><*>->^=^=>*=!<><=:=::-^->+^|^*=:-,+*&! $(*?'v& "&*zup7jd^XR* zupjd ^$X(R.LF@L F@@*@rst7rst6rst5rst4rst3rst2r*fst1rst0stcrporpernzrncre*toutnophltdaacmcrzrprmrcineidi^  #*w euĕ 5N   @, $9;K*&N ! Ae@`HN <;X9*L Na e  a Fw*}*rNa e7E  a Fw*}a &a *Hw! Ae@`  `""a *Na` %  Ne (z*E HHa (a  E a bbillegal operator %ac  #*w eu 5 5ĕ   @, @, *:Na e    a Fw*}&@, *`b w Ae@` $ a b ""` `"&  a w*wtermstring, xstringx, stringexpres sion!  #*w eD  &   a * !E  & R   a *Na |Na 0 w a  a |*wNa h Na& % `" a w$Zp: a ^@FA4H`illegal %p*  #^  #F #4  #` # * w Dw @w"  a  <y( `"*F t N  yy $a (""`l  a *pXHIAmissing ]token! %*  #p  #X #  #  #*ooperandmissing %pmissing )   #p*pw eD4 a %   a $Y* A I 5W-.D.D&a * wW- &&a u: a  <a *  UE4u:*`a %B"Y*. gNa D  ]  $a (""`*TXH4  & a .D*z     4   a ""`.D*N 5@  a ""`$.D*5& 5& B a $mY* wNe&  a ""` `"(k .Da * illegal constantsyntax errorcan't re*1ad %p..data.textcan't create %pbaWd flags %pi,o*,s*  #*w ebNaNa (  a  a  a  a b*Be  U  3 $,a' a U""` #}"a *h0N 5@@o8"W- Ky*@e7 fNa %@e@m a Yy* rm> #aSa "aS %7 E &a e yaa  a E*   % (""` #}yaya&`;&a * @  ? &a  a  \g2 $a ?(z>79 77 (a  a 9za  a 7*T7& NaNa &za  a a (,&*ze7-@)  yp:yp: a )$""`*  w  *a  \g(a  `""yp:&yp:*% Na !!  &`; &a * @E 5 ""` yp:&`*HN  A INe \g|&\g**8 @     ( a a \g|a  &a ^""`a jj!?  #b*bw D ,   ,  a  a $ e jwe a j `"  *a  \g(a  `""yp:&yp:*% Na !!  &`; &a * @E 5 ""` yp:&`*HN  A INe \g|&\g**8 @     ( a a \g|a  &a ^""`a jj!?XO  - .z   }@jL;<@ju:%Zp:%d`;%kmY#!j""`@, , j,;",@`j,fj.qj.rj.D<9Xj;L;9;K<;X9|L\K%|L*}?MjqQWjZXrjYN`MjaS%\g|%\g(%\g2%\g@y%\g%\g*%Fw*}xRjy""jyyw:jz*}j*}*}"&dXapjqKjN`Mj\g2%Fw*}*}*}"&jO *Fw*}L,8^@@ `"@* s"@  @ <@Zp:@d`;@*, @,@,@`@?M@ZXr@*\g%@Fwy@y""@yw:@z*}@*qK@(a ( hL;h,*;L;h5|L*}h: #(zh  h^*}hvkhmYh""`h$@, hd*,;"h.Dh9;Kh8<;X9hpYh"Fw*}hyhDdXaht a *  +&PQRSTULWBCDE  #*w D I3   z*},8^z*}*& e`   *Le@`wf< < p>  `"a < a < (a >rw s"a DD*  #  # #  #  # X   # #  #v*vw DE@Dw    a D <*  -    *- w,  `" a ,$Fwy*,5 5   a , a 5Fwy a 5  a `*`NOHAIFGHAIillegal []illegal subscript  #*w DBE  P   *Dw wEf `& a w `" a fFwy $a `"jl EP4l a la ^20*  #  # #^  #2  #0*illegal publicillegal =i  #  #  #*llegal !illegal -illegal *illegal &  #*w @E@@E@  *w I    T @ a  < a *AAEUApw H @A `"*AEUIp A%G  &a * @U  T   &a *F@AA p  ( *l @AAA p I  a *  @,@ vN  a (d`;* fe` % z*}"*  :U@Uw  a $Nff %@UwZp:a  %i:  #$*$f  %Nf " ?M a y""\g%&y"" J% ww (\g% a y""\g%ZXr s"f < << >  (  a <a <a < a >!  w,?M `"a '\ pmissing %acbtnvfr*  #  # #  #p #*w wN j    a  < a *!   %A Z*e  !ew a Fwy* %0% 9"e > B  `"*2et " & te*X@PE   ~E a !|&*^*  #  # #  #  #*-,+><*  #  # #  #  #>=:987*  #  # #  #  #R65432*  #  # #  #  #f1:0'"]*  #  #: #  #  #z[)( ;*  #  # #  #  #&/illegal character %ac"  #  #  # #*w    %  *w     a  <* w `"*"  8@7 '$qK* zt`7H &qKqK*B . xĕÕ0ĕ7   qK*h!%a  f  H%A* F%aW%A70(qK*Dt`w e7   qKqK* Wp `@e7 bH qKqK* wxw    ,@` `"(, *& wPw D%a!z  a   *L%A!Z!.!_ ww & `"*rD%0!9 wfW-   `"*HW-A ww e5 u- s"  *"@@m 5@ @m*@ 5 B5! @5  *  @ 5  @ 0@mwu `"a string too long  #D*Df  ~p " yw:yw:yw: yw: &a *j7ww D%A!Ze yw: s"  w `"O *N`MLz@  @@*Y@Yy@e @ `"@  @* <@u:@Zp:@k@mY@*""`@ #}@&`@&`;@@, @*,&@,a'@.D@9;K@<;X9@*Ky@aS@\g|@\g(@\g2@*\g*@Fw*}@yp:@ya@y@*(a (m@h<@h#!h*<9Xh?MhZXrhxRhy""h*yw:hz*}hphqKh #(*, h,@`h,fh.qh .rhpqQWhN`Mhb a *WPQRSTUXB*  $(*&CD& "&*LE*  $(r *publiccalljpojpejnzjncjmp*cpocpecnzcncspjzjpjm*jchldeczcpcmccbcafl*hedcba"&*  +*  $(*>  z& "&zdupupp*p=a^<^><-><+><*>->^=^=>*=!<><=:=::-^->+^|^*=:-,+*&! $(*?'v& "&*zup7jd^XR* zupjd ^$X(R.LF@L F@@*@rst7rst6rst5rst4rst3rst2r*fst1rst0stcrporpernzrncre*toutnophltdaacmcrzrprmrcineidi^  #*w euĕ 5N   @, $9;K*&N ! Ae@`HN <;X9*L Na e  a Fw*}*rNa e7E  a Fw*}a &a *Hw! Ae@`  `""a *Na` %  Ne (z*E HHa (a  E a bbillegal operator %ac  #*w eu 5 5ĕ   @, @, *:Na e    a Fw*}&@, *`b w Ae@` $ a b ""` `"&  a w*wtermstring, xstringx, stringexpres sion!  #*w eD  &   a * !E  & R   a *Na |Na 0 w a  a |*wNa h Na& % `" a w$Zp: a ^@FA4H`illegal %p*  #^  #F #4  #` # * w Dw @w"  a  <y( `"*F t N  yy $a (""`l  a *pXHIAmissing ]token! %*  #p  #X #  #  #*ooperandmissing %pmissing )   #p*pw eD4 a %   a $Y* A I 5W-.D.D&a * wW- &&a u: a  <a *  UE4u:*`a %B"Y*. gNa D  ]  $a (""`*TXH4  & a .D*z     4   a ""`.D*N 5@  a ""`$.D*5& 5& B a $mY* wNe&  a ""` `"(k .Da * illegal constantsyntax errorcan't re*1ad %p..data.textcan't create %pbaWd flags %pi,o*,s*  #*w ebNaNa (  a  a  a  a b*Be  U  3 $,a' a U""` #}"a *h0N 5@@o8"W- Ky*@e7 fNa %@e@m a Yy* rm> #aSa "aS %7 E &a e yaa  a E*   % (""` #}yaya&`;&a * @  ? &a  a  \g2 $a ?(z>79 77 (a  a 9za  a 7*T7& NaNa &za  a a (,&*ze7-@)  yp:yp: a )$""`*  w  *a  \g(a  `""yp:&yp:*% Na !!  &`; &a * @E 5 ""` yp:&`*HN  A INe \g|&\g**8 @     ( a a \g|a  &a ^""`a jj!?  #b*bw D ,   ,  a  a $ e jwe a j `"O **}*}L(a (~*}*}hR  a *JWWJKWWKIDD &*&IIWWIHEDBC $&LBDCBCDDBDCr "rr*rmov l,e;mov h,dmov l,c;mov h,bmov e,*l;mov d,hmov e,c;mov d,bmov c,l;mov *b,hmov c,e;mov b,dsphlmov L,Rmvi L*,Rlda Rsta Llhld Rshld Lldax dst ax dldax bstax blxi L,R&*&BECEDEXEzEBsEClEz s&lLDeEX\e \\*\push pswpush hpush dpush bpop psw*pop hpop dpop bDMMDDCC & D *xchgxchgxthlxthlD"(WWH*adi Radd Rinr Linx Ldad R8&82W,WH&2 ,&&*&sui Rsub Rdcr Ldcx LWVWHP V&PPPaci Radc RWtWHntnnnsbi Rsbb RWWHani Rana RWWHxri Rxra RWWHori Rora RWWHcpi Rcmp RWWrrcrlcW"W"rarralW@W8@88"8stc;rarstc;ralWdWZdZZ&Zora a;rarora a;ralIL"pchljmp R  I L RBDCD *mov m,e;inx h;mov m,dmov m,c;inx h;mov m,bBDCD*mov e,m;inx h;mov d,mmov c,m;inx h;mov b,mDD$ $$*$mov a,m;inx h;mov h,m;mov l,aWWN &NNNcma&>\z* & >\zf &Hn*  & HnzBBO *\g2Lz@,8^@ @*}@@@@@Y@*L;@ `"@ s"@  @ <@*<@@#!@""`@<9X@:@*;L;@|L*}@N`M@\g@\g'@*Fwy@xR@yw:@*}*}@(*a (aSh #(u:hZp:h*d`;h<|L\Kh&\g|hj\g(h\g2h"\g@yh\gh`\g*h a  cseg     dseg *86420.,*(?amlhedcbN*864 2 0.,*((N$<LJGD??sphdb*LJG D "\*  *p~zvj??jmpcalljmjpjpejpojcjn~zv*cjzjnzcmcpcpecpocccncczcnz:* redefinedillegal definitionillegal  .:=  #*w DBE57!    $#!(&     *@ <@ a ""`#! $a *J     $""`@a  a &\g'*p w5 E `" a  ""`*U@]4 A #!    a \g'a *( ;RL2illegal operands f*  #(  # #  #  #2or %punknown binop!  #*w eu%W- uW-  *@UW-  W-*@e5uuuW-*>  5   5, ( *d   %     a ""`&*}*}*N& N&  } }*N  we  N`M a ""` `"*ˋw N& \g a  <\g*b N& N   $\g*"   w D\g\g\g  *H ,@J G2-C |L*}*n`a % 4 4  |L*}(,8^* 2-@   |L*}"yw:* 2a` %yw:&Y* $$EUI44 a $ a $*&  ,@7ww D@yw:" `"&  *,B__ Õ e`REeaHt w `"a & & db %i  #j jf NE& w a &\g' s"a .). end end %p public extrn :  #*w eD5 5  2   @ |L*}&a * *Na b I  \g'|L*}*P ,@  a P \g'* h   7-7-$@*H U !4 *<@ a H\g'xR"xR &a 4*D 5? 5\g' a ?\g'"jA = . w$ a =\g' a .\g' `" a S*S. title %b name %b@ /:]memorystayck  #$w Dv o *  a vz@ a o z* k& aȋ  `@ a k:( wS& & *a  \g' `" a S:"<9X`U& %  a ` a U\g'a || ,0 dw 0 db 0  #*w 5 @     a \g' &a **!  ~ w\g' a ~"\g'P|  `" a | \g'a <. _T*  #<  #   #T  #  #%~%i%i%i+%i%ac$@.?  #~ # #`*`w DE@w   a  <&L;&  w (Fwy a \g' `";L;Fwy*: eh P    a :\g' a P\g'*e`ȋe`wW-H a " <*FE  .  a \g' &a *    *\g' <9X a  a \g'(<9X*@ e`  a  a \g' &a *f    \g' a \g' &a   \g'a   dw '  #*f  NA  w a \g' "a &\g' s"ȋe`#an/cp=chdr,clib/lb,anlib/lb,clib/lb/units=12 stack=3000//  a \g' &a *    *\g' <9X a  a \g'(<9X*@ e`  a  a \g' &a *f    \g' a \g' &a   \g'a   dw '  #*f  NA  w a \g' "a &\g' s"ȋe`&anat/cp=chdr,clib/lb,antlib/lb,clib/lb/units=12 stack=3000//  a \g' &a *    *\g' <9X a  a \g'(<9X*@ e`  a  a \g' &a *f    \g' a \g' &a   \g'a   dw '  #*f  NA  w a \g' "a &\g' s"ȋe`.ENABLE SUBSTITUTION*.ASKS OUP WHAT IS THE SYSTEM DEVICE (DK0:)+.ASKS LBR WHAT IS THE LIBRARY DEVICE (DK0:) +.ASKS INP WHAT IS THE CURRENT DEVICE (DK1:) -.ASKS INC WHAT IS THE CURRENT UIC ([200,200]);; TKB @BLDPP TKB @BLDP1 TKB @BLDP82 TKB @BLDANT TKB @BLDANA TKB @BLDCPM TKB @BLDLD8 TKB @BLDLB8' TKB @BLDHEX' TKB @BLDREL; ASN 'LBR'=LB:SET /UIC=[1,1]PIP LB:C8.CMD='INP''INC'C8.CMD"PIP LB:CHDR.OBJ='INP''INC'CHDR.OBJ"PIP LB:CLIB.OLB='INP''INC'CLIB.OLBPIP LB:CHDR.R='INP''INC'CHDR.RPIP LB:CLIB.A='INP''INC'CLIB.APIP LB:IHDR.R='INP''INC'IHDR.RPIP LB:ILIB.A='INP''INC'ILIB.APIP LB:MLIB.A='INP''INC'MLIB.APIP LB:IEND.R='INP''INC'IEND.RPIP LB:STD.H='INP''INC'STD.HPIP LB:RSX.H='INP''INC'RSX.HPIP LB:CPM.H='INP''INC'CPM.HPIP LB:ISIS.H='INP''INC'ISIS.H; ASN 'OUP'=SY:KSET /UIC=[1,54]B PIP SY:CPP.TSK='INP''INC'CPP.TSK PIP SY:CP1.TSK='INP''INC'CP1.TSK"PIP SY:CP82.TSK='INP''INC'CP82.TSK"PIP SY:ANAT.TSK='INP''INC'ANAT.TSKPIP SY:AN.TSK='INP''INC'AN.TSK PIP SY:CPM.TSK='INP''INC'CPM.TSK"PIP SY:LD80.TSK='INP''INC'LD80.TSK$PIP SY:LIB80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C%cpm/cp=chdr,clib/lb,cpmlib/lb,clib/lbS/Iunits=12 stack=6000//IB80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C%hex/cp=chdr,clib/lb,hexlib/lb,clib/lbS/Iunits=12 stack=3000//IB80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C'lib80/cp=chdr,clib/lb,liblib/lb,clib/lb/units=12 stack=3000//80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C%ld80/cp=chdr,clib/lb,ldlib/lb,clib/lbl/units=12 stack=3000////80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C$cp1/cp=chdr,clib/lb,p1lib/lb,clib/lb/units=12 stack=3000//////80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C&cp82/cp=chdr,clib/lb,p82lib/lb,clib/lb/units=12 stack=3000////80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C$cpp/cp=chdr,clib/lb,p0lib/lb,clib/lb/units=12 stack=3000//////80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C$rel/cp=chdr,clib/lb,relib/lb,clib/lb/units=12 stack=3000//////80.TSK='INP''INC'LIB80.TSK PIP SY:HEX.TSK='INP''INC'HEX.TSK PIP SY:REL.TSK='INP''INC'REL.TSK;RINS SY:CPP.TSK/TASK=...CPPINS SY:CP1.TSK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C.ENABLE SUBSTITUTION.ASKS FIL FILE'CPP -X -I LB:[1,1] -O CTMP1.TMP 'FIL'.C'CP1 -O CTMP2.TMP CTMP1.TMPC82 -O CTMP3.TMP CTMP2.TMPANA -O 'FIL'.R CTMP3.TMP0PIP CTMP1.TMP;*/DE,CTMP2.TMP;*/DE,CTMP3.TMP;*/DESK/TASK=...CP1INS SY:CP82.TSK/TASK=...C82CINS SY:ANAT.TSK/TASK=...ANT'INS SY:AN.TSK/TASK=...ANAINS SY:CPM.TSK/TASK=...CPMINS SY:LD80.TSK/TASK=...LD8YINS SY:LIB80.TSK/TASK=...LB8INS SY:HEX.TSK/TASK=...HEXINS SY:REL.TSK/TASK=...REL;'SET /UIC='INC'ASN == ASN SY:='INP'K PIP SY:C21 !>> PROGRAM : CCC.BAS 'C' COMPILER CONTROLLER. 4 EXTEND 5 ON ERROR GOTO 32000 C%10 KB%=12% : OPEN 'KB:' AS FILE KB% M20 L$ = CHR$(13%)+CHR$(10%) P30 RETURN IF S% E999 ! MAIN CODING AREA... L1000 PRINT #KB%, 'CCC>'; \ INPUT LINE #KB%, INP$ \ INP$ = CVT$$(INP$,4%) 1199 ! BUILD FORCE STRING... Cs1200 JJ$ = RIGHT(NUM1$(PEEK(518%)/2%+100%),2%) \ KB$ = CHR$(ASCII(RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),2%))/2%) Lc1220 T1$ = 'CTMP' + JJ$ + '.TMP ' \ T2$ = 'CTM2' + JJ$ + '.TMP ' \ T3$ = 'CTM3' + JJ$ + '.TMP ' O1230 OUT$ = 'CPP -I[1,2] -X -O' + T1$ + INP$ + '.C' + L$ + 'CP1 -O' + T2$ + T1$ + L$ + 'C82 -O' + T3$ + T2$ + L$ + 'ANA -O' + INP$ + '.R ' + T3$ + L$ @1250 Z$ = SYS(CHR$(6%)+CHR$(-4%)+KB$+OUT$) !!! DO THE CALL !!! 1260 GOTO 32767 30000 ! CCL ENTRY... G30005 S%=-1% : GOSUB 5% M$30010 CORE.COMMON$ = SYS(CHR$(7%)) @30020 INP$ = RIGHT(CORE.COMMON$,INSTR(1%,CORE.COMMON$,' ')+1%) =30030 IF CVT$$(INP$,-1%)='' THEN 1000% ELSE 1200% T32000 ! ERROR TRAPS... 32767 ENDT$ = 'CPP -I[1,2] -X -O' + T1$ + INP$ + '.C' + L$ + 'CP1 -O' + T2$ + T1$ + L$ + 'C82 -O' + T3$ + T2$ + L$ + 'ANA -O' + INP$ + '.R ' + T3$ + L$ @1250 Z$ = SYS(CHR$(6%)+CHR$(-4%)+KB$+OUT$) !!! DO THE CALL !!! 1260 GOTO 32767 30000 ! CCL ENTRY... G30005 S%=-1% : GOSUB 5% M$30010 CORE.COMMON$ = SYS(CHR$(7%)) @30020 INP$ = RIGHT(CORE.COMMON$,INSTR(1%,CORE.COMMON$,' ')+1%) =30030 IF CVT$$(INP$,-1%)='' THEN 1000% ELSE 1200% *pL #}@X@p@* p:@(y #(a ($  #(  # & X p: #}a (COPYRIGHT (C) 1978 WHITESMITHS, LTD. Z$ = SYS(CHR$(6%)+CHR$(-4%)+KB$+OUT$) !!! DO THE CALL !!! 1260 GOTO 32767 30000 ! CCL ENTRY... G30005 S%=-1% : GOSUB 5% M$30010 CORE.COMMON$ = SYS(CHR$(7%)) @30020 INP$ = RIGHT(CORE.COMMON$,INSTR(1%,CORE.COMMON$,' ')+1%) =30030 IF CVT$$(INP$,-1%)='' THEN 1000% ELSE 1200% ubuybuf.r c.rets c.r3 c.r2 c.r4 c.ents buybuf. alloc.Ϳ!~#fo"!~#fo"!!*ywx# w!~#fo"!>#҉x**#"**#"~:2:2Ï=!~#foMDØcmpbuf.rl c.rets c.r3 c.r2 c.r4 c.ents cmpbuf.Ϳ!~#fo"!~#fo"!~#fo"!>#҉S**#"**#" ʌYÜÙ:2:2È$cpystr.rg c.rets c.r3 c.r4 c.r2 c.ents cpystr.Ϳ!~#fo"!"*~#fo"!~#ʉO*~ʉ\**#"**#"~É(*6*MDÙ*##"Èdecode.r c.rets c.r3 c.r2 c.r4 c.ents c.ret _putf. _dcodx.] c.ent decode.!9!<!~#~!!~#~!>w#w! !N#F!!]!~#foMDͿ!~#fo"!~#fo"!~#fo"!>#* *  #҉*N#F*~w#~w**#"~* ~w#~w:2:2Ï!~#foMDØdtento.rB K c.rets c.dmul c.dtd c.ddiv c.r0 c.r2 c.r3 c.r4 c.ents dtento. _dtens. _ntens.! ~#fo":*>o>g">22!~#ʉ!::#҉*}o|g}ʏ!!~#~Šh!*))) ͱͪÉ!>#*">22!~#ʉ!::#҉*}o|g}ʎ!*))) ~#~Š!!ͪ͡É:2:2*#"É-!>#ҏ!!~#~Š;!*))) ͱͯ!!~#~Šm!*))) ͱͪ:2:2É!!ͪÙ:2:2*#"É!>#Ҏ!*))) ~#~Š!!ͯ͡!*))) ~#~Š!!ͪ͡:2:2Èencode.ri c.rets c.r3 c.r2 c.r4 c.ents c.ret _getf. _ncodx.H c.ent encode.!9!1!~#~!!~#~! !N#F!!HͿ!~#fo"!~#fo">22* >#ҍ!::#҉**#"*~#fo~* ~w#~w*#"*N#F*~w#~w~ ‰k*MDØerrfmt.rb" c.ret c.ent errfmt. write. _putf.ͧ!! N#F!!ͽØfclose.r " c.r2 c.r3 c.rets c.r4 c.ents fclose. _pfio. exit. write. close.Ϳ!~#fo"!~#4!!/!!é!"*~#fo"!~#ʉq!:‰\:#‰** ~#~* ~#~ʉ* ~#~‰É* "É:* ~#ʉ* N#F* *N#F* yŒx#ʍ! !"!!*N#Fx*MDìèwrite error bad fclose call fcreat.rc c.rets c.r4 c.ents fcreate create. finit.ͯ!!~#~ŒÏ%!N#F !N#F;i`":]!N#F*!N#FÜØfopen.rc c.rets c.r4 c.ents fopen. open. finit.ͯ!!~#~ŒÏ%!N#F !N#F;i`":]!N#F*!N#FÜØfread.r c.rets c.r2 c.r4 c.ents fread. read.ͳ>22!::#ҏY!~#fo!yOx#G!N#F!N#Fi`"!>#a*MDÞ!!  #** "È frelst.rT c.rets c.r2 c.r4 c.ents frelst. free.ͷ!~#fo"!~#fo"!~#ʉL!:‰1:#ʉL*N#F*i`"É*MDØgetch.rM c.ret c.ent getch. stdin. getc.͡!ͺØgetf.rf& c.ret c.ent getf. getl. _getf.ͧ!!N#F!N#F!ͽØgetfi.rT c.rets c.r3 c.r2 c.r4 c.ents getfile cmpstr. open.Ϳ!~#fo"!~#fo"*#~+!"ÉX*~#ʉM!*~#foN#Fyʏ!~#fo"*~w#~w*~w#~ w+>#Îyʉ*>w>#wÏ!!*~#foN#Fi`":X! ~#fo"ÉX*MDØ-getfl.r  c.r3 c.r4 c.rets c.r2 c.ents getflag lenstr. btoi. cmpstr.Ϳ!9!(~#fo~w#~w!~#fo~w#~w+>#{!~#f o~#fo~#fo"!*yʏ!~#fo~w#~w!~#fo~w#~wï!~#f o~w#~wÉ!*y‰{*~-ʉ*~+‰{*~-‰*#"*~ʏ!~#fo"!>w#w!! }|*"*~*!>w #w!*~ʉ%*MDÏa!~#fo~w#~w+>#\!~#fo~w#~w+~#foN#FÉa*MDywx# w!N#Fi`! ~#fo "ÉQ*~?!>w #w!*~*~ʉQ*#"ÉQ*~#ŽT!*~0*>9Ïywx#w!> w#w*~0‰h* ~A.* >Z.* ~O G! MDÉ:* ~OGyxŒCx!>w#wÉh*~,ʉ*~‰Ï!N#F!*** "ÏQ!>w#wÏh!~#ʏ6!~#fo~#fo!~#~*"É*~>c!~#ʏ!~#f o~#fo>#ҏ!~#f3o~#fo##!~#fo~#fo~w#~w+~#fo) !~#~*"É*~ʏ[!~w#~w*"*#"É*MDé** !>w#w!>w#w*#"ÏQ!~w#~w*"ÉQ*MDï!>w#w*~,ʉ*~>ʉ*~ʉ*#"É:2:2ÈQ---getfmt.rm" c.ret c.ent getfmt. getl. stdin. _getf.ͧ!!N#F!!Øgetlin.r` c.ret c.ent getlin. stdin. getl.ͧ!N#F !N#F!ͼØinbuf.r c.rets c.r3 c.r2 c.r4 c.ents inbuf.Ϳ!~#fo"!~#fo"!>#ҏP!~#fo"** ‰c*!yOx#GÙ*!yOx#GÙ*#"*~‰0:2:2*#"Èinstr.rp c.rets c.r2 c.r4 c.ents instr.ͷ!~#fo"*~ʏI!~#fo"*~ʉ\** ‰f*!yOx#GÙ*!yOx#GÙ*#"É*#"È!itols.rA c.rets c.irsh c.r4 c.ents itols.ͷ!~#fo"**#"!~*!N#F!ͥ}*MDØlstoi.rx? c.rets c.r4 c.ents lstoi.ͯ!~#fo"*~OGi` }o|g* ~OGi`)))))))) MDØnotbuf.r c.rets c.r3 c.r2 c.r4 c.ents notbuf.Ϳ!~#fo"!~#fo"!>#ҏW!>w #w!~#fo"** !>w#wÉ*!yOx#GÙ:2:2*#"É*#"*~<!~#‰jÈWnotstr.r c.rets c.r2 c.r4 c.ents notstr.ͷ!~#fo"*~ʏP!>w #w!~#fo"*~ʉm** z!>w#wÉm*!yOx#GÙ*#"Ï!~#‰cÉP*#"È-prefix.rJ c.rets c.r2 c.r4 c.ents prefix.ͷ!~#fo"!~#fo"*~ʉD**#"**#" ʌÜØputch.rW c.ret c.ent putch. stdout. putc.ͧ!N#F!ͻØputf.rf& c.ret c.ent putf. putl. _putf.ͧ!!N#F!N#F!ͽØputfmt.rm" c.ret c.ent putfmt. putl. stdout. _putf.ͧ!!N#F!!Øputlin.rt' c.rets c.r4 c.ents putlin. stdout. putl.ͯ!~#fo"!N#F*!Øscnbuf.rq c.rets c.r2 c.r4 c.ents scnbuf.ͷ!9!~#fo"!!~!~#fo"!>#҉D*! ‰W*!yOx#GÙ:2:2*#"È*scnstr.rW c.rets c.r2 c.r4 c.ents scnstr.ͷ!9!~#fo"!!~*"*~ʉ;*! ‰M*!yOx#GÙ*#"È%sort.r  c.ihl c.r3 c.r2 c.rets c.r4 c.ents c.ret _sort." c.ent sort.!!~#fo !͌"!~#fo"!!   #F÷!~#fo "!~#fo"!::#*#"!::#* !N#F**~#fo͟>oÍ!:‰:#ʉd* !N#F** ~#fo͜Éd:2:2!::#1* !N#F**~#fo͞x!::#`* *** ~#fo͜É`*!yOx#G!~#fo!yOx#G}|** !N#F͌"*!N#F* ͌"É*!N#F* ͌"** !N#F͌"ðstdin.rstdin. stdout.rstdout. substr.rz7 c.ret c.ent substr. subbuf. lenstr.ͧ!N#FͿ!N #F!N#FͿ!N#F͵Ømain.rT ` c.rets c.r3 c.r2 c.ents _main. create. close. open. exit. putstr. main.ͷ!9!t!}|!"!**#"~ !>#d!>#*> *~Ï!>w #w!v}ywx#w!"!t:‰:#ʉ*~<!!!* yʍN!!o* !q!! 9!ÏN!>#Ïd!~w#~w*#"ÏB!>#*> *~!tN#F!t~w#~w*~Al*>Zl*~OG!  MDÉt*~OGyw!~w#~w*#"Ï!tN#F!t~w#~w6Ï5!v!N#FÙ*#"É*~>&!!!* yŒxʍN!!`* !b!! 9!ÏN!N#F!~w#~w)!v :w:#w*~ʉ*#"ÈN can't write can't read open.rh0 c.ret c.ent open. _copen.ͧ!N#F !~#ʌÏ!N#FʹØremove.rQ c.ret c.ent remove. _copen.ͧ!! !N#FʹØuname.r>  c.ret c.ent uname.͡! MDØctempc.cgetf.r B  c.ret c.ihl c.ent btoi. c.dtf c.dtd btod. btol. cpybuf. c.lor c.r1 c.llsh c.r0 c.r3 c.r4 _getx. c.r2 c.rets c.ents _getf.͇!9!~#fo"B !~#fo"D !~#fo~Œ1Ç!!!"*͏ ywx# w+>#`Ç!>w #w!~#fo"*~ʉ*~%ʉ*~ ʉ** !>#É*~!~#foMDÇ!~#foMDÁ*#"!~w#~w*#"Év*~ P!>w#w* ~ʏ<!!!"*͏ ywx# w+>#<!~#ʏJ!N#FÌMÁ*#"!>w #w!6 *~-!>w #w!*#"*~É*~+Ž!*#"*~!>w#w*~0*>9!*~OG!~#foMD)) )  }|*#"Ï!>w#w*~.‰Z*#"*~0Z*>9Z!*~OG!~#foMD)) )  }|*#"É*~aʉ~*~hʉ~*~oʉ~*~uŽ!**#"~!~h!>w#wÏ!6Ï!~o!>w#wÏ!> w #w!:w:#w!!~#~!>#*"!!!  #(!N#FÏ/!N#Fywx#w!>#h!~#fo* ~ h!~w#~w*!~#fo "!!   #Ï!>#*> *~*"!>#*> *~!~w#~w*#"Ï!~w#~w*#"Î!*!yOx#Gywx#w!~#ʏW!>#*! !~w#~w*#"Ï%!!~#fo* }|!>#!~#f o! !~w#~w!~w#~wÉu*~xʉ<*~bʉ*~p !~#ʏ!!!  #!N#FÏ!N#Fywx#wÉ*~lQ!~af!w#w#w#w!>#!!~#~#~#~!!**#" 2222!~#~#~#~!~w#~wÏ(!N#F*! ~#foN#F*~p! ~#f.o~#fo!~#fo 6! ~w#~w!~w#~wÏ<! ~?w#~w! N#F! ~w#~w~#fo!~#~!~w#~w!* }|Ék*~dʉ*~f‰Ï!N#F!!N#F*!yŒx#ʏ!~#foMDÇ! N#F5! ~w#~w~#fo!~#~#~#~!~w#~wÏ<!!N#F*!yŒx#ʏ:!~#foMDÁ*~cʉ*~iʉ*~sʏ!~ʉÉ*~dj! N#F! ~w#~w~#fo!Ï! N#F! ~w#~w~#fo!Ϳ!~w#~wÏ<!~aG!>w#w!>#!**#"~OG!)~#fo))))))))}o|g}|!~w#~wÏ!># !~#fo*  !~#fo#"!!~#fo }|Ï<!N#F!!N#F*ͷ!yŒsx#ʏ!~#foMDÁ*~c! N#F! ~w#~w~#fo!~Ï! N#F-! ~w#~w~#fo!~#~!~w#~w*~cʉ<*~iʉ<*~sʉ<:2:2Ï<!~#foMDÁͯ!N#F !N#F*D *B ͤØbtod.r2 c.rets c.dneg c.r2 c.dadd c.itd c.r1 c.dmul c.r0 c.dtd c.r3 c.r4 c.ents btod. _dtens. _dzero. dtento. btoi.!9!~#fo"!~#fo"!>w#w!>#҉G*> *~!>#҉*~-‰"*#":2:2!>w#wÉ*#":2:2Î)!!!>#҉E*~0E*>9E!!~#~Š!!*~OG!! ͹ͱ*#":2:2É*~+‰*#":2:2Ë>22!>#҉*~.‰*#":2:2!>#҉*~0*>9!!~#~Š!!*~OG!! ͹ͱ*#":2:2:2:2É{!>#҉*~A4*>Z4*~OG!  MDÉ<*~OGyeŒEx‰*#":2:2! !**ͅ* "*!~#fo "!*! >+F+N=‰͆! 9!!~# fo!~#ʏ!~#~Š!͢~#~ŠÍ!~#~Š!*!yOx#GØcmpstr.rX c.rets c.r2 c.r4 c.ents cmpstr.ͷ!~#fo"!~#fo"*~ʉD**#"**#" ʌÙ*~ŒRÌUØcputf.r   c.ret c.ihl c.ent exit. write. itob. dtoe. ltob. dtof. lenstr. c.rets _putx. c.r3 c.r2 c.r4 c.ents _putf.͇!9!~#fo"! ~#fo"!~#fo" !~#fo""*"*~ʉb*~%ʉb*#"É:* "É4!::#҉*!yOx#G*͋**#"~‰!>w #w!6 *~-!>w #w!*#"*~É*~+Ž!*#"*~!>w#w*~0B*>9B!*~OG!~#foMD)) )  }|*#"Ï!>w#w*~.‰*#"*~0*>9!*~OG!~#foMD)) )  }|*#"É]*~aʉ*~hʉ*~oʉ*~uŽ!**#"~!~h!>w#wÏ5!6Ï!~o!>w#wÏ5!~u*!> w#wÏ5!>w>#w*~xL!>w#wÉ*~bŽ!**##"~#~!**##"~#~ !~#ʏ!!!  #!N#FÏ!N#Fywx#w!~#ʏw!!   #w!!͏!~ w#~wÉ*~pŽo!*~#~!**##"N#Fywx#w!~#ʏ!!!  #_!N#FÏf!N#Fywx#wÉ*~l!~aŽ!**##"}|a!!~#fo#~!!~#fo~!!~#fo###~!!~#fo##~!!}|!>w#wÉ*~f!!'}|!!N#F!!yOx#G* N#F* N#F* N#F*N#F!!9ywx#w*}o|g"Ï!!}|!!N#F* N#F*N#F!ywx#w*####"É*~dU!!}|!!>>#Ï!N#F!* N#F* N#F* N#F*N#F!!9ywx#w*}o|g"É*~cʉy*~sʉy*~iʏy!~ʏ!~aŽ!**##"}|*~c9!>w#wÍ !:w:#w!>w#wÏ!!}|!!N#F**##"N#F!ywx#w*~cʉ*~sʉ*~iʉ:2:2Ï!!5~#fo#~!!~#fo~!!}|!>w#wÏ !>#!N#F !N#F͏!~#U!!   #U!!͏!~ w#~wÉͯ!N#F !N#F*"* ͧ!yŒx#ʍ! !$!Ϳ!ͲØwrite error dtoe.r~ c.rets c.imod c.idiv c.r3 c.r2 c.dtd c.dneg c.r0 c.dcmp c.r4 c.ents dtoe. _dzero. _norm. _round.!9!~#fo"!!W!!~#~Š5!**#"6-!!! >+F+N=Žj!͇! 9y$wx#w!!~#fo!~#fo }|ҏ!~#fo!~#fo MDÏ!!͇~w#~w>22::5!::#҉5**#"!* ~*#"!~w#~wÏ!>#҉**#"6.>22!::#҉** }|**#"!* ~*#"*#"ÉZ**#"6e!#~**#"6-!!~#fo>o>g}|Í#!::#҉**#"60*#"É**#"6+**#"!N#F! ͯ0 }**#"!N#F! ͧ0 }*!yOx#GØdtof.r] v c.rets c.r2 c.dtd c.dneg c.r0 c.dcmp c.r3 c.r4 c.ents dtof. _dzero. _norm. _round.!9!~#fo"!~#fo"!!b**#"6-!!~#~ŠN!ͱͮ!"!!! >+F+N=‰|*! 9ywx#w!!~#fo* }|!>>#!>w#w!!N#F!!~w#~w!!  #-!~#fo!yOx#G* "!!~#~!>#e**#"60!>#**#"6.Ï!>#H**#"*!y OxGyx҉**#"~OGÏ0yw! ~w#~wÏe!#~!>#**#"60! ~w#~w:2:2É!>#c**#"*!y OxGyx҉J**#"~OGÏM0yw:2:2É*!yOx#GØcnorm.rt c.rets c.dsub c.itd c.r1 c.dti c.dmul c.ilsh c.ddiv c.r3 c.dtd c.dneg c.r0 c.dcmp c.r2 c.r4 c.ents _norm. _ntens. _dtens. _dzero.͇!9!~#fo">22!!S!!~#~Š?!!!* "!>#!*))) !!~#~Š!*))) *!* "Ë>22!::#ҏl!!~#~Š !!Ϳ!!~#~Š5!!!!N#Fͩ͡**#"!~ #fo0 }*#"Î!!!!~#~Š!!*#"É:2:2Él* "!>#!*))) ~#~Š !!!Y!!!* :2:2:2:2É*MDØcpybuf.rl c.rets c.r3 c.r2 c.r4 c.ents cpybuf.Ϳ!~#fo"!~#fo"!~#fo"!>#҉_**#"**#"~:2:2Ï$!~#foMDØcround.rG c.rets c.r2 c.r4 c.ents _round.ͷ!~#fo"!#~!!   #*!~# fo ~5!~#fo ":** ~9‰** 60:2:2ÌOÙ:*61!~#fo"!>#** 60:2:2É** 4ÌØfinit.r/ \ c.rets onexit. _flush. lseek. exit. write. c.r2 c.r4 c.ents finit._pfio.\!~#fo"!~#fo"!~#<!!d!!ͺ*!~#~* >w#w* :‰n:!!`##N#F+++N#F!N#FͷxÉ*MDywx#w:‰:ʉ:‰:‰* :\w:]#w*"\!^~#‰!ͤi`"^*MDÙ*\"!~#ʉC* >#K* N#F* *N#FÉK*^MDÙ* ~#fo"Èbad finit call getc.rN c.rets c.r4 c.ents getc. exit. write. read.ͯ!~#fo"!~#1!!!!ͺ* ~#‰y* !* * } | i`N#F*N#Fywx#w* ~ w#~w+#~* >w>#wÙ* N#F* ~w#~w~OGyOxGØbad getc call getl.r A c.rets c.r3 c.r2 c.r4 c.ents getl. exit. write. read.Ϳ!~#fo"!~#fo"!~#<!!A!!>22* ~#‰* !* * } | i`N#F*N#Fywx#w* >#* >w>#w*MDÝ!::#҉* >#*#"* ~w#~w** N#F* ~ w#~w~*~ ‰7*MDÝ!::#ډF*MDÙ*#"Èbad getl call itob.r  c.rets c.umod c.udiv c.r2 c.r3 c.r4 c.ents itob. uldiv. ulmod.!~#fo"*"!#~O!>#O!~#f o>o>g"**#"6-ÏZ!~#fo"!~#r!> w#wÏ!#~!!~#fo>o>g}|!::#ڏ!N#F*!N#Fͩ*͌* "**!N#Fͧ0 }*>9*~'w*!yOx#GØltob.rY  c.rets c.ladd c.r1 c.lclt c.lneg c.r0 c.r2 c.r4 c.ents ltob. uldiv. ulmod.!~#fo"*"!#~n! >#n!!~#~#~#~!Ϳ~#~ #~#~**#"6-! ~#! > w#wÏ! #~! ! 5~#fo>o>g}|!! #~~+~ !#~!!ͱ1! N#F$!##N#F+++N#F!##N#F+++N#F!##N#F+++N#F*͍* "*!##N#F+++N#F!##N#F+++N#F!>02222!ͧ##~*>9*~'w*!yOx#GØputc.r[) c.rets c.r2 c.r4 c.ents putc. exit. write.ͷ!~#fo"!~#fo"!~#<!!!!:* ~#~* N#F* ~ w#~w* :wÉ* >#0*MDÙ* N#F* *N#F* yŒx#ʍ! !!!É* >w#w* :w: ‰:‰(* ~%#~‰*MDÙ* N#F* *N#F* yŒax#ʍ! !!!Ù* >w#w*MDØ)write error write error bad putc call putl.r) c.r3 c.rets c.r2 c.r4 c.ents putl. exit. write.Ϳ!~#fo"!~#fo"!~#@!!!!ç!~#fo"!>#!* * ~#f o }|!>#l* ~#~l!N#F!~w#~w**#"~:2:2* ~w#~wÉx* ~#~ʉ* ~#ʉ* ~#fo* ~ ‰* N#F* *N#F* yŒLx#ʍ! !!!É!>#K!* *N#FyŒxʍ! !!!ÉK* >w#wÏK!~#foMDá* >w#wÈ)write error write error bad putl call putstr.rB c.rets c.r4 c.ents putstr. write. lenstr.ͭ!"*~#ʉ?*N#F*N#F!N#Fͼ*##"É Øsubbuf.rl c.rets c.r4 c.r2 c.r3 c.ents subbuf.Ϳ!~#fo"!*!yOx#Gi`! ~#fo  ډ*!~#fo ‰*"!~#fo"*!yOx#G!yx#҉*!yOx#G! ~#~ډ** ʉÏ!~#foMDÙ*#"É*!y Ox#G! yŒx#‰*!yOx#GÙ*#"*#"È]create.rU c.ret c.ent create. _copen.ͧ!N#F!!N#FʹØlseek.r ( c.llsh c.r0 c.r4 c.ladd c.r2 c.rets c.r3 c.ents lseek. _ckfd. _setex.!N#Fi`"!~#ʉ** ~0* ~#fo"! ~#‰f*$ !~#~#~#~Ï! ~t#~‰*$ !ͲË>22!**x!* ~*}ƀo|g"É*$ *!~# fo |22|2}2!!͞!ͷ~#~#~#~!~#foMDread.r/ , c.ladd c.r0 c.switc c.r2 c.r4 c.rets c.r3 c.ents read. _ckfd. cpm. exit. _rdwr.!N#Fi`"!~#Œ#* ~#fo"!~#fo"!>#g* ~z* ~OG!é*!yOx#G!*!é!~#Œ*! ~‰** 6}** ! ! !*! *+ ~OGyw*" *, }|*" ~#fo*+ ~OG 6 **" N#F*" ~ w#~w~*! 5*~OGy OxGy‰*#"!~w#~wÉ<*!!ywÌG*~ ʉ<*~ʉ<*~ʉg*~ ‰*!yOx#G*#"!~w#~wÌ<*!yOx#G!>#<*! ~ʉ<**" ~#fo~*~OGy OxGy‰*#"!~w#~w*! 5*" ~w#~w*$ >22>2>2!͚É*~OG!é*!yOx#GÉKÉKÊK* ~OGyŒx!*#"!~w#~wÈKs btoi.r c.rets c.imul c.r3 c.r2 c.r4 c.ents btoi.!~#fo"!~#fo">22!:w:#w!>w#w!>#҉\*> *~!>#҉*~-=!>w#w*#":2:2É:2:2*#"Ï>! ~#~‰`::ډ`*~0‰`* ~A* >Z* ~O G! MDÊ* ~OGyxŒx‰`*##":2:2É`*~+‰*#":2:2É!>#҉*~0*>9!*~OG! }|Ï(!~#f o!~#ʉ*MD>O>GÉ*MDywx#w!>#҉*~A*>Z*~OG!  MDÉ*~OGylŒx‰*#"É*~aa*>zsÉa*! N#Fͧ!~#fo ":2:2*#"É`*~A*>Z!*~A*>Z*~OG!  MDÉ*~OG! }|!!   #(É*!yOx#GØbtol.ru X c.rets c.ladd c.lmul c.r1 c.lneg c.r0 c.r3 c.r2 c.r4 c.ents btol.!~#fo"!~#fo"!w# w#w#w!:w:#w!>w#w!>#҉_*> *~!>#҉*~-@!>w#w*#":2:2É:2:2*#"ÏA! ~#~‰c::ډc*~0‰c* ~A * >Z * ~O G! MDÊ* ~OGyxŒ"x‰c*##":2:2Éc*~+‰*#":2:2É!>#҉*~0Q*>9Q*~OGi` "Ïf!~#f o!~#ʏ!~#~#~#~!ͺ~#~#~#~Í!~#~# ~#~:w:#w:#w:#w!>#҉E*~A3*>Z3*~OG!  MDÉ;*~OGylŒDx‰E*#"ÉE*~a*>zÏ!!~#~#~#~!! #~22~2+~2!ͩ:22:2:2!ͧ~#~ #~#~:2:2*#"Éc*~A*>Z*~A!*>Z!*~OG!  MDÉ)*~OGi` "! ::#fÉ*!yOx#GØcfcon.riB_ntens.@_dzero.8_dtens.B@ BCG@M [u+plenstr.r8 c.rets c.r2 c.r4 c.ents lenstr.ͷ!~#fo"*"*~ʉ&*#"É*!yOx#GØcopen.rR ? onexit. _getnam _clrbuf alloc. _wcbs. _copen. c.r2 c.r3 c.rets cpm. close. c.r4 c.ents>22::,**#"É :OG!*MD!~#fo"!ywx#w! ~#fo~#ʉ*"!~#fo~#fo"** ‰*~ʉ*#"*#"Ì!~w#~wÉ`** !~#f o##~OG!9!~#fo": !!y2!>w#w!~#~6!~#fo)) ~J!~#~Z!~w#~wÏ!! ~#fo)) }|!~#fo6!!~#!~#fo~w!~#fo##>w#w!:w:#w>22*~:ʉ*~ʉ::P**#"! *~a*>z*~OG! MDÉ*~OGywÎP!* 6*~:ʏZ!~#fo"!~#fo#:wÉ*#"Ï!~#f o#!͏Eyw~!N#F*#"!~#fo#~!~#f o#~OGyŒx#!~#~#!!͵i`"!~#fo##:w:#w!*ͫ*( >w>#w!~#fo#~0!~#foMD!~#foMD**͏!~#fo#~OG!!~#fo}o|g}Œn|‰*!x!N#F*!!~#~!N#F!~#foMD*!x!N#F!~#fo~w!~#‰!͜i`"!~#foMD!~#fo"!~#fo">22*~.ʉ*~ʉ::**#"* *~a*>z*~OG! MDÉ*~OGyw*#"ÉB::**#"* 6 É*~.‰*#">22*~ʉX::X**#"* *~aC*>zC*~OG! MDÉK*~OGyw*#"É::**#"* 6 ÉXLSTPUNRDRCONDCBAclose.rs c.rets c.r4 c.ents close. _ckfd. free. _wblk.ͯ!N#Fͼi`"!~#Œ#Ù* ~#ʉa*~OGy OxGya!** N#F*6!~#foMDØalloc.rZ* _hmergeH free. sbreak. _breakug c.udiv c.r3 c.r2 exit. write. c.rets c.r4 nalloc.K c.ents alloc.!N#F !N#F͍Ki`"!~#ʉ.*MD!!!!!~#fo"::ҌoÉt*MDi`#} o|g##"!"*~#fo"!~#ʉ*~#fo####!yx#ډ*!  #҉ ** ~#~É!:‰:ʉ@*!ͺ"É@* "É***͏gywx#w* ! ~#~* MD!>w#w!::#ڏ!!:w:#w+N#Fͯywx#w+~#‰*!ͺ"ÏK!~#!!:w:#w+N#Fͯywx#w!~#Œ!~#fo!~#fo }|!~#!~#fo"!!~#~!~#fo!~#fo ::ҏF!~#fo!~#fo MDÉK*MDi`"!! ~#fo##͋É!~#fo"!~#fo"!:w:#w+~#fo* "**~#fo!yOx#Gywx#w* * ~#~** }|*MD!~#ʏQ!~#fo "*~#fo}o|g}‰7!::#ډ7!::#ڍ^!!!!!~#foMD!~#‰~* >w#w*"ÉQ!::#҉* :w:#w*"*͊HÉQ*"* ~#fo"!~#ʉ!::#҉*"É!~#ʉ* :w:#w* :w:#w*͊H*͊HÉQ* >w#w* :w:#w*͊HÉQ!~#fo"*"* ~#fo"**~#fo ####!yŒx#‰**~#fo### #  * * ~#~*out of heap space bad free call exit.rP c.rets c.r4 c.ents c.ihl c.ent exit. onexit.4͹!P~#ʉ+!4:P‰:Qʉ+*Pͳi`"PÉ*RͱÉ+ͩ*P"!~#fo"P*MDØ4sbreak.ra c.ret c.ent sbreak. _memoryͧ!:aw:b#w*a!~#fo "a!:a:b҉C!:a:bҏT!~#fo"aß!~#foMDØwrite.r4  write. _ckfd. c.ladd c.r0 _rdwr. c.r2 c.switc c.rets exit. cpm. c.r3 c.r4 c.ents!~#fo"!~#fo"!>#Z! yOxGyʍm!yŒLxm!Ém*!yOx#G* ~* ~OG! * ~#fo"!*;yŒxŒ*~OG!!~ w#~w*#"É*~OG!É*~OG!Ï!~#foMD!>#*! ~ʉ*" N#F*" ~ w#~w**#"~*$ >22>2>2!ͯ!~w#~w*! 5É*~OGy OxGyʉ*! ~ʉ*" ~#fo6*~wÉ!N#Fͤi`"!~#Œ*~OGy OxGy&!N#F !N#F*͌!~#fo"!>#q*"!>#*~ ʉ*#"!~w#~wÉD*!yOx#G*!yOx#G**͍*!yOx#G}‹|ʌ!>#1!!*͏yŒxʌ*#"!~w#~wÈ1  ckfd.rD c.rets c.r4 c.ents _ckfd. _wcbs.ͯ!~#fo":0::0*)) ~Œ6Ù*)) MDØwcbs.r_wcbs.- 5wblk.rx c.irsh c.switc cpm. _clrbuf6 _setex. _wblk. c.rets c.r3 c.lrsh c.r0 c.r2 c.r4 c.ents _rdwr.!~#fo"* ~#fo"!*$ ~#~#~#~!!##~#~*$ ##N#Fi`}o|g"*! !!yOx#Gyw*" ** * }| !~#Ž!*(  #Œ!*͍x!N#F !N#F*͎x* ~OG* ~OGyOxG}|5Î8i`"!*( S #‰^*MD*( ! ~#~!~#ʍ!** ͎6* ~O G!ͫ** !ͫ*!ͭi`"!!ͫ*MD!xä!** ͎6!~#fo"* ~#fo"*~OGy OxGyʍ`!*( N#F*͏yŒWxŒ!~#ʉ*~OGy OxGyʊ* ~O G!ͫ*!ͫ*~wÊ* ~O G!ͫ** !ͫ*!ͭi`"!!ͫ!~#ʌ*~w*~wÌ`!~#fo"* ~#fo"!N#F!͚"* ~OG:‰d:‰|*~OGy OxGyŠ* ~O G!ͫ*~OGy OxGyʉ*!ͭx*~w* :w*!ͭx!~#‰*!ͭx*~w*~ w* !~#fo}o|g}!~#fo"!~#fo":2:2:u*6*#"ÉOfill.rP c.rets c.r2 c.r4 c.ents fill.ͷ!~#fo"!~#fo"!>#҉C*!~:2:2Ï!~#foMDØlower.rx c.rets c.r2 c.r4 c.ents lower.ͷ!~#fo">22!::#҉k**~AO*>ZO*~OG!  MDÉW*~OGyw*#"*#"Ï!~#foMDØsqze.r c.rets c.r2 c.r3 c.r4 c.ents squeezeͿ!~#fo"!~#fo"*"!>#҉X*~OG!yŒ?x#ʉk**#"*~Ék*!yOx#GÙ:2:2*#"Èudecode.r c.rets c.r3 c.r2 c.r4 c.ents c.ret _putf. _dcodx.] c.ent decode.!9!<!~#~!!~#~!>w#w! !N#F!!]!~#foMDͿ!~#fo"!~#fo"!~#fo"!>#* *  #҉*N#F*~w#~w**#"~* ~w#~w:2:2Ï!~#foMDØerrfmt.rb" c.ret c.ent errfmt. write. _putf.ͧ!! N#F!!ͽØputf.rf& c.ret c.ent putf. putl. _putf.ͧ!!N#F!N#F!ͽØputfmt.rm" c.ret c.ent putfmt. putl. stdout. _putf.ͧ!!N#F!!Øencode.ri c.rets c.r3 c.r2 c.r4 c.ents c.ret _getf. _ncodx.H c.ent encode.!9!1!~#~!!~#~! !N#F!!HͿ!~#fo"!~#fo">22* >#ҍ!::#҉**#"*~#fo~* ~w#~w*#"*N#F*~w#~w~ ‰k*MDØgetfmt.rm" c.ret c.ent getfmt. getl. stdin. _getf.ͧ!!N#F!!Øgetf.rf& c.ret c.ent getf. getl. _getf.ͧ!!N#F!N#F!ͽØcgetf.r B  c.ret c.ihl c.ent btoi. c.dtf c.dtd btod. btol. cpybuf. c.lor c.r1 c.llsh c.r0 c.r3 c.r4 _getx. c.r2 c.rets c.ents _getf.͇!9!~#fo"B !~#fo"D !~#fo~Œ1Ç!!!"*͏ ywx# w+>#`Ç!>w #w!~#fo"*~ʉ*~%ʉ*~ ʉ** !>#É*~!~#foMDÇ!~#foMDÁ*#"!~w#~w*#"Év*~ P!>w#w* ~ʏ<!!!"*͏ ywx# w+>#<!~#ʏJ!N#FÌMÁ*#"!>w #w!6 *~-!>w #w!*#"*~É*~+Ž!*#"*~!>w#w*~0*>9!*~OG!~#foMD)) )  }|*#"Ï!>w#w*~.‰Z*#"*~0Z*>9Z!*~OG!~#foMD)) )  }|*#"É*~aʉ~*~hʉ~*~oʉ~*~uŽ!**#"~!~h!>w#wÏ!6Ï!~o!>w#wÏ!> w #w!:w:#w!!~#~!>#*"!!!  #(!N#FÏ/!N#Fywx#w!>#h!~#fo* ~ h!~w#~w*!~#fo "!!   #Ï!>#*> *~*"!>#*> *~!~w#~w*#"Ï!~w#~w*#"Î!*!yOx#Gywx#w!~#ʏW!>#*! !~w#~w*#"Ï%!!~#fo* }|!>#!~#f o! !~w#~w!~w#~wÉu*~xʉ<*~bʉ*~p !~#ʏ!!!  #!N#FÏ!N#Fywx#wÉ*~lQ!~af!w#w#w#w!>#!!~#~#~#~!!**#" 2222!~#~#~#~!~w#~wÏ(!N#F*! ~#foN#F*~p! ~#f.o~#fo!~#fo 6! ~w#~w!~w#~wÏ<! ~?w#~w! N#F! ~w#~w~#fo!~#~!~w#~w!* }|Ék*~dʉ*~f‰Ï!N#F!!N#F*!yŒx#ʏ!~#foMDÇ! N#F5! ~w#~w~#fo!~#~#~#~!~w#~wÏ<!!N#F*!yŒx#ʏ:!~#foMDÁ*~cʉ*~iʉ*~sʏ!~ʉÉ*~dj! N#F! ~w#~w~#fo!Ï! N#F! ~w#~w~#fo!Ϳ!~w#~wÏ<!~aG!>w#w!>#!**#"~OG!)~#fo))))))))}o|g}|!~w#~wÏ!># !~#fo*  !~#fo#"!!~#fo }|Ï<!N#F!!N#F*ͷ!yŒsx#ʏ!~#foMDÁ*~c! N#F! ~w#~w~#fo!~Ï! N#F-! ~w#~w~#fo!~#~!~w#~w*~cʉ<*~iʉ<*~sʉ<:2:2Ï<!~#foMDÁͯ!N#F !N#F*D *B ͤØcputf.r   c.ret c.ihl c.ent exit. write. itob. dtoe. ltob. dtof. lenstr. c.rets _putx. c.r3 c.r2 c.r4 c.ents _putf.͇!9!~#fo"! ~#fo"!~#fo" !~#fo""*"*~ʉb*~%ʉb*#"É:* "É4!::#҉*!yOx#G*͋**#"~‰!>w #w!6 *~-!>w #w!*#"*~É*~+Ž!*#"*~!>w#w*~0B*>9B!*~OG!~#foMD)) )  }|*#"Ï!>w#w*~.‰*#"*~0*>9!*~OG!~#foMD)) )  }|*#"É]*~aʉ*~hʉ*~oʉ*~uŽ!**#"~!~h!>w#wÏ5!6Ï!~o!>w#wÏ5!~u*!> w#wÏ5!>w>#w*~xL!>w#wÉ*~bŽ!**##"~#~!**##"~#~ !~#ʏ!!!  #!N#FÏ!N#Fywx#w!~#ʏw!!   #w!!͏!~ w#~wÉ*~pŽo!*~#~!**##"N#Fywx#w!~#ʏ!!!  #_!N#FÏf!N#Fywx#wÉ*~l!~aŽ!**##"}|a!!~#fo#~!!~#fo~!!~#fo###~!!~#fo##~!!}|!>w#wÉ*~f!!'}|!!N#F!!yOx#G* N#F* N#F* N#F*N#F!!9ywx#w*}o|g"Ï!!}|!!N#F* N#F*N#F!ywx#w*####"É*~dU!!}|!!>>#Ï!N#F!* N#F* N#F* N#F*N#F!!9ywx#w*}o|g"É*~cʉy*~sʉy*~iʏy!~ʏ!~aŽ!**##"}|*~c9!>w#wÍ !:w:#w!>w#wÏ!!}|!!N#F**##"N#F!ywx#w*~cʉ*~sʉ*~iʉ:2:2Ï!!5~#fo#~!!~#fo~!!}|!>w#wÏ !>#!N#F !N#F͏!~#U!!   #U!!͏!~ w#~wÉͯ!N#F !N#F*"* ͧ!yŒx#ʍ! !$!Ϳ!ͲØwrite error btod.r2 c.rets c.dneg c.r2 c.dadd c.itd c.r1 c.dmul c.r0 c.dtd c.r3 c.r4 c.ents btod. _dtens. _dzero. dtento. btoi.!9!~#fo"!~#fo"!>w#w!>#҉G*> *~!>#҉*~-‰"*#":2:2!>w#wÉ*#":2:2Î)!!!>#҉E*~0E*>9E!!~#~Š!!*~OG!! ͹ͱ*#":2:2É*~+‰*#":2:2Ë>22!>#҉*~.‰*#":2:2!>#҉*~0*>9!!~#~Š!!*~OG!! ͹ͱ*#":2:2:2:2É{!>#҉*~A4*>Z4*~OG!  MDÉ<*~OGyeŒEx‰*#":2:2! !**ͅ* "*!~#fo "!*! >+F+N=‰͆! 9!!~# fo!~#ʏ!~#~Š!͢~#~ŠÍ!~#~Š!*!yOx#GØbuybuf.r c.rets c.r3 c.r2 c.r4 c.ents buybuf. alloc.Ϳ!~#fo"!~#fo"!!*ywx# w!~#fo"!>#҉x**#"**#"~:2:2Ï=!~#foMDØdtoe.r~ c.rets c.imod c.idiv c.r3 c.r2 c.dtd c.dneg c.r0 c.dcmp c.r4 c.ents dtoe. _dzero. _norm. _round.!9!~#fo"!!W!!~#~Š5!**#"6-!!! >+F+N=Žj!͇! 9y$wx#w!!~#fo!~#fo }|ҏ!~#fo!~#fo MDÏ!!͇~w#~w>22::5!::#҉5**#"!* ~*#"!~w#~wÏ!>#҉**#"6.>22!::#҉** }|**#"!* ~*#"*#"ÉZ**#"6e!#~**#"6-!!~#fo>o>g}|Í#!::#҉**#"60*#"É**#"6+**#"!N#F! ͯ0 }**#"!N#F! ͧ0 }*!yOx#GØdtof.r] v c.rets c.r2 c.dtd c.dneg c.r0 c.dcmp c.r3 c.r4 c.ents dtof. _dzero. _norm. _round.!9!~#fo"!~#fo"!!b**#"6-!!~#~ŠN!ͱͮ!"!!! >+F+N=‰|*! 9ywx#w!!~#fo* }|!>>#!>w#w!!N#F!!~w#~w!!  #-!~#fo!yOx#G* "!!~#~!>#e**#"60!>#**#"6.Ï!>#H**#"*!y OxGyx҉**#"~OGÏ0yw! ~w#~wÏe!#~!>#**#"60! ~w#~w:2:2É!>#c**#"*!y OxGyx҉J**#"~OGÏM0yw:2:2É*!yOx#GØfclose.r " c.r2 c.r3 c.rets c.r4 c.ents fclose. _pfio. exit. write. close.Ϳ!~#fo"!~#4!!/!!é!"*~#fo"!~#ʉq!:‰\:#‰** ~#~* ~#~ʉ* ~#~‰É* "É:* ~#ʉ* N#F* *N#F* yŒx#ʍ! !"!!*N#Fx*MDìèwrite error bad fclose call fcreat.rc c.rets c.r4 c.ents fcreate create. finit.ͯ!!~#~ŒÏ%!N#F !N#F;i`":]!N#F*!N#FÜØfopen.rc c.rets c.r4 c.ents fopen. open. finit.ͯ!!~#~ŒÏ%!N#F !N#F;i`":]!N#F*!N#FÜØfrelst.rT c.rets c.r2 c.r4 c.ents frelst. free.ͷ!~#fo"!~#fo"!~#ʉL!:‰1:#ʉL*N#F*i`"É*MDØgetch.rM c.ret c.ent getch. stdin. getc.͡!ͺØgetfi.rT c.rets c.r3 c.r2 c.r4 c.ents getfile cmpstr. open.Ϳ!~#fo"!~#fo"*#~+!"ÉX*~#ʉM!*~#foN#Fyʏ!~#fo"*~w#~w*~w#~ w+>#Îyʉ*>w>#wÏ!!*~#foN#Fi`":X! ~#fo"ÉX*MDØ-getfl.r  c.r3 c.r4 c.rets c.r2 c.ents getflag lenstr. btoi. cmpstr.Ϳ!9!(~#fo~w#~w!~#fo~w#~w+>#{!~#f o~#fo~#fo"!*yʏ!~#fo~w#~w!~#fo~w#~wï!~#f o~w#~wÉ!*y‰{*~-ʉ*~+‰{*~-‰*#"*~ʏ!~#fo"!>w#w!! }|*"*~*!>w #w!*~ʉ%*MDÏa!~#fo~w#~w+>#\!~#fo~w#~w+~#foN#FÉa*MDywx# w!N#Fi`! ~#fo "ÉQ*~?!>w #w!*~*~ʉQ*#"ÉQ*~#ŽT!*~0*>9Ïywx#w!> w#w*~0‰h* ~A.* >Z.* ~O G! MDÉ:* ~OGyxŒCx!>w#wÉh*~,ʉ*~‰Ï!N#F!*** "ÏQ!>w#wÏh!~#ʏ6!~#fo~#fo!~#~*"É*~>c!~#ʏ!~#f o~#fo>#ҏ!~#f3o~#fo##!~#fo~#fo~w#~w+~#fo) !~#~*"É*~ʏ[!~w#~w*"*#"É*MDé** !>w#w!>w#w*#"ÏQ!~w#~w*"ÉQ*MDï!>w#w*~,ʉ*~>ʉ*~ʉ*#"É:2:2ÈQ---getlin.r` c.ret c.ent getlin. stdin. getl.ͧ!N#F !N#F!ͼØltob.rY  c.rets c.ladd c.r1 c.lclt c.lneg c.r0 c.r2 c.r4 c.ents ltob. uldiv. ulmod.!~#fo"*"!#~n! >#n!!~#~#~#~!Ϳ~#~ #~#~**#"6-! ~#! > w#wÏ! #~! ! 5~#fo>o>g}|!! #~~+~ !#~!!ͱ1! N#F$!##N#F+++N#F!##N#F+++N#F!##N#F+++N#F*͍* "*!##N#F+++N#F!##N#F+++N#F!>02222!ͧ##~*>9*~'w*!yOx#GØputch.rW c.ret c.ent putch. stdout. putc.ͧ!N#F!ͻØputlin.rt' c.rets c.r4 c.ents putlin. stdout. putl.ͯ!~#fo"!N#F*!Ømain.r  c.r4 c.rets c.r3 c.r2 c.ents _main. read. create. close. open. exit. putstr. main.Ϳ!>w#w!"!z!!i`":=>22!"!>#p!>#*> *~Ï!~#fo) >w#w!!N#Fá!>#Ép:2:2*#"ËO>22!::#** > ** ~*#"É**#"* 6*~<p!!!* yʍ!!* !!! 9!É*~>!!!* yŒxʍ!!* !!! 9!Ï!N#F!~w#~w) :w:#w!:2:#2** "ÈCi can't write can't read putstr.rB c.rets c.r4 c.ents putstr. write. lenstr.ͭ!"*~#ʉ?*N#F*N#F!N#Fͼ*##"É Øsubstr.rz7 c.ret c.ent substr. subbuf. lenstr.ͧ!N#FͿ!N #F!N#FͿ!N#F͵Øalloc.rZ* _hmergeH free. sbreak. _breakug c.udiv c.r3 c.r2 exit. write. c.rets c.r4 nalloc.K c.ents alloc.!N#F !N#F͍Ki`"!~#ʉ.*MD!!!!!~#fo"::ҌoÉt*MDi`#} o|g##"!"*~#fo"!~#ʉ*~#fo####!yx#ډ*!  #҉ ** ~#~É!:‰:ʉ@*!ͺ"É@* "É***͏gywx#w* ! ~#~* MD!>w#w!::#ڏ!!:w:#w+N#Fͯywx#w+~#‰*!ͺ"ÏK!~#!!:w:#w+N#Fͯywx#w!~#Œ!~#fo!~#fo }|!~#!~#fo"!!~#~!~#fo!~#fo ::ҏF!~#fo!~#fo MDÉK*MDi`"!! ~#fo##͋É!~#fo"!~#fo"!:w:#w+~#fo* "**~#fo!yOx#Gywx#w* * ~#~** }|*MD!~#ʏQ!~#fo "*~#fo}o|g}‰7!::#ډ7!::#ڍ^!!!!!~#foMD!~#‰~* >w#w*"ÉQ!::#҉* :w:#w*"*͊HÉQ*"* ~#fo"!~#ʉ!::#҉*"É!~#ʉ* :w:#w* :w:#w*͊H*͊HÉQ* >w#w* :w:#w*͊HÉQ!~#fo"*"* ~#fo"**~#fo ####!yŒx#‰**~#fo### #  * * ~#~*out of heap space bad free call btoi.r c.rets c.imul c.r3 c.r2 c.r4 c.ents btoi.!~#fo"!~#fo">22!:w:#w!>w#w!>#҉\*> *~!>#҉*~-=!>w#w*#":2:2É:2:2*#"Ï>! ~#~‰`::ډ`*~0‰`* ~A* >Z* ~O G! MDÊ* ~OGyxŒx‰`*##":2:2É`*~+‰*#":2:2É!>#҉*~0*>9!*~OG! }|Ï(!~#f o!~#ʉ*MD>O>GÉ*MDywx#w!>#҉*~A*>Z*~OG!  MDÉ*~OGylŒx‰*#"É*~aa*>zsÉa*! N#Fͧ!~#fo ":2:2*#"É`*~A*>Z!*~A*>Z*~OG!  MDÉ*~OG! }|!!   #(É*!yOx#GØbtol.ru X c.rets c.ladd c.lmul c.r1 c.lneg c.r0 c.r3 c.r2 c.r4 c.ents btol.!~#fo"!~#fo"!w# w#w#w!:w:#w!>w#w!>#҉_*> *~!>#҉*~-@!>w#w*#":2:2É:2:2*#"ÏA! ~#~‰c::ډc*~0‰c* ~A * >Z * ~O G! MDÊ* ~OGyxŒ"x‰c*##":2:2Éc*~+‰*#":2:2É!>#҉*~0Q*>9Q*~OGi` "Ïf!~#f o!~#ʏ!~#~#~#~!ͺ~#~#~#~Í!~#~# ~#~:w:#w:#w:#w!>#҉E*~A3*>Z3*~OG!  MDÉ;*~OGylŒDx‰E*#"ÉE*~a*>zÏ!!~#~#~#~!! #~22~2+~2!ͩ:22:2:2!ͧ~#~ #~#~:2:2*#"Éc*~A*>Z*~A!*>Z!*~OG!  MDÉ)*~OGi` "! ::#fÉ*!yOx#GØcmpbuf.rl c.rets c.r3 c.r2 c.r4 c.ents cmpbuf.Ϳ!~#fo"!~#fo"!~#fo"!>#҉S**#"**#" ʌYÜÙ:2:2È$cmpstr.rX c.rets c.r2 c.r4 c.ents cmpstr.ͷ!~#fo"!~#fo"*~ʉD**#"**#" ʌÙ*~ŒRÌUØcpybuf.rl c.rets c.r3 c.r2 c.r4 c.ents cpybuf.Ϳ!~#fo"!~#fo"!~#fo"!>#҉_**#"**#"~:2:2Ï$!~#foMDØcpystr.rg c.rets c.r3 c.r4 c.r2 c.ents cpystr.Ϳ!~#fo"!"*~#fo"!~#ʉO*~ʉ\**#"**#"~É(*6*MDÙ*##"Èdtento.rB K c.rets c.dmul c.dtd c.ddiv c.r0 c.r2 c.r3 c.r4 c.ents dtento. _dtens. _ntens.! ~#fo":*>o>g">22!~#ʉ!::#҉*}o|g}ʏ!!~#~Šh!*))) ͱͪÉ!>#*">22!~#ʉ!::#҉*}o|g}ʎ!*))) ~#~Š!!ͪ͡É:2:2*#"É-!>#ҏ!!~#~Š;!*))) ͱͯ!!~#~Šm!*))) ͱͪ:2:2É!!ͪÙ:2:2*#"É!>#Ҏ!*))) ~#~Š!!ͯ͡!*))) ~#~Š!!ͪ͡:2:2Èfinit.r/ \ c.rets onexit. _flush. lseek. exit. write. c.r2 c.r4 c.ents finit._pfio.\!~#fo"!~#fo"!~#<!!d!!ͺ*!~#~* >w#w* :‰n:!!`##N#F+++N#F!N#FͷxÉ*MDywx#w:‰:ʉ:‰:‰* :\w:]#w*"\!^~#‰!ͤi`"^*MDÙ*\"!~#ʉC* >#K* N#F* *N#FÉK*^MDÙ* ~#fo"Èbad finit call getc.rN c.rets c.r4 c.ents getc. exit. write. read.ͯ!~#fo"!~#1!!!!ͺ* ~#‰y* !* * } | i`N#F*N#Fywx#w* ~ w#~w+#~* >w>#wÙ* N#F* ~w#~w~OGyOxGØbad getc call getl.r A c.rets c.r3 c.r2 c.r4 c.ents getl. exit. write. read.Ϳ!~#fo"!~#fo"!~#<!!A!!>22* ~#‰* !* * } | i`N#F*N#Fywx#w* >#* >w>#w*MDÝ!::#҉* >#*#"* ~w#~w** N#F* ~ w#~w~*~ ‰7*MDÝ!::#ډF*MDÙ*#"Èbad getl call inbuf.r c.rets c.r3 c.r2 c.r4 c.ents inbuf.Ϳ!~#fo"!~#fo"!>#ҏP!~#fo"** ‰c*!yOx#GÙ*!yOx#GÙ*#"*~‰0:2:2*#"Èinstr.rp c.rets c.r2 c.r4 c.ents instr.ͷ!~#fo"*~ʏI!~#fo"*~ʉ\** ‰f*!yOx#GÙ*!yOx#GÙ*#"É*#"È!itob.r  c.rets c.umod c.udiv c.r2 c.r3 c.r4 c.ents itob. uldiv. ulmod.!~#fo"*"!#~O!>#O!~#f o>o>g"**#"6-ÏZ!~#fo"!~#r!> w#wÏ!#~!!~#fo>o>g}|!::#ڏ!N#F*!N#Fͩ*͌* "**!N#Fͧ0 }*>9*~'w*!yOx#GØlenstr.r8 c.rets c.r2 c.r4 c.ents lenstr.ͷ!~#fo"*"*~ʉ&*#"É*!yOx#GØnotbuf.r c.rets c.r3 c.r2 c.r4 c.ents notbuf.Ϳ!~#fo"!~#fo"!>#ҏW!>w #w!~#fo"** !>w#wÉ*!yOx#GÙ:2:2*#"É*#"*~<!~#‰jÈWnotstr.r c.rets c.r2 c.r4 c.ents notstr.ͷ!~#fo"*~ʏP!>w #w!~#fo"*~ʉm** z!>w#wÉm*!yOx#GÙ*#"Ï!~#‰cÉP*#"È-prefix.rJ c.rets c.r2 c.r4 c.ents prefix.ͷ!~#fo"!~#fo"*~ʉD**#"**#" ʌÜØputc.r[) c.rets c.r2 c.r4 c.ents putc. exit. write.ͷ!~#fo"!~#fo"!~#<!!!!:* ~#~* N#F* ~ w#~w* :wÉ* >#0*MDÙ* N#F* *N#F* yŒx#ʍ! !!!É* >w#w* :w: ‰:‰(* ~%#~‰*MDÙ* N#F* *N#F* yŒax#ʍ! !!!Ù* >w#w*MDØ)write error write error bad putc call putl.r) c.r3 c.rets c.r2 c.r4 c.ents putl. exit. write.Ϳ!~#fo"!~#fo"!~#@!!!!ç!~#fo"!>#!* * ~#f o }|!>#l* ~#~l!N#F!~w#~w**#"~:2:2* ~w#~wÉx* ~#~ʉ* ~#ʉ* ~#fo* ~ ‰* N#F* *N#F* yŒLx#ʍ! !!!É!>#K!* *N#FyŒxʍ! !!!ÉK* >w#wÏK!~#foMDá* >w#wÈ)write error write error bad putl call scnbuf.rq c.rets c.r2 c.r4 c.ents scnbuf.ͷ!9!~#fo"!!~!~#fo"!>#҉D*! ‰W*!yOx#GÙ:2:2*#"È*scnstr.rW c.rets c.r2 c.r4 c.ents scnstr.ͷ!9!~#fo"!!~*"*~ʉ;*! ‰M*!yOx#GÙ*#"È%subbuf.rl c.rets c.r4 c.r2 c.r3 c.ents subbuf.Ϳ!~#fo"!*!yOx#Gi`! ~#fo  ډ*!~#fo ‰*"!~#fo"*!yOx#G!yx#҉*!yOx#G! ~#~ډ** ʉÏ!~#foMDÙ*#"É*!y Ox#G! yŒx#‰*!yOx#GÙ*#"*#"È]cnorm.rt c.rets c.dsub c.itd c.r1 c.dti c.dmul c.ilsh c.ddiv c.r3 c.dtd c.dneg c.r0 c.dcmp c.r2 c.r4 c.ents _norm. _ntens. _dtens. _dzero.͇!9!~#fo">22!!S!!~#~Š?!!!* "!>#!*))) !!~#~Š!*))) *!* "Ë>22!::#ҏl!!~#~Š !!Ϳ!!~#~Š5!!!!N#Fͩ͡**#"!~ #fo0 }*#"Î!!!!~#~Š!!*#"É:2:2Él* "!>#!*))) ~#~Š !!!Y!!!* :2:2:2:2É*MDØcround.rG c.rets c.r2 c.r4 c.ents _round.ͷ!~#fo"!#~!!   #*!~# fo ~5!~#fo ":** ~9‰** 60:2:2ÌOÙ:*61!~#fo"!>#** 60:2:2É** 4ÌØstdin.rstdin. stdout.rstdout. cfcon.riB_ntens.@_dzero.8_dtens.B@ BCG@M [u+pitols.rA c.rets c.irsh c.r4 c.ents itols.ͷ!~#fo"**#"!~*!N#F!ͥ}*MDØlstoi.rx? c.rets c.r4 c.ents lstoi.ͯ!~#fo"*~OGi` }o|g* ~OGi`)))))))) MDØsort.r  c.ihl c.r3 c.r2 c.rets c.r4 c.ents c.ret _sort." c.ent sort.!!~#fo !͌"!~#fo"!!   #F÷!~#fo "!~#fo"!::#*#"!::#* !N#F**~#fo͟>oÍ!:‰:#ʉd* !N#F** ~#fo͜Éd:2:2!::#1* !N#F**~#fo͞x!::#`* *** ~#fo͜É`*!yOx#G!~#fo!yOx#G}|** !N#F͌"*!N#F* ͌"É*!N#F* ͌"** !N#F͌"ðfread.r c.rets c.r2 c.r4 c.ents fread. read.ͳ>22!::#ҏY!~#fo!yOx#G!N#F!N#Fi`"!>#a*MDÞ!!  #** "È create.r / c.r2 c.rets c.r4 c.ents create. _wcbs. close. open. isis.ͷ!9>22: ::*)) ~OGy OxGy‰M: :Wá*#"É*)) "*6!~#‰y*~w!* }B|!!~#~!>w#w!>w#w!!}|!!!~#ʏ!~#f o>o>gMDç!~#~ʉ'*!N#F!N#F!N#Fá*MDàlseek.r t c.land c.r1 c.lrsh c.lneg c.r0 c.rets c.r4 c.ents lseek. _ckfd. isis.!9!N#Fi`"!~#Œ(!#~r!!~#~#~#~!ͷ~#~"#~#~! ~w#~w!!~#~#~#~!!ͪ22>2>2!͟##~#~!!~#~#~#~!>2222!͟##~# ~!* ~P#~!! ~#fo##}|!!}|!!}|!!}|!!!~#fo>o>gMDopen.r c.r2 c.rets c.r4 c.ents open. _wcbs. isis.ͷ!9>22: ::*)) ~OGy OxGy‰M: :Wá*#"É*)) "*6!~#‰y*~w!* } |!!~#~!!~#~ŒÏ!N#F+ywx#w!>w#w!!}|!!!~#ʏ !~#f o>o>gMDá*MDàread.r c.r4 c.r2 c.rets c.r3 c.ents read. _ckfd. isis.Ϳ!9!N#Fi`"!~#Œ(ë>22!~#Ž!* ~L#~!!~#~!!~#~!!}|!!}|!!!~#ʏ!~#f o>o>gMDé*MDï!~#ʉ*~OGy OxGy!~#foMDï!>#2!~#fo~ ʏ9!~w#~w!~w#~w*#"!~w#~wË>22!~#fo ::)!~#fo* !~#fo* ~*#"ÈCremove.rJ c.ret c.ent remove. isis.ͧ!9!'!~#~!!}|!!ͷ!~#fo>o>gMDØsbreak.ra c.ret c.ent sbreak. _memoryͧ!:aw:b#w*a!~#fo "a!:a:b҉C!:a:bҏT!~#fo"aß!~#foMDØuname.r>  c.ret c.ent uname.͡! MDØctempc.write.r\ c.r4 c.r2 c.rets c.r3 c.ents write. _ckfd. isis.Ϳ!9!N#Fi`"!~#Œ(ë>22!>#*~OGy OxGyʋ>22!::#!~#fo* ~ ‰É*MDï!~#fo"!* ~#~!!~#~!:w:#w! !}|!~#ʏ!!!~#ʏi!~#f o>o>gMDé*#"Ï^!>#2!ywx#w!>w#w!!!~#ʏ!~#f o>o>gMDî!!  #!!  #** "Ï!~w#~w!~w#~w*#"È2 close.r c.rets c.r4 c.ents close. _ckfd. isis.ͯ!N#Fͼi`"!~#Œ&Ù* >>#I*6!~#foMDÞ!* ~#~!!}|!!!~#ʏ!~#f o>o>gMDÙ*6!~#foMDØckfd.rQ c.rets c.r4 c.ents _ckfd. _wcbs.ͯ!~#fo":=: :=*)) ~OGy OxGyŒCÙ*)) MDØwcb.r7$_wcbs.$exit.rl c.rets c.r4 c.ents isis. c.ihl c.ent exit. onexit.P!9!l~#ʉ0!P:l‰:mʉ0*lͻi`"lÏ!!}|!! ͳÉ?ͩ*l"!~#fo"l*MDØPfill.rP c.rets c.r2 c.r4 c.ents fill.ͷ!~#fo"!~#fo"!>#҉C*!~:2:2Ï!~#foMDØlower.rx c.rets c.r2 c.r4 c.ents lower.ͷ!~#fo">22!::#҉k**~AO*>ZO*~OG!  MDÉW*~OGyw*#"*#"Ï!~#foMDØsqze.r c.rets c.r2 c.r3 c.r4 c.ents squeezeͿ!~#fo"!~#fo"*"!>#҉X*~OG!yŒ?x#ʉk**#"*~Ék*!yOx#GÙ:2:2*#"È/* CP/M INTERFACE HEADER FILE* * copyright (c) 1979 by Whitesmiths, Ltd. */#define TINY char,/* the CP/M file control block, as augmented */#define FCB struct fcb struct fcb { TEXT et; /* assumed zero */! TEXT fn[8]; /* blank padded */a TEXT ft[3]; /* ditto */! TINY ex; /* start with zero */) TEXT pad[2]; /* assumed zero by CP/M */ TINY rcount; /* [0, 128] */-: TINY dmap[16]; /* eight records per 1024 byte cluster */+ TINY nr; /* next record to read/write */ TINY bleft; TEXT *bnext;L LONG lseek; COUNT bufseg; TEXT buf[128]; }; /* the Whitesmiths control block */c#define WCB struct wcb struct wcb { TINY flags, dev; FCB *pf;{ };X/* flag values:z *//#define WOPEN 1/#define WDIRT 2a#define WSTD 4#define WCR 010#define WXDIRT 020#define WXOPEN 040/* device values:o */P#define LST -4u#define PUN -3*#define RDR -2]#define CON -1d#define DSKA 0#define DSKB 1#define DSKC 2#define DSKD 3#define NODEV 4l/* intermodule communication */C#define CTRLZ 032 #define EOF 1#define FAIL -1m#define MCREATE 0#define MOPEN 1 #define MREMOVE 2t#define MWRITE 4#define NFILES 9#define SYSBUF 0x80a/* CP/M innardsn */E#define CRDCON 1#define CWRCON 2#define CRDRDR 3#define CWRPUN 4#define CWRLST 5#define CGIOST 7#define CSIOST 8#define CPRBUF 9#define CRDBUF 10d#define CICRDY 11f#define CLFTHD 12n#define CINIT 13#define CLOGIN 14C#define COPEN 15#define CCLOSE 16#define CSRCH 17#define CSRCHN 18#define CDEL 19 #define CREAD 20#define CWRITE 21d#define CMAKE 22#define CRENAME 23#define CILOGIN 24#define CIDRNO 25f#define CSETAD 26n#define CIALLOC 27 CP/M innardsn */E#define CRDCON 1#define CWRCON 2#define CRDRDR 3#define CWRPUN 4#define CWRLST 5#define CGIOST 7#define CSIOST 8#define CPRBUF 9#define CRDBUF 10d#define CICRDY 11f#define CLFTHD 12n#define CINIT 13#define CLOGIN 14C#define COPEN 15#definXO  -% | ++Mg'g'e"+wz""`'R,x(,wqQWd+ff\gx(XqXqK|q+yzhzz*}}+D=|++2e"wDO *e"L@e @ `"@* s"@  @w@""'@ #}@*&`@&`;@,@E`W@\g@*\g'@\gx(@\gK@Iq@XqK@*ya@D@}@(a (| *| +h+hMg'hg'h+h*zh'Rhd+h |q+h }+h*=h|+h+h #(h*hhh*e"hd""`h,x(h,wh> a  ( can't extract %p can't read block  #*w eW- fNa   ya*&%5NNa 5 W-@# &`;D*L!@0Wp .Wp @"5 &  a  a "*rNaWp fe %  w a *(N T w !@   a  *Wp @%E5 t5   a %*Wp e&`@ENa v  a &*  ee@ f&f e  Iqw*0(  @e5 t  a ( *V`5  ff %ea  \gK*| 5 W-W  *W@Ef W-\gN w &` `"a : *: file too large: %p can't write block *` no free space directory full a: %p  can't read %p  #*w e& f %5N   a E`W (a *  N  fNa a  a \g'*" % Ne 55  &`;*HW-5 W-@AWp   &a *n  wdN: p wR  a : *W-@p T*AWp @e5 a p $a *5 W- @  NAWp* fe AWp q"5  a D a "*W- !  !  a *,a AWp @e&@m @ a a a  a &*Re5   +@ A*x H Na v ee*@ f&f e  N 8}w "a N *AWp %Ne d5 Ne  a %*ww   !@Wp &` `"  * Nf %ww   a XqK `"  *6 f& % e \ w\gx( `"a  %p: not found d: %p  #d*dw eNNa   !@"Wp  D* ) NaWp fe %  a  a $* N   N a  a \g'*   Wp wf a a & `"  Nf  w""' #} s"a * bad block %i in %.8p.%.3p can't acces* s filesys: %p can't create filesys: % p   #*w eW- %5  a "e *>' f %5 a  a a "E`W*df e   a Iq w* @S Z  !@a  a *Wp  Wp e&`@E a  "a &*  & "  % a  #}*Wp NeWp fe  a  a  $a (""'*"e5  @ww  a  `""  *H7{  !{   3 wa { a { *n׭{   7{ {  N  `"a { a { a { *5W-{  W- ,a { a *{  t !   a { a "a 4   a a  O *DL@@| +@*+@Mg'@e @@ `"@* s"@  @g'@@e"@*+@w@z@""`@ #}@*&`;@'R@,a'@,x(@d+@*\g'@\gy@|q+@*y}@ya@*}+@=@|+@}@+@*(a ( #(qQWhfhT*fhn\gx(hXqh>XqKhbyzh*hzzh*}h*Dh2h a */dev/rx0dx0:flag conflict bad fla$&gs +cpm,dec,b,c,d,p,r,t,v,x,f*  #w &   'R+|+}+|q+&d++ +| +g'Mg'*2*NaNa e   a *,a' "a  (a *X e mmmm& \gy #}++"d+&|q+&~m   (}++}+'Rg' a *7%  % $ a 'R a \gy& #}* Nf  Nf ++*  w Nf F  #} `"d+* Nf   Nf |q+}+*8  Nf j f  f +^f %w s"a FFx: %p can't create %p  #n*nw  • %   ya &`;(,x(*  f %N| + e *M w e N a M ""` `"$|+$F N& % a F \g'a ^^can't write filesys: %p   #*f f e z }$w*& ^ wf Nf 'R a ^""` s"*L & %wf  f ,x( s"*rf %Nf e e"*N `ww AWp @eAWp s"   z* @eĕ @ w  z& `"* w AWp @eAWp @  z$ e ! ҒS wz" `"a w*w%i/%i free clusters %i/%i free extents %.8p.%.3p[%i] %3i  #***w   @ e •@   ,x(*y}*P!@(Wp 7 Wp @Ez z*vWp @ &Wp fe Wp fe" z z $z (a * e @ %  !\g'|+ a  \g'*   ww % = `" "a w&\g'* w  W. !@   *a Wz@e@>*4 !@ ȕ W.*Z  !@ a W*z@e@> !*@ ȕ wf ff `" %w s"PO *wLMg'@ `"@  @*g'@M @( #(Jwh   #*w   f ff e   Mg'g'$M *& ,Nf f %5 "@t*L @A vB r r*rB  % @w eeMg'g' `"* u e %  Wp*cA rB   LWpg'*`A rB5   `B * Wp`A vf&f e M 0f f %  ( #(Jwh   #*w   f ff e   Mg'g'$M *& ,Nf f %5 "@t*L @A vB r r*rB  % @w eeMg'g' `"*#include /* ECHO ARGUMENTS TO STDOUT& * copyright 1978 by Whitesmiths, Ltd. */BOOL main(ac, av)5 COUNT ac; TEXT **av; { FAST COUNT n, ns, nw; if (++av, --ac <= 0) return (YES);% else  { ns = lenstr(*av); nw = write(STDOUT, *av, ns); while (++av, --ac) { n = lenstr(*av); ns =+ 1 + n;$ nw =+ write(STDOUT, " ", 1);  nw =+ write(STDOUT, *av, n); } nw =+ write(STDOUT, "\n", 1);  return (nw == ns + 1); } }g'g' `"* .title .end); copyright (c) 1978 by Whitesmiths, Ltd.p; define end of programs .globl .end,.settop .psect c$text .even.settop: mov 2(sp),r0N cmp r0,#max blo $1a clr r0=$1: rts pc( .psect $99999 .even.end:t .blkb 40001max: .endUT, *av, ns); while (++av, --ac) { n = lenstr(*av); ns =+ 1 + n;$ nw =+ write(STDOUT, " ", 1);  nw =+ write(STDOUT, *av, n); } nw =+ write(STDOUT, "\n", 1);  return (nw == ns + 1); } }g'g' `"*XO  . ""`249qQW\gKq\g\g"q0\gO *\gL `"@ s"@  @* <@ #}@U(@,a'@ N(_@*E`W@\gy@}@(a (w*2h49h #(.""`hqQWh6*\gKqh\gh\gh"q0h a   #*f  ff e \gy $a & % w\gy #} s"a *Junknown record typeba"  #J  # #  #*,d record length$ can't open bad fla Rgsh  #6*6w eUNaNa e5  a a U",a'*\NK & f  a K(E`W*%7N? j <"a  a ?a &a <* %Na > Ne  }$ N(_* * $ @w % a * a  <*  Na  *Na   NaNa & t N(_*@%wNe  %  `" N(_*f Na  Na ,%*aNa \   R w  a  a WWcan't write hex  #*w e:NNa @t  *Na `NNa ` * Na ` • 5!*&@Na` h ` e *L Na` H @ee@`ȕ e*rNa %e  W h} $a W* @ww DBt&   `"  *a Eww DE! `"   07a=w `"a ggcan't read file  #*f Nf %5  g a U( &a g" @w s"Na ` * Na ` • 5!*&@Na` h ` e *L Na` H @ee@`ȕ e*rNa %e  W h} $a W* @ww DBt&  ubtou.reA c.lret c.btou!9~#foN#F!9~o-(xGyOÏ!9~!=0)Ï(+yOxG!9q#pØcount.r c.countculdiv.rM" c.uldiv c.r0 uldiv.!9MD! w #w #w #w!͚culmod.rM" c.ulmod c.r0 ulmod.!9MD! w #w #w #w!͚culrsh.rT( c.ulrsh c.r0 ulrsh.!9MD! w #w #w #w!! N#F͚dcmp.r c.zret c.dcmp! 9~#foN#FxO>G!9~#fo^#Vz1_>WxƀGzƀWyoxڊJʋO>Ëw>Ïw! 9N#F!9~#fo# ##| +Š|ŒbчÙډJÈEddiv.rf c.lret c.repk c.unpk c.ddiv!!9!9!6!N#F!ͭyJ! N#F > Ï`!~j!>#w[!4!q#p! N#F ! 4 !ͭyʏ`y!Ox#Gyƀ+wx#w !#w !69! #~w !MD!  +ŠŠڏ!MD!  #!4!  +~w Ž!5!N#F!ͧ!~ʏH!~#ʏH~w! N#F !#~WØdmul.rn  c.lret c.repk c.unpk c.dmul!9!9! N#F!6 $ƀ4 !ͭyʏ!q#p!N#F!ͭyg! N#F  ‰^Ï!~O#~Gyր+wx#w! #w >8!w! ~#+~w !~!MD!  #!#~w Ž!5!N#F!ͧ!~ʏ!~#ʏ~w! N#F !#~Ødsub.rnC c.lret c.dadd c.dsub"!9!9!N#F ! #w!~w! N#F!ͤØdneg.r) c.dneg !9~#fo~#ʎ~ƀwdtd.rA" c.lret c.dtd!9N#F!9~#fo~#~ŠØdtf.rqM c.lret c.dtf$!9N#F!9~#fo w #w #w #w +4›#4+++4ž#4~Ÿ=w>+w##w#wØdtl.r c.lret c.unpk c.dtr c.dtl c.dtimMD!9!9!N#F!ͥyʏhy֨OxGN! ~#+~w<y‰2Ëhyʏh!#~w‹[ ÎN! ͏N#F! ~#~Ù͏N#F!~+~ +~+~ Ù͋MDÈsenter.ra c.rets exit. write. c.ihl c.ents leave.$ enter.͹*a!9"a!N#F #~#foi`Ͳ͋$*a}D!!R!ͭ!ͣ"a!9]Tßbad leave call ents.r)c.r4=c.r3;c.r29c.r11c.r0) c.rets c.ents!9*=*;*9i`!"9";"=ftd.rI+ c.lret c.ftd)!9N#F!9~#fo~#~#~#~Øidiv.rW c.lret c.umod c.udiv c.imod c.idiv<.!9~w#~w#~w#~w+MD!9 _ #ڏ { !94Ï ! 9~T+w># w! 9N#FxhO>G͌ҏxO>G ! 9q#pß! 9~+w># w! 9N#FxO>G͌ҏO>G ! 9q#pß! 9N#F͏! 9q#pß! 9N#F͏! 9q#pØilsh.r c.lret c.urshO c.irsh$ c.ilsh !9~/<É4ʟO!9~#fo) ‰Ïv!9~4/<ÉʟO!9~# fo||g}o ‰@Ïv!9~_/<ÉʟO!9~# fo|g}o kMD!9q#pØimul.rgD c.lret c.imul!! 9~+ʋ9~ҏ! 9N#F ! 9~w#~w! 9~w+~wÏ!9q#pØin.r4 c.ihl in.&!!9͞OGladd.rL. c.lret c.ladd,!9N#F!9~#fo ## # +++ #Øland.rD& c.lret c.land$!9N#F!9~#fo  # # #Ølclt.rH* c.zret c.lclt(!9N#F!9~#fo ## # +++ #Ølcmp.rL+ c.zret c.lcmp!9N#F!9~#fo  # # #Ølcom.r- c.lcom!9~#fo~/w#~/w#~/w#~/wldiv.r c.lret c.ulmod c.uldivv c.lmod; c.ldiva!9MD!9~#~#~#~ !9~w#~w#~w#~w#~w#~w#~w#~w!9MD! 9  # # #ڏ#!9MD! 9  # # #!94Ï#! 9!9ß#~#~+++~#~#~#>#*>+++>#~#~#~ #~{ʏ>#># >#͏!9MD!9~#fo͏! 9MD!9~#fo͉͏!9N#F!9͉É͏!9MD!9~#fo͏! 9M D!9~#fo͉͏!9N#F!9͉É͏! 9M D!9~#fo#͏!9MD! 9~#fo#͉͏!9N#Fkb9͉É͋È{lmul.r c.lret c.lmul5!9~#foN#F#N#F! 9~#foN#F#N#F!!9~+++ʋ~ҏX!9MD!=9  # # #!9~w#~w#~w#~w!9~w+~w+~w+~wÏ)!9N#F!9~#~}|! 9Ølneg.r4! c.lneg!!9~#fo##w>#w>+++w>#wlor.rD& c.lret c.lor$!9N#F!9~#fo  # # #Øllsh.r c.lret c.ulrsho c.lrsh6 c.llsh !9~/<ÉFʟO!9~#fo##~w#~w+++~w#~w ‰ß!9~F/<ÉʟO!9~#fo##+~~w+~w###~w+~w ‰Tß!9~/<ÉʟO!9~#fo##+~w+~w###~w+~w ‰Ølsub.rL. c.lret c.lsub,!9N#F!9~#fo ## # +++ #Øltd.r c.lret c.repk c.ultd c.ltdr c.utdd c.itdT2MD!9!9!N#F!>w#w#w##w#w!!ͧ! N#F !#~EÙ͏q#px#w#wÉ$͏q#p#w#wÉ$͏ w #w #w #wÉ$͏ w # w #w #wÈ$lxor.rD& c.lret c.lxor$!9N#F!9~#fo  # # #Øout.r1 c.ihl out.&}!!9͚switch.r>% c.switc~# #~#foy#Œ x#!+++~#fo##Èutob.r}V c.lret c.utob ! 9~!=)Ï +!9~=#)Ï!9~! 9~#fo=9)Ï1}O|G! 9~#fo{/wz/#wØdadd.r0 c.lret c.repk c.unpk c.dadd!9!9!N#F!ͭyʏ!q#p! N#F!ͭyL!N#FÏ!yOx#Gnyʏ+~w#~w!ÏyO>G! ~#+~w‰ҏw yʍÏz!MD!  #w!N#F!ͧ!MD ! ~#fo+ #wØent.r2 c.ret c.ihl c.ent !9repk.r c.repk!9N#F! ~&i`+ >#wŠÍ4+Š4‰(Ï! ~ʏY# +~wA!9~w#~wÏ4! ~i`+ #~wh!9~w#~wËY i`7#~w‰Ï4!9~i`+#w‰Éʏi`>#w>w!! !9z~w+~ w++~ wŠunpk.rn c.unpk(!!9N#F!9^#V! #~#~ ! ~#~Wҍ=+ŽL‰CÏh>w+~w}ʏhi`>#wŽ_Jzret.rD' c.lret c.zret'!9N#F###q#p+++q!9N#F#q#pcend.r_memoryiend.r& stack_memory isis@2- exit. _main._hl.]_de.[_bc.Y cpm. start*͢͟!9N#F#^#V#~#fo"]kb"[i`"YOG-copyright (c) 1979 by Whitesmiths, Ltd./* ISIS INTERFACE HEADER FILE * * copyright (c) 1979 by Whitesmiths, Ltd. */%/* the Whitesmiths ISIS control block */#define WCB struct wcb struct wcb { TINY flags; COUNT waftn;  };#define WOPEN 1#define WCR 2#define FAIL -1a#define NFILES 9/* ISIS innards  */`#define IOPEN 0#define ICLOSE 1#define IDELETE 2#define IREAD 3#define IWRITE 4#define ISEEK 5#define ILOAD 6#define IRENAME 7#define ICONSOL 8 #define IEXIT 9#define IATTRIB 10#define IRESCAN 11#define IERROR 12r#define IWHOCON 13#define ISPATH 14%/* the Whitesmiths ISIS control block */#define WCB struct wcb struct wcb { TINY flags; COUNT waftn;  };#define WOPEN 1#define WCR 2#define FAIL -1a#define NFILES 9/* ISIS innards  */`#define IOPEN 0#define ICLOSE 1#define IDELETE 2#define IREAD 3#define IWRITE 4#define ISEEK 5#define ILOAD 6#define IRENAME 7#define ICONSOL 8 #define IEXIT 9#define IATTRIB XO  .# J t!jLzQw[e^^% @Q""`,y ,Tq.2.a.[49<9y:jL^YMYMgMHqQWxQZ8Tyx$,8^*Wp  @`f` yx(Y%Ksw `"a &*&jundefined local: bad symb  #  #j  #Lol number  #*w 5  5 ! v  * 5`  @w \g\g `"*,tEEe  2e *R( "tP&wmE  a & <(\g*x5`tE 5`•  \g* 5` A@`B-\g* D @ Wp Am@5Wp  a D*AmDlWp NNm 2  f  a 2  Nf  wUq  #} s"a VVcan't read file:  #,*,fe & @& (E`W*R%5@V e@  a Vxw s"a hhcan't read relocation bits  #|*|f  %7& UZKp%49Iq$UZK(p%*  h Z  Ew(r UZK a hr r ( s"*f ff % @U(*efe > w N(_( s"a can't read file header  #*feNaf %  U(: @w a  s"a *can't read symbol tabletoo many symbo(ls in filecan't read binary header  #J*Jw D&f %     U( &a *p %    e  a  N(_*4e 4Wp B   N(_ N(_&,8^*f %   4 wU( a ( `"f7 ww UZK49 s"a multiply defined:  #*w eNef @ 5u   *B 5!5(5$ V*@5 B 5!N*f& 2`5e  f Tq8^* @wwmwme U(@ `"*  &E` %*5 5    5 a  Uq *E 5,$3 a  D T phase error  #2*2w eNef  5N u  *XB 5!5%N& &Tq8^(~2`3 4  * | a \g a $* f %5ʕ\g a \gv*   0 ʒe  a *  & ee@ f& " Q}wQ}w$^(M *eNNaff e7` $ @Q*:& ee@ f& eN"QwQw ^ M *`Naff ne7` f  @Q&U(@*wmwmww  7! 5? t  `"  Z8T*   e f`  yx% w `"O *\gLt!@jL@z@*w@e @ `"@ s"@  @* <@""`@,y @,a'@.2@*.a@o;M@Ky@YM@YM@*M @\gy@*y}@}@(*a (DQwh^%h\h @Qh*49h<9hTjL^ho*  #w ^`Z\(  a ^ a ` a Z a \*XVTNaNa e( a X a V a T a  ,a'$< ^  T( a  ""`a ^a T a *\7^`!    &b % ( a a ^ a ` a b$z*Nf  | | F a | a |(|Nf  V |w(a |a V"a |& `"a // TD?  #*w  8v e v.&  8a v*y}$a v*EWp t @`8 D a  a 8* 1&Ee3 %/ a 1 a 3 "a />` % w `"a 99undefined: _end  #PPw xz(   a  a xa a zbvzE %-(a a v a z a Et!z\mZ\7*a \ a a Za \a *Z 7! 5? t w(a Za  a  a & `"*5  &  2` 2 9  &a 9" e  a M MTT NAME __eecan't create  #&w ^ %7~^&  a ^e a ~"a ^*e Tw8  a e""`a T a *47 wx ee@  7"a  a a xa *Zw  T   E 6xe"a a a T&a x$` c & a ` o;Ma  a co;M*_ f 7  xemz& " a _a a x$a z$~ eR &a ~ M a  a Ro;M*M   E   xe a M$a x( & ~ eze` & a ~M a z a `"o;M*0c _  7 Z(a a c o;M a _ a *V-   7"a  a a a | w *a a  a a a   wa  `"a s*sbad library file in bad file format:   #*w eNeNa    ,y &.a*!  6w!m !u @YM `"* $ Ne  a ""`*  !@s .2.a $a s(""`** & & %   fjLw YM*Pf %@e 5`u`u   jL*vff ew eNeM   "a *Na  !F@,y .a*& &  e6 Ti xe& YMa T a x*~ e E   a ~ M a *xemz& ~ e E (a x a za ~M  a *4z r6 @e55w*Z@Av ff eN"M *e  Neff  .2.a(YMew `"a can't write file  #*f  -~*a a  a  $a (a ~* %7      &} a  a ""`&a &p7 @ww N &a  a a  s"  *5!@f %NKy"}*D f %ww eĕ Ky} `"  *j@  tEAe@`* 0W`>Na& %N f %w"}Ky}$ `"a ..*  #  # #  #  #  #*f@E.w w@& a . <a " s"&a  a BB  #*f  ff e B\gy $a B** %7 |ww @EWp @\gy a | s"  *Pt @`@EWp @t  a *v@` ! a aA@5  a *@ w w @EWp  `"  *@t @`@EWp @t  a * @` ҒSww  a & `"*DB E `   4w `" #*f  ff e B\gy $a B** %7 |ww @EWp @\gy a | s"  *Pt @`@EWp @t  a *v@` ! a aA@5  a *@ w w @EWp  `"  *@tXO  .9 .(@t!""`.5H|:L;K|hMp!oQ8qQWZHT[ #(g\g Uq XqK|qr Xxd*}}Zv|22O *2L,8^@w@y@*e @ `"@ s"@  @ <@* #}@U(@,a'@o;M@M @* N(_@/N @_|@E`W@\gy@*Uq5a@qR@}@(a (x*h5HhoQ8hZHhT[ #h*|qh r Xh}h Zvh|h*h #( (@hhPt!hZ*""`hr.h|:L;hPK|hhMp!h*qQWh(ght\g hUq h XqKh:"xdh *}h 2h  a *upadding errorw&rite errorread error  #*w e5 5 @A v @A  *&@A vM@A v)@A*Lee@ f&@A v@*rA @A D  5`u`u *Naf %@A vU(* 1   (@A v3@A  a 1* N EN Ev%$f a  a $(}* %   V Naf  a (}$0%  % 2 @Aw a %" `"a <<d c no delete files  #P*Pw e  B   f  a B*v   Na& % 8*Neff %5<Ne * @A N EN E@mAm@ f& a *& e Ne?  a  a ?*   & f %@wfw w" `"&a *4f& pe N<  a  a <*Zf  wf Nf qRUq5aa  s"*   ww ff %" #} s"  a &U(*7  K- @0 @Aa a *p@efe  f N(_*&fe  vee@  t N(_*@m @  a *>v wf @  `"*d Nf @w ey s" a R"Rcan't write to can't create  #*w   5 Z 7(  qRa Z"_|&a *f %Nb e a b*& % NR x w a } a R `"a p*pemunot library format: c"  #  # #  #*an't read header for can't read library  #*w & f %  N  E`W (a *( F  -e -ma  a &Nu7pw& ( a a  a p < a *p% N  U( a "a (a &7 w(a  `"a a a $N *a  a a  a a *conflicting flagsbad flags: d,r,t,x,(v,#usage: lib name  #*w eB W-  v   "a M  * a  a  a  a a *NaNa e  a  a ,a' &a *<4 ,m m m%  * a a a a  $a *b      :& a  a  "a (:( P ff %w a P & `"a  replacement botch  #*w e & @ N    qR*Na % @A v*   w  @eww `"*5    @ Ne& 4 @  a *DA N EN E@mAm@ f&&  a j e a can't write header  #t*tw  !@aȋ ! @m  *@fe @fo;M*e -@Ap o;Ma (a (ff %7   n w&}a a & `"a //  # * f  ff e /\gy $a /0 %w\gy s"a 1*1a can't read r can't read c no reWplacement files  #:*:w e  R  f   a R*` & f 5u,8^*Na % 8Neff %*5MNe @A N E "a *N E@mAm@ f& e N $a *eO   u@ȋw a Ow* 5 W-w@e@mAAmH*Dx @A N EN E@m a *jAm@ f& e& Na %M &E`W*NeC  Ne  a C* @e& & & ,e~* N@  =w w a  a @* @@ rff %w*( wew & Na  `"*N %Ne4  Ne  E`W a 4*t @e& & & te~ (w* N1 ^ f @a  a 1* AEE5`u`u @Av * fff eww eM  s""  * : f Na&*2 Z% +Neff % &  (a *X / ffNa eAe@`/N *~ NeNa |  ww$ `"(a ( ff& e Na F  a ggx can't create  # * w ef & Na&   * % Neff H% f &a * f& e ww" `"*: Na %Nej  fe a j*` f& e ff @ @A  a * v@& e Neg wa  &a g  \ |  ww$ `"(a !' isis exit. _main. stack isis. start1ͪͧ!9N##^#V͟!9N#F'copyright (c) 1979 by Whitesmiths, Ltd..$@@#px09JUN8017451009JUN80174351 .%@@Tq8_09JUN8017472109JUN80174554:.&@@6s209JUN8017492809JUN80174807.'@@Asx}09JUN8017531409JUN80175014l.(@@"wskQ09JUN8017550709JUN80175400)~.)@@?y209JUN8017565909JUN80175609.*@@:* 09JUN8017583709JUN80175746jB DSFUN+1,RSCS2(R5) ;;; YES, SET UNIT SELECT&10$: MOV (PC)+,R1 ;;; GET DISK ADDRESS$DSDA:: .WORD 0 ;;;% BIT #2,RSDT(R5) ;;; IS THIS AN RS04?; BNE 20$ ;;; YES + ASL R1 ;;; NO, 64 WORDS/SECTOR; DOUBLE IT;320$: ASL R1 ;;; 128 WORDS PER SECTOR DOUBLE TO 256 - MOV R1,RSDA(R5) ;;; SET TRACK SECTOR ADDRESSR;C#; GET NEXT BLOCK OF DATA TO PROCESS ;E(DS1: SUB #BLKLEN,R0 ;;; FULL BLOCK LEFT? BPL 10$ ;;; YES.* ADD #BLKLEN,R0 ;;; NO, GET RESIDUAL COUNT BLE DSEXIT ;;; DONE IF ZEROR MOV R0,R1 ;;; COPY COUNT CLR R0 ;;; ZERO RESIDUAL COUNT BR 20$ ;;;/10$: MOV #BLKLEN,R1 ;;; SET TO READ BLKLEN*256.T220$: SWAB R1 ;;; CONVERT LOGICAL SECTORS TO WORDS NEG R1 ;;;;N ; START I/OE;R# MOV R1,RSWC(R5) ;;; SET WORD COUNTR( BISB #0,RSCS1(R5) ;;; SET FUNCTION CODEDSFUN = .-4 ;;;30$: TSTB RSCS1(R5) ;;; DONE?T" BPL 30$ ;;; NO, LOOP UNTIL IT IS! TSTB RSCS1+1(R5) ;;; ANY ERRORS?? BPL DS1 ;;; NO- BIT #4000,RSCS2(R5) ;;; NON-EXISTANT MEMORY?" BNE DSEXIT ;;; YES, STOP READING' MOVB #11,RSCS1(R5) ;;; NO, CLEAR DRIVE  BR $DSDRV ;;; TRY AGAIN;-DSEXIT: MOVB RSCS2(R5),R4 ;;; GET UNIT NUMBER6- BIC #177770,R4 ;;; CLEAR ALL BUT UNIT NUMBERODSEND: RETURN ;;;  .SBTTL RP04 DRIVERV($DBDRV::MOV (PC)+,R0 ;;; GET LOAD LENGTHDBLLEN:.WORD 0 ;;;N! MOV (PC)+,R5 ;;; GET CSR ADDRESSTDBCSR: .WORD 0 ;;;E9 CLR RJPCS1(R5) ;;; ZERO FUNCTION CODE AND MEM EXTEN BITS;1 MOV #0,RJPBA(R5) ;;; SET STARTING BUFFER ADDRESSRDBSA = .-4 ;;;N% CMPB DBFUN+1,#-1 ;;; UNIT SPECIFIED?R! BEQ 10$ ;;; NO, USE CURRENT ONE 2 MOVB DBFUN+1,RJPCS2(R5) ;;; SET UNIT SELECT FIELD;10$: MOV #23,RJPCS1(R5) ;;; ISSUE PACK ACKNOWLEDGE FUNCTIONA. MOV #0,RJPDA(R5) ;;; SET SECTOR/TRACK ADDRESS$DBDA == .-4 ;;;E* MOV #0,RJPDC(R5) ;;; SET CYLINDER ADDRESS$DBCA == .-4 ;;;;6 BIS #14000,RJPOF(R5) ;;; SET 16 BIT MODE, INHIBIT ECC& MOV RJPDS(R5),R1 ;;; GET DRIVE STATUS COM R1 ;;; COMPLEMENT BITS9 BIT #10300,R1 ;;; MEDIUM ON-LINE,READY, AND VOLUME VALID  BNE DBCLR ;;; NO, ERROR ;T#; GET NEXT BLOCK OF DATA TO PROCESSU;N(DB1: SUB #BLKLEN,R0 ;;; FULL BLOCK LEFT? BPL 10$ ;;; YES0* ADD #BLKLEN,R0 ;;; NO, GET RESIDUAL COUNT BLE DBEXIT ;;; DONE IF ZERO5 MOV R0,R1 ;;; COPY COUNT CLR R0 ;;; ZERO RESIDUAL COUNT BR 20$ ;;;/10$: MOV #BLKLEN,R1 ;;; SET TO READ BLKLEN*256.0+20$: SWAB R1 ;;; CONVERT SECTORS TO WORDS NEG R1 ;;;; ; START I/O ;T$ MOV R1,RJPWC(R5) ;;; SET WORD COUNT) MOVB #0,RJPCS1(R5) ;;; SET FUNCTION CODELDBFUN = .-4 ;;;30$: TSTB RJPCS1(R5) ;;; DONE?" BPL 30$ ;;; NO, LOOP UNTIL IT IS" TSTB RJPCS1+1(R5) ;;; ANY ERRORS?" BPL DB1 ;;; NO, CONTINUE READING9 BIT #4000,RJPCS2(R5) ;;; YES, IS IT NON-EXISTENT MEMORY?Z BNE DBEXIT ;;;0DBCLR: MOVB #11,RJPCS1(R5) ;;; ISSUE DRIVE CLEAR BR $DBDRV ;;; TRY AGAINL4DBEXIT: MOVB RJPCS2(R5),R4 ;;; GET UNIT SELECT FIELD# BIC #177770,R4 ;;; CLEAR HIGH BITS;DBEND: RETURN ;;;  .SBTTL RX01 DRIVER )$DXDRV:: MOV (PC)+,R5 ;;; GET CSR ADDRESS DXCSR: .WORD 0 ;;; $ MOV (PC)+,R4 ;;; GET BUFFER ADDRESSDXSA: .WORD 0 ;;;3 MOV (PC)+,R3 ;;; GET LOAD LENGTH IN LOGICAL BLOCKSRDXLLEN: .WORD 0 ;;; T .IF DF M$$MGE # CLC ;;; CLEAR CARRY! ROL R4 ;;; CONVERT BASE ADDRESSD% ROL R4 ;;; TO 32 WORD BLOCK ADDRESS; SWAB R4 ;;;C, MOV R4,@#KISAR6 ;;; SET UP MAPPING REGISTER P .ENDC ; ASL R3 ;;; CONVERT TO LENGTH ASL R3 ;;; LOGICAL SECTORS% CMPB DXFUN+1,#-1 ;;; UNIT SPECIFIED?1 BNE DX2 ;;; YESM MOVB R0,DXFUN+1 ;;; NO, SET IT+DX2: BIC #20,DXFUN ;;; DEFAULT TO UNIT ZEROU TSTB DXFUN+1 ;;; UNIT 0? BEQ 10$ ;;; YES $ BIS #20,DXFUN ;;; NO, SELECT UNIT 1)10$: CMP $DXSLO,#3 ;;; READING FROM DISK?- BNE DXSILO ;;; NO, FILL SILO BEFORE WRITINGT2DXLOOP: MOV (PC)+,R1 ;;; GET LOGICAL SECTOR NUMBER;; PERFORM SILO/DISK TRANSFER;;$DXBLK:: .WORD 0 ;;;T8 CALL $TRKSC ;;; CONVERT LOGICAL SECTOR TO TRACK/SECTOR# MOVB (PC)+,(R5) ;;; START FUNCTION,DXFUN: .WORD 0 ;;;D CALL TRWAIT ;;; WAIT BCS $DXDRV ;;; ERROR MOVB R1,2(R5) ;;; SET SECTOR; CALL TRWAIT ;;; WAIT BCS $DXDRV ;;; ERROR MOVB R0,2(R5) ;;; SET TRACK CALL TRWAIT ;;; WAIT BCC $DXDRV ;;; ERROR- INC $DXBLK ;;; UPDATE LOGICAL SECTOR NUMBER,% CMP $DXSLO,#3 ;;; READING FROM DISK?  BEQ DXSILO ;;; YES& DEC R3 ;;; NO, ALL BLOCKS PROCESSED? BLE DXNXM ;;; YESK;.; PERFORM SILO/MEMORY TRANSFER;V .ENABL LSBE'DXSILO: MOV R5,R2 ;;; COPY CSR ADDRESS;( MOV (PC)+,(R2)+ ;;; SET EMPTY/FILL SILO$DXSLO:: .WORD 0 ;;;B, MOV #128.,R0 ;;; SET COUNT OF BYTES IN SILO O .IF DF M$$MGE ;: MOV #140000,R4 ;;; SET BASE ADDRESS OF BUFFER TO USE APR6 C .ENDC 10$: BITB #240,(R5) ;;; DONE?R BMI $DXMOV ;;; YES BEQ 10$ ;;; NO BR DXEF ;;; YES, SILO EMPTYA+$DXMOV:: MOVB (R2),(R4)+ ;;; MOVE NEXT BYTER DEC R0 ;;; DONE? BR 10$ ;;; LOOPD0DXEF: TST R0 ;;; ALL BYTES IN SILO TRANSFERRED? BNE $DXDRV ;;; NO, ERROR  .IF DF M$$MGE * ADD #2,@#KISAR6 ;;; UPDATE BUFFER POINTER I .ENDC :$ TST TRPFLG ;;; IS NXM TRAP SET UP? BNE 15$ ;;; YESI/ MOV PC,R0 ;;; NO, GET ADDRESS OF TRAP ROUTINEE ADD #DXTRP4-.,R0 ;;;R, MOV @#4,-(SP) ;;; SAVE CURRENT TRAP ADDRESS$ MOV R0,@#4 ;;; SET UP TRAP ADDRESS MOV @#6,-(SP) ;;; SAVE PS MOV #340,@#6 ;;; SET NEW PS INC TRPFLG ;;; SET NXM SET UPT)15$: CMP $DXSLO,#3 ;;; READING FROM DISK?' BNE DXLOOP ;;; NO MUST WRITE SILO OUTF DEC R3 ;;; ALL SECTORS READ? BGT DXLOOP ;;; NOE8DXNXM: MOV R3,R0 ;;; GET NUMBER OF SECTORS LEFT TO READ& ASR R0 ;;; CONVERT TO LOGICAL BLOCKS ASR R0 ;;;$ MOVB DXFUN+1,R4 ;;; GET UNIT NUMBER! MOV (SP)+,@#6 ;;; RESET LOW CORE4 MOV (SP)+,@#4 ;;; TRAP VECTOR BR DXEND ;;; DONEE .DSABL LSB#;;; WAIT FOR DISK TO SHOW READY6;S%TRWAIT: CLC ;;; DEFAULT TO TR READYE10$: BITB #240,(R5) ;;; DONE?S BMI 20$ ;;; YESX BEQ 10$ ;;; NO, LOOP SEC ;;; YES20$: RETURN ;;;I;S<; PROCESS NON-EXISTANT MEMORY TRAP (STOP READING OR WRITING);X'DXTRP4: CMP (SP)+,(SP)+ ;;; CLEAR STACK  BR DXNXM ;;;6TRPFLG: .WORD 0 ;;; TRAP FLAG, 0=NOT SET UP, 1=SET UP;X=; CONVERT LOGICAL SECTOR NUMBER TO PHYSICAL TRACK/SECTOR PAIR4; INPUT:; R1 - LOGICAL SECTOR ; OUTPUT:; ; R0 - TRACK ; R1 - SECTOR ;T"$TRKSC:: MOV #8.,R0 ;;; SET COUNT MOV #6400,R2 ;;; AND DIVISORE.30$: CMP R2,R1 ;;; DOES 26. GO INTO DIVIDEND?$ BHI 40$ ;;; BRANCH IF NOT, C CLEAR* SUB R2,R1 ;;; SUBTRACT 26. FROM DIVIDEND SEC ;;;,40$: ROL R1 ;;; SHIFT DIVIDEND AND QUOTIENT DEC R0 ;;; DONE? BGT 30$ ;;; NO, LOOP MOVB R1,R0 ;;; GET TRACK CLRB R1 ;;; CLEAR TRACK  SWAB R1 ;;; SHIFT DOWN SECTORE# CMP #12.,R1 ;;; C=1 IF 13<=R1<=25P) ROL R1 ;;; DOUBLE FOR INTERLEAVE FACTORU# ASL R0 ;;; ADD TRACK - TRACK SKEW ADD R0,R1 ;;; SKEW BY 2*TRACKC ADD R0,R1 ;;; SKEW BY 4*TRACKO ADD R0,R1 ;;; SKEW BY 6*TRACKG! ASR R0 ;;; RESTORE TRACK NUMBERN MOV #26.,R2 ;;; SET MODULUS 750$: SUB R2,R1 ;;; MODULO SECTOR INTO RANGE -26. TO -1;/ BGE 50$ ;;; LOOP TILL REMAINDER GOES NEGATIVE?( ADD R2,R1 ;;; CONVERT TO RANGE 0 - 25.* INC R0 ;;; BUMP TRACK TO SKIP TRACK ZERO( INC R1 ;;; AND SECTOR TO RANGE 1 - 26. RETURN ;;;<DXEND: RETURN ;;;; .END FOR INTERLEAVE FACTORU# ASL R0 ;;; ADD TRACK - TRACK SKEW ADD R0,R1 ;;; SKEW BY 2*TRACKC ADD R0,R1 ;;; SKEW BY 4*TRACKO ADD R0,R1 ;;; SKEW BY 6*TRACKG! ASR R0 ;;; RESTORE TRACK NUMBERN MOV #26.,R2 ;;; SET MODULUS 750$: SUB R2,R1 ;;; MODULO SECTOR INTO RANGE -26. TO -1;/ BGE 50$ ;;; LOOP TILL REMAINDER GOES NEGATIVE?( ADD R2,R1 ;;; CONVERT TO RANGE 0 - 25.* INC R0 ;;; BUMP TRACK TO SKIP TRACK ZERO( INC R1 ;;; AND SECTOR TO RANGE 1 - 26. RETURN ;;;<DXEND: RET/ .TITLE $INSCM - INSTALL COMMON BLOCK PROCESSOR .IDENT "02";.;C;9A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.3A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.T;TA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE @; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC..;2@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION: 02S ; BY: H. LEVN; DATE: 11/20/73 5; MODIFIED: 3/4/75 FIX DEVICE PARTITIONS TO SKIP READP2; 4/24/75 ADD SYSTEM CONTROLLED PARTITION SUPPORT,; 6/21/75 ADD 11/70 EXTENDED MEMORY SUPPORT;.! .MCALL CALL,PCBDF$,RETURN,TCBDF$C N S;B; EQUATED SYMBOLSO;; LABEL BLOCK OFFSET;B&L$BLDZ = 14 ; LOAD SIZE OF TASK IMAGE PCBDF$ ; DEFINE PCB OFFSETS TCBDF$ ; DEFINE TCB OFFSETS;H ; LOCAL DATA;I&LODSIZ: .WORD 0 ; COMMON BLOCK LENGTH,LODBAS: .WORD 0 ; COMMON BLOCK BASE ADDRESS;; ERROR MESSAGES;E/ERR1: .ASCIZ <15>/INS -- COMMON BLOCK OCCUPIED/T .EVEN R;+1; *** - $INSCM - MCR INSTALL COMMON BLOCK OVERLAYT1; THIS OVERLAY READS A LIBRARY INTO AN UNASSIGNED6; PARTITION. IT RECEIVES CONTROL FROM TH! build compiler passes tkb @bldpp tkb @bldp1 tkb @bldp82 tkb @bldant tkb @bldana tkb @bldcpm tkb @bldld8 tkb @bldlb8 tkb @bldhex tkb @bldrel! compile driverold cc8compile ! set proper modespip [1,2]cc8.bac<232>/repip [1,2]cpp.tsk<104>/repip [1,2]cp1.tsk<104>/repip [1,2]cp82.tsk<104>/repip [1,2]anat.tsk<104>/repip [1,2]an.tsk<104>/re.pip [1,2]cpm.tsk<104>/repip [1,2]ld80.tsk<104>/repip [1,2]lib80.tsk<104>/repip [1,2]hex.tsk<104>/repip [1,2]rel.tsk<104>/repip [1,2]clib.olb<040>/rekpip [1,2]chdr.obj<040>/rebpip [1,2]chdr.r<040>/re pip [1,2]clib.a<040>/rekpip [1,2]ihdr.r<040>/repip [1,2]ilib.a<040>/repip [1,2]mlib.a<040>/recpip [1,2]iend.a<040>/rerpip [1,2]std.h<040>/repip [1,2]rsx.h<040>/repip [1,2]cpm.h<040>/repip [1,2]isis.h<040>/re8 ! make ccls#ut ccl cc8-=[1,2]cc8.bac;priv 300002ut ccl cpp-=[1,2]cpp.tsk;0ut ccl cp1-=[1,2]cp1.tsk;0ut ccl c82-=[1,2]cp82.tsk;00ut ccl ant-=[1,2]anat.tsk;0kut ccl ana-=[1,2]an.tsk;01ut ccl cpm-=[1,2]cpm.tsk;0ut ccl ld8-=[1,2]ld80.tsk;0>ut ccl lb8-=[1,2]lib80.tsk;0ut ccl hex-=[1,2]hex.tsk;0ut ccl rel-=[1,2]rel.tsk;0p [1,2]ilib.a<040>/repip [1,2]mlib.a<040>/recpip [1,2]iend.a<040>/rerpip [1,2]std.h<040>/repip [1,2]rsx.h<040>/repip [1,2]cpm.h<040>/repip [1,2]isis.h<040>/re8 ! make ccls#ut ccl cc8-=[1,2]cc8.bac;priv 300002ut ccl cpp-=[1,2]cpp.tsk;0ut ccl cp1-=[1,2]cp1.tsk;0ut ccl c82-=[1,2]cp82.tsk;00ut ccl ant-=[1,2]anat.tsk;0kut ccl ana-=[1,2]an.tsk;01utXO  / X,Tq<9qQWxQzxZx_f\gTq\gw\gzTq`;Ewdww*}z<*}zO **}zL,8^@w@ `"@* s"@  @ <@ #}@U(@*U(@@,a'@:@ N(_@E`W@*\g'@\gy@Iq@*y}@(*a (zhh<9hxZh *x_h fhwh<h #(*,TqhqQWhJxQzh\gTqht\gwh*\gzhTq`;h^Ewdh|wh*}zh  a %can't read code  #*feNaf %  Iq(& %7 @Ew& a  \gya & s"a !!: bad flag: c,d,i,s,u  #JJw (  a  a  a  a *`1NaNa e $  a a 1,a' &a $$& e mm& a &\gy #}a  a *mm%*a a  a a a *    !f e  a !"\gy* w eN P 7 a  `"&a *w   ĕ ע   a a *>_K we 2e   `" N(_dע.@  a <<,0%+02hH db 0%+02hH  #t*tf %<U 7 <  < (a < a U\g'a <&a <( S 7 < < NG ( a S\g'a <a < $a G" < N> <w&\g' a < a >\g'a < s"a X*X +0%hH dw %.7pbad symb  #  #  #*~ol number ?d??c?%.7p equ $+0%hH %pseg ?%p?:  #*w Nf %N    a \g' &a *% N 5 !N ** B  6w $ `"*PtEEe N e*vN ~N ttPXw $a X( <*Nm  fd&( a a m\g' a f &a d* • N ( \g' &a *-  v %7 Wp  a a v\gy"a * m@ 5w  A a   a a *4A @@5  `f %we\g'& `"Z  a *text: %+04h data: %+04h total: %+04*h end dc%.7p equ 0%hH extrn %.7*p public %.7p .titlename %p %b@ *"_..$?@can't read symbol table bHad format: can't read  #^*^w e& f % Na  E`W* %  TfV eU( a T a V&\gy* Ne   Ef w N(_ $a E*G e wNe " a G\gyw `"( N(_*7 Ne 5Ne 5 Wpa  N(_ N(_&a * D & 7 %  ,8^a a  U(*B, %    $ a ,\gya U(@"w&h) &# *a  a )a a & a #* N f f (a  a  a :$a *& e   H( a  a  a \g' $a *%  6% $% a "a *f ef  a a *"e   N( a \g'a a $a *HNmff e   a \g'"a &U(@*n ww AWp m@ Aw `"   a *Wp m@ ĕ @  a *w w AWp mBAWp  `"  a &mC ʒK wa $ `"a bb%.7p TD?%+04h%ac%ac  # w | %&   |a *y}a *   5 we   a  a  `"&a *D5 5 LE a *jh&m e b & a h a m\g' "a b&\g' @  a *w w AWp mBAWp  `"  a &mC ʒK wa $ `"a bb%.7p TD?%+04h%ac%ac  # w | %&   |a *y}a *   5 we   a  a /* RSX INTERFACE DEFINES* * copyright (c) 1978 by Whitesmiths, Ltd. */#define QIOW 06003#define IO_ATT 01400#define IO_DAC 010000#define IO_DET 02000#define IO_KIL 00012#define IO_RLB 01000#define IO_RVB 010400#define IO_WLB 00400#define IO_WVB 011000#define EFN 1#define IE_ADP -0142#define IE_IEF -0141#define IE_ILU -0140#define IE_SDP -0143#define IE_ULN -5#define IE_UPN -1#define IE_EOF -10#define IS_SUC 01 /* THE NMBLK */#define FNB struct fnblkstruct fnblk {!/* TEXT fid[6], fnam[6], ftyp[2];m BITS fver;* BITS stat, next;0 TEXT did[6], dvnm[2]; BITS unit;  */ COUNT fid[15]; };O)/* bits in the file name block stat fieldR */0#define NBVER 01#define NBTYP 02#define NBNAM 04#define NBSVR 010#define NBSTP 020#define NBSNM 0402#define NBDIR 0100#define NBDEV 0200#define NBSD1 0400#define NBSD2 01000N /* THE FDB */N#define FDB struct fdb struct fdb { TINY rtyp, ratt;K BYTES rsiz; LONG hibk, efbk; BYTES ffby; TINY racc, rctl;  LONG bkds, nrbd; TINY *nrec; BYTES eobb; COUNT cntg, stbk; BYTES aloc; TINY lun, facc; TINY *dspt; FNB *dfnb; 6/* TINY bkef, bkp1, err, err1, mbct, mbc1, mbfg, bgbe; BYTES vbsz, bbfs; LONG bkvb;A TINY *bdb; BYTES spdv; TINY spun, chr; BITS actl, seqn; */ COUNT bkef[13];d FNB fnb;  };/* bits in the fdb */ #define RFIX 1#define RVAR 2#define RSEQ 3#define FDFTN 01#define FDCR 02 #define FDBLK 010;#define FDRWM 01#define FDRAN 02#define FDPLC 04#define FDINS 010#define FDREC 01#define FDCCL 02#define FDTTY 04#define FDDIR 010c#define FDSD1 020F#define FDSQD 040 #define FARD 01r#define FAWRT 02#define FAEXT 04#define FACRE 010k#define FATMP 020#define FASHR 040 #define FANSP 0100#define FADEL 0400$/* the Whitesmiths RSX control block */t#define RCB struct rcb struct rcb { TINY rlun, flags; BYTES rleft, bleft; TEXT *bnext, *pbuf; LONG lseek, lact, lend; FDB *fdb; };D#define WOPEN 1L#define WTTY 2#define WCR 4#define WFIX 8#define WDIRT 16#define WNL 32d#define WWRITE 64d#define TTYLUN 5#define NFILES 10#define IOSB struct iosb struct iosb  { TINY cc;n TEXT lc;k COUNT nread;  };#define WBUF struct wbuf struct wbuf {n TEXT bbuf[BUFSIZE]; COUNT recsize;c TEXT rbuf[BUFSIZE]; }; RCB struct rcb struct rcb { TINY rlun, flags; BYTES rleft, bleft; TEXT *bnext, *pbuf; LONG lseek, lact, len! compile the echo program cpp -x -i[1,2] -otmp1.tmp echo.ccp1 -otmp2.tmp tmp1.tmp8c82 -otmp3.tmp tmp2.tmpnana -o echo.r tmp3.tmp%! load the echo program for cpm usageL+ld8 -o echo.com chdr.r echo.r clib.a mlib.ai&! load the echo program for isis usageAld8 -o -t040000 -o echo ihdr.r echo.r ilib.a ilib.a mlib.a iend.r ! make an isis hex imagehex echo >echo.hex0! echo may be moved to isis or cpm for execution,! echo echoes the input line to the terminal*bnext, *pbuf; LONG lseek, lact, len|8_jL_ dq d d dM d2dvKdKdhdjdfdTq^ p^ @): @M2MjL_]t!kQ2jL_)S @pp A;v2!K8_"jLjL_#9pp$px%Tq8_&s2'sx}("wskQ)y2* /* THE STANDARD HEADER* * copyright (c) 1978 by Whitesmiths, Ltd. */l/* the pseudo storage classesr */#define AFAST register#define FAST register5#define GLOBAL extern #define IMPORT extern #define INTERN static #define LOCAL static/* the pseudo types0 */ typedef char TEXT, TINY;typedef double DOUBLE;*typedef int BITS, BOOL, COUNT, FILE, VOID;typedef long LONG;typedef unsigned BYTES;4typedef int METACH; /* system parameters */e#define STDIN 0 #define STDOUT 1#define STDERR 2#define YES 1 #define NO 0W#define NULL 0#define FOREVER for (;;)#define BUFSIZE 512#define BWRITE -1t#define READ 0#define WRITE 1n#define UPDATE 2#define EOF -1t#define BYTMASK 0377 /* macrosn */A&#define abs(x) ((x < 0) ? -(x) : (x))-#define isalpha(c) (islower(c) || isupper(c));-#define isdigit(c) ('0' <= (c) && (c) <= '9')y-#define islower(c) ('a' <= (c) && (c) <= 'z')e-#define isupper(c) ('A' <= (c) && (c) <= 'Z')?#define iswhite(c) ((c) <= ' ' || 0177 <= (c)) /* ASCII ONLY */ +#define max(x, y) (((x) < (y)) ? (y) : (x))O+#define min(x, y) (((x) < (y)) ? (x) : (y)) ;#define tolower(c) (isupper(c) ? ((c) + ('a' - 'A')) : (c))2;#define toupper(c) (islower(c) ? ((c) - ('a' - 'A')) : (c))/* the file IO structure */ typedef struct fio { FILE _fd; COUNT _nleft; COUNT _fmode; TEXT *_pnext; TEXT _buf[BUFSIZE]; } FIO;er(c) ('a' <= (c) && (c) <= 'z')e-#define isupper(c) ('A' <= (c) && (c) <= 'Z')?#define iswhite(c) ((c) <= ' '&CPP -X -I LB:[1,1] -O CTMP1.TMP ECHO.CCP1 -O CTMP2.TMP CTMP1.TMPC82 -O CTMP3.TMP CTMP2.TMPANA -O ECHO.R CTMP3.TMP(0PIP CTMP1.TMP;*/DE,CTMP2.TMP;*/DE,CTMP3.TMP;*/DE+LD8 -O ECHO.COM CHDR.R ECHO.R CLIB.A MLIB.A(:LD8 -I -T040000 -O ECHO IHDR.R ECHO.R ILIB.A ILIB.A MLIB.AHEX ECHO >ECHO.HEXct fio { FILE _fd; COUNT _nleft; COUNT _fmode; TEXT *_pnext; TEXT _buf[BUFSIZE]; } FIO;er(c) ('a' <= (c) && (c) <= 'z')e-#define isupper(c) ('A' <= (c) && (c) <= 'Z')?#define iswhite(c) ((c) <= ' '' MOV $TKTCB,I.TCB(R0) ; SET TCB ADDRESSK7 MOV $MDEV,R5 ; GET UCB ADDRESS OF DEVICE TO BE MOUNTEDS$ MOV R5,I.UCB(R0) ; SET IT IN PACKET. MOV #5*400,I.FCN(R0) ; SET MOUNT REQUEST CODE1 MOVB #EFN1,I.EFN(R0) ; SET EVENT FLAG TO WAIT ONU' MOV R0,-(SP) ; SAVE I/O PACKET ADDRESST; MOV #IOSB,I.IOSB(R0) ; SET VIRTUAL ADDRESS OF STATUS BLOCK2( MOV #IOSB,R0 ; GET STATUS BLOCK ADDRESS CALL $RELOC ; RELOCATE IT+* MOV (SP)+,R0 ; RESTORE I/O PACKET ADDRESS' MOV R1,I.IOSB+2(R0) ; SET BLOCK NUMBERO? MOV R2,I.IOSB+4(R0) ; SET PHYSICAL ADDRESS OR OFFSET FROM APR6V7 MOV $MCPB,I.PRM+2(R0) ; SET ADDRESS OF PARAMETER BLOCK.7 MOV #$MCPBL,I.PRM+4(R0) ; SET LENGTH OF PARAMTER BLOCKO; 4; REQUEST MOUNT, AND INCREMENT OUTSTANDING I/O COUNT;A& MOV $MVCB,U.VCB(R5) ; SET VCB ADDRESS) CALL $SWSTK,50$ ; SWITCH TO SYSTEM STATEA4 INC @U.VCB(R5) ; INCREMENT VOLUME TRANSACTION COUNT, BICB #US.MNT,U.STS(R5) ; SET DEVICE MOUNTED( MOV $MACP,U.ACP(R5) ; STORE ACP ADDRESS' MOV U.ACP(R5),R0 ; GET ACP TCB ADDRESSO TST T.STAT(R0) ; IS ACP ACTIVE? BPL 35$ ; YESF$ MOV #401,R1 ; NO, SET UIC TO [1,1]# CALL $TSKRT ; REQUEST RUN OF TASKM$ MOV $MACP,R0 ; GET TASK TCB ADDRESS" BR 37$ ; SKIP SETTING EVENT FLAG/35$: BIS #1,T.EFLG(R0) ; SET ACP'S EVENT FLAG 1$537$: INCB T.EFLG+2(R0) ; INCREMENT MOUNTED UNIT COUNTI1 BITB #TS.WFR,T.STAT+2(R0) ; IS ACP IN A WAITFOR?O( BEQ 40$ ; NO, DON'T HAVE TO WAKE IT UP6 CALL $SETCR ; ASK FOR SCAN OF STD TO START ACP AGAIN640$: ADD #T.RCVL,R0 ; POINT TO ACP'S RECEIVE LIST HEAD* MOV MCMPKT,R1 ; GET ADDRESS OF I/O PACKET/ CALL $QINSP ; INSERT I/O PACKET IN ACP'S LISTL* MOV $TKTCB,R0 ; GET ADDRESS OF MOUNTS TCB/ INCB T.IOC(R0) ; MAKE LIKE WE HAVE I/O PENDINGN' CLR T.EFLG(R0) ; ZERO EVENT FLAGS 1-16T RETURN ; RETURN TO USER STATE950$: WTSE$S #EFN1 ; WAIT TILL ACP HAS SEEN MOUNT REQUEST. TSTB IOSB ; ANY ERRORS?I BPL 60$ ; NO* CLR $MVCB ; YES, VCB IS ALREADY RELEASED) CLR $MCPB ; SO IS COMMUNICATIONS PACKETN* CMPB IOSB,#IE.RSU ; RESOURCE UNAVAILABLE? BNE 51$ ; NO JMP MCMER5 ; YES, ERRORO*51$: CMPB IOSB,#IE.IFC ; ILLEGAL FUNCTION? BNE 55$ ; NO" JMP MCMER4 ; YES, NT NOT MOUNTED055$: JMP MCMER3 ; DEVICE NOT DEFINED IN NETWORK60$: RETURN ;T .END0) ; ZERO EVENT FLAGS 1-16T RETURN ; RETURN TO USER STATE950$: WTSE$S #EFN1 ; WAIT TILL ACP HAS SEEN MOUNT REQUEST. TSTB IOSB ; ANY ERRORS?I BPL 60$ ; NO* CLR $MVCB ; YES, VCB IS ALREADY RELEASED) CLR $MCPB ; SO IS COMMUNICATIONS PACKETN* CMPB IOSB,#IE.RSU ; RESOURCE UNAVAILABLE? BNE 51$ ; NO JMP# .TITLE SAVSUB - SAVE SUBROUTINES .IDENT "02";;A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R?; DEC ASUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITYC?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION: 02O ; BY: H.LEV; DATE: 2/12/743; MODIFIED: 8/7/74 BRAKE SAVE INTO SEPARATE MODULESC1; 3/11/75 SWITCH TO SYSTEM STATE TO FOLLOW LISTST'; 3/18/75 ADD RX01 FLOPPY DISK SUPPORTN.; 6/13/75 ADJUST SIZE OF LAST PARTITION IF IT%; IS A SYSTEM CONTROLLED PARTITION.I,; 6/21/75 ADD 11/70 EXTENDED MEMORY SUPPORT Y G .MCALL DIR$,WTSE$S,MRKT$O .MCALL PCBDF$ PCBDF$ ; DEFINE PCB OFFSETS & .SBTTL EQUATED SYMBOLS AND LOCAL DATA ;U; CONSOLE TYPEWRITER REGISTERS;CTPCS = 177564 ; CONTROL STATUS TPB = 177566 ; DATA BUFFERO I; ; MISCELANEOUS DEFINITIONS; !EFN1 = 1 ; EVENT FLAG TO WAIT ONELUN1 = 1 ; "TI" LUNLUN2 = 2 ; LOAD IMAGE FILE LUNS;U ; LOCAL DATA;5.SAVMKT: MRKT$ EFN1,1.,2 ; WAIT FOR ONE SECOND EDEVMSG: .ASCII /DEVICE /2OFNAM: .ASCIZ <0><0><0><0>/: NOT IN CONFIGURATION/ .$ .SBTTL $PRTMS AND $MOVE SUBROUTINES;+(; *** - $PRTMS - PRINT MESSAGE ON LUN1;Q; INPUT:; R0 - ADRESS OF BUFFERU; ;--$PRTMS::MOV R0,$MODPB+14 ; SET BUFFER ADDRESSN!10$: TSTB (R0)+ ; END OF MESSAGEB BNE 10$ ; NO, NOT ZERO, LOOP DEC R0 ; POINT TO ZERO BYTEN" SUB $MODPB+14,R0 ; COMPUTE LENGTH MOV R0,$MODPB+16 ; SET IT! MOV #$MODPB,R0 ; SET DPB ADDRESSA CALL $DOIO ; WRITE IT OUT RETURN ;D;+2; *** - $MOVE MOVE CODE FROM ONE PLACE TO ANOTHER;:; INPUT:; R0 - SOURCE ADDRESST; R1 - DESTINATION ADDRESS; R2 - LENGTH OF MOVE IN WORDS;S ; OUTPUT:1; NONE;-#$MOVE:: MOV (R0)+,(R1)+ ; MOVE WORD DEC R2 ; DONE? BNE $MOVE ; NO, LOOP RETURN ; YES, RETURN; D, .SBTTL $WRTBB - WRITE BOOT BLOCK SUBROUTINE;+$; *** - $WRTBB WRITE OUT BOOT BLOCK;4; INPUT:5; $SVWBB - FLAG TO DECIDE WHETHER TO WRITE BOOT BLOCK ; 0 - NO, 1 - YESC6; IODPB - QIO DPB SET UP FOR WRITING ON 256 WORD BLOCK ; OUTPUT:O; CARRY SET - ERROR IN WRITING; CARRY CLEAR - GOOD COMPLETIONT; ;-3$WRTBB::TST $SVWBB ; SHOULD WE WRITE A BOOT BLOCK? BEQ 10$ ; NO( CLR $IODPB+22 ; YES, ZERO LOGICAL BLOCK CLR $IODPB+24 ; (BOOT BLOCK)$;E; MOVE DRIVER TO BOOT BLOCK,;T# CMP $DVDRV(R5),#"DX ; FLOPPY DISK? BNE 3$ ; NOE. MOV #$DXBOT,R0 ; YES, GET BOOT DRIVER ADDRESS% MOV #$DXBLN,R2 ; GET LENGTH IN WORDST BR 7$ ; SKIP13$: MOV $DVDRV+DRVADR(R5),R0 ; SET SOURCE ADDRESSE& MOV $DVDRV+DRVLEN(R5),R2 ; GET LENGTH$7$: MOV #$BTDRV,R1 ; SET DESTINATION CALL $MOVE ; MOVE CODE8 MOV #$BTBLK,$IODPB+14 ; SET ADDRESS OF BOOT BLOCK IMAGE! MOV #$IODPB,R0 ; SET DPB ADDRESS$ CALL $DOIO ; WRITE IT OUTB10$: RETURN ;  ;$ .SBTTL $DOIO AND $MVDRV SUBROUTINES;+#; *** - $DOIO ISSUE QIO'S AND WAITO; ; INPUT:; R0 - ADDRESS OF DPBB ; OUTPUT:,!; CARRY CLEAR - NORMAL COMPLETIONB; CARRY SET - ERROR DURING I/O;-$DOIO:: DIR$ R0 ; ISSUE QIO BCS 10$ ; ERROR IN DPB$ WTSE$S #EFN1 ; WAIT FOR COMPLETION BCS 10$ ; ERROR IN DPB DEC $IOSTA ; ANY ERRORS? BEQ 10$ ; NO SEC ; YES SET FLAG410$: RETURN ; ;+$; *** - $MVDRV MOVE DRIVER TO VBN1; INPUT:!; R5 - INDEX TO DRIVER PARAMETERST ; $DVDRV+12(R5) - DRIVER ADDRESS(; $DVDRV+14(R5) - DRIVER LENGTH IN WORDS ; OUTPUT:W; DRIVER IS MOVED TO VBN1A;-5$MVDRV::MOV $DVDRV+DRVADR(R5),R0 ; SET SOURCE ADDRESSO) MOV #$DRVER,R1 ; SET DESTINATION ADDRESSI& MOV $DVDRV+DRVLEN(R5),R2 ; SET LENGTH CALL $MOVE ; MOVE IT RETURN ;  P. .SBTTL $SMCR - SEND COMMAND TO MCR SUBROUTINE;+=; *** - $SMCR SEND A COMMAND TO MCR. ECHO IT FIRST ON "CO" ;; INPUT:B; R0 - ADDRESS OF COMMAND TO SEND, IT IS TERMINATED BY A ZERO BYTE;R ; OUTPUT: !; CARRY CLEAR - NORMAL COMPLETIOND; CARRY SET - ERRORL;T;-,$SMCR:: CALL $PRTMS ; PRINT MESSAGE ON "CO";-; ALLOCATE MCR BUFFERV;() CALL $SWSTK,10$ ; SWITCH TO SYSTEM STATER* MOV #84.,R1 ; SET LENGTH OF BLOCK TO GET CALL $ALOCB ; TRY TO GET IT  ROR $ERFLG ; SAVE CARRY BIT& MOV R0,$MCRBF ; SAVE ADDRESS OF BLOCK" RETURN ; RETURN TO SYSTEM STATE%10$: ROL $ERFLG ; GET CARRY BIT BACKO& BCS 30$ ; ERROR COULDN'T GET A BLOCK; !; SET UP SOURCE UCB AND COPY TEXT ;E' MOV $MCRBF,R0 ; GET BLOCK ADDRESS BACKC CLR (R0) ; ZERO LINK WORDO( MOV $COPT,R1 ; GET ADDRESS OF "CO:" UCB) CALL $SWSTK,17$ ; SWITCH TO SYSTEM STATE,15$: MOV U.RED(R1),R1 ; GET REDIRECT POINTER5 CMP U.RED(R1),R1 ; REDIRECTED TO SELF (END OF LIST)?O" BNE 15$ ; NO, FOLLOW LIST TO END, MOV R1,2(R0) ; YES, SET UCB ADDRESS FOR MCR RETURN ; RETURN TO USER STATE17$: MOV R0,R1 ; COPY POINTER ADD #4,R1 ; POINT TO TEXT AREA' MOV $MODPB+14,R2 ; GET ADDRESS OF TEXTS&20$: MOVB (R2)+,(R1)+ ; MOVE CHARACTER( BNE 20$ ; LOOP UNTIL THEY'RE ALL MOVED;Z3; LINK MESSAGE INTO MCR MESSAGE QUEUE AND START MCRU; MOV R0,R1 ; COPY MSG ADDRESS) CALL $SWSTK,25$ ; SWITCH TO SYSTEM STATEI# CALLR $QMCRL ; LINK INTO MCR LISTI+25$: MOV $MCRPT,R0 ; GET ADDRESS OF MCR TCBO TST T.STAT(R0) ; IS MCR BUSY? BMI 30$ ; NO5 DIR$ #SAVMKT ; YES, SET CLOCK TO RING IN ONE SECOND7 BCS 25$ ; DIRECTIVE ERROR WTSE$S #EFN1 ; WAIT FOR CLOCK BR 25$ ; AND LOOK AGAINR30$: RETURN ;: V$ .SBTTL $FNDUB - FIND UCB SUBROUTINE  O;+=; *** - $FNDUB - FIND UCB ADDRESS BY SEARCHING DEVICE TABLESU;N; INPUT:; R3 - UNIT NUMBER IN BINARY; R4 - DEVICE MNEMONIC IN ASCIIC;O ; OUTPUT:T!; CARRY CLEAR - FOUND UCB ADDRESSL; R1 - UCB ADDRESS'; CARRY SET - COULD NOT FIND DEVICE UCBA;0;; IN EITHER CASE R0,p R1, R2, AND R3 ARE USED BY THIS ROUTINEL; ;-0$FNDUB::MOV $DEVHD,R0 ; GET ADDRESS OF FIRST DCB: BIC #177400,R3 ; CLEAR HIGH ORDER BITS TO PREVENT TROUBLE+10$: CMP R4,D.NAM(R0) ; MNEMONICS THE SAME?  BEQ 20$ ; YES 315$: MOV D.LNK(R0),R0 ; NO, GET ADDRESS OF NEXT DCBH BNE 10$ ; TRY THIS ONE. BR 40$ ; ZERO IS END OF LIST, DIDN'T FIND IT.20$: CMPB R3,D.UNIT(R0) ; IS UNIT ON THIS DCB? BLO 15$ ; NO CMPB R3,D.UNIT+1(R0) ; MAYBE BHI 15$ ; NO) MOVB D.UNIT(R0),R2 ; GET LOW UNIT NUMBERA, MOV D.UCB(R0),R1 ; GET ADDRESS OF FIRST UCB* SUB R2,R3 ; COMPUTE RELATIVE UNIT NUMBER BEQ 50$ ; FOUND IT*30$: ADD D.UCBL(R0),R1 ; POINT TO NEXT UCB DEC R3 ; IS THIS THE ONE?0 BNE 30$ ; NO BR 50$ ; YES40$: SEC ; SET ERROR FLAG)50$: RETURN ; RETURN X' .SBTTL $TSTDV - TEST DEVICE SUBROUTINE ;+-; *** - $TSTDV TEST FOR NON-EXISTANT DEVICES3%; AND SET THEM BUSY IF NOT IN SYSTEMO; INPUTS: NONE; OUTPUTS: NONE ;A;-3$TSTDV::MOV $DEVHD,R5 ; GET ADDRESS OF DEVICE TABLEN. MOV @#4,-(SP) ; SAVE CURRENT INTERRUPT VECTOR .IF DF M$$MGE MOV @#6,-(SP) ; SAVE CURRENT PS .ENDC MOV #NODEV,@#4 ; SET BUS ERROR, .IF DF M$$MGE MOV #170340,@#6 ; AND SET PSO .ENDC;3-; SET UP MESSAGE AS IF DEVICE ISN'T ON SYSTEMR;A0TSTD1: MOV #OFNAM,R0 ; POINT TO DEVICE NAME AREA% MOVB D.NAM(R5),(R0)+ ; PUT IN DEVICET" MOVB D.NAM+1(R5),(R0)+ ; MNEMONIC+ MOVB D.UNIT(R5),R1 ; GET FIRST UNIT NUMBERU) CLR R2 ; SET TO SUPPRESS LEADING ZEROES:- CMP R1,#7 ; FIRST UNIT GREATER THAN UNIT 7?M BGT 10$ ; YESV& MOVB #60,(R0)+ ; NO, SET LEADING ZERO$10$: CALL $CBOMG ; CONVERT TO OCTAL* MOVB D.UNIT+1(R5),R2 ; COMPUTE NUMBER OF ' MOVB D.UNIT(R5),R1 ; UNITS ON THIS DCBP SUB R1,R2 ;, MOV D.UCB(R5),R4 ; GET ADDRESS OF FIRST UCB;A; TRY NEXT DEVICE,;;<TSTD2: MOV U.SCB(R4),R1 ; GET ADDRESS OF SCB FOR NEXT DEVICE1 BIT #DV.PSE,U.CW1(R4) ; IS THIS A PSUEDO DEVICE?N BNE 40$ ; YES, THEN SKIP TESTU" TST @S.CSR(R1) ; IS DEVICE THERE? BCC 14$ ; YES,, CALL SETOFF ; SET OFFLINE AND SEND MESSAGE BR 15$ ; M014$: BICB #US.OFL,U.ST2(R4) ; SET DEVICE ON LINE15$: DEC R2 ; ANY MORE UNITS? BLT 40$ ; NO+ INCB -1(R0) ; YES, INCREMENT UNIT NUMBBERN CMPB -1(R0),#67 ; IS IT > "7" BLE 30$ ; NO/ INCB -2(R0) ; YES, INCREMENT HIGH ORDER DIGITV- MOVB #60,-1(R0) ; SET LOW ORDER DIGIT TO "0" *30$: ADD D.UCBL(R5),R4 ; POINT TO NEXT UCB BR TSTD2 ; LOOPD/40$: MOV D.LNK(R5),R5 ; GET ADDRESS OF NEXT DCBT BNE TSTD1 ; LOOP UNTIL DONE .IF DF M$$MGE MOV (SP)+,@#6 ; E .ENDC) MOV (SP)+,@#4 ; RESTORE INTERRUPT VECTOR ' CALL $TSTPY ; SET UP PARITY REGISTERS5( CALL $CRSIZ ; DETERMINE SIZE OF MEMORY RETURN ;R; @; MARK DEVICE AS OFF-LINE AND SEND OUT OFFLINE MESSAGE IF NEEDED;3CSETOFF: BITB #US.OFL,U.ST2(R4) ; IS DEVICE ALREADY MARKED OFF LINE?,* BNE 10$ ; YES, DON'T PRINT MESSAGE AGAIN( MOV #DEVMSG,R0 ; GET ADDRESS OF MESSAGE CALL $TYPE ; PRINT IT OUTK MOV #OFNAM+4,R0 ; RESET R0 010$: BISB #US.OFL,U.ST2(R4) ; SET DEVICE OFFLINE20$: RETURN ;6 E;.; ENTRY FOR BUS ERROR INTERRUPTT;U#NODEV: BIS #1,2(SP) ; SET CARRY BITR RTI ; RETURNC 2 .SBTTL $TSTPY - TEST FOR PARITY MEMORY SUBROUTINE;+2; *** - $TSTPY - TEST FOR PARITY MEMORY HARDWARE; 5; SET CSR TABLE FOR EACH PARITY MEMORY MODULE PRESENTA;A;-:$TSTPY::MOV $PARPT,R0 ; GET ADDRESS OF PARITY TABLE IF ANY BEQ 40$ ; THERE ISN'T ANYS1 MOV @#4,-(SP) ; SAVE MEMORY ADDRESS ERROR VECTORF MOV #20$,@#4 ; SET TEMP VECTORU .IF DF M$$MGE  MOV @#6,-(SP) ; SAVE PS MOV #170340,@#6 ; SET TEMP PS .ENDC' MOV R0,R1 ; GET ADDRESS OF FIRST WORDE' MOV #1,(R1)+ ; SET FIRST WORD OF TABLET3 MOV #MPAR-2,R2 ; GET ADDRESS OF FIRST CSR REGISTER*& MOV #16.,R3 ; SET COUNT OF REGISTERS#10$: ADD #2,R2 ; POINT TO NEXT CSRP TST (R2) ; IS HARDWARE THERE?) MOV R2,(R1)+ ; YES, SET ADDRESS IN TABLEP BR 30$ ;,20$: CMP (SP)+,(SP)+ ; NO, POP OFF PC AND PS- MOV R0,(R1)+ ; SET POINTER TO START OF TABLEV30$: DEC R3 ; DONE? BNE 10$ ; NO, LOOP8 MOV #35$,@#4 ; SET TRAP FOR 11/70 CACHE PARITY REGISTER3 MOV #MPCSR,R2 ; GET 11/70 CACHE PARITY REG ADDRESS( MOV R2,(R1) ; STORE IT IN PARITY TABLE TST (R2) ; IS IT IN HARDWARE?F BR 37$ ; YES&35$: CMP (SP)+,(SP)+ ; NO, CLEAN STACK% MOV R0,(R1) ; AND DUMMY TABLE ENTRYP37$: .IF DF M$$MGE% MOV (SP)+,@#6 ; RESTORE INTERRUPT PSA .ENDC) MOV (SP)+,@#4 ; RESTORE INTERRUPT VECTOR; 40$: RETURNP N2 .SBTTL $CRSIZ - COMPUTE SIZE OF MEMORY SUBROUTINE;+=; *** - $CRSIZ - DETERMINE MEMORY SIZE OF CURRENT PROCESSORR3; AND SET SIZE OF LAST SYSTEM CONTROLLED PARTITIONG/; TO USE ALL OF MEMORY IF IT IS LAST PARTITION 4; IN SYSTEM OR LAST NON-DEVICE PARTITION IN SYSTEM.;E ; OUTPUT: (; $SYSIZ - SET UP TO CURRENT MEMORY SIZE;K;-0$CRSIZ::MOV $RESDL,R1 ; GET RESIDUAL BLOCK COUNT4 BEQ 10$ ; ZERO MEANS WE READ IT ALL IN,MAY BE MORE4 INC R1 ; INCREMENT BLOCKS NOT READ(SECONDARY BOOT)= MOV $SYSIZ+10,R0 ; GET NUMBER OF DISK BLOCKS IN SYSTEM IMAGE+ SUB R1,R0 ; COMPUTE NUMBER OF BLOCKS READO$ ASL R0 ; CONVERT TO 32 WORD BLOCKS ASL R0 ; ASL R0 ; BR 60$ ;910$: MOV @#4,-(SP) ; SAVE NON-EXISTANT MEMORY TRAP VECTORY& MOV #120$,@#4 ; SET OURS IN ITS PLACE# .IF DF M$$MGE ; MEMORY MANAGEMENT?U MOV @#6,-(SP) ; YES, SAVE PS-! MOV #170340,@#6 ; SET OUR OWN PSU .IFTF2 MOV $SYSIZ+10,R0 ; GET NUMBER OF DISK BLOCKS READ0 ASL R0 ; CONVERT TO NUMBER OF 256. BYTE BLOCKS .IFFB# SWAB R0 ; CONVERT TO BYTE ADDRESSO20$: CMP R0,#160000 ; 28K? BEQ 50$ ; YES CLR (R0)+ ; NO, ZERO NEXT WORD+ BR 20$ ; LOOP, UNTIL TRAP OR REACHING 28K;-50$: BIC #377,R0 ; CLEAR LOW BYTE OF ADDRESSS& SWAB R0 ; CHANGE TO 256. BYTE BLOCKS ASL R0 ; CONVERT TO $ ASL R0 ; NUMBER OF 32. WORD BLOCKS .IFTE ASL R0 ; CONVERT TO NUMBER OFP ASL R0 ; 32. WORD BLOCKS020$: BIT #FE.EXT,$FMASK ; 11/70 EXTENDED MEMORY? BEQ 22$ ; NO CMP R0,#170000 ; END OF MEMORY? BHIS 50$ ; YES BR 25$ ; NOA(22$: CMP R0,#7600 ; END OF VALID MEMORY? BHIS 50$ ; YES825$: MOV R0,@#UISAR6 ; NO, SET MEMORY BLOCK BASE ADDRESS! MOV #140000,R2 ; SET TO USE APR6 (30$: CMP #144000,R2 ; END OF 1K SEGMENT? BEQ 40$ ; YES CLR (R2)+ ; NO, ZERO NEXT WORD BR 30$ ; AND LOOP (40$: ADD #40,R0 ; POINT TO NEXT SEGMENT BR 20$ ; LOOPC50$: MOV (SP)+,@#6 ; RESTORE PS3 W .IFTF $ MOV (SP)+,@#4 ; RESTORE TRAP VECTOR$60$: MOV R0,$SYSIZ ; SET SYSTEM SIZE 0 .IFT  M* MOV #$PARHD,R1 ; GET POINTER TO FIRST PCB+70$: MOV (R1),R2 ; GET ADDRESS OF NEXT PCB  BEQ 100$ ; END OF PCB LIST' BIT #FE.EXT,$FMASK ; IS THIS AN 11/70?M BEQ 80$ ; NO9 CMP P.REL(R2),#177600 ; YES, IS THIS A DEVICE PARTITION? BHIS 100$ ; YESC BR 90$ ; NO 680$: CMP P.REL(R2),#7600 ; IS THIS A DEVICE PARTITION? BHIS 100$ ; YESE390$: MOV R2,R1 ; NO, GET POINTER TO NEXT PARTITION3- BR 70$ ; LOOP UNTIL DEVICE PARTITION OR END D100$: BITB #PS.SYS,P.STAT(R1) ; IS IT A SYSTEM CONTROLLED PARTITION? BEQ 110$ ; NON7 SUB P.REL(R1),R0 ; YES, COMPUTE SIZE OF LAST PARTITION  MOV R0,P.SIZE(R1) ; AND SET ITT B .ENDC $!110$: RETURN ; RETURN TO CALLER$; %; NON EXISTENT MEMORY TRAPS COME HEREI; )120$: CMP (SP)+,(SP)+ ; POP OFF PS AND PC BR 50$ ; :, .SBTTL $STCLK - SET SYSTEM CLOCK SUBROUTINE;+*; *** - $STCLK SELECT A CLOCK FOR SYSTEM; 4; DECIDE WHICH CLOCK IS ON SYSTEM, DEFAULT TO KW11-P ; SET UP SYSCM FOR CORRECT CLOCK;S;-7$STCLK::MOV @#4,-(SP) ; SAVE NON-EXISTANT MEMORY VECTOR0 MOV #10$,@#4 ; SET VECTOR .IF DF M$$MGE MOV @#6,-(SP) ; SAVE OLD PS MOV #170340,@#6 ; SET NEW PS .ENDC. MOV $CKCSR,R0 ; GET CURRENT CLOCK CSR ADDRESS TST (R0) ; IS IT THERE?E BR 30$ ; YES)10$: CMP (SP)+,(SP)+ ; NO, CLEAR OF STACK  MOV #20$,@#4 ; SET VECTOR UPT# MOV #172540,R0 ; SET UP FOR KW11-P  MOV R0,$CKCSR ; MOV #172542,$CKCNT ;  MOV #10.,$CKLDC ;. MOV #1000.,$TKPS ; SET 1000. TICKS PER SECOND TST (R0) ; IS IT THERE?S BR 30$ ; YES&20$: CMP (SP)+,(SP)+ ; NO, CLEAR STACK# MOV #177546,R0 ; SET UP FOR KW11-L$ MOV R0,$CKCSR ; MOV R0,$CKCNT ; CLR $CKLDC ;* MOV #60.,$TKPS ; SET 60. TICKS PER SECOND30$: .IF DF M$$MGE MOV (SP)+,@#6 ; .ENDC1 MOV (SP)+,@#4 ; RESET NON-EXISTANT MEMORY VECTOR,( MOV #$NONSI,@#100 ; RESET KW11-L VECTOR& MOV #$CKINT,@#104 ; SET KW11-P VECTOR& CMP R0,#172540 ; IS THE KW11-P THERE? BEQ 40$ ; YES,* MOV #$CKINT,@#100 ; NO, SET KW11-L VECTOR( MOV #$NONSI,@#104 ; RESET KW11-P VECTOR40$: RETURN ; RETURN P .SBTTL NON-INTERRUPT TTY DRIVER;+(; *** - $TYPE PRINT OUT MESSAGE ON TT0:-; *** - TYPIT PRINT OUT ONE CHARACTER ON TT0:,;P; INPUT:,; R0 - ADDRESS OF MESSAGE, ENDS IN ZERO BYTE$; TYPIT R1 - CHARACTER TO BE PRINTED;T ; OUTPUT:N; R0 - UPDATED;M;-$TYPE:: MOV R1,-(SP) ; SAVE R1 MOV #12,R1 ; PRINT LFS CALL TYPIT ;'10$: MOVB (R0)+,R1 ; GET NEXT CHARACTER" BEQ 20$ ; ZERO IS END OF MESSAGE CALL TYPIT ; PRINT CHARACTER BR 10$ ; LOOPS20$: MOVB #15,R1 ; PRINT CR CALL TYPIT ; MOV (SP)+,R1 ; RESTORE R1 RETURN *; ; TYPE A CHARACTER;E&TYPIT: MOVB R1,@#TPB ; PRINT CHARACTER10$: TSTB @#TPCS ; READY? BPL 10$ ; NO, LOOP RETURN ;  .END BYTE$; TYPIT R1 - CHARACTER TO  .SBTTL RX01 BOOT STRAP .ENABL LSB#5$DXSEC:: .BLKW 4 ; 4 PHYSICAL TRACK/SECTOR ADDRESSEST*$DXBOT:: CLR R3 ; INITIALIZE SECTOR INDEX MOV (PC)+,R5 ; GET CSR ADDRESSSDXBCSR: .WORD 0 ; ; CLR R4 ; ZERO BUFFER ADDRESS TST R0 ; BOOTED FROM UNIT 1? BEQ 10$ ; NO$ BIS #20,DXBFUN ; YES, SELECT UNIT 1*10$: MOV (PC)+,(R5) ; SET FUNCTION TO READ%DXBFUN: .WORD 7 ; READ FUNCTION CODE CALL DXWAIT ; WAIT BCS $DXBOT ; ERROR) MOV PC,R1 ; GET ADDRESS OF SECTOR TABLED ADD R3,R1 ; +15$: MOVB $DXSEC-15$(R1),2(R5) ; SET SECTOR  CALL DXWAIT ; WAIT BCS $DXBOT ; ERROR( MOVB $DXSEC-15$+1(R1),2(R5) ; SET TRACK CALL DXWAIT ; WAIT BCC $DXBOT ; ERROR MOV R5,R2 ; COPY CSR ADDRESS! MOV #3,(R2)+ ; SET TO EMPTY SILOT!20$: BITB #240,(R5) ; BYTE READY?$ BMI 30$ ; YESD BEQ 20$ ; NO, WAIT BR 40$ ; YES, SILO EMPTY$30$: MOVB (R2),(R4)+ ; GET NEXT BYTE BR 20$ ; LOOPC%40$: TST (R3)+ ; UPDATE SECTOR INDEX  CMP R3,#6 ; DONE? $ BLOS 10$ ; NO, READ IN NEXT SECTOR* CLR PC ; YES, GO TO SECONDARY BOOT BLOCK#DXWAIT: CLC ; DEFAULT TO TR READYS50$: BITB #240,(R5) ; DONE?C BMI 60$ ; YES, TR READYK BEQ 50$ ; NO SEC ; YES, DONE60$: RETURN ;,0$DXBLN == <.-$DXSEC>/2 ; LENGTH OF DX BOOT BLOCK .DSABL LSB: BITB #240,(R5) ; BYTE READY?$ BMI 30$ ; YESD BEQ 20$ ; NO, WAIT BR 40$ ; YES, SILO EMPTY$30$: MOVB (R2),(R4)+ ; GET NEXT BYTE BR 20$ ; LOOPC%40$: TST (R3)+ ; UPDATE SECTOR INDEX  CMP R3,#6 ; DONE? $ BLOS 10$ ; NO, READ IN NEXT SECTOR* CLR PC ; YES,  .SBTTL RX01 DRIVERB9$DXDRV:: MOV PC,R5 ; COMPUTE ADDRESS OF NXM TRAP ROUTINE( ADD #DXTRP4-.,R5 ;$ MOV R5,@#4 ; AND SET IT$6 MOV #DXTRP4,@#4 ; SET NON-EXISTANT MEMORY TRAP VECTOR CLR @#6 ;; MOV (PC)+,R5 ; GET CSR ADDRESS DXCSR: .WORD 0 ; " MOV (PC)+,R4 ; GET BUFFER ADDRESSDXSA: .WORD 0 ;1 MOV (PC)+,R3 ; GET LOAD LENGTH IN LOGICAL BLOCKS;DXLLEN: .WORD 0 ; ASL R3 ; CONVERT TO( ASL R3 ; LOGICAL SECTOR # CMPB DXFUN+1,#-1 ; UNIT SPECIFIED?N BNE DX2 ; YESE MOVB R0,DXFUN+1 ; NO, SET IT DX2: TST DXFUN+1 ; UNIT 0?, BEQ 10$ ; YESR" BIS #20,DXFUN ; NO, SELECT UNIT 1'10$: CMP $DXSLO,#3 ; READING FROM DISK?M+ BNE DXSILO ; NO, FILL SILO BEFORE WRITING 0DXLOOP: MOV (PC)+,R1 ; GET LOGICAL SECTOR NUMBER; ; PERFORM SILO/DISK TRANSFER;RDXBLK: .WORD 0 ;E6 CALL $TRKSC ; CONVERT LOGICAL SECTOR TO TRACK/SECTOR! MOVB (PC)+,(R5) ; START FUNCTION;DXFUN: .WORD 0 ;T CALL TRWAIT ; WAIT BCS $DXDRV ; ERROR MOVB R0,2(R5) ; SET SECTORB CALL TRWAIT ; WAIT BCS $DXDRV ; ERROR MOVB R1,2(R5) ; SET TRACK CALL TRWAIT ; WAIT BCC $DXDRV ; ERROR* INC DXBLK ; UPDATE LOGICAL SECTOR NUMBER# CMP $DXSLO,#3 ; READING FROM DISK?  BEQ 10$ ; YESN$ DEC R3 ; NO, ALL BLOCKS PROCESSED? BLE DXNXM ; YES"10$: MOV #128.,R0 ; SET BYTE COUNT;:; PERFORM SILO/MEMORY TRANSFER;R,DXSILO: MOV (PC)+,(R5) ; SET EMPTY/FILL SILO$DXSLO:: .WORD 0 ;; 10$: BITB #TR!DONE,2(R5) ; DONE? BMI $DXMOV ; YES BEQ 10$ ; NO BR DXEF ; YES, SILO EMPTYL*$DXMOV:: MOVB 2(R5),(R4)+ ; MOVE NEXT BYTE DEC R0 ; DONE? BR 10$ ; LOOPT.DXEF: TST R0 ; ALL BYTES IN SILO TRANSFERRED? BNE $DXDRV ; NO, ERROR# CMP $DXSLO,#3 ; READING FROM DISK? % BNE DXLOOP ; NO MUST WRITE SILO OUTB DEC R3 ; ALL SECTORS READ? BGT DXLOOP ; NO26DXNXM: MOV R3,R0 ; GET NUMBER OF SECTORS LEFT TO READ$ ASR R0 ; CONVERT TO LOGICAL BLOCKS ASR R0 ;" MOVB DXFUN+1,R4 ; GET UNIT NUMBER BR DXEND ; DONEN;; WAIT FOR DISK TO SHOW READY ;#TRWAIT: CLC ; DEFAULT TO TR READY:10$: BITB #TR!DONE,(R5) ; DONE?E BMI 20$ ; YES? BEQ 10$ ; NO, LOOP SEC ; YES20$: RETURN ; ;N<; PROCESS NON-EXISTANT MEMORY TRAP (STOP READING OR WRITING); %DXTRP4: CMP (SP)+,(SP)+ ; CLEAR STACKL BR DXNXM ;;;=; CONVERT LOGICAL SECTOR NUMBER TO PHYSICAL TRACK/SECTOR PAIR ; INPUT:; R1 - LOGICAL SECTORA ; OUTPUT:N ; R0 - TRACK ; R1 - SECTORR;; $TRKSC:: MOV #8.,R0 ; SET COUNT MOV #6400,R2 ; AND DIVISOR ,30$: CMP R2,R1 ; DOES 26. GO INTO DIVIDEND?" BHI 40$ ; BRANCH IF NOT, C CLEAR( SUB R2,R1 ; SUBTRACT 26. FROM DIVIDEND SEC ;*40$: ROL R1 ; SHIFT DIVIDEND AND QUOTIENT DEC R0 ; DONE? BGT 30$ ; NO, LOOP MOVB R1,R0 ; GET TRACK CLRB R1 ; CLEAR TRACK) SWAB R1 ; SHIFT DOWN SECTOR! CMP #12.,R1 ; C=1 IF 13<=R1<=25 ' ROL R1 ; DOUBLE FOR INTERLEAVE FACTOR! ASL R0 ; ADD TRACK - TRACK SKEW ADD R0,R1 ; SKEW BY 2*TRACK; ADD R0,R1 ; SKEW BY 4*TRACKU ADD R0,R1 ; SKEW BY 6*TRACK  ASR R0 ; RESTORE TRACK NUMBERN MOV #26.,R2 ; SET MODULUSN550$: SUB R2,R1 ; MODULO SECTOR INTO RANGE -26. TO -1I- BGE 50$ ; LOOP TILL REMAINDER GOES NEGATIVEN& ADD R2,R1 ; CONVERT TO RANGE 0 - 25.( INC R0 ; BUMP TRACK TO SKIP TRACK ZERO& INC R1 ; AND SECTOR TO RANGE 1 - 26. RETURN ;DXEND: RETURN ; IF 13<=R1<=25 ' ROL R1 ; DOUBLE FOR INTERLEAVE FACTOR! ASL R0 ; ADD TRACK - TRACK SKEW ADD R0,R1 ; SKEW BY 2*TRACK; ADD R0,R1 ; SKEW BY 4*TRACKU ADD R0,R1 ; SKEW BY 6*TRACK  ASR R0 ; RESTORE TRACK NUMBERN MOV #26.,R2 ; SET MODULUSN550$: SUB R2,R1 ; MODULO".TITLE UFD - CREATE DIRECTORY FILE.SBTTL TITLE PAGE.IDENT "V0405";A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E"; ANDREW C. GOLDSTEIN 25 JUN 1974 E".SBTTL MACRO CALLS AND DEFINITIONS; MACROS FROM SYSTEM LIBRARY .MCALL DIR$,WTSE$S,CALL,RETURNY .MCALL GLUN$C,ALUN$,EXIT$SI .MCALL NMBLK$ .MCALL QIO$,QIO$S,GMCR$ .IIF NDF,R$$11M .MCALL QIOW$N; MACRO TO CALL QIO ROUTINE .MACRO QIO DPB JSR R5,XQIO .WORD DPB .ENDM QIOD; MACRO FOR SOB'SO .IF NDF R$$EISE.MACRO SOB RX,LABELS DEC RXF BNE LABEL .ENDM SOBI .ENDC I UFDLUN=1UFDEFN=1COLUN=2 COEFN=2P E.SBTTL ASSORTED DATA - DPB'S .PSECT IMPURE,D .LIST MEB; GET COMMAND LINE GCML: GMCR$R; ASSIGN LUN TO DEVICEASLUN: ALUN$ UFDLUN,XX,0$UDEV== ASLUN+A.LUNA$UUNIT==ASLUN+A.LUNU .IF NDF R$$11MQ .IFTC; ACCESS INDEX FILE FOR READ8ACCES1: QIOW$ IO.ACR,UFDLUN,UFDEFN,,IOSTAT,,IDXFID: .WORD 1,1,0E!; READ HOME BLOCK FROM INDEX FILEF;RHOME: QIOW$ IO.RVB,UFDLUN,UFDEFN,,IOSTAT,, ; DEACCESS INDEX FILEL,DEACC1: QIOW$ IO.DAC,UFDLUN,UFDEFN,,IOSTAT,,; CREATE NEW DIRECTORY FILE 5CREATE: QIOW$ IO.CRE,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,1,>R$UDSIZ= CREATE+Q.IOPL+2E; ENTER DIRECTORY IN MFD1ENTER: QIOW$ IO.ENA,UFDLUN,UFDEFN,,IOSTAT,,<$FNB>F#; WRITE ATTRIBUTES TO NEW DIRECTORYF7WATT: QIOW$ IO.WAT,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,ATTBLK>,; ERROR RECOVERY7; REMOVE DIRECTORY FROM MFD ON WRITE ATTRIBUTES FAILURE2REMOVE: QIOW$ IO.RNA,UFDLUN,UFDEFN,,IOSTAT,,<$FNB>7; DELETE DIRECTORY ON ENTER OR WRITE ATTRIBUTES FAILURED1DELET: QIOW$ IO.DEL,UFDLUN,UFDEFN,,IOSTAT,,<$FNB> .IFF ; ACCESS INDEX FILE FOR READ>ACCES1: QIO$ IO.ACR,UFDLUN,UFDEFN,,IOSTAT,,IDXFID: .WORD 1,1,0.!; READ HOME BLOCK FROM INDEX FILE;RHOME: QIO$ IO.RVB,UFDLUN,UFDEFN,,IOSTAT,,U; DEACCESS INDEX FILET8DEACC1: QIO$ IO.DAC,UFDLUN,UFDEFN,,IOSTAT,,; CREATE NEW DIRECTORY FILEO=CREATE: QIO$ IO.CRE,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,103400,1,,>O$UDSIZ= CREATE+Q.IOPL+6U; ENTER DIRECTORY IN MFD5ENTER: QIO$ IO.ENA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>E#; WRITE ATTRIBUTES TO NEW DIRECTORYI:WATT: QIO$ IO.WAT,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,ATTBLK,,,,>; ERROR RECOVERY7; REMOVE DIRECTORY FROM MFD ON WRITE ATTRIBUTES FAILURE,6REMOVE: QIO$ IO.RNA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>7; DELETE DIRECTORY ON ENTER OR WRITE ATTRIBUTES FAILURE,5DELET: QIO$ IO.DEL,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,,,,>, .ENDC ,.SBTTL OTHER RANDOM DATA ; WRITE ATTRIBUTES CONTROL BLOCK(ATTBLK: .BYTE 5,10 ; FILE NAME AND TYPE .WORD $FNB+N.FNAM .BYTE 7,2 ; VERSION NUMBER .WORD $FNB+N.FVER# .BYTE 4,S.FATT ; RECORD ATTRIBUTESD .WORD RECATTF .BYTE 1,2 ; FILE OWNER .WORD $UUIC$$PRFLG::.BYTE 2,2 ; FILE PROTECTION .WORD $UPRO .WORD 0 ; ENDI; RECORD ATTRIBUTESSRECATT: .BYTE R.FIX,0E .WORD 16. ; RECORD LENGTHE .WORD 0,0 ; FILE LENGTHE .WORD 0,1 ; END OF FILE VBNO .WORD 0 ; FIRST FREE BYTE&; FILE NAME BLOCK FOR CREATE AND ENTER$FNB:: NMBLK$ ,DIR,1. = $FNB+N.DID .WORD 4,4,0. = $FNB+S.FNB; RANDOM VARIABLES.E$UUIC:: .WORD 0 ; FILE OWNERN$UPRO:: .WORD 0 ; PROTECTIONO&$UALL:: .WORD 0 ; RECORDS TO ALLOCATE)$UVNAM::.WORD 0 ; POINTER TO VOLUME NAMET-$UVNML::.WORD 0 ; CHAR COUNT OF VOLUME LABEL0ERRNUM: .WORD 0 ; ERROR INDEXSTRING: ; STRING BUFFER.LUNBUF: .BLKW 6 ; AND BUFFER FOR GET LUN INFO#IOSTAT: .BLKW 2 ; I/O STATUS BLOCK,IOBUFF: .BLKB 64. ; BUFFER FOR VOLUME LABEL .NLIST MEBD T.SBTTL ERROR MESSAGESR .PSECT MSGSTR,D; ERROR MESSAGE INDEX TABLEERRMSG: .WORD ERRM1 .WORD ERRM2 .WORD ERRM3 .WORD ERRM4 .WORD ERRM5 .WORD ERRM6 .WORD ERRM7 .WORD ERRM8 .WORD ERRM9 .WORD ERRM10T .WORD ERRM11M; THE ERROR MESSAGES THEMSELVESF8ERRM1: .ASCIZ <15>"UFD -- CAN'T READ MCR COMMAND BUFFER"'ERRM2: .ASCIZ <15>"UFD -- SYNTAX ERROR"B/ERRM3: .ASCIZ <15>"UFD -- DEVICE NOT IN SYSTEM"S.ERRM4: .ASCIZ <15>"UFD -- NOT FILES-11 DEVICE"/ERRM5: .ASCIZ <15>"UFD -- HOME BLOCK I/O ERROR"S'ERRM6: .ASCIZ <15>"UFD -- WRONG VOLUME"S3ERRM7: .ASCIZ <15>"UFD -- DIRECTORY ALREADY EXISTS"21ERRM8: .ASCIZ <15>"UFD -- FAILED TO ENTER IN MFD"E5ERRM9: .ASCIZ <15>"UFD -- FAILED TO CREATE DIRECTORY"E4ERRM10: .ASCIZ <15>"UFD -- WRITE ATTRIBUTES FAILURE".ERRM11: .ASCIZ <15>"UFD -- VOLUME NOT MOUNTED" .EVEN E.SBTTL MAIN PROGRAM>;+;Y); *** - $UFD - ENTRY FOR UFD MAIN PROGRAMI;N?; CREATING A NEW DIRECTORY IS REALLY CRETINOUSLY SIMPLE. WE GETR=; THE COMMAND LINE AND PARSE IT FOR THE NECESSARY INFORMATION1=; AND OPTIONS. THEN WE VERIFY THAT THE DEVICE EXISTS AND WILLLA; TAKE MULTIPLE DIRECTORIES, AND VERIFY THE VOLUME LABEL. FINALLY?; WE CREATE THE DIRECTORY FILE, ENTER IT IN THE VOLUME MFD, ANDA?; SET UP THE ATTRIBUTES CORRECTLY. THE WRITE ATTRIBUTES IS DONEF>; LAST TO ENSURE THAT AN ERROR UNWIND FROM AN ENTER FAILURE IS ; POSSIBLE. ;U;- .PSECT CODE$UFD::( CLR $PRFLG ; SET PROTECTION TO DEFAULT CLR ERRNUM ; INIT ERROR INDEXH$ CLR $UUNIT ; CLEAN OUT UNIT NUMBER$ DIR$ #GCML ; READ THE COMMAND LINE BCC 10$ JMP CMLERR ; NO COMMAND LINE$10$: CLR R1 ; SET BLANK SUPPRESSION# MOV #.UFDKT,R2 ; GET KEYWORD TABLEC' MOV $DSW,R3 ; GET COMMAND LINE LENGTH ' MOV #GCML+2,R4 ; GET COMMAND LINE ADDR , MOV #.PSTRT,R5 ; GET START STATE FOR PARSER* CALL .TPARS ; AND PARSE THE COMMAND LINE BCC 20$ JMP SYNERR ; SYNTAX ERROR2; ASSIGN THE LUN AND SEE IF THE DEVICE IS SUITABLE20$: DIR$ #ASLUN ; ASSIGN LUN$ BCS BADDEV ; DEVICE DOES NOT EXIST0 GLUN$C UFDLUN,LUNBUF,CODE ; GET LUN INFORMATIONH CMP LUNBUF+U.C1,#DV.DIR!DV.F11!DV.MNT ; TEST FOR MULTI DIRECTORY DEVICE BEQ 30$! JMP NDDEV ; ANYTHING ELSE - OUTM4; NOW READ THE HOME BLOCK TO VERIFY THE VOLUME LABEL$30$: QIO ACCES1 ; ACCESS INDEX FILE BCC 40$ .IF DF,R$$11M4 CMPB IOSTAT,#IE.PRI ; CHECK FOR PRIVILEGE VIOLATION .IFFJ1 CMPB IOSTAT,#IE.DNR ; CHECK FOR DEVICE NOT READYS .ENDC4 BEQ VNMO ; WHICH REALLY MEANS VOLUME ISN'T MOUNTED BR NRIDX ; SOMETHING ELSEN!40$: QIO RHOME ; READ HOME BLOCKO BCS NRIDX" QIO DEACC1 ; DEACCESS INDEX FILE BCS NRIDX5 MOV #IOBUFF+H.VNAM,R0 ; POINT TO LABEL IN HOME BLOCKP3 MOV $UVNAM,R1 ; POINT TO LABEL FROM COMMAND STRING / MOV $UVNML,R2 ; GET CHAR COUNT OF VOLUME LABELS! BEQ 70$ ; CHECK FOR BLANK LABEL. MOV #12.,R3 ; SET MAX COUNTP'50$: CMPB (R0)+,(R1)+ ; COMPARE STRINGSJ BNE BADNAM ; WRONG LABEL DEC R3 ; CHECK LIMIT' BLT BADNAM ; OVER 12 CHARS IS NO GOOD SOB R2,50$M/ TST R3 ; SEE IF STRING WAS LESS THAN 12 CHARSO BEQ 70$/60$: TSTB (R0) ; CHECK FOR END OF VOLUME LABELN BNE BADNAM ; NO MATCHM!; SET UP NAME BLOCK FOR MFD ENTRY ,70$: MOV #STRING,R2 ; POINT TO STRING BUFFER MOV $UUIC,R3 ; GET UICV4 MOV #3,R4 ; REQUEST NO PUNCTUATION, LEADING ZEROES$ CALL .PPASC ; CONVERT UIC TO ASCII. MOV #$FNB+N.FNAM,R5 ; POINT TO FILE NAME AREA' MOV #STRING,R0 ; POINT TO ASCII STRING CALL $CAT5 ; CONVERT TO RAD-50 MOV R1,(R5)+ ; PUT IN NAME " CALL $CAT5 ; GET 2ND RAD-50 WORD MOV R1,(R5)+H5; COMPUTE NUMBER OF BLOCKS TO ALLOCATE FOR DIRECTORY. 1 MOV $UALL,R1 ; GET NUMBER OF ENTRIES TO ALLOCATEP* ASR R1 ; DIVIDE BY 32. ENTRIES PER BLOCK ASR R1O ASR R1R ASR R1R ASR R1U INC R1 ; ROUND UPV+ MOV R1,$UDSIZ ; SET UP SIZE IN CREATE CALLO" QIO CREATE ; AND CREATE THE FILE BCS NCREAT#= MOV IOSTAT+2,RECATT+F.HIBK+2 ; ALSO SET UP RECORD ATTRIBUTESN QIO ENTER ; ENTER IN MFD BCS 80$ ; ENTER FAILUREM# QIO WATT ; SET UP FILE ATTRIBUTEST BCS 90$ EXIT$S ; THAT'S ALL, FOLKS!"; FAILED TO ENTER DIRECTORY IN MFD%80$: MOVB IOSTAT,R5 ; SAVE I/O STATUS  QIO DELET ; DELETE THE FILE( CMPB R5,#IE.DUP ; WAS NAME A DUPLICATE? BEQ DUPLIC ; YES BR NENTER ; SOMETHING ELSE; FAILED TO WRITE ATTRIBUTES"90$: QIO REMOVE ; REMOVE FROM MFD QIO DELET ; DELETE THE FILEN BR WATF I.SBTTL ERROR EXITS=; BRANCHES TO THE ERROR EXITS BUMP UP AN ERROR INDEX WHICH IS>; USED TO LOCATE THE APPROPRIATE ERROR MESSAGE. THE MESSAGE IS; OUTPUT TO "CO". &VNMO: INC ERRNUM ; VOLUME NOT MOUNTED,WATF: INC ERRNUM ; WRITE ATTRIBUTES FAILURE&NCREAT: INC ERRNUM ; FAILED TO CREATE,NENTER: INC ERRNUM ; FAILED TO ENTER IN MFD)DUPLIC: INC ERRNUM ; DUPLICATE DIRECTORYN'BADNAM: INC ERRNUM ; WRONG VOLUME NAME.NRIDX: INC ERRNUM ; FAILED TO READ INDEX FILE+NDDEV: INC ERRNUM ; NOT A DIRECTORY DEVICER%BADDEV: INC ERRNUM ; BAD DEVICE NAME .SYNER::"SYNERR: INC ERRNUM ; SYNTAX ERROR#CMLERR: ; COMMAND LINE I/O ERRORH MOV ERRNUM,R0 ; GET ERROR INDEX ASL R0 + MOV ERRMSG(R0),R0 ; GET ERROR MESSAGE ADDRR MOV R0,R1*10$: TSTB (R1)+ ; LOOK FOR THE TERMINATOR BEQ 20$ BR 10$E)20$: SUB R0,R1 ; COMPUTE CHARACTER COUNT- QIO$S #IO.WVB,#COLUN,#COEFN,,,,>M BCS 30$" WTSE$S #COEFN ; WAIT FOR MESSAGE030$: QIO DEACC1 ; CLEAN OUT LUN JUST TO BE SURE EXIT$SN D.SBTTL QIO CALL ROUTINE ;+;M; CALL: JSR R5,XQIO ; .WORD DPBE ; (RETURN); ;-XQIO: DIR$ (R5)+ ; DO ITD$ BCS 1$ ; CHECK FOR DIRECTIVE ERROR .IF DF R$$11M& WTSE$S #UFDEFN ; WAIT FOR COMPLETION .ENDC# TSTB IOSTAT ; CHECK FOR I/O ERROR  BGT 1$E SEC ; SET CARRY ON ERROR 1$: RTS R5 .END $UFD ER COUNT- QIO$S #IO.WVB,#COLUN,#COEFN,,,,>M BCS 30$" WTSE$S #COEFN ; WAIT FOR MESSAGE030$: QIO DEACC1 ; CLEAN OUT LUN JUST TO BE SUREQQy:fkQRR:PKkQSSw0akQTT:p kQUUK~kQVV[R SkQWWs0akQXXF 0akQYY:d0akQZZ0akQ[[t: &kQ\\:rkQ]]Ry0akQ^^:0akQ__Q0akQ``:fkQaa&kQbb4kQccy:e4kQdd'pkQee'kQffSrkQggy:rkQhhsw0akQiiLq0akQjjv@kQkk{SkQllLykQmm:(kQnn:2kQoo[0akQppvkQqq:`'kQrrtPkQss,PkQttQ.ykQuut: zkQvv""0akQww'0akQxx`ekQyy,ZkQzz-LkQ{{S0akQ||y:,kQ}}y: kQ~~y: kQ~WkQy:8XkQ""?TkQ0akQ:8,kQE`kQVN0akQ$]kQQ,`kQ7V0akQvwkQCykQ:kQs0akQQ0akQv zkQ`kQskQ4kQ4"gkQ4:dkQKskQfHkQ.`kQzP}kQHkQ:` kQK :kQK0kQ"wkQt: qkQt:kQu~0akQwkQ;}0akQ}kQl 0akQIq0akQE`0akQf0akQ40akQ.YkQ.xxkQOM0akQp0akQ.SBTTL STATE TABLE FOR PARSERT ISTATE .UFDST,.UFDKTD; READ OVER COMMAND NAME .GLOBL .PSTRT STATE .PSTRTR TRAN $STRNG; READ DEVICE AND UNIT NUMBERF STATE TRAN $ANY,,SETDV1 STATE TRAN $ANY,,SETDV2 STATE TRAN $NUMBR,DEV1,SETUNT TRAN $LAMDA STATE DEV1J TRAN ':; READ VOLUME LABELA STATE TRAN $STRNG,,SETLAB ; READ UIC STATE TRAN '[ STATE TRAN $NUMBR,,SETGN  STATE TRAN <',> STATE TRAN $NUMBR,,SETPNO STATE TRAN ']"; SCAN FOR OPTIONS AND END OF LINE STATE OPTS  TRAN $END,$EXIT TRAN '/ STATE TRAN "ALLOC",ALCT TRAN "PRO",PROR; SET ALLOCATION STATE ALC TRAN '= STATE TRAN $NUMBR,OPTS,SETALC ; PROTECTION STATE PRO TRAN '= STATE TRAN '[,,IGROUP STATE SPRO TRAN '],OPTS,ENDGRP TRAN <',>,SPRO,NXGRPA TRAN 'R,SPRO,SETRPR TRAN 'W,SPRO,SETWPU TRAN 'E,SPRO,SETEP[ TRAN 'D,SPRO,SETDPM STATE 2.SBTTL ACTION ROUTINES FOR THE COMMAND LINE PARSER .PSECT CODE; DEVICE NAME CHAR 1SETDV1: MOVB .PCHAR,$UDEVT RETURN ; DEVICE NAME CHAR 2SETDV2: MOVB .PCHAR,$UDEV+1A MOV $UDEV,$FNB+N.DVNM RETURN ; UNIT NUMBERASETUNT: MOV .PNUMB,$UUNITO MOV $UUNIT,$FNB+N.UNITN RETURNE; VOLUME LABELSETLAB: MOV .PSTCN,$UVNMLS MOV .PSTPT,$UVNAM RETURNG; PPN - GROUP NUMBERSETGN: MOVB .PNUMB,$UUIC+1, TSTB .PNUMB+1 ; CHECK IF NUMBER IS IN RANGE% BNE SYNERR ; GREATER THAN 377 - OUTT RETURNN; PPN - PROGRAMMER NUMBERRSETPN: MOVB .PNUMB,$UUIC, TSTB .PNUMB+1 ; CHECK IF NUMBER IS IN RANGE% BNE SYNERR ; GREATER THAN 377 - OUT2 RETURNC; NUMBER OF ENTRIES TO ALLOCATEMSETALC: MOV .PNUMB,$UALL RETURNT; SET PERMISSIONS ; INITIALIZEIGROUP: MOV #4,GRCNT#; MOVE TO NEXT PERMISSIONS CATEGORYVNXGRP: SEC ; FORCE ONEST ROR $UPRO! ASR $UPRO ; SHIFT TO NEXT GROUPU ASR $UPRO ASR $UPRO DEC GRCNT ; COUNT GROUPS# BLT SYNERR ; TOO MANY IS AN ERROR  RETURNR; SET READ PERMITGSETRP: BIC #FP.RDV*10000,$UPRO RETURN; SET WRITE PERMITSETWP: BIC #FP.WRV*10000,$UPRO RETURNT; SET EXTEND PERMITTSETEP: BIC #FP.EXT*10000,$UPRO RETURN; SET DELETE PERMITLSETDP: BIC #FP.DEL*10000,$UPRO RETURNI; END OF PROTECTION SPEC*ENDGRP: TST GRCNT ; CHECK THE GROUP COUNT BEQ 10$ JMP SYNERR ; MUST HAVE 4=10$: MOV (PC)+,@(PC)+ ; ENABLE PROTECTION ON WRITE ATTRIBUTESG .BYTE 2,2 .WORD $PRFLGS RETURNT3; TO HERE FOR ACTION ROUTINE DETECTED SYNTAX ERRORSSYNERR: JMP .SYNER .ENDT 1 .TITLE UFDPAR - TABLE DRIVEN FINITE STATE PARSER.IDENT "X0103".SBTTL TITLE PAGE;A; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.A; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.;A; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.;@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.;R@; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E!; ANDREW C. GOLDSTEIN 4 JUN 1974  G.SBTTL MACRO DEFINITIONS .MCALL CALL,RETURNI; INTERNAL MACROSG.MACRO PUSH LIST .IRP RX,M MOV RX,-(SP)M .ENDM .ENDM PUSH.MACRO POP LISTD .IRP RX,I MOV (SP)+,RXH .ENDM .ENDM POPE%; MACRO TO DO SOB'S ON SMALL MACHINESD .IF NDF R$$EISS.MACRO SOB RX,LABELT DEC RXI BNE LABEL .ENDM SOB .ENDC; RANDOM CHARACTERSTTAB= 11 CR= 15AM= 33SPA= 40F.SBTTL IMPURE DATA<; ITEMS OF INTEREST TO ACTION ROUTINES AND THE OUTSIDE WORLD ; IN GENERAL.G2.PSTCN::.BLKW 1 ; CHARACTER COUNT OF FOUND STRING*.PSTPT::.BLKW 1 ; POINTER TO FOUND STRING(.PNUMB::.BLKW 1 ; VALUE OF FOUND NUMBER".PCHAR::.BLKW 1 ; FOUND CHARACTER T.SBTTL MAIN ROUTINE BODY;+;O; *** - .TPARS; ; ENTRY: CALL .TPARS; ; INPUTS:R;I5; R1 = 0 IGNORE ALL SPACES BETWEEN SYNTACTIC ELEMENTSO/; >< 0 TREAT SPACES AS SIGNIFICANT CHARACTERSR; R2 = POINTER TO KEYWORD TABLEL; R3 = LENGTH OF COMMAND STRINGS ; R4 = ADDRESS OF COMMAND STRING; R5 = INITIAL STATE POINTER;N ; OUTPUTS:;A; C = 0 SUCCESSFUL PARSE#; C = 1 SYNTAX OR STATE TABLE ERRORN'; R3 = NUMBER OF CHARACTERS NOT SCANNEDO2; R4 = POINTER TO UNSCANNED PART OF COMMAND STRING;T$; ALL OTHER REGISTERS ARE PRESERVED.;T:; .TPARS PARSES THE COMMAND STRING ACCORDING TO THE FINITE;; STATE MACHINE REPRESENTED IN THE STATE AND KEYWORD TABLEST;; SUPPLIED BY THE CALLER. USER SUPPLIED ACTION ROUTINES ARE ; CALLED AS SPECIFIED.;M;-.TPARS::$ PUSH ; SAVE REGISTERS%; ENTER THE STATE SPECIFIED IN R5 AND%; EVALUATE POSSIBLE STATE TRANSITIONSX(TSTAT: CLR .PSTCN ; KILL ANY OLD STRING# TST (SP) ; CHECK SPACE FLUSH FLAGT BNE 10$) CALL GETSP ; EAT SPACES IF FLAG IS ZEROE"10$: MOVB (R5)+,R0 ; GET TYPE BYTE- BEQ DOCHAR ; $ANY = 0 - MATCH ANY CHARACTERI/ BGT TSCHAR ; BIT 7 = 0 - MATCH SPECIFIED CHARK CMPB R0,#300' BLT DOKEY ; 200 - 277 - MATCH KEYWORDC/ CMPB R0,#MAXTYP ; CHECK TYPE CODE FOR LEGALITY- BGT SYNERR ; TOO HIGH - OUT,* BIC #^C77,R0 ; RETAIN ONLY THE TYPE INDEX ADD R0,PC ; AND DISPATCH ON IT( BR DOLAMB ; $LAMDA = 300 - MATCH EMPTY) BR DONUMB ; $NUMBR = 302 - MATCH NUMBERE- BR DOSTRG ; $STRNG = 304 - MATCH ANY STRINGE4 BR DOBLNK ; $BLANK = 306 - MATCH ANY SET OF BLANKS2 BR DOSUBR ; $SUBXP = 310 - MATCH A SUBEXPRESSION0 BR DOENDS ; $END = 312 - MATCH END OF STRING MAXTYP = 3120; CHECK FOR END OF STRING "DOENDS: TST R3 ; CHECK CHAR COUNT BEQ DOTRAN ; YES8; TYPE MATCH FAILED - TRY NEXT ENTRY IN TRANSITION TABLE)NXTRAN: ADD .PSTCN,R3 ; RETURN ANY STRINGP$ SUB .PSTCN,R4 ; TO THE COMMAND LINE MOVB (R5)+,R0 ; GET FLAGS BYTEM2 BLT SYNERR ; THIS WAS LAST TRANSITION - YOU LOSE( MOV #3,R1 ; COUNT OF FLAG BITS TO TEST20$: ROR R0 ; CHECK FLAG BITS BCC 30$ TST (R5)+ ; SKIP POINTER WORDX30$: SOB R1,20$ ; COUNT BITS= BR TSTAT ; TRY NEXT TRANSITION9; OUT OF TRANSITION TABLE ENTRIES, OR SOME OTHER ANOMALY, .; LIKE A BAD TYPE CODE. ALL ARE SYNTAX ERRORS.SYNERR: SEC ; SAY SO BR EXIT ; AND QUIT; TEST FOR SPECIFIED CHARACTER4TSCHAR: CMPB R0,(R4) ; CHECK CHAR IN COMMAND STRING2 BNE NXTRAN ; IF NO MATCH, TRY ANOTHER TRANSITION*; GOBBLE A CHARACTER AND DO THE TRANSITION)DOCHAR: TST ; $IKEY - KEYWORD INDICATOR FLAG WORD;N;-;O; CLEAR OUT PARAMETER AREA;D*$IPREP::MOV #$IUIC,R1 ; POINT TO PARM AREA MOV #$INILN,R2 ; SET UP COUNT 10$: CLR (R1)+ ; ZERO WORDI DEC R2 ; DONEL BNE 10$ ; NO, LOOP CLR ERRNUM ; ZERO ERROR NUMBER; ; GET COMMAND LINE; % DIR$ #INIGCL ; GET MCR COMMAND LINEV# BCS 32$ ; ERROR, COULDN'T READ IT " MOV #BUF,R0 ; GET BUFFER ADDRESS'20$: MOVB (R0)+,R2 ; GET NEXT CHARACTER  CMPB R2,#SPA ; A SPACE BEQ 40$ ; YESA* CMPB R3,#CR ; NO, CARRIAGE RETURN (EOL?) BEQ 30$ ; YESN CMPB R3,#ESC ; NO, ESCAPE?" BNE 20$ ; NO, TRY NEXT CHARACTER30$: JMP IPRER2 ;32$: JMP IPRER1 ;34$: JMP IPRER3 ;;(%; PARSE DEVICE ID AND GET UCB ADDRESSB;1 .IF DF R$$11M .IFTR)40$: MOV #WORK,R3 ; SET WORK AREA ADDRESS  CALL $FDUCB ; GET DEVICE UCB! BCC 50$ ; GOOD GOT A DEVICE UCB, TST R3 ; SYNTAX ERROR# BEQ 30$ ; YESF# BR 34$ ; NO, DEVICE NOT IN SYSTEMN#50$: MOV R1,$IDEV ; SAVE DEVICE UCBA .IFFQ .ENDC;A; GET VOLUME NAME IF ANY;E0 MOV #12.,R4 ; SET MAX COUNT OF NAME CHARACTERS( MOV #$IVNAM,R3 ; POINT TO AREA FOR NAME%80$: CALL TERMN ; GET NEXT NON-BLANKR BCS IPREX ; EXIT IF EOL CMPB R2,#'/ ; IS KEYWORD NEXT? BEQ IDFLT ; YESD) DEC R4 ; NO, SPACE FOR MORE CHARACTERS?O BMI 30$ ; NO, SYNTAX ERROR* MOVB R2,(R3)+ ; YES, STORE NEXT CHARACTER TST R1 ; IMBEDDED BLANKS?  BNE 30$ ; YES, SYNTAX ERROR4 BR 80$ ; NO, LOOPN;S; SET DEFAULTS FOR PARAMETERSD;C*IDFLT: MOV #$IUIC,R3 ; POINT TO PARAMETERS# MOV #DFUIC,(R3)+ ; SET DEFAULT UIC # MOV #DFCHA,(R3)+ ; CHARACTERISTICSM% MOV #DFPRO,(R3)+ ; VOLUME PROTECTION # MOV #DFFPR,(R3)+ ; FILE PROTECTIONR" MOV #DFEXT,(R3)+ ; FILE EXTENSION MOV #DFWIN,(R3)+ ; WINDOW SIZEE" MOV #DFCLF,(R3)+ ; CLUSTER FACTOR+ MOV #DFINF,(R3)+ ; INITIAL FILE ALLOCATIONV .IF DF R$$11M .IFT B MOV #5*400,$BTBLK-2 ; SET NUMBER OF RETRIEVAL POINTERS FOR SYSTEM MOV $IDEV,R3 ; GET UCB ADDRESSS# MOV U.DCB(R3),R3 ; GET DCB ADDRESS' MOV #DEVTAB,R5 ; POINT TO DEVICE TABLES-10$: CMP D.NAM(R3),(R5) ; IS THIS THE DEVICE?F BEQ 20$ ; YESC& ADD #10,R5 ; NO, POINT TO NEXT ENTRY TST (R5) ; END OF TABLE? BNE 10$ ; NO, TRY THIS ONE( JMP IPRER6 ; YES, NOT INIT-ABLE DEVICE; ; SET HIGH BLOCKS PER VOLUME; 020$: MOV (R5),$IMXF ; SET MAXIMUM FILES PER UNIT/ MOV #$IDVTP,R4 ; POINT TO CHARACTERISTICS AREA,! CMP (R5)+,(R5)+ ; SKIP OVER NAMEP/ MOV (R5)+,(R4)+ ; SET MAXIMUM FILES PER VOLUMES< MOV (R5),(R4)+ ; SET HIGH NUMBER OF LOGICAL BLOCKS PER UNIT- MOV (R5)+,2(R4) ; SET HIGH BLOCKS PER VOLUME ; MOV (R5),(R4)+ ; SET LOW NUMBER OF LOGICAL BLOCKS PER UNITI= MOV (R5),2(R4) ; SET LOW NUMBER OF LOGICAL BLOCKS PER VOLUMER0 CMP D.NAM(R3),#"DP ; IS THIS AN RP TYPE DEVICE? BNE 30$ ; NO$ MOV $IDEV,R3 ; YES, GET UCB ADDRESS' BIT #U2.P04,U.CW2(R3) ; IS IT AN RP04?V BEQ 50$ ; NO BR 40$ ; YES430$: CMP D.NAM(R3),#"DS ; IS THI SAN RS TYP EDEVICE? BNE 50$ ; NO$ MOV $IDEV,R3 ; YES, GET UCB ADDRESS' BIT #U2.S04,U.CW2(R3) ; IS IT AN RS04?K BEQ 50$ ; NO;5S; DEVICE IS DOUBLE DENSITY, DOUBLE MAX FILES AND BLOCKS PER UNIT AND VOLUME BLOCKSL;S#40$: ASL $IDVTP ; DOUBLE MAX FILES  ASL $IDVTP+4 ; BLOCKS PER ROL $IDVTP+2 ; UNIT ASL $IDVTP+10 ; BLOCKS PERD ROL $IDVTP+6 ; VOLUME* ASL $IMXF ; DOUBLE DEFAULT MAXIMUM FILES&50$: MOV $IDVTP+6,$INDXF ; SET DEFAULT- MOV $IDVTP+10,$INDXF+2 ; INDEX FILE LOCATION# ASR $INDXF ; TO MIDDLE ROR $INDXF+2 ; OF VOLUMEV BR KEY ; .IFFUC MOV #6*400,$BTBLK-2 ; SET NUMBER OF SYSTEM FILE RETRIEVAL POINTERS .ENDC E .SBTTL PROCESS KEYWORDE'KEYWD: CALL TERMN ; GET NEXT NON-BLANKB BCS IPREX ; EXIT ON EOL CMPB #'/,R2 ; KEYWORD COMMING? BNE KYSYN ; NO, SYNTAX ERROR!KEY: CLR R4 ; ZERO KEYWORD INDEX9 MOV #1,R5 ; SET KEYWORD INDICATOR FLAG TO FIRST KEYWORDM1 MOV #KEYTAB,R1 ; POINT TO FIRST KEYWORD IN TABLEV)10$: CALL .KEYWD ; TEST FOR THIS KEYWORD% BCC 30$ ; IT MATCHES, GO PROCESS IT "20$: TSTB (R1)+ ; END OF KEYWORD?# BNE 20$ ; NO, LOOP TILL ITS FOUNDS% TST (R4)+ ; INCREMENT KEYWORD INDEX- ASL R5 ; SHIFT FLAG TO BIT FOR NEXT KEYWORDM" TSTB (R1) ; END OF KEYWORD TABLE BNE 10$ ; NO, LOOP# JMP IPRER5 ; YES, INVALID KEYWORDS&30$: JMP @KEYPRO(R4) ; PROCESS KEYWORD!KYSYN: JMP IPRER2 ; SYNTAX ERROREIPREX: .IF DF R$$11M .IFT ) CALL $SWSTK,10$ ; SWITCH TO SYSTEM STATEK' MOV $HEADR,R0 ; GET OUR HEADER ADDRESST9 MOV $IDEV,H.LUN+<*4>(R0) ; ASSIGN LUN2 TO DEVICE510$: RETURN ; RETURN TO USER STATE AND THEN TO ROOTP .IFFT .ENDC* RETURN ; RETURN TO INITVOL ROOT SEGMENT R;;; USER ID CODE;F0INIUIC: EQTST ; TEST FOR EQUALS, GET NEXT CHAR CMPB R2,#'[ ; BRACKET BNE INISYN ; NO, SYNTAX ERRORR CALL $GTNUM ; GET GROUP CODE MOVB R1,$IUIC+1 ; STORE IT  BEQ IUICER ; ERROR IF ZERO CALL TERM ; GET NEXT NON-BLANK" BCS INISYN ; EOL IS SYNTAX ERROR CMPB R2,#', ; COMMA? BNE INISYN ; NO, SYNTAX ERRORL# CALL $GTNUM ; GET PROGRAMMER CODE MOVB R1,$IUIC ; STORE IT  BEQ IUICER ; ERROR IF ZERO CALL TERM ; GET NEXT NON-BLANK CMPB R2,#'] ; BRACKET? BEQ KEYWD ; YES, GOOD UICN BR INISYN ; SYNTAX ERROR!IUICER: JMP IPRER5 ; INVALID UIC ;C; CHARACTERISTICS WORD;N0INICHA: EQTST ; TEST FOR EQUALS, GET NEXT CHAR CMPB R2,#'[ ; BRACKET? BNE INISYN ; NO, SYNTAX ERROR &CHA1: CALL TERMN ; GET NEXT NON-BLANK" BCS INISYN ; EOL IS SYNTAX ERRORCHA2: CMPB R2,#', ; COMMA?, BEQ CHA1 ; YES CLR R4 ; NO, ZERO INDEXR. DEC R0 ; POINT TO FIRST CHARACTER OF KEYWORD3 MOV #CHATAB,R1 ; POINT TO CHARACTERISTICS KEYWORDSC#10$: CALL .KEYWD