! "W N> |x2ph dXT Vg 7:20 0 *  P -  b e*ȋ5 5&9ȋ5@  (&e  (: 7 xzr-ln  P\ eP5Ћ 4R`ȋ  `e `R7 ! "W N> |x2ph dXT Vg 7:20 0 *  P -  b e*ȋ5 5&9ȋ5@  (&e  (: 7 xzr-ln  P\ eP5Ћ 4R`ȋ  `e `R7 J@    x d P55v0 -  f ~ / \Se~&  E& ~ w , bP DV D|-  |- b 5 @ww D  & & e 5 5 5 5@ _ xJ  fe& & e &  & eC-N A Am@ e?@ 5u@ fe eN   & e C->& j & e     @@m55  &  & e 5 u N wNY D  . w `D4 V4 XAe r mNmP@ 4Zt\`eb4^ l ebA rWt`Ct  e &e %ww D ̋3r D 8 ̥/ˋ ˥/ N&  5Nf  K} D N  ̋@wHw 8D e  D W- Ct`55A@w 5   eA@v5u@-A- uu   ff e @t`55  ff %@t5,#5,#%A@mNmP@ 4Zt\@t e4^` l @tp#p#@t e5@ &A@vCEt@m55  ff_w bD #eE%@&  eu D w5 5 ; % 'ffeu & emNmP@ 4Zt\eb4^` l eb5 ef  e@ w pDC ̢ w^ԋӋw @  D0 #AWpbDe#̵tVtX ff remNmP@ 4Zt\4 ` ww  % b _x _t#mAWpbDe#̵c^ `i &X&V e4Zt\̵&\&Z& emNmP@ 4Zt\eb4^` l ̵0 &X&V deuA mVmX@ 4  t X@m4`t` `w5 Cmeb `eXt V”E^w   5 BeN h wl %@w L  % @0D = @ ȥ @,) #AWpbCe#˵˵˵s`s^ l e\s ZwA lVlX@ 3  s X5D Ne h=  @w T %D@   @)& #AWpbCe#˵˵s`s^ e\s Zww  5 AWpb1# %7 5 AWpb#  % > AWpbCe#D̥( ̥̋( D _ e# f  (@ r3e3L L%L3ԋ Gԥ, 3NsP̥) ̋@ 3 `3 V3 X e& ` 5 f  3 V3 X3 `@ U @ew\ w L  # AWpbe#uɵw& N = w  > w w N D w w N D w D&t %w w D&t %w w D&t  wt w d D&t  wX w H wP w @ D L55Z5\.E5Z5\5N5P   ff N eC fe e5mN5mPu 5@ߕ ff $ eu ff euA r5A ru_@t@m^` p tU%U8%U055@fff De w `w D &  P`&  5  &   w w x D&  wp w ` D L5 E(% 0:E :^$` &` "B tU%U8%U0% &U + B] 5 5*5@ # ,( D% B% , Dwv &   . D&m`w < :E5(E5 (_(_: w w 5 5 *ww D Be N %%%d %u%o%x%o%x & %#%s @  %D   %e%c ewBw 2 - A@  5uf ff eu5v Nff %f ff $eAFN ww D` 5~  0  0%     j wZw JX 5R L E%   w&w D E%A%ZD-8\4 %a%ze* . #0 @2Ԑ ! ' ( ) ^ { }|~`   wv D-D w ND 5Z5\5L ff eu ff jeu@t AWt@P@] ^` tU%UU5 ffX Dew`w vD &\&Z eu &\&Z euA r 5A r uLt@t@]_^` &tU5%UU_]5 fff De w`w D&  wxw hD&  P 4 `&   w>w .D L5 tPWt@PU`` T^V%U%U%  TU R &@]UR5R5@P P P D %  Dwv  &    DTm`w <5R5P5Pw,w D5 5  "̥9/&  ff &eee@ ee@ 5u     + -̥0 A@  wA@w CB  D-wlw \CB  D-wHw 8C  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJww rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFLBoot : Can't load %o files null path %s not found bn negative bn ovf %D bn void %D bn void %D not a directory zero length directory Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o    brphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o recovered by retry p0123456789ABCDEFdisk error: cyl=%d, sector=%d, er=%o, ds=%o disk error: cyl=%d track=%d sect=%d er=%o ds=%o tape error: er=%o recovered by retry Seek not from$|w::::::::,   B~  &f w &$ Ne  fe < 5 N B5N Z  wv6w `D4 V4 XAe r mNmP@ 4Zt\`eb4^ F ebA rWt`Ct  e &e %ww D ̋30  8 ̥/ˋ ˥/ N&  5Nf  K;  N  ̋@wHw 8D e I  W- Ct`55A@w 5   eA@v5u@-A- uu   ffV e @t`55  ffa %@t5,"5,"%A@mNmP@ 4Zt\@t e4^` F @tp"p"@t e5@ &A@vCEt@m55  ffm_w bD #yeE%@&  eu  w5 5 ; % 'ffeu & emNmP@ 4Zt\eb4^` F eb5 ef  e@ w pDC ̢ w^ԋӋw @  0 #AWpbDe"̵tVtX ff remNmP@ 4Zt\4 ` ww  % b _R _N#mAWpbDe"̵c^ `i &X&V e4Zt\̵&\&Z& emNmP@ 4Zt\eb4^` F ̵0 &X&V deuA mVmX@ 4  t X@m4`t` `w5 Cmeb `eXt V”E^w   5 BeN B wl %@w L  % @0D = @ ȥ @,) #AWpbCe"˵˵˵s`s^ F e\s ZwA lVlX@ 3  s X5D Ne B=  @w T %D@  Z @)& #AWpbCe"˵˵s`s^ f e\s Zww  5 AWpb1" %7 5 AWpb"  %  AWpbCe"D̥( ̥̋(  _ e\ f  (\@ r3e3L L%Lԋ ԥ, 3NsP̥) ̋@ 3 `3 V3 X #& : 5 f  3 V3 X3 `@ U @ew\ w L  # AWpbe"uɵw& N = w B  w w NN  w w NR  w D&t ^%w w D&t ^%w w D&t ` wt w d D&t b wX w H wP w @ D L55Z5\.E5Z5\5N5P   ff N eC fe e5mN5mPu 5@ߕ ff $ eu ff euA r5A ru_@t@m^` T tU%U8%U055@fff e w `w D & P`& 5  &  w w x D& wp w ` D L5 E(% 0:E :^$` &` "& tU%U8%U0% &U + B] 5 5*5@ # ,( % B%  wv &   &m`w < :E5(E5 (_(_: w w 5 5 *ww D Be N Z%%%d %u%o%x%o%x & %#%s @  Z%D   %e%c ZewBw 2 - ZA@  5uf ff eu5v Nff %f ff $eAN Zww D` 5~  0 z 0%  Z Z Z ZN wZw J< 56 0 E%   Zw&w D E%A%ZD-8\4 %a%ze* . #0 @2Ԑ ! ' ( ) ^ { }|~`   wv D-D Zw ND 5Z5\5L ff eu ff jeu@t AWt@P@] ^` tU%UU5 ff ew`w vD &\&Z eu &\&Z euA r 5A r uLt@t@]_^`  tU5%UU_]5 fffD e w`w D&  wxw hD&  P 4 `&   w>w .D L5 t4Wt@PU`` T^V%U%U%  TU R &@]UR5R5@P P Pv  %  wv  &    Tm`w <5R5P5Pw,w D5 5  "̥9/&  ff &eee@ ee@ 5u     + -̥0 A@  wA@w CB  D-wlw \CB  D-wHw 8C  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJww rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFFile: null path %s not found bn negative bn ovf %D bn void %D bn void %D not a directory zero length directory Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o     < rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o recovered by retry p0123456789ABCDEFdisk error: cyl=%d, sector=%d, er=%o, ds=%o disk error: cyl=%d track=%d sect=%d er=%o ds=%o tape error: er=%o recovered by retry Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o     < rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o recFile 1: 2 copies of magtape bootstrap (2 blocks total) The standalone bootstrap File 2: A file to console copy program File 3: This file File 4: The program mkfs File 5: The program restor File 6: A dump of rp0 File 7: A dump of rp3 Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o     < rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o rec&w:::::::*B   B~  &f Z w %l& B ^B/' Ne ^fe  7.) fe  7) ) 7 )5  )_5 5 5 ,%0%9 /'   v ff $eCe `@ `5u .@m5w,w, ff #e5u   % %5 @e7Z, ff f#ef&%' e1''%!@ X#7$@ X#7$%# #-####-#-##?' % +-+++e++L' e v7 0-7 .-7 ,-5 @0* % *ff  %e,eu w-4+7 4-  &,&,.  %- vw"w "T *@ ``'*& De 5 & & e'*& De 5P & & h'h*& De 5P@.5%0%7.fk' %X,5 @eCpt5P % u u ,,5 @@m0 %5 @t@a0 0 %5 5 5 @t@a0 0 %  @e5 5 5 @E , j @_ `b Nefefefe 2 eNefefe %w! V .  5 .'  *fef (%5 5`u`u Nefefefe 2 eN ( @Eu 4Eu@t@P5 @  Nefefefe'f e Nefefefe'@& e  >$''_Nefefefe.) e eu Ne w  5 @@mH@ @awv @@mȋ.@&' %b) w 8 5 5 5 5 /%0%9.'  ) w ff eCe `@ `5u @.5A@w  r5 *    :&5 @p. <5% % %  @0.wL'  v % w    ff Fef&! 4ef! (%5%ff' ~e vww    ff ef&|! 4efh! %5%ff' e vw\w L' & ^%Z%t5.5/  '  v *%$,ff %"%5 @t,,Btr/2. %2A@ww  ef&w `&%2$&$~"5 @t/.Btr,2, %2,ff  %7 p$l$t d$p/p.w<w ,u @t5` }5 @@m0 %5 @@mAAmp %%  Nf f f 2 eww  J5uNff  %5 @@m %= @t@m pH % ' T%= w6w &  w&w 45 @@m0 -5 5 'A 7ru@@m@ @aA p@@mAm 7ru - $$5 5 5 5 5 5 @t@a0 0 % 5 @t@a0 0 %5 & r%>"8"ee@ 5ueu  ff Jevb a5 NA@C Ca 5u7 !7w !3 0w-!+ff % % ( #5 @t@app ff % -H@ 5u Nefefe %ww  "AAe v@55 7 "#( "_.*ff %*@eEt5`@=@Ap@Ap @Ap @Br 2@ 64@:8@><@E % _ @ `_@4(   v*ff  %w5 % @t@mBtBmr2 }-% : Br<2:5 @t@m*(BtBmr @t@m0 (0 * %vN@<:f&  % fefe T$%w  ww D4 V4 XAe r mNmP@ 4Zt\`eb4^ ebA rWt`Ct  e &e x$%w<w ,D ̋3F(  8 ̥/ˋ ˥/ N&  5Nf  KQ(  N  ̋@ww D e _(  W- Ct`55A@wT 5   eA@v5u@-A- uu    ffl( e @t`55  ffw( %@t5,85,9%A@mNmP@ 4Zt\@t e04^` @tp9p8@t e05@ &A@vCEt@m55  ff(_w D #(eE%@&  eu(  wt5 5 ; % 'ffeu & emNmP@ 4Zt\eb4^` eb5 ef  e@ w DC ̢ wԋӋw  ( 0 #AWpbDe9̵tVtX ff emNmP@ 4Zt\4 ` w4w $ % b _ _#mAWpbDe9̵c^ `i &X&V Pe4Zt\̵&\&Z& emNmP@ 4Zt\eb4^` ̵0 &X&V euA mVmX@ 4  t X@m4`t` `w 5 Cmeb `eXt V”E^w   5 BeN  w %@w   % @0D = @ ȥ @,) #AWpbCe9˵˵˵s`s^ e\s ZwA lVlX@ 3  s X5D Ne =  @w  %D@   @)& #AWpbCe9˵˵s`s^ e\s Zw:w * 5 AWpb19 %7 l5 AWpb9  %( AWpbCe9D̥( ̥̋((  _$e(r) f  (r)@ r3e3L L%L)ԋ )ԥ, #3NsP̥)  ̋@ 3 `3 V3 X 9)&  5 f  3 V3 X3 `@ U @ew w  # AWpbe9uɵw N = w ^ X) w^ w N Nd)  wD w 4 Nh)  w D&t t)%w w D&t t)%w w D&t v) w w D&t x) w w w w D L55Z5\.E5Z5\5N5P   ff eC fe e5mN5mPu 5@ߕ ff eu ff B euA r5A ru_@t@m^`  tU%U8%U055@fff) e w@ `w * D &  P`&  5  &   w w D&  w w D L5 E(% 0:E :^$` &` " tU%U8%U0% &U + B] 5 5*5@ # ,() % B% * w &   * &m`w :E5(E5 (_(_: wp w ` 5 5 *wX w H D Be N %%%d %u%o%x%o%x & B%#%s @  %D   B%e%c eww  - A@  5uf ff eu5v Nff B%f ff eA*N ww D`@ 5~ . 0 " 0%      ww  5  E%   ww vD E%A%ZD-8\4 %a%ze* . #0 @2Ԑ ! ' ( ) ^ { }|~`   w D-D w D 5Z5\5L ff eu ff eu@t AWt@P@] ^` tU%UU5 ff,* ew`w D &\&Z Feu &\&Z euA r 5A r uLt@t@]_^` tU5%UU_]5 fffZ* e w`w D& F" ww D& F" P 4 `& F"  ww D L5 tWt@PU`` T^V%U%U%  TU R &@]UR5R5@P P P*  % * w  & F"  * Tm`w 5R5P5Pww |D  ̥9Wp @@`e     + -̥0  w0w D5 5  "̥9/&  ff &eee@ ee@ 5u     + -̥0 A@  wA@w CB  D-wlw \CB  D-wHw 8C  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJww rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFfile sys size: file system: %s: cannot open isize = %D d--777 0 0 $ m/n = %d %d %ld/%ld: bad ratio -bcd-u-g%c/%s: bad octal mode digit %s: cannot open ...%c/%s: bad mode %s: bad number EOF read error: %ld write error: %D out of free space indirect block full too many bad blocks ilist too small bad mode %o null path %s not found bn negative bn ovf %D bn void %D bn void %D not a directory zero length directory Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o ) ,,)4,,)& ,,)F" "!)rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o recovered by retry p0123456789ABCDEFdisk error: cyl=%d, sector=%d, er=%o, ds=%o disk error: cyl=%d track=%d sect=%d er=%o ds=%o tape error: er=%o recovered by retry Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o ) ,,)4,,)& ,,)F" "!)rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error&0w:::::::*   B~  &f f w 2% &N% r n%w"%w %8& . j .  7R-%.%@ R r_& Ne jfe  7-%$&&  <% (- `e+et7,* | &  d$* ` R$ '   * *  ' *  ,*  %6' 2, 4(- %w#*  %DO +/+ v AO@+ EBt@0/+  +/ / /+ j +-++͆(- %*  %/ _r*  C'  t+_j0'0+ f+&+X'  7 R+-++  +n'  _j^/* P~/*  7 +7 +/ /  t0 /0 / % j// $$% ++* e / /fe $%^/}@Ap@Ap@Ap@ f&@ @64f&@46@:8f&@8:@><f&@<>/) j _rw L!X@e*,P~w) D-@a>Ne Z ,W- ' 'Ne ' Ife  *Ae,P~7 )w f f fe Ne   W-  f f fe e  * *  % _Vw & X%D r t 0 o %7 * (oZ( 4%J('  r( t eo  % C  ( 4'  F%    7'% ''' Ne | vfe ` N ZfRt Jeo& %ww 0ww DCB~ww D~ww  %Wpu,֗Fu,ؗBWpeܗff %Wp1 ڗ  ff ef&& @ef& ,%%ff( Ve w>Wp ڗ w   |%v7 plWpu,֗u,ؗN fLWpeܗf %8Wp1 ڗf*Wp ڗWp@Wpp,ڗڗ %  ff ef&% @eWpeܗf% 4%%ff)( Ve N fWpeܗf %Wp1 ڗWp@pؗp֗ww  u= e ww D8 PE%@%G &e fe $$% 4t@a55     x&ff %  & ff f e 4 4 w*w feff `et@a55     f ff f eff % ff %ww %20"%*" t2-0-f&t@a %27 !Neff %!t !p2-p0-w*w  !_ !!t2-0-u5  8(   ~!&feff `ew\! t@af&t0-2- %2ff %A@wtw d  W-  .u5f&@t@mA@w.5   eA@v5u@-A- uu     @t@mu5 b ` nu5f& @t@mLfeff `eA@B vDEt@a55   5ut@appNeff %uu %_V w N Z@%k ,  ww @%k ,  ww l}- wjw T Doe~%I F(  w6w @p- w w N  f  ww !!/ Ze5uNff %e w ww e w ww  v@55 eu feff `e@f@ Et@ae& %w&w l ve@55 feff `e@@ Et@ae&f %Neff %ww <N Ze * w~w n wpw `D4 V4 XAe r mNmP@ 4Zt\`eb4^ ebA rWt`Ct  e &e $$%ww D ̋3^(  8 ̥/ˋ ˥/ N&  5Nf  Ki(  N  ̋@wHw 8D e w(  W- Ct`55A@w 5   eA@v5u@-A- uu   ff( e @t`55  ff( %@t5,5,%A@mNmP@ 4Zt\@t e4^` @tpp@t e5@ &A@vCEt@m55  ff(_w bD #(eE%@&  eu(  w5 5 ; % 'ffeu & emNmP@ 4Zt\eb4^` eb5 ef  e@ w pDC ̢ w^ԋӋw @ ( 0 #AWpbDe̵tVtX ff remNmP@ 4Zt\4 ` ww  % b _ _#mAWpbDe̵c^ `i &X&V e4Zt\̵&\&Z& emNmP@ 4Zt\eb4^` ̵0 &X&V deuA mVmX@ 4  t X@m4`t` `w5 Cmeb `eXt V”E^w   5 BeN  wl %@w L  % @0D = @ ȥ @,) #AWpbCe˵˵˵s`s^ e\s ZwA lVlX@ 3  s X5D Ne =  @w T %D@   @)& #AWpbCe˵˵s`s^ e\s Zww  5 AWpb1 %7 x5 AWpb  %( AWpbCeD̥( ̥̋()  _0e)) f  ()@ r3e3L L%L)ԋ 3)ԥ, d#3NsP̥)  ̋@ 3 `3 V3 X Q)&  5 f  3 V3 X3 `@ U @ew\ w L  # AWpbeuɵw& N = w p) w w N|)  w w N)  w D&t )%w w D&t )%w w D&t ) wt w d D&t ) wX w H wP w @ D L55Z5\.E5Z5\5N5P   ff N eC fe e5mN5mPu 5@ߕ ff $ eu ff euA r5A ru_@t@m^`  tU%U8%U055@fff) e w `w D &  P`&  5  &   w w x D&  wp w ` D L5 E(% 0:E :^$` &` " tU%U8%U0% &U + B] 5 5*5@ # ,() % B% * wv &   * &m`w < :E5(E5 (_(_: w w 5 5 *ww D Be N %%%d %u%o%x%o%x & N%#%s @  %D   N%e%c ewBw 2 - A@  5uf ff eu5v Nff N%f ff $eA2*N ww D`L 5~ : 0 . 0%      wZw J 5  E%   w&w D E%A%ZD-8\4 %a%ze* . #0 @2Ԑ ! ' ( ) ^ { }|~`   wv D-D w ND 5Z5\5L ff eu ff jeu@t AWt@P@] ^` tU%UU5 ffD* ew`w vD &\&Z eu &\&Z euA r 5A r uLt@t@]_^` tU5%UU_]5 fffr* e w`w D& R" wxw hD& R" P 4 `& R"  w>w .D L5 tWt@PU`` T^V%U%U%  TU R &@]UR5R5@P P P*  % * wv  & R"  * Tm`w <5R5P5Pw,w D5 5  "̥9/&  ff &eee@ ee@ 5u     + -̥0 A@   wA@w CB  D-wlw \CB  D-wHw 8C  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJww rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/dev/rmt1&6 L T tapeTape? Disk? Last chance before scribbling on %s. diskMissing volume record Tape is not volume %d Missing header block End of tape Unknown header type Resynced at inode %u %u: ilist too small Missing address (header) block Tape read error: inode %u Mount volume %d Cannot open tape! Not a dump tape.Try again Wrong tape. Try again disk write error %D read error %D Out of space Checksum error %o null path %s not found bn negative bn ovf %D bn void %D bn void %D not a directory zero length directory Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o ) !88)@88)2 88)R""") rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o recovered by retry p0123456789ABCDEFdisk error: cyl=%d, sector=%d, er=%o, ds=%o disk error: cyl=%d track=%d sect=%d er=%o ds=%o tape error: er=%o recovered by retry Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o ) !88)@88)2 88)R""") rphprktmhtdisk error: cyl=%d track=%d sect=%d cs(ckPgc@k a@ LckHg@ Lckv9A $GG ...fusrebinetchphtunixlibqdevhptmunix,rphtunix(rptmunixrkhtunixrktmunix&tmp=boot40rpunixl.outa.outcekhA h !yy e...dwriteccpbchmodachown`ls_whosh]ed\pwd[rmZcatYyaccXlexWmvVasUld^makeSccRkillQarPcmpObasenameNechoMyesLacKlintJcalIcbHcheckeqGchgrpFclriEcolDcommCcryptBcuAdate@dcheck?dd>deroff=df<du;dump:fgrep9file8grep7icheck6iostat5join4primes3ln2login1m40mail/mesg.mkdir-ncheck,newgrp+nice*nm)od(passwd'pr&ps%pstat$ptx#quot"random!nohup testwcnroffuniqttytsorttrtktimeteetcBtartailtabssumsttystripsplitspline sp sort sleep size sarevrestorsurmdirbcfactordiffdcdiff3eqngraphneqnratforprof;roffspelltbltpattrofftruemanadbstructarcvlookbibrefersedf77synctouchawkfalsepcclookegrepexprfindlorderplotbasunitsuucpuuxcalendart300t300st450tekvplotdumpdirvpruulogxsendxgetenroll/oshlearn12prep+ranlibc fk'A !@hp f...cqkA0 66 q...pmakefilejnullimemhkmemgttynrmt0swaprp3rrp0rrp3mt0rmt0nrmt0$consolefoorp11tty10ckpRAPy ! 7 7 ...libc.ac0c1c2cppas2~crt0.o}mcrt0.o|libln.a{libplot.azlibm.aylibt300.axlibt300s.awlibt4014.avlibt450.auf77pass1libfpsim.asfcrt0.orfmcrt0.ockj APP !a7a7 ((...mountmknodmkfsinitgettydmesgupdateumountwallacctonttyspasswdgroupcronrc%utmpmtabddatewtmpc&kHA0! &...lda00114atm1aatm2aatm3actm3actm3actm3aatm3aatm3bctm5actm5bctm3actm3catm2batm3bctm5cctm3bck{hhh ck5Rrr n6W7 n% w  Z Tw @w07w 7 <7@7WAw P7Ww D7Ww 87Ww ,7W w 7W w 7W .w`@?w7$d nt!B冋0WL~dwD@7"w w .77w 7w!B7|w&w 77w p7w T h7^Tf } 0 @  T7*@L> B"@e0} T >twOuch. f5 @&E@f& e@ B@~VV\ BAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAAAAAAAAAAAA BAckN2SVY\_behknqmm $ 0  6 >  670X f% w h  5 5% % %\%z_b%a_b 7%a_P%z_P%i*%f'%hv# %of X @5%a%zw>@_L%w%f%s%q%r%e%b%r%d%e%s%c%b%a%i%b%o%bx%d %i`_%a %uF_%l %e,_%q%u $ %Fwn9wd@ 7Z9%0%9%A@ !_~ "_ +Z -b . /_ <^ =  >_> U T7d %- *" + - / = ^=(_++ %_L--< =!  7%*_ %* ~7%/_J>74 0%;*/  p @5%"?  _Lw  7.@-@w@w x / / /E/ 5%5 F7-@7@787e-27 2F/7 7$:$0 &e5%  %*@  _ 5& #0 %@e ˆ_ ##1  #_ #_ #N:1  @ ) D@ ) 5@70u@ 5(@ (b 5%    A p *@ (  @ v_ xZ. _G1 &" E1<0&20 e $0  hhI1  7\7Z_J1& %_N1  _Q1&O1 e_T1& V1&& e_Z1&&&X1 e _ ^1&&&&  &\1& e_`1|v @ &" b1b &" /&f1J &" .d1j12 &" .h1l1_ p1&&n1r1_ v1&&t1_ x1_ |1&&z1_ 7|._~1_ 1_ &  1&&_ && e,.  1&&_ &1&& e -  1&&1& e _1_ 1-_1-_1-_1-_1-_1-_ _&_ \-_1&111111_ 111&1_ 1111 1&_ 1&1_ 1&1_ 1&1_ 1&1_  1&1& T &1& e_ 1&1&  &1& 1&1& &1 2&1& &12_ 2_ 2_ 2_ 2_  2_ &2_ ,2_ 22_ 82_ >2_ D2_ L2& > &J2_ P2& & &N2_ R2_ T2_ Y2&W2_ ]2&[2_ _2"+_b2_ d2_ i2&&&g2_<  n2&l2&_  t2&r2&&& | &p2& e_v2&_ x2z2_ |2~2_ 2_ 2&&2_ 2_ 2&&2_ 2_ 2&&2_ 2_ 2_ 2_  2_ ?6 2_*)_")?)  ? %[ e %a { % 2     _ t7Z)2N)2J) 7 0  _ d_ _ 7)_w ff ~%w w 3fef % . w w D@w  4 e`X4 && F%4 %  4 E w uDAB %u f& &c&k@K2SVY\_behknqmm e w 5 5  W- W00u5  .u2BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A2ҋ D~@B @  p5w*A  fff Fe w5  @ 0   ((Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& x%4 ;#%3  \T\T   & x%S  w@w DE%& x%  w w 2 e-ww D@  $   4 4 w6w &D  w$ r< wf X=@+ @ a f   %r=f X &  e   f   4  Հ rw LD& :     $&  w"w 2- w ef >@w  >vXU7>tXU7>vX>tX>Ae vBp>7 r>55 a  a!RE -8>%tX wd *>%$>e rt 7> h> `e =  h%==e U?== `e 7=tXU?= a7= ==?==U ew Df=E ww D5 @ r5N !wT5A vBB-  }ee@ !ۃ `!ւ `@ r `<w Nef   ww N tf %ww Ntf %wf@wf fw^wZ3wFf@U@f@A)w fw @e7;3wfw7; fwww3w f@www 3wfww3wvf*wfBJ f@wrwn3w6fwZmVR3wFwm@fw03ww" fAW @w  fX1X75 ew3 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & X f@wRwN3w77F@& BF3700H/K/N/Q/T/W/Z/]/`/c/f/j/n/r/v/ z/|/~/////////////////////////;; \b&XMLT+~G!)'q("*Z[YVWU,"+)'+(e*+)'()*]*""%,#cda`^#9 oI,$,JK,u## p+)'(*H} 2 >S,S2+)'(S*  2S -  >, S.:   O QRPO C?QRPs QRPO QRP01345678<=s 345678QRP+01)'(*345678/;@D01345678,<=345678345678345678EFAB345678345678EFAB345678345678N_+)'(*fghijklmnrtvwxyz+{|)'+(*)'(*,+)'(*+)'(*+)'(,*,,r,+,)'(*,2) l'l&%lllllllllWClllllll$l"lll jt\MlllllllllllllA:2/llllllll^ll ll4b a_] [U@ZT RC    { ~-(? _ ;+-*/%^=[((=(==~(((),[))}(=([====[[){]]),[))(;<>   ));=])]]]))=},rT efgpppOS\lmn()sw9< !"#ACEGIK&%^3Tefg:BFJ;DHLRPo124567 NhjT0q^Q[tx8MZ'UV_`abcdY]$=?ik*+,-./8>@ %u%WXv   V b   & L   $ 6 @ H P l  (26 <DNV^djpv|Nz "*BZdn&26 8@FPXjrDR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14abcdefghijklmnopqrstuvwxyz.string space exceededrcannot open input filebundle %d elements at %o bundling space exceededroutput(%o) []s%s teletypec[%s on line %d, %s]pc SLs.0SLs.rcannot open input filequnrecognizable argument /usr/lib/lib.b/bin/dcdc-/usr/bin/dcdc-state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d 0Qps.[]Ps:ls;:QQ0Q0QkKkiIioOofYc s.s. S+-*/%%^=><!=!>!< 0!=+- 0-*/%%^;ld1+sl1+dsl1-dsld1-s;d1+:;1+d:;d1-:;1-d:Kd1+kK1+dkKd1-kK1-dkId1+iI1+diId1-iI1-diOd1+oO1+doOd1-oO1-dolxlx . . .l.ldsldsd:;d:ZX?vLdkKdkdiIdidoOdoKIOlprogram too bigdoxlfze\g6cHslllLurDOXU(null)^V^V3;6X0c7k꼆;>ADGJMPDyy  2 0  6 >  67& % w % p!   eN    w w DNfe /fe X 5@e5Nefe Ne _Ne. / p!   @E%@NeE _u- u- ` p!  _ fe F 5Ne _fef d %%(  fe  fe Ne p! % .N _N  f  f   fe v  fe 7 fe v Ne Ne @a0Ne Ne @a0Ne Ne p! % fw  fe v  fe fe Ne @a0Ne w D Nfef "%@ w( w  uDAB %u f& & e w5 5  W- W00u5  .u!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AX!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E 8 z f 8  #̥-%0  E: E:  &E 8  z f 8  ww DuNfe& %4 ;#%h! 2"2"   & %S  w2@w DE%& %  w w `! e-|ww D@   4 4 4 wZf(( x@w < 48&U7&6&U78&6&Ae vB7 55 a  a!RE -%6& w %e rt 7  `e   %hde U?RR `e 7@6&U?4 a7&  ?U ew DE ww D5 4 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Dw :Nef >  w(w N tf %ww Ntf %ww DC ̠ԋww DCԋ Ԕww DCԋ w@w DCԔwxw hD  ԋw`w Pww "70w<f@w fwww"w fww"wf@ww"wfwm"wzwmtfwd"whwV fwJwF""wB fw0("w( f@ww,"w7F@& BFrmdir: arg count rmdir: %s non-existent rmdir: cannot stat ""rmdir: %s not a directory rmdir: cannot remove current directory rmdir: %s unreadable ...rmdir: %s not empty ...rmdir: cannot remove . or .. /...rmdir: %s: no permission rmdir: %s not removed do xfegcslL"ur&DOX8U(null)2$2$"!6B& c@kQ #&),/0 { {   0  6 >  67( % w 5  %@5 N z7j$ N   N$( , $ b5 *$f d $&  )  # # # 5' &0 B% 5  < f %?  wew t S J L 5  f    5Ne@&  uENe@&  N h (%%(Ԑ@ @ EN %  U  h uNe@&  N  % N 4 (wlw \ " f   0wBw 2  h X L 7 ww   4 7 ww D̥: ̋̋ww  T j X L 7@ F6( %7' 7'  7'  7'7 ~'d z' 7p' 7f' 7\'̥  ̋ *w*w DB  E  Ґ%  B- w@w D  & & e4  0ww  Vff %w~w nNfef %@ wR w > fef % w& w D@w 4 e+4 && L%4 %  4 E w JD   t 4 ww uDAB %u f& & e w5 5  W- W00u5  .ul BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   w w DuNfe& %4 ;#%   $$   & %S  w( @w  DE%& %  w w   4 e-*w w D@  p   4 4 wP w @ D  w>  r< wf p =@+ @ a f .  %f p &  e   f .  4  Հ rw f D&      p& . w< w ,  - w& ef >@w D  ̥9Wp @@`e     + -̥0  ww   !@m4+!@m42+ %  5 ++ %w5 3+2+ %w "  Wp0`@""p+N+Wp0`@:"p+f+ % %ww  Z!@m3~. %@5 @5u .. %  AWp0`AN+@N.A.@x3. %0 WpDt.Wt@`.Wt@`/Wt@`/ @`/@`/Wt@`"utE4.tE4. E4.E4. % ~.$A.@x3. %  .~. %  %_  Ĝ~..~.3. %  @`!H}. %@ww r  4./ %B %@  tE4./ % B./ >  4./ %B 4R"N. %0 B p/%Z%9.  t5Wp`AN.uWp`eN.fWp`^f.Wp`qf. % %  ./ %   Wp`A./BP %e.%9e%Zer/ % 4r/p/w$w  /U7/U7//Ae vB7 55 a  a!RE -H%/ w :%4e rt 7 n `e   n%e U? `e 7/U? a7 ?U ew DvE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf %ww Ntf %ww DCԋ w@w DCB ԋ  @wvf@wL fww$w,fw@e7&$wff@fwww$w f@www $wfww$wf@wnwj$wbfwVmRN$wBBwm<fw,$w w f@.w f@w fAW cKkԵ #&),/0 { {@w f/1/75 e6w$ 5w7L7H7D7@7<7874707,7(7$7 77777 777f&: & / f@w"w$w7F@& BF/bin/shrootUnknown id: %s Password:Sorry PS1=PS1=# suNo shell /dev/ttyr /etc/passwdrrdoxfetgNc`slLurDOXU(null)&&X!:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 1991)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                                     ;6/0cOk/TT (( * 0  6 >  67 % <w )  %% r4 t1 x._ ( " ( <eDe fwde   - R5 ̋xD ' % '  ' % '  & 7 u (  < & & 7|Nf@& %x ( <wP(w @( t & 70 d (  <@ R_Z r_Z t x%w'   ( <  (   (    ( < ~   ( <  @  AN ,5 v AS@B EBt@0 Ne/ ( tp.Pt0PNfD (%e %; ^  & (R (  _ J7  & 7   ( ~ R (    2 % 2 S f  "WtA.P v AS@t.P EBt@0t0P t0P      2 % ( t0P_t0P_  2  6 t0PUtp-.P(t.P ( t.PQ T%Q & 7 Q  ( Q %% e t0P &_ _f & 7^ N! (  <R2 ( %pQ (  J7ZRNS ( ~vE nT %  peet7  y ( < ~  (  <    (   L 2 % (& & %_ 2 %Ds f/ v As@ EBt@0.S  L.S .S .S  -͆ % 2 %S f_h 2  ( K_`$$ K ( 7 lK-   ( _`nS P~.S  7 K7 K.S .S  t0 S0 S % zSS $%:K4KL~ e .S Sfe $%nS}@Ap@Ap@Ap@ f&@ @64f&@46@:8f&@8:@><f&@<>.S  _hw   (  8S f3sDE%@CFWpR FWp F@J B B<^" Ve (  2 % 2 % 2   &ww X@e,P~w D-@a>Ne ( ,W- ' 'Ne  , (Ife 2 Ae,P~7 8w>f f fe Ne W-  f f fe e     2 % _$ w X%_8  t 0 %7 (r &%bL ( G t e % Oz t & &dg ( E T %  & & 7% x (Ne  fe ~ N ( ft e& j %w~w nwpw `DCB~wXw HD~wDw 4 @   % @  @ ȋ %ww D ^ % N %ww Fp*Q Few %F 7 E*Q ((%ww %E *Q~ &%7 EE*Q Ewfw VE ffL h&ewBw 2E *Q. ((%w&w  Wpq-  %  wWp@  f& %Ne fe  Nfe  @w  D̥/ K wˋ ˥/ b 7XK/Bw >DC ԢӋw0  %w  %Wpu,Hu,DWpeff j %Wp1   ff ef& h&ef ((%%ffd Ze <wxWp 껄 w Z  |%v7 plWpu,u,N fLWpef j %8Wp1 f*Wp Wp@Wpp, %  ff ef& h&eWpef &%%ff e <N fWpef j %Wp1 Wp@ppw@w 0 u= e ww D8 PE%@%G &e fe $% 4t@a55     xff %  & ff ve 4 4 wdw Tfeff pet@a55     f ff veff % ff %ww %2 % tf&t@a %27 Neff %t ppwdw T _ tu5 _ _d   < J&feff pew( t@af&t %2ff %A@ww   W-  u5f&@t@mA@wZ5   eA@v5u@-A- uu     cZk/TT@t@mu5 b ` `u5f& @t@mLfeff peA@B vDEt@a55   5ut@appNeff %uu %_tw N ( @%k J  ww @%k J  ww }- ww  Doe~%I  ( wbw L@p- wD w 0N   f 2 ww Nf ((%ww ww   h&eww ==S e5uNff %e=w =ww ~e=w =w|w lD  ee%wVw F< v@55 eu feff pe@f@ Et@ae& j %ww  ve@55 feff pe@@ Et@ae&f j %Neff %wtw dN ( e   wDw 4 ( <w.w Nfef r%@ w w C  f^E VT %  C- w@w \fef r% w w vBuNefef r% = Ne&  @w0w D@w "4 e4 && &%4 %  4 E w XuDAB %u f& & e w5 5  W- W00u5  .uBwF J@B _Z@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ALҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wR w B DuNfe& ((%4 ;#%\y $  "  & ((%S  wv @w ` DE%& ((%  w" w  T e- w w D@ j &  # 4 4 w f x@w D  ̥9Wp @@`e     + -̥0  w4 w N  !w w Ne '< f ( ef&@ 5uNe w/%J %K  t t5  N  5   %D-D-% eu Ne  w. w  DC%: B"e`m e rfw w Q@f& $ e5uQ@f& &e5u eeQu  ,< ff eR< ff eC r<R r< A@epe@ f& hewh F B" 5 $u  B" 5u F  B" 5`u`u D7 B"%n    0! 7 ¦,wXw HԔAA WpCe0ԔԔԔ BeWpCeFԔԔԔ& b" ed& b" ed& b" ed& b" @%d 20e@ ed& b" ww A r nw~mw hD % A r  r e0@ԕ A r e0@w.w  @U7|>U7r@p>hAe vBT7 V55 a  a!RE -%> w %e rt 7 & `e ֤  &%e U? `e 7>U? a7| tv?njU ew DJE ww D5 #@ r5N "!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef %  w w CB  D-ww CB  D-ww  Dԋ  r e0@  r X a %zlwp  f % %@w DN tf B&%w:w *Ntf B&%w w ww n7$wfwww((twL f@w6 fwZwV|wffw8w4w0w f@www wfwwwf@wwwzfwm޺wZwmޅfww8w fAW @wr fJ1J7f5 ep'wT 5w7L7H7D7@7<7874707,7(7$7 77777 777f&t' & J f BRfwfww( f@w~wzw7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/dev/rmt1rstXXXXXXF\dUsage: restor x file file..., restor r filesys, or restor t Bad key character %c restor: %s - cannot create directory temporary %s: cannot open tape Tape is not a dump tape Dump date: %sDumped from: %sTape is not a dump tape Tape is not volume 1 of the dump %s: not on the tape %s: inode %u Mount desired tape volume: Specify volume #: Volume numbers are positive numerics tape is not dump tape Wrong volume (%d) Can't find inode mask! end of tape extract file %u %u%s: cannot create file %s: cannot open Enter starting volume number: Last chance before scribbling on %s. Missing volume record Tape is not volume %d Missing header block End of tape Unknown header type Resynced at inode %u %u: ilist too small Can't find directory header! /Missing address (header) block Tape read error: inode %u Mount volume %d Cannot open tape! Not a dump tape.Try again Wrong tape. Try again /disk write error %ld read error %ld Out of space. Checksum error %o jdPo\x*f8egcs*l*LruPrvDTO`XU(null)M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec/!6r0# cikV sysy @ 6& 0  6 >  67 & % Nw f !% @& 6 7!@ v R% N %3! ! !E! 6! .  n 6!&E `  6!E? |  v l hn  ` !  e%w w ff %w w Nfef J%@ w w t D@wV  \4 e<&4 && ^ %4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .u BwF J@B _2@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A^ ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w VDCB &E ` z f `  #̥-%0  E: E:  &E `  z f `  ww DuNfe& %4 ;#%n  ^ 8"8" \  & %S  w@w DE%& %  wv w bf  e-ZwTw DD@ B  4 4 ww D  w r< wf =@+ @ a f @  %f  &   e   f @  4  Հ rw D&     & @ ww f - wef >@w  R&U7P&U7R&P&Ae vB7 55 a  a!RE -~%P& w  p%je rt 7T H `e 8  % e U?   `e 7P&U? a7 ?U ew `DE wRw BD5 @ r5N \!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww pN tf %wfw VNtf %wLf@w" fw0w,!wfwww!w f@www !wfww!wf@ww$!wpfwm*!wPwmfwx*!w.wj f@wZwV0!w7HF@& BFrrev: cannot open %s Bd(o4xfegcslLJu(rND,O8X`U(null):$:$!6\&cq km,$ux{~xyy @!j 0  6 >  67 % w %V@-Pe @@mȋB@@m0 F x@ xB  dB rB TB PB NB JB HB FB FB 6B@@me7? $B B B B  % @ x A w eN x A A_65 AWpKi5 AWpAm@?K % AWp%"KN%p>@ $ 7b>AWpV>psl"K"KAWpq$Kf:>Wp$K$KAWpq(Kf>Wp(K(KAWpq,Kf=Wp,K,KAWp1K % 55QAWpKH5 AWpAmCpCmKK % AWpCp"K"KAWpq$KCps$KAWpq(KCps(KAWpq,KCps,K % "@G  @@ l 5C eN @@ l 5@  NfK eN    ?   p? t?2  fK e7&7&7&7& e @ 5 u-_AWpK0AWpq"KuAWpq,KfAWpq(KfAWpq$Kf5& e AWpeKN@  w  t C6Nez& @Cez˥ ˋ ˥: Nez@  t0CpC&t&C@ e %ww 5&@ | e =7̣5AA  C5w& A > e 7&5 &5& e =7jwj&5uaF  l=7F&5&5& Ze70&5 7 w &55&5& *e ,=5 uu&A e ww  < 5 uWpC&A5 aF&A T e <5 5'A#A  C5 5&(A  e ww z( <  Z0A   t<w>EAf l 5_NGA  _E % %̕? 6̕*N j f&f d ee@ 5u ;4Ne 5pC&fEVA e _?De@e!De@e!̋ CEt C 5pC&tpCVpC@@&7&7 Ne $ 5Wp "K< f ~ f& e5u 5&AWp$K$K 5&77N j 5u 5&AWp(K(K 5&7l7fN j 5u 5&AWp,K,K 5&7.7(N fe e%_HN ww @Ap, Nf @ A@ w 9@ Aw N Aq 5N Aq 55u  9 9wt5u w RN 5N 55u  69 *9w5u w w@0qw wAfA l 5GZNe $ 55&77AWpq"K5&7h7bAWpuq$K5&7L7FAWpuq(K5&707*AWpuq,KNfe e%N AyA l 5C eN ww  55@@mȋu @@m % 55AWpBBm`u % @ 5A ruWpK5 AWpAmBBmK % @w5 (( % AWpAmBBmKA w A $ 55 AWpK_V AWp-3"K_V AWpeKNA  5|5E t5A 5%yYAWp1KAWpCpsl"K"KAWpq$KfAWp$K$KAWpq(KfAWp(K(KAWpq,KfAWp,K,K%  44E 4A 5  %_: ww @E55 A vu  A@v5u A@wFw 6 * AA l 7 . pB%$Ґ 잿 Eܞ % B %:% w%:%0%9Wp D`eD- w D  & & $e4  0wPw @DC 5 u E     u-@ww DC 5 B E; &E  ~  u-@ww   ff n%wzw jBfef r% f2wR w >D@w  4 e4 && n%4 %  4 E & & .e Ӌ AA &70& $ e 0ӕ-0ӕ0B~0ӕ.  ӕ0~ B~AA&70 & e 0ӕ-0 ~0ӕ.r0 B~ӕed0 ӕ- ӕ+ r e0e0Sw uDAB %u f& & He wD5 5  W- W00u5  .uABwF J@B V_Z@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AAҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w 4 Nefef 5& e C c| kdp,$ux{~xyyӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E  z f   #̥-%0  E: E:  &E   z f   wH w 8 DuNfe& %4 ;#%B+     & %S  wl @w V DE%& %  w w  A e-+w w D@     4 4 w w D  w  r< wf H=@+ @ a f P  %f H &  $e   f P  4  Հ rw D&      & P ww pA-* wjef >@w < FU78U7.,$Ae vB7 55 a  a!RE -ؓ% w ʓ%ēe rt 7  `e   %zve U?dd `e 7RU?F a78 02?*&U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Vw :fff 5& ew$w  fff 5& eww  5 %O N  = 555Ne5& e5`55'0Ne5 B& e57' Be0" 5%`55 5 B5@B e a=%7w %`5 B5Ne5& e55e0%`7`Jʕ0%ʕ1  %˕0 ʥ9 w lNef   wZw D5@} w@w 0w wAupAmNf  ww  h@@5 _< fA rBpu@@`55DCN& @ f& %5 2`D--`f @ $`f& d%`Df %5 D-& @ C-D-%@@AA@ Nf`  u_Nf  @`5_f d%Cww  DCԒ ww DCB5ҒS wlw \N tf %wRw BNtf %w8f@w fw#w#Bwfw#w#w#Bw f@w#w#w ~#Bwvfwf#wb#BwXf@wJ#wF#Bw6fw2#m.#*#Bw#wm#fw#Bww" fAW @w" fd1d7"5 e, w"B 5w7L7H7D7@7<7874707,7(7$7 77777 777f&0 & d f@w*"w&"Bw7$Fw "B A@ C@ppC`pw @& BF/usr/adm/acct***other/usr/adm/usracctw/usr/adm/savacctwCan't save %.10s %-8d%-8s%5u %7.2f %6.0f%7s%6.2f%%%6.1f%9.2f%9.2f%7s%6.2f%%Only 1 file with -s rCan't open %s %3d%6.1f %.10s /usr/adm/savacctr/usr/adm/usracctr**junk**%.10s--/etc/passwdrjdPo\x*f8egcs*l*LruPrvDTO`XU(null)B=(\60c kd`cfilorryy  ~$ 0  6 >  67R% % * w %  u_RN 2 ne f  5fe \e5 @ p-  @  @  N( 2 1%NE 2 NffJ 2eA Am@ Am@ 5uffffV e N  w w v DC 5 u E  ^   u-@w, w  DC 5 B E; &E < ~  u-@w w ff %w w  fef &% lw w t D@wV  8 4 e%4 && : %4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .ub BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w VDCB &E < z f <  #̥-%0  E: E:  &E <  z f <  ww DuNfe& %4 ;#%  : ~!~! 8   & %S  w@w DE%& %  wv w b  e-wTw DD@   r 4 4 ww D  w r< wf =@+ @ a f   %"f  &  e   f   4  Հ rw D&     &  ww  -< wef >@w  V%U7H%U7>%<%4Ae vB 7 "55 a  a!RE -%% w  %e rt 7 \  ((`e   \ %e U?tt `e 7b%U?V a7H @B?:6U ew `DE wRw BD5 r @ r5N 8 !w5A vBB-  }ee@ !ۃ `!ւ `@ r `fw Nef |  ww pN tf %wfw VNtf %wLf@w" fwwP!wfwww|V!w f@wbw^w Z^!wfwBw>f!wf@w&w"l!wpfwm r!wPwmfwr!w.w f@wwx!w7F@& BF a.outrsize: %s not found size: %s not an object file %s: %u+%u+%u = %Db = 0%Ob doxfegcslL&ur*DOX<U(null)##N!6%c k NQTWZ]zz  $> 0  6 >  67$ % w B 5 %  @5%0%9  AWp Ameu@ 5N w w p fef % w w uDAB %u f& & e w` 5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A` ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w FDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& R %4 ;#%p  X $!$! V  & R %S  w@w DE%& R %  wf w Rh  Je-wDw 4D@     4 4 wf x@w 5  5(%  N N w u-uu@ 5N  w >(%  w8w ( 0%U7.%U70%.%Ae vB7 55 a  a!RE -b%.% w T%Ne rt 78 B , `e   B %e U? `e 7.%U? a7 ?U ew DE ww D5 @ r5N V!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w &Nef   wP w A@I#EEFNuww N tf  %ww Ntf  %wf@f@wh fwww !wB ffwm!wwmfw!ww fAW @wx f:%1:%7l5 e wZ! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & :% f@ww!w7F@& BFarg count bad character doxfegdcvslLurDOXU(null)$#$#!6b%0c k $!$'*-03~SzSz  @|V 0  6 >  67Z % 4w  wllu  o "-W@-[B <m:6Q ew @  T ewF) mH(e@ȥ-ȥ+ %  F8  4 N  e@&  EWpeu-9@-4-0-,-(- $}@Ap@Ap@Ap@B p -   mG % _I  4 ZҎ p7N %N Dbe7T r 7Ht7B< m:78% R`7 & e P  e  m  4 .     %.   .   .   zb h  d  P]N N-Fe5-  N& N De- - n& N 7 V `w$w 5 5  m m! -ԕ %Z   -l] <_26 , (E h% %  -4N 5f  7N    E h_ 2̋|  r nEH `&E F ԥ -rB  _ww N5 B. 5@f  A1N @ pN   e B-B e  5 % ̋    @ A p u-   jjA @@]`5B_  H- D  & & %    EH &E F ԥ   C%     Y% e5@&f % u@=@p% *f & %5 B   N  &     _ZB@ e-   B- ww  @5e@ @ EN h%w  %  w D ̥  Nf w~w n" &  7  wFw 6-@ mȥ- @ m w@ mA rea?C reaw  x  7: h "ww < @ a  @  @ a% @ a0 @ rNe A` a1   ! " # & 'D  ! $&  $ & w w 6 D5 AWp `eu= @w w % % w w AA@ r5%_ vu@ @m55DC5L} f& %5 :eD-4euK)e5K}eDf 4%5 D-5KC-D-D @e5@eu-AA@ r&AA@ r%Nfe  u_Nf  @e5_ L}C_w> w . DC  @; f F 5((w w ff %w w BuNefef 0% = Ne& F @w w ~ D@w`  B4 e4 && N%4 %  4 E w uDAB %u f& & e wz 5 5  W- W00u5  .uBwF J@B _@ c k !$!$'*-03~SzSz o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w `DCB &E F z f F  #̥-%0  E: E:  &E F  z f F  ww DuNfe& %4 ;#%" D    B  & %S  w@w DE%& %  w w l e-(w^w ND@ (   | 4 4 ww D  w r< wf =@+ @ a f 0  % f  &  e   f 0  4  Հ rw D&      & 0 ww - wef >@w  TU7FU7<:2Ae vB7 55 a  a!RE -% w* %e rt 7 p `e   p%e U?rr `e 7`U?T a7F >@?84U ew jDE w\w LD5 |@ r5N B!w5A vBB-  }ee@ !ۃ `!ւ `@ r `dw Nef   ww zN tf %wpw `Ntf %wVf@w, fww|>w ffw^wZwVDw f@w?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<Dn/usr/tmp/tmp-too many keys-can check only 1 file%s/stm%05uaacan't locate temprrdisorder:nonunique:wcan't create wcan't create can't open sort: (doxfegcslL0ur4DOXFU(null)   AAAAAABBBBBB 60 c kl^   mzmz , 0  6 >  67% ,% w  7 7 7  E  :     7D w6 m8 r wl * " r wl     w   F < 8   D-    E?    &E  -w0w       ww P%@ 5 5%@5P 5 # r %  r wl  r wl  <  . m@-   mNw D@w $4 e%4 && %4 %  4 E w TDuNfe& *%4 ;#%  & !! $  & *%S  w@w rDE%& *%  w4 w   Te-dww D@    ^ 4 4 wf x@w D  ̥9Wp @@`e     + -̥0  wFw 2 %U7 %U7 % % Ae vB 7 55 a  a!RE -T %% w F %@ e rt 7*   `e   %e U? `e 7%U? a7 ?U ew DE ww D5 ^@ r5N $!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w 0Nef h  ww N tf %ww Ntf %wf@w fwww  w f@ww wpfwm wPwmfw w.w f@ww w7F@& BF## 6%ckE!#zz # 0  6 >  67NE % w  ,A @- @5@t01AWtq1AWtq"Bt"B5@t01AWtq1AWtq"Bt"B5Awlw \D%@ wV @7@5?j@ l@ 55 _@t0"AWtq"5.@ @-7 w @t0"AWtq"5u%7 5uBB5%7\5uBtm?BB5N <uBtm?BBAWtmf? 5uu55uA5% 7u&55?e@- 7u&55%5 5uBB5AWtm> > > @@-_$55> > @5 _v> @- 57w @t0"AWtq"555 _h@t0"AWtq"5 5Au75@tm=uBuBuBAWtm=IB5 5%D5u((A5% 7u&55X=e@- 7u&55@tm(=055uu555 = 7u5 8e _w 07 h; f;7^;wwN;Wt1" @;te" l *;te1 l  ;%;ww  4,E $ V %5 w5@   % E  V %@@m0@@m Ne =@@m0%0%9 +  -  . E e w  5 < @0 AWt`q @t@m0A1 @ 0AWt`q @t@m0A1 -9w`w P 7)7)77777777)77)l a$ k0 n6 p< x=B   Qe@ - 9Nefe %6Nefe Nefe 8 Nefe" % "Nefe" %   v8 7 ! T1 TN8 t5 768N 7,8 #5 @t0"&P e @t01&T e -7ww  %  %-. @509@ = ewJw :Nfef  %@ w w  fef  % pw w D@w 4 e~E4 && %4 %  4 E & & .e Ӌ X \ &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~X \ &7 & : e ӕ-0 ӕ.| B~ӕen ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w 5 5  W- W00u5  .u^ BwF J@B V_ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E \ z f \  #̥-%0  E: E:  &E \  z f \  ww DuNfe& %4 ;#%   zAzA   & %S  w @w DE%& %  w w   e-ww D@ > `  . 4 4 w4f x@w D*\5% %-%+ 5 55 55  B5eA5 ]!%.55  B5eA5 ]! %E%e$%+%-  Wp B`e]!  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& e5 55ck##zzwPw @ 1EU71EU7~1E|1Et1Ae vB`17 b155 a  a!RE -(1%E w 1%1e rt 70 0 `e 0  %00e U?00 `e 70EU?0 a70 00?z0v0U ew DV0E ww D5 .@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `/w >fff 5& @ew(w  fff 5& @eww  5 %O N  = E555Ne5& e5E55'0Ne5 B& e57v  Be0" 5%E55 5 B5@B eE a=%E7j.Ew %E5 B5Ne5& e55e0%E7k.`Jʕ0%Eʕ1  %E˕0 ʥ9 w pNef F  w^w H5@m 7N 7H "f-w,w 5@} ww N tf v%ww Ntf v%wf@w fw` w\ wX !w f@w> w: !wpfw& m"  !wP wm fw!w.w f@ww!w7L,F@& BF@C@ T}½H½H}½H½H%f %f Bad agrument %f %f d o x f e g c s l L u r D O X* U(null)zCzCJ!=(\  AAAAAABBBBBB 6Eck{$;zz  T 0  6 >  67% % b w . 5 [ @mȥ-? @m r y @      .        @m  p 7*  @m7  @m7  D-%   J 7   f  b v  n  _:b X T EH %  6  b <  `2V!  `ȋ rea2V!  rea@2V! 2V! p V! J 7 !  f  b    Ȑ t %  -| w ff (%w w  Nfef ^%@ w w D@w  4 e%4 && %4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u8 BwF J@B _F@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A| ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E t z f t  #̥-%0  E: E:  &E t  z f t  ww DuNfe& > %4 ;#%  !!   & > %S  w*@w DE%& > %  w w   e-dww D@ V .  4 4 wRw BD  w@ r< wf  =@+ @ a f  %.f  &  e   f  4  Հ rw hD& D     . & w>w . - w(ef >@w D  ̥9Wp @@`e     + -̥0  ww  %U7%U7%%Ae vB7 55 a  a!RE -%% w  %e rt 7j ^ `e N  %62e U?   `e 7%U? a7 ?U ew `DE wRw BD5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ((ww pN tf b %wfw VNtf b %wLf@w" fww&!wfwww,!w f@www 4!wfww|  67% % w      7f!^!  J! b 7T!    @m %&! D-!  ! w w  f b  N1   _J!& %5 @ -   @  @  NA  z 5x NY  bV mR @ 5u7 H UH  & B 6 e!. %ff &f ve eu  f Nn _ &  6 eff&f e  w w : D- D fef %!N   N fef %! 5 u   w$ w  !fef % w w uDAB %u f& & e w 5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E & z f &  #̥-%0  E: E:  &E &  z f &  ww DuNfe& %4 ;#%! !!   & %S  w@w DE%& %  w w   xe-(ww D@   " 4 4 w.f x@w  %U7%U7%%Ae vB7 55 a  a!RE -%% w %e rt 7n b `e R  %:6e U?$$ `e 7%U? a7 ?U ew DE ww D5 " @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww  Dԋ  r e0@  r X a %z!w  f %@w ~N tf  %wtw dNtf  %wZw Jww !7(w6f@w  fww!wffwww!w f@wpwlw h!wfwPwL!wrf@w4w0!wPfwm!w0wmfw!ww fAW @w f&1&75 e> w! 5w7L7H7D7@7<7874707,7(7$7 77777 777f&B & & fw!w( f@ww!w7F@& BF /tmp/sXXXXXcannot create temp file cannot open %s %s not in a.out format %s already stripped %s cannot recreate %s unexpected eof %s unexpected write eof doxfegcslLurDOX&U(null)##!/!6*&0 ckvNwzz  ~ 0  6 >  67Z( % H w * $ %_  H _ew$"  ##@#"  e@ȥ^E7#@7# "  e@ȥ^E7#@7# "  t# o#"  . t %5 AWp J =AWpNJ  AWpAN w@ #AWpAL wP# 5 @t  @t  @t 7"7"  " ""# N% _j$ w w x " 5 x"@mAAmH@m`" ȋ7 T"wD w 4 G"D">"" ( /""""" ( " "e@"!"# N% !!e@ #!## N%!5(## N 5@.## N 5 3## N 58## N 5=## N 5C## N E% J## N 5Q## N Y#E r&  E% \#E r&  `#E r&  c#E r@&  f#E r&  i## N wtw d  Nfk## NewNw >@ ^!fq## New(w Nfef ~%@ w w uDAB %u f& & e w5 5  W- W00u5  .u|#BwF J@B _f@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A#ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& : %4 ;#%# X $$ V   & : %S  w@w DE%& : %  w w # e-ww D@ v  4 4 w.f x@w  ,(U7(U7(( Ae vB7 55 a  a!RE -%( w %e rt 7  `e x  %`\e U?JJ `e 78(U?, a7 ? U ew DE ww D5 @ r5N V !w5A vBB-  }ee@ !ۃ `!ւ `@ r `<w Nef  ww N tf %ww Ntf %wf@w fwwwj$wr fwzmvrr$wPfwm`fwPr$w.wB f@w2w.x$w7&F@& BF~!!!!!!!!!!! ! ! ! ! !!!!!@!@! ! ! !!!!!" """ " "")"1"05"09" 0="00A" F" K" P"T"X"\"`"@d"@@h"l"p"s"y"e|"e""""" " "@2Kn,X` %05075110134134.515020030060012001800240048009600extaextbeven-evenodd-oddraw-rawcooked-nlnlecho-echoLCASElcase-LCASE-lcase-tabstabscbreak-cbreakcr0cr1cr2cr3tab0tab1tab2nl0nl1nl2nl3ff0ff1bs0bs133tty3337tty3705vt05tntn300titi700tekekerasekillgspeedhupunknown mode: %s input speed output speed speed erase = '^%c'; erase = '%c'; kill = '^%c' kill = '%c' even od((d raw -nl echo lcase -tabs cbreak nltabcrffbs %s%d %s%d baud vd\ohx6fDe&gcs6l6L~u\rD`OlXU(null)&&h$6(ckꠧvy|"{"{  \$ 0  6 >  670% % w  5 C-  @m&  5 @m  %e _  5 5 eu 5 vDe vD`@ @ EN %@  % @m/   % A@ee@ f& J ef&&1 e%  @m:  > N N C-_LN w w ff %w w Nfef %@ wf w R  fef % w: w & D@w  4 e`%4 && %4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .u@ BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wXw HDuNfe& f %4 ;#% = \!\!   & f %S  w|@w fDE%& f %  w( w   Ne-ww D@  V  2 4 4 ww D  w r< wf =@+ @ a f  %@f  &  e   f  4  Հ rw D& l     V & ww  -Z wzef >@w L tv%U7ft%U7\v%Zt%RAe vB>7 @55 a  a!RE -%t% w %e rt 7   `e    %e U? `e 7t%U?t a7f ^`?XTU ew D4E ww D5 2 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w JNef <  w8w "N tf %ww Ntf %wf@w" fww.!wfwww4!w f@ww|w x  67% 8% w   N& p we  w 5 % @& p   e%@ <5@  x8 w~   Ne& V @E% ,5 "w 2 <N d V L H  P Zww $     P @  ww   5 5     P %1 < u-wZw J 25   | x  P u-ww  RH D  P 2( $ f P ww      P @  ww      P wrw bNe& V ENe& <  (  9 <  0 < vw w  F< 8  P ( (   2ww  (  ww Ne& V EUNe& <  ( 1 <  wTw D3 <  | x  P   ww   nww DuNfe&  %4 ;#%   B!B!   &  %S  w(@w DE%&  %  w w   e-ww D@ 2   L 4 4 wPf x@w 2 ,H%U7F%U7H%F% Ae vB7 55 a  a!RE -%F% w %e rt 7  `e x  %`\e U?JJ `e 78F%U?, a7 ? U ew DE ww D5 L@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `<w 0Nef V  ww N tf %ww Ntf %ww DCԋ w@f@w fw~wzwv.!wr fw`m\X6!wPLwmFfw66!w.w( f@ww  67L0 % w & & e%0 5@5%- + - 5 5 5 @&  ff eee@ ee@ 5u@      %3  @& L &  %@ @& %  % 5 5 @ L b  cI lC r/_A@v 5u6 G v f& j%  @ ȥ     _>  A@ fU W S X &  E% - = 9 W- A@Dv & j%  5u  ff& ev  %v & j%     /X &  A@ 5u--A@  f&& e `%5  &ev & j% 0 5 (( u  @A   W-   @A e@ B _B   v  v % 5     EN v  %: v ! # !B-New  ew  %N v  % 5 u !  !  % v !! ew  ew  %v  %   % wJw :%0%9 w0f @w D  ԋwf@w f@w,: w f@www > wffwwF wHf@wwL w&f@wwR w7)Fw "B A@ C@ppC`pw @& BF-10ltail: can't open usage: tail +_n[lbcr] [file] ckV ){{ >r 0  6 >  676+ % hw K x @e7&H ; r74 &1@e7& Z 7&#e@ȥ-p ɃT@ 7~& " 78  7.  `&"f 2 % N"p& % h D 78& D 7(&_ _5@ E7`%_ %% %% 7%m%%%wpm% 7r~7`%%wppm% 7rhw% j7 %@ _ x 7%7%7%7v%7p%/ 40727(7(7"7 Z% f$\$ X$h&  d .% > T7 Ne> _h&  E$_U$_U$_E$_7 $_@$_7 $_$_7 $_$_E%`P@ E7$ ~$ 7$m~$:-&4(p$, n$ z#p# l#h&  H$ X  @$ :$h&   "$_$ 7 $7 _ _E%PdE    E! 7 ~ 7@ n 7` z # "" "^" "5@#h&  p#  |"h&&   5557 &# 7a#d5aE]#%#   ! # ʋ, " !! ! ":E?!h&  ʵ " !h&&E%"T  x " """" & h!`!E X!`& %_< ww  B $"@ 0!6&! "!7E?! !WpfwpWt rF7a!a  !/ % &E? -h&  ! h&&E  h&  p!  | h&&E  ʋD! w&w h&  `' 0! < 2 .  & " h&   h&       7 nwh&   h&V  w X 67 p . r $ ~t p;h d"\ Xh&  hwh&  $  0h&;   h&  w  W@ez5x  v }vx x N5v=x@ez@-x6@ez5x!xNe{ &p&" sp&" T @x x e7 @e{78  7Bv ww  5'" D  D    f""" .e h-%) D  D Ne 5@-% D  D wTw D fe %%5@w(w  <  H_" : 6tE5EWtE@`E5tE5tE5tE5-V S G@U ? G@U`? Q@U`? c@U ? ~m@U@?p lwww ww7 >wh&  h&fU  -   h&fU`  ---   h&fU`  -r   h&fU   h&fU@  w B 55%  Wp B` 5 e%.7x 5uBu- Wp C@  ff eB  77 w w ~ ^ P" c i p u f ewJ H72w  ("7 w  w D ff T%w w DC  @; f  5w w Nfef %@ wz w f D@wH  v4 ef+4 && %4 %  4 E w uDAB %u f& & e wb 5 5  W- W00u5  .u&BwF J@B _r@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AX&ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w H DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& $%4 ;#%h&m x b'b' v  & $%S  w@w DE%& $%  wh w T`& e-wFw 6D@     4 4 ww D  w r< wf .=@+ @ a f   %f . &  e   f   4  Հ rw D&      &  wf d@w  |+U7z+U7|+z+Ae vB7 55 a  a!RE -ck ){{%z+ w8 %ze rt 7d X `e H  %0,e U? `e 7z+U? a7 ?U ew xDE wjw ZD5 @ r5N v!w(5A vBB-  }ee@ !ۃ `!ւ `@ r ` w Nef   ww N tf h%w~w nNtf h%wdf@wb fww 'wBf@U@f@A)wfw@e7'wfw7$ fwww'w f@w~wzw v'wfw^wZ 'wrf@wBw>&'wPfw*m&",'w0wmfw,'ww fAW @w f+1+75 ew2' 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & + fw0 }f@ww8'w7Fw C  5!BA  D & r@rr @`   w& BAN   C 5 N B A @ A-  A    w2w "B A@ C@ppC`pw @& BF0 m ; $;;;;;;::99998889HvpPZdnx"""""##### # ########## #"#$#&#(#*#,#.#0#2#4#6#8#:#<#>#@#B#D#F#H#J#L#N#P#R#T#V#X#Z#\#^#`#b#d#f#h#j#l#n#p#r#t#v#x#z#|#~#############################################$ $$$$'$+$3$9$A$I$Q$W$]$_$g$i$o$q$w$y$}$$$$$$$$$$$$$$$$$$$$$$$$$%% %%%%!%)%/%5%;%?%E%M%W%_%a%c%m%o%q%w%}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&& &rtc: cannot open %s fiflfffflffi! ? /bin/sh-sh-chtnmlizsdbxfjukp-;a_c`e'orv-wq/.g,&y%QTOHNMLRGIPCVEZDBSYFXAWJUK0123456789*-ZM()[]JM_=O&:+!O~?'|O#L$(Mo_v)V,)?ISZo'o5becjCOM(kTS@UA|l/"E=O[RYN_\I(OJWX`/XFA\]WGIOO=O_V@s)K-SKit'ZXTo`HI'>F@TF>_F@</Cy||||||||||||=++_$^=_*{}'`^#|[c_~O/%M|*ZFO+]gCdhotxBfPe2g csBlBLuhrDlOxXU(null)d)d)((';6+0cklBA{{ r. 0  6 >  67H$ % w X" i a  @-   e %Ne  @E%  7p&  e _W _%#q <n |2@& B  1   @&   1 &  & e@&   1 Ne@& H @E%  . @ @  be@ %   B t & `%  *w2t t" % *w j @55 &5 @@@-NNNfet"@ & h% -umu-ww  f  h%wf @fw`w\B wf@wDH wz f@w*w&w "L wLfw wT w.f@wwZ w fAW @w fx$1x$75 ew` 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & x$ fwwf w( f@wwl w7F@& BFtee: cannot open 0c k5 | | L@ 0  6 >  67 ( % w &*% Ne V %      Ne@&  # !@&  e   Ne Ne !Ne V5&   Ne F   < A@@A f& Tef&H ZeA@@A f&M 8eA@@A f&R e@t ww   & ff eBar & fe e % N  5 >@a@ae0  0a5@u  %@a5P a5@x  % {   w w Nfef %@ w w uDAB %u f& & e wP 5 5  W- W00u5  .u~ BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w 6 DCB &E  z f   #̥-%0  E: E:  &E   z f   w w v DuNfe& %4 ;#%   N$N$    & %S  w @w DE%& %  wV w B   >e-2w4 w $ D@   @ 4 4 wf x@w Nef  ww  t!  5y!/f !@Nexf& %@ 6   w2!x@ex5zv%v v@v @aAv AmpzNexl!  %ч j Nfex      w DCB̥:̥-̋ ҕ/Ҕˋ ̋ wb w ND. & < w: w &DC ԥ==̋ ww 5  5P( 0 N N w u-uu  5N Nw rP( > wlw \ HX(U7:V(U70X(.V(&Ae vB7 55 a  a!RE -%V( w %e rt 7 F  `e   F %|xe U?ff `e 7TV(U?H a7: 24?,(U ew "DE ww D5 @ @ r5N  !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Xw ZNef  wHP w $A@I#EEFNuww N tf  %ww Ntf  %ww DC̠wԋ f@f@w fw:w6Z2"$wfw7R fw ww*$w^ ffwm2$w2wmfw2$ww fAW @w fd(1d(75 e wv8$ 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & d( f BRfw>$fwB$fw }f@wwF$ww C  5!$ABA  D & r@rr @`   BJwH& @N   C 5  N B A @ A- A    BJw7Fw B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF   W a k Try again. %s: %s Command terminated abnormally. realusersys 000 .::. %c%c doxfe~gXcjslLurDOXU(null)N&N&j!/bin/shPATH:/bin:/usr/binsh!!!""("2"L"^"p"""""""""##!#1#@#Q#e#y#########$#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many opck: | |en filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large;6(0#+ck:~\_behknqtwzҀ.|.| T 0  6 >  67x' % w 3Ne 7 7"7 77 r7e@ȥ- pN  + "  7" " V  - f % N/  2%   ! V N _4 ab"  Z"_ |_n j_7 /7 ("-_ 7   6, (   -RN ( _ ,    ((7 !_e r Wp@@7` E z 7 G x e/0!e/ r7`!e/ rw!/! r7l/     ?  & % e E  %_7      rw|w l77777- 7 %7 |mxtpl p h C   ww  H7 : H    ww  (%!  JL b % x n jE^ % wxw h \ $  5  5 vN  N  &   X O %  d Z % q n f eww  _ tE5EWtE@`E5tE5tE5tE5 XN J  - 0 @U ?    fU -R  @U`?   fU` -"--  @U`?   fU` -  @U ?z v  fU ` @U@?P L  fU@ w|wzwvwlwl7 w w  D ff ` %w w DC  @; f 5w w Vff ` %w w Nfef %@ wn w Z  fef % NwB w . D@w  4 e'4 && D%4 %  4 E w f D  B t 4 w6 w & uDAB %u f& & e w 5 5  W- W00u5  .ut BwF J@B _~ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  w w DuNfe& %4 ;#%   ##   & %S  wD@w .DE%& %  w w   e-hww D@  f  B 4 4 wlw \D  wZ r< wf :=@+ @ a f &  %f : &  e   f &  4  Հ rw D& |     f& & wXw H - wBef >@w D  ̥9Wp @@`e     + -̥0  ww  'U7'U7''Ae vBv7 x55 a  a!RE ->%' w: 0%*e rt 7 f `e   f%e U? `e 7'U? a7 ?U ew zDlE wlw \D5 B@ r5N !w*5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef L  ww N tf %ww pNtf %wff@w< fwwb!wfw@e7h!wfw7 fwwwp!w f@wrwnw jx!wfwRwN!wrf@w6w2!wPfwm!w0 wmfw!ww fAW @w f'1'75 ew! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & ' fw0 }f@w w !w7F@& BFc!k껂\_behknqtwzҀ.|.|  dl/dev/ttyrrtk: cannot open %s  ;;! /dev/ttyr/dev/nullr/bin/shsh-t dt o xN f\ e> g c* sN lN L ut r Dx O X U(null)%%`!;6'0c#kEX JMPSVYe|e|  0 0  6 >  67' % w  7#7z# 7|#7r# 7r#7h# -e@ȥ-%! d  s @ c f \ Xe@ȋ e w"%@7" 4"4 % $E"# v5 "@0" %@0"" 4! %5 E!E p C # v # vBE!# v 4  4 %+ )E E   -E! 7?   7& R E  % ww @ ;@ A@,+@&@-, N A1@   @p/ =-wj@ }p N =w 8A@ %\" @%0%7 tae % A@  A1@Eww D@w 4 e'4 && %4 %  4 E w DuNfe&  %4 ;#% g  ##   &  %S  w(@w DE%&  %  w w   e-ww D@ 4 r  N 4 4 wPf x@w 2 !'U7!'U7!'!'!Ae vB!7 !55 a  a!RE -b!%' w T!%N!e rt 78! ,! `e !  %!!e U?  `e 7 'U?  a7   ?  U ew D E ww D5 N@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w 0Nef X  ww N tf %ww Ntf %wf@w fwww w f@ww wpfwm wPwmfw w.w f@ww w7F@& BF%% 6'c*k\ #&),/258|| t 0  6 >  67& % w hj!%A @& . 55@ F +%! F Ne Ne   J  2Nefe f fe5%5  % r     T* X 3 ww @ t-w  w @ %w  w D &  w  ʋ      ((. F ; 0 0 w .DC̋w$ ̢ w Nf d  ww Nf= z! ( eww  % jJ d % a F %"& d  i F    w0w  fff %ww Nefj! %ww Neff %ww DA555  ԋNeffe %ww DC 5 5 _ @ E_X%%_B5 %*e5  AWp `eu" 0u%l%h5 %[ "e  Neffff ve   - @w@ @ EN 5% % % %Nf     %_@ _N 5 %Nf w N%c%s%[Nf ff f& ew5 5 5 5 %e%f %o%xDe5 5 @ @ EN % % % %-5 Ԑ@ @ EN  1 A@  5u%_NN  = _T%+ @ _B@ E "8%)%._%e%E %    Ԑ@ _@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _~ _~ N %+ %- %0_~%9_~Ԑ@ _N _ @e! _@t@]   x Ne A _Ne A @H@pHw DC = 5%c%0u5 %s E  rr %%c5 %[rr    E  %%   =  D- %cw w D ̥^  r r %E%]  r r  w6w &Nfef %@ w  w r!fef % w w D%    | w - -w D@wb 4 e&4 && %4 %  4 E & & .e Ӌ !! &7N& e <ӕ-6ӕ0B~"ӕ.  ӕ0~ B~!!&7 & t e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .u!BwF J@B V_t@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Ab!ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w v Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @wJ w : DCB &E  z f   #̥-%0  E: E:  &E   z f   w w z DuNfe& "%4 ;#%r!C v ""   & "%S  w @w DE%& "%  wZ w F j! &e-w8 w ( D@     4 4 ww D  w r< wf b=@+ @ a f   %f b &  le   f   4  Հ rw D& (     &  ww j!-` wef >@w ~D*\5% c5ky\ #&),/258||%-%+ 5 55 55  B5eA5 "%.55  B5eA5 " %E%e$%+%-  Wp B`e"  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& e5 55ww  6&U7(&U7&&Ae vB7 55 a  a!RE -%& w. %e rt 7  `e   %jfe U?TT `e 7B&U?6 a7(  "?U ew nDE w`w PD5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Fw fff 5& eww  fff 5& ewlw \ 5 %O N  = &555Ne5& e5@'55'0Ne5 B& e57  Be0" 5%@'55 5 B5@B e& a=%&7 &wp %@'5 B5Ne5& e55e0%@'7 `Jʕ0%&ʕ1  %&˕0 ʥ9 w Nef   ww 5@m 7\7V" ww 5@} ww pN tf F%wfw VNtf F%wLf@w" fwnwj"wfwVwRwN"w f@w4w0w ,"wfww"wf@ww"wpfwm"wPwmfw"w.w f@ww"w7 F@& BF rcannot open %s%sodd data%s too many itemstsort: %s%s cycle in reverse ordererror 1error 2 dj ov xDfRe4 gc sD lD L ujr Dn Oz X U(null)$$ "=(\  AAAAAABBBBBB 6@'c<k{  ||  20 0  6 >  67% % w   %  @&       w w h fef % w w uDAB %u f& & e wH 5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AX ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w .DCB &E  z f   #̥-%0  E: E:  &E   z f   w~w nDuNfe&  %4 ;#%h ; \ 2!2! Z  &  %S  w@w DE%&  %  wN w :`  $e-w,w D@     4 4 wf x@w LN \ WNef & M@E% F ! j >fe& %%((/ u-!6%  Ne6%  Ne6% u-u-  6%w  w  X%U7V%U7X%V%Ae vB7 55 a  a!RE -%V% wl x%re rt 7\ P `e @  %($e U? `e 7V%U? a7 ?U ew DE ww D5 @ r5N Z!w\5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf D %ww Ntf D %ww DCԋ Ԕwzw jDCԋ w`@w HDCԔw@f@w f@w!w fwww !w fww!wf@ww!wfwnmjf !wpZwmTfwD !wNw6 fw*w&&!w( f@w w,!w7F@& BF-s%s not a ttydoxtfedg>cPstltLurDOXU(null)2#2#!/dev/6b%cCk02||   0  6 >  67% % l w 8_rz  @& % @  %  @& % @  %   l !)  %  l )% ` % 7 %  )  l )% ` ) 7 @! @  z 7t @7j e%_p@-+_D  z 7( w D%w Ԑ E z %  w D c d  u 7 # (  7  & , D : 6   w$ w  DC   ˋ Dw w D  -   -̋  ̥ ̥ ̥ ̥ ̋ w w Nf j% l wz w j D ff X %wX w H DC  @; f  5w w Nfef %@ w w  fef % w w D@w  4 e-4 && %4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u. BwF J@B _v@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Ar ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& H%4 ;#%  !!   & H%S  w@w DE%& H%  w w z  e-*ww ~D@  8   4 4 w,w D  w r< wf 2 =@+ @ a f  %f 2 &  e   f  4  Հ rw BD& N     8 & wf d@w D  ̥9Wp @@`e     + -̥0  ww  "-U7"-U7"-"-"Ae vB"7 "55 a  a!RE -n"%- w  `"%Z"e rt 7D" 8" `e ("  %" "e U?!! `e 7!-U?! a7! !!?!!U ew `D!E wRw BD5  @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r ` w Nef   ww pN tf l %wfw VNtf l %wLf@w" fwHwD!wfw0w,w(!w f@ww w !wfww!wf@ww!wpfwm!wPwmfw!w.w f@wrwn!w7hF@& BFrcannot open %s wcannot create %s %4d dloxxFfTe6gc"sFlFLulrDpO|XU(null)##!  AAAAAABBBBBB 6-cMk  !$'*̣̣ @ 0  6 >  67 % pww  (|  (| % (|  (|  (|  (|  (|  (| @ _e@ȥ-_ r y _Ne 7_7 Ne 7̳_ _@ ( m"&fe  _eФ5@e5@ A H h_Ne _ R_ Lre5@e5b@ A H U h   N 7ĢB  _   β& y *(& _ _,   _$  Ne 7z t _@ȥ+  7 7  wFwB  ry!2  ) (&$-" 7  HQ - 7V G 77777 ڱ   ֱE% ʱ ȱ  E% 7 --- 6 E% % 7 h b&  w J| |wJ|w :|b z (| w,|w | (|  |w|w {w yae& ~z  hz   pw& v{ 7 ~ A ?a7w{w {  x7H x78  x7( X  @  Dj v{ 7r  | ^ b l}% (H|7B7@ 77>7 7 , ( 77e7rwzw zNe }PF Qff ye wҷe r wķF r   - 7wz 7z%  fw ywTL >%7 *wyw y  | 8Ex Hz wyw y N wyw yC   t l}%wjyw ZyD .% wLy?  r t t5 & t w x   tQwxw x H E%  7 &  wx  E%S5_> % t  7ڹ \ й%   F_> %f   . jG_> -Z-- r`_> %_> DU zB  "F >E5_>  r y" _H D_H E% _> Μ%"   _> _> .EQ   *_6  r y2  _>  _H                 _  _H _  _H ,9_> _H 9_H 0D_H :_H ~;_> _H ;_> _H \Q_ nQ_H T_H 6T_H R_H  (%_H m&_H ^_HuUbU0 zB_0 J<V_H E_    _J   _J   _   _J    _ _J _   _ _J\E%  ȩ7 4  > 0_j zB`"_jw t  7  wt e_ 7 eڵ]7 ҵ ̵ ȵ ( %  1J((   J -pp*%h&   ܨ-LL7 V|b {%|*e|7 ğ Eepw j% < E%   v 5E%]E-_ EU_ w :s ƴ hz Ф̋ : 1e̥-7  & v{ 7p  à 휧P J D7 67 |7 z wr l  ` J  7R7J77w hr t7д$7Ҵ ޳ 7ƴ4ҳ 7ȳ|ȵĵҔ- wr ܦ֦Ef& J{e |t mee|7.|*N x Ee|7-w q 7 ޣ E%  ~7 z  -d\ ^ \7 Įw\qw Lq J n5E% E% 57h Ewqw q  4 n 7 ڥ7 p 77`үʥƥe7@wpw p  E% %~Ф %?2Ф7ޢ Bwpw p ~72    Ф v{ %Š Ф ֠  J  7tҴؤд7 Ҥ7 Ф ƴ7 ष d v p |4h,dҔ-"wow o  7\ B   Ф v{ 5% ؠ Ф   Jfef {%55 u-@@m   ^N hzwow o* w`X E `eZT 7~7d7 v@%: ?wn+  x\7ڠ D &P?e %򓽂  |w Rn R Ư  D  E% E7w nw nD5PEN K 6 E B * 0~tEWt@P5@ E(     7 <7 670% EE@P whmw XmDE% 갮 : % 1 A p  % dwmw l :e- "wlw l@  wlw l ?̏ ȏ  %  ~wj v{ 7‘ RI 9   %  y M]ܱcXk !$'*̣̣ y ڱ@ ȋ@ı H l}%2 l}%7`|wkw kw]j7 8 77T7RP07 D &   y  |7 L   & S7 %֬ Ȭ7 (.&"e7  |2  HQ y w kw jw] ^ 7  HQ y | T  | h dwjw j S N |wjw jw]8 (|  (| z 8} N D UB& y  @ pwwBjw 2j( e77 N Jwjw j    0 Ne {% d% 1w N hz \ ^# hzN zN hz ФФ z%. Ф <  pwwriw bi7 %.&  wNiw >i <  8" .7Դ   . ` tWtAEPpwhw h   . ` l whw h Z whw h H whw h : whw h% . z  v; 75    v ` tUp ڳ Ϋгȫ ~%.  77wgw g tE@- %,%,wgw g @t5@t P@t0 @t0 w|gw lgN .77 7 * (t5".t7 ڲ в β Z7L t  %,%, 77 v % d@   7VwftR J 7@%8t tAUp7 w Xf ~E% 7>wFfw 6f  ,.tE  j7  7B w6 5 N  5E%  b wV  @we% 7 % %. %  w Te T  nE%"  VE%   wew e    %%   5% 5 @7wdw d  5 0 N  % 0 wdw d@te wdw tdN  wpdw `d A 7  pɷ 5ާ% V ԧЧ  % ^  d  7ǒ% wcw c r- & d& cef& J{e\  l}%0E@E@ 27 wxcw hcAe v@w`cw Pc<   " Z7w0cw cDE-Ү#7̮ & & bef& J{e {%  wb@E w b @5 N  %w  dwbw tb-jb wrb  L7ʡ 7>747£77 7 77w bҭe- rpl d \N 7J7D 7727t707* e P@7twaw |aN {%  z@ @m7wVaw Fa   a%(w $a "  .%t5 w`e-\ ? N ҕt w ` ? &" J _ @e757 8@e5e&5-2 C @m u-Z Ve5 XE%" 7d <  E%  E%"  E%"7  t C-  z  fe ć w@e@@ r?0 nwr_w b_ Ee % ?!< m27 w@_w 0_ Φ w0_w _   %%z  h7b7f WpewHD|7 l7 |w^ %|  v  %  FPWpew ?0 `֝e %  ` w F^ D2 p  11  x1w^w ] d0  %V  57~_# 557'E E@-  E%    NzB # 5 zB # 5 zB # 5ڠl SN #  vA r@& f2  S  # B@@@ S  #  M% p,p -N Pwt\w d\ 37}w`\w P\ _#wd` V Z7N %w$\E-6}E7ȧ% ( 7JNT ) ` w [ 55 f  5 t55<Bet5 N  5% ` @E@tE ҕ  &% Ne  %, % Nef &% Ne wZw Z%d A rde0= % A rd r e0= A r e0@=   =@wZw vZw~Zw nZ 75 E%+ %-7 _^(E%._(t r yҡf _R( +_R(b_R(_R(0_R(\_R(|_R(<_R((_R(4_R(H m _R(|_R(L_R(B_R(0_R(6~_R(_R(${_R(   _( _R(  _(_R(   _(_R(  _(_R(  _"& _(_R( hDE7<tE707 ._X(  _B& I*f _& >}[ _|& _:& .}K (%—_V&= (7 _& _&  rE% _& (%_& m6 Apup m"bH@ 7 b(@wWw W27 lN+f ) ? wWw W 3  p-: %%$ %  : p: x% \ z N%H  dwW  w V  U-  @ 50 1  A I a i Nf ) awVNf )Nf *w V ֣A r  ģN& ) A r e0]f  `wHVw 8V U0  B5 5E%  E% wl@w \@ k w\@w L@   j  j 7j7j  jnjefj7j7 ^w@w ?  %S & .C %VeNeJet 7Dew?w ? t 7lj7fj 6 4  * & 7Hj7@j7 wv?w f?%i7 i7 i  t7ii  & & 4  Ȃ7liw&?w ?%~~~l| h~   ( m&qw>w > p 1  b7a. w>w > - ih M7h7 w>w ~> 7,i7$i  + i  1  & 4 7{ B   B  ̪ B 7 lhnhw>w > \  V N& 4 =w=w = x v && 4 7rh7 \w=w = 4 7 dw=w =C 55@3E5 - &E%%b-g%5 E%  AEwpBw&=w =  h e !e]BgwE@- p zB`55@E55  5C5 7  b(w,xw0|wewe 7 w:w :e_ z w:w :<_ w:w r:"  H& f2  "F l7 (_w>:w .:%u %rWpD  "F7 w:w 9D EU U U@w9w 9 ^ Ee%  D   w9w 9 $ӷ f^H^"^ 1 }c-cc7cwJ9w :9 `cx^~ & f2 `^ > E?tU7xz U@nzEt Uw8w 8w8w 8w8w 8w8w 8w8w 8w8w 8w8w 8@w8w 8 7 m @c_I%w %u M_I c  &c_I c  c  ʇ S w0 ?b%wf] S b bb%7 ] tb fbb7b-bbxb xb( Pb%%N!rb^b 7Vb7Pb%Rbp}Fb r& f2 7`\b%.bm&bLb ]7 bm _ L  D E%  j  7&7Fg7_7i _L72g  : _h _ewp,_w`_7 R iX i v_ l_ b_ S C   i7 F_ 7_7 _ ^%%_^^ ^ _ r7^^ 7rzwpyw^^^ wp^@7^ |7 ^ i i7 ^ 7 hw4w 3 ^07 p J hV h 7h7"f P 7^^7X^'p^->^%  v^7 h  8& NM v E%  8^ 2^&y^ r& f2 7a^ ^  NM  0 7*h7]w63w &3 tt]7 t l8w3w 3 ]  ]7 ]hP] P ]  ]  ] ]  w2w 2@E%@t (%6 md>]/`] eB-&] $ z %N zB5wm\w\\e\ \w<2w ,2 _ O%qp~\  ssj\pq m^\bq1`  B\Hq wLsp :q  (q  q1l q0 q _:P _:Pp,_:P _:P p&  _:P >fp _:P[ rr[p p@l m|[`zn 7 rh[->VdnOfp wXnp@7eee dr ~[ [ J  >7 Br-oe en n (V Vm 7V7V-P%ʢ z d  &$  7dw/w /  $  LmTC- %w/w /&UPTeUFTE7@T%8T  5&TET T7 Twj/w Z/%nn @w' DwE5 bW %a@ zvE5 w'Cm vBm-Q  YE@   Cm vʵ ȵe7vʵ@  Z ?vev ʵ  w `&E%ae @wP&w @&N Y a e  i (( o u yw& w &-P NE Y @w% w %i7u Zj55 ITPe!H-FPi&a4Pe!jm&& ,[%&VpCBwBwBww   v{   )  pwfe& {%@ r & {%N 5 ,b e@ f&& J{eNf& {%Ca `+e%aFa 7^Fat7l  wp l@ 1 % Paaww >a >  jc A hz& R}%M MP y ww VeV%xVV@E% 2VZ mEa7`\kZ0 7Pk7Nk%(V p ,` >m`*k XZ7l k0 (`Vww (-JV_fD5"E55  55@wmjmf`j ewmjE%  ŁEwp,`uu55 ʋ pj hj wm`j5xtE7Nj_ 8j %:j_ > "j j % j_ >7 j-? jAA 7r__  A 7r_  $ f|_ > ʵ i^_ >< <>e-< ʋ _veA 7r_ _ve  wFw 6 Fi^ >BE% ʋʵ%ʵ@ ʵ ^ ^ʵ ^^E w  > w hmhh,.^^j^b^ h[ h h 7h:^2^<^˵ph 7r ^dh 7r^wZh > ʵ@h 7r]4h 7r]w*h  >h 7r] h 7r]wh gg1 >  gF gg 7g3]g 7r^]g 7rR]wg ( >5 TLA 7r~gfxg5-vg 7r]  wZgum]5 Fg >g/ 6g\ >,g 7r\7"gg 7r\7gN >g g N >f f \ > 7f7fww  ww  fe {%w0 "!S3"#`p`Аp@РP`p"! #!4!@``Pp`#s5$#D"1f1@` @P` 0P` @````p``p0#!Q "b"1P```PPp@ P@0`` @!`@PA! "Qp@`p``@F! g 3!Bp ``Phk22jWf@P`@P0@ 00 @P@`0#b&`2gY&FI00 @0 @ @@@ @`6%e`8XC  @`PP P 00p P P p P`P` )Vh`0fuP p`0```0@`P000 `@``8U)rPEVD$*``00 0`p`5"0f Pf"G>B"f()/ /// @/N@//_?OU3u&'=  //`O@//?@/0e:ou36t(OUH/,oL+/???L?>???o,O=U5/63'V /)P./0>._|-ݶm?o//3"? /?@~(wf"J?H2*s0 P0 o UͯfV/ @p o~%hlr"gjC@ `@P0@ `0 @P@`0r&bY*FH0"p @` `P P @@``&@`6%XfXC@  ``P P"`q"cr Q"0`S!Q"0P`Sp!)Vha0f6uP p`@`aR pc"b'cP `0a@ `@``HU)rPUWDD*` p`0  ˙`.`p`5"0 f`arrrlhhetalsisipiytotaniniciathinmlibililhfdiaaiorororararuararoarariararararoooooonentanananololieliiaiaitetrererevleDalce%edede$edduceeteaeaarzanzalzrdzelvnivievCuoninuuuquatuttatatortentatouslosisisasr$urigr#rtororherpherrrrcopyntonhononen$nn%ainlininouinomomimllllillcklllllalfalaltablbllalalalikgagiagergmgkgdgifnifereeidididuenclunc&esncerncinc%ancerncarncancalncincusicticieclacfrooeli$ieoontintrinrinpinninminlinlinlin%sinrinlinnlinkinlinlinlinlinlinyhineethnehingindinbinnoutortittiseispisrisnislisuislisbisgisdissraporugurgicaairhifedsciemorarooalracacuselelheltaltaalalvukthtchadua#uaur%gaonaiaia%ririiiiaaea$eaciaiaaaaoiuoi#i#eivsisiisals$es$asoooaithithowowurpoooooo alaioaiolioio%sioionoioiooolooisoiiiiiiteiaightomeoekeeee#aomaiaia$eaiaialeaea#eacrouhieearro#o$iizovvevomut%useost%cerit%ise%ese%asetearert%meaeropaewn$seonrmelldleleknheaheeihethshhechdgrdoundldiducncBa&aca&eca&ica&ega$uuiouiouiou$iueoueoueubesesb%pibCeCeDshDchionsinsalslishtsisgesgsdesdsasearooironrinenieninrighrighligheighhifraf$dgoaoaoahaui$es%quii%osiinni(failailaililiurouar$urenaionrirnlglalfalalbllk&gahleeckeodtudeedaan ofopqqtrrr ssstttuuvf h@w 5  :z5B ry N (| N :zw` u-uux (| 5N :z w B y ww LN x WNef z M@E% F \ v{ >fe& {%%/ u-\H y NeH y NeH | u-u- hzHwL hz w 0Nef y  ww  Dԋ  r e0@  r X a %zbw  f z %@P w A@I#EEFNuwvw fN tf ${%w\w LNtf ${%wBw 2DCԋ Ԕw$w DCԔw w wF:wB: d7Vwf@fw:w:jw f@w fw9w9pwf@U@f@A)wrfw9@e79^U9vwLfw>7rW f@wv9~w ffwV9wR9wN9w f@w49w09w ,9wfw9w9wff*wBJ f@w8w8wVfw8m88w68wm8fw8ww8 fAW @wh8 fj1j7\85 ez|wJ8 5w7L7H7D7@7<7874707,7(7$7 77777 777f&~| & j fw7w7w( f BRfw7fwt7w fw }f@w@7w<7ww C  5!$ABA  D & r@rr @`   BJw8& @N   C 5  N B A @ A- A    BJww D @ C@ppC`pLww C  5!@D  r@rr `  CKwP@  C 5  B A @ A- A C   Kw7QFw C  5!BA  D & r@rr @`   w& BAN   C 5 N B A @ A-  A    w2w "B A@ C@ppC`pw @& BF@`  < T l   ((Floating Exception. /tmp/taXXXXXCannot create temp file. nottyTypesetter busy. Cannot open can't open file can't open file Too many page numbers Waiting for Typesetter. Pipe not created. Cannot exec: %Too many string/macro names. Out of temp file space. Bad storage allocation. Core limit reached. Macro argum((ent too long. Cannot divert. &&&''<'j''''''(,,+.B-,++++>,++++++++++,+--`-Too many number registers. ixcmzvldwIXCMZVLDWDivide by zero. 3D3Cannot plant trap. User Abort.Cannot do ev. if-else overflow. :RIBSLine overflow. Trap botch. Word overflow. ϠException word list full. Zero field width. Cannot open  %nlyrhpctdnmodydwlndlstsbc.'/usr/lib/tmac/tmac.xxxxx/usr/lib/term/tab37\P /dev/catv dsfasVspl8ftDpsBGvsFnr0if:ieb:elD:po6tl"tm7bp7ch6pnx7brvGti5ne.?nf3ce4fip3in4liL>ll:5ns3mk@rt8amvdedi da wh6dt!itl@rm0rrz0rnad2rs3nad3plT6ta>trp?ul?cu?ltv5nx soigtc:4fc`ec,>eo@>lcL4evb9rdZ=ab`BflR9exJssbGfpTFcsRGbdZGlgJGhc&4hy^4nh4nmAnn8BsvBAosjAls5cc3c24em:9af@1hwWmc@pm>$piuf"@pc#htWcf`0 ((.'.hybusqemru141234mififlffFiFldedgscfmaagaulsl*a*b*g*d*e*z*y*h*i*k*l*m*n*c*o*p*r*s*t*u*f*x*q*w*AA*BB*G*D*EE*ZZ*YH*H*II*KK*L*MM*NN*C*OO*P*RP*S*TT*U*F*XX*Q*Wsrtsrn>=<===~=ap!=-><-uadaeqmudi+-cucasbspibipifpdgrnoisptesmoplrgcobrctddrhlh**bsorciltlbrtrblkrkbvlfrflcrc/dev//!;60# ck귎& u}u}  V$ 0  6 >  67*% % w < 5 5 5 5 5 5  %@-A1`@5 e % @ @m&  @ @m  %_5 5 5 5 5 5 E -eu % % eu % % 5 % eu  %fffffff e% @ @m    4umumu umumu umumu u-_%fffffff e"  wR w B D lff*  cff5 le̋w  wf f / w ff %w w Nfef %@ w w  fef % w w t D@wV  4 eZ%4 && %4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .u: BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A~ ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w VDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& L %4 ;#% Q V!V!   & L %S  w@w DE%& L %  wv w b  4e-wTw DD@  <   4 4 ww D  w r< wf p =@+ @ a f  %Tf p &  e   f  4  Հ rw D& R     < & ww  -n wef >@w  p%U7zn%U7pp%nn%fAe vBR7 T55 a  a!RE -%n% w  %e rt 7   `e    %e U? `e 7n%U? a7z rt?lhU ew `DHE wRw BD5  @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef "  ww pN tf p %wfw VNtf p %wLf@w" fww(!wfwww.!w f@www 6!wfwtwp>!wf@wXwTD!wpfw@m<8J!wP,wm&fwJ!w.w f@wwP!w7F@& BFlwcrwc: can't open %s %s total %7ld%7ld %7lddoxfetgNc`slLurDOXU(null)X#X#&!6z%c kO}< hV{{ ((  0  6 >  67 % w  wh wd Z wZ  , L d   4 0 @m7*    d      @m %  P   wj w Z -   wN #    mw  B5 7r d@$ \ d  @]ww  F5 7& @'  d  AA @@ww  7  .*  d    wPw : 7B 7n 7_0 7x_T 7l_ 7`_ 7T_ 7H_2 7<_  5_7_ _p,  d  f5 7 .  d  ; 0  @_p<  d  & & p_n? z d _4_6B V d _@_B  % _pE  d _L_N  %_H  d _X_Z  _pK  d _d_f-  _p  N x d _p_r 7V_Q H d __R ( d _|_~ 7_U  d __V  d ___w> wY 7z  5_4 w_ w_ wt_ wf_ wX_@ Nw  wW 6 d  7_ d __Y  d  7_ d ___\  d _ _ N r5 5  5wh__ Z d __u-__c * d _(_*u-__g  d _6_8u-__k  d _D_Fu-__o  d _R_Tu-__s j d _`_bu-__w Nf 5 w w Nef  w@E%@w nNef    wFw 6   %N f  %N f  %   % ww  u@ ȋ@@ wf f@w D  ̥9Wp @@`e     + -̥0  wRw <Nef J  w*w N tf %w w Ntf %ww DCԋ w@w D  ԋwf@w fwww wf fww wFfww w( f@ww~ w7vF@& BF[]] missingargument expected-o-a!()) expected-r-w-d-f-s-t-n-z=!=-l-eq-ne-gt-lt-ge-leunknown operator test: 6c!kꂌiV o o trap "" 1 15 if test -t 2>&1 ; then echo "Sending output to 'nohup.out'" exec nice -5 $* >>nohup.out 2>&1 else exec nice -5 $* 2>&1 fi c"k'2KRxx bz  0  6 >  67<+ % w J.@ @mȥ- @ @m 7@ @m7 %e r  u-Ne N * 'h!  h#  h% > Hw@h% D  Hw wX w H C  E  %  C- w @w D| x  t    ^ ?R Nw    w D@w  4 el+4 && %4 %  4 E w D  t 4 w & & e Ӌ   &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~  &7 & .e ~ӕ-0 rӕ.f B~ӕeX ӕ- ӕ+ r e0e0Sw Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w r DuNfe& 4%4 ;#%  | h'h'   & 4%S  w@w DE%& 4%  wR w >  fe-Lw0w D@  b  4 4 wf x@w D*\5% %-%+ 5 55 55  B5eA5  %.55  B5eA5   %E%e$%+%-  Wp B`e   @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& e5 55ww  "+U7"+U7"+"+"Ae vB"7 "55 a  a!RE -^"%+ w` P"%J"e rt 74" (" `e "  %"!e U?!! `e 7!+U?! a7! !!?!!U ew D!E ww D5 @ r5N !wP5A vBB-  }ee@ !ۃ `!ւ `@ r ` w fff 5& eww  fff 5& eww  5 %O N  = +555Ne5& e5+55'0Ne5 B& e57  Be0" 5%+55 5 B5@B e+ a=%+7+w %+5 B5Ne5& e55e0%+7`Jʕ0%+ʕ1  %+˕0 ʥ9 w Nef H  ww 5@m 77"ww 5@} ww w7 ww mNA Vee90@ w7vE@whw XN tf x %wNw >Ntf x %w4f@w fwwwD!w f@wwL!wfwmR!wzvwmpfw`R!wXwR f BRfw.X!f@ww\!w7Fw "B A@ C@ppC`pw @& BFAh)h) =(\  AAAAAABBBBBB 6+#c#k%zxx #PZ 0  6 >  67l % w " Wp 1 %,%,Wp Wp ef T  %5@    w>"@f ҕ@c •@n e@ȥ-   w ! f B! 7z N@  w!N @  B %Aet767 0 $ @@E ?tA "'B-tA  -@D& % %%-ҔΔ! ȔteD  tA "% ((% |?t?E l?e w D5_ j4E%@E%_  ee@ f& eC%  7`w`w  _%,_  ee@ f& Jef&Wp @eep Wp @ep \ |>t>E l>tA "% %7 x t %@  9-TZ5-LRՂWp B(@.@  >=E =tA "% %  = = = 7 w8|A ( %%  ==E =tA " =w   f& ef& !eNfl `!%@- N2@   ww DC #3- 3-wl # & w H A @5 5    ADp 5`u`u ff &&A@ e %@mAm@ f&tK@ e wL , e %,Wp  Wp @f&U@ 8 e Wp @f&Z@  eWp Wp N_@Wp Nc@  w   @`ȋ Z  `A`Hww  d: x@h@  7P:J: pww  ::4: z7 ,:ww D̥: ̋̋wzw j 9 z@h@  79 F9 "%7 N7 N 7ڕ N 7ʕ7 ȕt@ĕ N7 N7 N7̥  ̋ ww DB  E  "Ґ%  B- w@w jD  & & !e4  0w8w ( 6ff %ww NeftA J%ww Neff J%ww DA555  ԋNeffe J%ww DC 5 5 _ @ E_ %%_ 5 %*e5  AWp `eu'B 0u%l%h5 %[ N'Be  Neffff e   - @w@ @ EN "5% % % %Nf      %_x@ _fN "5 %Nf  w N%c%s%[Nf ff f& L ew5 5 5 5 %e%f %o%xDe5 5 @ @ EN "% % % %-5 Ԑ@ @ EN " 1 A@  5u%_ N   = _ %+ @ _ @ E 'B8%)%._r %e%E %    Ԑ@ _ @ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _ _ N "%+ %- %0_ %9_ Ԑ@ _T N "_b  @e! _@ @t@]   x@Ne $A _@ Ne $A @H@pHw DC = 5%c%0u5 %s E  "r|@%%c5 %[r|@   E  "%%    =  D- %cw w D ̥^  |@|@ %E%]  |@|@  w>w .|Afef % 2w w D%    | w - -w D@w Z4 e4 && `!%4 %  4 E & & .e Ӌ "A&A &71& Z e 0ӕ-0ӕ0B~0ӕ.  ӕ0~ B~"A&A&70 & e 0ӕ-0 0ӕ.z0 B~ӕel0 ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .u(ABwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AlAҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& \e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r c#k#4%zxxe0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww rDCB &E ( z f (  #̥-%0  E: E:  &E (  z f (  w w DuNfe& !%4 ;#%|A+ *  Z  & !%S  w @w DE%& !%  w w ~ tA ze-+wp w ` D@    4 4 w w D  w  r< wf =@+ @ a f B!  %Pf  &  !e   f B!  4  Հ rw $ D&     & B! w w tA-* w ef >@w D*\5% %-%+ 5 55 55  B5eA5 'B%.55  B5eA5 'B %E%e$%+%-  Wp B`e'B  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& Re5 55ww D  ̥9Wp @@`e     + -̥0  ww  dȜU7VƜU7LȜJƜBAe vB.7 055 a  a!RE -%Ɯ w %e rt 7́ ! `e   !%e U? `e 7pƜU?d a7V NP?HDU ew FD$E w8w (D5 @ r5N Z!w5A vBB-  }ee@ !ۃ `!ւ `@ r `tw ~fff 5& ewhw X fff 5& ewDw 4 5 %O N  = Ҝ555Ne5& ~e5"55'0Ne5 B& ~e57$ Be0" 5%"55 5 B5@B eҜ a=%Ҝ78ҜwH %"5 B5Ne5& ~e55e0%"79`Jʕ0%Ҝʕ1  %Ҝ˕0 ʥ9 w Nef  ww 5@m 7#7#"zwlw \5@} wXw Hw ~w~AupAmNf  w,w  Z~@@5 _  fA rBpu@@`55DCN&  f& }%5 2`D--`f  $`f& 4 %`Df }%5 D-&  C-D-%@@AA@ Nf`  u_Nf  @`5_f 4 %Cww   }DCԒ ww |DCB5ҒS ww tN tf %wjw ZNtf %wPw @DCԋ w6@f@w, fw!w!Bw fw!w!w!Bw f@w!w!w !Bwfwt!wp!Bwf@wX!wT!Bwzfw@!m  679 % ,w b  $ % $ b  $ % $ b  $ b  $ S e%_@ȥ-_e@b _ x <4#  04eN :7Na  % n   % 3d% eN :77 3  %  3eu p3P  % V3 % ewL3N %  w 3ew3 3 72  %%w27 2b2E2@2 2* 2 72 2!  42 2 2E2 `%  7T2*!  @2e<7821!f 5CN3!  ;@ @ EN `%)411 & %& n NE!  1 #e -1‚-1NT!  ~1k! 7x1z!p1 7h1`1|!  N1!D1 7 41!  N  51  5 ! xJ !   0!0!!!!! e# @- f ww Nf!~" eww Nf   ,ww z .e353"  E `#% w<&  % E&   xN C-ӕ # ˕ C-  `%w  3 /  @# u-u-c@ 4 u @4INf e#5 @e5!%3#Nff %  .  .Nf  5  . .Nf  5 ww  u @#@e @A @  w u-w b u>.  4. 0.AEH  .@&E > u-. - -ȕ - > - - -ȕ- > 3-  - -AEH -@&E > u-n- d- `-ȕ V- > wjw Z!6- 7.-&-!   r7-_  _ _ #  , @# = , 35& %5@, @ @m, 5v, 5&f %5@@R, @ @D, 5:,AA@5@# @m5& %5@@-u+AA@5@A# @5&f %5@@@-u!j Nf  @- u-"< ". u-u- u- " Nf  " Nf u-  " " u-u- u-" Nf * "f %"V 3  _@ "_0V* L* H*E<* `%wNw >u@ 5@@@-u-@# @#u u-ކu-@# @ww u@ 5@@@-@#u-@#u u-ރu- @# @wNw > uu   AEH @&E > u-ww ((  ,ww  @@% wuu @#@e @5u@#@e @5A@pu uu @#@e @5u@#@e @5A@pu@tA@xE5w u@ #@ p#  %5 @ # u-w w 4ff %wt w d Nfef (%@ wH w 4 D%    | w  - -w D@w  4 eB94 && %4 %  4 E w " uDAB %u f& & e w 5 5  W- W00u5  .u""BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Af"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E > z f >  #̥-%0  E: E:  &E >  z f >  w w DuNfe& %4 ;#%v"  >5>5   & %S  w@@w *DE%& %  w w n" e-ww D@     4 4 wc$kQojLORUX[^adgj9xxhw XD  wV r< wf =@+ @ a f   %"f  &  ne   f   4  Հ rw ~D&      &  wTw Dn"-  w>ef >@w D  ̥9Wp @@`e     + -̥0  ww AupuN  wA vB w tN wtw d h#X9U7Z#V9U7P#X9N#V9F#Ae vB2#7 4#55 a  a!RE -"%V9 w "%"e rt 7" " `e "  %""e U?"" `e 7t"V9U?h" a7Z" R"T"?L"H"U ew *D("E ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `x!w bNef   wPw : &Dԋ  r e0@  r X a %z#w  f  %@w N tf H%ww Ntf H%ww w w #7vwf@w` fw w #w@fw @e7 $ #wfw 7* ffwX wT wP #w f@w6 w2 w . #wfw w #wf@w w #wjfw m #wJ wm fw #w(w fAW @w fd91d97 5 evwt # 5w7L7H7D7@7<7874707,7(7$7 77777 777f&z & d9 fw#wB fw0 }f@ww#w7F@& BFHR n"v"-dt-dft <Z~LD<JNZ/usr/lib/eignWrong width:Lines truncated to 200 chars.Only file already given.Ignore file already givenIllegal argument:Too many filenameswCannot open output file:rCannot open break char fileOut of memory spacerCannot open fileToo many wordsToo many words in file/tmp/ptxsXXXXXwCannot open output for sorting:rCannot open data: Cannot fork/bin/sort/bin/sort+0-1+1-o%s %s rCannot open sorted data:.xx "/" "/" "/" "/" %s " doxfegcslL(ur,D OX>U(null)@7@7#/  AAAAAABBBBBB !;690 c%k곐"%(+.147:gxgx @$ 0  6 >  67) % <w   e@ȥ-_* w  ~ 76% u F  <%@7d \ t %Z F  < $ $  $  $  $  $ : w f: i p t u xe@ȋ a z$ d$ `$ \$ X$  N$eN  7@$ :$ 8$w 9  z& $ Re9fe(# %De( eJ@e! F  F "De(_D_< F L&E V U&E V A&E V M&E V W&E V T&E V E F E vf F % F  F  F   F E%`E% E vf! F % &&!  e! F eJeJ@e!_ww  N! F ! F ww 5  & " Refe" %De  e @e!N! F '! F 2De((t mX! F ^! F T &E V W &E V L &E V K &E V w &E V `! F d! F j! F n! F Et! F x! F |! F e e @e!w:w *h 2&  Rehfe % De̋ e@e!~! F ! F De_̋ ^ _~! F ! F ! F ! F ! F E! F E" F E" F  " F  " F  " F " F " F " F #" F '" F +" F /" F 3" F ee@e!_Xww zb 5" F  &  Re2fe %=" F Ne&  %PM J&  Refe %Ns" F  & z Re` fed %DeAe@@ r2&  e2AWp2Aae!ww DN" F " F " F  " F " F " F $" F &" F T& E V W& E V O& E V C& E V B& E V A& E V X& E V H& E V "" F " F wpw ` vf& Refe %De&" F %CB&" F %J&H&F&D" F eL" F &Z&X&V&T" e \# F e`# F n)# F er&p4# F %C# F N# F   aS# F %Y# F   a_# F %c(e# F  ak# F %q# F  aw# F %}# F   a# F % # F   a# F %# F   a# F % & &# F ec# F &# F %&# F %# F   a&# F %< &N&L  ef&< &J&H  ef&# e < &V&T ef&< &R&P ef&# e X $ F b$ F d!$ F fEf vf,$ F %ex:$ F w w  tA@`e w w z   & Z RexfeD %De e@e!F$ F U$ F DeE=Nt$ F R&E V W&E V P&E V E{$ F $ F &&$ eee@e!w w $fef r % w w uDAB %u f& & e wd 5 5  W- W00u5  .u$BwF J@B _Z@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A$ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w JDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& %4 ;#%$ L %% J  & %S  w@w DE%& %  wj w V$ e-wHw 8D@ j    4 4 wf x@w  r)U7d)U7Z)X)PAe vB<7 >55 a  a!RE -%) wN %e rt 7  `e   %e U? `e 7~)U?r a7d \^?VRU ew D2E ww pD5 @ r5N J!w>5Ac%k2"%(+.147:gxgx vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww D4 4 e ̋ f ~ 5wvfef %5 @ p-z% @ z%@ z%N A Am@ 5u%  fe eeu  fff Reu ?%uNfe.f %uCe.   e D̋5 %@mAmHe N  _w 0N tf ,%w&w Ntf ,%w f@w0 fwPwLwH%w  f@w.w*w &%wfww %wf@ww%wfwm%w|wmfw%wZw f@ww%w0w D @ C@ppC`pLw7fFw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BFf o _inode_text_proc_dh11_ndh11_kl11_file/dev/mem/unixCan't find %s no namelist %d active inodes LOC FLAGS CNT DEVICE INO MODE NLK UID SIZE/DEV %7.1o %4d%3d,%3d%6l%7o%4d%4d%6d,%3d%10ld %c %d text segments LOC FLAGS DADDR CADDR SIZE IPTR CNT CCNT %7.1o %5u%7.1o%5d%8.1o%4d%4d %d processes LOC S F PRI SIGNAL UID TIM CPU NI PGRP PID PPID ADDR SIZE WCHAN LINK TEXTP CLKT %6o%2d%3o%5d%7o%4d%4d%4d%3d%6d%6d%6d%5o%5o%7o%7o%7o %u 1 kl11 # RAW CAN OUT MODE ADDR DEL COL STATE PGRP %d dh lines %2d%4d%4d%4d%8.1o%8.1o%3d%4d %6d rsav %.1o %.1o segflg, error %d, %d uids %d,%d,%d,%d procp %.1o base, count, offset %.1o %.1o %ld cdir %.1o dbuf %.14s dirp %.1o dent %d %.14s pdir %.1o dseg%8.1o %8.1o tseg%8.1o %8.1o file%8.1o %8.1o args %.1o sizes %.1o %.1o %.1o sep %d qsav %.1o %.1o ssav %.1o %.1o sigs %.1o times %ld %ld ctimes %ld %ld ar0 %.1o intflg %d ttyp %.1o ttydev %d,%d comm %.14s %d open files LOC FLG CNT INO OFFS %7.1o %4d%8.1o %ld jdPo\x*f8egcs*l*LruPrvDTO`XU(null)''x% 6)c&k4 2x2x @ 0  6 >  678 % Nw %@5L kG lA t, v& x5N \7$4  9 " &  N %/@&, #w# #?# # # # #@  - a #O   U " &  Nb p3 X#k d3 ^3  7H# y " &  N 63  7"# & # Xe # % x& " Xe$" % :& " Xe 45 "  " V 5 "" % &  n"  u- X" F"- >" N   V 7  % Nww .    " &  N7 !+ (Nefe  @E% Ne!te$&  !tp$ !fe P e%    7^!  " &  Nww f ff fA@@mAm @ ee@ f& ef& Be5uA@w\w Lt #P5   v5u 0 m m @ v 5u 0 ff0 Xe#0 %% wt55 t55 t55 5  ff e7/w/@mAm@ 7/w/A@e@ 7/w/ @A 7/w//7 ///// @mAm@ e@ 7/w/ 5 h fZ %  DN!&&! V ez#! V +let\M&D&@&E@'! V e 60:! V >! V NF! V N! V _R< >8m8m6@ e@ f& e5u< ff ef&Z! e< fe eff W- a!f! e _ _< e@ f& re5u< ff Tef&j! `e< fe reff W- q!v! "e<  e@ f& e5u< ff ef&z! e< fe eff W- !! e (!_  vee@ 5`u`u  A@e@  f&, Xefe, %%_ Y@e56 =@@me@-55 @ %@@me@-% %~}  R 5 Ne " = Ne !! V _ ff+ Xefe+ %%_De@e!_% eˋ 5 ʕ  %ҕ  ʕ? @e E5% %~%=    !!w F !te$˥t t((yew t-V$ -!w  5 CDe  R  %@ww 4&&&&f e &&&& f e :Am@   Am@  5u ff) Xe W fe) e% w@Ew   u- u-  ww DC 5 u E     u-@wtw dDC 5 B E; &E ` ~  u-@ww  ff %ww Nfef J %@ w w "fef J % w w D@wn 4 e84 && %4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u!BwF J@B _2@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w n DCB &E ` z f `  #̥-%0  E: E:  &E `  z f `  w w DuNfe& .%4 ;#%"M  44   & .%S  w @w DE%& .%  w w z " e-wl w \ D@ B    4 4 w w D  w r< wf =@+ @ a f   %H$f  &  Xe   f   4  Հ rw D&      &  ww "-j wef >@w D  ̥9Wp @@`e     + -̥0  wfw R %8U7%8U7%8%8$Aec&k|4 2x2x vB$7 $55 a  a!RE -$%8 w $%$e rt 7$ x$ `e h$  %P$L$e U?:$:$ `e 7($8U?$ a7$ $$?$#U ew D#E w w D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `,#w PNef n  w>w (D4 4 e ̋ f  5wfef %5 @ p-" @ "@ "N A Am@ 5u%  fe eeu  fff Xeu ?%uNfe.f %uCe.   e D̋5 %@mAmHe N  _w N tf 2%ww Ntf 2%ww DCB ԋ  @whw XDCԔwPfw "wJ f@w4 fw w "wff@fw| wx wt "w f@wZ wV w R "wfw: w6 "wf@w w "wlfw m "wL wm fw "w*w fw w "w f@w w "ww D @ C@ppC`pLww C  5!@D  r@rr `  CKwP@  C 5  B A @ A- A C   Kw7Fw C  5!BA  D & r@rr @`   w& BAN   C 5 N B A @ A-  A    w2w "B A@ C@ppC`pw @& BF_proc_swapdev_swplo/devCan't change to /dev /unixNo namelist /dev/mem/usr/sys/coreNo mem F S UID PID PPID CPU PRI NICE ADDR SZ WCHAN TTY TIME CMD PID TTY TIME CMD /devrCan't open /dev /dev/swapCan't open /dev/swap %2o %c%4d0SWRIZT%6u%6u%4d%4d%5d%6o%4d%7o %-2.2s %2ld:0%ld%ld %2ld:0%ld%ld %2ld:0%ld%ld swapper %.30s %.60s %.30s %.60s??Bd(o4xfe gcslLJu(rND,O8X`U(null)66"  68c'ka hww :! 0  6 >  67 C % w J < n   %  @ @me7> T5 _ve@ȥ-Me@h ; x %Wewj! N h>Ke@ 7@e@ 75e@ȋ7*>* ">& >#N 7@ȥ+ e@ 7= Nf  = %  &  ww  === |  ww  ==~= |  ww  7X=NeL=  @E7<=2= | wvw f =7  -B H%H- ,  <N JNH  %_>Nef   "Ne    @[ 7Ne 22;7  D"wp> ;V `S < V ;n >d %D">V <>7 : ;#z;tee\ feF P e @eF5D@D D `D 6; `-f: ; ; : ; 7wLw <D-e-:)s   : 1"?:? ::0? :% |: u  ww  B-B9 _% %   <  9% _ 7>z9 4:_  p>>  <%   - -=9 - -% * `% 7! 9 `   99 `m9 7! ` `-48ww ^<%H & Je& ˕a%<D"˕ wZw JB 84 "?   @"? "?E "? %? ? 8 w %  Z  e>E% E% %<D" w  D8>87 :8N < 88!    5  7 wT7 %    w &C 7  % N 7K '  ! 3 7 97 7 7 6'7U-zt 7p7  b7 \ \7 7 V7 %N7 H7  <7%  , w|w l-77   f wLw <DC 5 u E     u-@ww DC 5 B E; &E ~  u-@ww  ff x%wvw fNfef %@ wJ w 6BuNefef % = Ne& @ww D@w 4 ePC4 && h%4 %  4 E w D  " t 4 ww uDAB %u f& & e w5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  ww Du((Nfe& %4 ;#%   L?L?   & %S  w @w DE%& %  w w   e-dw w p D@    " 4 4 w w  D  w  r< wf R=@+ @ a f J  %h1f R &  e   f J  4  Հ rw 4 D&      & J w w  - w ef >@w LN  WNef  M@E% F v! J >fe& h%%/ u-v!dC d NedC F NedC  u-u- dCw   w D  ̥9Wp @@`e     + -̥0  w w N  w w Ne < f ef&@ 5uNe &w/%J %K  tl  t5n   N  5   %D-D-% eu Ne & w w DC%: ~e`m e rfwp w ` Q@f& e5uQ@f& e5u eeQu  C< ff <eR< ff LeC r<R r< A@c 'k hwwepe@ f& ew/ F ~ 5 $u  ~ 5u F  ~ 5`u`u 6/D72/ ~%n   |!  0!|!  7 .Cww C!ԔAA WpCe!CԔԔԔ BeWpCe!ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  Cww A r nwmw D % A r  r e0@ԕ A r e0@ww  -CU7-CU7-C-C-Ae vB-7 -55 a  a!RE -R-%C w$ D-%>-e rt 7(- - `e  -  %,,e U?,, `e 7,CU?, a7, ,,?,,U ew dD,E wVw FD5 "@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `+w Nef ,  ww tN tf %wjw ZNtf %wPw @DCԋ Ԕw2w "DCԔwfwn wj !wp f@wZ fw> w: !w:f@f@w !w fw ww"w f@www  "wfww"wf@ww"wfwm"w`xwmrfwb"w>wT fAW @w< fC1C705 e&w$" 5w7L7H7D7@7<7874707,7(7$7 77777 777f&* & C fww*"wR f BRfwV0"f@wDw@4"w7B&Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFHB= ,,,&,,,,,,,pr: No room for columns. rpr: can't open %s %s %s %s Page %d rpr: Too many args d o xf ft eV g0 cB sf lf L u r D O X U(null)NANAt!/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec6C0#c(k2!?ww v6  0  6 >  67X, % w 5 % r5 _N,  @5 n7% N% <  n5 % %p-F  %_ _Z tz& ^ %z& D 7r%l%f% < _h 5 5 z&'%zU%ZU%9U%a%A%0U@ 5%%%%%%%%% (%$%   p tz& ^ z& v5_&~ _^ tz& <  _^Ne   5`u`u @E5A@vE@55 @@me.5%9e%Ze@@mp %Nez& D 7z#         !_^   9! 4 5+;!_^##""&"& "&"&"&"m!f Pe 07""N" <  05"p-Y!   wZ N    v 5!  5!&f %5&f *%w  !! 4 5&" f t   5Ne@&  uENe@&  N6" P ,%%,Ԑ@ @ EN %  !6" P uNe@&  N  %&"N  ,ww  @ !! 4 7,& ww    7 ww D̥: ̋̋wtw d  !! 4 7 F, %7f( 7\(  7L(  7<(7 :(!6( 7,( 7"( 7(̥  ̋ .ww DB  E  Ґ%  B- w|@w dD  & & Je4  0w2w " Vff ~ %ww Nfef %@ w w ."fef % w w D@w 4 e.4 && %4 %  4 E w D   t 4 ww uDAB %u f& & e wf5 5  W- W00u5  .u!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w LDCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& *%4 ;#%."   ((   & *%S  w @w DE%& *%  wl w X &"  e-wJ w : D@     4 4 w w D  w  r< wf X=@+ @ a f v  %f X &  Je   f v  4  Հ rw D&      & v w w &"-& w ef >@w d " v  Wpf&  Je. %% wR   .ҥ ".w $      w /&    " v 5 N   < N N w .&f %% w .̥ %. w ^ LN  WNef  M@E% F " v >fe& %%/ u-". ^ Ne.  Ne.  u-u- .w   w D  ̥9Wp @@`e     + -̥0  wL w 8  b#@m4/~#@m4*/ %  5 // %w5 +/*/ %w #  Wp0`@#p /F/Wp0`@#p /^/ % %ww  "@m3v2 %((@5 @5u 22 %  AWp0`AF/@F2A2@x32 %0 WpDt2Wt@`2Wt@`2Wt@`2 @`2@`2Wt@` $utE42tE42 E42E42 % v2 &A2@x32 %  2v2 %  %_ Ĝv22v232 %  @`"#Hu2 %@w"w   4&3 %B %@  tE4&3 % B&3  4&3 %B 4#F2 %0 B h3%Z%9.  t5Wpc(kj4!?ww`AF2uWp`eF2fWp`^^2Wp`q^2 % %  &3  %   Wp`A&3BP %e.%9e%Zej3 % 4j3h3ww  z3U7x3U7z3x3Ae vB7 55 a  a!RE -`%x3 w: R%Le rt 76 * `e   %e U? `e 7x3U? a7 ?U ew zDE wlw \D5 @ r5N !w*5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf $%ww pNtf $%wfw VDC ̠ԋwHw 8DCԋ Ԕw*w DCԋ w@w DCԔww D  ԋww ww *&7wf@w fw`w\0&wjf@wD6&wN fff@fww w:&w f@w w w B&wfw w J&wf@w w P&wfw m V&wz wm~ fwn V&wXw` fAW @wH f3137< 5 eRw* \& 5w7L7H7D7@7<7874707,7(7$7 77777 777f&V & 3 fw w b&wl f BRfwb h&fwT l&w( f@w: w6 p&w74F@& BF/etc/passwd/etc/ptmpUsage: passwd user Changing password for %s Permission denied. Old password:Sorry. New password:Password unchanged. Please use at least one non-numeric character. Please use a longer password. Retype new password:Mismatch - password unchanged. Temporary file busy -- try again wCannot create temporary file Permission denied. %s:%s:%d:%d:%s:%s:%s Temp file disappeared! Cannot recreat passwd file. /dev/ttyr /etc/passwdrr d o xl fz e\ g6 cH sl ll L u r D O X U(null)**"/etc/utmp/etc/ttys/dev/:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 1991)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                                     !630# c%)k0Y\_behknqtwIwIw @lL 0  6 >  67h% % w  e %D̥- _4 xTa e !!!% @ȥ+  f % N"   e %N Q h oU  dU Ux  cUf -` Z ̋ bU F    p,l!|!' % 2   7` w` w  l! He+  vNl! 4e5    pl!|! % % 0 l!  e     ww =J` ff e B 8 4         + @m&  @ !  ?  @ !  D-  w w  @   ! ' Fw Nf& e N  N Nu@      @  Nu@&E& e     @&Ew E%1%-5  `V R x 8 < @ D H L  w f @ ۃf ew h EN ff ff ef& ef ff eD%   eWe0? ~ &eW n &e0 ww  u F < 8  - ww D̥+ ̥x  x eF ̥0̥02ӥ. "ˋ5 5 %9G ff Teee@ ee@ 5u ̋'̥. ̥b̥B  fe " e ff ew ww%0%a%f%n ff\ eee@ eew ^D ^ff %wLw <D_% U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w|  N ff& e5u4 # 4  N ff& e5u%%w DC 5 u E  .    u-@w w | DC 5 B E; &E ~  u-@w, w   fef % w w D@w  4 e%4 && %4 %  4 E w ( uDAB %u f& & e w 5 5  W- W00u5  .uP BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  w"w DuNfe& P%4 ;#% =  !!   & P%S  wF@w 0DE%& P%  w w   ^e-ww D@  @   4 4 wnw ^D  w\ r< wf =@+ @ a f   %hf  &  e   f   4  Հ rw D& V     @&  wZf d@w < %U7%U7%%Ae vB7 55 a  a!RE -T%% w F%@e rt 7*  `e   %e U? `e 7%U? a7 ?U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w :Nef &  w(w N tf t%ww Ntf t%wf@wN fww>!w.fwwwD!w  f@www L!wfwwT!wf@wjwfZ!wfwRmNJ`!w|>wm8fw(`!wZw f@w wf!w0w D @ C@ppC`pLw7Fw rC  5!BA  D & r@rr @`((c0)kT4Y\_behknqtwIwIw   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFZ`xlfrrcannot open %s * \0 \b \f \n \r \t d o x f e gx c s l L u r D O X U(null)##ADGJMP$w$w d 0  6 >  67% % w  E@-?:e- x r!' p!$ h!!| ^! \!@g @" $! x% e@ȋ  @< u_ND $! x%_B ef \ 7  7  " e%e _,  &  e  &%Nm  5   " e%^ %V % N %F _> m: @ 5u54  fe eff e r ' !%%% %NX _Ns $! x%_ _ fe e V5 _@E       a 1u ct dbfr %u55 e  Wp Nf  5 N $! x% Wp Am@AePPPPPP _t \  &f e B% 6  .!N   M  N  !N  Wp AmB %u%U  Wp AmN     Wp AmN  ! N  d & _| @  _  ww  @Ap, (" wr@Ap,  @aAaH @aAaH % w " f eN! e w5ew N mm@ 7ww D_% U RNuu & & :ef& 5`u`u  5u   5 u  5 u Lmt w N ff& :e5u4 # 4  N ff& :e5u%%w N@ 0 @ & @& :e5u #A@w@  @A@@ 5`u`u w DC 5 u E     u-@w\ w L DC 5 B E; &E ~  u-@w w ff f%w w Nfef %@ w w !fef % \w w t D@wV  4 e$&4 && %4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A !ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w V DCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& %4 ;#%!   " "   & %S  w@w DE%& %  wv w b! e-wTw DD@     4 4 ww D  w r< wf @=@+ @ a f f  %Nf @ &  :e   f f  4  Հ rw D&      & f ww !-, wef >@w  :&U7t8&U7j:&h8&`Ae vBL7 N55 a  a!RE -%8& w  %e rt 7  `e   %e U? `e 78&U? a7t ln?fbU ew `DBE wRw BD5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww pw bw^AupAmNf  wTw D 6@@5 _R fA rBpu@@`55DCN& V f& %5 2`D--`f V $`f& z%`Df %5 D-& V C-D-%@@AA@ Nf`  u_Nf  @`5_f z%Cww  DCԒ ww DCB5ҒS ww N tf %ww Ntf %wxf@wNc>*kt258;>ADGJMP$w$w fw w !w.fw w w !w  f@w~ wz w v !wfw^ wZ !wf@wB w> !wfw* m& " !w| wm fw !wZw f@w w !w0w 6D @ C@ppC`pLw7F@& BFtnznm: invalid argument -%c a.outrnm: cannot open %s nm: %s-- bad format %s: nm: %s-- no name list nm: out of memory on %s %s: %s:%s: %06o %c %.8s dz o xT fb eD g c0 sT lT L uz r D~ O X U(null)"$"$!6H&cA+k}| #&),/iVww  > 0  6 >  67' % w   %@-   ~5 e%    N Ne@& > @.# &4!  e w w x DC  @; f d 5wJ w : Nfef N%@ w w uDAB %u f& & e w 5 5  W- W00u5  .u& BwF J@B _6@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aj ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E d z f d  #̥((-%0  E: E:  &E d  z f d  w w DuNfe& , %4 ;#%z  ##   & , %S  w(@w DE%& , %  w w r  e-bww D@ F   4 4 wPf x@w 2Nef > w*w  ! 5!!/f v 0!@Nexf& D%@ 6   D<w1!x@ex5zv%v v@v @aAv AmpzNex!  %ч Nfex      w DCB̥:̥-̋ ҕ/Ҕˋ ̋ w w DV &  w w DC ԥ==̋ ww v5  5'  N f N wB u-uuh f 5N w '  ww D  ̥9Wp @@`e     + -̥0  ww z 'U7'U7''Ae vB7 55 a  a!RE -%' w %e rt 7x  l `e \   %D@e U?.. `e 7'U? a7 ?U ew @DE w2w "D5  @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r ` w xNef \  wfP w BA@I#EEFNuw&w N tf %w w Ntf %ww DC̠wԋ f@f@w fw w"#wxfwww#wX f"wB ffwm#wwmfw#ww~ fAW @wf f(1(7Z5 e wH# 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & ( f@ww#w7F@& BFusage: nice [ -n ] command %s: %s Fd,o8xfegcslLNu,rRD0O<XdU(null)%%!/bin/shPATH:/bin:/usr/binsh|!!!!!!!!""("4"F"V"h"t""""""""" #!#2#A#P#h#u######Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large;6*(0cK,krvv   0  6 >  67+ % V w |%  @ 7h' @  ( 7D'.   .'(' @`&    ' @` & @` A &  G  n&"&&N  & \ &&  X  |&  _ d w\w L 4  R % n f %q  V ww D    0ww    |  7 ww  |v 7 nww DC  ̋̋ww t <  |  7( B+ B%7V+:&  7F+:&   70+-,+:&   &  -,&  ̋ -ww     5  f    5Ne@&  uENe@&  N !  .%%.Ԑ@ @ EN J%    !  uNe@&  N  % N .ww D  z3! 0ww  x    7d^ wtw d NH 7 @wZw JD̥: ̋̋w8w (     7 F. B%7+ n7+ n 7+ n 7+7 + + n7+ n7+ n7+̥  ̋ 0ww vDB  E  JҐ%  B- w@@w (D J  & & e4  0ww  Vff  %ww Nfef R%@ w w !fef R% w w nD@wP 4 e04 && .%4 %  4 E w D   t 4 wvw fuDAB %u f& & e w*5 5  W- W00u5  .u BwF J@B _: @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w  DCB &E h z f h  #̥-%0  E: E:  &E h  z f h  w` w P DuNfe& %4 ;#%!A  ''   & %S  w @w n DE%& %  w0 w    e-w w D@ J  R   4 4 w w D  w  r< wf =@+ @ a f   %Hf &  e   f   4  Հ rw D& h     R&  w w  -^ w ef >@w T !-^X $N :f %! % :& %! %ww D  ̥9Wp @@`e     + -̥0  ww   2"@m40N"@m40 %  l"5 00 %wm"j"5 00 %wk" j"  Wp0`@z"p01Wp0`@"p0(1 % %ww  !@m3@4 %@5 @5u `44 %  AWp0`A1@4A_4@x34 %0 WpDt4Wt@`4Wt@`4Wt@`4 @`4@`4Wt@`"utE44tE44 E44E44 % @4$A4@x3`4 %  4@4 %  %_ Ĝ@4`4@43`4 %  @`!H?4 %@wlw \  44 %B %@  tE44 % B4 6 44 %B 4"4 %0 B 25%Z%9.  t5Wp`A4uWp`e4fWp`^(4Wp`q(4 % %  4  %   Wp`A4BP %e.%9e%Ze45 % 445###25ww  #D5U7r#B5U7h#D5f#B5^#Ae vBJ#7 L#55 a  a!RE -#%B5 w #%"e rt 7" P" `e "  P%""e U?"" `e 7"B5U?" a7r" j"l"?d"`"U ew D@"E ww D5 @ r5N !wt5A vBB-  }ee@ !ۃ `!ւ `@ r `!w Nef   ww N tcV,krvvf %ww Ntf %ww DCԋ w@w ~D  ԋwvf@wL fw w'w,fw@e74'wff@fwww'w f@www 'wfww'wf@wzwv'wbfwbm^Z'wBNwmHfw8'w w* f@.w f@w fAW @w fN51N575(( ew' 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & N5 f@w.w*'w7F@& BFusage: newgrp groupname %s: no such group You do not exist! otherSorry Password:Sorry setgid/bin/shshNo shell! /etc/grouprr/dev/ttyr /etc/passwdrrJd0o<x f egcs l LRu0 rVD4O@XhU(null)))!Unknown error: :2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 1991)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                                     B%J%T%n%~%%%%%%%% &&.&:&P&b&n&&&&&&&&&''.';'Q'`'l''#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large;6v50c]-kxvv   0  6 >  67Z % w K i& sC@  % N 2e@ȥ- a " %d@ . 5u   p#7e   ww   f  7| N  % lw7 `N/ * 0 ezet57 " ~& e w- te~ R %ew-݂ 0 #7  ~& e w- te~  %ew-~݂7 xw-n҃ ~& e w-P Jte~  %ew lDE%@ #%dE%` E% 5  Ѳ#  ww DE%@_ &e ~# %5 5  dt- c 5u  Xfeff e t-At- @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E l z f l  #̥-%0  E: E:  &E l  z f l  wbw RDuNfe& l%4 ;#%;     & l%S  w@w pDE%& l%  w2 w  e-ww D@ N  p   4 4 wf x@w D5 5  "̥9/&  ff 8eee@ ee@ 5u     + -̥0 A@  wA@w  U7U7؞ؖAe vB7 55 a  a!RE -J% wz <%6e rt 7   `e   %e U? `e 7U?ʙ a7 ʤ?U ew DxE ww D5 @ r5N !wj5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef V  ww CB  D-ww CB  D-ww N tf %wxw hNtf %w^f@w fww ww f@www wfwwwf@wwwzfwmwZwm~fwnw8w` f$f@wFwBw7Fw "B A@ C@ppC`pw @& BFncheck: bad flag %c ncheck: cannot open %s %s: %u /%.14s/. ???.../%.14sncheck: out of core-- increase HSIZE ncheck: read error %d ncheck: %u - huge directory Nd4o@x f egcslLVu4 rZD8ODXlU(null)6ch.k~vv  8 0  6 >  67% % .w 0  `  `  `  `  ` %  4  .eN  D  .w w  5z @aȥ/ @aȋ ffez % @`ez& fez  Nez N1  4%h Af %    &f B %Nfe R fe Nef NeU  4%*l fe Nefez Nen  4%Ne  @a0Ne & N & wH w 8 Nfef d%@ w w  uDAB %u f& & e w 5 5  W- W00u5  .u BwF J@B _L@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z z f z  #̥-%0  E: E:  &E z  z f z  ww DuNfe& @ %4 ;#%  > ((!! <  & @ %S  w&@w DE%& @ %  w w   e-ww D@ \ h  v 4 4 wNf x@w 0 n%U7`%U7V%T%LAe vB87 :55 a  a!RE -%% w %e rt 7   `e    %e U? `e 7z%U?n a7` XZ?RNU ew D.E ww D5 v@ r5N <!w5A vBB-  }ee@ !ۃ `!ւ `@ r `~w .Nef  ww N tf %ww Ntf %ww DCԋ Ԕww DCԔww DC 5 Ԕ B- B-@wvw fD  ԋw^w NwNwJ t!7tw:fw0w,w(z!w f@w f/f/@ff@fwww!w fww!wx fwww!wR fwzmvr!w0fwm`fwP!wwB fAW @w* f%1%75 e w ! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & % fwv!w( f@w\wX!w7HF@& BFmkdir: arg count .mkdir: cannot access %s mkdir: cannot make directory %s /.mkdir: cannot link %s .mkdir: cannot link %s \dBoNxf*e gcslLduBrhDFORXzU(null)##r!!6 %0 cq/k' uu  pP 0  6 >  67d% % w 5  &7fe&  %%/ u-:!% h Ne% J Ne% u-u- %w w  %U7%U7%%Ae vB7 55 a  a!RE -R%% wj D%>e rt 7( :  `e    : %e U? `e 7%U? a7 ?U ew DE ww D5 &@ r5N !wZ5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef 0  ww N tf %ww Ntf %ww DCԋ Ԕwxw hDCԔw`fww@!w, f@w f@wF!w fwnwjwfJ!w fwPwLR!wf@w4w0X!wfwm^!wpwmfw^!wNw fwwd!w( f@wwj!w7F@& BFcannot statis y is n usage: mesg [y] [n]mesg: %s cannot change modeFd,o8xfegcslLNu,rRD0O<XdU(null)##8!/dev/6%cy0ki03KNQTWZ]`cfiuu -`d 0  6 >  67R % w F-NeC  @ &@ + 7:N ( l5@"NwNN '    d &  %@@  7M @@C \% @ȥr%@-Nf HNf wt,w d,f * %Nf * wJ,w :, ( n*HM@$@ %U@-Sq @p M7 >7@f%+@$@ ' e @rL@@C \% e %@$@  7rL @C \ _B$@ PLNL  DL ~:L ~ @@  7 L7 &L5 -n=P L@Z=@ 5N ' 5  Cf h% K N '@C \ C C`F X% :C r yn@7 tK pK wL*  CC AAaF %aF*hNAC \% AhN  7KwBJf h%J ~NhN  5 5_5 oB_eB_ YBA_aF hNf   NhN  5 _AWpddG LJ_aF 4A _AWpddG "J qA_8_  _ _4@C \ 5 @C \ @C \ AC \  AC \ &AC \ CAC \ UAC \ _AC \ sAC \ AC \ _  _F _ _8 5 @_N @_NA  5 _ _ _F __ _ _  _w ' 5  *  *  * $@ Ne$@ J+ 9Wpu,`Gu,bGvA$@  72H $@AC \%  r9Wp@bG`Gf&G eG ~A@  7G 49Wp@bG`Gf&G eG  G %G ~G ~A@  7vG 88Wp@pbGp`GA$@  7FG hNAC \% *  Wp@ddG G& h% -^8F ~ BC \ w%w % u5w 87 z?7 x?&`E ~ 8Wp 7@pbGp`G`E ( 5`u`u N`E  N`E X% 7Wp@pbGp`Gw*%w % AWp@bG`Gf&F eAWpAhGCpbGuE 5% %Nf  @ %%d7%Bf \%+%% NE  &  wd$%Z@f \ %Nf  @ %N2E 4 5&w $Df@ˋԤ w#w #N j+N Df@6BD \eD J7DwDD.v; o;!`E ~ D>B  D`E  7 DC`E X% hD@B  57 =7 =LD J7=w=@8@(@ R( 7 *@ww 5 5 @@mAAmH @@mȋ5 @@mAAmH @@mȋ@@mww DC ˥ ˥ ˥ ˋ wp˥ ˥ ˥ ˋԔ w @ F f '  Tw&w D  z3! 0ww  3 ZCJC  733 ww  33 ~7 3ww D̥: ̋̋ww  Z3 \CJC  7F3 F<3R X%7D 7D  7tD  7dD7 bDVC^D 7TD 7JD 7@D̥  ̋ Tww @  @ EwN w @  @ HwNf , w Ne )  wtr@@r@@ # (r  (  ( fiCfC^C (e )% T (N&  w @ ~ * 5 * 5 * Ne + T%%N * N *  * @w:w *DB  E  Ґ%  B- w@w DC  @; f , 5ww D_% U RNuu & & )ef& 5`u`u  5u   5 u  5 u Lmt w N ff& )e5u4 #c0k6f03KNQTWZ]`cfiuu 4  N ff& )e5u%%w 8@ 0 @ & @& )e5u #A@w@  @A@@ 5`u`u w D  & & )e4  0w^w N 5 fwCtClC (e ) *  * Ne +5@-%% *  * @ww  ff %ww D   w&3 s a r+ՀwR& f )ew &Nfef %@ w  w Cfef % *-w w BuNefef % = Ne& , @ww tD@wV $4 eT4 && *%4 %  4 E w D  % t 4 w|w luDAB %u f& & e w05 5  W- W00u5  .uzCBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ACҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E , z f ,  #̥-%0  E: E:  &E ,  z f ,  wfw VDuNfe& +%4 ;#%CG( & NN $  & +%S  w@w tDE%& +%  w6 w "C ~e-'ww D@  (  % 4 4 ww D  w r< wf =@+ @ a f )  %n3f  &  )e   f )  4  Հ rw D& (     (& ) ww C-d& wef >@w Z d hD )  Wpf&  )eU *%% w ( 6Uҥ "Uw   Z Z  Z w/& '   rD ) 5 N   ' N (N (w d"U&f *%% wP $U̥ %BU w (LN & WNef 6) M@E% F |D ) >fe& *%%/ u-|DBU ' NeBU ' NeBU J+ u-u- (BUw|  ( w b D  ̥9Wp @@`e     + -̥0  w w  N  X#w w Ne +< f ef&@ 5uNe !w/%J %K  trC t5tC ! N ! 5   %D-D-% eu Ne ! w w DC%: $e`m e rfw w Q@f&  e5uQ@f&  e5u eeQu  |U< ff eR< ff eC r<R r< A@epe@ f& J ew2 F $ 5 $u  $ 5u F  $ 5`u`u z2D7v2 $%n^!  D  0!D@! 7 <2|Uw: w * bUDԔAA WpCeDbUԔԔԔ BeWpCeDԔԔԔ& 8$ ed& 8$ ed& 8$ ed& 8$ @%d 20e@ ed& 8$ bUwz w j A r nw` mw J D % A r  r e0@ԕ A r e0@w w 1UU70UU70U0U0Ae vB07 055 a  a!RE -0%U w 0%0e rt 7l0 $*`0 `e P0  $*%8040e U?"0"0 `e 70UU?0 a7/ //?//U ew D/E ww D5 %@ r5N $!wv5A vBB-  }ee@ !ۃ `!ւ `@ r `/w Nef h'  ww  Dԋ  r e0@  r X a %zDw  f .( %@P w `A@I#EEFNuwDw 4N tf t)%w*w Ntf t)%ww DC̠wԋ w DC ̠ԋww DCԋ Ԕww DCԋ w@w DCԔw|w lD  ԋwdw Tww D7p(w@fwwEw fwwwEwp f@wZ fwXwTEw:f@U@f@A)wfw@e7)Ewf@fw7j, f@wEw fff@fwww Ewn f@ww~w z(Ew@fwbw^0Ew"f*wBJ f@w(w$6Ewfwm  rmail: cannot reopen %s for reading wmail: cannot open %s Mail saved in %s null name mail: can't create proc for remote mail %suux - %s!rmail \(%s\)uux - %s!rmail %swmail: can't send to %s amail: cannot append to %s %s busy; try again in a minute /etc/passwdrr/bin/shsh-c/bin/shsh-cdoxfegcslLurDOX,U(null)PP((fD/etc/utmp/etc/ttys/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec/!;6U0#< c1k 4   @+2 ) 0  6 >  67r % #w *B@@ @@ 7k@@ 7k@@ 7k@@ 7k@@ 7k@@ 7k@ A 7|k@A 7lk@A 7nk@A 7^k@&A 7Nk@-A 7>k@5A 7.k@>A 7k@CA 7j@JA 7j@PA 7j@YA 7j@`A 7j@gA 7j@nA 7j@wA 7jCe 2( % 2(  2( % 2( {A %78j 2j &  &%?:> 6>2I-D>,> &>">d> @  T> @@ @E>> @  Q &> > @ " >> 7@=%_ e= %HH@= @ "@ȥ-= HH@Af ^ = 1@NAXH z% @_-F=.= (=$=f= @  V= @@ @E@= @ @%%?< < 2I T _e@e AXH z  <@e7<e<@e-< AXH z ~<`< ~?X< T<-hl: H: D:Z: -P:8: 2:.:p: @  `: @@ @EJ: @ % % % 9_R%)89 9 )?9 99@ r 9 \ 9799@e-9_V7 9_Vl9 h9_V%,t9%?N9 J9F9-Z9B9 <989z9 @  j9 @@ @ET9 @ % % %  9 AXH z d wD#w 4#7 d w4#w $# d 2(  2(  @< @ "Rdeap Hd(A:d ^ @ @  @PH E   "c ( % cac (c #w^"w N"2I 7%k7 AXH z ̋"?7 7 77 7EH7 7&E ̋w!w !DӋ %@[V7BXH z <7 87!w!w !D-bN& w!N& -b-b f& % -b-b N& N& ~-b-vb N& N& r-Zb-Vb N& N& x-:b-6b N& N& ^-b-b N& LN& -a-a N& `N& _x -a-aN& j_x N& l _x -a-aN& . _x N& & _x -la-haN& _x N& _x -HaӋ’e % B- a $P5 L5-_z -w D7 a_j 7`a̋` rw`@ I DԢӋwp rw RN T  + # +BXH z  #N N 4x` 4Il` 0Iw $N 4w %*@ T  !&` I!` 0I 3!3 $ $ $ww pD &  # CBXH z  #wDw 4%@@& v& @[BXH z% @% uB@& ww %@ T @%@ ww @ && `%ww p% @7d27`2% @7J27D2`<2'82w8w (vBXH z w"w  @  3eN T  &BXH ze5 @ I &BXH ze  %ww  %@ @& @&@&@&@&XH ze BXH z wHw 8 @7] H ]] @BXH z%ww  5@ & - 11 ^1wp1p@B@& ^ 1 1@ @BXH z% b Z1ww | @ wrw b  @ % wRw B%@ e@ f& %w&w  -   A@  5u ff :ee0@?X0 T0 ff >e5u  %--"0 0ww  %>%@ P5@ &@&  & b & | A@l &f b `?/ / w w %@@& 0 & %ww  uCBҤ ʋ%@@w w  %C%@  ̋ 5 @ˋ̢  %@@ʋ̢ ˋ ̋@ ww D%& v& e%  ww D%  P%  7 4.Yeap @ BY ^  1@- 7@-w<w , T% _H--H @C @ "dYeapBRY ^  -- - - z- E   "X ( 0 @ [eN P%N% K--H @C @ "XeapBX ^  ,, ,c1k 4   , , E   "@w J >OrU70OrU7&Or$OrOAe vBO7 O55 a  a!RE -N%r w N%Ne rt 7N 'N `e N  '%rNnNe U?\N\N `e 7JNrU?>N a70N (N*N?"NNU ew DME ww D5 $@ r5N #!w5A vBB-  }ee@ !ۃ `!ւ `@ r `NMw HNef \&  w6w  jDԋ  r e0@  r X a %zHw  f & %@w N tf V'%ww Ntf V'%ww DCԋ wz@w bD  ԋwZw Jw4"w0" H7 Jw6f@w fw"w!Hwvfw!@e7!K!HwPf@fw87K ffw!w!w!Iw f@w!w|!w x!Iwfw`!w\!Iwf@wD!w@!Iwfw,!m(!$!Iwv!wm!fw!IwTw fAW @w fs1s7 5 e(w "I 5w7L7H7D7@7<7874707,7(7$7 77777 777f&( & s fw( (Iwn fw\ }f@ww,Iw0w D @ C@ppC`pLw7ZGFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF(`'[@K@K@KPHPHHHunixmaketempifdeflenundefineshiftchangequotedefineevalincludesincludesyscmddumpdeferrprintincrsubstrindextranslitifelsedivertdivnumundivertdnl/tmp/m4aXXXXXrm4: file not found: %s m4: arg stack overflow m4: call stack overflow m4: EOF in string m4: unexpected EOF rm4: argument overflow m4: pushback overflow m4: no space for alloc m4: no space for alloc m4: %s defined as itself m4: shift not yet implemented `%s' `%s' `%s' `%s' m4: invalid expression in eval: %s rm4: file not found: %s wrrn  !  (   !"#$%&'        /!(-+|&+-*/%) (6BRbt(hstate %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d /bin/shsh-cd|oxVfdeFg c2sVlVLu|rDOXU(null)ppH/!;6,s0 c2kؽ#LuLu 8  0  6 >  67* % w V&< X >  >  h h h&& " #%@{%&&  N  % 5  & %% @&& %5 %,&  ~ v E n ! 5% % _% %$&݃T >& x7$ $ P$  & F $&    b$ f $& $ V55 ~ 5+ AWpf& f <e/f % && %&f f%N  ! ~ 5& f <e&f f%N ##&f %t# h# (\#  P':B#&B %/,#& Z # 2 x  X N " x  4 Ne      >   >  2 "& %!  ww  > ^"ww   > #!! J 5* ,"# ? !& @ @ EN %N 2  > wBw 2 /!&! J 5! f   > 5Ne@& " uENe@&  N! f 0*%%8*Ԑ@ @ EN %  1!! f uNe@&  N > %!N 2 0*w*w  " f   0ww   D!4! J 7~ ww  nh 2 7 `ww D̥: ̋̋ww  2 F!4! J 7 F:* %7% 7%  7%  7%7 %@!% 7% 7% 7%̥  ̋ <,ww DB  E  Ґ%  B- w@w D  & & <e4  0wXw H Vff %w<w ,Nfef %@ w w !fef % w w D@w 4 eN,4 && %4 %  4 E w D   t 4 ww uDAB %u f& & e w5 5  W- W00u5  .uH!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w rDCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& f%4 ;#%!a  ,&,&   & f%S  w@w DE%& f%  w w ~! 2 e-wpw `D@     4 4 ww D  w r< wf n=@+ @ a f ~  %,f n &  <e   f ~  4  Հ rw $D&      & ~ ww !-~ wef >@w Nef  ww  >" B5C"/f < R"@Nexf& %@ 6   w4S"x@ex5zv%v v@v @aAv AmpzNex6"   %ч Nfex  N     w DCB̥:̥-̋ ҕ/Ҕˋ ̋ wd w P D & j w< w ( DC ԥ==̋ w w 5  X5b,  N > N Xw u-uu > 5N X w t b,  wn w ^      w@ /& Z   V" ~ 5 N    N N w h,&f %% w j,̥ ((%, w LN  WNef  M@E% F `" ~ >fe& %%/ u-`",  Ne, x Ne,  u-u- ,w   w D  ̥9Wp @@`e     + -̥0  w w r  "@m4,#@m4, %  R5 ,, %wSP5 ,, %wQ #  Wp0`@.#p,,Wp0`@F#p,, % %w w  f"@m30 c2kZ#LuLu%@5 @5u 00P0 %  AWp0`A,@/A/0@x30 %0 WpDt0Wt@`0Wt@`0Wt@`0 @`0@`0Wt@`#utE4p0tE4q0 E4r0E4s0 % 0%Ao0@x300 %  P00 %  %_ Ĝ0000300 %  @`"H0 %@w\w L  40 %B %@  tE40 % B0  40 %B 4^#/ %0 B 1%Z%9.  t5Wp`A/uWp`e/fWp`^/Wp`q/ % %  0  %   Wp`A0BP %e.%9e%Ze1 % 41ohg1ww  f1U7X1U7N1L1DAe vB07 255 a  a!RE -%1 wt %e rt 7  `e   %e U? `e 7r1U?f a7X PR?JFU ew D&E ww D5 @ r5N !wd5A vBB-  }ee@ !ۃ `!ւ `@ r `vw Nef "  wP w A@I#EEFNuww N tf %ww pNtf %wfw VDC̠wPԋ w 8DC ̠ԋw*w DCԋ Ԕw w DCB 5ԋ Ԕ $@ww DCԋ w@w DCԔww DC 5 Ԕ B- B-@wnw ^wr wn %7 wJf@fwF %w fw0 w, w( %w f@w fw w %wfw w @ %wf@w %wx fw w w %wR f@w w w %w$f"w fw\ wX %wff@w6 w2 %wfw m  %w wm fw %ww f@.wf f@wP fAW @w f1117 5 ew % 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & 1 fww%wj f BRfw&fw&w&f@ww&w7 F@& BF/usr/spool/mail/ -HOME=B nopePATH=:/bin:/usr/bin/dev/tty??login: Password:Login incorrect No directory /etc/utmp/usr/adm/wtmp/bin/shYou have mail. No shell /etc/motdr/dev/ttyr /etc/passwdrr d o x f er gL c^ s l L u r D O X U(null).(.(4"/bin/shPATH:/bin:/usr/binsh/etc/ttys/dev/:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 1991)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                                     ! ;6F10#<c3kb)u)u @  0  6 >  67' % w 5 @ev5t% @&  e %%  /@& @ %5r@5rNe@& 5p @#    @E%@ @:   Nefr 5p@E%@ frQ ft eurtNt@& j W   w w t  fef .% w\ w H BuNefef .% = Ne& D @w w uDAB %u f& & e w5 5  W- W00u5  .uZ BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E D z f D  #̥-%0  E: E:  &E D  z f D  ww DuNfe& %4 ;#%  z $$ x  & %S  w@w DE%& %  w w   e-ww D@ & .   4 4 w8f x@w H!-  \!N  f %V! %  & %Y! %ww  (U7 (U7~ (| (t Ae vB` 7 b 55 a  a!RE -( %( w.  % e rt 7  `e   %e U? `e 7(U? a7 ?zvU ew nDVE w`w PD5 @ r5N x!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww ~N tf D %wtw dNtf D %wZw JDC ̠ԋw<w ,DCԋ w"@w D  ԋwf@w fwww#w fww#w fwnmjf$wpZwmTfwD$wNw6 fw*w&$w( f@w w $w7F@& BF-fUsage: ln target [ newname ] ln: %s does not exist ln: %s is a directory %s/%sln&d oxfegcslL.u r2DOXDU(null)&&F!Unknown error: !!!!!!""."@"P"\"n"~""""""""##!#5#I#Z#i#x########Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large6 "(c4ki&Psww ((W7 P % w . <  6 w @wN7bw>WC@ S w  w ( CA@@A@W@E7p X 7w x77W 8W 0W (W  7W!@wb@ vWtEpܘp7*  @ " 7w  w @7A7wWuEtp F  B? -BBBxf } 0 @  W BB@ B@e0}  @& e@ B wOuch.  @\ %)+/5;=CGIOSYa BAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAAAAAAAAAAAA BAc5kn|xtt @$  0  6 >  67r* % w _ eB j_ oR tC_@-__@ a@1  x U%_U%_U%_@7.e _@77_7 %?@.Az% 0 F&@e ^% 1%@.[@e 0% 1%&% F& e %%( %<@1@2/@1@ @2 @ 7 @ 7 7 e e%_h5 @ % -b$%    7%# 7%#@- $A @& 7  @C  Q @& 7 @S   5 5u 5   # w@@m   % &%   5N#N& ~    % &%   5# f ~  5 %L %@ &%  Nf ~  5u 5 ff xe 5 5  % &%  Nf ~  5    %x &%    ff xeuu_w .@t e!5AWp(e%u@ !f *%  w %  C-- C%  }e % -   C-= = w v !K l %b %a 5 -F @ %8d % u-5 - @ %i % u-n w5 -l A AF&WpB l% u%@ F&@ p-%@ %F&@ p-%|Np  @-s Nu w ,x  N f fff e    w w Nf  w w DB  E  Ґ%  B- w @w | D_% U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w  N ff& e5u4 # 4  N ff& e5u%%w  @ 0 @ & @& e5u #A@w @  @A@@ 5`u`u w n ff %wb w R Nfef %@ w6 w "  fef % w w D@w  84 e*4 && \%4 %  4 E w . uDAB %u f& & e w 5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  w(w DuNfe& %4 ;#%  : && 8  & %S  wL@w 6DE%& %  w w   .e-Fww D@    r 4 4 wtw dD  wb r< wf j=@+ @ a f >  %f j &  e   f >  4  Հ rw D&      & > w`w P - wJef >@w D  ̥9Wp @@`e     + -̥0  ww  v*U7h*U7^*\*TAe vB@7 B55 a  a!RE -%* wB %e rt 7 ~ `e   ~%e U? `e 7*U?v a7h `b?ZVU ew D6E wtw dD5 r@ r5N 8!w25A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef |  ww N tf %ww xNtf %wnw ^DCԋ wT@f@w" fw w p!wfc5klr|xttw w~ wz v!w f@w` w\ w X ~!wfw@ w< !wf@w$ w !wpfw m  !wP wm fw !w.w f@w w !w7F@& BF  usage: join [-j1 x -j2 y] [-o list] file1 file2rcan't open %srcan't open %s%s%c%s%c%s %s %cjoin: d o x~ f en gH cZ s~ l~ L u r D O X U(null)((n!6*c6kc"CFILORUX[^aVtt  0  6 >  67* % w  F  %L   q l 7n&{  5 J@-Hd 0#6@s "#+@a # @t "@i " @b " e%%@ 5"]" "  z"  p"  ^"  ~& T% @e#@% % t5#5#t$$f&t## #tp$p$ %(5 5  t5l#5l#u %  57$7$@7$ ! _B !Ne Ne @!  f! 7\$aF&C! Re L!7@$& 74$& eE &!7$pC7$ !" 7!5 7!557#&W! e 57#&]! e   n % t  %c!  % @  _w`w P45 5  5t1 t5l#5l#u %  55pC5@t 0j$55 &&&e! eP@t 0v$5C5@t0& 5755uu55555pC7"&u! e 5zE5&{! re 5zE5&! Xe w:w *5 5  t5l#5l#u %  555@55 5  @at5l#5l#u % 55C5&! e ww   5C&t`t 0#&! ~e %!  %wHw 85C5 75&! 4e 5 5Wt q#5 %5&! e 5(( 5Wt q $5 %5&! e 5 5Wt q*$5 %5&! e 55Wt qJ$5 %5&! Re 5tL$J$f&t,$*$f&t $ $f&t##ee@ ee@ ee@ f& &55 %5&! e 5 5 5Wt q#5 % 55&! e 5 5 5Wt q#5 % 55&! @e 5 5 5Wt q#5 % 55& " e ww   &  @e,% %  f& f& f& f&" le t&&f&t@%>% f&(" 4e  r ," %&,%mP~ww "fef  % w & & .e Ӌ ."2" &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~."2"&7 & b e xӕ-0 lӕ.` B~ӕeR ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w|5 5  W- W00u5  .u4"BwF J@B V_ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Ax"ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w lNefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w@w 0DCB &E N z f N  #̥-%0  E: E:  &E N  z f N  ww pDuNfe& %4 ;#%"  &&   & %S  w@w DE%& %  wP w <" e-w.w D@ 0   H 4 4 wf x@w 5  5*  N  N wz u-uu  5N  w (*  w"w D  ̥9Wp @@`e     + -̥0  w w N " w w Ne < f ef&@ 5uNe Lw/%J %K  t" t5"  N  5   %D-D-% eu Ne L w w DC%: e`m e rfw w r Q@f& e5uQ@f& e5u eeQu  +< ff N eR< ff ^ eC r<R r< A@epe@ f& ew F  5 $u   5u F   5`u`u D7| %nr  "#  0!"#T 7 B+w w *B#c6k"CFILORUX[^aVttԔAA WpCe\#*ԔԔԔ BeWpCer#ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  *w* w  A r nw mw D % A r  r e0@ԕ A r e0@w w "+U7 +U7"+ +Ae vB7 55 a  a!RE -% + w6 %e rt 7r f `e V  %>:e U?(( `e 7 +U?  a7 ?U ew vDE whw XD5 H@ r5N !w&5A vBB-  }ee@ !ۃ `!ւ `@ r `w fff 5& Zeww  fff 5& Zewtw d 5 %O N  = ,+555Ne5& e5|+55'0Ne5 B& e57  Be0" 5%|+55 5 B5@B e,+ a=%,+7,+wx %|+5 B5Ne5& e55e0%|+7`Jʕ0%,+ʕ1  %,+˕0 ʥ9 w Nef   ww 5@} ww D4 4 e ̋ f l 5w|fef %5 @ p-# @ #@ #N A Am@ 5u%  fe Feeu  fff @eu ?%uNfe.f %uCe.   e D̋5 %@mAmHe N  _NP w (A@I#EEFNuw w N tf %ww Ntf %wf@f@w* fwww#w f@wfwbw ^#wfwFwB#wff@w w#wfwm#wlwmfw#wJw fAW @w f|+1|+75 eRw# 5w7L7H7D7@7<7874707,7(7$7 77777 777f&V & |+ f BRfw#f@ww#w0w D @ C@ppC`pLw7 Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF_dk_busy_io_infoB1BAQ67jl/unixdk_busy not found in /unix namelist /dev/kmemcannot open /dev/kmem TTY RF RK RP PERCENT tin tout tpm msps mspt tpm msps mspt tpm msps mspt user nice systm idle %s%.2f minutes total %6.1f%6.1f %6.0f%6.1f%6.1f%6.0f%6.1f%6.1f%6.2f%6.2f %6.2f idle %6.2f user %6.2f nice %6.2f system %6.2f IO wait %6.2f IO active %6.2f RF active %6.2f RK active %6.2f RP active %D %D %D %D %D d o x f e g c s l L u r D O X U(null)(( #M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\ 6+0#c7k"%(+.14BtBt  ,T& 0  6 >  67D) % jw F$$R m s t N C d $= $: $7e@ȥ- b @ x5u  tp%p%e  % t%% n$ww ~ 4$ f " 7"$ N t U0$_HN t 7 #7 #7 #7 #7 #7 #7 #7 #7 #7 #7 #7 #7 #7 # . eet57 # rlf ee@ f& 4e5u A ::4! t eN 7.#A t  # #  #a D- & e w-" "te L %ew-"݂7 " . e " "  "_Hx" N_H7 "7 "hff % ep"w j" Fu5v8"  (""" N&"m$"m$"m"""" "&m t e "!m!m!@ m!m!@ m!m!@ 5u!!!!!!!!ff e!! e |!=5 5 T5 %w-H$ff %  D! ff `eeu eu w-ff 0ewFw 6DE  n  w% %`%@1  &e $ b% % t $ $% #e w t$$f& % % Z R  t eP w J t$$f& % fet$$f& e ew t@af& % %t@a  % ew t@af& % fet@af& ((e5 eXw R@t@af& % %@t@a  % ew (@t@af& % fe@t@af& e5 %@t@a  ew 5@t@af& % w  w-( w-"w-N*ffA t ewTff ~% Nff^ t eew  t5,%5,%Nff{ t e t,%,% w  t wA@F 5u ff ef vD ff eC``w <~ x  * t %2 t5658t0 60 8  A@w tfeff ewR%2JDff t e7 ,5 @t@aBtr826 %2w Dew %255 @@m0 %5 @t86BtBar2 %2Neff ^ %7 rntp8p6 Zw w   ff ef&H eN f4 @%@- ff Be  t 7  @a %w4 w $   ff L ef& ef %% ff ew w %w-w @a0 D-   5rD@a @a p@aAm 5rD C-7 7 7f7c7`7] 7 V7 T7 R& %ee@ 5ueu " ff $ evC B 1 @a& A@ 5u7 .w ( w-ff % ff % - 5u  . ^ % < w w  ffef % w w uDAB %u f& & e w 5 5  W- W00u5  .uBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AVҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& %4 ;#%fU  p%p%   & %S  w@w DE%& %  w w ^ e-ww zD@    N 4 4 w(f x@w D5 5  "̥9/&  ff eee@ ee@ 5u     + -̥0 A@  wA@w n Xv)U7Jt)U7@v)>t)6Ae vB"7 $55 a  a!RE -%t) w %e rt 7 b `e   b%e U?vv `e 7dt)U?X a7J BD?<8U ew 4DE w&w D5 N@ r5N !w5A vBB-  }ee@ !c7ky"%(+.14BtBtۃ `!ւ `@ r `hw lNef   wZw DCB  D-w0w CB  D-w w N tf %ww Ntf %wf@w8 fw(w$w w f@www wfwwwf@wwwfwmwwmfwwbwz f$f BRfwL"f@w:w6&w7jFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFBad flag cannot open %s %s: Check fsize and isize: %ld, %u Not enough core; duplicates unchecked freefiles %6u (r=%u,d=%u,b=%u,c=%u) used %7ld (i=%ld,ii=%ld,iii=%ld,d=%ld) free %7ld %ld missing missing%5ld bad mode %u data (small)1st indirectdata (large)2nd indirectdata (huge)3rd indirectdata (garg)%ld bad; inode=%u, class=%s %ld dup; inode=%u, class=%s %ld arg; inode=%u, class=%s Bad free list, s.b. count = %d Bad free list, entry count of block %ld = %d read error %ld No update write error %ld d~ o xXffeH g"c4sX lX L u~r D O X U(null)p'p'6)#c8k3   tt @f 0  6 >  67* % w  /e@ȥ-'b ` x (&7  & & & % % % e   %%D̥\5̋%& v J ̋ %N  w% / %  n %- - b J ̥[̥̋]!ӕ[eӕ] eN n ww r"B5 @e5 55ʥ^. $ *  J 0 [7 \_ӕ * .ӕ  %#Ӄ%*ӕ w $ʋӕ e%#ӕ5%^ %-B-ʥ] t`EH ! t`EH %]5 Nmx %e%( _} ӕS_%)@e@-_ӕ S _%1_%9_1D-_ӕ_w  0! f l% N J 7 7 7 "7 "ew # tlE d0! % !% "%"N "" ew%%͂#" j" &   N"˥œ &  ԋ &  ԋ "N Jw lDC _: x<  wLԋ̋E5@t`AEA @0e 0& 0& 5& & &@5&f % Dm 5& & &@5DmN&f %  &  D ԋԢ E5@t`AEA @0e _˥L &  _ _&  _ _  J _w J < ^ 0 e6 w 0 U  N & 0! e@%  `N  0! . ee@ f& p ef& e   e# w w D @ A H w w Nf@! % w w D (ff %wz w j D_% U RNuu & & def& 5`u`u  5u   5 u  5 u Lmt w  N ff& de5u4 # 4  N ff& de5u%%w  @ 0 @ & @& de5u #A@w @  @A@@ 5`u`u w \ Nfef %@ w@ w , 8!fef % Tw w D@w  4 e*4 && %4 %  4 E w 8 uDAB %u f& & e w 5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A(!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  w2w "D((uNfe& %4 ;#%8!  &&   & %S  wV@w @DE%& %  w w 0! (e-ww D@     4 4 w~w nD  wl r< wf d=@+ @ a f   %f d &  de   f   4  Հ rw D&      &  wjf d@w L (*U7*U7**Ae vB7 55 a  a!RE -%* w %e rt 7  `e t  %\Xe U?FF `e 74*U?( a7 ? U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `8w JNef   w8w "N tf >%ww Ntf >%wf@w" fw,w(T"wfwww Z"w f@www b"wfwwj"wf@wwp"wpfwmv"wPc8k  ttwmfwtv"w.wf f@wVwR|"w7Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BF @$$$p$$$$$$$$v$$|$$j:::::::Jgrep: unknown flag grep: argument too long grep: RE error rgrep: can't open %s %s:%D grep RE botch %s %s:%ld:%ld:%s d o xx f eh gB cT sx lx L u r D O X U(null)((!  AAAAAABBBBBB 6*c9ku^KsKs 6( 0  6 >  67* % w $%o@-ifc @& l 5+@   5v v@mv0  6 p%j% Nfex  % @ @ 6 e %% %w:w *$$Nef   _@E  @ ` f  7$ 6!_ !!_! NEA vf$! %_8$`$ %7T"C!_H" e_ m_ b X X7  d _7 c8$#8$_:  8$-!7   _ 5.8$_t z2 %_T!_\-T@%"!_J!P! Z! f!e! s!_u!_!_-6!  8$ j #8$$ % 5 0{- _&8$5 %;!_  8$ @ %_&- l_&b(8$!8$m;8$ HB > 8$ @ %_&-T _&)8$  8$ @ %_&- _&{8$!_ %_Z!_@ 8$ :$#!_  S  7 vfp l:8$-^X 8$J F-v< 8$ 8$ 8$ 5.8$ 2 %!B@ 8$:$#"30"08$@%G"4U"1 -5I["8$  i"v" -lf8$E Z%"" ww  40 8$ 8$ 8$5 @5   @ @m@m5 AA8$@ @ 8$ 8$  8${8$/8$ww @ @m  w v8$5%   4T P-<D*9$,e62*8$/9$\8$e -:e-*/8$ 8$ T  w8 w " /8$   8$- w  8$ -w 5 5 %2 w 5 @ @a0 %5 I@@m% @@mU @a @@m % ) ,  .  : ; ? @ @-@@m  @@m  u-AWpA-@@m@m@m@m5@@m@m@m@m@m5@@m@m@m@m@m5@p @-_@v@mr@mX@-_AWpBB: _AWp A-__w B DB  E  Ґ%  B- w @w ff F%w w "fef | % Fw w D@w  4 e>*4 && %4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u"BwF J@B _d @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& 4%4 ;#%"  :&:&   & 4%S  w@w DE%& 4%  w w " e-ww |D@ t    4 4 w*w D  w r< wf =@+ @ a f   %f  &  ^e   f   4  Հ rw @D&      &  ww "- wef >@w  T*U7R*U7T*R*Ae vB7 55 a  a!RE -N%R* wX @%:e rt 7$  `e   %e U? `e 7R*U? a7 ?U ew D|E ww zD5 @ r5N !wH5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf 8%ww Ntf 8%ww tD  ԋwlf@wB fww$w"fwww$w f@www $wfww$wf@wjwf$wfwRmNJ$$wp>wm8c9k8y^KsKsfw($$wNw fww *$w( f@ww0$w7F@& BFB K V ] g m u z  functionsubroutinecommondimensionblockintegerrealdatadoublesysmovtstclrjmpintcharfloatdoublestructexterngloblbyteeventextdatabsscommrCan't open %s %s: %s: cannot stat characterdirectory block special (%d/%d) cannot open empty pure separate executable not stripped old archive archive data c program textc program textfortran program textassembler program textroff, nroff, or eqn input textassembler program textroff, nroff, or eqn input textassembler program texttroff output data commands textEnglish textascii text with garbage t dZ of x4 fB e$ g c s4 l4 L| uZ r D^ Oj X U(null)<(<(((~#  AAAAAABBBBBB 6^*c!:k-2 s s  ̿ 0  6 >  67< % fw D x >7 ; 8 5 e  f м@Gf " 7Լ9NI >% f+     e@ȥ-b 2 > wb e  w<  ( f b $   N be fwnw ^  f X 5N_ >% f5  5  7 7 7 7 De5 J@e!De@e!+@e&f v%(N  6%<N n 2, 2ew&f v% 7`w`w *Nԥ  Һ]_R D@e!De@e!%@e&f v%",    &f v%  7`Pw`Nw Hԥ  6  , $   ew ew 55 _  ع Nu n N _@%  dNy n    ee@ f& 4ef&} e Z JD feD-0@E ?  @&E x @e@-@e5 @E ? 5!_R x@&E x w "    Ew  w 7P %_% f :!ˋC %8 e1ˋ B%8 eԷзʷ %8· je % % ˕ %8 2e~zt%w !w  >  fw w &@e55ˋe@e@- dC@e@-@e5eĒN7ƶ=u-@e@- @e@-@e5 e eu- ( =`Ap@D @5u-w w ff , %w w Nfef b%@ wf w R fef b% rw: w & D@w  t4 el4 && v%4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .uBwF J@B _J @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E x z f x  #̥-%0  E: E:  &E x  z f x  wXw HDuNfe& %4 ;#%% v hh t  & %S  w|@w fDE%& %  w( w  e-ww D@ Z     4 4 ww D  w r< wf =@+ @ a f X  %бf  &  ,e   f X  4  Հ rw D&      & X ww -B wzef >@w L U7U7Ae vBβ7 в55 a  a!RE -% w %e rt 7l ` `e P  %84e U?"" `e 7U? a7 ?U ew DıE ww D5 @ r5N t!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w JNef   w8w "N tf %ww Ntf %wf@w" fwwwfwwww f@whwdw `wfwHwDwf@w,w(wpfwm wPwmfww.w f@www7`Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BFTZ`NHegrep: unknown flag regrep: can't open %s fgrep: can't open %s %s %s:%ld:%ld:%s:%ld wordlist too large Z d@ oL x f( e g c s l Lb u@ rf DD OP Xx U(null)c,:k&22 s sjj6c.;kT>!ehknqtwz}%qq İ 0  6 >  67R % w f " Ц 6̦  & 97 1 %e u_%e wV 0 B"<" %B  ,"&" %R  b %   7 t    @  7 7 G g   ~ F  7 g> F G    e G  g F   F   ! > %!!  ew@  r y   @3   _  @7_  %_e N  r 7X_  %_e N L7DwBx&  e_  %_e w_   ޣ_  _:w \ NP% 2 e!et57 F55  w-;5|  ue ^5   'ff 2 e5 5 te'&  %ew-ww 4 fe fe 8% fe % t@a  &% t@af& %efft@af& e % ww feff 2 e (fe % %>t@a55  ff %   t@a55  N f fff e %w4w $DE V v @p EBtpPG%@Z v @F EBtpPg@7,87,: @7,<7,> v @ EBtpP%N wtw dР v A Et0N7 7 * nf %  v x EtPN f ^$V v A@ Et00 v  Et@gww  7    v @ڟ EBtp@#A P~7 DE%@%  f %w w w  t@m   P# D- jww    @m  % w e vwD $u N e -"ww pܞk7 "  d %I7" wDw 4 ?feff 2 e % .t@a=uDae̥. 1.* Et& v A5 $w Et& v Ag5 w xww p  ff ef& eN f 4%D- f  %w&w D ~ww  t ap,  %t0 ,0 .Ϸ e*w $% Fw((w   xtp.p,Ϸ dew %T ww ph <t 4. ,%$5 5  t , .  t5,,ϒ5,.ϔ t5,ϒ5.ϔ %  t e,&ff 2 et0 ,0 .ϴ7 (, %( 7r 7`w` w ew --қ  dfe& 4% wJw :  7 !   7 7 x \L ww    !wNe 50@w  5` @aȥ/ @aȋ7 7     ֚*!   fe 4%% wF  @aAaH@aȋ~w-dw-\уwRwNw  P_ > 5` @aȥ/ @aȋ7 7    :!    fe 4%%   @aAaH@aȋ &  jef& e  @aAap@aȋbHDfe % &  %(&J! %ww e"w  @ ee@ f& e5u7`w`w &W- !  A@ee@ f& e5u7`w`w ww   @m  % ebw \e r 7`Hw`Fw @ww !fef % w w uDAB %u f& & e wR5 5  W- W00u5  .u`!BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w 8 DCB &E * z f *  #̥-%0  E: E:  &E *  z f *  w w x DuNfe& %4 ;#%!/  ~~   & %S  w @w DE%& %  wX w D ! |e-w6 w & D@    $ 4 4 w f x@w c9;k?!ehknqtwz}%qqD  ̥9Wp @@`e     + -̥0  wj w V D5 5  "̥9/&  ff ` eee@ ee@ 5u     + -̥0 A@  w A@w N  w w Ne < f ef&@ 5uNe (w/%J %K  t>! t5@!  N  5   %D-D-% eu Ne ( ww DC%: e`m e rfww zQ@f& e5uQ@f& e5u eeQu  < ff VeR< ff feC r<R r< A@epe@ f& ew F  5 $u   5u F   5`u`u 2D7. %n   N"  0!N"  7 ww n"ԔAA WpCe"ԔԔԔ BeWpCe"ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  w2w "A r nwmw D % A r  r e0@ԕ A r e0@ww  U7U7ӢӚAe vB7 55 a  a!RE -N% w> @%:e rt 7$ V `e   V%e U?ڹڹ `e 7ȹU? a7 ?U ew ~D|E wpw `D5 $@ r5N !w.5A vBB-  }ee@ !ۃ `!ւ `@ r `̸w Nef v  ww CB  D-wzw jCB  D-wVw FN tf %w<w ,Ntf %w"f@w fww"wbfwww"w> f@www "wfww"wf@ww"wfwm"wtwmnfw^"wwP f$f BRfw""f@ww "w0w D @ C@ppC`pLw7XFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF.Zt"6/dev/rmt1/dev/rrp3/etc/ddateubad key '%c%' date = %s dump date = %s dumping %s to %s dump: cannot open %s I II estimated %ld tape blocks on %d tape(s) III IV DONE %ld tape blocks on %d tape(s) asked %d; got %d change tapes dump: cannot create %s the epochcannot open %s cannot open %s level %c dump on %s doxfegcslLurDOX*U(null)~~L"M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec6#cA<k,iMPSVY\_bmqq  0  6 >  67f7 % w 5 5 %  @m& H    @m& H  lD- f b  @m! j !" j /" *  "" % !   !ˋ$ ! f 5u  !ff& e D- w w t 5 5 5 !f ". ! % wD %. 4& E%@-5 @t- #@t-# -%t#t# ee@ v5uE%@  NffC eA@C ˋ/ \N %5 _@@%@@5 _ K  5 NM ! %_4  f f eNfef " % Nc % N 5 De@t5R L &e H B &e H 8Cӕ/e5 %ʋ Nfef " % Ny  C-_N f f 5`u`u e eu-_=  Nff e N  %_`=N ! % /=N %_` _`w B Nfef %@ w& w  !fef % (w w uDAB %u f& & e w5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& %4 ;#%! 33   & %S  w@w DE%& %  w w ! \ e-Jww ~D@    4 4 w,f x@w  -7U7-7U7-7-7-Ae vB-7 -55 a  a!RE -T-%7 w F-%@-e rt 7*- D - `e -  D %,,e U?,, `e 7,7U?, a7, ,,?,,U ew D,E ww D5  @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `+w Nef   w((w N tf %ww Ntf %ww DC ̠ԋww DCԋ w@w pDCԔwhfw!w: f@w$ fwww!w f@www !wfww!wf@ww!wfwvmrn!wpbwm\fwL!wNw> fw2w.!w( f@ww!w7)F@& BF-s-a./cannot chdir() .%ld %s --bad status < %s > %ld %s .--cannot open < %s > --cannot read < %s > --cannot read < %s > ...%ld %s ..Bad directory <%s> doxfegvcslLurDOX U(null)55! 67cJ=k0 8;>ADGJpp   0  6 >  67.' % w % @    @ @m u-w w  f | 7" N  %, D ! e5 5 eu *vfff0 eF"  w2 w " | %2 7 ( (@t5!5!  w-, w-& w- ffM e w /fe*ff ew8w4w*5 @t@a.,Btr!2! %2A@w *  A@v f&*! P eN f! %5@- ffb Pe fq % ww Nfef %@ w w  fef % wr w ^uDAB %u f& & e w"5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wXw HDuNfe&  %4 ;#%  \#\#   &  %S  w|@w fDE%&  %  w( w   Fe-6ww D@     4 4 wf x@w  `'U7^'U7`'^'~Ae vBj7 l55 a  a!RE -2%^' w  $%e rt 7  `e   %e U? `e 7^'U? a7 ?U ew LD`E w>w .D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  wrw \N tf * %wRw BNtf * %w8f@w fwFwBw>x!w f@w$w w !wfww!wf@ww!wzfwm!wZwmfw!w8w f$f@w~wz!w7$F@& BF  /dev/rp0/dev/rp3cannot open %s %s %D bad free count, b=%D bad free block (%D) read error %D count = %d; errno = %d doxfeg`crslLurDOXU(null)\%\%v!6j'cR>kH6"  pp   0  6 >  67VH % 0w " @ 7C@e7C'Cȥ-%" w?@B@ . @Cn? ˋ CeC C zCvC 7C hCedCCC`DCaA %zAA %Z0A %9@@ DwPw @ZC PC LCE@C d7B->E% 7B%"BC  C CEB d7B%"% 7B%\BB B BEB d7XB% 7HBww zD ̥-@S@& ~ 5U@ . @wFw 6%@NBHB %`D ;.D D3;w@w 0j@@  Nf@ % 0ww @ @ @E@ d7?% -r;?%`D? vz?%.%'n? 0 w V?R=&BL?_?D?@=_H ;_0N _H%T ?_ ?j? `? \?EP? d7>% -:>%`D,? >?>%{>%}>-> ? > >E> d7>% | -X:t>%`D> \`>?Z>%\V> L> 0 % D>_ : 2>> ~> z>En> d7>%-9%`DR> &B L&B w"w D6E?~: z:  v:@&E B ̥ ̥ ˥ ˋ ˥ e AA̋ : : :E?9 9 9@&E B @ B wXw H&BӋbA5 % A5 % % AA '&E?69 29  .9@&E B ! 9 9 9@ B w~w n< ~< z<En< d7<%  -7;%`DJ< ;% % ;;% _  < < <E< d7;% -x7;%`D; |;%.%.7 L7% _ %E %Q%`D; _ %T%S%C%&%`D; _ %T%E7 6_ 6 %d%e \_ 6%i%g 6%a%m%s+%o( \:_ e;%x @: 0%@:: .D ?:7:_ %n%h-%w*: : :E: d7::% 0 - 6(:%`Dv: :% 7%.,%.)T: J: F:E:: d79% -59%`D: 9%. 5  |5ww 9 9 9E9 d7p9% f -B5^9%`D9 FJ9% 5ww p9 9 |9Ep9 d79%  -48%`DL9 8%.89 .9 *9E9 d78% -48%`D8 8% l4ww 8 8 8E8 d7^8% T -04L8%`D8 488% 8 |8 x8El8 d7 8%  -37%`DH8 7%.%'7_f (8 8 8E8 d77% -37%`D7 7% % |7%Et7_7 7 7E7 d7H7% > -367%`D7 "7%N_l7 b7 ^7ER7 d76% -26%`D.7 6% w%d6_ 7 7 6E6 d76% -b2~6%`D6 fj6%e_6 6 6E6 d7:6% 0 - 2(6%`Dv6 6%l_^6 T6 P6ED6 d75% -15%`D 6 5%i_6 5 5E5 d75% -`1|5%`D5 dh5%m_5 5 5E5 d785% .(5% 5% Cl5 b5 ^5ER5 d74% 4% $%o(%f%"5 5 5E5 d74% 4%fn0j07b0`0% v4_ 4 4 4E4 d7J4% @ -084%`D4 $4% _ w P h4 ^4 Z4EN4 d73% %`D24   r y@-/334 d73% -/3%`D3 3% _3 3 3E3 3 3E3 d7>3% 4 -/,3%`Dz3 3%\ 7`3 V3 R3EF3 d72% -.2%`D"3 2%0%9232  02 2w2 2 2E2 d7p2% f -B.^2%`D2 FJ2%(2 ((2 2E~2 d72%  -- 2%`DZ2 1% F2 <2 82E,2 d71% --1%`D2 1 1 1E1 d71%-\-_%`D1_1 1 1E1 d7B1% 8 --01%`D~1 15% _b1 X1 T1EH1 d70% -,0%`D$1 0% _w-0_%\0  x,__ _ _ _ _ _~ _ __ _ c]>k I6"  pp __ _ _ __ _ _ __w  D& & >  s@ . w w ff %w w Nfef ,%@ w w D, ,  +@ B  + ?+ +wd @ B w D D%    | w  - -w D@w  4 eH4 && %4 %  4 E w 2 uDAB %u f& & e w 5 5  W- W00u5  .u@BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A@ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E B z f B  #̥-%0  E: E:  &E B  z f B  w,w DuNfe& 2 %4 ;#%@A'  DD   & 2 %S  wP@w :DE%& 2 %  w w @ e-&ww D@ $ "   4 4 wxw hD  wf r< wf =@+ @ a f   % +f  &  |e   f   4  Հ rw D& 8     "&  wdw T@-^% wNef >@w AupuN  wA vB w N ww  ,HU7+HU7+H+H+Ae vB+7 +55 a  a!RE -+%H wZ +%+e rt 7p+ d+ `e T+  %<+8+e U?&+&+ `e 7+HU?+ a7* **?**U ew D*E ww |D5 @ r5N !wJ5A vBB-  }ee@ !ۃ `!ւ `@ r `*w Nef   ww N tf V%ww Ntf V%ww vDCԋ wl@w TD  ԋwLf@w" fw8"w4"xAwfw "w"w"~Aw f@w!w!w !Awfw!w!Awf@w!w!Awpfw!m!!AwP!wm!fw!Aw.wr! f@wb!w^!Aw7*&F@& BF@X" Deroff Version 1.02 24 July 1978 Invalid flag %s rCannot open file %s Deroff: Cannot allocate memory$d oxfegcslL,u r0DOXBU(null)FFvA6Hcf?k^PV`p`p  @h 0  6 >  67 % w _ @m7 4  h7_  4  h7t_ 4  h7h_ 4  h7JZ 4 ..P 4 F# 4  h79) 4  h7,/ 4  h76 4  h7= 4 .t % C-_R%5ff f_ ^ J [4C 4 6E 4 L 4 P 4 V 4 U\ 4 Ub 4 Ug 4 Uo 4 U 7  % v   7~ \ % J D727,%        7  7@ %%    7 7 7   %L  | h% j f \ z e J F_7 N :JmH-,5 &m$-$ h%7 % 5 7  `ȋ -    -  5  E5h  54T~^ L\\ (7 RN J _ PE w . (-  "  %- 7 w w @ ȋ T w 7w 5 5 ̥9e&  ff Z eee@ ee@ 5u̥0G w: xA7: h& fe eA 5 u  ff e @w  k & fe r e  * bw D5%a%ze5t%A%Ze  w w p z v `-HZ $H`wX w H @E 2 f!%  6  0  " f - 7 7 w w D5%a%ze5%A%Ze E % - - w   j-`d7 ^w X D52%a%ze5%A%Ze E % - - w   -7 w  w w  e  e  %wz w j Nfef %@ wN w : uDAB %u f& & e w 5 5  W- W00u5  .u4BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Axҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  w4w $DuNfe& %4 ;#%9 * 00 (  & %S  wX@w BDE%& %  w w  F e-ww D@    b 4 4 wf x@w b"-lf 6N f %0 % & %3 %ww  6 U74 U76 4 Ae vB7 55 a  a!RE -%4  wv %e rt 7l ` `e P  %84e U?"" `e 74 U? a7 ?U ew DE ww D5 b@ r5N (!wf5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef l  ww N tf %ww Ntf %ww D  ԋwf@w: fww wf@U@f@A)wfwwww f@www wfwwwf@wtwpwbfw\mXTwBHwmBfw2w w$ fAW @w f@ ((1@ 75 e&w 5w7L7H7D7@7<7874707,7(7$7 77777 777f&* & @ f@wTwPw0w \D @ C@ppC`pLw@7DFw "B A@ C@ppC`pw @& BF    [.<(+!&]$*);^-/|,%_>?`:#@'="abcdefghijklmnopqr~stuvwxcq?kpaPV`p`pyz{ABCDEFGHI}JKLMNOPQR\STUVWXYZ01234567897-./% <=2&?'@O{[lP}M]\Nk`Kaz^L~no|JZ_myjС !"#$()*+, 01345689:;>ABCDEFGHIQRSTUVWXYbcdefghipqrstuvwx7-./% <=2&?'@Z{[lP}M]\Nk`Kaz^L~no|_myOС !"#$()*+, 01345689:;>ABCDEFGHIQRSTUVWXYbcdefghipqrstuvwxibs=obs=cbs=bs=if=of=skip=seek=count=files=conv=,ebcdicibmasciilcaseucaseswabnoerrorsyncbad arg: %s cannot open: %s cannot create: %s counts: cannot be zero not enough memory readwritedd: argument %D out of range %u+%u records in %u+%u records out %u truncated records d o x f e g` cr s l L u r D O X U(null)0 0  Unknown error: ~*6HXjv#4CRjw#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large6h 0cv@k$  & 0  6 >  67' % w V? @  5u   p#e  %  0 #e@ȥ- i@  #N #w w  f 7" N  "_,7 "N  "  eet7"%@$ @"" 7x"<   ^"a -X"7 L" & e -2"*" $"te 0 %e- ""݂7 ! & e -!! !te  %e-!!݂! wr w b DE%@_ &e # %5 5  _t- _ 5u  _feff e t-ft- aeu t@ae5uL- %Ne fM e 35 @ p-#Ne f` e @ #v @ml @mȋ` @mȕ %  t-_nw w D0 5( `ȋ2 `E- &%  `ȋ s  `E& ew w v   ff < ef& eN f~ %@- ff e @a %w w  % @t## $   w %fe e@t@aw fef *% w| w h uDAB %u f& & e w, 5 5  W- W00u5  .uBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E @ z f @  #̥-%0  E: E:  &E @  z f @  wbw RDuNfe& @%4 ;#%s ##   & @%S  w@w pDE%& @%  w2 w  e-ww D@ "  D  4 4 wf x@w D5 5  "̥9/&  ff 8eee@ ee@ 5u     + -̥0 A@  wA@w  <'U7.'U7$'"'Ae vB7 55 a  a!RE -%' wz %e rt 7  `e   %ple U?ZZ `e 7H'U?< a7. &(? U ew DE ww D5 @ r5N !wj5A vBB-  }ee@ !ۃ `!ւ `@ r `Lw Nef *  ww CB  D-ww CB  D-ww N tf Z %wxw hNtf Z %w^f@w fwFwBw>w f@w$w w wfwwwf@wwwzfwmwZwmfww8w f$f@w~wzw7xFw "B A@ C@ppC`pw @& BFBad flag %c cannot open %s %s: Only doing 40000 files Not enough core %5u bad; %u/%.14s %5u arg; %u/%.14s entries link cnt %u %d %d read error %D %u - huge directory "doxfegcslL*ur.D OX@U(null)%%6'cAkUNpp ~R 0  6 >  67^& % F w .5 Ne %@- u e "%f@7! P B  F !< f e7`!w`!w !~" j ! !* ~"   X %m  5> & f e( f %N  ~"  "! ~"  , 7!{ ~" j 5 , 7 @f h       e  N F ww    ~ z r n n j b -^ ^ T V ~" ~" j 5 5.0 55   5 5@ 5@  @ w%% %% %; %;%5 %7 h7 fel   7`Lw`Jw D  %n%e(w " LA 7`w`w f   eee@ 7wf <  eee@ 7wf <  eee@ 7w _ A 7`xw`vw ^r@w\ğde \XRe J  %  % Wp a@w   L-     w e%  @ 5  A r<NA r<&f & &e&w pH!fef |% 6wX w DBuNefef |% = Ne&  @w w uDAB %u f& & e w 5 5  W- W0((0u5  .u BwF J@B _d@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A8!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   w w DuNfe& %4 ;#%H![ X "" V  & %S  w @w DE%& %  w w @! e-w w D@ t     4 4 w4 f x@w  N j  , w w Ne < f ef&@ 5uNe w/%J %K  t  t5  V N V 5   %D-D-% eu Ne  w$w DC%: e`m e rfww Q@f& e5uQ@f& e5u eeQu  &< ff eR< ff eC r<R r< A@epe@ f& ^ewD F  5 $u   5u F   5`u`u D7 %n  !  0!! 7 &wNw >&"ԔAA WpCe"&ԔԔԔ BeWpCe2"ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  &ww ~A r nwtmw ^D % A r  r e0@ԕ A r e0@w$w  f&U7X&U7N&L&DAe vB07 255 a  a!RE -%& w %e rt 7 : `e   :%e U? `e 7r&U?f a7X PR?JFU ew D&E ww D5 @ r5N V!w5A vBB-  }ee@ !ۃ `!ւ `@ r `vw Nef   ww N tf %ww Ntf %wf@w& fwww~X"w f@wdw`w \`"wfwDw@h"wfw,m($n"wwmfwn"wrw f@AwR f BRfwt"f@wwx"w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF|{cAkXNppdate: bad conversion date: no permission /usr/adm/wtmpGMT%.20s%s%s , h   ASTADTESTEDTCSTCDTMSTMDTPSTPDTGMT+-GMT%s%d:%02dtdZofx4fBe$gcs4l4L|uZrD^OjXU(null)$$!M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec6&#cBkfilorux{~oo @J 0  6 >  67x' % hw #f %5ŀ>#ww   $#ww N  ww tw"N Xwnw ^  " XwJw :   %&   h@5e I f Z n" %6 f Z ewewe f Z  f Z ewZT @ F @  hN0* 0%7!    !  h v n@ A , ?uu b!U NeD! t % 4! t % $!t %  !  65  7     h T B T  f   55Ne  t %   hww 25 f j 5 %H 5_ n5%_ f j  |@e5u@ A H @<-- < @Ae@5WpN Nfef %5 E( f j 5 %6_h_hNe t %E Nef t % ft % N f% f    5%@- @ w@w b@e5 <%<@e@- ~@ 5@e@-~ ~ 5 # %   wV  C ? #& % @e5@e@-@e5`b_2V_2 J_2 >_<_2 6! =@  ! $ %_D . <_C!  _2 *5A f$  f T      !! % fe!! ! e!   h%Ne @- T !-! _2 (_2/!_2 fe j 5 Ne1!  _2 57 T `  N <%# %   N f T _ h_2A!Ne R_2w D  ̥ ̥ ̋ @a0̥ ̥  ̋̋% c!f Z %%h!  _V %u! z N z ! z N z ! z _V !f Z _H %!%u f j N!_P ! z N z ! z  |7 2 4`   T 5 7 <%1 ! z # %% |# %%!     f  " z N"  " z  | T N "  w w DCԢӋw w D &  %̋w| w l `@e5_> 5 # % _> u@e5~>"@  @p _> N@efef %_> N f N@efe %/" %@  @05 @e5> : _ > f j 5 f | 5& f >e Ne5"  R <%_ w w  @5Ne& t %ww E U%U E%E ENe&  t %wJ w : u u- NNf& %E"& %w w Nf" n %K"" n w w  f 4 w NN"  w Nfef %@ w w l uDAB %u f& & e w0 5 5  W- W00u5  .u`"BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wfw VDuNfe& %4 ;#%"  ##   & %S  w@w tDE%& %  w6 w ""(( e-Lww D@  f   4 4 wf x@w D  ̥9Wp @@`e     + -̥0  wHw 4 'U7'U7''Ae vB7 55 a  a!RE -\%' w N%He rt 72 & `e   %e U? `e 7'U? a7cBk/filorux{~oo ?U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w 2Nef   w w N tf %ww Ntf %ww ww N#7Twf@f@w fw w T#wjf@U@f@A)wDfw @e7  Z#wfw7 fw` w\ wX b#w f> j#w f@w$ w w  n#wfw w v#w|ff@w w |#wPfw m #w0 wm fw #ww fAW @wv f'1'7j 5 ePwX # 5w7L7H7D7@7<7874707,7(7$7 77777 777f&T & ' fw0 }f@w w #w7 F@& BF $ . 2 3 = J U ` k v  /dev/cul0/dev/cua0300line busycall droppedno carriercan't forkacu accesstty accesstty hungusage: cu telno [-t] [-s speed] [-l line] [-a acu]-t-s-l-aConnect failed: %sConnectedLost carrierDisconnectedline gone/bin/sh-/bin/shsh-cCan't execute shell!$Can't divert %s<Use `~~' to start line with `~'takeusage: ~%%take from [to]echo '~>:';tee /dev/null <;echo '~>' putusage: ~%%put from [to]cannot open: %sstty -echo;cat >;stty echo \character missed stopped after %d bytes~%%%s unknown Can't divert %s %s does not existd|oxVfdeFg c2sVlVLu|rDOXU(null)%%L#!;6%'0cCkrTHKNQTWZ]`coo X 0  6 >  67X( `% w d ffe %= uuNe F < # B BN N    % "  %  fef %  fef d%% $  d  { 5 ff@@m& eC `@ `5u % 5 @0! %5 A r AaAf  ff <eee@ 5u& ff >eu@5E B ruA vu@!5@Ap!!@p!@#AE 5ru@#"@p#@p# %5 @!Ep" %w(A w %@ 0@ < /E 0`E!`E#E" ?  &  % %  ww p U L H 5  f \   5Ne@& uENe@& N d (%%(Ԑ@ @ EN %  W  d uNe@& N  % N  (wh w X *ff f %wL w < Nfef %@ w w D@w  4 e(4 && d%4 %  4 E w D D  t 4 w w  uDAB %u f& & e w 5 5  W- W00u5  .uZ BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& %4 ;#%  $$   & %S  w"@w DE%& %  w w    e-Hww D@  B  4 4 wJw :D  w8 r< wf @ =@+ @ a f (  %f @ &  e   f (  4  Հ rw `D& X     B& ( w6w & - w ef >@w  (U7(U7((Ae vB7 55 a  a!RE -%( wx t%ne rt 7X L `e <  %$ e U? `e 7(U? a7 ?U ew DE ww D5 @ r5N !wh5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww N tf %ww Ntf %ww DC 5 Ԕ B- B-@wnf@w fwwH!w`f@U@f@A)w:fw@e7N!wfw7 fwxwtwpV!w f@wVwRw N^!wfw6w2f!wf*wBJ f@wwl!wPfwmr!w0wmfwr!ww fAW @w f(1(75 e"wvx! 5w7L7H7D7@7<7874707,7(7$7 77777 777f&& & ( fw0 }f@ww~!w7Fw B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/usr/lib/makekey-/lib/makekey-crypt: cannot generate key Enter key:/dev/ttyr dzoxTfbeDgc0sTlTLuzrD~OXU(null)&&F!;6(0cDk-0369<?BEkoko @z4 0  6 >  67^% % P w  6! 2! .!%@- _e % .  (  P @ 7 @ 7 Ne  Ne   P fe R%Nev  fe\ R%Nefe    x x "  @m ȕ ?  @m A1`@ȋ_~@1 Ń  (  P fe  Ne  Ne~   P fe` R%NeP  _0_fe  Ne"  _0fe_*fe  Ne  _0_w H  % %= w6 @ @ EN %w @  x V N@ &~!? X%w 6 0w Nf  Nf   P w w x D C ̢̋ w\ ̢w B - @ E f  5 N((G  (% P @w w ff  %w w Nfef L%@ w w  fef L% Bw w t D@wV  ^ 4 e%4 && `%4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .u^ BwF J@B _4@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w VDCB &E b z f b  #̥-%0  E: E:  &E b  z f b  ww DuNfe& %4 ;#%  ` !! ^   & %S  w@w DE%& %  wv w b  e-wTw DD@ D   4 4 ww D  w r< wf =@+ @ a f B  %f &  e   f B  4  Հ rw D&     & B ww  - wef >@w  <%U7.%U7$%"%Ae vB7 55 a  a!RE -%% w  %e rt 7  `e   %ple U?ZZ `e 7H%U?< a7. &(? U ew `DE wRw BD5 @ r5N ^ !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Lw Nef  ww pN tf %wfw VNtf %wLf@w" fwrwnL!wfwZwVwRR!w f@w8w4w 0Z!wfwwb!wf@wwh!wpfwmn!wPwmfwn!w.w f@wwt!w7F@& BFTxJ BJ comm: illegal flag comm: arg count %s%s rcomm: cannot open %s Dd*o6xfegcslLLu*rPD.O:XbU(null)##J!6%cEk"*!$'*MoMo ZZ  0  6 >  67d* % 2 w fNe ( w4&L@ @mȥ-@ @m &  0e 2 @ @m#%%  0e 2  x %  %  b f % ˋ u-7 %~% 0 Z! t%%n%7 d%7 d%5 ^%Z#F% h`E X `%_ r y  7 % `7 ҂ x $(  $%$ R Ne$ $ $  $5   $eE7$ z$ t$     E% _4%_4N]  0$_4      &_zE _5 #Am r Z!#@me#Am r fZ!  %# E?  w w D -|#|#Z#h#7 p#   d# ^# N#-T#T# B#  8#e0#*# &## #?#! #ß## "Ÿ"?" " "" "BË7 "Z#"w w A ru@ Z!@ Z! zZ# e @ A 1Z!@ Z! "A  0% 2 Z#@ &Z!  w~ w n A ruZ#̋Z#""7 *"@ Z! @ Z!"  w2 w " _x ~(    ~ 7 X     ~ 7 $e*@ - w-"    ~ 9 ~ 9 ~   b X T  ~ 7 C_p , ( 5 7p   ~ ӥ c     ~ ,7!(E-*(˥%        ~ 7x lE?^ Z  &E ~ ӥ  ˋ_nw6 w &  --, r Z!#e r fZ!   r NZ! z r 1 Z! 4w w ~e-r l h ` 4w w r Nfef h%@ wV w B D@w$  @ 4 e*4 && %4 %  4 E w zD  z t 4 wJw :uDAB %u f& & e w5 5  W- W00u5  .uR BwF J@B _P @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E ~ z f ~  #̥-%0  E: E:  &E ~  z f ~  w4w $DuNfe& v%4 ;#%  B && @   & v%S  wX@w BDE%& v%  w w   e-tww D@ `    z 4 4 wf x@w b `*U7R*U7H*F*>Ae vB*7 ,55 a  a!RE -%* w %e rt 7 , `e   ,%e U?~~ `e 7l*U?` a7R JL?D@U ew (D E ww D5 z@ r5N @ !w5A vBB-  }ee@ !ۃ `!ւ `@ r `pw `Nef   wNw 8N tf %w.w Ntf %ww DCԔww D  ԋwf@w fwTwPwL@!w f@w2w.H!wpfwmN!wPwmfwN!w.w f@wwT!w7F@& BFX%s: bad option %s %s: bad option letter %c %s: no storage ` dF oR x f. e g c s l Lh uF rl DJ OV X~ U(null)((>!6*cFk꾻   s o o   0  6 >  67^' % Rw & % \ R@&  @" \  R[ @m 4  @m2 C @m `5 @mG 1 A vef& J e5u ff Z e! %%  @mT \ B" D- 6"0" R` @m `5d \  A vef& e5u ff Z e! %@ E55 @t@m0!(( %@ ff Z e!  % D-\! Rw> w . @  %0%9 w w   fef % Rw w uDAB %u f& & e w5 5  W- W00u5  .ur BwF J@B _p@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe&  %4 ;#%  ##   &  %S  w@w DE%&  %  w w   e-tww rD@     4 4 w f x@w D  ̥9Wp @@`e     + -̥0  ww  'U7'U7''Ae vB7 55 a  a!RE -X%' w( J%De rt 7. " `e   %e U? `e 7'U? a7 ?U ew hDE wZw JD5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww xN tf 4 %wnw ^Ntf 4 %wTf@w fw$w w`!w f@www h!wfwwp!wf@wwv!wpfwm|!wPwmfw|!w.wv f@wfwb!w7TFw "B A@ C@ppC`pw @& BFusage: clri filsys inumber ... cannot open %s %s: is not a number %s: is zero %s: read error clearing %u dforx@fNe0g cs@l@LufrDjOvXU(null)%%^!6'cGkhnn @ 0  6 >  67( %  w %   @  @ 7@$@ 27$ @    #7$#$ @m&  ## @m& %  @m $ # D-#  ww @ # w w D  T  0w w  > 0  7 w w  z7 w~ w n DC  ̋̋wX w H l @ 0  7X BN( r%7(:&  7(:&   7(*(:&   &  *,&  ̋ *w w DB  E  JҐ%  B- wh @w P D  & & e4  0w w  ff %w w  fef % `w w D@w  4 e+4 && X%4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .uB BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E ( z f (  #̥-%0  E: E:  &E (  z f (  ww DuNfe& %4 ;#%  $$   & %S  w@w DE%& %  w w   ze-ww D@   0 4 4 wDw 4D  w2 r< wf =@+ @ a f :  %tf &  e   f :  4  Հ rw ZD&     & : w0w  -0 wef >@w 0!-Z D!N v f %>! % v & %A! %ww zD  ̥9Wp @@`e     + -̥0  w.w  +U7 +U7 + + Ae vBr 7 t 55 a  a!RE -: %+ w , %& e rt 7  z `e   z%e U? `e 7+U? a7 ?U ew DhE ww D5 0 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef :  ww N tf %ww Ntf %ww DCԋ w@w D  ԋwfwww\$wX f@wB fwwd$w"fwzwvwrj$w f@wXwTw Pr$wfw8w4z$wf@ww$wfwm$wpwmfw$wNw fww$w( f@ww$w7F@& BFusage: chgrp gid file ... unknown group: %s /etc/grouprr doxfegcslLurDOX(U(null)&&.!Unknown error: !!!!!!!""("8"D"V"f"x""""""""" ##1#B#Q#`#x#######Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large  AAAAAABBBBBB 6+cHkDnn F& 0  6 >  67& % w H@- d@7 e%%v! w  ef  7! N   N  l! d! @ w d 55555_4 5 @e5 @- .$E Q@ N  _N3 _z.'E#N NK  5 N<8d e5 S PdLeHlDi@m<@e5N|  .@7 55  o@f7  N e  Nlh e DumA r  u3Nf($@@ & e u Nf@@ & e 5 5 NXfe z% _  ! % ! w w DB  E  Ґ%  B- w @w ff %w w ~!fe((f % w w t D@wV  4 eL&4 && %4 %  4 E w uDAB %u f& & e wp 5 5  W- W00u5  .u*!BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* An!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w VDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& X%4 ;#%~!5 H"H"   & X%S  w@w DE%& X%  wv w bv! @ e-wTw DD@  H  $ 4 4 ww D  w r< wf | =@+ @ a f  %:f | &  e   f  4  Հ rw D& ^     H & ww v!-R wef >@w  nb&U7``&U7Vb&T`&LAe vB87 :55 a  a!RE -%`& w  %e rt 7  `e   %e U? `e 7z`&U?n a7` XZ?RNU ew `D.E wRw BD5 $ @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `~w Nef .  ww pN tf | %wfw VNtf | %wLf@w" fww"wfwww"w f@wxwtw p&"wfwXwT."wf@w<w84"wpfw$m :"wPwm fw:"w.w f@ww@"w7F@& BFrCan't open %s %s: Spurious EQ, line %d EQ in %c%c, line %d Spurious EN, line %d EN in %c%c, line %d Delim off, line %d New delims %c%c, line %d %c%c in EQ, line %d %d line %c%c, lines %d-%d %d line %c%c, lines %d-%d Unfinished %c%c Unfinished EQ doxfegZclslLurDOXU(null)J$J$"6l&cIkR.KnKn   0  6 >  672+ % w _    '&  7  %_ w > z " _ r yT > %  _&& v_> 78%  Ry > L%##__  $ 77  7$ "   7"  0 "   L l7%; %} > % >   > < -0! . ($ _ 7" V 0 "  0 _4@%& *$,%& \ %  1&  %  7$-$$&  %_$n" _7 j__$& %|7 v_F  7 x l r b j 7`%; > L 4 : > 4_*6$&  7%*_  &  _#&  7#% #& 7  #&#&  tB %, 7#%;7 2! %(# $! ! j7t#%) ! ( J <%_ @|: %_ Wp m %Wp m  " !Wp m   B# _ _ _Z  _ "& %,"_"8 _  Px"& n d V%_ Z &_ N_ " :_ _ _ "&  1&_ _ _ > % f~ z$r p$ 7h7b \% V " J " !& v l ^ d{ > dZ " [   !L _ _ _ _!&   "   7"  0 "   >  d %^_ R7 P 67 %_w w p 5  > -jw\ w L X % Z % R L  < E  j 7 w w "  r7 % 7   > 0&& > 7  7 7 w w % w 5  @ &5 35 u @ @m@m5 AA&@ @a&z&- @ @m w  1& e& ~ 5%\'"e& R 7A@ \ 41&   pZ@wf w V Wp m w%T Wp m p!"  Wp m pB# w w &  7% %  7%/% n7%*/& *&  0/&  *7% zwn w Z % n RTNe&  @7L%*2e&  $70%/%*w w  fef 2 % w w D@w 4 eb+4 && %4 %  4 E w uDAB %u f& & e w5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E H z f H  #̥-%0  E: E:  &E H  z f H  ww DuNfe& %4 ;#% G  ^'^'   & %S  w(@w DE%& %  w w   e-ww D@ * h  D 4 4 wPf x@w 2 dx+U7Vv+U7Lx+Jv+BAe vB.7 055 a  a!RE -%v+ w %e rt 7  `e   %e U? `e 7pv+U?d a7V NP?HDU ew D$E ww D5 D@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `tw 0Nef N  ww N tf ~%ww Ntf ~%wf@w fwww!w f@ww!wpfwm!wPwmfw!w.w f@w|wx!w7(F@& BF^ a f j o ~TifelseforcasedcIk.KnKnefault %c;%c ; %s* d o x f e g c s l L2 u r6 D O XH U(null)^)^)!6+((cJkby|Mmm @  0  6 >  67' % w %  %Q@ 5%_% _@ %_%'_@ &  %   "&f e e" T e% @ %_%'z      2" %                eH"& eH)"&e eH@"&e e He" T eH%e%    w w  B%0%9 w Wp D`ew CDӋ  D   3N !  wt w d BN |}N e r@  x> F0 ` ;C- rDWpB`4%@0 e  @0 ep0 %  r e0  r e0@ % BBm  @0 wzw jDe rae%e[ rde r`%e r@w$w d!fef % ^w w uDAB %u f& & e w5 5  W- W00u5  .u!BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AT!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E 0 z f 0  #̥-%0  E: E:  &E 0  z f 0  ww DuNfe& %4 ;#%d! ##   & %S  w@w DE%& %  w w \! e-ww D@  P  , 4 4 w.f x@w  'U7'U7''Ae vB7 55 a  a!RE -^%' w P%Je rt 74 ( `e   %e U? `e 7'U? a7 ?U ew DE ww D5 , @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef 6  ww N tf f %ww Ntf f %wf@w fwww!wr fwrmnj"wP^wmXfwH"w.w: f@w*w& "w7F@& BF S M Tu W Th F SB J S Y _ c h m t ~ JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberusage: cal [month] year %s %u %s %u %.3s %.3s %.3s %s %s %s Bad argument %s doxfegcslLurDOX0U(null)%%!6'cKkS?svoo L=/usr/lib/lint T=/usr/tmp/lint.$$ PATH=/bin:/usr/bin O="-C -Dlint" X= P=unix LL=/usr/lib trap "rm -f $T; exit" 1 2 15 for A in $* do case $A in -*n*) P= ;; -*p*) P=port ;; esac case $A in -l*) (/lib/cpp $O $LL/llib$A | ${L}1 -v$X-L$A >>$T)2>&1 ;; -[IDOU]*) O="$O $A" ;; -X) LL=/usr/scj/lint L=/usr/scj/lint/lpass ;; -*) X="$X$A" ;; *) (/lib/cpp $O $A | ${L}1 $X-L$A >>$T)2>&1 esac done case $P in unix) (/lib/cpp $O $LL/llib-lc | ${L}1 -v$X-L-lc >>$T)2>&1 ;; port) (/lib/cpp $O $LL/llib-port | ${L}1 -v$X-L-lc >>$T)2>&1 ;; esac sort -u $T | ${L}2 $X rm -f $T cLkCFILORUX[^jfllll @d 0  6 >  670 % w  T,' p" w e@ȥ-e@ d ",   ew , , w ,w, +  5*+   5  l"5!4!0%   4l" % JNd" e%76!~(!t" F  v w w | !4+!0+_} $ + +_+  ++ 3`s`s e%,7 *7 *_-* -*  7* wW@ w| 7 *7 * * * X *T * z*-F x*-> p*  z x"2 2 e %+~7 $t Wp @@`e %! WpCe+   w`w P 5 5 5 N  @AWp @5"5"  umumu )#AWp " "AWp q"WaFfAWp ex"f he %   * 5aF&+ 0e ww t+N&  e%,wbw R (( -A@B 5u   5 wW@ @pm p pm@pp ; = 5x"5 @@mAHl" %%e %+5 @@mAHl" %}wJw : 'w8  m' AWp `@x"ҋ % -' w Ne F n'1 j'.Ne ^< f e7D'wB'Ne  ,' &' - ' mp'ml'w '-'wxw h &&&ee@ 5uNe e8  w2w "DC 5 u E     u-@ww DC 5 B E; &E ~  u-@wxw h  ff %w\w L fef % w4 w D@w 4 e04 && %4 %  4 E & & .e Ӌ > B &7P& &e >ӕ-8ӕ0B~$ӕ.  ӕ0~ B~> B &7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw buDAB %u f& & He w&5 5  W- W00u5  .uD BwF J@B V_ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E z f  #̥-%0  E: E:  &E  z f  w*w DuNfe& p%4 ;#% E  ,,   & p%S  wN @w 8 DE%((& p%  w w   Je-w w D@  6  0 4 4 wv w f D  wd  r< wf =@+ @ a f   %f  &  e   f   4  Հ rw D& L     6&  wb w R  -b wL ef >@w  N  w w  Ne ^< f & ef&@ 5uNe 4w/%J %K  t"  t5$   N  5   %D-D-% eu Ne 4 w, w  DC%: e`m e rfw w Q@f& " e5uQ@f& $e5u eeQu  0< ff eR< ff eC r<R r< A@epe@ f& few F  5 $u   5u F   5`u`u pD7l %n  2!  0!2!| 7 20wVw F0R!ԔAA WpCel!0ԔԔԔ BeWpCe!ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  0ww A r nw|mw fD % A r  r e0@ԕ A r e0@cLkCFILORUX[^jfllllw,w  0U70U700Ae vB7 55 a  a!RE -%0 w ~%xe rt 7b V `e F  %.*e U? `e 70U? a7 ?U ew DE ww D5 0@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r ` w fff 5& Beww  fff 5& Beww  5 %O N  = 1555Ne5& e5T155'0Ne5 B& e57  Be0" 5%T155 5 B5@B e1 a=%171w %T15 B5Ne5& e55e0%T17`Jʕ0%1ʕ1  %1˕0 ʥ9 w LNef   w:w $5@} w w N tf j%ww Ntf j%wf@wL fw w 2"w,fw w w 8"w f@w w w @"wfw w H"wf@wh wd N"wfwP mL H T"wz< wm6 fw& T"wXw f BRfwZ"f@ww^"w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFQ/usr/adm/wtmprNo %s %-8.8s%6.2f total%9.2f %.6s d o xh fv eX g2 cD sh lh L u r D O X U(null)..0!M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\  AAAAAABBBBBB 6T1#cMk0 47:=@}}   0  6 >  67$ % Xw :%@  b w \ fef % w w uDAB %u f& & e w5 5  W- W00u5  .u BwF J@B _v@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AL ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& J%4 ;#%\ ] h  ! ! f  & J%S  w@w DE%& J%  w w T  e-ww D@     4 4 w.f x@w  %U7%U7%%~Ae vBj7 l55 a  a!RE -2%% w $%e rt 7  `e   %e U? `e 7%U? a7 ?U ew D`E ww D5 @ r5N f!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf %ww Ntf %wf@w fwww  wr fwm wPwmfw w.w f@ww!w7F@& BF%s ydloxxFfTe6gc"sFlFLulrDpO|XU(null) # # 6%c NkI (+.1iVqq @ 0  6 >  67$ % w  %@- n e   @m& @ ! v l h  & D-  J @ <  &  w w DC  @; f & 5ww DuNfe& %4 ;#%        & %S  w@w DE%& %  w w   xe-0ww D@  F  " 4 4 w.f x@w  !$U7!$U7!$!$!Ae vB!7 !55 a  a!RE -^!%$ w P!%J!e rt 74! (! `e !  %! e U?  `e 7 $U?  a7   ?  U ew D E ww D5 "@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef ,  ww N tf \%ww Ntf \%wf@w fw@w<w8 wr fw"m wPwmfw w.w f@ww w7F@& BF"" 6$((cOk/"%TCmCm @ 0  6 >  67$ % w %       @̋ %@ԥ/ ʋ@ "    w2w "D2 .  *     ? w   w DuNfe& %4 ;#%        & %S  w@w DE%& %  w w   le-<ww D@  :   4 4 w.f x@w  !$U7!$U7!$!$!Ae vB!7 !55 a  a!RE -j!%$ w \!%V!e rt 7@! v4! `e $!  v% !!e U?  `e 7 $U?  a7   ?  U ew D E ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf P%ww Ntf P%wf@w fwLwHwD wr fw.m*& wPwmfw w.w f@ww w7F@& BF"" 6$cPk,h  s'o'o 2 0  6 >  67% % w > %_@5- @s e @5- @l fe %_@5- @ @!  f  7,!_@5 f  7 !_% @ "7 w #@ "7 w  %@5_  .  E| r n Eb %@5_L F B  > e w "   E   E  % ew %     %_X%B%xvprlf@& e V&@:2 e@  NP   Ne   wh w X 5 5  0 fff eC `@ `ee@ 5u@e!A@w w ff r %w w  fef % w w D@w|  4 e&&4 && %4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .uv BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w |DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& (%4 ;#%  """"   & (%S  w@w DE%& (%  w w    e-Xwzw jD@    4 4 ww D  w r< wf L =@+ @ a f  %Df L &  r e   f  4  Հ rw .D& .      & ww  - wef >@w  x<&U7j:&U7`<&^:&VAe vBB7 D55 a  a!RE - %:& wF %e rt 7  `e   %e U? `e 7:&U?x a7j bd?\XU ew D8E wxw hD5 @ r5N !w65A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww N tf L %ww |Ntf L %wrf@w" fww!wfwww!w f@wvwrw n!wfwVwR!wf@w:w6"wpfw"m"wPwmfw"w.w f@ww"w7Fw "B A@ C@ppC`pw @& BFrr%s %s differ: char %ld, line %ld %6ld %3o %3o cmp: arg count cmp: cannot open %s cmp: EOF on %s dox`fnePg*c<s`l`LurDOXU(null)$$$$b!  AAAAAABBBBBB 6F&cQkgt&pll  0  6 >  67- % w V  &  %  &    % @ˋ3a  x }'   # % &  ! !&&&&&@ 7&e % @7&e7&@e7& d&t& ~!# %   6& < ww  & @5!# % w%ww   0G &  &S!# %c &% %- %  (% -r%% -j%~% r % %   ww      wd X% %    c 4%w  . E B $  $E$  !$g!# %c $ % $   x &$ %   ww    wO$ \$}!  # 6P$ %   $  w   $  x  7##   # \ 7#!#   RwLm ## %    2 c #w   "  N#  9# bB# !  8# % t ww "" !#   b  &    & " 0e ( m"7"  m" q  "!# % "" x"|" -P"ww V 7@"8"   $" \ 74" !#  D " %% ww t  ! \ 7!wdfe! z%%%e !!# %  w  p! \ 7!@D! Z!"# %D!   0! \ 7J!  !#"# % efe! %%! fe z%%%e  9"# % wJw :W" % w(w z }"# % ww d ww  L F  @ :  4 . N ww   (( m  m"# % -w~w n   m  -wXw H " m7 m a  "# % -` ww   &     J   ""# %,   7 "# %  ! &  0e $( %! z$( z% ! &  0e $( %! 2$(z z% P! & ^ 0e $(F %! $(0 z%ww   3' %vrf f %N w@w 0  \   w'&  w  3'f %% 5 A @ 7 w 5 5 5 $(f z%! 5 $(f %      @wDw 4' z%% 7w  4'( %(X w  & m6 < m&&  & P  m 7 m w - w   4 xF  P ("7  7    \  "# w7w d## %ww 7%c' 4f# %ww D ̋/ D-C̥/ ̋ww p N& # %(# e' e&e,# %w*w   % ww C46e   # T ww >#  ww Nfef >%@ w w #fef >% xwh w TuDAB %u f& & e w5 5  W- W00u5  .uN#BwF J@B _&@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A#ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E T z f T  #̥-%0  E: E:  &E T  z f T  wN w > DuNfe& %4 ;#%#  $*$*   & %S  wr @w \ DE%& %  w w # e-w w D@ 6    4 4 w f x@w | <$- $N rf %J$ % r& %M$ %w w N  `w w Ne < f  ef&@ 5uNe c*Qkt&pllw/%J %K  t@# t5B#  N  5   %D-D-% eu Ne  w w  DC%: e`m e rfw w Q@f&  e5uQ@f& e5u eeQu  B.< ff eR< ff eC r<R r< A@epe@ f& Rew F  5 $u   5u F   5`u`u 8D74 %n$  P$  0!P$ 7 B.wBw 2(.p$ԔAA WpCe$(.ԔԔԔ BeWpCe$ԔԔԔ& @ ed& @ ed& @ ed& @ @%d 20e@ ed& @ (.ww rA r nwhmw RD % A r  r e0@ԕ A r e0@ww  V.U7T.U7V.T.Ae vB7 55 a  a!RE -T%T. w F%@e rt 7*  `e   %e U? `e 7T.U? a7 ?U ew DE ww D5 @ r5N !w~5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef 6  ww  DDԋ  r e0@  r X a %z\'w  f  %@w vN tf %wlw \Ntf %wRw BDCԋ w8@w D  ԋww w w ^'7~wf@wT fw w d'w4f@w| j'w ffw\ wX wT n'w f@w: w6 w 2 v'wfw w ~'wf@w w 'wzfw m 'wZ wm fw 'w8w fAW @w f`.1`.7 5 e8wx ' 5w7L7H7D7@7<7874707,7(7$7 77777 777f&< & `. f BRfw 'fw 'w( f@w w 'w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF  e( F r-w-s@x- r-w-sx-r-w-tx-J R Z f n v mrxtdpquvnbail/tmp/vXXXXX/tmp/v1XXXXX/tmp/v2XXXXXar: bad option `%c' vXXXXXv1XXXXXv2XXXXXar: one of [%s] must be specified ar: only one of [%s] allowed ar: cannot open %s ar: %s cannot create <%s> ar: cannot create third temp %s ar: abi not allowed with q ar: %s cannot open ar: cannot create temp file ar: %s not in archive format ar: creating %s ar: cannot create %s ar: %s not in archive format usage: ar [%s][%s] archive files ... ar: %s does not exist ar: %s not found ar: %s cannot open ar: creating %s ar: cannot create %s ar: cannot create second temp ar: phase error on %s %c - %s %3d/%1d%7D %-12.12s %-4.4s ar write error6do(xfegcslL>urBD O,XTU(null)$,$,:$Unknown error: M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec%% %:%J%b%l%%%%%%%%%&&.&:&L&[&k&z&&&&&&&&'','8'K'#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large/!6.0# c5Rk tt   0  6 >  67' % w @ 5 %  @-    ee%@w@ȥ0ȥ9f 6   " !" % w ~ fef % |wz w fuDAB %u f& & e w*5 5  W- W00u5  .u* BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* An ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E , z f ,  #̥-%0  E: E:  ((&E ,  z f ,  w`w PDuNfe& P %4 ;#%~  P ## N  & P %S  w@w nDE%& P %  w0 w v  ~e-ww D@     4 4 wf x@w D  ̥9Wp @@`e     + -̥0  wBw . t!'U7f!'U7\!'Z!'R!Ae vB>!7 @!55 a  a!RE -!%' w % e rt 7    `e    %  e U?  `e 7 'U?t  a7f  ^ ` ?X T U ew D4 E ww D5 @ r5N N!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w ,Nef   ww N tf %ww Ntf %wf@w fwww#w f#wr fwm#wPwmfw#w.wt f@wdw`#w7PF@& BFusage: kill [ -signo ] pid ... %u: %s doxfegcslLurDOX,U(null)%%!`!h!r!!!!!!!! ""*":"L"X"n"""""""""##%#4#L#Y#o#~####Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large6%'c=Skc@~n3[ pj  0  6 >  67t- % w b 555$5&5" " @e*5_t@" @mȥ-_ @" @m r yX ( (_t "u-"_t@" @m7"" 5%c%o_t"j V  _t (_t ( t(@" @m=e h( h( `( } V  N( F(_t@" @m _t _t@" @m=e@e@-_t  V _t '  V @" @me7''_t!'_t   !_ " %_@" @m5N 5%c%s J'@& &p'%d&  "! V  of  5N(  l@$ $p(%d$  8! V  N %oO L _ _ _ _ % &2 _Z _ _ _ &_  V&  V @" @me74&0& (& "u-"_t & &V!& & %[!% %J%C 1 2! p*7@ 0% b k! #% b n! %. b q!. ~%B b t!B D  T%  L%x!!7 6%! &_ %1! 7   z z  ! V      x % x  x % x L 7F1: 762( 7&3 <$  75 $  74u(5 "u-&"_%& @" '! @" ' %s@" 5'_ # i@" &'  7x!!@" 7'! x#!P7p!@e*5 @ p'eu-(@ 0 ''B 0  # # # "!wh! "  "! 7 7 ' 0 !   "s@" &'  7j5b |"Z| 7 z ' 0  Z"#!T 2P (L 7 J '. 0   >57 > "! ! ! o@" &'  7w7  \  \  \ '! 0 %__| !_ $_5 "!!< t! !j D@ !'@ $' @ A" "p('u-$"  @ !'@ !'@ 0 ''" 0 7P %&%  o   \ w w d w w z Z \ T \ f H \ B \ < \ * \ D wX w H Nf . "" r %  ""    ""@ ȕ  "" $  w w C %/ ”% %ӥ.w w N ԥ/̋tw~ w n  57Nf  N " d Ne X@-@E5% N%"  h@tE %" dw w 4C, (Ȕe- 77 8" V w w C %o  wt @e” ̋Cw B N >w< w , Nfef  %@ w w "fef  % w w D   t 4 w w uDAB %u f& & e wT 5 5  W- W00u5  .uP"BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w :DCB &E $ z f $  #̥-%0  E: E:  &E $  z f $  ww zDuNfe& r%4 ;#%"%  ))   & r%S  w@w DE%& r%  wZ w F" ve-w8w (D@     4 4 wf x@w  -U7-U7--Ae vB7 55 a  a!RE -H%- w> :%4e rt 7 . `e   .%e U? `e 7-U? a7 ?U ew ~DvE wpw `D5 @ r5N !w.5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef *  ww N tf %ww tNtf %wjw ZDCԋ ԔwLw <DCԔw4w $ww >#7 wf@w fwwD#wfwpwlhJ#wcHSkog@~n3[fw7 fwBw>w:R#wl fw$m Z#wJwm fwZ#w(w fAW @w f-1-75 ew`# 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & - fw f#wB fw0 }f@w w j#w7F@& BF~#~#/lib/c0/lib/c1/lib/c2/lib/cpp^ /lib/crt0.oWould overwrite %s-f overwrites earlier option/lib/f1/lib/crt2.o/lib/crt20.oToo many DIUC options-t overwrites earlier option012p-B overwrites earlier option/usr/src/cmd/c/oToo many source filesToo many object/library files012p/usr/src/cmd/c/c0c1c2cpp/lib/fmcrt0.o/lib/fcrt0.o/lib/mcrt0.o/tmp/ctm0acc: cannot create temp%s: cpp-c0-Pc1c2as-u-o/bin/asld-X-lfpsim-o-l2-lc/bin/ldCan't find %s Try again Fatal error in %s no space for file names d o x f e g c s l L u r D O X$ U(null)++<#!;6-0 ((cLUk+)W[ %. 0  6 >  67 @% w V%b@ $ ?  $@ E? D" ? w0%w %  # %< #  # %< # % @e5_L vNh@  7 ~Beʥ-_D`ȋ_J` r y.@ D-m@  w>e ƒ  NAWpfe . 5  N& h N N& Z e D-@  Ne 57 @  w `5`ȕ-` `H_J @ < 8 6 4 2 . $   @  o   _X    _X  _2  D-}@  Ne  `ȥe_Xh_X    D-@  Na5 _| _"   D-_Nf h w:"w *"7   h@e5j<\Be @  ʥ-G e4 l6 o. u+ v( `ȋ3` DN 5& V V& V ew- e `ȕ-` D- 2 wH!w 8!`Wp `DeeL;tܾ ؾ w w AWpDee@ 70`7D;77 7 7777  8 p w w t D   x:@& & ve( d"wL  ff % (e"eee@ v5`u`u  & dd <ewN_%@   &  #e"_Wp N.D P#%  :e:@&  dzdee@ ve@ 5uff .% _JFd@dee@ v5`u`u w ffrj Re c |9el9 wj  A@e @ f& e 29pHe"9w 95 'AWp e.DN 5u@ AWp @8D6Dvf& % -]-8 w,w A Am@ 5u% %N  @ww  ff %mm5  bE% @  wbmbe 5`u`u tbffrj ReN n  \f5 E5%9%65  ںL"f+e '    `  e7- e  "e ee a  0Aav |%7l Aab |%7X.AzaN |%7D;Af: |%70_w-_  8 pw 7 *7 (7 &QA 7XA 7_A 7`Wp Cen n  ` ]-~Z-vW-nT x7 ~ p  7p7p7d7b5 ^ N?"Z0 %#J %$: %n   Et %dAf |%5e e  и иԸe?E?7ȸĸ eE7 7 m5@m75 n 8   xB@Uv P  qA  }A  e md m^ mX $tm   7 Af |%7 r 7 ww D  A  A  tt ww     @ V!  Z J  <    "   7.^*^&^"^  ~Wp m@7^ "A   U7]7 ]7 ]  7]j 2%ww   @35f z"   AA   d"f 2# =  @ $@@epww D  x26 ̋D-/  & l%.rj Rej  j e @ f& (%e%%e1L d"wpw `ff F %^4mZ0mV,eu 8\0\ (\ ee@ @mAm@ f&rj Re_v  n  `5 E5%S%P5  I vF rL_? n 2%5 tA  _%T B  3e7h_7- b_nB  &B  Z"[ffrj Re [[m[   @mAm@ f&|j Re jeZZ   @mAm@ f&rj ReZZ Z `  ee@ @mAm@ f&|j Re: jemJZPmFZLmBZHw8w ( Z Zw$ Y Yrj  YYeY Y Y 7B   Y Y|j  YYeYE  xN@m5CN V NN & V mZmVf N  n@ r mNtE@`el E @`ew  ڱ ڱe& V & V 5? Z  Z Z  p Zn V Wp en  zd d" FHB $TBNB " ZB-8- wHw 8N z & D& #e   V ~& P#%% d"ww   nf  [к[ n 2%ww C DrW nWbW~ZW `ZW`TWrj ~wpw `DC N& V ~wPw @ A@v5u@E55 D bf 5 u Lhh 5 u A bf 4 R  T-TRbfs A@EvfcWUk꧷)W[& #eej P#% 55 s`B  t@ `e % N x4@44 w*w @ Eww D  vf&& Re   @  U njeww Dv7U7p̥-;l7iBmBR J``p `.`. "`a `0  e 2# 7e%  2# 7ڭB  7R7P 7R7Pnj7T7TT& rj Re T@  rj %e * rj Re PTj  @j !% w-:Tw<Ne " w-Tw 5 n@ @`5%nE rOD e w5 n%n e%w nf  W7 W nww x /%OB  ғ ppƓWp Den7=n  FWBW w w w $W     " # $ V!Vw mVmVmVw B  ztB  tRjB  B NB  % w>wT w D CBtE  e B  w w  ffrj Rej  %QB  Q E7Q 7Q E` 7Q E7Qw w DCe  wt w d @A H ȋwP w < D|e  zw( w  De@&e& $% B  e4w w @Cfef % `)w w uDAB %u f& & e wb 5 5  W- W00u5  .uBBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A0Cҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w H DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& $%4 ;#%@C% .!  ,  & $%S  w@w DE%& $%  wh w T8C \e-%wFw 6D@  d"  f 4 4 wf x@w D  ̥9Wp @@`e     + -̥0  wzw f U7rU7hf^Ae vBJ7 L55 a  a!RE -% w %e rt 7 r#ܱ `e ̱  r#%e U? `e 7U? a7r jl?d`U ew ,D@E ww D5 f @ r5N ,!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w dNef !  wRw < XDԋ  r e0@  r X a %zCw  f " %@w N tf "%ww Ntf "%ww DCB ԋ  @ww rw!w! C7tw^fw!w!Cwx f@wb fwf!wb!CwBf@wJ!Cw& ffw*!w&!w"!Cw fw !w!Cw f@w w w Dwfw w Dwf@w w Dwhfw m DwH wm fwp Dw&wb fAW @wJ f17> 5 e$w((, D 5w7L7H7D7@7<7874707,7(7$7 77777 777f&$ & fw Dw@fw$Dw( f@whwd(Dw7֬Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BFPremature EOF__.SYMDEFj\@/tmp/ldaXXXXXJl2<V < B J R Z &,2l.outl.out%s: Bad output fileBad 'use' or 'entry'-v: arg missing-D: arg missing-D: too smallbad flag%s: fast load buffer too smallout of date (warning)No relocation bitstext overflowdata overflowbss overflowsymbol table overflow_etext_edata_endbss overflowUndefined: %.8s bss overflow%.8s: Multiply definedEntry point not in textcannot create tempcannot create outputinternal error: symbol not foundLocal symbol overflow%.8s: Multiply definedRelocation errora.outl.outa.outa.outNo pages-la/usr/lib/libxxxxxxxxxxxxxxxcannot openSymbol table overflowld:%s(%.14s): %s Local symbol botchBad formatoutput errordoxfegvcslLurDOX U(null)C/!6 0< ccVk|m[   w' AAfA}AyAw ~ z C P@    w ? u &7 ԋ 7. w4 &D7: 7@   zw ?  @as: Write error on temp file. @&f@ B &B? Bw : rB7 L  r e0H~F  @% 6B! ?&e -C A?A  >w A! A A& p!=<!:7A W!!w x̵w mݠA * AA7Av S?C_  W w xW E : E бw x.!;!  @! @w Nxw Fx  tw w (f ! !;!efA" " " " & &  ~ 7r> Z ` Ґ7X> Z*r ve&*7 W &*er P w AD $$$$ A&e7!ej   7& C C re  re h f  dw >09 0Wq `Wt` b f  .A 7B=@@ lea be e=7 = ?? ?E<( 7>(><7<> >w $iwd> 7v7><n dw V? w>7<>&f H>D < 2l>7 f>   ( !y^  ыD//<>%7;W 0W 9wD T  | v& pU7= =    w g< X7 = $ U B = 4< >    \  &ҋ  > w <wn s t e0r apw  <w re w & p x>p>pp>>>R|>^   e| !,  e\ !,  e>  4!, m$<  E | w XU  ;! x!, n *7) 7! U >!, 4 w x!('!-6!$G!*M !(  e^  eF p!+  !(7;- t \ 8 `e p!*w ,* :7`w a    w e!)w ) f+7 :  w "]!a!k )  Ow fK  H D$   &: x y+ - * / &    % [ ^  ! + ,9 P .!]w ] 9& # Y}+ - * /  & d Z %n ! ^V =   w tt3w jf rB*w XB`%w NB w DA B@w 8BPw .BpBw "f rw A B`+w`&PEEE &     U.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~C  " % u /lib/as2--oa.out-gA$f xxxx as: symbol table overflow C/tmp/atm1a/tmp/atm2a/tmp/atm3aAC...r0r1r2r3r4r5sppcmov movb cmp cmpb bit 0bitb bic @bicb bis Pbisb add `sub brbnebeqbgebltbgtblebplbmibhiblosbvcbvsbhisbecbccblobcsbesjbrjnejeqjgejltjgtjlejpljmijhijlosjvcjvsjhisjecjccjlojcsjesclr clrb com @ comb @inc incb dec decb neg negb adc @ adcb @sbc sbcb tst tstb ror rorb rol @ rolb @asr asrb asl aslb jmp @swab jsrrtssys clcclvclzclnsecsevsezsencfccsetfsetd setisetl clrf negf absf tstf @movf movif movfimovof movfoaddf subf mulf divf cmpf modf movie moveildfps @stfps fr0fr1fr2fr3fr4fr5alstalscvmpypmulpdivrashtashcvdvdrxorxsxt mark sob~.byte.even.if.endif.globl.text.data.bss.comm0 0T W- WugTgFWo$ 7 w u 7w ؀ 7 w  fDa~ r cnVkm[ve&* &*er Ke W 'ᇇcpWkM]>~vv  0  6 >  67( % w D%`$&   # % %G& ` w$E%@ f %$@ a&  !$E%@ @ a a&  P @  #  w 0f$f  NJ # %_` _Z#E%@$f  _T#E%@N f{ fe e@e5$f  _#E%@N -""Nf # e_-""f  E!  >"Ef # e !x!E p!# & % X!P!E H!# & % %y"N _>N  Nf D @ (%  #  wv  ff  e #   Ne  % $f  N  N !_> w $f  NR!E%@N !_x/!#  oN |%TNfe d @e5I!fe $ N fe $ $f  NeK!4Z!Nf B N !& B !& B !& B  |a/ !# %w$f  &  $f z &  !_f X &  N *!f . &  N *!f  N"-r"_-d_N L N L z"G"$f  *f  &  _  %Nf D Nf}"# e_N  ((N"# %N _Nfe, $ "fe, $ "fe, $ Ne,  Ne,"# %Nf D _Ne,f & D +N *fe,"# eNe,f h & D _Nf D _ _Nf D Nf"_N  N"_xw " D (5%/ 5%(/ =|!(w #w Dӥ/ˋˋw w 5 zNfe d %z .Nexfe  Ne## %0#u-zNe |%_ \##  w0 o#fe $ q#fe $w Dt#& $ & B w  *w#& B y#& B  w Nfef %@ w w | BuNefef % = Ne&  @w6 w & D@w  4 eR)4 && d%4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .u|#BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A#ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wXw HDuNfe& %4 ;#%#q  $$   & %S  w|@w fDE%& %  w( w # Ve-ww D@     4 4 wf x@w  h)U7f)U7h)~f)vAe vBb7 d55 a  a!RE -*%f) w  %e rt 7  `e   %e U? `e 7f)U? a7 ?|xU ew LDXE w>w .D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   wrw \N tf %wRw BNtf %w8w (DCԋ Ԕww DCԋ w@w DCԔww D  ԋww ww j$7:wf@wz fw@e7p$wRfwD7p ff@fwRwNwJx$w fw4w0$w f@ww$wfwm$wwmfw$w~w f@wb fAW @w ft)1t)75 e8wz$ 5w 7L7H7D7@7<7874707,7(7$7 77777 777f&< & t) fww$w| fw$wb fwc{Wk`>~vvw$wB fw0 }f@w|wx$w7F@& BFmv: cannot access %s usage: mv f1 f2; or mv d1 d2; or mv f1 ... fn d1 mv: cannot access %s mv: directory rename only %s/%smv: %s is a directory mv: %s and %s are identical mv: %s: %o mode mv: cannot unlink %s mv: try again /bin/cpcpmv: cannot exec cp mv: cannot unlink %s mv: %s exists mv :target name too long /mv: %s exists mv: ?? source == target, source exists and target doesnt ...mv: cannot rename %s mv: cannot locate parent mv: no write access to %s mv: no write access to %s mv: no write access to %s mv: cannot move directories across devices mv: Sorry, path names including %s aren't allowed ..mv: cannot link %s to %s mv: %s: cannot unlink /..mv: %s: cannot unlink mv: cannot link %s to %s mv: cannot link %s and %s mv: ?? cannot unlink %s .mv: cannot access %s mv: cannot move a directory into itself ..mv: name too long /...../ d o x f e gp c s l L u r D O X U(null)&&h$!;6 )0 cXkpz  @U0 0  6 >  67) % Pw Tj@-h U@a r y0!D7 !A7 >7 ;  / ! " &@a^      'P  $ &hp  @aȋ e%ww%p !! @m& I 7 e` %@r  F$ <  "    7`  0    P   E 8& d ^ * d,   8%   I 7 &   E & M    I% Ob O% Eh Op O PwfRw VR ( 7t7r@ ( 7l!7j!( ( 7>( ( 7. ( 77$ ( 7 d ( 77         wQw Q( VQ%( VQ% VQ%wfQw VQF ( 7: ( 7z( ( 7j ( 7Z ( 7N ( 78 ( 7( ( 7 ( 7 ( 77               m -fwHPw 8P*p VQ%B T VQ%. D VQ%  VQ% VQ% VQ% VQ% VQ% VQ% VQ%d VQ% VQ%wdOw TOL ( 7: ( 7xe ( 7d \ X  w Ow NNf Q = wN% w NNWp .I%wNw N%_ %~__ : r yf  xH .I P6 .I% R" .I "0Wp Be (  & VQ% ( 7  ( 7 ( 7 ( 7 ( 7      $ wM :7l%r_ f_ ̋    :76%>_ ̋    :7%_ ̋    :7%_ ̋   % :7_ ̋   % VQ% :7xp ( 77_  0  -$]`&  Zc&  R :5-Nf  <  ̋    5"Ne       p "    @`0 -J  @a %  @@m p@@m % _ 7_ &   .I%  ̥%_   6 & $  ̋ _ & $  ̋5 & $  ̋̋5 H D .I f .IeLf "  m*0 m %   7`ed-$  _H _x R _ _h >  _  _ _ e P7.%"%C B _ _ D ? _H _x ̋_  _  _ _h   <_L  _ _   r  %r_ _$ Q D .I% d_% 4>"     % r y\   ̋̋7  70" @  U _   ̋̋ )& " ) z% r_7 %7 @_%   _% _ L 9@ 2e0u   .I%      .I % % % %T _% _%{&"  _"  _"   _"  > .I%%%:_  _ & " _|_ % % % %|%/__ % %&_) v  2)) :7c ) _  %}) 0 2)) "  )  _ mvs )% _(( )0  # %> ) %,2) _) "  ? %>? Nf S @ ȋu-u-wtu% hM w_  %"% %\  !) %l %  |  2)  _ % ~7:_ )*_ _B%\ j !|" R%-_8%]|_8 6%\ * ! uu%A%Z%a%z %0%9 @ 5@|" u-_2)   --7*") " )  7`e- %  _ 02)__< _ _  _6 _ n7 _6 _  _6 _6 X2|" % %^ %]_V 5 @|"2) %2) _B_< _  _n _6 _6  " ! 7 %0%9O: R _ )) cXk}pz R _%? %*%+  )c ) 2)%_L_4 _6 _6  z  _0 _^ _  _ _6 _> % f % ^% V_ h _Ne0u F ( .I% H _ p2  8 "   .I%"   _w @6 H7 F7 DBe$ .* ^I%e@e  Vw?e 5%,  77 m%#@ |5 -C   5%, r h7h7 bpe%@ e -2@5  ] X xz V 0 e5%# | %@ |_@ 5  ^I%@e ˆ_l |4 ^I n_lb_ XNU ^I @ t D@ t 5@7" u@ 52@  b 5%#  | A p @   |@ _@ x r  F/f _@ & " z mb l   7`^ Z & " R L m8 @ %(> `   7`$  e- u  m  m AH_@ _@& &%7 _@7 _@% |r ' 7 & &%7 7 d H_@ (7  (7   ~ r  &%7n X <6 ^ 0 J J F |"<   2 % ,  $  |"   % ? e-    ' 7  _@ ' _&_|&_| "   ' 7T & &%7> 8  &%7( & &%7  _@4- 7 4  _@7   |)  &%7 7-  7 + |)7   |)x  &%7j d -\ ^ Z R  &%7D > 7-8 4 . _@   _7   |) &%7 7-  _ _%_7 |) &%7 7-~ |) ' 7d\_&_|_ (72   ' 7& &%7_B&_F7_@w 8C%      wh8 : 6w H8@   w68 w "8%0%9 w8w 8    .I%  .I Nff .Ie  ȕ  M % * Pw7w 7  ~ P .I% B .I Nff, .Ie  ȕ  M  N Nh Nw7w 6 @a@-w6 @aȋw 6%a%z %A%Z w6w 6% % w6w 6 7z J jrc fe I% fe I 7 Ne    .I L%w6w 6D@ w5w 5Bʥ- ʋ ʥ0ʥ9 ʥ-  ʥ9 Wp @@`eʥ0  w5w 5C  Ӌw~5w n5DC ̢w^5̢ ̋ˋ w :5@%\w45e@ r y     \0@%0%7u`e               w ^4 |"x4|" %|" %%_!" |""! |""! %%I5  |"" "4|" %  (|"5 "" |"2|"h" %  N %w\3w L3@ r y&  @w83   0 %0ĥ7@t@`e5%0%7    " &       $ &w v2 Nf  wf2 e w B2 _% _~% "_$ '_$ /_ $ ;% {N |  }N_%޿ Ȑ_% _%%_%%| h _% _% ~޿ zȐr M f \޿ Xȕ N M _% ^_% _%" ޿ Ȑ  M   ݿ Ȑ M %*_" ݿ Ȑ M -%* ݿ Ȑ| M >%/_%` Vݿ RȐJ M w\ '" ݿ Ȑ; M 4%\ ܿ Ȑ M  ) ܿ Ȑ M %    ` w % % % 5 ^ _<#P M n_": w`/w P/2..7(%0$ > 4 0E$ I7%;%7 OH  m& I 7  mJ    E I7~ e%  O w~.%  nw `. mpHr mdHd mXHV mL HmF@ L x, @ m""At H@mȋ@mȋmȕ@ mA mAH@mȋ@mȋ@ mmAmH-rژ %hڷ ^  | xw\-w L-l m\H^ mPHP mF Bm@@  xB N  mȕ- %     w, mȕ@ mmAmHw , mH m m% @ rmpȕ-@f%6    D @w$,w ,%cط w% w+%sط @7N  %@`?ط w +@ m%< (6 xb @ m& ' (@ m |)@ mp @ mb |)@ mN& && &%w(+ ƒ w + @ m% r y  ` -7 N z,N C % @ m *w*%%% 3|" %@ m5 @% p|" z|" @`Ȭ" @`-R@`-F"> : %?. *$m-$ @ mH@ m@ m *@ m_* I_F* J K L_z* M_*_z* _F* I_F* K_z* L_* H_F* I_z* J_F* K_z* L_*w )LB@ @m4 aȥ - m % \nF  w(w ( @- @ m m  x aȋ aȕwd(N - z, m\H- mPmNȋ z, m8 -w (@ m% r y< r @ mˋ_>.!N@ m -@ mmȋ"X % &5Q A %> &H $7 %4 &?@ mx -@ mj -. $ % &% r%@ m4 $ % &<@mȋ 2,@mȕw& $_>- % &w & o .I z .I ӎ r .I%^ .I  a -7 z - , % r-* z _05 d` mV 7 4|" % m45 @ m|" D- 5 |"_0 "1  27%L %_0 m @`5@ m~%@ mn  x@ mN5pp"p|" % p@ m%L*-F%  $  , @@m0r@ @ar@@m0r@ @ar %_l/@@m0r@ @ar Nfferfer |2e mx -_ / "  .I w$ w $@ m>5$@ m*e55 Gue@ m%D-%@ mH-%%@ mf 7 @ m5uCe dȕ D- u- mT5 ҕʥB-7Nw#w # @ eȋ -&- @w"u @ m- w "A 7`w`w uu x_^6 _.4 @a AaAp|" % @a @a Amp@a0|" D-  %@a#5 @a Amp"@a@- @a @a Amp D- |" @a %  @a% %B- =  @a%@`0j @a Aa% AaAp %@`0j@ej5@e5 P@mȕ _5 m8%_5,@mȥaȥ_5 m5%_5@ m5u- _55   @@m5h@`ȋ'u-h "@`ȋ  @`AmH@`ȋ @`|AmH @`ȋ,  @m A mDH" @m%6@mȋ @`A`AH# u-hu- u-u5  D-_44%\@ m @ mH@ m 5 _&7@`ȋ  m((A`H ~z mh AmH @`TAmHF@m_`7@`.AmH3Nf %@ m mH  D- _7mAaH  m AmH  @mA mH" @m%@mȋ@`A`AH# tmzA`H nj mX AmH @`ȋ_68m>A`H 2. m AmH @`ȋ@ m mu Hm % @ m w-p%f=O%  w LDC"ˋ!w: w &5 5 B@ m\5%,P  Q m% @ @a mp: m% @ @a mp m%d|  m$ m% @B B@a mzpDe C-@ m%%B_:  B- C- 0 @a Aap, @a5 @a Aap @ap @a Aap, @a0 @ @ mt jȿ fȕ \ M  ( @a ! d @aF& .Ie  @a .I% ȃ C- "  @aD .Ie  @aD .I% ǃ C-B  .I% .I ww  @a0z -t"@az"@a0z %"@a4z# %wNw > 5   mp mj AH -5 7  _< mD% m8 _< &`ȋ 5 @m m u k z@- C` Bm m  C-C-CC-_<` Bm` t` f`& ^Ie mF H m: m2A H   @- C `Bm m  C-C-C`Bm m H m mA H D> C- mH -_ ; ,m' .I% ;L A% A: A%@. B 2 G A% B   B  M A%Ď S$ B%Y# B% B  _ A%wX %z~f .I% .I  < ` mN  mD m8& .Ie .I % ÿ ȕ  M e-n .I ` .I R .I  haȋ  m mA H m .I% mx% mj  .I%  .I  mB%  m4 .I% .I  ¿ ȕ  M -"j .I t-X .I%QJ .I f_2As2 .I \B %_$A `#5  %' %\NN .I% %  ȕ  M e ( 5     @m -l   @m# H % ' ` @m0 .I% %  ȕ  M e-f VQ% .I  .I  - `%d`$  .I% %  ~ȕ t M e-xX .I _=w lB .I Nf, .IeNf .IeNf .Ie2 r%ؿ .I  @m&f  .Ie r D-,/ .I D-1| .I ww  u@ @mA Amp wlw \ 5 @ @m u-wDw 46 .I NfB .IeNfSܾ .IeNfbľ .Ie@@a&ft .Ie`B-@`fp .Ie %\ R Nȕ D M eD-( .I wLw <@ @mp h&? fe`Tdȋ -J-D@ @m AmHNf , w  @m- w    ww v .I %hZ .I L .I > .I %0 .I 9" .I Q .I 0w .I  .I  .I ʼ .Ie> .I  .I  .I  .I  .I 2t .I @f .I `X .I nJ .I < .I . .I  .I  .I  .I  .I  .I w w Cһ .I bĻ .I u .I  .I  .I  .I ~ .I /p .I mb .I T .I F .I 8 .I * .I  .I   .I  .I w$w   ww 1غ .I Pʺ .I h .I q .I w w   ^ w w t .I f .I X .I J .I < .I w` w P @" .I%2 .I C .I  e0uJ .I% -Oع .I \ʹ .I l .I w w  ێ @ r&sx e\ .Ie t h> .IeR@& .Ie  ȕ  M w w  lff rO%w w Nfef J%@ w w hfef J% w w BuNefef J% = Ne& M @wR w B D@w$  fQ4 e-4 && T%4 %  4 E w z uDAB %u f& & e w> 5 5  W- W00u5  .uBwF J@B _L@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AXҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w $DCB &E M z f M  #̥-%0  E: E:  &E M  z f M  wtw dDuNfe& T%4 ;#%hO hS %% fQ  & T%S  w@w DE%& T%  wD w 0` Oe-w"w D@ N S  R 4 4 ww D  w r< wf LP=@+ @ a f lT  %f LP &  @Te   f lT  4  Հ rw D& S     S& lT ww `-l wef >@w hD  ̥9Wp @@`e     + -̥0  ww AupuN fQ wA vB w N Rww  F-U78-U7.-,-$Ae vB7 55 a  a!RE -%- wB %e rt 7 T `e   T%zve U?dd `e 7R-U?Fۙ a78 02?*&U ew DE wtw dD5 R@ r5N fQ!w25A vBB-  }ee@ !ۃ `!ւ `@ r `Vw Nef S  ww N tf T%ww xNtf T%wnw ^DCԋ wT@f@w" fwwwfwwww f@www wfwwwf@wwwpfwpmlh$wP\wmVƅfwF$w.w8 f@w(w$*w7F@& BF  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~h 06J  /usr/lib/lex/ncform/usr/lib/lex/nrformUnknown option %crCan't read input file %sstandard inputINITIALINITIAL/usr/lib/lex/ebcformrLex driver missing, file %sToo little core to beginToo little core for state generationToo little core for final packingOOPS - calloc returns a 0%s n H j ~:t"-#+" ). "  "  *$%&'(,!!!!! ,)&J.^( *+?|/$,})}}     lxx@@@@@@jr@ xN$2<`# define YYNEWLINE %d yylex(){ int nstr; extern int yyprevious; Too little core for parse treeToo little core for parse treech table needs redeclaration%T%tCharacter value %d out of rangeCharacter '%c' used twiceCharacter %o use((d twiceToo late for language specifier%}%s Premature eof , , ,# define %s %d Too many start conditionsStart conditions too longInvalid request %s%s Substitution strings may not begin with digitsNo translation given - null string assumed%d case %d: goto 30997 break; Executable statements should occur right after %%%}%s %d case %d: Definition %s not foundUndefined start condition %sToo many start conditions usedString too longNon-terminated stringNon-portable Character ClassToo many large character classes%s state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d Too many definitionsDefinitions too longToo many large character classesExtra slash removedIteration range must be positiveCan't have negative iterationCan't have negative iterationf z X"x""''0'''r''''r'0' ( (8(8(8(8(8(8(h((h(8(8((8(,())))))))))))))))%d: (Error) %d: (Warning) lex.yy.%cwCan't open %s# EOF inside commentNon-terminated string or character constantEOF in string or character constantAction does not terminatePremature EOFrCannot open file %sParse tree too big %s Try using %e numParse tree too big %s Try using %e numParse tree too big %s Try using %e numToo many characters pushed+++,,,,,,,,,,,,----.B./\/0Too many packed character classesToo many positions %s Try using %p numblockdata common /Lvstop/ vstop define Svstop %d integer vstop(Svstop) int yyvstop[] ={ 0, bad state %d %oToo many states %s Try using %n numend 0}; bad transition %d %dToo many transitions %s Try using %a numToo many positions for one state - acomputeToo many right contextsdata vstop(%d)/%d/ %d, data vstop(%d)/%d/ %d, data vstop (%d)/0/ 0, output table overflowj %d nchar %d ctable.nch %d output table overflowdefine YYTOPVAL %d verifadvanstoffsfallextramatchatable# define YYTYPE %s intcharstruct yywork { YYTYPE verify, advance; } yycrank[] ={ %d,%d, 0,0, 0,0}; struct yysvf yysvec[] ={ 0, 0, 0, yycrank+%d, yysvec+%d, 0, yyvstop+%d,0, 0, 0, 0}; struct yywork *yytop = yycrank+%d; struct yysvf *yybgin = yysvec+1; char yymatch[] ={ '%c' ,0%-3o,No space for char table reverse0%-3o,0}; char yyextra[] ={ %d,0}; block data common /L%s/ %s define S%s %d integer %s (S%s) data %s (%d)/%d/, end block data common /L%s/ %s define S%s %d integer %s (S%s) data %s (%d)/%d/, %s (%d)/%d/end # include "stdio.h" # define U(x) ((x)&0377) # define U(x) x # define NLSTATE yyprevious=YYNEWLINE # define BEGIN yybgin = yysvec + 1 + # define INITIAL 0 # define YYLERR yysvec # define YYSTATE (yyestate-yysvec-1) # define YYOPTIM 1 # define YYLMAX 200 # define output(c) putc(c,yyout) %s%d%s # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} # define yymore() (yymorfg=1) # define ECHO fprintf(yyout, "%%s",yytext) # define REJECT { nstr = yyreject(); goto yyfussy;} int yyleng; extern char yytext[]; int yymorfg; extern char *yysptr, yysbuf[]; int yytchar; FILE *yyin ={stdin}, *yyout ={stdout}; extern int yylineno; struct yysvf { struct yywork *yystoff; struct yysvf *yyother; int *yystops;}; struct yysvf *yyestate; extern struct yysvf yysvec[], *yybgin; integer function yylex(dummy) define YYLMAX 200 define ECHO call yyecho(yytext,yyleng) define REJECT nstr = yyrjct(yytext,yyleng);goto 30998 integer nstr,yylook,yywrap integer yyleng, yytext(YYLMAX) common /yyxel/ yyleng, yytext common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta integer yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta(YYLMAX) for(;;){ 30999 nstr = yylook(dummy) goto 30998 30000 k = yywrap(dummy) if(k .ne. 0){ yylex=0; return; } else goto 30998 while((nstr = yylook()) >= 0) yyfussy: switch(nstr){ case 0: if(yywrap()) return(0); break; case -1: break; default: fprintf(yyout,"bad switch yylook %%d",nstr); } return(0); } /* end of yylex */ 30998 if(nstr .lt. 0 .or. nstr .gt. %d)goto 30999 nstr = nstr + 1 goto( %d, 30999),nstr 30997 continue } end %d/%d nodes(%%e), %d/%d positions(%%p), %d/%d (%%n), %ld transitions , %d/%d packed char classes(%%k), %d/%d packed transitions(%%a), %d/%d output slots(%%o)KdKoKx`LfnLePKg*Lc  67* % Iw fMNf  Ne r7  0  B p- 0 8  $9  Iw Mw M;* B 7S=  Fd 8% Ju f% h @f@ re 1Ju -Jui 8%Ju f% N  WtpJu ZQ  -<  O   pJu ZQ  -nJun 8%\t 8%_%$_z~ p~ l~E`~ B%A> 4 0ȕ$W&$ F Oz B 7    & F ؊ Ί ʊE B% "H \M} } }E} Bx n jb& F h} ^} Z}EN} B%_( "HwJw J @ =@wJw pJue @ 5f@t6MZ  5f  5N f  5% eu-_ = =uuf  5@ f RB%ZwIw I %@t6M@t5  @w^Iw NI _8.| "Be X|\ "Be zrD "BeN.-@ r&H "Be V@ r&P V@ r&a "Be ʳ "Be  "B% "Be "B%r "B%  3 "B t n "B% \  Z- "B F @0 "B%A "B  "H  "HwGw G C "B Nf "B%S "B%   IwLGw 5 2N4 "B%5 @ Ju@ Ju@t&69ĩ "Be -`A "B J Lu $0 A 1J5 @ %lE_ -vw>w > v.- 1@ 5@@ @!005 @ m0A lp -e0eB-܂ _5 .-4 e-0 5% - f%-Z0G%/5H-)3  $eu%AEtAWt 1P- e-  e@ ]-  @ ^@ 5{@ 5{u-.-" K-e  A53:e-h/b/.-@ r %C @/%> 4 & *L 7Z  -" 7@ e& 0  "^` T` P`ED` B% % %\ ` ` `E` B\ %2 B-_" %2 _ _ _E_ B %* 0 2 < =" > \ {________ 2_ (_ $_E_ BI _ B  _Cp`ew^ I I %_%.%$> II I %_%.%$+ I `t %2 ^^ T^ P^ED^ B_2^ B 4 _# *L _  *L _  *L _  *L _  *L _  *L _  *L _  *L  _ *L  _  *L _  "] ] B _%  Ư%/ 7`\ \ \E% % % % %/%:\ B _w )%@t8M @ RuE %@t6M@t5  w)w )D ̥ 5 @t& *L @wn) -T5 @t6& *L @e -"%N  f  w (JTr th "Be dh "B "  "B 5 T[ J[ F[E:[ B5 h h hHgf F   Hf F @  { } ڰ   g "B L B "B w'w ' xZ nZ jZE^Z B5% LZ BZ >ZE2Z B5 ڒ g "Be_J'%\+Y Y YEY B5%}_\'f f fȕ\f\ F %%)Y Y YEY B5%}Hbf Xf Tfȕ%Jf% F _ "B 5 _/@ %lE 7N  pmnՀ &Ju f%.-N5%&%"@ Ju {- e  e-*N A 1Ju%@m Ju@m A AJAm p VJue-%TF7 V.-_/5k@ 7<^AEtAWt aA@0K@ Ju@ pJu>@ Ju/ N ؚ@ Ju &f? b "Be @ Ju -@  pJu ^ Nf *4% -e-N (5 - _.u &] "B z 8 ww ~@ @m5D5 D-e D- _p15Hu VD  " _Z1eeD-  V V@ rf 8 "BeD C- -$ eeD- $* ' V!  "B   · "B%ee   "B e-܆@ e B- w>w . t "B _2N 25 5 4@ lE,@ p-lE%5 @ 5lEu @ p-lE -u-uu -@ 7`5 @ lE@ p-lE@ lEf  "Be ͵ - N t "B% -_1ww   Ў Ju f%@ Ju 15 5 -@ fe5 Ju@ fe5 Ju @ Ju  3 0@t6  "B%5 @ Ju @t6 x "B% - ^ "B  blE f%5 -P6@ 5@@ 5@u-@5%@ Ju@ A AJAm p VlE eww x@ 5F@ 5R@t5?@t5? N f@ &Juf f "Be w@tEAWtE@ @E5@tEAWtE@ @ ͂ x& @ Ju@ A pJuw z7 5 <@ Ju4@ Jum,5 @ Ju 5 UF @ Ju@m -u-wu - ?7 @ Jumr@ 0 Ju -N 6@ H5 T@ 5JuK '@ 5@ N# V "B%N@t&, V "Be !%%5 N@t&6 H "Be Zɵ - @ t= LV "B%G  "B ww  _8NI ځ "B%@ 5@@ @  2T  "B%eB-@ %lE-@ @A @@@ rWpe.-u@  2Y H "B%e-2 Ju, ^  "B% %(( e l  "B %r  { Ҁ "B% -p    "B%  "B B  Ju Ju&e & h "Be -ww Nf |T "Beww N `T "B% ' r  BT "B  @m *T "B% D-  T "B D-w~w n 7 G# 5F  f 2  "B%  AfepF -   "B%w w %  B 7F' ? >7 v;7 .7 [ ,XF [ ,_:S  V@ r m  _:;}  Lu eV5 Ju eVC-Q K-eV@ r |x 1Ju   $lhV@ r?RD 1Ju BV@ r  m"    -w Lu @Ju @` 1lE-ф -_,:= m  m eT5 m eV  m ` eC- mf @` mV -XRф -  0 V % Vr  lE %$` 0Q "B% J -  =   < R%%. V( V@ rp P "B%  `v P "B% % | P "B e-Ն  X~ \Mww @ mD @ m< eT5@ m$ eV5 V \C ae R-< 74%Ju eC-L- 7 %Ju C  aeeC- V@ rA m %@ mnf O "Be e%JuN  ww @ 0 lE@ Lu eV5@ Ju eV5 _l?5 D` e V% V_j?   -_j?eD-5 ;@ J3 _j?@ JuA @lLu&@ LuA @lJu%e@ J%jiNf nN "Be[ -0D)` e V%Ju -XR  - V@ r&% % eD-Ԃ@ J%@ JfIM "Be  %_>N`  w*w   mp  md  -  lE lE -0 < HM "Be w w xK B  % V( V@ r &PV@ r &x "Be  V@ r &tx "Be\x "Bew w  V@ r  lL "B% V@ r  V A%J% A%Ž , A%w w N2 L "B% ' r @K "B  @mBK "B% D-FKK "B D-w( w   IWp C`e%-> ~> z>En> B%Cp,e&% M w w ff H%w w Nfef C%@ wd w P BuNefef C% = Ne& F @w w D%    | w  - -w D@w  I4 e 4 && L%4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .uZBwF J@B _E@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E F z f F  #̥-%0  E: E:  &E F  z f F  ww DuNfe& vM%4 ;#% K VV I  & vM%S  w@w DE%& vM%  w w  "He-*ww D@ G LL  K 4 4 w.w D  w r< wf ^I=@+ @ a f L  %ff ^I &  Le   f L  4  Հ rw DD& bL     LL& L ww - wef >@w  L"U7> U74"2 *Ae vB7 55 a  a!RE -ވ%  w\ Ј%ʈe rt 7 M `e   M%|e U?jj `e 7X U?L a7> 68?0,U ew D E ww ~D5 K@ r5N I!wL5A vBB-  }ee@ !ۃ `!ւ `@ r `\w Nef L  ww N tf L%ww Ntf L%ww xDCԋ wn@f@w< fw`w\wfwHwDw@w f@w&w"w wfwwwf@wwwfwmwjwmÅfwwHw fww( f@wtwpw7~F@& BF V.-V/usr/lib/yaccparrcannot find parser %s/usr/lib/yaccparyyr1yyr2yychkyydefyacc.actsrcannot reopen action tempfileyacc.acts : item too big (%d) %d/%d terminals, %d/%d nonterminals %d/%d grammar rules, %d/%d states %d shift/reduce, %d reduce/reduce conflicts reported %d/%d working sets used memory: states,etc. %d/%d, parser %d/%d %d/%d distinct lookahead sets %d extra closures %d shift entries, %d exceptions %d goto entries %d entries saved by goto default conflicts: %d shift/reduce, %d reduce/reduce fatal error: , line %d NULL { %s }nonterminal %s not defined!internal Yacc error: pyield %d %s: %d yacc state/nolook errortoo many statesputitem(%s), state %d out of state spacenonterminal %s never derives any token string%d: %s %d, working set overflow State %d, nolook = %d flag set! %s too many lookahead sets2Vy.outputwcannot open y.outputy.tab.hw`o' flag now default in yacc Ratfor Yacc is dead: sorry... illegal option: %cy.tab.cwcannot open table fileyacc.tmpwyacc.actswcannot open temp filercannot open input file$enderror$acceptbad %%start constructionbad syntax in %%typetype redeclaration of token %stype redeclaration of nonterminal %sredeclaration of precedence of %sredeclaration of type of %splease define type number of %s earliersyntax errorunexpected EOF before %%#define yyclearin yychar = -1 #define yyerrok yyerrflag = 0 extern int yychar; extern short yyerrflag; #ifndef YYMAXDEPTH #define YYMAXDEPTH 150 #endif #ifndef YYSTYPE #define YYSTYPE int #endif YYSTYPE yylval, yyval; bad syntax on first ruletoken illegal on LHS of grammar ruleillegal rule: missing semicolon or | ?illegal %%prec syntaxnonterminal %s illegal after %%prec case %d: break;$$%dmore than %d rulesmust return a value, since LHS has a typedefault action causes potential type clashmore than %d rules # line %d "%s" # define YYERRCODE %d too many nonterminals, limit %dtoo many terminals, limit %dinvalid escapeillegal \nnn construction'\000' is illegal# define %s %d # define %s %d too many characters in id's and literalsunterminated < ... > clauseillegal or missing ' or "termtokenleftnonassocbinaryrightprecstarttypeunioninvalid escape, or illegal reserved word: %smust specify type for %s%s should have been defined earlier # line %d "%s" typedef union typedef union EOF encountered while processing %%union YYSTYPE; YYSTYPE; extern YYSTYPE yylval; # line %d "%s" eof before %%}illegal commentEOF inside comment # line %d "%s" bad syntax on $ clauseyyval.%sIllegal use of $%dyypvt[-%d]must specify type of $%d.%sEOF inside commentnewline in string or char. const.EOF in string or character constantaction does not terminate545short yyexca[] ={ %d: reduce/reduce conflict (red'ns %d and %d ) on %s }; YYNPRODoff = %d, k = %d action table overflow %d no space in action table$ %d,%d,%d %s: gotos on %s %d: shift/reduce conflict (shift %d, red'n %d) on %s-1, %d, %d, %d, %d,%d, -2, %d, state %d %s %s %s accepterrorshift %dreduce %d . reduce %d . error %s goto %d # define %s %d short %s[]={ %4d }; ,Rule not reduced: %s %d rules never reduced 2-8Vyacc.tmproptimizer cannot open tempfilebad tempfilebad tempfileState %d: null %4d %4d yacc.tmpa array overflowa array overflowNonterminal %d, entry at %d cannot place goto %d State %d: entry at %d equals state %d out of space in optimizer a arrayclobber of a array, pos'n %d, by %dState %d: entry at %d Error; failure to place state %d nxti = %d, max = %d Optimizer space used: input %d/%d, output %d/%d %d table entries, %d zero maximum spread: %d, maximum offset: %d # define YYLAST %d yyactyypactyypgoshort %s[]={ %4d }; ,out of spaceDdDoDxrEfEebDg  67(' % " w $5 T!  6 e@ȥ-b_ Ne& u-_u-_ X1 W   e%@-   uNe& E% %`uu%G A f  N  %.N  %!       4 E %%   _^ w. w  *ff %w w  Nfef %@ w w D@w  0 4 eX'4 && P %4 %  4 E w D  j t 4 w w uDAB %u f& & e w 5 5  W- W00u5  .u4 BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Ax ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w tDCB &E 4 z f 4  #̥-%0  E: E:  &E 4  z f 4  ww DuNfe& %4 ;#%  2 T#T# 0   & %S  w@w DE%& %  w w   e-wrw bD@   j 4 4 ww D  w r< wf =@+ @ a f 2  %f  &   e   f 2  4  Հ rw &D&     & 2 ww  - wef >@w  4n'U7&l'U7n'l'Ae vB7 55 a  a!RE -%l' w> %e rt 7 r  `e   r %hde U?RR `e 7@l'U?4 a7&  ?U ew ~DE wpw `D5 j @ r5N 0 !w.5A vBB-  }ee@ !ۃ `!ւ `@ r `Dw Nef t  ww N tf %ww tNtf %wjf@w@ fwvwr"!w f@wZ(!w fwDw@w<,!w f@w"ww 4!wfwwADGJMPSyy .V 0  6 >  67& % | w &5  (  5 5 %Q@-KeD  i rN h  |  f   ̋! ^! 8  ef  ffff e ! | wXw HNef   _N4 _@E%@_p _ff  _NH _  NX h  _ f  5f4Ng h  | ( %Ne  Nef| feh eN f fffeh efeff %%Nf N f & 7`DN : N h > 0 f NEf h%  N    N h @w w p .@.@ wL w < N   B N h p  5% Ne @ f  (e f  (e h | w w  ~vE nN! 55% PHE @N! 5% %y w@ w * Nfef %@ w w V!fef % w w BuNefef % = Ne&  @w w x D@wZ  & 4 e4&4 && %4 %  4 E w uDAB %u f& & e wt 5 5  W- W00u5  .u!BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AF!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w ZDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& 6%4 ;#%V!3 ( 0"0" &   & 6%S  w@w DE%& 6%  wz w fN!  e-wXw HD@    ` 4 4 wf x@w 5  5H& P N  N w u-uu   5N  w RH& ^ wLw < P&U7N&U7P&N&Ae vB7 55 a  a!RE -%N& w %e rt 7 | `e l  %TPe U?>> `e 7,N&U?  a7   ?U ew DE ww D5 ` @ r5N & !w5A vBB-  }ee@ !ۃ `!ւ `@ r `0w :Nef  w(P w A@I#EEFNuww N tf b%ww Ntf b%ww DCԋ w@w ww !74wnf@f@w6 fw@e7!wfw7 fwww!w fwvwr"wff@wPwL "wfw8m40"wj$wmfw"wHw fAW @w f\&1\&75 enw" 5w7L7H7D7@7<7874707,7(7$7 77777 777f&r & \& fw4w0"w\ fw$"wB fw0 }f@ww("w7F@& BFrm: unknown option %s ..rm: cannot remove `..' rm: %s nonexistent %s not changed directory %s: rm: %s: cannot read %s/%.14srm: %s directory %s: rm: %s %o mode rm: %s not removed %s: /bin/rmdirrmdir/usr/bin/rmdirrmdirrm: can't find rmdir doxjfxeZg4cFsjljLurDOXU(null)0$0$!!;6&0 ((c\kt #&),/25xx  d^ 0  6 >  67' % w f# r # #f# r w-"w-"   7"     #"  t -"""-"" #"  %% !    -d""&#N"  %% 3    ## r -":"-"0" " L_^w X E  % 7 ~ d!t d! % w w   #Fae% 2 ad!e! m 7/d! w4#d!w Nfef >%@ w w uDAB %u f& & e wD5 5  W- W00u5  .uH BwF J@B _&@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w *DCB &E T z f T  #̥-%0  E: E:  &E T  z f T  wzw jDuNfe& %4 ;#%   ##   & %S  w@w DE%& %  wJ w 6  e-w(w D@ 6  P 4 4 wf x@w  'U7 'U7 '~ 'v Ae vBb 7 d 55 a  a!RE -* %' w.  % e rt 7  (  `e   ( %e U? `e 7'U? a7 ?|xU ew nDXE w`w PD5 P@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef Z  ww ~N tf %wtw dNtf %wZfw6!w, f@w f@w:!w fwtwpwl>!w fwVwRF!wf@w:w6L!wfw"mR!wpwmfwR!wNw fwwX!w( f@ww^!w7F@& BF.../pwd: cannot open .. read error in .. read error in .. /6do(xfegcslL>urBD O,XTU(null)%%4! 6'c]k,B+4SrSr *2$ 0  6 >  67S % "w ~)  & 7G & 7F & 5 &  & e% q x@ȥ- 7 D?   & 0?xFe % bF  <hI^G  7NF% D6AR@DN>  "7DT@ $7,N 5  & 5E  & S $  , wB(w 2( E 7 EC7C7C_*7 C7 CCC   7|C %;,7bC%, \CXCTC r y@  :C* L  $Ce 7 Qe " =  Q7 Q@ 6   BB_l  6A  x x  B B BBBe7B N   _ %a%z@ 6    XBEpRUP_ t_ 8B,Be7*B&B"B BL d  < B  -AAA7 L_7 rP  , J   vA 8& 7C =vA 6 7 C-AA A L P_ _ O R   OvA 8& 7ZC%& HC &e W vA ^% 7"CvA 6 7 O  @@e-@_-@@_7 fO_  B`@  hI^G  7B_  @@@ rE7B B  _ T _w$ _& _& @ 6 _  _V _ _ _Z _ _ _f _ _    I_ _ _$ _" _ _ _* _2 _  *  f?E-M@ 6 MN?J?B?_ _b _ _z _ _ _v __w t#  +%9.5 AWp ue5` L%0%9: > @ 5@ ` %05    r y.@ ^> -J>H>&  -4>_@ 6 e"> @ 6  > %a%z@ 6 =-=㇀ Ep Re `-=-=@ 6     /9  w" _      Z=%/e-N=D=_w ! @=4=76=70=-.=*=@ 6 w!w ! ==e7===-<<<< wr!w b! <@ 6 w\!w L!-<<-<<@ 6 w%l F % @ 6 w w 7 p>7 n> % %6A̋%f@ 6 vA9% @ 6 % % @ 6 vA% %@ 6 p% 7%e%f6AvAԔwF w 6 = H%= n6  w w    &   h7@ 6 ww  &  & -@;B;8;e76;0;2;z@ ^% 7,= 7 I ~ww 7 I7 &E? N 7 <7 <& & &e7 < D 67 D66 6  4% % << H%<S $ ww  d6d67 \6Z6 DD D7F67 xD726wfe& t&% @E7 6w A6D% 75w~E%C@ 6 ^% .@6;6 w 2A; ;0FE; t&% 7;wFE;eFE ҵ ;l;f;j; FEhI e FE 5%C "5@ 6 e&;w ;% #; w FE8Ne  5FE5 :& :: f&fFEhI e NFE: (%@-@ @ 6 FEex:w r:Ԕ -b8FE5 h:& J:D: f&fFEhI ze NFE$: (%@-@ @ 6 w~w n5 w7[77@ r -267e27 N#2 7 l# 77  3w7@ 6 7A@ r 7`p7j7A@ r 7`\7 5 eJ7F7ee8747# J  @ww  ( 9 &  9 &  @@@ %e@ " & Ne ' % & @ ww  P1  E -x6z67 E@ 6 @ ' "ww   xJ6D6  ww DCe$6@ r 76 D-6575Dwzw j55e5e  e755 e757 575(Dw"w A f n CE  ef n CAww  CAh?f n ^CE̔ԥ $78?Ae E7`$?wz~ef n Cw LDuEC E% 0@ 6 7B-^/?w]B6 B 6 & xOhL e (xO$/ %7 B7/t&xO& % P6 & xOhL v e exOw-.8  .0 6$xQhG @ & hGhL  e (hG(xQt. %7j.exQw  A v f&F. &ef2. e%@ 6 ww . H%j=|S %S7 A7 A--7 PA@= ^%  H%,= 8& 7- 5 5hL^G ! 27272wRw B <@ 6 *% @ 6  De%@ 6 %\ % ԕ\Ԑ@e!@ 6 % ԕ 62E-22 -.2 &  @-Ue- 2d   wv1-15 E1@e7; 1ew 6FE1   %DG@ 6 ̔e-1AFE &?r1-p1l1 h1b1e  T1N1c]kB+4SrSr((ww  5:1Q&  HU Z      >2; 7|?E \? |S"f?e%SZ?T?0Z L 0A@ r` ` 7`0e-0 @ 6 ww  % % @ 6  C %\ U%  `:U@ 6 ! Ґ%D@ 6  7+%g7 + Dwx 8 w `A1wZԔ7 1 w > AFEC-95@E%FG@ 6 E5&%&99 H%E%1=e1@-@ ZS@ &PS^9FEeA7P9%FG@ 6 AFEԔww rDCBԔ%FG@ 6 wVw F | @ 6  ..e L .|.A@ r5 `@ ` b.\.E N.e /@ r a7..e *& p  p &7.e p  p  p  @ 6 `w .---w*-e-  w  DD@e5 !ʋ__7 T-7 ;%^  @-4)5 _ ! @e@-_ҕ _%* _ $c *Q .K [c \_ `%(%T;_J; ҕҝ<; 8;_%)@e@-_ҕ R_%1 %6ҕe_ҕ% __ҕb \X TS 7 (!Jҕ Jҕ %^ % :%- n%]ҕ-   %6EҐ %6E .%]@pҕҐ%6E_7*7 :@ 6 ww  0 S 0 S¥  D+ .AFEԔh57f5 -&+N 7 N5D +7<5&  &  75wnœԋ˥&  ԋw 6DC  _ x2@ wԋ̋74& J% ` & J%  0S 0S5 S@ 6 f  @ SA @S`5 S@ 6  @ SA @S`f   &  @ SA @SԋԢ  & J% ` -3_&  _ _@ 6 _w DC SҤ  Sw w p DCË wj Ԡ@~ w @  ** eD FG e * * e0 w w D7 2 ̋ w w \#C l2 h2%Hb27 \2ԕ\ԕ % >%<ԕ-ԕԐ%S#SS (%% % ԕ\te0Ee0e1% %TՃ7"w4 w $ Cee5@ E5A @ vEuD(@mE`@mE@m@E`@ % 5 %5 @  w w  & 5Ne& $ %@ 6 uENe& $ @ ^G% %gGԐ % uNe& $ N & ( w w Dee w ffe $%= uuNe V& 55 l # H% H%N %N % @@ %% @@ %% " fef (% '%  fef t&%% @ 6 N H%N H%{ 5 f ff@@m& eee@ 5u % 5 @mH@m %5 A r AaAf  ff neee@ 5u& ff peu@5& AE ruA vu@m5@mAmH@mH@mȋAE 5ru@`ȋ$@mH@mH %5 @mE`H %_A w : @ap  % Ne ' . 5`u`u  @ae&A@t vENx^ %Nfe  wf @w  2"TU71 TU71"T1 T1Ae vB17 155 a  a!RE -1% T w, 1%1e rt 7l1 &`1 `e P1  &%8141e U?"1"1 `e 71 TU?1 a70 00?00U ew lD0E w^w ND5 N#@ r5N "!w5A vBB-  }ee@ !ۃ `!ւ `@ r `0w  Dԋ  r e0@  r X a %z@wf  f $% %@P w ,A@I#EEFNuww N tf %%ww Ntf %%ww DC 5 Ԕ B- B-@ww ww @7.wf@w fww@wtf@U@f@A)wNfwJ@e7Bd.>@w(fw7V. ffww w@w f@www Awfww Awf*wBJ f@wwAwZfwzmvrAw:fwm`fwPAwwB fAW @w* f.T1.T75 e2'w A 5w7L7H7D7@7<7874707,7(7$7 77777 777f&6' & .T f BRfw^$AfwP(Aw fw }f@ww,Aww C  5!$ABA  D & r@rr @`   BJwH& @N   C 5  N B A @ A- A    BJw7,+Fw B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFTMPWRITE ERROR.L~ HSr/tmp/eXXXXXEntering encrypting mode!ed.hupMEM?/bin/shsh-t!Input not ttyKey:/usr/lib/makekey-/lib/makekey-crypt: cannot generate key/!;6VT0# c ^kLOG/G/ @ 0  6 >  67zt % 1w @` 5 n`@n `@n 4n"@ @m @ @mȥ-@ @m : @ @m u-``  7 m_*@ @m _&@ @mȥ-_&@ @m@m5i@S !W xL`^ ^^^7 ^^^^^^@ @-` @ @m z @ @m`  @ @m0  w@^J`a  @ @m u-_ a z "a z ] +a   ]3a  ];a 70l ,lEal *  2= E7r] 2= E7^]x J5 &@ @m5N N 2 Ne& & % ]  u-  zkVa Ne& bk % \  1wjn B>al *  1wT  S Ne0@&  R5 @e05 - -@Nff %   Rw2 uw x2D̋ wv2 TR  JR(( BRcFR c J*%l / RN&   t tc%c J* =cIc J*l /w 1D5C ?  [  *f %5 4 w1w 1 B` ʋ rC tf b;  rD tw81w (1N  tw"1w 1T T%Pc  d_N 44 EE84 4 7<_ 6_ .N  7_N  0tw0w 0 /w0  w l0D& + & `8 dc wF0w 60DCB Ҕ@w"0w 0DCB5ԋӋ@A@  C-R 5! w/w /D `8 rc w/w /DCh R%d~Rc  @ jRwj/8}5 ̥ L ̥̋ ̋ LL  Ne 5 @&  @Ű̥$ ̥̋$Be̥(̥{̥()w . N 55Ep]EAE1PAA v5-cf b; $cf b; cf b; cf b; Ncl *%w.w .  D)̥:(̥="C˥ ˥  ˥= ̥ ̥  f  w- ̋ w -\ f b; w-  [7[N 44 w L-dNffe v*% w6-w &-  Ncl *%cl *  1w,w ,2N[cfe v*e w,w , t  C  @w,w , _7d_x @ ;a%}~ cc+^k9LOG/G/l * $xwP,Ԕˋԕ uw .,D̥( ̥̋( N  w ,Nef = A@w +Ne >A@w+w +D5  &Z@& b;  w+u  5YwY A15 5 /u  hh55=Nehf %5@ 55 lY @f b; E@5 & f 'e "hf ) 5 5 YwY@pN A1 Nil *%i _uN fe D)e55 ]@t@a S@t@ae5 ~-0N @ A HN~  0Ne"~f %Ne" 5 Ne"  25  5}@pu u-%  /@_w 8)C@5 N *B ?< [J 0 - ]# , N f  w(@    A @@P5  D   Nf   w l(Nf    wJ(w :( 4 pL1 $ &5Ne >if ) 5Ne ^450Nefif *eN /w'w 'u (=N ( (  5 @@me5@e5)} u-= u- B   ; = he r 55 u-V ~ D)e5 De5-C7 Cx J@w#w #@R  / w#w #D ̥ ̥ ̋w#Bejˋ˥ ˋ ˥ ˋ˥ ˥   7&C J hx JNej& 1 i  w #"Nef =  GNil *%K  7f < 5fef <%% N ;Ni & f r%% f ; 5N ;wF"w 6" HQ ($P;PPCen-P Ne 7PNe 27P7PPP&P&kl *e  w N! D ̥ ̥  5= 2K  &Kkl *%KKK IK Z_n!Z 7~JJA v5vZEtJE81P 7J? JJ0J0lJ& b;  vJ0 lJ7jJdJbJ ^J%Y LJ.DJ0 :J:J7YY_n!Y Y0~%(Y_n!l _n!I(lfe v*%Ne+l  _n!7 zY7 I_n! 7I? II0 VYIIIFYI@Y_n!8Y_n!.Y_n!7zI_n!7rI7X_n!7dI?Xw 2D  z3! 0ww  F `lPl ) 7 FF )ww  EE /7 Eww D̥: ̋̋ww  E blPl ) 7E FE N'%7$` z&7` z& 37 ` z& 37_7 _\l_ z&7_ z&7_ z&7_̥  ̋ ww DB  E  *Ґ%  B- w@w D_(% U RNuu & & r%4 ;#%l= : pp 8  & v>%S  w@w DE%& v>%  wz w fl /e-Z=wXw HD@ / ;  9 4 4 ww D  w r< wf 81=@+ @ a f <  %Af 81 &  r@w Nef 1 ww  Zm 35_m/f D; nm@Nexf& 2%@ 6   ~@v@womx@ex5zv%v v@v @aAv AmpzNexRm <  %ч b3Nfex < ?     w DCB̥:̥-̋ ҕ/Ҕˋ ̋ wL w 8 DA & 43 w$ w  DC ԥ==̋ w w 5  ;5" : N 2= N ;w u-uu3 2= 5N ; w \ ((" : wV w F D  ̥9Wp @@`e     + -̥0  w w N t4 67w w Ne 0>< f ef&@ 5uNe 5w/%J %K  tbl t5dl `5 N `5 5   %D-D-% eu Ne 5 w w DC%: 7e`m e rfw w Q@f& e5uQ@f& e5u eeQu  B< ff eR< ff eC r<R r< A@epe@ f& . ewP F 7 5 $u  7 5u F  7 5`u`u bPD7^P 7%np6  rm  0!rmR6 7 $PBw w  (mԔAA WpCem(ԔԔԔ BeWpCemԔԔԔ& 8 ed& 8 ed& 8 ed& 8 @%d 20e@ ed& 8 (w^w NA r nwDmw .D % A r  r e0@ԕ A r e0@ww AupuN 8 wA vB w N 9ww  NVU7NTU7NVNT~NAe vBjN7 lN55 a  a!RE -2N%T w $N%Ne rt 7N <M `e M  <%MMe U?MM `e 7MTU?M a7M MM?MMU ew ^D`ME wPw @D5 9@ r5N 8!w5A vBB-  }ee@ !ۃ `!ւ `@ r `Lw Nef *;  wP w `A@I#EEFNuwDw 4N tf L<%w*w Ntf L<%ww DC̠wԋ w DCԋ w@w D  ԋwf@f@w  fw2w2jnwfw2@e728~2pnwfwp2wl28h2xnwfw70K ff@fw,2w(2w$2nwX f@w 2w2w 2nw*fw1w1nw ff@w1w1nwfw1m11nw1wm1fw1nwwt1 fAW @w\1 fb1b7P15 e=w>1n 5w@7L7H7D7@7<7874707,7(7$7 77777 777f&= & b fw0w0nw f BRfwv0nfwh0nwn fw\ }f@w40w00nw0w D @ C@ppC`pLw73Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF` MAKE. VERSION 2.58 14 MARCH 1979 `X\xhpd/usr/sif/make/Meter=|^();&<>*?[]:$`'"\ :;&>|$$No description argument after -f flagCannot open %sUnknown flag argument %smakefileMakefile.IGNORE.SILENT.SUFFIXESNo suffix list. No arguments or description file@ *** %s removed. .PRECIOUS-rDescription file errorOpen directories: %d: %s Macros: %s = %s %s: done=%d (MAIN NAME) depends on: %s commands: %s doname(%s,%d) TIME(%s)=%ld @?@Too many command lines for `%s' *TIME(%s)=%ld *<@?.DEFAULT<Don't know how to make %s Don't know how to make %s@`%s' not remade because of errors `%s' is up to date. @touch(%s) %s%s *** Error code %d*** Termination code %d (ignored) Hash table overflowout of memoryout of memoryinfinitely recursive macro?@*<?Warning: %s changed after being used Make: %s. Stop. Stop. line %d: %s$? list too long dddddddde eee"e)e1e9eDeKebeseeeeeeee ff'fCfOf^fff}ffffffff gg'g6g=gHgXg_gvggggggghChMhVhlhhhhhh~.SUFFIXES : .out .o .c .f .e .r .y .yr .ye .l .sYACC=yaccYACCR=yacc -rYACCE=yacc -eYFLAGS=LEX=lexLFLAGS=CC=ccAS=as -CFLAGS=RC=f77RFLAGS=EC=f77EFLAGS=FFLAGS=LOADLIBES=.c.o : $(CC) $(CFLAGS) -c $<.e.o .r.o .f.o : $(EC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $<.s.o : $(AS) -o $@ $<.y.o : $(YACC) $(YFLAGS) $< $(CC) $(CFLAGS) -c y.tab.c rm y.tab.c mv y.tab.o $@.yr.o: $(YACCR) $(YFLAGS) $< $(RC) $(RFLAGS) -c y.tab.r rm y.tab.r mv y.tab.o $@.ye.o : $(YACCE) $(YFLAGS) $< $(EC) $(RFLAGS) -c y.tab.e rm y.tab.e mv y.tab.o $@.l.o : $(LEX) $(LFLAGS) $< $(CC) $(CFLAGS) -c lex.yy.c rm lex.yy.c mv lex.yy.o $@.y.c : $(YACC) $(YFLAGS) $< mv y.tab.c $@.l.c : $(LEX) $< mv lex.yy.c $@.yr.r: $(YACCR) $(YFLAGS) $< mv y.tab.r $@.ye.e : $(YACCE) $(YFLAGS) $< mv y.tab.e $@.s.out .c.out .o.out : $(CC) $(CFLAGS) $< $(LOADLIBES) -o $@.f.out .r.out .e.out : $(EC) $(EFLAGS) $(RFLAGS) $(FFLAGS) $< $(LOADLIBES) -o $@ -rm $*.o.y.out : $(YACC) $(YFLAGS) $< $(CC) $(CFLAGS) y.tab.c $(LOADLIBES) -ly -o $@ rm y.tab.c.l.out : $(LEX) $< $(CC) $(CFLAGS) lex.yy.c $(LOADLIBES) -ll -o $@ rm lex.yy.c./rDirectory %s: Cannot openaUser %s, %s rcannot open %s%s is not an archive%s is not an object module/bin/shsh-c-ceCouldn't load Shellbad wait codeCannot load %stouch: file %s does not exist. Cannot touch %s         """#x$n!@%N%t%n!%%%%%%%&Bad character %c (octal %o), line %dline too longstate %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d Inconsistent rules lines for `%s' Multiple rules lines for `%s' .SUFFIXESToo many lefts%dMust be a separator on rules line %s/etc/passwdrr,dr,o~,xL-fZ-e<,g-c(-sL,lL,L,ur-r,Dv,O,X,U(null)rrPm/bin/shPATH:/bin:/usr/binshM:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec  AAAAAABBBBBB ;;60# cJ_ksvy|:}}  0  6 >  67% % R w P %@%1 `  /&   " 0 h7!! " D  ! D  "  | R    # 6 R % ! "  8 R % ! 4e%whw X!", % " e:  w4w $D  z3! 0ww   R B  7 ww   7 ww D̥: ̋̋ww  V T B  7B F8& %7% 7%  & 7%  & 7%7 %N % 7% 7% 7%̥  ̋ (ww DB  E  Ґ%  B- w@w D F  & & e4  0whw XDC 5 u E     u-@ww DC 5 B E; &E d ~  u-@ww  6ff  %ww  fef N% wj w VDf b  ^  d  H ?< 8w&  d w D@w 4 e*(4 && 4%4 %  4 E w >uDAB %u f& & e w5 5  W- W00u5  .uV BwF J@B _6@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E d z f d  #̥-%0  E: E:  &E d  z f d  w8w (DuNfe& %4 ;#%   ""   & %S  w\ @w F DE%& %  w w   e-w w D@ F  \ ((  4 4 w w t D  wr  r< wf =@+ @ a f   %f &  e   f   4  Հ rw D& r     \&  wp w `  - wZ ef >@w , LN  WNef  M@E% F D!  >fe& 4%%/ u-D!>( D Ne>(  Ne>(  u-u- \>(w  \ w f D  ̥9Wp @@`e     + -̥0  w w  N  ^w w Ne < f  ef&@ 5uNe w/%J %K  t:  t5<  N 5   %D-D-% eu Ne  w w  DC%: e`m e rfww Q@f& e5uQ@f& e5u eeQu  x(< ff eR< ff eC r<R r< A@epe@ f& New F  5 $u   5u F   5`u`u pD7l %n   J!  0!J! 7 2x(w>w .^(j!ԔAA WpCe!^(ԔԔԔ BeWpCe!ԔԔԔ& > ed& > ed& > ed& > @%d 20e@ ed& > ^(w~w nA r nwdmw ND % A r  r e0@ԕ A r e0@ww  (U7(U7((Ae vB7 55 a  a!RE -%( w ~%xe rt 7b VV `e F  V%.*e U? `e 7(U? a7 ?U ew DE ww D5 @ r5N !wz5A vBB-  }ee@ !ۃ `!ւ `@ r ` w Nef   ww N tf %ww Ntf %ww DC̠wԋ w DCԋ Ԕwzw jDCԋ w`@w HDCԔw@f@w fwFwB!wf@w*!wd ff@fw w w !w( f@cU_ksvy|:}}w w w !wfw w !wf@w w !wfw m !wt wmn fw^ !wxwP fwD w@ !wR f BRfw !f@w w !w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/etc/utmp?tty??rwho: cannot open utmp%-8.8s %-8.8s%.12s /etc/passwdrrFd,o8xfegcslLNu,rRD0O<XdU(null)$$B!/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec6(#cY`k>@CFILORUX[^$uu  0  6 >  671 % w *"! Ne A@N 7$w$ A@-;e.@a & x R$  R$ v$ D$ L$ :$4 0$ ,$ .$ "$ $e@ȋ  $  #7 #7 #7 #7 $ # #  f j 7!   5 ef  LU u-tr@ r&d (eVTODd 6# <#=%  : #@ r& (e " " #" e-  fe fe  ww C%_ " p" %f& e J"_  E?  !&E     "%&  %  bcE vf %  Dee , !,"! ee %e 5 !! ww r-   n5 5 5 *%w<%: 0 @@mH % AWp Ameu D5% u-@@m wpw A@e@ vww wZ   % ww D756 e  ? !&  wVw F01CԔˋԕ/C Ԕ % 01w$w !f j 7_hN! _7 7 1 e%3 , d.+ +.++ 1f D%&  %+ %a1  Rw^w N +_,_&!! z+O$ %,- \+_b9!! D+?e4 4 -  _Nef b NM! 5 5 5 < wttt@E  @  ` t t"2d bct @E4ttt  t t"t t"ff %7`w`w w DC `951d-5d) d","" ,""  , ,  wT5 55&& 0 wp@w @  @ EwN w D  & & e4  0ww DC 5 u E     u-@wTw DDC 5 B E; &E  ~  u-@ww  Vff %ww Nfef %@ w w !fef % w w lD@wN 4 e14 && %4 %  4 E w D  8 t 4 wtw duDAB %u f& & e w(5 5  W- W00u5  .u\!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   w^w NDuNfe& %4 ;#%!U  ,-,-   & %S  w @w l DE%& %  w. w  ! Re-w w D@  R  8 4 4 w w D  w  r< wf =@+ @ a f   % f  &  e   f   4  Հ rw D& h     R&  w w !-r w ef >@w R N  wL w < Ne < f Z ef&@ 5uNe <w/%J %K  t:! t5 `e .  %e U? `e 71U? a7 ?U ew DE ww D5 8@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w NNef   w<w &w wAupAmNf T w w  @@5 _ fA rBpu@@`55DCN&  f& 4%5 2`D--`f  $`f& %`Df %5 D-&  C-D-%@@AA@ Nf` T u_`Nf T @`5_`f %Cww  FDCԒ ww  DCB5ҒS wbw RN tf %wHw 8Ntf %w.w DCԋ w@f@wl fwP wL "wLfw8 w4 w0 "w( f@w w w  "wfww"wf@ww"wfwm"wwmfw"wxw fw~wz"wR f BRfwL"f@w:w6"w7ZFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF,%,% r-w-s@x- r-w-sx-r-w-tx-6 > F R Z b n v ~ ./etc/passwd/etc/groupr %s: total %D %5u %4D %2d %-6.6s%-6d%3d,%3d%7ld %-7.7s %-4.4s %-12.12s %s %.14s r%s unreadable ls: out of memory ls: too many files %s not found d o x f e gl c~ s l L u r D O X U(null)././H"M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec61#ckak"%(+.147:=Inn @\ 0  6 >  67( %  w %   @  @ 7D$@ 27$ @    #7 $#$ @m&  ## @m& %  @m & # D-#  ww @ # w w " f V  0w w  B 2  7 w w  |7 w w r D̥: ̋̋w` w P v D 2  7b FX( t%7( 7(  7(  7(7 (> ( 7( 7( 7z(̥  ̋ *w w DB  E  LҐ%  B- wh @w P D  & & e4  0w w  ff %w w  fef % bw w D@w  4 e*4 && Z%4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .uF BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E * z f *  #̥-%0  E: E:  &E *  z f *  ww DuNfe& %4 ;#%  $$   & %S  w@w DE%& %  w w   |e-ww D@   2 4 4 wDw 4D  w2 r< wf =@+ @ a f <  %vf &  e   f <  4  Հ rw ZD&     & < w0w  -2 wef >@w 4!-\ H!N x f %B! % x & %E! %ww zD  ̥9Wp @@`e     + -̥0  w.w  *U7*U7**Ae vB7 55 a  a!RE -~%* w p%je rt 7T |H `e 8  |% e U?   `e 7*U? a7 ?U ew DE ww D5 2 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef <  ww N tf %ww Ntf %ww DCԋ w@w D  ԋwfwww`$wX f@wB fwwh$w"fw|wxwtn$w f@wZwVw Rv$wfw:w6~$wf@ww$wfwm$wpwmfw$wNw fww$w( f@ww$w7F@& BFusage: chown uid file ... unknown user id: %s /etc/passwdrr doxfegcslLurDOX*U(null)&&2!Unknown error: !!!!!!!"","<"H"Z"j"|""""""""" #!#5#F#U#d#|#######Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large  AAAAAABBBBBB 6*cvbkt}$ nn  2 0  6 >  67% % w  5 %     @7&! 7!  =  % D-N w  @m! @7   4 U w P  wJ N 8 + - =A @@5@@A @@5P > : ȥ, 0 , m    @w  %7 taeğ %0 w w   o  uU  gU8U  aU((  @ Ew@ w 0 ~ + - =h dw w  D N g  o u/E?t EtEEtWt@PP wU$ x UUIU U r  w pNfef %@ wT w @uDAB %u f& & e w5 5  W- W00u5  .u BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   w:w *DuNfe&  %4 ;#% g !!   &  %S  w^@w HDE%&  %  w  w   fe-ww D@  T   4 4 wf x@w h %U7%U7%%Ae vB7 55 a  a!RE -n%% w `%Ze rt 7D 8 `e (  % e U? `e 7%U? a7 ?U ew .DE w w D5  @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w fNef   wTw >N tf j %w4w $Ntf j %wfw4w0p!w f@w fwwwv!w fwm~!wwmfw~!wfw fww!w@ fw!w&f@wpwl!w7~F@& BFUsage: chmod [ugoa][+-=][rwxstugo] file ... chmod: can't access %s chmod: can't change %s chmod: invalid mode doxfegcslLurDOXU(null)##n!6%<c~ckO  //  L 0  6 >  67' % (w %6%!@ @m& $f!E%@ @ @m @m& P @ ! (  .  (w$ w   f 5 N(  .%w !f  !f  E%@DC!Ҕ/ҥ/ !!f -Z : -T 4 <  . Nf 5N]  .%N s  . N N !f * %5 !f %@- N N _w Nfef ^%@ w w uDAB %u f& & e wH5 5  W- W00u5  .u BwF J@B _F@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w .DCB &E t z f t  #̥-%0  E: E:  &E t  z f t  w~w nDuNfe& %4 ;#%  8 ## 6  & %S  w@w DE%& %  wN w :  e-w,w D@ V  p 4 4 wf x@w  'U7 'U7 ' ' Ae vB 7 55 a  a!RE -H %' w2 : %4 e rt 7  L  `e   L %e U? `e 7'U? a7 ?U ew rDvE wdw TD5 p@ r5N 6!w"5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef z  ww N tf %wxw hNtf %w^f@w4 fww!wf@w!w fwww!w fww~!wf@wfwb!wfwNmJF!wp:wm4fw$!wNw fw w!w( f@ww!w7F@& BFUsage: cp: f1 f2; or cp f1 ... fn d2 cp: cannot open %s cp: cannot copy file to itself. cp: cannot create %s cp: read error cp: write error. Vd<oHxf$egcslL^u<rbD@OLXtU(null)%%!6(cdkYK^ }}  0  6 >  67& % w (%  @7<"%7R"; 1  :=  6"" "u    Z " %" "! %!_!  !_  _  7!T  /! ( 7v! !i "  !" F " e%4!" d  "5% 5 t  %-    a5"5  % u- % o "  "   "  "    6 8   "  7X W NeF & > G5CN       e @a0XNeX jfeX& % N!XfeX& 8%!  w>w .!  w&w -!p   w w   2!   f H!E!=! e  !K! N ww  N & 8   w|w lDC 5 u E  *   u-@w"w DC 5 B E; &E  ~  u-@w w ff %w w Nfef %@ wz w f !fef % wN w : D@w  4 e&4 && %4 %  4 E w r uDAB %u f& & e w6 5 5  W- W00u5  .uN!BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w  DCB &E  z f   #̥-%0  E: E:  &E   z f   wl w \ DuNfe& 8%4 ;#%!?  ""   & 8%S  w@w zD((E%& 8%  w< w (! Z e-ww D@     4 4 ww D  w r< wf =@+ @ a f   %f &  e   f   4  Հ rw D&      &  ww !-\ wef >@w `LN  WNef > M@E% F <"  >fe& %%/ u-<"&  Ne& F Ne&  u-u- &w  w  2'U7$'U7''Ae vB7 55 a  a!RE -%' w  %e rt 7  `e ~  %fbe U?PP `e 7>'U?2 a7$ ?U ew `DE wRw BD5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Bw Nef   ww pN tf \%wfw VNtf \%wLw <DC̠w6ԋ w DCԋ Ԕww DCԋ w@w DCԔww ww B"7wf@f@wz fwZwVH"wZfwB@e7:6N"w4fw&7 f@w V"w fwwwZ"w f@www b"wfwwj"wf@wwp"wpfwm|xv"wPlwmffwVv"w.wH fAW @w0 f'1'7$5 ew|" 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & ' fw|wx"wB fw0 }f@wDw@"w7nF@& BF???usage: write user [ttyname] /etc/utmprcannot open /etc/utmp Can't find your tty /dev//dev/%s not logged in. %s logged more than once writing to %s not on that tty not logged in %s: No such tty wMessage from %s %s... Permission denied Timeout opening his tty EOFcdkO^ }} Try again /bin/shsh-c! doxfegtcslLurDOXU(null)$$:"/dev/!;6:'0cgkꇟ!/rwchk.!rrcikn! rcjkc!ao8   cpkꐆ oM rp03: /etc/mknod rp0 b 1 1 /etc/mknod swap b 1 2 /etc/mknod rp3 b 1 3 /etc/mknod rrp0 c 11 1 /etc/mknod rrp3 c 11 3 chmod go-w rp0 swap rp3 rrp0 rrp3 rp04 rp05: /etc/mknod rp0 b 6 0 /etc/mknod swap b 6 1 /etc/mknod rp3 b 6 6 /etc/mknod rrp0 c 14 0 /etc/mknod rrp3 c 14 6 chmod go-w rp0 swap rp3 rrp0 rrp3 rp06: /etc/mknod rp0 b 6 0 /etc/mknod swap b 6 1 /etc/mknod rp3 b 6 7 /etc/mknod rrp0 c 14 0 /etc/mknod rrp3 c 14 7 chmod go-w rp0 swap rp3 rrp0 rrp3 tm: /etc/mknod mt0 b 3 0 /etc/mknod rmt0 c 12 0 /etc/mknod nrmt0 c 12 128 chmod go+w mt0 rmt0 nrmt0 ht: /etc/mknod mt0 b 7 64 /etc/mknod mt1 b 7 0 /etc/mknod rmt0 c 15 64 /etc/mknod rmt1 c 15 0 /etc/mknod nrmt0 c 15 192 /etc/mknod nrmt1 c 15 128 chmod go+w mt0 mt1 rmt0 rmt1 nrmt0 nrmt1 crk26P o < < 0 0  6 >  67eWtE,ef f  &e7\ e % f f& ` @No space for monitor buffer YIiIcbufs,exitwritesignal0_monitor _sbrk _main _exit"_environ$_etext __cleanu countbas$fptrap starteprolcskvI o 9 9 BT0 0  6 >  67 % )fptrap _exit _main _environ$Dexitsignal0startcukjB l  (( M4 0  6 >  67z % w  e 1#N~ @ 7M@ 7M@ 7L b!N  $ _$_N@ȥ- 5@ 1h Ca If O/ U% dM pN u w_@6 6 e 7 @L @e5% 8 BIw:Iv`dZ 2P47 6<s @Z @m N ߖ%N ߖ%  5 @K N @w   $ / n 5 w ph :N ww f 5N wxw hM M M wXw H  %,L@  LN B= ww 7 K "7 KP"7 q7 6J7 Kww J T 7 7 J7 J7 J7 J7 d7 J nK7 fK7 7 ~K7 |K7 rK7 pK7 `K7 ^KJ7 XKXK RKm @0 0 e-rXg:5 S)5 @t` S@t` S " S S S T T2 e-Â7 m.O @ Tu ~ 67 7 7 K7 K7 7 7 o7 o7 5 @ 0 O % 7 "J za& & za&  heni&  heza&  he Lww f  u- N f fe Je w u u- @ A pN Nf : 5% 5 5 u u- @ pM@ pM w $: 47 27 0Beu  %e@e  wen 5 %,  77 m%@ 5 -0n0nC  z 5%, ^ :7T7 Ne%@ e -@5  ] X xh 0  e5%  %@ _B 5  %@e ˆ_n lh  Z_nN_ DN  @  D@  5@7lu@ 5h@ b 5%   A p @  @ _B xv7 _B -   7 _B t_B7 _B 4  _B 7 .E7 j7 ,"_B l l_R ll ڟ%77k & vA v5bf& %M  _B<5$E-D"A vE% f& %f \DEE1PUA vE%_B V_B 77j_B& '&&   $)e _B&& & &oo& V%%   && &  _B (M\C F_7j_B _  _B &  & ֥ 7i4_BEU_B7 iC_BMB 5mBwi_BB_B` X _B&& 8% n_BPz~n& ;%_B&& 8% Zn_BPzLn&7Hn Bn_B % t7nwn_Bh_Bh_Bh_Bh_Bh_Bh_B h_Bh_Bh_Bmvh_BE% vEft5 7 Dh  _ 7.h_B& & <+%7h& 8_ 7 h&7g& & *8_M,A \;_B :_B%> L0Wp (eP`u@E@0 0 @0 0 =_B 7pg0_B 7\g0?Rg_B H & ' %0_B  _BNefe VF  7 j N _B7 e_B& tE_ &% E% |w7f_BU  vEut5_B _ U_B v5 EU0 _B!_ nk_BPz`k&_ 5 jA vE%EU@_A vE% AA WpU P_A vE% AA Wp UR`_A vE%_N7! _ 5EU@p5 @Apu @Apu @Ap ue 6 f  7d& ֥ A1_B7.7 c7 c_B& ֥_7 i_Bit0 Pzit0Rz i_Bit0Pzi7i_B%}i_Bi i0pz_BA v5f& %T! A v5 T=EE1PU_BM = @ f& %_X  =_B7h_B&hhh he_B&%<a<z;  ! 7 bc_B;_X P  xp & ' ._B !_ && dl&&&%_Z && & && & & b_Bb_Bxb_Bnb_B db_BZb_BPb_BFb_B & & & bie_X && & & & &&&& && vE%_B R_X  O_X  M: P_M: @ f& ;_HM: & ]_B4]_B*]  ]   & ޭ_ &  _z &   @~_Bw 7 7 N t ww  ww "dd &@  dww  - c c | cc d ^ b cR p @& H 1> 0 7 . 0 % * J# L$L c#f 5 $  7  7Jc7Dc p76 p7 Ne# ߖ% ww %$Lf 5 T r p j Tw`  wT 7*757b7b8 7 bwb7|b7tbwrb {7 7lb  ?Zb Vb  T7 w  _( x" % d V7 ga\a\aaaa7 4L hgaA-aa0 g%1a%$a a%g%a%pg-aat~a xaoejaF . y# ww  {7 7.aaaa aaa%a w%` `3# 7 t%{l f{Ԕ-`7``NJeB-F{`6 7`-0*7 $`l3`` 7|`%w 2D7^`eB55   E %& fxe%`w%c%C%*^ T PED % % _%  ^->ƃ  E % %% Ґҕ -% ҕ - Yw-*_U "_ _ %_ _w-^l b ^E% %_v% < 2 .E" % %_v   ^ ^w-^ ~^[dL0Md_z^L - -<^_L7 ^7 ^^&e  ]] eee@ 7]w] %cLL]0# 7 ]7 ]_zw z 7 ]7 ]7 ]{_B L_@ ̥'̥"K5˕ -h]@-  -P] # e_@ @-̥\-"]ツ  0 b  f n  t̕ ̕̕ ̕  ̥h̥H_C-_L_$ e5 @ 5e@-e5Leupu`AWp u B-B-_$ ʥ*dF\ʥ/ʥ( ʥ,ʥ=ʥ._$ @m-\ N# ` [5  f n  t̕  b̕̕ ̕ @ _6 ̥\  0 ̥( ~[̥) r[ l[ ̥=b[̥,R[ Le  -6[_ 7([{ [ww [  $ Z_!Ze-ZWiZSZfM(IZe̥ ̥ ̥( Z̥) Z -Z-Z1|Z-ZZ%d|Z!vZo!XZebZ4=L06Z >Z 6Z"Z <7Z%--ZZ(Z/Y ZL.Y7 Yww YLwYe5 @ 5(Y ̢̋̋ Y YeB-w D  0 %"e  0 0(e w w $Y\ YMY YY X@M7+=<7 + 7*X/X-XXXX*XSX:X_&0XL_x%N"u_& X 5 -W}.@ 7W@eWL_h%M-WW+=W' WWLWL xW nW-lWhW@M7:*= O%**5$M *% -0W,W($W )e7W,_ #%)M>$ 4%)7)%)XVT( BG O@ X Z  b; o4 x z6 VMVV= |V @-s$ fV@M7:)% _ #`$ _ #% _ # _ #VL_&5 5 5 U-UUW.U PUe-UULUL9ZdUeULU((dU-xUtU nU+- ZU VURULwDU 55Mu-*U}  U-U UULTL T_%@M7'= _ #  _ #_ #TT T_ #w d & f&  `wJw : % %@OL|& m&@  AA v5@f& 2%& ` e-ւ   , ww d  R  + ww x %&& % & F  (t 47`w: 7 '%&&& ߖ% @7& &~ ߖ%&p ww De  ̩ v5 Et5A && w`EU Ep U@ EUEUU w %N@ 7%& }%& %' N  'v ߖ%N   F N f : 5% 5 5 %wwT%w P% 7T%%  7F% | ֥ 7rs s 33 % %  @EtE PEp U@ N f& 8%% +ww %G% $ V #@& $% 4x$ V `$$  5%7D$ R  % ! O   O V <+ B <+ %>$ V ww D  x<&# REtE P&  w%' w #%# # r& 5%55 V#P# VN&   wZw J (#%\_.%P_.@  F  k vDE 7%   7"w"% % @' !  7 z"w v"i'% '-R" O | 1 O@ p O% & X  .7J .7@EU2 !@ !=" i 33t5EU  .7 % %!   5%7!EU |!3@5@ v5 .2 u @5D@ v55 kU  vE%    . i 2%  vE%%  .u @ Vww  @t7l~ @ww ' T Xg_X1_T1 v5  vE% vE% v5e R ' _0 vE%_D0 vE%k vE%   vE AD@5&  e  'f f A mm@ ee@ f& ef& e7lwjN n p2u5f&  j%& ةewm0wm,w &- vE%$ vE% vE%e  ̩EU vE%R vE%I E%A vEft5 '  vE%  E% vEft5 ' e-_. RWp 5R`JWp @V`T`u5  :  ee@ f& ef& e7w nff %& ewmjwmfw `ς -zϫw>w . P!AA vEN@f&f t%& 4ee-ۂww D vEWt@55 T P@J vEt5 f&fe e #E% vEt5 f&fe ^eA@w E%w P_4E% _4 _4 v5 j vEu@ &D && ܿe  2( @ &D @ &D A AD m m@ ee@ f& ef& Re4 t2P@ r2 % 55 @t55#@5@E%@f&fe ؽe-( tm tmt  _3e 6e-t_r3wLw <PFE% =  $  4- 4-H( *%  Q( 4- 4-4 44 4 e-˷ww f  7ww DC% #@E%A vEft5 @55z( L t55 &D  &D  AD mm@ ee@ f& hef& e7w EUEtE P% ff |%2EU E E2Pff& e7`Lw`Jw DB<  f& &%2wL*  %AWtAm1@t@m0 s@t@m @t@m R dl% .% dl%E%@t@m@t@m0   5%AWtAm1@t@m @ @t@m R@& dl%A1 u-_:<@t@m X%@e54@t@m ,%@t@m @t@m& r & dl% dl% E% @@0   5%A1@ww  -_AWp CeP` s33s  _@@5 j@  >@ 4%0@ RE%' * 5 @5N %&  5 @xN c& %5@E%9A vEft5 +@r25uN p2u5 N* 5 N Sr_>N*A@  f&  ke3s A@@A f& @ke3sA vE@  xl*@5 A @mAm@ 5uN* fff pe _> Z5 A vE% (@ 5!AA ll@  N+ @5 EU@0 @ p @mAm@ f&f& e IWp CeP`     3# A1A vE fDAA r N1+    3 3  2E -Hw w @ @mAm @ AWpePN U+ ` N 2E_8D@@mAm @ u5f&AWp@PP&% AWp@pPpPC _ D vE@ k x*EUt @ 45 & A @ 5uEUt @ 4AP`@ r @-fffAWp eP`f e5-  ll@ 5 u z+  vEN+ N 2Efe >e^f&@ ww AWp DeP`AWp CeP` @A f&& & Pge4t @A f&&& fe4t s33s (u@r- =L@p  pr r N Tu  w w D T  ww D   wޮw ήDC  SE%++  SwE% vEft5  5+  S -5 u-Nefe VF , -ffff e  S w _K5@E%_dHD   .,  v5 0mp 0m _H R T5@E%_JA vEft5 _Jt / R T5@E%_JA vEft5 _J@4 4N S  R T5@E%_JA vEft5 _J@44N SU 22   4,4, 4, 4,74_Kz ` SE_Ku@@ _tI _tI ng5J+D+ vEWt@f& e5u vE% f&fe eff $%@& dl%A15@E%e*w *@7,*7,*5 B, N R J`5 7 P*7 N*A vE% (@E%AA vEft5 @i, _KA vEWt@f&@ vE%  Wp@PP  Wp @V`T`f&@@ vE%  vE%   vEWt@f&@ f&f e@wZ, N Spn7 (7 ( b_bF w A vEu% 2 % 1076@f e̋ӕ %m75@55A vEuA vEu% 8% 5 , @tf& 4%A1 5EtE=P% 5 #@55)% % Nf hq%% , wާNeffef ve@ _xN x+^Nff ffd+ efff Ƌe5 u-Nff ffd+J e@t@a0&f* e @t5l5lu @5A 5 u u 5 * ff ffeu d+ e@@m((- ߖ% u-@ AA@5@ _pL ff ffeu d+, e - ߖ%N- _pLw DE% v5U  N T S Ne 6wrw bD EUEtE PwBw 2D N3 w"w  Ntt%%  W-EU wؤw ȤD N3 ww D N53ww  N4 4  5vf&@&  ^  UU4t w@w 0D Nf %3N  ww DC vEu vEuE%C5t5<E%6t50%% N5t5  4425t5  32 3`/  S Sww   5EUEU@ww ܢDC % y/  vEuD wE%% Ne vEfe& ve S+t5 %  &% D%&$ dl%%  \R %  %2w  f dl%@EtE Pwȡw  f! dl%ww D  wE5%E &:- ^ @ s xJ- vE%  r & 3 R3 R3 R35 @& > &  3u @&  &   R3 R3E R3 R3N/ w \D #E K xX- vE%  T S T 5w5 S S S S  S e 6E/ w D   xh- vEt5 Hwl T4E ۃE/  FU  vE% [ J`w D E%wE%E/ E5 T45A vEu%@E% /  S ^  T4 vEu 5 @E% E%ff dl%E% TNff hq%5% @  xv-  R@& & dl%4@EtE P_^Uu-E%5t505t505t55t55t5"5t5@tf&@t&% f fQ  T45t5!f fQ ff %&%&0,0f `e_V%% @E%_V%E%_V5t5_Vu- Nf fQ  T4u-_V {_`Uu-_VNf hq%5%% @E%_V%E%_V5t5_Vu- Nf fQ  T4u-_Vf_bWN vEf hq%5@E%_V@E%_V@f fQ  TA1 TD_V@E%_V@E%!_V20 L_V vEu_Vw D vE%   x- fQ wxE E?0 E    >   fQ  R Y vE% Y4 vE% S SEU  Y4 vE%w 5 _[@_[ E5% vE% fQ   HBA%  vE% ng)%     [% 5  b T4 @ww D j ngww pD  vEui5EtE P v58e 5EUps Ep U Ae  ̩5EUEU`AP@ r3  vE% vE%  JW0 Ep U %N0   0  S :wT k vE%&  Z 5 vE@ m x- ng5f dl% vEEWtEJP  R2 TN& % >^ 0 @ u  0 L@ R  vEf  vEN0 w  @ T 55 5 A vEu@ 5@5 __ __ @53 T5A vEfA vE%$A vE% @E%@E% s3 @E30@A vEf 8 3N B & dl% T3E3%1 Ku _^  X1 f ֥ 7N R Tf fQ 5   Nv& dl%5`\ SP TH Ne 6@ww DE%+'45@5 G hb5AA vE%  % Rw5 , EUEUEU s& .%3N jN ng c dl%3 S4   FA vE% Ne R 1 ` ,  R4  %& dl%& dl%3 S3 T3 T3 Tw F  p-P Tw2w "D5  hb  wE  & & & bie J`U w ڑD  0!P Jwȑ -w N hb (-N jC vEt5  pP- BSwRw BD& %55 !5 @ R TA Aa1%1   1 _du }-e R 1 ` _d _d @ @a5 @t@m Rf dl%@ @a& dl%5 @ Rf dl%5 œ e 5 vE%  R vEWt@f& %5f dl%5f dl%5 % vE%  L%& & dl%f dl%5@w8w (D @5@ S_hg vEt5 O )@E%CC vEt5 4@4, _hg4,_hg SNe R  2 ` & V%_jg5 5 E%E% vE%  R55  vEf 8 5f \ & dl%5@ Rf dl%5E%  vEt5 N R& %& dl%f dl%5 V%( (%&f & d%&fe %&2 vEf Ĭe 5E?UNf dl%f dl%ww ԌD  vE@ _h x- vE%_he  ̩5EUEU`AP@ r4 Ep U  EU vE% vE%EU  vEEWtEKP vEEWtEKP vEEWt EKP3 & %3  R3& $" vEN vEf/2 e vENL2 wLw < EU@EtE PEU% Et E Ptww D vE%/   !e R n2 ` N SN SN S S hw R EU vEEWtEKP3sss w "D v5\ v5 k v5)EU v5 Fl NEt E P vE@ " x- vE% vE%2  JF U wZ vE%  vE%5@5 @E%@52  vEff 5%54N Sw D v5J vE%  vE%7 v50 Fl 5lN 5N  vE%2  Nf& 8%w w DLe eww އDC  vEuE5 %% vEuE55 Nff hq%5% _@q@ &_.q x-E%E%? vEft5 2 _Pn _Pn_qE%_Hn vEft5 j g d2  % EU@EE?2P@EtE P2%  % Ps( vEft5 ' ,_"q%% S & dl%w %E%E%E%E% vEft5 _m%& dl%5 TfE%_m vEft5 _mf& e _m _m&E%0,E% vEft5     S _:nE% |wE%_m vEft5 _m  _"qE%_mE%_mE%_m vEft5 _m& dl%5 Tf_>n%_mE%_m T_m%_mE% _mu _m _m T _mE%E%_m    %  S_Dn% S_DnN2 _m S %% S _Dnw ڂDCB % B% ?  _ s% %&% % %%!  &_@s x:.t5 t5 _ s3N  _ st5_ sA3%_ sc3%%u3% % %% 3t5t5 %%3t5t53% %  3 _q% t5 t5 % wB% % %%% 4_q%4 _qw D6E5 vEu vEu@ ^ ? \ !Y &GB4  vEu 5EU@EtE=P@0@ "_v x.   3 w@ A 3s |w    & @  S@    ,,,,@ A f&EEf&@\\xNx2v &v55NNm 5A1fNm ٖ%A15 } u-5 u-_t} 5t((5 _`tfe e_t% $f&f& /e 5 5 5 %Nf 5effef veeffef veNefefeff xw l}DC @  x.  Ȝ 4 w4}% 5t5  @  x.4   345t5  w |D vE@  x.  4tw|4 4 44 vENb4 w V|DA vCE  x. 4 w"|4@ 4   t5 A @  5u Ne&fe Ne&fe xe5 Ne&& xeA @v5u vNefew H{DC B @  - E o _Bz_jz@  x/bl@ twz324 @  x/ 324 @ ҂ x/ ye  sr5 2sJ45@  x&/ x & l~%5t5  Hy4 L@  x2/",,5 @  _`y x>/"   32  4 _`y %%  w yDE%4 L vE@ + xJ/     44wx44  vEN4 w pxD5 vEuA vEu@E%_J}A vEft5 _J}@ % " S5t5  Җ%ww Җ%f fQ  H@ 55t5  S5 z@  f&@ FҖ%& dl% FU@  , S T5t5< @EtE P5t5 =%%E%% N&5 `ee%  fQ N fQ @ &P/fNf 5&t50N fQ  ZӖ%&-5fN fQ  2Ӗ%&45 `e% fQ  T_l|w uDCB 5@525@555#5;5 L 25@25 535 35 2 5@ 535 5 3Ku54wuw u v*"1f x wtw tE%&  8*1܁ ضЁ V *1f x \5  wtw ptE%  )v1n ضb VETUN p5  w"tw t4E%& V  V j E% 5  wsw seڀ-؀Ԁ5 L@EE?P  m0  % wsw ps%@O5 L xw\sw Lsm% v5 E-NUE-8 2EE4Pe-*؂wrw rN ضwrw rDCE% 5  S S* vE% %Z5 & %> ʥ& n &  whrw Xr @ v5EUEp U0 EU k@   5 wr 5Nf  3 @E%    6 @0 j Tuw q  f 8% & ff bie [ Ee& x 6w V*w"w& e& x w VN b5 & & f bie J`f    mv0  %v av E v S 7 v~v%@O_E%7 xv_ZvRv&Hv vE%wiw h  & & f bie J`5C vEt5]7 N zOf  whw hDCB N T5A vEft5< x7 N S& &f &ff <   &f ewhw hN & –%&ff e& x N ضwgw gD%t7  % t%t7   ~ ضwg% tlw ng & & f bie J` vEt5 7  w4gw $g@7  _F5 @-@E%A vE% Ns fQ 3A vENf 5 E _4 xAz vEu5t5 _`%&%_F @&&%_F@@&f dl%5Ne 6N T@we vEu%r5t5O%K@5@5@E%@E%Nf RP 5@EtE=PNfe fQ ffe R–%& dl%%_F@f fQ vEWp De<5  vEA-_`@-e  vEWp De<%fqe @-_F@-_`N Z @f<@ r & j%5_>  te@ R & 5Nfe R & 5Nf dl% FU5_R%Y5t5<_@EtE=P f~E% dl%5@EtE=PF vEu%o uNf fQ _VEZA Ne R uA Ne R A ` _Vw b @a  Ap %80fe *% #EEb7P^EtExL7PH EtE?67P2.w%% %&D7hWpeBu@ %%   vE%  T@N:D ` wZw ZN en ƭ  ܜ SwZw Zu_@E% 5&   N  T_E%: 7 2 j % [& b & b   b ƴ%&  BPD=E% R TE% vE% #%4 vEf 8 5f &  NuD  Su _Ne 6w4Yw $YD  vEu%Dt5N ֳ%& dl%5% E% HEU@tf& %4N fQ  T5%ff L%& v%&D ef%pDD `e ܜwXw X BE< V ,&& ֲ%&ҥ < & e& x #& %&  &%H%@ e& x f` SwvWw fWD LEU < & dl% FU hb& %&& 2e& x  lwWw V ޤ vEft5  R %5 D 5 x_ vEft5  R %j vE% a((E%' $  j  R D  %5 [ ذ%5 R TN % R  % RD %8 n%  %   5*eE%!  j  [ RR vEft5 D T7Т vE%  RE% vEft5 && % 5 zO D 7 & d%f %s_%rw7p sd7]j7ET ie7A7> Rn % ܜwSw S vEt5  R %E  vE%  R  % &E \ vEt5  R 7E & % %     R@E % ܜwRw R. vEt5 " R %  RGE % ܜNE w\Rw LR BjE  R % E   ¤% H  H  H  H  ¤% ¤%$" ¤%*( ¤%0. ¤%64 ¤%<: ¤%@ H B H  RE % ܜwQw Qڞ' vEt5  R %v Rf % ܜE wPw PF R@EtE Pf h%& dl% T4N&  w^Pw NPD & (% R Rf %  vE% E w Pw OAWpDB%E% vEt5 R RAWpNBE ` & %f %wOw OAWpDB vE%  Rf %f wDOw 4ODCBҔ w(Ow ODCB  w Ow NDC Bm @m5u- u-  ̢@  C-˥   C-̢ewN ̥   w lNDC wfN w FN EUtw4Nw $NDC X[R[N[L[ 2wNw MDC ˥ ˋ򔄁 !2wMw MDC ˥ ˋ򔎁 !_ 2wMw MDC ˥ ˋ ˥_򒘁 !2w`Mw PMDC  5 w2Mw "MNf VI & wMw MDC5 5 &e  ff Leee@ 5u A@wLw L7 ff Kee0@$ fe Ie  wdLw TLDd%Z4F ZCe ̥de @   Ne w Lw KD 5  ̋ 5`@`0 B-A ru@a %@teXg5}-efe *% wKe-XXg@ X%XYF L @}EUefe %w K     5- wJm5-e-XeW-WWiF Ltt " EEEEEw J WWwJw vJ 5 De T %ԕ @e!PNfe *% @w&Je-:W-4W0WF L"Wfe %WEWEV0 V0 0 V0 0 VE VeVw IN ̩5,EU EU@EtE PEUEU`P@ r3w5   !@ @aAp %Nef  @ @a0 %Nef  w\>w L> Ki  XJ% 7 ضw>w >hi w=w = Xw=w = w=w =D T vCE% % (I  S İNg   wz=w j=No wd=w T=D vCEE%OI L&  % ;  $  f w3D 5 Ne& Ne&  j & &  vEft5   $ &  f Ֆ% S Tw2w 2 5  fef %&   f Ֆ%wt2w d2D U Q xH vEft5 H;   > 8  ^ &  vEft5%   8   & w1E EI E5%%  x%    vEf 8 N& 5 A vEuN& 5 A vEu@ \ Y _ _*  _ _ SC5 N SN S T_ f & dl% &  f & dl% & eN jf B &f dl% , & %NN %% fN f  &f%i5t5 Nf 5N jf ԍ & dl% & N f05t5 Nf 5N jf r & dl% $ & N f @ &_%N f  & dl%f &f & e& dl% & N jf &(( dl%f &f Z & He&_5t5 Nf 5N Rf  & dl% & N Rf  &_N j & A vEft5N  N j& e 5_NJ _w 0-D5 E5Ne& Ne&   > &f dl% & &f ؤe&% dl%5 FU T f Ֆ% T T Twr,w b,DE _ x I HwF, E  j xH x R 8  L & E%% vEft5  , vEft5 .J L d% 8  & dl% EOJ EiJ _w "+ 5  fef %&   f Ֆ%w*w *D 5 E%_pE% _p& g vEt5 c \,XE%O vEt5 @ 9,5fe& %&  fe& %&   f Ֆ%P E%&|J `e T f Ֆ% S Tw)w )D 5 E%_ vEt5 b [,WE%N vEt5 ? 8,4fe& n%&  fe& R%&  E &G  T f Ֆ%&J `e4& D%4 wV(w F(DC5  5 f 7%5 f 7%55 Nefeff ef ‚% fQ ff&J Ĭe  T f Ֆ%w'w 'DE%E%  && ewd'w N'DCBE%'E% N f & eN f & e S TY@ 5 R5@t& %@& dl%A1 R5@ & r%@& dl%A1 Rf N &  Rf e w:&w *&D vEu@ 5G vE%  5 5 #E% vEt5    R55  vE@ _^ xI  NfU F N$  Sw<% @t@]U  & % T@t@]U(  vE%NU$ N@t@]U& F NN] X NN]  vEf   NU# NfU F _ _ _ _ N& _  vENJ _ w #D vEu%t0@ 5G5 E% 5  5 T5 WuP@E% vE%/ fQ  H@ vE%   F  vE% & }%&  f ֥ 5u % *E% vEft5   f 8 5J wT"5t55  @5&  5  f ^ &  %  fQ  T  u_@E%!  vE%   vE%    W vEft5 F vE%  9E%3  T, vEf 8 5f P &  f   vEf Ֆ% 5   u _ Ne 6u@ fQ  T 5   u Ne 6  XNd  T@_w  D vEuE% 55 T T f 8 5 f 8 5N Rf } & dl%5f } &f } &f ze& dl%5 FU5@f } & u* @f ^} &  N Rf 8} & N Tu  ff Ֆ%N 5N 5Ne 6ww @ 5G  UNa wdw TDew  w wEH rw&E `w  Vw RwEH Dw&E ww *w  w wHwf w v vȕv ww Dv  v vEH v&E ԋwhw XN XN wPw @ N N w*w De  Ճ %w w D 4 ) Y vE% fQ  vE%  T ;  TN( ww ww | Xw|w lNfe  % Nefe  wDw 4    N (  $     N (  $  P ww NJf ߖ%ww De% &Jf e Jf ߖ%wZw JffKf ew:w *Ce% Kf   ; Kf e ww % NKt ߖ%ww @ * xJAWpePN R K J%wzNKN#KN'KN,K w <NEKps ߖ%ff^s Beww    NIK0s ߖ%fffVKs xe ww ww  Xww %&gK @   R  %&_ "& 5 &N  X6t E E7t ^@__5 "_@t` @t` R T@t`& w & y &  @7s ^% %%&  ז%% ז%7tf%5 ^%&  ז%5 @ f ז%e @ _* vE%  vE% E% f ז%e  T R w & u &   _6 8r@ zO$r u &  @ ضw2w "r XZp Pp Lpȕ_Bp_ N ww         N  (  P ww ww 6#R R %# &uKo eXg-x#_@+  vE%, m qKfe J% e Ȗ%&K*o ee%"KnK vE% vE@ ̂ xJ  vEf 5 fKfe JeNKKKn wDw 4DKf  % ,&Kf e %ww NKf ߖ%ww W-0uKf 0u  ffKf >eww NKf ߖ%ww p ff %wdw TNfef %@ w8 w $,Lfef % kw  w BuNefef % = Ne& @ww D%    | w~ - -w XD@w: 4 e4 && B%4 %  4 E & & .e Ӌ KK &7i& R e iӕ-iӕ0B~iӕ.  ӕ0~ B~KK&7i & e ziӕ-0 niӕ.bi B~ӕeTi ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w^5 5  W- W00u5  .uKBwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ALҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w NNefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w"w DCB &E z f  #̥-%0  E: E:  &E  z f  wb w R DuNfe& %4 ;#%,Ld BvBv   & %S  w @w p DE%& %  w2 w  $L Be-dw w D@   T 4 4 w w D  w  r< wf ~=@+ @ a f $  %2f ~ &  e   f $  4  Հ rw D&     & $ w w $L-b w ef >@w V  wZ w J D*\5% %-%+ 5 55 55  B5eA5 L%.55  B5eA5 L %E%e$%+%-  Wp B`eL  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& e5 55ww tAupuN  wdA vB w 8N Tw8w ( U7U7֕ԕ̕Ae vB7 55 a  a!RE -% w r%le rt 7V dJ `e :  d%"e U?  `e 7U? a7 ؔڔ?ҔΔU ew DE ww D5 T@ r5N !w5A vBB-  }ee@ (( !ۃ `!ւ `@ r `w &fff 5& feww  fff 5& feww  5 %O N  = 555Ne5& >e5l55'0Ne5 B& >e57] Be0" 5%l55 5 B5@B e a=%7’w %l5 B5Ne5& >e55e0%l7Ò`Jʕ0%ʕ1  %˕0 ʥ9 w XNef l  wFw 05@m 7\7\"ww 5@} ww N tf %ww Ntf %ww D  ԋwf@w fw\w\XMwfw\w\w|\^Mw f@wb\w^\w Z\fMwfwB\w>\nMwf@w&\w"\tMwbfw\m \\zMwB[wm[fw[zMw w[ f@w[w[Mww rC  5!$ABA  D & r@rr @`   BJw&& @N   C 5  N B A @ A- A    BJww D @ C@ppC`pLw7|Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF FORTRAN 77 PASS 1, VERSION 1.21, 20 APRIL 1979 -O%d: too many register variablesinvalid flag -I%c invalid flag %c arg count %d%s: Bad parse, return code %d missing END statementwcannot open intermediate file %swriting error$L4L .OPPP`msm .dataMAIN_ characters out of order in implicit:%c-%c#ML{I M DL}OIMZ[\]^_MMMMNxweM&nz j.pb,-.43210$57698:arq,-.43210{57698:,-.43210[57698:(s\]^[rqka},-.|}~O\au   +b# "Bazp+{q@+JjakPHQIL`,-.432S+57698:]^_liheigdhflm+dfg,-.4t|}++++++++aa,-.!++++++++++tF*<y`c>?a+aoADGY<uK+N+MT+_LKJI<=+H92+ +0.-cccc*=/ECvonscr4#%mRX VWXYZacao'),-.457698:a,-.4357698:=,-.4321057698:a',-.4321057698:~,-.4321057698: a 5+FR:CW$?,(AE@! T"'%678/3)U=&BV;Q O>1SG<DPZaatwxyaU;aaaFaC?AE@=B>GD5+R:W,Ta678/UV;QO1S<vPaakA7_LK|K'.U207.U-,5*)HdH/''A&.U(%7QA^3]HHHd'&&UyH tslHHjH]l]\QG"!UYTFiAdH!=;/!%?>98210g$ / -,*('&%$u#!* %# )p   (>G!   !!#$$&'*))++,,,,112 33((655778899:;<?=>>@@ABBCCDDDDDDDDDDDDDD..FFFFFF%%%%GG--EEEEEE/000HHIIIIIIIIK4JJJJJJJJJJJMNNNN""PQQSSRRLLOTTTTTTTTTTTU^^^W```ZZVVaabbbbcX[]]YYdd\\\ffffffeeee_  %;D,(A+8!$#'*5)20?1-./9C4>"6G B=H:@&37,MMMMMMMTREQII OPIQMIIIMIIIYKIIJQIIIIQQRSTMIMIQJQIRMIRQRSXWVUTZ\[^]_QFJMJJMMQJMMMMJMJMMJMKKJJJMLJMJJIMJJMMMMJMQRMI JMPEILQJMJJMJJJJJLMJ  !"$%'z8zzzzLz,-./01234567zs&WYZ?+s      88>cBDFKa_qno9;ACEJp   cc^eHNtX@[<|l)*=Gbuwy(:dfhkjIMOQSUVr\]~mgPT`vx   ikRSnzzBB  * D ` l r B   F V d BBBBBBB B B   8 B L V ` j t ~    & 0 0 : : BBD BB "BB*6B>BBBBbBBJZhBhBBpB2BBBNXBB`|BB BBB 6BNZfp|B BFRVfB BBpBHBP\dlxBB 6NV^dBBB|BB,666,6,6B::DBNXbl$BBBc+ukbB l ((BB  state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d statement cannot be reachedunclassifiable statementlabel %s already definedthere is a branch to label %s from outside blockmisplaced entry statementlength must be an integer constanttoo many equivalencestoo few initializerscan only save static variablescannot make %s parameterinconsistent storage classesillegal branch to inner block, statement %simplicit item must be single letterdeclaration among executablesno backward DO loopstoo many alternate returnscomputed GOTO list too long`d(I)J=K,M+O-P*Q/R$N:L$U$V$Y$ $ $Z$_$[$]$\$^$W$X$$$$$$$% %%%!% +%";%I%$P%#U%&]%'c%%g%(m%)y%*%+%,%-%2%%3%5%4%6%7%8%9%:%;%<%=%>%?&@ &A&B&C&D'&E,&G6&Hincludes nested too deeprCannot open file %simpossible lexstate %dillegal continuation card ignorednondigit in statement number fieldunbalanced quotes; closing quote supplied%dH too bigunbalanced parentheses, statement skippedfunctionname %s too long, truncated to %dbad bit identifierinvalid binary characterand.or.not.true.false.eq.ne.lt.le.gt.ge.neqv.eqv.assignautomaticbackspaceblockdatacallcharacterclosecommoncomplexcontinuedatadimensiondoubleprecisiondoublecomplexelseifelseendfileendifendentryequivalenceexternalformatfunctiongotoimplicitincludeinquireintrinsicintegerlogicalopenparameterpauseprintprogrampunchreadrealreturnrewindsavestaticstopsubroutinethenundefinedwriteZ+Z+Z+Z+Z+~+~+V+~+`::`:z:::`:d:`:r:`:`:`:missing end statementDO loop or BLOCK IF not closedmissing statement number %sMAIN__MAIN_ %sMAINBLOCK DATA %s: invalid entry nameexternal name already used entry %s: retval: impossible type %dnoncharacter entry of character functionmismatched character entry lengthscharacter entry of noncharacter function .bsslocal variable %s never usedadjustable dimension on non-argumentadjustable leng on nonargumentcommon alignmentadjustable array in common_BLNK__ incompatible lengths for common block %sautomatic variable of nonconstant lengthmktmpn: invalid type %dadjustable length_BLNK_%s cannot be a common block nameincompatible common declarationincompatible storage declarationsincompatible type declarationslengtype: invalid type %dincompatible type-length combinationincompatible use of intrinsic functioninvalid intrinsic declarationunknown intrinsic functioninvalid external declarationinvalid external declarationonly variables may be arraysonly last bound may be asterisk?@@?@@@@@@?"CCC"CCCCCCC@C1-dim subscript in EQUIVALENCEnonconstant subscript in equivalence adjustable in equivalencebad storage class in equivalenceinconsistent equivalencebad alignment forced by equivalenceattempt to extend common %s backwardinconsistent common usageeqvcommon: impossible vstg %d%s %05ld %05ld %dLLMMLMLMinvalid repetition count in DATA statementnon-constant initializertoo many initializersbad impldoblock 0%oattempt to initialize adjustable arrayinitialization of string of nonconstant lengthnonconstant implied DO parameternon-character datum initialized with character stringincompatible types in initialization %d %d setdata: impossible type %d R4SSSNSS0S8TThTw>wwvwwwwwwxx4x4x0x0xLyLypypydydyyyyyyyyyyyyyzz.z.z4z4z~z~zzzzz{z {&{z{h{h{{{{{4445 5invalid complex constantmkconv of impossible type %dcpexpr: impossible tag %dfrexpr: impossible tag %dfixtype: impossible tag %dfixexpr: invalid tag %dleft side of assignment must be variablec_divz_divaddr of addrshorten: invalid tag %dDummy procedure not declared EXTERNAL. Code may be wrong.invalid class code for functionno substring of function callrecursive callmkfunct: impossible recursionmkfunct: impossible vprocclass %ddisagreement of argument types in statement function callstatement function definition and argument list differsubstring of noncharacter %smore than 7 subscriptssubscripts on scalar variablewrong number of subscripts on %ss_rngesubscript on variable %s out of rangemkaddr. vtype=%d, vclass=%d mkaddr: impossible storage tag %dno qualifiers on parameter nameused as variableadjustable automatic arrayattempt to use undefined variableattempted division by zeromkexpr: impossible opcode %dnonarithmetic operand of arithmetic operatornonarithmetic operand of negationNOT of nonlogicalnonlogical operand of logical operatorillegal comparisonorder comparison of complex datacomparison of nonarithmetic dataconcatenation of nonchar dataimpossible conversioncktype: impossible opcode %dfold: invalid unary operator %dconsnegop: impossible type %dconspower: invalid type %dinteger ** negative power inline mod of nonintegersgn(nonconstant)conssgn(type %d)pow_iipow_ripow_dipow_cipow_ziinteger**negativepow_hhpow_ddpow_zzcomplex division by zeroelseif out of placeelse out of placeendif out of placenesting too deepcontrol stack emptyassignment to a non-variablestatement function amid executablesredeclaration of statement functionnon-variable argument in statement function definitionpause/stop argument must be constantpause/stop argument must be integer or strings_stops_pausnested loops with variable %sbad type on do variablebad type on DO parametertoo few DO parameterstoo many DO parameterszero DO incrementDO range never executednoninteger assign variableinvalid type of arithmetic if expressionRETURN statement in main or block dataalternate return in nonsubroutineassigned goto variable must be integerintrealdblecmplxdcmplxifixidintfloatdfloatsnglicharchar maxmax0amax0max1amax1dmax1and$or#xor%not&lshiftrshift'minmin0amin0min1amin1dmin1aintdintanintdnintnintidnintabsiabs dabs cabs zabs modamoddmodsignisigndsigndimidimddimdprodlenindeximagaimagdimag conjg!dconjg"sqrt#dsqrt$csqrt%zsqrt&exp'dexp(cexp)zexp*log+alog+dlog,clog-zlog.log10/alog10/dlog100sin1dsin2csin3zsin4cos5dcos6ccos7zcos8tan9dtan:asin;dasin<acos=dacos>atan?datan@atan2Adatan2BsinhCdsinhDcoshEdcoshFtanhGdtanhHlgeIlgtKlleMlltOr_intd_intr_nintd_ninth_ninti_ninth_dnnti_dnntr_absh_absi_absd_absc_absz_absh_modi_modr_modd_modr_signh_signi_signd_signr_dimh_dimi_dimd_dimd_prod h_len i_len h_indx i_indxr_imagd_imagr_cnjgd_cnjgr_sqrtd_sqrtc_sqrtz_sqrtr_expd_expc_expz_expr_logd_logc_logz_logr_lg10d_lg10r_sind_sinc_sinz_sinr_cosd_cosc_cosz_cosr_tand_tanr_asind_asinr_acosd_acosr_atan d_atan r_atn2 d_atn2 r_sinh d_sinh r_cosh d_cosh r_tanh d_tanh hl_ge l_ge hl_gt l_gt hl_le l_le hl_lt l_ltsqrtexplogsincostanasinacosatanatan2sinhcoshtanhZF000Ԓ0Jrintrcall: bad intrgroup %dbad number of arguments to intrinsic %sbad argument type to intrinsic %sintraddr: %s is not intrinsiccannot pass %s as actualintraddr: impossible f1=%d BBBBBBBBBB BBBBBBCC CCC'C3C~ȗΗԗԗunitfmterrendiostatrecreclfilestatusaccessformblankexistopenednumbernamednamesequentialdirectformattedunformattednextrecunlabeled format statementbad format numberbad end= clausebad err= clauseiostat must be an integer variablef_backf_rewf_endimpossible iostmt %dinvalid control %s for statementunknown iocontrol %sillegal positional iocontrolillegal * iocontroliocontrol %s repeatedattempt to i/o array of unknown sizenon-left side in READ listdo_liodo_fiodo_uiobad REC= clauseattempt to use internal unit array of unknown sizebad unit specifierbad format descriptoruflbad unit in openbad file in openbad reclf_openf_closbad unit in close statementinquire by unit or by file, not bothmust inquire by unit or by filef_inqubad unit in move statementnon-character control clauseimpossible inquire parameter %sff~~~~`0123456789abcdeftoo many digits in floating constanthash table fulltoo many statement numberstoo many external symbolsimproper use of builtin %spopstack: stack emptyout of memoryWarning on line %d of %s: %s Error on line %d of %s: %s Declaration error for %s: %sDeclaration error %sExecution error %sCompiler error line(( %d of %s: %s ()*+%65<="?<A>=@ddPFH.,aZ0/1&-rҳ0bp22$$,Hڴ贾*putconst: bad tag %dputconst: bad type %dʸ$$$$$ƺƺƺƺƺĹĹ**`ƺƺ>ƺƺƺƺƺVVƺƺƺƺƺƺкƼμμHHHHHHHHH::ּHHHT8,,b ^^Dnon-logical expression in IF statementinvalid goto labelcomputed goto index must be integerputx: invalid opcode %dputx: impossible tag %dputop: impossible conversionputop: invalid opcode %dputpower: bad callputcx1: bad tag %dputcx1 of invalid opcode %dputch1: bad character conversionputch1: invalid opcode %dputch1: bad tag %ds_copys_cmps_catputaddr: invalid vstg %dadjustable character function٨٨ުު<<<<<ުL%d: %d.;%d. %d. L%ld %d.%c .even _%sv.%dL%dq.%dmemname: invalid vstg %d%s: .globl _%s .comm _%s,%ld. MAIN__MAIN__~~%s = _%s %o%s+%o%s%o~%s = %s ~~: .byte %o%c%s . = .+30000. . = .+%ld. %s: dox`fnePg*c A D 1   earc.o ǂP0w w)9_arc"~arccsv cret box.o ΂@\xw Nf N f N f Nf Nf N f w)xx_box"~boxcsv x0y0x1y1 _move _cont cret circle.o ӂP0w w)9_circle"~circlecsv cret close.o ڂ lw ww  w)I)hxI_closevt"~closevtcsv _closepl" cret ~closepl __iob _fflush _reset dot.o ߂P0w w)9_dot"~dotcsv cret erase.o 2lw 5  @CB0Buw)hy_erase"~erasecsv iL4L20001 _spew cret fltused label.o .w  A7`N @ 5w)_label"~labelcsv sicL4L20001 _xnow _spew cret fltused line.o DLw N  f & &f & &f & & eww N  f & &xt ewhw dNf N fff e& 4eA5@@5@ @55  u @PU05 55&555&55 @ 5 @5uuw5@7`x@ 55uuwV5@7`F@ 5@tA@PU@ u- w )xy)x))(9))_line"~linecsv x0y0x1y1 _ysc _yconv _xsc _xconv _iline"cret _cont"\~cont\x0y0_ynow _xnow ~ilinecx0cy0cx1cy1 maxpttjnpchxchycommandxdyd_movep _dist2 _sqrt L10001L10002L10003L10004L100L20000L_inplot _spew L12L20002d_abval _outplot fltused linmod.o P0w w)9_linemod"~linemodcsv cret move.o 2w N  f & & w)Xhy_move"~movecsv xiyi_ysc _yconv _xsc _xconv _movep cret open.o  &\w 77   E7UFw<WpC7Fw&W@C77 pC7zwvw r nwjAA@@ 9 IX(Ihx)9)9)999_xnow _ynow _ITTY _PTTY _OUTF _HEIGHT#_WIDTH#_OFFSET#_xscale _xoffset _yscale _botx#_boty#_obotx#_oboty#_scalex#_scaley#_openpl"~openplcsv L4_printf _gtty _reset _signal cret _openvt"~openvtfltused point.o lw Nf  w.)Xx_point"~pointcsv xiyi_move L4_label cret space.o Pw 7P77P757577(AAA77A AA7wFFi _deltx#P_delty#T_space"L10002XL10003`~spacecsv x0y0x1y1 _botx _boty _obotx _oboty _scalex _scaley cret fltused subr.o 't w @w@ w eA 7rmww eA 7rww   P ww      X wNw J PF Bcsxk& ) , / 2 5 8 ; > A D 1  f w&w " ww | ww @@5@@ 55@uBww u}}ww w-w-_b @5@v5    @PU45N 5N 5A r5A r55 @@55-@U5@ U8 U@ @@5xN @ u-u-@@5G@U5@ @ 2@AWp@5@AWp@5@5 % U8%U NN N @   N @t@]U@ ww ww 5www5@wrw n 5wdw^wX5@wJ)i)i)i)(9Hi)9Hi)i)(i)Yi)i)i))I)I)Ii) i)iyi_abval"~abvalcsv qL10000L3cret _xconv"~xconvxp_xscale _xoffset _yconv"6~yconv6yp_yscale _inplot"N~inplotN_PTTY _OUTF _stty _spew"_outplot"t~outplott__iob _fflush _ITTY ~spewchL10002L18__flsbuf _tobotle"~tobotle_move _reset"~reset_exit _dist2"~dist2x1y1x2y2 tv_swap":~swap:papbt_movep"V~movepVixiydxdyremxremyptsixdydaddrcommandc_xnow L10004r_ynow L33bL10005L10006L10007L10008L10009L10010L34^L35"L36.L20000NL200096L41L20002JL39L20003L20005L44L46L20007 L100114L48R_xsc"f~xscfxixa_obotx _scalex _botx _ysc"~yscyiya_oboty _scaley _boty fltused czykU       &   earc.o UP0w w)9_arc"~arccsv cret box.o \@\xw Nf N f N f Nf Nf N f w)xx_box"~boxcsv x0y0x1y1 _move _cont cret circle.o aP0w w)9((_circle"~circlecsv cret close.o h lw ww  w)I)hxI_closevt"~closevtcsv _closepl" cret ~closepl __iob _fflush _reset dot.o mP0w w)9_dot"~dotcsv cret erase.o t2lw 5  @CB0Buw)hy_erase"~erasecsv iL4L20001 _spew cret fltused label.o z*w eN @ 5w)_label"~labelcsv sicL4L20001 _xnow _spew cret line.o |pw N  f & &f & &f & & eww N  f & &xt ewhw dNf N fff e& 4eA5@@5@ @55 5  55&555&55 5 J5uuw5wmN 5@ @ 5uuwN5wmBN 5@ @ . u- w)xy)x))))))_line"~linecsv x0y0x1y1 _ysc _yconv _xsc _xconv _iline"cret _cont"\~cont\x0y0_ynow _xnow ~ilinecx0cy0cx1cy1 maxpttjnpchxchyxdyd_movep _dist2 _sqrt L10L11 L12L13 L140L20000L_inplot L16L20006Z_abval L19L20002_spew L21L20004_outplot fltused linmod.o P0w w)9_linemod"~linemodcsv cret move.o 2w N  f & & w)Xhy_move"~movecsv xiyi_ysc _yconv _xsc _xconv _movep cret open.o &\w 77   E7UFw<WpC7Fw&W@C77 pC7zwvw r nwjAA@@ 9 IX(Ihx)9)9)999_xnow _ynow _ITTY _PTTY _OUTF _HEIGHT#_WIDTH#_OFFSET#_xscale _xoffset _yscale _botx#_boty#_obotx#_oboty#_scalex#_scaley#_openpl"~openplcsv L4_printf _gtty _reset _signal cret _openvt"~openvtfltused point.o lw Nf  w.)Xx_point"~pointcsv xiyi_move L4_label cret space.o Pw 7P77P757577(AAA77A AA7wFFi _deltx#P_delty#T_space"L10002XL10003`~spacecsv x0y0x1y1 _botx _boty _obotx _oboty _scalex _scaley cret fltused subr.o h  Dw @w@ w eA 7rmww eA 7rww   ww    p wfw b% cyk       &   `V R @6 2f ww  ww d ww @@5@@ 55@uBww u}}ww --_z r@- 7 b@ZA5w-J 5A7`,N 5N @ N 5 DN @  H@B5w-  5B7`N 5N @ N| 5 N @  wPwJwFw B 5w8w2w,5@ww  5ww w5@w)i)i)i)(9Hi)9Hi)i)Hi)yi)i)i)i) )i)yi_abval"~abvalcsv qL10000L3cret _xconv"~xconvxp_xscale _xoffset _yconv"6~yconv6yp_yscale _inplot"N~inplotN_PTTY _OUTF _stty _spew"_outplot"l~outplotl__iob _fflush _ITTY ~spewchL19L10002__flsbuf L10004L18_tobotle"~tobotle_move _reset"~reset_exit _dist2"~dist2x1y1x2y2 tv_swap"J~swapJpapbt_movep"f~movepfxgygich_xnow L10006_ynow L34L35L36L37L38L20001L40L20003 L42FL43LL44pL20005hL46L20007_xsc"~xscxixa_obotx _scalex _botx _ysc"~yscyiya_oboty _scaley _boty fltused czkįrN{ ~ UU easin.oT w @55 555@5!w@uA& e57555& e&7d 55& le555w V@55!8w25& (e&7@!h3@333333Y Y _errno _pio2_asin"L10006~asincsv argsigntempL4,L5DL3@cret _sqrt L6_atan L20000_acos"~acosargL10009L11L10fltused atan.oT|pw 5 5& ew5& ew 55 5<537x.55 & e&7\555 & Zew6w0 55 & :ewH75 555 & ew 57& Ne @5& :e&7w57uW@& e7w 557z57z57z57z57z5uwvuwvuwvuwvuwv55wBAy2?ϒy@!hI@!hB:IvDv6T1E r OER `EM2 fkCӴKE\QEYWF\*~`EM2 f Y Y Y Y_sq2p1_sq2m1_pio2_pio4_p4_p3((_p2_p1_p0_q4_q3_q2_q1_q0&_atan"~atancsv argL4 _satanL3cret _atan2"4~atan24arg1arg2 L8L9L7L20001XL20003xL20005L20006~satanargL18$_xatanNL17 L20008~xatanNargargsqvaluefltused hypot.oTw 5555 5 5 55 55 555 5 w55 5@& e5 w z5 &5& jewb))_hypot"~hypotcsv ab tL4L50L6PL7`L3\cret _sqrt _cabs"~cabsargfltused jn.oU8l@w *  @ 555 5& eC5& %5625& e55& e5555A555555 u-5w>55555@e5 5uWAu5 u-5uWAu55@5@ 5555A555555 5& e55w x5!d7w\ @ 5 r% 5& "e% 5& eu5& e55& e5555A555555 u-559))y9 y_errno _jn"~jncsv nxiabtempxsqtL4"L5D_j0 L200002L3L200028_j1 L7L20006ZL9L20004cret L12L20008L15fL20010:_yn"L10006l~ynnxisignabtempL21L20L22L24_y0 L25_y1 L26ZL20012.fltused j0.oT$ pw 555B5.5& e5757t5& e&5& e7r&5& e7Vw|czk7rN{ ~ UU555555AWt1555AWt15 55w 7 54!7,5& e57575& e&5& e7&5& e7|wB5555555AWt1:555AWt15 5& :e&5& *e7uuw CuA55555AWt1Z555AWt15 557z5555AWt1555AWt15 B5uu7$wF"@NnDI@!hb %03b_B#pP),ZyY9#ՙO1gQ?_΂#G.Kb %0_ɮl[-&WC#בSm9>Oz1aJ`1E bp@K*]Lѓ JV3i8InX3#F6{7@y ["Ǫ5eCۯL߻ybXC,HFciyI ["JlJ2CIT]҅)uGc4R-Dbq@ЍdazߤT\&\+*پlt/V;W \.aM #!Z}bXh_ԹZ/[IuWrsSW\@n O*G 4tJjB'E}Nչ@ _errno _pzero_qzero_tpi_pio4_p1_q1_p2Z_q2_p3_q3_p4:_q4_j0"~j0csv argargsqndiL4L5_asympt_sqrt _sin _cos L3cret L20001_y0"L10069~y0argargsqndiL12^L11ZL20003L20005_log ~asymptargzsqndiL20007L20009ffltused j1.oU (w "55555B5?5& e5W@Aw575& e&5& e7&5& ~e755555wR555555AWt1555AWt1\5 555w "7 5557!7/5& e5W@Aw575& e&5& e7&5& ve7wfB55555 55AWt1555AWt15 5& e&5& eW@u7uuuw CuA55555AWt1555AWt15 5575555AWt1555AWt1L5 B5uu74w"@NnDI@!hb)Ag5|l_=FN6] XFkƺ0KPqM><˓MSp(FѲFV|c)A$` sX\nRIJ=XsSüHS-QªqOQoi;HJ SPE0s@[^2Lڄ)uJ8a{Żs[^2,cC 6FMU`@H:՟xHLhHkAWWG|QEL_ CA?/u-JM(JVVJ%FY[2ItB.bH:rWE؀@ʞvCRe {p>7X`i-Ƈ̂. CYYSOZ'7nݜXP0$˾)Vg;99;d SE `! [R\h?][aX\{ToEOɌVJ ET@ _errno _pzero,_qzero4_tpi_pio4 _p1_q1\_p2_q2_p3_q3L_p4_q4_j1"~j1csv argxsqndxiL4$L5_asympt6_sqrt _sin _cos L6L3cret L20001_y1"L10073$~y1argxsqndxiL13L12L200038L20005_log ~asympt6argzsqndiL20007\L20009fltused pow.o%U<w 5'525 ;)5& e5 & e55555& e5 & ew5 5 55 !^9(( _errno _pow"~powcsv arg1arg2 templL4`L5L6L20002&L3|L20001*_log _exp L7Zcret fltused fabs.oT Tw 5555w)Y_fabs"~fabscsv argL4cret fltused log.oUT Xw "5!7>wNe5& e5 5A5@ 5@557 A55@ 55uW@5575757|57l5W@uwuw|uwl55uw"5w 5& e7 w1@rzA]ݬ5@3dlB##3h@?ØGf@lB,l$d!r yy_errno _log2 _ln10_sqrto2_p0"_p1*_p22_p3:_q0B_q1J_q2R_log"L10011Z~logcsv argxzzsqtempexpL4 L3cret _frexp L5PL20001:L7~_log10"~log10argfltused sin.o0UPw 5555& Feww  5& Feww :555 55@ e5 5755(Ne5& e55 55Ne?5& e5WAu5 555u5@ @mE5 5 @55% 5555757p57`57P57@5557p57`57P57@555wp"@NnDOLX2xة3I䔶TX]1 D!L%dIgN5&GbqhDK-?   _twoopi_p0_p1_p2_p3_p4_q0_q1_q2_q3_cos"~coscsv argL4_sinusFcret _sin".~sin.arg~sinusFargquad efysqxyktemp1temp2L11vL12_modf L13L14L15*fltused sqrt.oBUD,w 5 5!wNe5& e55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_$9 _errno _sqrt"~sqrtcsv argxtempexpiL4(L5"L3$cret _frexp L6RL20001BL8vL9L20003L11L20005L13L20006L20008 fltused tan.oNUH`w ,5 @55 555575Ne5& e555A r@  x@555575757575755W@uwuwuw5%,5!" 57w55@55557p@5555@NnDL0ւEyV+x > >0ye9 j6F̍ـX(t9 9_errno _invpiH_p0P_p1X_p2`_p3h_p4p_q0x_q1_q2_tan"L10015L5L7tL8L9L10018L10019~tancsv argsigntempexxsqflagiL40_modf L20000L11>L122L13,L3cret fltused tanh.oVUlfw @55 555B55w5& e&5& e5)_tanh"~tanhcsv argsignL4,L5@L3<cret _cosh _sinh fltused sinh.o:U8:8Dw 555B5&5& eA5 5& e&5& eDAw@555757575755uwuwuw55w 555B5 5& eAw5& e&5& e%zگ\.0l4aѶoqB;%zmGt -ϭ   9 9  _p0:_p1B_p2J_p3R_q0Z_q1b_q2j_sinh"~sinhcsv argtempargsqsignL4$L5|_exp L3xL20001Ncret _cosh"~coshargL11L12L20002fltused exp.oTPPw "5 @"7w755775& e55u557n57^57N55@57b57R57B5N557Nuu& eJGSrCu%طK@0qi9IE4Ÿ@;\)@3dG@ _errno _p0_p1_p2_q0_q1_q2_log2e_sqrt2 _maxf_exp"L10011~expcsv argfracttemp1temp2xsqentL4*L3&L20001L20003cret _floor _ldexp fltused floor.oTw 5"55Ne5& e555@555 Ne5& e5ww 5& ~ewt)hh)_floor"~floorcsv dfractL4V_modf L5JL6jcret _ceil"r~ceilrdfltused c{kG] ` c f i l o r u x    earc.o PtXw a a N N N N N N w)_arc"~arccsv xiyix0y0 x1 y1__iob L10000L10001$__flsbuf _putsi cret box.o X@\xw Nf N f N f Nf Nf N f w)xx_box"~boxcsv x0y0x1y1 _move _cont cret circle.o ` @w c c N N N w)iiih_circle"~circlecsv xyr__iob L10000L10001$((__flsbuf _putsi cret close.o i `w  ww  w)8HY)8HY_closevt"~closevtcsv __iob _fflush cret _closepl"~closeplcont.o q8w n n N N w)YYYX_cont"~contcsv xiyi__iob L10000L10001$__flsbuf _putsi cret dot.o zlw d d N N N N 5 @ @m  u- w) _dot"~dotcsv xiyidxn pat i__iob L10000L10001&__flsbuf _putsi L4`L20001Lcret erase.o (`w e e w)9998hy_erase"~erasecsv __iob L10000L3$__flsbuf cret label.o w t t 5 @@mE ?  @@mE& @@mȋ   wd)YYYXYYYXYYYX_label"~labelcsv si__iob L10000L10001&__flsbuf L4lL20001,L20003HL10004L3cret line.o <Hw l l N N N N w)yyyx_line"~linecsv x0y0x1y1 __iob L10000L10001$__flsbuf _putsi cret linmod.o w f f 5 @@mE ?  @@mE& @@mȋ   wd)YYYXYYYXYYYX_linemod"~linemodcsv si__iob L10000L10001&__flsbuf L4lL20001,L20003HL10004L3cret move.o 8w m m N N w)YYYX_move"~movecsv xiyi__iob L10000L10001$__flsbuf _putsi cret open.o xHw ww w)9)9_openvt"~openvtcsv cret _openpl"~openplpoint.o 8w p p N N w)YYYX_point"~pointcsv xiyi__iob L10000L10001$__flsbuf _putsi cret putsi.o HZw  @& @t? @t& w)IIIHxIIIHx_putsi"~putsicsv a__iob L10000L10001&__flsbuf L10002@L3Vcret space.o ȁ<Hw s s N N N N w)yyyx_space"~spacecsv x0y0x1y1 __iob L10000L10001$__flsbuf _putsi cret c|kV N Q T W Z  eallprint.otw @ ' !  !@ @ %w    AEHv@&E w b@  wHw D% % w.\n\t\b\b\%-3o)h))_allprin"~allprincsv cL10\L8VL6FL12b_printab"L15hL16_yyout _fprintf L4Bcret L7L20002JL20007RL9L11L13L10000__flsbuf _sprint"~sprintsL21L20009~printabcL10004L10003L25main.o|Hw  w)9HY_main"~maincsv _yylex _exit cret reject.ohw  1 e- !7 e  0 %~ wv r7n 7 dw ZVT@%B: 62 @ & %70@w)Yixiixiix(yIYYhi)(iixixYixI_yyrejec"~yyrejeccsv L4L20001_yyinput _yyleng _yytext _yylsp _yyolsp _yyfnd L20004>L8nL20008,_yyracc"L3L20006N_yyunput _yylstat L11cret _yyprevi _yyoutpu ~yyraccm_yyextra L16L15L20010_yyback yyless.ohRw e  -CeC %77w)ixixxxi_yyless"~yylesscsv xlastchptr_yyleng _yytext L4$L62L20001*_yyunput L8D_yyprevi cret yywrap.oX 0w w)9_yywrap"~yywrapcsv cret c}k갿,H K o > >  0  6 >  67eWtE,ef f  &e7\ e % f l& f @No space for monitor buffer I9Y9cbufs,exitwrite_monitor _sbrk _main _exit"_environ$_etext __cleanu countbas$starteprolc~kvE % 7 7 << 0  6 >  67 % 9_exit _environ$>start"_main exitckD' * - 0 3 6 9 < ? B o [ (((0 0 w") "e P    E   e z  n w%%%7 % V e J wn)  -w`7 7 $$w b 7$7 $  $) E Ew EvCv$n$`n$f$ @ e@ x7r d7^C T7N 7><) ew (  w %" w z'l @w %  w %w '#7#7 #w 4%) #w H% w <% w 0% w $%@w %@w %  w ,%wEw|#%w@2#E   m&#m#few e@ % !%""7 " ,ԋ! wD  w^-\5Qe,'J& C N R") U"E   w r   mx n  Uw %"eH w 'eH w lo w ^x- w Hrf&5w l% w d'eH eH " !Vf&%w!%@7F!P  r e0H~J  @% ^!!< T$&# d7r! 4!=[!:74! p%   -j }j w!!*w x<%E   w mE]7 ~ -w p %ȝ7N zH t t W E V LF     w d. w VrEE б! ! w! !;!e %t%eD t% CBE`eSeSfBJ b &w eB$wJR E`wUeb ( w  Z wxas: write error on output  7  $!!e!e7  " 7"ew $!D!<wP     w && H %7 ""xf, 8 B 62^ v & F &&RR%   ѕ  """ ""  | ! #!w xUU %E BCwf & ! .  ! ! f #e`&e  8 x _    P l(!# w V}e  J!w 65    EU w b   Zw  N     0U V  !, 2 PE  :5 -     ! !,  E& l% w :%w 4' e( Xw %e @w '7F%b 7V !& P L 5U  & !(>!-X!$k!*w !(   U0U  UE UW!%7U > !+  U8  xU ~UU r!(7x- ^ h >UU F (U w \* ww Ja W     w $e!)w ) W  & w H fEtWt1$TW fE >WtA$Vt 7 Tf+  Tw  w hu 7 VS!a $I D$  y+ - * / &    % [ ^   ! +   (!]w ]: # Z}+ - * /  & x n % ^j ! >   w vt4w l r*w XB`%w NB w DA B@w 8BPw .BpBw " rw A B`+wX&PEEE & W%   Uf7  (Wp @e@` w ~r E7 j7d    ? a.outZ R J p <7@ *f xxxx |   0 @ P `  @ @ @ @ @ @ @    @    @ tvpprtvrx ~ W- Wg jWo wJw@w ww420w db 7@w Zd 70w Pf 7.7$w ` 7(wck/7 :: @+ C 0  6 >  672 % 'w * 00 & &L"A?  ew*w *L-L ?E:  &E $$ -K7Kwh*w X*D KK@K -K -A jKKeK7`7K7K!^ -t. lh TKV ҃ 7>K%Bh< 60 p\K@m7K?KS7 pJt> z*%5 ؂M FB@Ƃ 5L 5 L < 4< 0<ȕ &< $$  7H $O*  -nH惄 fH%7\H ; ; ;ȕ*;* $$ ; ; ;ȕ/;/ $$ 7G7Gԕ/ԕ* _7G7G r_~ -G_ ԥ* e7G <5 ԥ n L -tG $Ot_  _\ ->G  L%$P8K:_7 :ԥ#_ 7G-F_~ $O -F_  fch$O -FS &F % F_F_~MK$OMB$OM9$OM0$O M'$O@M$OM$O -F F M$O -E_ w X$D7E7E jE$Nw<$w ,$D %|"|XA j  || * jE7jE @H} -^| X|8e8%8nA jl} '?8 8&| E!-E| {҃DeDD! D DwA jD57`D7`D7`|@mw4#w $#D CeD Dȥ<-7pD7jD j ^D 5 ӟND JD7!FD" >4D7!.Dۃӟ(D $DD" A j  7C7C j C |7C % _  A j _ { % 75%A j{ '5 @ e`5 =/@ȋNef )Nf ) Af ~) Nef ~)  f \* { 1: zz 78v6 NeAez LCz Ӌ66N  7zz 1$ P -Bzz yw!w !DCB & ) 5J  w w P%5A j_ A N 5 B_ t5 N 5A$Nf& %55w255pM@`E5B-B-5 @7A7AN j5rḀ(`Be@e5N 5LḀ *y L NB j F C̥)̥,$N@5=B @5=B j }@e@-ꆽeD- ̥ x L 4@7@7@N j5t@̥\ ̥ _8 ,$N,u@e@-N&f  % @Ae@@ r ӕDD-̥"̥'5D-L$OD-$O B-u@e@-&f  % @Ae@@ r ӕ SB N  ) !w LN3B  w L@ p }7?l2@wCw nD$OB j > > $PB  >#>>> @} &> % ,}- } "}_ L  }_ -|-|4 |  &F> % | |  |_ |  &> % | |  |_-x|-p| ||  v|_ |_ b| \|_ @B_-8| F| @| 8| 2| .| NBV-| |S | &h= % {B-{7T= {   { {8=.-{ {( u%7=7= =# = =_  j < <<< [B j n{ 7<7< j < N{_ w 0DCeCe$O=ӕ ӋmBj< $Pv@Ne L tww #L<#/ /N  72<ww t  s pBK  %s LuBK  %NffK  ezBK  swJw :Nff j%w0w  ssNf j wsww D5 f;5@`5`B rBeteЄ52Dԋ%@ȕ@0 @7:sw%Є  |B j s '  C }w 2DC(( %e % N&  5JK@   x d 7>:7 8:@ww DB@_ tq%nq qNB j _Pq-Nq7 Dq7Bq7 @qw4q -^xBeq LB x %ҋ-4xBevq B x %ҋE5_Ce@e5%$PV= wp  ,9($9[q 7Ltpp 7jp`p7878 j(8 @p)8 4p @e@-%N A  "% p ,8ӟck7 ::8 87!8@e ŃNB j e o N A  Be  v$OL<#7!,8 7,87&8  @a 7!8 7877  $OʭV+7777wbw RDӋ !/!ӕ. w8w (D ++ +ww  @ H @w w ww B $O$NB$O$N C$OC$OC$O^* $O:r9NU4O C$N 7n CD-_ @m -_ @m Q C( D( EH IX P R U> @mC1 @m C) n) n& n#%) @m @me?j)ed)  @mAC j %̄F) @me?2)e,)% ) @mbC ) ) AmAep` (8  @m& \* 7( @mC j  ' @m m 1 m e$& @m& : 7l%Kr()C @m& 7X( @mC j  '_K v%.&( _ @mC_zl (87 l' 'C`' '0 `C @7rC @7rC @7rC @7rC @7rC @7rC @7rD @7rD @7r 4L  D 7prD 7frD 7^rD 7Trk 5k 'Dk L|Ne -&=f  fe  -&(k pP*3&3e7 3e737 q7 qj 373722 .kww p2 72 2"2 ) 6D@ r 5FD?227272@w ğ2?2FD%6DփJˋӯn259^2X0V2T0N2H2xX02e "2  2  +J2 ) ) p1  5 v)7 p) dp@  7Pr1$O'1C1\51'06) ˋd1A@ 0H1e  57q_.19"111J ) ?0_?00J j _w `5 u@ 5D0 6' xXD@e52AupAmu@e5% @e5% %l%LNJ j @ww 6 -7 -7 -Be0 --J L %e@e J whejp 5(H%, @- 76-7 0-m,-%k@ RE5 - -$I-ppC , , I5%, , T7,7 ,De%@ e -,@5  ]|, X x$J K  b,^,0 (He5%k RE %$I@ RE_ 5(H ,K L %@e ˆ_ ++BK L +_+_ +NcK L @ H D@ H 5@7nu@ 5H@ Hb 5%k  RE A p $I@ H RE@ _ x,J_Lpwn_ r7 n_ rc t t4# 4#4#4#4#4#A @@@xS     7Vm_  @ 74m_w  ff %%w w Nfef !%@ w w Kfef !% ^+w w BuNefef !% = Ne& $$ @wT w D D  Z( t 4 w w  uDAB %u f& & e w 5 5  W- W00u5  .unKBwF J@B _"@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AKҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E $$ z f $$  #̥-%0  E: E:  &E $$  z f $$  ww DuNfe& *%4 ;#%KC' ") .. '  & *%S  w"@w DE%& *%  w w K v%e-&ww D@ % )  Z( 4 4 wJw :D  w8 r< wf &=@+ @ a f \*  %hf & &  0*e   f \*  4  Հ rw `D& )     )& \* w6w &K-`% w ef >@w  :idU7,ibU7"id ibiAe vBi7 i55 a  a!RE -h%b wx h%he rt 7h *h `e h  *%nhjhe U?XhXh `e 7FhbU?:h a7,h $h&h?hhU ew DgE ww D5 Z(@ r5N '!wh5A vBB-  }ee@ !ۃ `!ւ `@ r `Jgw Nef d)  ww N tf *%ww Ntf *%ww DCԋ Ԕww vDCԋ wl@w TDCԔwLf@w" fwh"wd"\LwfwP"wL"wH"bLw f@w."w*"w &"jLwfw"w "rLwf@w!w!xLwpfw!m!!~LwP!wm!fw!~Lw.w! f@w!w!Lw7RcF@& BFTK|\"%s: argument mismatch# %d "%s" token too long%s: unterminated macro call%s: too much pushbackno spacetoken too longbad include syntaxUnreasonable include nestingno space/Can't find include file %stoo much definingillegal macro name%s: missing )bad formal: %stoo many formals: %s%s redefinedIf-less endifIf-less elseundefined control 1%s: %d: too many defines%s: macro recursion%d"%s"%s: actuals too long_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789. "'/\ "'\* too many -D options, ignoring %stoo many -U options, ignoring %sexcessive -I file (%s) ignoredunknown flag %sNo source file %swCan't create %sextraneous name %s/usr/includedefineundefincludeelseendififdefifndefiflineunixpdp11__LINE____FILE__command linefJiJlJoJrJuJxJ{J   ~J*********************************,<> -<> .<> /<> 0 1 #:  <  9 ;      !                   "%&'()*+,-./012345678$=  llaaLCC7)  $-!~(*/%+- <>&^|  ?,():)4 *4<DLXhpx||&&>><<>=<=!===bt n f r \\+-*/%<>&^|?:!~(),defined\ Illegal character %c in preprocessor ifIllegal number %sstate %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d "d!o!x"f"e!g"c"s!l!L"u"r"D!O!X$"U(null)``ZL6n((ck[p- pZ  '~  0  6 >  67L % #w :' % @+ e n5 % @- e %@& % @ % #%@& % @ % # '777 ~  d     n "    t 8 lf  _ %  %' %= %N %c %s % % % % % %r %^  %P  %@0 %0D %&etE\ % #w$w $ E A x L̕4 d44 AwX$̕44 - E t4LLF d4 E t44  F 4 4 34 %%0 w # E  % % %:  wr#% % f   #Ԑ E  %0w #D %9 Wp C`e%0 w"w "_    _ % "  ._ 0`  U   Q 7%d4 E@ t@   %d    e̥̥ w!      w ! B$ ' ԋ"̥,5 ̥*  Ԥ(, N F%2 w@!w 0! D ̋ w*! ԋ%D ԋ D%D @w t @`@`E r9C e %x  #ew w  w| | ˥ ˥ Ҕˋ ˥ ˥ r<t5 @`.@`E r9 e u | ҢӋӥb Ӌede%x  DLˋ˥0ӥ9 w    %̥  r 1 4  >̥̥̥ 34  r C ,T ˥,   5 @4C  ̥  ˋ˥   ww 7  _h ̥̥̥ $ ! ˥ ,    ̥(ʥ#˥  04 @ 2̥3̥0O.*&0"   40  ˥ $00  x̥̥ l  8 _ww D)̥˥& .   ̕44 ww D̥ ' ˕3 3 3  33wNw >D̥C?<˥˥˥6$ F T32   ʥʥ w! ʥ,@ D 52 005s5r N @    w ̥%  ʥ &    ww rDC   |̥& . ww  * _5  ,_ xd_ zN  " @m -00 ,  ̕  "& 7 F 4 _N& & %  N   AmWpeNNm H     H  z̥/  3  ̥̥;   00_N& & % HN  ̥   Wp17d_ ^N  ̥   > HA   ^N& & % H  _00 _ z H H̥lD  H  ̕ "& P  T  ̕7 F 4 \  ̕_  ̕ "& 7 F 4 |N& %__  ^b H  z   && %0p  _̕404 _  _whw X 5 r   ^@̥:˥7 4 1  &&   %,43t3  @ww +̥'  !˥0-  < ̕.40 wJw : 5 @ D-  |5` % ww D        ! w z & eew D̥̋r̥(ckښp- pZwr̥-( w b @ w^@w HB@ ʥ ʋ @    ԋww D  $00ww @5 @ww D Ea- '% e   #e7awbw R Wp1 % 77w>w .AWpDeC H Ԓ˥( r5 ӥ,$ww D H AmWp1 Wp@*WpeN&  Wp1 % Wp1N&  ̋"̥(r5ԥ* Wp@$Wp17x % w(w @ 7@w w B ̥,̋ ԥ,ww DNWpef  w @e!w D̥r0 4 ewjw Tt  ~  w>w .D̋ w*Ӌ̥-(̥*-(+̋ԥr̥0̥4Wp1w  _N  5_N  %%  ? ӕ,7 rXe07O7L ^ rm@e07b7_ > F%A1 ww  _%4%, ̝44 07@e5+̥&˥  5p3 @0tD  @HBp@w,d$0̥̥̥ % ˥˥˥ ̒   00 w w D = ˥8 ^ H )  5& %  r z  w ˥ zw AWpDe̥$  Wpe@w  &  w DC ԥ$ӥ$w  ˥7 te`˥0 ̥7 te`̥0̥+ ˥+ ԢӋ@ ͂ xB- B-B-B-B-B-B-B-B-ކB-ڃw DC˥$  > Ҕw w uu@ H w~ @ ȋw \ D > 7wR w 8 D̥* ̥(̥- ( 5 ԋ +̥)w w D 4"ff "%w w Nfef %@ w w fef % w w r D@wT  #4 e4 && &%4 %  4 E w uDAB %u f& & e wn 5 5  W- W00u5  .uBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w TDCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& J'%4 ;#% % x x  #  & J'%S  w@w DE%& J'%  wt w ` 4"e-BwRw BD@ ! :&  $ 4 4 ww D  w r< wf p#=@+ @ a f &  %vf p# &  &e   f &  4  Հ rw D& P&     :&& & wf d@w  ww  FU78U7.,(($Ae vB7 55 a  a!RE -% w8 %e rt 7 ' `e   '%zve U?dd `e 7RU?F a78 02?*&U ew xDE wjw ZD5 $@ r5N #!w(5A vBB-  }ee@ !ۃ `!ւ `@ r `Vw Nef &  ww N tf n&%w~w nNtf n&%wdw TDCԔwLf@w" fwwrwfwwwxw f@www wfwwwf@wwwpfwmބwPxwmrޅfwbw.wT f@wDw@w7F@& BF  $+ / 3 7 ;?CGKOSW[_cgkosw} !"#$%&'()*+,-./0  N@@@vvvv@jbrjeqjnejlejgejltjgtjlojhijlosjhisjmp.globlmovclrcomincdecnegtstasraslsxtcmpaddsubbitbicbismulashxor.text.data.bss.evenmovfmovofmovfoaddfsubfdivfmulfclrfcmpfnegftstfcfccsobjsr.endrC2: can't find %s wC2: can't create %s %d iterations %d jumps to jumps %d inst. after jumps %d jumps to .+2 %d redundant labels %d cross-jumps %d code motions %d branches reversed %d redundant moves %d simplified addresses %d loops inverted %d redundant jumps %d common seqs before jmp's %d skips over jumps %d sob's added %d redundant tst's %d literals eliminated %dK core C2: Sorry, input line too long L%d:%s:%sb %s L%d L%d sob %s,L%d %s (pc) J BB <Xhpx$0$-1$177777$0$0$0$-1$177777$-1$177777$0$0$0C Optimizer: out of space $0doxfetgNc`slLurDOXU(null)z z p6c kr҉ VޟV wB 0  6 >  67F % nw w#| ( n@& d%  ( n@& d% @ (  n 8u777 X(  e e@-ʀ@& d% ̀ ( n ( F -@ހ (    nwvw v C N%Hp@ 55N&  55e@ 5&5 "@ 5@3ff Lewbus# 55  53ff Le3Nf  5 _Ze}-@=E@-5ʥ@%$/N&& % $@ 5 E@-@%$  &f % eʋ_Zw LtB5  @@ 5% C wt 5%  %5% %̏  3 r y0 3  N̏ %7v%Q& K% 33% -`% 5Nfe %C̏ 5 _@Nfe % _@%_@%_@@_@ 5 5 %   Ne @ ` % Ne @ ` Cc % bN h%  ( ^(w %̏_>%_> _%_%:3 & ; K% 33%L\_[_ R#_   $ & 2_ 4_ 7_N %_>& & %_> _ 0_ 9_ 0_>C%̏%_N h%[%%;XN %M % 5N h% 5%p%H%   e j%p- &f" ee F%f4 e%_@%? (_ %n  x x^w ( _w oBu@ 55%5 %6%"_%_Ndx5& Zx #eNf % 8x N& N H(Nf %x x H(@TQ%N& w5& w #eNf %5wԉ w5& w N& N H(Nf %55 ff %N H(@wn%ZN  5 5% 5 %%: Nf %5%(%F %% %%%% &j K%2-ֈv@@m@ 5%%% !%!%%K%L%  f̏ Le5 ff Le5_(@5% 3& Ze  35  5!%@ 0&@& zZe @A p@5 5E    Nk @ r y:  _"%+%I%_" _" D5 '+d N&  @5%' 5 *f <%5D% 6b, (b Nk   _ f _ f Nk%@% ҄bȄ Ąb Nk 5@e5 ! U5p55%5%+ %, %I%J%:5  %p%$%H%pH5u 5%uuNf& %5%-_ 55u-fVu_ u-_ 5D   =%95+5Pr@ f  AAE@ 5"r@   AE@ u@ 5_ ff _ u+ -q%%Ɂ (N e_f (_ %H_ 8-._ -_ ) ) Nk +_ R_ @  _ %$ e%  _  (_ %#_  &_b @ 5% ff ee_ %5N _  %    Le N e N_& e_ *2 $  @5 % _ _      %%5.      6_ _  _:  _B  _` __  _  pu-_R _R _  _L _$  O r y4 _ ?D_J  5 _ _  (@e ' _ _" _ _ _,  _8  _j f_ w reB 5%6%5 wZefe e  5fe e  %  fff e N 3=w dD 5 wd%( Nf&e %  3=%$%( Nf&e %  3=% r yf%  %Pj( c xF # Z R#4  % %,_p _%p,N̏& ck`[҉ VޟVހ%e =_ # _%-J~e@@ ̏&  & %   _$ _   _$  _   _$_w bD% %!%Nf& % %5%6  wjb  5e De D Nf&  & %w bD% %!% =e De Dwa%$%(%( w aDwa K 3333w la D%$2jN&  % wLaj555Nffe %w aD%s5  %! & h2 {   %_ p& % _%% %$: ( w` # K% f K & ( Ke 3 & % %5 u-#] e  o e N{ e hh e% h z@   H& % w _D%dw_ & h2 $ K%w z_DC%  e5_ 5  _ xl%4%%_44%;%_55t%  e _%#_ &  Dx :x 6x_ Nk%3 %g04%%%9V%R 05% 5& Ke A5&%8.%%*4 5%5 55ff΂ Ke %:%ւ (w]w ]u-7@%!u-Nff f & ee((N f ffNff  & eew6]w &]u-@w"]@w ]D7 42 %(%%#%:! `L% 5 %# w\ 5w |\C_V x,% 8 e _n< e (_n  >% e  ( u+u u+ Nk     x B _HLU &u$u u$ Nk %62 |/% +b e%+%& -j t*t t* Nk  _r (wZw Z (wZw ZD e e wZw ZDN&  % % %wlZw \ZD9 5 2 xN ( "% % %%%% wY ƃ% t-w YBC% %%% %%5 wxY% 55EU%%% %P%!w YDL-   e e N ( wXw XC%$% %%#wX%(w XD 5#%^sfwhX w TXDN  8@ 5@%) Ew&X@ r yp U     $ % .   $ -w W%  xtwW@ w |WCB N e wfW 0` " @ r55AAWp ; ʄ e __ff ee _ eNۄ e ,ք e  e% C h" e N焊Ae r  K5A r5J5 @ @m u-  5r Am e 5 5 @ @mH-@ @m5 u-AupA- uAupu A r@-z^ t^Nff ee X^5 N^Nm e u- e5 u-_^ ^ e  5rA-  5r& h" e N e w T  eN e N e wTw TCB 05 '4- ' ( wT4- 54t5 te ׂ  w 8TC  %% 1wT w SB #%   * + ,& H I J&; ( 3wS.L p/Ct Mw `SDC _% a_%@ 5-%:)%:%22%>%A%%@e5 %@ 5_%%_%f& &e_J& & f[5& \[ #e& #eN H(_J&& & #e& & #e& # Z5& Z #e&  & &̏ %BW " 5 6 :_$_$ %@ 5=%%  e@5  F e  f& N&%wQw QD nf& <%L eNP e wPw P5  N fe %B  5 = kkkw~k7 |k7zkxk %: %  7Dk%7Q& K% 32N  h% N  %5 V e  &j N&%wjwjwjwjwOw Oj /jWpaC j N&%jWpaC @Xzj :X nj N&%hjWpaƒwFO NjWpaAƒf8j N&% 0j*j H( w ONc e wOw N@  xh e sN e wNw N ii d%Nff f fff de h h h Nk wfNw VN D - e%w>Nw .N"i"iDe2@e! ( E% ( n5 E r y wM %˅ e ҅ e %ׅ eՅمv 0vl e%7 ,Vv 0 . e%  e `2hw ,h_6)& _6)=_.v 0   A01 K50 =0f0g  5 5 7g@e4! ( n7 pg 3 %g  ff& #eC% ̏& 8% ̏&&n ` e& % & %   eN e NfƆ e%ff_6) %  K5 A1Ne 0 K5 jA1 ^A1@@0@0 T_6) , $& K    K : K%_6)     % K5@ v`@ f&@T_6) Ne 0 K5@@XS RSNe 0nA1T_6) & >& Ke  *  K & & %&&  Ke1e_6)  H(_6)v 0׆_*v 0 ކ_* & N&_.  7R_6) & K%4_6) _) _) _Z* 5@e4! ( n& 0&' _F, _* v 0  _* _*  & & & Ke_@,  _)  e%_H*2_) _L- _B*  Dž e _6) _Z- _) _p- _<* _- 65 .5 &5_* _* _- K5s A1 A1 @0@0 T_6) _+ _) _- I e d _ , _- _- n h7lbtbtb_* _, _) _-_* _, _) _-v 0  z_*w G ``E ` He `x`E p` Het`wFw FD Ԑ H`@`E 8` He %@wFw FAA r@%P?%n. 4O2O,O ,O O e%"P KeA1N 0N e (%d ̏& %' 4% & h2 %$C (wE%%%$% # K%4 # K%4t  3 ̏& %%  f e %Nw e e MM e% M%M ew DDC%#  2 2%$%P& h2 %(wDw DD5Ç (wDtEE@Pw fD@EtAE@PUwTDw DDB _"7_(9%   5%_(9 _(9 _(9 _(9_(95 9_"7%2  1  ). MUU&& K%2E% I @_"7 & ; K% 92** `L5#%%(@% &ex@A p 55@_p5 A !r%/_(9%9%:5% % 2@; K%2N 3_"7%:%% r77&& K%2 32 32%  G%5_"75N D5& ~ 5% @-%% r %!%   % %$%   FL & * 5  & * 5 r y%  M A p_5%_"9, _"9N `L _8 _8% #  R#w:@Nf * 2_(9%%%,%J % (2 ee%P L% % %.8%L5% %%% % K%2%_p5%._p5%L_p5_p5%B%>e& F%_6_"7_"7 _u-_&7 FL@m_47  _6 _7 _&7 95%  5% <  x؇ _6 _7 _7  _"7 _p7 _<7   _&7 _p7 _<7 _<7   _<7 _D7 _D7 w = C_> _9%$_> 3wz=%8; K% 5 D  & * 3% KE E 43%: K%39 3%47[e    K[7[3% tt2_9% r yeep  K ( Ke2_9_9; K%2; K%2    _ :    _ :  _ :  _ :/30-1t 1_h:./30A1t A%$_9%_ :_ :&( Ke3 3 344 _~;%#%_ :% 4_j@% %%%2-%  _:%(_ :%_ :_ :%2l_:%#_ : `t_j@ 5_ : _ :%3  #_<%@ 4_j@% @ A 4t_j@%:S%( K% A @ A 3s_4:@ 3 _4:%_ :4:%#_9 33 r y%3  #_<% %  %:#% K% A   % 4x4x[%_ : _< _<_ : _N< _< _l:_ :  _9 _8:_ : _> _ :%_ : _ : _ : K4 _9 _> _; _:_ :w 6D r y K1t 1t2 22 3 & K & & %&&  Ke& Ke 3w6   # ' (( (   # ' *w 5b5 5 B 5Nef 0J% C Cae 2((u+%% ef F%f G%5   %(%0_C  `L  %     %  j Ke w4%(%%# A1l %( Ne ECe FL  & * 5%*  5 _D@ @ae54N D5%1  f  % N@&j K% 354@5u-> FL@m>%*%/@ @a% _B%*_C%_C _C _CD%Nf * 54%,%* L$%(! `L5 %)@A pr u-_XC%* #  FL L & * 2_Bw D2@ @me,55 De,_&F%*_"F%h5 Ce,O K%*G%BAp,p( 3 N F AfAA r &AfAA r  eC- u-u5ueD- HA1@ @m5DC(@p@0@pAefAf rp 35 _E N&_Ew0w 0D eD-w~0w n0D@ r yA r=J=aGADp}A@ =@<=Q9=x@3 E,%+A A r &@t@t      R (w/     =Aw /DC%155%) 5 55 %@ r y%: w/%:% 5 55 umumu %_Jttuu fffe -e  a n (fffe , fffe r-A@@ A 5@u@uMuMu]u]A@5xuxA@5v5u@ &A@v _H  _DH _H _DH _H  _H_DH _H  _H_DH   _ I_DH K_Hw -BCJ- 3J-% `f 0J%f 0J%_K  L%*%.F%B =%(9%3%*eAfVp^ AADtp0( 3%( D5 @ `, D5!@ `5,@ `,BD " `,w+w + KLt4 t@ 5t 4 w+w z+ Kttwf+w V+5 "DFwm>F-?DEBC=EDCB '2r >\rrZrrrrrrRr2Arg countrMissing temp filewCan't create %s.globl fltused .globl .data rMissing temp fileWarning: possibly too much datacompiler botch: callmov r%d,-(sp) mov%c r%d,%c(sp) tst%c r%d Illegal operation on structureNo code table for op: %sNo code table for op %d.data L%d:%o;%o;%o;%o .text .data L%d:%o;%o;%o;%o .text Register overflow: simplify expressionr%d*bic r%d,r%d sbc r%d clr r%d tst r%d sxt r%d adcsbcclrsxt$%oUnimplemented structure assignmentmov -(r%d),-(sp) mov r%d,r0 mov $%o,r1 L%d:mov -(r0),-(sp) dec r1 jne L%d .byte %o %o; %o %o; %o; %o; %o %o; %o Illegal initializationmov r%d,r%d mov r%d,r%d mov%c r%d,r%d 4ffffffff2||||||||BVcmp r0,$%o jhi L%d asl r0 jmp *L%d(r0) .data L%d:mov r0,r1 clr r0 div $%o,r0 asl r1 jmp *L%d(r1) .data L%d:=??AA=AA??<=BCDE=??@A=A?<=<=((r((|(-.H.l..../t///0$%o$L%d(r%d)r%dCompiler error: pname(r%d)%c%c(r%d)pname called illegallyIllegal use of registerL%d%.8s%sNo match' for op %djbr L%d sub $%o,r0 L%d L%d .text jbr L%d L%d .text L%d:jbr L%d tst r0 cmp r0,$%o jeq L%d Duplicate case (%d)pow2 botchcfcc jbr L%d ashc $0,r%d L%d:tst (sp)+ cmp (sp)+,(sp)+ add $%o,sp %d: %c%oStack overflow botchIntermediate file error%o .byte %o, .text .data .bss .globl%s%.8s jmp cret .comm %.8s,%o .=.+%o .even jsr r5,csv tst -(sp) sub $%o,sp mov $L%d,r0 jsr pc,mcount .bss L%d:.=.+2 .text ~%s=L%d ~%s=%o ~%s=r%d Expression input botchashc $0,r0 cfcc jgt L%d jlt L%d jbr L%d %.8s: %.8s: ~~%s: Binary expression botch.bss L%d:.=.+%o .text mov $L%d,r0 Illegal structure operationunimplemented structure assignmentmov (r1)+,(r0)+ mov r2,-(sp) mov $%o,r2 L%d:mov (r1)+,(r0)+ dec r2 jne L%d mov (sp)+,r2 Illegal indirection`8(9`8X8P888.9P99;;;jn?jn@jnAjnBjnCjnDjnEjn(rzFrz)v~Gv~rzv~ rz!v~*H+I,J-K.L/7UQ0N1O%&ŠŠbƊƊc[ʊʊ\ʊʊRЊЊS֊֊T܊܊VWXʊʊʊʊ<=>?@AB CDE     & & :,field selectint->ptrptr->intlong->ptrfield assign>>>>nameshort constantstringfloatdoublelong constantlong constant*r++*--r++pre--pre++post--post!un&*-~.+-*/%>><<&|^->int->doubledouble->int&&||&~double->longlong->doubleinteger->longlong->integer==!=<=<>=>p>=p+=-=*=/=%=>>=<<=&=|=^==& for tests*/%&= ~*=/=%=?<<<<=\/\//\/\callcallcallgotojump condbranch condset nregsload valueint->charforce register=structure= (struct setup)j\^^ ]!]%H]&H]b\c\P\](])]*\^+^^,^-T^.]7]0]1:^F^G^H@_Ix_J_K_L@_N^U^O_f\3`4&`8.`96`:J`;d`[_Rr`Sr`Tr`Vz`Wz`Xz`]\b^_m` b b b! bP`F bG bNjaOaUjaKbLbbtdjb^d7^d"^d#^d$^d%^d(^d)^d*^d+^dQc0^d<b=b>b?b@bAbBbCbDbEbH^dI^dO^djld(d)d7d0d:d8dgdgogxhfhegghchsglgLhuhr hDgOgXhU(null)tt=(\  AAAAAABBBBBB 6cTk*]t], / 2 5 8 ; > A D G J Z Qd - 0  6 >  67 % Lw P#Ua  Lk_a@& |E% @aa   Lkoa@& |E% qa@& E 7(sa  L F # ` `̋ rWple (P777 8  a C  a C   LwzOw jO 5 lE5`%lA rWpDel Ҥe%le ʋl%lE-j7wN j%ja  L 4 4 4 4 4 $ le Ҕ%lw Nl@5`CҢ Ӌ7dwjNe} w HN z] t]n]%(7 <%  7   hhE hk E%  ڏ a wMj r y` z% |hthE lhk E7~~j%"dl"   4h,hE $hk E7:% 4a  hgE gk E%  7 H\  g__  $\7 g__(& %_2)> e& b>7 %=<_% %<%> 8>! 7 ^%< L_j7[P_K_(j!1j =% %-%&%*a  je_7& & % ._>?=& & % -_@A="& / % _]_& \ % __ * % +_ =7 .%* <%/7  e__ a _BZ _j% %%d %_T%Z_T5 -  _l  _  _j _r   ܃ _j  itE5uu-u-_ 5i_ _D _D l !i djl _0   e    %(%1Ce _F   _ _  %/_d# _j _  _ _ _%_% _@e@-b  Lee}_ @5 r y`%dRaNN _ ? D~e>~d? ?*~e$~5%;_ %6     2! dN }}w?    2N _%b  H/ w N?D02|}$ Nefe / 4 & fefe B4ew0} w>w >@ E R蔓w>w >#( $@ 5i5|| X ||%[ A ?|_X%#  X%d 5 5 @ r ybE%E%b %%5  & & & / e 5 5  5   5_%3__%c  Z % _^u& & ff e _T E%&c & ) &dEc_kgt], / 2 5 8 ; > A D G J Z%;c & ) &$ & ) &f e_T%%$Oc _%d%  =& %zez# z|z% ^c bz_X N =5  f % f( e ?yey$ _^yy& &  _  _ __ _ _ __ _ _ _ _p_ _ _> _V_%4  f % _^&_.5 %%D-,tc 5 N &&  tej5@tE5E @5% %%5% 15%P% %% 55%  5 u5 O%%]%_%D-5 %7%%0 -5)%>%%%%  %%c%%5 %5 %)5 D-%  3 @ @5%% c  Nff be ff be55 %%5 % )% % r % & & & m e>vBf %  5@&@&ff e ?ueu % uu @&  be?ueuwx7w h7@j 5i c N f& & f& e w.7N& & f& ew 7DBC%#  = =%$%(w6w 6DE%% && # &# ew6w r6CE% % % wP6e|tevt& " & %# TtPtw 6@% % %D-c w5w 5@  xb w5w 5 w8Q dlck E%Dck E%Nff f fffk Eeck E wN5w >5 RLttt t @ 5it 4 w5w 4D&&& ew4w 4 R4 4 4 tw4w 4 Rt4 4 tw4w x4dvwm^v-\vXv (P%c  Le4vwH4w 84D% %%$c w4w 4 D%(%' '@%  @ 4? rer@% w35%Z %@% 5P@% ׂ xb`Bp rC H @ r:  @ @Px '@ $t  f v t          c _w 2 t J%c  tftftwz2w j2 _ %_ 7A5 7 vNefe /  %XA_ 5 %  % % % fd 7 s7 s7 s%  & fe B4e_  & fe B4es_ sE%= 67@% %%% bs! =7@@ &% e d|d C% X_ &s_ d _ % %47,@ A E%  &e qdd CeQ Ne d C_%P7? &% e d C%e qd Ce6rN "%5d C w-r rwq % _%%d 7 ? d  H/ 8w/w />e>qe rd Ce q > >d C%tqs^qZqs f/d C P  @ @t> q n>7 s 7d>%d  ppd Ce @p e C% @-pp7p7pw.w .p RppN& : 55 @E% 5  A5%   %e  &N =4e   Ne %e   A5A 5ru5 7(=%  %=  5%_$7<%"%% 8e < '&  mo .5_$%N& % _T$E%%|<N& & "%] @o 57 4oPe  ?LkeFk@ke:kP % %kk+%% Ne he  @Apjj & & &h e > 5? %  ee C% 5%  _" _" _" %wP; %  upNe C%    Ne e  @7m7mup@w+w +@_@%Le  <% : (%+: e N& `N& & "%%, e C e %   % % @@e C%e C % 9w*w *D e e  w*w * B: 5 9 O _x*79  > %f  H/w"l-Nn Nif C%w2n @w *f kn   %79 J kfk _l* x$d  @  , 5 J%ak Z xd 0 8 8f =%  @* %;$k n8 h8f =%  @ jj Bf =% %_|& %%j_<&8_&7 7 7f =%  ^%%j7 7 @ @  @_&77JjHj77>j 7 @ 77,j& z7 \& =% j @ j @ji_&i Bi_'i Bi_'ii"7i 77i 775 7 @ .i @i l%_|&%i_|&f L& =%hi @`i_p&  &%_|& >i &f9f _<&%$iv6iieib6 ^6 @_<&hN6h H6 *5f  N& & & n e > 2h_& hOf  hef  j%_|&57hxhvh5nh 55fh 5 _(_|&{f  _&f _|& %:_b&7 .h % t%g @ `%4 zg N& =% >% 4 Pg @ wt% 74%4g4.g 4 5x4 %ggg X4R4f @N >w<4-ff@7f7fw $ ((%   %w$f  H/ w $|f 7nf35 3 @^f7 Xf Lf @N @ @f6f8f30ff Ce &f C%e-ef Ce @weew$w #Qe0 e7e#3E%e A`˥& .=77 Rd 5@e7a7˕ P N >6˕˕  / Vel ˥˥e f  e%.gif C%w#w #g ng f/-g gif C%w"w " Bgl%e 5 b -g]̥  g"@ g̋e f   4 H>;& : 5 `2 l %E7f (d!4 >œ : E3  ˥  %elD-w!w !D   x^d&e f Cew!w !D ,%70wt!w d! D fef j3%5Nefe /  & .<%`w$!w !5  5 @0 @0 @0 D% % 5 b) 'b@bp@bp   7b 05%%db C xf -Jb%%bAe@@ r  RA1__ @ @` AaH  @ae-awawa 2%@wz < w `C % V_ 7v,% N AD-5%  7N,%@,' & ff B4e  & .<%`D-55a v% %7+% %% <@ww DB5 %  7t^5 7+%%  _>7% n+ 5f .<%5wm.`@_@7%>+N fe P: 5%_>7 &5 @E%@ @aA lp@t55E55`  55@tAE@P5@t55E5P w &]"] -_ 9 3 E@  R5\\% \\5 *@ @mA AaAH@5E%@ l @ lH-  u-s@E%%  % %  g ˋ %%˥% ˥ s- % 3˥ 0s-,ˋE%@E% ,g  [s % ˕  _4 % [[[[ w5 % _V8 A5 "7(%<5 ( 5ff .<%5 -F]{-  d  R3ZZ]{wm]  ff .<%5umum $]%] g @]] ,\e\ s- s\e\% .=3 5 5% %% %Pwf'%  A7ZZ-YYYY _9 &  "%_9% C' !' 'ph Ce  "%5h C  A& &ph Ce h C -% % ! e h  ˕s &  "%@ 5 /_4w D RX7X7X : 4 4 8[  ww DC̒  ww z jXB5  _: _(; *_;N P: 5%_:@w05` h5 @tU  %)N P: 5%W %_< <7$ CW5 _<WWi x "ffgh Ceww D%h!%% h % h  & > !h C%wLw <Dh C ^%  _ @ _D@ I _? _@ _? b #_P@ d_l@& >  5i& > &:i C%   s=i Cewr˥ h ˋ &i Ce˥ e i C i& &&& i e &&i Ce&&i& i Ce& >   &&&i i _B?& > &4i_  & > d7i_Q@w<%E  xhGi [i w N A Eww  7%0 `%;+P  9̋ @  ̥̋ %wp w \7 @P % 2PwPw @&P ((E (k E% % %  P 47 P% O 7Ow w i w w x?KeK$ KK&  & & & f e >w w v %;: `KeK?KeKP KAp %nnK& & & m eTK1n BK>K >N @w w k NPDe_TE FE N' SDi _TE B ; & J  _TE_NE ; & J t;t&_%ʋ _ _E;ʋ &E J @  *; 1   J & J  0 ; & J @   i  Lw^ w N D ZKff K%w< w , *ff K%w w  Nfef F%@ w w D@w  M4 ed4 && P%4 %  4 E w  D  >N t 4 w w uDAB %u f& & e w 5 5  W- W00u5  .uHkBwF J@B _H@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Akҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E J z f J  #̥-%0  E: E:  &E J  z f J  ww DuNfe& rP%4 ;#%k9! O FF M  & rP%S  w@w DE%& rP%  w w k ZKe- ww pD@ J bO  >N 4 4 ww D  w  r< wf L=@+ @ a f O  %Kf L &  Oe   f O  4  Հ rw 4D& xO     bO& O w w k-V wef >@w  lLzU7^LxU7TLzRLxJLAe vB6L7 8L55 a  a!RE -K%x wL K%Ke rt 7K (PK `e K  (P%KKe U?KK `e 7xKxU?lK a7^K VKXK?PKLKU ew D,KE w~w nD5 >N@ r5N M!w<5A vBB-  }ee@ !ۃ `!ւ `@ r `|Jw Nef HO  ww N tf O%ww Ntf O%wxf@wN fww6lw.fwww b r@intcharfloatdoublestructlongunsignedunionshortautoexternstaticregistergotoreturnifwhileelseswitchcasebreakcontinuedodefaultforsizeoftypedefenumArg countrCan't find %swwCan't create tempBBSymbol table overflowIllegal #Illegal #Warning: %c= operator assumedNonterminated commentUnknown characterNumber syntaxBNBB0B1N100Long character constantNonterminated string%.8s undefined; func. %.8s(Warning only)Expression overflowexpression overflowExpression syntax\xt| ((Disallowed conversionIllegal conditionalCall of non-functionIllegal indirectionIllegal lvalueIllegal structure refIncompatible structuresIllegal conversionIllegal conversionIllegal type of operand%s:%d: Out of spaceLvalue requiredDivide checkConstant requiredT'~'((((('''$'*'^(\*)R)((()0*8888888888̥  ̋ .w/etc/passwdrryyyy_PASSWD_EMPTY$_pwf&_line,_passwd._setpwen"~setpwencsv L6L7(_fopen L5&_rewind cret _endpwen"*~endpwen*L11@_fclose _pwskipD~pwskipDpL16VL20001NL17ZL18`_getpwen"f~getpwenfpL22L23*L20002L21_fgets _atoi L26 L20006L27timezone.oJh w L-     w e%  @ 5A r<NA r<&f e,hASTADTESTEDTCSTCDTMSTMDTPSTPDTGMT+-GMT%s%d:%02d_zonetabL1L2L3L4L5L6L7L8L9L10L11_timezon"~timezoncsv zonedstzpL15czonesignL16<L20003 L188L202L14.L20001$cret L22ck` %ZZZL23L24`L25L26_sprintf fgetc.oH*`w @  @ EwN )ix_fgetc"~fgetccsv fpL10000 L3cret __filbuf fputc.oH0lw @  @ HwNf )y_fputc"~fputccsv cfpL10000 L3cret __flsbuf getchar.oH$`w E w )999i8x_getchar"~getcharcsv __iob L10000L3cret __filbuf putchar.oH(lw D ? & w)IIIHx_putchar"~putcharcsv c__iob L10000L3$__flsbuf cret popen.oHV((w Ne  wr@@r@@ # r    fa^V e % d N& w H@  5 5 Ne  d%%N N  @w/bin/shsh-c99XX((X9_popen_pd_popen"~popencsv cmdmodepmysidehissidepid_pipe L4L20000L3cret L10000*L10001.L10002>L10003B_fork L5_close L10004`L10005b_dup2 L8aL7^L6V_execl __exit _fdopen _pclose"~pcloseptrfrhstatistatqstatstatus_fclose _signal L13_wait L14L15&freopen.oH"lw D ff %w)hx_freopen"~freopencsv filemodeiop_fclose __endope cret fgets.oHlNw DB  E  Ґ%  B- w@)_fgets"~fgetscsv sniopccsL4 L56L10000$L10001*__filbuf L6FL3Bcret fputs.oH(>w DC  @; f 5w)_fputs"~fputscsv sioprcL40L20001L10000"L10001.__flsbuf cret getpw.oH\w  7 . B%$Ґ | xEl % B %:% wz%:%0%9Wp D`eD- /etc/passwdr)h_getpw"~getpwcsv uidbufL4pwfncbpL5L7L6_fopen L20000~_rewind L9*L118L200020L20003~L10000RL10001Z__filbuf L14lL19L16pL3cret L20fseek.oHfw D_ % U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w0 N ff& e5u4 # 4  N ff& e5u%%)H_fseek"~fseekcsv iopoffsetptrname cpL4 L5L6|_lseek L7L10000L10001L20000L3cret L9L10P_fflush L12.ftell.o I w @ 0 @ & @& e5u #A@w@  @A@@ 5`u`u )_ftell"~ftellcsv ioptresadjustL4L5\L20000(L6*_lseek L10L20002PL3Xcret L7rew.oIB`w D  & & e4  0w)HXy_rewind"~rewindcsv iop_fflush _lseek L3>cret rdwr.o Iw DC 5 u E     u-@ww DC 5 B E; &E ~  u-@wF))_fread"~freadcsv ptrsizecountiopcndonesL5JL11RL20001L10"L100004L10001:__filbuf cret _fwrite"Z~fwriteZptrsizecountiopsndoneL17L16L20003tL22xL10002L20__flsbuf system.o)Ilw  5 f e   Ne 5@-%%  @wd/bin/shsh-c)(Y_system"~systemcsv sstatuspidwistatqstat_fork L44L7L6L5_execl __exit _signal L8T_wait L9nL10|cret fopen.o3I`w ff %w)Yhy_fopen"~fopencsv filemode__findio __endope cret fdopen.o>Ipw D   w&3 s a r+Հw& f e)i_fdopen"~fdopencsv fdmodeiop__findio L4L20000L3PL20002L9hL8TL5:L11Ncret _lseek scanf.oJI|w Nef %ww Neff %ww DA555  ԋNeffe %w)Xhy)hy)hy_scanf"~scanfcsv fmtargs__iob __doscan cret _fscanf"~fscanfiopfmtargs_sscanf"8~sscanf8strfmtargs_strbufL10^L20001Zdoscan.odIbw DC 5 5 _Z@ E_%%_|5 %*e5  AWp `eu 0u%l%h5 %[ e  Neffff e   - @w@ @ EN 5% % % %Nf     %_.@ _N 5 %Nf w LN%c%s%[Nf ff f& ew5 5 5 5 %e%f %o%xDe5 5 @ @ EN % % % %-5 Ԑ@ @ EN  1 A@  5u%_N  = _%+ @ _|@ E 8%)%._(%e%E %    Ԑ@ _B@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _ _ N %+ %- %0_%9_Ԑ@ _ N _ @e! _@t@]   xNe A _Ne A @H@pHw DC = 5%c%0u5 %s E  rb%%c5 %[rb   E  %%   =  D- %cw w D ̥^  bb %E%]  bb  w9xxI9Ix9((I9I__sctab#b__doscan"~_doscancsv iopfmtargpchnmatchlench1ptrfileendesizeL4ZL20004L10006L9.L10|L11NL12PL13pL20001\__ctype_ L15L16L17L18__getccl"L21L22L20002L3 __innum"L23L8cret L28L10003(L100040__filbuf _ungetc L10030L73L75L68L71L72~_innumptrtypelensize iop eofptrnpnumbufcbaseexpseenscalenegflgc1ndigitlcvalL10008L37L10009L10010__instr"L36L10011L38 L392L40>L42LL10013fL10014nL44L10015L10016L47L48L64L65L66L10017|L20010 L10018L10019L20016L50.L20008(L10022DL10023BL10024JL10021L51L20006L53L55L56L57L49lL10028L67_atof ~_instrptrtypeleniopeofptr choptrignstpL790L81BL10031TL10032ZL82jL83~L86L20022L87L88L10033L10034L89L90L91L92L93L78~_getcclsctL97L20024L101&L100,L1034L20026\L105NL20025Tfltused fprintf.ooI0xw Nfef %@ w )h_fprintf"~fprintfcsv iopfmtargs__doprnt L10000,L3(cret gets.oxIhLw C  E  %  C- w@)_gets"~getscsv sccsL4L20001 L54__iob L10000$L10001,__filbuf L6DL3@cret getw.oIPRw D E  w E  tP)xx_getw"~getwcsv iopiL10000L10001 __filbuf L42L3.cret L10002DL10003Jprintf.oI,xw fef % w )XhY_printf"~printfcsv fmtargs__iob __doprnt L10000(L3$cret puts.oILPw D     ? w )yyyxyyyx_puts"~putscsv scL4&L20001 __iob L20003__flsbuf L10002@L3<cret putw.oI,Lw DC ; & t; t& w)xx_putw"~putwcsv iiopL10000L10001$__flsbuf L100028L3Hcret sprintf.oILVw BuNefef % = Ne& @w)x_sprintf"~sprintfcsv strfmtargs_strbuf__doprnt L10000@L10001N__flsbuf cret ungetc.oI4Jw D%    | w - -)_ungetc"~ungetccsv ciopL44L20002L30L20001L5"cret L10000Bfilbuf.oIw D@w 4 e4 && %4 %  4 E )__filbuf"~_filbufcsv iopL4smallbufL5L10000&L7BL3*cret L9._malloc L10^L8dL10001vL10002z_read L11L12L14setbuf.oI@xw D  t 4 w)h_setbuf"~setbufcsv iopbufL4_free L54L68cret fltpr.oIx& & e Ӌ  &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~&7j & be Pӕ-0 Dӕ.8 B~ӕe* ӕ- ӕ+ r e0e0SiYIpfloat" pscien"pgen"fltused"_ecvt _fcvt _gcvt signdecptndigitdoprnt.oILLw uDAB %u f& & e w5 5  W- W00u5  .uLBwF J@B L_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B <@  $5w*A  fff e w5  @ 0   Wp `e0doxfegcslLurDOXU(null)ywidthformprjustndfndndigitzfill__doprnt"pfloat pscien pgen __strout csv cret loopgnumswtabLprbufdecimaloctalhexfloatsciengeneralcharacstringlongorununsignedremotelongloctlhexlunsignecomputenulstrprstrgcvt.oI,<w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w)_gcvt"~gcvtcsv numberndigit bufsigndecptp1p2i_ecvt L46L20000:L20002rL6@L10001TL10000bL8L9L20004L12L13L14(L15L17L20006L19L20008L21L24L20010L262cret fltused ffltpr.oIH $eӕ?pfloat"pscien"pgen"strout.oIw DCB &E z f  #̥-%0  E: E:  &E  z f  w@)i__strout"~_stroutcsv stringcountadjustfilefillch L4DL10000__flsbuf L10001"L6$L100024L10003@L7L20003lL20005zL9L20007L10006L10007cret flsbuf.o J4w DuNfe& %4 ;#%((    & %S  w$@w DE%& %  w w  Re-ww D@   4 4 wL)88H))i)__flsbuf"~_flsbufcsv ciopbasenrnc1L5 L6R_write L7L8__iob L9_isatty L10tL20000l__sobuf _malloc L12L14L3cret _fflush"~fflushiopbasenL180L17,__cleanu"4~_cleanu4iopL23HL20002>_fclose"R__lastbu ~fcloseRioprL29_close L30L31_free endopen.oJw D  w r< wf =@+ @ a f  %f &  e   f  4  Հ rw "D&     & w)HixH)(HH__endope"~_endopecsv filemodeioprwfL4*L12 L3cret L20002L11_createL20004L10000:L10001>L10002TL10003X_open L9|_errno _lseek L5L10004L10005L14L15L16~createfilerwf_creat L21_close findiop.o)J&w - we)Hy__findio"~_findiocsv iop__iob L4L20001 __lastbu L6L3cret clrerr.o6Jp<w D0w)I_clearer"~clearercsv iopcret data.oCJ0__sibuf __sobuf __iob#__lastbu#cuexit.oGJP$f @_exit"__cleanu exitexecvp.o^Jf |w Nef  ww  n 5s/f @Nexf& %@ 6   ~vwnx@ex5zv%v v@v @aAv AmpzNexf  %ч Nfex      w DCB̥:̥-̋ ҕ/Ҕˋ ̋ w /bin/shPATH:/bin:/usr/binsh9y98hyxx9y_shellf_execlp"~execlpcsv nameargv_execvp"cret ~execvpnameargvpathstrcpfnamexnewargsxivetxtbsyeaccesL8n_getenv L9:L10s_index L10000RL11L10001VL14X_execatL15L20003nL24L12tL29_errno L20005L18L19L20L20001_execv _sleep ~execats1s2sisL33>L200070L34BL36PL20009NL10003bL32^getenv.omJVw D & ( w w DC ԥ==̋ w)I)_getenv"~getenvcsv name_environ pvL4 L5$_nvmatch(L3 cret ~nvmatch(s1s2L104L11LL20000>L9RL20002BL13Pgetlogin.oxJl w  l  Wpf&  ev %% w ,~ҥ "~/etc/utmpI_UTMPl_ubufv_getlogi"~getlogicsv meufcp_ttyslot L20003H_open _lseek _read L7NL4Jcret _close L8^perror.oJrw r- N f % % & % %wUnknown error: Y ( _errno _sys_ner _sys_err _perror"~perrorcsv scnL4rL5_strlen L6H_write L7L8cret sleep.oJ8w 5  5 N N w u-uu 5N |w v wd998_jmp_sleep"~sleepcsv naltimealsigL3@_alarm _setjmp L4D_signal cret L5fL6Z_sleepxL8_pause ~sleepx_longjmp ttyslot.oJ< w      w/&    5 N   N N w r&f %% wR ̥ % /etc/ttys9HXX9_ttys_ttyslot"~ttyslotcsv tppstf_ttyname L5.L20000(L4*cret _rindex L6BL7D_open L9X_getttysL10_strcmp _close ~getttysfL15linelpL16_read L18L14L20002L20003ttyname.oJ ,w LN WNef M@E% F  >fe& %%/ u- Ne Ne u-u- wD /dev/98HXhh_dev_ttyname"~ttynamecsv ffsbtsbdbL5rbufdf_isatty L20000_fstat L20003_open L10F_read L11_strcpy _strcat _stat _close L4cret abort.oJX 0w  w)9_abort"iotcsv cret abs.oJHw @ 5@w)Y_abs"~abscsv argL4cret atof.oJw D*\5% %-%+ 5 55 55  B5eA5 %.55  B5eA5  %E%e$%+%-  Wp B`e  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& e5 55w*)hhh_atof"~atofcsv pcflflexpexp5bigndeexpexpnegnegexpbexpL4L60L78L10rL20001FL12jL13n__ctype_ L15L14L20003L17L10001L18L23L21L20005L25 L260L27JL28lL20007bL30L31L20008_ldexp L33cret fltused atoi.oJ((`w D  ̥9Wp @@`e     + -̥0  w)_atoi"~atoicsv pnfL40L20001L14PL13JL11(L12*L6.L10001\L3Xcret atol.oJw D5 5  "̥9/&  ff eee@ ee@ 5u     + -̥0 A@  wnA@) _atol"~atolcsv pnfL4\L20001L14|lmul L13vL11TL12VL6ZL10001L3cret crypt.oKHjw  @m4 @m4 %  5  %w5  %w <  Wp0`@LpWp0`@dp % %wJw F @m34 %@5 @5u T t %  AWp0`A@ AS @x3 %0 WpDt Wt@` Wt@` Wt@` @` @` Wt@`utE4 tE4  E4 E4 % 4 A @x3T %  t 4 %  %_ Ĝ4 T 4 3T %  @`H3 %@ww  4 %B %@  tE4 % B  4 %B 4| %0 B & %Z%9.  t5Wp`A uWp`e fWp`^ Wp`q % %   %   Wp`A BP %e.%9e%Ze( % 4( & w|:2*" <4,$ >6.&@80( 91)! ;3+# =5-% ?7/'(08@ '/7?&.6>%- 5=$, 4<#+ 3;"* 2:!) 1991)! :2*" ;3+# <4,$?7/'>6.&=5-%      )4%/7(3-!0,1'8"5.*2$                                                                                                                                     _IP_FP_PC1_C_PC1_D _shifts<_PC2_CL_PC2_Dd_C_D_KS_setkey"~setkeycsv keyijktL20001L20011.L10pL200072L20003<L20005ZL20009zcret _E _e|_S_P_L4 _RT _tempLt _f _preS _encrypt"~encryptblockedflagiiitjkL20013L20025L31L32L20015L20017L20019.L20021L20023L20027L20029 _crypt"&~crypt&pwsaltijctempL57 block L58& iobuf& L20031.L62jL20035>L63pL20033FL20037zL20039L20043L77L78L20041L81L20045L20049,L200470L92VL93`L94|ctime.o0Kl v,lw N  ww Ne < f ef&@ 5uNe @w/%J %K  t t5  N  5   %D-D-% eu Ne @ ww DC%: e`m e rfww Q@f& e5uQ@f& xe5u eeQu  < ff 6eR< ff eC r<R r< A@epe@ f& ewx F  5 $u   5u F   5`u`u D7  %n^    0!@ 7 w(w $x"ԔAA WpCe<xԔԔԔ BeWpCeRԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  xwhw dA r nwNmw DD % A r  r e0@ԕ A r e0@wM:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecYY(9YYYYY_cbufx_dmsize_daytab_ctime"~ctimecsv t_localti"_asctime"cret ~localtitimdaynoctdaylbegidaylendcopytsystime_ftime lmul _gmtime"@L10000L7_sundayL8L10001L10002~sundaytdL12"_dysize"~gmtime@timd0d1hmsdaytpL16xtimelrem ldiv L17L18bL190L22L10003HL23L20001hL26L27L20003~asctimetcpncptpL35"L33L36<L37R_ct_numbL38t~dysizeyL42L41~ct_numbcpnL46L47calloc.oL26L27L28L20006L20008L33fltused errlst.omKHPZt"4@Vht 4AWfr#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large_sys_err#L1HL2PL3ZL4tL5L6L7L8L9L10L11L12L13L14"L154L16@L17VL18hL19tL20L21L22L23L24L25L26L27L28 L29L304L31AL32WL33fL34rL35_sys_ner#Ffakcu.opK  __cleanu"fakfp.osKT$&0fptrap"signal0rtifrexp11.owK`$w 5 = w)_frexp"csv cret isatty.oK(lw Nef  w)X_isatty"~isattycsv fttyb_gtty L4"L3cret l3.oKHw CB  D-ww CB  D-w))_ltol3"~ltol3csv cplpniabL4L20001cret _l3tol"$~l3tol$lpcpniabL10>L200034ldexp11.oK,Hw 5@m 77 "wY)_ldexp"csv cret ERANGE"huge,_errno ldfps.oK4 fu_ldfps"mktemp.oKhw Dԋ  r e0@  r X a %zhw  f %@/)y _mktemp"~mktempcsv asspidi_getpid L4L60L20001L8PL20003>L10LL11hL3Hcret _access modf11.oKh0w 5@} w)_modf"csv cret one@mon.oK w  & & & e  & % Ow }@p@p wA Wpu`A Wpu +@@ E5! & A vf& FeD f@ &f ewmon.out)(Yy_monitor"~monitorcsv lowpchighpcbufbufsiz cntsiz oL4sbufL5ssizL6F_profil L7_creat _write _close L3L8ldiv L9cret mpx.o/Dt Lw wdwbt w w w@t ww w"wt ww wwwt wjw fwwt wHw Dwwt w&w "wwwt ww wlwht ww wJwFwBt ww w"wwt w9999999999_vect_mpx"~mpxcsv namemodeL4(L20001_mpxcall cret _chan"0~chan0gr_join"L~joinLfdch_connect"n~connectnfdchside_attach"~attachsubgp_detach"~detachsubgp_extract"~extractsubchside_debug"~debugvarval_npgrp"$~npgrp$chgfdpid_ckill"L~ckillLindexgpsignlist.oKn w D4 4 e ̋ f 5wfef %5 @ p-n @ n@ nN A Am@ 5u%  fe Neeu  fff eu ?%uNfe.f %uCe.   e D̋5 %@mAmHe N _4 9Yhh_a_magic#n_nlist"~nlistcsv namelistpqfnmisabufspace.L4L20001_open L78L200040L34cret _read L8dL20003RL9pL11_close L12almul _lseek L13L14`L15L16.L20008L22BL20010L18*L19:qsort.oKLw w wAupAmNf , ww @@5 _z fA rBpu@@`55DCN& ~ f& <%5 2`D--`f ~ $`f& %`Df %5 D-& ~ C-D-%@@AA@ Nf` , u_8Nf , @`5_8f %Cww ~ NDCԒ w^w Z(DCB5ҒS w,IIII_qscmp_qses_qsort"~qsort((csv anesfc _qs1,cret ~qs1,alijesklphpcnL78L6zL8L20001|_qsexc~L20003L13L20008L20005L20007_qstexcL20010L16L18^L19B~qsexc~ijrirjcnL26~qstexcijkrirjrkcnL32rand.oKJlw wB7 <ww mNA*$ ee90@ w7vE@w9Y9Y_randxJ_srand"~srandcsv xcret _rand"~randlmul setjmp.oK:0P w A@I#EEFNuw)9_setjmp"_longjmp"csv cret stty.oK4w N tf %ww Ntf %w)Xi)Xi_stty"~sttycsv fdap_ioctl cret _gtty"~gttyfdapswab.oL<lw DCB r tWtE@`e w)_swab"~swabcsv pfptnL44L20001cret tell.o!LHw & f ew)HY_tell"~tellcsv f_lseek cret ctype_.o-L   AAAAAABBBBBB __ctype_#index.o8Llw DC̠wԋ )_index"~indexcsv spcL6 L4L3cret rindex.oCLlw DC ̠ԋw)_rindex"~rindexcsv spcrL6L4cret strcat.oOLlw DCԋ Ԕw)_strcat"~strcatcsv s1s2os1L4L6cret strncat.oXL.w DCB 5ԋ Ԕ $@w)_strncat"~strncatcsv s1s2nos1L4L6L7&cret strcmp.oaL"lw DCԋ w@)_strcmp"~strcmpcsv s1s2L4 L5L3cret strncmp.olL.w DCB ԋ  @w)_strncmp"~strncmpcsv s1s2nL4L5 L20000L3*cret strcpy.ouL`w DCԔw)y_strcpy"~strcpycsv s1s2os1L4cret strncpy.oL$6w DC 5 Ԕ B- B-@w)_strncpy"~strncpycsv s1s2nios1L4L20003L8&L20004.L20001$cret strlen.oL`w D  ԋw)y_strlen"~strlencsv snL4L20001 cret access.oL$<w ww $7w!9)_access"csv cret _errno .access!acct.oLp$fww 3_acct"cerror .acct3alarm.oLDf@_alarm".alarmchdir.oLp$fww  _chdir"cerror .chdir chroot.oLp$fww =_chroot"cerror .chroot=chmod.oL $fww w _chmod"cerror .chmodchown.oL&$fwww&w _chown"cerror .chownclose.oL`$f@w _close"cerror .closecreat.oL|$fwww_creat"cerror .creatdup.oL&0f@U@f@A)w)_dup"_dup2"cerror .dup)execl.oL"0fw@e7"w;)_execl"cerror _environ .exece;execle.oL$$fw@e7 7$w;_execle"cerror .exece;execv.oL0fwww;)_execv"cerror _environ .exece;execve.oL$fwwww;_execve"cerror .exece;exit.oL< f@__exit".exitfork.oLp0fw7 )_fork"_par_uid$cerror .forkfstat.oLx$f@ww _fstat"cerror .fstatgetgid.oL`$f/f/@_getgid".getgid/_getegid" getpid.oL< f_getpid".getpidgetuid.oL`$ff@_getuid".getuid_geteuid" ioctl.oL&$fwww&w 6_ioctl"cerror .ioctl6kill.oLx$fw %_kill"cerror .kill%link.oL $fww w  _link"cerror .link lock.oLl$fww5_lock"cerror .lock5lseek.oL,$f@w ww ,w_lseek"cerror .lseekmknod.oL&$fwww&w _mknod"cerror .mknodmount.oL&$f&w _mount"cerror .mountmpxcall.oL|$fwww8_mpxcall"cerror callnice.oL`$f"w _nice"cerror .nice"open.oL|$fwww_open"cerror .openpause.oL< f_pause".pausephys.oL$$fwww$w4_phys"cerror .phys4pipe.oLp$f*wBJ _pipe"cerror .pipe*profil.oM$ fwwww $,_profil".prof,ptrace.oM,<fw(ww@ 7 ,wI9.ptraceindir_ptrace"cerror _errno read.o M"$f@ww"w_read"cerror .readsbrk.o MJHfwBm>:Jw.wm(fwJww 99(_sbrk"_brk"*_end cerror .breakndNsetgid.oM`$f@.w _setgid"cerror .setgid.setuid.oM`$f@w _setuid"cerror .setuidsignal.o M(TfAW @w f175 eRw 5w7L7H7D7@7<7874707,7(7$7 77777 777f&V ((& 09rtt.signal0_signal"cerror NSIGdvecttvectRstat.o$M $fww w _stat"cerror .statstime.o*Mh$f@Aw _stime"cerror .stimesync.o,M< f$_sync".sync$time.o9M*0f BRfw *#_time".time _ftime".ftime#times.o/dev/console rm /etc/mtab cat /dev/null >/etc/utmp /etc/mount /dev/rp3 /usr rm -f /usr/spool/lpd/lock : /etc/accton /usr/adm/acct rm -f /usr/tmp/* rm -f /tmp/* /etc/update date >/dev/console /etc/cron ckupL O R U X [ ^ a d g j koo   0  6 >  67& % w "5 5  p    <   %D "  %L & $ %       " l " p  7 2   \7me e   7B` E < % % %_% _%_%*ҕe_ V5_ xE p< %,%-B% % _ҕdeҕfR 80E &<  V5_ E < %,% % Vҕf0ҕgR E <  V5: E < % % %R _T< %%% Ґ PHE @% ҕ _B% _% ҕhҕh< :w, E < w D Wp Cae E < U!< &  %dww D :ff %ww |D%    | wX - -w 2D@w \4 e0&4 && %4 %  4 E w jDuNfe& %4 ;#%D  ^ ,"," \  & %S  w @w DE%& %  wJ w 6 <  :e-w( w  D@     4 4 w w D  w  r< wf v =@+ @ a f   %$f v &  e   f   4  Հ rw D& 2     &  w f d@w 5  5D&  N  N w` u-uuD   5N  w  D&  w w N p  2 w w Ne < f ef&@ 5uNe w/%J %K  t t5 \ N \ 5   %D-D-% eu Ne  w w DC%: e`m e rfw w Q@f& e5uQ@f& e5u eeQu  d&< ff eR< ff eC r<R r< A@epe@ f& @ew F  5 $u   5u F   5`u`u D7 %n    0!  7 Jd&w0w J& ԔAA WpCe!J&ԔԔԔ BeWpCe.!ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  J&w((pw `A r nwVmw @D % A r  r e0@ԕ A r e0@ww  x&U7v&U7x&v&Ae vB7 55 a  a!RE -%v& w| %e rt 7z &n `e ^  &%FBe U?00 `e 7v&U? a7 ?U ew DE ww D5 @ r5N \!wl5A vBB-  }ee@ !ۃ `!ւ `@ r `"w Nef   wP w A@I#EEFNuww N tf %ww xNtf %wnf@fw!w f@w fww!wfw@e7|!w`fwR7 fwVwRwN!w( f@w4w0w ,!wfww!wff@ww!wfwm"wwmfw"wnw f@wR fAW @wp f&1&7d5 ewR " 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & & fww"wl f BRfw"fw0 }f@w^wZ"w7VFw rC  5!c#ksL O R U X [ ^ a d g j kooBA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/usr/lib/crontab/r/r/r/r/bin/shsh-cr.$.$ M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec  AAAAAABBBBBB ;6&0#c&kʍ1I rqoqo other::1: sys::2:bin,sys bin::3:sys,bin uucp::4: c(kQF $AA root:VwL97VCAx1Qhs:0:1::/: daemon:x:1:1::/: sys::2:2::/usr/sys: bin::3:3::/bin: uucp::4:4::/usr/lib/uucp:/usr/lib/uucico dmr::7:3::/usr/dmr: c*kZ C a8   14console 00tty00 00tty01 00tty02 00tty03 00tty04 00tty05 00tty06 00tty07 00tty08 00tty09 00tty10 00tty11 00tty12 00tty13 00tty14 00tty15 00tty16 00tty17 00tty18 00tty19 00tty20 00tty21 00tty22 00tty23 00tty24 00tty25 00tty26 00tty27 00tty28 00tty29 00tty30 00tty31 c,kdN: = @ ~ll  0  6 >  67" % xw %@  b"  x xwf x@w  -*"$"  N f ,%  ,% & ,%  ,%wpw ^D  ԋwVfw!"w( f@w!w|!"w7l!F@& BFacctonUnknown error: f n x !!!0!@!R!^!t!!!!!!!!! ""+":"R"_"u""""#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large3c0kҤ " % ( + . 1 4 7 \}\}  0  6 >  675 %  w ~    5      N2R- eN t %"% @&  5@'  %  z,0! r,@ @ EN %N t WpCeR-   D %2  ww v4 z %7   I GB fe p Nfe R H fe  5NeJ  %  Nef  Z f  Nh+! Xe  w w DC 5 u E     u-@wr w b DC 5 B E; &E " ~  u-@w w  *ff %w w Nfef %@ w w D@w  4 e>54 && \%4 %  4 E w D  t 4 w w uDAB %u f& & e wr 5 5  W- W00u5  .uv BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5((w*A  fff Fe w5  @ 0   Wp `e0eӕ?w X DCB &E " z f "  #̥-%0  E: E:  &E "  z f "  ww DuNfe& %4 ;#% M :1:1   & %S  w@w DE%& %  wx w d  te-wVw FD@   4 4 ww D  w r< wf =@+ @ a f 4  %)f &  e   f 4  4  Հ rw D&     & 4 ww  -j wef >@w 5  5R5 N  N wh u-uu   5N w R5 ww  *Z5U7*X5U7~*Z5|*X5t*Ae vB`*7 b*55 a  a!RE -(*%X5 w *%*e rt 7) ~) `e )  ~%))e U?)) `e 7)X5U?) a7) ))?z)v)U ew DV)E ww D5 @ r5N !wv5A vBB-  }ee@ !ۃ `!ւ `@ r `(w Nef 8  wP w A@I#EEFNuww N tf %ww Ntf %wxw hDCԋ ԔwZw JDCԔwBf@f@w  fwwd!wfw7' fww|wxj!w f@w^wZw Vr!wfw>w:z!wbff@ww!w6fwm!wwmfw!ww fAW @w ff51f575 ew! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & f5 f@ww!w7#F@& BF/etc/utmprCannot open /etc/utmp rCannot open %s Try again /dev/wcannot open %s Broadcast Message ... doxfegcslL urDOX"U(null)<3<3b!650c:k@      ||   0  6 >  67+ % Vw D   5$f %%  `` d@ : @Ӌ  /@ /˥/ @$@e .ҋe@ (@̋ b 5$@ r@ t$f T % wN e@%(Ă@( ` w  fef % w w uDAB %u f& & e w5 5  W- W00u5  .u@ BwF J@B _t@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& T %4 ;#%   ((   & T %S  w@w DE%& T %  w w   e->ww D@  L   4 4 w:f x@w .!-%% B!N 4 f T %  67 % w        f e   w p T &  w^f @f@f@w fw76 fww wffAW @w f0 10 75 exw$ 5w~7L7H7D7@7<7874707,7(7$7 77777 777f&| & 0 f$70F@& BF   /bin/usr/usr/bin0cFk  Qhqhq F 0  6 >  67& % w N% @- <" e ." (  7"x &% & h e7 ! %@&8 B> & %@&K  5T & & f e"f &% & f e"f &%-D!e-6!\ &"7` !"!e"!"e"!Ԥ  5 o  %""%#"  -   ̋ E?((   &E  %""-|  &wtw d  -f   \  RN wJ ""%"2 "70 " %   ww  $ |$Ne Ne et  ww  fef % w w uDAB %u f& & e wT5 5  W- W00u5  .u| BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w : DCB &E  z f   #̥-%0  E: E:  &E   z f   w w z DuNfe& %4 ;#% e ##   & %S  w @w DE%& %  wZ w F   be- w8 w ( D@     4 4 w f x@w N  w w Ne < f ef&@ 5uNe  w/%J %K  tZ  t5\   N  5   %D-D-% eu Ne   w w DC%: j e`m e rfw w x Q@f& e5uQ@f& e5u eeQu  >'< ff TeR< ff deC r<R r< A@epe@ f& ewR F j  5 $u  j  5u F  j  5`u`u D7 j %n  j!  0!j! 7 >'ww $'!ԔAA WpCe!$'ԔԔԔ BeWpCe!ԔԔԔ& ed& ed& ed& @%d 20e@ ed& $'w0w A r nwmw D % A r  r e0@ԕ A r e0@ww  tR'U7fP'U7\R'ZP'RAe vB>7 @55 a  a!RE -%P' w< %e rt 7 H `e   H%e U? `e 7P'U?t a7f ^`?XTU ew |D4E wnw ^D5  @ r5N !w,5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww D4 4 e ̋ f  5wdfef &%5 @ p-! @ !@ !N A Am@ 5u%  fe .eeu  fff eu ?%uNfe.f &%uCe.   e D̋5 %@mAmHe N  _2w N tf %ww Ntf %wf@wZ fw,w(w$!w4 f@w ww !wfww!wf@ww"wfwm"wwmfw"ww~ f BRfwZ "f@wHwD"w0w D @ C@ppC`pLw7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF_msgbuf_msgbufp/usr/adm/msgbuf/unixNo namelist /dev/memNo mem Namelist mismatch ... %.12s doxfeg|cslLurDOXU(null)%%cQkM Qhqhqh!M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec 6\'#cSk% ss   0  6 >  67! % w 0 0%@5@ 3!t& %f! 0 @- e 3 % %  72!7(!7#!! t& % t& % @ v 4# @ 7 U U E !&   Z !!! e 5w  7 7 7 !fe& %  @E w% % :% 7%!4@ Z%a%z  $%A%Z  e %#%! %@  Z Z% _Ԑ %  w ,D Z̋w"w  u@E E5fe @%wf @w N tf %ww Ntf %wfw@e7!wjfwww!wJ f@ww!w&f@ww!w7F@& BF0$!L 1!e=!0L!--V!11e`!22L o!35L {!53!44 !ii0!ll!66 ! ;login: ;login: :login: login: login: :login: ;login: ;login: ;login: login: login: * login: /bin/loginlogin;6cWk2C /||   0  6 >  67`% % w r%  x   Dw B x   e %p% x <     % h%   x   Z % ww  *  x   x   x B 8      %  h!w^w N n V 8       e  h!ww  h% %p% %   e ww D   &  4 ww  3 /7 -7 3 %  3 % n  r%  w2 0)w  4P r% P  @`4r% @`ȋ4r%ww  fe" V%% w @w * p  Z  x   8 7."_ " ZB0_ %p%̋  ` ) %     ``H % ` %e e  e %p% ̋  e %p%ww  @  x   x N  & r% 4%r%  r% 8   @7!7  r%  e @0 w w D* 8 )6 `Ȭ " % e 3 % >  %  V%% Z4 8 # 3 `3 % >&  e  % Zw<w ,%  w&f @P w A@I#EEFNuww wnwj X 7wf@fwBw>^ wv fw(w$w d wP f@w: fwwl wf@U@f@A)wfw@e7r wfw7 fz w f@wfwbw ^~ wpfwFwB wRf@w*w& w0fAW @w f%1%75 ew 5w7L7H7D7@7<7874707,7(((7$7 77777 777f& & % f BRfw: fw0 }f@ww  w7F@& BF/bin/sh/etc/getty-/etc/rc/etc/ttys/etc/utmp/usr/adm/wtmp/dev/console/dev//!;%0#c]k$! LvLv @|  0  6 >  67- % <w " `% D <@7(7(( f 7X" (- D  < (  7." p(@ D  <Q X( ( 7"_5 5 5 ,%0%9 &(S D  < ff eCe `@ `5u '@m5w%w% ff e5u   % %5 @e7j% ff fef&d hep e . &  5&~ D 6&f %%$ & & D $m$5%"f %"&  %N P 7$w$ 5u fe e@e7r$%!@ J7:@ J7(% -%% D% $-$##e## De <7 t%7 r%7 p%5 @0" % "ff  %e4%eu w-x#7 x%  %$$'  %L% <ww T *@ ` "& .e 5 & &  "& .e 5P & &  "& .e 5P@&5%0%7&f D%$5 @eCpt5P % u u ^$Z$5 @@m0 %5 @t@a0 0 %5 5 5 @t@a0 0 %  @e5 5 5 @E , j @_n `b Nefefefe  eNefefe %wB V &  5 & D >#fef %5 5`u`u Nefefefe  eN P @Eu 4Eu@t@P5 @  Nefefefe !f e Nefefefe!@& e  >$  _~Nefefefe&" e eu Ne w  5 @@mH@ @aw @@mȋ&@&! D%! w l 5 5 5 5 /%0%9&"! D `! w2 ff PeCe `@ `5u @&5A@w  r5 *    :&5 @p& <5% % %  @0&w2! D < % w T   ff zef& ef %5%ff7! Le <ww    ff ef& ef %5%ffH! e <ww H B t5,'5.'  Y! D < n$$ff %T5 @t$$Btr.'2,' %2A@ww  ew %2&5 @t.','Btr$2$ %2$ff  %7 t p.'p,'wpw `u @t5` }5 @@m0 %5 @@mAAmp %%  Nf f f  eww  J5uNff  %5 @@m %= @t@m pH % l! D= wjw Z @: 6* &EwD  pw 45 @@m0 -5 5 'A 7ru@@m@ @aA p@@mAm 7ru - 5 5 5 5 5 5 @t@a0 0 % 5 @t@a0 0 %5 & H%XRee@ 5ueu   ff Tevb a5 NA@C Ca 5u7 7w 3 0w-+ff % % ! D5 @t@app ff ^% -D< 5u Nefefe %w w  AAe v@55 7  ! D_B"ff %"@eEt5`@=@Ap@Ap @Ap @Br 2@64@:8@><@E % _ @ `_@! D  <"ff  %w5 % @t@mBtBmr2 }-% : Br<2:5 @t@m*(BtBmr @t@m0 (0 * %vN@<:f&  % fefe %w w w ff %w w "fef 8% w w D@wd  4 e0-4 && %4 %  4 E w uDAB %u f& & e w~ 5 5  W- W00u5  .u!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w d DCB &E N z f N  #̥-%0  Echk2$! LvLv: E:  &E N  z f N  w w DuNfe& %4 ;#%"_   ,),)   & %S  w@w DE%& %  w w p" e- wbw RD@ 0 P   4 4 ww D  w r< wf =@+ @ a f   %f  &  e   f   4  Հ rw D& f     P&  ww "-|  wef >@w D  ̥9Wp @@`e     + -̥0  w\w H F-U7D-U7zF-xD-pAe vB\7 ^55 a  a!RE -$%D- w %e rt 7  `e   %e U? `e 7D-U? a7 |~?vrU ew DRE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w FNef 6  w4w CB  D-w w CB  D-ww N tf %ww Ntf %wf@w fw4w0"wfwww"w f@www "wfww"wf@ww"w`fwm"w@wmfw|"wwn f BRfwJ"f@w8w4"ww FC  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJw7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFusage: mkfs filsys proto/size [ m n ] %s: cannot create %s: cannot open r%s: cannot open isize = %D d--777 0 0 $ %s: cannot open init %s: bad format %s: too big m/n = %d %d %ld/%ld: bad ratio -bcd-u-g%c/%s: bad octal mode digit %s: cannot open ...%c/%s: bad mode %s: bad number EOF read error: %ld write error: %D out of free space indirect block full too many bad blocks ilist too small bad mode %o 0do"xfegcslL8ur<DO&XNU(null).+.+"6P-#((cpk^:k n q t w z } bvbv @  0  6 >  67' % "w % ,4@b4a@ 5"@ 5@t@]f@& T %  0 " ,w6 @c!w  5 %0%9wAWp Ameu@ 5@w  fef X% Fw w uDAB %u f& & e w\5 5  W- W00u5  .u6 BwF J@B _@@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Az ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w BDCB &E n z f n  #̥-%0  E: E:  &E n  z f n  ww DuNfe& %4 ;#%   ##   & %S  w@w DE%& %  wb w N  e-hw@w 0D@ P    4 4 wf x@w $!-B!! 8!N f %2! % & %5! %w^w N D!'U76!'U7,!'*!'"!Ae vB!7 !55 a  a!RE - %' w % e rt 7  z  `e   z %x t e U?b b `e 7P 'U?D  a76  . 0 ?( $ U ew D E ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `Tw LNef   w:w $N tf . %ww Ntf . %ww D  ԋwf@w fwww#w fwzwvwr#wr fw\mXT#wPHwmBfw2#w.w$ f@ww#w7F@& BFarg count mknodusage: mknod name b/c major minor Pd6oBxfegcslLXu6r\D:OFXnU(null)%%"!Unknown error: !!!!!!!! "","8"J"Z"l"x"""""""""#%#6#E#T#l#y######Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large6'cykS V Y \ _ b e h ,{v{v   0  6 >  67+ % w   t 5#f %%#ˋ e  %e@%' %      % @&@& N % !  @ҋ  /@ /ʥ/ @#ˋLe A@ @ e?  A@ @ e '@ˋ' 5#@ r@ t#f % e@%' wb w R Nfef 4%@ w6 w "  fef 4% fw w uDAB %u f& & e w5 5  W- W00u5  .u2 BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Av ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E J z f J  #̥-%0  E: E:  &E J  z f J  ww DuNfe& %4 ;#%  '' ~  & %S  w@w DE%& %  w w ~  e-ww D@ ,   4 4 w<f x@w  !-b$$ 4!N f %.! % & %1! %ww  v$+U7h$+U7^$+\$+T$Ae vB@$7 B$55 a  a!RE -$%+ w2 #%#e rt 7# # `e #  %##e U?## `e 7#+U?v# a7h# `#b#?Z#V#U ew rD6#E wdw TD5 @ r5N ~!w"5A vBB-  }ee@ !ۃ `!ւ `@ r `"w Nef  ww N tf ( %wxw hNtf ( %w^w ND  ԋwFf@w fww#wfwww#w f~z#w fwdw`#wf@wHwD#wpfw0m,(#wPwmfw#w.w f@ww#w7 F@& BF/etc/mtab%s on %s arg count mount/etc/mtab,doxfegcslL4ur8DO"XJU(null)))!Unknown error: |!!!!!!!!""("4"F"V"h"t""""""""" #!#2#A#P#h#u######Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large6,ck3m\H $ኑ =  0  6 >  67T "% *w =Z5 HKK6@K H %%H_(Nffe h% Ne @e5%9KKKfefe H eNefe 7 Ne.fe x 5Ne. 5%' J  f   Nfe 7 Ne.fe x 5Ne. 5 G D@Ne 8fe,@ ;%?@@ ;% ^: Ne 7PJ ^: ?_nNeA@? %NeJ 7@ ((_n x@ ? NE@? %NJ 7 w(; I_ N b _n H_ _ Jf 7 7I_  Jf 7 _  jI_  `I_ I@f  5f  N (_nN 7$I_nNIKK@fe H eNef _H[@U@  7x>_np> (7 h>_n z_n R _n 7P>_nH> v8 ;8>_n ,>_(Ne]@> %Ne_dHa@  H (_n7 LH_(w@  @ =_nZG H=@0K H e@ f0K  5_nNe D;Ne .50GG G@@Gf@f e N_w 8   ,=@  H (Ndf % w8 w 8   =w8w v8 4%F @ @ HNf .' % @ @ EN 5%@ @ EN 5%#%#Nf N (w7w 7 u = @f  5@f  5  w`75 @ @ EN 5@ @ EN 55 N (N (@%%w 6 % % } @ 5=    @w6 w p6d E_F7 EE ZED@fe H e@fe  7D @H   D& < D_FH < D_FD& < ,:&: v8L ; pD 7nDL ZD%TD(A/A@  H (Ne y 0A  H (HAfe 7  n7 CCCLA  %bA  H (h9 d9C * w 5}A  w 47 CC !7C 2H ! Nf   ^:  ^:  " H FC w4w ~4 w~4w n4 ^: A ;%@e5n  f& 9%%y H  ^: w3w 3f 7B  ^: Af  5  rBHfe h Ndfe % N ( ^: wr3w b37 &Bwf3w V3 ANf 7 @ew:3e  w 3 LNf 7 @pFe7teL@-7t 7eL5%d7  CH   @p77 7A H%P7 CH   wn2w ^2 LNf 7 wF2e87teL@- w 2Ne 9 - .N v8 v8N 8N v8 7C4C,C 8e ICFC:C 8e LC ;%N v8 *@w1w 1I 5XCT H %Ne 9uu (- ) ^:  v8N v8N 8N v8 _CT 8%fCH   *N v8H ( 87bH v8N 8%wCH  N v8w0w 0 H ( v8H 8 H v8Ne ;w0w x0zD5%z3 r yC "       >z     -z ̋@z  xCN xw/Cfe 7 Nfe 7 NeNfe 7 Ne~fe , 5|D~C& 7 C& 7 C& 7 C& 7  + /  ^: Cfe 7 fe 7 @| @a0 ~Ne~fe 8 CH   *Nex ;@x_j w . ^:  ^:  v*5  ^:   ^:  fCCC 8e 9Ne ;5@-%% ^:  ^: @w(.w . 5 @ @mH     =   @w-w -f%@-  71 e1 81 \8 1CH % *%@ 7;% @T7;& 7 7 ;%@ .7; ;<C  D b  D  >D  iD  D  H (,U7n; d;D b D  H (,U7B; 8;2; 8 <;8D  E  /E  ]E  H (T CET 7 T ( = T:E \8 EH   * 'EU7:& H %:Efe H %Ne xn: \8 EH   *4:/Efe re& *8  : :/Efe H e x E   -999 Zw+w +f *8 NF   *w*w *;>F  H (@U LF@U 7  @U7T97\9@UB9PFfe H efe *8 _ ]F  "95 9@ 98mFfe H ezFfe  5 8|FH % Nfe& % Ne& Ffe& 7 @ F  H (7 d8_ 5 @ @aeAWpAae$fFfe e N2fe % ckd\H $ኑኀ 0 5ru5 >AAm 5ru AWpAae$f % u @ @a7 &@ @a7& %u u-  1  1rUb7 7 _ F   G_AWpAae$N@U 7 % L17rU 7 @U6N (wD(w 4( @w2(@ w (Ne D;F@Wp >@Amu@Ew'w 'n $G 9 5fef 9%5 r5%@&GH  @t@ae5@e5/ )Ne 85@@mȥ.@@mc@5%a %zNe n;eu-͂N v8 5$N57Gfe H efe *8 NDGH % w&w &f 8 5 f 9 5# Nfef ;%fef 9%5N v8N v8wV&w F& 47 47 444 7 % 4  44 47 4 44 47 4 4 4 44RG  %H (w%w % ^: lG \8 x!5+ ^:  P4zGwGoG 8e 64GG}G 8eGH   *G  H (N *w:%w *%DB  E  Ґ%  B- w$@w $DC  @; f .' 5w$w $ Hff (%w$w $NefH >%wv$w f$Neff >%wZ$w J$DA555  ԋNeffe >%w$w $DC 5 5 _@ E_%%_5 %*e5  AWp `euI 0u%l%h5 %[ BIe  Neffff e   - @w#@ @ EN 5% % % %Nf     %_l@ _ZN 5 %Nf w V"N%c%s%[Nf ff f& @ew"5 5 5 5 %e%f %o%xDe5 5 @ @ EN % % % %-5 Ԑ@ @ EN  1 A@  5u%_N  = _%+ @ _@ E I8%)%._f%e%E %    Ԑ@ _@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _ _ N %+ %- %0_%9_Ԑ@ _HN _V @e! _4@t@]   x0HNe ,A _4Ne ,A @H@pHw DC = 5%c%0u5 %s E  rG%%c5 %[rG   E  %%   =  D- %cw w D ̥^  GG %E%]  GG  ww Nfef "%@ w w tC  ((E (H %  C- w@@w (Hfef "% |(w w BuNefef "% = Ne& .' @ww D%    | w - -w \D@w> 24 eU4 && 9%4 %  4 E w D  04 t 4 wd& & .e Ӌ VHZH &72&& e &ӕ-&ӕ0B~&ӕ.  ӕ0~ B~VHZH&7% & je %ӕ-0 %ӕ.% B~ӕe% ӕ- ӕ+ r e0e0Sw ^uDAB %u f& & He w"5 5  W- W00u5  .u\HBwF J@B V_$@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AHҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& 4e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E .' z f .'  #̥-%0  E: E:  &E .'  z f .'  w&w DuNfe& ;%4 ;#%H'! 6 PP 2  & ;%((S  wJ@w 4DE%& ;%  w w H (e- ww D@ ( v8  04 4 4 wrw bD  w` r< wf )=@+ @ a f 9  %t)f ) &  9e   f 9  4  Հ rw D& 8     v8& 9 w^w NH-D wHef >@w   JI 9  Wpf&  9eU 9%% w v8 (+Uҥ "Uw 5  N85U .7 N ^: N N8wz u-uu+ ^: 5N N8 w (U <7 w"w   + +  + w/& 7   TI 9 5 N +  7 N v8N v8w U&f 9%% wt U̥ %U w LLN 6 WNef 29 M@E% F ^I 9 >fe& 9%%/ u-^IU 7 NeU 7 NeU $; u-u- v8Uw v8 w D*\5% %-%+ 5 55 55  B5eA5 I%.55  B5eA5 I %E%e$%+%-  Wp B`eI  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& 6e5 55ww D  ̥9Wp @@`e     + -̥0  wdw PN / 1wJw :Ne \;< f X ef&@ 5uNe 40w/%J %K  tTH t5VH / N / 5   %D-D-% eu Ne 40 w^ w N DC%: 2e`m e rfw w  Q@f& T e5uQ@f& V e5u eeQu  V< ff eR< ff eC r<R r< A@epe@ f& ew% F 2 5 $u  2 5u F  2 5`u`u $D7$ 2%n  dI  0!dI 7 \$Vw w x UIԔAA WpCeIUԔԔԔ BeWpCeIԔԔԔ& 2 ed& 2 ed& 2 ed& 2 @%d 20e@ ed& 2 Uw w A r nw mw D % A r  r e0@ԕ A r e0@w^ w N $#$VU7#"VU7 #$V #"V#Ae vB"7 "55 a  a!RE -"%"V w "%"e rt 7" :" `e p"  :%X"T"e U?B"B" `e 70""VU?$" a7" ""?""U ew  D!E w w D5 04@ r5N 2!w5A vBB-  }ee@ !ۃ `!ւ `@ r `4!w Lfff 5& B5ew6w & fff 5& B5eww  5 %O N  = .V555Ne5& 7e5~V55'0Ne5 B& 7e57 Be0" 5%~V55 5 B5@B e.V a=%.V7.Vw %~V5 B5Ne5& 7e55e0%~V7`Jʕ0%.Vʕ1  %.V˕0 ʥ9 w ~Nef 7  wlw V5@m 77"w:w *5@} w&P w A@I#EEFNuww N tf Z9%ww Ntf Z9%ww DC ̠ԋww DCԋ Ԕw|w lDCԋ wb@w JDCԔwBw 2D  ԋw*w w:w6 lJ7|wf@fwrJwT f@w> fwwvJwf@U@f@A)wfw@e7|JwfwwJwf@fw7R f@wNJwz ffw.w*w&JwJ f@w ww JwfwwJwff*wBJ f@wwJwfwmJw|wmvfwfJwrwX fAW @w@ fV1V745 e:w"J 5w7L7H7D7@7<7874707,7(7$7 77777 777f&: & V fwwJw f BRfwZJfwLJwB fw0 }f@wwJw7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF,:*BJVnn  nPnx../../%s %s %s w%s/L%s.%s.copyw%s You are in lesson %s cd not allowed You are already in learn. %s/log/%sa%s L%-6s %s %2d %s failpass$ rr../../%s/L%srNo script. Sorry, that's %snot right. Do you want to try again? still Try the problem again. bye OK. Lesson %s (%d) Skipping to next lesson. Please type yes, no or bye: A/usr/lib/learn Interrupt. Want to go on? rTBZBaBhBpBzBBBBB B B BBBB BB BBBBBBBBBBC CMreadyanswer#print#copyin#uncopyin#copyout#uncopyout#pipe#unpipe#succeed#failbyechdircdlearn#logyesno#mv#user#nextskip#where#match#bad#create#cmp#goto#once#nwh>=NW lesson name too long /bin/shsh-i/usr/bin/shsh-iExec error %s/teelrnteeTee exec failed Error making tee for copyout * n b exec mvcprmls/bin/Execv failed /bin/shsh-ccan't cd to %s,These are the available courses - LinfoIf you want more information about the courses, or if you have never used 'learn' before, type 'return'; otherwise type the name of the course you want, followed by 'return'. Xinfo Which subject? If you were in the middle of this subject and want to start where you left off, type the last lesson number the computer printed. To start at the beginning, just hit return. 0playcan't cd to playpen pl%damkdir %sCouldn't create working directory. Bye. %s/%s/Init%s/%s/Init %sLeaving learn. Sorry, there is no subject or lesson named %s. Bye. What lesson? bye../../%s/L%sno such lesson ../../%s/L%srNo script for lesson %s. #nextCongratulations; you have finished this sequence. %s %dSorry, there are no alternative lessons at this stage. See someone for help. .lesson too long ../../%s/L%sNo lesson %s Good. Lesson %s (%d) ../bin/rmrm-r/usr/bin/rmrm-rCan't find 'rm' command. Bye. &&0             #d#o#x$f$e#gh$cz$s#l#L#u$r#D#O#X#U(null)RRHI/etc/utmp/etc/ttys/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\  AAAAAABBBBBB ! ;;6V0# ck$C // @=NJ 0  6 >  67G % .7w < C%A-=E*F0@ @7PF'@  ʋ̥c%  E Ee  xA@& ̋ @nF @ =E@ ʋ= @w=G8=4=eB x* 7\C7B7NCw :w 9D-=Ew9w 9 w9w 9 |)@U t4 w9w 9   j  |)Lttw9w v9DN F% B 5;B  5 B & ; '((  N w9 p :  NU&   b%% w 8N w8%&B %|A &  b%w t8A5  :& !%^A%|A  : & J%& b%w8w 8D L7!NA w8 |)  %4A0A (A  %%)%|A %| A&  3%;@ 3 N 3 w 7  @_ (_ _  _\ _\ _ < _ w 7 |) .X@e4 B N % :@"( 4&@ $ & :  |)$  4  4?%  %?  4% |) 4  Nx?e4 b%  4 4% N?%;F?    4!  4_B(  _B |))  2& :5  |)e5"`> ^> J `>E5 " 4 > t= _dw 4 = z"% =w4w 4== <= >, < >&@wp4U  |)=e3 5z=t= "N 3 p=UU %>^=U@ ,%&U¥>UU7N=w 3 !  w3w 3@ =A @@5@-< hw3w 35TCt-e C(@ 0!%5N T!% N T!w>3w .3 "A 0!5 < &C 0!F7 $"C 0!` T! D<>< | 82w;;E%    F L7 w2w 2;7 ; & 6  . ; .7w1w 1 ; : ;7;w-;w1w 1<55 :&; w1C5FBNe& N: @E%@  & 8 55 ˋӕ_ ʥ/ 7 r:ҋA:J :."˥.2˥/˵@Ӌ ‹!/ 0Afe Nfe& % fef 9%%N 7 9w9 5 fe V 5`u /Dµ/@_v w 0DCE5 Q *= ?7 [.5#] & w/-   @E5  @E  ˋ ̋&  w D/ eD Eӕ/D Dӕ/  ) w/w .D48708w.w .D.& 9 % 1 ^)%A %58  F 8мFw.w x.    w`.w P.C 9 EFw8.w (.DF  .& 9 w.w -  Fˋ B4F 7Z7w-w -@ F @ 0 F@F .f 9 @Fw-w - 7FF F  7  6 w7 wN-w >-r1L56@4e444 4w -w ,D,1 *s@`3  3w,w ,D0 44 70w,w ,0   77 0w, w x,N 8  @ B w\,w L, f 8  Bf w6,w ",DC &U@ 8  7 U45w,w +f 7  Af w+w +25 .5 <"$5F x* 6A w+w +B] t '5D5E 56A Z*244  S5 @@ ,5@00@ B/N& * ӕ &f :%N 7w*w *D Ë4@P?4 4 @ ?3A w*w *D $ `` "" } `%{ VA wB*w 2* _zm@_5 5 @e5%{ 5 5[@@W032 H@ 3 3 5? 3`2` l5R2`72@55U72 5@A  _%}_215@] ]5* @&5ckC //5 @10 b2 -82 m02 55%$@2%!02%# 2%?2%-nF_zA _  @x } @} 0`U71 ,%+MP2P?x1 t1@  = -L17@ m@15*2 U  %?ʋ%= f A 5 1Af ĵA0@ 5_U70ĥ$Dw`'ĥ` ĥ"b1X1x7P1w ('ĝD1Ý>1Ne NN  7$17"1 @ N1 -:0/00 ,0070 0 )w&w &R 0 ) >ċ ?/ / %`/ ) V'Ne N    : Ne N Ne& &  .eN 7 ). x* 7h/20@P?Z/ V/  B&-D/.  7 .|F  . .  F  B~E ~ (( 3--JCB X$ ?( E - U- -- ~(5- - ?d( -f-Z(  w$w $"5 5 6(  ,( <  (%(   & <  ' 50-5(-/Ne' 7 %Ne' 7  BCFCE ~ >CZE ~ U$, @7P,E,F >7 d' 7w0# 7,7,7,7 R, F'@'  ) $ <5h,="' 85 p+"Ned+ N:   u-u-   A 0!uu+ 0! 7U+7+ x7+& 7E+  %& . n&+Epw $"5+ P&  T* 0!w "w ! H <"7 ^+=AF x* 7J+w!w !DC&U@ 8  7 f 8%w!w !BDĢ f * w!e w j!De 'N  5*  0!    w2!w "!D̵@@Bf w!H@ ̵̥= N lԕ=s] 5 33 w D N < w w @ Nf  w w p @5 B@& Nfe b wH w 8 RDe Ne l5f)(5 N 8 & & 8e% ,  >(& * õ@00@<?(R(Nmf  @(@m7(  Ne l55 õ00@Bf  Ne l5( (5 X#& & 8e Tww N <"Ff b ww  N * f x* w w D 4'  B& & * 5wt e   3  <33 3 3  w D̵@@  ̵H@ ̋ww w(x& >ww D  >& '  >ww  @  0!= T! 0! Zww zD&& x* E x* & x*  % |)wDw 4D5@   <4   <4ww D5@ C 0! 5 C 0! 5  0! ww & &  ww  &ww @  ?&e&wrw b7 &~ (z& e |)7j& (? ^&eX&w4w $ T!w$w  T!ww 5v%  ^%X% 0!C 0!ww D  * & :%ww  fe :%ww eu < fe Ze< ff eB< fe .e< ff eC< ff eD $"h T! $"m T! $"s T!ww N <"F 0!ww F5 C' r55Pe0 rC r %e0ww ~D @‹ Wp @@`e µ D- Af w:w & _ $C@ '̋_#5t#_#5 $& & @  76A 6A :L5" C * E 79 "% pB& + 8&5  5"A5@& 8  &  8e  E  @ "ww N/ * 5`" Af BwB*! Z*w DC& $  ! 8  ww D ˥:Ҕˋ!ҕ/˥: ˋ CҔwLw <C5!fBV" $ ( 7@"& % ," ww Df $ *! V' ,!& .8%! G 5  ) 277 !7 !7 F  7 7 ? F L7 NB 2B DB VBV!w0w BG l! eBG!7 ^!ww BG e %9@m7ww C E.`*&ww p% p ^)%fe^wPw @wDw 4D E((7n7w w DP HF7!B->4770 . ww % ^)ww  <f x*  )ww DC ww ~D@ wn w ZDCԢӋ wP@w 8Dԋ@w0w  e7 ^7 ^ ,ĵ0@ĵ>0@_J,ĥ'Oҕ" ĥ' U  ҕ" ,ĵ>0@ )@@7 U7>õ9@5ĥ>ĥ</ $e7_,ĥ=w]ĵH@5 ĵ@0@ ,Ġ D TCe n 7&7$7 2ĵ0@ ,@ U7U7 7  ĵ 00@ t7 7wdw T \%\' P%  @ ,D ĵ0@U7xUww  `ĝZ7 Vw,)    e  5   T!ĥ  ĕ   ( e2`2 7w Dx &e& 9%ww  5 TD_`/_`/E57  _\/ xE57  (5 'wC n 5  &  _25_255 :C 0! @ ` 0! @ `  @ _2 xE Nf & X$ 5!fBf _2 A * N )dw N& 6Ne n:ff % ^ff % < N "N 5  7 N "7 J@@ 5e B N Be _@/ "5% N@ eF& b N N 5 %_@/@ FN $"C 0!@ F 0!  eN "7 h5 _@/U@ ގ $ 5|A_:/ xN 7 _@/B_6/%B e |F _>/ B&_@/e 7N_@/ f < 5%_@/@ `A @ _@/ _@/d (_@/ @ e  l]  (7 _@/ _@/ef_z/ # 55%7@t@me5@5 %0N :_@/ :5 :0 T!@A tEe0 T! _/f 0 5_@/ _\/ +5@(7 z vE5 5 b $" 5 N 7@ 75@6 B&_X/ 7&%  7 5@ &_X/~F  _X/U@7  ^ x5  9  9 5  f  @ 75 @ &  N 75  L  0C &   " & .  @&   $    &  N& . Ne Nef& & .e N fef& .e_\/N 7N 7_\/ & . N& . _\/ & . _\/ & . _\/ l55  $e5 57  ( '5 V'w h`Nef   & . :74  . ($ N L7_\/5 # & .  % @  & . 57   w_\/ & . _4N&_4 '5 _\/5 $Ne 5f N V'Nf *  & .  uw 6NNe N N u N   |̖%& . Bwf @P w A@I#EEFNuww N tf 8%ww |Ntf 8%wrf@fw:Ew f@w fww Fwf@U@f@A)wfw w w FwhfwZ7 fff@fw w~ wz Fw f@w` w\ w X Fwfw@ w< Fwff*wBJ f@w w $Fwzfw m *FwZ wm fw *Fw8w fAW @w fpG1pG7 5 e9wv 0F 5w7L7H7D7@7<7874707,7(7$7 77777 777f&9 & pG fw w 6FwL fw $ # .profileD D"$D)D-D!2D5D;D>D$CDHDMDPDVDXD(ZDaDfDzDDDDDDDDDDDexportreadonlyDDEE EEEE E !EC C(E.E 4E =ECEHEMESEinesaccasefordoneifwhiledothenelseeliffiuntil{}HangupQuitIllegal instructionTrace/BPT trapIOT trapEMT trapFloating exceptionKilledBus errorMemory faultBad system callAlarm callTerminatedSignal 16cdreadset:traploginwaiteval.newgrpchdirbreakcontinueshiftexitexectimesumaskBBBBrEZEBfE~EBEEBE=ptrace: B1100//@1l1//2/1/1/x1202T.R4z44@655`64525 ;6G0+< ck%:<` c f i l o r u x { ~ t 7*. 0  6 >  67fJ % *+w 6 25 *5N 5N@@fer ~#e F"@    @ fer t2 5.@ + *+N ^24@fer 2# 55 N@ &*E ^ %* *+w5w 5 fE 2%= Ne 3 1 # ^2 ^2N 2N 2 G@6@ 2% V@I@ 2% *+ Ef *5% 5 Ef 3%% X@A N#  *+w5w 45 CCC `% .AAE@xC9pCvChC P% %RCZCLCFC e 8C8C0C P%2C"C C %%CC%w^4w N45  A 1*E %* 55_B8 @ *EB@ &*E `%@ *EB@ &*E `%BfB %A r% @ *E\B@ &*E P%@ *EDB@ &*E `% -E B9@ *EB@ &*E P%@ *EAA@ &*E e %*_5 @ *EA@ &*E `% %*5 @ *EAzA@ &*E e %*w2w 2{5 AAEupAmu % N 0 ,EeA95 j,AAE@`E@9@@@ `%@@@ P% % w2w 2  7@ 7@ 7@ 7@@ 7~@ 7t@ 7r@d@-d@ %\@R@ % 7:@ 70@w~1w n1Nf "eNf@& "ewB1w 21N ,Nf x"eu@f  A1Nf@& x"ew0w 0Ny@A N#% *+w0w 0 55N , ~@  A 1@ 5 O@AA @`55 Nef f `%N feffe e@ 55Nef f `%N feffe e % }-Ne ,Ne ,w/w / @  5}Aupeu@f  55 @ @m u-@ @mN ,Nfefef eNe ,Ne ,w/w / 5555Nef N Nef N Nfe N Ne ,Ne ,Ne ,Ne ,w.Nefefefe eNefe N Nefew D.5 55555 5Nef N Nef N NNefefefe eNefe N Nefefe `%Nefefe P%Nefe N Nefe N Nefe N Nfe N 5 Nff %Ne ,Ne ,Ne ,Ne ,Ne ,Ne ,w,w , @5@5u@ 5u @ 5@ 5N ,N ,N ffefe e% @ =@ = wJ,w :,u 5 5 7ff@ @m& D+ef&A C Cm  `@ `5u@ @m EHA@vu u-@ @m @m5 @ @m AEHA@v   wr+5 5 #@ @mA Am @b@m55 @ @m AEH u-w +u- f ((f *eC `@ `f& F)e5u Wfff )ef&f )eC `@ ` 5ufff )ef&ff n)eC `@ ` 5u A@ @w*w ) 5555 1@ *@  A 1@ f@&f 4e@  /=  w)%}/*= } @f  A 15 }- @ A @`AAB `H @e5uAAB `A  `@ `f& T'euNefef `%Nefef `%@ @m5@ @m5@@@ &  5@@5A@@m @m@@m @m&@@m @m&ff e5@ @mfff e  @ @mH uuNe JNefeffe 4e} @ p@p@@ 5 @m  } N / Ne ,Ne ,_V w "'N ,@e5u5 @e5@ @ EN $5%_    -# \&@ @ EN $Aup}Ne , wd&@ 5%0(%9$@e5Nfefe `%Nfef P%Nef N zAf # Aup}w %u@ 5 @f N# w%u@f  55 @ @mAAB `H u-AWpN .5AWpD` %̕-  @f N#%N / N /5 5 Nefeffe 4e@e0 %  ̕ w $ u@5  @ 5@ 5 @ 5@ 5N feffe eN ,@pAup}A up} w $w # 5 5 u@f  5@ 5?ff "eCD a `@ `5uf ff "eB BmJf ff "e5u } @ @m  }@p N /w#w #zA f %w"w "zAf ck':<` c f i l o r u x { ~ t%w"w "A f %w"w "Af %w"w "N f %w"w "N f %w|"w l"@5@55  @ 5@ 5u  @ 5@ 5uu- Nefefe Nefefe <%N , @ =} N /w!@pw !@fNo  A15 5 5 U@A @`5 ff@AA @`& d e5ufffefe e @ @-@A @`AEHA@v5uu }-Z5 5 @A @`5 ff@AA @`& e5ufffefe be @ @-@A @`AEHA@v5uu }-g5 @@ 55 @@ 53@A @`5 ff@AA @`& e5ufffefe e }-@A @`AEHA@v5uu @@o@-@A @` @@o=w@@o w @@mAm @ Br 5@E= ww @f  55 5 5 @ @mH }-M@A @`AAB `@b@m55@ @mAEH@A @`@m55 @ @mAEH 5 @ @mH }-% @ @m@ =}@p N /ww |u@5u@55  , u- Nefefe &ENefefe@ 5Nefefe* @ 5@ 5Nefefe P@ 5Nefefe %N ,@pAup}ww p @e5@f  A15 5 5 @A @`H }-V@A @`@mAAB `@55@A @`AEH@A @`@m55@A @`AEH 5 @A @`H }- &5 @A @`&x }-}Nfef P%@ 5@A @`  @ =w@  @ /w uu@5@55  4 u- Nefefe \Nefefe %6@ 5Nefefe P @ 5@ 5@ 5Nefefe P%u- N u- NN ,@pAup}ww ~N ,}u@ 5 %@f  A15 @A @`AAB `H u-ww w w  @ e .5w@  w N@A N#%A ) , ww  @ /= ww u4 @ 5u @A @`  u- N ,  }@ =ww  @  5 *A  A1@xA  A1@A x = @ww }/@@wv5 Neff %uNe ,@w 8 A A 2# 5zA f $  *4 5Ne@& r1 uENe@& X1 NA N# J%%JԐ@ @ EN $%  AA N# uNe@& X1 N *4 %zAN )Jw0w D  z3! 0w w  P *AA 2# 7< 6 6"ww  &  )7  ww D̥: ̋̋ww   ,AA 2# 7 FJ !%70+ !7&+ ! J.7+ ! J.7+7 +&A+ !7* !7* !7*̥  ̋ Lww DB  E  $Ґ%  B- w@w D ) & & L3e4  0wdw TDC 5 u E  $   u-@w w DC 5 B E; &E <( ~  u-@ww  ff )%ww ~Nfef &%%@ wb w NBuNefef &%% = Ne& <( @ww D%    | w - -w D@w .4 eL4 && 3%4 %  4 E w D  / t 4 ww uDAB %u f& & e wj5 5  W- W00u5  .u.ABwF J@B _'@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ArAҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w PDCB &E <( z f <(  #̥-%0  E: E:  &E <(  z f <(  ww DuNfe& *5%4 ;#%A 0 FF .  & *5%S  w @w DE%& *5%  wp w \ zA )e-wN w > D@ ) ^2  / 4 4 w w D  w  r< wf *=@+ @ a f x3  %6f * &  L3e   f x3  4  Հ rw  D& t2     ^2& x3 w w zA- w ef >@w r B x3  Wpf&  L3eL 3%% wV  ^2 F!Lҥ "Lw ( &B- JBN 82f *5%4B *5% 82& *5%7B *5%w w 5  P25L 1 N *4 N P2w u-uu, *4 5N P2 w 0 L ,1 w* w   x- x-  x- w /& 1   :B x3 5 N <-  1 N ^2N ^2w L&f 3%% w| L̥ %M w T LN 0 WNef 2 M@E% F DB x3 >fe& 3%%/ u-DBM 1 NeM 1 NeM 4 u-u- ^2Mw ^2 w  ww D  ̥9Wp @@`e     + -̥0  w6w " p$MU7b"MU7X$MV"MNAe vB:7 <55 a  a!RE -%"M w %e rt 7 3 `e   3%e U? `e 7|"MU?p a7b Z\?TPU ew D0E ww D5 /@ r5N .!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef r1  ww w7 ww mNA ee90@ w7vE@wP w A@I#EEFNuww tN tf &3%wjw ZNtf &3%wPw @DC ̠ԋw2w "DCԋ Ԕww DCԋ w@w D((CԔww DC 5 Ԕ B- B-@ww D  ԋwf@f@w fwhwdDwf@U@f@A)wfw*@e7"Dwrfwd7B f@wDwB ff@fwwwDw f@www DwfwwEwff*wBJ f@wBw> Ewpfw*m&"EwPwmfwEw.w fAW @w f0M10M75 e|4wE 5w7L7H7D7@7<7874707,7(7$7 77777 777f&4 & 0M fw&w"EwB fw0 }f@ww$Ew7BFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/usr/spool/secretmail%s/%s.keyGimme key: fnamew/usr/lib/makekey-/lib/makekey-enroll: cannot generate key nin%s powrpowrpow2mdiv divide by zerom_div1m_div2m_div30 m_out%s s_divm_multm_addm_submovemp: no free space%s itomitom1itom2/dev/ttyr /etc/passwdrr&d&o&x&f&e%g&c&s%l%L&&u'r*&D&O&X<&U(null)HHB/etc/utmpUnknown error: /etc/ttys/dev/BBBBBBB CC.C>CJC\ClC~CCCCCCCCCD#D7DHDWDfD~DDDDDD#Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument too largeResult too large;6XM0ck|P  p I  0  6 >  67lm % 8w ZI xE7bf 77XfTf #7Jf  !7hf ` " *  l8f6f0f %5 -~h_L@ ZheD_!`g D.e$ig G g 8  Bh )` .g G (h@`g & 7enbe F B` .fbf %%a 8e  ! d n  q s w 8g G*e |6f R&E` .e V% eeH`f D f @e @eN D@m0P`f & 7dN_dd F d |6|d |6_ 8wPGw @G@@w@Gw 0G R`] & 7Fd~] 8 8dg D T`g PD .df %ec" cNegf B'%% %d*f$f fpZhc fX` . 8VeZh Aew`Fw PFNc  @_lcVcdc %ZcNcBcNc  e%4cA @`5@  @ AEH NfE *5 @t5@  @ AEH NfE *5 w|Ew lE ff D%= Ne PF (A # E EN FEN FE y`h` ^E% `{` ^E% 8 ff G% G ff nF%% `vb -  8wDw D5 aaa % t>AAf@xa9aaa p% %zaatana  e `a`aXa p%XaJaHa %%Da>a%wDw C5  !A 1Di %* 55_`8 @ Di`@ &Di %@ Di`@ &Di %`f` : %A r% @ Di`@ &Di p%@ Dij`@ &Di % =EF`9@ Di4`@ &Di p%@ Di` `@ &Di  e %*_5 @ Di_@ &Di % %*5 @ Di__@ &Di  e %*w^Bw NB{5 AAfupAmu % N zC w > 5555Nef n Nef n Nfe n Ne L!Ne L!Ne L!Ne L!w>>Nefefefe  eNefe n Nefew =5 55555 5Nef n Nef n NNefefefe  eNefe n Nefefe %Nefefe p%Nefe n Nefe n Nefe n Nfe n 5 Nff :%Ne L!Ne L!Ne L!Ne L!Ne L!Ne L!w=  w,9%}/*= } `f A 15 }- @ A @`AAB `H @e5uAAB `A  `@ `f& 6euNefef %Nefef %@ @m5@ @m5`@@ & 5@@5A@@m @m@@m @m&@@m @m&ff e5@ @mfff e  @ @mH uuNe j!Nefeffe Te} @ p@p@@ 5 @m  } N > Ne L!Ne L!_vw 6N L!@e5u5 @e5@ @ EN .5%_    -# \&@ @ EN .Aup}Ne L! w6@ 5%0(%9$@e5Nfefe %Nfef p%Neck%|P  pf n fbf . Aup}w x5u@ 5 `f - wJ5u`f 55 @ @mAAB `H u-AWpN n=5AWpD` %̕-  `f -%N > N >5 5 Nefeffe Te@e0 %  ̕ w B4 u@5  @ 5@ 5 @ 5@ 5N feffe eN L!@pAup}A up} w3w 3 5 5 u`f 5@ 5?ff 2eCD a `@ `5uf ff 1eB BmJf ff j2e5u } @ @m  }@p N >w2w 2fb f %w2w 2fbf %w2w ~2nb f %wt2w d2nbf %wZ2w J2N f %w@2w 02N f %w&2w 2@5@55  @ 5@ 5u  @ 5@ 5uu-(( Nefefe Nefefe \%N L! @ =} N >wV1@pw :1`fNo A15 5 5 U@A @`5 ff@AA @`& 0e5ufffefe e @ @-@A @`AEHA@v5uu }-Z5 5 @A @`5 ff@AA @`& R/e5ufffefe be @ @-@A @`AEHA@v5uu }-g5 @@ 55 @@ 53@A @`5 ff@AA @`& x.e5ufffefe e }-@A @`AEHA@v5uu @@o@-@A @` @@o=w.@@o w .@@mAm @ Br 5@E= w`.w P.af 55 5 5 @ @mH }-M@A @`AAB `@b@m55@ @mAEH@A @`@m55 @ @mAEH 5 @ @mH }-% @ @m@ =}@p N >w6-w &-u@5u@55  , u- Nefefe FENefefe@ 5Nefefe* @ 5@ 5Nefefe p@ 5Nefefe :%N L!@pAup}w*,w , @e5 af A15 5 5 @A @`H }-V@A @`@mAAB `@55@A @`AEH@A @`@m55@A @`AEH 5 @A @`H }- &5 @A @`&x }-}Nfef p%@ 5@A @`  @ =w*@  @ >w \*uu@5@55  4 u- Nefefe |Nefefe :%6@ 5Nefefe p @ 5@ 5@ 5Nefefe p%u- N u- NN L!@pAup}w8)w ()N L!}u@ 5 %af A15 @A @`AAB `H u-w(w (w(w ( @ e n=5w(a ! w x(N)avb -%nb 6 9 wZ(w J( @ >= w<(w ,(u4 @ 5u @A @`  u- N L!  }@ =w'w ' -a 5 *2a A1@x8a A1@A x = @w<'w ,'}/@@w '5 Neff :%uNe L!@w & Ga>a & 5fb f /  F 5Ne@& D uENe@& C Nvb - m%%mԐ@ @ EN .%  Iavb - uNe@& C N F %fbN |6mw%w %D  z3! 0w%w % b= \aLa & 7N=H= V%w%w |% 8=2= |67 *=wr%w b%D̥: ̋̋wP%w @% < ^aLa & 7< F<m %%7K 4$7 K 4$ =7J 4$ =7J7 JXaJ 4$7J 4$7J 4$7J̥  ̋ ow$w $DB  E  .Ґ%  B- wX$@w @$D 6 & & Ee4  0w$w #DC 5 u E  .   u-@w#w #DC 5 B E; &E *5 ~  u-@wT#w D# ,5 fkaha`a ^Ee E F  F Ne G5@-%% F  F @w"w " ff 6%w"w "Neffb '%w"w p"Neff '%wd"w T"DA555  ԋNeffe '%w "w "DC 5 5 _(@ E_)%%_)5 %*e5  AWp `eue 0u%l%h5 %[ -ee  Neffff 6)e   - @w!@ @ EN .5% % % %Nf .     %_'@ _'N .5 %Nf . w ` N%c%s%[Nf ff f& ,ew& 5 5 5 5 %e%f %o%xDe5 5 @ @ EN .% % % %-5 Ԑ@ @ EN . 1 A@  5u%_,N  . = _,%+ @ _,@ E e8%)%._+%e%E %    Ԑ@ _+@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _>* _>* N .%+ %- %0_>*%9_>*Ԑ@ _*N ._* @e! _|)@t@]   xaNe 8;A _|)Ne 8;A @H@pHw DC = 5%c%0u5 %s E  .rna%%c5 %[rna   E  .%%   . =  D- %cw  w D ̥^  nana %E%]  nana  ww Nfef 0%@ w w ~nbfef 0% >4wf w RBuNefef 0% = Ne& *5 @w w D%    | w - -w D@w n=4 eo4 && nF%4 %  4 E w D  > t 4 w& & .e Ӌ bb &71& le 1ӕ-1ӕ0B~1ӕ.  ӕ0~ B~bb&71 & e 1ӕ-0 v1ӕ.j1 B~ӕe\1 ӕ- ӕ+ r e0e0Sw uDAB %u f& & He wx5 5  W- W00u5  .ubBwF J@B V_2@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A^bҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w hNefef 5& p?e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w<w ,DCB &E *5 z f *5  #̥-%0  E: E:  &E *5  z f *5  w|w lDuNfe& G%4 ;#%nb, >A ii n=  & G%S  w@w DE%& G%  wL w 8fb |6e-,w*w D@ 6 E  > 4 4 ww D  w r< wf 7=@+ @ a f (F  %N4f 7 &  Ee   f (F  4  Հ rw D& E     E& (F ww fb-+ wef >@w p r c (F  Wpf&  Eeo nF%% w2 E ^7oҥ "ow c-*22 >cN Df G% c G% D& G%#c G%ww 5  D5o C N F N Dw^ u-uu9 F 5N D w o C ww   f: f:  f: w/& 2D   &c (F 5 N *:  nD N EN Ew lo&f nF%% wX o̥ %p w 0LN >A WNef E M@E% F 0c (F >fe& nF%%/ u-0cp D Nep PD Nep G u-u- Epw E w j wnw ^D*\5% %-%+ 5 55 55  B5eA5 e%.55  B5eA5 e %E%e$%+%-  Wp B`ee  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& fAe5 55w w D  ̥9Wp @@`e     + -̥0  w< w ( 2*pU72(pU72*p2(p2Ae vB|27 ~255 a  a!RE -D2%(p w 62%02e rt 72 F2 `e 1  F%11e U?11 `e 71(pU?1 a71 11?11U ew Dr1E w w D5 >@ r5N n=!w 5A vBB-  }ee@ !ۃ `!ւ `@ r `0w & fff 5& ?ew w  fff 5& ?ew w  5 %O N  = 4p5((55Ne5& Ae5p55'0Ne5 B& Ae57" Be0" 5%p55 5 B5@B e4p a=%4p7/4pw %p5 B5Ne5& Ae55e0%p7/`Jʕ0%4pʕ1  %4p˕0 ʥ9 w XNef D  wFw 05@m 7T$7N$" *ww 5@} ww w .w.AupAmNf A ww  .@@5 _ C fA rBpu@@`55DCN& $C f& F.%5 2`D--`f $C $`f& HC%`Df -%5 D-& $C C-D-%@@AA@ Nf` A u_ANf A @`5_Af HC%Cww r X-DCԒ w^w N2-DCB5ҒS w,w wZ"7 T"ww mNAB"<" 2ee90@ w,"7&"vE@wP w A@I#EEFNuww N tf E%ww ~Ntf E%wtw dDC ̠ԋwVw FDCԋ Ԕw8w (DCԋ w@w DCԔww DC 5 Ԕ B- B-@ww D  ԋwf@f@w fw@!wdPd`drd~ddddddddee+e  67t % |7w J %` F7Pg *75Bg #5N pF  @7*gN"g "F @7g`_g "F gg E 6`g E gg 2I ;` f r#7f-ffR`b - 7 o`g & 7(h` `^ & 7h^ 7 |7dfh "F `h E #g4i h%e gNeh6i '%%u-ug 5 NNme*^`h -eh F  % % ` `h & 7g nNe RINe <je`o -e ]Pe`o -eo "& |7wHw H5 f@ &Ji x %*f 55 5 u5 *%)5@t@m iAWpAm fJi@t@m &i .%  % %wHw G RlNlJl %5 % H?AAo@xj9jjj .% %jjjj e jjzj .%|jljjj %%hjbj%wDw D5  "A 1Ji %* 55_j8 @ Jij@ &Ji >%@ Jii@ &Ji >%ifi %A r% @ Jii@ &Ji .%@ Jii@ &Ji >% =Eji9@ JiXi@ &Ji .%@ Ji% %*5 @ Jihh@ &Ji e %*wBCw 2C{5 AAoupAmu % N E %"h&hh .% % wBw B  "7g "7g "7g "7g@ "7g "7g "7gg-g %gg % "7g "7zgw Bw ANf %eNf@& %ewAw AN "Nf h%e!af ! A1Nf@& h%ewvAw fAN%ab -% |7wTAw DA 55N " *a ! A 1@ 5 O@AA @`55 Nef f >%N feffe e@ 55Nef f >%N feffe e % }-Ne "Ne "wP@w @@ .a ! 5}Aupeu3af ! 55 @ @m u-@ @mN "Nfefef eNe "Ne "w?w ? 5555Nef ,! Nef ,! Nfe ,! Ne "Ne "Ne "Ne "w"?Nefefefe eNefe ,! Nefew >5 55555 !5Nef ,! Nef ,! NNefefefe eNefe ,! Nefefe >%Nefefe .%Nefe ,! Nefe ,! Nefe ,! Nfe ,! 5 Nff %Ne "Ne "Ne "Ne "Ne "Ne "wz=w j= @5@5u@ 5u @ 5@ 5N "N "N ffefe e% @ =@ = w%Nefef >%@ @m5@ @m5\a@@ & ! 5@@5A@@m @m@@m @m&@@m @m&ff e5@ @mfff pe  @ @mH uuNe ("Nefeffe e} @ p@p@@ 5 @m  } N B Ne "Ne "_4w 7N "@e5u5 @e5@ @ EN .5%((c$ k5SX [ ^ a d g j m p s v k_    -# \&@ @ EN .Aup}Ne " w6@ 5%0(%9$@e5Nfefe >%Nfef .%Nef ,! bf >. Aup}w \6u@ 5 daf - w.6ugaf ! 55 @ @mAAB `H u-AWpN @5AWpD` %̕-  maf -%N B N B5 5 Nefeffe e@e0 %  ̕ w &5 u@5  @ 5@ 5 @ 5@ 5N feffe eN "@pAup}A up} w4w 4 5 5 uqaf ! 5@ 5?ff 3eCD a `@ `5uf ff 2eB BmJf ff N3e5u } @ @m  }@p N Bw3w 3b f %w3w |3bf %wr3w b3b f %wX3w H3bf %w>3w .3N f %w$3w 3N f %w 3w 2@5@55  @ 5@ 5u  @ 5@ 5uu- Nefefe Nefefe %N " @ =} N Bw:2@pw 2xafNo ! A15 5 5 U@A @`5 ff@AA @`& 0e5ufffefe e @ @-@A @`AEHA@v5uu }-Z5 5 @A @`5 ff@AA @`& 60e5ufffefe be @ @-@A @`AEHA@v5uu }-g5 @@ 55 @@ 53@A @`5 ff@AA @`& \/e5ufffefe e }-@A @`AEHA@v5uu @@o@-@A @` @@o=w/@@o w r/@@mAm @ Br 5@E= wD/w 4/af ! 55 5 5 @ @mH }-M@A @`AAB `@b@m55@ @mAEH@A @`@m55 @ @mAEH 5 @ @mH }-% @ @m@ =}@p N Bw.w .u@5u@55  , u- Nefefe ENefefe@ 5Nefefe* @ 5@ 5Nefefe .@ 5Nefefe %N "@pAup}w-w , @e5af ! A15 5 5 @A @`H }-V@A @`@mAAB `@55@A @`AEH@A @`@m55@A @`AEH 5 @A @`H }- &5 @A @`&x }-}Nfef .%@ 5@A @`  @ =wr+@  @ Bw @+uu@5@55  4 u- Nefefe :Nefefe %6@ 5Nefefe . @ 5@ 5@ 5Nefefe .%u- N u- NN "@pAup}w*w *N "}u@ 5 %af ! A15 @A @`AAB `H u-w)w )w)w ) @ e @5wx)a ! w \)Nab -%b p5 h8 w>)w .) @ B= w )w )u4 @ 5u @A @`  u- N "  }@ =w(w ( a ! 5 *a ! A1@xa ! A1@A x = @w (w (}/@@w(5 Neff %uNe "@w ' F f F  Tw'w 'D  z3! 0w'w x' = aa & 7== &%w^'w N' == 57 =wD'w 4'D̥: ̋̋w"'w ' = aa & 7= Fz=t $%7\R $7RR $ r<7BR $ r<72R7 0Ra,R $7"R $7R $7R̥  ̋ vwp&w `&DB  E  .Ґ%  B- w*&@w &D p5 & & Ge4  0w%w %DC 5 u E  .   u-@w%w v%DC 5 B E; &E 4 ~  u-@w&%w % 5 faaa Fe G lH  lH Ne |I5@-%% lH  lH @w$w z$ ff B6%wn$w ^$Nefb V'%wR$w B$Neff V'%w6$w &$DA555  ԋNeffe V'%w#w #DC 5 5 _(@ E_(%%_(5 %*e5  AWp `euf 0u%l%h5 %[ Z-fe  Neffff )e   - @w"@ @ EN .5% % % %Nf >.     %_'@ _r'N .5 %Nf >. w 2"N%c%s%[Nf ff f& X,ew!5 5 5 5 %e%f %o%xDe5 5 @ @ EN .% % % %-5 Ԑ@ @ EN . 1 A@  5u%_+N  >. = _+%+ @ _+@ E f8%)%._~+%e%E %    Ԑ@ _+@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _* _* N .%+ %- %0_*%9_*Ԑ@ _`*N ._n* @e! _L)@t@]   xZbNe :A _L)Ne :A @H@pHw DC = 5%c%0u5 %s E  .ra%%c5 %[ra   E  .%%   >. =  D- %cw w D ̥^  aa %E%]  aa  ww Nfef F0%@ wd w PBuNefef F0% = Ne& 4 @w w D%    | w - -w D@w @4 ev4 && H%4 %  4 E & & .e Ӌ bb &72& ne 2ӕ-2ӕ0B~2ӕ.  ӕ0~ B~bb&72 & e 2ӕ-0 ~2ӕ.r2 B~ӕed2 ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .ubBwF J@B V_.2@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Abҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& Be C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @wzw jDCB &E 4 z f 4  #̥-%0  E: E:  &E 4  z f 4  ww DuNfe& I%4 ;#%b- D pp @  & I%S  w@w DE%& I%  w w vb 5e--whw XD@ p5 F  B 4 4 ww D  w r< wf 7=@+ @ a f G  %9f 7 &  Ge   f G  4  Հ rw D& F     F& G ww b-, wef >@w  r tc G  Wpf&  Gev H%% wp F ?vҥ "vw B~c-d,88  dN pFf I%c I% pF& I%c I%ww 5  F5v VE N lH N Fw u-uu8 lH 5N F w Jv dE wDw 4  9 9  9 w/& E   c G 5 N 9  F N FN Fw v&f H%% w w̥ %w w nLN D WNef 4G ((M@E% F c G >fe& H%%/ u-cw "F New E New 2I u-u- Fww F w  ww D*\5% %-%+ 5 55 55  B5eA5 f%.55  B5eA5 f %E%e$%+%-  Wp B`ef  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& De5 55ww D  ̥9Wp @@`e     + -̥0  wzw fN < ?w`w PNe jI< f n ef&@ 5uNe >w/%J %K  tb t5b = N = 5   %D-D-% eu Ne > wt w d DC%: j@e`m e rfw6 w & Q@f& j e5uQ@f& l e5u eeQu  Xw< ff  eR< ff  eC r<R r< A@epe@ f& ewl8 F j@ 5 $u  j@ 5u F  j@ 5`u`u 8D78 j@%n,$  c  0!c$ 7 7Xww w >wcԔAA WpCec>wԔԔԔ BeWpCecԔԔԔ& @ ed& @ ed& @ ed& @ @%d 20e@ ed& @ >ww w A r nw mw D % A r  r e0@ԕ A r e0@wt w d 6lwU76jwU7v6lwt6jwl6Ae vBX67 Z655 a  a!RE - 6%jw w 6% 6e rt 75 "H5 `e 5  "H%55e U?55 `e 75jwU?5 a75 x5z5?r5n5U ew * DN5E w w D5 B@ r5N @!w5A vBB-  }ee@ !ۃ `!ւ `@ r `4w bfff 5& CewLw < fff 5& Cew(w  5 %O N  = vw555Ne5& De5w55'0Ne5 B& De57b  Be0" 5%w55 5 B5@B evw a=%vw7b3vww, %w5 B5Ne5& De55e0%w7c3`Jʕ0%vwʕ1  %vw˕0 ʥ9 w Nef E  ww l5@m 7!7!"+wPw @5@} w<w ,w!7 !w*w mNA!! Bee90@ w|!7v!vE@wP w A@I#EEFNuww N tf hG%ww Ntf hG%ww tDC ̠ԋwfw VDCԋ ԔwHw 8DCԋ w.@w DCԔww DC 5 Ԕ B- B-@ww D  ԋwf@f@w fw w Dgwf@U@f@A)wfwR @e7J -F Jgwf@fw70 f@w Rgwl ff@fwwwVgw0 f@www ^gwfwwfgwff*wBJ f@w`w\lgwfwHmD@rgwz4wm.fwrgwXw fAW @w fw1w75 eHwxg 5w7L7H7D7@7<7874707,7(7$7 77777 777f&H & w fwDw@~gwl f BRfwgfw0 }f@wwgw7&Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF`/usr/spool/secretmail/mail to exactly one person.keyaddressee not enrolledwarning: addressee's key file may be subverted raddressee's key weirdr.%d%s%s.%dcannot create mail filewFrom %s %smail %s <%snotice. /usr/lib/makekey-/lib/makekey-enroll: cannot generate key nin%s powrpowrpow2mdiv divide by zerom_div1m_div2m_div30 m_out%s s_divm_multm_addm_submovemp: no free space%s itomitom1itom2/etc/passwdrr/bin/shsh-c>,>,H,$,$,$,$,$,$,$,$,$,$,$,$,$,,,,,>1d$1o01x1f 2e0g1c1s0l0LF1u$2rJ1D(1O41X\1U(null)rrrc/etc/utmpUnknown error: /etc/ttys/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\hdpdzdddddddee e2eBeTe`eveeeeeeeee ff-f  67 % w (D 55\ n% s0 u6 x<@ 0 A@-D d 0/@e p 5 !@e5@e5@e p 7 e%%  % "&ff e   '  '  '   5 F 7( 0  _O  5Lpa %| % J5% Ne %Ne  % Ne %Nef Z Ne (Nef T N TN T <&  F    n  '  '  '   5_ % % J[Nefe/fe Z e% Ne4 %% Ne< %% NeA % Nef   Nef   fe  Nfe %  wB%w 2% F  w.%w % '  '  ' w$w $N w$w $Df  5w$Nfe % Nfe  N T w |$ @5 A @  w\$w D$d ! ] \& \& \& F F' P F' Z F'  '  '  '  '  Ndfe \%5 fek &ed w#w v# H \& \& \& F'  F'  F'  '  '  '  '   &%d w"w ", L Z \& \& \&  F'  F'  F'  '  '  '  ' Nfe \e fe &ed  w"w "$  70 \%N0  %%_fNef ( 5%% %N/ % JNe (A@@A 5 u w\!N (5%PA %NZ % JN0  %5{l %N % JN r w 5 @  -x%  %N % J-<4 .f  & 5 %N % JNf % @ pww  5 *@ "  @ f % @  (@  V"@ 0  -bww ~Nef (   W-wXw HN N (w<w & $f r& 5wfef )%N \&Nf & N (N ( w 5 &@ @mff % 5 @ @m ( u-wz @ @m  w TNfe \eNe F w4w $Nfe \eQfe e w w N@ L e% w 5 B @@mA H %@0w pDB  E  Ґ((%  B- w:@w "DC  @; f  5ww DC 5 u E     u-@ww DC 5 B E; &E  ~  u-@w:w * ff %ww Nef %ww Neff %ww DA555  ԋNeffe %ww DC 5 5 _@ E_0%%_5 %*e5  AWp `eu 0u%l%h5 %[ e  Neffff Ne   - @w@ @ EN 5% % % %Nf      %_ @ _ N 5 %Nf  w N%c%s%[Nf ff f& ew5 5 5 5 %e%f %o%xDe5 5 @ @ EN % % % %-5 Ԑ@ @ EN  1 A@  5u%_&N   = _,%+ @ _@ E 8%)%._%e%E %    Ԑ@ _@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _V _V N %+ %- %0_V%9_VԐ@ _N _ @e! _@t@]   xNe A _Ne A @H@pHw DC = 5%c%0u5 %s E  r %%c5 %[r    E  %%    =  D- %cw w D ̥^     %E%]   cP k%"0       " % ( + ##   w@w 0Nfef %@ w w  fef % w w BuNefef % = Ne&  @ww ~D%    | wZ - -w 4D@w !4 eP 4 && n'%4 %  4 E & & .e Ӌ  &7& B e ӕ-ӕ0B~ӕ.  ӕ0~ B~&7b & e Hӕ-0 <ӕ.0 B~ӕe" ӕ- ӕ+ r e0e0Sw vuDAB %u f& & He w:5 5  W- W00u5  .uBwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w *Nefef 5& #e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E  z f   #̥-%0  E: E:  &E   z f   w>w .DuNfe& )%4 ;#%  $ ,, !  & )%S  wb @w L DE%& )%  w w  Te-Vw w D@  \&  V" 4 4 w w z D  wx  r< wf =@+ @ a f F'  % f  &  'e   f F'  4  Հ rw D& r&     \&& F' wv w f - w` ef >@w 2 5  &5d T% N ' N &w u-uu ' 5N & w d b% w w D*\5% %-%+ 5 55 55  B5eA5 %.55  B5eA5  %E%e$%+%-  Wp B`e  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& %e5 55ww D  ̥9Wp @@`e     + -̥0  wtw `AupuN ! wPA vB w $N V"w$w  Fl U78j U7.l ,j $Ae vB7 55 a  a!RE -%j  w %e rt 7 ' `e   '%zve U?dd `e 7Rj U?F a78 02?*&U ew DE ww D5 V"@ r5N !!w5A vBB-  }ee@ !ۃ `!ւ `@ r `Vw fff 5& h#eww  fff 5& h#eww  5 %O N  = v 555Ne5& @%e5 55'0Ne5 B& @%e57 Be0" 5% 55 5 B5@B ev a=%v 7v w % 5 B5Ne5& @%e55e0% 7`Jʕ0%v ʕ1  %v ˕0 ʥ9 w DNef %  w2w 5@m 77z"ww 5@} wP w A@I#EEFNuww N tf &%ww Ntf &%w~w nDCԋ wd@w LDCԔwDw 4D  ԋw,f@fw8w fww<w f@w fwwBwfw@e7Hwtfwf7 ffwtwpwlPw2 fwVwRXw f@w8w4w 0^wfwwfwff@wwlwfwmrwzwmޅfwrwXw fAW @w f 1 7~5 e,(wlx 5w7L7H7D7@7<7874707,7(7$7 77777 777f&0( & fww~wl f BRfwfww( f@w|wxw7F@& BF,<CWn/usr/lib/uucp/usr/spool/uucpmyname/usr/lib/uucp/L.sys/usr/lib/uucp/L.sys.cr/usr/lib/uucp/L-devices/usr/lib/uucp/L-dialcodes-d option removed unknown flag %s %s START/usr/spool/uucp/usr/spool/uucp/LCK.LOG/usr/spool/uucp/LOGFILEa/usr/spool/uucp/LCK.LOGcan't open %s /usr/spool/uucp/LOGFILE/usr/spool/uucprAERROR - (%s) lsp != NULLCAN NOT OPEN %s/usr/spool/uucpfile-%s LOG.copy file %s /usr/spool/uucp/LOGFILE/usr/spool/uucp/LOGFILErAERROR - (%s) plogf != NULLCAN NOT OPEN %s/usr/spool/uucp/LOGFILE%s%su s %s %s %sr/dev/null/dev/null/dev/null-s%.7s/usr/lib/uucp/uucicoUUCICO-r1/dev/null/dev/null/dev/null/usr/lib/uucp/uuxqtUUXQT/dev/null/dev/null/dev/null%s -r %susr/lib/uucp/uucp/bin/shsh-cLTMP.%dAERROR - (%s) ret != -1LOCK PROBLEM - %sAERROR - (%s) ret != -1LOCK PROBLEM - %sAERROR - (%s) ret == 0LOCK PROBLEM - %sAERROR - (%s) i < MAXLOCKSTOO MANY LOCKS %dAERROR - (%s) p != NULLCAN NOT ALLOCATE FOR %s%s.%sLCK.%s.%sLCK.lllllllllllll\\tdoxrfebg<cNsrlrLurDOXU(null). . =(\  AAAAAABBBBBB ;6  0# ((c` k@L B}B} | 0  6 >  67- % 2 w d-&$&  7) /&<'   2 %@-b@7t) e%` 7P' ' 2 V&@)  6)  X&&)   2 ) )j&  &z&  7( (&( e wh l7P,' e T&(  %C&@&  7@E&<' %e U&w 7 R( &%    N7 0(  *(%?"( N (   ( ww 7 & ~(  )A)p) %   E f 2 d 5 T ) 2 ' _.% %_~(  L& ) )~(  w?,' U  % ~(  ) ) %~( %3~(  _Jw R7 &~(& &Ȑ & & D  ~%F& x& t&ȕ j& D \& &  vL&& %)8& +.&&E D %*& &  v&& % % % %ȕ % %EH% D  $% % %ȕ % D % & : 2 w w  &Z%  5 &H%  DL̥ H̥}E&(%  t@m$5@A t5$ $ $ȕX$X$ $ $ȕ $ D  ̋$ $ $ȕ $ D %&f$  Ne &N$  Ne @ 8$  &*$  ww  ff %ww Nfef .%@ wz w f4'fef .% wN w :D@w B4 e.4 && h%4 %  4 E w ruDAB %u f& & e w65 5  W- W00u5  .u&BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A$'ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w  DCB &E D z f D  #̥-%0  E: E:  &E D  z f D  wl w \ DuNfe& %4 ;#%4' D ** B  & %S  w @w z DE%& %  w< w ( ,' e-<w w D@ &    | 4 4 w w D  w  r< wf =@+ @ a f J  %f &  e   f J  4  Հ rw D&      & J w w ,'- w ef >@w ` N V  wZ w J Ne < f hef&@ 5uNe w/%J %K  t& t5& B N B 5   %D-D-% eu Ne  wnw ^DC%: e`m e rfw0w Q@f& de5uQ@f& fe5u eeQu  F.< ff eR< ff eC r<R r< A@epe@ f& ew F  5 $u   5u F   5`u`u D7 %n  '  0!' 7 FF.ww ,.'ԔAA WpCe(,.ԔԔԔ BeWpCe(ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  ,.ww A r nwmw D % A r  r e0@ԕ A r e0@wnw ^ Z.U7X.U7Z.X.Ae vB7 55 a  a!RE -%X. w %e rt 7v j `e Z  %B>e U?,, `e 7X.U? a7 ?U ew $DE ww D5 |@ r5N B!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w \Nef   wJw 4N tf %w*w Ntf %ww ww D(7Xwf@wL fwhwdJ(ck kL B}B}w,fwPwLwHP(w f@w.w*w &X(wfww `(wf@wwf(wfwml(wzwmfwl(wXw f BRfw~r(f@wlwhv(w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF@,'$$~$$~$$>A@>A>ab#C8DH00IFF9    I**I~ @$BBBBBB$8D @@|~ D8 $D~|@@XdB$AAAA>"AAA#   @ @  @$BA@@@@@@A>~AAAAAAAA~~@@@x@@@@@@@|@@@@@>A@@OAAAA>AAAA~AAAAADD8ABDHPpHDBA@@@@@@@@@AcUIAAAAAAAaQIECAAAA>AAAAAAAA>~AAA~@@@@@>AAAAAAYE>~AAA~DBAAA>A@@>A>AAAAAAAAA>AAAAAAA"AAAAIIUcAAAA""AAAA" @@@ 88" <>BB>@@@@|BBBB|BBBB>BBBB>B>@@@@|BBBBB(@@@@FHPpHFvIIIII@|BBBBBBBBB>\b@@@@>@<B<~ BBBBB=AAA"IIIII6B$$BBBB" @~ ~   *~~~~~~~~~~/dev/vp0wCan't open printer rCan't find %s Printer IO error /usr/adm/vpacct/usr/adm/vpaccta%4d %s Printer IO error &d oxfegcslL.u r2DOXDU(null),,'M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec!6d.#cr k-< qq H 0  6 >  67 % w  e% @ȥfew  7,%     p  7$ `O  J#  e  L# ~ P#  J#     8~$  x%    8  ww   J# V 8k @3`#DE%@CVjWp!%HjWp @j@#%#%!!p|! e  ((J#  %J#  %J#   r# Dww  Wpq-%  % N wWp@%%f& *%J !fe * U !fe * K"! 7"N 5fef %!f  Nf 8 @@m" 2w"Ne *!fe * N  A v Ak@B EBt@0Neff! ew X@eJ#,P~ D-@a<Ne  *W- % %Ne V  ! Gfe  J#Ae,P~w"f f fe Ne  W-  f f fe e  J# V J#  % w X%hm t 0  %7 N( %  P&   D@! E !  %    7` %Q! Ne  d!! fe  N ft xe& %ww z^w|w lDCB~wdw TD~wPw @ @  X % @ X@ ȋ %ww D L % < %ww eDw >@fe Z eww  fe e@ww ~ ff ewpw ` w`w P e raWpq-% Wpq-% ww DC ԢӋw  %w N @%k   ww }- ww  Doe~%I ! wpw Z@p- wR w >N V  f  w w D  ee%ww XN e J# V ww ww D 2ff %ww D_ % U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w N ff& e5u4 # 4  N ff& e5u%%w *DC 5 u E      u-@ww DC 5 B E; &E  ~  u-@ww p ff %wdw T!fef % w< w (D@w  4 e4 && %4 %  4 E w `uDAB %u f& & e w$5 5  W- W00u5  .u!BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wZ w J DuNfe& %4 ;#%!     & %S  w~ @w h DE%& %  w* w  ! 2e-jw w D@  D   4 4 w w D  w  r< wf n=@+ @ a f   %f n &  e   f   4  Հ rw D& Z     D&  w w !- w| ef >@w N N  wH w 8 Ne v< f V ef&@ 5uNe w/%J %K  t! t5!  N  5   %D-D-% eu Ne  w\ w L DC%: te`m e rfw w  Q@f& Re5uQ@f& Te5u eeQu  2< ff eR< ff eC r<R r< A@epec} k= qq@ f& ew< F t 5 $u  t 5u F  t 5`u`u D7 t%n  "  0!"  7 2ww v"ԔAA WpCe"ԔԔԔ BeWpCe"ԔԔԔ&  ed&  ed&  ed&  @%d 20e@ ed&  ww A r nwmw D % A r  r e0@ԕ A r e0@w\w L ^FU7PDU7FFDDU ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `nw JNef   w8w " hDԋ  r e0@  r X a %z#w  f  %@w N tf %ww Ntf %ww DCԋ Ԕwxw hDCB 5ԋ Ԕ $@wJw :DCԔw2w "D  ԋww w w #7ľwf@wV fw w #w6ffw w w #w f@wp wl w h $#wfwP wL ,#wf@w4 w0 2#wfw m  8#wz wm fw8#wXw f BRfw>#f@wwB#w7RFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/dev/rmt1 rstXXXXXXwdumpdir: %s - cannot create directory temporary %s: cannot open tape Tape is not a dump tape Dump date: %sDumped from: %sTape is not volume 1 of the dump r/Can't find directory header! /PANIC - can't find directory %d /...r/%5d %s%-.14s Missing address (header) block Mount volume %d Cannot open tape! Not a dump tape.Try again Wrong tape. Try again Checksum error %o d o x f er gL c^ s l L u r D O X U(null)"M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec/!6P#c k!q t w z }  99  0  6 >  67 % Pw % @& $ 7  P     %    ttWt e'pل %X  7b p $ 7PJ '8 t% 4' %   ' t% % l t%t t& t% %X  .&   _ Pw.w 7 & &%%E %&  r yR 7hF7F7R7 77&E7>w&FA77 7 77E7wA7׸Ur%&  7E7wn&  &77E7wJ&  7E7w*7 &  &77hE7xw7& e_&  7(E7@w7&  &7&7E7w7_U|$ ##E #& % _ < H$_ <$wXU4$&  7E7w07&&  &77nE7~w 7 Վ Վ  Վ Վ _U#&  7E7w&  &77E7wz&jd e7XV_&  T"L"E D"& 8"*0"E ("'J) i r t 0 g<"!E !&  d, !& % _%_z&  &  &  &   _&   2 3 6_@ 7_ 8_~ :_6f j _z _z 2_l 6_ 9&  7J&  7D&  7((&  77 77$777 EF&77_7_w D % c%`teP t5@PNmFe @& 2Nm(e @& @m e @& @m e @& e%eww  m $ 7v j  P v % &  e5 5? @' B% t AEWt@`e' %     5 b t%׵ %ww DC @5 5@ 5 5Aupu 5 u-_` D-_f ACpa=)tE? @`-NEtWtE@`m4&Et& B-@5` CmBmDm& *ACpa=#tE? @`-EtWtE@`m&EtB-@5` DmBmCmC- Aup Am=0@tA E? @`-B@ EtAWtE@`m$&@EtN f ww DCE?tE? @`- % H EtWtE@`m&Etww ~D  !%%7PwLwJe%2  t%v fd B%7Vмw  Pww   f ef&f eww D E  w E  tPw \&fef T % ^wD w 0D@w ^4 e<4 && B%4 %  4 E & & .e Ӌ && &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~&&&7 & de ӕ-0 vӕ.j B~ӕe\ ӕ- ӕ+ r e0e0Sw r uDAB %u f& & He w6 5 5  W- W00u5  .u&BwF J@B V_<@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A&ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w & Nefef 5& `e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E  z f   #̥-%0  E: E:  &E   z f   w:w *DuNfe& t%4 ;#%& . 88 ^  & t%S  w^@w HDE%& t%  w  w & e-ww D@ ~    4 4 wf x@w h RU7PU7RPAe vB7 55 a  a!RE -|%P w n%c k@!q t w z }  99he rt 7R dF `e 6  d%e U? `e 7PU?ʙ a7 ?U ew .DE w w D5 @ r5N ^!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w ffff 5& ewPw @ fff 5& ew,w  5 %O N  = \555Ne5& Ve555'0Ne5 B& Ve57: Be0" 5%55 5 B5@B e\ a=%\7\w0 %5 B5Ne5& Ve55e0%7`Jʕ0%\ʕ1  %\˕0 ʥ9 w Nef   ww p5@} wlw \N tf %wRw BNtf %w8f@w fww'wfwww'w f@www 'wvfwlwh'wXf@wPwL'w6fw8m40'w$wmfw'ww fAW @w f175 ew' 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & f@w0w,'w7Fw "B A@ C@ppC`pw @& BFEEEEEV Ed/usr/tmp/rasterBotch /dev/vp0Cannot open vp $$~$$~$$>A@>A>ab#C8DH00IFF9    I**I~ @$BBBBBB$8D @@|~ D8 $D~|@@XdB$AAAA>"AAA#   @ @  @$BA@@@@@@A>~AAAAAAAA~~@@@x@@@@@@@|@@@@@>A@@OAAAA>AAAA~AAAAADD8ABDHPpHDBA@@@@@@@@@AcUIAAAAAAAaQIECAAAA>AAAAAAAA>~AAA~@@@@@>AAAAAAYE>~AAA~DBAAA>A@@>A>AAAAAAAAA>AAAAAAA"AAAAIIUcAAAA""AAAA" @@@ 88" <>BB>@@@@|BBBB|BBBB>BBBB>B>@@@@|BBBBB(@@@@FHPpHFvIIIII@|BBBBBBBBB>\b@@@@>@<B<~ BBBBB=AAA"IIIII6B$$BBBB" @~ ~   *~~~~~~~~~~Ld2o>x fe gcs l LTu2rXD6OBXjU(null)88x'=(\60c k _ ; > A D G J M P S V Y  33  0  6 >  67% % w XQ@-' l w=@e  7B!/@e  7*!!5 * @& 5@,  % N e@ %   ww   _@a _ x N 5N 5f _N 5N 5N 5N 5fff z e_Nfe < Ne 8 _ ._N 5N 5f : N 5N 5f N 5N 5N 5N 5fff ^ N 5N 5N 5N 5N 5N 5fffff e cN 5N 5N 5ff %HNfe < Ne :N 5N 5N 5N 55 N A Aa1 u-Neffff e@ @ EN 5%_$ ww @ @ EN 5%w@ @ EN 5%t5@]w X  @ @ EN ==w&w www &@@5@@ 55@uB55& e5A5 -LN ~@55@ 55Nf u- u- 5 N fff 6e5Nf ff 6e5NN |&fN  %x%%@x _( xN y%%%Hm@@@55uB5& 8euu5u-u-u-u-u-u-u-u- %%%Nf uuu-_(%_(@ _( x> u- _2_u- _2_%m@@55uB5& euu5u-u-u-u-u-u-u-u- %%Nf uu((u-%@  xF u- _u- _wnw ^u-u-  u- w>u-u- w  @ w@w NfNmffNmff e ww  4  ww  4  ww ww   4  4 zvrf wlw \  4 R   4 @a  4 f w*w Nf N f ww   4 @ d l s @ca@ 4 wd@db`w  4 Nf wzw jwrw bwjw ZNf Nf wFw 6775757 PCFAAA7CFA AA7ww  5www55www5@tE5@tE5@tE5@tE5@teAA @@E5ND |&f8  ee r 5- NU 4 w-- NU` 4 wNU` 4 NU 4 w-NU` 4 NU` 4 w - NU` 4 w~NU@ 4 @ wt w `   f  wHw 85 5!Vw Ne5& e55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_ w   ff %ww Nfef %@ w w D@w 4 e%4 && 6%4 %  4 E & & .e Ӌ   &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~  &7Z & e @ӕ-0 4ӕ.( B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .u BwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @wr w b DCB &E  z f   #̥-%0  E: E:  &E   z f   wc k` ; > A D G J M P S V Y  33 w DuNfe& h%4 ;#%    !!   & h%S  w @w DE%& h%  w w n   De-N w` w P D@    $ 4 4 ww D  w r< wf =@+ @ a f   % f  &  e   f   4  Հ rw D&      &  ww  -  wef >@w 5  z5%  N  N zwr u-uut  5N z w %  ww D  ̥9Wp @@`e     + -̥0  ww  %U7 %U7 % % Ae vB 7 55 a  a!RE - %% w0 %~ e rt 7h  X\ `e L  X%4 0 e U?  `e 7 %U?  a7   ?  U ew pD E wbw RD5 $@ r5N !w 5A vBB-  }ee@ !ۃ `!ւ `@ r ` w fff 5& 6eww  fff 5& 6ewnw ^ 5 %O N  = %555Ne5& e5N&55'0Ne5 B& e57 Be0" 5%N&55 5 B5@B e% a=%%7 %wr %N&5 B5Ne5& e55e0%N&7 `Jʕ0%%ʕ1  %%˕0 ʥ9 w 5 = ww Nef `  ww 5@} wP w zA@I#EEFNuw^w NN tf %wDw 4Ntf %w*f@f@w fww!wfwww!w f@www !wfww!wbff@wpwl!w6fwXmTP!wDwm>fw.!ww  fAW @w fN&1N&75 ew! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & N& f@wPwL!w7FF@& BF`d<rcan't open %s    HHHHHHJJJJJJJJJJ DDDDDDEEEEEEEEEE@@doxbfpeRg,c>sblbLurDOXU(null)##!=(\6v&0c kꀓ       # &  88 @ 0  6 >  67% % $w Q@-' l w=@e 2 7!/@e 2 7!!5 * @& 5@,  % $N e@ %   $ww  *_@a _ x N 5N 5f  _N 5N 5N 5N 5fff e_Nfe < Ne _ _N 5N 5f N 5N 5f nN 5N 5N 5N 5fff N 5N 5N 5N 5N 5N 5fffff ~e cN 5N 5N 5ff %HNfe < Ne :N 5N 5N 5N 55 N A Aa1 u-Neffff e@ @ EN 0 5%_$ w4w $@ @ EN 0 5%w@ @ EN 0 5%t5@]w   @ @ EN 0 ==w|w lwtw dwlw \ w`w P  wLw <wDw 4 5   @CB0Buww eN @ 5ww N L  f  & @ &f  & H &f  &  & eww |N L  f  &  & ewPw @Nf N fff z e& eA5@@5@ @55 5  55&555&55 D5 J5uuw,5wm N \5@ @ 5uuw5wmN \5@ @ .  u- ww ww N L  f  & : & ww  7Z7T^`  !N  N   *.&*"E7 U!  FwWpC7FwtW@C77npC7ww  `w w Nf  b ww 7P707P7,57(57$FAAA7FA AA7ww  @w@ w teA 7r4m2whw XeA 7rwPw @ 3 w8w ( 4  ww %     6     f 6 ww   ww   ^!P  ww p@@5@@ 55@uBwFw 6 u}}w*w --_ (( r@- 7 @A5w- 5A7`nN \5N @ ND \5 6N @  4@B5w-  5B7`N \5N @ N \5 N @  wwww  5ww w 5@ww  5www5@ww v5 5!.w^Ne5& be55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_ w 2 > ff %w&w Nfef %@ w w  fef % w w D@w 4 e%4 && %4 %  4 E & & .e Ӌ t x &7H& e 6ӕ-0ӕ0B~ӕ.  ӕ0~ B~t x &7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w 5 5  W- W00u5  .uz BwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w t DCB &E 6 z f 6  #̥-%0  E: E:  &E 6  z f 6  w w DuNfe& %4 ;#% =  x !!   & %c k       # &  88S  w@w DE%& %  w w   e- wrw bD@     4 4 ww D  w r< wf =@+ @ a f n  %n f  &  Be   f n  4  Հ rw &D&      & n ww  -Z  wef >@w D  ̥9Wp @@`e     + -̥0  wlw X B%U74%U7*%(% Ae vB 7 55 a  a!RE -%% w %e rt 7  `e   %vre U?`` `e 7N%U?B a74 ,.?&"U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `R w Vfff 5& ew@w 0 fff 5& eww  5 %O N  = %555Ne5& e58&55'0Ne5 B& e57 Be0" 5%8&55 5 B5@B e% a=%%7 %w  %8&5 B5Ne5& e55e0%8&7 `Jʕ0%%ʕ1  %%˕0 ʥ9 w 5 = ww rNef   w`w J5@} wFw 6N tf %w,w Ntf %wf@w fwjwfp!wfwRwNwJv!w f@w0w,w (~!wvfww !wXf@ww!w6fwm!wwmfw!ww fAW @w f8&18&75 eJwn! 5w7L7H7D7@7<7874707,7(7$7 77777 777f&N & 8& f@ww!w7F@& BF`d<rcan't open %s AA@@ .doxfegpcslLurDOXU(null)##f!=(\6`&0c k|  66  0  6 >  67% % w 8Q@-' l w=@e  7/@e  7!5 * @& B 5@,  ^ % N e@ %   wpw ` $_@a _ x N 5N 5f  _N 5N 5N 5N 5fff e_Nfe < Ne _ _N 5N 5f N 5N 5f rN 5N 5N 5N 5fff N 5N 5N 5N 5N 5N 5fffff ~e cN 5N 5N 5ff %HNfe < Ne :N 5N 5N 5N 55 N A Aa1 u-Neffff e@ @ EN 5%_$ ww @ @ EN 5%w@ @ EN 5%t5@]w 8  @ @ EN ==ww ww ww  ww   ww ww  5   @CB0Buww  A7`N @ 5wnw ^N  ~f | & ( &f  & 0 &f T &  & eww N  ~f  &  &  eww Nf N fff H e& eA5@@5@ @55  u @PU05 55&555&55 ,@ 5 @5uuw5@7`@ H55uuw5@7`@ H5@tA@PU@  u- wzw jwrw bN  ~f  & , & w@w 0 7`7Zd` !T X 8   04,0(E7&U FwWpC7FwW@C77pC7ww  nww Nf  b ww |7l7D7l7@57<5787DAAA7(74A AA7w<w , @w*@ w eA 7rHmFww eA 7r0ww ! >  P ww      ! > ww z   f  wbw R  wLw < | j w<w ,@@5@@ 55@uBww  u}}ww w-w-_ @5@5    @PU45N H5N H5A r5A r55 @@55-@U5@ U8 U@ @@5xN @ u-u-@@5G@U5@ @ 2@AWp@5@AWp@5@5 % U8%U NN N @   N @t@]U@ w w ww  5www5@ww  5wpwrw\5@ww v5 5!w^Ne5& e55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_" w 2 > ff t%w&w Nfef x%@ w w  fef x% 0w w D@w ((4 e%4 && %4 %  4 E & & .e Ӌ |  &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~|  &7n & e Tӕ-0 Hӕ.< B~ӕe. ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w 5 5  W- W00u5  .u BwF J@B V_`@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w t DCB &E  z f   #̥-%0  E: E:  &E   z f   w w Duc ks|  66Nfe& H%4 ;#%    !!   & H%S  w@w DE%& H%  w w   e-b wrw bD@  r  V 4 4 ww D  w r< wf N=@+ @ a f   % f N &  e   f   4  Հ rw &D&      r&  ww  -  wef >@w D  ̥9Wp @@`e     + -̥0  wlw X %U7%U7%%Ae vB7 55 a  a!RE -J%% w <%6e rt 7  8 `e   8%  e U?  `e 7 %U?  a7   ?  U ew Dx E ww D5 V@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r ` w Vfff 5& hew@w 0 fff 5& heww  5 %O N  = %555Ne5& *e58&55'0Ne5 B& *e57r Be0" 5%8&55 5 B5@B e% a=%%7 %w  %8&5 B5Ne5& *e55e0%8&7 `Jʕ0%%ʕ1  %%˕0 ʥ9 w 5 = ww rNef X  w`w J5@} wFw 6N tf %w,w Ntf %wf@w fwwx!wfwww~!w f@www !wvfww!wXf@wrwn!w6fwZmVR!wFwm@fw0!ww" fAW @w  f8&18&75 ew! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & 8& f@wRwN!w7VF@& BF`d<rcan't open %s AA@@ .FFpdVobx0f>e gc s0l0LxuVr|DZOfXU(null)##n!=(\6`&0c k  55  0  6 >  67% % w Q@-' l w=@e  7/@e  7!5 * @& 5@,  % N e@ %   ww  *_@a _ x N 5N 5f  _N 5N 5N 5N 5fff e_Nfe < Ne _ _N 5N 5f N 5N 5f nN 5N 5N 5N 5fff N 5N 5N 5N 5N 5N 5fffff ~e cN 5N 5N 5ff %HNfe < Ne :N 5N 5N 5N 55 N A Aa1 u-Neffff e@ @ EN  5%_$ ww @ @ EN  5%w@ @ EN  5%t5@]w   @ @ EN  ==w`w PwXw HwPw @ wDw 4  w0w w(w  5   @CB0Buww eN @ 5ww N 0  f  & 2 &f  & : &f  &  & ewpw `N 0  f ~ &  & ew4w $Nf N fff ^ e& zeA5@@5@ @55 5  55&555&55 65 J5uuw,5wm N N5@ @ 5uuw5wmN N5@ @ .  u- ww ww N 0  f  & , & ww  7Z7T^` !N  N   *.&*"E7 UFwWpC7 FwW@C77|pC7w w  nww Nf  b ww 7f7>7f7:5765727>AAA7"7.A AA7ww  @w~@ w feA 7rBm@wZw JeA 7r*wBw 2!   w$w    !  ww %        f  ww   ww  d ww p@@5@@ 55@uBwFw 6 u}}w*w --_  r@- 7 @A5w- 5A7`N N5N @ N` N5 DN @  H@4B5w-$  5B7`N N5N @ N N5 N @  wwww  5w:w<w&5@ww  5www5@ww v5 5!Jw^Ne5& Fe55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_| w 2 > ff %w&w Nfef %@ w w  fef % w w D@w v4 e%4 && p%4 %  4 E & & .e Ӌ |  &7l& e Zӕ-Tӕ0B~@ӕ.  ӕ0~ B~|  &7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w 5 5  W- W00u5  .u BwF J@B V_@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& xe C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- (( ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w t DCB &E  z f   #̥-%0  E: E:  &E   z f   w w DuNfe& %4 ;#% a  \ !! v  & %S  c k&  55w@w DE%& %  w w   le- wrw bD@     4 4 ww D  w r< wf =@+ @ a f R  % f  &  &e   f R  4  Հ rw &D&      & R ww  -~  wef >@w D  ̥9Wp @@`e     + -̥0  wlw X ^%U7P%U7F%D%<Ae vB(7 *55 a  a!RE -%% w %e rt 7  `e   %e U?|| `e 7j%U?^ a7P HJ?B>U ew DE ww D5 @ r5N v!w5A vBB-  }ee@ !ۃ `!ւ `@ r `n w Vfff 5& ew@w 0 fff 5& eww  5 %O N  = %555Ne5& e58&55'0Ne5 B& e57 Be0" 5%8&55 5 B5@B e% a=%%72 %w  %8&5 B5Ne5& e55e0%8&73 `Jʕ0%%ʕ1  %%˕0 ʥ9 w 5 = ww rNef   w`w J5@} wFw 6N tf %w,w Ntf %wf@w fwwx!wfwvwrwn~!w f@wTwPw L!wvfw4w0!wXf@ww!w6fwm!wwmfw!ww fAW @w f8&18&75 e.w! 5w7L7H7D7@7<7874707,7(7$7 77777 777f&2 & 8& f@ww!w7F@& BF`d<rcan't open %s AA@@ .FFdoxfezgTcfslLurDOXU(null)##n!=(\6`&0c kI =  PATH=/bin:/usr/bin tmp=/tmp/cal$$ trap "rm $tmp; exit" 0 1 2 13 15 /usr/lib/calendar >$tmp case $1 in -) sed ' s/\([^:]*\):.*:\(.*\):[^:]*$/y=\2 z=\1/ ' /etc/passwd \ | while read x do eval $x if test -r $y/calendar; then egrep -f $tmp $y/calendar 2>/dev/null | mail $z fi done;; *) egrep -f $tmp calendar esac c kSw`N' * - 0 3 6 9 < ? B E   @D  0  6 >  67 % 7w C\ 5 5 5 57  7 < p r x@ b.%"@-% 5 @e v:780 e%%  2.%5e"% N 2.%fe ? Nefe ? %% Ne 2.%2 z 5 2.%N 2.% J N F@ j?5Ne. f %,fe b.%@e.5*=*NeXfeD refe & 5 2.%Ne  2.% J fe `@ NeTfeD re.fe & 5?0 2.%NeK 2.% J fe `@ Ne UYf 2.e@e5,Ne*f,  }* *  * *=*Ne*f,  5,*>*<*;*@e*5Nefefe* % Nefe @ %b Nec 2.%Ne ! Nel 2.%N Z6N Z6Ne CNe Ce J _NeBfeD refe & 5 2.%Ne 2.% J fe `@ fe @%% EN Z6Nefe ? Ne fefef 2.e NeFf 2.eNeIf 2.e@e5,_ Nfe %% Ne* 2.%>*<*u*_ |*^*!@e.@-*_ @e*5}* *  * *=*_ Nefe"fe* %5%( Ne" 2.%% Ne 2.%% N 2.%" Nefe" @ @e.@-*@e5}* * % Ne" 2.%%n Ne 2.%>~Ne Ne"feOf 2.e_ @e5}* * _Nefe ? 5Ne"fe ? *Ne <NeIf 2.e_ @e5}* * _ Nefe" ? _Ne NeAfeD re< NeI f 2.e% Ne' 2.%Ne0 % Ne1 2.% J Nefe  J Ne fefeGf 2.e Ne feF]f 2.e<_ Ne 5}* * _ Nefe ? _> NeRfe"C reNefe @ Dgfe & 5xi 2.%Ne 2.% J fe `@ Ne  fefef 2.eN Z6 Ne feFf 2.e~Ne < NeI_dNe 5}* * _ Nefe" ? _ NeRfe"D reNefe @ Cfe & 5 2.%Ne 2.% J fe `@ NeTfeD re fefef 2.eN Z6Ne fefef 2.e Ne feFf 2.e< NeI _dNe 5}* * &~Ne < NeI_d@e5}* *  * *=*5Ne*f,  5,_6Ne.Cf 2.eN Z6Nefe @ XNefe ? Nefe dA Ne C     Ne fefe!f 2.e N Z6 (NeAfeC reNefe dA Ne C Ne  J Ne Cw6w 6 % N7 2.%N 7w~6w n6JF # 5#N |$Ndf @%% N @@m 5ȥ =N |$ w6w 6Lf & 5<Nf & 5N Z6Nffe h&eNfe &e5N Z6N Z6f `@ wt5w d5 Nf dA Nf 5N C@w85N C w 5~@ /# ~"2 fe~ @ Pfe~ ? Nfe~ ? Ne~f @ w4@ 5@e5 / } =Ne~fe|fe Z% fe~ @ Nw X4 Nef >C 5 w>4@E%@w 4@e15.Nfe0 @ /f.  5.- )Ne0Rfe b.%% Ne0[ 2.% & & fe ,e5 w3=.Ne0   .w v3Ne Ne@&f@&hf b.e %X N v 2.%w03w 35   e  8 %% 2.% 2.% J  & 54Nef p'%N %%5 2.%  2.% J 1 `@ [F & 5w.2] `@ 5 Nuf b.((%rf 2.%N Z6z  w 1 N "5=w1@f @ Nf @ w 1 N b"5=w~1@f @ @= w N1 }@wH1  w *1 N @@m5u- / @w1w 0 @5 A @  w0w 0n  % N 2.% -5r @ @ @ f A 5 2.%N 2.% J  @f @ 5%c kl`N' * - 0 3 6 9 < ? B E  2.%N 2.% J Nefef Z% N bB f @ed 7Ne C5@-%% N 2.%@wh/w X/$ r  |,7h& b.%N&L p%%_Nef >C 5%) 2.%N3 2.% J Ne ^CA@@A 5 u w.N C5%TE 2.%N^ 2.% J N&z p%5p 2.%N 2.% J N  w .5 @  -%  2.%N 2.% J - f ) & : 5 2.%N 2.% J Nf @ @ p wL-w <- 5 *@ "  @  f ? @  C@  \<@ 0 -w,w ,Nef >C   W-w,w ,N  N Cw,w x, $f @ 5wf,fef C%N @Nf dA N CN C w ,5 &@ @mff p% 5 @ @m C u-w+ @ @m  w +Nfe b.eNe w+w v+N fe b.eQfe e wB+ w .+d @( ] @ @ @  A  A $ A  xB  xB  xB  xB  N.fe b.%5 feQJ5 @ed 7wp*w `* v' H @ @ @U A _ A i A  xB  xB  xB  xB  s @%d 7w)w ), & Z @ @ @  A  A  A  xB  xB  xB  xB Nfe b.e fe @ed 7 8w)w ( N  w(  5 2.% 2.% J 7 | 5  Nf ?  @f ?  e-,-$  @5u/  N   N %_@5Nf   _e N  _N 5%DX_w d'. & 5__Nef @ Nef l 5},f  5= N @t@m5@p@ȋw@70f ? @ @0fe@@ & ^%5 9@ @a=eu-= eNfe @%%  %fe @" & : 5_N Z6w%N Z6 w %  5A2 2.%J 2.% J 7 | 5 Nf ? @wp%e -B w J%Nef >C % @E%@@w"%w %Nef >C % w$Nfet @ Net Nefet >C 5%   ! 505%N w |$ 5 @ @m =    =@ @mH    @w $w #     = `}  T}  u-H><|;(0)f  5%  "<>|;  }   =@w#w #(%)f  5 u-== 7} Nf @ !f  5=5 @ A H % Nf @ wf"w V"@h\fe b.%Nafe b.%Nefe ?  w" 8ff & 5+N,fe @%%  fe  5Nefe ? N Z6N Z6e w ! F f ?  Twl!w \!D  z3! 0wH!w 8! xh & 7 %w!w !  Z67 w!w D̥: ̋̋w w X zh & 7D F:6 @%%7 "7 " v:7 " v:77 t "7 "7 "7̥  ̋ 8w0 w Ne A  w r@@r@@ # @r  @  @ f| @e @% J @N& & w l@ Z6 xB 5 xB 5 xB Ne C J%%N xB N xB  xB @ww D Z6ff 6%ww DB  E  /Ґ%  B- wr@w ZDC  @; f 5 5w,w D 5 & & Ae4  0ww DC 5 u E  /   u-@ww DC 5 B E; &E 5 ~  u-@w0w  ff 6%ww D   w&3 s a r+Հw& f Aew Nef '%ww xNeff '%wlw \DA555  ԋNeffe '%w(w DC 5 5 _*)@ E_b)%%_L)5 %*e5  AWp `eu5  0u%l%h5 %[ -5 e  Neffff )e   - @w@ @ EN /5% % % %Nf .     %_'@ _'N /5 %Nf . w hN%c%s%[Nf ff f& ,ew.5 5 5 5 %e%f %o%xDe5 5 @ @ EN /% % % %-5 Ԑ@ @ EN / 1 A@  5u%_X,N  . = _^,%+ @ _L,@ E 5 8%)%._+%e%E %    Ԑ@ _,@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _* _* N /%+ %- %0_*%9_*Ԑ@ _*N /_* @e! _)@t@]   x Ne 8A _)Ne 8A @H@pHw DC = 5%c%0u5 %s E  /r%%c5 %[r   E  /%%   . =  D- %cw( w D ̥^   %E%]    ww Nfef 0%@ w w BuNefef 0% = Ne& 5 @w@w 0D%    | w  - -w D@w ";4 er4 && A%4 %  4 E & & .e Ӌ 04 &72& B e ӕ-ӕ0B~ӕ.  ӕ0~ B~04&7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw (uDAB %u f& & He w5 5  W- W00u5  .u6BwF J@B V_2@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Azҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& $=e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E 5 z f 5  #̥-%0  E: E:  &E 5  z f 5  ww DuNfe& C%4 ;#%' > " "  ";  & C%S  w@w DE%& C%  w w  Z6e-w w D@ 5 @  \< 4 4 w< w , D  w*  r< wf 7=@+ @ a f A  %f 7 &  Ae   f A  4  Հ rw R D& @     @& A w( w  -D w e((f >@w 5  8@5 Z? N xB N 8@w u-uu8 xB 5N 8@ F w ^  h? wX w H D*\5% %-%+ 5 55 55  B5eA5 5 %.55  B5eA5 5  %E%e$%+%-  Wp B`e5   @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& ?e5 55w w r D  ̥9Wp @@`e     + -̥0  w& w  AupuN "; w A vB w N \A%wJw :Ntf >A%w0w DCԋ Ԕww DCԋ w@w DCԔww D  ԋwf@fwh w fwRwN wd f@wN fw"w w.f@U@f@A)wfw@e72 wf@fw7 fff@fwww w fwjwf w` f@wLwHw D w2fw,w( wff*wBJ f@ww wfwm wwmDžfw ww f@wl fAW @wj f17^5 eBwL 5w7L7H7D7@7<7874707,7(7$7 77777 777f&B &  fww w f BRfw fwv wB fw0 }f@wBw> w7@F@& BF*:AUl/usr/lib/uucp/usr/spool/uucpmyname/usr/lib/uucp/L.sys/usr/lib/uucp/L.sys.cr/usr/lib/uucp/L-devices/usr/lib/uucp/L-dialcodesunknown flag %s ** %s ** STARTarg - %s: arg - %s AERROR - (%s) ret == 0GWD FAILED %d%.7swAERROR - (%s) fprx != NULLCAN'T OPEN %swAERROR - (%s) fpc != NULLCAN'T OPEN %s%c %s %s xsys %s bad system name: %s wAERROR - (%s) fpd != NULLCAN'T OPEN %sS %s %s %s - %s 0666 %c %s %c %s prm - %s s - %s, r - %s, ret - %d file s- %s, local - %s %c %s %s %c %s %c %s rest %s permission denied %s S %s %s %s - %s 0666 %c %s %s wAERROR - (%s) fp != NULLCAN'T OPEN %sR %s %s %s - %c %s %s %c %s wAERROR - (%s) fpd != NULLCAN'T OPEN %sR %s %s %s - S %s %s %s - %s 0666 %c %s %s %c %s %c %s %c %s S %s %s %s - %s 0666 exit code %d pwdrrw/mkdir %smkdir - %s %c.%.7s%c%.4sfile - %s LCK.SEQLAERROR - (%s) n < SLOCKTRIESCAN NOT GET %sLCK.SEQL/usr/spool/uucp/SEQFr%4d/usr/spool/uucp/SEQFwAERROR - (%s) fp != NULLCAN NOT OPEN %s/usr/spool/uucp/SEQF/usr/spool/uucp/SEQF/usr/spool/uucp/SEQFw/usr/spool/uucp/SEQF%s%04dLCK.SEQL/dev/null/dev/nullshio - %s AERROR - (%s) f == 0BAD OPEN fileno %dAERROR - (%s) f == 1BAD OPEN fileno %d/bin/shsh-cstatus %d LTMP.%dAERROR - (%s) ret != -1LOCK PROBLEM - %sAERROR - (%s) ret != -1LOCK PROBLEM - %sAERROR - (%s) ret == 0LOCK PROBLEM - %sAERROR - (%s) i < MAXLOCKSTOO MANY LOCKS %dAERROR - (%s) p != NULLCAN NOT ALLOCATE FOR %s%s.%sLCK.%s.%sLCK./dev/null/dev/null/dev/null-s%.7s/usr/lib/uucp/uucicoUUCICO-r1/dev/null/dev/null/dev/null/usr/lib/uucp/uuxqtUUXQT/dev/null/dev/null/dev/null%s -r %susr/lib/uucp/uucp/bin/shsh-c/usr/lib/uucpAERROR - (%s) ret == 0INIT USERFILE %d..//usr/lib/uucp/USERFILErcAERROR - (%s) ret == 0INIT USERFILE %d%.7s%.7sr/etc/passwdrr/bin/shsh-c,,,,,,,,,,,,,,,,,,,1d1o1xx2f2eh1gB2cT2sx1lx1L1u2r1D1O1X1U(null)$ $ " =(\  AAAAAABBBBBB ;6 0# c kXQ   E  0  6 >  67t % 3w JE- 7 %Y@-Sc A x"7 e ? $ )@7h7 Z@e70@e x67@ )% $ )%@ 5#$ )%N,$ )%  n@ ?78  , , Z %5I:$ )% R$ )% %R  g$ )%%8 , p$ )%%  y$ )%% $ )  !@ @m& 50@ @m5= N" $*%N f N$ )% N j@ @mfe* @ g!@& 5-@5= N" $*%N f N$ )% N @fe @ % Ne$ )%Ne*ffef e e%   wAw A  N 3wAw A 5 NfeT @ N fe @ f ? f ? e5!*feT ?feT [feT @ _ xN% N$ )%NeT  Ne  NeT, <% Ne, <% $ )  NefeT *   0 w@% N$ )%~TNeT  Ne  Ne$, <% %$ ) Ne&fC eNefe @ D8fe ^" 5I:$ )%NeU$ )%  , fefeTef )e N \2fe_ NeT  ~Ne  % Nt$ )%Ne&fC eNefe @ DNeT, <% NeT$ )%_rNefeT fC 5@E%@NeT (jNefeT * NeTfe @ fe ^" 5$ )%Ne $ )% fe @ NEfe , fefeTf )eN \2fe @ _5NeT_% N0$ )%f ? Ne  NeH, <% I_hNe&fC e\fe ^" 5m^$ )%Ney$ )% NeffeTf )e_w <  5#N P Ndf !% N $@@m 5ȥ =N P wl-6 $ @5u/  Ni 8  N %_V@5Nf 8  _Ze Nj 8 _VN 5%DX_Vw -m ^" 5__BNef @ Nef  5},f 5= N $@t@m5@p@ȋw@7f ? @ @0fe@@ & "%5 9@ @a=eu-= eNfe !%  %fe ' & : 5_N \2wL,N \2 w 0, ( 5$ )%$ )% 7 ( 5 Nf ? @w+e -T w +Nef fC % @E%@@w|+w l+Nef fC % wX+Nfet @ Net Nefet fC 5%   & 505%N  w * 5 @ @m =    =@ @mH    @wf*w V* Nf %wB*  re H0 ^" 5%J 5 % -N %&z $*e  <@ % Nff %N \2b  ^" 7 @   + w j)Ne CNe 65" , f )e@@&@&@ &f )e Nff )ew(w ( j d \2 @ w(w (Ne CNe 65 ^" 53" , f )e@@&@&@ &f )e Nf )%N \2w0(w (@fe $*%Nfe $*%Nefe ?  w' 8f ^" 5+N,fe !%  fe 5Nefe ? N \2N \2e w P' F f ?  Tw6'w &'D  z3! 0w'w ' |   ^" 7hb b!w&w & RL \27 Dw&w &D̥: ̋̋w&w &    ^" 7 F !%7 7  x67v  x67f7 d ` 7V 7L 7B̥  ̋ w%w %Ne B  w%r@@r@@ J!# @r  @  @ f   Ae $A%  @N& z" w 6%@ \2 B 5 B 5 B Ne C %%N B N B  B @w$w $D \2ff 2%w$w r$DB  E  *Ґ%  B- w<$@w $$D 1 & & Ae4  0w#w #DC 5 u E  *   u-@w#w #DC 5 B E; &E 1 ~  u-@w8#w (# lff 2%w#w #D L  w&3 s a r+Հw"& f Aew "Nef f#%w"w "Neff f#%wt"w d"DA555  ԋNeffe f#%w0"w "DC 5 5 _$@ E_$%%_$5 %*e5  AWp `eu=  0u%l%h5 %[ j)= e  Neffff %e   - @w"!@ @ EN *5% % % %Nf z*     %_#@ _#N *5 %Nf z* w p N%c%s%[Nf ff f& h(ew6 5 5 5 5 %e%f %o%xDe5 5 @ @ EN *% % % %-5 Ԑ@ @ EN * 1 A@  5u%_'N  z* = _'%+ @ _'@ E = 8%)%._'%e%E %    Ԑ@ _'@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _& _& N *%+ %- %0_&%9_&Ԑ@ _p&N *_~& @e! _\%@t@]   x Ne 4A _\%Ne 4A @H@pHw DC = 5%c%0u5 %s E  *r %%c5 %[r    E  *%%   z* =  D- %cw0 w D ̥^    %E%]     ww Nfef ,%@ w w  fef ,% wv w bBuNefef ,% = Ne& 1 @ww D%    | w - -w D@w &;4 e4 && B%4 %  4 E w D  `< t 4 w& & .e Ӌ   &7& De ӕ-ӕ0B~ӕ.  ӕ0~ B~  &7j & e Pӕ-0 Dӕ.8 B~ӕe* ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .u BwF J@B V_.@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w xNefef 5& (=e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @wLw <DCB &E 1 z f 1  #̥-%0  E: E:  &E 1  z f 1  ww |DuNfe& C%4 ;#%  >    &;  & C%S  w@w DE%& C%  w\ w H  \2e-^w:w *D@ 1 @  `< 4 4 ww D  w r< wf 3=@+ @ a f A  %vf 3 &  Ae   f A  4  Հ rw D& @     @& A ww  - we((f >@w 5  `@5 ^? N B N `@wL u-uu4 B 5N `@ l w  l? ww D*\5% %-%+ 5 55 55  B5eA5 = %.55  B5eA5 =  %E%e$%+%-  Wp B`e=   @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& ?e5 55ww D  ̥9Wp @@`e     + -̥0  ww N 6 9ww Ne C< f ef&@ 5uNe 8w/%J %K  t  t5  7 N 7 5   %D-D-% eu Ne 8 w w DC%: p:e`m e rfw~ w n Q@f& e5uQ@f& e5u eeQu  $< ff J eR< ff Z eC r<R r< A@epe@ f& ew2 F p: 5 $u  p: 5u F  p: 5`u`u D7 p:%n:    0!  7 $w w   ԔAA WpCe  ԔԔԔ BeWpCe ԔԔԔ& : ed& : ed& : ed& : @%d 20e@ ed& :  w& w  A r nw mw D % A r  r e0@ԕ A r e0@w w AupuN &; w A vB w p N `  67Lm % Hw \,% @- e i%@! 7h! (  H  `E/! ( Ne   @aAap  % 555 h4&:! ,e @5&A! e  VhH! ( Ne dNe d7 4h$! ( Ne   hX! ( w 4D &o! e   `& %P % 5" r /h d "/ Z   ` & %P %  .  $ " Z ww  K5 - "- Z @ "@ "t!Neaw! ( %  @e0?  "fe0 Z w  w D `0 %  T @ 5 5 Be : r y      Ґ     @e Bef& e5P%/ % @w"     w  D@5N  @  Ku  % %`&`p  Ku  `&`ep % %2 %9   w^ &u@A H ȋ Wp q f55@ 5 Wp u u @ @- s=_N|! ( w DCԢӋw w  Q5 5ԕ*@eaԕ*N r@ @m % !  2@ 5*Qf! ( % c#  ! (  de%Qc "cw%/ %   @5% 5% 0% ,T 5% N  os 5 @mAmp %  N  M r5 @ _|5 @m5%_|  _| % @ "_|@ 5 %  _|@ p"_|N! ( _|w l5 % % %0+%.7  %+%-5 %-  %0%  @5) %%95 BD@5  h%9Wp Cae5 B5((  55555%| &5w~7Fa5w d8a7 2aw`$a a aE a T %%"`! (  H w  C Wp9@@`eˋ rYBWpDe# wf  e%Q#w   j`ww   ff %ww p"fef  % wX w DD@w& V4 e|m4 && :%4 %  4 E & & .e Ӌ !! &7n& $ e \ӕ-Vӕ0B~Bӕ.  ӕ0~ B~!!&7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He wJ 5 5  W- W00u5  .u!BwF J@B V_ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A"ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w : Nefef 5& Xe C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E Z z f Z  #̥-%0  E: E:  &E Z  z f Z  wN w > DuNfe& l%4 ;#%"c & xixi V  & l%S  wr@w \DE%& l%  w w " e- ww D@ <    4 4 ww D  w r< wf =@+ @ a f   %Yf  &  e   f   4  Հ rw D&      &  ww v"- wpef >@w B 2[mU7$[mU7[m[m[Ae vBZ7 Z55 a  a!RE -Z%m w Z%Ze rt 7Z \Z `e ~Z  \%fZbZe U?PZPZ `e 7>ZmU?2Z a7$Z ZZ?ZZU ew DYE ww D5 @ r5N V!wcB k-.|[||5A vBB-  }ee@ !ۃ `!ւ `@ r `BYw @fff 5& ew*w  fff 5& eww  5 %O N  = m555Ne5& Ne5m55'0Ne5 B& Ne57z  Be0" 5%m55 5 B5@B em a=%m7Xmw  %m5 B5Ne5& Ne55e0%m7X`Jʕ0%mʕ1  %m˕0 ʥ9 w rNef |  w`w J5@} wFw 6N tf %w,w Ntf %wf@w fw w "wfw w w "w f@w w w "wvfw w "wXf@w w "w6fwx mt p "wd wm^ fwN "ww@ fAW @w( fm1m7 5 ew " 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & m f@wp wl "w7RF@& BF "] '|: ,̼o P 1_p6A 67jl ;nO #= p=ף > B C C zE!tJ$!tJ$ !nO(k!hT! ./usr/lib/unitsattofemtopiconanomicromillicentidecidekahectahectokilomegameggigaterarno table you have: you want: * %e / %e conformability underflow or overflow %e %s*%c*cannot recognize %s %l units; %l bytes %sredefinition %s d o x f e g c s l L u r D O X( U(null)zkzk"=(\6n0cG kORUX[^adgjm6WoWo @jP;#0 @7x" 0T 0 0\"7 "aw " W z  7" p Tmp file? 7" "#   w &p[  zCannot open file 0 w Rw ready !7 B" " L=w   5HQ@  e DX w too many lines !!!z " ( 7`!7l!"` " &   "w Fp[ W #  Y7 Yw Y7 Y N! `" @@ :w vY7 nY"C _w w @w W w7 L7  0 9e a ze A Ze*# 1 W .#  < - - < eeW 0# -^ -Z eW . w out of symbol space ( & 1 1   d 7V"& HQ - "NewwX "deHQ  ew 0label not found 0# W@PPW  7 " . D T6 1  $!pMw out of code space l_D-"_07 P"j`M J-T   ,_D!HQ w Tout of code space 7`Mw"  w B   " T H  z  , y6xx\x.Nv  _e      f   T _ _T  _ &  _* ^  "   ̔" _eE   ?e   -" w if...else...fi imbalance  & V-R"J De> HQ PX  w /bin/ed-         F & & =  7%T@  z  0  b7^   w for/next imbalance 2@7* T $ @ Z "| ( " @ x    L " = <   w T . & |   w    w   ,& &  P     > <  = ע=  ע> 8 ( ע=  0 ע= @ fe . + -  J w :d  : w *j  . * /   w r   w x   ^ w   _ w  > (  ` )*  .  w z   w ,reserved name !HQ T7  0 J (  >w  ) [  w f 7  ] T  |&f@ @ @@  V& ע) N ,Tp[\S \\#  @w" &  D\  V  .\ 7. " 0,Cannot create b.out & 7  -" % \   l 4 ` X\ L7\Sw \ 2 *\w F$\w $\ w b\ "w T E\ dX w out of space 7.\S$K!SK   |  t  l d8@5@1eU) ( $ !S S  w & "  e\%( @@%   7,_ w d w Bad square root arg eww arg count f ^@ e1w xbad arg % B7w &f J 77 7 7@@@@F& 7, 7" ((w &  - w x0 Wp `e0  .Wff&  } - } 0  ~  } 0  ` 5w f0B`W@ &  W B~  e0VV \ B@e7& 7l-}      e}  w(mmB W0  .} 0}   .} }  Wfl"l" ;}   V7 77B@e0}  f -}  r f e0} &#e 5 =w 4w $ w \ 77*# &"#e E  [w z@ w <$]w dfA7  fA @e71@!  1 @ f5 f5u 7d@ h& `!7J& @ Ae 87 57 7 5VVfW@H7 7p wP @@ 7J 7: w6  7cR kmORUX[^adgjm6WoWo<  !XCX   B^ 7X fP Wp3e @7B Ef5w 4 * f5w  }7 0I(IW&fv] 7 I@% I@A&@]7 @L> Be0# @v]є ]    BA   W ]e B@e0v]m\ H` v]eȐ9 ȕ0 v]ȕ1 NH$ HH`0v]v]VVf5u @AfW@V fW@V  0V&0f5 f5 & Wf&&7d W?WA@mW@ @ V@Z L > 0 " BZ L > 0 VV f5 @&E@f& e@ B@~VVf@ Wf@@67 f@f @A B @7 &e# 7 # VVf5 @Wf&7Z  @W@@d V H : Bb T F Vw VV /tmp/btmab.out/dev/vt0listdoneqrunprinpromifgotoretufornextoctasavedumpfielseeditcommdispdrawerasargexplogsincosatnrndexprintabssqrlastwww &w UF!N!V!^!f!n!v!~!f!@@!hI@!hAy1?ϑy"?D{Av#OP#C!+C|]2CU*j 4xBJh{CW*RsCL~Sz> "@NnDOLX2xة3I䔶TX]1 D!L%dIgN5&GbqhDK-?E=sMBԝ`=B.pF:|+eiD(/zC@;\)@3d5@3e1@rzlB#"3h@?ØGe@lB,k$aXUcW kQ  L .qWoWo PATH=/bin:/usr/bin case $1 in -T*) t=$1 shift ;; *) t=-T$TERM esac case $t in -T450) exec t450 $*;; -T300) exec t300 $*;; -T300S|-T300s) exec t300s $*;; -Tver) exec vplot $*;; -Ttek|-T4014|-T) exec tek $* ;; *) echo plot: terminal type $t not known 1>&2; exit 1 esac cY kIVoVoVo trap "rm -f $$sym?ef; exit" 0 1 2 13 15 case $# in 0) echo usage: lorder file ... exit ;; 1) case $1 in *.o) set $1 $1 esac esac nm -g $* | sed ' /^$/d /:$/{ /\.o:/!d s/:// h s/.*/& &/ p d } /[TD] /{ s/.* // G s/\n/ / w '$$symdef' d } s/.* // G s/\n/ / w '$$symref' d ' sort $$symdef -o $$symdef sort $$symref -o $$symref join $$symref $$symdef | sed 's/[^ ]* *//' c[ k*  ss @& 0  6 >  67DL % w % G $ @@ t 5G %N (G !0Gw,Gw,G%@ ^ 57G'F mFȥ-$4@F mF& ! 6@F mF& !  F @ -F% 58@ ^ w-FM@ ^ jFF G "ZF mVFD ! /D d!  CDh@ "%j@ ^ ̕/ D7ENED F% Ew-E E @D ! 7 E7 E  w$w $ @@ & !  ZB &b %w#-jEjE dEw # ~ |@ !  B &. %w#@ ! @ ! ˥- @ !  D-DD Dw 2# A@ ^  A@ & !  "& %w"-DD D w " @& !  2A 5 |@& ! _|@_@& !  &  %_ 8’¥+ @& !  @& !  f &@& !  D &* @& !  " &l @& ! 9@ " 5%*@   A  A    & _A ^ f9A& !  ~ & _?A& ! 9FA " 5%*QA  bA  mA    & _sA ^ fA& !   &$ _A& !   & _A& ! 5 ˥- @t5@me5 ˋfR _A& ! "¥d@¥b` ¥c ¥f 5 f _A& ! `A 5A |& !  f _A& ! $A 5A @& !  f _A& ! - @" 7@A ^ ^A ^  #7@ #7@7@ &  _A& ! #G $ A ^ ^A ^ x@\@t@X@ & _A ^ ^B ^ ww r@WpqVE?WpqXE?WpqZE?Wp ?eVE@w>w .%8B ^ -??  7? 7?$Bw? ?m?w D& & w w D& & w w zD&  wlw VD>  wLw <D w8w (D&Q>>>> f& Hef 8%ww D&Qn>h>>> f& ef 8%ww D&Q,>&>T>R> f& ef 8%wrw bD&> 8%wTw DD&= 8%w6w &D-= w w D&= 8%ww D&==e@ vf 8%ww D%-\=A @@E- ww D4=E- wvw `D|C  twTw D5 |C %B ^@ m< ^(B ^D ^.B ^C  V8N8E F8tC 25%y % 88E 8tC 25%  @ tw w r< << @7w>) >( > -> >>C9& #% 9  r> l> h> *"w -99-99 ww DCB¥+   Wp!w¥- w  7^>_XB ! ZB !  DxL xL@ m8 0 xL  w@  L %G "xLt= %  = w ]Bf V 5 % (Ce@ @ EN 2%:%Z#Nfe ! @ B@ E>%?@ @ EN 2%:Ce @(( @ EN 2 %: Ne NN 2%N Lww 5 5 Gf $ _B ^N ^sB ^ wf@ 27E%@C ˋ/ 7N "%5 _@@%@@5 _ uB V# 5wB ^N ^B ^5 _  f f *#eNfef #% B ^N ^B% N *"5 De@t5_ e.^..SCӕ/e5 %ʋ Nfef #% B ^N ^B C-@ 7x5Np5f F% =G "D "%B ^  e eu-_ N *"B "%=B ^N ^B ^@_w ,DC̥.˥. w&  w DC55 K *B ?; [H5 0 - ]! )  &  wœB- u- A @@5P5@- ’   &  u-w 0DCˋ cf kZ*  ss &  ̋ ww DC3 ' +  3  7~3+z3r3 2%% + 7+^3e4w 3 + D3ww 6B ^ BC ^C ^Nef " @E%  C ^RCIC V 5fe %Ne !@a0 N *"  fe V#  TC ^N Lww Cf  ww Ne ~#  wr@@r@@  # *"r  ^"  *" fqCnCfC "e "% L *"N& r w @ L $ 5 $ 5 $ Ne % L%%N $ N $  $ @wVw FDB  E  2Ґ%  B- w@w DC  @; f  5ww  dff %ww D D  w&3 s a r+ՀwZ& f *#ew .D+ +  +|C   n+ ?b+ ^+w |C  w D@w  4 eM4 && #%4 %  4 E w  DuNfe& 2%%4 ;#%|C'* pHpH   & 2%%S  wJ @w 4 DE%& 2%%  w w tC Le-)w w D@  *"   4 4 wr w b D  w`  r< wf =@+ @ a f V#  %V/f  &  *#e   f V#  4  Հ rw D& @"     *"& V# w^ w N tC-D( wH ef >@w  Nef  w w   D \5#D/f F! 2D@Nexf& %@ 6   --w 3Dx@ex5zv%v v@v @aAv AmpzNexD "  %ч Nfex " x-     w DCB̥:̥-̋ ҕ/Ҕˋ ̋ w w D / &  w w DC ԥ==̋ wnw ^5  "5M N $ N "w* u-uu8 $ 5N " >w M ww D  ̥9Wp @@`e     + -̥0  wvw b j."MU7\. MU7R."MP. MH.Ae vB4.7 6.55 a  a!RE --% M w -%-e rt 7- #- `e -  #%--e U?-- `e 7v- MU?j- a7\- T-V-?N-J-U ew (D*-E ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `z,w `Nef ,!  wNP w *A@I#EEFNuww N tf #%ww Ntf #%ww DC̠wԋ w DC ̠ԋww DCԋ w@w lDCB ԋ  @wNw >DCԔw6w &D  ԋwf@fw"6Dw0 f@w fw!w!:Dwf@U@f@A)wfw!@e7!)!@Dwfw!w!)!HDwf@fwx7L* f@w^!PDwV fwH!wD!w@!TDw0 f@w&!w"!w !\Dwfw!w!dDwff*wBJ f@w w jDwfw m pDwz wm fw pDwXwr fAW @wZ f.M1.M7N 5 eZ$w< vD 5w7L7H7D7@7<7874707,7(7$7 77777 777f&^$ & .M fww|Dwl f BRfwtDfw0 }f@wHwDDw7%Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BF pwdrUsage: find path-list predicate-list (!find: parsing error find: missing conjunction /find: bad starting directory TRAILER!!!-o-a(!-ofind: operand follows operand !()-print-name-mtime-atime-ctime-user/etc/passwd[0-9][0-9][0-9]*[0-9][0-9][0-9]find: cannot find -user name -inum-group/etc/group[0-9][0-9][0-9]*[0-9][0-9][0-9]find: cannot find -group name -size-links-perm-type-exec;-ok;-cpiofind: cannot create -newerfind: cannot access find: bad option find: incomplete statement < ... >? ./TRAILER!!!find: cannot copy ;{}rfind: bad status-- .find: cannot open find: cannot read find: cannot read find: bad directory tree ..find: bad directory find: can't write outputread input If you want to go on, type device/file name when ready /dev/ttyrThat didn't work/bin/shsh-crJrJD/bin/shPATH:/bin:/usr/binsh ;;6VM0#cs kZu! rr  0  6 >  67, % w w&&w& \ wtw d-&&w\v& p&mh&̥(̥)  &   *    7$&w DC$& \ $ \  f&  B&  @  xP   $$w     w X$f \ $f \ $ N 5uN 5u@  x\ A@@mAm@ 5u ff%& ewA@@A ffff effff ffff w V@ , xf %f  %f  %f  %f  %DwD%f  %f  %!%f  #%f  $%w N DN C B  =wTw DD  ԋ &% %w$w  " @aA`H )%   %w @`ȋ @aȋ,%w Nf \ .%  & % 8#& ~  && 0 wrw bD .,& e%"1% ,f  %"""&& H%3&"@w w @% ww DCu u5 ”B- ̋ ") w@e5 7B"57h"%^ ^" D-2 ”%*%\˥{5B-ԕ  $* * . [( \_5ԕԕ$  @-ԕe@-2 ԕ 5 5 @m %5”%^” % 1 %- ”%]  @taAEHj taEHj ”%]5 &Nmx %e_B” _H (" )4 n_P {@%1_%9_1B- ԕ$_% @ + 2 ԕԝ$ _B@e@-* ԕ T _B _5 ”5 %0 %9 AWp `eu ”%\%,% T%,@ ((, ”%\ԕӥ}-  T_B EE@ _B. _B$  _w fDC 47(&  &  7 w:œ ԋ ˥&  ԋw DC # xr  wԋ̋7E5@t`AEAj @0e 0p' 0' * N J T: 6 T ( e_  *   ԋ  ԋ e *   E5@t`AEAj @0_  E5@t`AEAj @0 r ef 5p' '@5&f \ % _Dm_ 5p' '@5DmN&f \ %  &  _D _ԋԢ E5@t`AEAj @0e -_&  _ _w DE7b% NEJ7Hwrw bDCB 3  Ԥ wDw .NI%>& % ww 6 7 7 Be' M% %e@e a% we 5"%, 4 &7*7 $m %@  5 -#ttC   $5%,  77  e%@ e -@5  ]p X xh$u% VR0 "e5%  %#@  _  5" % %@e ˆ_ %  _ _ N%  @ t# D@ t# 5@7u@ 5H#@ B#b 5%    A p #@ B#  @ _ xp$%  %&  %&   _ 7J_ & h%72_ && & & & & & & f&&&&&  &&& 2 z& w 4 Nfef <%@ w w  6&fef <% dw w BuNefef <% = Ne& R @w w uDAB %u f& & e wF 5 5  W- W00u5  .u%BwF J@B _$@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A&&ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w ,DCB &E R z f R  #̥-%0  E: E:  &E R  z f R  w|w lDuNfe& %4 ;#%6&  ((  c~ kw! rr & %S  w@w DE%& %  wL w 8.& e-0w*w D@ 4    4 4 wf x@w D5 5  "̥9/&  ff eee@ ee@ 5u     + -̥0 A@  w(A@w  -U7 -U7--Ae vB7 55 a  a!RE -%- w %e rt 7 v `e f  %NJe U?88 `e 7&-U? a7  ?U ew DE ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `*w Nef   ww N tf %ww Ntf %ww DCԋ w@w DCԔww vDC 5 Ԕ B- B-@wPw @D  ԋw8f@w fwww&wr fw m &wP wm fw &w.w f@w w &w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF$$$$$$$$$$$$$$$$$$$$     (HNTZ`"<R @.  B     8 8 p    +    !"#$%&'()*,-./    & 00;(     )    T ,8DP^fv~|&+-*/%:===<<=>>=!=matchsubstrlengthindex-*[0-9]*$[0-9]*$10[0-9]*$[0-9]*$non-numeric argument%D0000000%d%d0%dToo many '\('sRE error%s state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d %s 04do&xfegcslL<ur@DO*XRU(null)**&6-c k# |rr z 0  6 >  672 % <w ZNb#% :% <wHw 8 X r y C@ =: 8%^h z^0, V %]YDp,@  (7N     w     ĕ    5   f%^ Tċ ĥ- |+ 0j+Ġ%^\ nP0, H w  J "##E #$ % wğ w m#% :  <ww v%^  p@g 0 i 0 l wJw :N  lw,w %^~ t p@gh pi\ pl@ Jto@ >to8 4ww %^& : p@g pi 0 l@ to ww z#% :  <wlw \@ i7  0 -N T N0r  @ l@ i @ i :@ l :ww 7 F@ 0 -(     b @ A pH - ږ֖֖7 X e  5 5 _@f_ @`0v %@ e 5tj~  pH -`@ e 5n _@n 5tl@l @g_%@av_% %h% @`v %!@l l,5r@l l 5p B-rF@p,@av p %3@l l,5r5 t%t(@l l 5p @p, p@-t B-r% t@@mtv t# j n C-j_ @av_x  pH -@ e 5n _@n 5tl@l @gg%  @l &l& Z% & %@l &l& e  U! @P% @P.@l 0r 5th@l 0r 5f @f t % @f t  f B-h n C-jN  $% Ne   %@f@tap%@ta𝎓% %_ u-_Nww @ i#@ %@  @1@ i  '@ %@g@ l@ %@g@ i  @ l   wt@ l @ i   w <@,  , @-@ w   w  $ e -Xt e   t %  -,7$ w D-w m% @ @mrn ht %L F0t -wRw B -@ 5to@ @g +     wN N T @ p-i@ l  * %  ((w E x ?7 < 9 6 e  < A$#@7& % 6֐#% :% <(    e@ȥ-b #% : wL e 2 : w>  , < & *   N & e <ww p  f . 7N#% :% <7 ď  7 7 De5& L%M Ý&ftE@`%f_ԥ  H L 2Re>w 8ew 5Cf_< @e!_ & L%_   Ԏ!%؎N$ j ̎Ǝ$ e N# j  w   %  hN$ j ^  `Z ee@ f& ef&$ |e "   $ beD-0@E ?  $@&E t @e@-@e5 @E ? 5!_ x$@&E t @e!De&r L%_2 @e&T L%_2 5! `@-`5 7`w`w _ ԥ  _ ew 5Cf_ _ @e! &Ҍ L%%_2 @e!De& L%_2 @e& L%_2 5! `@-`5 7`Tw`Rw L_ w 6 L7 J7 HBe0 2.$ j%e@e +$ <wve 5P"%,  77 m%@ F 5 -"C   #5%, v 7l7 f: e%@ e -6@5  ] X x:#?$ < 0 P"e5% F %"@ F _ 5P" L$ j%@e ˆ_( w$ j r_(f_> \N$ j @ " D@ " 5@7u@ 5"@ "b 5%  F  A p "@ " F @ _ xB#  x_& z%7_& 7t    \& 7_w ~ D ff (%wl w \ Nfef ^%@ w@ w , $fef ^% vw w D@w  J4 eb4 && L%4 %  4 E w 8 uDAB %u f& & e w 5 5  W- W00u5  .uc kN# |rr$BwF J@B _F@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A$ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E t z f t  #̥-%0  E: E:  &E t  z f t  w2w "DuNfe& %4 ;#%$) L ^^ J  & %S  wV@w @DE%& %  w w $ e- ww D@ V    4 4 w~w nD  wl r< wf =@+ @ a f .  %ʅf  &  e   f .  4  Հ rw D&      & . wjf d@w L $xU7vU7 x vAe vB7 55 a  a!RE -%v w %e rt 7 n `e p  n%XTe U?BB `e 70vU?$ a7 ?U ew DE ww D5 @ r5N J!w5A vBB-  }ee@ !ۃ `!ւ `@ r `4w JNef   w8w "N tf %ww Ntf %wf@w" fw w %wfw w w %w f@w w w %wfwr wn %wf@wV wR %wpfw> m: 6 %wP* wm$ fw %w.w f@ww%w7Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BF 2   n  t z               ( )   (44zegrep: %s egrep: syntax error egrep: regular expression too long something's funny egrep: unknown flag regrep: can't open %s egrep: can't open %s %s %s:%ld:%ld:%s:%ld state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d Vd<oHxf$egcslL^u<rbD@OLXtU(null)``%6c k3k n q t w z } )juju R 0  6 >  67' % 4 w R 4@-1 f  t  d z! r! @7d!@ A1`@  e%%_% ! !@7$,   7  .  % 4 #@& l 5 5 &  e $5u A@@mAm@ f& ve5u ff^ eR H D E8 heu %% !  -"! l "#    x u-u-uuuu ff e $5 'u #!  #"! l "#    x  !  !  w"! l "#    x w DC̋  w ̢̋ˋ̢w p  E h% wL% = =w "D = -d=w T3! D 3! A`} w D_% U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w  N ff& e5u4 # ( 4  N ff& e5u%%w j @ 0 @ & @& e5u #A@w @  @A@@ 5`u`u w :ff %w w Nfef 0%@ w w v Dr n  j  F  T ?H DwF   F w & D@w  B 4 e(4 && D%4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .uD BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E F z f F  #̥-%0  E: ((E:  &E F  z f F  wXw HDuNfe& %4 ;#%  D $$ B   & %S  w|@w fDE%& %  w( w   e-ww D@ (    | 4 4 ww D  w r< wf =@+ @ a f &  %f &  e   f &  4  Հ rw D&      & & ww  - wzef >@w L *(U7((U7*(((Ae vB7 55 a  a!RE -p%(( w b%\e rt 7F f: `e *  f%e U? `e 7((U? a7 ?U ew DE ww D5 |@ r5N B !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w JNef   w8w "N tf %ww Ntf %wf@w" fww!wfwww!w f@www !wfww!wf@ww|!wpfwhmd`!wPTwmNfw>!w.w0 f@w w!w7:Fw C  5!BA  D & r@rr @`   wl& BAN   C 5 N B A @ A-  A    w @& BF BB/usr/dict/wordsrlook: can't open %s (doxfegcslL0u r4DOXFU(null)&&0!  AAAAAABBBBBB 64(c kX_ b e PSo T=/tmp/$$ PATH=/bin:/usr/bin O= OTWO= S= N=yes OPT= ret=0 prof= L=/lib COPT=/lib/c2 LC="$L/crt0.o" LIBS=" $L/libc.a" NAS=as LD=ld CCOMP=/usr/lib/ccom ECHO=echo trap "rm -f $T.*; exit 1" 1 2 3 15 trap 'rm -f $T.*; exit $ret' 0 for A do case $A in *.c) B=`basename $A .c` $ECHO "$B.c" case "$S$OPT" in -S) if /lib/cpp $O $A $T.i && $CCOMP $prof <$T.i $OTWO >$B.s; then : OK else ret=$? fi ;; -Syes) if /lib/cpp $O $A $T.i && $CCOMP $prof <$T.i $OTWO >$T.s && $COPT $T.s $B.s; then : OK else ret=$? fi ;; yes) if /lib/cpp $O $A $T.i && $CCOMP $prof <$T.i $OTWO >$T.x && $COPT $T.x $T.s && $NAS - -o $B.o $T.s ; then ll="$ll $B.o" else N=no ret=$? fi ;; *) if /lib/cpp $O $A $T.i && $CCOMP $prof <$T.i $OTWO >$T.s && $NAS - -o $B.o $T.s ; then ll="$ll $B.o" else N=no ret=$? fi ;; esac ;; -S) N=no S=-S OTWO=-l ;; -X) CCOMP=/usr/scj/pcc/comp ;; -O) OPT=yes ;; -[IDU]*) O="$O $A" ;; -c) N=no ;; -) ECHO=: ;; *.s) B=`basename $A .s` if echo "$B.s:" && $NAS - -o $B.o $A; then ll="$ll $B.o" else N=no ret=$? fi ;; -p) prof=-p ;; *) ll="$ll $A" esac done case $N in no) : ;; *) $LD $LC $ll $LIBS ret=$? esac c k\ RoRo exit 1 c k.NQTWZ]`cfilٙ  v^= 0  6 >  67$U % ,dw 2v6 7 7 Be`=  lZ%e@e , <,wue< 5b %, d R7Z7 TmP%@ 5 -0^&d l!%& L & & LK79_` && &3> !%& L &4> %& L &&&&&5 KeP:&&&& 0:&&&7_6& _6&_6&_6&_6&_6_V78_`E_VG_VD_VF_V&@_6&& K_: G&+& G&& fL_:&&09& L_Z& > H%& F%& _6> $%&_ _`& ?_6 & <_6 "& =_6 "& >_6 &:_6 &A_6 &B_6 &C_6_&&& J_4(8$8&& I_<_8&&!&&&#_& FL_<'()&&&$ Ke_<&7&&&%w ^o ,"@ r _  _ x>"t}w0o  _  _ ./0 58 59 555555 5H~5HIr5If5-Z5R5J5B5:5S? zh >' $ 75;S? zh ,75J_JK_J7>&& R? $$e742_J> R? ] && R? $$e741_Jb" ;_Jb"#_J$_J!_J"_J&_J'_J(_J)_J:4_J,4_J4_J 4 _J5_J7_J%_J34_J3333>&' h &_~J"7 5_ z"_ >"  _Jn57v3f5_JV"7 T57 R5_ V"7 B5>5_ C_JB_JA_J:_J<_J(_J)_J^_J$_Jn4 2 t4 2472?_J>"&/44 _ ' <, 4 _ 4>"40>> &> 8 &> $$e_@'R4"> H4XB4 >64 >*4\>44> 4%4;>'03]>n"\30>> '71 3=_J>_J'33> 3%3 >( <, >" 5_Z X_:N( 282eR?5@27*2% e% 5_%_ ,5= %_ BtBm-_Wpe,"!_Wpe,"%,"W @71% __@j _= _7,5_ "5_55>'_5 & J %_%@_@71 %  0 WpDe,"_ %V@ rte5@t`-Wpe,"!Wpe,"%," @70% VW@&tBm-jWpe,"!Wpe,"%," @780% 12%_ @70% @73@R? 7/0R?3e3wg@7/%  / %@_6 L0_* 7>07_h   ȝh_h \ >a _h w $g  @eH-wg w f hwfw fZ P LHBf >a wfw fw.% . . wfw fN& & & < (;((e&A ;e&@ K%5 f K%57 T; bJ; p|I:7N  5N :@wfw f@ r y((@:: :p|Iwe@ b@ b@p@4 '     @H( b,%    @ b@pw 4e@ r y,(@ |D @ |D n@ 0 |D N n5 wd@ :@ :  '     @c( b,%    @ : w LdD 5 # {F̋œ{F % P |F  %-% .|F 3|F N n5 |F 'wcw c}( b, wcw cD  r y0(7 8 0 |G -8 Ne& |D H% j8  1|DwZc A p|D|D * %     ( b,%     w bD r y4( %|G |G 7%=c k'.NQTWZ]`cfilٙـ     wrb            ( b,%     w a @%/5@ ' : @ A B CN  @p-  N wvar6 %|Gd6 |G V6w FaDCˋw:a w &a   @m5-6 e@ %|G  -5= w` D-w `@  l55 }  %|Ge= -5@w`w z`  @a 1 |GA|Gp@Aa1 -Z5 @aAaZAZp %7 255 X*.7&, D-_e @ap@@m@ 5|I@<  x8(@@` @`@X@aZ X %%@` @`@X@aZ X @5@@a@@a@X@apZ X %%@ ( @` @`@X@aZ X uXV5 5 _5 5 5 @ |BA A|B @`-3!@ t l5 @ @ap __uuVX@ |B D-_e@@m@@m@@m@ @ap@ 5|I@<  x@(@@`@`Z @`Z@X@aZ X %%@`@`Z @`Z@X@aZ X @5@@a@@aZ@@aZ@X@apZ X %% @ ( @`@`Z @`Z@X@aZ X 5 u-X_@@m5Z@@a0Z7 1  0 |G -r1 g @a@a0 @a 5|I@%N%?Ap !%<%= @@& ( %>1@@& ( % @a |D e %|G @b |G 0 C- D-Nef|B H% %% n0  A 1|B @ @aAp @ @ap  @ @aAp @ @ap _}@0 eD-  u-_ Et@a=@WtAap  |B |B n 0 |B @a5@pt@mWtAmA Aap  D-uu @@wZ@t5` %  w YDC % e5  t`Ӌ wY#  Ӌw |Y%( b, (f q Nf  %* e@ȥ-af](@& R 7z @) b,% e% - @ȕ-@0  -  w-ew--- -  X  ,d 4 -`p0- t%@ȥ-Ftf-ȕ _0Z-AH_0@ȥ- 7 7"@=N) q T _0@ȥ-_0i_0,KK)f Se_0 ,dw W /)) R 5_Ne tNe h a >)@& q N0A)@& R 5Nffe rReNfe Re5N bN bwVw VwVw |Vfe~+ 6s%5C) dt+ ,d f+`+ n7 X+N l7L+5@e5   5 (    =    } ;-* @ = w* ** n7 *@  l7p*57j*p*}e@ ȋ w6Uw &U% N7,N@,%%L @tH%J, lZ wTNS,w T%%L@tH%wTw T>&`, : &^, $$e>&Kb, $$e7)>&m,  &j, $$ee7^)>&r,  &o, $$ee78)>&x,  &t, $$ee7)>&~, | &z, $$ee7(>&, R &, $$ee7(>&& , $$ee7(>&& , $$e7(e7~(>&& , $$e7h(e7\(w6Sw &S l5, b, 5 @ @m %@wRw R@5 >55 @ @m5 N n= @  n@0 N n@5  % N n5 wZRw JR Nf $   N n5 w&R l N, b,%N ' s53s N $ @m3 @mw QD `̋ r@wQw QD $ @m & q wzQ  w ^QD &-&, b, E U 5  7 Z(54w$Qw QD &-6&, b, E U 5  7 (5   n4 E N '4wPw PD%K '  &5  ,  f45 U 44wZPw JPDd%K l' R &5 85   n4 4 & 44&,4&%fe 3e Ne '4E U wOw OD5 , b,%5  4&&&&- b,ewhOw XOD q  l-- b,% q w.Ow O7 T(J&7F$_($ (e$ $_( *#= ( #7&?#-&8z0% R 7 %|0 b,%# K%ԐX N JE> 8[ z# %   E 8[% %ԕ %M K0 b,%  %wM%8 b7  "e" "_|' w Mu == >&f $ &f $$e5Nf Z% wfMw VMKMf"% X5  ̥ ̥ ̥ ̋_x* %2 K0 b,%@t5Z-@t P-@tP- n@t0 P-@tP-@tZ-̥ ̥ ̥ ̋5 %2 K0 b,%@t5Z-@t P-@tP- n@t0 P-@tP-@tZ-̥ ̋̋  ,@t5Z-@t P-@tP- n@t0 P-@tZ-@t0 P- u-w$!@tP- , @tP- fAWt1R-@tUZ- -27*&>0 %& e l5 @tP-f0 lZ% -wJw J $5%"1K@teN- $&Ԕ4 5?4 %M K1 b,%wpJw `J%2 N"1 b,%@teN-wBJw 2Jf<18  :.wDHw 4H 4'0'_,/N H7&7&`u?!@% %L %H2 N1 b,%@ 2@&fe %55    @  w.&w*&TUwJGff V%@5w G -N :.55 %%XUwF1 b, ff % <ff %@  :.55 2 b, ff d%hE ^U @&P00BE 8U @ :.55w E@ :.55fff 0e55ff %wr$wn$\UwEw vE N $&5u@5   n@0 @E @U A1@&=2 &f $$e55w#w#`UwDw DN :.55@5 5N $&5ff %N@&  5% %%   fH#bD#dUwTDV4#R0#w 6D N :.55 5ff %@.  x1N>2 b,% ""hUwC@ :.55 5ff % ~`"z\" @ :.55 5ff B%  w CN :.55@ :.55@5 "@5 @0A1555 N $&f , & q 5ff %ff v%@  x1NZ2 b,% .!*!        lUwAw A@  n@0 @0 wAw A5 @t P %%y2 b, @teP5@tePp1P~5w. w* pUw.Aw AN :.55N %5ff %N ,55wwtUw@w @rN :.55N $&5 q 5ff %@(( :.55N %5 u-uff ^%@-L :.55N %5ff &%@ 5 5 @@@-@@5@e5@ 5`} @ = 55Nef Z% w|wxxUwt?w d?N :.55N $&5ff Z%@ :.55N $&5ff *% \55u.uu} @@ &f Le ww|Uw> &f e w x>z5 u l55_>:} _::% % e_>:%@%@e5azl  @ H=@e@- N2 b,%@d A x1<Ne2f Z%N q5`_>:@l!@ld =@l55   N2 b,%N :.55@5%N %5% 5&fef e 4%5 &fef e!%5%@ 2N $&fef Z%ff j%N q5` _H8=@w* N :.55ff %@ :.55wwUw6w 6@ ON :.55 @ Off %@ %O4@ :.55 @ 0 Off Z%@ :.55w>w:Uw6*&w 5Nf T: 55@ @ lZff %Uw5@@&@& `H%www t5tN :.55N $&ff l%@-ZV @ :.55N $&ff *%5 @5N #@E @U A1F @e5 % ˥ ˥ % ˥  =N^3fe Z%@&fe &fe $$eˋ %   ̥ ̥ ̥ ̋ x55@ 5A1w$w Uw3w 3N :.55 ff %@@-ff %@ :.55wwUwn3w ^3N :.55 _C62&ff 6%@ :.55 wwUw2ff %w 2N :.f& %@-% :.55 _xD^Z&ff ^%@ :.55 w.w*Uw1ff %@w 1u@5@5 Na3 b,%@55 %C@ @m5Z@  n@0 N 'A1@ @ :.55"wDw@Uw1 ff %@5  w 0@&  x1Nt3 b,%wwUwv0w F0u@ :.55% N $& qN %& e N % & 5)%%%N %& %N %& LN3 b,%ff % 555&f e wwUwV/w F/5D* :.55N $&fe |q ff *% "fe |q  Ne q% Ne3 b,%@-Ne3 lZ   Uw.@@&fe `H%~ z w ^.wf.w V.@555 t   wn wj Uw.w .N :.55N $& tO@& q X %  t O % % 3 b,%%| 3@& P% 33@& R Wt1Ot O @3 b,%@ 'Wt1ON3t&O 4 ז%& %& K%5wj)w Z)"5!h7wJ)Ne5& pe5 5A5@ 5@557 A55@ 55uW@557v57f57V57F5W@uwfuwVuwF55uw5w j(5& e7w`(w P(5 5!Tw8(Ne5& pe55A5 @555A5 @5@5 5O5<%< 5O5e<% 5C r Bv V5C r Bv V55 555@5 %_BNw '"5 @"7w&755775& e55u55757x57h55@57|57l57\5N557huu& pew 8&5"55Ne5& qe555@555 Ne5& qe5w%w %5& ~ew%w %Ne s  w%r@@r@@ h!# qr  r  q f777 Fre hr% U qN& R w $@ b s 5 s 5 s Ne t U%%N s N s  s @wf$w V$DC 5 u E  8[   u-@w $w #DC 5 B E; &E >a ~  u-@w#w # ,ff b%w#w #D   w&3 s a r+Հw<#& f rew #Nef8 S%w#w "Neff S%w"w "DA555  ԋNeffe S%w"w "DC 5 5 _4U@ E_lU%%_VU5 %*e5  AWp `eu< 0u%l%h5 %[ Y<e  Neffff Ue   - @w!@ @ EN 8[5% % % %Nf Z     %_T@ _SN 8[5 %Nf Z w N%c%s%[Nf ff f& Xew 5 5 5 5 %e%f %o%xDe5 5 @ @ EN 8[% % % %-5 Ԑ@ @ EN 8[ 1 A@  5u%_bXN  Z = _hX%+ @ _VX@ E <8%)%._X%e%E %    Ԑ@ _X@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _V _V N 8[%+ %- %0_V%9_VԐ@ _VN 8[_V @e! _U@t@]   x.8Ne fA _UNe fA @H@pHw DC = 5%c%0u5 %s E  8[r7%%c5 %[r7   E  8[%%   Z =  D- %cw w D ̥^  77 %E%]  77  wBw 2Nfef \%@ w w 8fef \% *w w BuNefef \% = Ne& >a @ww D%    | w\ - -w 6D@w l4 eU4 && 6s%4 %  4 E & & .e Ӌ T8X8 &7 & e ӕ-ӕ0B~ӕ.  ӕ0~ B~T8X8&7 & @e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw xuDAB %u f& & He w<5 5  W- W00u5  .uZ8BwF J@B V_^@  o x d u   ((     ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A8ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w ,Nefef 5& ne C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @ww DCB &E >a z f >a  #̥-%0  E: E:  &E >a  z f >a  w@w 0DuNfe& t%4 ;#%8 p RQRQ l  & t%S  wd@w NDE%& t%  w w 8 be-ww D@ b q  n 4 4 ww |D  wz r< wf c=@+ @ a f r  %6f c &  re   f r  4  Հ rw D& r     q& r wxw h8-2 wbef >@w 4  H9 r  Wpf&  reV 6s%% w q |Vҥ "Vw R9- 9N qf t%`9 t% q& t%c9 t%wfw V  e e  e w8/& ^q   f9 r 5 N e  q N qN qw V&f 6s%% w V̥ %4V w LN p WNef r M@E% F p9 r >fe& 6s%%/ u-p94V q Ne4V |q Ne4V ht u-u- q4Vw q w D*\5% %-%+ 5 55 55  B5eA5 <%.55  B5eA5 < %E%e$%+%-  Wp B`e<  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& pe5 55ww D  ̥9Wp @@`e     + -̥0  w w N h kw w ~ Ne t< f ef&@ 5uNe jw/%J %K  tf8 t5h8 i N i 5   %D-D-% eu Ne j w w DC%: rle`m e rfwd w T Q@f& e5uQ@f& e5u eeQu  nV< ff 0 eR< ff @ eC r<R r< A@epe@ f& ewz F rl 5 $u  rl 5u F  rl 5`u`u D7 rl%n  v9  0!v9 7 nVw w TV9ԔAA WpCe9TVԔԔԔ BeWpCe9ԔԔԔ& l ed& l ed& l ed& l @%d 20e@ ed& l TVw w A r nw mw D % A r  r e0@ԕ A r e0@w w VU7VU7VVzAe vBf7 h55 a  a!RE -.%V w %e rt 7 Xs `e   Xs%e U? `e 7VU? a7 ?|U ew XD\E wJw :D5 n@ r5N l!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w fff 5& (oewzw j fff 5& (oewVw F 5 %O N  = V555Ne5& qe5V55'0Ne5 B& qe57. Be0" 5%V55 5 B5@B eV a=%V7pVwZ %V5 B5Ne5& qe55e0%V7q`Jʕ0%Vʕ1  %V˕0 ʥ9 w 5 = ww Nef Dq  ww 5@m 77"whw X5@} wTw DN tf r%w:w *Ntf r%w w DC ̠ԋww DCԋ Ԕww DCԋ w@w DCԔww D  ԋwf@w fw w=wf@U@f@A)wfw@e7=wf@fwn7X f@w"=wL fwvwrwn&=w& f@wTwPw L.=wfw4w06=wf*wBJ f@ww<=wfwmB=wzwmɅfwB=wXw fAW @w fV1V75 eswtH= 5w7L7H7D7@7<7874707,7(7$7 77777 777f&s & V fwwN=wl f BRfwT=fw0 }f@ww|X=w7Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF6 "DBC!,-/-Q$%'BC*6+6&qQr (FH0A8A?=>?@@y]wk e6hv:.LKsJp;<EXW1 V#]7fgi6]6,-Ua]6^_bcdYZ[\)a "]j!,-$%^_bcdYZ[\a "!]6S!$%mnol$%^_bcdYZ[\ a "6!6x$%^_bcdYZ[\]a "6!$%^_bcdYZ[\a "!qr$%^_bcdYZ[\6 "! $%6pa "!$%^_bcdYZ[\a "6x!6$%^_Ta " "!42!$%^_$%6 !$% "q!r$%6mnol "!6p$% "42! "!$%6$%6qr " "!!$%$%66p "6x!$% "6!$%mnol "!6$% "!6$% "I! "!$%$%mnol " "!!$%$% "!$% "!$% "!$% "5!55OP$%53 "MN!5R55555$%53z{|}~355535555555333333333555`335555359G3333553tu33GG"HDBA7+O)#@?:e6])"U v+!4+O)G(s1G ((|{zy0&$rZP+xw2v8:u9;(t%lsq      {{/(045 7-+HI1;2JK;{./{,98(+-*/%HI-((((([}&'(){!#$}?<=>^$())))),,(((}}{/:ABC)),,,]"}8|(02)2./));%},),)));2;)))))AsB;sCDEFO6 !If@_`ssf7 FED45$GH0123rfflsIIegf f=?QRSTUV]*^+,-./8"hikmnopfbdf<sPXYZ[#JKLf:qMNfW\j9ac: :>&()  tff:%':f:fwfvu`"`",DP,DP^`````` :HZhx` ``*4HV`"px``````` *8F``LbLbr"|``p"state %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d bailing out0$record$record$record$recordillegal statement88 N^^ ^flrx~&dl     , : H V ^ f n |    & . 6 > F N V ^   , L X ==# =9=:==============8=8=8=8=8==8=8=8=8=8=8=8=8=8=8==!= ==#:=SNMSSWVWUWLKHLELFLBLALDLJL@L>LLGLCL<;  "8888888888&82888888888 ORPQT?I888888868%885884888888888888'8)888(8888788888*88188,8/888$88838-880888.8+8 N N O`'j889:U: NW !Y"#8P$T NVX<\a b%Z&#f<=8!c!d$g%h&i;'()*+56,f;-,p.;/>?0.t,q)l1+o<(k*m2347Q-r*n</u @-s0v0w1y2z;0x @ A !3{3|J#gi$RR>?;5}[_kl%;&mor Bs3{q C D E F'RR G H @5}()5~*+qt,u[_-n. I/ @R0n>>1wxy B234 C D E Fv G H>Rv J K> L ISSSSSSSSSS7~ M7~7 J K L[[[[[[[[[[]^^^^^^^^^^ M7~_SSSSSSSSSSSSSSSSSSSS7~"e"e"e"e"e"e"e"e"e"e_"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"e"eKKKj]]]]]]]]]]]]]]]]]]]]__]___________K]_K\>"J"V"n"z"  $l<0 ""$""""$"*"0"6`"<"BL"H`"N"T<Z,^dXjpv|H l""& *". 26:>B"Fh"JP"N"R("X\"`"d"hd"l"p"t "z" ""X""l"""^#j#v#!V%<""X" """""" """"" ""<"" "@"""&"*P".\"2"6"<0"BD"F"JH"PT"T"X"\"b"f"jT"p"t"z"~""""""""""H"""P""""2"  0000000000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@ $recordnewline in regular expressionnewline in stringstring too longnewline in character classstring too longbad switch yylook %dF~6r\*|unknown type %d in penter unknown type %d in freetrregular expression too long unknown type %d in cfollunknown type %d in first Usage: awk [-f source | 'cmds'] [files]a.outrcan't open %s-d-i%d, %d/usr/pjw/awk/awkhista%-8s %s'%s'-frno files|********* * * * * ***********++++++#+++ 1+!4+"9+#?+$C+%F+&K+'P+(V+)_+*g++n+,v+-}+.+/+0+1+2+3+4+5+6+7+8+9+:+;+<+=+>+?+@+A+B+C+D+E,F ,G,H,I,J$,K-,LFIRSTTOKENFINALFATALLTLEGTGEEQNEMATCHNOTMATCHAPPENDADDMINUSMULTDIVIDEMODUMINUSASSIGNADDEQSUBEQMULTEQDIVEQMODEQJUMPXBEGINXENDNLPRINTPRINTFSPRINTFSPLITIFELSEWHILEFORINNEXTEXITBREAKCONTINUEPROGRAMPASTATPASTAT2ASGNOPBORANDNOTNUMBERVARARRAYFNCNSUBSTRLSUBSTRINDEXRELOPMATCHOPORSTRINGDOTCCLNCCLCHARCATSTARPLUSQUESTPOSTINCRPREINCRPOSTDECRPREDECRINCRDECRFIELDINDIRECTLASTTOKENlex: %c lex:? %o lex: %s lex:? %o 00$recordFS RS OFS ORS OFMT%.6gFILENAMENFNRout of space in makesymtabsymbol table overflow at %scan't set $0can't set $0%.20gillegal reference to array %sfunny variable %o: %s %s %g %oout of space in tostring on %sr0K$recordrcan't open %srecord `%.20s...' too longrecord `%.20s...' has too many fieldsrecord `%.20s...' has too many fieldsNFfield %d: |%s| built giant record `%.20s...'trying to access field %dawk: %s near line %d awk: record number %g 23^3H4\4|4t4l4d48888D9D9D9D9D9D9D9 9D9D9D9<9D9D9D9D9 9t;;;;; <=====FFF Fillegal statement %ounexpected break, continue or nextunexpected break, continue or nextunknown boolean operator %dunknown relational operator %dout of temporaries in gettempformat item %.20s... too long%snot enough arguments in printf(%s)illegal arithmetic operator %ddivision by zerodivision by zerodivision by zerodivision by zeroillegal assignment operator %d%d%s is not an arrayillegal jump type %dillegal function type %dstring %.20s ... too long to print%stoo many output files %dwawcan't open file %s%sout of space in ALLOC$recordHHHf3f3f3f3f3f311H::::::<<<<<<HHHH(Gv@T:@BHCCDEEEEN/*??H828282HH0(F5H 7HHHHHHHHF>HHH<<<<HHHP5H5O5V5]5a5f5j5o5t5y5}55555555555555555555555566 6666#6,636:6A6H6M6R6U6\6c6j6o6v6}666666666666666666666(null)(null)(null) < <= > >= == != ~ !~ (null) + - * / % - = += -= *= /= %= (null)(null)(null)(null)printprintfsprintf splitif((null)while(for(instatnextexitbreakcontinue(null)(null)(null)(null) || && !(null)(null)(null)fncnsubstr(null)sindex(null)(null)(null)(null)(null)(null)(null)(null) (null)(null)(null)++++----(null)(null)(null)$(1@rzA]ݬ5@3dlB##3h@?ØGf((@lB,l$d!rJGSrCu%طK@0qi9IE4Ÿ@;\)@3dG@/bin/shsh-cXXXXXXXXXXXXXXXXXXX]d]o]x^f^e]gx^c^s]l]L]u^r]D]O]X ^U(null)RSRSF9/etc/utmpUnknown error: /etc/ttys/dev/M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\<:D:N:h:x::::::::;;(;4;J;\;h;z;;;;;;;;<<(<5  67.% % Zw   @ @m&  @ @m 7  u-w w "Nef  GN  `%K  7f n 5fef %% N N'  & f B efef  %% f  5N ww Nfef %@ w w uDAB %u f& & e wx5 5  W- W00u5  .u8 BwF J@B _x@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A| ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w ^DCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe&  %4 ;#%  j Z!Z! h  &  %S  w@w DE%&  %  w~ w j  e-2w\w LD@     4 4 wf x@w  `%U7^%U7`%^%Ae vB7 55 a  a!RE -%^% wb r%le rt 7V J `e :  %"e U?   `e 7^%U? a7 ?U ew DE ww D5 @ r5N h!wR5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef   ww N tf  %ww Ntf  %ww ~DCԋ wt@f@wB fw w&!w"fwww,!w f@www 4!wfww  67 % Hw " w&f @f$@& BFc kXL,  牑 %| 0  6 >  67PJ % w L% j# E7? j# E7? j# E7? j# E7z? 4 !7I : @e  J7PJAFJA 23 7>  a 7> 7> e _@ȥ-__ ̋ r y@ F 7> 7>?O> >E _4 >>7 >>_>p> >_ew> >A=>2_4_s_A= %  - ?HeH_D > > > >_D > = = =_D  _ 7=@ ?8He2H_r A& ! 1= =_D V S  _ _ B _( _  P=_r *  _ _ _ _ 6 6?< B@ @m& ! _ @ @m7;>@ @m  1De@ @m 5@ f ;"JE6;Bfez e 0 J p; _J\E%e NeJE\@B Ne6Ez@Bfez eNez 0 5 B;E p ;Ne p ;@ @m&@ @m& & 7D ȕf@ @m < @ @m 5  EeE@ @m  _@ @m < _@ @m 5  _DeD_@ @m  _@ @m0Bv9 %@ @m5Bfez %Nez 0 _@ @m 5  _@ @m  _@ @m?D 9  9CC h p9  w\w Lw8CJJJf*@8ABfe0 eNe0 0  2 x@J    \ !N F5 J pJ pJ p@wSB48  jB8  w d 8|B7  JJ7Bfe eNe 0 wRw BJN N 5 88)JJBBfe0 e 0 J pJJBfe0 e 0 7̕sNJJBfe0 e 0 ̕o0 7B7  JJf6Bfe0 e Ne0 0 B  d7B6  J pw0w DC@Se B6 7Bf6  65 NBH6 %e B.6  5 4 "6 N" 6B . N 6C5  whw X6 r6 NC5 %5 5 52C Eˋ8˥< 5!˥>> e55  @ @a2ˋ EˋE %w@ @a0 2DeCԔˋC4Ԕ H5D ECf t% E CCf t% 4 Ne2fe Ne2fe Ne2fe NeC . N w Nef N" %:@pN:4 N"(( &C % |:N0C . ww t 44 ^N wdw T 3N j# 3N j# 3N j# 3N j# w w   ww  4 %>C Ne j$5@- 4 5% NLC3 %  @tww xD`C&   h wdbC2 %w >  %E@ ~C N h= ww J pJ pJ pJ pww Nef 0$   w w CJ  CJ  CJ  CJ  CJ  CJ  CJ  CJ  CK  w(w D 22 ̋ P$ww N;Cf eww D̥. w ̋ w D̥/ ̋ww D ̋ ww pD ȕo wdw TNC . wNw > N  5C w&w DC  J5  ww Nf N & r ww H; N& !  we-*;w N:C0 e 0    wjw ZdNffe % wDw 4N":C/ ew$w l5 55 5 5 5 5 5 7 (0JJ Dfe e 0 5D . .DJ  76:J 40DJ  7:J 42D:  Nefe : _Ne  _Ne  _Ne  _@t5@Nefe ! eA@@A f& z%Nefe ! 5 5 umumu uu  W- @ @5Nff %5u% Ne8 Z Ne9D8 %u- u->D Tu-u-A@@A f& ~%uu 2W- .Ne  ZD N xA 5`u`u u-_u-_wD T_7 7 7ȕ 7  7 7 7&7 7 7E7  77 7 7E|7  &  % A@@A f& R%A@@mAm@ f& %c kL,  牑牀5uK J K J K J J p@wxw h     x |,  ff Nef& e5u  ff6 xeuu  w  xw f f A @mAm@ ee@ f& ef& Xe5u@A f& %A@w^w ND5 5 5E5 8% w&e= 5 5 5E~5 8%%  % w DN5 D5 8 wE,5 "5 5E%% 4 )  && :eee@ ee@ t4 4 4E4 8Ew DD* >*0K%4*_Kv4  7 *ww DDf   % ,&Df e %ww NDf %ww xW-0uDf  0u  ffDf `ew>w .NDf %w$w D hff %ww @ff %w w Nfef %@ w w BuNefef % = Ne&  @w` w P D@w2  j4 e K4 && "%4 %  4 E w uDAB %u f& & e wL 5 5  W- W00u5  .uDBwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A Eҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w 2 DCB &E  z f   #̥-%0  E: E:  &E   z f   w w r DuNfe& $%4 ;#%E( l! ~F~F j  & $%S  w@w DE%& $%  wR w >E he-P(w0w D@  "  4 4 ww D  w r< wf =@+ @ a f "  %F(f  &  "e   f "  4  Հ rw D& 0"     "& " ww E-& wef >@w v wzw jAupuN j wZA vB w .N w.w  +6KU7+4KU7+6K+4K+Ae vB+7 +55 a  a!RE -T+%4K w F+%@+e rt 7*+ #+ `e +  #%**e U?** `e 7*4KU?* a7* **?**U ew D*E ww D5 @ r5N j!w5A vBB-  }ee@ !ۃ `!ւ `@ r `)w Nef !  w w N tf "%ww Ntf "%ww DCԋ w@w DCԔww D  ԋw~f@w| fw#w#6Fw\fw#w#(#%sefl %s %s >%sratfor %s %s >%s%s: cc -c %s-o%s %s %s %s %s %s Error. No assembly. compiler error. PASS2.%s %s - %s%s %s %s/lib/c2mv %s %scat %s %s >%s ASM.%s -u -o %s %s %sassembler error -oLOAD.%s couldn't load %s %s /usr/bin/rawCannot load %sNo shell!%s: too largebad wait codeTermination code %drError: Cannot read file %s writing errorxsadSopzAfort%d.%scannot open intermediate file %sout of memoryCompiler error in file %s: %s Error in file %s: %s sort %s >%scall sort status = %dra .data%s: overlapping initializationsbad intermediate file formatinitialization out of bounds.byte %o%c%s . = .+30000. . = .+%ld. %s: doxfegcslLurDOXU(null)~H~HE  AAAAAABBBBBB ;6jK0 c* kL2 = ʗʗ -<JX 0  6 >  674 % (w x,ww\>EE?e7|tnfVrvVGVނVhVp?e77 V7 V7 7 0WufutD{{%dZ (V x@ uPJ F  (@e2. ! 72D @|D !% ( D J'% U 7 U 4ueܗȥ-e ė@tD !% ֗ U le 7 vU | @|D !  (8> F T  `tD J' (w((* 62e, `w *HNC0W V _ #U nT_ 4t_ 0WNz_ f- 0W@|D !% (?!^ T_@|D !  (S 2? .L(,y;y> y0-{ _P { _Pz _Pz z  0W\@|D !% (t |tȥ __z _Pz z|_Pz |z _P_6jz _P\zTz0-N 0W@|D !% ((z - 0W@|D !% (gs s my ps sy Ps ~sy wns_P ds`s \sȥ 0W@|D !% (% 4s A|D !  (sWp(ezN s 5AWp(ezNrWp(ezf d yA p|_P ArWp(ezf ! x1rWp(ezNA|D !% (pr jrxp|_Px Pr Lrȥ 0W@|D !% (% $r A|D !  (rWp(ezN q 5AWp(ezNqWp(ezf d _ AqWp(ezf ! w1qWp(ezNA_  _ _& _ 0WA|D !% (w_ _~ _ _ _T Hw _P _ _ _. _  w p6K pv0v -^ 0W@|D !% (-J_P0W@_> _ _p _< v BpJ 4 " 44 *4 &4E4 "  4 4 3E%  ̥\̥   w N$(k "k   @ /zE jN w/jj5 5 ̥9&  ff eee@ ee@ 5u̥0-j- h ht zhpvpv%hh B|D !  (  7>j w PD C ̢̋ w>w (Dj ˥ ˥  %\̔̋ i w̥  ˥ ˥  w  -Nf d @weu- w ,2@ 6B|D !% (@ 5 @Ap u@5Ap e-ʂw*w  Chh.ʥ\ ʥ &8ĥ\n ĕ `H@%\ʥn`c5 kfL2 = ʗʗȕ `ȭC`ȋ ʭC @E B@ ʭB&w ^h`ȋ`ĵew T  f + 7 NdC|D !%7 jE2jE2 _b7   jB `B_7 VB_| a_R >B_R0W_( x/_E?f/ b/_&wXa|U 1˥˥"5t7,vA 7,vA2 7@t7,vA7,vA    2  A    &  _e   ̥̥5t7,v,A7,v&A_tD&E % -H`_ @. 6. 2.tD % %>E/ ` 7 @0W 5-_ R+w@w 0  w*0WnGԔf@7d@0W7 Z@CӋ7J@˥3&  ˥œ &  7@ԋ&  ԋw DC _ xB wxԋ̋7?E5@t`AEAz@@0e 0v 0|v 5v |v@5&f % Dm 5v |v@5DmN&f %  &  D ԋԢ E5@t`AEAz@@0e _,˥L &  _\ _F˥ 5vL &  _\ _F-<>_F&  _\ _FsC|D !%_,w  @&   w=@ z@ @&  @ z=w : 0WnGB-z=5 @E%WC|D ! 5#%&@=:= P%E%1%:@ v@ &,v=nGe0W7< %WC|D ! 0WnGԔ 7(\wtw dDCB Ԕ%WC|D ! wBw 2@   xB*e*%fE* t<n<C|D e? *wN<@  8<@E?t) p)  l)tD&E % ˋ P) F) B)tD % 0W˥ Ӌ ; Ҕ 7 [ ;;;CtD he0Wf 7Z Z ZZf-`;f0W 7Z Z ZZ0W-.;@E?p( l(  h(tD&E % ˋ L(_(0WnG7z+QB-: ʕ\nGCtD !%nG@ 4˥Ҕ-:/ʕ\nGCtD !%nG!˥  5JB-h: ʕ\nGCtD !%nG@  ˋ nGCtD !%_ xY+0W j'E?\' X' tD&E % ->Y :' 0' ,'tD % %>E( Z0W 5-{w{9_wX_%>E' " X XX 5-{0W &E?& & tD&E % -X &_4_(0WE?f& b&ˋ Z&tD&E % ˥  <&_4_( 0X+0W "&E?& & tD&E % -W % % %tD % %>E& tD J' (&e&%fE&_X8R8C_N @ + ) _0W f%E?X% T% tD&E % -:W 6% ,% (% _@ _tD %  7_7 77_0WD@&_0WnGҔf0WҔ 7VnGfҔ_0W@` _ w Dr'-p'=jEy +%,By'-N'jEx +% x R+ x6jE`7'e6w 6 'wX jE`7&”%  -6w & @  @ A H w w E#? #w w ff '%w w Nfef "%@ w w D@w|  (4 ef4 && +%4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u DBwF J@B _$@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AdDҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w |DCB &E % z f %  #̥-%0  E: E:  &E %  z f %  ww DuNfe& b,%4 ;#%tD! * `` (  & b,%S  w@w DE%& b,%  w w lD J'e-wzw jD@ & R+  .* 4 4 ww D  w r< wf (=@+ @(( a f +  %Hsf ( &  +e   f +  4  Հ rw .D& h+     R+& + ww lD-> wef >@w  ~t|U7ptzU7ft|dtz\tAe vBHt7 Jt55 a  a!RE -t%z wF t%se rt 7s ,s `e s  ,%sse U?ss `e 7szU?~s a7ps hsjs?bs^sU ew D>sE wxw hD5 .*@ r5N (!w65A vBB-  }ee@ !ۃ `!ւ `@ r `rw Nef 8+  ww N tf +%ww |Ntf +%wrf@w" fwwEwfwww~Ew f@wdw`w \EwfwDw@$Ewf@w(w$*Ewpfwm 0EwPwmfw0Ew.w f@ww6Ew7nFw "B A@ C@ppC`pw @& BFhcommand garbled: %s Too much text: %s Label too long: %s No addresses allowed: %s Only one address allowed: %s  @4Bffffff d .  rCannot open pattern-file: %s Unknown flag: %c Too many {'sFirst RE may not be null Too much text: %s Unrecognized command: %s Too many commands: %s Too many }'s Duplicate labels: %s Too many labels: %s Too many labels: %s Too many files in w commands wcannot open %s Too many files in w commands wCannot create %s Too many commands, last: %s RE too long: %s Too many line numbers Undefined label: %s BBBBBBCC CCCCCC C$C(C,C0C4C8C- \13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37Can't open %s RE botch, %o output line too long. Output line too long. Output line too long. Too many appends after line %ld %ld %s %s %s %s Too many reads after line%ld %s r#d#o#x$f$e#gd$cv$s#l#L#u$r#D#O#X#U(null)bb E6cF kr    }}  e zD 0  6 >  67& % Zw d5 5  @-_ r y$ e e@5@ 7^@ 7H e@74  e@7 %>7 e e@7 %>7 e@ [7 e@ [7 # * 6 9 :_| ! 0_v 4 7 9_|@ Ffe Ha < Ne2' &a _Ne2' Ha *%$% pX7 % %% pX7 % %% pX7 $.fe A _2fe "B 7$6fe "B 7$:fe "B 7$$ ;7|wz$ .Ger$ .Ge-NJ H <: ]%7 0   ]%7   D 7 > VD # .Ge P  D 7< 8 Z VD # .Ge5-z 7 T 6 D 74 0 } VD Ne @  Ne VD  Z? % Ne  %_>Ne 85fef" 0e 5 ffef"fv B;e 5 p"-f^fJ 9%%855 fe a @ @afe a u-N @Nfe %e- $w_w _ u / u-u-@wR_= @5 aN Ha @w _@ r y(@e  &   w^    (    $ w ^20 ve0 wp^w `^0 aw`^w P^f &a N f ff  N f ff e_f &a Ne buuNe buu 8[ 9N aN a aN aN a aN aN a/ a f f beN VD N aN aN `aff d%N a dN ff c%5@@mN aw\w \\uuu b@e5Nfe Ha Ne `a%2 Ne `a VD Nef < wT\w D\ N a& f ff 5e w\w \5 j5 h5 fNfe Ha fe a N@er5f& Ha B  dYJ xP%@f f@ah5% l =f5l @l e =f l @h 5h% @f f@apfh%h=fulj f@f5l a5d a fe b Ne# VD  a5b aJ a %J= VD Nehff T  aNd aNd a aNb aNb aYJ H 5nUJ[ VD M5@e250 0 00 0  0 0=0 02 Ne2f a  00@0 @n @n nENn Q% Nndfe2 : 7* e. ( $ 7 e7 e    d% Z  @   w2Xw X5   57  d  | 5l_%dd%dd&f c%5_&f c%5_ U 4_f  _f  -_` :ԥ 7 %dd%d!d&f c%5   &f c%5h l+D-NfdNf d%dd d%  d%     ԥ 57  _< _ N aw.Vw V7941e- e|v ne-h e\XR @% B8 H $% !ˋ wUw tU  e    wLU7 0d %7  w U d% ZwUw T&~@e55ˋe@e@- dC@e@-@e5eĒN7=u-@e@- @e@-@e5 e eu- $ =Ap@ @5u-wSw S 5 @ p-R' wS -b@ pR'w S5 @-_a  x  n e `@e5 [7T@ ȥ,N [76@@L7  @@e7 e@?ev@ r%0 VD @17v_d@e7f_d@e [7J_d>_d I8e2  ! O^ xP%i H 7 k6 ~O  "  ZO xP% H 7 6 ~O  Z%Mr pX7 @7|& H 7N e 2^ VD % ( > 6    \/ b  ZwPNecQ k$r    }} Ne d0  Ne D Ne w P  vc 5% vc  vc  vc  vc wVPw FP  vc  Zw2Pw "PR  fdJ fdJ  fdP & fdwOw Ov 5 5J5ONe( D L@ j Ne feJfe a Ne `a%, Ne `a+ VD NeJ `a%a=6 ~Oe ZNe d0 jfe &a J!r6 ~Oe Z _65b@e5 @   55@e5c@5  V@  M=@@m%NN B @@5 u- ! @@5% [ rd%  u- 55 7fnvf5ffefe veNe `a%X6 ~Oe ZNeb `a&fe I e%  VD Nefeb a Neb `a% Neb `a VD Neb : e- b `a%c(((6 ~Oe ZNeb `a%dU16 ~Oe ZmNeb :  x$Ne^6 ~O%_6Ne p6 ~O%Neb j@e5  = Neb >-5% _6Nefffe& e_6f,bfeb veNe `a%,6 ~Oe Zb `a%6 ~Oe Zbfe ) 5NeJ@ @ae& ) 5`% 6 ~Oe Z  fef "e%Neffef e Nef z% wJw J5 %  @ 5@wlJw \J @55_f [= fef ve@e5. =.%5@T/eu  =N6 ~O%5 N"6 ~O%u   5 wlIw \I%.%% wLIw Է :ȋ%n0 * VD w 6l5  _X/ pX7 fe xPeNe G H 5_X/  ~Oi@ Ek%  5 -z %<@e5} @ @ EN Q5%=@ Ne [ p: N ~O% ҿ Hf W @ N Q5N pX fd ~O wz5w j5 pXf H 7rRN6 ~O% ZD%0@e5} 2 (ҿ $E Q5%=Ne [ :  P (ܷ . f W  ѿ E Q5% pXN fdwr4w b4 7  wX4J3f Ha @:f 6 ~Oe Z: ((?ɷ %(#ɚS j 6 ~Oe Z  6 ~O% 3 ff EeA 5 u A A@uff .Ge5@@m@_^>w $Nf fe2 xPeNe2 Gw#w #5 5  f A d f "B 5 f "B 5 ;f&f &%  N pXN @ f "B 5N ;7w N pX5 N pX5 w,#N @ " t f $C w."w "N D H 5+,85 N  N ff& be5u4 # X4  N ff& be5u%%w DC 5 u E  Q   u-@wNw >DC 5 B E; &E W ~  u-@ww  H5 f+ (  be 2b vc  vc Ne d5@-%% vc  vc @wRw B Zff X%w6w &Nef& I%ww Neff I%ww DA555  ԋNeffe I%ww DC 5 5 _vJ@ E_J%%_J5 %*e5  AWp `eu  0u%l%h5 %[ O e  Neffff Je   - @w@ @ EN Q5% % % %Nf P     %_JI@ _8IN Q5 %Nf P w N%c%s%[Nf ff f& New5 5 5 5 %e%f %o%xDe5 5 @ @ EN Q% % % %-5 Ԑ@ @ EN Q 1 A@  5u%_MN  P = _M%+ @ _M@ E  8%)%._DM%e%E %    Ԑ@ _^M@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _K _K N Q%+ %- %0_K%9_KԐ@ _&LN Q_4L @e! _K@t@]   x Ne ZA _KNe ZA @H@pHw DC = 5%c%0u5 %s E  Qr. %%c5 %[r.    E  Q%%   P =  D- %cw w D ̥^  . . %E%]  . .  wXw HNfef R%@ w, w D E  Qw E  QtPw . fef R% w w DC ; & W t; t& W w^w NBuNefef R% = Ne& W @ww D%    | w - -w D@w \4 eQ4 && c%4 %  4 E & & .e Ӌ   &7& e ӕ-ӕ0B~ӕ.  ӕ0~ B~  &7h & e Nӕ-0 Bӕ.6 B~ӕe( ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w5 5  W- W00u5  .u BwF J@B V_T@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& ^e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @wxw hDCB &E W z f W  #̥-%0  E: E:  &E W  z f W  w w DuNfe& d%4 ;#%.  l` (#(# \  & d%S  w @w DE%& d%  w w t &  pXe-\wf w V D@ X a  ] 4 4 w w D  w  r< wf Y=@+ @ a f b  %f Y &  be   f b  4  Հ rw  D& a     a& b w w & -Ҳ w ef >@w D*\5% %-%+ 5 55 55  B5eA5  %.55  B5eA5   %E%e$%+%-  Wp B`e   @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& `e5 55ww D  ̥9Wp @@`e     + -̥0  ww vAupuN \ wfA vB w :N ]w:w * QU7QU7QQAe vB7 55 a  a!RE -%Q w %ze rt 7d ,cX `e H  ,c%0,e U? `e 7QU? a7 ?U ew DE ww D5 ]@ r5N \!w5A vBB-  }ee@ !ۃ `!ւ `@ r ` w (fff 5& ^eww  fff 5& ^eww  5 %O N  = Q555Ne5& `e5Q55'0Ne5 B& `e57J Be0" 5%Q55 5 B5@B eQ a=%Q7Qw %Q5 B5Ne5& `e55e0%Q7`Jʕ0%Qʕ1  %Q˕0 ʥ9 w ZNef `  wHw 25@m 7"7"lww 5@} ww N tf |b%ww Ntf |b%ww DCԋ Ԕww DCԋ w@w ~DCԔwvw fD  ԋw^w Nwګw֫ Z 7w:fw` w  f@w fwwd wf@U@f@A)wfwR@e7JFj wf@fwr7 f@wr wP ffwwwv w  f@wЪw̪w Ȫ~ wfww wf*wBJ f@wvwr wfw^mZV wtJwmDfw4 wRw& fAW @w fQ1Q75 ecw 5w7L7H7D7@7<7874707,7(7$7 77777 777f&c & Q f BRfwB fw4 wB fw0 }f@ww w7hF@& BFn.ib.ia.ib.icNo space for hash list (%d)No space for hash frequencies (%d)no space for answer listNo files %s //bin/pwdhuntdeliv/usr/lib/referdelivCan't run %shunt-i-t-T-F1-oabuff not big enough %d.ig/tmp/rj%dgfgrepCan't read fgrep index %sCan't write fgrep output %srcan't read fgrep output %sH & & & & 2 & & & " Can't get space for machinesbad fgrep call wordlist too large & v . . ADstandard input|Fhd`dddddpd>dddtoo many -p options (%d)/usr/dict/papers/Ind/tmp/rj%dawCan't open scratch file/tmp/rj%dbwCan't open scratch file rCan't read %s.[((X.]buff too big (%d)Assertion failed: file %s, line %d refer2.c$LIST$ Assertion failed: file %s, line %d refer2.chuntAssertion failed: file %s, line %d refer2.cAccumulated answers too largeanswer too long (%d)Assertion failed: file %s, line %d refer2.cAssertion failed: file %s, line %d refer2.cNo such paper %s too many hits for '%s' delivAssertion failed: file %s, line %d refer2.cAssertion failed: file %s, line %d refer2.cAssertion failed: file %s, line %d refer2.cdeliv%.70s ??? at %s Dffone buff too big (%d)!\*(<\*(>output buff too long (%d)*~%s%c%s%%.%ds%%s%%s%%s%c%d%c%d.[.[ File %s, line %d- punctuation ignored from: %s\*([.\*(.]%s%s%s r,\|/tmp/rj%dcwCan't get scratch file %s.ds [F %s%cA An The .\"%s%c%c%s%c%c%d%c%cbflab overflow (%d)nref in labc overflow (%d)the an a .]-%c..%c%s%c.as [%c " %s%c.;,?XYZ[].de [%c%c%s%c.ds [%c%s%c.as [A ",%s \s-2AND\s+2 and%s%c.de [%c%c%s%c.ds [%c%s%c.nr [P %d%c.;,?.;,?..%c.nr [T %d%c.nr [A %d%c.nr [O %d%c.][ %s%c1 journal-article3 article-in-book4 tech-report4 tech-report2 book5 bell-tm0 othertoo many references (%d) for tablereftext too big (%d)sort %s -o %sr.]< %d.]> rCan't reopen %s %dAssertion failed: file %s, line %d hunt2.citem %s hash %d hfreq %d Assertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt2.cAssertion failed: file %s, line %d hunt3.c%s%s/%s%s/%s fgrep-r-n-i%ld,%d"%ld,%ldrrAssertion failed: file %s, line %d hunt7.cAssertion failed: file %s, line %d hunt7.cWarning: index predates file '%s' /usr/lib/refer/mkey %s >%s.ig.ig.ig.igrMissing expected file %s d/usr/lib/eignrError: /bin/shsh-cNNNMMMMMMMMMMMMMMMMSdSoSxTfTe~SgXTcjTsSlSLSuTrSDSOSXSU(null)*%*% =(\  AAAAAABBBBBB ! ;6&R0# c k46JoJo A= case $1 in -p) A="$1 $2" shift; shift;; -*) A=$1 shift;; esac case $1 in -p) A="$A $1 $2" shift; shift;; -*) A="$A $1" shift;; esac if test $1x = x then /usr/lib/refer/mkey -s else echo $* | /usr/lib/refer/mkey -s fi | /usr/lib/refer/hunt $A /usr/dict/papers/Ind c k8ll  h 0  6 >  67' % 2w   j 7h!& D % @m D-0! w w f 7! N < _8 @  *  7 & < N> <  *  _47 ! %%m e ! $ %!n %%C 4!! %H 6 7 0 < & !  &  "  E! $ % !! %! $ % &  e &  e! $ %! % *  * w$ w   fef h% \w w uDAB %u f& & e w 5 5  W- W00u5  .u\ BwF J@B _P@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E ~ z f ~  #̥-%0  E: E:  &E ~  z f ~  ww DuNfe& $ %4 ;#%  B ## @  & $ %S  w@w DE%& $ %  w w   e-~ww D@ ` *  z 4 4 w.f x@w  v 'U7h 'U7^ '\ 'T Ae vB@ 7 B 55 a  a!RE - %' w %e rt 7  `e   %e U? `e 7'U?v a7h `b?ZVU ew D6E ww D5 z@ r5N @!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww  Dԋ  r e0@  r X a %zJ!w  f  %@w ~N tf h %wtw dNtf h %wZw Jw>w: L!7w6f@w  fw wR!wffwwwX!w f@www `!wfwwh!wrf@wwn!wPfwrmnjt!w0^wmXfwHt!ww: fAW @w" f'1'75 e wz! 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & ' fwn!w( f@wTwP!w7pF@& BF/tmp/arcXXXXXarcv: cannot open %s arcv: cannot open temp arcv: %s not archive format `dFoRx f.egcs l LhuFrlDJOVX~U(null)%%H!/!6'0 c k6e6JoJo trap "rm -f /tmp/struct*$$" 0 1 2 3 13 15 files=no for i do case $i in -*) ;; *) files=yes esac done case $files in yes) /usr/lib/struct/structure $* >/tmp/struct$$ ;; no) cat >/tmp/structin$$ /usr/lib/struct/structure /tmp/structin$$ $* >/tmp/struct$$ esac && /usr/lib/struct/beautify  67` >% fHw RN fff ewRw R fff& ewRw RNff `% fwRw R  5 f b5  5    5N fEf Oe55N f f Oe5@tEAWt@P5  5 7@wQ 5 % ~ N fe 0 5 R25fff H@e  fef M fe f JOe%5 w QDC55&& te ' && Re  57h wP  `t`L w TPu-u- u- u- w6Pw P     wPw  7      t  p %, ^ L T H P 7 L D >  R  x 7h wf X @78E _ !_ $_ / :_ = >_  ? _w _U5  %* 5 U @55%=| 5  Lj W_ le m w_ X __F 5555e  @  e@  %?@ _@ _/P _F               NL F `%55 7 N  f& `%7  5u  A@  B C @@7 v w r  7 w  w w b f  Ce_F   h d fV P CeNffe e7  w$ w   f  e  f  f& <e $Nffe e 4!  ~ww J_ X "f`Z CeNf 8e_7  ^5@ 75 m@ m@e & O_@ 5% t@>%_&7 b7 ~ t . | \ ,7 n7 T( (  %;_< _. B _0 < 8_0_2w (J Z N 5? %n &_.  )_j  *P +  - |_P _z NU wm`wm\w VNU A@<: 72w0 h$   #NU ff eNU ff GeNU ff GNU A@@ A 7@w@NU w]tw]p5  @wHw H  (R * -- @! ~9 |N X wHNU  %77 NU NU   7wNU @ A  )  w G5 *  _ .J`8E55 7 X 7X-RNff (%~ % wff `%E55 N  ww v  !A@w7f& % 5 @7 t7 n _   _7 P7 N0: h 58f  De .5@- A 7`w`w    xX n  j .%  ~ z 7j55  5&55 4e&55  j 5&55@ ww_h  j _ #_p .7 ~    %_: _h |x< 7hwf3 "F+>^6<.1 5@ 75 m77  @t7>7@wbD@ 5% '57 7 % v7w5Wt 7PwP @    w C% ԝ2   % wCw ~C r5 55EA@,_ff % @wJC w 6C09 af wCw C@ j @e@ewB@  w B09 wBw Baz AZ wBw zB\ _  j  wRB  w .BN j @e@Ee wBN  w A   A@v 7w _F _Fw > _uuA Z A @@f @P5 a @<6+N*$ `%57N  f& `%75uu5 FN  f& `%5N ~ f& `%5 @w=  wwu 7^  aM $@ r y.Xf " Ce7   7w  _ffh _CNE NE # ' 7wS@ @ # >Nrl `%E5Z@ 7VwHwDNs_vffxff~ffffNf& F% #_$N_vff_R5uu5& j e _$uu5& B e |_$ #_ 7 h  @ #"_$ _$4 upN 7w_N@     _ _$ _ N_v _$ 2 _p ^f  Ce_$  + NU _ ,  NU%  _F _8 _ = NR $ _ _Z _* _ _LNc $ _$ _` _ _ _LNEn $ _| _$ _* _ _Z _h_Lw B9. l  *55" \P  \P ? f Ne fH*% ! \P Ne LQ5@-%v \P  ( |w8w 8E% %~%@%@@`A@x $ N #w<8w ,8A mm@ 5u xxvv2 A@w7w 7 ; w7w 7  J B %8\&  CeeF? w /DCeԢӋ w/ w / 5  @ ȋ@wt/w d/ V_$@?\% X5 5 :5 3@5:5  5      } :@- N:: fQ%:   :5 zwt.w d.n:wd.w T.%:\ #wL.w <.\u@e5_\(@ #_\(%-l rNe (5.  Ne (5@e7D@5555ue5 @5 D 4_' xH  @&f )%_' _'@_' ((f& )u ff@&f& x*e_'ff 6%e_' @&ff x*e ff )xN #_'u_'eNefef=& vLe 5 -+? 0@ ?  . @   0Ae@%7`j e^ Z df )%5 #uTu  " 5ru@ # ?@e5N #55 _%@55r #@ @ #@  #@ @e7f@ 5_"%w*w *Ne tHa?4 0 %a?  %w*w ~*N $ wx*w h* #wh*w X*D 5 å9AWp @@`e5 %0 @w$*w *DBe %d -x t  5rR 5r @e  å 0W@`?0 ,@e w)w )uu  A@  5u- + 5 @@mAEpA@v5u % 5 @@m  @@me0?\ X w(w (@@e5D6f& 507 .*$ V5f& V5x0# *@e@-^= eXww 55 - 55u5u  5 555u u=e 5u@ 0W@`? @e@-w'w v' NH N7 @wl'w \'%b  X NNwJ'w :' - $w0'w '5 @ r y  ;3 _.v  ;3 V J  L P% $J433?e 5 Z =   = 6 _.    $ d _.  T  d `Nf 8 W V f b \  )  _Z,  ! &    !_>, & T d85 _>,  _Z, # $  w*%w %d @ r y8 5 %< h | % O@@aZӘ %?  % @@m0%< fe O 7`'7 Z  fe O 7l fe N 7V & H zOe $w8$P w wW@m #@t@>f& e _5 ! $ . (  X %F  6 6.(A E5u7 $ A@e@ f& `%7 v_/ ff %5: $ A@e@ 5u ff `%@ $ G (%C6>eu ff `%C F@ `%5J $ HW (7 :NZ $ ff % wff `%E55 _/_/  J5_/ @%#%$@& & `%f^ $% NF@A 5u_3 Lff `%5A@e@ f& `%5A@e@ f& `%55 %A&fffffk e%_3  A@ee@ f& `%% A@ee@ f& `%% $ j (e $A@ee@ f& e@m5& \B fe& `%5 $f& `%5eE5@tE5@ #@ # @ " # $A @mAm@ f& `% $ e@  #u5 ܷ v_17 " _/ $ _/ ! $  && Cee 5@ #J _b/ _/ _1  _1  6_/*$_/  _/  _/ _/  _/  _ /_&/ _F. 7 _/  _<1  _<1  6  6 _/ _F. _/  _/ _t4 (5 %#_/@t > @_Z/% _,/0_0/ _b/ _4 _ / _4_t4w ( @5 -f $%@f& e@f& e@ f& fe@ f& Je@f&  .e@f& e #wNw ># $  5    t0  t05&&, e %ww    mL5&< $%%f \B  #e% ڂ @ww x 5 @-w^e% 8 w <707 *G  Ce  %& F% #ww p  (ww  bw@w  T׼ &P $ _ g& N Ndf Oe  *  9e ;.07F%:&e     t:5 ew 45 jb\Xݷ R @ww   &  Oe7  J w|w l` NV ^7F & & & Oe \P   \P  fH*%!  R 0x O 7 d] $  ww  u@f Oe& N  fv Oe  <fV Oe@wXw HF@e5@e5Ӷe Z% Y}  Ƹ N = @ 5@ȥ<( N f O %Nq Nf N N $  fH@ȥ>e Ţ= eNe O wVw F L-J w2w "  & OeJ ww v. ) & Oe3& Oe  (& CeJ ww   \P Ne LQ-P%, \P & N & N %7 V4@E%@E7 5  ( N 7 x@t7Z% 7 J `ww   t e & OeWtA m  %  &T Oe 1 %6wPw @ A 7"7fe O%%_?w% % %%7 _?A r 7h7 bw7 w7 mm@ 74w27 L7 J%pj76w427 ,%d  HB e w:747w%0mm@ 7w% e@ 7ww7 u% f`v7XwVePw JL׀ t P745% $  P75@ fFBwd N 5 25 5}@%!%%AE%AE pew h A 77 O%%_AFt77 8t77 *t77 z%z  ^X e wP7J7$w"%F0* m m@ 7w р 7w%e@ 7w -Ҽ $ |xww  f N 5  Ndf O wxw bN # 6f O w- N A N $ ww  fff zOe% ww  Nf C 5- $ N $ ww   7Z4~,0.5%)% % &@m %%  me77 w( w  Nf C 5- ff e $ N $ N $ww u5 5 _D:_D5%7@-,55 A@@A 5 u u-u-A@@A 5u5e   :A@ r55 ~x@A 7nwl & ff emHmF@ f& e  O%@ww ~ҷ   wt & р f& emm@ f&* &e   e% w њіB~x e 7`Ze@ f& ew w - LF&ѷ    V   e w^ w J 4 O%5% x r Wp ewdw & & e Ӌ  &7& *e ӕ-ӕ0B~pӕ.  ӕ0~ B~&7D & e *ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw Nefef 5& vLe C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w f @w N H LKw w Ne :Q< f ef&@ 5uNe Iw/%J %K  t  t5  vI N vI 5   %D-D-% eu Ne I w w DC%: Le`m e rfw w Q@f& e5uQ@f& e5u eeQu  < ff \eR< ff leC r<R r< A@epe@ f& ew F L 5 $u  L 5u F  L 5`u`u D7 L%n     0!  7 vww *ԔAA WpCeDԔԔԔ BeWpCeZԔԔԔ& ,L ed& ,L ed& ,L ed& ,L @%d 20e@ ed& ,L w8w (A r nwmw D % A r  r e0@ԕ A r e0@ww fff 5& Leww  fff 5& Leww t 5 %O N  = 555Ne5& FNe5 55'0Ne5 B& FNe57* Be0" 5% 55 5 B5@B e a=%7w % 5 B5Ne5& FNe55((e0% 7 `Jʕ0%ʕ1  %˕0 ʥ9 w 5@} wP w A@I#EEFNuww N tf TO%ww Ntf TO%w|f@w fwwwfw@e7z~wfwpwl\hwxfwj7 fwBw>w:w@ f@w ww wfwwwfwww޿@ 7 Dwf@wwwfwmwwmfw~wdwp fAW @wX f17L5 ePw: 5w7L7H7D7@7<7874707,7(7$7 77777 777f&P &  f BRfwfw\ }f@w`w\w0w D @ C@ppC`pLw7nFw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFnot in write modeoo"= "^i=:%16t=%8t:%16tadb 0Xt(F %.8s:%16t%16m%T%M:%16t%16t%-8u%-16U%-8o%-8x%-16X%-24Y%-8q%-16Q%-8o%-16O%-8d%-16D%-16.9f%-32.18F/bin/shsh-c!@%c -w%s adb VERSION sys117 DATE 1978 Dec 27 16:37:44 bad modifierbad commandsymbol not foundautomatic variable not foundc routine not foundcannot locate valueno breakpoint setunexpected ')'address expectedno processbad variabletext address not founddata address not foundodd addresstoo many breakpointsbad a68 framebad a68 linkaddress wrap aroundunexpected `='wait error: process disappeared!process terminatedtry againsyntax errornewline expectedbkpt: command too longbad file formatnot enough space for symbolsfilename too longcannot openbad core magic number 0"@&P*`.2? 5?@ 9? =? A? E?@ I? M? Q? U?@ Y? ]? a?@ e?i?@n?t?z??@??? ? ??@ ?@prtv       # ( - 2 7 < B H N T Z ` e j o t  y x}     ?  ~                    ! ( / 6 < C I O U X ] b i n t y ~     6 D!D!> movcmpbitbicbisaddsuclrcomincdecnegadcsbctstrorrolasrasljmpswabldfpsstfpsststclrftstfabsfnegfsxtmtpimtpdmfpimfpdmuldivashashcbrbnebeqbgebltbgtblebplbmibhiblosbvcbvsbccbcshaltwaitrtibptiotresetmulfmodfaddfmovfsubfcmpfmovfdivfmoveimovfimovfomoviemovifmovofcfccsetfsetisetdsetljsrxorrtscflgsflgemtsysmarksobsplindirexitforkreadwriteopenclosewaitcreatlinkunlinkexecchdirtimemknodchmodchownbreakstatseekgetpidmountumountsetuidgetuidstimeptracealarmfstatpause30sttygttyaccessnicesleepsynckillcswsetpgrptellduppipetimesprofiltiusetgidgetgidsignal495051525354555657585960616263r0r1r2r3r4r5sppc%8t%8t,%8t%8t%s {; %8t%o%8t,(%s)(%s)+-(%s)(%s):H&'&''''''''d&'t&'''H&''z&0&'''''''''&%'&''''''''%'%'&'%''&%s ---%d: killedbreakpoint%16tstopped at%16tH K N Q T W Z ] ` c d k u z l44445(5n55pspcspr5r4r3r2r1r0hangupinterruptquitillegal instructiontrace/BPTIOTEMTfloating exceptionkilledbus errormemory faultbad system callbroken pipealarm callterminatedvariables = %Q ? map/ mappcs id = %d no process %.8s(%o,%o) %8t%.8s:%10t? %o %.8s:%12t%o %8O:%8t%-8o,%-8o,%-8o ? %8t%8t"%24targs:%8t%8t%obreakpoints count%8tbkpt%24tcommand %-8.8d%24t%s%12t`%s' -b1 = %-16Qe1 = %-16Qf1 = %-16Q b2 = %-16Qe2 = %-16Qf2 = %-16Qfpsr %o fr%-8d%-32.18f %s%8t%o%8t:%16t%s: running %s: cannot execute %s: cannot open %s: cannot create cannot set breakpoint: - core dumpeda.outcore%s %s -cannot open `%s' %.8s+%o%Q%.8s+%oM:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\;;660#crt0.oexitaccess.o<~put<adrspacevalue ~get`adrspace~chkgetnspacew~accessmodeadrspace value ww1pmoderdfile~chkmap0adrspaceamap~withinadrlbdubd command.~commandbufdefcomitypeptypemodifierregptrlongpreqcomwformatsavcwsavdotsavlpfcountsmapamapexpr.o ~expr arclhs~term a~itemX abasedfrptregptrsavchexframerealsymp~readsymp~lookupssymstrsymp~hexdigic~convdig.c~digitjc~letterc~symchardig~varchkname~chklocBframe~eqsyms1s2cs3ifindfn.o~findroucframenarginstlastpcback2vformat.o8~scanfor8icountifpitype ptype fpmodifierfcountinitsavdot~exformfcountifpitypeptype wsavdotwxfpcmodifierlongprfw~unoxrcstatusunixpidargp~printesc~inkdotincrnewdotinput.oR~eolRc~rdcr~readcha~nextcha~quotcha0~getformXdeformatfptrquotemain.o~roundabw~chkerr~errorn~faultBa~mainpargcargv~done2message.Fopset.oF~printinFfidspinsbytepindirw~doublR!ab~branchv!sins~paddr!saroutput.o#~eqstr#s1s2es1~length#sn~printc#cdqposntabsp~charpos$~flushbu$~printf$fmata1fptrsvptrdptrrptrwidthpreccadjxdecptnlxdigits~printdar(tvecitimeptr~prints(s~newline(~convert(cpcn~printnu )nfmatbasekdptrdigs~printoc)osipodigs~printdbx*lxlyfmatbase digsdptrkfgq~iclose+~oclose+~endline+pcs.o,~subpcs,modifcheckexecsigrunmodebkptrcomptrprint.o.~printtr.modifnargistatnamelimitdynambkptrhilowordcomptrargpframelinksympfileindex~printma 6samapfile~printfr6longprif~printre^7pv~getreg7regnampregptrregnxt~printpc7~sigprinN8runpcs.od8~getsigd8sig~runpcs8runmodeexecsigrcbkpt~endpcs9bkptr~setup9~execbkpt:bkptrbkptloc~doexec:arglargspapfilnam~scanbkp;adrbkptr~delbp_locval$_locmsk$_expv$_adrval$_adrflg$_cntval$_cntflg$_command"_expr" _rdc"r_eol"R_inkdot"_psymoff" C_exform"_printf"$_newline"(_getform"X_scanfor"8_getreg"7_varchk"_unox"_nextcha"_printtr"._subpcs",_prints"(_flushbu"$_BADSYM#_BADKET#_BADSYN#_NOCFN#N_NOADR#_BADLOC#0_symbol$_lastfra$_savlast$_savfram$_savpc$_callpc$_octal$_localva$_isymbol$_term" _readcha"_round"almul"Qldiv"Q_item"X _symchar"_readsym"_findrou"_eqsym"_chkloc"B_lookups"_hexdigi"_convdig"._digit"j_quotcha"0_symset"2E_symget"E_letter"_localsy"B_eqstr"#fltused"4F_localok$ _findsym"C_BADMOD#_NOFORK#_ADWRAP#2_maxoff$_sigint$_sigqit$_charpos"$_endline"+_printes"_printc"#_printin"F_fork"&2 ;; *) all="$all $fil" ;; esac esac done case $all in "") exit ;; esac case $cmd in n) nroff $opt -man $all ;; ne) neqn $all | nroff $opt -man ;; t) troff $opt -man $all ;; k) troff -t $opt -man $all | tc ;; e) eqn $all | troff $opt -man ;; ek) eqn $all | troff -t $opt -man | tc ;; where) echo $all ;; esac c k GoGo c kA¢  ѣѣ @r$ 0  6 >  67 % w  L  L % L  L  L " L  L @ L @ _e@ȥ-_ r y _Ne 7_7 Ne 7_ P_Ne 7h_ ^_@ 6( m`&fe & _4el5@e5@ A H _Ne _ _7 <_Ʀ dk  p77ʤ77 i _ _  A N 76R . _   Z& < :LZ6   _ _J  (   _$  _ _,  _@ȥ+  7r7 p ww r !  ) &- 7  X -|r v7h N 7j7^77`7^ F 6  BE% 6 4  E% 7  -.-*-$ H E% % 7ȯ Զ & * w  pw w w " L ww ܃ L  pw΃w  7* ~ 6ww  ae&  ނ   & 7ֺ~  @Ba7޶w0w Ҷ  7 7z  7jàb   v bƦ 7\ɠ  p d D v% ܻ077 777 ڴ7 شn ( 077\e7VRw8w (Ne 2PF Qff $e we r wF r   -ؼ 7ʼw 7%  w w v$7 wzw j Dس  zplEb w@w 0 N w,w C    v%ww D % w?   t t5 & t  w   tQwzw j E%  7 h ` w@ ܲ E%S5_ % *  ̣7 %   _ %f  z  r K_ -D-- g_ %_ .U dB  ^K >E5_  r y$ _ l_ E% _ %"   _ _ .EQ   n_  r y4  _  _                 _   _ _   _ :_ _ =_ H_ ?_ 4@_ _ :@_ _ X_d X_ [_ Z_ `Y_  6(%_ mh_ x_uUb֠U0 dB_ CV_ K_d    _   _   _6   _    _h _ _x   _` _E%  7 v  r_ dB`Vd_w 0|(( V P7 L HFw| <8e2_ 7 & "e]7    l %d N1J    ʸ-*%& ʺ   -7 0 ʃ%0le07` 譵ğX TEew % > LE%   5E% %]]~E-b_ EU_ w z  ނ ȷl̋ Թ: 1e̥-7  & 7۠   Ȭx  l7 ^7 7 w.z 혬H   6 7~7t7*7w y t7L7H 7z^ 7^h0𺸴캰Ҕ- wy Ef& ve 0 uee07V0Rv Ee076-0w y 7 4E%  7 "  $- r  7 wxw x t T5E% E% 578 @Ewxw x . 4 7 7 7v7e7hwPxw @x  E% %~l %?2l7 Rwxw w 7B &   l %  l     ڶ^7ԶҶt7 7  z7  ^0h\TҔ-Jw@ww 0w  ҩ7l P   l 5%4 l   fef ʃ%55 u-@@m <  N ނwvw v* w E 0e*$ 777ܡҦ%  Ew2v+  x^7 D NP?Дeʔ %”  pw u |  n  ~E% дE7Ĵwuw uD5PEN K 6 E B * 0tEWt@P5@ EP  @  27 d7 ^7X%ֺEE@P Fwtw tDE% Lֱ_8 b % ]1 A p S P%M G5  <@%  x(-D `,GJMc k¢  ѣѣQij ee \ <( <E <t ~jwsw s tey-~ "wsw s@  <wsw s <?H D 0 %U  Ʀ 7   zzܑ v%7`~z܏w0sw sw]l7 : 77f7db27 V & * r  p7 R " 8 Ж n[7 Ė%ر ʱ7 ,0*&e7  9  Xr wdrw Trw] ` 7  Xr  Y  p  ep wrw r Y @ <I < l A <  "n  N pwqw qw] L  L < \ U& "   2 wXqw Hqޣe7V7 ΣN w2qw "q% v&  ve\ l5fe^ v%wpw p7 & %.& * wpw p X  " 7     ܹtԹWtAEPpwbpw Rp     l ww m VE% 7RZwmw m  .tE , \7  7 w 5 N L 5E%  | wp 8 @wm% 7 % %. 6%  w l p  FE%" L .E%  8 4wlw |l    %%   $5% 5 @7wBlw 2l  5 0 N D % 0 wlw k@te wkw kN L wkw k $A &7 .* $pϷ 5% V  D %    д 7ˬ%´ wPkw @k - & & kef&Н ve  v%ZEhE@ Z7 @wjw jAe v@wjw jX   > 76wjw jDE-#7 & & Fjef& ve ʃ%  wHj@E w (j @5 N D %  wiw i-~ wi 8 2h7 7Z7P7ܨ7ب7 7 Ш7Ȩ7w ie- 0h ~ vhؔ 7d7^ 7Ɣ7L767J7D2 ,e$x@7whw hN % ҡ @ @m78whw h   wh%(w h >  %t5  wnhֱe-v 0? h t w ,h Ԛ? @< J _B!@e7"57 `@e5e&5-Z 0C @m u-Z Ve5 0E%" 7&  ( E%  E%"  E%"7  C-   ҙ e ć 0w@e@@ r?X wfw f `Ee % ?!X mN7ܥwfw f wfw f :  %%Ĕ 8 7|7 Я̯Wpewb^7 7 w>f %    %* 8 nxWpew @?0B e %  ` w e `̢2 p  |11 Ц 1wxew he ~0  %p  57_:$ 557Ȑ'E — E@- L E%  L L 8NdB R$ 5 dB R$ 5 dB R$ 5N R$  BA r@& @2  [  R$ @@@ [  R$  PU%8 2p,p -N wcw c 372}wcw c _h$wڱֱ ̱ 7ı %wcE-|E7% 6( 7|Nx ( ` w Nc 55 p  5 t55<Bet5 N D 5% ` @E@tE ҕ  % Ne  %, % Nef % Ne wvbw fb%d A rde0= % A rd r e0= A r e0@=   =@wbw awaw a 75 jE%+ %-7R _(E%._'t$ V_' x(E_'(_' _'_' 1_'_'_'H_'Г_'_'N_'_'f_'&_'%eb_̄ mYVSڄPҫMJGD~Ab>z9E7tE77 ) 4  6(%  m A < 8 fe VeB|,|EWpC|EWpCH`T %JD2 Ĥ,%  5u  70A@wWw W |) 6) 0!֤ %%  m:f  2 тѱ<Ӂ^p֤ lq wzWw jW   6(%  m 1  m̂ \  l y$7 8y!7 ye r    1 6 7 9xwU    1xw T7 xwTw T  x7 xxwTw T 7 xwTw T‘0 wTw T wTw T  5 E% E% 7@w\TEw DT. 37 xw@Tw 0T' 37ww,Tw T 37wwTw T 37wwTw S 37wwSw Sw    7   & |4 7wwSw S7 wwSw Su-@wS@w S Δ  t& |4   7jw7 w`Sw PS Vw  0 & |4  T4w4w7.w w7(w &wSw S 8 v + j & |4 vv7v %wRw R v   0 & |4 lvlv7fvwRw R  0 & |4  7Pv z%wtRw dR v  & |4 uu7u7 xw4Rw $R T    & |4 pȞ7p p7`wQw Q  |1^p7Xp-TpҌLpʌwQw Q V  |1 +  87%    %%>  Ԁ 0wHQw 8Q d    %% > |1 L 0 Ԁ 0wPw P  p-  %wPw P  4 J & |4 7 7jo howPw P%Ě 4 1  72o 0oj  XwHPw 8P ނ ܂ \  R  % @ae&  % %@a @a0Ne  ~wOw O ܌ 6 Z3 2     |1 LsC  8s%Ĕ|` s PUswTOw DO t%XRe6 |1 l6 " s V8wOw N $ Z7FwNw N  6wNw N  f ܛ D. 7  ~% % ^  Ώ = 8 ~D7!- t &&  veހ v% t && Ȁ ve ʃ%7.wMw M 7 7  |:wMw M% m 7   |: twMw M%  ^  ) E%! 7y Z +  x%  p :7 B E% E%7x < E  e n o  t ;5ڇ5Ї d c% 7 L ; % 8wLw L ED-D-% D-Nf ; D-7 ~wHLw 8L5 _ =E%8 57`5 7 oooooo%  L VEC- 8  5 F~/Bw:ow6ow6ow2ow&ow"o x 7 EC-%  !%N c5 wnwnwnwnwnwn  ,dN @wK   5w J }  ~ N}EL}& "  hl   T  wJw pJ 5fe& ʃ%%  x%r@w:J B7 ` | U|& " w J\ 37hwJw I7 hwIw I & z & |4 7t|f|l|%܆%̄ PUwIw I 77m %"? ܊< 8 & & % eZ& & |4 E 1Z tE C  R  7t7~  U@Z UZ 0 ZwIw I 4 |1 Bl n! ll0  PU7lwHw H l{ 5 @5E%  ֺ "E% wHw |H l w|Hw lH  R Zl  k 7Jl7Dl  Fw .F c V   bN& |4 =w Fw E B & & |4 7i7 &wEw E  7 wEw EC 55@ME5 G @E%% d-Ji2%/t-c JD5 ֺE  $C  ` ~n 7F7rwEw D 7 ^@7X5 |cvc z` -,`c 72$ 7 $$  Rh@mE tE7PܑEEVpD r r%  7bլ' 7jզfEEVpD r7n r% \ VJ 74HwCw CDu E7$tE 7󋾣U7$b7 wC  xң"gҐgАĐАʐƐw DC  ij e !e]fw"Cw CDe% % -a wB  @m   @mH-w B   " & E % _rF0a &a  7(^ -$f t tt5t5 tWtsAspr@Wt1t Z  '7 ]$ E%+%-t0rt0rշm . Wt1s7 -ereNm FX`  wAw A He  ̫ 17 ҂ Ђ FwAw rA #ets N e G 5ddwdddNE F7d 2w.Aw A C-  􋾣UwA w @7 ddE œ! C œ t]xdt 7bdU dB7fdZ\ -Xd'Rdttm>d,_ G  F œ!  œ t]dt 7cw\@  w D@@ts@tr  %+Dm%-@@tAptw?w ? |E%+%- fE7lke% %- 7 NkVc`#0Jc % % E7ke % Wp D`7 k Fwd?w T?  HwP?w @?   v%Pb %S2& E %(bbb bts  bttmb bts nb F  w>w > 7y7y7y $E55_Jy} 7}7ybbb baa EWpu-XyRy@m5-By7a 7 w=w |=4a\  wv=w f=aEWpw[ wZ=w J= Լ : & @2  ^K 7 ‰[w=w =`EWpD%u %rWpD  ^K7 tw Y ԃ  ̃ 4E%  l PO2l 7O7O-XO"l" ROJO c  BO  O-rcO7 O 7 c k 87%(1- O7 O k 8X ka W%V    & * 7 cwn0w ^0   mNC- %w<0w ,0OlNeNbNE7\N%TN f 5BNE:N :N7 4Nw/w /%ll @w/   m6NC  %N@!w x/%Đllxj 8Xwd/w T/%ll" a waaa aRR. {+e{ FR@Re -2R5R(($Re 5QRe  {  T  dBQ R& T Q Q Q w-:{ dB5w-Q Q 0{ Q0w-Q.Q%Q, { QrQE%-%EU?NQ dB:Q`FQe8Q DQ,Q 0Q"Q dB Q` Q`Q .Qw -7 y N ^K w,w , PP PPPPPP7P 7P7P7Pw,w , 5  P? P_]P~P_\FzlP 7P7lP7y7 HP@P E%  7`P7@P_]-P% Xk& &] yOU &] O OU &] 7 ONy% OO7 ^ w+%O1-OOO8ye2y%X,y'X$y#%-%%~OdOrOe?xex%XxXxj& &] E% % .OE%.%!%? O? O7 OO7 (O? xex @w *%BN hx!c  Zx%N dB5wmNNeN Nw*w *D X^  z^ ]7zNe z^ e7\N7hx X^  DFNDN@ re9Fw? w N L    N? wew 2N  H|w xwrw/nw dw?^wZw0ePww)w ) N z^  w)w )DE%A%Z%a%zw) w r)E  j X7E7 jw\)w L) z 0E%$% ƨ5E% % jE % %- `P %$ۂx ?6Ew(w ( ˋ w(L-vE `E@  eˋˋ/e-v -~L$E `%sjLC˵?ueu%XuXue ˋ Ӌw 0( 0vE5 z^ %a@ ~E5 w'Cm uBm-K  `E@   Cm uʵ ȵe7uʵ@  &a ?tet ʵ  w R'E%ae @wB'w 2'N ` a e  i  o u yw ' w &-J NE ` @w& w &i7t &aj55 IJe!H-Jr&axJe!`sv&& Db%&VpCt&& Db%&VpCr&& Db%&VpCC-e5e-tw t-VBxsersse &aw%w %N `e r&f b Wp eAmD5uEw%w % 5Uw%w t% 55_cE7 rIEWpwC 8& @2 C N c_c E@-PHUE% dB5D  ^K  5r5A r5  ^K@@  ^K$ 5ruE   UN ^K  T N cDjcw@$w 0$ ED-% w $w $, 55_eE EC-%  @a0 dB Aa1 %  @a Aa1 Ap _e <  @a  @a Aap,'  @a @a Aap @a0 @a @a Aap @a0 D ! @a=e @a Aa@l r  ^K=e  @a A r ^K=e= Daw"w " 55IEF5 FEWpUu% %<US ΡEB-  M EEupWp rU7_#ED aw!w ! p55_PgEE^@ ln & @2 B@ N cc (E@-*EU U5   EEWpu 5r5 5rN ^K@]5N ^K@]5D 5 R @ R%>E  D`7 |mw w T? n  B5E% 7,? ʲ 5,L E$L-?LL~nw~ w n &-P?@D-D?4D]C7x_ 555>??7>7?7?  5?Z u-  _.j ZEZ5  ZE?5H@e5u-_Ji >E-m e@e@- LC-% A7 R  e R CC 5r5upC  ^K U @  @  dB5`%BغH ^_&h !] dB7 ] A r7]A ru CUR ^N EC-% C-  dB5`%B %uA r5h] dB 7 T] A r7F]A ruuN ^KH(]7 Pw~B"f()/ /// @/N@//_?OU3u&'=  //`O@//?@/0e:ou36t(OUH/,oL+/???L?>???o,O=U5/63'V /)P./0>._|-ݶm?o//3"? /?@~(wf"J?H2*s0 P0 o UͯfV/ @p o~%hlr"gjC@ `@P0@ `0 @P@`0r&bY*FH0"p @` `P P @@``&@`6%XfXC@  ``P P"`q"cr Q"0`S!Q"0P`Sp!)Vha0f6uP p`@`aR pc"b'cP `0a@ `@``HU)rPUWDD*` p`0  ˙`.`p`5"0 f`arrrlhhetalsisipiytotaniniciathinmlibililhfdiaaiorororararuararoarariararararoooooonentanananololieliiaiaitetrererevleDalce%edede$edduceeteaeaarzanzalzrdzelvnivievCuoninuuuquatuttatatortentatouslosisisasr$urigr#rtororherpherrrrcopyntonhononen$nn%ainlininouinomomimllllillcklllllalfalaltablbllalalalikgagiagergmgkgdgifnifereeidididuenclunc&esncerncinc%ancerncarncancalncincusicticieclacfrooeli$ieoontintrinrinpinninminlinlinlin%sinrinlinnlinkinlinlinlinlinlinyhineethnehingindinbinnoutortittiseispisrisnislisuislisbisgisdissraporugurgicaairhifedsciemorarooalracacuselelheltaltaalalvukthtchadua#uaur%gaonaiaia%ririiiiaaea$eaciaiaaaaoiuoi#i#eivsisiisals$es$asoooaithithowowurpoooooo alaioaiolioio%sioionoioiooolooisoiiiiiiteiaightomeoekeeee#aomaiaia$eaiaialeaea#eacrouhieearro#o$iizovvevomut%useost%cerit%ise%ese%asetearert%meaeropaewn$seonrmelldleleknheaheeihethshhechdgrdoundldiducncBa&aca&eca&ica&ega$uuiouiouiou$iueoueoueubesesb%pibCeCeDshDchionsinsalslishtsisgesgsdesdsasearooironrinenieninrighrighligheighhifraf$dgoaoaoahaui$es%quii%osiinni(failailaililiurouar$urenaionrirnlglalfalalbllk&gahleeckeodtudeedaaVwwwxHz\zzR{h{{|X|}},}~f~~f h@w (5  5H N L N w u-uuz L 5N Hw H ww LN X WNef  M@E% F  >fe& ʃ%%/ u-N t NeN V NeN  u-u- ނNw ނ w Nef <  ww  Dԋ  r e0@  r X a %zw`  f %@P(( w &A@I#EEFNuw w N tf P%ww Ntf P%ww DCԋ Ԕww DCԔww w7w7 7Sw|f@fw`7w\7&wb f@wL fw07w,7,w,f@w72w fff@fw6w6w66w f@w6w6w 6>wfw6w6Fw~ff@wv6wr6LwRfw^6mZ6V6Rw2J6wmD6fw46Rww&6 f@w fAW @w5 fn1n755 ew5X 5w7L7H7D7@7<7874707,7(7$7 77777 777f&墄 & n fwD5w@5^w f BRfw5dfw5hw f@w4w4lww C  5!$ABA  D & r@rr @`   BJw8& @N   C 5  N B A @ A- A    BJww D @ C@ppC`pLww C  5!@D  r@rr `  CKwP@  C 5  B A @ A- A C   Kw7NFw C  5!BA  D & r@rr @`   w& BAN   C 5 N B A @ A-  A    w2w "B A@ C@ppC`pw @& BF2jR x  . D j   Busy. Available. Floating Exception. /usr/adm/tracct/tmp/taXXXXXCannot create temp file. nottyTypesetter busy. Cannot open can't open file can't open file Too many page numbers fiflffffifflWaiting for Typesetter. Troff finished. %Too many string/macro names. Out of temp file space. Bad storage allocation. Core limit reached. Macro argument too long. Cannot divert. &''''''''''''''''''''''''''''&''''''h''''z''''t''''\''b''''''''''' ''& ''&''&>'n'&''&&''&&8'&J'P'V'',,P,h+-,+t+h++h++h+h+h+h+h+h+h+h+h+h+,h+`-, -Too many number registers. ixcmzvldwIXCMZVLDWDivide by zero. 23Cannot plant trap. User Abort.Cannot do ev. if-else overflow. :/usr/lib/font/ftXXxX8RIBS $DDDKKKKKLLKLLKfp: bad font position fp: no font name Cannot open Cannot read Mount font on Line overflow. Trap botch. Word overflow. ՠException word list full. Zero field width. Excessive paper use. Pages finished. z%nlyrhpctdnmodydwlndlstsbc.'/usr/lib/tmac/tmac.xxxxx\/dev/catҦ dsasspV8ftHpsvFvspNnr0if|:ieL:el.:po5tl"tm7bp7ch6pnb7brLOti5ne?nfd3ce4fiJ3in4li6>ll5ns3mk@rt8amde di!da|!whp6dtf"itV@rmrrJ0rnnad2rst3na>3pl>6tax>trZ?ul?cu?ltP5nxsoigJtc4fcTgec>eo*>lc&4evL9rdD=abJBfl<9exssNfp*LcsMbdNlg Lhc4hy84nhp4nm~Ann"Bsv,AosTAls5cc3c23em$9af1hw^mc@pm$uf @pc>$ht^fzXEcf<  HH .'.`8pH 4hybusqemru141234mififlffFiFldedgscfmaagaulsl*a*b*g*d*e*z*y*h*i*k*l*m*n*c*o*p*r*s*t*u*f*x*q*w*AA*BB*G*D*EE*ZZ*YH*H*II*KK*L*MM*NN*C*OO*P*RP*S*TT*U*F*XX*Q*Wsrtsrn>=<===~=ap!=-><-uadaeqmudi+-cucasbspibipifpdgrnoisptesmoplrgcobrctddrhlh**bsorciltlbrtrblkrkbvlfrflcrcem+(Z[Rc' $#HIJKLMNOPQb`gC=8<:A506EG321/7-4>.F9DB?;\]ޠ   % "! )i fl&STUVYX^_hݠ·ƭش윞հŸ覤ǶakW磖  $  $ۛ Rɔ SSR $$   $ $ۛ QɓQR P $$  $   $ݜ R̗ TSS$$!!  $$$ WW YUVR$$$$$$$$$$$$$$$"**)  /dev//!60# c- k+"  m R 0  6 >  67( % w ^j%  x"   @ hNf  5-8$2$ %-$$ $ $$ r nm7!$7# #### eh"#u-  @ @m&  7# #@ @m x" %   %d  !R$  7`#R$  N# !x"   2!.! | 5 4!x"   Ndfe %N 0NeK!" % &%& NeQ!" % " " ""&  " " |"Ep" 2 % wBw 2C Wp @@`e#@%WpdD#Wp @@`e`e r yD #U!x"   %a %% %` !x"    rd%< !x"   7X!wH%a %e%` `     ' ( 7 8k!x"     & 0 6 w  ((Ne Ne 57 7 @7 AWpdlw %wd 'N@&   A @ r5 !x"   e  9%@  7!x"   @t7l  AA r %;  N@&   A @ r5 !x"   e% Ղ _>@A@ 7$em%@!  _ew  @#e 5@@- w @ 5@w  a rdNf fff!R$ e  R$  %e5wFw 6R$  w.w Ne J  wr@@r@@ # 2r  f  2 f""" e % ( 2N& < w j@ b  5  5  Ne  (%%N  N    @ww DB  E  2 Ґ%  B- w@w z ff %wnw ^D   w&3 s a r+Հw& f ew Nfef %@ w w BuNefef % = Ne&  @wxw hD@wJ n4 e(4 && h%4 %  4 E w uDAB %u f& & e wd5 5  W- W00u5  .u"BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A`"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w JDCB &E  z f   #̥-%0  E: E:  &E   z f   ww DuNfe& %4 ;#%p" p $$ n  & %S  w @w DE%& %  wj w V h" be-wH w 8 D@  2   4 4 w w D  w  r< wf =@+ @ a f ,  %f  &  e   f ,  4  Հ rw D& H     2& , w w h"-" w ef >@w D  ̥9Wp @@`e     + -̥0  wB w . N  Dw( w  Ne < f 6 ef&@ 5uNe w/%J %K  t! t5! n N n 5   %D-D-% eu Ne  w< w , DC%: e`m e rfw w Q@f& 2 e5uQ@f& 4e5u eeQu  )< ff eR< ff eC r<R r< A@epe@ f& vew F  5 $u   5u F   5`u`u 0D7, %n   #  0! # 7 )wfw V)*#ԔAA WpCeD#)ԔԔԔ BeWpCeZ#ԔԔԔ& $ ed& $ ed& $ ed& $ @%d 20e@ edc8 kZL"  m & $ )ww A r nwmw vD % A r  r e0@ԕ A r e0@w<w , 2)U70)U72)0)Ae vB7 55 a  a!RE -L%0) w >%8e rt 7"  `e   %e U? `e 70)U? a7 ?U ew DzE ww D5 @ r5N n!w5A vBB-  }ee@ !ۃ `!ւ `@ r `w *Nef   ww N tf %ww Ntf %ww DCԋ w@w w w $7wfw w $w f@w fw w $wf@U@f@A)wfw @e7x "t $wlf@fwT7r ffw: w6 w2 $w  f@w w w  $$wfw w ,$wf*wBJ f@w w 2$wfw m 8$wt wm fw| 8$wRwn fAW @wV f>)1>)7J 5 e&w8 >$ 5w7L7H7D7@7<7874707,7(7$7 77777 777f&* & >) f BRfw D$fw| H$wB fw0 }f@wH wD L$w7 Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFH O V ^ h q x            sundaymondaytuesdaywednesdaythursdayfridaysaturdayjanuaryfebruarymarchaprilmayjunejulyaugustseptemberoctobernovemberdecemberat: arg count /usr/spool/atrat: cannot open input: %s aat: cannot open memo file pwdrat: can't execute pwd cd %s%s at: bad time format: at: bad time format at: time out of range at: illegal minute field at: ambiguous month at: illegal day at: ambiguous day of week week%s/%02d.%03d.%04d.%02d/bin/shsh-c d o x f e g| c s l L u r D O X U(null)&&#M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec  AAAAAABBBBBB !;6f)0# c@ k=B%P^^ "9 0  6 >  67 } % w ! @xx@7x7x%x > r7x7x7x xwP!@e7rxĔ r y8@7j?7[?PxHxeHx @x >xUJ?P "@ xU2?   @  U?  E>   U>      U>   U >  U@t>_w  5f> BRwPw @5 = $ x  \w(w 5Ab= T5 R=d@  (ww 5.= N  ww  4 ww @  ww u=ue! r%@  euN n% N@  N   7`uN& V w0w Nf V ww NuWp DE 7 Buww D  ~e-$u u%Eu7 u uww 5    A%5;!At5; yy % t%ttt r7tEtA r  C5p; @ff %u5 5 uoe % 50; @ff %N f u]C -D̋)s& ( 3 "3#3%E vm&@ 3s 3( 3*3,e@@Ee  5:@ 5r: h w U^: V@ w   5<: @ (@ 2 ((5Cf P%N 5: Ey %r?Er\&   "# (* v@4% &,59  f @&& %5 55 ue %}5D9@&& %e@ A r  CCe 55 % ߃= e ww Cq P%%A 58 C   qwNw >Cxq %%A  f Vqww wJq  f 2ef&0q e  ww Cq %    ef&p eyp P%p   ef&p e  wVw F#A  wBw 25`|78N;A 2B %n 99E 9B %  4%  99E 9B %  w%y h9`9E X9B % xf4A %5@6 ,9$9E 9w Zo =Ax V wH ropoejox V w  x 2 5 jyf P%5%  N w : "ox.oԋ /ԕ/ y& V  w x?A  ww v.yx   nE %@ &%I5 E E 5e-jnD ^ne-TnWA  Fa  #-8n72nx ( @nU48n4n2n.n .n *nwx  xxҢӋ54 7- m7-mr  w \D@&& % && %&e"&e" %w.w  E5 x  %:mx2mԤ ˋ̥̋/  e-mۆ %lllA  el l%lww d  N ww x E J5F  @  ee@ f& eurl BBm-Zl tCEtWtEAh@0 t ~e-l ww  E 5 e-k_$E  x    x 2 5x{A   & & eBCf P%% j  & & NeBCf P%  . Cf P%  N _ ww xA  ww h%xjE 5    ~e~wTw DD & & eu & & rev 5um-6j NAEt5A vEu@Ah@0 @ph u-ۂww A  ww   5 Wp E -i 55i i-iA  EtWtEAh@0 7m5V0 ~NfA %540NA  ZmA  ww 5 0i@Be 5x-5w-5r-u 5s5s@ f&@&@&@&A <eNe   A e x B  ww D  ox  i x  x  xB   & & eC  C %%  & & eC C % x#B    E&Ex %ww Bfef % 0w w D@w 4 eR}4 && P%4 %  4 E w uDAB %u f& & e w5 5  W- W00u5  .u6BBwF J@B _@  o x d u        cK kB%P^^ ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AzBҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   w w DuNfe& %4 ;#%B7,  LyLy   & %S  w @w DE%& %  w w B Je-+w w x D@     4 4 w& f x@w  N  w w Ne < f  ef&@ 5uNe w/%J %K  tB t5B  N  5   %D-D-% eu Ne  w w  DC%: Re`m e rfww Q@f& e5uQ@f& e5u eeQu  }< ff eR< ff eC r<R r< A@epe@ f& Pewc F R 5 $u  R 5u F  R 5`u`u DcD7@c R%n(  $C  0!$C( 7 c}w@w 0f}DCԔAA WpCe^Cf}ԔԔԔ BeWpCetCԔԔԔ& r ed& r ed& r ed& r @%d 20e@ ed& r f}ww pA r nwfmw PD % A r  r e0@ԕ A r e0@ww  a}U7a}U7a}a}aAe vBa7 a55 a  a!RE -`a%} w Ra%Lae rt 76a r*a `e a  r%a`e U?`` `e 7`}U?` a7` ``?``U ew D`E ww D5 @ r5N !w|5A vBB-  }ee@ !ۃ `!ւ `@ r `_w Nef   ww N tf %ww Ntf %ww DCB r tWtE@`e w|w lDCԔwdw TD  ԋwLfw %w%w%Cw f@w fw$w$Cwffw$w$w$CwB f@w$w$w $Cwfw~$wz$Cwf@wb$w^$CwfwJ$mF$B$Cw6$wm0$fw $Cww$ fw$w$Cwl f BRfw#Cfw#Cw( f@w#w#Cw7]Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/dev/mt0/dev/tapx/usr/mdec/mboot/usr/mdec/tboot*D\vTape open error Bad usage mode uid gid tapa size date time name End Out of core Pathname too long - %s File ignored Directory checksum Warning: swabbing required Tape read error Tape write error Tape seek error %c %s .%s -- Cannot open file Directory overflow %s not found Can't open %s %s -- Phase error Tape overflow Tape overflow %4d entries %4d used %4d free %4d last %s%4d%4d%5d%9D %2d/%2d/%2d %2d:%2d %s %s -- create error %s -- write error doxfegdcvslLurDOXU(null)L{L{"CM:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec6}# cU kKv  a6 0  6 >  67jK % 8[w n` _ Nf f  8[wT`w D`jDfDNf NehHD S%Nel B  2Ne d8 D Y w_w _wDwD CeC C w_w _ CCȥ-p jB tCC C w_C jB C jB ~ |CexC%jCdC Y^C7& S 7HC~|8C S% ,C *8 "CeCw ^ _  8[w^w ^ "9 7 8 T9 0 . I 1 ~4  T \4 88 N8 9w^w z^@8 e  7"7 ! S Ne2 d8;fe2 P^ Ne2 w^@e250@05%;_ B _5 @ _N0f B _@N ^5`0@0 B  *8 0 0@e5(0 0@05%)=  0= =@% Ax@% Ne! S%@%@7"@7  *8 0_e_ ((0N0_w \ u  8u-w\ @w x\5 @ ?@ 0 AWp 1&=5 AWpAmWt1%AWpAmWt1/AWpAm CpCm 3 v8v8!AWpAm 1 VAWpAm l % % 7?7:7 ? 77 H? S 5 NeP? S% -?? S wd[w T[ 55_z @  r x-_z  *8_z _z N,? ZC 7"?9Wp` v8 ? J  9%9 *85 > 9 *8%.5 _z % % % % *8 255 @ ?@ A -z>p? -b> j>T>b>_ Z>e-B>_ K_ e %_-8WpAm q%s s *8%s8WpAm %a= S r8WpAm l%sV8WpAm %n= S 28WpAm c %^ 8 *8%  *8_z e _z 7WpAm e!u%I23=@0_z _z 7WpAm T_z _z v7WpAm T_z _z T7WpAm e!u@ up@=5 % 05 %() 05 u-5 _z 0@-_z :_ % -F% N 8@@mH%0%9  _z x6WpAmWte%uuu-} @@%R *8 /5=N F[%$g *8N 8_z % -% %-%+N :C  _z 5WpAmWte/uuu-} @@% *8 "/5=% -% %-%+N :C AWp e=u5 (%( ) AWp e=A- %9%0 u- } v.5=@AWp e=@%  *8 L_p %F@  <u@e5 .5= :C N 8Ne B@ &? ZC A 1?"4WpAm v8  -5_l *8w&Uw U )7n 7h 7 h 7379V d8 9 3=>  B 7 .( *  " 2wT  B   B  2 X3%8 8 0 ?.  )v8  uN 6N57Nf C +@ AWt@` @ Nf C  a* c_^ l_^ nb r_^ @ AWt@`  uN@ @a@ AWt@`51%- *@ @a  Zx1 Se@ @aN  fmJ1 Se @ AWt@` _^@ @a   1 Se@ @ac` k47v@ AWt@`5 J5 VN  P % @-_&0 S%A A=WpAmWte%NA A=WpAm e!ff %@0 S &&"0 Se _@ AWt@`5 J5 _N  _N S _f&/ Se & & / Se _@ AWt@`5 J5 _N  _ % @-_&/ S%A A=WpAmWte%NA A=WpAm e!ff %. S &feP&feP %_@ @a  fePfeP n. Se @ @a Jfe<BD. Se fe<&P$. Se&fePfeP&d- Se &fePfe<feP&- Se AWp &=%AWp e&=N&- Se&feP&fePt- Se 5 _jNf D 5_f@ AAWt@`5N J5 _fN S _fN  _f&, S%A A=WpBB`Wte%NA A=WpBB` e!f@ AAWt@`& %u$@eP@n, S%  @@ ?F, S% ., S N&&&, Se &&+ Se3@@@m @a &@@@me<&+ Se&@@@meP&/+ Se u- -f+_| -X+_  $ zf&>>+ S%5 @ NeP&&fePH+ Se -*5 3@ +@ @a &fePfe<fe<f* Se &feP* Se -x* 55@ 5l? -T* x]&H* S%5 NeP,* S% -** S &&) Se    ) 5?N&&) Se&&) Se &) S%O|) S%     55 C&ffeOfe(,) Se Ne(feP ) Se@ @a Ne(fe<"( Se@ 5? -( (eN(e'(eO1( Se(eOI( S%   &V( &?WR( Se| i8( SewDw CN 8 3D( S%N :1N p1N' S% :1 p1N' S%wzCw jCN 8 \@R wPCw :C    l tF' S  8' S \V* "' Se5 ' S 5 Nf " -&  A & S F & S P & S W & S wvBw fBc & S 5 -t&_uN 6N5Nf C _Nf C 5a h x@ AWt@`  uN@ AWt@` @ B Ne<h % S%%a%n@ AWt@` @ C @ BA @lB NePp f% S% _^Nf D NePx  0% S wAw @\ @  -=w@_=w @ 555@ ? @ "8" & `Ne 0" S  "" S  " S  " S w=w = 557! 7 !     =-& VG @ NfePF X Se_. @ S% 554@ -,Neff FL%5@   S N D Nfff `Ne -   S w/w p/ N@ z S%wJ/w :/   N T S%w$/w /7   %% *8 7D 7 ? 27 d8  >2 w|.w l.NL B  2@)N T# _$-* . 7 7@@ ==   " w-5 _-< @5= N C  a  n3@tm @AWtm1! @tmQ@tmAWtmp@tmPN ( C %s  -J@tmzH@tmj0 @tmXR - _2w ,5 _:5@ A B 2 CCBpB5 _*5@ Ee@ " HD >E  [ * 1>E 7>E% *8wmu= e-@w>*w .*7 7 Lw(*w *5 @ @a0 % 7R7L5 f@ @ @a &@7P @a @ @a @7&  0 *8w(  w (%  w(w (Nb Set S  8[wV(w F(5 f f VS%5  j  w (   = 5 u- \ A r N d8@w '%  Pַ L%GF *8w'w ' %E, &"  E lT5%  *8^ T P ED lT5%  l@w'w &# S% S  S  S  S  S  S  S  S  S   S w^&w N&#t S%wD&w 4& 5 @ DC Nea#D S% %5 @". S% -L87 S%w%w %; S F S w%w %g S Į w%w |%  S%7 wj%w Z% S wT%w D%  *8 "R S%z> S NeP( S% S N S% z  N  Se S A A=WpAmWte/u   96  S% -  N 5Z S%N=H S%  E2 SeAWp &=AWp e&=Nj S% ff %&"s SeNePfeP SeNf C %a S  S !T }@-Ne jB NeF S%Ne d8    S%   S  S  S  S% S% S  S Nef tC = "7@w>"w ." T S " B S%w"w "-"  F   w!--  Nf JM  5@ -5 Nf  f f JM 5%%%%w >!@ %=?   B @--8 w ! _@-  N f bE  5% N @ E   N f & bE  5Nf bE 5% N @ E   Nf 8 & bE  5%=%=%=%=w  @   x6 52N(%%Nf >   x< N S%%-N f >  G xB 52%'%#N f >   xH Ne(\ S%!J S% > !2 S%  NeP S%8  % 5@ - Nf  SeNffe)feP Se !8 S%F~ S u-_H @ JR S% R> S ww  5 @ 0 DC %5 $5 Neff FL%5  DC @ pDC - - س ܳ γwtw d= Nf JM 5Q@ -^"Nf ~ & JM @-Nf JM @- @5 6N5 N 6N%5 }@ 5@ D@w  [4 eK4 && L_%4 %  4 E w v uDAB %u f& & e w: 5 5  W- W00u5  .u:BwF J@B _W@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A~ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E JX z f JX  #̥-%0  E: E:  &E JX  z f JX  wpw `DuNfe& ~`%4 ;#% ] GG [  & ~`%S  w@w ~DE%& ~`%  w@ w , Ye-ww D@ ,Y ^  ,] 4 4 ww D  w r< wf Z=@+ @ a f ._  %,f Z &  _e   f ._  4  Հ rw D& ^     ^& ._ ww - wef >@w dD  ̥9Wp @@`e     + -̥0  ww AupuN [ wA vB w N ,]ww  KU7KU7KKAe vB7 55 a  a!RE -H%K w> :%4e rt 7 n_ `e   n_%e U? `e 7KU? a7 ?U ew ~DvE wpw `D5 ,]@ r5N [!w.5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef 6^  ww N tf ^%ww tNtf ^%wjw ZDC̠wTԋ w <DCԋ w2@w D  ԋwf@w fwwwfw̶wȶwĶw f@www wvfwwwXf@wnwjw6fwVmRNwBwm<fw,ww fAW @w fK1K75 e `w 5w7L7H7D7@7<7874707,7(7$7 77777 777f&` & K f@wNwJw7F@& BF baabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789Input%s .TS-ms/usr/lib/tmac.s-mm/usr/lib/tmac.m-TXr.ds f. %s Can't open file#*.29@JTZ`lx | expandEXPANDcenterCENTERboxBOXallboxALLBOXdoubleboxDOUBLEBOXframeFRAMEdoubleframeDOUBLEFRAMEtabTABlinesizeLINESIZEdelimDELIM.nr %d \n(.s Misspelled global option.nr %d %s Illegal optionz             H   H \ .rm %02d bad table specification charactertoo many lines in specificationno specificationdot not last character on format linetried to widen table in T&, not allowedfirst column can not be S-type.tm warning: can't span a-type cols, changed to l .tm warning: can't span n-type cols, changed to c first row can not contain vertical spantoo many columns in tableNonterminated font namepoint size too largepoint size unreasonablevertical spacing value too largecolumn width too longEOF reading table specification.TE.TC.T&T{Vertical spanning in first row not allowed\^\^.nr %d 0 .%02d .rm %02d .nr %d 0 .nr %d 0 .if \n(%c->\n(%d .nr %d \n(%c- .nr %d 0 .nr %d 0 .nr %d .if \n(%d<\n(%d .nr %d \n(%d .nr %d \w%c%s%c .if \n(%d<\n(%d .nr %d \n(%d .nr %d .if \n(%d<\n(%d .nr %d \n(%d .if \n(%d>=\n(%d .nr %d \n(%du+2n .nr %d \n(%d .nr %d \n(%d+\n(%d .if \n(%d>\n(%d .nr %d \n(%d .if \n(%d<\n(%d .nr %d +(\n(%d-\n(%d)/2 .nr %d %sn .if \n(%d<\n(%d .nr %d \n(%d .nr %d -\n(%d-%dn .if \n(%d>0 .nr %d \n(%d/%d .if \n(%d<0 .nr %d 0 .nr %d +\n(%d/2 .nr %d +\n(%d .nr %d 0 .if \n(%d>\n(%d .nr %d \n(%d .nr %d (100*\n(%d/\n(%d)*\n(%d/100 .nr %d \n(%d .nr %d 0+\n(%d .nr %d \n(.l-\n(%d .nr %d \n(%d/%d .if \n(%d<0 .nr %d 0 .nr %d 1n .nr %d 0 .nr %d \n(%d+(%d*\n(%d) .nr %d +\n(%d .nr %d +\n(%d .nr %d (\n(%d+\n(%d)/2 .nr TW \n(%d .nr TW +%d*\n(%d .if t .if (\n(TW+\n(.o)>7.65i .tm Table at line %d file %s is too wide - \n(TW units \w%c%sP0%c\n(%c-.nr #I \n(.i .in +(\n(.lu-\n(TWu-\n(.iu)/2u .fc %c %c .nr #T 0-1 .fc .nr T. 1 .T# 1 .in \n(#Iu .ta \n(%du \n(%du \n(%du .ne %dv+%dp .nr #%c 0-1 .nr #a 0-1 .eo .de T# .ds #d .d .if \(ts\n(.z\(ts\(ts .ds #d nl .mk ## .nr ## -1v .ls 1 .if \n(#T>=0 .nr #%c \n(#T .if \n(T. .vs \n(.vu-\n(.sp .if \n(T. .if \n(T. .vs .if \n(#%c>=0 .sp -1 .if \n(#%c>=0 \h'|\n(TWu' .if \n(#a>=0 .sp -1 .if \n(#a>=0 \h'|\n(TWu' .ls .. .ec .ne \n(%c|u+\n(.Vu .ne \n(%c|u+\n(.Vu .mk #%c .nr #^ \n(\*(#du .nr #- \n(#^ .if (\n(%c|+\n(^%c-1v)>\n(#- .nr #- +(\n(%c|+\n(^%c-\n(#--1v) .if (\n(%c|+\n(#^-1v)>\n(#- .nr #- +(\n(%c|+\n(#^-\n(#--1v) .nr %d \n(.v .vs \n(.vu-\n(.sp .nr %2d \n(.f .nr 35 1m \&\h'|\n(%du'\v'-(\n(\*(#du-\n(^%cu-((\n(#-u-\n(^%cu)/2u)'%c%c%c%s: line %d: Data ignored on table line %d \l'|\n(%du\&%s'\v'-(\n(\*(#du-\n(^%cu-((\n(#-u-\n(^%cu)/2u)'%c%c%c%c\v'(\n(\*(#du-\n(^%cu-((\n(#-u-\n(^%cu)/2u)' .sp-1 \& .vs \n(%du .nr ^%c \n(#^u %s\f\n(%2d0.mk ## .nr %d \n(## .sp |\n(##u-1v .nr %d (\n(%du+\n(%du-\n(%c-u)/2u \n(%du \n(%du \n(%du-\n(%c-u .in +\n(%du .sp |\n(^%cu .nr %d \n(#-u-\n(^%c-\n(%c|+1v .if \n(%d>0 .sp \n(%du/2u .%c+ .in -\n(%du P.mk %d .if \n(%d>\n(%d .nr %d \n(%d .sp |\n(%du .sp -1 \f(%.2s\f%.2s\s%sWierd. No data in table.Wierd. No real lines in table..TEToo many characters in tableno space for charactersno space for vectors!%&#/?,:;<=>@`^~_{}+-*ABCDEFGHIJKMNOPQRSTUVWXYZabcdefgjkoqrstwxyz:_~^`@;,<=>#%&!/?{}+-*ABCDEFGHIJKMNOPQRSTUVWXZabcdefgjkoqrstuwxyzcouldn't find characters to use for delimitersE %s: line %d: %s tbl quits too much backupunexpected EOF.de %d .ps \n(.s .vs \n(.vu .in \n(.iu .if \n(.u .fi .if \n(.j .ad .if \n(.j=0 .na .. .nf .nr #~ 0 .if n .nr #~ 0.6n .%d .nr #%c 0 .rm %c+ %s .ds #d .d .if \(ts\n(.z\(ts\(ts .ds #d nl .if \n+(b.=1 .nr d. \n(.c-\n(c.-1 .if \n-(b.=0 .nr c. \n(.c-\n(d.-%d .fc Too many text block diversions.nr %d \n(.lu .eo .am %02d .br .di %c+ .nr %d \n(.f .ft %s .ft \n(.f .nr %d \n(.v \n(.s+2.ps %s .vs %s .if \n(%du>\n(.vu .sp \n(%du-\n(.vu .ll %sn .ll \n(%du*%du/%du .if \n(.l<\n(%d .ll \n(%du .ll -2n .in 0 T}%s .ft \n(%d .br .ps .vs .br .di .nr %c| \n(dn .nr %c- \n(dl .. .ec \ .nf .ll \n(%du \h'|0'\h'(|\n(%du+|\n(%du)/2u'VIIIIIJ J&J4JdJdJlJ.nr %d \n(.v .vs \n(.vu-\n(.sp .vs \n(%du \v'-.5m'\v'%dp'1p-1p1p-1p1p\h'%s'-1p1p\h'%s'-1p+1p-1p+1p-1p+1p-1p\h'|\n(%du'\s\n(%d\v'-\n(%dp/6u'\l'|\n(%du'\(ul=\(ru\l'|\n(TWu%s%s'\l'(|\n(%du+|\n(%du)/2u%s%s'\v'\n(%dp/6u'\s0\v'%dp'\v'+.5m'.THnObO\OOOOPQzP8Q8QzP\h'%dp'1v-.5m1v-.5m.5m.5m\v'%s'\v'%dp'\s\n(%d\v'-\n(%dp/6u'\h'-\n(#~u'\L'|\n(#%cu-%s1v\n(35u-(%s)-(%s)%s%dp+'\s0\v'\n(\*(#du-\n(#%cu+%s1v\n(35u+%s%s%dp+'\v'\n(%dp/6u',VdVoVxVfVeUgVcVsUlUL4VuWr8VDVO"VXJVU(null)II&  AAAAAABBBBBB 6K0c k"b6@o@o ((: B flags, D dictionary, F files, H history, S stop, V data for -v H=${H-/usr/dict/spellhist} T=/tmp/spell.$$ V=/dev/null F= B= trap "rm -f $T*; exit" 0 1 2 13 15 for A in $* do case $A in -v) B="$B -v" V=${T}a ;; -a) ;; -b) D=${D-/usr/dict/hlistb} B="$B -b" ;; *) F="$F $A" esac done deroff -w $F |\ sort -u |\ /usr/lib/spell ${S-/usr/dict/hstop} $T |\ /usr/lib/spell ${D-/usr/dict/hlista} $V $B |\ sort -u +0f +0 - $T |\ tee -a $H who am i >>$H 2>/dev/null case $V in /dev/null) exit esac sed '/^\./d' $V | sort -u +1f +0 c k7gRy+cH case $# in 0) if random -e 1.1 then echo one bell system - it works elif random -e 1.1 then /usr/games/fortune else 1;1;1;1;1;1;1;1;1;1 fi ;; *) echo one $* - it works esac c k"#\_behknqtwzxx !a 0  6 >  67 % w | Hd\e@>@ȥ-1e@ȥl @ȥa x@ȥv l@ȥ0ȥ9 5%7wu e%%dƝ7 -%ddC힝& V7& 7>7~E7~@f D 7^ N@*A `% Bfe e%%%  N)@*A `% A Am@ 7NwL5   e ,&e@ f& | eA@9@ D 7 C@*A ` "A& f pfe eA@ r7PA@ r7>?eAWp@7@ ft e 5uBP7 > fe e%%"& %"C v5 @mAAmH %e؛  NO@*A `% etAWpetA-%B|-zvA vf% @r2ee: B *eȚƚ& 7̚ v& V7ښ5 _ _& uw &w|f& A Aw &wVf& 7L7X7D7P7<7P7H 7Wp-B3Wp- .B(WpNB &Wpf.B %557ؙ7&WpBB - fe ev_7 _@*A `  _ 2  4 e J e& & J e5 AWpN& AWpN J e % 77Ƙ7F7˜ v& V7И |@t@ D 7v ffh | e5nf& 7j55755WEwNwZ57p7\7h7`GE5A7L5&5&5& J e 7%7 57ܗE775wWA55&5&& J ezfe e`_NF7TLJ& V7vHC7vB_x-"_-_0 7077Af& Vw 7*7"_E7Y727&& J e77&7&7ЖH& J e7Ė B7B& @e5 aȥ_a= % = Ne 7TD7LE7DHC78eB-@<_ t7~@  *  ڕB *eBQ0 7̕77q 7pC&C7&̕@ Te  "f&@ (e0  qw6&@ e @ e^\e-R ww u-@w@w u-@w@w @A@ww @0 Aq 5w5 w v &  wbw R"A wRw B"A wBw 2 6e6 6"Ae  ww  l6tb6 ^6"At  5 @@mE ?26 .6 *6"A@@mE&  @@mȋ 5 5 5"A  w~w n 5l5 5"Al  N N N N w6w &w.w w&w  z5pp5 l5"Ap  N N ww  B585 45"A@&  5 @t?5 5 "A@t&  ww  4s4 4"As  N N N N wLw <D_ % U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w| N ff& e5u4 # 4  N ff& e5u%%w @ 0 @ & @& e5u #A@w@  @A@@ 5`u`u w .DC 5 u E     u-@ww DC 5 B E; &E  ~  u-@ww t > ff v%whw XNfef z%@ w< w ("Afef z% z1w w D@w 4 e4 && %4 %  4 E & & .e Ӌ @@ &70& e /ӕ-/ӕ0B~/ӕ.  ӕ0~ B~@@&7/ & e /ӕ-0 /ӕ./ B~ӕex/ ӕ- ӕ+ r e0e0Sw >uDAB %u f& & He w5 5  W- W00u5  .u@BwF J@B V_b@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AAҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w Nefef 5& e Cc k#\_behknqtwzxx ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E  z f   #̥-%0  E: E:  &E   z f   w w DuNfe& ` %4 ;#%"A+     & ` %S  w* @w  DE%& ` %  w w A e-*w w D@  2  X 4 4 wR w B D  w@  r< wf P=@+ @ a f   %,f P &  e   f   4  Հ rw hD& H     2&  w>w .A-") w(ef >@w D  ̥9Wp @@`e     + -̥0  ww  (U7&U7(&މAe vBʉ7 ̉55 a  a!RE -%& w  %~e rt 7h  \ `e L   %40e U? `e 7 &U? a7 ?U ew `DE wRw BD5 X@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `w fff 5& jeww r fff 5& jew^w N 5 %O N  = 2555Ne5& e555'0Ne5 B&(( e57% Be0" 5%55 5 B5@B e2 a=%27Ԇ2wb %5 B5Ne5& e55e0%7Ն`Jʕ0%2ʕ1  %2˕0 ʥ9 w Nef   ww 5@} ww w NwJAupAmNf V wrw b "@@5 _ fA rBpu@@`55DCN&  f& %5 2`D--`f  $`f& %`Df r%5 D-&  C-D-%@@AA@ Nf` V u_bNf V @`5_bf %Cw w  ҄DCԒ ww DCB5ҒS ww N tf %ww Ntf %wf@wl fwt"wp"AwLf@wX"Aw0 fwB"w>"w:"Aw  f@w "w"w "Awfw"w!Awf@w!w!Awfw!m!!Aw|!wm!fw!AwZw! f@w!w!Aw0w 6D @ C@ppC`pLw7\F@& BF#C333333u>(\a.outr%s: not found %s: bad format mon.outrNo mon.out %s: no symbols No time accumulated mon.outr name %%time cumsecs #call ms/call %8.8s%6.1f%9.2f%6ld %7.2f rdXodx2f@e"gcs2l2LzuXr~D\OhXU(null)A=(\6c k'4  #&) ໒ )N * 0  6 >  67 X % ^%w B)7 z@@ ?%? @  7I? 1NJ@  I N"@  | , h? 0 XJ Aw(w (hN? XJB? NJ 4? XJ  A&@  1@  ? NJ N3@  5 Ne @5%:%( %) %, Ne   9@ %,Z@  %: `@ |@   h> 1XJ^> XJ  @w'w 'Ne %:@ (> NJ > XJ  @@ v@w'w x' = XJ  =%=@ B@N wL'w <'7 t> @  7G @  N>J> G pbL:>  vL.> 0 Lw&w &N N l  @  N@  7 =N  ?= %L= %LNe  =w&w v&7 =  @  @   7.G  :?wL&w <&N  $?@ ?N w"&w &7 J= @  7F .=*= 1bL = vL= 0 LF N \ @  D@  F  >w%w %N  >@ N  7 :75ww 60L 6 LB8 6% 7676ww  8 c L N n wtw du F6 D6 @ CBBN nw( r yzB u \ 5`e%G  `7  Nh L@!  >7 L \ @  @ L 7 Z5@ L%= BBB nB n_8 %=%>B%=B= L_8 %=BB%& B v_8     / _v    _v     )%| B   N *(mD4%G l%"%'_ _ w 2%G4 F4pL 4w w N *(m3%G  @  Lww  30LLB:5 6% B53Wp u`7 33 L 3w-z35t3L l3%f3B wtw d  4 H3Wpu` Lw-(3w@w 0 A r 5 NA r e0N Lw w 7 41  2  N NB  ww  1 B  N N ww  ,4* 2) 2& 55@ M0MNeMB3 6%@ 5 -B27 :2wNw > 3 C # 3B "B r ytC v3%?0 ?e?^3 %~ICP3 C #~C?  43 1C?  3 0 L3 t?Cw % % %#%_?1 1% _Z?1 1   N% % %# ?1 1N @_Z% _Z  B%% l1 h1 N 5   -> J_Z 2B ʥAʥZ `J ʋB ʥ0ʥ9_ ʋ_}?0ʥ"ʥ' 0 0 $_B0cM 8040eM : &0%  | @0@_  !ʥ\  ʥ C T0 P0 "_  %  00 ,0 %_=  _& _z   _2  _h    {_ _h _    0 %(ʥ)_ʥ(_{_ _Z    }_ _ _r _r  |w N @% % ww c kr$4  #&) ໒ເdJ @% dJ J . .wzw j@ `=A@  . .=wDw 4DӋ %VP. C  ^%z. v.!w w %VNd. ^.Z.wT/ C  D/ @C CE./ C % / L% w  9@-76.@@7@-@C . @h . e%w:w:%:?h- d-5 @ ClD@ &C % @ C vDmD %7: * ^%ww . 0 L- pCwD  ^%wzw jh d5% % %(@e5 :=%)8%"%'@e5 =@- f, b,@e5  ;  =% =Dfe  -- 1C Ne  ^%, 0 L, AepCwtw d\P @5% % % 7;%;%{%} @ w&%\P:%\P 5%  *%  n @ w ww  5% % %(( 5% %  * *7 <:@BB ":p\P : H5* *:0\P% % % %,D _9 5% - 5% % ?H* D*u%# @p\P 5%  * *6 5% % %,% ?) )5 ufe\P Z5%( %)  @ [P [P@0\P fe\P\P %ww D7 97`x9̋p9 rewf9@ TR DԢӋw PXw N  " %N P N P4t8 4TR8 0TRwT 'N P4w .D *(  %ww 6 -7 -7 -BeS --H f%e@e H we/ 5tF%, f- $7\-7 V-mR-%@ D5 -2-G(- 7./C - - G5%, , 7,7 ,De%@ e -,@5  ], X x\HH  ,,0 tFe5%(( D %G@ D_ 5tF 8,H f%@e ˆ_ ,,I f +_+_ +N'I f @ DG D@ DG 5@7-u@ 5F@ Fb 5%  D A p G@ F D@ _ xdH ^% _ N% &  _ _ _&  & &_ _ ^ _ _ _ *_ _7 ,_,_ _ _7 "  _ _ B_ n_ _ 4_ _w d ff $$%wX w H Nfef Z%@ w, w  Ifef Z% +w w D@w  %4 eXX4 && (%4 %  4 E w $ uDAB %u f& & e w 5 5  W- W00u5  .u2IBwF J@B _B!@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* AvIҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E p" z f p"  #̥-%0  E: E:  &E p"  z f p"  ww DuNfe& R)%4 ;#%I& ' LTLT %  & R)%S  wB@w ,DE%& R)%  w w ~I #e-b&ww D@ R# B(  ' 4 4 wjw ZD  wX r< wf $=@+ @ a f (  %1f $ &  (e   f (  4  Հ rw D& X(     B(& ( wVw F~I-$ w@ef >@w D  ̥9Wp @@`e     + -̥0  ww  2nXU72lXU72nX~2lXv2Ae vBb27 d255 a  a!RE -*2%lX w8 2%2e rt 72 )1 `e 1  )%11e U?11 `e 71lXU?1 a71 11?|1x1U ew xDX1E wjw ZD5 '@ r5N %!w(5A vBB-  }ee@ !ۃ `!ւ `@ r `0w Nef (  ww N tf v(%w~w nNtf v(%wdw TD  ԋwLf@w" fw!w! Jwfw!w!w!&Jw f@w!w!w ~!.Jwfwf!wb!6Jwf@wJ!wF! 5 I = if(.not.(I.eq.(Missing left parenthesis in case).or.Missing parenthesis in case)))Missing colon after defaultdefaultSwitches unwound too farYrepeatif(.not.)if(.not.)elsewhileif(.not.)endwhilemissing left parenassigment inside conditionalmissing parenthesismissing left parenmissing right parenformissing left paren in FORillegal FOR clauseif(.not.(missing left paren in FOR clause))invalid FOR clauseendfor = returndo illegal BREAKillegal NEXTratfor:error at line %d, file %s: ****** *****F ratfor:syntax error, line %d, file %s & %s .ge..gt..le..ne..lt..eq..ne..not..and..or.%s more than 19 continuation cards continue goto %s VN  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~,xrmissing quotepushback overflowDDDD#D*D0D6D  67֘ "% =w A6 |i7 zi7 xiBe. bi^ij 6%e@e j whAe 5nd%, i 7i7 imh%0@ `5 -hbgh22C h h h5%, h |7h7 h`e%@ e -fh@5  ]Lh X xij  2h.h0 nde5%0 ` %bg@ `_` 5nd gj 6%@e ˆ_ ggj 6 g_g_ gNk 6 @ f D@ f 5@7u@ 5e@ eb 5%0  ` A p bg@ e `@ [_` xi _`k&  _`7 `_` && %_` $_`7.~_`L `CR-~ _`7~_`7 ~_`& `! _`& .& p   _` 0_`&L '%7_`|&Cn&R`&-&& n,_ && *_ && v_  &&&  & &&& "_ && %7 }_`& & _ & h_&- _ &*&,&+ _`  _` =7:}_`20}_`6&}_`7}_`4}_`5}_`0|_`3|_`1|_`~| ~| ~_`|}|'k 6e_`}| |} }_`}|Nk 6_ {r|_`}h|_`} }0d_`}L| ._`1 _`# B,_`"7|_` 0_     _`w ; 5 5N|f % @ A @̄e&  zk 6 @0  xjkNk 6 Nv|f %Nfff l 6eNf9l 6%%5A 1` &|@ ̄@ &ffZl 6eN lN lw:NkNkNkNkNfk 6%Nfkw (:w\z@ ̄@ &̄  5@ A @̄@ A @̄&  @m5z 1y p̄ {Nfffy~l 6e @ %1 @ %1\ll Nfzfl 6eNffl 6eNfXyl 6e@ A pN lw8w 8~$yrR1~iIbB@7}}l 6 z}l 6 w8w |8wxx x %1}1p\ y"x ~x &\tx &jx &̄ffN}Txm 6eNf2}8x:m 6ew}}Pm 6 w7w 7 wx6y r5N$yf %NffffXm 6e x Nfzm 6%wz7w j7fe  7x7w@7d B" I R  b i r1dd`dm 6 Rd:|w72Fd3>dw 6 7 w w 1 Ap\w A Ap@5@ 5̄5 %xx5ewNwf %Nvm 6% &Nff %Nv~vfm 6e@ dv 1l@ 5  Nff(( %N0v,vfm 6e@ v 1lvm 6 <%"wwfffu@ A @̄@m&m 6e @ A @̄@m fun 6eNvuffju.n 6e 0@@A @l̄f4 l7rt@  L xnnNPt o 6%Bt (6t 0 ̄ `u&t ̄t &fto 6es s 1Ap\w3nnnNn %w v3    Nff n, N#  N"f *% t@ ̄@ &fBo 6e@ 1\w3w 2 7&s^oNsco 6% s (r 0 ̄r r 1Ap\w2w 2Nf   pw2w |2N =w|2w l2Nf  _E[x_QPx_ @ 0 &%do 6 o 67 T_  H ds'^sZso 6%0_o 6 wwo 6%,so 6 p|o 6o 6p 6%w q p p w1b :  plw?p pbZw : %  p ?p pb & : %   5%vv.w_-6^ p 6 w 0D % %-^ %p& %7V{-] w0w 0 +p 6 5Fp 6 pv fOp 6% @ q qf[p 6%q lip 6 -^]v f~p 6%p 6Np 6 N lw/w / ,w .,%B[ [[w&,r  r rEq 67r%  q%qq q-qqq ;qqq mq& N6 7qq mqq %w +DӋ %n>[ q  ([ $[!wX+w H+ % % 7lk   "" ^ { } ~-NXWw+{}7 $w&% )%\  %"w\ vv0 v%v q % P%"v0j%  r& %?Z Z  kr 6   %5" Y Y@ l Y Y ^k_@0r 6%_ Ƒ %5 $kAr 6 _@%%%@ _@% _@% _@% _@% _@_w )DB % % %=S% 3% 0% -%{*%}'%"$%~!%^-V%\ v%"ҕ\Ґ NXr % N%{%}%" %~ %^% -UX X w~hwJ(w :( 5% % %  45 5@-8%5@@mH u-9% "% %@@mH u-} l5% @@m% Npr % wv'w f'  %  3 "5 % r % "5f % Xh Nfr 6%w&w &N @  > Nr %N& @ w&w &r&  w&w z& 7g7f&  % s %q7Sp7S%oS%f 7tS7nSw*&w &B `ʋ rdC @mf ^@  t w%   >y  Lt @m4 @mw % 5 @t$s@t&"sƑ % @t "s5 @ts@t&s % @t sw%w %LRNfy 6%w"e RfNz 6 w$w $R   7dz 6 fN&z 6 w$w $ @ eA pd e'N4z 6 @ 5 @ dCz 6 -e@ dHz 6 e epdw$w $Sz"@ 5d5 u Re @ dXz 6 @ de5`-"e_B 55@@m55 /@ d A Ad @̄f  5@ d ̄f  5@e5` u- d Nffdz 6e@@m55 @ d p̄@ d AAmp@e5` u- u-u5 (@ d@m f @ d@m &f '%@ @ab$@e5` u- r7xb A$ pfb A$ p̄̄Tb Nb 1 Ap\ pc6b ̄,b &ffb{z 6e  bz 6 5 @ @-zN"@ @a&$z 6%@ @a$ l u-z 6wbwn!w ^! waAe1 r2Wpuxaz 6 %-%,Nf%,zzz%* Nffz %+ Nffz 6e 4b` ̄` &fffz 6e w w  5w`@ A @l5@ @5 aNfffn`"{ 6e Naf %Nzaf %NfL{ 6%NfffZ{ 6eNff@ A @̄@&_x{ 6e N@  A @l̄A @̄&ff{ 6eNf@ &̄ff{ 6e v_ p̄j_ p^_ X_ 1 Ap\N lN lww  @ 5@ 5̄w_@@efe   r5%@e5%{%}A r  @5%@e5^ AWp(px^ C rWp(p̄A r L^ 1̄@C re5(^{ 6%@0 (_% [_% c_z% f_R% n {_% |_&Nefefef &eN@ &r| 6% ?N| 6 @ )_& ]_& c_:& f_& |_& }_R&Nefefef &e@ | 6 | 6 F^Nfff\ &̄\ &| 6e w% || 6|||_j$%,|'|"|_j$1| 65 9| 6eu->| 65 C| 6eu-H|X|S|N|_j$g|b|]|_j$p|n|l|_j$% || 6_$|||_$%|||_$| 65 | 6eu-| 65 | 6eu-||||_$|||_$|||_$w  N%} 6 5 N+} 6 u-N .} 6 ww  7[%-5 @@5 r5@@m 55 u @ d 5l u-Z A upAmp5 @ 5@ d @m5` u-TZ C r A Ad ĀAmAeAp̄ N[,NZ2} 6%u @ dG} 6 u-Y ̄Y &L} 6%@ dZ@ &d %@ dYX} 6%@ 5%@ dZ@ &d %@ dRYNY@ &df} 6e u-(Y%R& Y &̄ Y} 6e@ 5u-_J*@ d 5@ d 5̄@ -@ C= L R @@@m@ &d@ &d@ &} 6e@@@m@ &d@ &d@ &}@ d@ &d"X@ &} 6e@@@m@ &dW ~ 6eW%R& W W @̄@m&+~ 6eu @ d l u-W ~W 1 Ap\w:w * w^W@ 5@ 5̄@ 5@ 5̄%#3@ @m@5@@m@-@@5@@@&  @mV 1̄@@@*V p̄@5@eAA@ @@ @m@@5Ne&  @m\V 1 WLV BV &̄@ &fff$VB~ 6e@ ffV}~ 6eN lww BWwU W WU~ 6%ww ~ 5wU VNffU~ 6eVmB%VmzB5@ 5@ 5̄@ 5@ 5̄@ 5@ 5̄@ @m@5@@m@-@@5@5@eAA@ @@ AA@`@5@@@&  &fe& b%e@mzT 1@@@&  @mVT 1̄Nff %Nff %Nf~ 6%Nfff~ 6e@ @mffff~ 6e @ fff 6em@TN lN lN lwbw R+N =7`T-N =7TN =7T T |Tf: 6%ww w*S ZT S S &̄ff6TSQ 6e % TT5%@5ffR{ 6ewSwrw bfe  +Ne =7`?-Ne =7h?Ne =7X? 7vS7DRJ? ~B?hS% :?4? r(? r7?ww wRN0Sf %N@  &@ &̄f 6eNf@ A @̄& 6eA 1` R@ @ &̄ff 6ew,w  H7NQ 0 ̄DQ (8Q 2Q 1Ap\%uj%b%Z%R f %55C 7c7c 7a7aNf L2 7nc hc7bc%a N %a@m a5a0ZZRP c\FP c(( nQ 4P *P &\ P &P &̄fPfՀ 6eNO 6%ww  1@  ^_h5 x%1b N 5@wp%1nbN 5`pZ `Pb%1Fb  N 5 %1(b qe 6 %1 b lp%1a p@m@`ȥ= =f 6 (` `pZ `%1a 2@m`ȥ>>-im%1a ls %1na _pZ ___AmAu _pZ ___AmpZ ~_ |_%( n_l_AmpZ ^_ \_%*_2J_(Y_2<_AmpZ ._ ,_&_$_AmpZ __,3_\Z __fZ ^^%1`1pZ ^mf 6 ^\Z ^^fZ ^^PZ ^%1J`15_2%1ZR<^\Z |^x^^Z n^j^fZ `^\^\Z R^N^|ZB^\Z 8^4^^Z *^&^jZ ^1_2^fZ_<3%1Q]jZ_<3]pZ ]%1Qw l ]\Z ]]|Z ]wX w H ]\Z ]]fZ ]]1Z ]]pZ v]r]\Z h]d]fZ Z]V]PZ L]w w @]\Z 6]2](Z (]$]pZ ]]pZ ]w w ff X<%w w Nfef 7%@ wf w R bfef 7% Jw: w & D@w  >4 e4 && TA%4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .uBwF J@B _v9@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ARҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E : z f :  #̥-%0  E: E:  &E :  z f :  wXw HDuNfe& A%4 ;#%bcF @  >  & A%S  w|@w fDE%& A%  w( w Z ;e- Fww D@ ; @  :? 4 4 ww D  w r< wf 2==@+ @ a f 6A  %>Zf 2= &  Ae   f 6A  4  Հ rw D& @     @& 6A ww Z-D wzef >@w LD  ̥9Wp @@`e     + -̥0  ww  [U7[U7ZZZAe vBZ7 Z55 a  a!RE -Z% wr Z%Ze rt 7zZ vAnZ `e ^Z  vA%FZBZe U?0Z0Z `e 7ZU?Z a7Z YY?YYU ew DYE ww D5 :?@ r5N >!wb5A vBB-  }ee@ !ۃ `!ւ `@ r `"Yw Nef D@  ww N tf @%ww Ntf @%ww DCԋ w@w lDCԔwdw TD  ԋwLf@w" fw.Aw*AwfwAwAwAw f@w@w@w @ wfw@w@wf@w@w@wpfw@m@@wP@wm@fwv@w.wh@ f@wX@wT@$w7UF@& BF"<=4;:;:;:XYCE>DAB?@CE>DAB?@CE>DAB?@wxyz"5{WVNMiLKO97o\Q Z~vu[tsq|"]2r^_`a8$#%&'0"3( )*+h  -/.,!p$#%&'0"XY3( )*+wxyzXY  -/.,!$#%&'0"jkl( )*+  -/.,!$#%&'03( )*+  -/.,!$#%&'06( )*+P  -/.,!$#%&'0( )*+  -/.,!1FGHIJ}RSTU}bcdefgmn1111ooooo@oooo@oooooo@@@@oo$oo@@@@@b<`][aZYWV\GUmTSQPON0LJIHGFEDBA6  ! ""  )!$&'(%.{ -*,+  #"26745031{{{{{{/  }}}}}}}{{{{}}}}')MNOHIKJ2TUVWXYZ[\ ,QR?@789:;<=>E-./0L]^PAB3456"#+F%&( S!* $CD 1G `",``6DNXbbbbppx,>HNV`h  *4>Hx,,,, *2:BJV\bstate %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d syntax error. from: old ps %d, new ps %d, fflg %d . to: old ps %d, new ps %d z.nr 10 %du .ds %d \v'-1'_\v'1' .ds %d ^ .ds %d ~ .ds %d \v'-1'.\v'1' .ds %d \v'-1'..\v'1' .ds %d \v'-1'\l'\n(%du'\v'1' .ds %d \l'\n(%du' .as %d \h'-\n(%du-\n(%du/2u'\v'0-\n(10u'\*(%d\v'\n(10u'\h'-\n(%du+\n(%du/2u' . diacrit: %c over S%d, h=%d, b=%d . e:eb: S%d <- S%d S%d; b=%d, h=%d \|.nr %d \w'\s%d\*(%d%s' .ds %d \h'|\n(97u-\n(%du'\*(%d .as %d "%s\*(%d .ft %c . setfont %c . b:fb: S%d <- \f%c S%d \f%c b=%d,h=%d,lf=%c,rf=%c .ds %d \f%c\*(%d\f%c .ft %c .ds %d \*(%d\h'-\n(%du+%du'\*(%d . fat %d, sh=%d .ft %c .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .ds %d \v'%du'\h'\n(%du-\n(%du/2u'\s%d\*(%d\s%d\h'-\n(%du-\n(%du/2u'\v'%du'\ \h'\n(%du-\n(%du/2u'\*(%d\h'\n(%du-\n(%du+2u/2u'\ \v'%du'\h'-\n(%du-\n(%du/2u'\s%d\*(%d\s%d\h'\n(%du-\n(%du/2u'\v'%du'\ . from to: S%d <- %d f %d t %d; h=%d b=%d bZJR\(*S\(cu\(ca\(*Pfunny type %d in funny.ds %d %s . funny: S%d <- %s; h=%d b=%d  1. integral: S%d; h=%d b=%d \(is.ds %d %s 4q zhP8%s.nr 99 \n(.s .nr 98 \n(.f .nr %d \w'\*(%d' .nr MK %d .if %d>\n(.v .ne %du .rn %d 10 \*(10 .ps \n(99 .ft \n(98 .EN%sinput line too long: %.20s .nr 99 \n(.s .nr 98 \n(.f .rm %d .as %d "%s .as %d \*(%d .ps \n(99 .ft \n(98 .as %d "%s.ps \n(99 .ft \n(98 \*(%d . answer <- S%d, h=%d,b=%d .ds %d \x'0'\x'0-%du'\f%c\s%d\*(%d%s\s\n(99\f\n(98\|\x'%du'no eqn strings left.ps %d .nr %d \w'\s%d\*(%d' -rcan't open file %s.ft %c eqn fatal error: file %s, between lines %d and %d eqn: fatal error: file %s, between lines %d and %d Brcan't open file %spushback overflowquoted string %.20s... too longmissing " in %.20s. lex token = |%s| . found %s|=%s| . %s is not a keyword token %.20s... too longUnexpected end of input at %.20sUnterminated definition at %.20s. name %s defined as %s out of space in strsave on %sInclude not yet implementedBizarre delimiters at %.20s:u#>u"BuFuKuNu Ru2Vu6Zu7_u0cu1ju4nu3tu5zuuuuuuuuuu u!uu$u%u)u&u'u(u.u/uuuuv vvv"v*%v+*v-.v,3v 8v ?vFv JvOvTv Yv\vavdvivlvqvtvyv|vvvvvvvvvvvvvvvvvvvvvvvww wwwwww'w,w;w?wCwIwOwUwZw_wdwjwowuwzwwwwwwwwwwwwwwwwwwwwwwwwxx xxxxxx#x)x.x4x9x=\(>=<=\(<===\(==!=\(!=+-\(+-->\(-><-\(<-inf\(ifinfinity\(ifpartial\(pdhalf\f1\(12\fPprime\f1\(fm\fPdollar\f1$\fPnothingtimes\(mudel\(grgrad\(gr<<<<>>>>approx~\d~\ucdot\v'-.5'.\v'.5'......,...,,...,alpha\(*abeta\(*bgamma\(*gGAMMA\(*Gdelta\(*dDELTA\(*Depsilon\(*eEPSILON\f1E\fPome((ga\(*wOMEGA\(*Wlambda\(*lLAMBDA\(*Lmu\(*mnu\(*ntheta\(*hTHETA\(*Hphi\(*fPHI\(*Fpi\(*pPI\(*Psigma\(*sSIGMA\(*Sxi\(*cXI\(*Czeta\(*ziota\(*ieta\(*ykappa\(*krho\(*rtau\(*tomicron\(*oupsilon\(*uUPSILON\(*Upsi\(*qPSI\(*Qchi\(*xand\f1and\fPfor\f1for\fPif\f1if\fPRe\f1Re\fPIm\f1Im\fPsin\f1sin\fPcos\f1cos\fPtan\f1tan\fParc\f1arc\fPsinh\f1sinh\fPcoth\f1coth\fPtanh\f1tanh\fPcosh\f1cosh\fPlim\f1lim\fPlog\f1log\fPmax\f1max\fPmin\f1min\fPln\f1ln\fPexp\f1exp\fPdet\f1det\fPout of space in lookup.ds %d \k(97\*(%d . mark %d .ds %d \h'|\n(97u' . lineup %d . %d column of S%d, rows=%d \ \ . colct=%d . row %d: b=%d, hb=%d . matrix S%d: r=%d, c=%d, h=%d, b=%d .ds %d "\*(%d%s .ds %d \h'%s%du'\*(%d -\v'-%du'\*(%d\v'%du' \v'%du'\*(%d\v'-%du' . move %d dir %d amt %d; h=%d b=%d . b:bob: S%d <- S%d over S%d; b=%d, h=%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .ds %d \v'%du'\h'\n(%du-\n(%du/2u'\*(%d\ \h'-\n(%du-\n(%du/2u'\v'%du'\*(%d\ \h'-\n(%du-\n(%du-2u/2u'\v'%du'\l'\n(%du'\v'%du' .ds %d \|\v'%du'\(lf\(bv\(bv\(lf\(lc\(lc\(bv\(bv\b'\(lt\(bv\(lk\(bv\(lb'\(lt\(bv\(lb\(lc\(bv\(lf|||\v'%du'\*(%d\|\v'%du'\(rf\(bv\(bv\(rf\(rc\(rc\(bv\(bv\b'\(rt\(bv\(rk\(bv\(rb'\(rc\(bv\(rf\(rt\(bv\(rb|||\v'%du' . curly: h=%d b=%d n=%d v=%d l=%c, r=%c \b'%s%s%s'. S%d <- %c pile of: S%d;h=%d b=%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .ds %d \v'%du'\h'%du*\n(%du'\ \v'%du'\*(%d\h'-\n(%du'\v'0-%du'\ \v'%du'\h'-\n(%du'\*(%d\v'0-%du'\ \v'%du'\h'\n(%du-\n(%du/2u'\*(%d\h'-\n(%du-\n(%du/2u'\v'0-%du'\ \v'%du'\h'%du*\n(%du' . b:b shift b: S%d <- S%d vert %d S%d vert %d; b=%d, h=%d .as %d \v'%du'\*(%d\v'%du' . shift: %d;ps=%d . shift2 s%d <- %d %d %d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .as %d \v'%du'\*(%d\h'-\n(%du'\v'%du'\ \*(%d\h'-\n(%du+\n(%du'\v'%du' . setsize %s; ps = %d . b:sb: S%d <- \s%d S%d \s%d; b=%d, h=%d .ds %d \s%d\*(%d\s%d .ds %d \v'%du'\e\L'%du'\l'\n(%du'\v'%du'\h'-\n(%du'\*(%d . sqrt: S%d <- S%d;b=%d, h=%d 3p2h5h5h5p2h5D4p2p2h52p2B32p3p2p2p2p2p2p2p2p2p2p2p2p2323h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5p23p22h5h5h5h5h5h5h54h5h5h5R5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h52h53\ \|\tconverted token %.25s... too long. %dtext: S%d <- %s; b=%d,h=%d,lf=%c,rf=%c .ds %d "%s 8dl8ox8xF9fT9e68g9c"9sF8lF8L8ul9r8Dp8O|8X8U(null)6&c k,3$-069<?BEHKss 0 0  6 >  67jH % (w /5w/w /& & eC C @7\C7,C d*7XC d*7NCLCmFC BCNf $ T?  8 CC l  CeC l :   P P w.w .@<@@0(w.w .7>7B7`B7>7B7XB _e@ r y.@ FD%e u@ A H7 v>Nefefe % 5AH>57:>$>@7ANefeC % NefeC % =7 =7 =Nefefe % @e55_DA_D7=_D%_Dt=@7RAe _D6A_D.A_DNefeC % _D L_DNefeC % _DNefeC % _DNefeC % _D _  _n  NefeC %_D _h _ _  NefeC _  _ _4 _. __w+w +D%@l erNf&e % Nf&e % Nf&e % wX+w H+D% *å-Aå.%+ B (= ew*w * % ; >7>%rx>@7>> Wp N> + 5I7> :7>w>w>>Wp m~> >Wp mn>N  )j>Wp mX>eN  P>Wp m>>   b0>Wp m>1 > w*w *0 >?@eCP~CCP~CAeP~ Wp m=IuWp m=q@Wp m= Wp m=uq -=w)w p) x=@m j= +  wZ)7V=T= J=mD=ȜC >= C-@w )5 & e5 55 & &e5 w(w (5 & pe5 55 & e5 w(w (D Wp AmIBWp AmIt Wp AmIBWp AmIt -p<wb(w R(D45v45ruv5  t_j t _j @55p5n555v55r5v55r5p5unp5n"55rA5r5vA5v5r@5r5v%rN5vJ5ruvC&5v&fnfp e&@eP~54545&4(4(54fez  %I5n5p455v55r5r&5v&fnfp e&@eP~554554545&4(4(5u4wt&w d&@55@5u555@ '5& B&5 B&55 B5@55 B&555 55555C> 5A5A 5A5A&55 5AuA 5AuA&555555HAeP~Hw%w %$55555u5@55 B&555u B&55 B&555 Bu5&555&555AuA&55AuA&55 5 5&5& e5 5 5&5& e5  u5_ 5u5_ 5555HAeP~Hwv#w f#DN&   v3t354& e&4& e&4 u45tw.34$"3 3t t$4&4& et&4$@4 w"w "h 2_6t66j6 le6\6 p ~6L6 p n6>6 p Cfe  5 C%x2B6 @a&26 @a& le%L2(6m:2 @a&6 @a& le5 @a&52 @a& le D-Cfe  5 C%1 @ah5 @a&X5 le%1( @a:5m1 @a&(5 le @a5 @a&5V1 le D-w"!w !D5 %rI F45t_$5&fef ne 4tC5A&fef ne 5A&fef ne  B&55 45$&5At& "e55&4uWA& 0euWA%5&4uWA& e55&5At& euWA555u@w5& ett A Am 4& e&5w d@07/507/55& eAqq A  Am ww 5 D/>/ @ 5 UNeCAWp m2If e NeCAWp m2qf e 5 ) . Nf pNf P AWp md2Nff %@ 5@ -N2n. w6w &D 4(5& ett  5$ 5 u & 5 u  w}w N@  % ww C@  %*:B1& | C@  +n1"  xF@Z1B:BJ1& | w(C@  Ne@  %C .w  -  -Nf  wNf P 0Nm0 Nf P 0   @Pw hf0e20 P 0FD @  n, j,Cx  @ Cy  ww 2@0q(&@&@%c k3$-069<?BEHKssr@@@0q(&@fe  eNe ww @JB   (ww BB 'ww rBB 'wrw b -n- -BBn & N N w:w * -e- -BBe & ww  j-t`- \-BBt & 5 @@mE ?0- ,- (-BB@@mE& & @@mȋ , , ,BB & wvw f ,l, ,BBl & N N N N w.w  ,f|, x,BBf & 5 @@mE ?L, H, D,BB@@mE& & @@mȋ , , ,BB & ww  +m+ +BBm & N N wZw J +p+ +BBp & N N w"w  |+r+ n+BB@& & Z+ @t?H+ D+ BB@t& & ww  "+s+ +BBs & N N N N ww p5555w`w P"5!,7)w@Ne5& 4.e5 5A5@ 5@557) A5((5@ 55uW@557(57(57(57(5W@uw(uw(uw(55uw(5w `5& e7j(wVw F5"55Ne5& .e555@555 Ne5& .e5ww 5& ~eww Nef:B %ww Neff %ww DA555  ԋNeffe %wNw >DC 5 5 _@ E_&%%_5 %*e5  AWp `euB 0u%l%h5 %[ Be  Neffff De   - @w@@ @ EN 5% % % %Nf |     %_@ _N 5 %Nf | w N%c%s%[Nf ff f& ewT5 5 5 5 %e%f %o%xDe5 5 @ @ EN % % % %-5 Ԑ@ @ EN  1 A@  5u%_N  | = _"%+ @ _@ E B8%)%._%e%E %    Ԑ@ _@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _L _L N %+ %- %0_L%9_LԐ@ _N _ @e! _@t@]   xANe (A _Ne (A @H@pHw <DC = 5%c%0u5 %s E  rBA%%c5 %[rBA   E  %%   | =  D- %cwN w :D ̥^  BABA %E%]  BABA  ww Nfef "%@ w w BuNefef "% = Ne& & @wfw VD%    | w2 - -w D@w d*4 eH4 && :/%4 %  4 E & & .e Ӌ AA &7& & e  ӕ- ӕ0B~ӕ.  ӕ0~ B~AA&7 & : e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw N uDAB %u f& & He w 5 5  W- W00u5  .uABwF J@B V_l$@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A2Bҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w  Nefef 5& f,e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E & z f &  #̥-%0  E: E:  &E &  z f &  w w  DuNfe& /%4 ;#%BB J. DD d*  & /%S  w:@w $DE%& /%  w w :B (e-ww D@ ' .  + 4 4 wbf x@w DD*\5% %-%+ 5 55 55  B5eA5 B%.55  B5eA5 B %E%e$%+%-  Wp B`eB  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& r.e5 55w~w n bHU7THU7JHHH@Ae vB,7 .55 a  a!RE -%H w %e rt 7 \/ `e   \/%e U? `e 7nHU?b a7T LN?FBU ew 4D"E w&w D5 +@ r5N d*!w5A vBB-  }ee@ !ۃ `!ւ `@ r `rw lfff 5& ,ewVw F fff 5& ,ew2w " 5 %O N  = H555Ne5& .e5*I55'0Ne5 B& .e57 Be0" 5%*I55 5 B5@B eH a=%H76Hw6 %*I5 B5Ne5& .e55e0%*I77`Jʕ0%Hʕ1  %H˕0 ʥ9 w 5 = ww Nef .  wvw `5@m 7X7R"wDw 45@} w0w N tf /%ww Ntf /%ww D  ԋwf@w fwRwNwJnCw f@w0w,vCwpfwm|CwPwmfw|Cw.w f@wwCw7F@& BF2`@m@s@z@@@}½H½HD@ T@vX9disconnectedsoliddotteddotdashedshortdashedlongdashed%f%1s%s%[^" ]%["] %g -%s%c- %glog graph: error in arguments 1@rzA]ݬ5@3dlB##3h@?ØGf@lB,l$d!r||bbbbbbbbbbbbbRRj|#db#on#x<$fJ$e,#g$c$s<#l<#L#ub$r#Df#Or#X#U(null)FFB=(\  AAAAAABBBBBB 6*Ic knmpsvy|aa @I$ 0  6 >  67d @% Dw H6 |i7 zi7 xiBe bi^ij =%e@e j 8wHe 5nd%, i @7i7 imh%0@ `5 -hbghC h h h5%, h 7h7 h`e%@ e -fh@5  ]Lh X xij 8 2h.h0 nde5%0 ` %bg@ `_` 5nd gj =%@e ˆ_ ggj = g_g_ gNk = @ f D@ f 5@7Fu@ 5e@ eb 5%0  ` A p bg@ e `@ [_` xi 8_`k& n _`7 _` && %_` ~_`7_`L CR-T _`7H_`7 @_`& # D_`& p5&  f _` 6_`&&L "*%7_` &C&R&-&& N1_ && ._ && _  &&&  & &&& %_ && J %7 <_`& & J _ & t_&- "_ &*&,&+ < _` _` D7_`2_`6_`7_`4_`5_`0_`3_`1x_`n^ _`PL'k =e_`j6 .\ Z_`NNk =_ {_`}~_` 0_`~ 5_`1 0 _`23# "1_`"7~_` 7_     _`w B 5 5%\V5Nff % @ A @Z Wp@& d  rWpNzk = Nk = Nfk =%Nfk =%@0  xjkfe d fk =%N~f %@ %2"Nl = Nffffl =e Nff4m =e%5~WpZ rd  rWpB r` }@ Z@ &@ &@ &"ff\m =e N N w@fe d fl_ZN+l = _`N5lNf?l_ZNfal_ZNffl =e_`Nfl =%Nl = @ Zlw $@w{@ Z@ &Z d 5@ A @Z@ A @Z& d @m5^{ 1T{ pZ ||Nfff2{m =e @ %2 @ %1"mm Nf|fm =eNff((m =eNfzm =e@ A pN w>w >zzrR1biI2JbB32@7($n = T{ @&n =%wr>w b>wyy y %2~21ꈁp" {"y y &"y &y &Zff~yn =eNft~zyMn =ew^~Z~cn = w=w = wJyxz r5Nfzf %Nffffkn =e :z Nfn =%wZ=w J=fe 8 7y7x@7nd B" I R  b i r1Dd@dn = 2d|}w<2&d3dw < ( 7bx \x 1 Ap"Jx A Ap@5@ 5Z5 %PyJy5e:yN2yf %Nwn =% &Nff %Nwwfn =e@ w 1l@ 5  Nff %Nrwnwfn =e@ Tw 1lHwn = <%dx^xfffw@ A @Z@m&n =e @ A @Z@m fv!o =eNvffv@o =e 0@@A @lZf~v%wwfff\v@@A @lZ &po =eo =.v AAmpZ Pwv Z v &fffuo =e N  N  N w.:w : z7u@  w xoovfvup =eveWp@vWp C r  rWpJu rrvWp r  rWp"u rZ Lvu Zu &ftCp =et t 1Ap"w<9oooNp n%w 9  Nfnp =%  Nfp =%    Nff N1 N#  N"f .% Zu@ Z@ &fp =e@ 1"w\8w L8 7sp ufusp =eteWp r Wp rWps rtWp r  rWpns rZds ^s 1Ap"w7w 7Nf   w7w 7N Dw7w z7Nf (  _Ex_ Qx_  @ 0 %d"q = %q =7 b^ 2 * s'ss@q =%>^Rq = LxHx]q =%ssq = |~q =q =q =%x pq fq bq w6 A  Jqw?>q :qw A %  "q B?q q 0& A %   85%nwnw.rw_-D]q = w 5D % %-] %<q& n%7{-\ w5w 5 q = 5q = v fq =% | t r rfq =%r q =c% knmpsvy|aa 8-l\v fr =%r =N0r = N w4w 4 q@ Z@ &f7r =e@ 7vNSr = fqWpH r  rWpf@ A @Z5`r = @ %2rrfx[v[jr =epWp r  rWpf@ Z5r = n n n A wpw3w 3u-@w3@w 3  A @ @w3 %dNr n% w R3@ 0 wP3w @3%Nr = w,3w 3N#ffr =ew3w 2 wNtwJt DtP@t-Jd = xqt7Y t7Y sesse D7Yse D7Ys7Y dxoss s 胂ssYrxs& z= 7`s dsr n%w1w 1w1w 17 nYnY^rn Rrr = w1w 1 r =Nf = rrr mr&r =es =  s = Nf =%rrr mr&.s =e  w1w 1%А0[ *[&[w0Hr >r :rE.r =74r%  r%$rr r-rrq "CqTsq mq& z= 7qq mqVs n%w R0DӋ %vZ is n `Z \Z!w*0w 0 % % 7k   "" ^ { } ~- WWw/{}7 Xw&% )%\  %":w\> 0w,w0> $w%w >{s n% P%"v0>>j% >s& n%?TY PY> 8 k>s =  > ,%5" Y Y@  X X k_@>s =%_ >T ,%5 Xk>s = _P@%%%@ _@% _@% _@% _@% _@_Pw -DB % % %=S% 3% 0% -%{*%}'%"$%~!%^-T%\ v%"ҕ\Ґ Ns n% N%{%}%" %~ %^% -tTVW RW whw-w - 5% % %  45 5@-8%5@@mH u-9% "% %@@mH u-} l5% @@m% Nt n% wH,w 8,> 8 % > 3> |5> % >#t n%> |5f ,% h NfDt =%w+w +N G  ,E N]t n%N& G wp+w `+{t& n w\+w L+ 7h7f& > % >t n%:q7`R3q7ZR%oRR%f 7FR7@Rw*w *B `ʋ rdC @mf G  t w*   ,E{ n Lt @m4 @mw R* 5 @tt@t&tT ,% @t t5 @tu@t&u ,% @t uw)w )QNf{ =%wVe fN{ = w)w )P   7&e{ = JfN| = wn)w ^) @ "fA p f'N| = @ 5 @ %| = -e@ *| = e epw(w (5|"@ 55 u e @ :| = @ e5`-Ve_! 55@@m55 /@  A A @Zf d 5@  Zf d 5@e5` u- d NffF| =e@@m55 @  pZ@  AAmp@e5` u- u-u5 (@ @m f @ @m & "*%@ @ab$@e5` u- r7b A$ pb A$ pZZb b 1 Ap" cjb Z`b &ffNb]| =e >b| = 5 @ @-|N"@ @a&$| =%@ @a$  u-| =wcw@&w 0& wa%bbupWp rd  rWpua| = %-%,Nf%,|||%* Nff| %+ Nff| =e Lba Za &fff| =e wR%w B% 5w`aWp r  rWpu@ A @l@m5@ @5 aNffff`} =e Naf %Nraf %Nf.} =%Nfff<} =e%4a.affZ} =eNff@ A @Z@&_s} =e N@ A @ZA @lZ@m &ff} =eNf@ Z@m&ff} =e >_ pZ2_ p&_  _ 1 Ap"N N wj#w Z# @ 5@ 5Zw^^ ^ 1 Ap"%__WpAm %__pr5%@e5%{%}A r  @5%@e5Z_upWp rWp^ r^ ] C rBmZ_Wp r  rWp@AC r@`5]~ =%@0 (_( [_( c_( f_^( n {_( |_ )Nefefef )eN@ &z~ =% ?N~ = @ )_) ]_) c_F) f_) |_) }_^)Nefefef )e@ ~ =  = ]Nfff~\ &Zt\ & =e w %~%~ = ~~~_v'%4~/~*~_v'9~ =5 A~ =eu-F~ =5 K~ =eu-P~`~[~V~_v'o~j~e~_v'x~v~t~_v'% ~~ =_ (~~~_'%~~~_'~ =5 ~ =eu-~ =5 ~ =eu-~~~~_'~~~_'~~~_'w < N- = 5 N3 = u-N 6 = ww  P7Z[Wp r  rWpu%-5 @@5 r5@@m 55 u @  5l u-Z A upAmp5 @ 5@  @m5` u-A r @  Z@mZWp r  rWpf@@lY 1Z Z,NXY: =%u @ O = u-"Y ZY &T =%@ ,Z@ & %@ X` =%@ 5%@ Y@ & %@ XX@ &n =e u-pX%R& \X &ZRX =e@ 5u-_-@  5@  5Z@ -@ C= L R @@@m@ &@ &@ & =e@@@m@ &@ &@ &@ @ &jW@ & =e@@@m@ &:W =e(W%R& W  W @Z@m&3 =eu @   u-V V 1 Ap"w w wV@ 5@ 5Z@ 5@ 5Z%WW5WmA%WmA5AJ55%#hAWp r  rWpu@ @m@5@@m@-@@5@@@& d @mU 1Z@@@& d @mU 1@ %2 @ %1"K@ %2_v0N_v0AWp r  rWpu0U pZAAWt r  rWp AuAAWt r  rWpAmBB(( @@ @m@@5NAAWp r  rWpN& d @mtT 1@ %2Q@ %2T vU%VTm>5A A@p %4T.Tr  rWpuB rmx>TSmn>%Sm`>5@ 5@ 5Z@ 5@ 5Z@ 5ZAWp r  rWpu@ @m@5@@m@-@@5AAWt r  rWp AuAWp r  rWpuAAWt r  rWpAmBB @@ AA@`@5@@@& d &fAAWp r  rWpN& %e@m8Q 1@@@& d @mQ 1Z@ %2@ %1" Nf =%@ %2N = Nff %@ %2@ %1"NfNf =%Nff %Nf& =%Nfff4 =e@ @mfffffR =e @ fffff~ =e m;Q@ %2O 0 N N N ww +N D7`P-N D7PN D7P P Pf =%ww w>O nP4O *O &ZffJPO =e %4P.P5%@5ffN =ewOw$w fe 8 +Ne D7`2:-Ne D7:Ne D7 : 7O7XN9 9|O% 99 r9 r79ww  A AWp r e r%A AWp r e r5wMWpH r  rWpM r NM M &ZfM =epM %2bM = NNf %tNff@ &Z,M( =e Nf@ Z &` =eL 1"wZw J 7L 0 Z%NMWp rWpL rL L 1Ap"%uj%8b%;Z%>R f ,%55C 7^7^ 7L]7F]Nf l9 7^ ^7^%"] NA n% ]@m ]5\0K ^"K ^ L K K &"K &K &ZfvKfc =eN^K =%ww  1@  ^_< xz%2] N <@w|%1]N <"\p蕷 \]%2]  N < %2] qe := %2z] lp%2d] |@m[ȥ= =f := [[p蕷 [%2&] >@mp[ȥ>>-im%2\ ls %2\ ([p蕷 [[[AmAu [p蕷 [ZZAmp蕷 Z Z%( ZZAmp蕷 Z Z%*_9Z(_9ZAmp蕷 Z ZZZAmp蕷 Z_L:|Z\蕷 rZnZf蕷 dZ`Z%2\21p蕷 FZmf := 4Z\蕷 *Z&Zf蕷 ZZP蕷 Z%2[215_9%2M<Y\蕷 YY^蕷 YYf蕷 YY\蕷 YY|Y\蕷 YY^蕷 YYj蕷 ~Y2_9pYf_\:%2.MZYj_\:LYp蕷 BY%2 Mw l 0Y\蕷 &Y"Y|蕷 YwX w H  Y\蕷 YXf蕷 XX1蕷 XXp蕷 XX\蕷 XXf蕷 XXP蕷 Xw w X\蕷 XX(蕷 XXp蕷 |XxXp蕷 nXw w ff C%w w Nfef >%@ wf w R fef >% Fw: w & D@w  ,E4 e4 && H%4 %  4 E w ^ uDAB %u f& & e w" 5 5  W- W00u5  .uBwF J@B _@@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E A z f A  #̥-%0  E: E:  &E A  z f A  wXw HDuNfe& H%4 ;#%A .G  ,E  & H%S  w|@w fDE%& H%  w( w  "Ce-lAww D@ B G  fF 4 4 ww D  w r< wf ^D=@+ @ a f bH  %Uf ^D &  6He   f bH  4  Հ rw D& G     G& bH ww -? wzef >@w LD  ̥9Wp @@`e     + -̥0  ww  tVU7fVU7\VZVRVAe vB>V7 @V55 a  a!RE -V% wr U%Ue rt 7U HU `e U  H%UUe U?UU `e 7UU?tU a7fU ^U`U?XUTUU ew D4UE ww D5 fF@ r5N ,E!wb5A vBB-  }ee@ !ۃ `!ւ `@ r `Tw Nef pG  ww N tf H%ww Ntf H%ww DCԋ w@w lDCԔwdw TD  ԋwLf@w" fwDAB?@CE>DAB?@CE>DAB?@wxyz"5{WVNMiLKO97o\Q Z~vu[tsq|"]2r^_`a8$#%&'0"3( )*+h  -/.,!p$#%&'0"XY3( )*+wxyzXY  -/.,!$#%&'0"jkl( )*+  -/.,!$#%&'03( )*+  -/.,!$#%&'06( )*+P  -/.,!$#%&'0( )*+  -/.,!1FGHIJ}RSTU}bcdefgmn1111ooooo@oooo@oooooo@@@@oo$oo@@@@@b<`][aZYWV\GUmTSQPON0LJIHGFEDBA6  ! ""  )!$&'(%.{ -*,+  #"26745031{{{{{{/  }}}}}}}{{{{}}}}')MNOHIKJ2TUVWXYZ[\ ,QR?@789:;<=>E-./0L]^PAB3456"#+F%&( S!* $CD 1G `",``6DNXbbbbppx,>HNV`h  *4>Hx,,,, (6>FNVbhnstate %d, char 0%o yacc stack overflowsyntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d reduce %d syntax error. from: old ps %d, new ps %d, fflg %d . to: old ps %d, new ps %d l~>L.nr 10 %du .if \n(ct>1 .nr 10 \n(10+\s%d.25m\s0 .nr %d \s%d.1m\s0 .if \n(ct>1 .nr %d \s%d.15m\s0 .ds %d \v'-.4m'\s%d\(->\s0\v'.4m' .ds %d \v'-.4m'\s%d\z\(<-\(->\s0\v'.4m' .ds %d ^ .ds %d ~ .ds %d \s%d\v'-.67m'.\v'.67m'\s0 .ds %d \s%d\v'-.67m'..\v'.67m\s0' .ds %d \s%d\v'.18m'\h'.05m'\l'\n(%du-.1m\(rn'\h'.05m'\v'-.18m'\s0 .ds %d \l'\n(%du\(ul' .nr %d 0 .nr 10 0-%d .nr %d 0 .as %d \h'-\n(%du-\n(%du/2u+\n(%du'\v'0-\n(10u'\*(%d\v'\n(10u'\h'-\n(%du+\n(%du/2u-\n(%du' . diacrit: %c over S%d, lf=%c, rf=%c, h=%d,b=%d . e:eb: S%d <- S%d S%d; b=%d, h=%d \|.nr %d \w'\s%d\*(%d%s' .ds %d \h'|\n(97u-\n(%du'\*(%d .as %d "%s\*(%d .ft %c . setfont %c %c . b:fb: S%d <- \f%c S%d \f%c b=%d,h=%d,lf=%c,rf=%c .ds %d \f%c\*(%d\f%c .ft %c .ds %d \*(%d\h'-\n(%du+%du'\*(%d . fat %d, sh=%d .ft %c .nr %d \n(((%d .if \n(%d>\n(%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .ds %d \v'%du'\h'\n(%du-\n(%du/2u'\s%d\*(%d\s%d\h'-\n(%du-\n(%du/2u'\v'%du'\ \h'\n(%du-\n(%du/2u'\*(%d\h'\n(%du-\n(%du/2u'\ \v'%du'\h'-\n(%du-\n(%du/2u'\s%d\*(%d\s%d\h'\n(%du-\n(%du/2u'\v'%du'\ . from to: S%d <- %d f %d t %d; h=%d b=%d \(*S\(cu\(ca\(*Pfunny type %d in funny.ds %d \s%d\v'.3m'\s+5%s\s-5\v'-.3m'\s%d . funny: S%d <- %s; h=%d b=%d  2.ds %d \h'-0.4m'\v'0.4m'\*(%d\v'-0.4m' .ds %d \v'-0.3m'\*(%d\v'0.3m' . integral: S%d; h=%d b=%d \(is.ds %d \s%d\v'.1m'\s+4%s\s-4\v'-.1m'\s%d rf%s.nr 99 \n(.s .nr 98 \n(.f .nr %d \w'\*(%d' .nr MK %d .if %d>\n(.v .ne %du .rn %d 10 \*(10 .ps \n(99 .ft \n(98 .EN%sinput line too long: %.20s .nr 99 \n(.s .nr 98 \n(.f .rm %d .as %d "%s .as %d \*(%d .ps \n(99 .ft \n(98 .as %d "%s.ps \n(99 .ft \n(98 \*(%d . answer <- S%d, h=%d,b=%d .ds %d \x'0'\x'0-%du'\f%c\s%d\*(%d%s\s\n(99\f\n(98\|\x'%du'no eqn strings left.ps %d .nr %d \w'\s%d\*(%d' -rcan't open file %s.ft %c eqn fatal error: file %s, between lines %d and %d eqn: fatal error: file %s, between lines %d and %d Аrcan't open file %spushback overflowquoted string %.20s... too longmissing " in %.20s. lex token = |%s| . found %s|=%s| . %s is not a keyword token %.20s... too longUnexpected end of input at %.20sUnterminated definition at %.20s. name %s defined as %s out of space in strsave on %sInclude not yet implementedBizarre delimiters at %.20sv#v"vvvv v2v6v7v0v1v4w3w5 wwww$w*w/w5w;wAw Fw!KwQw$Vw%[w)_w&ew'lw(qw.vw/|wwwwwwwww*w+w-w,w w ww www wwwwwwxx xxxxxx#x'x,x5x:xBxGxLxWx]xhxoxwxxxxxxxxxxxxxxxxxxy y0y6y;y@yEyKyPyVy[yayfylyqyyy~yyyyyyyyyyyyyyyyyyyyyyyyyyz zzzzz"z%z*z/z4z9z>zBzGzMzRzVz[z_zdzlzqzyz~zzzzzzzzzzzzzzzzzzzzzz{{{{{#{.{3{>{C{N{S{^{b{l{p{z{~{{{{{{{{{subsup.ENfromtosumhatvecdyaddotdotdotbartildeunderprodintintegralunioninterpilelpilecpilerpileoversqrtabovesizefontfatromanitalicboldleftrightdelimdefinetdefinendefinegsize.gsizegfontincludeupdownfwdbackmarklineupmatrixcollcolccolrcol>=\(>=<=\(<===\(==!=\(!=+-\(+-->\(-><-\(<-inf\(ifinfinity\(ifpartial\(pdhalf\f1\(12\fPprime\f1\(fm\fPdollar\f1$\fPnothingtimes\(mudel\(grgrad\(gr<<<\h'-.3m'<>>>\h'-.3m'>approx\v'-.2m'\z\(ap\v'.25m'\(ap\v'-.05m'cdot\v'-.3m'.\v'.3m'...\v'-.3m'\ .\ .\ .\ \v'.3m',...,,\ .\ .\ .\ ,\|alpha\(*abeta\(*bgamma\(*gGAMMA\(*Gdelta\(*dDELTA\(*Depsilon\(*eEPSILON\f1E\fPomega\(*wOMEGA\(*Wlambda\(*lLAMBDA\(*Lmu\(*mnu\(*ntheta\(*hTHETA\(*Hphi\(*fPHI\(*Fpi\(*pPI\(*Psigma\(*sSIGMA\(*Sxi\(*cXI\(*Czeta\(*ziota\(*ieta\(*ykappa\(*krho\(*rtau\(*tomicron\(*oupsilon\(*uUPSILON\(*Upsi\(*qPSI\(*Qchi\(*xand\f1and\fPfor\f1for\fPif\f1if\fPRe\f1Re\fPIm\f1Im\fPsin\f1sin\fPcos\f1cos\fPtan\f1tan\fParc\f1arc\fPsinh\f1sinh\fPcoth\f1coth\fPtanh\f1tanh\fPcosh\f1cosh\fPlim\f1lim\fPlog\f1log\fPmax\f1max\fPmin\f1min\fPln\f1ln\fPexp\f1exp\fPdet\f1det\fPout of space in lookup.ds %d \k(97\*(%d . mark %d .ds %d \h'|\n(97u' . lineup %d . %d column of S%d, rows=%d \ \ . colct=%d . row %d: b=%d, hb=%d . matrix S%d: r=%d, c=%d, h=%d, b=%d .ds %d "\*(%d%s .ds %d \h'%s%du'\*(%d -\v'-%du'\*(%d\v'%du' \v'%du'\*(%d\v'-%du' . move %d dir %d amt %d; h=%d b=%d . b:bob: S%d <- S%d over S%d; b=%d, h=%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .nr %d \n(%d+\s%d.5m\s0 .ds %d \v'%du'\h'\n(%du-\n(%du/2u'\*(%d\ \h'-\n(%du-\n(%du/2u'\v'%du'\*(%d\ \h'-\n(%du-\n(%du/2u+.1m'\v'%du'\l'\n(%du-.2m'\h'.1m'\v'%du' .ds %d \|\v'%du'\(lf\(bv\(bv\(lf\(lc\(lc\(bv\(bv\b'\(lt\(bv\(lk\(bv\(lb'\(lt\(bv\(lb\(lc\(bv\(lf|||\v'%du'\*(%d\|\v'%du'\(rf\(bv\(bv\(rf\(rc\(rc\(bv\(bv\b'\(rt\(bv\(rk\(bv\(rb'\(rc\(bv\(rf\(rt\(bv\(rb|||\v'%du' . curly: h=%d b=%d n=%d v=%d l=%c, r=%c \b'%s%s%s'. S%d <- %c pile of: S%d;h=%d b=%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .ds %d \v'%du'\h'%du*\n(%du'\ \v'%du'\*(%d\h'-\n(%du'\v'0-%du'\ \v'%du'\h'-\n(%du'\*(%d\v'0-%du'\ \v'%du'\h'\n(%du-\n(%du/2u'\*(%d\h'-\n(%du-\n(%du/2u'\v'0-%du'\ \v'%du'\h'%du*\n(%du' \|\|\|\|. b:b shift b: S%d <- S%d vert %d S%d vert %d; b=%d, h=%d .as %d \v'%du'\s-%d%s\*(%d\s+%d%s\v'%du' . shift: %d;ps=%d . shift2 s%d <- %d %d %d .ds %d \|\*(%d .as %d \| .ds %d \|\|\*(%d .ds %d \|\*(%d .nr %d \n(%d .if \n(%d>\n(%d .nr %d \n(%d .as %d \v'%du'\s%d\*(%d\h'-\n(%du'\v'%du'\ \s%d\*(%d\h'-\n(%du+\n(%du'\s%d\v'%du' . setsize %s; ps = %d . b:sb: S%d <- \s%d S%d \s%d; b=%d, h=%d .ds %d \s%d\*(%d\s%d . sqrt: S%d <- S%d;b=%d, h=%d .as %d \| .ds %d \v'%du'\s%d\v'-.2m'\(sr\l'\n(%du\(rn'\v'.2m'\s%d\v'%du'\h'-\n(%du'\*(%d :9<<<9&2 exit fi trap "rm -f /tmp/d3[ab]$$" 0 1 2 13 15 diff $1 $3 >/tmp/d3a$$ diff $2 $3 >/tmp/d3b$$ /usr/lib/diff3 $e /tmp/d3[ab]$$ $1 $2 $3 cV kpY脑 TD  0  6 >  67q % tMw SNf D" wSw S  + $ $ z*%0%9%A%F%. r y`e*` @ llllll.` EellK` Ee : 8 + + #7d e W`d $d` E #7d nevd1@?jd5^d1@?Rd5* + n#  @@m7*d&d-e(d@-#d@-uu-u-eecN t: wc,__ X _r/ + " E VeLep, B8e@ 4em*eH"e_n eeme e && e 7  Ed E, Bd _n  7c,__, ~`_&b-~db5 nd b@5^dbN && 7b 7bp, Brb@ ȝjbbb_n7 d !7Pb :c`_&:b1@?.bȋ`_& N!7b cb $`_&bH, aH,aa  ca ~)aa@%`_&a1@?a7aaa za Epa?jafaH,Ta PaHaH, 4aH,"a aWpdaDaDpua E b-`-bb`5u-NN t: , Bz ,, B{  $ Db_r  ?, B , B:  $ $  _r/ + aa Ea E_r , ``_& 5, ,0 , , % , %Z%   E ?%d, BA rd@: A rd5, Bz , B:_ 8;^ E^_r^^@ ^ ? ,_j_p  _`_& 8;5 5 ? , 5 %J  ~)5, 5 %&, & d ff Keee@ 5u, ff 6%7~ewlewhe] E% A@  7DewBep]5@e% %V4&ee7 eFe_5 %  ?, B  7 5A@ 5`@=@H,@%  N E E Ewld@ 7ddF`d-\dVd_rF 7rFdwp@dw@d_rd\\\@ P\ ? ,_j_p5  ? N!%] _l , B; %[   \`_&(( 8;%a_&,  , 7:][ E[_rx[p[@ d[ ? ,_j_p h \a_&, 5 E ?, B{ ,_j_p%*a_&, .a_& E5a E _r%f6\ 0\*\ E \%eF[?a_&8[%e_rN V,%e[La_&[ V,_r B ZYa_&, B; fa E _%eZia_&Z5Z ? _j Z_r  Z E%elZva_& E 7k.a (akk5aa4a r *Za_&% ? 5 , B:  % E@_ra_& E 7k``% JE E,  E N`kk7B`@`>`? 6` ,` E 7k`a_& `k`____%_l JE E, _l  Xa_& 8; , %a_& , a_&, Wpd@, @`%a_& E E5 7k_&@ ^kk7^^^_ ? ^e  ?^,^!?^ ^^e @ e  ?  E  A  E E 5 xWa_&N A _P  TWa_& 8; , %b_& , b_&, Wpd@, @`%b_& E E5 7k]*|]e @   A  JE5A@f ? _ ?  hE _%fW VVH, EVeV%rg;b_&eVV _r 0% _r +_reV%rgVJb_&? VT\dT n+ %! ?, B;  % H\T0V_r, B; %\, B |; *%__r 8=%__r  _|  _ Yb E _r _ _ _  _  ?TT@ r5%d, BA rd; A rdu, B{ , B;_ _b  _ _  _r _ _  _  _  _T  _%fT tM T~T EtT pTjT E`T_r _ _H _  hS_ a_& _ _%e:S_ a_& _ _.  _\ _ H S_`_& _ _ _ 6  7Q ~),ca kVvY脑脀 BQ _l E_r _ _  _  lR_q`_& _ _L  _ )_r _r _r _ _V  _ F Q_l.b_&w *? 7 R ?@A@ N $nb Ew> 55B, %@A@f ?  ~)@@ 5@A@f ? , , %  ~)@@ 5@@ 5@5_8 & A , B; 5 , 5   , & , & d ff b=eee@ 5u _ , & , & d ff =eee@ f& O@-6ONf A eu@ 5@=@H,@%d_d@H, B@ H@H,p@p, BA@ ȕNf  5Nf 7 5N EH EdFf  5N EG E@A@f ? 5 ~)Nf 7 5N E@=@H,@H, B@ H@H,p  @H,@5 N EN Eu_4N EN EN E@wp3w `3  ?4- B @A@f ? @A@f ? ,_! 5 , 5I  ~)CD  5 EC4F,F@5N E  & 5 ED ? 5 & 5 EN EB @A@5%4  E Ew2@=@H,@ 5%4 4- B| w 1 6Q %$ 6Q  d 0G w &  Ew,w , 55@=DH,) @H,@ @A@f ?  ~)@@ 5@=CH,) @H,@ @A@f ?  ~)@@ 5@` ?E?E E,E_>), 5 Jm5 C - 5,  ,5AupAm`uA rd5, BA rd@: , -  ',  ,5, B@@m: ,, _&(  ~)D- EC- Ewr*w b* @=3dAB,AA@åddC @H, B@ Ȑ@H,p@H,  R@p, BA@ ȕ@=@H,@@H,@åc@p@p, BA@ ȕw:)@=@H,@Ë@pw ( x<r<H,N EZ<%fT<: : :E 2<H, <@ 7L;#d: hF7>;%-;;; ;<: Kd2:%d*: tMwH(w 8(%f;  ; ; @Hw"(9@& F w (@*  x`99 7 9 E9 E4- B9  $w'|9v9 &n9h9 w '@=@H,@=@H,AD @H,@ %c@=@H,@ b E @H, b Ew&@5@H, b^@d@@A@f ?     -  ~)-b E @b E?? ? ?%?%?d-? 1f& 3% ? ? -? N& B1 _ -7Ap@?7~?upuA r @m 7r`?5N& / N& t: b7&   E& 8 ?% E:7?47.7H,77b E >b E>>6H,   Eb_-6Ap@?6.b E t>b E^>d>5 ~6 &  EN / N t: & >% u- E<6?6606H,6 6b E =b E==5H, (( b_-w # @=@A@ @-@@f ? w#@A@ ?4- B@H,@ < % &5& & 5 ? E, B, : @ , B:  E4   E<6 E_>0w "@= 7@A@ @-8@H,@% %bb E ;b E;;@H,   b EN Ew!@A@ @-=@H,@ r b E f;c EP;V; r e0Nc E :;c E$;*; . c E ; c E:;@A@ @-I0c E :c E:: @A@ @-+@H,@% cc E j:c ET:Z:%%%@H,@ r e0c E :"c E9:%c_1w 2 Nf t: 2Ap@?11p, B1@ ȕ1 7 5 ED@'c E |9*c Ef9l9 E-c Eww @=@H, T1p, B@1@ ȕ0N EwD@H,@ N E%/c E0p, B0@ % e0e7Hw  % ? 0@mR8 5 @A@g@=@H,@ IN ~)A.0f  N E1?14- B1H, 01H,r1 n1e0< \1 E@A@N E%_Z7@  z/p, Bf/@ ȕ- P/p, Bc E%Kc E $  ,    5 7+++ wB- wz+N& &&  d+N && 7J+H+w l@=@H,@ % ?4- B@H,@ < @H, %*&   EP, EN Eww A1@=f t: 5ww zNf &&  ?4- B| ,*  E   E E+ E4- B| ww  7) *Xc Ew)1@?)7)) ~))p, Bp)@ ȝj)`) $ j + + w pj t5<  x$` 8=wT@e5} 05% = p fepcmcec Pe@ tM 6Q Ne Q % 6Q sc E w  . E<>  x  =  E E XwF  -  EË<Ë>w  E 7kj/Ad/%, ?(  hE ,  JE5A@f ? 5 ?  $wV ?, B: w $      A@vu5  ww e.w |.A 7`n.w`l.w f.N Mvc dCN M}c Cf& "7Z&44 @m4wxw he.w .e.w - M7&c dC M7&c Cee%e! %ww e-w -A 7`-w`-w -@A@N@& E c dCN@& E  Nc E c CN% 7B%4 @m4`4-wNw > @@&@&fffc Ee @5 @ c E @p-c Eww @Dm0!V 7`V,w`T,w N,@ NN@& N '@A@@& N A1c dCN@& N c C@@&eAm}^pw=@0!0w @H, B@eH@H,pww @A@  v@ 7`:+w`8+w 2+@ N@& N &@A@@& N A1c dC@& N c C@A@`=@A`p@@apww Nc E z*t*f*`*f*`*c eN*H*d eN#$d @ " ww | 5 @ 5kh%"@5@5N(d E N3d @ N ^DuB@5@=5 * %@5Nfe_;d E%NfPd E%N^d @ N ^DN JE5u %ww @5@&bd E%ud C@ N) N M7)d C@A@@& N d CA@@=aA1`A1`ww Del(w f( 7\(wZ( T(| 7x  Nww D - wew xD4- B|cwdw TD - wPw :DN M w.@  w  pff :L%w w dfef pG% w w D%    | w  - -w x D@wZ  M4 eq4 && P%4 %  4 E w D  N t 4 w w p uDAB %u f& & e w4 5 5  W- W00u5  .udBwF J@B _XI@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Adҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w  DCB &E J z f J  #̥-%0  E: E:  &E J  z f J  wj w Z DuNfe& R%4 ;#%d O mm M  & R%S  w@w xDE%& R%  w: w &d Ke-ww D@ hK O  N 4 4 ww D  w r< wf M=@+ @ a f P  %#f M &  Pe   f P  4  Հ rw D& P     O& P ww d- wef >@w ^ wbw R .$qU7 $qU7$q$q $Ae vB#7 #55 a  a!RE -#%q w #%#e rt 7# P# `e z#  P%b#^#e U?L#L# `e 7:#qU?.# a7 # ##?##U ew D"E w w D5 N@ r5N M!w5A vBB-  }ee@ !ۃ `!ւ `@ r `>"w PNef O  w>w (N tf ZP%ww Ntf ZP%wf@w fwpwlzewfwX@e7Pv!Lewfw7|! fw&w"wew f@www ewVfwwew8f@wwewfwmewwmfwewwx fAW @w` fq1q7T5 eQwBe 5wv7L7H7D7@7<7874707,7(7$7 77777 777f&Q & q fw }f@wweww C  5!$ABA  D & r@rr @`   BJw\& @N   C 5  N B A @ A- A    BJw7Fw C  5!BA  D & r@rr @`   w& BAN   C 5 N B A @ A-  A    w2w "B A@ C@ppC`pw @& BFxLtHn:,+,,,H,<< 16stack empty stack empty stack empty /bin/shsh-c! sallocsallocmorehdheaderscopycopy size %d copy%s %o rd %o wt %o beg %o last %o %d seekcseekcmoremoreout of ((space: %s all %ld rel %ld headmor %ld nbytes %ld stkstring %o odd begarray %o elt %d odd tmps %o p %o eltodd ptr %o hdr %o redef-baddummyredefhHdNHoZHx(If6IeHgHcIs(Hl(HLpHuNIrtHDRHO^HXHU(null)ooxe;6q0c kƤ$pp !t 0  6 >  67F Z% w dB ? w w N  @w w N *B  7BNf 6  w w T?@  zwv w f  D- rwJ @59t@m5,tBmB-(@,","@5ruJt5u-Ї D-w @  Tt@m aWtAmH C-  @m aH C- wXw H"DBNe& % @E%@d =/eʋʥ//̥-XU P@R< < < < 0@ 7 @=?  5?<@  t Nfef !%fe& %5N w:w *K@f  A 1tB NM@   T  et& p ta@ tB @ B@ 0~B@ tB 4ww 7 >->>>tm>>Wtm>p, >->>7 >>>->>>tm>>>Wtmr>p,  z>h>p>-n>   A~BX>t`pB  AB>><>pB  BWt@`  0!B %ww  t @m0  D-0C- -t@mWtAmp,t@mWtAmp,t @mt @m0 D-@ t@m0  C- & @m WtAmA Ht@mWtAmp,  @m WtAmH @m ww  u%<@-6 e@aȋ*@ab  x @< <<NZ@  :i@  &% 9{@   7lw . 66WpN9 p 7~96WpD`Ltt6 ww  A AmAWpm:9q-@  AmAWpm9uu- u-w C ` r!w h  m8-8 88!m88 H -8AWpCm8 w"mr8 mx8md8Hw @@&  7 8@@&  7 808 >e^f&85  u55u-7_  m7    5`u`u tm7pH_  m7 _    5`u`u tm7pH D7 5:7 07 ,7E 7 5eu eu 07L@AF@A@ eu 6 6 6E6 5A eu 6 6 6Ev6 5Au>  mz6    5`u`u    5`u`u tm26pHtm 6pH _ 5 _, 5 5E_4 -5   5`u`u tm5pH ~5 4x5 4w6w &@ tB  A @tB tBE@ tB %  ww @@&  75@@&  744? 5@ m54 p%4GD-_ m4 m4A H  D- m4 5  m4  C- m4  m~4f& e DE mV4 mN4A H  m<4  % m(4 5  m4  % m3  m3N& e % 3&  ewLw <u-u- _0%3A@ff % 1u-a u- dc?1 1 Au-a u- dc  %3=@f f3 p1u-a u- dc?H1 D1 Au-a u- dc  @ff % 1 0 0 A  |2@B2ffb2 eu- u-  A@  <2@/1f f2 e 2 u-  A@  ww u-NN@  u- Nf@ %wRw BD_ t@mf&f &et@mWtAm@ Af   2 /@ @ EN ?/ / A@ @ Ef d &   D-ww p  0* @ @ EN % I% w.E v5`u`u e @ @ EN      e E v5`u`u e A@ f&A@vee@ 5uvAm@w dNf@A ewTw DDC  @; f  5ww D_0% U RNuu & & Jef& 5`u`u  5u   5 u  5 u Lmtc kP$pp wF  N ff& Je5u4 # 4  N ff& Je5u%%w ff %w w Nfef %@ wh w T  Afef % ,w< w ( D@w  4 eF4 && %4 %  4 E w ` uDAB %u f& & e w$ 5 5  W- W00u5  .u@BwF J@B _@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A@ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E  z f   #̥-%0  E: E:  &E   z f   wZw JDuNfe& !%4 ;#% A'  BB   & !%S  w~@w hDE%& !%  w* w A 4e-t'ww D@     4 4 ww D  w r< wf p=@+ @ a f v  %)f p &  Je   f v  4  Հ rw D&      & v ww A-% w|ef >@w N *FU7*FU7*F*F*Ae vB*7 *55 a  a!RE -p*%F w b*%\*e rt 7F* :* `e **  %**e U?)) `e 7)FU?) a7) ))?))U ew D)E ww D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `(w LNef   w:w $ Dԋ  r e0@  r X a %zAw  f  %@w N tf $%ww Ntf $%ww w|#wx# (B7%wtf@wJ fwH#wD#.Bw*fw0#w,#'(#4Bwffw#w #w#"5 eR w,"^B 5w7L7H7D7@7<7874707,7(7$7 77777 777f&V & F fw!w!dBwB fw|!jBw( f@wb!w^!nBw7#F@& BF@files too big, try -h /tmp/dXXXXXcannot create rcannot open /usr/lib/diffhcannot ((find diffharg countrrrr,, < --- > . %d%s%ddiff: %s%s doxfetgNc`slLurDOXU(null)DDA/  AAAAAABBBBBB !;6F0 c k-r n   DC7wo7wn7w&(7wu7wk5L5F7 S 7  գtEe  e 55F eDcf W  W  ctEm գtE   1 W  v 7   0t & __\ ܡءԡ7wffFE50   * U0 %  h  Q H@ e Q0H >  pv Er bܠIm 2 ʠ ̠7 Ơ.(5U0 7  x } q `n f EA `E E v EE \&v  E H&v  v   ,JI .JI#  hJb& RJL&D:  4P ~ (P~  & ~ &~ &  ؞Ҟ<4PP I7BCDEFY^Z   P~.  & C~vw C  5!BA  D & r@rr @`   wXw FC  5!BAD  r@rr `  w@& BFw \-EEEEEL޹7  . 8   V 7  V 77 D &e? veN & & e? vf& ]e& r ~% w"w PL vWt % 2 Xe \~ $& #% a7"WW222ww \^7V7V7V7V WpDe  WpeV`t\^|VvV07nV a %@ e ww  7 Ʒ@E%U@e 7@E  xj  Ne  Nf %N   $ ~ t   zh 7  f NNZf t%  >wNe %  C7ECe Ete%  e eE?%?Ete @ 5`   mnp ! e  1 !R8.27&    U?_ܵ_ f t _  f_u  N _ _ %F    % 5_ $_  _ w  ww ww D L3! N t e%|\ww DC%  t4P22̥ 2wvw f  5&wJ t3@  w " p˕  4 "% L, e%|\  fJww     0 t2@ &7%% 0 & d5  x& < e fJwDw 4@5w( % w 7!LF9 Z6  N <H& (, :E%3-ڲԲ/ 7 ܲ7 ڲβʲ %e& & & ]e7 t77x % i wRw < t @-A vDe C&a޲ز ]e  wa l5  Nf 8  N h 7avw  NL̥ , 0- e%|\_6   7   2  `^ T7 F pww -.  w"7  p _L x: >%_L 7ފ L%_L̊ Š_L%_L 7X_L5_L ?&ְܰ ]e T  JD  & ]e j _f _f   Y  _f e%%B  m  %ve 1UE_fVU%D|.0  pj t _h  fJ@_fw  &   D5-(5-$̵̵^3!e%^X $_ o wZ eJ%Lɂtt̕4 F4 HAe vf& f Me55 a @5@eEt5`N& | N aw DC   ee 55 R R R % wHw 8D!  4 B& 62 & J% ; 4  ;ww D̵F_ n2_e vf& & ZLe5 a_eEt5`=@0@0 @0 @0 0c kr n Be e55 R @ ȋE%0 E%pu R R % ̵ @f&@46̵ @f&@8:̵@@><F awvw fDE%%@N5 Ata55  ta0 0    xRfff Te  & fff ~e 4 4 Bww   fff FJe5 aBt`55    a  f fff ~e fff e   afff ^eww < 0,  wF5U@ AA @@4   w ک @7r` #%fpr % w>w .D Be G o%%%d %u%o%x%o%x & %%s @  o%D   %eeww  - oA@  5uf ff eu5v Nff %f ff eAN oww wj N  zw NEA vff eww D  F Nf&& eww | l  $̕t  $tBtE 4 0%, 4 ̕ 0 &  w l7f p  d   0w D 5tE5  "˥ @ 253  2C3! N 0wDw 4 ( D-   @wz 0ww D̥̋ $̕ P2B 76 pww DE re`% wjw Z JL̥eWt@ eWt@e%|\߂%      *   L̥@E%9  0̥̥ 5-"5 ̥̥@`e@- @`e5e%|\  %%   ˕t & & 6 4w  f      w ğڜ ؜e֜w М ȜEwÝ%  L >w bwwdw Tw\w LDCBҔwDw 4D V_% N1_%5E5% %0fA vWp F _%vu55uEڛ b' %`;%p7 5u _% _% 5 u Bff& > e5uEn5 A@e@ 7w  >5 e(HFe@ 5 u lffff :e fff j:e5tFtH@ b'  @`& |'%N aw  _T$wTw DD hK_D'5E5% %0BfA vWp H _D' _D' v5uE b' %`%p ff& > e5u Q5% fff ;fff 9e5 @`& |'%QN aN a-N-F%@%,(B ww u-@w@w u-@w@w DC WB5?5<58 & f& Znx& ~j& r%G`R 7`Nw`Lw F@  D ~ " ~ww Mn t r2 e  5# r  &  e  3ee3E5@E%erw l Zf t%Tee-ee,w &@teD p B  Z%<T`5\<DeBw < ۷, pLʋ:ʥ7    t EWt r @`e55 %r2 e%|\7 pww  B 5 e % $e   !ttN 0ww D % w w hD _+e55 ;45 E pe p @E  0 ` p.A vWpBD %D eA vWtB5fff eww zD 5A vCE  0 ` p-ffWp B fft %-w w DC% n2$ ̵  \̵  ֓ 7- ʓt7- t0 ww  9 Z6   7-     w^w N fwFO w ,  7D4wل %w   04 4 w e%D( ͒w CK-smKewe  w jDC%^ 7 p e3!C-l!sm@m,*b &e@m, sKm  3Keww N n2 &e    %2N2 F 4 NA F { wf ta55  Nff& h0e  ,fff 0e5&ee #% a4e p fff 83e ew N n2 &e  Nff& h0e F 4 4 %2(fff 2e;e&e #%4  Da4e pt ap pww D  L- t-t- N J F w w z N n2 &e  5  a5%(Nf V  5 @t`0 0  % w   5 TL-Sfff r.e5 ae65 D,,eJ%L ap%d  e@ % a%deu 4e p NT F _1w N n2%d  apww ^ L-%2%d Nb F 3 3 w~e%^ۂl $ w X e ^ 75@-*'$  /e5@0@tՠl՞f #% Dae%^D̵& J% eJ%L7  fww ~>e h ^ -%  > %F  Wt p 0 e%> vf& e%<_ -%*η $ww f W֋DN%K@F%C 5 ; 0  0  0  0 # WteU&p Apk  p  p Z(!ww f %`tp % $MXww e ڋ&e  Ƌ&  0Epwvw fD%F"3 N U@e  5eUe U  e%   e%0ww E 5@Je p7 ef&& j(e55  a 5p@E@`& #%ew  _8 _8lh_85 @pr`_8 % N a%  & (, _65%_9%_9._9AWp ^_x9AWpq-^o AWpD^ ;E%@y@& (, i_77 t7 rT5 5 5 -Z_7-N_7 N a%_<7 _<7& (, _772  _47A@ 7w_87 %_x8 ކf V _87_6w |E wxw h L%iwTw D  0! 4&R &DDw<ʕ2˕3̕Fw3@ 0  w D  ;>Ue   ; 77 #3-3-4 4 3 3 5E p ;wDw 4DV ;  ;7 B  ; ! " t w ,U ;  ꄷ b' 7҄ % ;5Ee pw xD &  ̵w`w PD̵ pw@w 0D 5  44# E  E4 4  5 e4vereN 0ww DC   / 44 5      E 44ddN 0@wH5e4ddw D 5  N 0weE  `B-J w DC   ``C A ?%  d7`5e5 @e 44cwc E45cwc 44 0ww D 5 cN 0#nc e5 PcHc eR N 0 ww xDC  wn R5@ ,b*wb= Be@5e5buwb= Be @@=`N 0w eE`b\be%ġ B e 7ww D%w ; ;tPw \D L a 0wJf 2> @t& 2>  0 w ww ww ww ww ww  *̵&&& & <eww  9 Z6  & & e ww vD& J%55555 5 5@A 5ue vf& & eeEt`468:<> affe ~% ~ww ~E?5E *(5@ : % m~t~"   * 0w.w <~ 5#~$@7B~ 9 Z6 5  5 ^  " } w e%^C@ & fA vWt %} f e5q} a3K !3&@& #%22@E2N a ;w  5|H \ r^ " e%^|2D 5-|%eJ%L& fA vWt % ; 3 N awPw @  9 Z6 w2E%`-|5A v-| @w |0  ww  9 Z6 5_0G5  @f (, _G@E%@5I {_G5 5  { _ x- 5 $@ _E5 @   5A1` @ 0 @ 5UA1` J %z%zN L5zz_G5   at& A ee@ mm@ f& e S   a Ef 4G _G5z_G e5A @e5${pNNf   :Nf  5   at& A ee@ mm@ f&ڻ Le5f  5eu-  f  e  f   f    a N _ -%N ww D hy y7 y7 yx #7xx_I xx_I 5 %y_Hy my@ 5uwy A  x_I7 yye? vuy my@ 5u A e?(( vCAe? veu MKyxe vfAe v% xxy ~ XZxyEp_I  x̵ w_I% x%x%x_tGff ]e s7 x @me5  `w@m h % XZ& & & ]e7 0wBxe7*w7 $w4xw #w5  v7 v0 5 7 vv t w~w|wwxwwff ]e@w|w l&5 e%H mzw %nwwEp %B    * 0  %Vwx` #%ww ڻuEt fJwλw uP3   & %  5 0 N * %u ;u  uu ;u   ^ -%˕sRvLvm@vm>v@ 3sp7 Tp % @  ww \ bPww ڵ ^ bPwҵw µD 9 Z6  E%@o w@ (,  ;  ; w bo E hoEE4P@̵ 5 \ w"w 4o  z   @ ww oD%% n 7&n Ap&n Btp@ww n5 B5 % n  nL̋"   ,  %0L Nn7-Fn  @& t e%|\ׂ nww n&H ~% mww гm7n7n7n7nww mmmww (  w ~mnE7nmwpw `~m fe& f% MmFNefe J% ww  :Sw w  :Sww D mN *^  lX@7l7l7l˵ % N:< :8˵7 l7 lll5  ;% # %5  ;˵ AAbl 3`s`s @Hl7>lww 0l 9 Z6   & T%ww l9 Z6 kE < & T%ww DC %5& (, 5& (, E%@gkck(%  ; 0E 2BkE& + !k @ 0  ww  k * 0  *w԰w İj *,̵j%%3m3m % 3l3ls jjwfw Vxj 9 Z6 >E%@ 0 ;fj9 Z6 #j jNj0- i  i @ wίw i d 9 Z6 ii <  w~w n i~i|izitivipi 9 Z6 &@5 (, @3 (, @5@ (,  7i iww i 2  >-8 ;0 7 (" "h 9 Z6 E% h 7 ;w~w ni ; 4xt^ % lifi %7^iXi %7|izi f& %7ddi``i\hXhT7 R7 P$iLBiHwgwgt^g gg7g %gss ;ww   W-  CEA@v5u  eu  W- A@v5u t @mw w 2g $g@ @ww D 5et_ x-  $ d\ f& ee  f^ -%47 pwbw Rrf: \ \f0 (5$4 et&_ -%&^ -% ˵  d\wܫw ̫D g_[5 |\ e %\^ 3! \e  [  D\iC   te t Z 3 3 jfe? vBe vN_ x-  $e [& & &  ]efdd7 d7 ddd #d7d ww D^ x- 4 &&& ee  D\    Rd fff e5eAw AwU &A vWt eAw A ndw ܥ fff e #fff >e5U &A vWt e4Aw .A  3f f f e 'f f f e5 aU A vWt e@w @ fff ew ndw DE e@w @& vWt 5 nd a 5U gww D vWtC5 aU aw\w LDU DawFw 6D5@ p5@TE@L\^ p5 5 b^0 \^ d^0 \^E 0wȣw A vWtC5- 5-t- w  w pA v- $ ,A vWtC $95-35-/t- + 5 U@&   ҡ  %\^%tep  dwТ  %\^U@\^ t d5U Da0003t ttw : . U@b\^  %\^T \^F d5U Da0003 wơw D &  5 n gww D x00U 0whw XD5  86U5 aE@ pw4w $@ ~@0 ww D^55@>=v ޟU@  5M@ U  %t3 A mm@ 3s@t3@tE3 vWt P   5`et5` 5@ p EH5 $ww %5- U d Da ֞5%\^ w̟w D Y5_g5Y_gmY _gjZeE5Z5  vBEB-_gmY vE@Am$Z@ Z _g "U@&  5@ U t 9ZWt @`E@`5tE@`4@tE4XXv4tX 4X&  ~&  5X5@ p 0EH7|X g[XwHw 8D57CX;Xw(w D E5 5 A@e@ v5u%% " Ău5@mAm@ f&EWp@&%  U d4EWpef ff Ȝegt WpCe 4 &  i  , w(w D ߕ@t%_,jt7@WpBem5@ߕQ R E%I Ă5u ff :eue ru_-t@ 5e%__ߕYt7PBte p 2  ؟ww Ÿ_k  E 5 Ă5uEWpef ff egu ff ,euA r5A ru_E% 7 7 "3U d% E (U 5 _@t@m%F v _EtUA5U8U0Ue2w , vB 7`$w`"w wvw fE5 2_lmE^ 5@_m5 %5U7 %& r%5OE%H 5E5@t5%%" m&5tx@ me&A tx F&&H $e L F I@$E%G5  * 5 7 7 Ԝ3 3 3 4 d@  it5@  @ߕ@ t@= i % ww f h hfewrw b f h hfewTw DBE%KR6Wp2Ce֢ p%ue8ue3o5  , wUCU@f w wʗw AEWp2De֢ xww AEWp2e֢N lww |AEWp2e֢N wnw ^AEWp2De֢ D5@ %2   e & 0@ e pww AEWp2Be֢U& h} ww ܖNfAEWp2e֢ff xe Pww D5(e ;!5 %REP2Ee&, *%U wLw WO__ CO " w$w @E%7 ,Ow(O"OvCOE N Ɠ@E%tE mbE@` f N__ Bw d OsNfOO vWp B%wBw 2lOhO vWp F w"w LOHO vWp H ww f ff OO vWp Jewԓw ēDE@M<t0 H0 Jtj0 h48UB@f js 5   yM  5   [MWM@w>w .% 5@E8f js f js  f js 5f js @E0@wʒw  U@&  5 jt t4 4  s nd5@ p whw XD5 5%; Eteh",", U e4  d.55 E8e@ s4  7|x07p p  vww U7J d@P E5teH@5R%=%@P@t]UA`R%蔴" ,U   UU TRw@tEWt@PU@`",p TV5 Z Pw t 0_v E$7  RT5Z5@Pt0j0h T:5P5@P/5P% ʓ%ēteJp H7 @@% 5@P @ P& r%U@ " x vf& teHeJp H7 B7,T 4 d w^t0J0Hw :N 8wf s hfew"w N 8w f s hfeww DE%"IIv5utpJpHA@e@ f&thjww DHt 7IwI " "3" E U wZw JD,-./01#'@(ww D4 " z4 ww HH tH ww ܍HHtH wԍw čG *:%f1%f(E5% %0G&fA vWp JewFw 6D@ r y~%5ffe ~% Gfef f% -$FwҌ%&%Wp \ f&f AWp ZeFt%U E  zfef f% t*t+t't(t5*5+5'5(5ffe ~% U  @{f&f%Wp be X! &_4y & & & _^y X! & & & &&e,f f% _Zy_,y &_ y &_y &f&e, ~% _Zy_,yw ,D 5 &  U@ &e   @{ ĉww De ;  pe p E & vWp L e ;  ; 4$ 0ww vD Z 5   w\&  5"$5"  ; 5"_|%.$eNf >%5 %3e .& 2> E  D4)@\' % ( 0 5' (   5\B %w 6DCB E55  >%  @ pE& h} t]  ẅw DC e`w ZE5 5 fE5 .!E _ /!_E  D:/!0U  vWp L @{,!   8@%_" D _.!_-!,!% 5 % @{O5%A%Ze & 2> 5" % 0!1!5"  2> $N @ p5& f (! 5" f  Dww Dm% @{E %e /& 2> U ) DwΆw DC efw `5 #E%_% E%  f _&_e &_5ҋ !\ f %a%ze% 5 f e & 2> e&R5 E E xʋ@ʊ>tE5%ʋE vef H' % tE5% U@%  e &U 2> w@5@tE5%% w DE  Dww D ȃ5! &   0wȄw D5  w  {   e ; " mw pD5  e wb DU@ &e   f R>  %d  L Dw DC 3 $5 55  5@3@5-w55, @,w `D E5@wNtE  && ew D Et5wE  && e@(ww 7PPP4R`0  ȋ `-#########`rrs ######## h ######mjnnnHo#############################################hpq####################`rrvw##########mm##############q#qr2r#######w#l#h}DJ""@iinit| ~ ~~~~" $ B L ~R X ~ ~~~" ka6 = %o aps = %o pc = %o ps = %o trap type %o trapparity %o parityRandom interrupt ignored >coreF`hno imtInode table overflow iaddress > 2^24 0123456789ABCDEFpanic: %s %s on dev %u/%u errbn=%D er=%o,%o zero wchanSleeping on wchan 0proc on q Running a dead procno procsTimeout table overflowno file Bad free countno spacebad blockOut of inodesbad countno fs  /etc/initmem = %D no clock< JJDLS*STD:PNfVPQMz@`U OB:CNNNvR@@RR0xHxVDON8OQ< < . A9.RTR. N ODQ. . >Wf4Y`x. "@. . RDRJP. . Out of swapout of swap spaceout of textout of swap spaceblkdevdevtabIO err in swap%J"Dv,t>W,, 00%D ECCvvvmt%d off line mt%d needs write ring |`{}~ABCDEFGHIJKLMNOPQRSTUVWXYZXzzz؀ڀV^({)}!|^~'`l.oZERObr4br5br6br7klinkloukwlptmiohpio mch.o(HTDUMPTUDUMPmfpi @ stst mtpi mfpd @mtpd splwaitrttreset.PROFILHIPRIHIGHKDSA6HTCS1 HTCS2(HTTC:HTBA$HTFC&HTWC"HT MTCRSSR0zSSR3NMSCRPSKISA0KISD0KISA7IOKDSA0KDSD0KDSA7stkKISA1SISA2_prolocSISD2KISD7KDSD5SISD0SISD1usizenofaultfpp_isprofsavepsssrSSR1|SSR2~call1dispdlyCSWxfuwordgiwordgwordpiwordpword,fuiworderrJsuiwordsuwordcopsuwaitlocSISA0SISA1hardldivhardlrem&SWRxCCSBCCSR_sprof_xprobuf_probsiz_modedone_outsidemcount_profcnt_profsizcountbasc.oBmain.oB~mainB~iinitcpbpfp~binitbpdpibdptrap.o0~trap0devspr1nps r0 pcpsiacallpfetchsystosp~nosys. ~nullsys< sig.oD ~signalD pgrpsigp~psignalt psig~issig np~stop ppcp~psigZ nprp~fsig pni~core ips~grow spsiipa~ptracepuap~procxmtVipxpiget.oV~igetVdevinoipmpoipbpdp~iexpand|ipdpp1p2i~iputip~iupdatJiptatmbpdpp1p2i~itruncipidevbn~tloop~devbnf1 f2 ibpbapnb~maknode<modeip~wdiripprf.o~printffmtx1cadxs~printnnba~panic$s~prdevFstrdev~deverrorbpo1o2slp.o~sleepchanprirpsh~wakeuppchanpqissp~setrqpqs~setrun2pw~setprippp~schedrppoutageinagemaxsize~swapin*pxpax~qswtch~swtchnpqpppq~newproca1a2puprpp((ripn~expandnewsizeinpa1a2subr.o> ~bmap> ipbnrwflg ibpnbpjshnbbapdev~passc"cid~cpassf#cid~nodev#~nulldev#~bcopy#fromtocountftrdwri.o#~readi#ipbpdevlbnbndiffonntype~writei%ipbpdevbnnontype~maxH'ab~minb'ab~iomove|'cpnflagtclock.o>(~clock>(devspr1nps r0 pcpsp1p2ppa~timeout*funargtimp1p2tsfio.o*~getf*ffp~closef*fpipflagmodedevcfunccp~openi+iprwdevmaj~access(,ipmodem~owner,ip~suser,~ufalloc,i~falloc*-fpimalloc.ox-~mallocx-mpsizeabp~mfree-mpsizeabptalloc.oj.~allocj.devbnofpbp~free/devbnofpbp~badbloch0fpbndev ~ialloc0devfpbpipidpinoadr~ifree62devinofp~getfsn2devmpfp~update2ipmpbpfpmachdep.3~startup3i~sysphysf4isduap~clkstar&5~sendsigd5psignon~mapallo5bpia~mapfree86bpnami.oZ6~nameiZ6funcflagdpccpbpideo~schar9~uchar9cpipe.o9~pipe9iprfwfr~readpN:fpip~writep:fpcip~plock;ip~prele;ipprim.o;~getc;pbpcs~q_to_bpcpbpcps~b_to_q>cpccqcqbpsacc~cinit\?ccpcpcdp~getw?ps~putw?cpsfakemx.o@~sdata@cp~mcttsta@tp~mpxchan"@~mcstart0@pq~scontro8@chanscsysent.o@@sys3.o@@~fstat@@fpuap~statz@ipuap~stat1@ipubpipeadjdpbpds~dupAfpuapim~smountBdevipmpsmpfpbpuap~sumount:Cdevipmpbp~getmdevCdevipsys1.o>D~exec>D~execeRDnccpbpuapnanebnoucpapcip~getxfil4Gipnargcdsseptsssioverlaylsize~setregsIrpcpi~rexitJJuap~exitfJrvipqf~waitKfp~forkDLp1p2a~sbreakMandisys4.oN~gtimeN~ftimeNuaptms~stimeNuap~setuidNuiduap~getuidN~setgidNgiduap~getgid O~getpid O~sync8O~niceDOnuap~unlinkOippp~chdir:P~chrootJP~chdirecbPippip~chmodPipuap~chownQipuap~ssigDQauap~killQpqauapfpriv~times.Ruap~profilTRuap~alarmvRpcuap~pauseR~umaskRuapt~utimeRuapiptvsys2.oS~readS~write*S~rdwr:Smodefpipuap~openTipuap~creatDTipuap~open1Tipmodetrffpi~closeW~sysacct>Wipuap~acctWiipsiz~compresXtexpround~syslockYpuaptext.o(_tmintr"u_hpintr"k_end$_edata#_etext"D_main"B_cputype#_u!_rkboot"_rpboot"_trap"0_runrun$_savfp"_restfp">_stst"f_addupc"t_display"_backup"_regloc#_fubyte"L_subyte"_fuword"_suword"_fuibyte">_suibyte"f_fuiword"_suiword"_copyin"f_copyout"~_copyiin"Z_copyiou"r_idle"_waitloc#_save"_resume"_spl0"_spl1"_spl4"_spl5"_spl6" _spl7"(_splx"((0_copyseg"8_clearse"hldiv"csv"(cret"4lrem"_ka6#_canonb$_rootdir$_runq$_lbolt$_time$_nblkdev$_nchrdev$_mpid$_runin$_runout$_curpri$_maxmem$_lks$_swplo#v_nswap#z_updlock$_rablock$_msgbuf$_rootdev#n_swapdev#p_pipedev#r_dk_busy$@ _dk_time$B _dk_numb$ _dk_wds$ _tk_nin$ _tk_nout$ _mpxip$ _tmtab$ _hptab$ _bdevsw#_nodev"#_tmopen"`r_tmclose"r_tmstrat"s_nulldev"#_hpstrat" h_cdevsw#B_klopen"m_klclose"jn_klread"n_klwrite"n_klioctl"Ho_mmread"hp_mmwrite"q_tmread"v_tmwrite"w_hpread"m_hpwrite"m_syopen"q_syread"q_sywrite"r_sysioct"2r_linesw#Z_ttyopen"w_ttread"l_ttwrite"_ttyinpu"h}_ttstart"D_nldisp#t_buf$ _file$ _inode$D_ldmpx#|_mpxchan""@_proc$L_text$|\_bfreeli$\^_acctbuf$t^_acctp$^_mount$^_coremap$^_swapmap$__startup"3_clkstar"&5_cinit"\?_binit"_iinit"_iget"V_newproc"_szicode#_expand"_estabur"]_icode#r_sched"_bread"__geteblk"c_panic"$_bcopy"#_brelse"a_buffers$V`_printf"_psignal"t _issig" _psig"Z _setpri"_qswtch"_sysent#_grow" _nosys". _nullsys"< _ipc$_signal"D _setrun"2_fsig" _stop" _wakeup"p_swtch"_procxmt"V_exit"fJ_sendsig"d5_core" _schar"9_namei"Z6_maknode"<_access"(,_itrunc"_writei"%_iput"_ptrace"_sleep"_iexpand"|_ifree"62_iupdat"J_prele";_getfs"n2_bdwrite"a_free"/_tloop"~_ialloc"0_wdir"_panicst$_putchar"o_printn"_update"2_prdev"F_deverro"r_slpque$_setrq"_swapin"*_xswap" _alloc"j._passc""_cpass"f#_readi"#_min"b'_clrbuf"e_breada"H`_iomove"|'_getblk"b_max"H'_callout$_timeout"*_getf"*_closef"*_plock";_openi"+_xrele"\_owner",_uchar"9_suser",_ufalloc",_falloc"*-_badbloc"h0_bwrite"Da_bflush" f_sysphys"f4_maplock$_mapallo"5_mapfree"86_pipe"9_readp"N:_writep":_cfree$_cfreeli$ԡ_cbad$֡_getc";_q_to_b"p<_ndqb"=_ndflush"|=_putc"2>_b_to_q">_getw"?_putw"?_sdata"@_mcttsta"@_mcstart"0@_scontro"8@_rexit"JJ_fork"DL_read"S_write"*S_open"T_close"D_chdir":P_gtime"N_mknod"fV_chmod"P_chown"Q_sbreak"M_stat"z@_seek"`U_getpid" O_smount"B_sumount":C_setuid"N_getuid"N_stime"N_alarm"vR_fstat"@@_pause"R_utime"R_stty"0x_gtty"Hx_saccess"V_nice"DO_ftime"N_sync"8O_kill"Q_dup"A_times".R_profil"TR_setgid"N_getgid" O_ssig"DQ_sysacct">W_syslock"Y_ioctl"`x_exece"RD_umask"R_chroot"JP_stat1"@_getmdev"C_xumount"\_bawrite"a_getxfil"4G_setregs"I_xfree"Y_xalloc"XZ_acct"W_chdirec"bP_rdwr":S_open1"T_compres"X_xccdec"d\_xexpand"[_xuntext"]_io_info$ء_swbuf1$^_swbuf2$v_iowait"nd_incore"lb_geterro"g_notavai"d_iodone"d_physio"hf_hp_size#_hp_offs#(_rhpbuf$_hputab$_dkblock"Ă_dkunit"_disksor"&_hpustar" i_hpstart"0j_kl11$֢_partab#R_klstart"o_ttychar"w_ttyclos"x_ttiocco"x_ttrstrt",_msgbufp#P_ctmbuf$_rtmbuf$ _t_flags$8_t_openf$@_t_blkno$H_t_nxrec$h_tcomman"js_tmstart"t_tmphys"8w_maptab#_wflusht"z_flushtt"@{_canon"{_ttyrend"|_ttybloc"_ttyoutp"fck6 }  1  C7wu7wpu7w&(7wrq7wk5L5F7 S 7  tEe  e 55F8 edf W  W N etEm tE   1 W  vС ̡7 ơ  0t & __\ 7wflrfFE50   * U0 %   Q @ e Q0H ؠ>  pv Er bIm 2  7 ~.(5U0 7  xJ< 5  `& f EA `E E v EE \&v  E H&v  v   ,hJbI .RJLI#   J&  J&  4P ~ (P~  & ~ &~ &  <4PP I7BCDEFY^Z   P~.  & C~vw C  5!BA  D & r@rr @`   wXw FC  5!BAD  r@rr `  w@& BFw \-EEEEEL޹7  . 8   V 7 V 77 D &e? veN & & e? vf& ]e&  ~% w"w lh vWt % N Xe \ $& #% a7WW222 ww X^7V7V7V7V WpDe  WpeR`tX^xVrV07jV a %@ e ww  7 Ʒ@E%U@e 7@E  x  Ne  Nf %N    $ ~ t   zh 7  f NNZf t%  >wNe %  C7ECe Ete%  e eE?%?Ete @ 5`   mnp ! e  1 !R8.27&    U?_ܵ_ f t _  f_u  N _ _ %F,    % 5_  $_' _ w  ww ww D L3! N t e%x\ww DC%  t4P22̥ 2wvw f  5&wJ t3@  w " p˕  4 "% L, e%x\  fJww     0 t2@ &7%% 0 & d5  xB < e fJwDw 4@5w( % w 7!hF9 Z6  N <H& (, :E%3-ڲԲ/ 7 ܲ7 ڲβʲ %e& & & ]e7 t77x % i wRw < t @-A vDe C&a޲ز ]e  wa l5  Nf 8  N h 7avw  NL̥ , 0- e%x\_6   7 |  2  \Z P7 B pww -*  w7  p _L xV >%_L 7ڊ L%_LȊ _L%_L 7X_L5_L ?&ְܰ ]e P  F@  & ]e j _f _f   Y  _f e%%B  m  %ve 1UE_fVU%Dx.0  lf t _h  fJ<_fw  &   @5-(5-$̵̵^3!e%^t ${ o wZ eJ%Lɂtt̕4 F4 HAe vf& f Me55 a @5@eEt5`N& | N aw DC   ee 55 R R R % wHw 8D!  4 B& 62 & J% ; 4  ;ww D̵F_ n2_e vf& & ZLe5 a_eEt5`=@0@0 @0 @0 0ckn6 }  1((Be e55 R @ ȋE%0 E%p R R % ̵ @f&@46̵ @f&@8:̵@@><F awvw fDE%%@N5 Ata55  ta0 0    xnfff Te  & fff ~e 4 4 Bww   fff FJe5 aBt`55    a  f fff ~e fff e   afff ^eww < 0,  wF5U@ AA @@4   w ک @7r` #%fpr % w>w .D Be G v%%%d %u%o%x%o%x & %%s @  v%D   %eeww  - vA@  5uf ff eu5v Nff %f ff eAN vww wf N  zw NEA vff eww D  F Nf&& eww | l  $̕t  $tBtE 4 0%, 4 ̕ 0 &  w h7b p  d   0w D 5tE5  "˥ @ 253  2C3! N 0wDw 4 ( D-   @~wv 0ww D̥̋ $̕ L.> 72 pww DE re`% wjw Z JL̥eWt@ eWt@e%x\߂%      *   L̥@E%9  0̥̥ 5-"5 ̥̥@`e@- @`e5e%x\  %%   ˕t & & 6 4w  f      w ğڜ ؜e֜w М ȜEwÝ%  L >w bwwdw Tw\w LDCBҔwDw 4D V_% N1_%5E5% %0fA vWp b _%vu55uEڛ b' %`;%p7 5u _% _% 5 u Bff& > e5uEn5 A@e@ 7w  >5 e(HFe@ 5 u hbfff :e fff j:e5tFtH@ b'  @`& |'%N aw  _T$wTw DD hK_D'5E5% %0BfA vWp d _D' _D' v5uE b' %`%p ff& > e5u Q5% fff ;fff 9e5 @`& |'%QN aN a-N-F%@%,(B ww u-@w@w u-@w@w DC WB5?5<58 & f& Znx& ~j& r%G`R 7`Nw`Lw F@  D ~ " ~ww Mj t r2 e  5# r  &  e  3ee3E5@E%erw l Zf t%Tee-ee,w &@te@ p >  V%<P`5\<@e>w 8 ۷( pLʋ:ʥ7    t EWt r @`e55 %r2 e%x\7 pww  B 5 e %, $e   !ttN 0ww D % w w hD _+e55 ;45 E pe p @E  0 ` p.A vWpB` %@ eA vWtB5fff eww zD 5A vCE  0 ` p-ffWp ^ fft %-w w DC% n2$ ̵  \̵  ֓ 7- ʓt7- t0 ww  9 Z6   7-     w^w N fwFO w ,  7D4wل %w   04 4 w e%@D ͒w CK-smKewe  w jDC%^ 7 p e3!C-l!sm@m,*b &e@m, sKm  3Keww N n2 &e    %2NN F 4 N] F { wf ta55  Nff& h0e  ,fff 0e5&ee #% a4e p fff 83e ew N n2 &e  Nff& h0e F 4 4 %2(fff 2e;e&e #%4  Da4e pt ap pww D  L- t-t- N f F w w z N n2 &e  5  a5%(Nf V  5 @t`0 0  % w   5 TL-Sfff r.e5 ae65 @,,eJ%L ap%d  e@ % a%deu 4e p Np F _1w N n2%d  apww ^ L-%2%d N~ F 3 3 w~e%^ۂ $ w X e ^ 75@-*'$  /e5@0@pՠh՞f #% Dae%^@̵& J% eJ%L7  fww ~Ze h ^ -%  > %F   Wt p 0 e%> vf& e%|X_ -%Fη @ww f W֋DN%K@F%C 5 ; 0  0  0  0 # WteU&p Apk  p  p Z(!ww f %`pl % $MTww e ڋ&e  Ƌ&  0Epwvw fD%F>3 N U@e  5eUe U  e%   e%0ww E 5@Fe p7 8eww  %/ & V  %/  _7 wx` y %! %nҐ %/%n %/%!_8 _8  ;ҰB ' N avf&& > ef&& j(e55  a 5p@E@`& #%ew  _8 _8lh_85 @pr`_8 % N a%  & (, _65%_9%_9._9AWp ^_x9AWpq-^o AWpD^ ;E%@y@& (, i_77 t7 rT5 5 5 -Z_7-N_7 N a%_<7 _<7& (, _772  _47A@ 7w_87 %_x8 ކf V _87_6w |E wxw h L%iwTw D  0! 4&R &DDw<ʕ2˕3̕Fw3@ 0  w D  ;>Ue   ; 77 #3-3-4 4 3 3 5E p ;wDw 4DV ;  ;7 B  ; ! " t w ,U ;  ꄷ b' 7҄ % ;5Ee pw xD &  ̵w`w PD̵ p((w@w 0D 5  44# E  E4 4  5 e4reneN 0ww DC   / 44 5      E 44ddN 0@wH5e4ddw D 5  N 0weE  `B-J w DC   ``C A ?%  d7`5e5 @e 44cwc E45cwc 44 0ww D 5 ~cN 0#jc e5 LcDc eR N 0 ww xDC  wn R5@ ,b*wb= Be@5e5buwb= Be @@=`N 0w eE\bXbe% ^ e 7ww D%w ; ;tPw \D L a 0wJf 2> @t& 2>  0 w ww ww ww ww ww  *̵&&& & <eww  9 Z6  & & e ww vD& J%55555 5 5@A 5ue vf& & eeEt`468:<> affe ~% ~ww ~E?5E *(5@ : % m~t~"   * 0w.w <~ 5#~$@7B~ 9 Z6 5  5 ^  " } w e%^C@ & fA vWt %} f e5q} a3K !3&@& #%22@E2N a ;w  5|H \ r^ " e%^|2@ 5-|%eJ%L& fA vWt % ; 3 N awPw @  9 Z6 w2E%`-|5A v-|| @w |0  ww  9 Z6 5_0G5  @f (, _G@E%@5I {_G5 5  { _ x- 5 $@ _E5 @   5A1` @ 0 @ 5UA1` J %z%zN L5zz_G5   at& A ee@ mؼmּ@ f&ļ e S   a Ef 4G _G5z_G e5A @e5${pNNf   :Nf  5   at& A ee@ m m@ f& Le5f  5eu-  f  e  f   f    a N _ -%N ww D hy y7 y7 yx #7xx_I xx_I 5 %y_Hy my@ 5uwy A  x_I7 yye? vuy my@ 5u A e? vCAe? veu MKyxe vfAe v% xxy ~ XZxyEp_I  x̵ w_I% x%x%x_tGff ]e s7 x @me5  `w@m h % XZ& & & ]e7 0wBxe7*w7 $w4xw #w5  v7 v0 5 7 vv t w~w|wwxwwff ]e@w|w l&5 e%H mzw %nwwEp %B    * 0  %Vwx` #%ww ڻuEt fJwλw uP3   & %  5 0 N * %u ;u  uu ;u   ^ -%˕sRvLvm@vm>v@ 3sp7 Tp % @  ww \ bPww ڵ ^ bPwҵw µD 9 Z6  E%@o w@ (,  ;  ; w bo E hoEE4P@̵ 5 \ w"w 4o  z   @ ww oD%% n 7&n Ap&n Btp@ww n5 B5 % n  nL̋"   ,  %,L Nn7-Fn  @& t e%x\ׂ nww n&H ~% mww гm7n7n7n7nww mmmww (  w ~mnE7nmwpw `~m fe& f% MmFNefe J% ww  :Sw w  :Sww D mN *^  lX@7l7l7l˵ % N:< :8˵7 l7 lll5  ;% # %5  ;˵ AAbl 3`s`s @Hl7>lww 0l 9 Z6   & T%ww l9 Z6 kE < & T%ww DC %5& (, 5& (, E%@gkck(%  ; 0E 2BkE& + !k @ 0  ww  k * 0  *w԰w İj *,̵j%%3m3m % 3l3ls jjwfw Vxj 9 Z6 >E%@ 0 ;fj9 Z6 #j jNj0- i  i @ wίw i d 9 Z6 ii <  w~w n i~i|izitivipi 9 Z6 &@5 (, @3 (, @5@ (,  7i iww i 2  :-4 ;, 7 $" h 9 Z6 E% h 7 ;w~w ni ; 4xp^ % lifi %7^iXi %7~|izi f& %7`di\`iXhThP7 N7 L$iHBiDwgwgp^g gg7g %gss ;ww   W-  CEA@v5u  eu  W- A@v5u t @mw w 2g $g@ @ww D 5et_ x-  $ d\ f& ee  f^ -%47 pwbw Rrf: \ \f0 (5$4 et&_ -%&^ -% ˵  d\wܫw ̫D g_[5 x\ e %X^ 3! \e  [  D\iC   te t Z 3 3 jfe? vBe vN_ x-  $e [& & &  ]efdd7 d7 ddd #d7d ww D^ x- 4 &&& ee  D\    Rd fff e5eAw AwU &A vWt  eAw A ndw ܥ fff e #fff >e5U &A vWt  e0Aw *A  3f f f e 'f f f e5 aU A vWt  e@w @ fff ew ndw DE e@w @& vWt  5 nd a 5U gww D vWtC5 aU aw\w LDU DawFw 6D5@ p5@PE@HX^ p5 5 ^^0 X^ `^0 X^E 0wȣw A vWtC5- 5-t- w  w pA v- $ ,A vWtC $95-35-/t- + 5 U@&   ҡ  %X^%tep  dwТ  %X^U@X^ t d5U Da0003t ttw : ((. U@^X^  %X^P X^B d5U Da0003 wơw D &  5 n gww D x00U 0whw XD5  86U5 aE@ pw4w $@ ~@0 ww DZ55@:=r ޟU@  5M@ U " %t3 A mm@ 3s@t3@tE3М vWt  P   5`et5` 5@ p EH5 $ww %5- U d Da ֞5%X^ w̟w D Y5_g5Y_gmY _gjZeE5Z5  vBEB-_gmY vE@Am$Z@ Z _g "U@&  5@ U t 9ZWt @`E@`5tE@`4@tE4XXv4tX 4X&  ~&  5X5@ p 0EH7|X g[XwHw 8D57CX;Xw(w D E5 5 A@e@ v5u%% " Hu5@mAm@ f&EWp@&%  U d4EWpef ff Ȝegt WpCe 4  i  , w(w D ߕ@t%_,jt7@WpBem5@ߕQ R E%I H5u ff :eue ru_-t@ 5e%__ߕYt7P>te p 2  Οȟğww _k  E 5 H5uEWpef ff egu ff ,euA r5A ru_E% 7 7 3U d%E DU 5 _@t@m%F v _EtUA5U8U0Ue.w ( vB 7` w`w wvw fE5 _lmEZ 5@_m5 %5U7 ĝ%ȝ& r%5OE%H 5E5@t5%%" m&5tx@ me&A tx *&&d $e h F I@E%G5  * 5 7 Ȝ7 Μ3 3 3 4 d@  it5@  @ߕ@ t@= i % ww f h hfewrw b f h hfewTw DUDE%?R*t0 0 t@B  4 f n 5 5QQw֗w ƗDE%5f n f n f n 5f n 4wjw Z BU@&  5 t t4 4   ,o nd5@ p ww D%> Ete -3-U 3-5  e4  d. -5e@ s E4  Z <76207* *  wLw < _tq EtE(EU%?EU:E :5(_~q5*_~qEt55%_xq *_q| &UA _tqt-FZ$%FT< & v _"EtUA5U8 5*4 >U0 2t4, 04, +t-t-t- @&Y @&[ wU7v d_ow b_s EV7 R5@ _r,5(5h %ҢE55 *E5*!5* v _"t0 0   %—(,& r% `% % tep &[ _s%U  5@*  j xltep 7 ,7 d" 4G%&  f&t  t  & mm@ ee@ f&t  t  e@ f&t ZnU w55*t00w b:E(E ((: wFw 6N H__ JH " wjw Z@E%7 rHwLnHhHvC`HE d9H @E%tE mĈE@` f G__ w HGfHH vWp ^%ww xHH vWp b whw XHH vWp d wHw 8f fffHbH vWp feww D&Gt 7.Hw*H " "3" E U w֌w ƌD,-./01#'@(ww D4 " ||4 ww pDGDG t%5 %3e .& 2> E  Ȃ4)@\' % ( 0 5' (   5\B %w DCB E55  >%  @ pE& ~ t]  wHw 8DC e؊w ҊE5 5 fE5 .!E _/!_E  Ȃ:/!0U  vWp h |,!   8@%_" D _.!_-!,!% 5 % |O5%A%Ze & 2> 5" % 0!1!5"  2> $N @ p5& (! 5"  Ȃww Dm% |E %e /& 2> U ) ȂwJw :DC eވw ؈5 #E%_t% E%  _t&_te &_n5ҋ !\ %a%ze% 5 e & 2> e&z5 E E xʋ@ʊ>tE5%ʋE vef H' % tE5% U@%  e &U 2> w5@tE5%% w tDE  Ȃwlw \D D5! &   0wDw 4D5  w.  2}   e ; " mw D5  e wނ ȂU@ &e   <  %d  f ȟ Ȃw zDC 3 $5 55  5@3@5-w55, @,w ܁D E5@wʁtE  && ew D Et5wE  && e@(ww 7PPP4  (: $&"ȕ1ȋ55@-#################### h m^n,o ###t$uDubuv#############################################"ww##################################mm##m^nst########zx#xxx#######y#8#~ȂJ""@iinit| ~ ~~~~" $ B L ~R X ~ ~~~" ka6 = %o aps = %o pc = %o ps = %o trap type %o trapparity %o parityRandom interrupt ignored >coreF`hno imtInode table overflow iaddress > 2^24 0123456789ABCDEFpanic: %s %s on dev %u/%u errbn=%D er=%o,%o zero wchanSleeping on wchan 0proc on q Running a dead procno procsTimeout table overflowno file Bad free countno spacebad blockOut of inodesbad countno fs  /etc/initmem = %D no clock< JJDLS*STD:PNfVPQMz@`U OB:CNNNvR@@RRyyVDON8OQ< < . A9.RTR. N ODQ. . >Wf4Yy. "@. . RDRJP. . Out of swapout of swap spaceout of textout of swap spaceblkdevdevtabIO err in swap%J"Dv,t>W,, 00%D ECCrsssrr((|`{}~ABCDEFGHIJKLMNOPQRSTUVWXYZ{|B|\^ځ,x({)}!|^~'`l.oZERObr4br5br6br7klinkloukwlphtiohpio mch.o(HTDUMPTUDUMPmfpi @ stst mtpi mfpd @mtpd splwaitrttreset.PROFILHIPRIHIGHKDSA6HTCS1 HTCS2(HTTC:HTBA$HTFC&HTWC"HT MTCRSSR0zSSR3NMSCRPSKISA0KISD0KISA7IOKDSA0KDSD0KDSA7stk KISA1SISA2_prolocSISD2KISD7KDSD5SISD0SISD1usizenofault@fppB_isprofsavepsLssrDSSR1|SSR2~call1dispdlyJCSWxfuwordgiwordgwordpiwordpword,fuiworderrJsuiwordsuwordcopsuwaitlocSISA0SISA1hardldivhardlrem&SWRxCCSBCCSR_sprof_xprobuf_probsiz_modedone_outsidemcount_profcnt_profsizcountbasc.oBmain.oB~mainB~iinitcpbpfp~binitbpdpibdptrap.o0~trap0devspr1nps r0 pcpsiacallpfetchsystosp~nosys. ~nullsys< sig.oD ~signalD pgrpsigp~psignalt psig~issig np~stop ppcp~psigZ nprp~fsig pni~core ips~grow spsiipa~ptracepuap~procxmtVipxpiget.oV~igetVdevinoipmpoipbpdp~iexpand|ipdpp1p2i~iputip~iupdatJiptatmbpdpp1p2i~itruncipidevbn~tloop~devbnf1 f2 ibpbapnb~maknode<modeip~wdiripprf.o~printffmtx1cadxs~printnnba~panic$s~prdevFstrdev~deverrorbpo1o2slp.o~sleepchanprirpsh~wakeuppchanpqissp~setrqpqs~setrun2pw~setprippp~schedrppoutageinagemaxsize~swapin*pxpax~qswtch~swtchnpqpppq~newproca1a2puprppripn~expandnewsizeinpa1a2subr.o> ~bmap> ipbnrwflg ibpnbpjshnbbapdev~passc"cid~cpassf#cid~nodev#~nulldev#~bcopy#fromtocountftrdwri.o#~readi#ipbpdevlbnbndiffonntype~writei%ipbpdevbnnontype~maxH'ab~minb'ab~iomove|'cpnflagtclock.o>(~clock>(devspr1nps r0 pcpsp1p2ppa~timeout*funargtimp1p2tsfio.o*~getf*ffp~closef*fpipflagmodedevcfunccp~openi+iprwdevmaj~access(,ipmodem~owner,ip~suser,~ufalloc,i~falloc*-fpimalloc.ox-~mallocx-mpsizeabp~mfree-mpsizeabptalloc.oj.~allocj.devbnofpbp~free/devbnofpbp~badbloch0fpbndev ~ialloc0devfpbpipidpinoadr~ifree62devinofp~getfsn2devmpfp~update2ipmpbpfpmachdep.3~startup3i~sysphysf4isduap~clkstar&5~sendsigd5psignon~mapallo5bpia~mapfree86bpnami.oZ6~nameiZ6funcflagdpccpbpideo~schar9~uchar9cpipe.o9~pipe9iprfwfr~readpN:fpip~writep:fpcip~plock;ip~prele;ipprim.o;~getc;pbpcs~q_to_bpcpbpcps~b_to_q>cpccqcqbpsacc~cinit\?ccpcpcdp~getw?ps~putw?cpsfakemx.o@~sdata@cp~mcttsta@tp~mpxchan"@~mcstart0@pq~scontro8@chanscsysent.o@@sys3.o@@~fstat@@fpuap~statz@ipuap~stat1@ipubpipeadjdpbpds~dupAfpuapim~smountBdevipmpsmpfpbpuap~sumount:Cdevipmpbp~getmdevCdevipsys1.o>D~exec>D~execeRDnccpbpuapnanebnoucpapcip~getxfil4Gipnargcdsseptsssioverlaylsize~setregsIrpcpi~rexitJJuap~exitfJrvipqf~waitKfp~forkDLp1p2a~sbreakMandisys4.oN~gtimeN~ftimeNuaptms~stimeNuap~setuidNuiduap~getuidN~setgidNgiduap~getgid O~getpid O~sync8O~niceDOnuap~unlinkOippp~chdir:P~chrootJP~chdirecbPippip~chmodPipuap~chownQipuap~ssigDQauap~killQpqauapfpriv~times.Ruap~profilTRuap~alarmvRpcuap~pauseR~umaskRuapt~utimeRuapiptvsys2.oS~readS~write*S~rdwr:Smodefpipuap~openTipuap~creatDTipuap~open1Tipmodetrffpi~closeW~sysacct>Wipuap~acctWiipsiz~compresXtexpround~syslockYpuaptext.o(_htintr"q_hpintr"k_end$N_edata#_etext"Ȅ_main"B_cputype# _u!_rkboot"_rpboot"_trap"0_runrun$_savfp"_restfp">_stst"f_addupc"t_display"_backup"_regloc#_fubyte"L_subyte"_fuword"_suword"_fuibyte">_suibyte"f_fuiword"_suiword"_copyin"f_copyout"~_copyiin"Z_copyiou"r_idle"_waitloc#_save"_resume"_spl0"_spl1"_spl4"_spl5"_spl6" _spl7"(_splx"0_copyseg"8_clearse"hldiv"csv"(cret"4lrem"_ka6#_canonb$_rootdir$_runq$_lbolt$_time$_nblkdev$_nchrdev$_mpid$_runin$_runout$_curpri$_maxmem$_lks$_swplo#_nswap#_updlock$_rablock$_msgbuf$_rootdev#_swapdev#_pipedev#_dk_busy$< _dk_time$> _dk_numb$ _dk_wds$ _tk_nin$ _tk_nout$ _mpxip$ _hptab$ _httab$ _bdevsw#_nodev"#_nulldev"#_hpstrat" h_htopen"m_htclose"^n_htstrat",o_cdevsw#^_klopen"t_klclose"$u_klread"Du_klwrite"bu_klioctl"v_mmread""w_mmwrite"w_hpread"m_hpwrite"m_htread"s_htwrite"t_syopen"zx_syread"x_sywrite"x_sysioct"x_linesw#v_ttyopen"y_ttread"_ttwrite"8_ttyinpu"~_ttstart"Ȃ_nldisp#_buf$ _file$ _inode$@_ldmpx#_mpxchan""@_proc$L_text$x\_bfreeli$X^_acctbuf$p^_acctp$^_mount$^_coremap$^_swapmap$__startup"3_clkstar"&5_cinit"\?_binit"_iinit"_iget"V_newproc"_szicode#_expand"_estabur"]_icode#_sched"_bread"__geteblk"c_panic"$_bcopy"#_brelse"a_buffers$R`_printf"_psignal"t _issig" _psig"Z _setpri"_qswtch"_sysent#_grow" _nosys". _nullsys"< _ipc$_signal"D _setrun"2_fsig" _stop" _wakeup"p_swtch"_procxmt"V_exit"fJ_sendsig"d5_core" _schar"9_namei"Z6_maknode"<_access"(,_itrunc"_writei"%_iput"_ptrace"_sleep"_iexpand"|_ifree"62_iupdat"J_prele";_getfs"n2_bdwrite"a_free"/_tloop"~_ialloc"0_wdir"_panicst$_putchar"v_printn"_update"2_prdev"F_deverro"r_slpque$_setrq"_swapin"*_xswap" _alloc"j._passc""_cpass"f#_readi"#_min"b'_clrbuf"e_breada"H`_iomove"|'_getblk"b_max"H'_callout$_timeout"*_getf"*_closef"*_plock";_openi"+_xrele"\_owner",_uchar"9_suser",_ufalloc",_falloc"*-_badbloc"h0_bwrite"Da_bflush" f_sysphys"f4_maplock$_mapallo"5_mapfree"86_pipe"9_readp"N:_writep":_cfree$_cfreeli$С_cbad$ҡ_getc";_q_to_b"p<_ndqb"=_ndflush"|=_putc"2>_b_to_q">_getw"?_putw"?_sdata"@_mcttsta"@_mcstart"0@_scontro"8@_rexit"JJ_fork"DL_read"S_write"*S_open"T_close"D_chdir":P_gtime"N_mknod"fV_chmod"P_chown"Q_sbreak"M_stat"z@_seek"`U_getpid" O_smount"B_sumount":C_setuid"N_getuid"N_stime"N_alarm"vR_fstat"@@_pause"R_utime"R_stty"y_gtty"y_saccess"V_nice"DO_ftime"N_sync"8O_kill"Q_dup"A_times".R_profil"TR_setgid"N_getgid" O_ssig"DQ_sysacct">W_syslock"Y_ioctl"y_exece"RD_umask"R_chroot"JP_stat1"@_getmdev"C_xumount"\_bawrite"a_getxfil"4G_setregs"I_xfree"Y_xalloc"XZ_acct"W_chdirec"bP_rdwr":S_open1"T_compres"X_xccdec"d\_xexpand"[_xuntext"]_io_info$ԡ_swbuf1$Z_swbuf2$r_iowait"nd_incore"lb_geterro"g_notavai"d_iodone"d_physio"hf_hp_size#_hp_offs#D_rhpbuf$_hputab$_dkblock"H_dkunit"_disksor"_hpustar" i_hpstart"0j_rhtbuf$Ң_chtbuf$_h_flags$_h_openf$_h_blkno$_h_nxrec$ _hcomman"n_htstart"o_htinit"s_htphys" ?_tEm }tE   1 W  v 7   0t & __\ |7wf\bfFE5((0  z * U0 %    Q @ e Q0H Ƞ>  pv Er bIm 2 r t7 n.(5U0 7  x:, % q ` f EA `E E v EE \&v  E H&v  v   ,XJRI .BJwNe %  C7ECe Ete%  e eE?%?Ete @ 5`   mnp ! e  1 !R8.27&    U?_ܵ_ f t _  f_u  N _ _ %F    % 5_ $_  _ w  ww ww D K3! N t e%T\ww DC%  t4P22̥ 2wvw f  5&wJ t3@  w " p˕  4 "% K, e%T\  fJww     0 t2@ &7%% 0 & d5  x& < e fJwDw 4@5w( % w 7!LF9 Z6  N <H& (, :E%3-ڲԲ/ 7 ܲ7 ڲβʲ %e& & & ]e7 t77x % i wRw < t @-A vDe C&a޲ز ]e  wa l5  Nf 8  N h 7avw  NK̥ , 0- e%T\_6 ~h  7 fh`X  2h  86 ,7 h pww -  w7 h p _L x:֊ >%_LĊ 7 L%_L _L%_L 7X_L5_L ?&ְܰ ]e ,  "  & ]e j _f _f ܉  YЉʉ  _f e%%B  m  %ve 1U~Ext_fVU%^DT.0  HB t _h  fJ_fw  &   5-(5-$̵̵n^3!e%^X $_ o wZ eJ%Kɂtt̕4 F4 HAe vf& f Me55 a @5@eEt5`N& | N aw DC   ee 55 R R R % wHw 8D!  4 B& 62 ~~& J% ; 4  ;ww D̵F_ n2_e vf& & ZLe5 a_eEt5`=@0@0 @0 @0 0c}(kJ"%(+.147:=xBe e55 R @ ȋE%0 E%pu R R % ̵ @f&@46̵ @f&@8:̵@@><F awvw fDE%%@N5 Ata55  ta0 0    xRfff Te  & fff ~e 4 4 Bww   fff FJe5 aBt`55    a  f fff ~e fff e   afff ^eww < 0,  wF5U@ AA @@4   w ک @7r` #%fpr % w>w .D Be G j%%%d %u%o%x%o%x & %%s @  j%D   %eeww  - jA@  5uf ff eu5v Nff %f ff eAN jww wB N  zw NEA vff eww D  F Nf&& eww | l  $̕t  $tBtE 4r 0r%, 4 ̕ 0r &  w D7> p  d   0w D 5tE5 r "˥ @ rr253  2C3! N 0wDw 4 (| D-   @ZwR 0ww D̥̋ $̕ (  7 pww DE re`% wjw Z JK̥eWt@ eWt@e%T\߂% `     *   K̥@E%9  0̥̥ 5-"5 ̥̥@`e@- @`e5e%T\  %%   ˕t & & 6 4w  f      w ğڜ ؜e֜w М ȜEwÝ%  L >w bwwdw Tw\w LDCBҔwDw 4D V_% N1_%5E5% %0fA vWp F _%vu55uEڛ b' %`;%p7 5u _% _% 5 u Bff& > e5uEn5 A@e@ 7zwx  >5 e(HFe@ 5 u D>fff :e fff j:e5tFtH@ b'  @`& |'%N aw  _T$wTw DD hK_D'5E5% %0BfA vWp H _D' _D' v5uE b' %`%p ff& > e5u Q5% fff ;fff 9e5 @`& |'%QN aN a-N-F%@%,(B ww u-@w@w u-@w@w DC WB5?5<58 & f& Znx& ~j& r((%G`R 7`Nw`Lw F@  D ~ " ~ww MF t r2 e  5# xr  &  e  3ee3\E5@E%erw l Zf t%Tee-ee,w &@te p   2%<,`5\<ew  ۷| pKʋ:ʥ7    t EWt r @`e55 %r2 e%T\7~ pww  B 5 e %d $e   !ttN 0ww D % w w hD _+e55 ;45 E pe p @E  0 ` p.A vWpBD % eA vWtB5fff eww zD 5A vCE  0 ` p-ffWp B fft %-fw w DC% n2$ ̵  \̵  ֓ 7- ʓt7- t0 ww  9 Z6   7-     w^w N fwFO w ,  7D4wل %w   04 4 w e%( ͒w CK-smKewe  w jDC%^ 7 p e3!C-l!sm@m,*b &e@m, sKm  3Keww N n2 &e    %2N2 F 4 NA F { wf ta55  Nff& h0e  ,fff 0e5&ee #% a4e p fff 83e ew N n2 &e  Nff& h0e F 4 4 %2(fff 2e;e&e #%4  Da4e pt ap pww D  L- t-t- N J F w w z N n2 &e  5  a5%(Nf V  5 @t`0 0  % w   5 TL-Sfff r.e5 ae65 ,,eJ%K ap%d  e@ % a%deu 4e p NT F _1w N n2%d  apww n^ L-%2%d Nb F 3 3 w~e%^ۂl $ w X e n^ 75@-*'$  /e5@0@LՠD՞f #% Dae%^̵~~& J% eJ%K7  fww ~>e h ^ -%  > %F  Wt p 0 e%>| vf& e%`X<f_ -%*η $ww f W֋DN%K@F%C 5 ; 0  0  0  0 # WteU&p Apk  p  p Z(!ww f`\ %`LH % $M0ww e ڋ&e  Ƌ&  0Epwvw fD%F"3 N U@ej  5|eUte U  e%   e%0ww E 5@"ej p7 eww  %/& V  %/  _7 wx` y %! %nҐ %/%n %/%!_8 _8  ;ҰB ' N avf&& > ef&& j(e55  a 5p@E@`& #%ew  _8 _8lh_85 @pr`_8 % N a%  & (, _65%_9%_9._9AWp p^_x9AWpq-n^o AWpDr^ ;E%@y@& (, i_77 t7 rT5 5 5 -Z_7-N_7 N a%_<7 _<7& (, _772  _47A@ 7w_87 %_x8 ކf V _87_6w |E wxw h L%iwTw D  0! 4&R &DDw<ʕ2˕3̕Fw3@ 0  w D  ;>Ue   ; 77 #3-3-4 4 3 3 5E p ;wDw 4DV ;  ;7 B  ; ! " t w ,U ;  ꄷ b' 7҄ % ;5Ee pw xD &  ̵w`w PD̵ pw@w 0D 5  44# E  E4 4  5 e4NeJeN 0ww DC   / 44 5      E 44ddN 0@wH5e4ddw D 5  N 0weE  `B-J w DC   ``C A ?%  c7`5e5 @e 44cwc E45cwc 44 0ww D 5 ZcN 0#Fc e5 (c c eR N 0 ww xDC  wn R5@ ,b*wb= Be@5e5buwb= Be @@=`N 0w leE8b4be% B e 7ww D%w ; ;tPw \D L a 0wJf 2> @t& 2>  0 w ww ww ww ww ww  *̵&&& & <eww  9 Z6  & & e ww vD~~& J%55555 5 5@A 5ue vf& & eeEt`468:<> affe ~% ~ww ~E?5E *(5@ : % m~t~"   * 0w.w <~ 5#~$@7B~ 9 Z6 5  5 n^  " } w e%^C@ & fA vWt %} f e5q} a3K !3&@& #%22@E2N a ;w  5|H \ rn^ " e%^|2 5-|%eJ%K& fA vWt % ; 3 N awPw @  9 Z6 w2E%`-|5A v-X| @w |0  ww  9 Z6 5_0G5  @f (, _G@E%@5I {_G5 5  { f_ x- 5 $@ _E5 @   5A1` @ 0 @ 5UA1` J %z%zN L5zz_G5   at& A ee@ mm@ f& e S   a Ef 4G _G5z_G e5A @e5${pNNf   :Nf  5   at& A ee@ mm@ f&ڻ Le5f  5eu-  f  e  f   f    a N f_ -%N ww D hy y7 y7 yx #7xx_I xx_I 5 %y_Hy my@ 5uwy A  x_I7 yye? vuy my@ 5u A e? vCAe? veu MKyxe vfAe v% xxy ~ XZxyEp_I  x̵ w_I% x%x%x_tGff ]e s7 x @me5  `w@m h % XZ& & & ]e7 0wBxe7*w7 $w4xw #w5  v7 v0 5 7 vv t w~w|wwxwwff ]e@w|w l&5 e%H mzw %nwwEp %B    * 0  %Vwx` #%ww ڻuEt fJwλw uP3   & %  5 0 N * %u ;u  uu ;u   ^ -%˕sRvLvm@vm>v@ 3sp7 Tp % @  ww \ bPww ڵ ^ bPwҵw µD 9 Z6  E%@o w@ (,  ;  ; w bo E hoEE4P@̵ 5 \ w"w 4o  z   @ ww oD%% n 7&n Ap&n Btp@ww n5 B5 % n  nK̋"   ,  %L Nn7-Fn  @& t e%T\ׂ nww n&H ~% mww гm7n7n7n7nww mmmww (  w ~mnE7nmwpw `~m fe& f% MmFNefe J% ww  :Sw w  :Sww D mN *^  lX@7l7l7l˵ % N:< :8˵7 l7 lll5  ;% # %5  ;˵ AAbl 3`s`s @Hl7>lww 0l 9 Z6   & T%ww l9 Z6 kE < & T%ww DC %5& (, 5& (, E%@gkck(%  ; 0E 2BkE& + !k @ 0  ww  k * 0  *w԰w İj *,̵j%%3m3m % 3l3ls jjwfw Vxj 9 Z6 >E%@ 0 ;fj9 Z6 #j jNj0- i  i @ wίw i d 9 Z6 ii <  w~w n i~i|izitivipi 9 Z6 &@5 (, @3 (, @5@ (,  7i iww i 2  - ; 7 " h 9 Z6 E% h 7 ;w~w ni ; 4xL^ % lifi %7j^iXi %7Z~x|izi f& %7<di8`i4h0h,7 *7 ($i$Bi wgwgL^g gg7g %gss ;ww   W-  CEA@v5u  eu  W- A@v5u t @mw w 2g $g@ @ww D 5etf_ x-  $ d\ f& ee  f^ -%4ʮ7Į pwbw Rrf: \ \f0 (5$4 et&f_ -%&^ -% ˵  d\wܫw ̫D g_[5 T\ e %4^ 3! \e  [  D\iC   te t Z 3 3 jfe? vBe vNf_ x-  $e [& & &  ]efdd7 d7 ddd #d7d ww D^ x- 4 &&& ee  D\    Rd fff e5eAw AwU &A vWt exAw rA ndw ܥ fff e #fff >e5U &A vWt e Aw A  3f f f e 'f f f e5 aU A vWt e@w @ fff ew ndw DE eb@w \@& vWt 5 nd a 5U gww D vWtC5 aU aw\w LDU DawFw 6D5@ p5@,E@$4^ p5 5 :^0 4^ <^0 4^E 0wȣw A vWtC5- 5-t- w  w pA v- $ ,A vWtC $95-35-/t- + 5 U@&   ҡ  %4^%teġp ¡ dwТ  %4^U@4^ t d5U Da0003t ttw : . U@:4^  %4^, 4^ d5U Da0003 wơw D &  5 n gww D x00U 0whw XD5  86U5 aE@ pw4w $@ ~@0 ww D655@=N ޟU@  5M@ U  %t3 A mm@ 3s@t3@tE3 vWt P   5`et5` 5@ p EH5 $ww %5- U d Da ֞5%4^ w̟w D Y5_g5Y_gmY _gjZeE5Z5  vBEB-_gmY vE@Am$Z@ Z _g "U@&  5@ U t 9ZWt @`E@`5tE@`4@tE4XXv4tX 4X&  ~&  5X5@ p 0EH7|X g[XwHw 8D57CX;Xw(w BE%X6Wp2Cef p%ue8ue3i5  , rUCU@f q ww AEWp2Def Brw~w nAEWp2efN {w`w PAEWp2efN {wBw 2AEWp2Def p{5@ %2   e & 0@ e pww AEWp2BefU& w ww NfAEWp2efff se Vww xD5(e ;!5 %EP2Ee&X{ *%U w w D % % ?ț ě% 5r#0u5t~ t tv%  j j j jtww @E%GUUvCUE X@E%tE mE@` >+U__ ؙU " ww @E%7 UwښTTvCTE T @E%tE m6E@` f iT__ w 8 pUGTf`U\U vWp B%ww @Ut t4 4  m nd5@ p w%5 %3e .& 2> E  p{4)@\' %z ( 0 5' (   5\B %xw DCB E55  >%  @ pE& w t]  Byww DC e w E5 By5 fE5 .!E _8y/!_>y((E  p{:/!0U  vWp L lu,!   8@%_>y" D _>y.!_>y-!,!% 5 % luO5%A%Ze & 2> 5" % 0!1!5"  2> $N @ p5& y (! 5" y  p{ww Dm% luE %e /& 2> U ) p{ww DC ew 5 #E%_{% E%  y _{&_{e &_{5:ҋ !\ y %a%ze% 5 y e & 2> e&5 E E x,ʋ@ʊ>tE5%ʋE vef H' % tE5% U@%  e &U 2> w5@tE5%% w ̊DE  p{wĊw D 5! &   0ww D5  w  u   e ; " mw DD5  e w6 p{U@ &e   y &D  %d   p{w ҉D E5 5 A@e@ v5u%@@mAm@ f&EWp@HF&%  U d4 t 2 303   w w _8~  Et555 ff 0e@EWp@lJ5 ff ZeuA r 5A r u@t@t@]_ v _EtUA55UU_]Uew  vC 7`~w`|w vww <E̊r7 t && r%5 ߕ  5~ 5~ 8% 2 U7 (74  d Vwrw bfR| hfewRw B fR| hfew4(ww 7PPP4R`0  ȋ `-#####R| ###l"mm ############### hhhhti#############################################jq##########################k#l>l^l#######q#{{#wp{"@iinit| ~ ~~~~" $ B L ~R X ~ ~~~" ka6 = %o aps = %o pc = %o ps = %o trap type %o trapparity %o parityRandom interrupt ignored >coreF`hno imtInode table overflow iaddress > 2^24 0123456789ABCDEFpanic: %s %s on dev %u/%u errbn=%D er=%o,%o zero wchanSleeping on wchan 0proc on q Running a dead procno procsTimeout table overflowno file Bad free countno spacebad blockOut of inodesbad countno fs  /etc/initmem = %D no clock< JJDLS*STD:PNfVPQMz@`U OB:CNNNvR@@RR\rtrVDON8OQ< < . A9.RTR. N ODQ. . >Wf4Yr. "@. . RDRJP. . Out of swapout of swap spaceout of textout of swap spaceblkdevdevtabIO err in swapqppmt%d off line mt%d needs write ring |`{}~ABCDEFGHIJKLMNOPQRSTUVWXYZttt{{zzz {.{({)}!|^~'`h<!#l.oZERObr4br5br6br7klinkloukwlptmiorpio mch.o(HTDUMPTUDUMPmfpi @ stst mtpi mfpd @mtpd splwaitrttreset.PROFILHIPRIHIGHKDSA6HTCS1 HTCS2(HTTC:HTBA$HTFC&HTWC"HT MTCRSSR0zSSR3NMSCRPSKISA0KISD0KISA7IOKDSA0KDSD0KDSA7stkKISA1SISA2_prolocSISD2KISD7KDSD5SISD0SISD1usizenofault0fpp2_isprofsaveps ~bmap> ipbnrwflg ibpnbpjshnbbapdev~passc"cid~cpassf#cid~nodev#~nulldev#~bcopy#fromtocountftrdwri.o#~readi#ipbpdevlbnbndiffonntype~writei%ipbpdevbnnontype~maxH'ab~minb'ab~iomove|'cpnflagtclock.o>(~clock>(devspr1nps r0 pcpsp1p2ppa~timeout*funargtimp1p2tsfio.o*~getf*ffp~closef*fpipflagmodedevcfunccp~openi+iprwdevmaj~access(,ipmodem~owner,ip~suser,~ufalloc,i~falloc*-fpimalloc.ox-~mallocx-mpsizeabp~mfree-mpsizeabptalloc.oj.~allocj.devbnofpbp~free/devbnofpbp~badbloch0fpbndev ~ialloc0devfpbpipidpinoadr~ifree62devinofp~getfsn2devmpfp~update2ipmpbpfpmachdep.3~startup3i~sysphysf4isduap~clkstar&5~sendsigd5psignon~mapallo5bpia~mapfree86bpnami.oZ6~nameiZ6funcflagdpccpbpideo~schar9~uchar9cpipe.o9~pipe9iprfwfr~readpN:fpip~writep:fpcip~plock;ip~prele;ipprim.o;~getc;pbpcs~q_to_bpcpbpcps~b_to_q>cpccqcqbpsacc~cinit\?ccpcpcdp~getw?ps~putw?cpsfakemx.o@~sdata@cp~mctts((ta@tp~mpxchan"@~mcstart0@pq~scontro8@chanscsysent.o@@sys3.o@@~fstat@@fpuap~statz@ipuap~stat1@ipubpipeadjdpbpds~dupAfpuapim~smountBdevipmpsmpfpbpuap~sumount:Cdevipmpbp~getmdevCdevipsys1.o>D~exec>D~execeRDnccpbpuapnanebnoucpapcip~getxfil4Gipnargcdsseptsssioverlaylsize~setregsIrpcpi~rexitJJuap~exitfJrvipqf~waitKfp~forkDLp1p2a~sbreakMandisys4.oN~gtimeN~ftimeNuaptms~stimeNuap~setuidNuiduap~getuidN~setgidNgiduap~getgid O~getpid O~sync8O~niceDOnuap~unlinkOippp~chdir:P~chrootJP~chdirecbPippip~chmodPipuap~chownQipuap~ssigDQauap~killQpqauapfpriv~times.Ruap~profilTRuap~alarmvRpcuap~pauseR~umaskRuapt~utimeRuapiptvsys2.oS~readS~write*S~rdwr:Smodefpipuap~openTipuap~creatDTipuap~open1Tipmodetrffpi~closeW~sysacct>Wipuap~acctWiipsiz~compresXtexpround~syslockYpuaptext.oldev~sysioct^ldevcmdaddrflag tm.ol~tmopenldevflagunitds~tmclose"mdevflag~tcommanmdevcombp~tmstratmbpp~tmstartnbpcomunitblkno~tmintrobpunitstate~tmreadqdev~tmwrite>qdev~tmphysdqdevunitatty.oq~ttyopenqdevtppp~ttycharrtp~ttyclosBrtp~stty\r~gttytr~ioctlrfpipuapdevfmt~ttioccoscomtpaddrdev tiocb~wflusht$utp~flushttlutps~canonutpbpbp1cmc~ttyrendwtppbpetandem~ttyinpuwctpt_flagscp~ttyblocBytpx~ttyoutpyctpcolpctype~ttrstrtX{tp~ttstartp{tps~ttread{tp~ttwrite{tpcrp.oR|~rpstratR|bpdpunitsz~rpstart}bpunitcomcntnsndnbn~rpintr<~bpctr~rpread~dev~rpwrite~devtrap"start"(dump#call"_klrint"Di_klxint"h_clock">(_tmintr"o_rpintr"<~_end$>_edata#v_etext"_main"B_cputype#_u!_rkboot"_rpboot"_trap"0_runrun$v_savfp"_restfp">_stst"f_addupc"t_display"_backup"_regloc#_fubyte"L_subyte"_fuword"_suword"_fuibyte">_suibyte"f_fuiword"_suiword"_copyin"f_copyout"~_copyiin"Z_copyiou"r_idle"_waitloc#_save"_resume"_spl0"_spl1"_spl4"_spl5"_spl6" _spl7"(_splx"0_copyseg"8_clearse"hldiv"csv"(cret"4lrem"_ka6#_canonb$x_rootdir$x_runq$z_lbolt$|_time$~_nblkdev$_nchrdev$_mpid$_runin$_runout$_curpri$_maxmem$_lks$_swplo#v_nswap#z_updlock$_rablock$_msgbuf$_rootdev#n_swapdev#p_pipedev#r_dk_busy$ _dk_time$ _dk_numb$ _dk_wds$ _tk_nin$ _tk_nout$ _mpxip$ _rptab$ _tmtab$ _bdevsw#_nodev"#_nulldev"#_rpstrat"R|_tmopen"l_tmclose""m_tmstrat"m_cdevsw#B_klopen" h_klclose"h_klread"h_klwrite"h_klioctl"ti_mmread"j_mmwrite"q_syopen"k_syread"l_sywrite">l_sysioct"^l_linesw#Z_ttyopen"q_ttread"{_ttwrite"{_ttyinpu"w_ttstart"p{_nldisp#t_buf$ _file$ _inode$_ldmpx#|_mpxchan""@_proc$K_text$T\_bfreeli$4^_acctbuf$L^_acctp$l^_mount$n^_coremap$^_swapmap$f__startup"3_clkstar"&5_cinit"\?_binit"_iinit"_iget"V_newproc"_szicode#_expand"_estabur"]_icode#r_sched"_bread"__geteblk"c_panic"$_bcopy"#_brelse"a_buffers$.`_printf"_psignal"t _issig" _psig"Z _setpri"_qswtch"_sysent#_grow" _nosys". _nullsys"< _ipc$h_signal"D _setrun"2_fsig" _stop" _wakeup"p_swtch"_procxmt"V_exit"fJ_sendsig"d5_core" _schar"9_namei"Z6_maknode"<_access"(,_itrunc"_writei"%_iput"_ptrace"_sleep"_iexpand"|_ifree"62_iupdat"J_prele";_getfs"n2_bdwrite"a_free"/_tloop"~_ialloc"0_wdir"_panicst$p_putchar"j_printn"_update"2_prdev"F_deverro"r_slpque$r_setrq"_swapin"*_xswap" _alloc"j._passc""_cpass"f#_readi"#_min"b'_clrbuf"e_breada"H`_iomove"|'_getblk"b_max"H'_callout$_timeout"*_getf"*_closef"*_plock";_openi"+_xrele"\_owner",_uchar"9_suser",_ufalloc",_falloc"*-_badbloc"h0_bwrite"Da_bflush" f_sysphys"f4_maplock$j_mapallo"5_mapfree"86_pipe"9_readp"N:_writep":_cfree$l_cfreeli$_cbad$_getc";_q_to_b"p<_ndqb"=_ndflush"|=_putc"2>_b_to_q">_getw"?_putw"?_sdata"@_mcttsta"@_mcstart"0@_scontro"8@_rexit"JJ_fork"DL_read"S_write"*S_open"T_close"D_chdir":P_gtime"N_mknod"fV_chmod"P_chown"Q_sbreak"M_stat"z@_seek"`U_getpid" O_smount"B_sumount":C_setuid"N_getuid"N_stime"N_alarm"vR_fstat"@@_pause"R_utime"R_stty"\r_gtty"tr_saccess"V_nice"DO_ftime"N_sync"8O_kill"Q_dup"A_times".R_profil"TR_setgid"N_getgid" O_ssig"DQ_sysacct">W_syslock"Y_ioctl"r_exece"RD_umask"R_chroot"JP_stat1"@_getmdev"C_xumount"\_bawrite"a_getxfil"4G_setregs"I_xfree"Y_xalloc"XZ_acct"W_chdirec"bP_rdwr":S_open1"T_compres"X_xccdec"d\_xexpand"[_xuntext"]_io_info$_swbuf1$6_swbuf2$N_iowait"nd_incore"lb_geterro"g_notavai"d_iodone"d_physio"hf_kl11$f_partab#_klstart"i_ttychar"r_ttyclos"Br_ttiocco"s_ttrstrt"X{_msgbufp#_ctmbuf$_rtmbuf$_t_flags$Ȣ_t_openf$Т_t_blkno$آ_t_nxrec$_tcomman"m_tmstart"n_tmphys"dq_maptab#_wflusht"$u_flushtt"lu_canon"((u_ttyrend"w_ttybloc"By_ttyoutp"y_rp_size#F_rrpbuf$_rpstart"}c+k?0may0 n% 0  6 >  67F % w  _N &! N%_ ef 2 7!!7 !" e%et!N"  & n! e 7<"p :"m>:" ->>ww f : 5 N &! N%) e@ 5u  "! e@ f&f efef %N pww rD_% U RNuu & & ef& 5`u`u  5u   5 u  5 u Lmt w N ff& e5u4 # 4  N ff& e5u%%w @ 0 @ & @& e5u #A@w@  @A@@ 5`u`u w dDC 5 u E     u-@ww DC 5 B E; &E ~  u-@w w  . 5 f   e     Ne 5@-%%    @w w  @ff f%w w Nfef %@ w w BuNefef % = Ne& @w| w l D@wN  4 e G4 && X%4 %  4 E w uDAB %u f& & e wh 5 5  W- W00u5  .u BwF J@B _ @  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* A!ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w N DCB &E z f  #̥-%0  E: E:  &E  z f  ww DuNfe& %4 ;#%!  CC   & %S  w@w DE%& %  wn w Z! e-wLw <D@  p   4 4 ww D  w r< wf @=@+ @ a f :  %J6f @ &  e   f :  4  Հ rw D&      p& : ww !-. wef >@w  ~76GU7p74GU7f76Gd74G\7Ae vBH77 J755 a  a!RE -7%4G w 7%6e rt 76 z6 `e 6  z%66e U?66 `e 764GU?~6 a7p6 h6j6?b6^6U ew XD>6E wJw :D5 @ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r `5w Nef   w~w hN tf %w^w NNtf %wDw 4DCB ԋ  @ww DC 5 Ԕ B- B-@wf@w fw*w&!wfw@e7 b4!wpf@fwX7^4 fwww!w. f@www !wfww!wf@wxwt!wfw`m\X!wLwmFfw6!w~w( fAW @w fBG1BG75c+k[may0 ew ! 5w 7L7H7D7@7<7874707,7(7$7 77777 777f& & BG f BRfwD !fw6 !wn fw\ }f@w w !w0w 6D @ C@ppC`pLw7/F@& BF__.SYMDEFrnm: cannot open %s not archive: %s nm: %s-- no name list wcan't create temporary ar rlb %s %s %s ar rl %s %s can't execute %s symbol table overflow can't reopen %s /bin/shsh-c dz o xT fb eD g c0 sT lT L uz r D~ O X U(null)EE!;6jG0# c,kꏑN    r B7wo7wo7w&(7wk7w5L5F7 S 7  5tEe  e 55F8 Āe`f W r W  `tEm 5tE   1 W  vx t7 n  0t & __\P @<847wffFE50  v * U0 %  Ƞ  Q @ e Q0H >  pv Er bBwNe %  C7ECe Ete%  e eE?%?Ete @ 5`   mnp ! e  1 !R8.27&    U?_ܵ_ f t _  f_u  N _ _ %F,    % 5_  $_' _ w  ww ww D K3! N t e%P\ww DC%  t4P22̥ 2wvw f  5&wJ t3@  w " p˕  4 "% K, e%P\  fJww     0 t2@ &7%% 0 & d5  xB < e fJwDw 4@5w( % w 7!hF9 Z6  N <H& (, :E%3-ڲԲ/ 7 ܲ7 ڲβʲ %e& & & ]e7 t77x % i wRw < t @-A vDe C&a޲ز ]e  wa l5  Nf 8  N h 7avw  NK̥ , 0- e%P\_6 zd  7 bd\T  2d  42 (7 d pww -  w7 d p _L xVҊ >%_L 7 L%_L _L%_L 7|X_L5_L ?&ְܰ ]e (    & ]e j _f _f ؉  ỶƉ  _f e%%B  m  %ve 1UzEtp_fVU%ZDP.0  D> t _h  fJ_fw  &   5-(5-$̵̵j^3!e%^t ${ o wZ eJ%Kɂtt̕4 F4 HAe vf& f Me55 a @5@eEt5`N& | N aw DC   ee 55 R R R % wHw 8D!  4 B& 62 zz& J% ; 4  ;ww D̵F_ n2_e vf& & ZLe5 a_eEt5`=@0@0 @0 @0 0c,kgN   Be e55 R @ ȋE%0 E%p R R % ̵ @f&@46̵ @f&@8:̵@@><F awvw fDE%%@N5 Ata55  ta0 0    xnfff Te  & fff ~e 4 4 Bww   fff FJe5 aBt`55    a  f fff ~e fff e   afff ^eww < 0,  wF5U@ AA @@4   w ک @7r` #%fpr % w>w .D Be G p%%%d %u%o%x%o%x & %%s @  p%D   %eeww  - pA@  5uf ff eu5v Nff %f ff eAN pww w> N  zw NEA vff eww D  F Nf&& eww | l  $̕t  $tBtE 4n 0n%, 4 ̕ 0n &  w @7: p  d   0w D 5tE5 n "˥ @ nn253  2C3! N 0wDw 4 (x D-   @VwN 0ww D̥̋ $̕ $ 7  pww DE re`% wjw Z JK̥eWt@ eWt@e%P\߂% \     *   K̥@E%9  0̥̥ 5-"5 ̥̥@`e@- @`e5e%P\  %%   ˕t & & 6 4w  f      w ğڜ ؜e֜w М ȜEwÝ%  L >w bwwdw Tw\w LDCBҔwDw 4D V_% N1_%5E5% %0fA vWp b _%vu55uEڛ b' %`;%p7 5u _% _% 5 u Bff& > e5uEn5 A@e@ 7vwt  >5 e(HFe@ 5 u @:fff :e fff j:e5tFtH@ b'  @`& |'%N aw  _T$wTw DD hK_D'5E5% %0BfA vWp d _D' _D' v5uE b' %`%p ff& > e5u Q5% fff ;fff 9e5 @`& |'%QN aN a-N-F%@%,(B ww u-@w@w u-@w@w DC WB5?5<58 & f& Znx& ~j& r%G`R 7`Nw`Lw F@  D ~ " ~ww MB t r2 e  5# tr  &  e  3ee3XE5@E%erw l Zf t%Tee-ee,w &@te p   .%<(`5\<ew  ۷x pKʋ:ʥ7    t EWt r @`e55 %r2 e%P\7z pww  B 5 e %`, $e   !ttN 0ww D % w w hD _+e55 ;45 E pe p @E  0 ` p.A vWpB` % eA vWtB5fff eww zD 5A vCE  0 ` p-ffWp ^ fft %-bw w DC% n2$ ̵  \̵  ֓ 7- ʓt7- t0 ww  9 Z6   7-     w^w N fwFO w ,  7D4wل %w   04 4 w e%D ͒w CK-smKewe  w jDC%^ 7 p e3!C-((l!sm@m,*b &e@m, sKm  3Keww N n2 &e    %2NN F 4 N] F { wf ta55  Nff& h0e  ,fff 0e5&ee #% a4e p fff 83e ew N n2 &e  Nff& h0e F 4 4 %2(fff 2e;e&e #%4  Da4e pt ap pww D  L- t-t- N f F w w z N n2 &e  5  a5%(Nf V  5 @t`0 0  % w   5 TL-Sfff r.e5 ae65 ,,eJ%K ap%d  e@ % a%deu 4e p Np F _1w N n2%d  apww j^ L-%2%d N~ F 3 3 w~e%^ۂ $ w X e j^ 75@-*'$  /e5@0@Hՠ@՞f #% Dae%^̵zz& J% eJ%K7  fww ~Ze h ^ -%  > %F   Wt p 0 e%>x vf& e%\TXb_ -%Fη @ww f W֋DN%K@F%C 5 ; 0  0  0  0 # WteU&p Apk  p  p Z(!ww f\X %`HD % $M,ww e ڋ&e  Ƌ&  0Epwvw fD%F>3 N U@ef  5xeUpe U  e%   e%0ww E 5@ef p7 eww  %/& V  %/  _7 wx` y %! %nҐ %/%n %/%!_8 _8  ;ҰB ' N avf&& > ef&& j(e55  a 5p@E@`& #%ew  _8 _8lh_85 @pr`_8 % N a%  & (, _65%_9%_9._9AWp l^_x9AWpq-j^o AWpDn^ ;E%@y@& (, i_77 t7 rT5 5 5 -Z_7-N_7 N a%_<7 _<7& (, _772  _47A@ 7w_87 %_x8 ކf V _87_6w |E wxw h L%iwTw D  0! 4&R &DDw<ʕ2˕3̕Fw3@ 0  w D  ;>Ue   ; 77 #3-3-4 4 3 3 5E p ;wDw 4DV ;  ;7 B  ; ! " t w ,U ;  ꄷ b' 7҄ % ;5Ee pw xD &  ̵w`w PD̵ pw@w 0D 5  44# E  E4 4  5 e4JeFeN 0ww DC   / 44 5      E 44ddN 0@wH5e4ddw D 5  N 0weE  `B-J w DC   ``C A ?%  c7`5e5 @e 44cwc E45cwc 44 0ww D 5 VcN 0#Bc e5 $cc eR N 0 ww xDC  wn R5@ ,b*wb= Be@5e5buw~b= Be @@=`N 0w heE4b0be% ^ e 7ww D%w ; ;tPw \D L a 0wJf 2> @t& 2>  0 w ww ww ww ww ww  *̵&&& & <eww  9 Z6  & & e ww vDzz& J%55555 5 5@A 5ue vf& & eeEt`468:<> affe ~% ~ww ~E?5E *(5@ : % m~t~"   * 0w.w <~ 5#~$@7B~ 9 Z6 5  5 j^  " } w e%^C@ & fA vWt %} f e5q} a3K !3&@& #%22@E2N a ;w  5|H \ rj^ " e%^|2 5-|%eJ%K& fA vWt % ; 3 N awPw @  9 Z6 w2E%`-|5A v-T| @w |0  ww  9 Z6 5_0G5  @f (, _G@E%@5I {_G5 5  { b_ x- 5 $@ _E5 @   5A1` @ 0 @ 5UA1` J %z%zN L5zz_G5   at& A ee@ mؼmּ@ f&ļ e S   a Ef 4G _G5z_G e5A @e5${pNNf   :Nf  5   at& A ee@ m m@ f& Le5f  5eu-  f  e  f   f    a N b_ -%N ww D hy y7 y7 yx #7xx_I xx_I 5 %y_Hy my@ 5uwy A  x_I7 yye? vuy my@ 5u A e? vCAe? veu MKyxe vfAe v% xxy ~ XZxyEp_I  x̵ w_I% x%x%x_tGff ]e s7 x @me5  `w@m h % XZ& & & ]e7 0wBxe7*w7 $w4xw #w5  v7 v0 5 7 vv t w~w|wwxwwff ]e@w|w l&5 e%H mzw %nwwEp %B    * 0  %Vwx` #%ww ڻuEt fJwλw uP3   & %  5 0 N * %u ;u  uu ;u   ^ -%˕sRvLvm@vm>v@ 3sp7 Tp % @  ww \ bPww ڵ ^ bPwҵw µD 9 Z6  E%@o w@ (,  ;  ; w bo E hoEE4P@̵ 5 \ w"w 4o  z   @ ww oD%% n 7&n Ap&n Btp@ww n5 B5 % n  nK̋"   ,  %L Nn7-Fn  @& t e%P\ׂ nww n&H ~% mww гm7n7n7n7nww mmmww (  w ~mnE7nmwpw `~m fe& f% MmFNefe J% ww  :Sw w  :Sww D mN *^  lX@7l7l7l˵ % N:< :8˵7 l7 lll5  ;% # %5  ;˵ AAbl 3`s`s @Hl7>lww 0l 9 Z6   & T%ww l9 Z6 kE < & T%ww DC %5& (, 5& (, E%@gkck(%  ; 0E 2BkE& + !k @ 0  ww  k * 0  *w԰w İj *,̵j%%3m3m % 3l3ls jjwfw Vxj 9 Z6 >E%((@ 0 ;fj9 Z6 #j jNj0- i  i @ wίw i d 9 Z6 ii <  w~w n i~i|izitivipi 9 Z6 &@5 (, @3 (, @5@ (,  7i iww i 2  -  ; 7 " h 9 Z6 E% h 7 ;w~w ni ; 4xH^ % lifi %7f^iXi %7Vzt|izi f& %78di4`i0h,h(7 &7 $$i BiwgwgH^g gg7g %gss ;ww   W-  CEA@v5u  eu  W- A@v5u t @mw w 2g $g@ @ww D 5etb_ x-  $ d\ f& ee  f^ -%4Ʈ7 pwbw Rrf: \ \f0 (5$4 et&b_ -%&^ -% ˵  d\wܫw ̫D g_[5 P\ e %0^ 3! \e  [  D\iC   te t Z 3 3 jfe? vBe vNb_ x-  $e [& & &  ]efdd7 d7 ddd #d7d ww D^ x- 4 &&& ee  D\    Rd fff e5eAw AwU &A vWt  etAw nA ndw ܥ fff e #fff >e5U &A vWt  eAw A  3f f f e 'f f f e5 aU A vWt  e@w @ fff ew ndw DE e^@w X@& vWt  5 nd a 5U gww D vWtC5 aU aw\w LDU DawFw 6D5@ p5@(E@ 0^ p5 5 6^0 0^ 8^0 0^E 0wȣw A vWtC5- 5-t- w  w pA v- $ ,A vWtC $95-35-/t- + 5 U@&   ҡ  %0^%tep  dwТ  %0^U@0^ t d5U Da0003t ttw : . U@60^  %0^( 0^ d5U Da0003 wơw D &  5 n gww D x00U 0whw XD5  86U5 aE@ pw4w $@ ~@0 ww D255@=J ޟU@  5M@ U " %t3 A mm@ 3s@t3@tE3М vWt  P   5`et5` 5@ p EH5 $ww %5- U d Da ֞5%0^ w̟w D Y5_g5Y_gmY _gjZeE5Z5  vBEB-_gmY vE@Am$Z@ Z _g "U@&  5@ U t 9ZWt @`E@`5tE@`4@tE4XXv4tX 4X&  ~&  5X5@ p 0EH7|X g[XwHw 8D57CX;Xw(w UDE%􋔢X*t0 0 t@B4 f h 5 5WWww DE%5f h f h f h 5f h 4w>w .z U@&  5 t t4 4   Xi nd5@ p wܜw ̜D%z> Ete -3-U 3-5  e4  d. -5e@ s E4  . 7ޟ07֟ ֟  w w _k EtE(EU%?EU:E :5(_k5*_kEt55%z_k *_k( &UA _kt-F$%F(< & v _"EtUA5U8 5*4 >U0 2t4,04,+t-t-t- h@&Y N@&[ w󋔢U7" d_jw f _m E7 5@ _l,5(5h %bE55 *E5*󋔢!5* v _"t00  %n(,& r% `% N% H6tep &[ _m%U  5@*  j xtep 7 ؜7œ d" 4G%&  f&tt & mm@ ee@ f&tte@ f&t ZU wh55*t00w 6:E(E ((: ww N hnfbXi hfeww N hn fbXi hfew̗w DE%"QQv5utppA@e@ f&twnw ^BE%eQ6Wp2Ce p%ue8ue3fp5  , sUCU@f Fs ww ԖAEWp2De swĖw AEWp2eN }ww AEWp2eN d}ww xAEWp2De |5@ %2   e & 0@ e pw6w &AEWp2BeU& y ww NfAEWp2eff te OwΕw D5(e ;!5 %"EP2Ee&| *%U wfw VD % % ?6 2% ,$5r#0u5t~ t tv%  p p p ptww ֔@E%GNNvCNE @E%tE mVE@` >qN__ ]N " w>w .@E%7 FNw BN%5 %3e .& 2> E  |4)@\' %v ( 0 5' (   5\B %tw DCB E55  >%  @ pE& y t]  zww DC ew ~E5 z5 fE5 .!E _z/!_zE  |:/!0U  vWp h v,!   8@%_z" D _z.!_z-!,!% 5 % vO5%A%Ze & 2> 5" % 0!1!5"  2> $N @ p5& { (! 5" {  |wnw ^Dm% vE %e /& 2> U ) |ww DC ew 5 #E%_|% E%  { _|&_|e &_|56ҋ !\ { %a%ze% 5 { e & 2> e&"5 E E x(ʋ@ʊ>tE5%ʋE vef H' % tE5% U@%  e &U 2> w5@tE5%% w HDE  |w@w 0D 5! &   0ww D5  w  ^w   e ; " mw D5  e w |U@ &e   { B  ^%d  :  |w ND E5 ((5 A@e@ v5u%@@mAm@ f&EWp@DB&%  U d4 t  303   lww _  Et555 ff e@EWp@lF5 ff ֆeuA r 5A r u@t@t@]_ v _EtUA55UU_]U~ew  vC 7`w`w wtw d <ED7 && r%5 ߕ  5~ 5~ % U7 74  d Vww ޅfТ} hfew΅w  fТ} hfew(ww 7PPP4  (: $&"ȕ1ȋ55@-#####} ############### hhXi ###nPopoo.p#############################################Nqq################Ff#################### hhnBn########r#rrs#######Fs#}d}#y|"@iinit| ~ ~~~~" $ B L ~R X ~ ~~~" ka6 = %o aps = %o pc = %o ps = %o trap type %o trapparity %o parityRandom interrupt ignored >coreF`hno imtInode table overflow iaddress > 2^24 0123456789ABCDEFpanic: %s %s on dev %u/%u errbn=%D er=%o,%o zero wchanSleeping on wchan 0proc on q Running a dead procno procsTimeout table overflowno file Bad free countno spacebad blockOut of inodesbad countno fs  /etc/initmem = %D no clock< JJDLS*STD:PNfVPQMz@`U OB:CNNNvR@@RRssVDON8OQ< < . A9.RTR. N ODQ. . >Wf4Yt. "@. . RDRJP. . Out of swapout of swap spaceout of textout of swap spaceblkdevdevtabIO err in swaplmmm ml|`{}~ABCDEFGHIJKLMNOPQRSTUVWXYZv0vnv||||X|||({)}!|^~'`h<!#l.oZERObr4br5br6br7klinkloukwlphtiorpio mch.o(HTDUMPTUDUMPmfpi @ stst mtpi mfpd @mtpd splwaitrttreset.PROFILHIPRIHIGHKDSA6HTCS1 HTCS2(HTTC:HTBA$HTFC&HTWC"HT MTCRSSR0zSSR3NMSCRPSKISA0KISD0KISA7IOKDSA0KDSD0KDSA7stk KISA1SISA2_prolocSISD2KISD7KDSD5SISD0SISD1usizenofaultfpp_isprofsavepsssrSSR1|SSR2~call1dispdlyCSWxfuwordgiwordgwordpiwordpword,fuiworderrJsuiwordsuwordcopsuwaitlocSISA0SISA1hardldivhardlrem&SWRxCCSBCCSR_sprof_xprobuf_probsiz_modedone_outsidemcount_profcnt_profsizcountbasc.oBmain.oB~mainB~iinitcpbpfp~binitbpdpibdptrap.o0~trap0devspr1nps r0 pcpsiacallpfetchsystosp~nosys. ~nullsys< sig.oD ~signalD pgrpsigp~psignalt psig~issig np~stop ppcp~psigZ nprp~fsig pni~core ips~grow spsiipa~ptracepuap~procxmtVipxpiget.oV~igetVdevinoipmpoipbpdp~iexpand|ipdpp1p2i~iputip~iupdatJiptatmbpdpp1p2i~itruncipidevbn~tloop~devbnf1 f2 ibpbapnb~maknode<modeip~wdiripprf.o~printffmtx1cadxs~printnnba~panic$s~prdevFstrdev~deverrorbpo1o2slp.o~sleepchanprirpsh~wakeuppchanpqissp~setrqpqs~setrun2pw~setprippp~schedrppoutageinagemaxsize~swapin*pxpax~qswtch~swtchnpqpppq~newproca1a2puprppripn~expandnewsizeinpa1a2subr.o> ~bmap> ipbnrwflg ibpnbpjshnbbapdev~passc"cid~cpassf#cid~nodev#~nulldev#~bcopy#fromtocountftrdwri.o#~readi#ipbpdevlbnbndiffonntype~writei%ipbpdevbnnontype~maxH'ab~minb'ab~iomove|'cpnflagtclock.o>(~clock>(devspr1nps r0 pcpsp1p2ppa~timeout*funargtimp1p2tsfio.o*~getf*ffp~closef*fpipflagmodedevcfunccp~openi+iprwdevmaj~access(,ipmodem~owner,ip~suser,~ufalloc,i~falloc*-fpimalloc.ox-~mallocx-mpsizeabp~mfree-mpsizeabptalloc.oj.~allocj.devbnofpbp~free/devbnofpbp~badbloch0fpbndev ~ialloc0devfpbpipidpinoadr~ifree62devinofp~getfsn2devmpfp~update2ipmpbpfpmachdep.3~startup3i~sysphysf4isduap~clkstar&5~sendsigd5psignon~mapallo5bpia~mapfree86bpnami.oZ6~nameiZ6funcflagdpccpbpideo~schar9~uchar9cpipe.o9~pipe9iprfwfr~readpN:fpip~writep:fpcip~plock;ip~prele;ipprim.o;~getc;pbpcs~q_to_bpcpbpcps~b_to_q>cpccqcqbpsacc~cinit\?ccpcpcdp~getw?ps~putw?cpsfakemx.o@~sdata@cp~mcttsta@tp~mpxchan"@~mcstart0@pq~scontro8@chanscsysent.o@@sys3.o@@~fstat@@fpuap~statz@ipuap~stat1@ipubpipeadjdpbpds~dupAfpuapim~smountBdevipmpsmpfpbpuap~sumount:Cdevipmpbp~getmdevCdevipsys1.o>D~exec>D~execeRDnccpbpuapnanebnoucpapcip~getxfil4Gipnargcdsseptsssioverlaylsize~setregsIrpcpi~rexitJJuap~exitfJrvipqf~waitKfp~forkDLp1p2a~sbreakMan((disys4.oN~gtimeN~ftimeNuaptms~stimeNuap~setuidNuiduap~getuidN~setgidNgiduap~getgid O~getpid O~sync8O~niceDOnuap~unlinkOippp~chdir:P~chrootJP~chdirecbPippip~chmodPipuap~chownQipuap~ssigDQauap~killQpqauapfpriv~times.Ruap~profilTRuap~alarmvRpcuap~pauseR~umaskRuapt~utimeRuapiptvsys2.oS~readS~write*S~rdwr:Smodefpipuap~openTipuap~creatDTipuap~open1Tipmodetrffpi~closeW~sysacct>Wipuap~acctWiipsiz~compresXtexpround~syslockYpuaptext.o(_htintr"k_rpintr"_end$_edata#r_etext"_main"B_cputype# _u!_rkboot"_rpboot"_trap"0_runrun$r_savfp"_restfp">_stst"f_addupc"t_display"_backup"_regloc#_fubyte"L_subyte"_fuword"_suword"_fuibyte">_suibyte"f_fuiword"_suiword"_copyin"f_copyout"~_copyiin"Z_copyiou"r_idle"_waitloc#_save"_resume"_spl0"_spl1"_spl4"_spl5"_spl6" _spl7"(_splx"0_copyseg"8_clearse"hldiv"csv"(cret"4lrem"_ka6#_canonb$t_rootdir$t_runq$v_lbolt$x_time$z_nblkdev$~_nchrdev$_mpid$_runin$_runout$_curpri$_maxmem$_lks$_swplo#_nswap#_updlock$_rablock$_msgbuf$_rootdev#_swapdev#_pipedev#_dk_busy$ _dk_time$ _dk_numb$ _dk_wds$ _tk_nin$ _tk_nout$ _mpxip$ _rptab$ _httab$ _bdevsw#_nodev"#_nulldev"#_rpstrat"}_htopen" h_htclose"h_htstrat"Xi_cdevsw#^_klopen"n_klclose"Po_klread"po_klwrite"o_klioctl".p_mmread"Nq_mmwrite"q_rpread"F_rpwrite"f_htread"n_htwrite"Bn_syopen"r_syread"r_sywrite"r_sysioct"s_linesw#v_ttyopen"Fs_ttread"}_ttwrite"d}_ttyinpu"y_ttstart"|_nldisp#_buf$ _file$ _inode$_ldmpx#_mpxchan""@_proc$K_text$P\_bfreeli$0^_acctbuf$H^_acctp$h^_mount$j^_coremap$^_swapmap$b__startup"3_clkstar"&5_cinit"\?_binit"_iinit"_iget"V_newproc"_szicode#_expand"_estabur"]_icode#_sched"_bread"__geteblk"c_panic"$_bcopy"#_brelse"a_buffers$*`_printf"_psignal"t _issig" _psig"Z _setpri"_qswtch"_sysent#_grow" _nosys". _nullsys"< _ipc$d_signal"D _setrun"2_fsig" _stop" _wakeup"p_swtch"_procxmt"V_exit"fJ_sendsig"d5_core" _schar"9_namei"Z6_maknode"<_access"(,_itrunc"_writei"%_iput"_ptrace"_sleep"_iexpand"|_ifree"62_iupdat"J_prele";_getfs"n2_bdwrite"a_free"/_tloop"~_ialloc"0_wdir"_panicst$l_putchar"p_printn"_update"2_prdev"F_deverro"r_slpque$n_setrq"_swapin"*_xswap" _alloc"j._passc""_cpass"f#_readi"#_min"b'_clrbuf"e_breada"H`_iomove"|'_getblk"b_max"H'_callout$_timeout"*_getf"*_closef"*_plock";_openi"+_xrele"\_owner",_uchar"9_suser",_ufalloc",_falloc"*-_badbloc"h0_bwrite"Da_bflush" f_sysphys"f4_maplock$f_mapallo"5_mapfree"86_pipe"9_readp"N:_writep":_cfree$h_cfreeli$_cbad$_getc";_q_to_b"p<_ndqb"=_ndflush"|=_putc"2>_b_to_q">_getw"?_putw"?_sdata"@_mcttsta"@_mcstart"0@_scontro"8@_rexit"JJ_fork"DL_read"S_write"*S_open"T_close"D_chdir":P_gtime"N_mknod"fV_chmod"P_chown"Q_sbreak"M_stat"z@_seek"`U_getpid" O_smount"B_sumount":C_setuid"N_getuid"N_stime"N_alarm"vR_fstat"@@_pause"R_utime"R_stty"s_gtty"s_saccess"V_nice"DO_ftime"N_sync"8O_kill"Q_dup"A_times".R_profil"TR_setgid"N_getgid" O_ssig"DQ_sysacct">W_syslock"Y_ioctl"t_exece"RD_umask"R_chroot"JP_stat1"@_getmdev"C_xumount"\_bawrite"a_getxfil"4G_setregs"I_xfree"Y_xalloc"XZ_acct"W_chdirec"bP_rdwr":S_open1"T_compres"X_xccdec"d\_xexpand"[_xuntext"]_io_info$_swbuf1$2_swbuf2$J_iowait"nd_incore"lb_geterro"g_notavai"d_iodone"d_physio"hf_rhtbuf$b_chtbuf$z_h_flags$_h_openf$_h_blkno$_h_nxrec$_hcomman"h_htstart"j_htinit"m_htphys"hn_kl11$_partab#"_klstart"fp_ttychar"s_ttyclos"s_ttiocco"t_ttrstrt"|_msgbufp# _maptab#_wflusht"v_flushtt"v_canon"^w_ttyrend"x_ttybloc"z_ttyoutp"{_rp_size#B_rrpbuf$Т_rpstart"~cO/k깛RA:bh%w0 ((t 0  6 >  67' % w   % 87z"r" r 7h" r e0@4" B  D" 7P" 4"%-e 0"e %77 !--c%! t!      8  - 8  8  ! |!5l!e7B!@ 7@! >!8! 8 7:! w &"!6'!"!&!7!7!! \̥ @' (  "   &      ww  e  r y"  @ Pĥ t 7l wU?R N    37@  &        )? ?      7 X &  ? w @ 7`- ! 8"  ww vĝp7leZ % eH!  @-2.-&".  % e '!U2ĥ$8 tĥ0+ĥ9(e- m7 ğ ċ7  2ĥ\ &ĥ  w ĥ$"nEw  %zH l h^ w %P fe& %5%      @w T eu-;!@&  Nf 0 w( w  5 D )  ; & (  zeD-;  5 ,f  33 %&UaN&e  3Nf  wf  w H  D  ) ^ |eD-) (    ,f  2N&e  22 w Nf  w 5 @ȥ)U5 5 5 5 5 5 D_ )+ <? >- _@ @mY5 (  e5 B =5:eD->U (eD-?!&  l%< Z5 J5eD- ! , ,Nf 0 3sssw` @ @m Ne ,5 u-@ `A Amp w Be  &  w w C!f  \@w w @Ew w  <@ 5 x( @ G!  -@ #  M!  %y! 8 e w( b!s!  !   | Ne ! X !!   N Ne ! X !!    !  @55 5 5%!_ +5 N @ 5@N v! 85_( 5_( Nf@   @&  5@ 8!   @ D5@&  5 & f e@&  5@ 8!    N @N 5 N @N @ 5 @ @N @ 5 @  5    "  5 $   8   8 %@@E4P  7nf H @"Ne@& X !" 8 f H ?pN@& Z7" @ N:e N( @ 8A"   @5Ne @@EU4PNef& %@@EU4PNfe& %_( @E5@t] @t] _( w De f X %f0* M"e& X Z" 8 % , 8e"   wTw DN 8q" 8  & & eN ww D R̋ww  ufe %ww A r  vA r e0N Rww D̋@-w w ~DCԢӋwr w ^ IQCE%  #D- vs" 8%  8v" 8 v5~" 8    @tP"  @t7P>Ne %wf @P w A@I#EEFNuwpfw"wB f@w, fwxwt"w f@U@f@A)wfw:w62"wfw7 fff@f@www "wdfww"wFf*w6BJ f@ww"wfAW @wj f(1(7^5 ewL" 5w7L7H7D7@7<7874707,7(7$7 77777 777f& & ( fw0 }f@ww"w7F@& BF0 7 < P _ h q  D HangupQuitIllegal instructionTrace/BPT trapIOT trapEMT trapFloating exceptionKilledBus errorMemory faultBad system callAlarm clockTerminated% # : cannot opensyntax error '" ;&<>()|^ "'Command line overflow Too many argsToo many characters;& <>([?*chdirchdir: bad directorychdir: arg coucZ/kcRA:bh%w0ntshiftshift: no args login/bin/loginlogin: cannot execute newgrp/bin/newgrpnewgrp: cannot execute wait:try again : cannot open: cannot create/dev/null/etc/globglob: cannot execute /usr/bin/: not found/usr/bin/oshNo shell! : too large : Signal -- Core dumped ;0c\2k ZI{  e0e0 S 0  6 >  67w % \w %@-  l5 5`u 5 %"p% u-/!@ @m& D 7|p@ @m! # ` % \%@ @m >p    \wfw V $ $$e$p p pEo X 7$%_%+$ h# $5$N$$! # ` e \ j$%.f$!%'^$ n$h$ % H$tm<$ 5  %$$Ro Ho DoE8o 7#%  #w\w L $*(& $2$@#>#7 ##! D 5 ! # `  \N ww @5B@d  x!@" # ` % \ `#'X#7 0# @ @m7< <#4# ##7 #7 # #! @wHw 8.@e5 @ @ EN =5%[ >=)5 % AWp Ameu@ @ EN 5%N&f@efe e @Ae@%'." # `  \wHw 8! t!e$p#w&w $%!7 !w7 !!0$\ t!e$L t#p#< t# 5@e5el!w f! AZ } F!& &t&#fe e5   @  $t  # #w  r  N" # ` %7 Z%  RJZ >t5#5#&ff Xe& t#t#  ˥A˥Z  t#  't&# g" w-7 m7 w w u@ @mȕ @  ff ve5u  N fff Xe5  ff ee0B BmJ @whw X  %wLw <%       > w& \%hw  Z!  |%   h7 0% `^tmR D $ R P ww %. n6 %% No " % 8o 4o  7 wRw B% w4w $  L%ww  %"w $ w %x 22tXe$p#t#t 0 #0 #ww  @-^n7TnwPn7 Rn7Hn7Dn7:n@@muu AfAVpu @ %: A 7rmC rmu' $@e5u @ A H @w -mxm@ mjmmnm5-fmχ Q Tm-NmNm i" # `  \@ m(m,m $m@m-mm" # ` % \ lmlH l @  lmlH l@l@l w  f@me55~fe+q5 } Zf 4uLfe+q5wm>f }  w\ w L ffwD hf,q %-e7 e w  ff "%w w Nfef X %@ w w D@w  j4 e@w4 && l%4 %  4 E w uDAB %u f& & e w 5 5  W- W00u5  .u"BwF J@B _@@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* ((A"ҋ D~@B @  p5w*A  fff Fe w5  @ 0   Wp `e0eӕ?w DCB &E n z f n  #̥-%0  E: E:  &E n  z f n  ww DuNfe& %4 ;#%#9 l .s.s j  & %S  w@w DE%& %  w w " e-ww D@ P    4 4 wBw 2D  w0 r< wf =@+ @ a f N  %cf  &  "e   f N  4  Հ rw XD&      & N w.w "-V wef >@w  dVwU7dTwU7dVwdTwdAe vBd7 d55 a  a!RE -td%Tw wp fd%`de rt 7Jd >d `e .d  %dde U?dd `e 7cTwU?c a7c cc?ccU ew DcE ww D5 @ r5Ncg2kZI{  e0e0 j!w`5A vBB-  }ee@ !ۃ `!ւ `@ r `bw Nef   ww N tf %ww Ntf %wf@w" fww#wfwww#w f@w|wxw t#wfw\wX#wf@w@w<#wpfw(m$ #wPwmfw #w.w f@w w #w70_Fw LC  5!BA  D & r@rr @`   w & BAN   C 5 N B A @ A-  A    ww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF><0v!/usr/lib/eignrCan't open %s Illegal character: %o line %d file %s rCannot open ignore/only file. Unrecognized flag: %c Ignore/only symbol too long. line too long: line %d Too many symbols in ignore/only file. i/o file too big; ssiz = %d P d6 oB xfe g c s l LX u6r\ D: OF Xn U(null)0u0u#6`wcl;kw!E<B? UU !$F!'w  0t0t @ 7(""n$4 ! !w  +w F"-s R! h7 nw  !!!z!  0$   n w:W%W׭zw7 n"W7 ABwыwToo many files. 7  77   Z & < 7 77"%! E7?w  7 7   | 9   7    _ B 0 9 A  Z a z  RF7 @ :7    \ w V^  nw Dt  7 f rw`durxylt a@n#\\7894312fA@ ыW tW @ L Fff * 0 Rw P P7 = @`7*@w"   ȋЭ7 l !   e7<  z 0 W-n 7 E$   7 7 >) & , -p W   XwR& @& 2 4  !&w bv%&     w`? - e-98734127x \& VSNE N  -! e^W$ ad( bp0 br4 cc: ceR dsj fiv in ix li ll ls na ne nf& pa0 blR pl| sk sp ss ta ti tr ul un$ heP hx: fo^ ehl oht ef| of m1 m2 m3 m4 hc hy n1 n2 nn< niL jo\ arh ron nxt po de ig tc mk      77 w " $7     w R" 77w R" 7w &  7 L  w  72 R 0 "  7w   77 7 w b d H 7     w 6 87 w " $&     w  7 w  7 w w n j z@ P B  6  1$ W > w    (w tR" v7Bw d f7,w T$ P7 7   w $NNw $DDw $w | $w t $w l $w  7dw  7Vw  7Hw  7:  : , 7. "   7 w x7   7 w R 77 w < >7w ,H" .7w 77   w ! ` ~7 \! w  7N <" Zw !7 *& NE-UW$     ( ~  d%  7 T?  w j G-  w \5w $w $~w \ d z r n :%%  0 t h 7 h7 \zz ^ m 7 7 -  $$ ,m(  -d -  m w    & 7  f & & v +  - 0  p `6e07P@W -W +` ) 6&,w \5w $w $-w \7  - 8w" t - " !-' ?  Fw`wx 0%7 7 7 ~7 t0%\&  97 Z X%  & . z7 $ p 7   % % . e 0%  %7 7 7  hw` pm7  h  fA j ! ~7b A 7 D 8 7 . . #    *# wP-L!B>7tw$ -@ 2 r A Z a zfE?w - w n"En"7 X7 p7 > b0  - 7%  $ %  >  7  @  & Z  t 7  4  fw`     7` e7 h7 f 7   L p 2r$" H >  5 -.   27a     w -- m7  m7  z7  - Հ E 0%’E -D&  N wP v  L cw;k!E<B? UU(( $ 8)-P(  " ׬-˕-  ˋ w w`  w`  7 ŀ!0%  7 7 p mn mt 7 7Z 7X 7V 7T BV -n n h d 7 H     %  h ]   ~    w:   & B ^w v&w n&w f& m 6Bw B m  & rw ` e Zw  & f  % N`  X PV TR jN` .N` w &  V%   f r  ve0 e  fr  v  r  N`  ~ e n N` ^ N` #    7  2  \ T 7 ȋ w w ~  $rʋ .,()"'` ae a e  i o u y&  N S  7:  H 7 " 7&  zaw l \ w Hw >Mw 2  7 7 ̇ - Հ &EE a B a p   B `De  Ep > C a n$E8  jC1E`C`˜ E ^  CEC`ѵ 7 @w VՀ  &4  "Z"E  Z"0 "!S3"#`p`Аp@РP`p"! #!4!@``Pp`#s5$#D"1f1@` @P` 0P` @````p``p0#!Q "b"1P```PPp@ P@0`` @!`@PA! "Qp@`p``@F! g 3!Bp ``Phk22jWf@P`@P0@ 00 @P@`0#b&`2gY&FI00 @0 @ @@@ @`6%e`8XC  @`PP P 00p P P p P`P` )Vh`0fuP p`0```0@`P000 `@``8U)rPEVD$*``00 0`p`5"0f Pf"G>B"f()/ /// @/N@//_?OU3u&'=  //`O@//?@/0e:ou36t(OUH/,oL+/???L?>???o,O=U5/63'V /)P./0>._|-ݶm?o//3"? /?@~(wf"J?H2*s0 P0 o UͯfV/ @p o~%hlr"gjC@ `@P0@ `0 @P@`0r&bY*FH0"p @` `P P @@``&@`6%XfXC@  ``P P"`q"cr Q"0`S!Q"0P`Sp!)Vha0f6uP p`@`aR pc"b'cP `0a@ `@``HU)rPUWDD*` p`0  ˙`.`p`5"0 f`a'AAB.  (08@HPX`hpx/usr/lib/suftabixcmvld/tmp/rtma!w LN . WNef M@E% F ! ! >fe& 8!%%/ u-!' Ne' Ne' Z! u-u- 'wp w VNef p  wDw .N tf %w$w Ntf %w w DCԋ Ԕww DCԔwf@w f@w!w fwww!wf fww!wFf@wvwr!w$fw^wZ!w 7HF@& BF/dev/6c=kS>hkb)#-- xl@    x d P55v0 ,  f ~ . ZSe~&  E& ~ w \ ~  ~,  ~, ` 5 >w,w D  & & e 5 5 5 5@ _ xx  fe& & e &  & eC-N A Am@ e?@ 5u@ fe eN   & e C->& j & e     @@m55  &  & e 5 u N wN   , w D4 V4 XAe r mNmP@ 4Zt\`eb4^ f ebA rWt`Ct  e &e %w w D ̋3  8 ̥/ˋ ˥/ N&  5Nf  K  N  ̋@wxw hD e   W- Ct`55A@w$ 5   eA@v5u@-A- uu   ff  e @t`55  ff %@t5,"5,"%A@mNmP@ 4Zt\@t e4^` f @tp"p"@t e5@ &A@vCEt@m55  ff_w D #eE%@&  eu  wD5 5 ; % 'ffeu & emNmP@ 4Zt\eb4^` f eb5 ef  e@ w DC ̢ wԋӋw p  0 #AWpbDe"̵tVtX ff emNmP@ 4Zt\4 ` ww  % _v _r#mAWpbDe"̵c^ `i &X&V e4Zt\̵&\&Z& emNmP@ 4Zt\eb4^` f ̵0 &X&V euA mVmX@ 4  t X@m4`t` `w5 Cmeb `eXt V”E^w   5 BeN f w %@w |  % @0D f= @ ȥ @,) #AWpbCe"˵˵˵s`s^ f e\s ZwA lVlX@ 3  s X5D Ne f=  @w  %D@   @)& #AWpbCe"˵˵s`s^ e\s Zw w  25 AWpb1" %7 5 AWpb"  %2 < AWpbCe"D̥( ̥̋(E  _ eQ f  (@ r3e3L L%Laԋ uԥ, >3NsP̥) ̋@ 3 `3 V3 X & ^ 5 f  3 V3 X3 `@ U @ew w |  # AWpbe"uɵwV N = w .  < w. w  N  w w  N  w D&t %w w D&t %w w D&t  w w D&t  w w | w w t D L55Z5\.E5Z5\5N5P   ff eC fe e5mN5mPu 5@ߕ ff X eu ff  euA r5A ru_@t@m^`  tU%U8%U055@fff  e w `w D &  P`&  5  &   w w D&  w w DLE(%5 *:E :^$` &` "x tU%U8 %U0B] 5 5* 4 ,(@ % w5@ &m`w :E5(E5 (_(_: ww D Be N %%%d %u%o%x%o%x & %#%s @  %D   %e%c eww  - A@  5uf ff eu5v Nff %f ff eA^N wZw JD`< 5~ * 0  0%     ww 5E%   ww D E%A%ZD-8\4 %a%ze* . #0 @2Ԑ ! ' ( ) ^ { }|~`   w D-D w D 5Z5\5L ff Jeu ff eu@t AWt@P@] ^` tU%UU5 ffp ew*`w D &\&Z eu &\&Z BeuA r 5A r uLt@t@]_^` tU5%Uc=k >hkb)#--U_]5 fff e w4`w D&  ww D&  P 4 `&   ww D 5L5P5P@tWt@PU`` T^V%U %U@]UR5R5@P  P  w< PTm`w D5 5  "̥9/&  ff &eee@ ee@ 5u     + -̥0 A@  wA@w CB  (( D-wlw \CB  D-wHw 8C  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJww rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BFJBoot : Can't load %o files null path %s not found bn negative bn ovf %D bn void %D bn void %D not a directory zero length directory Seek not from beginning of file No more file slotsBad device Unknown device Bad unit specifier Missing offset specification Can't write files yet.. Sorry Exit called%s Trap %o F  n T<\rphprktmhtdisk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o tape error: cs2=%o, er=%o p0123456789ABCDEFdisk error: cyl=%d, sector=%d, er=%o, ds=%o disk error: cyl=%d track=%d sect=%d er=%o ds=%o tape error: er=%o cBkgS  676 % *w < % 7 22@ @m eue_&@ r y wX2e%`7 Z  "2 2 2 2 2wK2Ne ,7%  % P 1 1W 1    @ %      H5  7f1  % PB1 1%H_ 1_  P_ _ _   0_ _  0_ 0_T 0  0  P 8 % 8  8 %N 8  8 %4 8 3:0 6  0 5  P 67/$/ 7 7/ / / 6 7/ /_ % P / N <` v/-t/ 6  67^/ l/ 7 7F/ \/v % PN  0 /+./ 6  67.(  / 7 7. . % P D   Pw28w "8  Pw8w 8 .j  p . P ~ `  .Wfe 5 fe 5 fe 5 fe 5 fe J!e. (Ne X-M %2-& R7 ----Ne ' -'C̥/ ̋  N t6˕/ fe ( Ne t6  $  %T--  eO %,7j, ,w6w z6 Lwt6 w `6  Re2Ned H%tNeg H%tNej H%t em( H%eq4 H%2u@ H% -T, x  P J, 4 8, ew5w ~51x)++eu  fe 3e Ne RA@ w(5w 5 f 7 5N_N  N 6_2f R7 v+Nr 2 "+E%@_5 De@@m / 5 N t6N +W Ne 6 Ne 6  15 @@m % N 6fe (   7 5  @t&& f 7efef (8% N 6 t6 N %w3*E%2 C5 %d Ԕ%d N %_Z%)_ 5 )<NeI 86 1 @ J!% j )N %Ne %@ _Z@5j -)@-) l $15  B* 7 . @(jw((@(@( pNfe 86  ((e@ f& 0e5u (N5 %ff; e G@ J!% j  Ne j fef (8%5N 6   NK %A@ _ _ w "1_> u f h e  n_> t'_> I s e_> x 2  1 9I 7 b %_> &E 6 5  %&& 6% &&u5ee@ f& .e5u &Qffff e? GNe R W-fef 9% Nfef 9%  % P A@ N 6 % Z95 %%Ne 9 _~ w.w . t%2   ! 1I   !  ! , F ( w.w .@e5= @e@-Ne jwt.w d.D 6 & !%&&$ ee "-ee( !%w.w .D| V %w-w -C@4e : ! w-w -D @˥/< & P6 1 (  &H= 7e &]N 7ec  PNe 9 ##& 6%˕/ ˋw6-w &- 8 #w-w - 8 #w-w , 8 v#w,w , 8 \#w,w ,D % E| J!% J!%  J!%&&( de&&4 LewJ,w :,@ ˕ %H  ` % w,w , "N ! "2 N ! %yw+ w + E  !5  E  !% n@wt+w d+l" \N @u5 wH+ ff! eNefe! ,e-!-~!ڂ w * 9N *w*w *DC̋Ԥ ˋ˥/w*w *Ne 8 %5' 6N 6  7%  7%  ! * 9%2ff (8%  =N 6N 6w*w * @aȥ  @aȋ ~ x r &f e 5uw)w )7 X u- u- @w) A@ @A f& 'e@mAm @ ee@ 5.u05  u u.u 0 f0f. efe2 e  @a 2 e0u . %u-. u-0u.*u0,u. u0e,u *@a 2 %Nf@`e2& % u*u, _A0@._w cBkKA r   PA r5 %   P-% N0 %w7 t e f  w&w &n -Zxt  : 9% E  P7 "Nt e &  -&t   9% \  P7 w0&w & 7e-* 7t  t (8% s  PD 7ew%w %`t  " 9%w%w %DCԔ~w|%w l%D B)ff )%wZ%w J%D_% U RNuu & & 7ef& 5`u`u  5u   5 u  5 u Lmt w$ N ff& 7e5u4 # (4  N ff& 7e5u%%w #D ( & & 7e4  0w#w #DC 5 u E  !   u-@wX#w H#DC 5 B E; &E ' ~  u-@w"w " 5 f 7e 07 8  8 Ne 95@-%% 8  8 @w\"w L" ff )%w@"w 0"Nef %w$"w "Neff %w"w !DA555  ԋNeffe %w!w !DC 5 5 _@ E_%%_5 %*e5  AWp `eu 0u%l%h5 %[ e  Neffff <e   - @w @ @ EN !5% % % %Nf !     %_@ _N !5 %Nf ! w  N%c%s%[Nf ff f& ew5 5 5 5 %e%f %o%xDe5 5 @ @ EN !% % % %-5 Ԑ@ @ EN ! 1 A@  5u%_N  ! = _%+ @ _@ E 8%)%._%e%E %    Ԑ@(( _@ Ee%a%f%A%F %A@v% A@v@mAm@ vA@v5u%0%90 %a%fW7 5`u`u C"% _D _D N !%+ %- %0_D%9_DԐ@ _N !_ @e! _@t@]   x"Ne *A _Ne *A @H@pHw DC = 5%c%0u5 %s E  !r%%c5 %[r   E  !%%   ! =  D- %cw w D ̥^   %E%]    wbw RNfef #%@ w6 w "fef #% lw  w BuNefef #% = Ne& ' @ww D%    | w| - -w VD@w8 $14 e64 && (8%4 %  4 E & & .e Ӌ HL &7b& \e Pӕ-Jӕ0B~6ӕ.  ӕ0~ B~HL&7 & e ӕ-0 ӕ. B~ӕe ӕ- ӕ+ r e0e0Sw uDAB %u f& & He w\5 5  W- W00u5  .uNBwF J@B V_%@  o x d u        ӕ- f&@Ew ӕ0 S r@A r  f  e0 9e' E,* Aҋ D~@B f@  5w*A  fff xe w5  @ 0   Wp `e0w LNefef 5& &3e C ӕ-B  @@ % :%6 ӕ. `ȥ0  B- ӕe @ 5ӕ-ӕ+A r e0A r e0@- ̥0ӕ. ӕ0 B-ӕ. B- u-  ӕ0@ @-ӕ.. @w w DCB &E ' z f '  #̥-%0  E: E:  &E '  z f '  w`w PDuNfe& 9%4 ;#%W 4 22 $1  & 9%S  w@w nDE%& 9%  w0 w  B)e-ww D@ ( 6  ^2 4 4 ww D  w r< wf ~*=@+ @ a f 7  % f ~* &  7e   f 7  4  Հ rw D& 6     6& 7 ww -t wef >@w TD*\5% %-%+ 5 55 55  B5eA5 %.55  B5eA5  %E%e$%+%-  Wp B`e  @`5 @ 5AupAm%55 @5A5u555555  55555AupN5& 5e5 55ww ~D  ̥9Wp @@`e     + -̥0  w2w N 8- /ww Ne r9< f &ef&@ 5uNe b.w/%J %K  t, t5. $. N $. 5   %D-D-% eu Ne b. w,w DC%: 0e`m e rfw w Q@f& " e5uQ@f& $ e5u eeQu  &7< ff eR< ff eC r<R r< A@epe@ f& f ew F 0 5 $u  0 5u F  0 5`u`u D7~ 0%nv  <  0!<X 7 D&7wV w F  7\ԔAA WpCev 7ԔԔԔ BeWpCeԔԔԔ& 0 ed& 0 ed& 0 ed& 0 @%d 20e@ ed& 0  7w w A r nw| mw f D % A r  r e0@ԕ A r e0@w, w  :7U787U7:787Ae vB7 55 a  a!RE -%87 w %e rt 7t J8h `e X  J8%@<e U?** `e 787U?  a7 ?U ew DE w w D5 ^2@ r5N $1!w 5A vBB-  }ee@ !ۃ `!ւ `@ r `w  fff 5& p3ew w  fff 5& p3eww  5 %O N  = D7555Ne5& 5e5755'0Ne5 B& 5e57 Be0" 5%755 5 B5@B eD7 a=%D77D7w %75 B5Ne5& 5e55e0%77`Jʕ0%D7ʕ1  %D7˕0 ʥ9 w LNef 5  w:w $5@m 77~"ww  Dԋ  r e0@  r X a %zw  f P6 %@w 5@} ww |N tf z7%wrw bNtf z7%wXw HDCԋ Ԕw:w *DCԋ w @w DCԔww ww F7wfwLw8 fwwwPw f@w fwwXwf@U@f@A)wfwH@e7@<^wf@fwx7H f@wfwV ffwwwjw& fwwrw f@www xwfwwwf*wBJ f@wRwNwzfw:m62wZ&wm Ѕfww8w fAW @w f71775 e8w 5w7L7H7D7@7<7874707,7(7$7 77777 777f&8 & 7 f BRfwfww( fwww fw }f@wwww FC  5!$ABA  D & r@rr @`   BJw& @N   C 5  N B A @ A- A    BJw70Fw rC  5!BA  D & r@rr @`   w0& BAN   C 5 N B A @ A-  A    ww B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF/tmp/tarXXXXXX/dev/mt1$Vr-w-s@x- r-w-sx-r-w-tx-(08DLT`hpwTar: cannot create temporary file (%s) !!!!!/!/!/!/!/!/!/! 000 Tar: Blocked tapes cannot be updated (yet) Invalid blocksize. (Max %d) tar: %c: unknown option -Can only create standard output archives tar: cannot open %s -tar: cannot open %s -tar: cannot open %s tar: usage tar -{txru}[cvfblm] [tapefile] [blocksize] file1 file2... sort +0 -1 +1nr -o sort +0 -1 +1nr %s -o %s; awk '$1 != prev {print; prev=$1}' %s >%sX;mv %sX %srMissing links to %s %o%o%o%lo%lo%odirectory checksum error %s %s tar: %s: cannot open file ......tar: %s is not a file. Not dumped %s: file name too long %6oa %s link to %s Out of memory. Link information lost a %s %ld blocks %6o%s: file changed size %s: cannot link %s linked to %s tar: %s - cannot create x %s, %ld bytes, %ld tape blocks tar: %s: HELP - extract write error tar: %s: HELP - extract write error %s linked to %s %3d/%1d%7D %-12.12s %-4.4s %c/bin/mkdirmkdir/usr/bin/mkdirmkdirtar: cannot find mkdir! %6o %6o %6o %11lo %11lo %c %s: %s %lo/bin/pwdpwd/usr/bin/pwdpwdpwd failed! / Tar: tape read error Tar: tape blocksize error Tar: Cannot update blocked tapes (yet) Tar: blocksize = %d Tar: tape write error Tar: tape write error Tar: tape read error after seek /bin/shsh-ctt~ZZZZZZZZZZZZZJJb$d$o$x`%fn%eP$g*%c<%s`$l`$L$u%r$D$O$X$U(null)44:M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec=(\/  AAAAAABBBBBB ! ;6 70# ((c@kFtell.c=ctype_.c<index.c;rindex.c:strcat.c9strncmp.c8strcmp.c7strncpy.c6strcpy.c5strlen.c4strncat.c pkon.c__.SYMDEFv07264'ekA` OPlQQ>PTT e.f..dgen3crt)csu$sysstdiocompallv6mpx.o~mklibgetgrgid.ogetgrnam.ogetgrent.ogetpass.ogetpwnam.ogetpwuid.ogetpwent.ofgetc.ofputc.ogetchar.oputchar.opopen.ofreopen.ofgets.ofputs.ogetpw.ofseek.oftell.orew.ordwr.osystem.ofopen.ofdopen.oscanf.odoscan.ofprintf.ogets.ogetw.oprintf.oputs.oputw.osprintf.oungetc.ofilbuf.osetbuf.ofltpr.odoprnt.ogcvt.offltpr.ostrout.oflsbuf.oendopen.ofindiop.oclrerr.odata.ocuexit.oexecvp.ogetenv.ogetlogin.operror.osleep.otimezone.ottyslot.o((ttyname.oabort.oabs.oatof.oatoi.oatol.ocrypt.octime.ocalloc.omalloc.oecvt.oerrlst.ofakcu.ofakfp.ofrexp11.oisatty.ol3.oldexp11.oldfps.omktemp.omodf11.omon.onlist.oqsort.orand.osetjmp.ostty.oswab.otell.octype_.oindex.orindex.ostrcat.ostrncat.ostrcmp.ostrncmp.ostrcpy.ostrncpy.ostrlen.oaccess.oacct.oalarm.ochdir.ochroot.ochmod.ochown.oclose.ocreat.odup.oexecl.oexecle.oexecv.oexecve.oexit.ofork.ofstat.ogetgid.ogetpid.ogetuid.oioctl.okill.olink.olock.olseek.omknod.omount.ompxcall.onice.oopen.opause.ophys.opipe.oprofil.optrace.oread.osbrk.osetgid.osetuid.osignal.ostat.ostime.osync.otime.otimes.oumask.oumount.ounlink.outime.owait.owrite.oaldiv.oalmul.oalrem.ocerror.oldiv.olmul.olrem.omcount.ocsv.olibc.axy'fkA   r r f...elibc}libmjcmdlibI77libplotlibF77libdbmgameslibfpsimlibmpnohup.out'ikRA`k "&&& i.j..hc0.hgc00.c.c01.c-c02.c,c03.c+c04.c*c05.c)c1.h(c10.c'c11.c&c12.c%c13.c$c2.h#c20.c"c21.c!table.s cvopt.cmakefilecvoptc00.oc01.oc02.oc03.oc04.oc05.oc0c10.oc11.oc12.oc13.oc1table.oc20.oc21.oc2c2'jkmA$` h lqM0SUUU j.f..iclexyaccasmakeadbcmakecrypt.cac.caccton.car.cbasename.clintcal.ccat.ccb.ccc.ccheckeq.cchgrp.cchmod.cchown.cclri.ccmp.ccol.c~comm.c}cp.c|cron.c{prof.czcu.cydate.cxdcheck.cwdd.cvderoff.cudf.ctdmesg.csdu.crdump.cqecho.cped.cofgrep.cnfile.cmgetty.clgrep.ckicheck.cjinit.ciiostat.chjoin.cgkill.cfld.ceprimes.sdln.cclogin.cbls.caeqnImail.cHmakekey.cGmesg.cFmkdir.cEmkfs.cDmknod.cCmount.cBmv.cAncheck.c@newgrp.c?nice.c>nm.c=od.c<passwd.c;pr.c:ps.c9pstat.c8ptx.c7pwd.c6quot.c5random.c4restor.c3rev.c2rm.c1rmdir.c0sa.c/size.csleep.csort.csp.cspline.csplit.cstrip.cstty.csu.csum.csync.ctabs.ctail.cstandalonetc.ctee.ctest.ctime.ctk.ctr.ctsort.ctty.cumount.cuniq.cupdate.cvpr.cwall.cwc.cwho.cwrite.cyes.cbc.yfactor.scalendar.cexpr.ydiff.ctbldiffh.cdcdiff3.cm4graph.cneqnOratforDegrep.yCroff:spell/osh.c.look.c-dumpdir.c,tp%at.c$atrun.c#shcpptroffzstructxsend arcv.crefersedf77ytouch.cxawkilearnUfind.cTbasQplotLunits.cKuucpmippcctarmakeallranlib.cprepUinrestor.oprep.hrestorinityesexprncheckdddiffdiffhdudumpdumpdiredfgrepgrepicheckinitiostatlsmailmkfsnmodoshprofpsquotrestorsizestripsumtailteetsortunitsoutcalbc'%}k Ap PUU }.f..|asin.c{atan.czexp.cyfabs.cxfloor.cwhypot.cvj0.cuj1.ctjn.cslog.crpow.cqsin.cpsinh.cosqrt.cntan.cmtanh.clmklibkcompallasin.oatan.oexp.ofabs.ofloor.ohypot.oj0.oj1.ojn.olog.opow.osin.osinh.osqrt.otan.otanh.olibm.axy(('(ksA  .e..access.csyscall.schown.cexecl.cftime.cgtty.clseek.cstat.ctime.s'*kgAp ! -@-@ .e..doprnt.sgetgrgid.cgetgrnam.cgetgrent.cgetpass.cgetpwnam.cgetpwuid.cgetpwent.cfgetc.cfputc.cgetchar.cputchar.cpopen.cfreopen.cfgets.cfputs.cgetpw.cfseek.cftell.crew.crdwr.csystem.cfopen.cfdopen.cscanf.cdoscan.cfprintf.cgets.cgetw.cprintf.cputs.cputw.csprintf.cungetc.cfilbuf.csetbuf.c!endopen.cfindiop.cgcvt.cffltpr.ostrout.cflsbuf.cclrerr.cdata.cffltpr.sfltpr.s'-ks A[[ .j..READ_MESHELLlint.ccgram.ocgram.clmanifestlpass2.cmacdefsmakefilexdefs.oscan.ocomm1.opftn.otrees.ooptim.olint.olpass1lpass2.olpass2lpass2.olpass2a.out'/ktApO|| .j..access.ccommand.cdummy.cexpr.cfindfn.cformat.cinput.cmain.cmessage.copset.coutput.cpcs.cprint.crunpcs.csetup.csym.cdefs.hmac.hmachine.hmode.hmakefileaccess.ocommand.oexpr.ofindfn.oformat.oinput.oopset.omain.omessage.ooutput.opcs.oprint.orunpcs.osetup.osym.oadb'2k-ZA@k .j..doname.cdosys.cfiles.cident.cmain.cmisc.cmakefiledefsgram.yident.omain.odoname.omisc.ofiles.odosys.ogram.ogram.cmake'4k֖AN .j..as11.sas12.sas13.sas14.sas15.sas16.sas17.sas18.sas19.sas21.sas22.sas23.sas24.sas25.sas26.sas27.sas28.sas29.smakefilea.outasas2'6kA 88 .j.. y1.c y2.c y3.c y4.c filesdexternmakefiley1.oy2.oy3.oy4.oyacc'8k%Ap*Qi ...allprint.cmain.creject.cyyless.cyywrap.c':k'A'RR .j..libheader.cldefs.conce.csub1.csub2.cmakefileparser.ylmain.clmain.oy.tab.cy.tab.osub1.osub2.oheader.olexallprint.omain.oreject.oyyless.oyywrap.olibln.a(('<ak A}K a.j..`diacrit.c_e.h^e.y]eqnbox.c\font.c[fromto.cZfunny.cYglob.cXintegral.cWio.cVlex.cUlookup.cTmakefileSmark.cRmatrix.cQmove.cPover.cOparen.cNpile.cMshift.cLsize.cKsqrt.cJtext.ce.oe.defe.cdiacrit.oeqnbox.ofont.ofromto.ofunny.oglob.ointegral.oio.olex.olookup.omark.omatrix.omove.oover.oparen.opile.oshift.osize.osqrt.otext.oeqn'?kiAP .j..diacrit.ce.he.yeqnbox.cfont.cfromto.cfunny.cglob.cintegral.cio.clex.clookup.cZmakefileYmark.cXmatrix.cWmove.cVover.cUparen.cTpile.cSshift.cRsize.cQsqrt.cPtext.ce.oe.defe.cdiacrit.oeqnbox.ofont.ofromto.ofunny.oglob.ointegral.oio.olex.olookup.omark.omatrix.omove.oover.oparen.opile.oshift.osize.osqrt.otext.oneqn'BkuAQ .j..m4.cm4y.ymakefilem4.om4y.om4yacc.acts'DkAp: .j..dc.cdc.hmakefiledc.odc'FkҖAK .j..makefilet..ct0.ct1.ct2.ct3.ct4.ct5.ct6.ct7.ct8.ct9.ctb.ctc.cte.ctf.ctg.cti.ctm.cts.ctt.ctu.ctv.ct0.ot1.ot2.ot3.ot4.ot5.ot6.ot7.ot8.ot9.otb.otc.ote.otf.otg.oti.otm.ots.ott.otu.otv.otbl'IknA/~~ ...stm15400aalint.6109lint.6521stm06679aastm06679abstm06679acstm06679adstm06679aestm06679afstm06679agstm06679ahstm06679ai'Kk{UAL`]] .j..SYS.cconf.chp.cht.cprf.crk.csrt0.stm.cmtboot.smakefilemaketape.ccc+ld-standsaio.hM.sboot.ccat.crp.c* srt0.oboot.onohup.out3 mtbootcatM.oJicheckYSYS.o mkfsa cpgroupc rktapedirr rkcontentsconf.ob maketapePhp.odht.oprf.ork.orp.o tapedir contentstm.obootrestor.orestor'NkAzj; ...ftC.cftCE.cftG.cftCI.cftCK.cftCS.cftCW.cftGI.cftI.cftGM.cftGR.cftLI.cftL.cftR.cftPA.cftPB.cftPI.cftSB.cftS.cftBC.cftSI.cftSM.cftUD.cftXM.clinkrcchars.cmkfont.cmkfont1.cftB.cmakefile(('PkA/ .j..fonttermn1.cn10.cn2.cn3.cn4.cn5.cn6.cn7.cn8.cn9.cni.cnii.cntab.ct10.ct6.ctab3.cd.hs.htdef.htw.hv.hhytab.csuftab.cmakefile~README}nmake|tmake{textscriptn1.on2.on3.on4.on5.ot6.on7.on8.on9.ot10.oni.onii.otab3.onrofftroffhytab.osuftab.o'SkKAcc .j..makefilecpp.cyylex.ccpy.yREADMEcpp.ocpy.ocppyacc.acts'U#kA` #.j.."args.c!blok.c builtin.ccmd.cctype.cerror.cexpand.cfault.cio.cmacro.cmain.cmsg.cname.cprint.cservice.csetbrk.cstak.cstring.cword.cxec.cbrkincr.h ctype.h defs.h dup.h mac.h mode.hname.hstak.hsym.htimeout.hmakefilesetbrk.obuiltin.oblok.ostak.ocmd.ofault.omain.oword.ostring.oname.oargs.oxec.oservice.oerror.oio.oprint.omacro.oexpand.octype.omsg.osh'X,kꛗA QQ ,.j..+tp.h*tp0.c)tp1.c(tp2.c'tp3.c&makefiletp0.otp1.otp2.otp3.otp'Z:kA :.j..9makefile8american7british6local5spell.c4spell.h3spellin.c2spellout.c1stop0spellinspell.ospellhlistahlistbhstop'\CkꕿA  C.j..Broff1.sAroff2.s@roff3.s?roff4.s>roff5.s=roff7.s<roff8.s;makefileroff.oroff'^OkxA`  O.j..Nmakefiley.tab.hLr.gKr.hJr0.cIr1.cHr2.cGrio.cFrlex.cErlook.cy.tab.cr0.or1.or2.orio.orlook.orlex.oy.tab.oratforratfor'`zkO{A|#b}b} z.j..y0.alloc.cx0.args.cw0.def.cv0.extr.cu0.graph.ct0.list.cs0.parts.cr0.string.cq1.defs.hp1.finish.co1.form.cn1.fort.cm1.hash.cl1.incl.hk1.init.cj1.line.ci1.main.ch1.node.cg1.recog.cf1.tables.ce2.def.hd2.dfs.cc2.dom.cb2.head.ca2.inarc.c`2.main.c_2.test.c^2.tree.c]3.branch.c\3.def.h[3.flow.c"3.loop.c!3.main.c 3.reach.c3.test.c3.then.c4.brace.c4.def.h4.form.c4.main.c4.out.cb.hbdef.cbeauty.ydef.hlextab.lmain.cmakefiletree.cy.tab.hbeauty.obeauty.ctree.olextab.obdef.obeautifymain.o0.alloc.o0.args.o0.def.o0.extr.o0.graph.o0.list.o0.parts.o0.string.o1.finish.o1.form.o1.fort.o1.hash.o1.init.o1.line.o1.main.o1.node.o1.recog.o1.tables.o2.dfs.o2.dom.o2.head.o2.inarc.o2.main.o2.tree.o3.branch.o3.flow.o3.loop.o3.main.o3.reach.o3.then.o4.brace.o4.form.o4.main.o4.out.ostructurebeautify(('dk JAj> ...tab300-12.ctab300.ctab300s-12.ctab300s.ctab37.ctab450-12-8.ctab450-12.ctab450.ctab832.ctaba1.ctablp.ctabtn300.ccode.300makefile'fkAQQ .j..makefiledata.cdefinesdefsdmrdefsdrivedefsdriver.cequiv.cerror.cexec.cexpr.cfio.hftypesgram.dclgram.execgram.exprgram.headgram.ioinit.cintr.cio.clex.cmain.cmalloc.cmisc.cpdp11.cpdp11defspdp11x.cproc.c~put.c}putdmr.c|tokens{locdefsztokdefs( scjdefs putscj.cdriver.opdp11x.of77main.oinit.ogram.olex.ogram.cproc.oequiv.odata.oexpr.oexec.ointr.oio.omisc.oerror.oput.oputdmr.opdp11.of77pass1'ik:jAH> > .j..sed.hsed0.csed1.cmakefilesed0.osed1.osed'kkCA@g0}0} .j..deliv1.cdeliv2.cflagger.cglue1.cglue2.cglue3.cglue4.cglue5.chunt1.chunt2.chunt3.chunt5.chunt6.chunt7.chunt8.chunt9.cinv1.cinv2.cinv3.cinv5.cinv6.ckaiser.cmakefilemkey1.cmkey2.cmkey3.crefer..crefer0.crefer1.crefer2.crefer3.crefer4.crefer5.crefer6.crefer7.crefer8.cmkey1.oshell.ctestthash.ctypes.cwhat..cwhat1.cwhat2.cwhat3.cwhat4.cmkey2.omkey3.odeliv2.omkeyinv1.oinv2.oinv3.oinv5.oinv6.oinvhunt1.ohunt2.ohunt3.ohunt5.ohunt6.ohunt7.oglue5.orefer3.ohunt9.oshell.ohunt8.oglue4.ohuntglue1.orefer1.orefer2.orefer4.orefer5.orefer6.orefer7.orefer8.oglue3.oglue2.orefer0.oreferrefer'ok0Avv .j..enroll.cxget.c xsend.c lib.c makefile xmail.henroll.olib.oenrollxsend.oxsendxget.oxget'qKk%Ap_!J K.j..Janlwrk.cIchkpth.cHcico.cGcntrl.cFconn.cEcpmv.cDexpfile.cCgename.cBgetargs.cAgetprm.c@getpwinfo.c?gio.c>gnamef.c=gnsys.c<gnxseq.c;gwd.c:imsg.c9index.c8ioctl.c7lastpart.c6logent.c5pk0.c4pk1.c3pkon.c2prefix.c1sdmail.c0shio.c/sysacct.c.systat.c-ulockf.c,uuclean.c+uucp.c*uulog.c)uurecover.c(uux.c'uuxqt.c&versys.c%xqt.c$makefile#uucp.huucpdefs.hanlwrk.ochkpth.ocpmv.oexpfile.ogename.ogetargs.ogetprm.ogetpwinfo.ognamef.ognsys.ognxseq.ogwd.oimsg.oindex.olastpart.ologent.oprefix.osdmail.oshio.osysacct.osystat.oulockf.oversys.oxqt.ouucp.ouucpuux.ouuxuuxqt.ouuxqtcico.oconn.ocntrl.opk0.opk1.ogio.opkon.ouucicouulog.ouuloguuclean.ouucleanuucleanfoop'uQk A   Q.j..PmakefileOdriver.cNvplot.cMchrtab.cdriver.otekt300t300st450chrtab.ovplot.ovplot'wTk,1A@ sk% ((T.j..Sbas.sRmakefile'yikfA`!L)) i.j..hcopy.cgdounit.cflcount.celearn.cdlist.ccmakpipe.cbmaktee.camem.c`mysys.c_selsub.c^selunit.c]start.c\tee.c[whatnow.cZwrapup.cYlrnrefXlrndefWmakefileVREADMEcopy.odounit.olearn.olist.omem.omakpipe.omaktee.omysys.oselsub.oselunit.ostart.owhatnow.owrapup.olearnlcount.oteelcount'|xkA L x.j..wmakefilevawk.defuawk.g.ytawk.lx.lsb.cy.tab.hqlib.cpmain.coparse.cnproc.cmtoken.clrun.cktokenscriptjtran.cawk.g.oawk.hawk.lx.ob.omain.otoken.otran.olib.orun.oparse.oproc.oprocproctab.cproctab.oawkawkawkawk'koA` L$$%~%>MZ0zz .f..Makefileabort_.cc_abs.cc_cos.cc_div.cc_exp.cc_log.cc_sin.cc_sqrt.ccabs.ccomplexd_abs.cd_acos.cd_asin.cd_atan.cd_atn2.cNd_cnjg.cMd_cos.cLd_cosh.cKd_dim.cJd_exp.cId_imag.cHd_int.cGd_lg10.cFd_log.cEd_mod.cDd_nint.cCd_prod.cBd_sign.cAd_sin.c@d_sinh.c?d_sqrt.c>d_tan.c=d_tanh.c<getarg_.c;h_abs.c:h_dim.c9h_dnnt.c8h_indx.c7h_len.c6h_mod.c5h_nint.c4h_sign.c3hl_ge.c2hl_gt.c1hl_le.c0hl_lt.c/i_abs.c.i_dim.c-i_dnnt.c,i_indx.c+i_len.c*i_mod.c)i_nint.c(i_sign.c'iargc_.c&l_ge.c%l_gt.c$l_le.c#l_lt.c"main.c!pow_ci.c pow_dd.cpow_di.cpow_hh.cpow_ii.cpow_ri.cpow_zi.cpow_zz.cr_abs.cr_acos.cr_asin.cr_atan.cr_atn2.cr_cnjg.cr_cos.cr_cosh.cr_dim.cr_exp.cr_imag.cr_int.c r_lg10.c r_log.c r_mod.c r_nint.c r_sign.cr_sin.cr_sinh.cr_sqrt.cr_tan.cr_tanh.cs_cat.cs_cmp.cs_copy.cs_paus.cs_stop.csignal_.cmklibcompallz_abs.cz_cos.cz_div.cz_exp.cz_log.cz_sin.cz_sqrt.cs_rnge.coutabort_.oc_abs.oc_cos.oc_div.oc_exp.oc_log.oc_sin.oc_sqrt.ocabs.od_abs.od_acos.od_asin.od_atan.od_atn2.od_cnjg.od_cos.od_cosh.od_dim.od_exp.od_imag.od_int.od_lg10.od_log.od_mod.od_nint.od_prod.od_sign.od_sin.od_sinh.od_sqrt.od_tan.od_tanh.ogetarg_.oh_abs.oh_dim.oh_dnnt.oh_indx.oh_len.oh_mod.oh_nint.oh_sign.ohl_ge.ohl_gt.ohl_le.ohl_lt.oi_abs.oi_dim.oi_dnnt.oi_indx.oi_len.oi_mod.oi_nint.oi_sign.oiargc_.ol_ge.ol_gt.ol_le.ol_lt.omain.opow_ci.opow_dd.opow_di.opow_hh.opow_ii.opow_ri.opow_zi.opow_zz.or_abs.or_acos.or_asin.or_atan.or_atn2.or_cnjg.or_cos.or_cosh.or_dim.or_exp.or_imag.or_int.or_lg10.or_log.or_mod.or_nint.or_sign.or_sin.or_sinh.or_sqrt.or_tan.or_tanh.os_cat.os_cmp.os_copy.os_paus.os_rnge.os_stop.osignal_.oz_abs.oz_cos.oz_div.oz_exp.oz_log.oz_sin.oz_sqrt.olibF77.a'kA#;Q ˋ ˋ .f..plot.c.at300.c.at300s.c.at4014.c.at450.c.avt0.c.amakefilecon.harc.ccircle.cclose.cdot.cerase.clabel.cline.clinmod.cmove.copen.cpoint.cspace.csubr.cbox.carc.obox.ocircle.oclose.odot.oerase.olabel.oline.olinmod.omove.oopen.opoint.ospace.osubr.olibt300.alibt300s.alibplot.alibt4014.alibt450.a'kwA0$"+zz .f..compallbackspace.cclose.cdballoc.cdfe.cdue.cendfile.cerr.cfio.hfmt.cfmt.hfmtlib.ciio.cinquire.clib.clio.clio.hlread.copen.crdfmt.crewind.crsfe.csfe.csue.cuio.cutil.cwrtfmt.cwsfe.cmklibout((backspace.oclose.odballoc.odfe.odue.oendfile.oerr.ofmt.ofmtlib.oiio.oinquire.olib.olio.olread.oopen.ordfmt.orewind.orsfe.osfe.osue.ouio.outil.owrtfmt.owsfe.olibI77.a'kA#|| .j..tar.cmakefiletar.starc1tar.it0t1t2otar.ssyscall.ov6tartime.o'kSA#  .j..INDEXcode.clocal.clocal2.cmac2defsmacdefsmakefileorder.ctable.ccgram.ocgram.cxdefs.oscan.opftn.otrees.ooptim.ocode.olocal.oreader.olocal2.oorder.omatch.oallo.ocomm1.otable.occomccom'kAn"k) .j..INDEXallo.ccgram.ycomm1.ccommonconvertfallo.cfcomm2.cfconvertflocal2.cfmatch.cforder.cfort.cfreader.cftable.cgmakefilemanifestmatch.cmfile1mfile2optim.cpftn.creader.cscan.ctrees.cxdefs.c'k4A% P P .f..fp1.sfp2.sfp3.sfpx.scompallmklibfpsim.o'k+A%WW .f..fortune.cfish.carithmetic.changman.cquiz.cwump.c chessbackgammon.c'k!A% .f..dbm.cdbm.hcompallmklibdbm.olibdbm.a'\k;A%Ol \.h..[ftCZftCEYftGXftCIWftCKVftCSUftCWTftGISftIRftGMQftGRPftLIOftLftRftPAftPBftPIftSBftSftBCftSIftSM ftUD ftXM ftB'fkA0Q&#A  9&+  h...gyaccparflexdmakekeycvprbspelladiffh`diff3_calendar^atrun]crontab\font| libmp.a termtmacstructrefercigneignllib-lm}libF77.alibI77.alint1lint2llib-lcllib-port libdbm.aunitsuucpccomlibsa.alearnlibc.a(('k~A&0l  ...acct.hbuf.hcallo.hconf.hdir.hfblk.hfile.hfilsys.hino.hinode.hmap.hmount.hmpx.hmx.hparam.hpk.hprim.hproc.hreg.hseg.hstat.hsystm.htext.htimeb.htimes.htty.htypes.huser.hpk.p'kA&DD ...sysa.out.har.hassert.hcore.hctype.h~execargs.h}dk.h|dumprestor.h{errno.hzgrp.hyident.hxmath.hwolddump.hvpack.hupwd.htsaio.hssetjmp.hrsgtty.hqsignal.hpstdio.hosymbol.hntime.hmtp_defs.hlutmp.hkvarargs.hjmp.hisys.swhoami.h'kAPD& Q Q .f..pow.cgcd.cmsqrt.cmdiv.cmout.cmult.cmadd.cutil.ccompallmklibpow.ogcd.omsqrt.omdiv.omout.omult.omadd.outil.olibmp.a'kվA+ .h..C.aLinfoXinfoeditor.aeqn.afiles.amacros.amorefiles.amorefilesjteeilcountlog'kAG)l .h..uuxqtuucicouucleanL-dialcodesL.sysL-devicesUSERFILE'kاAP'hl .h..invhuntmkey'kA@'bl .h..structurebeautify'kkA&\l .h..tmac.antmac.stmac.scovertmac.sdisptmac.skeeptmac.srefs' k>Aj&Vl  .h..tab300-12tab300tab300s-12tab300stab37tab450-12-8tab450-12tab450tab832taba1tablptabtn300'ekYAe/0222SjSj e.f..dac.1mcar.1bas.1aat.1`basename.1_bc.1^cal.1]calendar.1\cat.1[cb.1Zcc.1Ychmod.1Xchown.1Wclri.1mVcmp.1Ucol.1Tcomm.1Scp.1Rcrypt.1Qcu.1cPdate.1Odc.1Ndcheck.1mMdd.1Lderoff.1Kdf.1mJdiff.1Idiff3.1Hdu.1Gdump.1m((Fecho.1Eed.1Deqn.1Cfactor.1Bfile.1Agraph.1g@grep.1?icheck.1m>iostat.1m=join.1<kill.1;ld.1:lex.19ln.18login.17ls.16m4.15mail.14make.13mesg.12mkdir.11mount.1m0mv.1/ncheck.1m.newgrp.1-nice.1,nm.1+od.1*passwd.1)pr.1(prof.1'ps.1&ptx.1%pwd.1$quot.1m#restor.1m"rev.1!rm.1 roff.1sa.1msh.1size.1sleep.1sort.1spell.1spline.1gsplit.1strip.1stty.1su.1sum.1tabs.1tail.1tar.1tbl.1tc.1tee.1test.1time.1tk.1tp.1tr.1tsort.1tty.1uniq.1wall.1mwc.1who.1write.1yacc.1cd.1wait.1arcv.1mman.1intro.1sed.1f77.1lint.1pstat.1mstruct.1adb.1true.1awk.1ratfor.1sync.1mtroff.1refer.1touch.1look.1expr.1dumpdir.1mmknod.1mmkfs.1mbas.1find.1lorder.1plot.1gunits.1mkconf.1mxsend.1uucp.1cuux.1cprep.1 lookall.1pubindex.1 ranlib.1'fkA b/ qmo f...eman1man2Aman3man4man5man6man7man8man0'kA23 n .f..acct.2chmod.2chown.2kill.2mount.2nice.2signal.2stat.2utime.2time.2times.2write.2access.2alarm.2chdir.2close.2creat.2dup.2exit.2fork.2getpid.2getuid.2ioctl.2link.2lseek.2mknod.2open.2pause.2pipe.2profil.2ptrace.2read.2setuid.2stime.2sync.2umask.2unlink.2wait.2brk.2intro.2indir.2~exec.2}lock.2|phys.2{pkon.2Bmpxcall.2mpx.2'k6A 4fm n .f..bcd.6arithmetic.6backgammon.6banner.6bj.6chess.6ching.6cubic.6words.6maze.6moo.6quiz.6reversi.6ttt.6wump.6checkers.6'k~MA0V3 n .f..a.out.5acct.5ar.5core.5dir.5dump.5filsys.5passwd.5tp.5types.5utmp.5environ.5group.5mtab.5plot.5ttys.5mpxio.5'kA x4Pm n .f..cat.4tc.4tty.4dn.4mem.4null.4rk.4hp.4ht.4pk.4du.4hs.4rf.4rp.4tm.4vp.4'Ak|A43Gm n A.f..@assert.3x?abs.3>atof.3=crypt.3<ctime.3;stdio.3s:abort.39ctype.38ecvt.37end.36getc.3s5frexp.34exp.3m3floor.3m2fopen.3s1fseek.3s0getenv.3/getgrent.3.getlogin.3-getpass.3,getpw.3+getpwent.3*gets.3s)hypot.3m(intro.3'l3tol.3&malloc.3%mktemp.3$popen.3s#printf.3s"puts.3s!monitor.3 nlist.3scanf.3ssetbuf.3ssinh.3mperror.3qsort.3rand.3ungetc.3ssetjmp.3sleep.3string.3swab.3system.3ttyname.3putc.3sj0.3msin.3mferror.3sfread.3s plot.3x pkopen.3 dbm.3x mp.3x fclose.3s'\kA :P9 m \.t..[africaZamericaYareasXarithWasiaVbabiesUbardTchineseScollectivesRedQelementsPeuropeOgreekNincaMindexLlatinKlocomotiveJmidearthImorseHmurdersGpoetryFposnegEpresDprovinceCseq-easy seq-hard sexessovspellstate((trekucc'rk]A08 m r.t..qfortunes'tkwyA8 m t...sfortunerlibpbjocheckersnchessmcubiclhangmankmazejmooiwordshreversigtttfttt.kewumpdarithmeticcwords1bchingabackgammon`bcd_quiz^banner]ppt\quiz.kching.d'xkA`8  x.{..vbin.keywroot.keyunoticeyroot.0'zkA@8 >> z.{..$rootMdmr'{k\A`8 55 {...zmailxsecretmaildpd& at'kۨAp7 m{ ...Ind.iaruninvInd.ibInd.ic~Rv7man'k2A 6 mx ...hlistahlistbhstoppapers}words|spellhist'k˝A5 zm n .f..introxxtitleprefpermindexptxmac'k!A-5 om n .f..update.8makekey.8crash.8getty.8init.8cron.8boot.8'kʺA4jm n ((.f..ascii.7man.7ms.7term.7eqnchar.7hier.7'khA>?   ...acct.hbuf.hcallo.htimeb.hconf.hdir.hfblk.hnfile.hmfilsys.hlino.hkinode.hjmap.himount.hhmpx.hgstat.hftty.hepack.hdtypes.hcparam.hbprim.haproc.h`pwd.h_reg.h^seg.hpk.p\systm.h[text.hZpk.hYmx.hXuser.hWsmallparam.h'k20AL ...nbs01.dnbs01.fpdp11ok01nbs02.dnbs02.fpdp11ok02a.outxxxfort15417.sfort15417.dnbs01.ofort15417.xfort15417.anbs02.ognxseq.cchksum.cgnsys.cgnamef.culockf.ccpmv.canlwrk.cchkpth.csystat.c'k=A=$$$ ...mkconf.cmkconfhptmconfmch.sl.sgc.chphtconfrp1confrptmconfmch0.smakefilerphtconfl.omch.o c.oDrktmconfp rkhtconftconfunixhphtunixhptmunixrptmunixrphtunixrktmunixrkhtunixrkhtunix'k6A@7<h=; << ...bio.ccat.cdh.cdhdm.cdhfdm.cmklibdkleave.cdn.cdsort.cdu.chp.cht.ckl.cmem.cmx1.cmx2.cpartab.cpk0.cpk1.cpk2.cpk3.cLIB2rf.crk.crp.csys.ctc.c'tm.ctty.cvp.cvs.cdc.c dz.cl rl.cdh.obio.ocat.odc.odh.odhdm.odhfdm.odkleave.odn.odsort.odu.odz.ohp.oht.okl.omem.omx1.opartab.opk0.opk1.opk2.opk3.orf.ork.orl.orp.osys.otc.otm.otty.ovp.ovs.o'k`A`u; ...acct.calloc.cclock.cfio.ciget.cmachdep.cmain.cmalloc.cnami.cpipe.cprf.cprim.crdwri.csig.cslp.csubr.csys1.csys2.csys3.csys4.csysent.ctext.ctrap.cureg.cLIB1mklibfakemx.ctrap.oLIB2clock.ofakemx.ofio.oiget.omachdep.omain.omalloc.onami.opipe.oprf.oprim.ordwri.osig.oslp.osubr.osys1.osys2.osys3.osys4.osysent.otext.otrap.oureg.o'kAr; ...sysdevconfhP 40out'kAPQ; m ...asciieqnchargreek'kAp9  ((.t..cnohexagramslogmacrosphx' kAAAnnQ  .V.. tprint m.macm0m0am1m2m3m4m5table1table2add'kA WBYnQ .V..e.mace0e1e2e3e4e5e6e7g.macg0g1g2g3g4g5'(kOAiAInQ (.V..'p.mac&p1%p2$p3#p4"p5!p6'1k=A@AnQ 1.V..0hel.mac/hel0.hel1-hel2,hel3+hel4*hel5)hel6'FkAPi@8nQ F.V..Ett.macDtt00Ctt01Btt02Att03@tt04?tt05>tt06=tt07<tt08;tt09:tt109tt118tt127tt136tt145ttack4ttcharset3ttindex'QkTA>,nP Q.V..Pae.macOae0Nae1Mae2Lae3Kae4Jae5Iae6Hae7Gae9'Vk4A@YH V...UREADMETassemblerSrunRscopeQadv.edFtrofftut2make1summary(cacm implementbceqn troffcmanctourshellsedf77beginnersuprogyacclintratform4referlextbldcawkadb}password|iosys{porttourxsecuritywmsmacrostedtut2uucp/setup.regen]learnindex']kAM  ].V..p0p2p3p4p5p6p7'tk-A'KnQ t.V..se.macre0qe1pe2oe36e45e54e63e7(('wkA@1JnQ w.V..vmsurefcard'{kꬺA@InQ {.V..zporttour1yporttour2'kA@?InP .V..tut~tut1' kA@tFnQ .V..referpubuse' kEiAFnQ .V..m.macm0m1m2m3m4m5m9m99'k)A0FnQ .V..ss..ss0ss1ss2ss3ss4ss5ss6ss7ss8ss9ssAssBssassbsscssd'kADnQ .V..p0p1p2p3p4p5p6p8p9p.maccwscript'kZ3A EnQ .V..u.macu0u1u2u3u4u5'kZApC|nQ .V..t.mact1t2t3t4'knApBunQ .V..cdoc0cdoc1cdoc2cdoc3cdoc4(('kAN  .j..makefileprep0.cprep2.cprep1.cprep.hprep0.oprep1.oprep2.oprep'k)A0L  .{..- empty'-knApJ ^n -...,rpuboot.s+hpuboot.s*makefile)hpuboot(rpuboot'2k'A@LnQ 2.V..1network0implement' k3A0:& ?? .& ..79.130.0330.91'" k$A0lRJSPSnn  ... agen.c att.s bgen.s bheur.c bmove.sbook.cbplay.cctrl.sdata.cinit.cio.cmakefilemater.cold.hpio.cplay.cqsort.ssavres.csetup.cstat.cstdin.cwgen.swheur.cwmove.swplay.cSREADMEagen.oagen.iatt.obgen.obheur.obheur.ibmove.obook.obook.ibplay.obplay.ictrl.odata.odata.iinit.oinit.iio.oio.imater.omater.iplay.oplay.iqsort.osavres.osavres.isetup.osetup.istat.ostat.istdin.ostdin.iwgen.owheur.owheur.iwmove.owplay.owplay.il.outa.out'&& kAP,S >> & .{..' lasttimedone79.130.0330.91past'(P k0APM r P ... m40.skparam.h README'*k{ggg '+k b. Mii ((/ profil .globl _profil .prof = 44. _profil: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 10(r5),0f+4 mov 12(r5),0f+6 sys 0; 9f mov (sp)+,r5 rts pc .data 9: sys .prof; 0:..; ..; ..; .. '-kd+ Lii / pipe -- C library / pipe(f) / int f[2]; .globl _pipe, cerror .pipe = 42. _pipe: mov r5,-(sp) mov sp,r5 sys .pipe bec 1f jmp cerror 1: mov r2,-(sp) mov 4(r5),r2 mov r0,(r2)+ mov r1,(r2) clr r0 mov (sp)+,r2 mov (sp)+,r5 rts pc '/kmht( Lii / C library - pause .globl _pause .pause = 29. _pause: mov r5,-(sp) mov sp,r5 sys .pause mov (sp)+,r5 rts pc '1km" Lii / C library -- open / file = open(string, mode) / file == -1 means error .globl _open, .globl cerror .open = 5. _open: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .open; 0:..; .. '3k!q Lii / C library-- nice / error = nice(hownice) .globl _nice, .globl cerror .nice = 34. _nice: mov r5,-(sp) mov sp,r5 mov 4(sp),r0 sys .nice bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc '5kꮷ LFF .globl _mpxcall, cerror _mpxcall: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 call: sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys 56.; 0:..; .. '7 kv Lii / C library -- mount / error = mount(dev, file, flag) .globl _mount, .globl cerror .mount = 21. _mount: mov r5,-(sp) mov sp,r5 mov 4(sp),0f mov 6(sp),0f+2 mov 8(sp),0f+4 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .mount; 0:..; ..; .. '9 ky Lii / C library -- mknod / error = mknod(string, mode, major.minor); .globl _mknod, cerror .mknod = 14. _mknod: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 8(r5),0f+4 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .mknod; 0:..; ..; .. '; k|A Lii / C library -- lseek / error = lseek(file, offset, ptr); / long offset / long lseek() .globl _lseek, cerror .lseek = 19. _lseek: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f mov 8(r5),0f+2 mov 10.(r5),0f+4 sys 0; 9f bec 1f mov $1,r1 jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .lseek; 0:..; ..; .. '= k Lii / C library -- link / error = link(old-file, new-file); .globl _link .globl cerror .link = 9. _link: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .link; 0:..; .. '? k! Lii ((/ C library -- kill .globl _kill, cerror .kill = 37. _kill: mov r5,-(sp) mov sp,r5 mov 4(sp),r0 mov 6(sp),8f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .kill; 8:.. 'Ak꽅3 Lii / C library -- ioctl / ioctl(fdes, command, arg) / struct * arg; / / result == -1 if error .globl _ioctl, cerror .ioctl = 54. _ioctl: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 8(r5),0f+4 sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 clr r0 rts pc .data 9: sys .ioctl; 0:..; ..; .. 'Ckˈ' Lii / C library -- getuid, geteuid / uid = getuid(); .globl _getuid .getuid = 24. _getuid: mov r5,-(sp) mov sp,r5 sys .getuid mov (sp)+,r5 rts pc / uid = geteuid(); / returns effective uid .globl _geteuid _geteuid: mov r5,-(sp) mov sp,r5 sys .getuid mov r1,r0 mov (sp)+,r5 rts pc 'Eku Lii / getpid -- get process ID .globl _getpid .getpid = 20. _getpid: mov r5,-(sp) mov sp,r5 sys .getpid mov (sp)+,r5 rts pc 'GkЎ% Lii / C library -- getgid, getegid / gid = getgid(); .globl _getgid .getgid = 47. _getgid: mov r5,-(sp) mov sp,r5 sys .getgid mov (sp)+,r5 rts pc / gid = getegid(); / returns effective gid .globl _getegid _getegid: mov r5,-(sp) mov sp,r5 sys .getgid mov r1,r0 mov (sp)+,r5 rts pc 'IkƑ3 Lii / C library -- fstat / error = fstat(file, statbuf); / int statbuf[17] or / char statbuf[34] / as appropriate .globl _fstat .globl cerror .fstat = 28. _fstat: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .fstat; 0:.. 'KkꦔS Lii / C library -- fork / pid = fork(); / / pid == 0 in child process; pid == -1 means error return / in child, parents id is in par_uid if needed .globl _fork, _par_uid .globl cerror .fork = 2. _fork: mov r5,-(sp) mov sp,r5 sys .fork br 1f bec 2f jmp cerror 1: mov r0,_par_uid clr r0 2: mov (sp)+,r5 rts pc .bss _par_uid: .=.+2 'Mk Lii / C library -- _exit / _exit(code) / code is return in r0 to system / Same as plain exit, for user who want to define their own exit. .globl __exit .exit = 1. __exit: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys .exit 'Ok: Lii / C library -- execve / execve(file, argv, env); / / where argv is a vector argv[0] ... argv[x], 0 / last vector element must be 0 .globl _execve .globl cerror .exece = 59. _execve: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 8(r5),0f+4 sys 0; 9f jmp cerror .data 9: sys .exece; 0:..; ..; .. 'Qkꛝb Lii / C library -- execv / execv(file, argv); / / where argv is a vector argv[0] ... argv[x], 0 / last vector element must be 0 / environment passed automatically .globl _execv, .globl cerror, _environ .exece = 59. _execv: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov _environ,0f+4 sys 0; 9f jmp cerror .data 9: sys .exece; 0:..; ..; .. 'Skݠ! Lii ((/ C library -- execle / execle(file, arg1, arg2, ... , 0, env); / .globl _execle .globl cerror .exece = 59. _execle: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov r5,r0 add $6,r0 mov r0,0f+2 1: tst (r0)+ bne 1b mov (r0),0f+4 sys 0; 9f jmp cerror .data 9: sys .exece; 0:..; ..; .. 'Ukͣ3 Lii / C library -- execl / execl(file, arg1, arg2, ... , 0); / / environment automatically passed .globl _execl .globl cerror, _environ .exece = 59. _execl: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov r5,r0 add $6,r0 mov r0,0f+2 mov _environ,0f+4 sys 0; 9f jmp cerror .data 9: sys .exece; 0:..; ..; .. 'Wkߦ" Lii / C library -- dup / f = dup(of [ ,nf]) / f == -1 for error .globl _dup,_dup2 .globl cerror .dup = 41. _dup2: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 bis $100,r0 br 1f _dup: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 1: mov 6(r5),r1 sys .dup bec 1f jmp cerror 1: mov (sp)+,r5 rts pc 'Yk  Lii / C library -- creat / file = creat(string, mode); / / file == -1 if error .globl _creat .globl cerror .creat = 8. _creat: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .creat; 0:..; .. '[k9 L i i / C library -- close / error = close(file); .globl _close, .globl cerror .close = 6. _close: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys .close bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc ']kﯴ L i i / C library -- chown / error = chown(string, owner); .globl _chown, .globl cerror .chown = 16. _chown: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 8(r5),0f+4 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .chown; 0:..; ..; .. '_k L i i / C library -- chmod / error = chmod(string, mode); .globl _chmod .globl cerror .chmod = 15. _chmod: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .chmod; 0:..; .. 'ak L i i / C library -- chroot / error = chroot(string); .globl _chroot .globl cerror .chroot = 61. _chroot: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .chroot; 0:.. 'ck! L i i / C library -- chdir / error = chdir(string); .globl _chdir .globl cerror .chdir = 12. _chdir: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .chdir; 0:.. 'e kꂼ L i i / C library - alarm .globl _alarm .alarm = 27. _alarm: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys .alarm mov (sp)+,r5 rts pc 'g!k% L i i ((/ C library -- acct / error = acct(string); .globl _acct .globl cerror .acct = 51. _acct: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .acct; 0:.. 'i"kP L i i / access(file, request) / test ability to access file in all indicated ways / 1 - read / 2 - write / 4 - execute .globl _access .globl csv, cret .comm _errno,2 .access = 33. _access: jsr r5,csv mov 4(r5),0f+2 mov 6(r5),0f+4 clr r0 sys 0; 0f .data 0: sys .access; ..; .. .text bec 1f mov r0,_errno mov $-1,r0 1: jmp cret 'k#kIĴ HM i i / C library -- utime / error = utime(string, timev); .globl _utime .globl cerror .utime = 30. _utime: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .utime; 0:..; .. 'm%k^ﴁ  i i / C runtime startoff including monitoring cbufs = 300. exit = 1 write = 4 .globl _monitor .globl _sbrk .globl _main .globl _exit .globl _environ .globl _etext .globl __cleanup .globl countbase start: setd mov 2(sp),r0 clr -2(r0) mov sp,r0 sub $4,sp mov 4(sp),(sp) tst (r0)+ mov r0,2(sp) 1: tst (r0)+ bne 1b cmp r0,*2(sp) blo 1f tst -(r0) 1: mov r0,4(sp) mov r0,_environ mov $_etext,r1 sub $eprol,r1 add $7,r1 ash $-3,r1 bic $!17777,r1 mov $cbufs,-(sp) add $3*[cbufs+1],r1 mov r1,-(sp) asl r1 mov r1,-(sp) jsr pc,_sbrk tst (sp)+ cmp r0,$-1 beq 9f mov r0,-(sp) add $6,r0 mov r0,countbase mov $_etext,-(sp) mov $eprol,-(sp) jsr pc,_monitor add $10.,sp jsr pc,_main cmp (sp)+,(sp)+ mov r0,(sp) jsr pc,_exit 9: mov $2,r0 sys write; 8f; 9f-8f .data; 8: ; 9:.even; .text _exit: mov r5,-(sp) mov sp,r5 jsr pc,__cleanup clr -(sp) jsr pc,_monitor tst (sp)+ mov 4(r5),r0 sys exit eprol: .bss _environ: .=.+2 countbase: .=.+2 .data .=.+2 'p&k%9.  i i / C runtime startoff including monitoring cbufs = 300. exit = 1. write = 4. signal = 48. .globl _monitor .globl _sbrk .globl _main .globl _exit .globl _environ .globl _etext .globl __cleanup .globl countbase .globl fptrap start: sys signal; 4; fptrap setd mov 2(sp),r0 clr -2(r0) mov sp,r0 sub $4,sp mov 4(sp),(sp) tst (r0)+ mov r0,2(sp) 1: tst (r0)+ bne 1b cmp r0,*2(sp) blo 1f tst -(r0) 1: mov r0,4(sp) mov r0,_environ mov $_etext,r1 sub $eprol,r1 add $7,r1 ash $-3,r1 bic $!17777,r1 mov $cbufs,-(sp) add $3*[cbufs+1],r1 mov r1,-(sp) asl r1 mov r1,-(sp) jsr pc,_sbrk tst (sp)+ cmp r0,$-1 beq 9f mov r0,-(sp) add $6,r0 mov r0,countbase mov $_etext,-(sp) mov $eprol,-(sp) jsr pc,_monitor add $10.,sp jsr pc,_main cmp (sp)+,(sp)+ mov r0,(sp) jsr pc,_exit 9: mov $2,r0 sys write; 8f; 9f-8f .data; 8: ; 9:.even; .text _exit: mov r5,-(sp) mov sp,r5 jsr pc,__cleanup clr -(sp) jsr pc,_monitor tst (sp)+ mov 4(r5),r0 sys exit eprol: .bss _environ: .=.+2 countbase: .=.+2 .data .=.+2 't'kO   i i / C runtime startoff / with floating point interpreter .globl fptrap .globl _exit .globl _main .globl _environ exit = 1. signal = 48. start: sys signal; 4; fptrap setd mov 2(sp),r0 clr -2(r0) mov sp,r0 sub $4,sp mov 4(sp),(sp) tst (r0)+ mov r0,2(sp) 1: tst (r0)+ bne 1b cmp r0,*2(sp) blo 1f tst -(r0) 1: mov r0,4(sp) mov r0,_environ jsr pc,_main cmp (sp)+,(sp)+ mov r0,(sp) jsr pc,*$_exit sys exit .bss _environ: .=.+2 .data .=.+2 'v(kp  i i / C runtime startoff .globl _exit, _environ .globl start .globl _main exit = 1. start: setd mov 2(sp),r0 clr -2(r0) mov sp,r0 sub $4,sp mov 4(sp),(sp) tst (r0)+ mov r0,2(sp) 1: tst (r0)+ bne 1b cmp r0,*2(sp) blo 1f tst -(r0) 1: mov r0,4(sp) mov r0,_environ jsr pc,_main cmp (sp)+,(sp)+ mov r0,(sp) jsr pc,*$_exit sys exit .bss _environ: .=.+2 .data .=.+2 / loc 0 for I/D; null ptr points here. 'x*kⴁ jM i i / C register save and restore -- version 7/75 .globl csv .globl cret csv: mov r5,r0 mov sp,r5 mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) jsr pc,(r0) / jsr part is sub $2,sp cret: mov r5,r2 mov -(r2),r4 mov -(r2),r3 mov -(r2),r2 mov r5,sp mov (sp)+,r5 rts pc 'z+k7崁 hM i i / count subroutine calls during profiling .globl mcount .comm countbase,2 mcount: mov (r0),r1 bne 1f mov countbase,r1 beq 2f add $6,countbase mov (sp),(r1)+ mov r1,(r0) 1: inc 2(r1) bne 2f inc (r1) 2: rts pc (('|,k7۴7 eM i i / Long remainder .globl lrem .globl csv, cret lrem: jsr r5,csv mov 10.(r5),r3 sxt r4 bpl 1f neg r3 1: cmp r4,8.(r5) bne hardlrem mov 6.(r5),r2 mov 4.(r5),r1 mov r1,r4 bge 1f neg r1 neg r2 sbc r1 1: clr r0 div r3,r0 mov r1,r0 mov r2,r1 div r3,r0 bvc 1f sub r3,r0 div r3,r0 tst r1 beq 9f add r3,r1 1: tst r4 bpl 9f neg r1 9: sxt r0 jmp cret / The divisor is known to be >= 2^15. Only 16 cycles are / needed to get a remainder. hardlrem: mov 6.(r5),r2 mov 4.(r5),r1 bpl 1f neg r1 neg r2 sbc r1 1: clr r0 mov 8.(r5),r3 bge 1f neg r3 neg 10.(r5) sbc r3 1: mov $16.,r4 1: clc rol r2 rol r1 rol r0 cmp r3,r0 blt 2f bgt 3f cmp 10.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 10.(r5),r1 sbc r0 sub r3,r0 sob r4,1b 1: tst 4(r5) bge 1f neg r0 neg r1 sbc r0 1: jmp cret '-kK bMii / / 32-bit multiplication routine for fixed pt hardware. / Implements * operator / Credit to an unknown author who slipped it under the door. .globl lmul .globl csv, cret lmul: jsr r5,csv mov 6(r5),r2 sxt r1 sub 4(r5),r1 mov 10.(r5),r0 sxt r3 sub 8.(r5),r3 mul r0,r1 mul r2,r3 add r1,r3 mul r2,r0 sub r3,r0 jmp cret '.k㴁 _Mii / Long quotient .globl ldiv .globl csv, cret ldiv: jsr r5,csv mov 10.(r5),r3 sxt r4 bpl 1f neg r3 1: cmp r4,8.(r5) bne hardldiv mov 6.(r5),r2 mov 4.(r5),r1 bge 1f neg r1 neg r2 sbc r1 com r4 1: mov r4,-(sp) clr r0 div r3,r0 mov r0,r4 /high quotient mov r1,r0 mov r2,r1 div r3,r0 bvc 1f sub r3,r0 / this is the clever part div r3,r0 tst r1 sxt r1 add r1,r0 / cannot overflow! 1: mov r0,r1 mov r4,r0 tst (sp)+ bpl 9f neg r0 neg r1 sbc r0 9: jmp cret / The divisor is known to be >= 2^15 so only 16 cycles are needed. hardldiv: clr -(sp) mov 6.(r5),r2 mov 4.(r5),r1 bpl 1f com (sp) neg r1 neg r2 sbc r1 1: clr r0 mov 8.(r5),r3 bge 1f neg r3 neg 10.(r5) sbc r3 com (sp) 1: mov $16.,r4 1: clc rol r2 rol r1 rol r0 cmp r3,r0 bgt 3f blt 2f cmp 10.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 10.(r5),r1 sbc r0 sub r3,r0 inc r2 sob r4,1b 1: mov r2,r1 clr r0 tst (sp)+ beq 1f neg r0 neg r1 sbc r0 1: jmp cret '/k \Mii / C return sequence which / sets errno, returns -1. .globl cerror .comm _errno,2 cerror: mov r0,_errno mov $-1,r0 mov r5,sp mov (sp)+,r5 rts pc '0k촁 YMii / Long remainder .globl alrem .globl csv, cret alrem: jsr r5,csv mov 8.(r5),r3 sxt r4 bpl 1f neg r3 1: cmp r4,6.(r5) bne hardlrem mov 4.(r5),r0 mov 2(r0),r2 mov (r0),r1 mov r1,r4 bge 1f neg r1 neg r2 sbc r1 1: clr r0 div r3,r0 mov r1,r0 mov r2,r1 div r3,r0 bvc 1f sub r3,r0 div r3,r0 tst r1 beq 9f add r3,r1 1: tst r4 bpl 9f neg r1 9: sxt r0 mov 4.(r5),r3 mov r0,(r3)+ mov r1,(r3) jmp cret / The divisor is known to be >= 2^15. Only 16 cycles are / needed to get a remainder. hardlrem: mov 4.(r5),r0 mov 2(r0),r2 mov (r0),r1 bpl 1f neg r1 neg r2 sbc r1 1: clr r0 mov 6.(r5),r3 bge 1f neg r3 neg 8.(r5) sbc r3 1: mov $16.,r4 1: clc rol r2 rol r1 rol r0 cmp r3,r0 blt 2f bgt 3f cmp 8.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 8.(r5),r1 sbc r0 sub r3,r0 sob r4,1b 1: mov 4.(r5),r3 tst (r3) bge 1f neg r0 neg r1 sbc r0 1: mov r0,(r3)+ mov r1,(r3) jmp cret '1ku UMii / / 32-bit multiplication routine for fixed pt hardware. / Implements *= operator / Credit to an unknown author who slipped it under the door. .globl almul .globl csv, cret almul: jsr r5,csv mov 4(r5),r4 mov 2(r4),r2 sxt r1 sub (r4),r1 mov 8.(r5),r0 sxt r3 sub 6.(r5),r3 mul r0,r1 mul r2,r3 add r1,r3 mul r2,r0 sub r3,r0 mov r0,(r4)+ mov r1,(r4) jmp cret '2kIl: RMii / Long quotient .globl aldiv .globl csv, cret aldiv: jsr r5,csv mov 8.(r5),r3 sxt r4 bpl 1f neg r3 1: cmp r4,6.(r5) bne hardldiv mov 4(r5),r1 mov 2(r1),r2 mov (r1),r1 bge 1f neg r1 neg r2 sbc r1 com r4 1: mov r4,-(sp) clr r0 div r3,r0 mov r0,r4 /high quotient mov r1,r0 mov r2,r1 div r3,r0 bvc 1f sub r3,r0 / this is the clever part div r3,r0 tst r1 sxt r1 add r1,r0 / cannot overflow! 1: mov r0,r1 mov r4,r0 tst (sp)+ bpl 9f neg r0 neg r1 sbc r0 9: mov 4.(r5),r2 mov r0,(r2)+ mov r1,(r2) jmp cret / The divisor is known to be >= 2^15 so only 16 cycles are needed. hardldiv: clr -(sp) mov 4.(r5),r0 mov 2(r0),r2 mov (r0),r1 bpl 1f com (sp) neg r1 neg r2 sbc r1 1: clr r0 mov 6.(r5),r3 bge 1f neg r3 neg 8.(r5) sbc r3 com (sp) 1: mov $16.,r4 1: clc rol r2 rol r1 rol r0 cmp r3,r0 bgt 3f blt 2f cmp 8.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 8.(r5),r1 sbc r0 sub r3,r0 inc r2 sob r4,1b 1: mov r2,r1 clr r0 tst (sp)+ beq 1f neg r0 neg r1 sbc r0 1: mov 4.(r5),r2 mov r0,(r2)+ mov r1,(r2) jmp cret '4kaQ QLi ((/* * Concatenate s2 on the end of s1. S1's space must be large enough. * At most n characters are moved. * Return s1. */ char * strncat(s1, s2, n) register char *s1, *s2; register n; { register char *os1; os1 = s1; while (*s1++) ; --s1; while (*s1++ = *s2++) if (--n < 0) { *--s1 = '\0'; break; } return(os1); } '5k^e} Li /* * Returns the number of * non-NULL bytes in string argument. */ strlen(s) register char *s; { register n; n = 0; while (*s++) n++; return(n); } '6kHhz pLi /* * Copy string s2 to s1. s1 must be large enough. * return s1 */ char * strcpy(s1, s2) register char *s1, *s2; { register char *os1; os1 = s1; while (*s1++ = *s2++) ; return(os1); } '7kj>w xLi /* * Copy s2 to s1, truncating or null-padding to always copy n bytes * return s1 */ char * strncpy(s1, s2, n) register char *s1, *s2; { register i; register char *os1; os1 = s1; for (i = 0; i < n; i++) if ((*s1++ = *s2++) == '\0') { while (++i < n) *s1++ = '\0'; return(os1); } return(os1); } '8kint ZLi /* * Compare strings: s1>s2: >0 s1==s2: 0 s1s2: >0 s1==s2: 0 s1= 0 && *s1 == *s2++) if (*s1++ == '\0') return(0); return(n<0 ? 0 : *s1 - *--s2); } ':k?tn ELi /* * Concatenate s2 on the end of s1. S1's space must be large enough. * Return s1. */ char * strcat(s1, s2) register char *s1, *s2; { register char *os1; os1 = s1; while (*s1++) ; --s1; while (*s1++ = *s2++) ; return(os1); } ';kAwk ;Li /* * Return the ptr in sp at which the character c last * appears; NULL if not found */ #define NULL 0 char * rindex(sp, c) register char *sp, c; { register char *r; r = NULL; do { if (*sp == c) r = sp; } while (*sp++); return(r); } '<khzh 1Li /* * Return the ptr in sp at which the character c appears; * NULL if not found */ #define NULL 0 char * index(sp, c) register char *sp, c; { do { if (*sp == c) return(sp); } while (*sp++); return(NULL); } '=kfab e $Lii #include char _ctype_[] = { 0, _C, _C, _C, _C, _C, _C, _C, _C, _C, _S, _S, _S, _S, _S, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _C, _S, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _P, _N, _N, _N, _N, _N, _N, _N, _N, _N, _N, _P, _P, _P, _P, _P, _P, _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _U, _P, _P, _P, _P, _P, _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _L, _P, _P, _P, _P, _C }; (('>k1\_ Lii /* * return offset in file. */ long lseek(); long tell(f) { return(lseek(f, 0L, 1)); } '?kd4\ Kii /* * Swap bytes in 16-bit [half-]words * for going between the 11 and the interdata */ swab(pf, pt, n) register short *pf, *pt; register n; { n /= 2; while (--n >= 0) { *pt++ = (*pf << 8) + ((*pf >> 8) & 0377); pf++; } } '@kҴV Y (/m/m/ #include #include #include static struct mx_args vec; int mpxcall(); mpx(name,mode) char *name; { if (*name) { vec.m_name = name; vec.m_arg[0] = mode; return(mpxcall(MPX, &vec)); } else return(mpxcall(MPXN, 0)); } chan(gr) { vec.m_arg[1] = gr; return(mpxcall(CHAN, &vec)); } join(fd,ch) { vec.m_arg[0] = fd; vec.m_arg[1] = ch; return(mpxcall(JOIN, &vec)); } connect(fd,ch,side) { vec.m_arg[0] = fd; vec.m_arg[1] = ch; vec.m_arg[2] = side; return(mpxcall(CONNECT, &vec)); } attach(sub,gp) { vec.m_arg[0] = sub; vec.m_arg[1] = gp; return(mpxcall(ATTACH, &vec)); } detach(sub,gp) { vec.m_arg[0] = sub; vec.m_arg[1] = gp; return(mpxcall(DETACH, &vec)); } extract(sub,ch,side) { vec.m_arg[0] = sub; vec.m_arg[1] = ch; vec.m_arg[2] = side; return(mpxcall(EXTR, &vec)); } debug(var,val) { vec.m_arg[0] = var; vec.m_arg[1] = val; return(mpxcall(DEBUG, &vec)); } npgrp(ch, gfd, pid) { vec.m_arg[0] = ch; vec.m_arg[1] = gfd; vec.m_arg[2] = pid; return(mpxcall(NPGRP, &vec)); } ckill(index,gp,sig) { vec.m_arg[0] = index; vec.m_arg[1] = gp; vec.m_arg[2] = sig; return(mpxcall(CSIG, &vec)); } 'Ak}=S Kii /* * Writearound to old stty and gtty system calls */ #include stty(fd, ap) struct sgtty *ap; { return(ioctl(fd, TIOCSETP, ap)); } gtty(fd, ap) struct sgtty *ap; { return(ioctl(fd, TIOCGETP, ap)); } 'Bk4 M P Kii / C library -- setjmp, longjmp / longjmp(a,v) / will generate a "return(v)" from / the last call to / setjmp(a) / by restoring sp, r5, pc from `a' / and doing a return. / .globl _setjmp .globl _longjmp .globl csv, cret _setjmp: mov 2(sp),r0 mov r5,(r0)+ mov sp,(r0)+ mov (sp),(r0) clr r0 rts pc _longjmp: jsr r5,csv mov 4(r5),r1 mov 6(r5),r0 bne 1f mov $1,r0 1: cmp (r5),(r1) beq 1f mov (r5),r5 bne 1b / panic -- r2-r4 lost mov (r1)+,r5 mov (r1)+,sp mov (r1),(sp) rts pc 1: mov 4(r1),2(r5) jmp cret 'CkFJ Kii static long randx = 1; srand(x) unsigned x; { randx = x; } rand() { return(((randx = randx*1103515245 + 12345)>>16) & 077777); } 'DkjA D G Kii  static int (*qscmp)(); static int qses; qsort(a, n, es, fc) char *a; unsigned n; int es; int (*fc)(); { qscmp = fc; qses = es; qs1(a, a+n*es); } static qs1(a, l) char *a, *l; { register char *i, *j; register es; char **k; char *lp, *hp; int c; unsigned n; es = qses; start: if((n=l-a) <= es) return; n = es * (n / (2*es)); hp = lp = a+n; i = a; j = l-es; for(;;) { if(i < lp) { if((c = (*qscmp)(i, lp)) == 0) { qsexc(i, lp -= es); continue; } if(c < 0) { i += es; continue; } } loop: if(j > hp) { if((c = (*qscmp)(hp, j)) == 0) { qsexc(hp += es, j); goto loop; } if(c > 0) { if(i == lp) { qstexc(i, hp += es, j); i = lp += es; goto loop; } qsexc(i, j); j -= es; i += es; continue; } j -= es; goto loop; } if(i == lp) { if(lp-a >= l-hp) { qs1(hp+es, l); l = lp; } else { qs1(a, lp); a = hp+es; } goto start; } qstexc(j, lp -= es, i); j = hp -= es; } } static qsexc(i, j) char *i, *j; { register char *ri, *rj, c; int n; n = qses; ri = i; rj = j; do { c = *ri; *ri++ = *rj; *rj++ = c; } while(--n); } static qstexc(i, j, k) char *i, *j, *k; { register char *ri, *rj, *rk; int c; int n; n = qses; ri = i; rj = j; rk = k; do { c = *ri; *ri++ = *rk; *rk++ = *rj; *rj++ = c; } while(--n); } 'Ek 28 ; > Kii ((#include int a_magic[] = {A_MAGIC1, A_MAGIC2, A_MAGIC3, A_MAGIC4, 0}; #define SPACE 100 /* number of symbols read at a time */ nlist(name, list) char *name; struct nlist *list; { register struct nlist *p, *q; int f, n, m, i; long sa; struct exec buf; struct nlist space[SPACE]; for(p = list; p->n_name[0]; p++) { p->n_type = 0; p->n_value = 0; } f = open(name, 0); if(f < 0) return(-1); read(f, (char *)&buf, sizeof buf); for(i=0; a_magic[i]; i++) if(a_magic[i] == buf.a_magic) break; if(a_magic[i] == 0){ close(f); return(-1); } sa = buf.a_text + (long)buf.a_data; if(buf.a_flag != 1) sa *= 2; sa += sizeof buf; lseek(f, sa, 0); n = buf.a_syms; while(n){ m = sizeof space; if(n < sizeof space) m = n; read(f, (char *)space, m); n -= m; for(q = space; (m -= sizeof(struct nlist)) >= 0; q++) { for(p = list; p->n_name[0]; p++) { for(i=0;i<8;i++) if(p->n_name[i] != q->n_name[i]) goto cont; p->n_value = q->n_value; p->n_type = q->n_type; break; cont: ; } } } close(f); return(0); } 'FkS(/ 2 Kii monitor(lowpc, highpc, buf, bufsiz, cntsiz) char *lowpc, *highpc; int *buf, bufsiz; { register o; static *sbuf, ssiz; if (lowpc == 0) { profil(0, 0, 0, 0); o = creat("mon.out", 0666); write(o, sbuf, ssiz<<1); close(o); return; } ssiz = bufsiz; buf[0] = (int)lowpc; buf[1] = (int)highpc; buf[2] = cntsiz; sbuf = buf; buf += 3*(cntsiz+1); bufsiz -= 3*(cntsiz+1); if (bufsiz<=0) return; o = ((highpc - lowpc)>>1) & 077777; if(bufsiz < o) o = ((long)bufsiz<<15) / o; else o = 077777; profil(buf, bufsiz<<1, lowpc, o<<1); } 'Gkζ, Ki / double modf(x, *fp) / double x, *fp; / return fractional part / stash integer part (as double) .globl _modf .globl csv, cret one = 040200 _modf: jsr r5,csv movf 4(r5),fr0 modf $one,fr0 movf fr1,*12.(r5) jmp cret 'Hkig2) Khh char * mktemp(as) char *as; { register char *s; register unsigned pid; register i; pid = getpid(); s = as; while (*s++) ; s--; while (*--s == 'X') { *s = (pid%10) + '0'; pid /= 10; } s++; i = 'a'; while (access(as, 0) != -1) { if (i=='z') return("/"); *s = i++; } return(as); } 'Ik"ky& Khh ldfps = 170100^tst / / ldfps(number); .globl _ldfps _ldfps: mov r5,-(sp) mov sp,r5 ldfps 4(r5) mov (sp)+,r5 rts pc 'JkEt# Kh / double ldexp(number, exp) / double number / -- returns number * 2^exp .globl _ldexp .globl csv, cret ERANGE = 34. _ldexp: jsr r5,csv movf 4(r5),fr0 movei fr0,r0 add 12.(r5),r0 movie r0,fr0 cfcc bvc 1f bmi 2f movf huge,fr0 br 3f 2: movf huge,fr0 negf fr0 3: mov $ERANGE,_errno 1: jmp cret .comm _errno,2 .data huge: 077777; 0177776; 0177777; 0177777 'KkF] Kh /* * Convert longs to and from 3-byte disk addresses */ ltol3(cp, lp, n) char *cp; long *lp; int n; { register i; register char *a, *b; a = cp; b = (char *)lp; for(i=0;i isatty(f) { struct sgttyb ttyb; if (gtty(f, &ttyb) < 0) return(0); return(1); } 'Mk˴ vKh ((/ double frexp(x, ip) / double x; int *ip; / returns a fractional part 1/16 <= |value| < 1 / and stores an exponent so x = value * 2^(*ip) .globl _frexp .globl csv, cret _frexp: jsr r5,csv movf 4(r5),fr0 movei fr0,r0 clr r1 movie r1,fr0 mov r0,*12.(r5) jmp cret 'Nk&} rKhh / fakefp -- fake floating point simulator .globl fptrap signal = 48. rti = 2 fptrap: sub $2,(sp) mov r0,-(sp) sys signal; 4; 0 mov (sp)+,r0 rti 'OkSZ oKhh / / dummy cleanup routine if none supplied by user. .globl __cleanup __cleanup: rts pc 'Pkxv2  aKhh char *sys_errlist[] = { "Error 0", "Not owner", "No such file or directory", "No such process", "Interrupted system call", "I/O error", "No such device or address", "Arg list too long", "Exec format error", "Bad file number", "No children", "No more processes", "Not enough core", "Permission denied", "Bad address", "Block device required", "Mount device busy", "File exists", "Cross-device link", "No such device", "Not a directory", "Is a directory", "Invalid argument", "File table overflow", "Too many open files", "Not a typewriter", "Text file busy", "File too large", "No space left on device", "Illegal seek", "Read-only file system", "Too many links", "Broken pipe", "Argument too large", "Result too large", }; int sys_nerr = { sizeof sys_errlist/sizeof sys_errlist[0] }; 'Qk´c    QKh /* * ecvt converts to decimal * the number of digits is specified by ndigit * decpt is set to the position of the decimal point * sign is set to 0 for positive, 1 for negative */ char *cvt(); #define NDIG 80 char* ecvt(arg, ndigits, decpt, sign) double arg; int ndigits, *decpt, *sign; { return(cvt(arg, ndigits, decpt, sign, 1)); } char* fcvt(arg, ndigits, decpt, sign) double arg; int ndigits, *decpt, *sign; { return(cvt(arg, ndigits, decpt, sign, 0)); } static char* cvt(arg, ndigits, decpt, sign, eflag) double arg; int ndigits, *decpt, *sign; { register int r2; double fi, fj; register char *p, *p1; static char buf[NDIG]; double modf(); if (ndigits<0) ndigits = 0; if (ndigits>=NDIG-1) ndigits = NDIG-2; r2 = 0; *sign = 0; p = &buf[0]; if (arg<0) { *sign = 1; arg = -arg; } arg = modf(arg, &fi); p1 = &buf[NDIG]; /* * Do integer part */ if (fi != 0) { p1 = &buf[NDIG]; while (fi != 0) { fj = modf(fi/10, &fi); *--p1 = (int)((fj+.03)*10) + '0'; r2++; } while (p1 < &buf[NDIG]) *p++ = *p1++; } else if (arg > 0) { while ((fj = arg*10) < 1) { arg = fj; r2--; } } p1 = &buf[ndigits]; if (eflag==0) p1 += r2; *decpt = r2; if (p1 < &buf[0]) { buf[0] = '\0'; return(buf); } while (p<=p1 && p<&buf[NDIG]) { arg *= 10; arg = modf(arg, &fj); *p++ = (int)fj + '0'; } if (p1 >= &buf[NDIG]) { buf[NDIG-1] = '\0'; return(buf); } p = p1; *p1 += 5; while (*p1 > '9') { *p1 = '0'; if (p1>buf) ++*--p1; else { *p1 = '1'; (*decpt)++; if (eflag==0) { if (p>buf) *p = '0'; p++; } } } *p = '\0'; return(buf); } 'Rkﴁ; @Kh #ifdef debug #define ASSERT(p) if(!(p))botch("p");else botch(s) char *s; { printf("assertion botched: %s\n",s); abort(); } #else #define ASSERT(p) #endif /* avoid break bug */ #ifdef pdp11 #define GRANULE 64 #else #define GRANULE 0 #endif /* C storage allocator * circular first-fit strategy * works with noncontiguous, but monotonically linked, arena * each block is preceded by a ptr to the (pointer of) * the next following block * blocks are exact number of words long * aligned to the data type requirements of ALIGN * pointers to blocks must have BUSY bit 0 * bit in ptr is 1 for busy, 0 for idle * gaps in arena are merely noted as busy blocks * last block of arena (pointed to by alloct) is empty and * has a pointer to first * idle blocks are coalesced during space search * * a different implementation may need to redefine * ALIGN, NALIGN, BLOCK, BUSY, INT * where INT is integer type to which a pointer can be cast */ #define INT int #define ALIGN int #define NALIGN 1 #define WORD sizeof(union store) #define BLOCK 1024 /* a multiple of WORD*/ #define BUSY 1 #define NULL 0 #define testbusy(p) ((INT)(p)&BUSY) #define setbusy(p) (union store *)((INT)(p)|BUSY) #define clearbusy(p) (union store *)((INT)(p)&~BUSY) union store { union store *ptr; ALIGN dummy[NALIGN]; int calloc; /*calloc clears an array of integers*/ }; static union store allocs[2]; /*initial arena*/ static union store *allocp; /*search ptr*/ static union store *alloct; /*arena top*/ static union store *allocx; /*for benefit of realloc*/ char *sbrk(); char * malloc(nbytes) unsigned nbytes; { register union store *p, *q; register nw; static temp; /*coroutines assume no auto*/ if(allocs[0].ptr==0) { /*first time*/ allocs[0].ptr = setbusy(&allocs[1]); allocs[1].ptr = setbusy(&allocs[0]); alloct = &allocs[1]; allocp = &allocs[0]; } nw = (nbytes+WORD+WORD-1)/WORD; ASSERT(allocp>=allocs && allocp<=alloct); ASSERT(allock()); for(p=allocp; ; ) { for(temp=0; ; ) { if(!testbusy(p->ptr)) { while(!testbusy((q=p->ptr)->ptr)) { ASSERT(q>p&&qptr = q->ptr; } if(q>=p+nw && p+nw>=p) goto found; } q = p; p = clearbusy(p->ptr); if(p>q) ASSERT(p<=alloct); else if(q!=alloct || p!=allocs) { ASSERT(q==alloct&&p==allocs); return(NULL); } else if(++temp>1) break; } temp = ((nw+BLOCK/WORD)/(BLOCK/WORD))*(BLOCK/WORD); q = (union store *)sbrk(0); if(q+temp+GRANULE < q) { return(NULL); } q = (union store *)sbrk(temp*WORD); if((INT)q == -1) { return(NULL); } ASSERT(q>alloct); alloct->ptr = q; if(q!=alloct+1) alloct->ptr = setbusy(alloct->ptr); alloct = q->ptr = q+temp-1; alloct->ptr = setbusy(allocs); } found: allocp = p + nw; ASSERT(allocp<=alloct); if(q>allocp) { allocx = allocp->ptr; allocp->ptr = p->ptr; } p->ptr = setbusy(allocp); return((char *)(p+1)); } /* freeing strategy tuned for LIFO allocation */ free(ap) register char *ap; { register union store *p = (union store *)ap; ASSERT(p>clearbusy(allocs[((1].ptr)&&p<=alloct); ASSERT(allock()); allocp = --p; ASSERT(testbusy(p->ptr)); p->ptr = clearbusy(p->ptr); ASSERT(p->ptr > allocp && p->ptr <= alloct); } /* realloc(p, nbytes) reallocates a block obtained from malloc() * and freed since last call of malloc() * to have new size nbytes, and old content * returns new location, or 0 on failure */ char * realloc(p, nbytes) register union store *p; unsigned nbytes; { register union store *q; union store *s, *t; register unsigned nw; unsigned onw; if(testbusy(p[-1].ptr)) free((char *)p); onw = p[-1].ptr - p; q = (union store *)malloc(nbytes); if(q==NULL || q==p) return((char *)q); s = p; t = q; nw = (nbytes+WORD-1)/WORD; if(nw=p) (q+(q+nw-p))->ptr = allocx; return((char *)q); } #ifdef debug allock() { #ifdef longdebug register union store *p; int x; x = 0; for(p= &allocs[0]; clearbusy(p->ptr) > p; p=clearbusy(p->ptr)) { if(p==allocp) x++; } ASSERT(p==alloct); return(x==1|p==allocp); #else return(1); #endif } #endif 'Sk1 4Kh /* calloc - allocate and clear memory block */ #define CHARPERINT (sizeof(int)/sizeof(char)) #define NULL 0 char * calloc(num, size) unsigned num, size; { register char *mp; char *malloc(); register int *q; register m; num *= size; mp = malloc(num); if(mp == NULL) return(NULL); q = (int *) mp; m = (num+CHARPERINT-1)/CHARPERINT; while(--m>=0) *q++ = 0; return(mp); } cfree(p, num, size) char *p; unsigned num, size; { free(p); } 'Tk2 !Khh /* * This routine converts time as follows. * The epoch is 0000 Jan 1 1970 GMT. * The argument time is in seconds since then. * The localtime(t) entry returns a pointer to an array * containing * seconds (0-59) * minutes (0-59) * hours (0-23) * day of month (1-31) * month (0-11) * year-1970 * weekday (0-6, Sun is 0) * day of the year * daylight savings flag * * The routine calls the system to determine the local * timezone and whether Daylight Saving Time is permitted locally. * (DST is then determined by the current US standard rules) * There is a table that accounts for the peculiarities * undergone by daylight time in 1974-1975. * * The routine does not work * in Saudi Arabia which runs on Solar time. * * asctime(tvec)) * where tvec is produced by localtime * returns a ptr to a character string * that has the ascii time in the form * Thu Jan 01 00:00:00 1970n0\\ * 01234567890123456789012345 * 0 1 2 * * ctime(t) just calls localtime, then asctime. */ #include #include #include static char cbuf[26]; static int dmsize[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* * The following table is used for 1974 and 1975 and * gives the day number of the first day after the Sunday of the * change. */ static struct { int daylb; int dayle; } daytab[] = { 5, 333, /* 1974: Jan 6 - last Sun. in Nov */ 58, 303, /* 1975: Last Sun. in Feb - last Sun in Oct */ }; struct tm *gmtime(); char *ct_numb(); struct tm *localtime(); char *ctime(); char *ct_num(); char *asctime(); char * ctime(t) long *t; { return(asctime(localtime(t))); } struct tm * localtime(tim) long *tim; { register int dayno; register struct tm *ct; register daylbegin, daylend; long copyt; struct timeb systime; ftime(&systime); copyt = *tim - (long)systime.timezone*60; ct = gmtime(©t); dayno = ct->tm_yday; daylbegin = 119; /* last Sun in Apr */ daylend = 303; /* Last Sun in Oct */ if (ct->tm_year==74 || ct->tm_year==75) { daylbegin = daytab[ct->tm_year-74].daylb; daylend = daytab[ct->tm_year-74].dayle; } daylbegin = sunday(ct, daylbegin); daylend = sunday(ct, daylend); if (systime.dstflag && (dayno>daylbegin || (dayno==daylbegin && ct->tm_hour>=2)) && (daynotm_hour<1))) { copyt += 1*60*60; ct = gmtime(©t); ct->tm_isdst++; } return(ct); } /* * The argument is a 0-origin day number. * The value is the day number of the first * Sunday on or after the day. */ static sunday(t, d) register struct tm *t; register int d; { if (d >= 58) d += dysize(t->tm_year) - 365; return(d - (d - t->tm_yday + t->tm_wday + 700) % 7); } struct tm * gmtime(tim) long *tim; { register int d0, d1; long hms, day; register int *tp; static struct tm xtime; /* * break initial number into days */ hms = *tim % 86400; day = *tim / 86400; if (hms<0) { hms += 86400; day -= 1; } tp = (int *)&xtime; /* * generate hours:minutes:seconds */ *tp++ = hms%60; d1 = hms/60; *tp++ = d1%60; d1 /= 60; *tp++ = d1; /* * day is the day number. * generate day of the week. * The addend is 4 mod 7 (1/1/1970 was Thursday) */ xtime.tm_wday = (day+7340036)%7; /* * year number */ if (day>=0) for(d1=70; day >= dysize(d1); d1++) day -= dysize(d1); else for (d1=70; day<0; d1--) day += dysize(d1-1); xtime.tm_year = d1; xtime.tm_yday = d0 = day; /* * generate month */ if (dysize(d1)==366) dmsize[1] = 29; for(d1=0; d0 >= dmsize[d1]; d1++) d0 -= dmsize[d1]; dmsize[1] = 28; *tp++ = d0+1; *tp++ = d1; xtime.tm_isdst = 0; return(&xtime); } char * asctime(t) struct tm *t; { register char *cp, *ncp; register int *tp; cp = cbuf; for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;); ncp = &"SunMonTueWedThuFriSat"[3*t->tm_wday]; cp = cbuf; *cp++ = *ncp++; *cp++ = *ncp++; *cp++ = *ncp++; cp++; tp = &t->tm_mon; ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3]; *cp++ = *ncp++; *cp++ = *ncp++; *cp++ = *ncp++; cp = ct_numb(cp, *--tp); cp = ct_numb(cp, *--tp+100); cp = ct_numb(cp, *--tp+100); cp = ct_numb(cp, *--tp+100); if (t->tm_year>=100) { cp[1] = '2'; cp[2] = '0'; } cp += 2; cp = ct_numb(cp, t->tm_year+100); return(cbuf); } dysize(y) { if((y%4) == 0) return(366); return(365); } static char * ct_numb(cp, n) register char *cp; { cp++; if (n>=10) *cp++ = (n/10)%10 + '0'; else *cp++ = ' '; *cp++ = n%10 + '0'; return(cp); } 'Uk JQEQE /* * This program implements the * Proposed Federal Information Processing * Data Encryption Standard. * See Federal Register, March 17, 1975 (40FR12134) */ /* * Initial permutation, */ static char IP[] = { 58,50,42,34,26,18,10, 2, 60,52,44,36,28,20,12, 4, 62,54,46,38,30,22,14, 6, 64,56,48,40,32,24,16, 8, 57,49,41,33,25,17, 9, 1, 59,51,43,35,27,19,11, 3, 61,53,45,37,29,21,13, 5, 63,55,47,39,31,23,15, 7, }; /* * Final permutation, FP = IP^(-1) */ static char FP[] = { 40, 8,48,16,56,24,64,32, 39, 7,47,15,55,23,63,31, 38, 6,46,14,54,22,62,30, 37, 5,45,13,53,21,61,29, 36, 4,44,12,52,20,60,28, 35, 3,43,11,51,19,59,27, 34, 2,42,10,50,18,58,26, 33, 1,41, 9,49,17,57,25, }; /* * Permuted-choice 1 from the key bits * to yield C and D. * Note that bits 8,16... are left out: * They are intended for a parity check. */ static char PC1_C[] = { 57,49,41,33,25,17, 9, 1,58,50,42,34,26,18, 10, 2,59,51,43,35,27, 19,11, 3,60,52,44,36, }; static char PC1_D[] { 63,55,47,39,31,23,15, 7,62,54,46,38,30,22, 14, 6,61,53,45,37,29, 21,13, 5,28,20,12, 4, }; /* * Sequence of shifts used for the key schedule. */ static char shifts[] = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1, }; /* * Permuted-choice 2, to pick out the bits from * the CD array that generate the key schedule. */ static char PC2_C[] = { 14,17,11,24, 1, 5, 3,28,15, 6,21,10, 23,19,12, 4,26, 8, 16, 7,27,20,13, 2, }; static char PC2_D[] = { 41,52,31,37,47,55, 30,40,51,45,33,48, 44,49,39,56,34,53, 46,42,50,36,29,32, }; /* * The C and D arrays used to calculate the key schedule. */ static char C[28]; static char D[28]; /* * The key schedule. * Generated from the key. */ static char KS[16][48]; /* * Set up the key schedule from the key. */ setkey(key) char *key; { register i, j, k; int t; /* * First, generate C and D by permuting * the key. The low order bit of each * 8-bit char is not used, so C and D are only 28 * bits apiece. */ for (i=0; i<28; i++) { C[i] = key[PC1_C[i]-1]; D[i] = key[PC1_D[i]-1]; }(( /* * To generate Ki, rotate C and D according * to schedule and pick up a permutation * using PC2. */ for (i=0; i<16; i++) { /* * rotate. */ for (k=0; k>3)&01; f[t+1] = (k>>2)&01; f[t+2] = (k>>1)&01; f[t+3] = (k>>0)&01; } /* * The new R is L ^ f(R, K). * The f here has to be permuted first, though. */ for (j=0; j<32; j++) R[j] = L[j] ^ f[P[j]-1]; /* * Finally, the new L (the original R) * is copied back. */ for (j=0; j<32; j++) L[j] = tempL[j]; } /* * The output L and R are reversed. */ for (j=0; j<32; j++) { t = L[j]; L[j] = R[j]; R[j] = t; } /* * The final output * gets the inverse permutation of the very original. */ for (j=0; j<64; j++) block[j] = L[FP[j]-1]; } char * crypt(pw,salt) char *pw; char *salt; { register i, j, c; int temp; static char block[66], iobuf[16]; for(i=0; i<66; i++) block[i] = 0; for(i=0; (c= *pw) && i<64; pw++){ for(j=0; j<7; j++, i++) block[i] = (c>>(6-j)) & 01; i++; } setkey(block); for(i=0; i<66; i++) block[i] = 0; for(i=0;i<48;i++) E[i] = e[i]; for(i=0;i<2;i++){ c = *salt++; iobuf[i] = c; if(c>'Z') c -= 6; if(c>'9') c -= 7; c -= '.'; for(j=0;j<6;j++){ if((c>>j) & 01){ temp = E[6*i+j]; E[6*i+j] = E[6*i+j+24]; E[6*i+j+24] = temp; } } } for(i=0; i<25; i++) encrypt(block,0); for(i=0; i<11; i++){ c = 0; for(j=0; j<6; j++){ c <<= 1; c |= block[6*i+j]; } c += '.'; if(c>'9') c += 7; if(c>'Z') c += 6; iobuf[i+2] = c; } iobuf[i+2] = 0; if(iobuf[1]==0) iobuf[1] = iobuf[0]; return(iobuf); } 'Vk Jhh long atol(p) register char *p; { long n; register int f; n = 0; f = 0; for(;;p++) { switch(*p) { case ' ': case '\t': continue; case '-': f++; case '+': p++; } break; } while(*p >= '0' && *p <= '9') n = n*10 + *p++ - '0'; return(f? -n: n); } 'Wkڴ Jhh atoi(p) register char *p; { register int n; register int f; n = 0; f = 0; for(;;p++) { switch(*p) { case ' ': case '\t': continue; case '-': f++; case '+': p++; } break; } while(*p >= '0' && *p <= '9') n = n*10 + *p++ - '0'; return(f? -n: n); } 'Xkf JBEBE /* C library - ascii to floating */ #include #include double atof(p) register char *p; { register c; double fl, flexp, exp5; double big = 72057594037927936.; /*2^56*/ double ldexp(); int nd; register eexp, exp, neg, negexp, bexp; neg = 1; while((c = *p++) == ' ') ; if (c == '-') neg = -1; else if (c=='+') ; else --p; exp = 0; fl = 0; nd = 0; while ((c = *p++), isdigit(c)) { if (fl>= 1; if (exp==0) break; exp5 *= exp5; } if (negexp<0) fl /= flexp; else fl *= flexp; fl = ldexp(fl, negexp*bexp); if (neg<0) fl = -fl; return(fl); } (('YkF=7 Jh abs(arg) { if(arg < 0) arg = -arg; return(arg); } ' Zk괁h Jhh / C library -- abort .globl _abort iot = 4 .globl csv,cret _abort: jsr r5,csv iot clr r0 jmp cret ' [kഁ Jhh /* * ttyname(f): return "/dev/ttyXX" which the the name of the * tty belonging to file f. * NULL if it is not a tty */ #define NULL 0 #include #include #include static char dev[] = "/dev/"; char *strcpy(); char *strcat(); char * ttyname(f) { struct stat fsb; struct stat tsb; struct direct db; static char rbuf[32]; register df; if (isatty(f)==0) return(NULL); if (fstat(f, &fsb) < 0) return(NULL); if ((fsb.st_mode&S_IFMT) != S_IFCHR) return(NULL); if ((df = open(dev, 0)) < 0) return(NULL); while (read(df, (char *)&db, sizeof(db)) == sizeof(db)) { if (db.d_ino == 0) continue; if (db.d_ino != fsb.st_ino) continue; strcpy(rbuf, dev); strcat(rbuf, db.d_name); if (stat(rbuf, &tsb) < 0) continue; if (tsb.st_dev==fsb.st_dev && tsb.st_ino==fsb.st_ino) { close(df); return(rbuf); } } close(df); return(NULL); } '\k紁 Jhh /* * Return the number of the slot in the utmp file * corresponding to the current user: try for file 0, 1, 2. * Definition is the line number in the /etc/ttys file. */ char *ttyname(); char *getttys(); char *rindex(); static char ttys[] = "/etc/ttys"; #define NULL 0 ttyslot() { register char *tp, *p; register s, tf; if ((tp=ttyname(0))==NULL && (tp=ttyname(1))==NULL && (tp=ttyname(2))==NULL) return(0); if ((p = rindex(tp, '/')) == NULL) p = tp; else p++; if ((tf=open(ttys, 0)) < 0) return(0); s = 0; while (tp = getttys(tf)) { s++; if (strcmp(p, tp)==0) { close(tf); return(s); } } close(tf); return(0); } static char * getttys(f) { static char line[32]; register char *lp; lp = line; for (;;) { if (read(f, lp, 1) != 1) return(NULL); if (*lp =='\n') { *lp = '\0'; return(line+2); } if (lp >= &line[32]) return(line+2); lp++; } } ']kU Jhh #include #include static jmp_buf jmp; sleep(n) unsigned n; { int sleepx(); unsigned altime; int (*alsig)() = SIG_DFL; if (n==0) return; altime = alarm(1000); /* time to maneuver */ if (setjmp(jmp)) { signal(SIGALRM, alsig); alarm(altime); return; } if (altime) { if (altime > n) altime -= n; else { n = altime; altime = 1; } } alsig = signal(SIGALRM, sleepx); alarm(n); for(;;) pause(); /*NOTREACHED*/ } static sleepx() { longjmp(jmp, 1); } '^kX |Jhh /* * Print the error indicated * in the cerror cell. */ int errno; int sys_nerr; char *sys_errlist[]; perror(s) char *s; { register char *c; register n; c = "Unknown error"; if(errno < sys_nerr) c = sys_errlist[errno]; n = strlen(s); if(n) { write(2, s, n); write(2, ": ", 2); } write(2, c, strlen(c)); write(2, "\n", 1); } '_kP pJh #include static char UTMP[] = "/etc/utmp"; static struct utmp ubuf; char * getlogin() { register me, uf; register char *cp; if( !(me = ttyslot()) ) return(0); if( (uf = open( UTMP, 0 )) < 0 ) return(0); lseek( uf, (long)(me*sizeof(ubuf)), 0 ); if (read(uf, (char *)&ubuf, sizeof(ubuf)) != sizeof(ubuf)) return(0); close(uf); ubuf.ut_name[8] = ' '; for (cp=ubuf.ut_name; *cp++!=' ';) ; *--cp = '\0'; return( ubuf.ut_name ); } '`kѴ cJhh /* * getenv(name) * returns ptr to value associated with name, if any, else NULL */ #define NULL 0 extern char **environ; char *nvmatch(); char * getenv(name) register char *name; { register char **p = environ; register char *v; while (*p != NULL) if ((v = nvmatch(name, *p++)) != NULL) return(v); return(NULL); } /* * s1 is either name, or name=value * s2 is name=value * if names match, return value of s2, else NULL * used for environment searching: see getenv */ static char * nvmatch(s1, s2) register char *s1, *s2; { while (*s1 == *s2++) if (*s1++ == '=') return(s2); if (*s1 == '\0' && *(s2-1) == '=') return(s2); return(NULL); } 'akj(b KJhh ((/* * execlp(name, arg,...,0) (like execl, but does path search) * execvp(name, argv) (like execv, but does path search) */ #include #define NULL 0 static char shell[] = "/bin/sh"; char *execat(), *getenv(); extern errno; execlp(name, argv) char *name, *argv; { return(execvp(name, &argv)); } execvp(name, argv) char *name, **argv; { char *pathstr; register char *cp; char fname[128]; char *newargs[256]; int i; register unsigned etxtbsy = 1; register eacces = 0; if ((pathstr = getenv("PATH")) == NULL) pathstr = ":/bin:/usr/bin"; cp = index(name, '/')? "": pathstr; do { cp = execat(cp, name, fname); retry: execv(fname, argv); switch(errno) { case ENOEXEC: newargs[0] = "sh"; newargs[1] = fname; for (i=1; newargs[i+1]=argv[i]; i++) { if (i>=254) { errno = E2BIG; return(-1); } } execv(shell, newargs); return(-1); case ETXTBSY: if (++etxtbsy > 5) return(-1); sleep(etxtbsy); goto retry; case EACCES: eacces++; break; case ENOMEM: case E2BIG: return(-1); } } while (cp); if (eacces) errno = EACCES; return(-1); } static char * execat(s1, s2, si) register char *s1, *s2; char *si; { register char *s; s = si; while (*s1 && *s1 != ':' && *s1 != '-') *s++ = *s1++; if (si != s) *s++ = '/'; while (*s2) *s++ = *s2++; *s = '\0'; return(*s1? ++s1: 0); } 'bk봁 EJhh / C library -- exit / exit(code) / code is return in r0 to system .globl _exit .globl __cleanup exit = 1 _exit: mov r5,-(sp) mov sp,r5 jsr pc,__cleanup mov 4(r5),r0 sys exit '!ckᴁ Jhh /* * The arguments are the number of minutes of time * you are westward from Greenwich and whether DST is in effect. * It returns a string * giving the name of the local timezone. * * Sorry, I don't know all the names. */ static struct zone { int offset; char *stdzone; char *dlzone; } zonetab[] = { 4*60, "AST", "ADT", /* Atlantic */ 5*60, "EST", "EDT", /* Eastern */ 6*60, "CST", "CDT", /* Central */ 7*60, "MST", "MDT", /* Mountain */ 8*60, "PST", "PDT", /* Pacific */ 0, "GMT", 0, /* Greenwich */ -1 }; char *timezone(zone, dst) { register struct zone *zp; static char czone[10]; char *sign; for (zp=zonetab; zp->offset!=-1; zp++) if (zp->offset==zone) { if (dst && zp->dlzone) return(zp->dlzone); if (!dst && zp->stdzone) return(zp->stdzone); } if (zone<0) { zone = -zone; sign = "+"; } else sign = "-"; sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); return(czone); } '$gkI#8 &&& # /* C compiler * * * * Called from cc: * c0 source temp1 temp2 [ profileflag ] * temp1 gets most of the intermediate code; * strings are put on temp2, which c1 reads after temp1. */ #include "c0.h" int isn 1; int peeksym -1; int line 1; struct tnode funcblk { NAME, 0, NULL, NULL, NULL, NULL }; struct kwtab { char *kwname; int kwval; } kwtab[] { "int", INT, "char", CHAR, "float", FLOAT, "double", DOUBLE, "struct", STRUCT, "long", LONG, "unsigned", UNSIGN, "union", UNION, "short", INT, "auto", AUTO, "extern", EXTERN, "static", STATIC, "register", REG, "goto", GOTO, "return", RETURN, "if", IF, "while", WHILE, "else", ELSE, "switch", SWITCH, "case", CASE, "break", BREAK, "continue", CONTIN, "do", DO, "default", DEFAULT, "for", FOR, "sizeof", SIZEOF, "typedef", TYPEDEF, "enum", ENUM, 0, 0, }; main(argc, argv) char *argv[]; { register char *sp; register i; register struct kwtab *ip; if(argc<4) { error("Arg count"); exit(1); } if (freopen(argv[1], "r", stdin)==NULL) { error("Can't find %s", argv[1]); exit(1); } if (freopen(argv[2], "w", stdout)==NULL || (sbufp=fopen(argv[3],"w"))==NULL) { error("Can't create temp"); exit(1); } setbuf(sbufp, sbuf); if (argc>4) proflg++; /* * The hash table locations of the keywords * are marked; if an identifier hashes to one of * these locations, it is looked up in in the keyword * table first. */ for (ip=kwtab; (sp = ip->kwname); ip++) { i = 0; while (*sp) i =+ *sp++; hshtab[i%HSHSIZ].hflag = FKEYW; } coremax = funcbase = curbase = sbrk(0); while(!eof) extdef(); outcode("B", EOFC); strflg++; outcode("B", EOFC); exit(nerror!=0); } /* * Look up the identifier in symbuf in the symbol table. * If it hashes to the same spot as a keyword, try the keyword table * first. An initial "." is ignored in the hash. * Return is a ptr to the symbol table entry. */ lookup() { int ihash; register struct hshtab *rp; register char *sp, *np; ihash = 0; sp = symbuf; while (sphflag&FKEYW) if (findkw()) return(KEYW); while (*(np = rp->name)) { for (sp=symbuf; sphflag&FMOS)) goto no; csym = rp; return(NAME); no: if (++rp >= &hshtab[HSHSIZ]) rp = hshtab; } if(++hshused >= HSHSIZ) { error("Symbol table overflow"); exit(1); } rp->hclass = 0; rp->htype = 0; rp->hoffset = 0; rp->subsp = NULL; rp->strp = NULL; rp->hpdown = NULL; rp->hblklev = blklev; rp->hflag =| mossym; sp = symbuf; for (np=rp->name; spkwname); kp++) { p1 = wp; while (*p1 == *p2++) if (*p1++ == '\0') { cval = kp->kwval; return(1); } } *wp = firstc; return(0); } /* * Return the next symbol from the input. * peeksym is a pushed-back symbol, peekc is a pushed-back * character (after peeksym). * mosflg means that the next symbol, if an identifier, * is a member of structure or a structure tag, and it * gets a "." prepended to it to distinguish * it from other identifiers. */ symbol() { register c; register char *sp; register tline; if (peeksym>=0) { c = peeksym; peeksym = -1; if (c==NAME) mosflg = 0; return(c); } if (peekc) { c = peekc; peekc = 0; } else if (eof) return(EOFC); else c = getchar(); loop: if (c==EOF) { eof++; return(EOFC); } switch(ctab[c]) { case SHARP: if ((c=symbol())!=CON) { error("Illegal #"); return(c); } tline = cval; while (ctab[peekc]==SPACE) peekc = getchar(); if (peekc=='"') { sp = filename; while ((c = mapch('"')) >= 0) *sp++ = c; *sp++ = 0; peekc = getchar(); } if (peekc != '\n') { error("Illegal #"); while (getchar()!='\n' && eof==0) ; } peekc = 0; line = tline; return(symbol()); case INSERT: /* ignore newlines */ inhdr = 1; c = getchar(); goto loop; case NEWLN: if (!inhdr) line++; inhdr = 0; case SPACE: c = getchar(); goto loop; case PLUS: return(subseq(c,PLUS,INCBEF)); case MINUS: return(subseq(c,subseq('>',MINUS,ARROW),DECBEF)); case ASSIGN: c = spnextchar(); peekc = 0; if (c=='=') return(EQUAL); if (c==' ') return(ASSIGN); if (c=='<' || c=='>') { if (spnextchar() != c) { peeksym = ctab[c]; return(ASSIGN); } peekc = 0; return(c=='<'? ASLSH: ASRSH); } if (ctab[c]>=PLUS && ctab[c]<=EXOR) { if (spnextchar() != ' ' && (c=='-' || c=='&' || c=='*')) { error("Warning: %c= operator assumed", c); nerror--; } c = ctab[c]; return(c+ASPLUS-PLUS); } peekc = c; return(ASSIGN); case LESS: if (subseq(c,0,1)) return(LSHIFT); return(subseq('=',LESS,LESSEQ)); case GREAT: if (subseq(c,0,1)) return(RSHIFT); '/gk#8 &&&(( return(subseq('=',GREAT,GREATEQ)); case EXCLA: return(subseq('=',EXCLA,NEQUAL)); case BSLASH: if (subseq('/', 0, 1)) return(MAX); goto unkn; case DIVIDE: if (subseq('\\', 0, 1)) return(MIN); if (subseq('*',1,0)) return(DIVIDE); while ((c = spnextchar()) != EOFC) { peekc = 0; if (c=='*') { if (spnextchar() == '/') { peekc = 0; c = getchar(); goto loop; } } } eof++; error("Nonterminated comment"); return(0); case PERIOD: case DIGIT: peekc = c; return(getnum()); case DQUOTE: cval = isn++; return(STRING); case SQUOTE: return(getcc()); case LETTER: sp = symbuf; while(ctab[c]==LETTER || ctab[c]==DIGIT) { if (sp='a') c =- 'a'-10; else c =- 'A'-10; lcval =+ c; ndigit++; if (c>maxdigit) maxdigit = c; continue; } if (c=='.') { if (base==16 || sym==FCON) error(nsyn); sym = FCON; base = 10; continue; } if (ndigit==0) { sym = DOT; break; } if ((c=='e'||c=='E') && expseen==0) { expseen++; sym = FCON; if (base==16 || maxdigit>=10) error(nsyn); base = 10; *np++ = c = getchar(); if (c!='+' && c!='-' && ctab[c]!=DIGIT) break; } else if (c=='x' || c=='X') { if (base!=8 || lcval!=0 || sym!=CON) error(nsyn); base = 16; } else if ((c=='l' || c=='L') && sym==CON) { c = getchar(); sym = LCON; break; } else break; } peekc = c; if (maxdigit >= base) error(nsyn); if (sym==FCON) { np[-1] = 0; cval = np-numbuf; return(FCON); } if (sym==CON && (lcval<0 || lcval>MAXINT&&base==10 || (lcval>>1)>MAXINT)) { sym = LCON; } cval = lcval; return(sym); } /* * If the next input character is c, return b and advance. * Otherwise push back the character and return a. */ subseq(c,a,b) { if (spnextchar() != c) return(a); peekc = 0; return(b); } /* * Write out a string, either in-line * or in the string temp file labelled by * lab. */ putstr(lab, amax) { register int c, max; nchstr = 0; max = amax; if (lab) { strflg++; outcode("BNB", LABEL, lab, BDATA); max = 10000; } else outcode("B", BDATA); while ((c = mapch('"')) >= 0) { if (nchstr < max) { nchstr++; if (nchstr%15 == 0) outcode("0B", BDATA); outcode("1N", c & 0377); } } if (nchstr < max) { nchstr++; outcode("10"); } outcode("0"); strflg = 0; } /* * read a single-quoted character constant. * The routine is sensitive to the layout of * characters in a word. */ getcc() { register int c, cc; register char *ccp; char realc; cval = 0; ccp = &cval; cc = 0; while((c=mapch('\'')) >= 0) if(cc++ < LNCPW) *ccp++ = c; if (cc>LNCPW) error("Long character constant"); if (cc==1) { realc = cval; cval = realc; } return(CON); } /* * Read a character in a string or character constant, * detecting the end of the string. * It implements the escape sequences. */ mapch(ac) { register int a, c, n; static mpeek; c = ac; if (a = mpeek) mpeek = 0; else a = getchar(); loop: if (a==c) return(-1); switch(a) { case '\n': case '\0': error("Nonterminated string"); peekc = a; return(-1); case '\\': switch (a=getchar()) { case 't': return('\t'); case 'n': return('\n'); case 'b': return('\b'); case 'f': return('\014'); case 'v': return('\013'); case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': n = 0; c = 0; while (++c<=3 && '0'<=a && a<='7') { n =<< 3; n =+ a-'0'; a = getchar(); } mpeek = a; return(n); case 'r': return('\r'); case '\n': if (!inhdr) line++; inhdr = 0; a = getchar(); goto loop; } } return(a); } /* * Read an expression and return a pointer to its tree. * It's the classical bottom-up, priority-driven scheme. * The initflg prevents the parse from going past * "," or ":" because those delimiters are special * in initializer (and some other) expressions. */ struct tnode * tree() { int *op, opst[SSIZE], *pp, prst[SSIZE]; register int andflg, o; register struct hshtab *cs; int p, ps, os; struct tnode *cmst[CMSIZ]; struct lnode *lcp; curbase = funcbase; op = opst; pp = prst; cp = cmst; *op = SEOF; *pp = 06; andflg = 0; advanc: switch (o=symbol()) { case NAME: cs = csym; if (cs->hclass==TYPEDEF) goto atype; if (cs->hclass==ENUMCON) { *cp++ = cblock(cs->hoffset); goto tand; } if (cs->hclass==0 && cs->htype==0) if(nextchar()=='(') { /* set function */ cs->hclass = EXTERN; cs->htype = FUNC; } else { cs->hclass = STATIC; error("%.8s undefined; func. %.8s", cs->name, funcsym->name); if (initflg) { cs->hclass = EXTERN; error("(Warning only)"); nerror =- 2; } } *cp++ = nblock(cs); goto tand; case FCON: *cp++ = fblock(DOUBLE, copnum(cval)); goto tand; case LCON: cs = gblock(sizeof(*lcp)); cs->op = LCON; cs->type = LONG; cs->lvalue = lcval; *cp++ = cs; goto tand; case CON: *cp++ = cblock(cval); goto tand; /* fake a static char array */ case STRING: putstr(cval, 0); cs = gblock(sizeof(*cs)); cs->hclass = STATIC; cs->hoffset = cval; *cp++ = block(NAME, ARRAY+CHAR, &nchstr, NULL, cs); tand: if(cp>=cmst+CMSIZ) { error("Expression overflow"); exit(1); } if (andflg) goto syntax; andflg = 1; goto advanc; case KEYW: atype: if (*op != LPARN || andflg) goto syntax; peeksym = o; *cp++ = xprtype(gblock(sizeof(*xprtype()))); if ((o=symbol()) != RPARN) goto syntax; o = CAST; --op; --pp; if (*op == SIZEOF) { andflg = 1; *pp = 100; goto advanc; } goto oponst; case INCBEF: case DECBEF: if (andflg) o =+ 2; goto oponst; case COMPL: case EXCLA: case SIZEOF: if (andflg) goto syntax; goto oponst; case MINUS: if (!andflg) o = NEG; andflg = 0; goto oponst; case AND: case TIMES: if (andflg) andflg = 0; else if (o==AND) o = AMPER; else o = STAR; goto oponst; case LPARN: if (andflg) { o = symbol(); if (o==RPARN) o = MCALL; else { peeksym = o; o = CALL; andflg = 0; } } goto oponst; case RBRACK: case RPARN: if (!andflg) goto syntax; goto oponst; case DOT: case ARROW: mosflg++; break; case ASSIGN: if (andflg==0 && PLUS<=*op && *op<=EXOR) { o = *op-- + ASPLUS - PLUS; pp--; goto oponst; } break; } /* binaries */ if (andflg==0) goto syntax; andflg = 0; oponst: p = (opdope[o]>>9) & 077; opon1: ps = *pp; if (p>ps || p==ps && (opdope[o]&RASSOC)!=0) { switch (o) { case INCAFT: case DECAFT: p = 37; break; case LPARN: case LBRACK: case CALL: p = 04; } if (initflg) { if ((o==COMMA && *op!=LPARN && *op!=CALL) || (o==COLON && *op!=QUEST)) { p = 00; goto opon1; } } if (op >= &opst[SSIZE-1]) { error("expression overflow"); exit(1); } *++op = o; *++pp = p; goto advanc; } --pp; switch (os = *op--) { case SEOF: peeksym = o; build(0); /* flush conversions */ return(*--cp); case COMMA: if (*op != CALL) os = SEQNC; break; case CALL: if (o!=RPARN) goto syntax; build(os); goto advanc; case MCALL: *cp++ = NULL; /* empty arglist */ os = CALL; break; case INCBEF: case INCAFT: case DECBEF: case DECAFT: *cp++ = cblock(1); break; case LPARN: if (o!=RPARN) goto syntax; goto advanc; case LBRACK: if (o!=RBRACK) goto syntax; build(LBRACK); goto advanc; } build(os); goto opon1; syntax: error("Expression syntax"); errflush(o); return(0); } struct hshtab * xprtype(atyb) struct hshtab *atyb; { register struct hshtab *tyb; struct hshtab typer; int sc; register char *md, *fb; struct tnode *scp; tyb = atyb; fb = funcbase; md = maxdecl; scp = cp; funcbase = curbase; sc = DEFXTRN; /* will cause error if class mentioned */ getkeywords(&sc, &typer); tyb->hclass = 0; tyb->hblklev = 0; decl1(&sc, &typer, 0, tyb); funcbase = fb; maxdecl = md; cp = scp; tyb->op = ETYPE; return(tyb); } char * copnum(len) { register char *s1, *s2, *s3; s1 = s2 = gblock((len+LNCPW-1) & ~(LNCPW-1)); s3 = numbuf; while (*s2++ = *s3++); return(s1); } 'Chk\n q t w z } z&8i8i ((# /* * C compiler-- first pass header */ #include /* * parameters */ #define LTYPE long /* change to int if no long consts */ #define MAXINT 077777 /* Largest positive short integer */ #define MAXUINT 0177777 /* largest unsigned integer */ #define NCPS 8 /* # chars per symbol */ #define HSHSIZ 400 /* # entries in hash table for names */ #define CMSIZ 40 /* size of expression stack */ #define SSIZE 20 /* size of other expression stack */ #define SWSIZ 230 /* size of switch table */ #define NMEMS 128 /* Number of members in a structure */ #define NBPW 16 /* bits per word, object machine */ #define NBPC 8 /* bits per character, object machine */ #define NCPW 2 /* chars per word, object machine */ #define LNCPW 2 /* chars per word, compiler's machine */ #define STAUTO (-6) /* offset of first auto variable */ #define STARG 4 /* offset of first argument */ /* * # bytes in primitive types */ #define SZCHAR 1 #define SZINT 2 #define SZPTR 2 #define SZFLOAT 4 #define SZLONG 4 #define SZDOUB 8 /* * format of a structure description */ struct str { int ssize; /* structure size */ struct hshtab **memlist; /* member list */ }; /* * For fields, strp points here instead. */ struct field { int flen; /* field width in bits */ int bitoffs; /* shift count */ }; /* * Structure of tree nodes for operators */ struct tnode { int op; /* operator */ int type; /* data type */ int *subsp; /* subscript list (for arrays) */ struct str *strp; /* structure description for structs */ struct tnode *tr1; /* left operand */ struct tnode *tr2; /* right operand */ }; /* * Tree node for constants */ struct cnode { int op; int type; int *subsp; struct str *strp; int value; }; /* * Tree node for long constants */ struct lnode { int op; int type; int *subsp; struct str *strp; LTYPE lvalue; }; /* * tree node for floating * constants */ struct fnode { int op; int type; int *subsp; struct str *strp; char *cstr; }; /* * Structure of namelist */ /* * Pushed-down entry for block structure */ struct phshtab { char hclass; char hflag; int htype; int *hsubsp; struct str *hstrp; int hoffset; struct phshtab *hpdown; char hblklev; }; /* * Top-level namelist */ struct hshtab { char hclass; /* storage class */ char hflag; /* various flags */ int htype; /* type */ int *hsubsp; /* subscript list */ struct str *hstrp; /* structure description */ int hoffset; /* post-allocation location */ struct phshtab *hpdown; /* Pushed-down name in outer block */ char hblklev; /* Block level of definition */ char name[NCPS]; /* ASCII name */ }; /* * Place used to keep dimensions * during declarations */ struct tdim { int rank; int dimens[5]; }; /* * Table for recording switches. */ struct swtab { int swlab; int swval; }; char cvtab[4][4]; char filename[64]; int opdope[]; char ctab[]; char symbuf[NCPS+2]; int hshused; struct hshtab hshtab[HSHSIZ]; struct tnode **cp; int isn; struct swtab swtab[SWSIZ]; struct swtab *swp; int contlab; int brklab; int retlab; int deflab; unsigned autolen; /* make these int if necessary */ unsigned maxauto; /* ... will only cause trouble rarely */ int peeksym; int peekc; int eof; int line; char *funcbase; char *curbase; char *coremax; char *maxdecl; struct hshtab *defsym; struct hshtab *funcsym; int proflg; struct hshtab *csym; int cval; LTYPE lcval; int nchstr; int nerror; struct hshtab **paraml; struct hshtab **parame; int strflg; int mosflg; int initflg; int inhdr; char sbuf[BUFSIZ]; FILE *sbufp; int regvar; int bitoffs; struct tnode funcblk; char cvntab[]; char numbuf[64]; struct hshtab **memlist; int nmems; struct hshtab structhole; int blklev; int mossym; /* operators */ #define EOFC 0 #define NULLOP 218 #define SEMI 1 #define LBRACE 2 #define RBRACE 3 #define LBRACK 4 #define RBRACK 5 #define LPARN 6 #define RPARN 7 #define COLON 8 #define COMMA 9 #define FSEL 10 #define CAST 11 #define ETYPE 12 #define KEYW 19 #define NAME 20 #define CON 21 #define STRING 22 #define FCON 23 #define SFCON 24 #define LCON 25 #define SLCON 26 #define SIZEOF 91 #define INCBEF 30 #define DECBEF 31 #define INCAFT 32 #define DECAFT 33 #define EXCLA 34 #define AMPER 35 #define STAR 36 #define NEG 37 #define COMPL 38 #define DOT 39 #define PLUS 40 #define MINUS 41 #define TIMES 42 #define DIVIDE 43 #define MOD 44 #define RSHIFT 45 #define LSHIFT 46 #define AND 47 #define OR 48 #define EXOR 49 #define ARROW 50 #define ITOF 51 #define FTOI 52 #define LOGAND 53 #define LOGOR 54 #define FTOL 56 #define LTOF 57 #define ITOL 58 #define LTOI 59 #define ITOP 13 #define PTOI 14 #define LTOP 15 #define EQUAL 60 #define NEQUAL 61 #define LESSEQ 62 #define LESS 63 #define GREATEQ 64 #define GREAT 65 #define LESSEQP 66 #define LESSP 67 #define GREATQP 68 #define GREATP 69 #define ASPLUS 70 #define ASMINUS 71 #define ASTIMES 72 #define ASDIV 73 #define ASMOD 74 #define ASRSH 75 #define ASLSH 76 #define ASSAND 77 #define ASOR 78 #define ASXOR 79 #define ASSIGN 80 #define QUEST 90 #define MAX 93 #define MAXP 94 #define MIN 95 #define MINP 96 #define SEQNC 97 #define CALL 100 #defi'NhkPcn q t w z } z&8i8ine MCALL 101 #define JUMP 102 #define CBRANCH 103 #define INIT 104 #define SETREG 105 #define RFORCE 110 #define BRANCH 111 #define LABEL 112 #define NLABEL 113 #define RLABEL 114 #define STRASG 115 #define ITOC 109 #define SEOF 200 /* stack EOF marker in expr compilation */ /* types */ #define INT 0 #define CHAR 1 #define FLOAT 2 #define DOUBLE 3 #define STRUCT 4 #define LONG 6 #define UNSIGN 7 #define UNION 8 /* adjusted later to struct */ #define ALIGN 01 #define TYPE 07 #define BIGTYPE 060000 #define TYLEN 2 #define XTYPE (03<<3) #define PTR 010 #define FUNC 020 #define ARRAY 030 /* storage classes */ #define KEYWC 1 #define DEFXTRN 20 #define TYPEDEF 9 #define MOS 10 #define AUTO 11 #define EXTERN 12 #define STATIC 13 #define REG 14 #define STRTAG 15 #define ARG 16 #define ARG1 17 #define AREG 18 #define MOU 21 #define ENUMTAG 22 #define ENUMCON 24 /* keywords */ #define GOTO 20 #define RETURN 21 #define IF 22 #define WHILE 23 #define ELSE 24 #define SWITCH 25 #define CASE 26 #define BREAK 27 #define CONTIN 28 #define DO 29 #define DEFAULT 30 #define FOR 31 #define ENUM 32 /* characters */ #define BSLASH 117 #define SHARP 118 #define INSERT 119 #define PERIOD 120 #define SQUOTE 121 #define DQUOTE 122 #define LETTER 123 #define DIGIT 124 #define NEWLN 125 #define SPACE 126 #define UNKN 127 /* * Special operators in intermediate code */ #define BDATA 200 #define WDATA 201 #define PROG 202 #define DATA 203 #define BSS 204 #define CSPACE 205 #define SSPACE 206 #define SYMDEF 207 #define SAVE 208 #define RETRN 209 #define EVEN 210 #define PROFIL 212 #define SWIT 213 #define EXPR 214 #define SNAME 215 #define RNAME 216 #define ANAME 217 #define SETSTK 219 #define SINIT 220 /* Flag bits */ #define BINARY 01 #define LVALUE 02 #define RELAT 04 #define ASSGOP 010 #define LWORD 020 #define RWORD 040 #define COMMUTE 0100 #define RASSOC 0200 #define LEAF 0400 /* * Conversion codes */ #define ITF 1 #define ITL 2 #define LTF 3 #define ITP 4 #define PTI 5 #define FTI 6 #define LTI 7 #define FTL 8 #define LTP 9 #define ITC 10 #define XX 15 /* * symbol table flags */ #define FMOS 01 #define FKEYW 04 #define FFIELD 020 #define FINIT 040 #define FLABL 0100 /* * functions */ char *sbrk(); struct tnode *tree(); char *copnum(); struct tnode *convert(); struct tnode *chkfun(); struct tnode *disarray(); struct tnode *block(); struct cnode *cblock(); struct fnode *fblock(); char *gblock(); struct tnode *pexpr(); struct str *strdec(); struct hshtab *xprtype(); struct tnode *nblock(); 'Tkkqse WU7i4 cc -c -O asin.c cc -c -O atan.c cc -c -O exp.c cc -c -O fabs.c cc -c -O floor.c cc -c -O hypot.c cc -c -O j0.c cc -c -O j1.c cc -c -O jn.c cc -c -O log.c cc -c -O pow.c cc -c -O sin.c cc -c -O sinh.c cc -c -O sqrt.c cc -c -O tan.c cc -c -O tanh.c 'Vlkvb `U7i5 ar rc libm.a \ asin.o \ atan.o \ hypot.o \ jn.o \ j0.o \ j1.o \ pow.o \ fabs.o \ log.o \ sin.o \ sqrt.o \ tan.o \ tanh.o \ sinh.o \ exp.o \ floor.o (('Xmk9yx_ PU7i5 /* tanh(arg) computes the hyperbolic tangent of its floating point argument. sinh and cosh are called except for large arguments, which would cause overflow improperly. */ double sinh(), cosh(); double tanh(arg) double arg; { double sign; sign = 1.; if(arg < 0.){ arg = -arg; sign = -1.; } if(arg > 21.) return(sign); return(sign*sinh(arg)/cosh(arg)); } 'Znk!1V Y \ FU6i5 /* floating point tangent A series is used after range reduction. Coefficients are #4285 from Hart & Cheney. (19.74D) */ #include #include int errno; static double invpi = 1.27323954473516268; static double p0 = -0.1306820264754825668269611177e+5; static double p1 = 0.1055970901714953193602353981e+4; static double p2 = -0.1550685653483266376941705728e+2; static double p3 = 0.3422554387241003435328470489e-1; static double p4 = 0.3386638642677172096076369e-4; static double q0 = -0.1663895238947119001851464661e+5; static double q1 = 0.4765751362916483698926655581e+4; static double q2 = -0.1555033164031709966900124574e+3; double tan(arg) double arg; { double modf(); double sign, temp, e, x, xsq; int flag, i; flag = 0; sign = 1.; if(arg < 0.){ arg = -arg; sign = -1.; } arg = arg*invpi; /*overflow?*/ x = modf(arg,&e); i = e; switch(i%4) { case 1: x = 1. - x; flag = 1; break; case 2: sign = - sign; flag = 1; break; case 3: x = 1. - x; sign = - sign; break; case 0: break; } xsq = x*x; temp = ((((p4*xsq+p3)*xsq+p2)*xsq+p1)*xsq+p0)*x; temp = temp/(((1.0*xsq+q2)*xsq+q1)*xsq+q0); if(flag == 1) { if(temp == 0.) { errno = ERANGE; if (sign>0) return(HUGE); return(-HUGE); } temp = 1./temp; } return(sign*temp); } '^okxP S  int errno; double frexp(); double sqrt(arg) double arg; { double x, temp; int exp; int i; if(arg <= 0.) { if(arg < 0.) errno = EDOM; return(0.); } x = frexp(arg,&exp); while(x < 0.5) { x *= 2; exp--; } /* * NOTE * this wont work on 1's comp */ if(exp & 1) { x *= 2; exp--; } temp = 0.5*(1.0+x); while(exp > 60) { temp *= (1L<<30); exp -= 60; } while(exp < -60) { temp /= (1L<<30); exp += 60; } if(exp >= 0) temp *= 1L << (exp/2); else temp /= 1L << (-exp/2); for(i=0; i<=4; i++) temp = 0.5*(temp + arg/temp); return(temp); } 'apkC2)G J M 2U6i5 /* sinh(arg) returns the hyperbolic sine of its floating- point argument. The exponential function is called for arguments greater in magnitude than 0.5. A series is used for arguments smaller in magnitude than 0.5. The coefficients are #2029 from Hart & Cheney. (20.36D) cosh(arg) is computed from the exponential function for all arguments. */ double exp(); static double p0 = -0.6307673640497716991184787251e+6; static double p1 = -0.8991272022039509355398013511e+5; static double p2 = -0.2894211355989563807284660366e+4; static double p3 = -0.2630563213397497062819489e+2; static double q0 = -0.6307673640497716991212077277e+6; static double q1 = 0.1521517378790019070696485176e+5; static double q2 = -0.173678953558233699533450911e+3; double sinh(arg) double arg; { double temp, argsq; register sign; sign = 1; if(arg < 0) { arg = - arg; sign = -1; } if(arg > 21.) { temp = exp(arg)/2; if (sign>0) return(temp); else return(-temp); } if(arg > 0.5) { return(sign*(exp(arg) - exp(-arg))/2); } argsq = arg*arg; temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg; temp /= (((argsq+q2)*argsq+q1)*argsq+q0); return(sign*temp); } double cosh(arg) double arg; { if(arg < 0) arg = - arg; if(arg > 21.) { return(exp(arg)/2); } return((exp(arg) + exp(-arg))/2); } 'eqk'DT> A D 'U6i5 /* C program for floating point sin/cos. Calls modf. There are no error exits. Coefficients are #3370 from Hart & Cheney (18.80D). */ static double twoopi = 0.63661977236758134308; static double p0 = .1357884097877375669092680e8; static double p1 = -.4942908100902844161158627e7; static double p2 = .4401030535375266501944918e6; static double p3 = -.1384727249982452873054457e5; static double p4 = .1459688406665768722226959e3; static double q0 = .8644558652922534429915149e7; static double q1 = .4081792252343299749395779e6; static double q2 = .9463096101538208180571257e4; static double q3 = .1326534908786136358911494e3; double cos(arg) double arg; { double sinus(); if(arg<0) arg = -arg; return(sinus(arg, 1)); } double sin(arg) double arg; { double sinus(); return(sinus(arg, 0)); } static double sinus(arg, quad) double arg; int quad; { double modf(); double e, f; double ysq; double x,y; int k; double temp1, temp2; x = arg; if(x<0) { x = -x; quad = quad + 2; } x = x*twoopi; /*underflow?*/ if(x>32764){ y = modf(x,&e); e = e + quad; modf(0.25*e,&f); quad = e - 4*f; }else{ k = x; y = x - k; quad = (quad + k) & 03; } if (quad & 01) y = 1-y; if(quad > 1) y = -y; ysq = y*y; temp1 = ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y; temp2 = ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0); return(temp1/temp2); } 'irk; U5i5 /* computes a^b. uses log and exp */ #include int errno; double log(), exp(); double pow(arg1,arg2) double arg1, arg2; { double temp; long l; if(arg1 <= 0.) { if(arg1 == 0.) { if(arg2 <= 0.) goto domain; return(0.); } l = arg2; if(l != arg2) goto domain; temp = exp(arg2 * log(-arg1)); if(l & 1) temp = -temp; return(temp); } return(exp(arg2 * log(arg1))); domain: errno = EDOM; return(0.); } 'ksk<]Y2 5 8 U5i5 ((/* log returns the natural logarithm of its floating point argument. The coefficients are #2705 from Hart & Cheney. (19.38D) It calls frexp. */ #include #include int errno; double frexp(); static double log2 = 0.693147180559945309e0; static double ln10 = 2.302585092994045684; static double sqrto2 = 0.707106781186547524e0; static double p0 = -.240139179559210510e2; static double p1 = 0.309572928215376501e2; static double p2 = -.963769093368686593e1; static double p3 = 0.421087371217979714e0; static double q0 = -.120069589779605255e2; static double q1 = 0.194809660700889731e2; static double q2 = -.891110902798312337e1; double log(arg) double arg; { double x,z, zsq, temp; int exp; if(arg <= 0.) { errno = EDOM; return(-HUGE); } x = frexp(arg,&exp); while(x<0.5) { x = x*2; exp = exp-1; } if(xx, a continued fraction approximation to j(n,x)/j(n-1,x) is evaluated and then backward recursion is used starting from a supposed value for j(n,x). The resulting value of j(0,x) is compared with the actual value to correct the supposed value of j(n,x). yn(n,x) is similar in all respects, except that forward recursion is used for all values of n>1. */ #include #include int errno; double jn(n,x) int n; double x;{ int i; double a, b, temp; double xsq, t; double j0(), j1(); if(n<0){ n = -n; x = -x; } if(n==0) return(j0(x)); if(n==1) return(j1(x)); if(x == 0.) return(0.); if(n>x) goto recurs; a = j0(x); b = j1(x); for(i=1;in;i--){ t = xsq/(2.*i - t); } t = x/(2.*n-t); a = t; b = 1; for(i=n-1;i>0;i--){ temp = b; b = (2.*i/x)*b - a; a = temp; } return(t*j0(x)/b); } double yn(n,x) int n; double x;{ int i; int sign; double a, b, temp; double y0(), y1(); if (x <= 0) { errno = EDOM; return(-HUGE); } sign = 1; if(n<0){ n = -n; if(n%2 == 1) sign = -1; } if(n==0) return(y0(x)); if(n==1) return(sign*y1(x)); a = y0(x); b = y1(x); for(i=1;i #include int errno; static double pzero, qzero; static double tpi = .6366197723675813430755350535e0; static double pio4 = .7853981633974483096156608458e0; static double p1[] = { 0.581199354001606143928050809e21, -.6672106568924916298020941484e20, 0.2316433580634002297931815435e19, -.3588817569910106050743641413e17, 0.2908795263834775409737601689e15, -.1322983480332126453125473247e13, 0.3413234182301700539091292655e10, -.4695753530642995859767162166e7, 0.2701122710892323414856790990e4, }; static double q1[] = { 0.1162398708003212287858529400e22, 0.1185770712190320999837113348e20, 0.6092061398917521746105196863e17, 0.2081661221307607351240184229e15, 0.5243710262167649715406728642e12, 0.1013863514358673989967045588e10, 0.1501793594998585505921097578e7, 0.1606931573481487801970916749e4, 1.0, }; static double p2[] = { -.4435757816794127857114720794e7, -.9942246505077641195658377899e7, -.6603373248364939109255245434e7, -.1523529351181137383255105722e7, -.1098240554345934672737413139e6, -.1611616644324610116477412898e4, 0.0, }; static double q2[] = { -.4435757816794127856828016962e7, -.9934124389934585658967556309e7, -.6585339479723087072826915069e7, -.1511809506634160881644546358e7, -.1072638599110382011903063867e6, -.1455009440190496182453565068e4, 1.0, }; static double p3[] = { 0.3322091340985722351859704442e5, 0.8514516067533570196555001171e5, 0.6617883658127083517939992166e5, 0.1849426287322386679652009819e5, 0.1706375429020768002061283546e4, 0.3526513384663603218592175580e2, 0.0, }; static double q3[] = { 0.7087128194102874357377502472e6, 0.1819458042243997298924553839e7, 0.1419460669603720892855755253e7, 0.4002944358226697511708610813e6, 0.3789022974577220264142952256e5, 0.8638367769604990967475517183e3, 1.0, }; static double p4[] = { -.9963753424306922225996744354e23, 0.2655473831434854326894248968e23, -.1212297555414509577913561535e22, 0.2193107339917797592111427556e20, -.1965887462722140658820322248e18, 0.9569930239921683481121552788e15, -.2580681702194450950541426399e13, 0.3639488548124002058278999428e10, -.2108847540133123652824139923e7, 0.0, }; static double q4[] = { 0.5082067366941243245314424152e24, 0.5435310377188854170800653097e22, 0.2954987935897148674290758119e20, 0.1082258259408819552553850180e18, 0.2976632125647276729292742282e15, 0.6465340881265275571961681500e12, 0.1128686837169442121732366891e10, 0.1563282754899580604737366452e7, 0.1612361029677000859332072312e4, 1.0, }; double j1(arg) double arg;{ double xsq, n, d, x; double sin(), cos(), sqrt(); int i; x = arg; if(x < 0.) x = -x; if(x > 8.){ asympt(x); n = x - 3.*pio4; n = sqrt(tpi/x)*(pzero*cos(n) - qzero*sin(n)); if(arg <0.) n = -n; return(n); } xsq = x*x; for(n=0,d=0,i=8;i>=0;i--){ n = n*xsq + p1[i]; d = d*xsq + q1[i]; } return(arg*n/d); } double y1(arg) double arg;{ double xsq, n, d, x; double sin(), cos(), sqrt(), log(), j1(); int i; errno = 0; x = arg; if(x <= 0.){ errno = EDOM; return(-HUGE); } if(x > 8.){ asympt(x); n = x - 3*pio4; return(sqrt(tpi/x)*(pzero*sin(n) + qzero*cos(n))); } xsq = x*x; for(n=0,d=0,i=9;i>=0;i--){ n = n*xsq + p4[i]; d = d*xsq + q4[i]; } return(x*n/d + tpi*(j1(x)*log(x)-1./x)); } static asympt(arg) double arg;{ double zsq, n, d; int i; zsq = 64./(arg*arg); for(n=0,d=0,i=6;i>=0;i--){ n = n*zsq + p2[i]; d = d*zsq + q2[i]; } pzero = n/d; for(n=0,d=0,i=6;i>=0;i--){ n = n*zsq + p3[i]; d = d*zsq + q3[i]; } qzero = (8./arg)*(n/d); } '~vk    T3i5 /* floating point Bessel's function of the first and second kinds of order zero j0(x) returns the value of J0(x) for all real values of x. There are no error returns. Calls sin, cos, sqrt. There is a niggling bug in J0 which causes errors up to 2e-16 for x in the interval [-8,8]. The bug is caused by an inappropriate order of summation of the series. rhm will fix it someday. Coefficients are from Hart & Cheney. #5849 (19.22D) #6549 (19.25D) #6949 (19.41D) y0(x) returns the value of Y((0(x) for positive real values of x. For x<=0, error number EDOM is set and a large negative value is returned. Calls sin, cos, sqrt, log, j0. The values of Y0 have not been checked to more than ten places. Coefficients are from Hart & Cheney. #6245 (18.78D) #6549 (19.25D) #6949 (19.41D) */ #include #include int errno; static double pzero, qzero; static double tpi = .6366197723675813430755350535e0; static double pio4 = .7853981633974483096156608458e0; static double p1[] = { 0.4933787251794133561816813446e21, -.1179157629107610536038440800e21, 0.6382059341072356562289432465e19, -.1367620353088171386865416609e18, 0.1434354939140344111664316553e16, -.8085222034853793871199468171e13, 0.2507158285536881945555156435e11, -.4050412371833132706360663322e8, 0.2685786856980014981415848441e5, }; static double q1[] = { 0.4933787251794133562113278438e21, 0.5428918384092285160200195092e19, 0.3024635616709462698627330784e17, 0.1127756739679798507056031594e15, 0.3123043114941213172572469442e12, 0.6699987672982239671814028660e9, 0.1114636098462985378182402543e7, 0.1363063652328970604442810507e4, 1.0 }; static double p2[] = { 0.5393485083869438325262122897e7, 0.1233238476817638145232406055e8, 0.8413041456550439208464315611e7, 0.2016135283049983642487182349e7, 0.1539826532623911470917825993e6, 0.2485271928957404011288128951e4, 0.0, }; static double q2[] = { 0.5393485083869438325560444960e7, 0.1233831022786324960844856182e8, 0.8426449050629797331554404810e7, 0.2025066801570134013891035236e7, 0.1560017276940030940592769933e6, 0.2615700736920839685159081813e4, 1.0, }; static double p3[] = { -.3984617357595222463506790588e4, -.1038141698748464093880530341e5, -.8239066313485606568803548860e4, -.2365956170779108192723612816e4, -.2262630641933704113967255053e3, -.4887199395841261531199129300e1, 0.0, }; static double q3[] = { 0.2550155108860942382983170882e6, 0.6667454239319826986004038103e6, 0.5332913634216897168722255057e6, 0.1560213206679291652539287109e6, 0.1570489191515395519392882766e5, 0.4087714673983499223402830260e3, 1.0, }; static double p4[] = { -.2750286678629109583701933175e20, 0.6587473275719554925999402049e20, -.5247065581112764941297350814e19, 0.1375624316399344078571335453e18, -.1648605817185729473122082537e16, 0.1025520859686394284509167421e14, -.3436371222979040378171030138e11, 0.5915213465686889654273830069e8, -.4137035497933148554125235152e5, }; static double q4[] = { 0.3726458838986165881989980e21, 0.4192417043410839973904769661e19, 0.2392883043499781857439356652e17, 0.9162038034075185262489147968e14, 0.2613065755041081249568482092e12, 0.5795122640700729537480087915e9, 0.1001702641288906265666651753e7, 0.1282452772478993804176329391e4, 1.0, }; double j0(arg) double arg;{ double argsq, n, d; double sin(), cos(), sqrt(); int i; if(arg < 0.) arg = -arg; if(arg > 8.){ asympt(arg); n = arg - pio4; return(sqrt(tpi/arg)*(pzero*cos(n) - qzero*sin(n))); } argsq = arg*arg; for(n=0,d=0,i=8;i>=0;i--){ n = n*argsq + p1[i]; d = d*argsq + q1[i]; } return(n/d); } double y0(arg) double arg;{ double argsq, n, d; double sin(), cos(), sqrt(), log(), j0(); int i; errno = 0; if(arg <= 0.){ errno = EDOM; return(-HUGE); } if(arg > 8.){ asympt(arg); n = arg - pio4; return(sqrt(tpi/arg)*(pzero*sin(n) + qzero*cos(n))); } argsq = arg*arg; for(n=0,d=0,i=8;i>=0;i--){ n = n*argsq + p4[i]; d = d*argsq + q4[i]; } return(n/d + tpi*j0(arg)*log(arg)); } static asympt(arg) double arg;{ double zsq, n, d; int i; zsq = 64./(arg*arg); for(n=0,d=0,i=6;i>=0;i--){ n = n*zsq + p2[i]; d = d*zsq + q2[i]; } pzero = n/d; for(n=0,d=0,i=6;i>=0;i--){ n = n*zsq + p3[i]; d = d*zsq + q3[i]; } qzero = (8./arg)*(n/d); } 'wk9봁 T3i5 /* * sqrt(a^2 + b^2) * (but carefully) */ double sqrt(); double hypot(a,b) double a,b; { double t; if(a<0) a = -a; if(b<0) b = -b; if(a > b) { t = a; a = b; b = t; } if(b==0) return(0.); a /= b; /* * pathological overflow possible * in the next line. */ return(b*sqrt(1. + a*a)); } struct complex { double r; double i; }; double cabs(arg) struct complex arg; { double hypot(); return(hypot(arg.r, arg.i)); } 'xk3 T3i5 /* * floor and ceil-- greatest integer <= arg * (resp least >=) */ double modf(); double floor(d) double d; { double fract; if (d<0.0) { d = -d; fract = modf(d, &d); if (fract != 0.0) d += 1; d = -d; } else modf(d, &d); return(d); } double ceil(d) double d; { return(-floor(-d)); } 'ykL T2i5 double fabs(arg) double arg; { if(arg < 0.) arg = -arg; return(arg); } 'zk T2i4 /* exp returns the exponential function of its floating-point argument. The coefficients are #1069 from Hart and Cheney. (22.35D) */ #include #include int errno; static double p0 = .2080384346694663001443843411e7; static double p1 = .3028697169744036299076048876e5; static double p2 = .6061485330061080841615584556e2; static double q0 = .6002720360238832528230907598e7; static double q1 = .3277251518082914423057964422e6; static double q2 = .1749287689093076403844945335e4; static double log2e = 1.4426950408889634073599247; static double sqrt2 = 1.4142135623730950488016887; static double maxf = 10000; double exp(arg) double arg; { double fract; double temp1, temp2, xsq; int ent; if(arg == 0.) return(1.); if(arg < -maxf) return(0.); if(arg > maxf) { errno = ERANGE; return(HUGE); } arg *= log2e; ent = floor(arg); fract = (arg-ent) - 0.5; xsq = fract*fract; temp1 = ((p2*xsq+p1)*xsq+p0)*fract; temp2 = ((1.0*xsq+q2)*xsq+q1)*xsq + q0; return(ldexp(sqrt2*(temp2+temp1)/(temp2-temp1), ent)); } '{k6 T1i4  /* floating-point arctangent atan returns the value of the arctangent of its argument in the range [-pi/2,pi/2]. atan2 returns the arctangent of arg1/arg2 in the range [-pi,pi]. there are no error returns. coefficients are #5077 from Hart & Cheney. (19.56D) */ double static sq2p1 =2.414213562373095048802e0; static double sq2m1 = .414213562373095048802e0; static double pio2 =1.570796326794896619231e0; static double pio4 = .785398163397448309615e0; static double p4 = .161536412982230228262e((2; static double p3 = .26842548195503973794141e3; static double p2 = .11530293515404850115428136e4; static double p1 = .178040631643319697105464587e4; static double p0 = .89678597403663861959987488e3; static double q4 = .5895697050844462222791e2; static double q3 = .536265374031215315104235e3; static double q2 = .16667838148816337184521798e4; static double q1 = .207933497444540981287275926e4; static double q0 = .89678597403663861962481162e3; /* atan makes its argument positive and calls the inner routine satan. */ double atan(arg) double arg; { double satan(); if(arg>0) return(satan(arg)); else return(-satan(-arg)); } /* atan2 discovers what quadrant the angle is in and calls atan. */ double atan2(arg1,arg2) double arg1,arg2; { double satan(); if((arg1+arg2)==arg1) if(arg1 >= 0.) return(pio2); else return(-pio2); else if(arg2 <0.) if(arg1 >= 0.) return(pio2+pio2 - satan(-arg1/arg2)); else return(-pio2-pio2 + satan(arg1/arg2)); else if(arg1>0) return(satan(arg1/arg2)); else return(-satan(-arg1/arg2)); } /* satan reduces its argument (known to be positive) to the range [0,0.414...] and calls xatan. */ static double satan(arg) double arg; { double xatan(); if(arg < sq2m1) return(xatan(arg)); else if(arg > sq2p1) return(pio2 - xatan(1.0/arg)); else return(pio4 + xatan((arg-1.0)/(arg+1.0))); } /* xatan evaluates a series valid in the range [-0.414...,+0.414...]. */ static double xatan(arg) double arg; { double argsq; double value; argsq = arg*arg; value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0); value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0); return(value*arg); } '|kv T6E6E /* asin(arg) and acos(arg) return the arcsin, arccos, respectively of their arguments. Arctan is called after appropriate range reduction. */ #include int errno; double atan(); double sqrt(); static double pio2 = 1.570796326794896619; double asin(arg) double arg; { double sign, temp; sign = 1.; if(arg <0){ arg = -arg; sign = -1.; } if(arg > 1.){ errno = EDOM; return(0.); } temp = sqrt(1. - arg*arg); if(arg > 0.7) temp = pio2 - atan(temp/arg); else temp = atan(arg/temp); return(sign*temp); } double acos(arg) double arg; { if((arg > 1.) || (arg < -1.)){ errno = EDOM; return(0.); } return(pio2 - asin(arg)); } '~k; 0TTT ar rc libc.a \ getgrgid.o \ getgrnam.o \ getgrent.o \ getpass.o \ getpwnam.o \ getpwuid.o \ getpwent.o \ timezone.o \ fgetc.o \ fputc.o \ getchar.o \ putchar.o \ popen.o \ freopen.o \ fgets.o \ fputs.o \ getpw.o \ fseek.o \ ftell.o \ rew.o \ rdwr.o \ system.o \ fopen.o \ fdopen.o \ scanf.o \ doscan.o \ fprintf.o \ gets.o \ getw.o \ printf.o \ puts.o \ putw.o \ sprintf.o \ ungetc.o \ filbuf.o \ setbuf.o \ fltpr.o \ doprnt.o \ gcvt.o \ ffltpr.o \ strout.o \ flsbuf.o \ endopen.o \ findiop.o \ clrerr.o \ data.o \ cuexit.o \ execvp.o \ getenv.o \ getlogin.o \ perror.o \ sleep.o \ ttyslot.o \ ttyname.o \ abort.o \ abs.o \ atof.o \ atoi.o \ atol.o \ crypt.o \ ctime.o \ calloc.o \ malloc.o \ ecvt.o \ errlst.o \ fakcu.o \ fakfp.o \ frexp11.o \ isatty.o \ l3.o \ ldexp11.o \ ldfps.o \ mktemp.o \ modf11.o \ mon.o \ mpx.o \ nlist.o \ qsort.o \ rand.o \ setjmp.o \ stty.o \ swab.o \ tell.o \ ctype_.o \ index.o \ rindex.o \ strcat.o \ strncat.o \ strcmp.o \ strncmp.o \ strcpy.o \ strncpy.o \ strlen.o \ access.o \ acct.o \ alarm.o \ chdir.o \ chroot.o \ chmod.o \ chown.o \ close.o \ creat.o \ dup.o \ execl.o \ execle.o \ execv.o \ execve.o \ exit.o \ fork.o \ fstat.o \ getgid.o \ getpid.o \ getuid.o \ ioctl.o \ kill.o \ link.o \ lock.o \ lseek.o \ mknod.o \ mount.o \ mpxcall.o \ nice.o \ open.o \ pause.o \ phys.o \ pipe.o \ profil.o \ ptrace.o \ read.o \ sbrk.o \ setgid.o \ setuid.o \ signal.o \ stat.o \ stime.o \ sync.o \ time.o \ times.o \ umask.o \ umount.o \ unlink.o \ utime.o \ wait.o \ write.o \ aldiv.o \ almul.o \ alrem.o \ cerror.o \ ldiv.o \ lmul.o \ lrem.o \ mcount.o \ csv.o 'kP 0i #include #include struct ostat { short os_dev; short os_inum; short os_flags; char os_nlinks; char os_uid; char os_gid; char os_size0; short os_size1; short os_addr[8]; long os_actime; long os_modtime; } osbuf; stat(name, buf) char *name; struct stat *buf; { if (syscall(18, 0, 0, name, &osbuf, 0) < 0) return(-1); stcopyit(buf); return(0); } fstat(fd, buf) int fd; struct stat *buf; { if (syscall(28, fd, 0, &osbuf, 0, 0) < 0) return(-1); stcopyit(buf); return(0); } static stcopyit(buf) struct stat *buf; { buf->st_dev = osbuf.os_dev; buf->st_ino = osbuf.os_inum; buf->st_mode = osbuf.os_flags; buf->st_mode &= 067777; if ((buf->st_mode&060000) == 0) buf->st_mode |= 0100000; buf->st_nlink = osbuf.os_nlinks; buf->st_uid = osbuf.os_uid; buf->st_gid = osbuf.os_gid; buf->st_rdev = 0; buf->st_size = ( (long) osbuf.os_size0 << 16) | osbuf.os_size1; buf->st_atime = osbuf.os_actime; buf->st_mtime = osbuf.os_modtime; buf->st_ctime = buf->st_mtime; } 'kd 0i lseek(fd, off, ptr) int fd, ptr; long off; { unsigned a; a = off; if (a == off) return (syscall(19, fd, 0, a, ptr, 0)); a = off/512; syscall(19, fd, 0, a, ptr+3, 0); return(syscall(19, fd, 0, (int) (off%512), ptr, 0)); } 'khf /i gtty(fd, buf) int fd; int *buf; { if (syscall(32, fd, 0, buf, 0, 0) < 0) return(-1); return(0); } 'kj /i ((#include #include static struct timeb gorp = { 0L, 0, 5*60, 1 }; ftime(gorpp) struct timeb *gorpp; { *gorpp = gorp; return(0); } 'km /i execl(name, arg1, a2, a3, a4, a5) char *name, arg1, a2, a3, a4, a5; { char *args[6]; args[0] = arg1; args[1] = a2; args[2] = a3; args[3] = a4; args[4] = a5; args[5] = 0; syscall(11, 0, 0, name, args, 0); } 'kpz /i chown(name, owner, group) char *name; int owner, group; { return(syscall(16, 0, 0, name, (group<<8)|(owner&0377), 0)); } 'k_vL .i / syscall .globl _syscall,csv,cret,cerror _syscall: jsr r5,csv mov r5,r2 add $04,r2 mov $9f,r3 mov (r2)+,r0 bic $!0377,r0 bis $sys,r0 mov r0,(r3)+ mov (r2)+,r0 mov (r2)+,r1 mov (r2)+,(r3)+ mov (r2)+,(r3)+ mov (r2)+,(r3)+ mov (r2)+,(r3)+ mov (r2)+,(r3)+ sys 0; 9f bec 1f jmp cerror 1: jmp cret .data 9: .=.+12. 'kvs .i #include #include access(name, mode) { struct stat foo; return(stat(name, &foo)); } 'kju x { ~ P@@ cc -c -O /usr/src/libc/stdio/getgrgid.c cc -c -O /usr/src/libc/stdio/getgrnam.c cc -c -O /usr/src/libc/stdio/getgrent.c cc -c -O /usr/src/libc/stdio/getpass.c cc -c -O /usr/src/libc/stdio/getpwnam.c cc -c -O /usr/src/libc/stdio/getpwuid.c cc -c -O /usr/src/libc/stdio/getpwent.c cc -c -O /usr/src/libc/stdio/fgetc.c cc -c -O /usr/src/libc/stdio/fputc.c cc -c -O /usr/src/libc/stdio/getchar.c cc -c -O /usr/src/libc/stdio/putchar.c cc -c -O /usr/src/libc/stdio/popen.c cc -c -O /usr/src/libc/stdio/freopen.c cc -c -O /usr/src/libc/stdio/fgets.c cc -c -O /usr/src/libc/stdio/fputs.c cc -c -O /usr/src/libc/stdio/getpw.c cc -c -O /usr/src/libc/stdio/fseek.c cc -c -O /usr/src/libc/stdio/ftell.c cc -c -O /usr/src/libc/stdio/rew.c cc -c -O /usr/src/libc/stdio/rdwr.c cc -c -O /usr/src/libc/stdio/system.c cc -c -O /usr/src/libc/stdio/fopen.c cc -c -O /usr/src/libc/stdio/fdopen.c cc -c -O /usr/src/libc/stdio/scanf.c cc -c -O /usr/src/libc/stdio/doscan.c cc -c -O /usr/src/libc/stdio/fprintf.c cc -c -O /usr/src/libc/stdio/gets.c cc -c -O /usr/src/libc/stdio/getw.c cc -c -O /usr/src/libc/stdio/printf.c cc -c -O /usr/src/libc/stdio/puts.c cc -c -O /usr/src/libc/stdio/putw.c cc -c -O /usr/src/libc/stdio/sprintf.c cc -c -O /usr/src/libc/stdio/ungetc.c cc -c -O /usr/src/libc/stdio/filbuf.c cc -c -O /usr/src/libc/stdio/setbuf.c cc -c /usr/src/libc/stdio/fltpr.s cc -c /usr/src/libc/stdio/doprnt.s cc -c -O /usr/src/libc/stdio/gcvt.c cc -c /usr/src/libc/stdio/ffltpr.s cc -c -O /usr/src/libc/stdio/strout.c cc -c -O /usr/src/libc/stdio/flsbuf.c cc -c -O /usr/src/libc/stdio/endopen.c cc -c -O /usr/src/libc/stdio/findiop.c cc -c -O /usr/src/libc/stdio/clrerr.c cc -c -O /usr/src/libc/stdio/data.c cc -c /usr/src/libc/gen/cuexit.s cc -c -O /usr/src/libc/gen/execvp.c cc -c -O /usr/src/libc/gen/getenv.c cc -c -O /usr/src/libc/gen/getlogin.c cc -c -O /usr/src/libc/gen/perror.c cc -c -O /usr/src/libc/gen/sleep.c cc -c -O /usr/src/libc/gen/timezone.c cc -c -O /usr/src/libc/gen/ttyslot.c cc -c -O /usr/src/libc/gen/ttyname.c cc -c /usr/src/libc/gen/abort.s cc -c -O /usr/src/libc/gen/abs.c cc -c -O /usr/src/libc/gen/atof.c cc -c -O /usr/src/libc/gen/atoi.c cc -c -O /usr/src/libc/gen/atol.c cc -c -O /usr/src/libc/gen/crypt.c cc -c -O /usr/src/libc/gen/ctime.c cc -c -O /usr/src/libc/gen/calloc.c cc -c -O /usr/src/libc/gen/malloc.c cc -c -O /usr/src/libc/gen/ecvt.c cc -c -O /usr/src/libc/gen/errlst.c cc -c /usr/src/libc/gen/fakcu.s cc -c /usr/src/libc/gen/fakfp.s cc -c /usr/src/libc/gen/frexp11.s cc -c -O /usr/src/libc/gen/isatty.c cc -c -O /usr/src/libc/gen/l3.c cc -c /usr/src/libc/gen/ldexp11.s cc -c /usr/src/libc/gen/ldfps.s cc -c -O /usr/src/libc/gen/mktemp.c cc -c /usr/src/libc/gen/modf11.s cc -c -O /usr/src/libc/gen/mpx.c cc -c -O /usr/src/libc/gen/mon.c cc -c -O /usr/src/libc/gen/nlist.c cc -c -O /usr/src/libc/gen/qsort.c cc -c -O /usr/src/libc/gen/rand.c cc -c /usr/src/libc/gen/setjmp.s cc -c -O /usr/src/libc/gen/stty.c cc -c -O /usr/src/libc/gen/swab.c cc -c -O /usr/src/libc/gen/tell.c cc -c -O /usr/src/libc/gen/ctype_.c cc -c -O /usr/src/libc/gen/index.c cc -c -O /usr/src/libc/gen/rindex.c cc -c -O /usr/src/libc/gen/strcat.c cc -c -O /usr/src/libc/gen/strncat.c cc -c -O /usr/src/libc/gen/strcmp.c cc -c -O /usr/src/libc/gen/strncmp.c cc -c -O /usr/src/libc/gen/strcpy.c cc -c -O /usr/src/libc/gen/strncpy.c cc -c -O /usr/src/libc/gen/strlen.c cc -c /usr/src/libc/sys/access.s cc -c /usr/src/libc/sys/acct.s cc -c /usr/src/libc/sys/alarm.s cc -c /usr/src/libc/sys/chdir.s cc -c /usr/src/libc/sys/chroot.s cc -c /usr/src/libc/sys/chmod.s cc -c /usr/src/libc/sys/chown.s cc -c /usr/src/libc/sys/close.s cc -c /usr/src/libc/sys/creat.s cc -c /usr/src/libc/sys/dup.s cc -c /usr/src/libc/sys/execl.s cc -c /usr/src/libc/sys/execle.s cc -c /usr/src/libc/sys/execv.s cc -c /usr/src/libc/sys/execve.s cc -c /usr/src/libc/sys/exit.s cc -c /usr/src/libc/sys/fork.s cc -c /usr/src/libc/sys/fstat.s cc -c /usr/src/libc/sys/getgid.s cc -c /usr/src/libc/sys/getpid.s cc -c /usr/src/libc/sys/getuid.s cc -c /usr/src/libc/sys/ioctl.s cc -c /usr/src/libc/sys/kill.s cc -c /usr/src/libc/sys/link.s cc -c /usr/src/libc/sys/lock.s cc -c /usr/src/libc/sys/lseek.s cc -c /usr/src/libc/sys/mknod.s cc -c /usr/src/libc/sys/mount.s cc -c /usr/src/libc/sys/mpxcall.s cc -c /usr/src/libc/sys/nice.s cc -c /usr/src/libc/sys/open.s cc -c /usr/src/libc/sys/pause.s cc -c /usr/src/libc/sys/phys.s cc -c /usr/src/libc/sys/pipe.s cc -c /usr/src/libc/sys/profil.s cc -c /usr/src/libc/sys/ptrace.s cc -c /usr/src/libc/sys/read.s cc -c /usr/src/libc/sys/sbrk.s cc -c /usr/src/libc/sys/setgid.s cc -c /usr/src/libc/sys/setuid.s cc -c /usr/src/libc/sys/signal.s cc -c /usr/src/libc/sys/stat.s cc -c /usr/src/libc/sys/stime.s cc -c /usr/src/libc/sys/sync.s cc -c /usr/src/libc/sys/time.s cc -c /usr/src/libc/sys/times.s cc -c /usr/src/libc/sys/umask.s cc -c /usr/src/libc/sys/umount.s cc -c /usr/src/libc/sys/unlink.s cc -c /usr/src/libc/sys/utime.s cc -c /usr/src/libc/sys/wait.s cc -c /usr/src/libc/sys/write.s cc -c /usr/src/libc/crt/aldiv.s cc -c /usr/src/libc/crt/almul.s cc -c /usr/src/libc/crt/alrem.s cc -c /usr/src/libc/crt/cerr(('k"ou x { ~ P@@or.s cc -c /usr/src/libc/crt/ldiv.s cc -c /usr/src/libc/crt/lmul.s cc -c /usr/src/libc/crt/lrem.s cc -c /usr/src/libc/crt/mcount.s cc -c /usr/src/libc/crt/csv.s 'k󠴁Tl o r I-i-i / C library-- floating output .globl pfloat .globl pscien .globl pgen .globl fltused .globl _ecvt .globl _fcvt .globl _gcvt fltused: / force loading pgen: mov r3,-(sp) mov r0,-(sp) tst r2 bne 1f mov $6,(sp) 1: movf (r4)+,fr0 movf fr0,-(sp) jsr pc,_gcvt add $8+2+2,sp 1: tstb (r3)+ bne 1b dec r3 rts pc pfloat: mov $sign,-(sp) mov $decpt,-(sp) tst r2 bne 1f mov $6,r0 1: mov r0,-(sp) mov r0,ndigit movf (r4)+,fr0 movf fr0,-(sp) jsr pc,_fcvt add $8+2+2+2,sp tst sign beq 1f movb $'-,(r3)+ 1: mov decpt,r2 bgt 1f movb $'0,(r3)+ 1: mov r2,r1 ble 1f 2: movb (r0)+,(r3)+ sob r1,2b 1: mov ndigit,r1 beq 1f movb $'.,(r3)+ 1: neg r2 ble 1f 2: dec r1 blt 1f movb $'0,(r3)+ sob r2,2b 1: tst r1 ble 2f 1: movb (r0)+,(r3)+ sob r1,1b 2: rts pc pscien: mov $sign,-(sp) mov $decpt,-(sp) mov r0,-(sp) mov r0,ndigit tst r2 bne 1f mov $6,(sp) 1: movf (r4)+,fr0 movf fr0,-(sp) jsr pc,_ecvt add $8+2+2+2,sp tst sign beq 1f movb $'-,(r3)+ 1: cmpb (r0),$'0 bne 1f inc decpt 1: movb (r0)+,(r3)+ movb $'.,(r3)+ mov ndigit,r1 dec r1 ble 1f 2: movb (r0)+,(r3)+ sob r1,2b 1: movb $'e,(r3)+ mov decpt,r2 dec r2 mov r2,r1 bge 1f movb $'-,(r3)+ neg r1 br 2f 1: movb $'+,(r3)+ 2: clr r0 div $10.,r0 add $'0,r0 movb r0,(r3)+ add $'0,r1 movb r1,(r3)+ rts pc .data sign: .=.+2 ndigit: .=.+2 decpt: .=.+2 'k (i I-i-i / C library-- fake floating output .globl pfloat .globl pscien .globl pgen pfloat: pscien: pgen: add $8,r4 movb $'?,(r3)+ rts pc 'kA*f 9J,i,i #include char _sibuf[BUFSIZ]; char _sobuf[BUFSIZ]; struct _iobuf _iob[_NFILE] = { { _sibuf, 0, _sibuf, _IOREAD, 0}, { NULL, 0, NULL, _IOWRT, 1}, {NULL, 0, NULL, _IOWRT+_IONBF, 2}, }; /* * Ptr to end of buffers */ struct _iobuf *_lastbuf = { &_iob[_NFILE] }; 'k-dc -J,i,i #include clearerr(iop) register struct _iobuf *iop; { iop->_flag &= ~(_IOERR|_IOEOF); } 'k #]W Z ] ` 3-@-@ #include char *malloc(); int _flsbuf(c, iop) int c; register FILE *iop; { register char *base; register n, rn; char c1; extern char _sobuf[]; if (iop->_flag & _IORW) { iop->_flag |= _IOWRT; iop->_flag &= ~_IOEOF; } tryagain: if (iop->_flag & _IONBF) { c1 = c; rn = 1; n = write(fileno(iop), &c1, rn); iop->_cnt = 0; } else { if ((base = iop->_base) == NULL) { if (iop == stdout) { if (isatty(fileno(stdout))) { iop->_flag |= _IONBF; goto tryagain; } iop->_base = _sobuf; iop->_ptr = _sobuf; goto tryagain; } if ((iop->_base = base = malloc(BUFSIZ)) == NULL) { iop->_flag |= _IONBF; goto tryagain; } iop->_flag |= _IOMYBUF; rn = n = 0; } else if((rn = n = iop->_ptr - base) > 0) { iop->_ptr = base; n = write(fileno(iop), base, n); } iop->_cnt = BUFSIZ - 1; *base++ = c; iop->_ptr = base; } if (rn != n) { iop->_flag |= _IOERR; return(EOF); } return(c); } int fflush(iop) register FILE *iop; { register char *base; register n; if ((iop->_flag & (_IONBF|_IOWRT)) == _IOWRT && (base = iop->_base) != NULL && (n = iop->_ptr - base) > 0) { iop->_ptr = base; iop->_cnt = BUFSIZ; if (write(fileno(iop), base, n) != n) { iop->_flag |= _IOERR; return(EOF); } } return(0); } /* * Flush buffers on exit */ _cleanup() { register FILE *iop; extern FILE *_lastbuf; for(iop = _iob; iop < _lastbuf; iop++) fclose(iop); } int fclose(iop) register FILE *iop; { register r; r = EOF; if (iop->_flag & (_IOREAD|_IOWRT|_IORW) && (iop->_flag & _IOSTRG) == 0) { r = fflush(iop); if (close(fileno(iop)) < 0) r = EOF; if (iop->_flag & _IOMYBUF) free(iop->_base); if (iop->_flag & (_IOMYBUF|_IONBF)) iop->_base = NULL; } iop->_flag &= ~(_IOREAD|_IOWRT|_IONBF|_IOMYBUF|_IOERR|_IOEOF|_IOSTRG|_IORW); iop->_cnt = 0; return(r); } 'k<T I+i+i #include _strout(string, count, adjust, file, fillch) register char *string; register count; int adjust; register struct _iobuf *file; { while (adjust < 0) { if (*string=='-' && fillch=='0') { putc(*string++, file); count--; } putc(fillch, file); adjust++; } while (--count>=0) putc(*string++, file); while (adjust) { putc(fillch, file); adjust--; } } 'kg5K N I*i*i ((/* * gcvt - Floating output conversion to * minimal length string */ char *ecvt(); char * gcvt(number, ndigit, buf) double number; char *buf; { int sign, decpt; register char *p1, *p2; register i; p1 = ecvt(number, ndigit, &decpt, &sign); p2 = buf; if (sign) *p2++ = '-'; for (i=ndigit-1; i>0 && p1[i]=='0'; i--) ndigit--; if (decpt >= 0 && decpt-ndigit > 4 || decpt < 0 && decpt < -3) { /* use E-style */ decpt--; *p2++ = *p1++; *p2++ = '.'; for (i=1; i setbuf(iop, buf) register struct _iobuf *iop; char *buf; { if (iop->_base != NULL && iop->_flag&_IOMYBUF) free(iop->_base); iop->_flag &= ~(_IOMYBUF|_IONBF); if ((iop->_base = buf) == NULL) iop->_flag |= _IONBF; else iop->_ptr = iop->_base; iop->_cnt = 0; } 'k꿸,0 3 3-@-@ #include char *malloc(); int _filbuf(iop) register FILE *iop; { static char smallbuf[_NFILE]; if (iop->_flag & _IORW) iop->_flag |= _IOREAD; if ((iop->_flag & _IOREAD) == 0 || iop->_flag & _IOSTRG) return(EOF); tryagain: if (iop->_base == NULL) { if (iop->_flag & _IONBF) { iop->_base = &smallbuf[fileno(iop)]; goto tryagain; } if ((iop->_base = malloc(BUFSIZ)) == NULL) { iop->_flag |= _IONBF; goto tryagain; } iop->_flag |= _IOMYBUF; } iop->_ptr = iop->_base; iop->_cnt = read(fileno(iop), iop->_ptr, iop->_flag&_IONBF?1:BUFSIZ); if (--iop->_cnt < 0) { if (iop->_cnt == -1) { iop->_flag |= _IOEOF; if (iop->_flag & _IORW) iop->_flag &= ~_IOREAD; } else iop->_flag |= _IOERR; iop->_cnt = 0; return(EOF); } return(*iop->_ptr++ & 0377); } 'kc- I)i)i #include ungetc(c, iop) register FILE *iop; { if (c == EOF) return(-1); if ((iop->_flag&_IOREAD)==0 || iop->_ptr <= iop->_base) if (iop->_ptr == iop->_base && iop->_cnt==0) *iop->_ptr++; else return(-1); iop->_cnt++; *--iop->_ptr = c; return(0); } 'kf* I(i(i #include char *sprintf(str, fmt, args) char *str, *fmt; { struct _iobuf _strbuf; _strbuf._flag = _IOWRT+_IOSTRG; _strbuf._ptr = str; _strbuf._cnt = 32767; _doprnt(fmt, &args, &_strbuf); putc('\0', &_strbuf); return(str); } 'kjjo' I(i(i #include putw(i, iop) register i; register struct _iobuf *iop; { putc(i, iop); putc(i>>8, iop); } 'kjmx$ I'i'i #include puts(s) register char *s; { register c; while (c = *s++) putchar(c); return(putchar('\n')); } 'kust I'i'i #include printf(fmt, args) char *fmt; { _doprnt(fmt, &args, stdout); return(ferror(stdout)? EOF: 0); } 'kPv zI'i'i #include getw(iop) register struct _iobuf *iop; { register i; i = getc(iop); if (iop->_flag&_IOEOF) return(-1); return(i | (getc(iop)<<8)); } 'k$y rI'i'i ((#include char * gets(s) char *s; { register c; register char *cs; cs = s; while ((c = getchar()) != '\n' && c >= 0) *cs++ = c; if (c<0 && cs==s) return(NULL); *cs++ = '\0'; return(s); } 'k| hI&i&i #include fprintf(iop, fmt, args) FILE *iop; char *fmt; { _doprnt(fmt, &args, iop); return(ferror(iop)? EOF: 0); } 'k.     MI&i&i #include #include #define SPC 01 #define STP 02 #define SHORT 0 #define REGULAR 1 #define LONG 2 #define INT 0 #define FLOAT 1 char *_getccl(); char _sctab[128] = { 0,0,0,0,0,0,0,0, 0,SPC,SPC,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, SPC,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, }; _doscan(iop, fmt, argp) FILE *iop; register char *fmt; register int **argp; { register int ch; int nmatch, len, ch1; int **ptr, fileended, size; nmatch = 0; fileended = 0; for (;;) switch (ch = *fmt++) { case '\0': return (nmatch); case '%': if ((ch = *fmt++) == '%') goto def; ptr = 0; if (ch != '*') ptr = argp++; else ch = *fmt++; len = 0; size = REGULAR; while (isdigit(ch)) { len = len*10 + ch - '0'; ch = *fmt++; } if (len == 0) len = 30000; if (ch=='l') { ch = *fmt++; size = LONG; } else if (ch=='h') { size = SHORT; ch = *fmt++; } else if (ch=='[') fmt = _getccl(fmt); if (isupper(ch)) { ch = tolower(ch); size = LONG; } if (ch == '\0') return(-1); if (_innum(ptr, ch, len, size, iop, &fileended) && ptr) nmatch++; if (fileended) return(nmatch? nmatch: -1); break; case ' ': case '\n': case '\t': while ((ch1 = getc(iop))==' ' || ch1=='\t' || ch1=='\n') ; if (ch1 != EOF) ungetc(ch1, iop); break; default: def: ch1 = getc(iop); if (ch1 != ch) { if (ch1==EOF) return(-1); ungetc(ch1, iop); return(nmatch); } } } _innum(ptr, type, len, size, iop, eofptr) int **ptr, *eofptr; struct _iobuf *iop; { extern double atof(); register char *np; char numbuf[64]; register c, base; int expseen, scale, negflg, c1, ndigit; long lcval; if (type=='c' || type=='s' || type=='[') return(_instr(ptr? *(char **)ptr: (char *)NULL, type, len, iop, eofptr)); lcval = 0; ndigit = 0; scale = INT; if (type=='e'||type=='f') scale = FLOAT; base = 10; if (type=='o') base = 8; else if (type=='x') base = 16; np = numbuf; expseen = 0; negflg = 0; while ((c = getc(iop))==' ' || c=='\t' || c=='\n'); if (c=='-') { negflg++; *np++ = c; c = getc(iop); len--; } else if (c=='+') { len--; c = getc(iop); } for ( ; --len>=0; *np++ = c, c = getc(iop)) { if (isdigit(c) || base==16 && ('a'<=c && c<='f' || 'A'<=c && c<='F')) { ndigit++; if (base==8) lcval <<=3; else if (base==10) lcval = ((lcval<<2) + lcval)<<1; else lcval <<= 4; c1 = c; if ('0'<=c && c<='9') c -= '0'; else if ('a'<=c && c<='f') c -= 'a'-10; else c -= 'A'-10; lcval += c; c = c1; continue; } else if (c=='.') { if (base!=10 || scale==INT) break; ndigit++; continue; } else if ((c=='e'||c=='E') && expseen==0) { if (base!=10 || scale==INT || ndigit==0) break; expseen++; *np++ = c; c = getc(iop); if (c!='+'&&c!='-'&&('0'>c||c>'9')) break; } else break; } if (negflg) lcval = -lcval; if (c != EOF) { ungetc(c, iop); *eofptr = 0; } else *eofptr = 1; if (ptr==NULL || np==numbuf) return(0); *np++ = 0; switch((scale<<4) | size) { case (FLOAT<<4) | SHORT: case (FLOAT<<4) | REGULAR: **(float **)ptr = atof(numbuf); break; case (FLOAT<<4) | LONG: **(double **)ptr = atof(numbuf); break; case (INT<<4) | SHORT: **(short **)ptr = lcval; break; case (INT<<4) | REGULAR: **(int **)ptr = lcval; break; case (INT<<4) | LONG: **(long **)ptr = lcval; break; } return(1); } _instr(ptr, type, len, iop, eofptr) register char *ptr; register struct _iobuf *iop; int *eofptr; { register ch; register char *optr; int ignstp; *eofptr = 0; optr = ptr; if (type=='c' && len==30000) len = 1; ignstp = 0; if (type=='s') ignstp = SPC; while (_sctab[ch = getc(iop)] & ignstp) if (ch==EOF) break; ignstp = SPC; if (type=='c') ignstp = 0; else if (type=='[') ignstp = STP; while (ch!=EOF && (_sctab[ch]&ignstp)==0) { if (ptr) *ptr++ = ch; if (--len <= 0) break; ch = getc(iop); } if (ch != EOF) { if (len > 0) ungetc(ch, iop); *eofptr = 0; } else *eofptr = 1; if (ptr && ptr!=optr) { if (type!='c') *ptr++ = '\0'; return(1); } return(0); } char * _getccl(s) register char *s; { register c, t; t = 0; if (*s == '^') { t++; s++; } for (c = 0; c < 128; c++) if (t) _sctab[c] &= ~STP; else _sctab[c] |= STP; while (((c = *s++)&0177) != ']') { if (t) _sctab[c++] |= STP; else _sctab[c++] &= ~STP; if (c==0) return(--s); } return(s); } 'k{ CI%i%i #include scanf(fmt, args) char *fmt; { return(_doscan(stdin, fmt, &args)); } fscanf(iop, fmt, args) FILE *iop; char *fmt; { return(_doscan(iop, fmt, &args)); } sscanf(str, fmt, args) register char *str; char *fmt; { FILE _strbuf; _strbuf._flag = _IOREAD|_IOSTRG; _strbuf._ptr = _strbuf._base = str; _strbuf._cnt = 0; while (*str++) _strbuf._cnt++; return(_doscan(&_strbuf, fmt, &args)); } 'kv 3,@,@ /* * Unix routine to do an "fopen" on file descriptor * The mode has to be repeated because you can't query its * status */ #include #include FILE * fdopen(fd, mode) register char *mode; { register FILE *iop; FILE *_findiop(); if ((iop = _findiop()) == NULL) return(NULL); iop->_cnt = 0; iop->_file = fd; switch (*mode) { case 'r': iop->_flag |= _IOREAD; break; case 'a': lseek(fd, 0L, 2); /* No break */ case 'w': iop->_flag |= _IOWRT; break; default: return(NULL); } if (mode[1] == '+') { iop->_flag &= ~(_IOREAD|_IOWRT); iop->_flag |= _IORW; } return(iop); } 'k@  73.@.@ #include FILE * fopen(file, mode) char *file, *mode; { FILE *_findiop(), *_endopen(); return(_endopen(file, mode, _findiop())); } (('k꟨ "I$i$i #include system(s) char *s; { int status, pid, w; register int (*istat)(), (*qstat)(); if ((pid = fork()) == 0) { execl("/bin/sh", "sh", "-c", s, 0); _exit(127); } istat = signal(SIGINT, SIG_IGN); qstat = signal(SIGQUIT, SIG_IGN); while ((w = wait(&status)) != pid && w != -1) ; if (w == -1) status = -1; signal(SIGINT, istat); signal(SIGQUIT, qstat); return(status); } 'kߠu I$i$i #include fread(ptr, size, count, iop) unsigned size, count; register char *ptr; register FILE *iop; { register c; unsigned ndone, s; ndone = 0; if (size) for (; ndone= 0) *ptr++ = c; else return(ndone); } while (--s); } return(ndone); } fwrite(ptr, size, count, iop) unsigned size, count; register char *ptr; register FILE *iop; { register unsigned s; unsigned ndone; ndone = 0; if (size) for (; ndone rewind(iop) register struct _iobuf *iop; { fflush(iop); lseek(fileno(iop), 0L, 0); iop->_cnt = 0; iop->_ptr = iop->_base; iop->_flag &= ~(_IOERR|_IOEOF); if (iop->_flag & _IORW) iop->_flag &= ~(_IOREAD|_IOWRT); } 'k  3/@/@ /* * Return file offset. * Coordinates with buffering. */ #include long lseek(); long ftell(iop) FILE *iop; { long tres; register adjust; if (iop->_cnt < 0) iop->_cnt = 0; if (iop->_flag&_IOREAD) adjust = - iop->_cnt; else if(iop->_flag&(_IOWRT|_IORW)) { adjust = 0; if (iop->_flag&_IOWRT && iop->_base && (iop->_flag&_IONBF)==0) adjust = iop->_ptr - iop->_base; } else return(-1); tres = lseek(fileno(iop), 0L, 1); if (tres<0) return(tres); tres += adjust; return(tres); } 'kC 3.@.@ /* * Seek for standard library. Coordinates with buffering. */ #include long lseek(); fseek(iop, offset, ptrname) register FILE *iop; long offset; { register int c; long p; iop->_flag &= ~_IOEOF; if (iop->_flag & _IOREAD) { if (ptrname < 2 && iop->_base && !(iop->_flag&_IONBF)) { c = iop->_cnt; p = offset; if (ptrname == 0) p += c - lseek(fileno(iop), 0L, 1); else offset -= c; if (!(iop->_flag&_IORW) && c > 0 && p <= c && p >= iop->_base - iop->_ptr){ iop->_ptr += (int) p; iop->_cnt -= (int) p; return(0); } } if (iop->_flag & _IORW) { iop->_ptr = iop->_base; iop->_flag &= ~_IOREAD; } p = lseek(fileno(iop), offset, ptrname); iop->_cnt = 0; } else if(iop->_flag & (_IOWRT|_IORW)) { fflush(iop); if (iop->_flag & _IORW) { iop->_cnt = 0; iop->_flag &= ~_IOWRT; iop->_ptr = iop->_base; } p = lseek(fileno(iop), offset, ptrname); } return(p==-1? -1: 0); } 'kg$ H"i"i #include getpw(uid, buf) int uid; char buf[]; { static FILE *pwf; register n, c; register char *bp; if(pwf == 0) pwf = fopen("/etc/passwd", "r"); if(pwf == NULL) return(1); rewind(pwf); for (;;) { bp = buf; while((c=getc(pwf)) != '\n') { if(c == EOF) return(1); *bp++ = c; } *bp++ = '\0'; bp = buf; n = 3; while(--n) while((c = *bp++) != ':') if(c == '\n') return(1); while((c = *bp++) != ':') { if(c<'0' || c>'9') continue; n = n*10+c-'0'; } if(n == uid) return(0); } } 'kĴ H"i"i #include fputs(s, iop) register char *s; register FILE *iop; { register r; register c; while (c = *s++) r = putc(c, iop); return(r); } ' kfǴ H"i"i #include char * fgets(s, n, iop) char *s; register FILE *iop; { register c; register char *cs; cs = s; while (--n>0 && (c = getc(iop))>=0) { *cs++ = c; if (c=='\n') break; } if (c<0 && cs==s) return(NULL); *cs++ = '\0'; return(s); } ((' k*1 3.@.@ #include FILE * freopen(file, mode, iop) char *file, *mode; register FILE *iop; { FILE *_endopen(); fclose(iop); return(_endopen(file, mode, iop)); } 'k H!i!i #include #include #define tst(a,b) (*mode == 'r'? (b) : (a)) #define RDR 0 #define WTR 1 static int popen_pid[20]; FILE * popen(cmd,mode) char *cmd; char *mode; { int p[2]; register myside, hisside, pid; if(pipe(p) < 0) return NULL; myside = tst(p[WTR], p[RDR]); hisside = tst(p[RDR], p[WTR]); if((pid = fork()) == 0) { /* myside and hisside reverse roles in child */ close(myside); dup2(hisside, tst(0, 1)); close(hisside); execl("/bin/sh", "sh", "-c", cmd, 0); _exit(1); } if(pid == -1) return NULL; popen_pid[myside] = pid; close(hisside); return(fdopen(myside, mode)); } pclose(ptr) FILE *ptr; { register f, r, (*hstat)(), (*istat)(), (*qstat)(); int status; f = fileno(ptr); fclose(ptr); istat = signal(SIGINT, SIG_IGN); qstat = signal(SIGQUIT, SIG_IGN); hstat = signal(SIGHUP, SIG_IGN); while((r = wait(&status)) != popen_pid[f] && r != -1) ; if(r == -1) status = -1; signal(SIGINT, istat); signal(SIGQUIT, qstat); signal(SIGHUP, hstat); return(status); } 'k״ H i i /* * A subroutine version of the macro putchar */ #include #undef putchar putchar(c) register c; { putc(c, stdout); } 'kڴ} H i i /* * A subroutine version of the macro getchar. */ #include #undef getchar getchar() { return(getc(stdin)); } 'kN鴁E H i i #include fputc(c, fp) FILE *fp; { return(putc(c, fp)); } 'k^촁? Hii #include fgetc(fp) FILE *fp; { return(getc(fp)); } 'kഁ Hii #include #include static char PASSWD[] = "/etc/passwd"; static char EMPTY[] = ""; static FILE *pwf = NULL; static char line[BUFSIZ+1]; static struct passwd passwd; setpwent() { if( pwf == NULL ) pwf = fopen( PASSWD, "r" ); else rewind( pwf ); } endpwent() { if( pwf != NULL ){ fclose( pwf ); pwf = NULL; } } static char * pwskip(p) register char *p; { while( *p && *p != ':' ) ++p; if( *p ) *p++ = 0; return(p); } struct passwd * getpwent() { register char *p; if (pwf == NULL) { if( (pwf = fopen( PASSWD, "r" )) == NULL ) return(0); } p = fgets(line, BUFSIZ, pwf); if (p==NULL) return(0); passwd.pw_name = p; p = pwskip(p); passwd.pw_passwd = p; p = pwskip(p); passwd.pw_uid = atoi(p); p = pwskip(p); passwd.pw_gid = atoi(p); passwd.pw_quota = 0; passwd.pw_comment = EMPTY; p = pwskip(p); passwd.pw_gecos = p; p = pwskip(p); passwd.pw_dir = p; p = pwskip(p); passwd.pw_shell = p; while(*p && *p != '\n') p++; *p = '\0'; return(&passwd); } 'k yHii #include struct passwd * getpwuid(uid) register uid; { register struct passwd *p; struct passwd *getpwent(); setpwent(); while( (p = getpwent()) && p->pw_uid != uid ); endpwent(); return(p); } 'k pHii ((#include struct passwd * getpwnam(name) char *name; { register struct passwd *p; struct passwd *getpwent(); setpwent(); while( (p = getpwent()) && strcmp(name,p->pw_name) ); endpwent(); return(p); } '!kR eHii #include #include #include char * getpass(prompt) char *prompt; { struct sgttyb ttyb; int flags; register char *p; register c; FILE *fi; static char pbuf[9]; int (*signal())(); int (*sig)(); if ((fi = fopen("/dev/tty", "r")) == NULL) fi = stdin; else setbuf(fi, (char *)NULL); sig = signal(SIGINT, SIG_IGN); gtty(fileno(fi), &ttyb); flags = ttyb.sg_flags; ttyb.sg_flags &= ~ECHO; stty(fileno(fi), &ttyb); fprintf(stderr, prompt); for (p=pbuf; (c = getc(fi))!='\n' && c!=EOF;) { if (p < &pbuf[8]) *p++ = c; } *p = '\0'; fprintf(stderr, "\n"); ttyb.sg_flags = flags; stty(fileno(fi), &ttyb); signal(SIGINT, sig); if (fi != stdin) fclose(fi); return(pbuf); } '$k XHii #include #include #define CL ':' #define CM ',' #define NL '\n' #define MAXGRP 100 static char GROUP[] = "/etc/group"; static FILE *grf = NULL; static char line[BUFSIZ+1]; static struct group group; static char *gr_mem[MAXGRP]; setgrent() { if( !grf ) grf = fopen( GROUP, "r" ); else rewind( grf ); } endgrent() { if( grf ){ fclose( grf ); grf = NULL; } } static char * grskip(p,c) register char *p; register c; { while( *p && *p != c ) ++p; if( *p ) *p++ = 0; return( p ); } struct group * getgrent() { register char *p, **q; if( !grf && !(grf = fopen( GROUP, "r" )) ) return(NULL); if( !(p = fgets( line, BUFSIZ, grf )) ) return(NULL); group.gr_name = p; group.gr_passwd = p = grskip(p,CL); group.gr_gid = atoi( p = grskip(p,CL) ); group.gr_mem = gr_mem; p = grskip(p,CL); grskip(p,NL); q = gr_mem; while( *p ){ *q++ = p; p = grskip(p,CM); } *q = NULL; return( &group ); } ''k KHii #include struct group * getgrnam(name) register char *name; { register struct group *p; struct group *getgrent(); setgrent(); while( (p = getgrent()) && strcmp(p->gr_name,name) ); endgrent(); return(p); } ')k  AHii #include struct group * getgrgid(gid) register gid; { register struct group *p; struct group *getgrent(); setgrent(); while( (p = getgrent()) && p->gr_gid != gid ); endgrent(); return(p); } '+kh s v y |  Iii / C library -- conversions width=-8. formp=-10. rjust=-12. ndfnd=-14. ndigit=-16. zfill=-18. .globl __doprnt .globl pfloat .globl pscien .globl pgen .globl __strout .globl csv .globl cret __doprnt: jsr r5,csv sub $128.+12.,sp mov 4(r5),formp(r5) / format mov 6(r5),r4 loop: mov sp,r3 mov formp(r5),r1 2: movb (r1)+,r2 beq 2f cmp r2,$'% beq 2f movb r2,(r3)+ br 2b 2: mov r1,formp(r5) cmp r3,sp beq 2f mov sp,r0 mov 8(r5),-(sp) clr -(sp) mov r3,-(sp) sub r0,(sp) mov r0,-(sp) jsr pc,__strout add $8,sp 2: tst r2 bne 2f jmp cret 2: mov sp,r3 2: clr rjust(r5) clr ndigit(r5) mov $' ,zfill(r5) cmpb *formp(r5),$'- bne 2f inc formp(r5) inc rjust(r5) 2: cmpb *formp(r5),$'0 bne 2f mov $'0,zfill(r5) 2: jsr r3,gnum mov r1,width(r5) clr ndfnd(r5) cmp r0,$'. bne 1f jsr r3,gnum mov r1,ndigit(r5) 1: mov $swtab,r1 1: mov (r1)+,r2 bne 2f movb r0,(r3)+ jmp prbuf 2: cmp r0,(r1)+ bne 1b jmp (r2) .data swtab: decimal; 'd octal; 'o hex; 'x float; 'f scien; 'e general; 'g charac; 'c string; 's longorunsg; 'l longorunsg; 'L unsigned; 'u remote; 'r long; 'D loct; 'O lhex; 'X lunsigned; 'U 0; 0 .text general: mov ndigit(r5),r0 mov ndfnd(r5),r2 jsr pc,pgen jbr prbuf longorunsg: movb *formp(r5),r0 inc formp(r5) cmp r0,$'o beq loct cmp r0,$'x beq lhex cmp r0,$'d beq long cmp r0,$'u beq lunsigned dec formp(r5) br unsigned octal: clr r0 br 1f loct: mov (r4)+,r0 1: mov $8.,r2 br 2f hex: clr r0 br 1f lhex: mov (r4)+,r0 1: mov $16.,r2 2: mov (r4)+,r1 br compute decimal: mov (r4)+,r1 sxt r0 bmi 3f br 2f unsigned: clr r0 br 1f long: mov (r4)+,r0 bge 1f mov (r4)+,r1 3: neg r0 neg r1 sbc r0 movb $'-,(r3)+ br 2f lunsigned: mov (r4)+,r0 1: mov (r4)+,r1 2: mov $10.,r2 / / Algorithm courtesy Keith Davis / compute: mov r5,-(sp) mov r4,-(sp) mov r0,r4 mov ndigit(r5),r0 mov r1,r5 ashc $0,r4 beq 1f tst r0 beq 1f movb $'0,(r3)+ 1: jsr pc,1f mov (sp)+,r4 mov (sp)+,r5 br prbuf 1: clr r0 mov r4,r1 beq 2f div r2,r0 mov r0,r4 mov r1,r0 2: mov r5,r1 asl r2 div r2,r0 asr r2 asl r0 cmp r2,r1 bgt 2f sub r2,r1 inc r0 2: mov r1,-(sp) mov r0,r5 bne 2f tst r4 beq 1f 2: jsr pc,1b 1: mov (sp)+,r0 add $'0,r0 cmp r0,$'9 ble 1f add $'a-'0-10.,r0 1: movb r0,(r3)+ rts pc charac: mov $' ,zfill(r5) mov (r4)+,r0 bic $!377,r0 beq prbuf movb r0,(r3)+ br prbuf string: mov $' ,zfill(r5) mov ndigit(r5),r1 mov (r4),r2 mov r2,r3 bne 1f mov $nulstr,r2 mov r2,r3 mov r2,(r4) 1: tstb (r2)+ beq 1f inc r3 sob r1,1b 1: mov (r4)+,r2 br prstr float: mov ndigit(r5),r0 mov ndfnd(r5),r2 jsr pc,pfloat br prbuf scien: mov ndigit(r5),r0 inc r0 tst ndfnd(r5) bne 1f mov $7,r0 1: mov pc,r2 jsr pc,pscien br prbuf remote: mov (r4)+,r4 mov (r4)+,formp(r5) jmp loop prbuf: mov sp,r2 prstr: sub r2,r3 mov width(r5),r1 sub r3,r1 bge 1f clr r1 1: tst rjust(r5) bne 1f neg r1 1: mov zfill(r5),-(sp) mov 8(r5),-(sp) mov r1,-(sp) mov r3,-(sp) mov r2,-(sp) jsr pc,__strout add $10.,sp jmp loop gnum: clr ndfnd(r5) clr r1 1: movb *formp(r5),r0 inc formp(r5) sub $'0,r0 cmp r0,$'*-'0 bne 2f mov (r4)+,r0 br 3f 2: cmp r0,$9. bhi 1f 3: inc ndfnd(r5) mul $10.,r1 add r0,r1 br 1b 1: add $'0,r0 rts r3 .data nulstr: <(null)\0> '3k m Lii ((/ phys -- C library / phys(seg, size, physad) .globl _phys, cerror .phys = 52. _phys: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 mov 8(r5),0f+4 sys 0; 9f .data 9: sys .phys; 0: ..; ..; .. .text bec 1f jmp cerror 1: mov (sp)+,r5 rts pc '5kf#j Lii / lock -- C library / lock(f) .globl _lock, cerror .lock = 53. _lock: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f .data 9: sys .lock; 0:.. .text bec 1f jmp cerror 1: mov (sp)+,r5 rts pc '7k%,g OMii / C library -- write / nwritten = write(file, buffer, count); / / nwritten == -1 means error .globl _write .globl cerror .write = 4. _write: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f mov 8(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .write; 0:..; .. '9k~(>d LMii / C library -- wait / pid = wait(0); / or, / pid = wait(&status); / / pid == -1 if error / status indicates fate of process, if given .globl _wait .globl cerror .wait = 7. _wait: mov r5,-(sp) mov sp,r5 sys .wait bec 1f jmp cerror 1: tst 4(r5) beq 1f mov r1,*4(r5) / status return 1: mov (sp)+,r5 rts pc ';k+a EMii / C library -- unlink / error = unlink(string); .globl _unlink, .globl cerror .unlink = 10. _unlink: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .unlink; 0:.. '=k.^ BMii / C library -- umount .globl _umount .globl cerror indir = 0 .umount = 22. .comm _errno,2 _umount: mov r5,-(sp) mov sp,r5 mov 4(sp),0f sys indir; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .umount; 0:.. '?k1[ ?Mii / C library -- umask / omask = umask(mode); .globl _umask .globl cerror .umask = 60. _umask: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .umask; 0:.. 'Ak&5X ;Mii / C library -- times .globl _times .times = 43. _times: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f mov (sp)+,r5 rts pc .data 9: sys .times; 0:.. 'CkA7U /Mii / C library -- time / tvec = time(tvec); / / tvec[0], tvec[1] contain the time .globl _time .time = 13. _time: mov r5,-(sp) mov sp,r5 sys .time mov r2,-(sp) mov 4(r5),r2 beq 1f mov r0,(r2)+ mov r1,(r2)+ 1: mov (sp)+,r2 mov (sp)+,r5 rts pc .globl _ftime .ftime = 35. _ftime: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f .data 9: sys .ftime; 0:.. .text mov (sp)+,r5 rts pc 'Eks;[R ,Mii .globl _sync .sync = 36. _sync: mov r5,-(sp) mov sp,r5 sys .sync mov (sp)+,r5 rts pc 'Gk>O (Mii ((/ error = stime(&long) .globl _stime .globl cerror .stime = 25. _stime: mov r5,-(sp) mov sp,r5 mov 4(sp),r1 mov (r1)+,r0 mov (r1),r1 sys .stime bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc 'Ik@L #Mii / C library -- stat / error = stat(string, statbuf); .globl _stat .globl cerror .stat = 18. _stat: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc .data 9: sys .stat; 0:..; .. 'Kk)YC F I Mii / C library -- signal / signal(n, 0); /* default action on signal(n) */ / signal(n, odd); /* ignore signal(n) */ / signal(n, label); /* goto label on signal(n) */ / returns old label, only one level. rtt = 6 .signal = 48. .globl _signal, cerror _signal: mov r5,-(sp) mov sp,r5 mov 4(r5),r1 cmp r1,$NSIG bhis 2f mov 6(r5),r0 mov r1,0f asl r1 mov dvect(r1),-(sp) mov r0,dvect(r1) mov r0,0f+2 beq 1f bit $1,r0 bne 1f asl r1 add $tvect,r1 mov r1,0f+2 1: sys 0; 9f bes 3f bit $1,r0 beq 1f mov r0,(sp) 1: mov (sp)+,r0 mov (sp)+,r5 rts pc 2: mov $22.,r0 / EINVAL 3: jmp cerror NSIG = 0 tvect: jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 jsr r0,1f; NSIG=NSIG+1 1: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) sub $tvect+4,r0 asr r0 mov r0,-(sp) asr (sp) jsr pc,*dvect(r0) tst (sp)+ mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rtt .data 9: sys .signal; 0:..; .. .bss dvect: .=.+[NSIG*2] 'Ok M@ Mii / C library -- setuid / error = setuid(uid); .globl _setuid .globl cerror .setuid = 23. _setuid: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys .setuid bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc 'QkP= Mii / C library -- setgid / error = setgid(uid); .globl _setgid .globl cerror .setgid = 46. _setgid: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys .setgid bec 1f jmp cerror 1: clr r0 mov (sp)+,r5 rts pc 'Sk{F*7 :  Mii /old = sbrk(increment); / /sbrk gets increment more core, and returns a pointer / to the beginning of the new core area / .globl _sbrk, _brk .globl _end, cerror .break = 17. _sbrk: mov r5,-(sp) mov sp,r5 mov 4(r5),0f beq 1f add nd,0f sys 0; 9f bec 1f jmp cerror 1: mov nd,r0 add 4(r5),nd mov (sp)+,r5 rts pc / brk(value) / as described in man2. / returns 0 for ok, -1 for error. _brk: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: mov 4(r5),nd clr r0 mov (sp)+,r5 rts pc .data 9: sys .break; 0:.. nd: _end 'VkX34 Mii / C library -- read / nread = read(file, buffer, count); / nread ==0 means eof; nread == -1 means error .globl _read .globl cerror .read = 3. _read: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f mov 8(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .read; 0:..; .. 'Xk[N1 Mii / ptrace -- C library / result = ptrace(req, pid, addr, data); .ptrace = 26. indir = 0 .globl _ptrace .globl cerror, _errno _ptrace: mov r5,-(sp) mov sp,r5 mov 4.(r5),0f+4 mov 6.(r5),0f+0 mov 8.(r5),0f+2 mov 10.(r5),r0 clr _errno sys indir; 9f bec 1f jmp cerror 1: mov (sp)+,r5 rts pc .data 9: sys .ptrace; 0: .=.+6 'Zk굦|"i% #include "stdio.h" main(argc, argv) char **argv; { register char *p1, *p2, *p3; if (argc < 2) { putchar('\n'); exit(1); } p1 = argv[1]; p2 = p1; while (*p1) { if (*p1++ == '/') p2 = p1; } if (argc>2) { for(p3=argv[2]; *p3; p3++) ; while(p1>p2 && p3>argv[2]) if(*--p3 != *--p1) goto output; *p1 = '\0'; } output: puts(p2, stdout); exit(0); } (('\kJj*(VY\_behknqti% #include #include #include #include #include struct stat stbuf; struct ar_hdr arbuf; #define SKIP 1 #define IODD 2 #define OODD 4 #define HEAD 8 char *man = { "mrxtdpq" }; char *opt = { "uvnbail" }; int signum[] = {SIGHUP, SIGINT, SIGQUIT, 0}; int sigdone(); long lseek(); int rcmd(); int dcmd(); int xcmd(); int tcmd(); int pcmd(); int mcmd(); int qcmd(); int (*comfun)(); char flg[26]; char **namv; int namc; char *arnam; char *ponam; char *tmpnam = { "/tmp/vXXXXX" }; char *tmp1nam = { "/tmp/v1XXXXX" }; char *tmp2nam = { "/tmp/v2XXXXX" }; char *tfnam; char *tf1nam; char *tf2nam; char *file; char name[16]; int af; int tf; int tf1; int tf2; int qf; int bastate; char buf[512]; char *trim(); char *mktemp(); char *ctime(); main(argc, argv) char *argv[]; { register i; register char *cp; for(i=0; signum[i]; i++) if(signal(signum[i], SIG_IGN) != SIG_IGN) signal(signum[i], sigdone); if(argc < 3) usage(); cp = argv[1]; for(cp = argv[1]; *cp; cp++) switch(*cp) { case 'l': case 'v': case 'u': case 'n': case 'a': case 'b': case 'c': case 'i': flg[*cp - 'a']++; continue; case 'r': setcom(rcmd); continue; case 'd': setcom(dcmd); continue; case 'x': setcom(xcmd); continue; case 't': setcom(tcmd); continue; case 'p': setcom(pcmd); continue; case 'm': setcom(mcmd); continue; case 'q': setcom(qcmd); continue; default: fprintf(stderr, "ar: bad option `%c'\n", *cp); done(1); } if(flg['l'-'a']) { tmpnam = "vXXXXX"; tmp1nam = "v1XXXXX"; tmp2nam = "v2XXXXX"; } if(flg['i'-'a']) flg['b'-'a']++; if(flg['a'-'a'] || flg['b'-'a']) { bastate = 1; ponam = trim(argv[2]); argv++; argc--; if(argc < 3) usage(); } arnam = argv[2]; namv = argv+3; namc = argc-3; if(comfun == 0) { if(flg['u'-'a'] == 0) { fprintf(stderr, "ar: one of [%s] must be specified\n", man); done(1); } setcom(rcmd); } (*comfun)(); done(notfound()); } setcom(fun) int (*fun)(); { if(comfun != 0) { fprintf(stderr, "ar: only one of [%s] allowed\n", man); done(1); } comfun = fun; } rcmd() { register f; init(); getaf(); while(!getdir()) { bamatch(); if(namc == 0 || match()) { f = stats(); if(f < 0) { if(namc) fprintf(stderr, "ar: cannot open %s\n", file); goto cp; } if(flg['u'-'a']) if(stbuf.st_mtime <= arbuf.ar_date) { close(f); goto cp; } mesg('r'); copyfil(af, -1, IODD+SKIP); movefil(f); continue; } cp: mesg('c'); copyfil(af, tf, IODD+OODD+HEAD); } cleanup(); } dcmd() { init(); if(getaf()) noar(); while(!getdir()) { if(match()) { mesg('d'); copyfil(af, -1, IODD+SKIP); continue; } mesg('c'); copyfil(af, tf, IODD+OODD+HEAD); } install(); } xcmd() { register f; if(getaf()) noar(); while(!getdir()) { if(namc == 0 || match()) { f = creat(file, arbuf.ar_mode & 0777); if(f < 0) { fprintf(stderr, "ar: %s cannot create\n", file); goto sk; } mesg('x'); copyfil(af, f, IODD); close(f); continue; } sk: mesg('c'); copyfil(af, -1, IODD+SKIP); if (namc > 0 && !morefil()) done(0); } } pcmd() { if(getaf()) noar(); while(!getdir()) { if(namc == 0 || match()) { if(flg['v'-'a']) { printf("\n<%s>\n\n", file); fflush(stdout); } copyfil(af, 1, IODD); continue; } copyfil(af, -1, IODD+SKIP); } } mcmd() { init(); if(getaf()) noar(); tf2nam = mktemp(tmp2nam); close(creat(tf2nam, 0600)); tf2 = open(tf2nam, 2); if(tf2 < 0) { fprintf(stderr, "ar: cannot create third temp\n"); done(1); } while(!getdir()) { bamatch(); if(match()) { mesg('m'); copyfil(af, tf2, IODD+OODD+HEAD); continue; } mesg('c'); copyfil(af, tf, IODD+OODD+HEAD); } install(); } tcmd() { if(getaf()) noar(); while(!getdir()) { if(namc == 0 || match()) { if(flg['v'-'a']) longt(); printf("%s\n", trim(file)); } copyfil(af, -1, IODD+SKIP); } } qcmd() { register i, f; if (flg['a'-'a'] || flg['b'-'a']) { fprintf(stderr, "ar: abi not allowed with q\n"); done(1); } getqf(); for(i=0; signum[i]; i++) signal(signum[i], SIG_IGN); lseek(qf, 0l, 2); for(i=0; i 0) if (write(af, buf, i) != i) wrerr(); } if(tf2nam) { lseek(tf2, 0l, 0); while((i = read(tf2, buf, 512)) > 0) if (write(af, buf, i) != i) wrerr(); } if(tf1nam) { lseek(tf1, 0l, 0); while((i = read(tf1, buf, 512)) > 0) if (write(af, buf, i) != i) wrerr(); } } /* * insert the file 'file' * into the temporary file */ movefil(f) { register char *cp; register i; cp = trim(file); for(i=0; i<14; i++) if(arbuf.ar_name[i] = *cp) cp++; arbuf.ar_size = stbuf.st_size; arbuf.ar_date = stbuf.st_mtime; arbuf.ar_uid = stbuf.st_uid; arbuf.ar_gid = stbuf.st_gid; arbuf.ar_mode = stbuf.st_mode; copyfil(f, tf, OODD+HEAD); close(f); } stats() { register f; f = open(file, 0); if(f < 0) return(f); if(fstat(f, &stbuf) < 0) { close(f); return(-1); } return(f); } /* * copy next file * size given in arbuf */ copyfil(fi, fo, flag) { register i, o; int pe; if(flag & HEAD) if (write(fo, (char *)&arbuf, sizeof arbuf) != sizeof arbuf) wrerr(); pe = 0; while(arbuf.ar_size > 0) { i = o = 512; if(arbuf.ar_size < i) { i = o = arbuf.ar_size; if(i&1) { if(flag & IODD) i++; if(flag & OODD) o++; } } if(read(fi, buf, i) != i) pe++; if((flag & SKIP) == 0) if (write(fo, buf, o) != o) wrerr(); arbuf.ar_size -= 512; } if(pe) phserr(); } getdir() { register i; i = read(af, (char *)&arbuf, sizeof arbuf); if(i != sizeof arbuf) { if(tf1nam) { i = tf; tf = tf1; tf1 = i; } return(1); } for(i=0; i<14; i++) name[i] = arbuf.ar_name[i]; file = name; return(0); } match() { register i; for(i=0; i 1) printf("%c - %s\n", c, file); } char * trim(s) char *s; { register char *p1, *p2; for(p1 = s; *p1; p1++) ; while(p1 > s) { if(*--p1 != '/') break; *p1 = 0; } p2 = s; for(p1 = s; *p1; p1++) if(*p1 == '/') p2 = p1+1; return(p2); } #define IFMT 060000 #define ISARG 01000 #define LARGE 010000 #define ((SUID 04000 #define SGID 02000 #define ROWN 0400 #define WOWN 0200 #define XOWN 0100 #define RGRP 040 #define WGRP 020 #define XGRP 010 #define ROTH 04 #define WOTH 02 #define XOTH 01 #define STXT 01000 longt() { register char *cp; pmode(); printf("%3d/%1d", arbuf.ar_uid, arbuf.ar_gid); printf("%7D", arbuf.ar_size); cp = ctime(&arbuf.ar_date); printf(" %-12.12s %-4.4s ", cp+4, cp+20); } int m1[] = { 1, ROWN, 'r', '-' }; int m2[] = { 1, WOWN, 'w', '-' }; int m3[] = { 2, SUID, 's', XOWN, 'x', '-' }; int m4[] = { 1, RGRP, 'r', '-' }; int m5[] = { 1, WGRP, 'w', '-' }; int m6[] = { 2, SGID, 's', XGRP, 'x', '-' }; int m7[] = { 1, ROTH, 'r', '-' }; int m8[] = { 1, WOTH, 'w', '-' }; int m9[] = { 2, STXT, 't', XOTH, 'x', '-' }; int *m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9}; pmode() { register int **mp; for (mp = &m[0]; mp < &m[9];) select(*mp++); } select(pairp) int *pairp; { register int n, *ap; ap = pairp; n = *ap++; while (--n>=0 && (arbuf.ar_mode&*ap++)==0) ap++; putchar(*ap); } wrerr() { perror("ar write error"); done(1); } 'sk!Sqi% main(argc, argv) char **argv; { extern errno; if (argc > 1) acct(argv[1]); else acct((char *)0); if (errno) { perror("accton"); exit(1); } exit(0); } 'uk䴁;>ADGJMPEi% /* * acct [ -w wtmp ] [ -d ] [ -p ] [ people ] */ #include #include #include #include #include #include #define TSIZE 33 #define USIZE 200 struct utmp ibuf; struct ubuf { char uname[8]; long utime; } ubuf[USIZE]; struct tbuf { struct ubuf *userp; long ttime; } tbuf[TSIZE]; char *wtmp; int pflag, byday; long dtime; long midnight; long lastime; long day = 86400L; int pcount; char **pptr; main(argc, argv) char **argv; { int c, fl; register i; FILE *wf; wtmp = "/usr/adm/wtmp"; while (--argc > 0 && **++argv == '-') switch(*++*argv) { case 'd': byday++; continue; case 'w': if (--argc>0) wtmp = *++argv; continue; case 'p': pflag++; continue; } pcount = argc; pptr = argv; if ((wf = fopen(wtmp, "r")) == NULL) { printf("No %s\n", wtmp); exit(1); } for(;;) { if (fread((char *)&ibuf, sizeof(ibuf), 1, wf) != 1) break; fl = 0; for (i=0; i<8; i++) { c = ibuf.ut_name[i]; if(isdigit(c) || isalpha(c)) { if (fl) goto skip; continue; } if (c==' ' || c=='\0') { fl++; ibuf.ut_name[i] = '\0'; } else goto skip; } loop(); skip:; } ibuf.ut_name[0] = '\0'; ibuf.ut_line[0] = '~'; time(&ibuf.ut_time); loop(); print(); exit(0); } loop() { register i; register struct tbuf *tp; register struct ubuf *up; if(ibuf.ut_line[0] == '|') { dtime = ibuf.ut_time; return; } if(ibuf.ut_line[0] == '}') { if(dtime == 0) return; for(tp = tbuf; tp < &tbuf[TSIZE]; tp++) tp->ttime += ibuf.ut_time-dtime; dtime = 0; return; } if (lastime>ibuf.ut_time || lastime+(1.5*day) midnight) { upall(1); print(); newday(); for (up=ubuf; up < &ubuf[USIZE]; up++) up->utime = 0; } if (ibuf.ut_line[0] == '~') { ibuf.ut_name[0] = '\0'; upall(0); return; } if (ibuf.ut_line[0]=='t') i = (ibuf.ut_line[3]-'0')*10 + (ibuf.ut_line[4]-'0'); else i = TSIZE-1; if (i<0 || i>=TSIZE) i = TSIZE-1; tp = &tbuf[i]; update(tp, 0); } print() { int i; long ttime, t; ttime = 0; for (i=0; i0) ttime += t; if (pflag && ubuf[i].utime > 0) { printf("\t%-8.8s%6.2f\n", ubuf[i].uname, ubuf[i].utime/3600.); } } if (ttime > 0) { pdate(); printf("\ttotal%9.2f\n", ttime/3600.); } } upall(f) { register struct tbuf *tp; for (tp=tbuf; tp < &tbuf[TSIZE]; tp++) update(tp, f); } update(tp, f) struct tbuf *tp; { int j; struct ubuf *up; long t, t1; if (f) t = midnight; else t = ibuf.ut_time; if (tp->userp) { t1 = t - tp->ttime; if (t1>0 && t1 < 1.5*day) tp->userp->utime += t1; } tp->ttime = t; if (f) return; if (ibuf.ut_name[0]=='\0') { tp->userp = 0; return; } for (up=ubuf; up < &ubuf[USIZE]; up++) { if (up->uname[0] == '\0') break; for (j=0; j<8 && up->uname[j]==ibuf.ut_name[j]; j++); if (j>=8) break; } for (j=0; j<8; j++) up->uname[j] = ibuf.ut_name[j]; tp->userp = up; } among(i) { register j, k; register char *p; if (pcount==0) return(1); for (j=0; jtm_isdst) midnight -= 3600; } while (midnight <= ibuf.ut_time) midnight += day; } pdate() { long x; char *ctime(); if (byday==0) return; x = midnight-1; printf("%.6s", ctime(&x)+4); } '~kqŴ258yi& /* * A one-rotor machine designed along the lines of Enigma * but considerably trivialized. */ #define ECHO 010 #include #define ROTORSZ 256 #define MASK 0377 char t1[ROTORSZ]; char t2[ROTORSZ]; char t3[ROTORSZ]; char *getpass(); setup(pw) char *pw; { int ic, i, k, temp, pf[2]; unsigned random; char buf[13]; long seed; strncpy(buf, pw, 8); while (*pw) *pw++ = '\0'; buf[8] = buf[0]; buf[9] = buf[1]; pipe(pf); if (fork()==0) { close(0); close(1); dup(pf[0]); dup(pf[1]); execl("/usr/lib/makekey", "-", 0); execl("/lib/makekey", "-", 0); exit(1); } write(pf[1], buf, 10); wait((int *)NULL); if (read(pf[0], buf, 13) != 13) { fprintf(stderr, "crypt: cannot generate key\n"); exit(1); } seed = 123; for (i=0; i<13; i++) seed = seed*buf[i] + i; for(i=0;i>= 8; temp = t1[k]; t1[k] = t1[ic]; t1[ic] = temp; if(t3[k]!=0) continue; ic = (random&MASK) % k; while(t3[ic]!=0) ic = (ic+1) % k; t3[k] = ic; t3[ic] = k; } for(i=0;i=0) { i = t2[(t3[(t1[(i+n1)&MASK]+n2)&MASK]-n2)&MASK]-n1; putchar(i); n1++; if(n1==ROTORSZ) { n1 = 0; n2++; if(n2==ROTORSZ) n2 = 0; } } } 'kꂇ #&),/T__ C= for a do s=.c case $a in *.y) s=.y ;; *.s) s=.s ;; esac b=`basename $a $s` D=/bin echo $a: case $b in -cmp) C=cmp continue ;; -cp) C=cp continue ;; ac) cc -n -s -O ac.c -o ac ;; accton) cc -n -s -O accton.c -o accton; D=/etc ;; ar) cc -n -s -O ar.c -o ar ;; arcv) cc -n -s -O arcv.c -o arcv ;; at) cc -n -s -O at.c -o at ;; atrun) cc -n -s -O atrun.c -o atrun; D=/usr/lib ;; basename) cc -n -s -O basename.c -o basename ;; bc) yacc bc.y && mv y.tab.c bc.c && cc -n -s -O bc.c -o bc && r((m bc.c ;; cal) cc -n -s -O cal.c -o cal ;; calendar) cc -n -s -O calendar.c -o calendar; D=/usr/lib ;; cat) cc -n -s -O cat.c -o cat ;; cb) cc -n -s -O cb.c -o cb ;; cc) cc -n -s -O cc.c -o cc ;; checkeq) cc -n -s -O checkeq.c -o checkeq ;; chgrp) cc -n -s -O chgrp.c -o chgrp ;; chmod) cc -n -s -O chmod.c -o chmod ;; chown) cc -n -s -O chown.c -o chown ;; clri) cc -n -s -O clri.c -o clri ;; cmp) cc -n -s -O cmp.c -o cmp ;; col) cc -n -s -O col.c -o col ;; comm) cc -n -s -O comm.c -o comm ;; cp) cc -n -s -O cp.c -o cp ;; cron) cc -n -s -O cron.c -o cron; D=/etc ;; crypt) cc -n -s -O crypt.c -o crypt ;; cu) cc -n -s -O cu.c -o cu ;; date) cc -n -s -O date.c -o date ;; dcheck) cc -i -s -O dcheck.c -o dcheck ;; dd) cc -i -s -O dd.c -o dd ;; deroff) cc -n -s -O deroff.c -o deroff ;; df) cc -n -s -O df.c -o df ;; diff) cc -n -s -O diff.c -o diff ;; diff3) cc -n -s -O diff3.c -o diff3; D=/usr/lib ;; diffh) cc -n -s -O diffh.c -o diffh; D=/usr/lib ;; dmesg) cc -n -s -O dmesg.c -o dmesg; D=/etc ;; du) cc -n -s -O du.c -o du ;; dump) cc -n -s -O dump.c -o dump ;; dumpdir) cc -n -s -O dumpdir.c -o dumpdir ;; echo) cc -n -s -O echo.c -o echo ;; ed) cc -n -s -O ed.c -o ed ;; egrep) yacc egrep.y && mv y.tab.c egrep.c && cc -n -s -O egrep.c -o egrep && rm egrep.c ;; expr) yacc expr.y && mv y.tab.c expr.c && cc -n -s -O expr.c -o expr && rm expr.c ;; factor) as -o factor factor.s && strip factor;; fgrep) cc -i -s -O fgrep.c -o fgrep ;; file) cc -n -s -O file.c -o file ;; find) cc -n -s -O find.c -o find ;; getty) cc -n -s -O getty.c -o getty; D=/etc ;; graph) cc -n -s -O graph.c -o graph -lplot -lm ;; grep) cc -n -s -O grep.c -o grep ;; icheck) cc -i -s -O icheck.c -o icheck ;; init) cc -n -s -O init.c -o init; D=/etc ;; iostat) cc -n -s -O iostat.c -o iostat ;; join) cc -n -s -O join.c -o join ;; kill) cc -n -s -O kill.c -o kill ;; ld) cc -n -s -O ld.c -o ld ;; ln) cc -n -s -O ln.c -o ln ;; login) cc -n -s -O login.c -o login ;; look) cc -n -s -O look.c -o look ;; ls) cc -n -s -O ls.c -o ls ;; mail) cc -n -s -O mail.c -o mail ;; makekey) cc -n -s -O makekey.c -o makekey; D=/usr/lib ;; mesg) cc -n -s -O mesg.c -o mesg ;; mkdir) cc -n -s -O mkdir.c -o mkdir ;; mkfs) cc -n -s -O mkfs.c -o mkfs; D=/etc ;; mknod) cc -n -s -O mknod.c -o mknod; D=/etc ;; mount) cc -n -s -O mount.c -o mount; D=/etc ;; mv) cc -n -s -O mv.c -o mv ;; ncheck) cc -i -s -O ncheck.c -o ncheck ;; newgrp) cc -n -s -O newgrp.c -o newgrp ;; nice) cc -n -s -O nice.c -o nice ;; nm) cc -n -s -O nm.c -o nm ;; od) cc -n -s -O od.c -o od ;; osh) cc -n -s -O osh.c -o osh ;; passwd) cc -n -s -O passwd.c -o passwd ;; pr) cc -n -s -O pr.c -o pr ;; primes) as -o primes /usr/include/sys.s primes.s && strip primes ;; prof) cc -n -s -O -Dplot prof.c -lplot -o prof ;; ps) cc -n -s -O ps.c -o ps ;; pstat) cc -n -s -O pstat.c -o pstat ;; ptx) cc -n -s -O ptx.c -o ptx ;; pwd) cc -n -s -O pwd.c -o pwd ;; quot) cc -n -s -O quot.c -o quot ;; random) cc -n -s -O random.c -o random ;; ranlib) cc -n -s -O ranlib.c -o ranlib ;; restor) cc -i -s -O restor.c -o restor ;; rev) cc -n -s -O rev.c -o rev ;; rm) cc -n -s -O rm.c -o rm ;; rmdir) cc -n -s -O rmdir.c -o rmdir ;; sa) cc -n -s -O sa.c -o sa ;; size) cc -n -s -O size.c -o size ;; sleep) cc -n -s -O sleep.c -o sleep ;; sort) cc -i -s -O sort.c -o sort ;; sp) cc -n -s -O sp.c -o sp ;; spline) cc -n -s -O spline.c -o spline ;; split) cc -n -s -O split.c -o split ;; strip) cc -n -s -O strip.c -o strip ;; stty) cc -n -s -O stty.c -o stty ;; su) cc -n -s -O su.c -o su ;; sum) cc -n -s -O sum.c -o sum ;; sync) cc -n -s -O sync.c -o sync ;; tabs) cc -n -s -O tabs.c -o tabs ;; tail) cc -n -s -O tail.c -o tail ;; tc) cc -n -s -O tc.c -o tc ;; tee) cc -n -s -O tee.c -o tee ;; test) cc -n -s -O test.c -o test ;; time) cc -n -s -O time.c -o time ;; tk) cc -n -s -O tk.c -o tk ;; touch) cc -n -s -O touch.c -o touch ;; tr) cc -n -s -O tr.c -o tr ;; tsort) cc -n -s -O tsort.c -o tsort ;; tty) cc -n -s -O tty.c -o tty ;; umount) cc -n -s -O umount.c -o umount; D=/etc ;; uniq) cc -n -s -O uniq.c -o uniq ;; units) cc -n -s -O units.c -o units ;; update) cc -n -s -O update.c -o update; D=/etc ;; vpr) cc -n -s -O vpr.c -o vpr ;; wall) cc -n -s -O wall.c -o wall; D=/etc ;; wc) cc -n -s -O wc.c -o wc ;; who) cc -n -s -O who.c -o who ;; write) cc -n -s -O write.c -o write ;; yes) cc -n -s -O yes.c -o yes ;; *) echo "cmake: don't know about $b" continue ;; esac || continue case $C in cmp) cmp $b $D/$b && rm $b ;; cp) cp $b $D/$b && rm $b ;; esac done 'kI|ii CFLAGS = -i -O all: adb cmp: adb cmp adb /bin/adb rm adb *.o cp: adb cp adb /bin/adb rm adb *.o adb: access.o command.o expr.o findfn.o adb: format.o input.o opset.o main.o adb: message.o output.o pcs.o print.o adb: runpcs.o setup.o sym.o adb:; cc -o adb -i *.o access.o: defs.h command.o: defs.h expr.o: defs.h findrtn.o: defs.h format.o: defs.h input.o: defs.h main.o: defs.h message.o: mac.h mode.h output.o: defs.h pcs.o: defs.h print.o: defs.h runpcs.o: defs.h setup.o: defs.h sym.o: defs.h 'k1 =i #include "machine.h" /* * UNIX debugger */ #define MAXCOM 64 #define MAXARG 32 #define LINSIZ 256 TYPE int INT; TYPE int VOID; TYPE long int L_INT; TYPE float REAL; TYPE double L_REAL; TYPE unsigned POS; TYPE char BOOL; TYPE char CHAR; TYPE char *STRING; TYPE char MSG[]; TYPE struct map MAP; TYPE MAP *MAPPTR; TYPE struct symtab SYMTAB; TYPE SYMTAB *SYMPTR; TYPE struct symslave SYMSLAVE; TYPE struct bkpt BKPT; TYPE BKPT *BKPTR; /* file address maps */ struct map { L_INT b1; L_INT e1; L_INT f1; L_INT b2; L_INT e2; L_INT f2; INT ufd; }; /* slave table for symbols */ struct symslave { SYMV valslave; INT typslave; }; struct bkpt { INT loc; INT ins; INT count; INT initcnt; INT flag; CHAR comm[MAXCOM]; BKPT *nxtbkpt; }; TYPE struct reglist REGLIST; TYPE REGLIST *REGPTR; struct reglist { STRING rname; INT roffs; }; struct { INT junk[2]; INT fpsr; REAL Sfr[6]; }; struct { INT junk[2]; INT fpsr; L_REAL Lfr[6]; }; 'k.=i # /* * UNIX/INTERDATA debugger */ /* unix parameters */ #define DBNAME "adb\n" #define LPRMODE "%Q" #define OFFMODE "+%o" #define TXTRNDSIZ 8192L TYPE unsigned TXTHDR[8]; TYPE unsigned SYMV; /* symbol table in a.out file */ struct symtab { char symc[8]; int symf; SYMV symv; }; #define SYMTABSIZ (sizeof (struct symtab)) #define SYMCHK 047 #define SYMTYPE(symflg) (( symflg>=041 || (symflg>=02 && symflg<=04))\ ? ((symflg&07)>=3 ? DSYM : (symflg&07))\ : NSYM\ ) 'ki!=i # /* * UNIX debugger */ #define TYPE typedef #define STRUCT struct #define UNION union #define REG register #define BEGIN { #define END } #define IF if( #define THEN ){ #define ELSE } else { #define ELIF } else if ( #define FI } #define FOR for( #define WHILE while( #define DO ){ #define OD } #define REP do{ #define PER }while( #define DONE ); #define LOOP for(;;){ #define POOL } #define SKIP ; #define DIV / #define REM % #define NEQ ^ #define ANDF && #define ORF || #define TRUE (-1) #define FALSE 0 #define LOBYTE 0377 #define HIBYTE 0177400 #define STRIP 0177 #define HEXMSK 017 #define SP ' ' #define TB '\t' #define NL '\n' #define EOF 0 'k ,=i ((# /* * * UNIX debugger - common definitions * */ /* Layout of a.out file (fsym): * * header of 8 words magic number 405, 407, 410, 411 * text size ) * data size ) in bytes but even * bss size ) * symbol table size * entry point * {unused} * flag set if no relocation * * * header: 0 * text: 16 * data: 16+textsize * relocation: 16+textsize+datasize * symbol table: 16+2*(textsize+datasize) or 16+textsize+datasize * */ #include #include #include #include #include #include "mac.h" #include "mode.h" #define VARB 11 #define VARD 13 #define VARE 14 #define VARM 22 #define VARS 28 #define VART 29 #define COREMAGIC 0140000 #define RD 0 #define WT 1 #define NSP 0 #define ISP 1 #define DSP 2 #define STAR 4 #define STARCOM 0200 #define DSYM 7 #define ISYM 2 #define ASYM 1 #define NSYM 0 #define ESYM (-1) #define BKPTSET 1 #define BKPTEXEC 2 #define SYMSIZ 100 #define MAXSIG 20 #define USERPS 2*(512-1) #define USERPC 2*(512-2) #define BPT 03 #define FD 0200 #define SETTRC 0 #define RDUSER 2 #define RIUSER 1 #define WDUSER 5 #define WIUSER 4 #define RUREGS 3 #define WUREGS 6 #define CONTIN 7 #define SINGLE 9 #define EXIT 8 #define FROFF (&(0->fpsr)) #define FRLEN 25 #define FRMAX 6 #define ps -1 #define pc -2 #define sp -6 #define r5 -9 #define r4 -10 #define r3 -11 #define r2 -12 #define r1 -5 #define r0 -3 #define MAXOFF 255 #define MAXPOS 80 #define MAXLIN 128 #define EOF 0 #define EOR '\n' #define TB '\t' #define QUOTE 0200 #define STRIP 0177 #define LOBYTE 0377 #define EVEN -2 /* long to ints and back (puns) */ union { INT I[2]; L_INT L; } itolws; #define leng(a) ((long)((unsigned)(a))) #define shorten(a) ((int)(a)) #define itol(a,b) (itolws.I[0]=(a), itolws.I[1]=(b), itolws.L) /* result type declarations */ L_INT inkdot(); SYMPTR lookupsym(); SYMPTR symget(); POS get(); POS chkget(); STRING exform(); L_INT round(); BKPTR scanbkpt(); VOID fault(); typedef struct sgttyb TTY; TTY adbtty, usrtty; #include jmp_buf erradb; 'kB >i # /* * * UNIX debugger * */ #include "defs.h" MSG BADFIL; SYMTAB symbol; BOOL localok; INT lastframe; SYMSLAVE *symvec; POS maxoff; L_INT maxstor; /* symbol management */ L_INT symbas; L_INT symcnt; L_INT symnum; L_INT localval; char symrqd -1; SYMTAB symbuf[SYMSIZ]; SYMPTR symnxt; SYMPTR symend; INT fsym; STRING errflg; POS findsym(); /* symbol table and file handling service routines */ longseek(f, a) L_INT a; { return(lseek(f,a,0) != -1); } valpr(v,idsp) { POS d; d = findsym(v,idsp); IF d < maxoff THEN printf("%.8s", symbol.symc); IF d THEN printf(OFFMODE, d); FI FI } localsym(cframe) L_INT cframe; { INT symflg; WHILE nextsym() ANDF localok ANDF symbol.symc[0]!='~' ANDF (symflg=symbol.symf)!=037 DO IF symflg>=2 ANDF symflg<=4 THEN localval=symbol.symv; return(TRUE); ELIF symflg==1 THEN localval=leng(shorten(cframe)+symbol.symv); return(TRUE); ELIF symflg==20 ANDF lastframe THEN localval=leng(lastframe+2*symbol.symv-10); return(TRUE); FI OD return(FALSE); } psymoff(v,type,s) L_INT v; int type; char *s; { POS w; w = findsym(shorten(v),type); IF w >= maxoff THEN printf(LPRMODE,v); ELSE printf("%.8s", symbol.symc); IF w THEN printf(OFFMODE,w); FI FI printf(s); } POS findsym(svalue,type) POS svalue; INT type; { L_INT diff, value, symval, offset; INT symtyp; REG SYMSLAVE *symptr; SYMSLAVE *symsav; value=svalue; diff = 0377777L; symsav=0; IF type!=NSYM ANDF (symptr=symvec) THEN WHILE diff ANDF (symtyp=symptr->typslave)!=ESYM DO IF symtyp==type THEN symval=leng(symptr->valslave); IF value-symval=symval THEN diff = value-symval; symsav=symptr; FI FI symptr++; OD IF symsav THEN offset=leng(symsav-symvec); symcnt=symnum-offset; longseek(fsym, symbas+offset*SYMTABSIZ); read(fsym,&symbol,SYMTABSIZ); FI FI return(shorten(diff)); } nextsym() { IF (--symcnt)<0 THEN return(FALSE); ELSE return(longseek(fsym, symbas+(symnum-symcnt)*SYMTABSIZ)!=0 ANDF read(fsym,&symbol,SYMTABSIZ)==SYMTABSIZ); FI } /* sequential search through file */ symset() { symcnt = symnum; symnxt = symbuf; IF symrqd THEN longseek(fsym, symbas); symread(); symrqd=FALSE; ELSE longseek(fsym, symbas+sizeof symbuf); FI } SYMPTR symget() { REG INT rc; IF symnxt >= symend THEN rc=symread(); symrqd=TRUE; ELSE rc=TRUE; FI IF --symcnt>0 ANDF rc==0 THEN errflg=BADFIL; FI return( (symcnt>=0 && rc) ? symnxt++ : 0); } symread() { INT symlen; IF (symlen=read(fsym,symbuf,sizeof symbuf))>=SYMTABSIZ THEN symnxt = symbuf; symend = &symbuf[symlen/SYMTABSIZ]; return(TRUE); ELSE return(FALSE); FI } 'kx ,i # /* * * UNIX debugger * */ #include "defs.h" MSG BADNAM; MSG BADMAG; MAP txtmap; MAP datmap; SYMSLAVE *symvec; INT wtflag; INT fcor; INT fsym; L_INT maxfile; L_INT maxstor; L_INT txtsiz; L_INT datsiz; L_INT datbas; L_INT stksiz; STRING errflg; INT magic; L_INT symbas; L_INT symnum; L_INT entrypt; INT argcount; INT signo; POS corhdr[512]; POS *endhdr &corhdr[512]; STRING symfil "a.out"; STRING corfil "core"; #define TXTHDRSIZ (sizeof(txthdr)) setsym() { INT relflg; INT symval, symflg; SYMSLAVE *symptr; SYMPTR symp; TXTHDR txthdr; fsym=getfile(symfil,1); txtmap.ufd=fsym; IF read(fsym, txthdr, TXTHDRSIZ)==TXTHDRSIZ THEN magic=txthdr[0]; IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405 THEN magic=0; ELSE symnum=txthdr[4]/SYMTABSIZ; txtsiz=txthdr[1]; datsiz=txthdr[2]; symbas=txtsiz+datsiz; txtmap.b1=0; txtmap.e1=(magic==0407?symbas:txtsiz); txtmap.f1 = TXTHDRSIZ; txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0); txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz); txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1); entrypt=txthdr[5]; relflg=txthdr[7]; IF relflg!=1 THEN symbas =<< 1; FI symbas += TXTHDRSIZ; /* set up symvec */ symvec=sbrk(shorten((1+symnum))*sizeof (SYMSLAVE)); IF (symptr=symvec)==-1 THEN printf("%s\n",BADNAM); symptr=symvec=sbrk(sizeof (SYMSLAVE)); ELSE symset(); WHILE (symp=symget()) ANDF errflg==0 DO symval=symp->symv; symflg=symp->symf; symptr->valslave=symval; symptr->typslave=SYMTYPE(symflg); symptr++; OD FI symptr->typslave=ESYM; FI FI IF magic==0 THEN txtmap.e1=maxfile; FI } setcor() { fcor=getfile(corfil,2); datmap.ufd=fcor; IF read(fcor, corhdr, ctob(USIZE))==ctob(USIZE) THEN txtsiz = corhdr->u_tsize << 6; datsiz = corhdr->u_dsize << 6; stksiz = corhdr->u_ssize << 6; datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0); datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz; datmap.f1 = ctob(USIZE); datmap.b2 = maxstor-stksiz; datmap.e2 = maxstor; datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1); IF magic ANDF magic!=corhdr[0].u_exdata.ux_mag THEN printf("%s\n",BADMAG); FI ELSE datmap.e1 = maxfile; FI } create(f) STRING f; { int fd; IF (fd=creat(f,0644))>=0 THEN close(fd); return(open(f,wtflag)); ELSE return(-1); FI } getfile(filnam,cnt) STRING filnam; { REG INT fsym; IF !eqstr("-",filnam) THEN fsym=open(filnam,wtflag); IF fsym<0 ANDF argcount>cnt THEN IF wtflag THEN fsym=create(filnam); FI IF fsym<0 THEN printf("cannot open `%s'\n", filnam); FI FI ELSE fsym = -1; FI return(fsym); } 'kK ~~i ((# /* * * UNIX debugger * */ #include "defs.h" MSG NOFORK; MSG ENDPCS; MSG BADWAIT; CHAR *lp; INT sigint; INT sigqit; /* breakpoints */ BKPTR bkpthead; REGLIST reglist[]; CHAR lastc; POS corhdr[]; POS *endhdr; INT fcor; INT fsym; STRING errflg; INT errno; INT signo; L_INT dot; STRING symfil; INT wtflag; INT pid; L_INT expv; INT adrflg; L_INT loopcnt; /* service routines for sub process control */ getsig(sig) { return(expr(0) ? shorten(expv) : sig); } INT userpc=1; runpcs(runmode, execsig) { INT rc; REG BKPTR bkpt; IF adrflg THEN userpc=shorten(dot); FI setbp(); printf("%s: running\n", symfil); WHILE (loopcnt--)>0 DO #ifdef DEBUG printf("\ncontinue %d %d\n",userpc,execsig); #endif stty(0,&usrtty); ptrace(runmode,pid,userpc,execsig); bpwait(); chkerr(); readregs(); /*look for bkpt*/ IF signo==0 ANDF (bkpt=scanbkpt(endhdr[pc]-2)) THEN /*stopped at bkpt*/ userpc=endhdr[pc]=bkpt->loc; IF bkpt->flag==BKPTEXEC ORF ((bkpt->flag=BKPTEXEC, command(bkpt->comm,':')) ANDF --bkpt->count) THEN execbkpt(bkpt); execsig=0; loopcnt++; userpc=1; ELSE bkpt->count=bkpt->initcnt; rc=1; FI ELSE rc=0; execsig=signo; userpc=1; FI OD return(rc); } endpcs() { REG BKPTR bkptr; IF pid THEN ptrace(EXIT,pid,0,0); pid=0; userpc=1; FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag THEN bkptr->flag=BKPTSET; FI OD FI } setup() { close(fsym); fsym = -1; IF (pid = fork()) == 0 THEN ptrace(SETTRC,0,0,0); signal(SIGINT,sigint); signal(SIGQUIT,sigqit); doexec(); exit(0); ELIF pid == -1 THEN error(NOFORK); ELSE bpwait(); readregs(); lp[0]=EOR; lp[1]=0; fsym=open(symfil,wtflag); IF errflg THEN printf("%s: cannot execute\n",symfil); endpcs(); error(0); FI FI } execbkpt(bkptr) BKPTR bkptr; { INT bkptloc; #ifdef DEBUG printf("exbkpt: %d\n",bkptr->count); #endif bkptloc = bkptr->loc; ptrace(WIUSER,pid,bkptloc,bkptr->ins); stty(0,&usrtty); ptrace(SINGLE,pid,bkptloc,0); bpwait(); chkerr(); ptrace(WIUSER,pid,bkptloc,BPT); bkptr->flag=BKPTSET; } doexec() { STRING argl[MAXARG]; CHAR args[LINSIZ]; STRING p, *ap, filnam; ap=argl; p=args; *ap++=symfil; REP IF rdc()==EOR THEN break; FI *ap = p; WHILE lastc!=EOR ANDF lastc!=SP ANDF lastc!=TB DO *p++=lastc; readchar(); OD *p++=0; filnam = *ap+1; IF **ap=='<' THEN close(0); IF open(filnam,0)<0 THEN printf("%s: cannot open\n",filnam); exit(0); FI ELIF **ap=='>' THEN close(1); IF creat(filnam,0666)<0 THEN printf("%s: cannot create\n",filnam); exit(0); FI ELSE ap++; FI PER lastc!=EOR DONE *ap++=0; execv(symfil, argl); } BKPTR scanbkpt(adr) { REG BKPTR bkptr; FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag ANDF bkptr->loc==adr THEN break; FI OD return(bkptr); } delbp() { REG INT a; REG BKPTR bkptr; FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag THEN a=bkptr->loc; ptrace(WIUSER,pid,a,bkptr->ins); FI OD } setbp() { REG INT a; REG BKPTR bkptr; FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag THEN a = bkptr->loc; bkptr->ins = ptrace(RIUSER, pid, a, 0); ptrace(WIUSER, pid, a, BPT); IF errno THEN prints("cannot set breakpoint: "); psymoff(leng(bkptr->loc),ISYM,"\n"); FI FI OD } bpwait() { REG INT w; INT stat; signal(SIGINT, 1); WHILE (w = wait(&stat))!=pid ANDF w != -1 DONE signal(SIGINT,sigint); gtty(0,&usrtty); stty(0,&adbtty); IF w == -1 THEN pid=0; errflg=BADWAIT; ELIF (stat & 0177) != 0177 THEN IF signo = stat&0177 THEN sigprint(); FI IF stat&0200 THEN prints(" - core dumped"); close(fcor); setcor(); FI pid=0; errflg=ENDPCS; ELSE signo = stat>>8; IF signo!=SIGTRC THEN sigprint(); ELSE signo=0; FI flushbuf(); FI } readregs() { /*get REG values from pcs*/ REG i; FOR i=0; i<9; i++ DO endhdr[reglist[i].roffs] = ptrace(RUREGS, pid, 2*(512+reglist[i].roffs), 0); OD /* REALing poINT */ FOR i=FROFF; i': {CHAR file[64]; INT index; index=0; IF modif=='<' THEN iclose(); ELSE oclose(); FI IF rdc()!=EOR THEN REP file[index++]=lastc; IF index>=63 THEN error(LONGFIL); FI PER readchar()!=EOR DONE file[index]=0; IF modif=='<' THEN infile=open(file,0); IF infile<0 THEN infile=0; error(NOTOPEN); FI ELSE outfile=open(file,1); IF outfile<0 THEN outfile=creat(file,0644); ELSE lseek(outfile,0L,2); FI FI FI lp--; } break; case 'o': octal = TRUE; break; case 'd': octal = FALSE; break; case 'q': case 'Q': case '%': done(); case 'w': case 'W': maxpos=(adrflg?adrval:MAXPOS); break; case 's': case 'S': maxoff=(adrflg?adrval:MAXOFF); break; case 'v': case 'V': prints("variables\n"); FOR i=0;i<=35;i++ DO IF var[i] THEN printc((i<=9 ? '0' : 'a'-10) + i); printf(" = %Q\n",var[i]); FI OD break; case 'm': case 'M': printmap("? map",&txtmap); printmap("/ map",&datmap); break; case 0: case '?': IF pid THEN printf("pcs id = %d\n",pid); ELSE prints("no process\n"); FI sigprint(); flushbuf(); case 'r': case 'R': printregs(); return; case 'f': case 'F': printfregs(modif=='F'); return; case 'c': case 'C': frame=(adrflg?adrval:endhdr[r5])&EVEN; lastframe=0; callpc=(adrflg?get(frame+2,DSP):endhdr[pc]); WHILE cntval-- DO chkerr(); narg = findroutine(frame); printf("%.8s(", symbol.symc); argp = frame+4; IF --narg >= 0 THEN printf("%o", get(argp, DSP)); FI WHILE --narg >= 0 DO argp += 2; printf(",%o", get(argp, DSP)); OD prints(")\n"); IF modif=='C' THEN WHILE localsym(frame) DO word=get(localval,DSP); printf("%8t%.8s:%10t", symbol.symc); IF errflg THEN prints("?\n"); errflg=0; ELSE printf("%o\n",word); FI OD FI lastframe=frame; frame=get(frame, DSP)&EVEN; IF frame==0 THEN break; FI OD break; /*print externals*/ case 'e': case 'E': symset(); WHILE (symp=symget()) DO chkerr(); IF (symp->symf)==043 ORF (symp->symf)==044 THEN printf("%.8s:%12t%o\n", symp->symc, get(leng(symp->symv),DSP)); FI OD break; case 'a': case 'A': frame=(adrflg ? adrval : endhdr[r4]); WHILE cntval-- DO chkerr(); stat=get(frame,DSP); dynam=get(frame+2,DSP); link=get(frame+4,DSP); IF modif=='A' THEN printf("%8O:%8t%-8o,%-8o,%-8o",frame,stat,dynam,link); FI IF stat==1 THEN break; FI IF errflg THEN error(A68BAD); FI IF get(link-4,ISP)!=04767 THEN IF get(link-2,ISP)!=04775 THEN error(A68LNK); ELSE /*compute entry point of routine*/ prints(" ? "); FI ELSE printf("%8t"); valpr(name=shorten(link)+get(link-2,ISP),ISYM); name=get(leng(name-2),ISP); printf("%8t\""); limit=8; REP word=get(leng(name),DSP); name += 2; lo=word&LOBYTE; hi=(word>>8)&LOBYTE; printc(lo); printc(hi); PER lo ANDF hi ANDF limit-- DONE printc('"'); FI limit=4; i=6; printf("%24targs:%8t"); WHILE limit-- DO printf("%8t%o",get(frame+i,DSP)); i += 2; OD printc(EOR); frame=dynam; OD errflg=0; flushbuf(); break; /*set default c frame*/ /*print breakpoints*/ case 'b': case 'B': printf("breakpoints\ncount%8tbkpt%24tcommand\n"); FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag THEN printf("%-8.8d",bkptr->count); psymoff(leng(bkptr->loc),ISYM,"%24t"); comptr=bkptr->comm; WHILE *comptr DO printc(*comptr++); OD FI OD break; default: error(BADMOD); } } printmap(s,amap) STRING s; MAP *amap; { int file; file=amap->ufd; printf("%s%12t`%s'\n",s,(file<0 ? "-" : (file==fcor ? corfil : symfil))); printf("b1 = %-16Q",amap->b1); pri(('k35~intf("e1 = %-16Q",amap->e1); printf("f1 = %-16Q",amap->f1); printf("\nb2 = %-16Q",amap->b2); printf("e2 = %-16Q",amap->e2); printf("f2 = %-16Q",amap->f2); printc(EOR); } printfregs(longpr) { REG i; L_REAL f; printf("fpsr %o\n", corhdr[0].fpsr); FOR i=0; irname, v=endhdr[p->roffs]); valpr(v,(p->roffs==pc?ISYM:DSYM)); printc(EOR); OD printpc(); } getreg(regnam) { REG REGPTR p; REG STRING regptr; CHAR regnxt; regnxt=readchar(); FOR p=reglist; p<®list[9]; p++ DO regptr=p->rname; IF (regnam == *regptr++) ANDF (regnxt == *regptr) THEN return(p->roffs); FI OD lp--; return(0); } printpc() { dot=endhdr[pc]; psymoff(dot,ISYM,":%16t"); printins(0,ISP,chkget(dot,ISP)); printc(EOR); } sigprint() { prints(signals[signo]); } 'kj ~}i # /* * * UNIX debugger * */ #include "defs.h" MSG NOBKPT; MSG SZBKPT; MSG EXBKPT; MSG NOPCS; MSG BADMOD; /* breakpoints */ BKPTR bkpthead; CHAR *lp; CHAR lastc; POS corhdr[512]; POS *endhdr; INT signo; L_INT dot; INT pid; L_INT cntval; L_INT loopcnt; /* sub process control */ subpcs(modif) { REG INT check; INT execsig; INT runmode; REG BKPTR bkptr; STRING comptr; execsig=0; loopcnt=cntval; switch(modif) { /* delete breakpoint */ case 'd': case 'D': IF (bkptr=scanbkpt(shorten(dot))) THEN bkptr->flag=0; return; ELSE error(NOBKPT); FI /* set breakpoint */ case 'b': case 'B': IF (bkptr=scanbkpt(shorten(dot))) THEN bkptr->flag=0; FI FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt DO IF bkptr->flag == 0 THEN break; FI OD IF bkptr==0 THEN IF (bkptr=sbrk(sizeof *bkptr)) == -1 THEN error(SZBKPT); ELSE bkptr->nxtbkpt=bkpthead; bkpthead=bkptr; FI FI bkptr->loc = dot; bkptr->initcnt = bkptr->count = cntval; bkptr->flag = BKPTSET; check=MAXCOM-1; comptr=bkptr->comm; rdc(); lp--; REP *comptr++ = readchar(); PER check-- ANDF lastc!=EOR DONE *comptr=0; lp--; IF check THEN return; ELSE error(EXBKPT); FI /* exit */ case 'k' :case 'K': IF pid THEN printf("%d: killed", pid); endpcs(); return; FI error(NOPCS); /* run program */ case 'r': case 'R': endpcs(); setup(); runmode=CONTIN; break; /* single step */ case 's': case 'S': runmode=SINGLE; IF pid THEN execsig=getsig(signo); ELSE setup(); loopcnt--; FI break; /* continue with optional signal */ case 'c': case 'C': case 0: IF pid==0 THEN error(NOPCS); FI runmode=CONTIN; execsig=getsig(signo); break; default: error(BADMOD); } IF loopcnt>0 ANDF runpcs(runmode, execsig) THEN printf("breakpoint%16t"); ELSE printf("stopped at%16t"); FI delbp(); printpc(); } 'k6`cfilorux{|i # /* * * UNIX debugger * */ #include "defs.h" INT mkfault; INT infile; INT outfile 1; INT maxpos; CHAR printbuf[MAXLIN]; CHAR *printptr printbuf; CHAR *digitptr; eqstr(s1, s2) REG STRING s1, s2; { REG STRING es1; es1 = s1+8; WHILE *s1++ == *s2 DO IF *s2++ == 0 ORF s1>=es1 THEN return(1); FI OD return(0); } length(s) STRING s; { INT n 0; WHILE *s++ DO n++; OD return(n); } printc(c) CHAR c; { CHAR d; STRING q; INT posn, tabs, p; IF mkfault THEN return; ELIF (*printptr=c)==EOR THEN tabs=0; posn=0; q=printbuf; FOR p=0; p0 DO *q++=TB; tabs--; OD WHILE posn>0 DO *q++=SP; posn--; OD *q++=d; FI OD *q++=EOR; write(outfile,printbuf,q-printbuf); printptr=printbuf; ELIF c==TB THEN *printptr++=SP; WHILE (printptr-printbuf)&7 DO *printptr++=SP; OD ELIF c THEN printptr++; FI } charpos() { return(printptr-printbuf); } flushbuf() { IF printptr!=printbuf THEN printc(EOR); FI } printf(fmat,a1) STRING fmat; STRING *a1; { STRING fptr, s; INT *vptr; L_INT *dptr; L_REAL *rptr; INT width, prec; CHAR c, adj; INT x, decpt, n; L_INT lx; CHAR digits[64]; fptr = fmat; vptr = &a1; WHILE c = *fptr++ DO IF c!='%' THEN printc(c); ELSE IF *fptr=='-' THEN adj='l'; fptr++; ELSE adj='r'; FI width=convert(&fptr); IF *fptr=='.' THEN fptr++; prec=convert(&fptr); ELSE prec = -1; FI digitptr=digits; dptr=rptr=vptr; lx = *dptr; x = *vptr++; s=0; switch (c = *fptr++) { case 'd': case 'u': printnum(x,c,10); break; case 'o': printoct(0,x,0); break; case 'q': lx=x; printoct(lx,-1); break; case 'x': printdbl(0,x,c,16); break; case 'Y': printdate(lx); vptr++; break; case 'D': case 'U': printdbl(lx,c,10); vptr++; break; case 'O': printoct(lx,0); vptr++; break; case 'Q': printoct(lx,-1); vptr++; break; case 'X': printdbl(lx,'x',16); vptr++; break; case 'c': printc(x); break; case 's': s=x; break; case 'f': case 'F': vptr += 7; s=ecvt(*rptr, prec, &decpt, &n); *digitptr++=(n?'-':'+'); *digitptr++ = (decpt<=0 ? '0' : *s++); IF decpt>0 THEN decpt--; FI *digitptr++ = '.'; WHILE *s ANDF prec-- DO *digitptr++ = *s++; OD WHILE *--digitptr=='0' DONE digitptr += (digitptr-digits>=3 ? 1 : 2); IF decpt THEN *digitptr++ = 'e'; printnum(decpt,'d',10); FI s=0; prec = -1; break; case 'm': vptr--; break; case 'M': width=x; break; case 'T': case 't': IF c=='T' THEN width=x; ELSE vptr--; FI IF width THEN width -= charpos()%width; FI break; default: printc(c); vptr--; } IF s==0 THEN *digitptr=0; s=digits; FI n=length(s); n=(prec=0 ? prec : n); width -= n; IF adj=='r' THEN WHILE width-- > 0 DO printc(SP); OD FI WHILE n-- DO printc(*s++); OD WHILE width-- > 0 DO printc(SP); OD digitptr=digits; FI OD } printdate(tvec) L_INT tvec; { REG INT i; REG STRING timeptr; timeptr = ctime(&tvec); FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD } /*printdate*/ prints(s) char *s; { printf("%s",s); } newline() { printc(EOR); } convert(cp) REG STRING *cp; { REG CHAR c; INT n; n=0; WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD (*cp)--; return(n); } printnum(n,fmat,base) REG INT n; { REG CHAR k; REG INT *dptr; INT digs[15]; dptr=digs; IF n<0 ANDF fmat=='d' THEN n = -n; *digitptr++ = '-'; FI WHILE n DO *dptr++ = ((POS)n)%base; n=((POS)n)/base; OD IF dptr==digs THEN *dptr++=0; FI WHILE dptr!=digs DO k = *--dptr; *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); OD } printoct(o,s) L_INT o; INT s; { INT i; L_INT po = o; CHAR digs[12]; IF s THEN IF po<0 THEN po = -po; *digitptr++='-'; ELSE IF s>0 THEN *digitptr++='+'; FI FI FI FOR i=0;i<=11;i++ DO digs[i] = po&7; po =>> 3; OD digs[10] &= 03; digs[11]=0; FOR i=11;i>=0;i-- DO IF digs[i] THEN break; FI OD FOR i++;i>=0;i-- DO *digitptr++=digs[i]+'0'; OD } printdbl(lx,ly,fmat,base) INT lx, ly; char fmat; int base; { int digs[20]; int *dptr; char k; L_REAL f ,g; long q; dptr=digs; IF fmat!='D' THEN f=leng(lx); f *= itol(1,0); f += leng(ly); IF fmat=='x' THEN *digitptr++='#'; FI ELSE f=itol(lx,ly); IF f<0 THEN *digitptr++='-'; f = -f; FI FI WHILE f DO q=f/base; g=q; *dptr++ = f-g*base; f=q; OD IF dptr==digs THEN *dptr++=0; FI WHILE dptr!=digs DO k = *--dptr; *digitptr++ = (k+(k<=9 ? '0' : 'a'-10)); OD } iclose() { IF infile THEN close(infile); infile=0; FI } oclose() { IF outfile!=1 THEN flushbuf(); close(outfile); outfile=1; FI } endline() { IF charpos()>=maxpos THEN printf("\n"); FI } (('k9369<?BEHKNQ|i # /* * * UNIX debugger * */ #include "defs.h" STRING errflg; L_INT dot; INT dotinc; L_INT var[]; /* instruction printing */ #define DOUBLE 0 #define DOUBLW 1 #define SINGLE 2 #define SINGLW 3 #define REVERS 4 #define BRANCH 5 #define NOADDR 6 #define DFAULT 7 #define TRAP 8 #define SYS 9 #define SOB 10 #define JMP 11 #define JSR 12 TYPE struct optab *OPTAB; struct optab { int mask; int val; int itype; char *iname; } optab[] { 0107777, 0010000, DOUBLE, "mov", 0107777, 0020000, DOUBLE, "cmp", 0107777, 0030000, DOUBLE, "bit", 0107777, 0040000, DOUBLE, "bic", 0107777, 0050000, DOUBLE, "bis", 0007777, 0060000, DOUBLE, "add", 0007777, 0160000, DOUBLE, "su", 0100077, 0005000, SINGLE, "clr", 0100077, 0005100, SINGLE, "com", 0100077, 0005200, SINGLE, "inc", 0100077, 0005300, SINGLE, "dec", 0100077, 0005400, SINGLE, "neg", 0100077, 0005500, SINGLE, "adc", 0100077, 0005600, SINGLE, "sbc", 0100077, 0005700, SINGLE, "tst", 0100077, 0006000, SINGLE, "ror", 0100077, 0006100, SINGLE, "rol", 0100077, 0006200, SINGLE, "asr", 0100077, 0006300, SINGLE, "asl", 0000077, 0000100, JMP, "jmp", 0000077, 0000300, SINGLE, "swab", 0000077, 0170100, SINGLW, "ldfps", 0000077, 0170200, SINGLW, "stfps", 0000077, 0170300, SINGLW, "stst", 0000077, 0170400, SINGLW, "clrf", 0000077, 0170500, SINGLW, "tstf", 0000077, 0170600, SINGLW, "absf", 0000077, 0170700, SINGLW, "negf", 0000077, 0006700, SINGLW, "sxt", 0000077, 0006600, SINGLW, "mtpi", 0000077, 0106600, SINGLW, "mtpd", 0000077, 0006500, SINGLW, "mfpi", 0000077, 0106500, SINGLW, "mfpd", 0000777, 0070000, REVERS, "mul", 0000777, 0071000, REVERS, "div", 0000777, 0072000, REVERS, "ash", 0000777, 0073000, REVERS, "ashc", LOBYTE, 0000400, BRANCH, "br", LOBYTE, 0001000, BRANCH, "bne", LOBYTE, 0001400, BRANCH, "beq", LOBYTE, 0002000, BRANCH, "bge", LOBYTE, 0002400, BRANCH, "blt", LOBYTE, 0003000, BRANCH, "bgt", LOBYTE, 0003400, BRANCH, "ble", LOBYTE, 0100000, BRANCH, "bpl", LOBYTE, 0100400, BRANCH, "bmi", LOBYTE, 0101000, BRANCH, "bhi", LOBYTE, 0101400, BRANCH, "blos", LOBYTE, 0102000, BRANCH, "bvc", LOBYTE, 0102400, BRANCH, "bvs", LOBYTE, 0103000, BRANCH, "bcc", LOBYTE, 0103400, BRANCH, "bcs", 0000000, 0000000, NOADDR, "halt", 0000000, 0000001, NOADDR, "wait", 0000000, 0000002, NOADDR, "rti", 0000000, 0000003, NOADDR, "bpt", 0000000, 0000004, NOADDR, "iot", 0000000, 0000005, NOADDR, "reset", LOBYTE, 0171000, REVERS, "mulf", LOBYTE, 0171400, REVERS, "modf", LOBYTE, 0172000, REVERS, "addf", LOBYTE, 0172400, REVERS, "movf", LOBYTE, 0173000, REVERS, "subf", LOBYTE, 0173400, REVERS, "cmpf", LOBYTE, 0174000, DOUBLW, "movf", LOBYTE, 0174400, REVERS, "divf", LOBYTE, 0175000, DOUBLW, "movei", LOBYTE, 0175400, DOUBLW, "movfi", LOBYTE, 0176000, DOUBLW, "movfo", LOBYTE, 0176400, REVERS, "movie", LOBYTE, 0177000, REVERS, "movif", LOBYTE, 0177400, REVERS, "movof", 0000000, 0170000, NOADDR, "cfcc", 0000000, 0170001, NOADDR, "setf", 0000000, 0170002, NOADDR, "seti", 0000000, 0170011, NOADDR, "setd", 0000000, 0170012, NOADDR, "setl", 0000777, 0004000, JSR, "jsr", 0000777, 0074000, DOUBLE, "xor", 0000007, 0000200, SINGLE, "rts", 0000017, 0000240, DFAULT, "cflg", 0000017, 0000260, DFAULT, "sflg", LOBYTE, 0104000, TRAP, "emt", LOBYTE, 0104400, SYS, "sys", 0000077, 0006400, TRAP, "mark", 0000777, 0077000, SOB, "sob", 0000007, 0000230, TRAP, "spl", 0177777, 0000000, DFAULT, "", }; #define SYSTAB struct systab SYSTAB { int argc; char *sname; } systab[] { 1, "indir", 0, "exit", 0, "fork", 2, "read", 2, "write", 2, "open", 0, "close", 0, "wait", 2, "creat", 2, "link", 1, "unlink", 2, "exec", 1, "chdir", 0, "time", 3, "mknod", 2, "chmod", 2, "chown", 1, "break", 2, "stat", 2, "seek", 0, "getpid", 3, "mount", 1, "umount", 0, "setuid", 0, "getuid", 0, "stime", 3, "ptrace", 0, "alarm", 1, "fstat", 0, "pause", 1, "30", 1, "stty", 1, "gtty", 0, "access", 0, "nice", 0, "sleep", 0, "sync", 1, "kill", 0, "csw", 0, "setpgrp", 0, "tell", 0, "dup", 0, "pipe", 1, "times", 4, "profil", 0, "tiu", 0, "setgid", 0, "getgid", 2, "signal", 0, "49", 0, "50", 0, "51", 0, "52", 0, "53", 0, "54", 0, "55", 0, "56", 0, "57", 0, "58", 0, "59", 0, "60", 0, "61", 0, "62", 0, "63", }; STRING regname[] { "r0", "r1", "r2", "r3", "r4", "r5", "sp", "pc"}; POS type, space, incp; printins(f,idsp,ins) REG INT ins; { INT byte; REG OPTAB p; type=DSYM; space=idsp; incp=2; FOR p=optab;; p++ DO IF (ins & ~p->mask) == p->val THEN break; FI OD prints(p->iname); byte=ins&0100000; ins &= p->mask; switch (p->itype) { case JMP: type=ISYM; case SINGLE: IF byte THEN printc('b'); FI case SINGLW: paddr("%8t",ins); break; case REVERS: doubl(ins&077,(ins>>6)&07); break; case JSR: type=ISYM; case DOUBLE: IF byte THEN printc('b'); FI case DOUBLW: doubl(ins>>6,ins); case NOADDR: break; case SOB: paddr("%8t",(ins>>6)&07); branch(",",-(ins&077)); break; case BRANCH: branch("%'kW<369<?BEHKNQ|i8t",ins); break; case SYS: BEGIN INT indir; REG INT w; printf("%8t%s", systab[ins &= 077].sname); IF ins==0 ANDF f==0 ANDF idsp!=NSP /* indir */ THEN w=dot; dot=chkget(inkdot(2),idsp); prints(" {"); indir=get(dot,DSP); IF errflg THEN errflg=0; printc('?'); ELSE printins(1,DSP,indir); FI printc('}'); dot=w; incp=4; ELSE w = systab[ins].argc; WHILE w-- ANDF idsp!=NSP DO prints("; "); psymoff(leng(get(inkdot(incp),idsp)), NSYM, ""); incp += 2; OD FI END break; case TRAP: case DFAULT: default: printf("%8t%o", ins); } dotinc=incp; } doubl(a,b) { paddr("%8t",a); paddr(",",b); } branch(s,ins) STRING s; REG INT ins; { printf(s); IF ins&0200 THEN ins |= 0177400; FI ins = shorten(dot) + (ins<<1) + 2; psymoff(leng(ins),ISYM,""); } paddr(s, a) STRING s; REG INT a; { REG INT r; var[2]=var[1]; r = a&07; a &= 070; printf(s); IF r==7 ANDF a&020 THEN IF a&010 THEN printc('*'); FI IF a&040 THEN IF space==NSP THEN printc('?'); ELSE var[1]=chkget(inkdot(incp),space) + shorten(inkdot(incp+2)); psymoff(var[1],(a&010?DSYM:type),""); FI ELSE printc('$'); IF space==NSP THEN printc('?'); ELSE var[1]=chkget(inkdot(incp), space); psymoff(var[1], (a&010?type:NSYM), ""); FI FI incp += 2; return; FI r = regname[r]; switch (a) { /* r */ case 000: prints(r); return; /* (r) */ case 010: printf("(%s)", r); return; /* *(r)+ */ case 030: printc('*'); /* (r)+ */ case 020: printf("(%s)+", r); return; /* *-(r) */ case 050: printc('*'); /* -(r) */ case 040: printf("-(%s)", r); return; /* *x(r) */ case 070: printc('*'); /* x(r) */ case 060: IF space==NSP THEN printc('?'); ELSE var[1]=chkget(inkdot(incp), space); psymoff(var[1], (a==070?type:NSYM), ""); FI incp += 2; printf("(%s)", r); return; } } 'k/ȴ*-0{i # /* * * UNIX debugger * */ #include "mac.h" #include "mode.h" MSG version = "\nVERSION sys117 DATE 1978 Dec 27 16:37:44\n"; MSG BADMOD = "bad modifier"; MSG BADCOM = "bad command"; MSG BADSYM = "symbol not found"; MSG BADLOC = "automatic variable not found"; MSG NOCFN = "c routine not found"; MSG NOMATCH = "cannot locate value"; MSG NOBKPT = "no breakpoint set"; MSG BADKET = "unexpected ')'"; MSG NOADR = "address expected"; MSG NOPCS = "no process"; MSG BADVAR = "bad variable"; MSG BADTXT = "text address not found"; MSG BADDAT = "data address not found"; MSG ODDADR = "odd address"; MSG EXBKPT = "too many breakpoints"; MSG A68BAD = "bad a68 frame"; MSG A68LNK = "bad a68 link"; MSG ADWRAP = "address wrap around"; MSG BADEQ = "unexpected `='"; MSG BADWAIT = "wait error: process disappeared!"; MSG ENDPCS = "process terminated"; MSG NOFORK = "try again"; MSG BADSYN = "syntax error"; MSG NOEOR = "newline expected"; MSG SZBKPT = "bkpt: command too long"; MSG BADFIL = "bad file format"; MSG BADNAM = "not enough space for symbols"; MSG LONGFIL = "filename too long"; MSG NOTOPEN = "cannot open"; MSG BADMAG = "bad core magic number"; (('k=̴!$'{i # /* * * UNIX debugger * */ #include "defs.h" MSG NOEOR; INT mkfault; INT executing; INT infile; CHAR *lp; INT maxoff; INT maxpos; INT sigint; INT sigqit; INT wtflag; L_INT maxfile; L_INT maxstor; L_INT txtsiz; L_INT datsiz; L_INT datbas; L_INT stksiz; STRING errflg; INT exitflg; INT magic; L_INT entrypt; CHAR lastc; INT eof; INT lastcom; L_INT var[36]; STRING symfil; STRING corfil; CHAR printbuf[]; CHAR *printptr; L_INT round(a,b) L_INT a, b; { L_INT w; w = ((a+b-1)/b)*b; return(w); } /* error handling */ chkerr() { IF errflg ORF mkfault THEN error(errflg); FI } error(n) STRING n; { errflg=n; iclose(); oclose(); longjmp(erradb,1); } fault(a) { signal(a,fault); lseek(infile,0L,2); mkfault++; } /* set up files and initial address mappings */ INT argcount; main(argc, argv) REG STRING *argv; REG INT argc; { maxfile=1L<<24; maxstor=1L<<16; gtty(0,&adbtty); gtty(0,&usrtty); WHILE argc>1 DO IF eqstr("-w",argv[1]) THEN wtflag=2; argc--; argv++; ELSE break; FI OD IF argc>1 THEN symfil = argv[1]; FI IF argc>2 THEN corfil = argv[2]; FI argcount=argc; setsym(); setcor(); /* set up variables for user */ maxoff=MAXOFF; maxpos=MAXPOS; var[VARB] = datbas; var[VARD] = datsiz; var[VARE] = entrypt; var[VARM] = magic; var[VARS] = stksiz; var[VART] = txtsiz; IF (sigint=signal(SIGINT,01))!=01 THEN sigint=fault; signal(SIGINT,fault); FI sigqit=signal(SIGQUIT,1); setjmp(erradb); IF executing THEN delbp(); FI executing=FALSE; LOOP flushbuf(); IF errflg THEN printf("%s\n",errflg); exitflg=errflg; errflg=0; FI IF mkfault THEN mkfault=0; printc(EOR); prints(DBNAME); FI lp=0; rdc(); lp--; IF eof THEN IF infile THEN iclose(); eof=0; longjmp(erradb,1); ELSE done(); FI ELSE exitflg=0; FI command(0,lastcom); IF lp ANDF lastc!=EOR THEN error(NOEOR); FI POOL } done() { endpcs(); exit(exitflg); } 'k? zi # /* * * UNIX debugger * */ #include "defs.h" INT mkfault; CHAR line[LINSIZ]; INT infile; CHAR *lp; CHAR lastc EOR; INT eof; /* input routines */ eol(c) CHAR c; { return(c==EOR ORF c==';'); } rdc() { REP readchar(); PER lastc==SP ORF lastc==TB DONE return(lastc); } readchar() { IF eof THEN lastc=EOF; ELSE IF lp==0 THEN lp=line; REP eof = read(infile,lp,1)==0; IF mkfault THEN error(0); FI PER eof==0 ANDF *lp++!=EOR DONE *lp=0; lp=line; FI IF lastc = *lp THEN lp++; FI FI return(lastc); } nextchar() { IF eol(rdc()) THEN lp--; return(0); ELSE return(lastc); FI } quotchar() { IF readchar()=='\\' THEN return(readchar()); ELIF lastc=='\'' THEN return(0); ELSE return(lastc); FI } getformat(deformat) STRING deformat; { REG STRING fptr; REG BOOL quote; fptr=deformat; quote=FALSE; WHILE (quote ? readchar()!=EOR : !eol(readchar())) DO IF (*fptr++ = lastc)=='"' THEN quote = ~quote; FI OD lp--; IF fptr!=deformat THEN *fptr++ = '\0'; FI } 'k   uzi # /* * * UNIX debugger * */ #include "defs.h" MSG BADMOD; MSG NOFORK; MSG ADWRAP; SYMTAB symbol; INT mkfault; CHAR *lp; INT maxoff; INT sigint; INT sigqit; STRING errflg; CHAR lastc; L_INT dot; INT dotinc; L_INT var[]; scanform(icount,ifp,itype,ptype) L_INT icount; STRING ifp; { STRING fp; CHAR modifier; INT fcount, init=1; L_INT savdot; WHILE icount DO fp=ifp; IF init==0 ANDF findsym(shorten(dot),ptype)==0 ANDF maxoff THEN printf("\n%.8s:%16t",symbol.symc); FI savdot=dot; init=0; /*now loop over format*/ WHILE *fp ANDF errflg==0 DO IF digit(modifier = *fp) THEN fcount=0; WHILE digit(modifier = *fp++) DO fcount *= 10; fcount += modifier-'0'; OD fp--; ELSE fcount=1; FI IF *fp==0 THEN break; FI fp=exform(fcount,fp,itype,ptype); OD dotinc=dot-savdot; dot=savdot; IF errflg THEN IF icount<0 THEN errflg=0; break; ELSE error(errflg); FI FI IF --icount THEN dot=inkdot(dotinc); FI IF mkfault THEN error(0); FI OD } STRING exform(fcount,ifp,itype,ptype) INT fcount; STRING ifp; { /* execute single format item `fcount' times * sets `dotinc' and moves `dot' * returns address of next format item */ POS w; L_INT savdot, wx; STRING fp; CHAR c, modifier, longpr; L_REAL fw; struct{ L_INT sa; INT sb,sc; }; WHILE fcount>0 DO fp = ifp; c = *fp; longpr=(c>='A')&(c<='Z')|(c=='f'); IF itype==NSP ORF *fp=='a' THEN wx=dot; w=dot; ELSE w=get(dot,itype); IF longpr THEN wx=itol(w,get(inkdot(2),itype)); ELSE wx=w; FI FI IF c=='F' THEN fw.sb=get(inkdot(4),itype); fw.sc=get(inkdot(6),itype); FI IF errflg THEN return(fp); FI IF mkfault THEN error(0); FI var[0]=wx; modifier = *fp++; dotinc=(longpr?4:2);; IF charpos()==0 ANDF modifier!='a' THEN printf("%16m"); FI switch(modifier) { case SP: case TB: break; case 't': case 'T': printf("%T",fcount); return(fp); case 'r': case 'R': printf("%M",fcount); return(fp); case 'a': psymoff(dot,ptype,":%16t"); dotinc=0; break; case 'p': psymoff(var[0],ptype,"%16t"); break; case 'u': printf("%-8u",w); break; case 'U': printf("%-16U",wx); break; case 'c': case 'C': IF modifier=='C' THEN printesc(w&LOBYTE); ELSE printc(w&LOBYTE); FI dotinc=1; break; case 'b': case 'B': printf("%-8o", w&LOBYTE); dotinc=1; break; case 's': case 'S': savdot=dot; dotinc=1; WHILE (c=get(dot,itype)&LOBYTE) ANDF errflg==0 DO dot=inkdot(1); IF modifier == 'S' THEN printesc(c); ELSE printc(c); FI endline(); OD dotinc=dot-savdot+1; dot=savdot; break; case 'x': printf("%-8x",w); break; case 'X': printf("%-16X", wx); break; case 'Y': printf("%-24Y", wx); break; case 'q': printf("%-8q", w); break; case 'Q': printf("%-16Q", wx); break; case 'o': case 'w': printf("%-8o", w); break; case 'O': case 'W': printf("%-16O", wx); break; case 'i': printins(0,itype,w); printc(EOR); break; case 'd': printf("%-8d", w); break; case 'D': printf("%-16D", wx); break; case 'f': fw = 0; fw.sa = wx; printf("%-16.9f", fw); dotinc=4; break; case 'F': fw.sa = wx; printf("%-32.18F", fw); dotinc=8; break; case 'n': case 'N': printc('\n'); dotinc=0; break; case '"': dotinc=0; WHILE *fp != '"' ANDF *fp DO printc(*fp++); OD IF *fp THEN fp++; FI break; case '^': dot=inkdot(-dotinc*fcount); return(fp); case '+': dot=inkdot(fcount); return(fp); case '-': dot=inkdot(-fcount); return(fp); default: error(BADMOD); } IF itype!=NSP THEN dot=inkdot(dotinc); FI fcount--; endline(); OD return(fp); } unox() { INT rc, status, unixpid; STRING argp lp; WHILE lastc!=EOR DO rdc(); OD IF (unixpid=fork())==0 THEN signal(SIGINT,sigint); signal(SIGQUIT,sigqit); *lp=0; execl("/bin/sh", "sh", "-c", argp, 0); exit(16); ELIF unixpid == -1 THEN error(NOFORK); ELSE signal(SIGINT,1); WHILE (rc = wait(&status)) != unixpid ANDF rc != -1 DONE signal(SIGINT,sigint); prints("!"); lp--; FI } printesc(c) { c &= STRIP; IF c'~' ORF c=='@' THEN printf("@%c",(c=='@' ? '@' : c^0140)); ELSE printc(c); FI } L_INT inkdot(incr) { L_INT newdot; newdot=dot+incr; IF (dot NEQ newdot) >> 24 THEN error(ADWRAP); FI return(newdot); } 'k,gyi # /* * * UNIX debugger * */ #include "defs.h" MSG NOCFN; INT callpc; BOOL localok; SYMTAB symbol; STRING errflg; findroutine(cframe) L_INT cframe; { REG INT narg, inst; INT lastpc, back2; BOOL v; v=FALSE; localok=FALSE; lastpc=callpc; callpc=get(cframe+2, DSP); back2=get(leng(callpc-2), ISP); IF (inst=get(leng(callpc-4), ISP)) == 04737 /* jsr pc,*$... */ THEN narg = 1; ELIF (inst&~077)==04700 /* jsr pc,... */ THEN narg=0; v=(inst!=04767); ELIF (back2&~077)==04700 THEN narg((=0; v=TRUE; ELSE errflg=NOCFN; return(0); FI IF findsym( (v ? lastpc : ((inst==04767?callpc:0) + back2) ),ISYM) == -1 ANDF !v THEN symbol.symc[0] = '?'; symbol.symc[1] = 0; symbol.symv = 0; ELSE localok=TRUE; FI inst = get(leng(callpc), ISP); IF inst == 05726 /* tst (sp)+ */ THEN return(narg+1); FI IF inst == 022626 /* cmp (sp)+,(sp)+ */ THEN return(narg+2); FI IF inst == 062706 /* add $n,sp */ THEN return(narg+get(leng(callpc+2), ISP)/2); FI return(narg); } 'kVLxi # /* * * UNIX debugger * */ #include "defs.h" MSG BADSYM; MSG BADVAR; MSG BADKET; MSG BADSYN; MSG NOCFN; MSG NOADR; MSG BADLOC; SYMTAB symbol; INT lastframe; INT savlastf; L_INT savframe; INT savpc; INT callpc; CHAR *lp; INT octal; STRING errflg; L_INT localval; CHAR isymbol[8]; CHAR lastc; POS *endhdr; L_INT dot; L_INT ditto; INT dotinc; L_INT var[]; L_INT expv; expr(a) { /* term | term dyadic expr | */ INT rc; L_INT lhs; rdc(); lp--; rc=term(a); WHILE rc DO lhs = expv; switch (readchar()) { case '+': term(a|1); expv += lhs; break; case '-': term(a|1); expv = lhs - expv; break; case '#': term(a|1); expv = round(lhs,expv); break; case '*': term(a|1); expv *= lhs; break; case '%': term(a|1); expv = lhs/expv; break; case '&': term(a|1); expv &= lhs; break; case '|': term(a|1); expv |= lhs; break; case ')': IF (a&2)==0 THEN error(BADKET); FI default: lp--; return(rc); } OD return(rc); } term(a) { /* item | monadic item | (expr) | */ switch (readchar()) { case '*': term(a|1); expv=chkget(expv,DSP); return(1); case '@': term(a|1); expv=chkget(expv,ISP); return(1); case '-': term(a|1); expv = -expv; return(1); case '~': term(a|1); expv = ~expv; return(1); case '(': expr(2); IF *lp!=')' THEN error(BADSYN); ELSE lp++; return(1); FI default: lp--; return(item(a)); } } item(a) { /* name [ . local ] | number | . | ^ | symv; FI lp--; ELIF digit(lastc) ORF (hex=TRUE, lastc=='#' ANDF hexdigit(readchar())) THEN expv = 0; base = (lastc == '0' ORF octal ? 8 : (hex ? 16 : 10)); WHILE (hex ? hexdigit(lastc) : digit(lastc)) DO expv *= base; IF (d=convdig(lastc))>=base THEN error(BADSYN); FI expv += d; readchar(); IF expv==0 ANDF (lastc=='x' ORF lastc=='X') THEN hex=TRUE; base=16; readchar(); FI OD IF lastc=='.' ANDF (base==10 ORF expv==0) ANDF !hex THEN real.r=expv; frpt=0; base=10; WHILE digit(readchar()) DO real.r *= base; frpt++; real.r += lastc-'0'; OD WHILE frpt-- DO real.r /= base; OD expv = real.i; FI lp--; ELIF lastc=='.' THEN readchar(); IF symchar(0) THEN lastframe=savlastf; callpc=savpc; findroutine(savframe); chkloc(savframe); ELSE expv=dot; FI lp--; ELIF lastc=='"' THEN expv=ditto; ELIF lastc=='+' THEN expv=inkdot(dotinc); ELIF lastc=='^' THEN expv=inkdot(-dotinc); ELIF lastc=='<' THEN savc=rdc(); IF regptr=getreg(savc) THEN expv=endhdr[regptr]; ELIF (base=varchk(savc)) != -1 THEN expv=var[base]; ELSE error(BADVAR); FI ELIF lastc=='\'' THEN d=4; expv=0; WHILE quotchar() DO IF d-- THEN IF d==1 THEN expv =<<16; FI expv |= ((d&1)?lastc:lastc<<8); ELSE error(BADSYN); FI OD ELIF a THEN error(NOADR); ELSE lp--; return(0); FI return(1); } /* service routines for expression reading */ readsym() { REG char *p; p = isymbol; REP IF p < &isymbol[8] THEN *p++ = lastc; FI readchar(); PER symchar(1) DONE WHILE p < &isymbol[8] DO *p++ = 0; OD } SYMPTR lookupsym(symstr) STRING symstr; { SYMPTR symp; symset(); WHILE (symp=symget()) DO IF (symp->symf&SYMCHK)==symp->symf ANDF eqsym(symp->symc, symstr,'_') THEN return(symp); FI OD return(0); } hexdigit(c) CHAR c; { return((c>='0' ANDF c<='9') ORF (c>='a' ANDF c<='f')); } convdig(c) CHAR c; { IF digit(c) THEN return(c-'0'); ELIF hexdigit(c) THEN return(c-'a'+10); ELSE return(17); FI } digit(c) char c; {return(c>='0' ANDF c<='9');} letter(c) char c; {return(c>='a' ANDF c<='z' ORF c>='A' ANDF c<='Z');} symchar(dig) { IF lastc=='\\' THEN readchar(); return(TRUE); FI return( letter(lastc) ORF lastc=='_' ORF dig ANDF digit(lastc) ); } varchk(name) { IF digit(name) THEN return(name-'0'); FI IF letter(name) THEN return((name&037)-1+10); FI return(-1); } chkloc(frame) L_INT frame; { readsym(); REP IF localsym(frame)==0 THEN error(BADLOC); FI expv=localval; PER !eqsym(symbol.symc,isymbol,'~') DONE } eqsym(s1, s2, c) REG STRING s1, s2; CHAR c; { IF eqstr(s1,s2) THEN return(TRUE); ELIF *s1==c THEN CHAR s3[8]; REG INT i; s3[0]=c; FOR i=1; i<8; i++ DO s3[i] = *s2++; OD return(eqstr(s1,s3)); FI } 'kldxi # /* * * UNIX debugger - small version * */ subpcs(modif) { prints("sub processes not supported\n"); } delbp() {;} endpcs() {;} ' kɴ@4xi # /* * * UNIX debugger * */ #include "defs.h" MSG BADEQ; MSG NOMATCH; MSG BADVAR; MSG BADCOM; MAP txtmap; MAP datmap; INT executing; CHAR *lp; INT fcor; INT fsym; INT mkfault; STRING errflg; CHAR lastc; CHAR eqformat[128] "o"; CHAR stformat[128] "o\"= \"^i"; POS *endhdr; L_INT dot; L_INT ditto; INT dotinc; INT lastcom '='; L_INT var[]; L_INT locval; L_INT locmsk; INT pid; L_INT expv; L_INT adrval; INT adrflg; L_INT cntval; INT cntflg; /* command decoding */ command(buf,defcom) STRING buf; CHAR defcom; { INT itype, ptype, modifier, regptr; BOOL longpr, eqcom; CHAR wformat[1]; CHAR savc; L_INT w, savdot; STRING savlp=lp; IF buf THEN IF *buf==EOR THEN return(FALSE); ELSE lp=buf; FI FI REP IF adrflg=expr(0) THEN dot=expv; ditto=dot; FI adrval=dot; IF rdc()==',' ANDF expr(0) THEN cntflg=TRUE; cntval=expv; ELSE cntflg=FALSE; cntval=1; lp--; FI IF !eol(rdc()) THEN lastcom=lastc; ELSE IF adrflg==0 THEN dot=inkdot(dotinc); FI lp--; lastcom=defcom; FI switch(lastcom&STRIP) { case '/': itype=DSP; ptype=DSYM; goto trystar; case '=': itype=NSP; ptype=ASYM; goto trypr; case '?': itype=ISP; ptype=ISYM; goto trystar; trystar: IF rdc()=='*' THEN lastcom |= QUOTE; ELSE lp--; FI IF lastcom"E THEN itype |= STAR; ptype = (DSYM+ISYM)-ptype; FI trypr: longpr=FALSE; eqcom=lastcom=='='; switch (rdc()) { case 'm': {/*reset map data*/ INT fcount; MAP *smap; UNION{MAP *m; L_INT *mp;}amap; IF eqcom THEN error(BADEQ); FI smap=(itype&DSP?&datmap:&txtmap); amap.m=smap; fcount=3; IF itype&STAR THEN amap.mp += 3; FI WHILE fcount-- ANDF expr(0) DO *(amap.mp)++ = expv; OD IF rdc()=='?' THEN smap->ufd=fsym; ELIF lastc == '/' THEN smap->ufd=fcor; ELSE lp--; FI } break; case 'L': longpr=TRUE; case 'l': /*search for exp*/ IF eqcom THEN error(BADEQ); FI dotinc=2; savdot=dot; expr(1); locval=expv; IF expr(0) THEN locmsk=expv; ELSE locmsk = -1L; FI LOOP w=leng(get(dot,itype)); IF longpr THEN w=itol(w,get(inkdot(2),itype)); FI IF errflg ORF mkfault ORF (w&locmsk)==locval THEN break; FI dot=inkdot(dotinc); POOL IF errflg THEN dot=savdot; errflg=NOMATCH; FI psymoff(dot,ptype,""); break; case 'W': longpr=TRUE; case 'w': IF eqcom THE((N error(BADEQ); FI wformat[0]=lastc; expr(1); REP savdot=dot; psymoff(dot,ptype,":%16t"); exform(1,wformat,itype,ptype); errflg=0; dot=savdot; IF longpr THEN put(dot,itype,expv); FI put((longpr?inkdot(2):dot),itype,shorten(expv)); savdot=dot; printf("=%8t"); exform(1,wformat,itype,ptype); newline(); PER expr(0) ANDF errflg==0 DONE dot=savdot; chkerr(); break; default: lp--; getformat(eqcom ? eqformat : stformat); IF !eqcom THEN psymoff(dot,ptype,":%16t"); FI scanform(cntval,(eqcom?eqformat:stformat),itype,ptype); } break; case '>': lastcom=0; savc=rdc(); IF regptr=getreg(savc) THEN endhdr[regptr]=shorten(dot); ptrace(WUREGS,pid,2*(512+regptr),endhdr[regptr]); ELIF (modifier=varchk(savc)) != -1 THEN var[modifier]=dot; ELSE error(BADVAR); FI break; case '!': lastcom=0; unox(); break; case '$': lastcom=0; printtrace(nextchar()); break; case ':': IF !executing THEN executing=TRUE; subpcs(nextchar()); executing=FALSE; lastcom=0; FI break; case 0: prints(DBNAME); break; default: error(BADCOM); } flushbuf(); PER rdc()==';' DONE IF buf THEN lp=savlp; ELSE lp--; FI return(adrflg ANDF dot!=0); } 'k^$wi # /* * * UNIX debugger * */ #include "defs.h" MSG ODDADR; MSG BADDAT; MSG BADTXT; MAP txtmap; MAP datmap; INT wtflag; STRING errflg; INT errno; INT pid; /* file handling and access routines */ put(adr,space,value) L_INT adr; { access(WT,adr,space,value); } POS get(adr, space) L_INT adr; { return(access(RD,adr,space,0)); } POS chkget(n, space) L_INT n; { REG INT w; w = get(n, space); chkerr(); return(w); } access(mode,adr,space,value) L_INT adr; { INT w, w1, pmode, rd, file; rd = mode==RD; IF space == NSP THEN return(0); FI IF pid /* tracing on? */ THEN IF (adr&01) ANDF !rd THEN error(ODDADR); FI pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER)); w = ptrace(pmode, pid, shorten(adr&~01), value); IF adr&01 THEN w1 = ptrace(pmode, pid, shorten(adr+1), value); w = (w>>8)&LOBYTE | (w1<<8); FI IF errno THEN errflg = (space&DSP ? BADDAT : BADTXT); FI return(w); FI w = 0; IF mode==WT ANDF wtflag==0 THEN error("not in write mode"); FI IF !chkmap(&adr,space) THEN return(0); FI file=(space&DSP?datmap.ufd:txtmap.ufd); IF longseek(file,adr)==0 ORF (rd ? read(file,&w,2) : write(file,&value,2)) < 1 THEN errflg=(space&DSP?BADDAT:BADTXT); FI return(w); } chkmap(adr,space) REG L_INT *adr; REG INT space; { REG MAPPTR amap; amap=((space&DSP?&datmap:&txtmap)); IF space&STAR ORF !within(*adr,amap->b1,amap->e1) THEN IF within(*adr,amap->b2,amap->e2) THEN *adr += (amap->f2)-(amap->b2); ELSE errflg=(space&DSP?BADDAT:BADTXT); return(0); FI ELSE *adr += (amap->f1)-(amap->b1); FI return(1); } within(adr,lbd,ubd) L_INT adr, lbd, ubd; { return(adr>=lbd && adrL10010\L10011d__filbuf L50L10012L51L52L10013L53L54L55~y_putccL10014L59$L10015L60L58__flsbuf L100172L61:L62HL63~y_revNL10018fL68lL69~y_errL10019L73L74L75due.o "w f 5w    w f 5w7 7    w x t p h@  , @ @  e6e ew w7w7 w AAWp&eww )@f&f e @  hh h  @  f`f fF  @   "@  r  r r_ & @ee@ f& ef& e0 0  _w %- w~v& n eb& X T f& Jev<  , w  jw startioduecduecduecduesyserr))X)HiiyyH9HH9()9(9H)_s_rdue"~s_rduecsv an_c_due"L4L3cret _reading _curunit L100008L5@_nowread _s_wdue"D~s_wdueDanL9bL8^L10_nowwrit ~c_dueaflag_init L14_f_init L10001L10002L15L10003L16_errno L17L18_fatal L13_formatt _sequent _recpos _externa _units _elist L19v_fk_open L10004ZL20bL21pL22L20002f_cf L10005L23L10006L24L25L26L27L30L31 L10008L32L33L34 lmul _fseek _e_rdue"\~e_rdue\L10009tL38zL37v_ftell lrem L10010L40L41L42_e_wdue"~e_wdueiio.o V,w -   V r  w 2   n^n nw r-nl!f  nVen n r 2 . w($ 2   mw  f&  elw7 ww N 5w &77 w x N 5wd7 `7 ^VPJ&7B7>8 w 0@7 &" @  dtd dw  w77w7 7  w w77ww 777f& f& zemrwn w f r  V RN HD2 7 : 6w2w . (57 ww  57 r   2 @ww   n}n nwendfilerecendinwriterecendstartintiioy ) 9II))y ) 9II))y)99) I9y9  )8IYyy9  )I)yyiix9  )99II)I9) ) y II)I99yi9yi II)9yi9_icptr _icend _svic _icnum _icpos _z_getc"~z_getccsv L4LL10000L5$_errno L62L7V_fatal L3HL200018L10001@L8`cret L10002nL9vL10L11^_z_putc"~z_putccL15L10003L16L17L18eL20006L14L20003L10004L19L23m_z_rnew"~z_rnewlmul _s_rsfi":~s_rsfi:an_c_si"L30RL29N_reading _rd_ed _doed _rd_ned _doned _getn _y_err"&_donewre _dorever _doend _s_wsfi"~s_wsfianL34L33_w_ed _w_ned _putn _z_wnew"~c_sia_fmtbuf _pars_f L38L10006L39L40 L41tL37_fmt_bg _formatt _sequent _externa _scale _cplus _cblank ~z_wnewL45L20008L10007L46_e_rsfi"~e_rsfin_en_fio _e_wsfi"~e_wsfinL53 L20010L10008L54~y_err&_elist L100098L58@L59NL60}inquire.oRw @ G Ne@  f&@& eNe 5 5 5 % FAWp&u,u,AWp& AWp&eu 5 5 @ , @  AWp&eu5 5 5 @ &       @ @ 0 @    &   @ @ A@ r&&@ @    @  @ @ 0 @ 2  @f&@&fe @ @f&@&@& e@ , ) &@ @ f&@&@ f&@& @e@ "2   @  @&$f&@&"@&$f&@&" e@ (2   @  @,*f&@&(@,*f&@&( de@ ./ @  @20f&@&. @20f&@&. e@ 486f&@&4 e@ :2   @  @><f&@&:@><f&@&: de@ @ @&@@ @ B  @ & f  f& ee@ BBr @ D4 1@  )@  @HFf&@&D@HFf&@&D e wxdirectsequentialyesnoyesnoformattedunformattedyesyesunknownzeroblank)iiiiiiii_f_inqu"~f_inqucsv abyfilelega((lipbufxL4_g_char _inode L5\L9_units L7L10L10000L12FL10003L10002L10001&L138L15L10005\L16fL10008rL20017bL10010vL18L19L10011L20L22bL10012 L23*L20004Z_b_char L26L27L28L20006L30L312L10013L32L33L20008*L35L36L10015^L37|L38L20010L40L41L42L10017L43L20012L46L472L48L49L10018^L50|L51L20014L53L54L55_ftell ldiv L56L100200L10021@L57^L58L20016zL60cret lib.ow @p @p @p  @p  @p ww @p @p @pN &@ @p @p @p @pwJw F@p  @p @pww @p @p w))H))_setcili"~setcilicsv xufmtrec xerr endcret _setolis"H~setolisHxxunitfnamesta fm rlblnkoerr_strlen _stcllis"~stcllisxxunitstatcerr _setalis"~setalisxxunitaerrrewind.o<\w @  , @ .@  ee e '@  jj jwAAWp&eu @ @  N N N @0 0  rewindrewind)Yh_f_rew"~f_rewcsv abL10000$L10001L4L100022L5:_errno L6HL7_fatal L3|L20003NL9L10003bL10jL11xL12cret _units L20001L10004L13_nowread _t_runc _rewind rsfe.o$Hw   f 5w    w 777 @7  @  dl$d dAAWp&ewB><v60* & 7 77 7   w     E 5% % 77ww   wlh ^ ZEN 5%%  60f @% 7  w ww wstartio)YYy )9IIX(9HYi)))8))_s_rsfe"~s_rsfecsv an_init L4_f_init _c_sfe L5.L3*cret _reading _sequent _formatt _externa _elist _recpos _cursor _scale _fmtbuf _pars_f L6L10000L7_errno L8L9$_fatal _units _curunit _cf _x_getc"v_getn _rd_ed _doed _rd_ned _doned _fmt_bg _x_endp"_doend _xrd_SL"_donewre _x_rev"_dorever _cblank _cplus L10001L10_nowread ~xrd_SLchL14dL152L10002LL10003T__filbuf ~x_getcvchL10004L20L19L10005L10006L21L20000L20002_ungetc ~x_endp~x_revrdfmt.ow|  w  5@  n n nw  m    e7 x@  x `  jP j j6f  e  f f@&f ,e:@f  *f ff ef f@&f f f@&@&f e 5_z h_@w `@  x Hf9  e 0@ h w @@&  @7l@7@7w D 5 5 5 5 u- 5w@ r y A@  5u _nW- h}_  H D& fe 2e     s7     f ff& eee@ ee@ 5u      W- }@pH _Zw d5 %%5 u- (5w%t%f%, %t@p w 55 5555555 u-_V 5@w%   ~%+5%  \ X%- 5%+_%-_%9%0 B5u@ % % 5 B5%e%d%.  %,_u%.u-G%eC%d?%+;%-7 l5_j%9%0 B5u@5 % % 5 B  %,u%-u-Q  5_j% %-%9%0AWp Ame % % AWp u  ~%,% %+% s7R_n 5 5 B5 u-5 5 B5 u-555 5 u-5 B5 5 5 B5 u- 55 5 B5 5 B5  W- 5=5= _nw B5 u  ,5w"% @ =  A 5  w A 5 Fu B5   5@w f A @A &%5 u  5%  =  A 5  5  J5%  =  u-5 A @C f&A &% ̃   w 5  5w%  @=  u-w u }@p b5wX%  @=TTTTTT$:  Nfmtfmtrd_ed, unexpected code: %d %s rd_ned, unexpected code: %d %s i IXiI ))Iy))))))))))Y Y _rd_ed"L10004 L22L20L33TL25L26$L27:L24 ~rd_edcsv pptrlenchL4((HL20001_getn L6DL20016L3@L20003_elist L10000&L10._errno L11<L12 _fatal cret _cursor L8_recpos _curunit L10001nL13_cf _fseek L10002L15L16L17 _fmtbuf L21 __iob _fprintf _abort L20011_rd_I",L20005L20004xL20015_rd_L"_rd_A"_rd_AW" _rd_F" _clearer _rd_ned"L10006 L47L45L41L43L44L49 L48~rd_nedpptrL429 _rd_POS"h L38_rd_H" _donewre L20017L10009 L10011L10012L10013N~rd_I,nwlenbasexisignchL53HL61pL56^L52ZL77L78nL79L63L55L65_cblank L10007almul L76L59lmul L80~rd_LnwchivL85L20019L89L87L20022L91L86L88L84L20020L94~rd_F pwdlen xyisxszchdotnyzsawzL98PL99VL100rL20023jL97nL10014L10016L10017L101L103L104 L20037L10019L10020L106DL108L111dL114L20024L10021L10022L116L118(L121L20026L122L1232L126zL20039tL10023\L10024lL128L131L132L20028L135L20030L138$L139 L142BL143:L20032*L146RL147_scale L148pL20034`L151L20036~L154L155~rd_AplenichL159L20043L10025L160L162L158L10026L10027~rd_AW pwlenichL166L10028(L167JL20045.L100294L168nL169FL20046>L165BL171L20048tL10030|L172L10032L175L20050L10034L179L10035 ~rd_H nsichL185Z L20052. L188< L1848 L10036J L10037N ~rd_POSh squotechL20053v L20055 L193 L191 L10038 L195 L10039 L10040 fltused sue.o R w   f h 5w 7     e%<~ @  ^R D @  .,X"  w    f h 5w7 7 7     7w&  e w @  , @ @  eb^e ewJ wB7<78w67 07 .AAWp&eww )@f&f e @  rfr r  "@  gj  @  ng g\  w NF e. 5u  e e ff e ww e&&  e wstartstartstartiosuesuesue9ii(9HX999iiI9 99999H9 99H99I9_recloc _s_rsue"~s_rsuecsv an_init L4_f_init _c_sue"hL5.L3*cret _reading _recpos _curunit L10000LL6T_nowread _cf _reclen _fread L7L8L10001L9_errno L10L11R_fatal _clearer L10002L12L13L14X_s_wsue"~s_wsueanL18L19L17L20>_nowwrit _ftell _fseek ~c_suehaflagL10003L10004L24L10005L25L26L27^L23_sequent _externa _formatt _units _elist L28F_fk_open L10006*L292L30@L31fL10007\L32L10008jL33rL34L35jL20005L20002xL36L39n_e_wsue"~e_wsueloc_fwrite _e_rsue"(~e_rsue(uio.ow  ;f f@f& ew`-  nn nw@&f f e f f@f& `ew`XT@&f f w : 6 2f fff ewf fff w f f@f& ew`-E%A  nn nA@&f f e B r )f  XVL B < 80@&f f e weof/uioeof/uioeof/uio9yy 8Yix i9Y9 8ix   8 yyiY_reclen _do_us"~do_uscsv numberptrlen_reading L10000L4lmul _recpos L5f_elist L10001HL6P_errno L7^L8_fatal L3bcret _cf _fread L20001~_fwrite _do_uio"~do_uionumberptrlen_sequent L10002L13L20002_do_ud"~do_udnumberptrlen_curunit L17L10003LL18TL19bL20L16L10004hL10005L22L10006L23L24L25wsfe.oJ`` xw   f 5w7 7    w 777 @7  @  dndd dAAWp&ewD@>82, &4  7 7  77   w   Hf ww %   A HA 2-.7 7 %0b X Tȕ &J %18 . *ȕ     f ww 7 7  ww  ww    w7@wstartio)YYy )9IIX(9HYy)X)X))))yyyy_s_wsfe"~s_wsfecsv an_init L4_f_init _c_sfe L5.L3*cret _reading _sequent _formatt _externa _elist _recpos _cursor _scale _fmtbuf _pars_f L6L10000L7_errno L8L9d_fatal _units _curunit _cf _x_putc"_putn _w_ed _doed _w_ned _doned _xw_end" _doend _xw_rev"4_dorever _x_wSL"_donewre _fmt_bg _cplus _cblank L10_nowwrit ~x_putccL100018L13F__flsbuf _pr_put"JL17`~pr_putJcnew`L18|L10009L20005nL16L20L21L10005L20001L10007~x_wSL~xw_end ~xw_rev4_workdon L10011DL34Nsfe.o0w 57 ww @  , @ W@  ee e@@f&f |e ;@  r`$r r (@  f0(f fwAAWp&eu @  w wstartiosfesfe)IYi)HyHHi8)i_e_rsfe"~e_rsfecsv n_en_fio _fmtbuf ((cret _c_sfe"~c_sfeaflagpL10000:L100010L7L10002HL8P_errno L9^L10_fatal L6L20001d_fk_open L11L10003L12L13L14$L20003L15 L10004L16L17L18(_units _e_wsfe"~e_wsfefmt.op#Z X w 777 f 0 5w w   @ ȥ( w %w & f De N 5  @w X   N $5 w0  , )  &  De @ & & w )@Nef  Nef F @wNef  5 & f De5 Nf 0 w P5 @ r yZ  & & _ & & _@s   @p & & f_ & & _ Nef  5@ H# h  p x_` @ 5 & f_ & f_ f f Deum_ & f DeN =_  @rNef  5 & f_ &  _4 _> _> _  w _> _> @l   _& _> _>  & _ _> _> _  z_ & &  De } _ _ _> _>w 5 5 uNef  5 & f De@ a ? xd Nef  5 ).  Nef  55 E# ff% De } } w Nef  5Nff%Nef  5  & f Nef  5  & f  09Nef  5  & f_  & & _ Nef  5 _.  Nef  55  ff_ Nef  5 _.  Nef  55  ff_ Nef  5 _. & f_  Nef  5 ff _ w te5%,   % }@p@p@p ` \wXw T5 5 0AWp B`eu u 9 }@ww  & & fe eww 5 A B _& r _& te5   x pf  eX  dH) d dw0ff $%   um       f fff e5  0     t4   ZV Ap D@ Ap.  "   7_f 77@7 _   _ 5__f _ _7 7 _ _@7_7 7 _| v_w n 7h7d7`7\7Z T 7N7JwFw B@  x @w& w u    d} }@w8 d d2f&n  > L X L f t format too complicated: %s unknown code in do_fio: %d %s do_fiofmtfmtbad stringi)9i9i9iii)i))y))iii)y  9 ) )    ) ) i y y y y    i ) ii  _syl ` _parenlv _pc _revloc _pars_f"~pars_fcsv s_f_s"0L4,L3(cret ~f_s0scurlocL8:L200016L10VL20002PL7RL11j_op_gen"D_f_list"L13L20004~f_listsL18L20L20007L20006_i_tem"$L23L17L24L25L28L20011~i_tem$stncurlocL32:L31f_ne_d"L20013b_e_d"FL34j_gt_num"L35L10003Z L100052L10006fL10007L10008L10009~ne_dspnxsignL42L20019L20017L46L47L20021L20027L48L20022L51&L524L62>L70L66rL68L41`L67L20023L20024L39L73_ap_end" L20020L20029L20025L76L75L79(L38bL10015d L95L84L102L87L99&L88L105L94L93n~e_dFspnwdefoundxsvL89L90L916L10010L10011 L20034&L832L10012hL96L20032L98L100lL101pL103L104L106~op_genDabcd pL111x_fmtbuf L112 __iob _fprintf _abort ~gt_numsnmcntcL20036L20038L117L20035L120L121 _cnt _ret _cp _rp _workdon _en_fio"~en_fioone_do_fio"<L10021 L153 L156 L154 L134L152 L141L139L160> L163L L164X L165f L166t L167 ~do_fio<numberptrlenpniL128HL20043& L131f_type_f" L135 _elist L10017L136_errno L137L138) _fatal L127_doned L20041L130L20045L143 L20042 _doend _doed L144p L10018T L145\ L146j L1470 L10019 L149 L150 L1514 L155 L158, _dorever _cplus _scale _cblank _fmt_bg" ~fmt_bg _cursor L10023 L177 L178 L179 L187 L180 L199 L176 ~type_f nL173 ~ap_end squoteL20046 L20048* L10024" L207F L208T L202B L2098 lio.o *w   f 5"7 7       ww  7 ~ wxw t pl b ^HTf wFw Bfffe (eNe m%P 7 @e5@ ww e%P 7 fe ww  @mAm@ W P 7  5 u @  A 5 wHw D@5$ B5(e %P 7 7 &  fe e e%P 7 &  fe e w((w e%P 7  ( 5& 2e5 & $e) w\w X5 A B _r t@  x u @55ff %@@m 5 ==5& ~eu=5e= u=5e=5&5& e@f& f ff e wH&,@Z %ldunknown type in lio)YYy HY)Y)Y)YhY)Y)Y) 9Y)Y)(Y_s_wsle"~s_wslecsv an_init L4_f_init _c_le L3n_reading _externa _formatt _t_putc"_putn _l_write"_lioproc _curunit L20001`L6\_nowwrit cret _e_wsle"r~e_wsler_recpos ~t_putcc_cf L10000L12__flsbuf _lwrt_I"~lwrt_InbufpL16_sprintf _strlen L17L18L20003_lwrt_L" ~lwrt_L nL24>_wrt_L _lwrt_A"R~lwrt_ARpleniL28L10002tL29L20005L10003L27_lwrt_F"~lwrt_FnL35L36_scale _wrt_F L34JL38*_wrt_E _lwrt_C"N~lwrt_CNab L42lL10008L53L55L56&L58,L59@L61ZL62L63~l_writenumberptrlentype ixyzxxyyL46L47L10006L51L52_fatal L54L20008L49L200060L20007rfltused lread.o#+ :@w   w  E 5% w    w| x5% %w b 5 A B Rr N@  0  > w 7 5 f @ - x  5@    N5 5  5 5 r nf Z  FD  2  $"N  @  x.7=  @@m 5 _7B 7=7=u7=e7=u7=e7r=f ff\ Xew N,5 5555 555 "F7  5 %,0%/1f Ne 5%5 5%*f 55@5 wNe 5 |5%. 55df Ne 5 F5 1 &.f 557   5555 f Ne 55 B5 u-5555 5 B5 555 5 B5 5u 55F57>_lw 65 5 5 "5%-%+5 f   B5u@5 5f 555=5@w@w ;7 z v5 %,%%/&%(_VH %%]8!,  p  wYp p  ` f    f  n ~5%* p5%(bf PJt> % 45 %,f  _ _x_ 5 f  % 5 %) _ __ 5 w | v `j7 d `5 %,%/ND >8f " % 5%*>   pp p   w@f 5%. 5@ F$ T f t@7XR N5 _% _%_7&@  % f _ _  _ _w  E7 5 %,%/3 f z % p5%*#b  pRp pw:@*f 5%'%"&u  N 75 5  $q'@  % f _4   q q5 (% ,%( u-!% )@\ u-'} 5A@ u-%_ 5A@  u-eN 7@m 5f = _4 w   ~f Z 5wfb \X RN HB<7 84  $  w  5 %  w%/%, 5 f w @  , @ ?@  eje e(@f&f 4e +@  ff fw 77wAAWp&ew   @  gg g w @f&f f ff le wd\\\\hht4DNXv4list inlist inlist in%dno replreadno starlread%lfno comma%lfno )%dno starlreadlogical%dno starno quoteno spacelist iostlerliolioYyyYyYy))HyiiiiyyYyHHyiiHHyHYHHHYyx yiiHHy HH YyyiiHx HHHYyyiiHx HHH(HYyy) yyy(YiiHY)8yyyyY ((_lioproc _ltab# _l_first _t_getc"~t_getccsv ch_curunit L10000L4L3cret _cf L100018L10002@__filbuf L5L_e_rsle"h~e_rslehchL10003~L11_lquit _lcount _ltype _lchar _lx _ly _l_read"L10009L36\L39hL41tL43L10014.L58L604L61DL62NL63XL64vL65~l_readnumberptrlentype inchyyxxL16L10007XL10004L10005L19_elist L10006L20_errno L21L22>L20006_fatal L15L236L20001_ungetc L27"L31_t_sep" L29LL20007F_l_R"_l_C"v_l_L"_l_CHAR"& L46L49FL50_clearer L10012L52L53L54NL55L66 _b_char ~l_RabcdichsigndadbdcL20012lL20009L20020ZL20022b_rd_int"L76&L77rL78L79L80L20026(L20028L82L85L86L87HL200148L90rL20016bL93L20018L96~rd_intxchsigniyL100L104(L102L20030__ctype_ L106VL10015pL99l~l_CvchL20035L20032L20037L20039L116L117V_fscanf L118~L119L10017L120L121 L109L122YL20046L10018 L124,L125&L126`L200490L20051<L128jL131fL135nL20043L137tL138L144 L143xL146L147:L153nL152~l_LchL158L20052L157PL20054L159L162TL20056L164L174nL166(L10023 L167L168"L169L20059L100246L171>L172LL173L175L181L179L182L176L188L10025L183 L187~l_CHAR& chsizeiquotepL193@ L200604 L192 L200628 L194D L197 L20064l L199L204 L10028 L201 L202 L203L20067 L10029 L205@ L212 _free _malloc L213 L100328 L214 L215 L10030Z L207l L211L216L219 L20069 L220 L20074 L224 L225 L222. L229R _realloc _s_rsle"l ~s_rslel an_init L236 _f_init _c_le"Z L237 L235 _reading _externa _formatt L10033 L238 _nowread ~t_sep chL20076 L245* L246$ L241 L20080 L20085 L248J L20082: ~c_leZ aflagL255_fmtbuf L10034 L10035x L256 L10036 L257 L258 L259L254 L20087 _fk_open L260* L10037 L261 L262 L263_recpos _scale _units L264j L10038N L265V L266d L267_do_lio"n ~do_lion typenumberptrlen fltused open.oIP|w @  , @ @  ee ewAAWp&eu _"@Ap@b@ @0 0 @ @ @0 0 @n  x@f@ @ @   kk kNe@  f&@& e@0 "0 $@o_\ fe _\@  b`V L_Nq q_NNe@& @0 0 Ne  fe = 4@  Nefe = @ fe =9& f e@0 0 N &@ Ne  Br2 $W !@  l(@ _ _l l_N@   @  N _N@$ "fe Ne fe & A1@ _@  _q\_@0 "0 $@   _ __$Ne@  f&@& e fe fe @ @ _.b& @ _.Ne@  f&@& eNe  B2 r @555 55Ne 5_p_Nw ($f f fe e u u @e5Ne 5 5 % 5%5% 5 5 Ne w~w z Nef % @E5%%@w<4openopenopenno spaceraropentmp.FXXXXXXopenfort.%DsdfuiHixHxHH8xxxH8x(xi)iii_f_open"L10013L58L22L564~f_opencsv abnbufxL10000&L10001L4RL100024L5<_errno L6JL7_fatal L3Ncret _units L8"L9pL10L11L12L20008L16L15L20005L234L10003L24 L25.L26L20014$_g_char L31\_access L10004L28L29L30L20011L33L35L34L32_strcpy _isdev"L36*L37_fopen L38|L39"L43L44RL42L46L47_fseek _canseek _inode L51L10008L52L53L54L10009L55.L10010&_rewind L57_mktemp _strlen _calloc L10005L59L62_creat L64ZL65,L10014FL10015JL10016_f_clos _fk_open"~fk_openrdseqfmtn nbufaL71_sprintf L10017:L72 L10018>L73L10019PL74L10020TL75L10021fL10022h~isdevsxj_stat L79L20016L78close.oFtw @ D, @AAWp&eu 3@0 0 @ : d' k@  N N @ @ @0 = w`N @  @ ",$w ,  5 5 u Ne % ww 5 AWp& AWp&N % w)x)8)))xx)_f_clos"~f_closcsv abL4L20002_units L6L15L11XL10001hL12p_t_runc _fclose L13L20007_free cret _unlink _f_exit"~f_exitixxL20009_flush_"~flush_iL20011L296_fflush util.ow @@m 5@ @m 5@0  = u-} u-ww 5 u }   A 5  u   A 5 w:w 6Nef w@w Aupu5;5 753uu A r5u- }ee  @ @mA AmHw~uu u- }  @@mAAmHw .4@e5= Ne   5_0fef %%_0u-N %Nefe x  Nefe ] W  5Nufef %%> Nefe 0u-@E%@Ne Ne Nefe x fe x fe & 5Nef Ne(( N @ww N 5N 5@@m ff  eNff e@@mȕ/ww  55 u /u  ,5 u5 Nf Nf N N 5 N wu= N :5.....//.../)))))(hh(8h())8hh_g_char"~g_charcsv aalenb xyL4BL20001.L7ZL20003Lcret _b_char"f~b_charfabbleniL13L20005rL10000zL16L20007L10001L12_inode"~inodeax_stat L22L21_mvgbt"~mvgbtnlenab numL26xyL27\L28>L31~L25~xyL36L37_curdir"~curdirnamebufposxyfileiL47L48L49_open L500L53_read _close L54`_dcat"xL55_chdir L56L57L60L58L61_strcmp L10002L62L63 L64_strlen _calloc _strcpy ~dcatxabij_fullpat"~fullpataberrflaga1a2npartdpartpL71L20009L73 L75tL77&L20012._strcat L79`_free L80nendfile.od Hw @  , @ @  ee e0  +AAWp&eu @ @ w@  N N wNw J@  w6N 5`ub& f eN 5\u^@-`A-b@  @ fej @  N Nej fej 5h & f e `ONh 5 f n5d%_ + @&fej e @&fej e   Ned dV*  DoG bN `W-bfbfez e5f 5 `u bubfAf 5`ub `Nhfffez _x'o o_Nh Nej _ f% f_X  /endfiletmp.FXXXXXXw/bin/cpcp/usr/bin/cpcpno cp endfileendfile98h9XhXhh'kJC_Od/KN ONK0LNM Ozz8Y_ax8_f_end"~f_endcsv abL10000$L10001L4XL100022L5:_errno L6HL7_fatal L3L20003NL9L20001T_units L10003L10_nowread _t_runc"cret ~t_runcbbufznmjtmphnfmdloc`len\L14L20004L13_ftell _fseek L10005 L10006L16_strcpy L10007DL17L_mktemp L18_fopen L20005xL20007 L20_fflush L20009_fork L24L25L27L26_execl L29L28L30 __iob _fprintf _exit _wait L31L10013L32L33L10008(L10009BL10010<L10011F_fread L21tL10012n_fwrite L34'L20012_fclose _unlink L37/wrtfmt.o2P( w   'm%  nt n n  e7 w  x  jh} j jw N J  Bw>@  x &f  e  f f@&f ef f@&@&f ~e @f  f ff ef f@&f f f@&@&@&f e f f@&@&@&f rf f@&@&f `w @  xT f  e w@7@7@7l@ L@@&  w nD  W- uW-  @5  @55fefeff e5@@5    5 A 5 <u 8* 5  u- -  + x 5 @& b u- wNw J W- uW-  @5  @55Nefeff e5   5 @@m@-@@m@-$5 * u-j  5  t u-U u-@@@@@55  . u- -  + 5 0 @@@-5 @& u- ww   wuu }}@& n w X u L  Dw@@  @& & w  5   @ @-@  tf ww  @&  A@   ww u   A 5  @&  b @   wNw J B Nefef W-==& e 5   @@m@-5 * u- w5  @AAm@@- - ~ z+ n h/@ -\). R 5 0 B 8 @-5 @m$@-U@&   1@e-*5 @& -. 5 @@-!@& . 5 @& u-=h5 %d %e H - 8 @ 5+ " % %dA rde0& A rdu% A r e0& A r e0f _Dw @5 W-==555575Iff f fff e 67 < @ e5ff fNfNf ^e 55  u-w@w5 55 5 B5u-w  W- ==5 |# v5 -l5 B5 5 5 B5 < @-Nefef5& e 5@ @-5   @ A AmAm@55 * u- w5  u- - r n+ b 5 @& L u-. 6 5 u-0  @ @-@& 0 u-@Tj:\2hvP\:>left offfmtw_ed, unexpected code: %d %s w_ned, unexpected code: %d %s )Yiiiii9HiYi)Y)Yiii)))YY))((YYY)))YYY))YYYY)YY)YY)YYY)YY)YYY) 8 ))YYY))Y YY Y Y Y YYY YYYYYY)  Y Y) ))YYY))YYYYY_mv_cur"~mv_curcsv L4L20001_putn _cursor L7n_recpos L8t_elist L100008L9@_errno L10NL11t _fatal L3pL10001T_cf _fseek cret _curunit L10002L14L15L16} _w_ed"L10004 L25L23L26L36L33L35L28@L29TL30jL27:~w_edpptrlenL20L19_fmtbuf L24 __iob _fprintf _abort L20009_wrt_I"L20010_wrt_IM"L200114_wrt_L"_wrt_A"._wrt_AW"f_wrt_E"L20012_wrt_G"L _wrt_F"\ _w_ned"L10006T L48\L442L42L49hL50vL46PL45:~w_nedpptrL43 _donewre L396L20013J_wrt_AP"L_wrt_H"~wrt_InwlenbasendigitsignspareixansL54L20020L20022L56L55_icvt L10007_cplus L58L59LL60(L63L10009<L64`L20015RL67tL20017L10010L68L70L20019~wrt_IMnwmlen ndigitsignspareixsignxansL76L20041L20043L78L77L10011,L804L818L10013TL82L83hL20024ZL20040FL20029rL86L87L20026L90L20031L92L20033L95L20035L10014L96L98L20037L101>L20039*~wrt_APLnsquoteL107dL106`L20044L20048rL20052L113L20054~wrt_HabsL119L117L120~wrt_LnleniL124L20056L10015L127L20058"~wrt_A.plenL132JL200604L10016:L133`~wrt_AWfpwlenL137L20062lL10017tL139L20064~wrt_Epwde len sdpsignidelta_scale L144L10018L20065_ecvt L10020 L145L146L147JL148<L20067.L20078DL151^L20069PL154~L20071L10022L155L157L158L20073L161L164L165`L166&L20075L169<L173L20077pL176L177L178L179L180L10023L181 L1822 L10026l ~wrt_GL pwde len upxioldscalenjL10024v L10025z L186 L1870 L20092 L185, L20082 L191 L192 L193 L20080 L188R L200846 ~wrt_F\ pwdlen ideltadpsignnxsL10027x L10028| L199 L200 L201 L205 L20094 _fcvt L208 L10029 L209 L210 L10031. L100320 L211b L212T L20096F L20109\ L215v L20098h L218 L20100 L10033 L219 L221 L20102 L224 L20104 L227 L20108 L230 L20106 fltused err.o>h@w %d N $%uNf} Nf @  f e @ r&& e ^R % @ <:C * &$.      e ww   &@ @ @  &@ @ @0 0  &@ @ @ ww Ne@& @ w w @0 0 N 5uNL@& % fff ewnw jN 5u@ NN@& % fff ew .Gbx$6Icerror in formatillegal unit numberformatted io not allowedunformatted io not alloweddirect io not allowedsequential io not allowedcan't backspace filenull file namecan't stat fileunit not connectedoff end of recordtruncation failed in endfileincomprehensible list inputout of free spaceunit not connectedread unexpected characterblank logical input field%s: illegal error number %d %s: end of file %d %s: %s apparent state: unit %d named %s last format: %s lately %s %s %s %s IO readingwritingsequentialdirectformattedunformattedexternalinternalrahx)))hxiihxyy99hxYiyhhhhhhyyxyxy_units |_init _elist _reading _cplus _cblank _fmtbuf _externa _doed _doned _doend _donewre _dorever _sequent _formatt _getn _putn _cf _curunit _recpos _cursor _scale _F_err#L1 L2L3.L4GL5bL6xL7L8L9L10L11L12L13L14$L156L16IL17c_fatal"~fatalcsv nsL21_perror L22dL232L24}L20002XL26FL27L29__iob _fprintf L10000tL31L10001|L30L10002L33L10003L32L10005L10004L41:L10006L42CL10008L10007L39$L10009L40.L10011L10010L37L10012L38L10014 L10013L35L10015L36 L34__cleanu _abort cret _f_init"0~f_init0p_canseek"~canseekfx_fstat L49:_isatty L486_nowread">~nowread>xloc_ftell L53L_freopen _fseek _nowwrit"~nowwritxlocL5((7Nfmtlib.o~hw D ) %=  < 8& ff ee0@3& fe e  A@  5u = 0&wd =e) I_icvt"~icvtcsv valuendigitsign baseL4bufiL5`L10000L6L9L10L10001,lrem aldiv L7L3cret dballoc.o4 w N ww Ae vD%- 7 j5$u--~# }@55 @m@- @m@-lu@E5@--&Ȇ1 -%; % }  %eE7  5% w-J e@- ?\ @me=7tn_P @m7\-ZS -JBD:6 =@ew < uE@-- b w5 @E=-- ww AupN 5ww D@ r5N !w5A vBB-  }ee@ !ۃ `!ւ `@ r ` assertion botched: %s allocp>allocs && allocp<=alloctq>p&&qalloctallocp<=alloctp>clearbusy(allocs[1].ptr)&&p<=allocttestbusy(p->ptr)p->ptr > allocp && p->ptr <= alloct)Xiy)Xihxy)y)y)y_botch"~botchcsv sL4_printf _abort cret _allocs#_allocp#_alloct#_allocx#_malloc"~mallocnbytespqnwL8tempL10000BL11JL10L12PL14TL17|L16L20001^L10001nL21vL20#L22~L23L251L10003L28L29;_write _exit _sbrk L310L7,L34@L33JL35^L38L37SL39_free"~freepsavepL10004L45L44bL48L47L10005L42&L50_calloc"*~calloc*nbytescountc_realloc"F~reallocFpnbytesqstnwonwL10006tL58zL60L20003'kFILORUX[^aOti %{#include "defs" %} %term NAME SHELLINE START MACRODEF COLON DOUBLECOLON GREATER %union { struct shblock *yshblock; struct depblock *ydepblock; struct nameblock *ynameblock; } %type SHELLINE, shlist, shellist %type NAME, namelist %type deplist, dlist %% %{ struct depblock *pp; FSTATIC struct shblock *prevshp; FSTATIC struct nameblock *lefts[NLEFTS]; struct nameblock *leftp; FSTATIC int nlefts; struct lineblock *lp, *lpp; FSTATIC struct depblock *prevdep; FSTATIC int sepc; %} file: | file comline ; comline: START | MACRODEF | START namelist deplist shellist = { while( --nlefts >= 0) { leftp = lefts[nlefts]; if(leftp->septype == 0) leftp->septype = sepc; else if(leftp->septype != sepc) fprintf(stderr, "Inconsistent rules lines for `%s'\n", leftp->namep); else if(sepc==ALLDEPS && *(leftp->namep)!='.' && $4!=0) { for(lp=leftp->linep; lp->nxtlineblock!=0; lp=lp->nxtlineblock) if(lp->shp) fprintf(stderr, "Multiple rules lines for `%s'\n", leftp->namep); } lp = ALLOC(lineblock); lp->nxtlineblock = NULL; lp->depp = $3; lp->shp = $4; if(! unequal(leftp->namep, ".SUFFIXES") && $3==0) leftp->linep = 0; else if(leftp->linep == 0) leftp->linep = lp; else { for(lpp = leftp->linep; lpp->nxtlineblock; lpp = lpp->nxtlineblock) ; if(sepc==ALLDEPS && leftp->namep[0]=='.') lpp->shp = 0; lpp->nxtlineblock = lp; } } } | error ; namelist: NAME = { lefts[0] = $1; nlefts = 1; } | namelist NAME = { lefts[nlefts++] = $2; if(nlefts>NLEFTS) fatal("Too many lefts"); } ; deplist: { char junk[10]; sprintf(junk, "%d", yylineno); fatal1("Must be a separator on rules line %s", junk); } | dlist ; dlist: sepchar = { prevdep = 0; $$ = 0; } | dlist NAME = { pp = ALLOC(depblock); pp->nxtdepblock = NULL; pp->depname = $2; if(prevdep == 0) $$ = pp; else prevdep->nxtdepblock = pp; prevdep = pp; } ; sepchar: COLON = { sepc = ALLDEPS; } | DOUBLECOLON = { sepc = SOMEDEPS; } ; shellist: = {$$ = 0; } | shlist = { $$ = $1; } ; shlist: SHELLINE = { $$ = $1; prevshp = $1; } | shlist SHELLINE = { $$ = $1; prevshp->nxtshblock = $2; prevshp = $2; } ; %% char *zznextc; /* zero if need another line; otherwise points to next char */ int yylineno; extern FILE * fin; yylex() { register char *p; register char *q; char word[INMAX]; if(zznextc == 0) return( nextlin() ); while( isspace(*zznextc) ) ++zznextc; if(*zznextc == '\0') return( nextlin() ); if(*zznextc == ':') { if(*++zznextc == ':') { ++zznextc; return(DOUBLECOLON); } else return(COLON); } if(*zznextc == '>') { ++zznextc; return(GREATER); } if(*zznextc == ';') return( retsh(zznextc) ); p = zznextc; q = word; while( ! ( funny[*p] & TERMINAL) ) *q++ = *p++; if(p != zznextc) { *q = '\0'; if((yylval.ynameblock=srchname(word))==0) yylval.ynameblock = makename(word); zznextc = p; return(NAME); } else { fprintf(stderr,"Bad character %c (octal %o), line %d", *zznextc,*zznextc,yylineno); fatal( (char *) NULL ); } return(0); /* never executed */ } retsh(q) char *q; { register char *p; struct shblock *sp; char *copys(); for(p=q+1 ; *p==' '||*p=='\t' ; ++p) ; sp = ALLOC(shblock); sp->nxtshblock = NULL; sp->shbp = (fin == NULL ? p : copys(p) ); yylval.yshblock = sp; zznextc = 0; return(SHELLINE); } nextlin() { static char yytext[INMAX]; static char *yytextl = yytext+INMAX; char *text, templin[INMAX]; register char c; register char *p, *t; char lastch, *lastchp; extern char **linesptr; int incom; int kc; again: incom = NO; zznextc = 0; if(fin == NULL) { if( (text = *linesptr++) == 0) return(0); ++yylineno; } else { for(p = text = yytext ; p #include #define SHELLCOM "/bin/sh" typedef long int TIMETYPE; #ifdef unix /* to install metering, add a statement like */ #define METERFILE "/usr/sif/make/Meter" /* to turn metering on, set external variable meteron to 1 */ #endif /* define FSTATIC to be static on systems with C compilers supporting file-static; otherwise define it to be null */ #define FSTATIC static #define NO 0 #define YES 1 #define unequal strcmp #define HASHSIZE 509 #define NLEFTS 40 #define NCHAR((S 500 #define NINTS 250 #define INMAX 1500 #define OUTMAX 2500 #define QBUFMAX 1500 #define ALLDEPS 1 #define SOMEDEPS 2 #define META 01 #define TERMINAL 02 extern char funny[128]; #define ALLOC(x) (struct x *) ckalloc(sizeof(struct x)) extern int sigivalue; extern int sigqvalue; extern int waitpid; extern int dbgflag; extern int prtrflag; extern int silflag; extern int noexflag; extern int keepgoing; extern int noruleflag; extern int touchflag; extern int questflag; extern int ndocoms; extern int ignerr; extern int okdel; extern int inarglist; extern char *prompt; extern char junkname[ ]; struct nameblock { struct nameblock *nxtnameblock; char *namep; struct lineblock *linep; int done:3; int septype:3; TIMETYPE modtime; }; extern struct nameblock *mainname ; extern struct nameblock *firstname; struct lineblock { struct lineblock *nxtlineblock; struct depblock *depp; struct shblock *shp; }; extern struct lineblock *sufflist; struct depblock { struct depblock *nxtdepblock; struct nameblock *depname; }; struct shblock { struct shblock *nxtshblock; char *shbp; }; struct varblock { struct varblock *nxtvarblock; char *varname; char *varval; int noreset:1; int used:1; }; extern struct varblock *firstvar; struct pattern { struct pattern *nxtpattern; char *patval; }; extern struct pattern *firstpat; struct opendir { struct opendir *nxtopendir; FILE * dirfc; char *dirn; }; extern struct opendir *firstod; struct chain { struct chain *nextp; char *datap; }; char *copys(), *concat(), *subst(), *sprintf(); int *ckalloc(); struct nameblock *srchname(), *makename(); TIMETYPE exists(); 'kM.14riri # Description file for the Make command P = und -3 | opr -r2 T = FILES = makefile ident.c defs main.c doname.c misc.c files.c dosys.c\ gram.y gcos.c OBJECTS = ident.o main.o doname.o misc.o files.o dosys.o gram.o LIBES= LINT = lint -ps CFLAGS = -O GCOSFILES = defs ident.c main.c doname.c misc.c gram.c gcos.c all: make cmp: make cmp make /bin/make rm *.o gram.c make cp: make cp make /bin/make rm *.o gram.c make make: $(OBJECTS) $(CC) -n -s $(CFLAGS) $(OBJECTS) $(LIBES) -o make $(OBJECTS): defs cleanup: -rm *.o gram.c -du install: cp make /bin/make printall: # Print files off line. -pr $(FILES) | $P touch print print: $(FILES) # print recently changed files -pr $? | $P touch print save: # Write files on Spider store. -nfs -ucv make $(FILES) test: 1zap 2zap diff 1zap 2zap rm 1zap 2zap 1zap: ./make -dp | grep -v TIME >1zap 2zap: /bin/make -dp | grep -v TIME >2zap time: time1 time2 ; time1 time2 : time ./make $T time /bin/make $T lint : dosys.c doname.c files.c main.c misc.c ident.c gram.c $(LINT) dosys.c doname.c files.c main.c misc.c ident.c gram.c rm gram.c src: cp $(FILES) /usr/src/cmd/make gcos: $(GCOSFILES) fsend -c -u sif $? touch gcos 'kh"%(+M\M\ #include "defs" FSTATIC struct nameblock *hashtab[HASHSIZE]; FSTATIC int nhashed = 0; /* simple linear hash. hash function is sum of characters mod hash table size. */ hashloc(s) char *s; { register int i; register int hashval; register char *t; hashval = 0; for(t=s; *t!='\0' ; ++t) hashval += *t; hashval %= HASHSIZE; for(i=hashval; hashtab[i]!=0 && unequal(s,hashtab[i]->namep); i = (i+1)%HASHSIZE ) ; return(i); } struct nameblock *srchname(s) char *s; { return( hashtab[hashloc(s)] ); } struct nameblock *makename(s) char *s; { /* make a fresh copy of the string s */ char *copys(); register struct nameblock *p; if(nhashed++ > HASHSIZE-3) fatal("Hash table overflow"); p = ALLOC(nameblock); p->nxtnameblock = firstname; p->namep = copys(s); p->linep = 0; p->done = 0; p->septype = 0; p->modtime = 0; firstname = p; if(mainname == NULL) if(s[0]!='.' || hasslash(s) ) mainname = p; hashtab[hashloc(s)] = p; return(p); } hasslash(s) char *s; { for( ; *s ; ++s) if(*s == '/') return(YES); return(NO); } char *copys(s) register char *s; { char *calloc(); register char *t, *t0; if( (t = t0 = calloc( strlen(s)+1 , sizeof(char)) ) == NULL) fatal("out of memory"); while(*t++ = *s++) ; return(t0); } char *concat(a,b,c) /* c = concatenation of a and b */ register char *a,*b; char *c; { register char *t; t = c; while(*t = *a++) t++; while(*t++ = *b++); return(c); } suffix(a,b,p) /* is b the suffix of a? if so, set p = prefix */ register char *a,*b,*p; { char *a0,*b0; a0 = a; b0 = b; while(*a++); while(*b++); if( (a-a0) < (b-b0) ) return(0); while(b>b0) if(*--a != *--b) return(0); while(a0 100) fatal("infinitely recursive macro?"); if(a!=0) while(*a) { if(*a != '$') *b++ = *a++; else if(*++a=='\0' || *a=='$') *b++ = *a++; else { s = vname; if( *a=='(' || *a=='{' ) { closer = ( *a=='(' ? ')' : '}'); ++a; while(*a == ' ') ++a; while(*a!=' ' && *a!=closer && *a!='\0') *s++ = *a++; while(*a!=closer && *a!='\0') ++a; if(*a == closer) ++a; } else *s++ = *a++; *s = '\0'; if( (vbp = varptr(vname)) ->varval != 0) { b = subst(vbp->varval, b); vbp->used = YES; } } } *b = '\0'; --depth; return(b); } setvar(v,s) char *v, *s; { struct varblock *varptr(), *p; p = varptr(v); if(p->noreset == 0) { p->varval = s; p->noreset = inarglist; if(p->used && unequal(v,"@") && unequal(v,"*") && unequal(v,"<") && unequal(v,"?") ) fprintf(stderr, "Warning: %s changed after being used\n",v); } } eqsign(a) /*look for arguments with equal signs but not colons */ char *a; { register char *s, *t; while(*a == ' ') ++a; for(s=a ; *s!='\0' && *s!=':' ; ++s) if(*s == '=') { for(t = a ; *t!='=' && *t!=' ' && *t!='\t' ; ++t ); *t = '\0'; for(++s; *s==' ' || *s=='\t' ; ++s); setvar(a, copys(s)); return(YES); } return(NO); } struct varblock *varptr(v) char *v; { register struct varblock *vp; for(vp = firstvar; vp ; vp = vp->nxtvarblock) if(! unequal(v , vp->varname)) return(vp); vp = ALLOC(varblock); vp->nxtvarblock = firstvar; firstvar = vp; vp->varname = copys(v); vp->varval = 0; return(vp); } fatal1(s, t) char *s, *t; { char buf[100]; fatal( sprintf(buf, s, t) ); } fatal(s) char *s; { if(s) fprintf(stderr, "Make: %s. Stop.\n", s); else fprintf(stderr, "\nStop.\n"); #ifdef unix exit(1); #endif #ifdef gcos exit(0); #endif } yyerror(s) char *s; { char buf[50]; extern int yylineno; fatal( sprintf(buf, "line %d: %s", yylineno, s) ); } struct chain *appendq(head, tail) struct chain *head; char *tail; { register struct chain *p, *q; p = ALLOC(chain); p->datap = tail; if(head) { for(q = head ; q->nextp ; q = q->nextp) ; q->nextp = p; return(head); } else return(p); } char *mkqlist(p) struct chain *p; { register char *qbufp, *s; static char qbuf[QBUFMAX]; if(p == NULL) { qbuf[0] = '\0'; return; } qbufp = qbuf; for( ; p ; p = p->nextp) { s = p->datap; if(qbufp+strlen(s) > &qbuf[QBUFMAX-3]) { fprintf(stderr, "$? list too long\n"); break; } while (*s) *qbufp++ = *s++; *qbufp++ = ' '; } *--qbufp = '\0'; return(qbuf); } 'k,`"- "- # include "defs" /* command make to update programs. Flags: 'd' print out debugging comments 'p' print out a version of the input graph 's' silent mode--don't print out commands 'f' the next argument is the name of the description file; "makefile" is the default 'i' ignore error codes from the shell 'S' stop after any command fails (normally do parallel work) 'n' don't issue, just print, commands 't' touch (update time of) files but don't issue command 'q' don't do anything, but ch((eck if object is up to date; returns exit code 0 if up to date, -1 if not */ struct nameblock *mainname ; struct nameblock *firstname; struct lineblock *sufflist; struct varblock *firstvar; struct pattern *firstpat ; struct opendir *firstod; #include int sigivalue = 0; int sigqvalue = 0; int waitpid = 0; int dbgflag = NO; int prtrflag = NO; int silflag = NO; int noexflag = NO; int keepgoing = NO; int noruleflag = NO; int touchflag = NO; int questflag = NO; int ndocoms = NO; int ignerr = NO; /* default is to stop on error */ int okdel = YES; int inarglist; char *prompt = ""; /* other systems -- pick what you want */ char junkname[20]; char funny[128]; main(argc,argv) int argc; char *argv[]; { register struct nameblock *p; int i, j; int descset, nfargs; TIMETYPE tjunk; char c, *s; static char onechar[2] = "X"; #ifdef unix int intrupt(); #endif #ifdef METERFILE meter(METERFILE); #endif descset = 0; funny['\0'] = (META | TERMINAL); for(s = "=|^();&<>*?[]:$`'\"\\\n" ; *s ; ++s) funny[*s] |= META; for(s = "\n\t :;&>|" ; *s ; ++s) funny[*s] |= TERMINAL; inarglist = 1; for(i=1; i= argc-1) fatal("No description argument after -f flag"); if( rddescf(argv[i+1]) ) fatal1("Cannot open %s", argv[i+1]); argv[i+1] = 0; ++descset; break; default: onechar[0] = c; /* to make lint happy */ fatal1("Unknown flag argument %s", onechar); } argv[i] = 0; } if( !descset ) #ifdef unix if( rddescf("makefile") ) rddescf("Makefile"); #endif #ifdef gcos rddescf("makefile"); #endif if(prtrflag) printdesc(NO); if( srchname(".IGNORE") ) ++ignerr; if( srchname(".SILENT") ) silflag = 1; if(p=srchname(".SUFFIXES")) sufflist = p->linep; if( !sufflist ) fprintf(stderr,"No suffix list.\n"); #ifdef unix sigivalue = (int) signal(SIGINT, SIG_IGN) & 01; sigqvalue = (int) signal(SIGQUIT, SIG_IGN) & 01; enbint(intrupt); #endif nfargs = 0; for(i=1; ivarval) && exists(p)>0 && !isprecious(p) ) { fprintf(stderr, "\n*** %s removed.", p); unlink(p); } if(junkname[0]) unlink(junkname); fprintf(stderr, "\n"); exit(2); } isprecious(p) char *p; { register struct lineblock *lp; register struct depblock *dp; register struct nameblock *np; if(np = srchname(".PRECIOUS")) for(lp = np->linep ; lp ; lp = lp->nxtlineblock) for(dp = lp->depp ; dp ; dp = dp->nxtdepblock) if(! unequal(p, dp->depname->namep)) return(YES); return(NO); } enbint(k) int (*k)(); { if(sigivalue == 0) signal(SIGINT,k); if(sigqvalue == 0) signal(SIGQUIT,k); } #endif extern char *builtin[]; char **linesptr = builtin; FILE * fin; int firstrd = 0; rddescf(descfile) char *descfile; { extern int yylineno; extern char *zznextc; FILE * k; /* read and parse description */ if( !firstrd++ ) { if( !noruleflag ) rdd1( (FILE *) NULL); #ifdef pwb { char *nlog, s[100]; nlog = logdir(); if ( (k=fopen( concat(nlog,"/makecomm",s), "r")) != NULL) rdd1(k); else if ( (k=fopen( concat(nlog,"/Makecomm",s), "r")) != NULL) rdd1(k); if ( (k=fopen("makecomm", "r")) != NULL) rdd1(k); else if ( (k=fopen("Makecomm", "r")) != NULL) rdd1(k); } #endif } if(! unequal(descfile, "-")) return( rdd1(stdin) ); if( (k = fopen(descfile,"r")) != NULL) return( rdd1(k) ); return(1); } rdd1(k) FILE * k; { fin = k; yylineno = 0; zznextc = 0; if( yyparse() ) fatal('k'`"- "- "Description file error"); if(fin != NULL) fclose(fin); return(0); } printdesc(prntflag) int prntflag; { struct nameblock *p; struct depblock *dp; struct varblock *vp; struct opendir *od; struct shblock *sp; struct lineblock *lp; #ifdef unix if(prntflag) { printf("Open directories:\n"); for(od = firstod ; od ; od = od->nxtopendir) printf("\t%d: %s\n", fileno(od->dirfc), od->dirn); } #endif if(firstvar != 0) printf("Macros:\n"); for(vp = firstvar; vp ; vp = vp->nxtvarblock) printf("\t%s = %s\n" , vp->varname , vp->varval); for(p = firstname; p; p = p->nxtnameblock) { printf("\n\n%s",p->namep); if(p->linep != 0) printf(":"); if(prntflag) printf(" done=%d",p->done); if(p==mainname) printf(" (MAIN NAME)"); for(lp = p->linep ; lp ; lp = lp->nxtlineblock) { if( dp = lp->depp ) { printf("\n depends on:"); for(; dp ; dp = dp->nxtdepblock) if(dp->depname != 0) printf(" %s ", dp->depname->namep); } if(sp = lp->shp) { printf("\n commands:\n"); for( ; sp!=0 ; sp = sp->nxtshblock) printf("\t%s\n", sp->shbp); } } } printf("\n"); fflush(stdout); } 'kﴁz MM char *xxxvers = "\nMAKE. VERSION 2.58 14 MARCH 1979\n" ; /* 2.1 4/24/76 Base version 2.2 4/26/76 Error found by SRB in overriding pattern rules; corrected gram.y 2.3 4/27/76 Further correction for overriding pattern rules; corrected doname.c 2.4 Removed .CLEAR name, added .IGNORE. A .SUFFIXES rule without dependents clears the list 2.5 Stripped output 2.6 Changed doshell to accomodate new shell. 2.7 Following SRB's sugestion, added ${...} as alternate macro name 2.8 Defined macros AS and DTGEN in files.c. 2.9 Put in a fix to prevent removal of files upon interrupt in a :: rule. 2.10 Fixed bugs involving messages for :: and closing standard input 2.11 Changed time test from <= to < (equal times are considered in sync) 2.12 Installed -t flag (touch and update time of files rather than issue commands) Fixed bug in dosys 2.13 Fixed lex.c to allow sharps (#) in commands 2.14 Added .DEFAULT rule 2.15 Changed to I/O System (stdio.h) 2.16 Removed references to double floats and macro HAVELONGS; committed to use of long ints for times. 2.17 Corrected metacharacter list in dosys.c. 2.18 Miscellaneous fixes 2.19 Updated files.c to use include file stat.h 2.20 Added -q flag for Mike Lesk 2.21 Added AWK rules and .w suffix to files.c 2.22 Added colon to the list of metacharacters 2.23 Macro substitutions on dependency lines. Redid argument and macro setting. Close files before exec'ing. Print > at beginning of command lines. No printing of commands beginnng with @. 2.24 Parametrized propt sequence in doname.c (4/1/77) 2.25 Added $? facility 2.26 Fixed bug in macro expansion 2.27 Repaired interrupt handling 2.28 Repaired bug in -n 2.29 Repaired bug in file closing and $? string creation 2.30 Repaired bug in grammar about command lines 2.31 Added -k flag, modified doname.c and defs 2.32 Made "keepgoing" the default, added -S flag, changed handling of funny characters internally 2.3 Small fixups to interrupt and quit handling. Changed default back to -k. 2.34 Added .PRECIOUS rule for interrupts 2.35 Added references to include files (due to TLL) 2.36 Fixed bug in lex.c so = permitted in rules on :; line 2.37 Miscellaneous code cleanups 2.38 Sleep one second after each touch in -t mode 2.39 Extended string[] declaration in doname.c 2.40 Permit recursive macro references 2.41 Separated YYLMAX into INMAX and OUTMAX macros, specifying longest input and output lines respectively. 2.42 Fixed bug involving :: lines without dependents 2.43 Main name is first name that contains a slash or doesn't begin with a dot 2.44 Fixed bug involving $$ on command line 2.45 Changed files.c to put .f before .e, .r and to use f77 instead of fc. 2.46 Changed dosys.c to eliminate copying and to call execvp. 2.47 Changed files.c to add ".out" suffix and rules. 2.48 Changed misc.c to permit tabs preceding = in macro definition 2.49 Added reference to . Removed -lS references from files.c 2.50 General cleanup to reduce lint messages. (changes in declaration((s and in uses of variables) 2.51 Further cleanup making use of new Yacc features. 2.52 2.53 Changed handling of "touch" 2.54 Fixed bug involving comments in lexical analyzer. 2.55 Ignore commands that begin with a # are comments. 2.56 Added = to list of META characters (to permit shell commands) 2.57 Changed lookarch and getobj to fix bugs. 2.58 Fixed interrupt handling. */ 'k9I4Z4Z /* UNIX DEPENDENT PROCEDURES */ /* DEFAULT RULES FOR UNIX */ char *builtin[] = { ".SUFFIXES : .out .o .c .f .e .r .y .yr .ye .l .s", "YACC=yacc", "YACCR=yacc -r", "YACCE=yacc -e", "YFLAGS=", "LEX=lex", "LFLAGS=", "CC=cc", #ifdef vax "AS=as". #else "AS=as -", #endif "CFLAGS=", "RC=f77", "RFLAGS=", "EC=f77", "EFLAGS=", "FFLAGS=", "LOADLIBES=", ".c.o :", "\t$(CC) $(CFLAGS) -c $<", ".e.o .r.o .f.o :", "\t$(EC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $<", ".s.o :", "\t$(AS) -o $@ $<", ".y.o :", "\t$(YACC) $(YFLAGS) $<", "\t$(CC) $(CFLAGS) -c y.tab.c", "\trm y.tab.c", "\tmv y.tab.o $@", ".yr.o:", "\t$(YACCR) $(YFLAGS) $<", "\t$(RC) $(RFLAGS) -c y.tab.r", "\trm y.tab.r", "\tmv y.tab.o $@", ".ye.o :", "\t$(YACCE) $(YFLAGS) $<", "\t$(EC) $(RFLAGS) -c y.tab.e", "\trm y.tab.e", "\tmv y.tab.o $@", ".l.o :", "\t$(LEX) $(LFLAGS) $<", "\t$(CC) $(CFLAGS) -c lex.yy.c", "\trm lex.yy.c", "\tmv lex.yy.o $@", ".y.c :", "\t$(YACC) $(YFLAGS) $<", "\tmv y.tab.c $@", ".l.c :", "\t$(LEX) $<", "\tmv lex.yy.c $@", ".yr.r:", "\t$(YACCR) $(YFLAGS) $<", "\tmv y.tab.r $@", ".ye.e :", "\t$(YACCE) $(YFLAGS) $<", "\tmv y.tab.e $@", ".s.out .c.out .o.out :", "\t$(CC) $(CFLAGS) $< $(LOADLIBES) -o $@", ".f.out .r.out .e.out :", "\t$(EC) $(EFLAGS) $(RFLAGS) $(FFLAGS) $< $(LOADLIBES) -o $@", "\t-rm $*.o", ".y.out :", "\t$(YACC) $(YFLAGS) $<", "\t$(CC) $(CFLAGS) y.tab.c $(LOADLIBES) -ly -o $@", "\trm y.tab.c", ".l.out :", "\t$(LEX) $<", "\t$(CC) $(CFLAGS) lex.yy.c $(LOADLIBES) -ll -o $@", "\trm lex.yy.c", 0 }; #include "defs" #include TIMETYPE exists(filename) char *filename; { #include struct stat buf; register char *s; TIMETYPE lookarch(); for(s = filename ; *s!='\0' && *s!='(' ; ++s) ; if(*s == '(') return(lookarch(filename)); if(stat(filename,&buf) < 0) return(0); else return(buf.st_mtime); } TIMETYPE prestime() { TIMETYPE t; time(&t); return(t); } #include FSTATIC char n15[15]; FSTATIC char *n15end = &n15[14]; struct depblock *srchdir(pat, mkchain, nextdbl) register char *pat; /* pattern to be matched in directory */ int mkchain; /* nonzero if results to be remembered */ struct depblock *nextdbl; /* final value for chain */ { FILE * dirf; int i, nread; char *dirname, *dirpref, *endir, *filepat, *p, temp[100]; char fullname[100], *p1, *p2; struct nameblock *q; struct depblock *thisdbl; struct opendir *od; struct pattern *patp; struct direct entry[32]; thisdbl = 0; if(mkchain == NO) for(patp=firstpat ; patp ; patp = patp->nxtpattern) if(! unequal(pat, patp->patval)) return(0); patp = ALLOC(pattern); patp->nxtpattern = firstpat; firstpat = patp; patp->patval = copys(pat); endir = 0; for(p=pat; *p!='\0'; ++p) if(*p=='/') endir = p; if(endir==0) { dirname = "."; dirpref = ""; filepat = pat; } else { dirname = pat; *endir = '\0'; dirpref = concat(dirname, "/", temp); filepat = endir+1; } dirf = NULL; for(od = firstod ; od; od = od->nxtopendir) if(! unequal(dirname, od->dirn) ) { dirf = od->dirfc; fseek(dirf,0L,0); /* start over at the beginning */ break; } if(dirf == NULL) { dirf = fopen(dirname, "r"); od = ALLOC(opendir); od->nxtopendir = firstod; firstod = od; od->dirfc = dirf; od->dirn = copys(dirname); } if(dirf == NULL) { fprintf(stderr, "Directory %s: ", dirname); fatal("Cannot open"); } else do { nread = fread( (char *) &entry[0], sizeof(struct direct), 32, dirf) ; for(i=0; inxtdepblock = nextdbl; thisdbl->depname = q; nextdbl = thisdbl; } } } } while(nread==32); if(endir != 0) *endir = '/'; return(thisdbl); } /* stolen from glob through find */ static amatch(s, p) char *s, *p; { register int cc, scc, k; int c, lc; scc = *s; lc = 077777; switch (c = *p) { case '[': k = 0; while (cc = *++p) { switch (cc) { case ']': if (k) return(amatch(++s, ++p)); else return(0); case '-': k |= (lc <= scc) & (scc <= (cc=p[1]) ) ; } if (scc==(lc=cc)) k++; } return(0); case '?': caseq: if(scc) return(amatch(++s, ++p)); return(0); case '*': return(umatch(s, ++p)); case 0: return(!scc); } if (c==scc) goto caseq; return(0); } static umatch(s, p) char *s, *p; { if(*p==0) return(1); while(*s) if (amatch(s++,p)) return(1); return(0); } #ifdef METERFILE #include int meteron = 0; /* default: metering off */ meter(file) char *file; { TIMETYPE tvec; char *p, *ctime(); FILE * mout; struct passwd *pwd, *getpwuid(); if(file==0 || meteron==0) return; pwd = getpwuid(getuid()); time(&tvec); if( (mout=fopen(file,"a")) != NULL ) { p = ctime(&tvec); p[16] = '\0'; fprintf(mout,"User %s, %s\n",pwd->pw_name,p+4); fclose(mout); } } #endif ' kK4Z4Z /* look inside archives for notations a(b) and a((b)) a(b) is file member b in archive a a((b)) is entry point _b in object archive a */ #include #include static struct ar_hdr arhead; FILE *arfd; long int arpos, arlen; static struct exec objhead; static struct nlist objentry; TIMETYPE lookarch(filename) char *filename; { char *p, *q, *send, s[15]; int i, nc, nsym, objarch; for(p = filename; *p!= '(' ; ++p) ; *p = '\0'; openarch(filename); *p++ = '('; if(*p == '(') { objarch = YES; nc = 8; ++p; } else { objarch = NO; nc = 14; } send = s + nc; for( q = s ; q struct stat buf; stat(f, &buf); arlen = buf.st_size; arfd = fopen(f, "r"); if(arfd == NULL) fatal1("cannot open %s", f); fread( (char *) &word, sizeof(word), 1, arfd); if(word != ARMAG) fatal1("%s is not an archive", f); arpos = 0; arhead.ar_size = 2 - sizeof(arhead); } getarch() { arpos += sizeof(arhead); arpos += (arhead.ar_size + 1 ) & ~1L; if(arpos >= arlen) return(0); fseek(arfd, arpos, 0); fread( (char *) &arhead, sizeof(arhead), 1, arfd); return(1); } getobj() { long int skip; fread( (char *) &objhead, sizeof(objhead), 1, arfd); if( objhead.a_magic != A_MAGIC1 && objhead.a_magic != A_MAGIC2 && objhead.a_magic != A_MAGIC3 && objhead.a_magic != A_MAGIC4 ) fatal1("%s is not an object module", arhead.ar_name); skip = objhead.a_text + objhead.a_data; if(! objhead.a_flag ) skip *= 2; fseek(arfd, skip, 1); } eqstr(a,b,n) register char *a, *b; int n; { register int i; for(i = 0 ; i < n ; ++i) if(*a++ != *b++) return(NO); return(YES); } 'kj<MtMt #include "defs" #include dosys(comstring,nohalt) register char *comstring; int nohalt; { register int status; if(metas(comstring)) status = doshell(comstring,nohalt); else status = doexec(comstring); return(status); } metas(s) /* Are there are any Shell meta-characters? */ register char *s; { register char c; while( (funny[c = *s++] & META) == 0 ) ; return( c ); } doshell(comstring,nohalt) char *comstring; int nohalt; { if((waitpid = fork()) == 0) { enbint(SIG_DFL); doclose(); ((execl(SHELLCOM, "sh", (nohalt ? "-c" : "-ce"), comstring, 0); fatal("Couldn't load Shell"); } return( await() ); } await() { int intrupt(); int status; register int pid; enbint(SIG_IGN); while( (pid = wait(&status)) != waitpid) if(pid == -1) fatal("bad wait code"); waitpid = 0; enbint(intrupt); return(status); } doclose() /* Close open directory files before exec'ing */ { register struct opendir *od; for (od = firstod; od; od = od->nxtopendir) if (od->dirfc != NULL) fclose(od->dirfc); } doexec(str) register char *str; { register char *t; char *argv[200]; register char **p; while( *str==' ' || *str=='\t' ) ++str; if( *str == '\0' ) return(-1); /* no command */ p = argv; for(t = str ; *t ; ) { *p++ = t; while(*t!=' ' && *t!='\t' && *t!='\0') ++t; if(*t) for( *t++ = '\0' ; *t==' ' || *t=='\t' ; ++t) ; } *p = NULL; if((waitpid = fork()) == 0) { enbint(SIG_DFL); doclose(); enbint(intrupt); execvp(str, argv); fatal1("Cannot load %s",str); } return( await() ); } #include #include #include touch(force, name) int force; char *name; { struct stat stbuff; char junk[1]; int fd; if( stat(name,&stbuff) < 0) if(force) goto create; else { fprintf(stderr, "touch: file %s does not exist.\n", name); return; } if(stbuff.st_size == 0) goto create; if( (fd = open(name, 2)) < 0) goto bad; if( read(fd, junk, 1) < 1) { close(fd); goto bad; } lseek(fd, 0L, 0); if( write(fd, junk, 1) < 1 ) { close(fd); goto bad; } close(fd); return; bad: fprintf(stderr, "Cannot touch %s\n", name); return; create: if( (fd = creat(name, 0666)) < 0) goto bad; close(fd); } 'kwnqtwz}oioi #include "defs" /* BASIC PROCEDURE. RECURSIVE. */ /* p->done = 0 don't know what to do yet p->done = 1 file in process of being updated p->done = 2 file already exists in current state p->done = 3 file make failed */ doname(p, reclevel, tval) register struct nameblock *p; int reclevel; TIMETYPE *tval; { int errstat; int okdel1; int didwork; TIMETYPE td, td1, tdep, ptime, ptime1, prestime(); register struct depblock *q; struct depblock *qtemp, *srchdir(), *suffp, *suffp1; struct nameblock *p1, *p2; struct shblock *implcom, *explcom; register struct lineblock *lp; struct lineblock *lp1, *lp2; char sourcename[100], prefix[100], temp[100], concsuff[20]; char *pnamep, *p1namep; char *mkqlist(); struct chain *qchain, *appendq(); if(p == 0) { *tval = 0; return(0); } if(dbgflag) { printf("doname(%s,%d)\n",p->namep,reclevel); fflush(stdout); } if(p->done > 0) { *tval = p->modtime; return(p->done == 3); } errstat = 0; tdep = 0; implcom = 0; explcom = 0; ptime = exists(p->namep); ptime1 = 0; didwork = NO; p->done = 1; /* avoid infinite loops */ qchain = NULL; /* Expand any names that have embedded metacharaters */ for(lp = p->linep ; lp ; lp = lp->nxtlineblock) for(q = lp->depp ; q ; q=qtemp ) { qtemp = q->nxtdepblock; expand(q); } /* make sure all dependents are up to date */ for(lp = p->linep ; lp ; lp = lp->nxtlineblock) { td = 0; for(q = lp->depp ; q ; q = q->nxtdepblock) { errstat += doname(q->depname, reclevel+1, &td1); if(dbgflag) printf("TIME(%s)=%ld\n", q->depname->namep, td1); if(td1 > td) td = td1; if(ptime < td1) qchain = appendq(qchain, q->depname->namep); } if(p->septype == SOMEDEPS) { if(lp->shp!=0) if( ptimedepp==0) { okdel1 = okdel; okdel = NO; setvar("@", p->namep); setvar("?", mkqlist(qchain) ); qchain = NULL; if( !questflag ) errstat += docom(lp->shp); setvar("@", (char *) NULL); okdel = okdel1; ptime1 = prestime(); didwork = YES; } } else { if(lp->shp != 0) { if(explcom) fprintf(stderr, "Too many command lines for `%s'\n", p->namep); else explcom = lp->shp; } if(td > tdep) tdep = td; } } /* Look for implicit dependents, using suffix rules */ for(lp = sufflist ; lp ; lp = lp->nxtlineblock) for(suffp = lp->depp ; suffp ; suffp = suffp->nxtdepblock) { pnamep = suffp->depname->namep; if(suffix(p->namep , pnamep , prefix)) { srchdir( concat(prefix,"*",temp) , NO, (struct depblock *) NULL); for(lp1 = sufflist ; lp1 ; lp1 = lp1->nxtlineblock) for(suffp1=lp1->depp ; suffp1 ; suffp1 = suffp1->nxtdepblock) { p1namep = suffp1->depname->namep; if( (p1=srchname(concat(p1namep, pnamep ,concsuff))) && (p2=srchname(concat(prefix, p1namep ,sourcename))) ) { errstat += doname(p2, reclevel+1, &td); if(ptime < td) qchain = appendq(qchain, p2->namep); if(dbgflag) printf("TIME(%s)=%ld\n", p2->namep, td); if(td > tdep) tdep = td; setvar("*", prefix); setvar("<", copys(sourcename)); for(lp2=p1->linep ; lp2 ; lp2 = lp2->nxtlineblock) if(implcom = lp2->shp) break; goto endloop; } } } } endloop: if(errstat==0 && (ptime0 ? tdep : prestime() ); setvar("@", p->namep); setvar("?", mkqlist(qchain) ); if(explcom) errstat += docom(explcom); else if(implcom) errstat += docom(implcom); else if(p->septype == 0) if(p1=srchname(".DEFAULT")) { setvar("<", p->namep); for(lp2 = p1->linep ; lp2 ; lp2 = lp2->nxtlineblock) if(implcom = lp2->shp) { errstat += docom(implcom); break; } } else if(keepgoing) { printf("Don't know how to make %s\n", p->namep); ++errstat; } else fatal1(" Don't know how to make %s", p->namep); setvar("@", (char *) NULL); if(noexflag || (ptime = exists(p->namep)) == 0) ptime = prestime(); } else if(errstat!=0 && reclevel==0) printf("`%s' not remade because of errors\n", p->namep); else if(!questflag && reclevel==0 && didwork==NO) printf("`%s' is up to date.\n", p->namep); if(questflag && reclevel==0) exit(ndocoms>0 ? -1 : 0); p->done = (errstat ? 3 : 2); if(ptime1 > ptime) ptime = ptime1; p->modtime = ptime; *tval = ptime; return(errstat); } docom(q) struct shblock *q; { char *s; struct varblock *varptr(); int ign, nopr; char string[OUTMAX]; ++ndocoms; if(questflag) return(NO); if(touchflag) { s = varptr("@")->varval; if(!silflag) printf("touch(%s)\n", s); if(!noexflag) touch(YES, s); } else for( ; q ; q = q->nxtshblock ) { subst(q->shbp,string); ign = ignerr; nopr = NO; for(s = string ; *s=='-' || *s=='@' ; ++s) if(*s == '-') ign = YES; else nopr = YES; if( docom1(s, ign, nopr) && !ign) if(keepgoing) return(YES); else fatal( (char *) NULL); } return(NO); } docom1(comstring, nohalt, noprint) register char *comstring; int nohalt, noprint; { register int status; if(comstring[0] == '\0') return(0); if(!silflag && (!noprint || noexflag) ) { printf("%s%s\n", (noexflag ? "" : prompt), comstring'#k&{nqtwz}oioi); fflush(stdout); } if(noexflag) return(0); if( status = dosys(comstring, nohalt) ) { if( status>>8 ) printf("*** Error code %d", status>>8 ); else printf("*** Termination code %d", status ); if(nohalt) printf(" (ignored)\n"); else printf("\n"); fflush(stdout); } return(status); } /* If there are any Shell meta characters in the name, expand into a list, after searching directory */ expand(q) register struct depblock *q; { register char *s; char *s1; struct depblock *p, *srchdir(); s1 = q->depname->namep; for(s=s1 ; ;) switch(*s++) { case '\0': return; case '*': case '?': case '[': if( p = srchdir(s1 , YES, q->nxtdepblock) ) { q->nxtdepblock = p; q->depname = 0; } return; } } '&kzhblili all: as as2 cmp: as as2 cmp as /bin/as cmp as2 /lib/as2 rm as as2 a.out cp: as as2 cp as /bin/as cp as2 /lib/as2 rm as as2 a.out as: as /usr/include/sys.s as1?.s ld -n -s a.out -o as as2: as /usr/include/sys.s as2?.s ld -n -s a.out -o as2 (('(kX1 SVY\_be{4 / / / as9 -- PDP-11 assembler pass 2 eae = 0 .data symtab: / special variables dotrel: 02; dot:000000 /. 01; dotdot:000000 /.. / register 24;000000 /r0 24;000001 /r1 24;000002 /r2 24;000003 /r3 24;000004 /r4 24;000005 /r5 24;000006 /sp 24;000007 /pc .if eae /eae & switches 01;177570 /csw 01;177300 /div 01;177302 /ac 01;177304 /mq 01;177306 /mul 01;177310 /sc 01;177311 /sr 01;177312 /nor 01;177314 /lsh 01;177316 /ash .endif / double operand 13;0010000 /mov 13;0110000 /movb 13;0020000 /cmp 13;0120000 /cmpb 13;0030000 /bit 13;0130000 /bitb 13;0040000 /bic 13;0140000 /bicb 13;0050000 /bis 13;0150000 /bisb 13;0060000 /add 13;0160000 /sub / branch 06;0000400 /br 06;0001000 /bne 06;0001400 /beq 06;0002000 /bge 06;0002400 /blt 06;0003000 /bgt 06;0003400 /ble 06;0100000 /bpl 06;0100400 /bmi 06;0101000 /bhi 06;0101400 /blos 06;0102000 /bvc 06;0102400 /bvs 06;0103000 /bhis 06;0103000 /bec 06;0103000 /bcc 06;0103400 /blo 06;0103400 /bcs 06;0103400 /bes / jump/ branch type 35;0000400 /jbr 36;0001000 /jne 36;0001400 /jeq 36;0002000 /jge 36;0002400 /jlt 36;0003000 /jgt 36;0003400 /jle 36;0100000 /jpl 36;0100400 /jmi 36;0101000 /jhi 36;0101400 /jlos 36;0102000 /jvc 36;0102400 /jvs 36;0103000 /jhis 36;0103000 /jec 36;0103000 /jcc 36;0103400 /jlo 36;0103400 /jcs 36;0103400 /jes / single operand 15;0005000 /clr 15;0105000 /clrb 15;0005100 /com 15;0105100 /comb 15;0005200 /inc 15;0105200 /incb 15;0005300 /dec 15;0105300 /decb 15;0005400 /neg 15;0105400 /negb 15;0005500 /adc 15;0105500 /adcb 15;0005600 /sbc 15;0105600 /sbcb 15;0005700 /tst 15;0105700 /tstb 15;0006000 /ror 15;0106000 /rorb 15;0006100 /rol 15;0106100 /rolb 15;0006200 /asr 15;0106200 /asrb 15;0006300 /asl 15;0106300 /aslb 15;0000100 /jmp 15;0000300 /swab / jsr 07;0004000 /jsr / rts 10;000200 /rts / simple operand 11;104400 /sys / flag-setting 01;0000241 /clc 01;0000242 /clv 01;0000244 /clz 01;0000250 /cln 01;0000261 /sec 01;0000262 /sev 01;0000264 /sez 01;0000270 /sen / floating point ops 01;170000 / cfcc 01;170001 / setf 01;170011 / setd 01;170002 / seti 01;170012 / setl 15;170400 / clrf 15;170700 / negf 15;170600 / absf 15;170500 / tstf 12;172400 / movf 14;177000 / movif 05;175400 / movfi 14;177400 / movof 05;176000 / movfo 14;172000 / addf 14;173000 / subf 14;171000 / mulf 14;174400 / divf 14;173400 / cmpf 14;171400 / modf 14;176400 / movie 05;175000 / movei 15;170100 / ldfps 15;170200 / stfps 24;000000 / fr0 24;000001 / fr1 24;000002 / fr2 24;000003 / fr3 24;000004 / fr4 24;000005 / fr5 / 11/45 operations 30;072000 /als (ash) 30;073000 /alsc (ashc) 30;070000 /mpy .if eae-1 30;070000/ mul 30;071000 / div 30;072000 / ash 30;073000 /ashc .endif 30;071000 /dvd 07;074000 /xor 15;006700 /sxt 11;006400 /mark 31;077000 /sob / specials 16;000000 /.byte 20;000000 /.even 21;000000 /.if 22;000000 /.endif 23;000000 /.globl 25;000000 /.text 26;000000 /.data 27;000000 /.bss 32;000000 /.comm start: mov (sp)+,r0 tst (sp)+ 1: mov (sp)+,r1 cmpb (r1),$'- bne 1f dec r0 cmpb 1(r1),$'g bne 2f mov $40,defund / globalize externals br 1b 2: cmpb 1(r1),$'o bne 1b dec r0 mov (sp)+,r1 mov r1,a.outp mov r1,a.outp1 mov r1,a.outp2 br 1b 1: cmp r0,$4 bge 1f jmp aexit 1: mov r1,a.tmp1 mov (sp)+,a.tmp2 mov (sp)+,a.tmp3 jsr r5,ofile; a.tmp1 movb r0,txtfil jsr r5,ofile; a.tmp2 movb r0,fbfil jsr r5,ofile; a.tmp3 movb r0,symf movb r0,fin sys creat; a.outp1:a.out; 666 bec 1f jsr r5,filerr; a.outp 1: movb r0,fout jmp go / overlaid buffer inbuf = start . = inbuf+512. '0kꁴrMP{kiki / / / as8 -- PDP-11 assembler pass 2 qnl: a.out: .even .data a.outp: a.out a.tmp1: 0 a.tmp2: 0 a.tmp3: 0 tseekp: txtseek rseekp: trelseek txtmagic: br .+20 txtsiz: .=.+2 datsiz: .=.+2 bsssiz: .=.+2 symsiz: .=.+2 stksiz: .=.+2 exorig: .=.+2 .=.+2 txtseek:0; 20 datseek:.=.+4 .=.+4 trelseek:.=.+4 drelseek:.=.+4 .=.+4 symseek:.=.+4 .bss brlen = 1024. brtab: .=.+[brlen\/8.] brtabp: .=.+2 brdelt: .=.+2 fbbufp: .=.+2 defund: .=.+2 savdot: .=.+6 datbase:.=.+2 bssbase:.=.+2 fbfil: .=.+2 fin: .=.+2 ibufc: .=.+2 txtfil: .=.+2 symf: .=.+2 adrbuf: .=.+12. xsymbol:.=.+2 fout: .=.+2 ch: .=.+2 errflg: .=.+2 wordf: .=.+2 argb: .=.+22. line: .=.+2 savop: .=.+2 curfb: .=.+20. nxtfb: .=.+20. numval: .=.+2 maxtyp: .=.+2 relfil: .=.+2 ibufp: .=.+2 txtp: .=.+8+512. relp: .=.+8+512. swapf: .=.+2 rlimit: .=.+2 passno: .=.+2 endtable:.=.+2 usymtab:.=.+20. end: .text '3k|7 8;>ADGJzkiki / / / a7 -- pdp-11 assembler expres: clr xsymbol expres1: mov r5,-(sp) mov $'+,-(sp) clr r2 mov $1,r3 br 1f advanc: jsr pc,readop 1: mov r4,r0 jsr r5,betwen; 0; 177 br .+4 br 7f movb (r4),r0 tst r0 bne 1f tstb passno beq 1f jsr r5,error; 'u 1: cmp r0,$40 bne 1f mov r4,xsymbol clr r1 br oprand 1: mov 2(r4),r1 br oprand 7: cmp r4,$141 blo 1f asl r4 mov curfb-[2*141](r4),r0 mov 2(r0),r1 movb (r0),r0 br oprand 1: mov $esw1,r1 1: cmp (r1)+,r4 beq 1f tst (r1)+ bne 1b tst (sp)+ mov (sp)+,r5 rts pc 1: jmp *(r1) esw1: '+; binop '-; binop '*; binop '/; binop '&; binop 037; binop 035; binop 036; binop '%; binop '[; brack '^; binop 1; exnum 2; exnum1 '!; binop 200; 0 binop: cmpb (sp),$'+ beq 1f jsr pc,errore 1: movb r4,(sp) br advanc exnum1: mov numval,r1 br 1f exnum: jsr pc,getw mov r4,r1 1: mov $1,r0 br oprand brack: mov r2,-(sp) mov r3,-(sp) jsr pc,readop jsr pc,expres1 cmp r4,$'] beq 1f jsr r5,error; '] 1: mov r3,r0 mov r2,r1 mov (sp)+,r3 mov (sp)+,r2 oprand: mov $exsw2,r5 1: cmp (sp),(r5)+ beq 1f tst (r5)+ bne 1b br eoprnd 1: jmp *(r5) exsw2: '+; exadd '-; exsub '*; exmul '/; exdiv 037; exor '&; exand 035;exlsh 036;exrsh '%; exmod '^; excmbin '!; exnot 200; 0 excmbin: mov r0,r3 br eoprnd exrsh: neg r1 beq exlsh inc r1 clc ror r2 exlsh: jsr r5,combin; relte2 als r1,r2 br eoprnd exmod: jsr r5,combin; relte2 mov r3,r0 mov r2,r3 clr r2 dvd r1,r2 mov r3,r2 mov r0,r3 br eoprnd exadd: jsr r5,combin; reltp2 add r1,r2 br eoprnd exsub: jsr r5,combin; reltm2 sub r1,r2 br eoprnd exand: jsr r5,combin; relte2 com r1 bic r1,r2 br eoprnd exor: jsr r5,combin; relte2 bis r1,r2 br eoprnd exmul: jsr r5,combin; relte2 mpy r2,r1 mov r1,r2 br eoprnd exdiv: jsr r5,combin; relte2 mov r3,r0 mov r2,r3 clr r2 dvd r1,r2 mov r0,r3 br eoprnd exnot: jsr r5,combin; relte2 com r1 add r1,r2 br eoprnd eoprnd: mov $'+,(sp) jmp advanc combin: tstb passno bne combin1 mov r0,-(sp) bis r3,(sp) bic $!40,(sp) bic $!37,r0 bic $!37,r3 cmp r0,r3 ble 1f mov r0,-(sp) mov r3,r0 mov (sp)+,r3 1: tst r0 beq 1f cmp (r5)+,$reltm2 bne 2f cmp r0,r3 bne 2f mov $1,r3 br 2f 1: tst (r5)+ clr r3 2: bis (sp)+,r3 rts r5 combin1: mov r1,-(sp) clr maxtyp jsr pc,maprel mov r0,r1 mpy $6,r1 mov r3,r0 jsr pc,maprel add (r5)+,r0 add r1,r0 movb (r0),r3 bpl 1f cmp r3,$-1 beq 2f jsr r5,error; 'r 2: mov maxtyp,r3 1: mov (sp)+,r1 rts r5 maprel: cmp r0,$40 bne 1f mov $5,r0 rts pc 1: bic $!37,r0 cmp r0,maxtyp blos 1f mov r0,maxtyp 1: cmp r0,$5 blo 1f mov $1,r0 1: rts pc X = -2 M = -1 reltp2: .byte 0, 0, 0, 0, 0, 0 .byte 0, M, 2, 3, 4,40 .byte 0, 2, X, X, X, X .byte 0, 3, X, X, X, X .byte 0, 4, X, X, X, X .byte 0,40, X, X, X, X reltm2: .byte 0, 0, 0, 0, 0, 0 .byte 0, M, 2, 3, 4,40 .byte 0, X, 1, X, X, X .byte 0, X, X, 1, X, X .byte 0, X, X, X, 1, X .byte 0, X, X, X, X, X relte2: .byte 0, 0, 0, 0, 0, 0 .byte 0, M, X, X, X, X .byte 0, X, X, X, X, X .byte 0, X, X, X, X, X .byte 0, X, X, X, X, X .byte 0, X, X, X, X, X ';k #&),/yjiji ((/ / / a6 -- pdp-11 assembler pass 2 opline: mov r4,r0 jsr r5,betwen; 0; 177 br 2f cmp r4,$5 beq opeof cmp r4,$'< bne xpr jmp opl17 xxpr: tst (sp)+ xpr: jsr pc,expres jsr pc,outw rts pc 2: movb (r4),r0 cmp r0,$24 /reg beq xpr cmp r0,$33 /est text beq xpr cmp r0,$34 / est data beq xpr jsr r5,betwen; 5; 36 br xpr mov 2(r4),-(sp) mov r0,-(sp) jsr pc,readop mov (sp)+,r0 asl r0 mov $adrbuf,r5 clr swapf mov $-1,rlimit jmp *1f-10.(r0) 1: opl5 opl6 opl7 opl10 opl11 opl12 opl13 opl14 opl15 opl16 opl17 opl20 opl21 opl22 opl23 xxpr opl25 opl26 opl27 opl30 opl31 opl32 xxpr xxpr opl35 opl36 opeof: mov $1,line mov $20,-(sp) mov $argb,r1 1: jsr pc,getw tst r4 bmi 1f movb r4,(r1)+ dec (sp) bgt 1b tstb -(r1) br 1b 1: movb $'\n,(r1)+ clrb (r1)+ tst (sp)+ rts pc opl30: / mpy, dvd etc inc swapf mov $1000,rlimit br opl13 opl14: / flop freg,fsrc inc swapf opl5: / flop src,freg mov $400,rlimit /double opl13: jsr pc,addres op2a: mov r2,-(sp) jsr pc,readop op2b: jsr pc,addres tst swapf beq 1f mov (sp),r0 mov r2,(sp) mov r0,r2 1: swab (sp) asr (sp) asr (sp) cmp (sp),rlimit blo 1f jsr r5,error; 'x 1: bis (sp)+,r2 bis (sp)+,r2 clr r3 jsr pc,outw mov $adrbuf,r1 1: cmp r1,r5 bhis 1f mov (r1)+,r2 mov (r1)+,r3 mov (r1)+,xsymbol jsr pc,outw br 1b 1: rts pc opl15: / single operand clr -(sp) br op2b opl12: / movf mov $400,rlimit jsr pc,addres cmp r2,$4 / see if source is fregister blo 1f inc swapf br op2a 1: mov $174000,(sp) br op2a / jbr opl35: / jeq, jne, etc opl36: jsr pc,expres tstb passno bne 1f mov r2,r0 jsr pc,setbr tst r2 beq 2f cmp (sp),$br beq 2f add $2,r2 2: add r2,dot / if doesn't fit add $2,dot tst (sp)+ rts pc 1: jsr pc,getbr bcc dobranch mov (sp)+,r0 mov r2,-(sp) mov r3,-(sp) cmp r0,$br beq 2f mov $402,r2 xor r0,r2 / flip cond, add ".+6" mov $1,r3 jsr pc,outw 2: mov $1,r3 mov $jmp+37,r2 jsr pc,outw mov (sp)+,r3 mov (sp)+,r2 jsr pc,outw rts pc /sob opl31: / sob jsr pc,expres jsr pc,checkreg swab r2 asr r2 asr r2 bis r2,(sp) jsr pc,readop jsr pc,expres tstb passno beq 3f sub dot,r2 neg r2 mov r2,r0 jsr r5,betwen; -2; 175 br 2f add $4,r2 br 1f /branch opl6: jsr pc,expres tstb passno beq 3f dobranch: sub dot,r2 mov r2,r0 jsr r5,betwen; -254.; 256. br 2f 1: bit $1,r2 bne 2f cmp r3,dot-2 / same relocation as . bne 2f asr r2 dec r2 bic $177400,r2 3: bis (sp)+,r2 clr r3 jsr pc,outw rts pc 2: jsr r5,error; 'b clr r2 br 3b /jsr opl7: jsr pc,expres jsr pc,checkreg jmp op2a / rts opl10: jsr pc,expres jsr pc,checkreg br 1f / sys, emt etc opl11: jsr pc,expres cmp r2,$256. bhis 0f cmp r3,$1 ble 1f 0: jsr pc,errora 1: bis (sp)+,r2 jsr pc,outw rts pc / .byte opl16: jsr pc,expres jsr pc,outb cmp r4,$', bne 1f jsr pc,readop br opl16 1: tst (sp)+ rts pc / < (.ascii) opl17: jsr pc,getw mov $1,r3 mov r4,r2 bmi 2f bic $!377,r2 jsr pc,outb br opl17 2: jsr pc,getw rts pc /.even opl20: bit $1,dot beq 1f cmp dot-2,$4 beq 2f / bss mode clr r2 clr r3 jsr pc,outb br 1f 2: inc dot 1: tst (sp)+ rts pc opl21: /if jsr pc,expres opl22: oplret: tst (sp)+ rts pc /.globl opl23: cmp r4,$200 blo 1f bisb $40,(r4) jsr pc,readop cmp r4,$', bne 1f jsr pc,readop br opl23 1: tst (sp)+ rts pc / .text, .data, .bss opl25: opl26: opl27: inc dot bic $1,dot mov r0,-(sp) mov dot-2,r1 asl r1 mov dot,savdot-4(r1) tstb passno beq 1f jsr r5,flush; txtp jsr r5,flush; relp mov (sp),r2 asl r2 add $txtseek-[4*25],r2 mov r2,tseekp mov (r2),r0 mov 2(r2),r1 jsr r5,oset; txtp add $trelseek-txtseek,r2 mov (r2),r0 mov 2(r2),r1 mov r2,rseekp jsr r5,oset; relp 1: mov (sp)+,r0 mov savdot-[2*25](r0),dot asr r0 sub $25-2,r0 mov r0,dot-2 / new . relocation tst (sp)+ rts pc opl32: cmp r4,$200 blo 1f mov r4,-(sp) jsr pc,readop jsr pc,readop jsr pc,expres mov (sp)+,r0 bit $37,(r0) bne 1f bis $40,(r0) mov r2,2(r0) 1: tst (sp)+ rts pc addres: clr -(sp) 4: cmp r4,$'( beq alp cmp r4,$'- beq amin cmp r4,$'$ beq adoll cmp r4,$'* bne getx jmp astar getx: jsr pc,expres cmp r4,$'( bne 2f jsr pc,readop mov r2,(r5)+ mov r3,(r5)+ mov xsymbol,(r5)+ jsr pc,expres jsr pc,checkreg jsr pc,checkrp bis $60,r2 bis (sp)+,r2 rts pc 2: cmp r3,$24 bne 1f jsr pc,checkreg bis (sp)+,r2 rts pc 1: mov r3,-(sp) bic $40,r3 mov (sp)+,r3 bis $100000,r3 sub dot,r2 sub $4,r2 cmp r5,$adrbuf beq 1f sub $2,r2 1: mov r2,(r5)+ / index mov r3,(r5)+ / index reloc. mov xsymbol,(r5)+ / index global mov $67,r2 / address mode bis (sp)+,r2 rts pc alp: jsr pc,readop jsr pc,expres jsr pc,checkrp jsr pc,checkreg cmp r4,$'+ beq 1f tst (sp)+ beq 2f bis $70,r2 clr (r5)+ clr (r5)+ mov xsymbol,(r5)+ rts pc 2: bis $10,r2 rts pc 1: jsr pc,readop bis $20,r2 bis (sp)+,r2 rts pc amin: jsr pc,readop cmp r4,$'( beq 1f mov r4,savop mov $'-,r4 br getx 1: jsr pc,readop jsr pc,expres jsr pc,checkrp jsr pc,checkreg bis (sp)+,r2 bis $40,r2 rts pc adoll: jsr pc,readop jsr pc,expres mov r'Fkꕹ #&),/yjiji2,(r5)+ mov r3,(r5)+ mov xsymbol,(r5)+ mov (sp)+,r2 bis $27,r2 rts pc astar: tst (sp) beq 1f jsr r5,error; '* 1: mov $10,(sp) jsr pc,readop jmp 4b errora: jsr r5,error; 'a rts pc checkreg: cmp r2,$7 bhi 1f cmp r1,$1 blos 2f cmp r3,$5 blo 1f 2: rts pc 1: jsr pc,errora clr r2 clr r3 rts pc errore: jsr r5,error; 'e rts pc checkrp: cmp r4,$') beq 1f jsr r5,error; ') rts pc 1: jsr pc,readop rts pc setbr: mov brtabp,r1 cmp r1,$brlen blt 1f mov $2,r2 rts pc 1: inc brtabp clr -(sp) sub dot,r0 ble 1f sub brdelt,r0 1: jsr r5,betwen; -254.; 256. br 1f br 2f 1: mov r1,-(sp) bic $!7,(sp) mov $1,r0 ash (sp)+,r0 ash $-3,r1 bisb r0,brtab(r1) mov $2,(sp) 2: mov (sp)+,r2 rts pc getbr: mov brtabp,r1 cmp r1,$brlen blt 1f sec rts pc 1: mov r1,-(sp) bic $!7,(sp) neg (sp) inc brtabp ash $-3,r1 movb brtab(r1),r1 ash (sp)+,r1 ror r1 / 0-bit into c-bit rts pc 'Ikմxiiii / / / as25 is empty 'Kkꋼ xiiii / / / a4 -- pdp-11 assembler pass 2 oset: mov r2,-(sp) mov r3,-(sp) mov (r5)+,r3 mov r1,r2 bic $!777,r1 add r3,r1 add $8,r1 mov r1,(r3)+ / next slot mov r3,r1 add $1006,r1 mov r1,(r3)+ / buf max mov r0,(r3)+ mov r2,(r3)+ / seek addr mov (sp)+,r3 mov (sp)+,r2 rts r5 putw: mov r1,-(sp) mov r2,-(sp) mov (r5)+,r2 mov (r2)+,r1 / slot cmp r1,(r2) / buf max bhis 1f mov r0,(r1)+ mov r1,-(r2) br 2f 1: tst (r2)+ mov r0,-(sp) jsr r5,flush1 mov (sp)+,r0 mov r0,*(r2)+ add $2,-(r2) 2: mov (sp)+,r2 mov (sp)+,r1 rts r5 flush: mov (r5)+,r2 cmp (r2)+,(r2)+ flush1: mov (r2)+,0f mov (r2)+,r1 mov r1,0f+2 / seek address mov fout,r0 sys indir; 9f .data 9: sys lseek; 0:..; ..; 0 .text bic $!777,r1 add r2,r1 / write address mov r1,0f mov r2,r0 bis $777,-(r2) add $1,(r2) / new seek addr adc -(r2) cmp -(r2),-(r2) sub (r2),r1 neg r1 mov r1,0f+2 / count mov r0,(r2) / new next slot mov fout,r0 sys indir; 9f jes wrterr .data 9: sys write; 0:..; .. .text rts r5 wrterr: mov $1,r0 sys write; 9f; 8f-9f jmp saexit 9: ; 8: readop: mov savop,r4 beq 1f clr savop rts pc 1: jsr pc,getw1 cmp r4,$200 blo 1f cmp r4,$4000 blo 2f add $usymtab-4000,r4 rts pc 2: add $symtab-1000,r4 1: rts pc getw: mov savop,r4 beq getw1 clr savop rts pc getw1: dec ibufc bgt 1f movb fin,r0 sys read; inbuf; 512. bes 3f asr r0 mov r0,ibufc bne 2f 3: mov $4,r4 sev rts pc 2: mov $inbuf,ibufp 1: mov *ibufp,r4 add $2,ibufp rts pc 'Ok´xiiii ((/ / / a3 -- pdp-11 assembler pass 2 assem: jsr pc,readop cmp r4,$5 beq 2f cmp r4,$'< beq 2f jsr pc,checkeos br eal1 mov r4,-(sp) cmp (sp),$1 bne 1f mov $2,(sp) jsr pc,getw mov r4,numval 1: jsr pc,readop cmp r4,$'= beq 4f cmp r4,$': beq 1f mov r4,savop mov (sp)+,r4 2: jsr pc,opline dotmax: tstb passno bne eal1 movb dotrel,r0 asl r0 cmp dot,txtsiz-4(r0) blos ealoop mov dot,txtsiz-4(r0) eal1: jmp ealoop 1: mov (sp)+,r4 cmp r4,$200 bhis 1f cmp r4,$2 beq 3f jsr r5,error; 'x br assem 1: tstb passno bne 2f movb (r4),r0 bic $!37,r0 beq 5f cmp r0,$33 blt 6f cmp r0,$34 ble 5f 6: jsr r5,error; 'm 5: bic $37,(r4) bis dotrel,(r4) mov 2(r4),brdelt sub dot,brdelt mov dot,2(r4) br assem 2: cmp dot,2(r4) beq assem jsr r5,error; 'p br assem 3: mov numval,r4 jsr pc,fbadv asl r4 mov curfb(r4),r0 movb dotrel,(r0) mov 2(r0),brdelt sub dot,brdelt mov dot,2(r0) br assem 4: jsr pc,readop jsr pc,expres mov (sp)+,r1 cmp r1,$symtab /test for dot bne 1f bic $40,r3 cmp r3,dotrel / can't change relocation bne 2f cmp r3,$4 / bss bne 3f mov r2,dot br dotmax 3: sub dot,r2 bmi 2f mov r2,-(sp) 3: dec (sp) bmi 3f clr r2 mov $1,r3 jsr pc,outb br 3b 3: tst (sp)+ br dotmax 2: jsr r5,error; '. br ealoop 1: cmp r3,$40 bne 1f jsr r5,error; 'r 1: bic $37,(r1) bic $!37,r3 bne 1f clr r2 1: bisb r3,(r1) mov r2,2(r1) ealoop: cmp r4,$'\n beq 1f cmp r4,$'\e bne 9f rts pc 1: inc line 9: jmp assem checkeos: cmp r4,$'\n beq 1f cmp r4,$'; beq 1f cmp r4,$'\e beq 1f add $2,(sp) 1: rts pc fbadv: asl r4 mov nxtfb(r4),r1 mov r1,curfb(r4) bne 1f mov fbbufp,r1 br 2f 1: add $4,r1 2: cmpb 1(r1),r4 beq 1f tst (r1) bpl 1b 1: mov r1,nxtfb(r4) asr r4 rts pc 'Tkڴwhihi / / / a2 -- pdp-11 assembler pass 2 outw: cmp dot-2,$4 beq 9f bit $1,dot bne 1f add $2,dot tstb passno beq 8f clr -(sp) rol r3 adc (sp) asr r3 / get relative pc bit cmp r3,$40 bne 2f / external references mov $666,outmod / make nonexecutable mov xsymbol,r3 sub $usymtab,r3 asl r3 bis $4,r3 / external relocation br 3f 2: bic $40,r3 / clear any ext bits cmp r3,$5 blo 4f cmp r3,$33 / est. text, data beq 6f cmp r3,$34 bne 7f 6: jsr r5,error; 'r 7: mov $1,r3 / make absolute 4: cmp r3,$2 blo 5f cmp r3,$4 bhi 5f tst (sp) bne 4f add dotdot,r2 br 4f 5: tst (sp) beq 4f sub dotdot,r2 4: dec r3 bpl 3f clr r3 3: asl r3 bis (sp)+,r3 mov r2,r0 jsr r5,putw; txtp mov tseekp,r0 add $2,2(r0) adc (r0) mov r3,r0 jsr r5,putw; relp mov rseekp,r0 add $2,2(r0) adc (r0) 8: rts pc 1: jsr r5,error; 'o clr r3 jsr pc,outb rts pc 9: jsr r5,error; 'x rts pc outb: cmp dot-2,$4 / test bss mode beq 9b cmp r3,$1 blos 1f jsr r5,error; 'r 1: tstb passno beq 2f mov r2,r0 bit $1,dot bne 1f jsr r5,putw; txtp clr r0 jsr r5,putw; relp mov tseekp,r0 add $2,2(r0) adc (r0) mov rseekp,r0 add $2,2(r0) adc (r0) br 2f 1: mov txtp,r0 movb r2,-1(r0) 2: inc dot rts pc error: mov pc,errflg mov $666,outmod / make nonexecutable mov r3,-(sp) mov r2,-(sp) mov r1,-(sp) mov r0,-(sp) mov $argb,r1 1: movb (r1),ch beq 1f clrb (r1)+ mov $1,r0 sys write; ch; 1 br 1b 1: mov (r5)+,r0 movb r0,0f mov line,r3 mov $0f+6,r0 mov $4,r1 2: clr r2 dvd $10.,r2 add $'0,r3 movb r3,-(r0) mov r2,r3 sob r1,2b mov $1,r0 sys write; 0f; 7 mov (sp)+,r0 mov (sp)+,r1 mov (sp)+,r2 mov (sp)+,r3 rts r5 .data 0: .even .text betwen: cmp r0,(r5)+ blt 1f cmp (r5)+,r0 blt 2f 1: tst (r5)+ 2: rts r5 'YkrB whihi / / / a21 -- pdp-11 assembler pass 2 main: sys signal; 2; 1 ror r0 bcs 1f sys signal; 2; saexit 1: jmp start / set up sizes and origins go: / read in symbol table mov $usymtab,r1 1: jsr pc,getw bvs 1f add $14,symsiz / count symbols jsr pc,getw jsr pc,getw jsr pc,getw jsr pc,getw mov r4,r0 bic $!37,r0 cmp r0,$2 /text blo 2f cmp r0,$3 /data bhi 2f add $31,r4 /mark "estimated" mov r4,(r1)+ jsr pc,getw mov r4,(r1)+ br 3f 2: clr (r1)+ clr (r1)+ jsr pc,getw 3: jsr pc,setbrk br 1b 1: / read in f-b definitions mov r1,fbbufp movb fbfil,fin clr ibufc 1: jsr pc,getw bvs 1f add $31,r4 / "estimated" mov r4,(r1)+ jsr pc,getw mov r4,(r1)+ jsr pc,setbrk br 1b 1: mov r1,endtable mov $100000,(r1)+ / set up input text file; initialize f-b table jsr pc,setup / do pass 1 jsr pc,assem / prepare for pass 2 cmp outmod,$777 beq 1f jmp aexit 1: clr dot mov $2,dotrel mov $..,dotdot clr brtabp movb fin,r0 sys close jsr r5,ofile; a.tmp1 movb r0,fin clr ibufc jsr pc,setup inc passno inc bsssiz bic $1,bsssiz mov txtsiz,r1 inc r1 bic $1,r1 mov r1,txtsiz mov datsiz,r2 inc r2 bic $1,r2 mov r2,datsiz mov r1,r3 mov r3,datbase / txtsiz mov r3,savdot+2 add r2,r3 mov r3,bssbase / txtsiz+datsiz mov r3,savdot+4 clr r0 asl r3 adc r0 add $20,r3 adc r0 mov r3,symseek+2 / 2*txtsiz+2*datsiz+20 mov r0,symseek sub r2,r3 sbc r0 mov r3,drelseek+2 / 2*txtsiz+datsiz mov r0,drelseek sub r1,r3 sbc r0 mov r3,trelseek+2 / txtsiz+datsiz+20 mov r0,trelseek sub r2,r3 sbc r0 mov r0,datseek mov r3,datseek+2 / txtsiz+20 mov $usymtab,r1 1: jsr pc,doreloc add $4,r1 cmp r1,endtable blo 1b clr r0 clr r1 jsr r5,oset; txtp mov trelseek,r0 mov trelseek+2,r1 jsr r5,oset; relp mov $8.,r2 mov $txtmagic,r1 1: mov (r1)+,r0 jsr r5,putw; txtp dec r2 bne 1b jsr pc,assem /polish off text and relocation jsr r5,flush; txtp jsr r5,flush; relp / append full symbol table mov symf,r0 mov r0,fin sys lseek; 0; 0; 0 clr ibufc mov symseek,r0 mov symseek+2,r1 jsr r5,oset; txtp mov $usymtab,r1 1: jsr pc,getw bvs 1f mov r4,r0 jsr r5,putw; txtp jsr pc,getw mov r4,r0 jsr r5,putw; txtp jsr pc,getw mov r4,r0 jsr r5,putw; txtp jsr pc,getw mov r4,r0 jsr r5,putw; txtp mov (r1)+,r0 jsr r5,putw; txtp mov (r1)+,r0 jsr r5,putw; txtp jsr pc,getw jsr pc,getw br 1b 1: jsr r5,flush; txtp jmp aexit .data saexit: mov pc,errflg aexit: mov a.tmp1,0f sys unlink; 0:.. mov a.tmp2,0f sys unlink; 0:.. mov a.tmp3,0f sys unlink; 0:.. tst errflg bne 2f sys umask; 0 bic r0,outmod sys chmod; a.outp2:a.out; outmod: 777 clr r0 br 1f 2: mov $2,r0 1: sys exit .text filerr: mov *(r5),r5 1: movb (r5)+,ch beq 1f mov $1,r0 sys write; ch; 1 br 1b 1: mov $1,r0 sys write; qnl; 2 jmp saexit doreloc: movb (r1),r0 bne 1f bisb defund,(r1) 1: bic $!37,r0 cmp r0,$5 bhis 1f cmp r0,$3 blo 1f beq 2f add bssbase,2(r1) rts pc 2: add datbase,2(r1) 1: rts pc setbrk: mov r1,-(sp) add $20,r1 cmp r1,0f blo 1f add $512.,0f sys indir; 9f .data 9: sys break; 0: end .text 1: mov (sp)+,r1 rts pc setup: mov $curfb,r4 1: clr (r4)+ cmp r4,$curfb+40. blo 1b mov txtfil,fin clr ibufc clr r4 1: jsr pc,fbadv tstb (r4)+ cmp r4,$10. blt 1b rts pc ofile: mov *(r5),0f sys indir; 9f .data 9: sys open; 0:..; 0 .text bes 1f tst (r5)+ rts r5 1: jmp filerr 'akzjgigi / / / a9 -- pdp-11 assembler pass 1 eae = 0 / key to types / 0 undefined / 1 absolute / 2 text / 3 data / 4 bss / 5 flop freg,dst (movfo, = stcfd) / 6 branch / 7 jsr / 10 rts / 11 sys / 12 movf (=ldf,stf) / 13 double operand (mov) / 14 flop fsrc,freg (addf) / 15 single operand (clr) / 16 .byte / 17 string (.ascii, "<") / 20 .even / 21 .if / 22 .endif / 23 .globl / 24 register / 25 .text / 26 .data / 27 .bss / 30 mul,div, etc / 31 sob / 32 .comm / 33 estimated text / 34 estimated data / 35 jbr / 36 jeq, jne, etc .data symtab: / special variables <.\0\0\0\0\0\0\0>; dotrel:02; dot:000000 <..\0\0\0\0\0\0>; 01; dotdot:000000 / register ; 24;000000 ; 24;000001 ; 24;000002 ; 24;000003 ; 24;000004 ; 24;000005 ; 24;000006 ; 24;000007 .if eae /eae & switches ; 01;177570 ; 01;177300 ; 01;177302 ; 01;177304 ((; 01;177306 ; 01;177310 ; 01;177311 ; 01;177312 ; 01;177314 ; 01;177316 .endif / double operand ; 13;0010000 ; 13;0110000 ; 13;0020000 ; 13;0120000 ; 13;0030000 ; 13;0130000 ; 13;0040000 ; 13;0140000 ; 13;0050000 ; 13;0150000 ; 13;0060000 ; 13;0160000 / branch ; 06;0000400 ; 06;0001000 ; 06;0001400 ; 06;0002000 ; 06;0002400 ; 06;0003000 ; 06;0003400 ; 06;0100000 ; 06;0100400 ; 06;0101000 ; 06;0101400 ; 06;0102000 ; 06;0102400 ; 06;0103000 ; 06;0103000 ; 06;0103000 ; 06;0103400 ; 06;0103400 ; 06;0103400 / jump/branch type ; 35;0000400 ; 36;0001000 ; 36;0001400 ; 36;0002000 ; 36;0002400 ; 36;0003000 ; 36;0003400 ; 36;0100000 ; 36;0100400 ; 36;0101000 ; 36;0101400 ; 36;0102000 ; 36;0102400 ; 36;0103000 ; 36;0103000 ; 36;0103000 ; 36;0103400 ; 36;0103400 ; 36;0103400 / single operand ; 15;0005000 ; 15;0105000 ; 15;0005100 ; 15;0105100 ; 15;0005200 ; 15;0105200 ; 15;0005300 ; 15;0105300 ; 15;0005400 ; 15;0105400 ; 15;0005500 ; 15;0105500 ; 15;0005600 ; 15;0105600 ; 15;0005700 ; 15;0105700 ; 15;0006000 ; 15;0106000 ; 15;0006100 ; 15;0106100 ; 15;0006200 ; 15;0106200 ; 15;0006300 ; 15;0106300 ; 15;0000100 ; 15;0000300 / jsr ; 07;0004000 / rts ; 010;000200 / simple operand ; 011;104400 / flag-setting ; 01;0000241 ; 01;0000242 ; 01;0000244 ; 01;0000250 ; 01;0000261 ; 01;0000262 ; 01;0000264 ; 01;0000270 / floating point ops ; 01;170000 ; 01;170001 ; 01;170011 ; 01;170002 ; 01;170012 ; 15;170400 ; 15;170700 ; 15;170600 ; 15;170500 ; 12;172400 ; 14;177000 ; 05;175400 ; 14;177400 ; 05;176000 ; 14;172000 ; 14;173000 ; 14;171000 ; 14;174400 ; 14;173400 ; 14;171400 ; 14;176400 ; 05;175000 ; 15;170100 ; 15;170200 ; 24;000000 ; 24;000001 ; 24;000002 ; 24;000003 ; 24;000004 ; 24;000005 / 11/45 operations ; 30;072000 ; 30;073000 ; 30;070000 .if eae-1 ; 30;070000 ; 30;071000 ; 30;072000 ; 30;073000 .endif ; 30;071000 ; 07;074000 ; 15;006700 ; 11;006400 ; 31;077000 / specials <.byte\0\0\0>; 16;000000 <.even\0\0\0>; 20;000000 <.if\0\0\0\0\0>; 21;000000 <.endif\0\0>; 22;000000 <.globl\0\0>; 23;000000 <.text\0\0\0>; 25;000000 <.data\0\0\0>; 26;000000'lkzjgigi <.bss\0\0\0\0>; 27;000000 <.comm\0\0\0>; 32;000000 ebsymtab: start: sys signal; 2; 1 ror r0 bcs 1f sys signal; 2; aexit 1: mov (sp)+,r0 tst (sp)+ 1: mov (sp),r1 cmpb (r1),$'- bne 1f tst (sp)+ dec r0 cmpb 1(r1),$'u bne 2f movb $'g,unglob br 1b 2: tstb 1(r1) bne 2f movb $'g,unglob br 1b 2: cmpb 1(r1),$'o bne 1f mov (sp),outfp tst (sp)+ dec r0 br 1b 1: movb r0,nargs tst -(sp) mov sp,curarg jsr r5,fcreat; a.tmp1 movb r0,pof jsr r5,fcreat; a.tmp2 movb r0,fbfil jsr pc,setup jmp go setup: mov $symtab,r1 1: clr r3 mov $8,r2 mov r1,-(sp) 2: movb (r1)+,r4 beq 2f add r4,r3 swab r3 sob r2,2b 2: clr r2 div $hshsiz,r2 ashc $1,r2 add $hshtab,r3 4: sub r2,r3 cmp r3,$hshtab bhi 3f add $2*hshsiz,r3 3: tst -(r3) bne 4b mov (sp)+,r1 mov r1,(r3) add $12.,r1 cmp r1,$ebsymtab blo 1b rts pc /overlay buffer inbuf = setup . =inbuf+512. 'okwififi / / / a8 -- pdp-11 assembler pass 1 chartab: .byte -14,-14,-14,-14,-02,-14,-14,-14 .byte -14,-22, -2,-14,-14,-22,-14,-14 .byte -14,-14,-14,-14,-14,-14,-14,-14 .byte -14,-14,-14,-14,-14,-14,-14,-14 .byte -22,-20,-16,-14,-20,-20,-20,-12 .byte -20,-20,-20,-20,-20,-20,056,-06 .byte 060,061,062,063,064,065,066,067 .byte 070,071,-20,-02,-00,-20,-14,-14 .byte -14,101,102,103,104,105,106,107 .byte 110,111,112,113,114,115,116,117 .byte 120,121,122,123,124,125,126,127 .byte 130,131,132,-20,-24,-20,-20,137 .byte -14,141,142,143,144,145,146,147 .byte 150,151,152,153,154,155,156,157 .byte 160,161,162,163,164,165,166,167 .byte 170,171,172,-14,-26,-14,176,-14 .data namedone:.byte 0 a.tmp1: a.tmp2: a.tmp3: .even curfb: -1;-1;-1;-1;-1;-1;-1;-1;-1;-1 obufp: outbuf symend: usymtab .bss curfbr: .=.+10. savdot: .=.+6 bufcnt: .=.+2 hshsiz = 3001. hshtab: .=2*hshsiz+. pof: .=.+1 wordf: .=.+1 fin: .=.+1 fbfil: .=.+1 fileflg:.=.+1 errflg: .=.+1 ch: .=.+1 .even symbol: .=.+8. obufc: .=.+2 outbuf: .=.+512. line: .=.+2 inbfcnt:.=.+2 ifflg: .=.+2 inbfp: .=.+2 nargs: .=.+2 curarg: .=.+2 opfound:.=.+2 savop: .=.+2 numval: .=.+2 nxtfb: .=.+4 usymtab:.=.+36. end: .text 'skܴhfifi / / / a7 -- pdp-11 assembler pass 1 expres: mov r5,-(sp) mov $'+,-(sp) clr opfound clr r2 mov $1,r3 br 1f advanc: jsr pc,readop 1: mov r4,r0 jsr r5,betwen; 0; 177 br .+4 br 7f movb (r4),r0 mov 2(r4),r1 br oprand 7: cmp r4,$141 blo 1f cmp r4,$141+10. bhis 2f movb curfbr-141(r4),r0 asl r4 mov curfb-[2*141](r4),r2 cmp r2,$-1 bne oprand jsr r5,error; 'f br oprand 2: clr r3 clr r2 br oprand 1: mov $esw1,r1 1: cmp (r1)+,r4 beq 1f tst (r1)+ bne 1b tst opfound bne 2f jsr pc,errore 2: tst (sp)+ mov (sp)+,r5 rts pc 1: jmp *(r1) esw1: '+; binop '-; binop '*; binop '/; binop '&; binop 037; binop 035; binop 036; binop '%; binop '[; brack '^; binop 1; exnum '!; binop 0; 0 binop: cmpb (sp),$'+ beq 1f jsr pc,errore 1: movb r4,(sp) br advanc exnum: mov numval,r1 mov $1,r0 br oprand brack: mov r2,-(sp) mov r3,-(sp) jsr pc,readop jsr pc,expres cmp r4,$'] beq 1f jsr r5,error; '] 1: mov r3,r0 mov r2,r1 mov (sp)+,r3 mov (sp)+,r2 oprand: inc opfound mov $exsw2,r5 1: cmp (sp),(r5)+ beq 1f tst (r5)+ bne 1b br eoprnd 1: jmp *(r5) exsw2: '+; exadd '-; exsub '*; exmul '/; exdiv 037; exor '&; exand 035;exlsh 036;exrsh '%; exmod '!; exnot '^; excmbin 0; 0 excmbin: mov r0,r3 / give left flag of right br eoprnd exrsh: neg r1 beq exlsh inc r1 clc ror r2 exlsh: jsr r5,combin; 0 als r1,r2 br eoprnd exmod: jsr r5,combin; 0 mov r1,-(sp) mov r2,r1 clr r0 dvd (sp)+,r0 mov r1,r2 br eoprnd exadd: jsr r5,combin; 0 add r1,r2 br eoprnd exsub: jsr r5,combin; 1 sub r1,r2 br eoprnd exand: jsr r5,combin; 0 com r1 bic r1,r2 br eoprnd exor: jsr r5,combin; 0 bis r1,r2 br eoprnd exmul: jsr r5,combin; 0 mpy r2,r1 mov r1,r2 br eoprnd exdiv: jsr r5,combin; 0 mov r1,-(sp) mov r2,r1 clr r0 dvd (sp)+,r0 mov r0,r2 br eoprnd exnot: jsr r5,combin; 0 com r1 add r1,r2 br eoprnd eoprnd: mov $'+,(sp) jmp advanc combin: mov r0,-(sp) bis r3,(sp) bic $!40,(sp) bic $!37,r0 bic $!37,r3 cmp r0,r3 ble 1f mov r0,-(((sp) mov r3,r0 mov (sp)+,r3 1: tst r0 beq 1f tst (r5)+ beq 2f cmp r0,r3 bne 2f mov $1,r3 br 2f 1: tst (r5)+ clr r3 2: bis (sp)+,r3 rts r5 'yks3 hfifi / / / a6 -- pdp-11 assembler pass 1 opline: mov r4,r0 jsr r5,betwen; 0; 200 br 1f cmp r0,$'< bne xpr jmp opl17 xpr: jsr pc,expres add $2,dot rts pc 1: movb (r4),r0 cmp r0,$24 beq xpr jsr r5,betwen; 5; 36 br xpr mov r0,-(sp) jsr pc,readop mov (sp)+,r0 asl r0 jmp *1f-12(r0) 1: opl13 / map fop freg,fdst to double opl6 opl7 opl10 opl11 opl13 / map fld/fst to double opl13 opl13 / map fop fsrc,freg to double opl15 opl16 opl17 opl20 opl21 opl22 opl23 xpr opl25 opl26 opl27 opl13 / map mul s,r to double opl31 opl32 xpr xpr opl35 opl36 / jbr opl35: mov $4,-(sp) br 1f / jeq, etc opl36: mov $6,-(sp) 1: jsr pc,expres cmp r3,dotrel bne 1f sub dot,r2 bge 1f cmp r2,$-376 blt 1f mov $2,(sp) 1: add (sp)+,dot rts pc /double opl13: opl7: jsr pc,addres op2: cmp r4,$', beq 1f jsr pc,errora rts pc 1: jsr pc,readop opl15: / single operand jsr pc,addres add $2,dot rts pc opl31: / sob jsr pc,expres cmp r4,$', beq 1f jsr pc,errora 1: jsr pc,readop /branch opl6: opl10: opl11: jsr pc,expres add $2,dot rts pc / .byte opl16: jsr pc,expres inc dot cmp r4,$', bne 1f jsr pc,readop br opl16 1: rts pc / < (.ascii) opl17: add numval,dot jsr pc,readop rts pc /.even opl20: inc dot bic $1,dot rts pc /.if opl21: jsr pc,expres tst r3 bne 1f jsr r5,error; 'U 1: tst r2 bne opl22 inc ifflg opl22: /endif rts pc /.globl opl23: cmp r4,$200 blo 1f bisb $40,(r4) jsr pc,readop cmp r4,$', bne 1f jsr pc,readop br opl23 1: rts pc opl25: opl26: opl27: mov dotrel,r1 asl r1 mov dot,savdot-4(r1) mov savdot-[2*25](r0),dot asr r0 sub $25-2,r0 mov r0,dotrel rts pc / .common opl32: cmp r4,$200 blo 1f bis $40,(r4) jsr pc,readop cmp r4,$', bne 1f jsr pc,readop jsr pc,expres rts pc 1: jsr r5,error; 'x rts pc addres: cmp r4,$'( beq alp cmp r4,$'- beq amin cmp r4,$'$ beq adoll cmp r4,$'* beq astar getx: jsr pc,expres cmp r4,$'( bne 2f jsr pc,readop jsr pc,expres jsr pc,checkreg jsr pc,checkrp add $2,dot clr r0 rts pc 2: cmp r3,$24 / register type bne 1f jsr pc,checkreg clr r0 rts pc 1: add $2,dot clr r0 rts pc alp: jsr pc,readop jsr pc,expres jsr pc,checkrp jsr pc,checkreg cmp r4,$'+ bne 1f jsr pc,readop clr r0 rts pc 1: mov $2,r0 rts pc amin: jsr pc,readop cmp r4,$'( beq 1f mov r4,savop mov $'-,r4 br getx 1: jsr pc,readop jsr pc,expres jsr pc,checkrp jsr pc,checkreg clr r0 rts pc adoll: jsr pc,readop jsr pc,expres add $2,dot clr r0 rts pc astar: jsr pc,readop cmp r4,$'* bne 1f jsr r5,error; '* 1: jsr pc,addres add r0,dot rts pc errora: jsr r5,error; 'a rts pc checkreg: cmp r2,$7 bhi 1f cmp r3,$1 beq 2f cmp r3,$4 bhi 2f 1: jsr pc,errora 2: rts pc errore: jsr r5,error; 'e rts pc checkrp: cmp r4,$') beq 1f jsr r5,error; ') rts pc 1: jsr pc,readop rts pc 'k3,{~geiei / / / a5 -- pdp-11 assembler pass 1 readop: mov savop,r4 beq 1f clr savop rts pc 1: jsr pc,8f jsr pc,putw rts pc 8: jsr pc,rch _readop: mov r0,r4 movb chartab(r0),r1 bgt rdname jmp *1f-2(r1) fixor escp 8b retread dquote garb squote rdname skip rdnum retread string 1: escp: jsr pc,rch mov $esctab,r1 1: cmpb r0,(r1)+ beq 1f tstb (r1)+ bne 1b rts pc 1: movb (r1),r4 rts pc esctab: .byte '/, '/ .byte '\<, 035 .byte '>, 036 .byte '%, 037 .byte 0, 0 fixor: mov $037,r4 retread: rts pc rdname: movb r0,ch cmp r1,$'0 blo 1f cmp r1,$'9 blos rdnum 1: jmp rname rdnum: jsr pc,number br 1f rts pc squote: jsr pc,rsch br 1f dquote: jsr pc,rsch mov r0,-(sp) jsr pc,rsch swab r0 bis (sp)+,r0 1: mov r0,numval mov $1,r4 jsr pc,putw mov numval,r4 jsr pc,putw mov $1,r4 tst (sp)+ rts pc skip: jsr pc,rch mov r0,r4 cmp r0,$'\e beq 1f cmp r0,$'\n bne skip 1: rts pc garb: jsr r5,error; 'g br 8b string: mov $'<,r4 jsr pc,putw clr numval 1: jsr pc,rsch tst r1 bne 1f mov r0,r4 bis $400,r4 jsr pc,putw inc numval br 1b 1: mov $-1,r4 jsr pc,putw mov $'<,r4 tst (sp)+ rts pc rsch: jsr pc,rch cmp r0,$'\e beq 4f cmp r0,$'\n beq 4f clr r1 cmp r0,$'\\ bne 3f jsr pc,rch mov $schar,r2 1: cmpb (r2)+,r0 beq 2f tstb (r2)+ bpl 1b rts pc 2: movb (r2)+,r0 clr r1 rts pc 3: cmp r0,$'> bne 1f inc r1 1: rts pc 4: jsr r5,error; '< jmp aexit schar: .byte 'n, 012 .byte 's, 040 .byte 't, 011 .byte 'e, 004 .byte '0, 000 .byte 'r, 015 .byte 'a, 006 .byte 'p, 033 .byte 0, -1 'kQZ iloruxfdidi / / / a4 -- pdp-11 assembler pass1 rname: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov $8,r5 mov $symbol+8.,r2 clr -(r2) clr -(r2) clr -(r2) clr -(r2) clr -(sp) clr -(sp) cmp r0,$'~ / symbol not for hash table bne 1f inc 2(sp) clrb ch 1: jsr pc,rch movb chartab(r0),r3 ble 1f add r3,(sp) swab (sp) dec r5 blt 1b movb r3,(r2)+ br 1b 1: movb r0,ch mov (sp)+,r1 clr r0 tst (sp)+ beq 1f mov symend,r4 br 4f 1: div $hshsiz,r0 ashc $1,r0 add $hshtab,r1 clr timesaround 1: sub r0,r1 cmp r1,$hshtab bhi 2f add $2*hshsiz,r1 tst timesaround beq 3f mov $1,r0 sys write; 9f; 8f-9f jmp aexit .data timesaround: .=.+2 9: ; 8: .even .text 3: inc timesaround 2: mov $symbol,r2 mov -(r1),r4 beq 3f cmp (r2)+,(r4)+ bne 1b cmp (r2)+,(r4)+ bne 1b cmp (r2)+,(r4)+ bne 1b cmp (r2)+,(r4)+ bne 1b br 1f 3: mov symend,r4 mov r4,(r1) 4: mov $symbol,r2 mov r4,-(sp) add $20,r4 cmp r4,0f blos 4f add $512.,0f sys indir; 9f .data 9: sys break; 0:end .text 4: mov (sp)+,r4 mov (r2)+,(r4)+ mov (r2)+,(r4)+ mov (r2)+,(r4)+ mov (r2)+,(r4)+ clr (r4)+ clr (r4)+ mov r4,symend sub $4,r4 1: mov r4,-(sp) mov r4,r3 sub $8,r3 cmp r3,$usymtab blo 1f sub $usymtab,r3 clr r2 div $3,r2 mov r2,r4 add $4000,r4 / user symbol br 2f 1: sub $symtab,r3 clr r2 div $3,r2 mov r2,r4 add $1000,r4 / builtin symbol 2: jsr pc,putw mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 tst (sp)+ rts pc number: mov r2,-(sp) mov r3,-(sp) mov r5,-(sp) clr r1 clr r5 1: jsr pc,rch jsr r5,betwen; '0; '9 br 1f sub $'0,r0 mpy $10.,r5 add r0,r5 als $3,r1 add r0,r1 br 1b 1: cmp r0,$'b beq 1f cmp r0,$'f beq 1f cmp r0,$'. bne 2f mov r5,r1 clr r0 2: movb r0,ch mov r1,r0 mov (sp)+,r5 mov (sp)+,r3 mov (sp)+,r2 rts pc 1: mov r0,r3 mov r5,r0 jsr pc,fbcheck add $141,r0 cmp r3,$'b beq 1f add $10.,r0 1: mov r0,r4 mov (sp)+,r5 mov (sp)+,r3 mov (sp)+,r2 add $2,(sp) rts pc rch: movb ch,r0 beq 1f clrb ch rts pc 1: dec inbfcnt blt 2f movb *inbfp,r0 inc inbfp bic $!177,r0 beq 1b rts pc 2: movb fin,r0 beq 3f sys read; inbuf;512. bcs 2f tst r0 beq 2f mov r0,inbfcnt mov $inbuf,inbfp br 1b 2: movb fin,r0 clrb fin sys close 3: decb nargs bgt 2f mov $'\e,r0 rts pc 2: tst ifflg beq 2f jsr r5,error; 'i jmp aexit 2: mov curarg,r0 tst (r0)+ mov (r0),0f mov r0,curarg incb fileflg sys indir; 9f .data 9: sys open; 0:0; 0 .text bec 2f mov 0b,r0 jsr r5,filerr; jmp aexit 2: movb r0,fin mov $1,line mov r4,-(sp) mov r1,-(sp) mov $5,r4 jsr pc,putw mov *curarg,r1 2: movb (r1)+,r4 beq 2f jsr pc,putw br 2b 2: mov $-1,r4 jsr pc,putw mov (sp)+,r1 mov (sp)+,r4 br 1b (('kX`cffdidi / / / a3 -- pdp-11 assembler pass 1 assem: jsr pc,readop jsr pc,checkeos br ealoop tst ifflg beq 3f cmp r4,$200 blos assem cmpb (r4),$21 /if bne 2f inc ifflg 2: cmpb (r4),$22 /endif bne assem dec ifflg br assem 3: mov r4,-(sp) jsr pc,readop cmp r4,$'= beq 4f cmp r4,$': beq 1f mov r4,savop mov (sp)+,r4 jsr pc,opline br ealoop 1: mov (sp)+,r4 cmp r4,$200 bhis 1f cmp r4,$1 / digit beq 3f jsr r5,error; 'x br assem 1: bitb $37,(r4) beq 1f jsr r5,error; 'm 1: bisb dot-2,(r4) mov dot,2(r4) br assem 3: mov numval,r0 jsr pc,fbcheck movb dotrel,curfbr(r0) asl r0 movb dotrel,nxtfb mov dot,nxtfb+2 movb r0,nxtfb+1 mov dot,curfb(r0) movb fbfil,r0 sys write; nxtfb; 4 jes wrterr br assem 4: jsr pc,readop jsr pc,expres mov (sp)+,r1 cmp r1,$200 bhis 1f jsr r5,error; 'x br ealoop 1: cmp r1,$dotrel bne 2f bic $40,r3 cmp r3,dotrel bne 1f 2: bicb $37,(r1) bic $!37,r3 bne 2f clr r2 2: bisb r3,(r1) mov r2,2(r1) br ealoop 1: jsr r5,error; '. movb $2,dotrel ealoop: cmp r4,$'; beq assem1 cmp r4,$'\n bne 1f inc line br assem1 1: cmp r4,$'\e bne 2f tst ifflg beq 1f jsr r5,error; 'x 1: rts pc 2: jsr r5,error; 'x 2: jsr pc,checkeos br assem1 jsr pc,readop br 2b assem1: jmp assem fbcheck: cmp r0,$9. bhi 1f rts pc 1: jsr r5,error; 'f clr r0 rts pc checkeos: cmp r4,$'\n beq 1f cmp r4,$'; beq 1f cmp r4,$'\e beq 1f add $2,(sp) 1: rts pc 'kvZ]ecici / / / a2 -- pdp-11 assembler pass 1 error: incb errflg mov r0,-(sp) mov r1,-(sp) mov (r5)+,r0 tst *curarg beq 1f mov r0,-(sp) mov *curarg,r0 clr *curarg jsr r5,filerr; '\n mov (sp)+,r0 1: mov r2,-(sp) mov r3,-(sp) mov line,r3 movb r0,1f mov $1f+6,r0 mov $4,r1 2: clr r2 dvd $10.,r2 add $'0,r3 movb r3,-(r0) mov r2,r3 sob r1,2b mov $1,r0 sys write; 1f; 7 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts r5 .data 1: .even .text betwen: cmp r0,(r5)+ blt 1f cmp (r5)+,r0 blt 2f 1: tst (r5)+ 2: rts r5 putw: tst ifflg beq 1f cmp r4,$'\n bne 2f 1: mov r4,*obufp add $2,obufp cmp obufp,$outbuf+512. blo 2f mov $outbuf,obufp movb pof,r0 sys write; outbuf; 512. jes wrterr 2: rts pc 'kx%QTWecici / / / PDP-11 assembler pass 0 jmp start go: jsr pc,assem movb pof,r0 sys write; outbuf; 512. jes wrterr movb pof,r0 sys close movb fbfil,r0 sys close tstb errflg bne aexit jsr r5,fcreat; a.tmp3 mov r0,r1 mov symend,0f sub $usymtab,0f sys indir; 9f jes wrterr .data 9: sys write; usymtab; 0:.. .text mov r1,r0 sys close sys exec; fpass2; 1f mov $fpass2,r0 jsr r5,filerr; "?\n aexit: sys unlink; a.tmp1 sys unlink; a.tmp2 sys unlink; a.tmp3 mov $3,r0 sys exit .data 1: fpass2 globfl outfl outfp: outfile a.tmp1 a.tmp2 a.tmp3 0 fpass2: globfl: unglob=.+1 <-\0\0> outfl: <-o\0> outfile: 3: <-g\0> .even .text filerr: mov r4,-(sp) mov r0,r4 mov r4,0f clr r0 1: tstb (r4)+ beq 1f inc r0 br 1b 1: mov r0,1f mov $1,r0 sys indir; 9f .data 9: sys write; 0:0; 1:0 .text mov r5,0f mov $1,0f+2 tstb 1(r5) beq 1f mov $2,0f+2 1: mov $1,r0 sys indir; 9f .data 9: sys write; 0:0; 1 .text tst (r5)+ mov (sp)+,r4 rts r5 fcreat: mov r4,-(sp) mov (r5)+,r4 mov r4,0f 1: sys indir; 9f .data 9: sys stat; 0:..; outbuf .text bec 2f mov r4,0f sys indir; 9f .data 9: sys creat; 0:..; 444 .text bes 2f mov (sp)+,r4 rts r5 2: incb 9.(r4) cmpb 9.(r4),$'z blos 1b mov r4,r0 jsr r5,filerr; "?\n mov $3,r0 sys exit .=.+2 wrterr: mov $1,r0 sys write; 9f; 9f-8f inc errflg jbr aexit 9: ; 8: 'kpKxaiai CFLAGS=-O all: yacc : cmp: all cmp yacc /bin/yacc rm yacc *.o cp: all cp yacc /bin/yacc rm yacc *.o yacc: y1.o y2.o y3.o y4.o cc -i -s -o yacc y?.o y1.o y2.o y3.o y4.o: dextern files 'k!k$'*-0369<?B aiai # include # include # include "files" /* MANIFEST CONSTANT DEFINITIONS */ /* base of nonterminal internal numbers */ # define NTBASE 010000 /* internal codes for error and accept actions */ # define ERRCODE 8190 # define ACCEPTCODE 8191 /* sizes and limits */ # ifdef HUGE # define ACTSIZE 12000 # define MEMSIZE 12000 # define NSTATES 750 # define NTERMS 127 # define NPROD 600 # define NNONTERM 300 # define TEMPSIZE 1200 # define CNAMSZ 5000 # define LSETSIZE 600 # define WSETSIZE 350 # endif # ifdef MEDIUM # define ACTSIZE 4000 # define MEMSIZE 5200 # define NSTATES 600 # define NTERMS 127 # define NPROD 400 # define NNONTERM 200 # define TEMPSIZE 800 # define CNAMSZ 4000 # define LSETSIZE 450 # define WSETSIZE 250 # endif # define NAMESIZE 50 # define NTYPES 63 # ifdef WORD32 # define TBITSET ((32+NTERMS)/32) /* bit packing macros (may be machine dependent) */ # define BIT(a,i) ((a)[(i)>>5] & (1<<((i)&037))) # define SETBIT(a,i) ((a)[(i)>>5] |= (1<<((i)&037))) /* number of words needed to hold n+1 bits */ # define NWORDS(n) (((n)+32)/32) # else # define TBITSET ((16+NTERMS)/16) /* bit packing macros (may be machine dependent) */ # define BIT(a,i) ((a)[(i)>>4] & (1<<((i)&017))) # define SETBIT(a,i) ((a)[(i)>>4] |= (1<<((i)&017))) /* number of words needed to hold n+1 bits */ # define NWORDS(n) (((n)+16)/16) # endif /* relationships which must hold: TBITSET ints must hold NTERMS+1 bits... WSETSIZE >= NNONTERM LSETSIZE >= NNONTERM TEMPSIZE >= NTERMS + NNONTERMs + 1 TEMPSIZE >= NSTATES */ /* associativities */ # define NOASC 0 /* no assoc. */ # define LASC 1 /* left assoc. */ # define RASC 2 /* right assoc. */ # define BASC 3 /* binary assoc. */ /* flags for state generation */ # define DONE 0 # define MUSTDO 1 # define MUSTLOOKAHEAD 2 /* flags for a rule having an action, and being reduced */ # define ACTFLAG 04 # define REDFLAG 010 /* output parser flags */ # define YYFLAG1 (-1000) /* macros for getting associativity and precedence levels */ # define ASSOC(i) ((i)&03) # define PLEVEL(i) (((i)>>4)&077) # define TYPE(i) ((i>>10)&077) /* macros for setting associativity and precedence levels */ # define SETASC(i,j) i|=j # define SETPLEV(i,j) i |= (j<<4) # define SETTYPE(i,j) i |= (j<<10) /* looping macros */ # define TLOOP(i) for(i=1;i<=ntokens;++i) # define NTLOOP(i) for(i=0;i<=nnonter;++i) # define PLOOP(s,i) for(i=s;i j ) j = *p; if( *p < k ) k = *p; } if( k <= j ){ /* nontrivial situation */ /* temporarily, kill this for compatibility j -= k; /* j is now the range */ if( k > maxoff ) maxoff = k; } greed[i] = (yypact[i+1]-yypact[i]) + 2*j; if( j > maxspr ) maxspr = j; } /* initialize ggreed table */ for( i=1; i<=nnonter; ++i ){ ggreed[i] = 1; j = 0; /* minimum entry index is always 0 */ q = mem + yypgo[i+1] -1; for( p = mem+yypgo[i]; p j ) j = *p; } ggreed[i] = ggreed[i] + 2*j; if( j > maxoff ) maxoff = j; } /* now, prepare to put the shift actions into the a array */ for( i=0; i1 ) fprintf( ftable, "State %d: null\n", i ); pa[i] = YYFLAG1; } while( (i = nxti()) != NOMORE ) { if( i >= 0 ) stin(i); else gin(-i); } if( adb>2 ){ /* print a array */ for( p=a; p <= maxa; p += 10){ fprintf( ftable, "%4d ", p-a ); for( i=0; i<10; ++i ) fprintf( ftable, "%4d ", p[i] ); fprintf( ftable, "\n" ); } } /* write out the output appropriate to the language */ aoutput(); osummary(); ZAPFILE(TEMPNAME); } gin(i){ register *p, *r, *s, *q1, *q2; /* enter gotos on nonterminal i into array a */ ggreed[i] = 0; q2 = mem+ yypgo[i+1] - 1; q1 = mem + yypgo[i]; /* now, find a place for it */ for( p=a; p < &a[ACTSIZE]; ++p ){ if( *p ) continue; for( r=q1; r maxa ){ if( (maxa=s) > &a[ACTSIZE] ) error( "a array overflow" ); } } /* we have found a spot */ *p = *q2; if( p > maxa ){ if( (maxa=p) > &a[ACTSIZE] ) error( "a array overflow" ); } for( r=q1; r1 ) fprintf( ftable, "Nonterminal %d, entry at %d\n" , i, pgo[i] ); goto nextgi; nextgp: ; } error( "cannot place goto %d\n", i ); nextgi: ; } stin(i){ register *r, *s, n, flag, j, *q1, *q2; greed[i] = 0; /* enter state i into the a array */ q2 = mem+yypact[i+1]; q1 = mem+yypact[i]; /* find an acceptable place */ for( n= -maxoff; n1 ) fprintf( ftable, "State %d: entry at %d equals state %d\n", i, n, j ); return; } goto nextn; /* we have some disagreement */ } } for( r = q1; r < q2; r += 2 ){ if( (s = *r + n + a ) >= &a[ACTSIZE] ) error( "out of space in optimizer a array" ); if( s > maxa ) maxa = s; if( *s != 0 && *s != r[1] ) error( "clobber of a array, pos'n %d, by %d", s-a, r[1] ); *s = r[1]; } pa[i] = n; if( adb>1 ) fprintf( ftable, "State %d: entry at %d\n", i, pa[i] ); return; nextn: ; } error( "Error; failure to place state %d\n", i ); } nxti(){ /* finds the next i */ register i, max, maxi; max = 0; for( i=1; i<= nnonter; ++i ) if( ggreed[i] >= max ){ max = ggreed[i]; maxi = -i; } for( i=0; i= max ){ max = greed[i]; maxi = i; } if( nxdb ) fprintf( ftable, "nxti = %d, max = %d\n", maxi, max ); if( max==0 ) return( NOMORE ); else return( maxi ); } osummary(){ /* write summary */ register i, *p; if( foutput == NULL ) return; i=0; for( p=maxa; p>=a; --p ) { if( *p == 0 ) ++i; } fprintf( foutput, "Optimizer space used: input %d/%d, output %d/%d\n", pmem-mem+1, MEMSIZE, maxa-a+1, A((' kj2P   `i`iCTSIZE ); fprintf( foutput, "%d table entries, %d zero\n", (maxa-a)+1, i ); fprintf( foutput, "maximum spread: %d, maximum offset: %d\n", maxspr, maxoff ); } aoutput(){ /* this version is for C */ /* write out the optimized parser */ fprintf( ftable, "# define YYLAST %d\n", maxa-a+1 ); arout( "yyact", a, (maxa-a)+1 ); arout( "yypact", pa, nstate ); arout( "yypgo", pgo, nnonter+1 ); } arout( s, v, n ) char *s; int *v, n; { register i; fprintf( ftable, "short %s[]={\n", s ); for( i=0; i &mem[MEMSIZE] ) error( "out of space" ); return( c ); } ' kn $_i_i # include "dextern" /* important local variables */ int lastred; /* the number of the last reduction of a state */ int defact[NSTATES]; /* the default actions of states */ output(){ /* print the output for the states */ int i, k, c; register struct wset *u, *v; fprintf( ftable, "short yyexca[] ={\n" ); SLOOP(i) { /* output the stuff for state i */ nolook = !(tystate[i]==MUSTLOOKAHEAD); closure(i); /* output actions */ nolook = 1; aryfil( temp1, ntokens+nnonter+1, 0 ); WSLOOP(wsets,u){ c = *( u->pitem ); if( c>1 && cpitem) ) putitem( v->pitem+1, (struct looksets *)0 ); } temp1[c] = state(c); } else if( c > NTBASE && temp1[ (c -= NTBASE) + ntokens ] == 0 ){ temp1[ c+ntokens ] = amem[indgo[i]+c]; } } if( i == 1 ) temp1[1] = ACCEPTCODE; /* now, we have the shifts; look at the reductions */ lastred = 0; WSLOOP(wsets,u){ c = *( u->pitem ); if( c<=0 ){ /* reduction */ lastred = -c; TLOOP(k){ if( BIT(u->ws.lset,k) ){ if( temp1[k] == 0 ) temp1[k] = c; else if( temp1[k]<0 ){ /* reduce/reduce conflict */ if( foutput!=NULL ) fprintf( foutput, "\n%d: reduce/reduce conflict (red'ns %d and %d ) on %s", i, -temp1[k], lastred, symnam(k) ); if( -temp1[k] > lastred ) temp1[k] = -lastred; ++zzrrconf; } else { /* potential shift/reduce conflict */ precftn( lastred, k, i ); } } } } } wract(i); } fprintf( ftable, "\t};\n" ); wdef( "YYNPROD", nprod ); } int pkdebug = 0; apack(p, n ) int *p;{ /* pack state i from temp1 into amem */ int off; register *pp, *qq, *rr; int *q, *r; /* we don't need to worry about checking because we we will only look entries known to be there... */ /* eliminate leading and trailing 0's */ q = p+n; for( pp=p,off=0 ; *pp==0 && pp<=q; ++pp,--off ) /* VOID */ ; if( pp > q ) return(0); /* no actions */ p = pp; /* now, find a place for the elements from p to q, inclusive */ r = &amem[ACTSIZE-1]; for( rr=amem; rr<=r; ++rr,++off ){ /* try rr */ for( qq=rr,pp=p ; pp<=q ; ++pp,++qq){ if( *pp != 0 ){ if( *pp != *qq && *qq != 0 ) goto nextk; } } /* we have found an acceptable k */ if( pkdebug && foutput!=NULL ) fprintf( foutput, "off = %d, k = %d\n", off, rr-amem ); for( qq=rr,pp=p; pp<=q; ++pp,++qq ){ if( *pp ){ if( qq > r ) error( "action table overflow" ); if( qq>memp ) memp = qq; *qq = *pp; } } if( pkdebug && foutput!=NULL ){ for( pp=amem; pp<= memp; pp+=10 ){ fprintf( foutput, "\t"); for( qq=pp; qq<=pp+9; ++qq ) fprintf( foutput, "%d ", *qq ); fprintf( foutput, "\n"); } } return( off ); nextk: ; } error("no space in action table" ); /* NOTREACHED */ } go2out(){ /* output the gotos for the nontermninals */ int i, j, k, best, count, cbest, times; fprintf( ftemp, "$\n" ); /* mark begining of gotos */ for( i=1; i<=nnonter; ++i ) { go2gen(i); /* find the best one to make default */ best = -1; times = 0; for( j=0; j<=nstate; ++j ){ /* is j the most frequent */ if( tystate[j] == 0 ) continue; if( tystate[j] == best ) continue; /* is tystate[j] the most frequent */ count = 0; cbest = tystate[j]; for( k=j; k<=nstate; ++k ) if( tystate[k]==cbest ) ++count; if( count > times ){ best = cbest; times = count; } } /* best is now the default entry */ zzgobest += (times-1); for( j=0; j<=nstate; ++j ){ if( tystate[j] != 0 && tystate[j]!=best ){ fprintf( ftemp, "%d,%d,", j, tystate[j] ); zzgoent += 1; } } /* now, the default */ zzgoent += 1; fprintf( ftemp, "%d\n", best ); } } int g2debug = 0; go2gen(c){ /* output the gotos for nonterminal c */ int i, work, cc; struct item *p, *q; /* first, find nonterminals with gotos on c */ aryfil( temp1, nnonter+1, 0 ); temp1[c] = 1; work = 1; while( work ){ work = 0; PLOOP(0,i){ if( (cc=prdptr[i][1]-NTBASE) >= 0 ){ /* cc is a nonterminal */ if( temp1[cc] != 0 ){ /* cc has a goto on c */ cc = *prdptr[i]-NTBASE; /* thus, the left side of production i does too */ if( temp1[cc] == 0 ){ work = 1; temp1[cc] = 1; } } } } } /* now, we have temp1[c] = 1 if a goto on c in closure of cc */ if( g2debug && foutput!=NULL ){ fprintf( foutput, "%s: gotos on ", nontrst[c].name ); NTLOOP(i) if( temp1[i] ) fprintf( foutput, "%s ", nontrst[i].name); fprintf( foutput, "\n"); } /* now, go through and put gotos into tystate */ aryfil( tystate, nstate, 0 ); SLOOP(i){ ITMLOOP(i,p,q){ if( (cc= *p->pitem) >= NTBASE ){ if( temp1[cc -= NTBASE] ){ /* goto on c is possible */ tystate[i] = amem[indgo[i]+c]; break; } } } } } precftn(r,t,s){ /* decide a shift/reduce conflict by precedence. /* r is a rule number, t a token number */ /* the conflict is in state s */ /* temp1[t] is changed to reflect the action */ int lp,lt, a' k댴 $_i_iction; lp = levprd[r]; lt = toklev[t]; if( PLEVEL(lt) == 0 || PLEVEL(lp) == 0 ) { /* conflict */ if( foutput != NULL ) fprintf( foutput, "\n%d: shift/reduce conflict (shift %d, red'n %d) on %s", s, temp1[t], r, symnam(t) ); ++zzsrconf; return; } if( PLEVEL(lt) == PLEVEL(lp) ) action = ASSOC(lt); else if( PLEVEL(lt) > PLEVEL(lp) ) action = RASC; /* shift */ else action = LASC; /* reduce */ switch( action ){ case BASC: /* error action */ temp1[t] = ERRCODE; return; case LASC: /* reduce */ temp1[t] = -r; return; } } wract(i){ /* output state i */ /* temp1 has the actions, lastred the default */ int p, p0, p1; int ntimes, tred, count, j; int flag; /* find the best choice for lastred */ lastred = 0; ntimes = 0; TLOOP(j){ if( temp1[j] >= 0 ) continue; if( temp1[j]+lastred == 0 ) continue; /* count the number of appearances of temp1[j] */ count = 0; tred = -temp1[j]; levprd[tred] |= REDFLAG; TLOOP(p){ if( temp1[p]+tred == 0 ) ++count; } if( count >ntimes ){ lastred = tred; ntimes = count; } } /* for error recovery, arrange that, if there is a shift on the /* error recovery token, `error', that the default be the error action */ if( temp1[1] > 0 ) lastred = 0; /* clear out entries in temp1 which equal lastred */ TLOOP(p) if( temp1[p]+lastred == 0 )temp1[p]=0; wrstate(i); defact[i] = lastred; flag = 0; TLOOP(p0){ if( (p1=temp1[p0])!=0 ) { if( p1 < 0 ){ p1 = -p1; goto exc; } else if( p1 == ACCEPTCODE ) { p1 = -1; goto exc; } else if( p1 == ERRCODE ) { p1 = 0; goto exc; exc: if( flag++ == 0 ) fprintf( ftable, "-1, %d,\n", i ); fprintf( ftable, "\t%d, %d,\n", tokset[p0].value, p1 ); ++zzexcp; } else { fprintf( ftemp, "%d,%d,", tokset[p0].value, p1 ); ++zzacent; } } } if( flag ) { defact[i] = -2; fprintf( ftable, "\t-2, %d,\n", lastred ); } fprintf( ftemp, "\n" ); return; } wrstate(i){ /* writes state i */ register j0,j1; register s((truct item *pp, *qq; register struct wset *u; if( foutput == NULL ) return; fprintf( foutput, "\nstate %d\n",i); ITMLOOP(i,pp,qq) fprintf( foutput, "\t%s\n", writem(pp->pitem)); if( tystate[i] == MUSTLOOKAHEAD ){ /* print out empty productions in closure */ WSLOOP( wsets+(pstate[i+1]-pstate[i]), u ){ if( *(u->pitem) < 0 ) fprintf( foutput, "\t%s\n", writem(u->pitem) ); } } /* check for state equal to another */ TLOOP(j0) if( (j1=temp1[j0]) != 0 ){ fprintf( foutput, "\n\t%s ", symnam(j0) ); if( j1>0 ){ /* shift, error, or accept */ if( j1 == ACCEPTCODE ) fprintf( foutput, "accept" ); else if( j1 == ERRCODE ) fprintf( foutput, "error" ); else fprintf( foutput, "shift %d", j1 ); } else fprintf( foutput, "reduce %d",-j1 ); } /* output the final production */ if( lastred ) fprintf( foutput, "\n\t. reduce %d\n\n", lastred ); else fprintf( foutput, "\n\t. error\n\n" ); /* now, output nonterminal actions */ j1 = ntokens; for( j0 = 1; j0 <= nnonter; ++j0 ){ if( temp1[++j1] ) fprintf( foutput, "\t%s goto %d\n", symnam( j0+NTBASE), temp1[j1] ); } } wdef( s, n ) char *s; { /* output a definition of s to the value n */ fprintf( ftable, "# define %s %d\n", s, n ); } warray( s, v, n ) char *s; int *v, n; { register i; fprintf( ftable, "short %s[]={\n", s ); for( i=0; i= 2 && argv[1][0] == '-' ) { while( *++(argv[1]) ){ switch( *argv[1] ){ case 'v': case 'V': foutput = fopen(FILEU, "w" ); if( foutput == NULL ) error( "cannot open y.output" ); continue; case 'D': case 'd': fdefine = fopen( FILED, "w" ); continue; case 'o': case 'O': fprintf( stderr, "`o' flag now default in yacc\n" ); continue; case 'r': case 'R': error( "Ratfor Yacc is dead: sorry...\n" ); default: error( "illegal option: %c", *argv[1]); } } argv++; argc--; } ftable = fopen( OFILE, "w" ); if( ftable == NULL ) error( "cannot open table file" ); ftemp = fopen( TEMPNAME, "w" ); faction = fopen( ACTNAME, "w" ); if( ftemp==NULL || faction==NULL ) error( "cannot open temp file" ); if( argc < 2 || ((finput=fopen( infile=argv[1], "r" )) == NULL ) ){ error( "cannot open input file" ); } cnamp = cnames; defin(0,"$end"); extval = 0400; defin(0,"error"); defin(1,"$accept"); mem=mem0; lev = 0; ty = 0; i=0; /* sorry -- no yacc parser here..... we must bootstrap somehow... */ for( t=gettok(); t!=MARK && t!= ENDFILE; ){ switch( t ){ case ';': t = gettok(); break; case START: if( (t=gettok()) != IDENTIFIER ){ error( "bad %%start construction" ); } start = chfind(1,tokname); t = gettok(); continue; case TYPEDEF: if( (t=gettok()) != TYPENAME ) error( "bad syntax in %%type" ); ty = numbval; for(;;){ t = gettok(); switch( t ){ case IDENTIFIER: if( (t=chfind( 1, tokname ) ) < NTBASE ) { j = TYPE( toklev[t] ); if( j!= 0 && j != ty ){ error( "type redeclaration of token %s", tokset[t].name ); } else SETTYPE( toklev[t],ty); } else { j = nontrst[t-NTBASE].tvalue; if( j != 0 && j != ty ){ error( "type redeclaration of nonterminal %s", nontrst[t-NTBASE].name ); } else nontrst[t-NTBASE].tvalue = ty; } case ',': continue; case ';': t = gettok(); break; default: break; } break; } continue; case UNION: /* copy the union declaration to the output */ cpyunion(); t = gettok(); continue; case LEFT: case BINARY: case RIGHT: ++i; case TERM: lev = t-TERM; /* nonzero means new prec. and assoc. */ ty = 0; /* get identifiers so defined */ t = gettok(); if( t == TYPENAME ){ /* there is a type defined */ ty = numbval; t = gettok(); } for(;;) { switch( t ){ case ',': t = gettok(); continue; case ';': break; case IDENTIFIER: j = chfind(0,tokname); if( lev ){ if( ASSOC(toklev[j]) ) error( "redeclaration of precedence of %s", tokname ); SETASC(toklev[j],lev); SETPLEV(toklev[j],i); } if( ty ){ if( TYPE(toklev[j]) ) error( "redeclaration of type of %s", tokname ); SETTYPE(toklev[j],ty); } if( (t=gettok()) == NUMBER ){ tokset[j].value = numbval; if( j < ndefout && j>2 ){ error( "please define type number of %s earlier", tokset[j].name ); } t=gettok(); } continue; } break; } continue' ks IILORUX[^adg^i^i; case LCURLY: defout(); cpycode(); t = gettok(); continue; default: error( "syntax error" ); } } if( t == ENDFILE ){ error( "unexpected EOF before %%" ); } /* t is MARK */ defout(); fprintf( ftable, "#define yyclearin yychar = -1\n" ); fprintf( ftable, "#define yyerrok yyerrflag = 0\n" ); fprintf( ftable, "extern int yychar;\nextern short yyerrflag;\n" ); fprintf( ftable, "#ifndef YYMAXDEPTH\n#define YYMAXDEPTH 150\n#endif\n" ); if( !ntypes ) fprintf( ftable, "#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n" ); fprintf( ftable, "YYSTYPE yylval, yyval;\n" ); prdptr[0]=mem; /* added production */ *mem++ = NTBASE; *mem++ = start; /* if start is 0, we will overwrite with the lhs of the first rule */ *mem++ = 1; *mem++ = 0; prdptr[1]=mem; while( (t=gettok()) == LCURLY ) cpycode(); if( t != C_IDENTIFIER ) error( "bad syntax on first rule" ); if( !start ) prdptr[0][1] = chfind(1,tokname); /* read rules */ while( t!=MARK && t!=ENDFILE ){ /* process a rule */ if( t == '|' ){ *mem++ = *prdptr[nprod-1]; } else if( t == C_IDENTIFIER ){ *mem = chfind(1,tokname); if( *mem < NTBASE ) error( "token illegal on LHS of grammar rule" ); ++mem; } else error( "illegal rule: missing semicolon or | ?" ); /* read rule body */ t = gettok(); more_rule: while( t == IDENTIFIER ) { *mem = chfind(1,tokname); if( *mem=NTBASE)error("nonterminal %s illegal after %%prec", nontrst[j-NTBASE].name); levprd[nprod]=toklev[j]; t = gettok(); } if( t == '=' ){ levprd[nprod] |= ACTFLAG; fprintf( faction, "\ncase %d:", nprod ); cpyact( mem-prdptr[nprod]-1 ); fprintf( faction, " break;" ); if( (t=gettok()) == IDENTIFIER ){ /* action within rule... */ sprintf( actname, "$$%d", nprod ); j = chfind(1,actname); /* make it a nonterminal */ /* the current rule will become rule number nprod+1 */ /* move the contents down, and make room for the null */ for( p=mem; p>=prdptr[nprod]; --p ) p[2] = *p; mem += 2; /* enter null production for action */ p = prdptr[nprod]; *p++ = j; *p++ = -nprod; /* update the production information */ levprd[nprod+1] = levprd[nprod] & ~ACTFLAG; levprd[nprod] = ACTFLAG; if( ++nprod >= NPROD ) error( "more than %d rules", NPROD ); prdptr[nprod] = p; /* make the action appear in the original rule */ *mem++ = j; /* get some more of the rule */ goto more_rule; } } while( t == ';' ) t = gettok(); *mem++ = -nprod; /* check that default action is reasonable */ if( ntypes && !(levprd[nprod]&ACTFLAG) && nontrst[*prdptr[nprod]-NTBASE].tvalue ){ /* no explicit action, LHS has value */ register tempty; tempty = prdptr[nprod][1]; if( tempty < 0 ) error( "must return a value, since LHS has a type" ); else if( tempty >= NTBASE ) tempty = nontrst[tempty-NTBASE].tvalue; else tempty = TYPE( toklev[tempty] ); if( tempty != nontrst[*prdptr[nprod]-NTBASE].tvalue ){ error( "default action causes potential type clash" ); } } if( ++nprod >= NPROD ) error( "more than %d rules", NPROD ); prdptr[nprod] = mem; levprd[nprod]=0; } /* end of all rules */ finact(); if( t == MARK ){ fprintf( ftable, "\n# line %d \"%s\"\n", lineno, infile ); while( (c=getc(finput)) != EOF ) putc( c, ftable ); } fclose( finput ); } finact(){ /* finish action routine */ fclose(faction); fprintf( ftable, "# define YYERRCODE %d\n", tokset[2].value ); } defin( t, s ) register char *s; { /* define s to be a terminal if t=0 or a nonterminal if t=1 */ register val; if (t) { if( ++nnonter >= NNONTERM ) error("too many nonterminals, limit %d",NNONTERM); nontrst[nnonter].name = cstash(s); return( NTBASE + nnonter ); } /* must be a token */ if( ++ntokens >= NTERMS ) error("too many terminals, limit %d",NTERMS ); tokset[ntokens].name = cstash(s); /* establish value for token */ if( s[0]==' ' && s[2]=='\0' ) /* single character literal */ val = s[1]; else if ( s[0]==' ' && s[1]=='\\' ) { /* escape sequence */ if( s[3] == '\0' ){ /* single character escape sequence */ switch ( s[2] ){ /* character which is escaped */ case 'n': val = '\n'; break; case 'r': val = '\r'; break; case 'b': val = '\b'; break; case 't': val = '\t'; break; case 'f': val = '\f'; break; case '\'': val = '\''; break; case '"': val = '"'; break; case '\\': val = '\\'; break; default: error( "invalid escape" ); } } else if( s[2] <= '7' && s[2]>='0' ){ /* \nnn sequence */ if( s[3]<'0' || s[3] > '7' || s[4]<'0' || s[4]>'7' || s[5] != '\0' ) error("illegal \\nnn construction" ); val = 64*s[2] + 8*s[3] + s[4] - 73*'0'; if( val == 0 ) error( "'\\000' is illegal" ); } } else { val = extval++; } tokset[ntokens].value = val; toklev[ntokens] = 0; return( ntokens ); } defout(){ /* write out the defines (at the end of the declaration section) */ register int i, c; register char *cp; for( i=ndefout; i<=ntokens; ++i ){ cp = tokset[i].name; if( *cp == ' ' ) ++cp; /* literals */ for( ; (c= *cp)!='\0'; ++cp ){ if( islower(c) || isupper(c) || isdigit(c) || c=='_' ); /* VOID */ else goto nodef; } fprintf( ftable, "# define %s %d\n", tokset[i].name, tokset[i].value ); if( fdefine != NULL ) fprintf( fdefine, "# define %s %d\n", tokset[i].name, tokset[i].value ); nodef: ; } ndefout = ntokens+1; } char * cstash( s ) register char *s; { char *temp; temp = cnamp; do { if( cnamp >= &cnames[cnamsz] ) error("too many characters in id's and literals" ); else *cnamp++ = *s; } while ( *s++ ); return( temp ); } gettok() { register i, base; static int peekline; /* number of '\n' seen in lookahead */ register c, match, reserve; begin: reserve = 0; lineno += peekline; peekline = 0; c = getc(finput); while( c==' ' || c=='\n' || c=='\t' || c=='\f' ){ if( c == '\n' ) ++lineno; c=getc(finput); } if( c == '/' ){ /* skip comment */ lineno += skipcom(); goto begin; } switch(c){ case EOF: return(ENDFILE); case '{': ungetc( c, finput ); return( '=' ); /* action ... */ case '<': /* get, and look up, a type name (union member name) */ i = 0; while( (c=getc(finput)) != '>' && c>=0 && c!= '\n' ){ tokname[i] = c; if( ++i >= NAMESIZE ) --i; } if( c != '>' ) error( "unterminated < ... > clause" ); tokname[i] = '\0'; for( i=1; i<=ntypes; ++i ){ if( !strcmp( typeset[i], tokname ) ){ numbval = i; return( TYPENAME ); } } typeset[numbval = ++ntypes] = cstash( tokname ); return( TYPENAME ); case '"': case '\'': match = c; tokname[0] = ' '; i = 1; for(;;){ c = getc(finput); if( c == '\n' || c == EOF ) error("illegal or missing ' or \"" ); if( c == '\\' ){ c = getc(finput); tokname[i] = '\\'; if( ++i >= NAMESIZE ) --i; } else if( c == match ) break; tokname[i] = c; if( ++i >= NAMESIZE ) --i; } break; case '%': case '\\': switch(c=getc(finput)) { case '0': return(TERM); case '<': return(LEFT); case '2': return(BINARY); case '>': return(RIGHT); case '%': case '\\': return(MARK); case '=': return(PREC); case '{': return(LCURLY); default: reserve = 1; } default: if( isdigit(c) ){ /* number */ numbval = c-'0' ; base = (c=='0') ? 8 : 10 ; for( c=getc(finput); isdigit(c) ; c=getc(finput) ){ numbval = numbval*base + c - '0'; } ungetc( c, finput ); return(NUMBER); } else if( islower(c) || isupper(c) || c=='_' || c=='.' || c=='$' ){ i = 0; while( islower(c) || isupper(c) || isdigit(c) || c=='_' || c=='.' || c=='$' ){ tokname[i] = c; if( reserve && isupper(c) ) tokname[i] += 'a'-'A'; if( ++i >= NAMESIZE ) --i; c = getc(finput); } } else return(c); ungetc( c, finput ); } tokname[i] = '\0'; if( reserve ){ /* find a reserved word */ if( !strcmp(tokname,"term")) return( TERM ); if( !strcmp(tokname,"token")) return( TERM ); if( !strcmp(tokname,"left")) return( LEFT ); if( !strcmp(tokname,"nonassoc")) return( BINARY ); if( !strcmp(tokname,"binary")) return( BINARY ); if( !strcmp(tokname,"right")) return( RIGHT ); if( !strcmp(tokname,"prec")) return( PREC ); if( !strcmp(tokname,"start")) return( START ); if( !strcmp(tokname,"type")) return( TYPEDEF ); if( !strcmp(tokname,"union")) return( UNION ); error("invalid escape, or illegal reserved word: %s", tokname ); } /* look ahead to distinguish IDENTIFIER from C_IDENTIFIER */ c = getc(finput); while( c==' ' || c=='\t'|| c=='\n' || c=='\f' || c== '/' ) { if( c == '\n' ) ++peekline; else if( c == '/' ){ /* look for comments */ peekline += skipcom(); } c = getc(finput); } if( c == ':' ) return( C_IDENTIFIER ); ungetc( c, finput ); return( IDENTIFIER ); } fdtype( t ){ /* determine the type of a symbol */ register v; if( t >= NTBASE ) v = nontrst[t-NTBASE].tvalue; else v = TYPE( toklev[t] ); if( v <= 0 ) error( "must specify type for %s", (t>=NTBASE)?nontrst[t-NTBASE].name: tokset[t].name ); return( v ); } chfind( t, s ) register char *s; { int i; if (s[0]==' ')t=0; TLOOP(i){ if(!strcmp(s,tokset[i].name)){ return( i ); } } NTLOOP(i){ if(!strcmp(s,nontrst[i].name)) { return( i+NTBASE ); } } /* cannot find name */ if( t>1 ) error( "%s should have been defined earlier", s ); return( defin( t, s ) ); } cpyunion(){ /* copy the union declaration to the output, and the define file if present */ int level, c; fprintf( ftable, "\n# line %d \"%s\"\n", lineno, infile ); fprintf( ftable, "typedef union " ); if( fdefine ) fprintf( fdefine, "\ntypedef union " ); level = 0; for(;;){ if( (c=getc(finput)) < 0 ) error( "EOF encountered while processing %%union" ); putc( c, ftable ); if( fdefine ) putc( c, fdefine ); switch( c ){ case '\n': ++lineno; break; case '{': ++level; break; case '}': --level; if( level == 0 ) { /* we are finished copying */ fprintf( ftable, " YYSTYPE;\n" ); if( fdefine ) fprintf( fdefine, " YYSTYPE;\nextern YYSTYPE yylval;\n" ); return; } } } } cpycode(){ /* copies code between \{ and \} */ int c; c = getc(finput); if( c == '\n' ) { c = getc(finput); lineno++; } fprintf( ftable, "\n# line %d \"%s\"\n", lineno, infile ); while( c>=0 ){ if( c=='\\' ) if( (c=getc(finput)) == '}' ) return; else putc('\\', ftable ); if( c=='%' ) if( (c=getc(finput)) == '}' ) return; else putc('%', ftable ); putc( c , ftable ); if( c == '\n' ) ++lineno; c = getc(finput); } error("eof before %%}" ); } skipcom(){ /* skip over comments */ register c, i=0; /* i is the number of lines skipped */ /* skipcom is called after reading a / */ if( getc(finput) != '*' ) error( "illegal comment" ); c = getc(finput); while( c != EOF ){ while( c == '*' ){ if( (c=getc(finput)) == '/' ) return( i ); } if( c == '\n' ) ++i; c = getc(finput); } error( "EOF inside comment" ); /* NOTREACHED */ } cpyact(offset){ /* copy C action to the next ; or closing } */ int brac, c, match, j, s, tok; fprintf( faction, "\n# line %d \"%s\"\n", lineno, infile ); brac = 0; loop: c = getc(finput); swt: switch( c ){ case ';': if( brac == 0 ){ putc( c , faction ); return; } goto lcopy; case '{': brac++; goto lcopy; case '$': s = 1; tok = -1; c = getc(finput); if( c == '<' ){ /* type description */ ungetc( c, finput ); i((f( gettok() != TYPENAME ) error( "bad syntax on $ clause" ); tok = numbval; c = getc(finput); } if( c == '$' ){ fprintf( faction, "yyval"); if( ntypes ){ /* put out the proper tag... */ if( tok < 0 ) tok = fdtype( *prdptr[nprod] ); fprintf( faction, ".%s", typeset[tok] ); } goto loop; } if( c == '-' ){ s = -s; c = getc(finput); } if( isdigit(c) ){ j=0; while( isdigit(c) ){ j= j*10+c-'0'; c = getc(finput); } j = j*s - offset; if( j > 0 ){ error( "Illegal use of $%d", j+offset ); } fprintf( faction, "yypvt[-%d]", -j ); if( ntypes ){ /* put out the proper tag */ if( j+offset <= 0 && tok < 0 ) error( "must specify type of $%d", j+offset ); if( tok < 0 ) tok = fdtype( prdptr[nprod][j+offset] ); fprintf( faction, ".%s", typeset[tok] ); } goto swt; } putc( '$' , faction ); if( s<0 ) putc('-', faction ); goto swt; case '}': if( --brac ) goto lcopy; putc( c, faction ); return; case '/': /* look for comments */ putc( c , faction ); c = getc(finput); if( c != '*' ) goto swt; /* it really is a comment */ putc( c , faction ); c = getc(finput); while( c != EOF ){ while( c=='*' ){ putc( c , faction ); if( (c=getc(finput)) == '/' ) goto lcopy; } putc( c , faction ); if( c == '\n' )++lineno; c = getc(finput); } error( "EOF inside comment" ); case '\'': /* character constant */ match = '\''; goto string; case '"': /* character string */ match = '"'; string: putc( c , faction ); while( c=getc(finput) ){ if( c=='\\' ){ putc( c , faction ); c=getc(finput); if( c == '\n' ) ++lineno; } else if( c==match ) goto lcopy; else if( c=='\n' ) error( "newline in string or char. const." ); putc( c , faction ); } error( "EOF in string or character constant" ); case EOF: error("action does not terminate" ); case '\n': ++lineno; goto lcopy; } lcopy: putc( c , faction ); goto loop; } ' k#|@ ~\i\i # include "dextern" /* variables used locally */ /* lookahead computations */ int tbitset; /* size of lookahead sets */ struct looksets lkst [ LSETSIZE ]; int nlset = 0; /* next lookahead set index */ int nolook = 0; /* flag to suppress lookahead computations */ struct looksets clset; /* temporary storage for lookahead computations */ /* working set computations */ struct wset wsets[ WSETSIZE ]; struct wset *cwp; /* state information */ int nstate = 0; /* number of states */ struct item *pstate[NSTATES+2]; /* pointers to the descriptions of the states */ int tystate[NSTATES]; /* contains type information about the states */ int indgo[NSTATES]; /* index to the stored goto table */ int tstates[ NTERMS ]; /* states generated by terminal gotos */ int ntstates[ NNONTERM ]; /* states generated by nonterminal gotos */ int mstates[ NSTATES ]; /* chain of overflows of term/nonterm generation lists */ /* storage for the actions in the parser */ int amem[ACTSIZE]; /* action table storage */ int *memp = amem; /* next free action table position */ /* other storage areas */ int temp1[TEMPSIZE]; /* temporary storage, indexed by terms + ntokens or states */ int lineno= 1; /* current input line number */ int fatfl = 1; /* if on, error is fatal */ int nerrors = 0; /* number of errors */ /* storage for information about the nonterminals */ int **pres[NNONTERM+2]; /* vector of pointers to productions yielding each nonterminal */ struct looksets *pfirst[NNONTERM+2]; /* vector of pointers to first sets for each nonterminal */ int pempty[NNONTERM+1]; /* vector of nonterminals nontrivially deriving e */ main(argc,argv) int argc; char *argv[]; { setup(argc,argv); /* initialize and read productions */ tbitset = NWORDS(ntokens); cpres(); /* make table of which productions yield a given nonterminal */ cempty(); /* make a table of which nonterminals can match the empty string */ cpfir(); /* make a table of firsts of nonterminals */ stagen(); /* generate the states */ output(); /* write the states and the tables */ go2out(); hideprod(); summary(); callopt(); others(); exit(0); } others(){ /* put out other arrays, copy the parsers */ register c, i, j; finput = fopen( PARSER, "r" ); if( finput == NULL ) error( "cannot find parser %s", PARSER ); warray( "yyr1", levprd, nprod ); aryfil( temp1, nprod, 0 ); PLOOP(1,i)temp1[i] = prdptr[i+1]-prdptr[i]-2; warray( "yyr2", temp1, nprod ); aryfil( temp1, nstate, -1000 ); TLOOP(i){ for( j=tstates[i]; j!=0; j=mstates[j] ){ temp1[j] = tokset[i].value; } } NTLOOP(i){ for( j=ntstates[i]; j!=0; j=mstates[j] ){ temp1[j] = -i; } } warray( "yychk", temp1, nstate ); warray( "yydef", defact, nstate ); /* copy parser text */ while( (c=getc(finput) ) != EOF ){ if( c == '$' ){ if( (c=getc(finput)) != 'A' ) putc( '$', ftable ); else { /* copy actions */ faction = fopen( ACTNAME, "r" ); if( faction == NULL ) error( "cannot reopen action tempfile" ); while( (c=getc(faction) ) != EOF ) putc( c, ftable ); fclose(faction); ZAPFILE(ACTNAME); c = getc(finput); } } putc( c, ftable ); } fclose( ftable ); } char *chcopy( p, q ) char *p, *q; { /* copies string q into p, returning next free char ptr */ while( *p = *q++ ) ++p; return( p ); } # define ISIZE 400 char *writem(pp) int *pp; { /* creates output string for item pointed to by pp */ int i,*p; static char sarr[ISIZE]; char *q; for( p=pp; *p>0 ; ++p ) ; p = prdptr[-*p]; q = chcopy( sarr, nontrst[*p-NTBASE].name ); q = chcopy( q, " : " ); for(;;){ *q++ = ++p==pp ? '_' : ' '; *q = '\0'; if((i = *p) <= 0) break; q = chcopy( q, symnam(i) ); if( q> &sarr[ISIZE-30] ) error( "item too big" ); } if( (i = *pp) < 0 ){ /* an item calling for a reduction */ q = chcopy( q, " (" ); sprintf( q, "%d)", -i ); } return( sarr ); } char *symnam(i){ /* return a pointer to the name of symbol i */ char *cp; cp = (i>=NTBASE) ? nontrst[i-NTBASE].name : tokset[i].name ; if( *cp == ' ' ) ++cp; return( cp ); } struct wset *zzcwp = wsets; int zzgoent = 0; int zzgobest = 0; int zzacent = 0; int zzexcp = 0; int zzclose = 0; int zzsrconf = 0; int * zzmemsz = mem0; int zzrrconf = 0; summary(){ /* output the summary on the tty */ if( foutput!=NULL ){ fprintf( foutput, "\n%d/%d terminals, %d/%d nonterminals\n", ntokens, NTERMS, nnonter, NNONTERM ); fprintf( foutput, "%d/%d grammar rules, %d/%d states\n", nprod, NPROD, nstate, NSTATES ); fprintf( foutput, "%d shift/reduce, %d reduce/reduce conflicts reported\n", zzsrconf, zzrrconf ); fprintf( foutput, "%d/%d working sets used\n", zzcwp-wsets, WSETSIZE ); fprintf( foutput, "memory: states,etc. %d/%d, parser %d/%d\n", zzmemsz-mem0, MEMSIZE, memp-amem, ACTSIZE ); fprintf( foutput, "%d/%d distinct lookahead sets\n", nlset, LSETSIZE ); fprintf( foutput, "%d extra closures\n", zzclose - 2*nstate ); fprintf( foutput, "%d shift entries, %d exceptions\n", zzacent, zzexcp ); fprintf( foutput, "%d goto entries\n", zzgoent ); fprintf( foutput, "%d entries saved by ' k}@ ~\i\igoto default\n", zzgobest ); } if( zzsrconf!=0 || zzrrconf!=0 ){ fprintf( stdout,"\nconflicts: "); if( zzsrconf )fprintf( stdout, "%d shift/reduce" , zzsrconf ); if( zzsrconf && zzrrconf )fprintf( stdout, ", " ); if( zzrrconf )fprintf( stdout, "%d reduce/reduce" , zzrrconf ); fprintf( stdout, "\n" ); } fclose( ftemp ); if( fdefine != NULL ) fclose( fdefine ); } /* VARARGS1 */ error(s,a1) char *s; { /* write out error comment */ ++nerrors; fprintf( stderr, "\n fatal error: "); fprintf( stderr, s,a1); fprintf( stderr, ", line %d\n", lineno ); if( !fatfl ) return; summary(); exit(1); } aryfil( v, n, c ) int *v,n,c; { /* set elements 0 through n-1 to c */ int i; for( i=0; ilset; if( pp == 0 ) fprintf( foutput, "\tNULL"); else { fprintf( foutput, " { " ); TLOOP(j) { if( BIT(pp,j) ) fprintf( foutput, "%s ", symnam(j) ); } fprintf( foutput, "}" ); } } cpres(){ /* compute an array with the beginnings of productions yielding given nonterminals The array pres points to these lists */ /* the array pyield has the lists: the total size is only NPROD+1 */ register **pmem; register c, j, i; static int * pyield[NPROD]; pmem = pyield; NTLOOP(i){ c = i+NTBASE; pres[i] = pmem; fatfl = 0; /* make undefined symbols nonfatal */ PLOOP(0,j){ if (*prdptr[j] == c) *pmem++ = prdptr[j]+1; } if(pres[i] == pmem){ error("nonterminal %s not defined!", nontrst[i].name); } } pres[i] = pmem; fatfl = 1; if( nerrors ){ summary(); exit(1); } if( pmem != &pyield[nprod] ) error( "internal Yacc error: pyield %d", pmem-&pyield[nprod] ); } int indebug = 0; cpfir() { /* compute an array with the first of nonterminals *((/ register *p, **s, i, **t, ch, changes; zzcwp = &wsets[nnonter]; NTLOOP(i){ aryfil( wsets[i].ws.lset, tbitset, 0 ); t = pres[i+1]; for( s=pres[i]; s 0 ; ++p ) { if( ch < NTBASE ) { SETBIT( wsets[i].ws.lset, ch ); break; } else if( !pempty[ch-NTBASE] ) break; } } } /* now, reflect transitivity */ changes = 1; while( changes ){ changes = 0; NTLOOP(i){ t = pres[i+1]; for( s=pres[i]; s= 0; ++p ) { changes |= setunion( wsets[i].ws.lset, wsets[ch].ws.lset ); if( !pempty[ch] ) break; } } } } NTLOOP(i) pfirst[i] = flset( &wsets[i].ws ); if( !indebug ) return; if( (foutput!=NULL) ){ NTLOOP(i) { fprintf( foutput, "\n%s: ", nontrst[i].name ); prlook( pfirst[i] ); fprintf( foutput, " %d\n", pempty[i] ); } } } state(c){ /* sorts last state,and sees if it equals earlier ones. returns state number */ int size1,size2; register i; struct item *p1, *p2, *k, *l, *q1, *q2; p1 = pstate[nstate]; p2 = pstate[nstate+1]; if(p1==p2) return(0); /* null state */ /* sort the items */ for(k=p2-1;k>p1;k--) { /* make k the biggest */ for(l=k-1;l>=p1;--l)if( l->pitem > k->pitem ){ int *s; struct looksets *ss; s = k->pitem; k->pitem = l->pitem; l->pitem = s; ss = k->look; k->look = l->look; l->look = ss; } } size1 = p2 - p1; /* size of state */ for( i= (c>=NTBASE)?ntstates[c-NTBASE]:tstates[c]; i != 0; i = mstates[i] ) { /* get ith state */ q1 = pstate[i]; q2 = pstate[i+1]; size2 = q2 - q1; if (size1 != size2) continue; k=p1; for(l=q1;lpitem != k->pitem ) break; ++k; } if (l != q2) continue; /* found it */ pstate[nstate+1] = pstate[nstate]; /* delete last state */ /* fix up lookaheads */ if( nolook ) return(i); for( l=q1,k=p1; llook->lset[s]; if( setunion( clset.lset, k->look->lset ) ) { tystate[i] = MUSTDO; /* register the new set */ l->look = flset( &clset ); } } return (i); } /* state is new */ if( nolook ) error( "yacc state/nolook error" ); pstate[nstate+2] = p2; if(nstate+1 >= NSTATES) error("too many states" ); if( c >= NTBASE ){ mstates[ nstate ] = ntstates[ c-NTBASE ]; ntstates[ c-NTBASE ] = nstate; } else { mstates[ nstate ] = tstates[ c ]; tstates[ c ] = nstate; } tystate[nstate]=MUSTDO; return(nstate++); } int pidebug = 0; /* debugging flag for putitem */ putitem( ptr, lptr ) int *ptr; struct looksets *lptr; { register struct item *j; if( pidebug && (foutput!=NULL) ) { fprintf( foutput, "putitem(%s), state %d\n", writem(ptr), nstate ); } j = pstate[nstate+1]; j->pitem = ptr; if( !nolook ) j->look = flset( lptr ); pstate[nstate+1] = ++j; if( (int *)j > zzmemsz ){ zzmemsz = (int *)j; if( zzmemsz >= &mem0[MEMSIZE] ) error( "out of state space" ); } } cempty(){ /* mark nonterminals which derive the empty string */ /* also, look for nonterminals which don't derive any token strings */ # define EMPTY 1 # define WHOKNOWS 0 # define OK 1 register i, *p; /* first, use the array pempty to detect productions that can never be reduced */ /* set pempty to WHONOWS */ aryfil( pempty, nnonter+1, WHOKNOWS ); /* now, look at productions, marking nonterminals which derive something */ more: PLOOP(0,i){ if( pempty[ *prdptr[i] - NTBASE ] ) continue; for( p=prdptr[i]+1; *p>=0; ++p ){ if( *p>=NTBASE && pempty[ *p-NTBASE ] == WHOKNOWS ) break; } if( *p < 0 ){ /* production can be derived */ pempty[ *prdptr[i]-NTBASE ] = OK; goto more; } } /* now, look at the nonterminals, to see if they are all OK */ NTLOOP(i){ /* the added production rises or falls as the start symbol ... */ if( i == 0 ) continue; if( pempty[ i ] != OK ) { fatfl = 0; error( "nonterminal %s never derives any token string", nontrst[i].name ); } } if( nerrors ){ summary(); exit(1); } /* now, compute the pempty array, to see which nonterminals derive the empty string */ /* set pempty to WHOKNOWS */ aryfil( pempty, nnonter+1, WHOKNOWS ); /* loop as long as we keep finding empty nonterminals */ again: PLOOP(1,i){ if( pempty[ *prdptr[i]-NTBASE ]==WHOKNOWS ){ /* not known to be empty */ for( p=prdptr[i]+1; *p>=NTBASE && pempty[*p-NTBASE]==EMPTY ; ++p ) ; if( *p < 0 ){ /* we have a nontrivially empty nonterminal */ pempty[*prdptr[i]-NTBASE] = EMPTY; goto again; /* got one ... try for another */ } } } } int gsdebug = 0; stagen(){ /* generate the states */ int i, j; register c; register struct wset *p, *q; /* initialize */ nstate = 0; /* THIS IS FUNNY from the standpoint of portability */ /* it represents the magic moment when the mem0 array, which has /* been holding the productions, starts to hold item pointers, of a /* different type... */ /* someday, alloc should be used to allocate all this stuff... for now, we /* accept that if pointers don't fit in integers, there is a problem... */ pstate[0] = pstate[1] = (struct item *)mem; aryfil( clset.lset, tbitset, 0 ); putitem( prdptr[0]+1, &clset ); tystate[0] = MUSTDO; nstate = 1; pstate[2] = pstate[1]; aryfil( amem, ACTSIZE, 0 ); /* now, the main state generation loop */ more: SLOOP(i){ if( tystate[i] != MUSTDO ) continue; tystate[i] = DONE; aryfil( temp1, nnonter+1, 0 ); /* take state i, close it, and do gotos */ closure(i); WSLOOP(wsets,p){ /* generate goto's */ if( p->flag ) continue; p->flag = 1; c = *(p->pitem); if( c <= 1 ) { if( pstate[i+1]-pstate[i] <= p-wsets ) tystate[i] = MUSTLOOKAHEAD; continue; } /* do a goto on c */ WSLOOP(p,q){ if( c == *(q->pitem) ){ /* this item contributes to the goto */ putitem( q->pitem + 1, &q->ws ); q->flag = 1; } } if( c < NTBASE ) { state(c); /* register new state */ } else { temp1[c-NTBASE] = state(c); } } if( gsdebug && (foutput!=NULL) ){ fprintf( foutput, "%d: ", i ); NTLOOP(j) { if( temp1[j] ) fprintf( foutput, "%s %d, ", nontrst[j].name, temp1[j] ); } fprintf( foutput, "\n"); } indgo[i] = apack( &temp1[1], nnonter-1 ) - 1; goto more; /* we have done one goto; do some more */ } /* no more to do... stop */ } int cldebug = 0; /* debugging flag for closure */ closure(i){ /* generate the closure of state i */ int c, ch, work, k; register struct wset *u, *v; int *pi; int **s, **t; struct item *q; register struct item *p; ++zzclose; /* first, copy kernel of state i to wsets */ cwp = wsets; ITMLOOP(i,p,q){ cwp->pitem = p->pitem; cwp->flag = 1; /* this item must get closed */ SETLOOP(k) cwp->ws.lset[k] = p->look->lset[k]; WSBUMP(cwp); } /* now, go through the loop, closing each item */ work = 1; while( work ){ work = 0; WSLOOP(wsets,u){ if( u->flag == 0 ) continue; c = *(u->pitem); /* dot is before c */ if( c < NTBASE ){ u->flag = 0; continue; /* only interesting case is where . is before nonterminal */ } /* compute the lookahead */ aryfil( clset.lset, tbitset, 0 ); /* find items involving c */ WSLOOP(u,v){ if( v->flag == 1 && *(pi=v->pitem) == c ){ v->flag = 0; if( nolook ) continue; while( (ch= *++pi)>0 ){ if( ch < NTBASE ){ /* terminal symbol */ SETBIT( clset.lset, ch ); break; } /* nonterminal symbol */ setunion( clset.lset, pfirst[ch-NTBASE]->lset ); if( !pempty[ch-NTBASE] ) break; } if( ch<=0 ) setunion( clset.lset, v->ws.lset ); } } /* now loop over productions derived from c */ c -= NTBASE; /* c is now nonterminal number */ t = pres[c+1]; for( s=pres[c]; spitem == *s ){ /* yes, it is there */ if( nolook ) goto nexts; if( setunion( v->ws.lset, clset.lset ) ) v->flag = work = 1; goto nexts; } } /* not there; make a new entry */ if( cwp-wsets+1 >= WSETSIZE ) error( "working set overflow" ); cwp->pitem = *s; cwp->flag = 1; if( !nolook ){ work = 1; SETLOOP(k) cwp->ws.lset[k] = clset.lset[k]; } WSBUMP(cwp); nexts: ; } } } /* have computed closure; flags are reset; return */ if( cwp > zzcwp ) zzcwp = cwp; if( cldebug && (foutput!=NULL) ){ fprintf( foutput, "\nState %d, nolook = %d\n", i, nolook ); WSLOOP(wsets,u){ if( u->flag ) fprintf( foutput, "flag set!\n"); u->flag = 0; fprintf( foutput, "\t%s", writem(u->pitem)); prlook( &u->ws ); fprintf( foutput, "\n" ); } } } struct looksets *flset( p ) struct looksets *p; { /* decide if the lookahead set pointed to by p is known */ /* return pointer to a perminent location for the set */ register struct looksets *q; int j, *w; register *u, *v; for( q = &lkst[nlset]; q-- > lkst; ){ u = p->lset; v = q->lset; w = & v[tbitset]; while( v= LSETSIZE )error("too many lookahead sets" ); SETLOOP(j){ q->lset[j] = p->lset[j]; } return( q ); } 'k2F 0Yi ((# include "ldefs.c" # include "once.c" /* lex [-[drcyvntf]] [file] ... [file] */ /* Copyright 1976, Bell Telephone Laboratories, Inc., written by Eric Schmidt, August 27, 1976 */ main(argc,argv) int argc; char **argv; { register int i; # ifdef DEBUG signal(10,buserr); signal(11,segviol); # endif while (argc > 1 && argv[1][0] == '-' ){ i = 0; while(argv[1][++i]){ switch (argv[1][i]){ # ifdef DEBUG case 'd': debug++; break; case 'y': yydebug = TRUE; break; # endif case 'r': case 'R': ratfor=TRUE; break; case 'c': case 'C': ratfor=FALSE; break; case 't': case 'T': fout = stdout; errorf = stderr; break; case 'v': case 'V': report = 1; break; case 'f': case 'F': optim = FALSE; break; case 'n': case 'N': report = 0; break; default: warning("Unknown option %c",argv[1][i]); } } argc--; argv++; } sargc = argc; sargv = argv; if (argc > 1){ fin = fopen(argv[++fptr], "r"); /* open argv[1] */ sargc--; sargv++; } else fin = stdin; if(fin == NULL) error ("Can't read input file %s",argc>1?argv[1]:"standard input"); gch(); /* may be gotten: def, subs, sname, schar, ccl, dchar */ get1core(); /* may be gotten: name, left, right, nullstr, parent */ scopy("INITIAL",sp); sname[0] = sp; sp =+ slength("INITIAL") + 1; sname[1] = 0; if(yyparse(0)) exit(1); /* error return code */ /* may be disposed of: def, subs, dchar */ free1core(); /* may be gotten: tmpstat, foll, positions, gotof, nexts, nchar, state, atable, sfall, cpackflg */ get2core(); ptail(); mkmatch(); # ifdef DEBUG if(debug) pccl(); # endif sect = ENDSECTION; if(tptr>0)cfoll(tptr-1); # ifdef DEBUG if(debug)pfoll(); # endif cgoto(); # ifdef DEBUG if(debug){ printf("Print %d states:\n",stnum+1); for(i=0;i<=stnum;i++)stprt(i); } # endif /* may be disposed of: positions, tmpstat, foll, state, name, left, right, parent, ccl, schar, sname */ /* may be gotten: verify, advance, stoff */ free2core(); get3core(); layout(); /* may be disposed of: verify, advance, stoff, nexts, nchar, gotof, atable, ccpackflg, sfall */ # ifdef DEBUG free3core(); # endif if (ZCH>NCH) cname="/usr/lib/lex/ebcform"; fother = fopen(ratfor?ratname:cname,"r"); if(fother == NULL) error("Lex driver missing, file %s",ratfor?ratname:cname); while ( (i=getc(fother)) != EOF) putc(i,fout); fclose(fother); fclose(fout); if( # ifdef DEBUG debug || # endif report == 1)statistics(); fclose(stdout); fclose(stderr); exit(0); /* success return code */ } get1core(){ register int i, val; register char *p; ccptr = ccl = myalloc(CCLSIZE,sizeof(*ccl)); pcptr = pchar = myalloc(pchlen, sizeof(*pchar)); def = myalloc(DEFSIZE,sizeof(*def)); subs = myalloc(DEFSIZE,sizeof(*subs)); dp = dchar = myalloc(DEFCHAR,sizeof(*dchar)); sname = myalloc(STARTSIZE,sizeof(*sname)); sp = schar = myalloc(STARTCHAR,sizeof(*schar)); if(ccl == 0 || def == 0 || subs == 0 || dchar == 0 || sname == 0 || schar == 0) error("Too little core to begin"); } free1core(){ cfree(def,DEFSIZE,sizeof(*def)); cfree(subs,DEFSIZE,sizeof(*subs)); cfree(dchar,DEFCHAR,sizeof(*dchar)); } get2core(){ register int i, val; register char *p; gotof = myalloc(nstates,sizeof(*gotof)); nexts = myalloc(ntrans,sizeof(*nexts)); nchar = myalloc(ntrans,sizeof(*nchar)); state = myalloc(nstates,sizeof(*state)); atable = myalloc(nstates,sizeof(*atable)); sfall = myalloc(nstates,sizeof(*sfall)); cpackflg = myalloc(nstates,sizeof(*cpackflg)); tmpstat = myalloc(tptr+1,sizeof(*tmpstat)); foll = myalloc(tptr+1,sizeof(*foll)); nxtpos = positions = myalloc(maxpos,sizeof(*positions)); if(tmpstat == 0 || foll == 0 || positions == 0 || gotof == 0 || nexts == 0 || nchar == 0 || state == 0 || atable == 0 || sfall == 0 || cpackflg == 0 ) error("Too little core for state generation"); for(i=0;i<=tptr;i++)foll[i] = 0; } free2core(){ cfree(positions,maxpos,sizeof(*positions)); cfree(tmpstat,tptr+1,sizeof(*tmpstat)); cfree(foll,tptr+1,sizeof(*foll)); cfree(name,treesize,sizeof(*name)); cfree(left,treesize,sizeof(*left)); cfree(right,treesize,sizeof(*right)); cfree(parent,treesize,sizeof(*parent)); cfree(nullstr,treesize,sizeof(*nullstr)); cfree(state,nstates,sizeof(*state)); cfree(sname,STARTSIZE,sizeof(*sname)); cfree(schar,STARTCHAR,sizeof(*schar)); cfree(ccl,CCLSIZE,sizeof(*ccl)); } get3core(){ register int i, val; register char *p; verify = myalloc(outsize,sizeof(*verify)); advance = myalloc(outsize,sizeof(*advance)); stoff = myalloc(stnum+2,sizeof(*stoff)); if(verify == 0 || advance == 0 || stoff == 0) error("Too little core for final packing"); } # ifdef DEBUG free3core(){ cfree(advance,outsize,sizeof(*advance)); cfree(verify,outsize,sizeof(*verify)); cfree(stoff,stnum+1,sizeof(*stoff)); cfree(gotof,nstates,sizeof(*gotof)); cfree(nexts,ntrans,sizeof(*nexts)); cfree(nchar,ntrans,sizeof(*nchar)); cfree(atable,nstates,sizeof(*atable)); cfree(sfall,nstates,sizeof(*sfall)); cfree(cpackflg,nstates,sizeof(*cpackflg)); } # endif char *myalloc(a'"kF 0Yi,b) int a,b; { register int i; i = calloc(a, b); if(i==0) warning("OOPS - calloc returns a 0"); else if(i == -1){ # ifdef DEBUG warning("calloc returns a -1"); # endif return(0); } return(i); } # ifdef DEBUG buserr(){ fflush(errorf); fflush(fout); fflush(stdout); fprintf(errorf,"Bus error\n"); if(report == 1)statistics(); fflush(errorf); } segviol(){ fflush(errorf); fflush(fout); fflush(stdout); fprintf(errorf,"Segmentation violation\n"); if(report == 1)statistics(); fflush(errorf); } # endif yyerror(s) char *s; { fprintf(stderr, "%s\n", s); } '%k vW<MPSVY\_behkNXi %token CHAR CCL NCCL STR DELIM SCON ITER NEWE NULLS %left SCON '/' NEWE %left '|' %left '$' '^' %left CHAR CCL NCCL '(' '.' STR NULLS %left ITER %left CAT %left '*' '+' '?' %{ # include "ldefs.c" %} %% %{ int i; int j,k; int g; char *p; %} acc : lexinput ={ # ifdef DEBUG if(debug) sect2dump(); # endif } ; lexinput: defns delim prods end | defns delim end ={ if(!funcflag)phead2(); funcflag = TRUE; } | error ={ # ifdef DEBUG if(debug) { sect1dump(); sect2dump(); } # endif } ; end: delim | ; defns: defns STR STR ={ scopy($2,dp); def[dptr] = dp; dp =+ slength($2) + 1; scopy($3,dp); subs[dptr++] = dp; if(dptr >= DEFSIZE) error("Too many definitions"); dp =+ slength($3) + 1; if(dp >= dchar+DEFCHAR) error("Definitions too long"); subs[dptr]=def[dptr]=0; /* for lookup - require ending null */ } | ; delim: DELIM ={ # ifdef DEBUG if(sect == DEFSECTION && debug) sect1dump(); # endif sect++; } ; prods: prods pr ={ $$ = mn2(RNEWE,$1,$2); } | pr ={ $$ = $1;} ; pr: r NEWE ={ if(divflg == TRUE) i = mn1(S1FINAL,casecount); else i = mn1(FINAL,casecount); $$ = mn2(RCAT,$1,i); divflg = FALSE; casecount++; } | error NEWE ={ # ifdef DEBUG if(debug) sect2dump(); # endif } r: CHAR ={ $$ = mn0($1); } | STR ={ p = $1; i = mn0(*p++); while(*p) i = mn2(RSTR,i,*p++); $$ = i; } | '.' ={ symbol['\n'] = 0; if(psave == FALSE){ p = ccptr; psave = ccptr; for(i=1;i<'\n';i++){ symbol[i] = 1; *ccptr++ = i; } for(i='\n'+1;i ccl+CCLSIZE) error("Too many large character classes"); } else p = psave; $$ = mn1(RCCL,p); cclinter(1); } | CCL ={ $$ = mn1(RCCL,$1); } | NCCL ={ $$ = mn1(RNCCL,$1); } | r '*' ={ $$ = mn1(STAR,$1); } | r '+' ={ $$ = mn1(PLUS,$1); } | r '?' ={ $$ = mn1(QUEST,$1); } | r '|' r ={ $$ = mn2(BAR,$1,$3); } | r r %prec CAT ={ $$ = mn2(RCAT,$1,$2); } | r '/' r ={ if(!divflg){ j = mn1(S2FINAL,-casecount); i = mn2(RCAT,$1,j); $$ = mn2(DIV,i,$3); } else { $$ = mn2(RCAT,$1,$3); warning("Extra slash removed"); } divflg = TRUE; } | r ITER ',' ITER '}' ={ if($2 > $4){ i = $2; $2 = $4; $4 = i; } if($4 <= 0) warning("Iteration range must be positive"); else { j = $1; for(k = 2; k<=$2;k++) j = mn2(RCAT,j,dupl($1)); for(i = $2+1; i<=$4; i++){ g = dupl($1); for(k=2;k<=i;k++) g = mn2(RCAT,g,dupl($1)); j = mn2(BAR,j,g); } $$ = j; } } | r ITER '}' ={ if($2 < 0)warning("Can't have negative iteration"); else if($2 == 0) $$ = mn0(RNULLS); else { j = $1; for(k=2;k<=$2;k++) j = mn2(RCAT,j,dupl($1)); $$ = j; } } | r ITER ',' '}' ={ /* from n to infinity */ if($2 < 0)warning("Can't have negative iteration"); else if($2 == 0) $$ = mn1(STAR,$1); else if($2 == 1)$$ = mn1(PLUS,$1); else { /* >= 2 iterations minimum */ j = $1; for(k=2;k<$2;k++) j = mn2(RCAT,j,dupl($1)); k = mn1(P((LUS,dupl($1)); $$ = mn2(RCAT,j,k); } } | SCON r ={ $$ = mn2(RSCON,$2,$1); } | '^' r ={ $$ = mn1(CARAT,$2); } | r '$' ={ i = mn0('\n'); if(!divflg){ j = mn1(S2FINAL,-casecount); k = mn2(RCAT,$1,j); $$ = mn2(DIV,k,i); } else $$ = mn2(RCAT,$1,i); divflg = TRUE; } | '(' r ')' ={ $$ = $2; } | NULLS ={ $$ = mn0(RNULLS); } ; %% yylex(){ register char *p; register int c, i; char *t, *xp; int n, j, k, x; static int sectbegin; static char token[TOKENSIZE]; static int iter; # ifdef DEBUG yylval = 0; # endif if(sect == DEFSECTION) { /* definitions section */ while(!eof) { if(prev == '\n'){ /* next char is at beginning of line */ getl(p=buf); switch(*p){ case '%': switch(c= *(p+1)){ case '%': lgate(); if(!ratfor)fprintf(fout,"# "); fprintf(fout,"define YYNEWLINE %d\n",ctable['\n']); if(!ratfor)fprintf(fout,"yylex(){\nint nstr; extern int yyprevious;\n"); sectbegin = TRUE; i = treesize*(sizeof(*name)+sizeof(*left)+ sizeof(*right)+sizeof(*nullstr)+sizeof(*parent))+ALITTLEEXTRA; c = myalloc(i,1); if(c == 0) error("Too little core for parse tree"); p = c; cfree(p,i,1); name = myalloc(treesize,sizeof(*name)); left = myalloc(treesize,sizeof(*left)); right = myalloc(treesize,sizeof(*right)); nullstr = myalloc(treesize,sizeof(*nullstr)); parent = myalloc(treesize,sizeof(*parent)); if(name == 0 || left == 0 || right == 0 || parent == 0 || nullstr == 0) error("Too little core for parse tree"); return(freturn(DELIM)); case 'p': case 'P': /* has overridden number of positions */ while(*p && !digit(*p))p++; maxpos = siconv(p); # ifdef DEBUG if (debug) printf("positions (%%p) now %d\n",maxpos); # endif if(report == 2)report = 1; continue; case 'n': case 'N': /* has overridden number of states */ while(*p && !digit(*p))p++; nstates = siconv(p); # ifdef DEBUG if(debug)printf( " no. sta'0kpW<MPSVY\_behkNXites (%%n) now %d\n",nstates); # endif if(report == 2)report = 1; continue; case 'e': case 'E': /* has overridden number of tree nodes */ while(*p && !digit(*p))p++; treesize = siconv(p); # ifdef DEBUG if (debug) printf("treesize (%%e) now %d\n",treesize); # endif if(report == 2)report = 1; continue; case 'o': case 'O': while (*p && !digit(*p))p++; outsize = siconv(p); if (report ==2) report=1; continue; case 'a': case 'A': /* has overridden number of transitions */ while(*p && !digit(*p))p++; if(report == 2)report = 1; ntrans = siconv(p); # ifdef DEBUG if (debug)printf("N. trans (%%a) now %d\n",ntrans); # endif continue; case 'k': case 'K': /* overriden packed char classes */ while (*p && !digit(*p))p++; if (report==2) report=1; cfree(pchar, pchlen, sizeof(*pchar)); pchlen = siconv(p); # ifdef DEBUG if (debug) printf( "Size classes (%%k) now %d\n",pchlen); # endif pchar=pcptr=myalloc(pchlen, sizeof(*pchar)); continue; case 't': case 'T': /* character set specifier */ ZCH = atoi(p+2); if (ZCH < NCH) ZCH = NCH; if (ZCH > 2*NCH) error("ch table needs redeclaration"); chset = TRUE; for(i = 0; i ZCH){ warning("Character value %d out of range",n); continue; } while(!space(*p) && *p) p++; while(space(*p)) p++; t = p; while(*t){ c = ctrans(&t); if(ctable[c]){ if (printable(c)) warning("Character '%c' used twice",c); else warning("Character %o used twice",c); } else ctable[c] = n; t++; } p = buf; } { char chused[2*NCH]; int kr; for(i=0; i= 0) p++; t = p; while(*p && index(*p," \t,") < 0)p++; if(!*p) n = FALSE; *p++ = 0; if (*t == 0) continue; i = sptr*2; if(!ratfor)fprintf(fout,"# "); fprintf(fout,"define %s %d\n",t,i); scopy(t,sp); sname[sptr++] = sp; sname[sptr] = 0; /* required by lookup */ if(sptr >= STARTSIZE) error("Too many start conditions"); sp =+ slength(sp) + 1; if(sp >= schar+STARTCHAR) error("Start conditions too long"); } continue; default: warning("Invalid request %s",p); continue; } /* end of switch after seeing '%' */ case ' ': case '\t': /* must be code */ lgate(); fprintf(fout, "%s\n",p); continue; default: /* definition */ while(*p && !space(*p)) p++; if(*p == 0) continue; prev = *p; *p = 0; bptr = p+1; yylval = buf; if(digit(buf[0])) warning("Substitution strings may not begin with digits"); return(freturn(STR)); } } /* still sect 1, but prev != '\n' */ else { p = bptr; while(*p && space(*p)) p++; if(*p == 0) warning("No translation given - null string assumed"); scopy(p,token); yylval = token; prev = '\n'; return(freturn(STR)); } } /* end of section one processing */ } else if(sect == RULESECTION){ /* rules and actions */ while(!eof){ switch(c=gch()){ case '\0': return(freturn(0)); case '\n': if(prev == '\n') continue; x = NEWE; break; case ' ': case '\t': if(sectbegin == TRUE){ cpyact(); while((c=gch()) && c != '\n'); continue; } if(!funcflag)phead2(); funcflag = TRUE; if(ratfor)fprintf(fout,"%d\n",30000+casecount); else fprintf(fout,"case %d:\n",casecount); if(cpyact()){ if(ratfor)fprintf(fout,"goto 30997\n"); else fprintf(fout,"break;\n"); } while((c=gch()) && c != '\n'); if(peek == ' ' || peek == '\t' || sectbegin == TRUE){ warning("Executable statements should occur right after %%"); continue; } x = NEWE; break; case '%': if(prev != '\n') goto character; if(peek == '{'){ /* included code */ getl(buf); while(!eof && getl(buf) && scomp("%}",buf) != 0) fprintf(fout,"%s\n",buf); continue; } if(peek == '%'){ c = gch(); c = gch(); x = DELIM; break; } goto character; case '|': if(peek == ' ' || peek == '\t' || peek == '\n'){ if(ratfor)fprintf(fout,"%d\n",30000+casecount++); else fprintf(fout,"case %d:\n",casecount++); continue; } x = '|'; break; case '$': if(peek == '\n' || peek == ' ' || peek == '\t' || peek == '|' || peek == '/'){ x = c; break; } goto character; case '^': if(prev != '\n' && scon != TRUE) goto character; /* valid only at line begin */ x = c; break; case '?': case '+': case '.': case '*': case '(': case ')': case ',': case '/': x = c; break; case '}': iter = FALSE; x = c; break; case '{': /* either iteration or definition */ if(digit(c=gch())){ /* iteration */ iter = TRUE; ieval: i = 0; while(digit(c)){ token[i++] = c; c = gch(); } token[i] = 0; yylval = siconv(token); munput('c',c); x = ITER; break; } else { /* definition */ i = 0; while(c && c!='}'){ token[i++] = c; c = gch(); } token[i] = 0; i = lookup(token,def); if(i < 0) warning("Definition %s not found",token); else munput('s',subs[i]); continue; } case '<': /* start condition ? */ if(prev != '\n') /* not at line begin, not start */ goto character; t = slptr; do { i = 0; c = gch(); while(c != ',' && c && c != '>'){ token[i++] = c; c = gch(); } token[i] = 0; if(i == 0) goto character; i = lookup(token,sname); if(i < 0) { warning("Undefined start condition %s",token); continue; } *slptr++ = i+1; } while(c && c != '>'); *slptr++ = 0; /* check if previous value re-usable */ for (xp=slist; xp slist+STARTSIZE) /* note not packed ! */ error("Too many start conditions used"); yylval = t; x = SCON; break; case '"': i = 0; while((c=gch()) && c != '"' && c != '\n'){ if(c == '\\') c = usescape(c=gch()); token[i++] = c; if(i > TOKENSIZE){ warning("String too long"); i = TOKENSIZE-1; break; } } if(c == '\n') { yyline--; warning("Non-terminated s((tring"); yyline++; } token[i] = 0; if(i == 0)x = NULLS; else if(i == 1){ yylval = token[0]; x = CHAR; } else { yylval = token; x = STR; } break; case '[': for(i=1;i k) { n = j; j = k; k = n; } if(!(('A' <= j && k <= 'Z') || ('a' <= j && k <= 'z') || ('0' <= j && k <= '9'))) warning("Non-portable Character Class"); for(n=j+1;n<=k;n++) symbol[n] = 1; /* implementation dependent */ c = gch(); } } /* try to pack ccl's */ i = 0; for(j=0;j= ccl+CCLSIZE) error("Too many large character classes"); } cclinter(x==CCL); break; case '\\': c = usescape(c=gch()); default: character: if(iter){ /* second part of an iteration */ iter = FALSE; if('0' <= c && c <= '9') goto ieval; } if(alpha(peek)){ i = 0; yylval = token; token[i++] = c; while(alpha(peek)) token[i++] = gch(); if(peek == '?' || peek == '*' || peek == '+') munput('c',token[--i]); token[i] = 0; if(i == 1){ yylval = token[0]; x = CHAR; } else x = STR; } else { yylval = c; x = CHAR; } } scon = FALSE; if(x == SCON)scon = TRUE; sectbegin = FALSE; return(freturn(x)); } } /* section three */ ptail(); # ifdef DEBUG if(debug) fprintf(fout,"\n/*this comes from section three - debug */\n"); # endif while(getl(buf) && !eof) fprintf(fout,"%s\n",buf); return(freturn(0)); } /* end of yylex */ # ifdef DEBUG freturn(i) int i; { if(yydebug) { printf("now return "); if(i < NCH) allprint(i); else printf("%d",i); printf(" yylval = "); switch(i){ case STR: case CCL: case NCCL: strpt(yylval); break; case CHAR: allprint(yylval); break; default: printf("%d",yylval); break; } putchar('\n'); } return(i); } # endif 'Fk~w%GJ,ViVi CFLAGS = -O all: lex libln.a cmp: all cmp lex /bin/lex ls -l libln.a /lib/libln.a rm -f *.o libln.a lex y.tab.c cp: all cp lex /bin/lex cp libln.a /lib rm -f *.o libln.a lex y.tab.c lex: lmain.o y.tab.o sub1.o sub2.o header.o cc -i -s lmain.o y.tab.o sub1.o sub2.o header.o -o lex smallex: cc -DSMALL -n -s -O lmain.c y.tab.c sub1.c sub2.c header.c -o smallex y.tab.c: parser.y yacc parser.y lmain.o:lmain.c ldefs.c once.c cc -c -O lmain.c sub1.o: sub1.c ldefs.c cc -c -O sub1.c sub2.o: sub2.c ldefs.c cc -c -O sub2.c header.o: header.c ldefs.c cc -c -O header.c libln.a: cc -c -O lib/allprint.c lib/main.c lib/reject.c lib/yyless.c cc -c -O lib/yywrap.c rm -f libln.a ar rvc libln.a allprint.o main.o reject.o yyless.o yywrap.o rm allprint.o main.o reject.o yyless.o yywrap.o 'IkeOVi # include "ldefs.c" cfoll(v) int v; { register int i,j,k; char *p; i = name[v]; if(i < NCH) i = 1; /* character */ switch(i){ case 1: case RSTR: case RCCL: case RNCCL: case RNULLS: for(j=0;j= pcptr)*pcptr++ = cindex[j]; } *pcptr++ = 0; if(pcptr > pchar + pchlen) error("Too many packed character classes"); left[v] = p; name[v] = RCCL; /* RNCCL eliminated */ # ifdef DEBUG if(debug && *p){ printf("ccl %d: %d",v,*p++); while(*p) printf(", %d",*p++); putchar('\n'); } # endif } break; case CARAT: cfoll(left[v]); break; case STAR: case PLUS: case QUEST: case RSCON: cfoll(left[v]); break; case BAR: case RCAT: case DIV: case RNEWE: cfoll(left[v]); cfoll(right[v]); break; # ifdef DEBUG case FINAL: case S1FINAL: case S2FINAL: break; default: warning("bad switch cfoll %d",v); # endif } return; } # ifdef DEBUG pfoll() { register int i,k,*p; int j; /* print sets of chars which may follow positions */ printf("pos\tchars\n"); for(i=0;i= 1){ printf("%d:\t%d",i,*p++); for(k=2;k<=j;k++) printf(", %d",*p++); putchar('\n'); } } return; } # endif add(array,n) int **array; int n; { register int i, *temp; register char *ctemp; temp = nxtpos; ctemp = tmpstat; array[n] = nxtpos; /* note no packing is done in positions */ *temp++ = count; for(i=0;i= positions+maxpos) error("Too many positions %s",(maxpos== MAXPOS?"\nTry using %p num":"")); return; } follow(v) int v; { register int p; if(v >= tptr-1)return; p = parent[v]; if(p == 0) return; switch(name[p]){ /* will not be CHAR RNULLS FINAL S1FINAL S2FINAL RCCL RNCCL */ case RSTR: if(tmpstat[p] == FALSE){ count++; tmpstat[p] = TRUE; } break; case STAR: case PLUS: first(v); follow(p); break; case BAR: case QUEST: case RNEWE: follow(p); break; case RCAT: case DIV: if(v == left[p]){ if(nullstr[right[p]]) follow(p); first(right[p]); } else follow(p); break; case RSCON: case CARAT: follow(p); break; # ifdef DEBUG default: warning("bad switch follow %d",p); # endif } return; } first(v) /* calculate set of positions with v as root which can be active initially */ int v; { register int i; register char *p; i = name[v]; if(i < NCH)i = 1; switch(i){ case 1: case RCCL: case RNCCL: case RNULLS: case FINAL: case S1FINAL: case S2FINAL: if(tmpstat[v] == FALSE){ count++; tmpstat[v] = TRUE; } break; case BAR: case RNEWE: first(left[v]); first(right[v]); break; case CARAT: if(stnum % 2 == 1) first(left[v]); break; case RSCON: i = stnum/2 +1; p = right[v]; while(*p) if(*p++ == i){ first(left[v]); break; } break; case STAR: case QUEST: case PLUS: case RSTR: first(left[v]); break; case RCAT: case DIV: first(left[v]); if(nullstr[left[v]]) first(right[v]); break; # ifdef DEBUG default: warning("bad switch first %d",v); # endif } return; } cgoto(){ register int i, j, s; int npos, curpos, n; int tryit; char tch[NCH]; int tst[NCH]; char *q; /* generate initial state, for each start condition */ if(ratfor){ fprintf(fout,"blockdata\n"); fprintf(fout,"common /Lvstop/ vstop\n"); fprintf(fout,"define Svstop %d\n",nstates+1); fprintf(fout,"integer vstop(Svstop)\n"); } else fprintf(fout,"int yyvstop[] ={\n0,\n"); while(stnum < 2 || stnum/2 < sptr){ for(i = 0; i 0)first(tptr-1); add(state,stnum); # ifdef DEBUG if(debug){ if(stnum > 1) printf("%s:\n",sname[stnum/2]); pstate(stnum); } # endif stnum++; } stnum--; /* even stnum = might not be at line begin */ /* odd stnum = must be at line begin */ /* even states can occur anywhere, odd states only at line begin */ for(s = 0; s <= stnum; s++){ tryit = FALSE; cpackflg[s] = FALSE; sfall[s] = -1; acompute(s); for(i=0;i LINESIZE){ charc = 0; printf("\n\t"); } } putchar('\n'); } # endif /* for each char, calculate next state */ n = 0; for(i = 1; i= nstates) error("Too many states %s",(nstates == NSTATES ? "\nTry using %n num":"")); add(state,++stnum); # ifdef DEBUG if(debug)pstate(stnum); # endif tch[n] = i; tst[n++] = stnum; } else { /* xstate >= 0 ==> state exists */ tch[n] = i; tst[n++] = xstate; } } } tch[n] = 0; tst[n] = -1; /* pack transitions into permanent array */ if(n > 0) packtrans(s,tch,tst,n,tryit); else gotof[s] = -1; } ratfor ? fprintf(fout,"end\n") : fprintf(fout,"0};\n"); return; } /* Beware -- 70% of total CPU time is spent in this subroutine - if you don't believe me - try it yourself ! */ nextstate(s,c) int s,c; { register int j, *newpos; register char *temp, *tz; int *pos, i, *f, num, curpos, number; /* state to goto from state s on char c */ num = *state[s]; temp = tmpstat; pos = state[s] + 1; for(i = 0; i=0;i--){ /* for each state */ j = state[i]; if(count == *j++){ for(k=0;k= count) return(i); } } return(-1); } packtrans(st,tch,tst,cnt,tryit) int st, *tst, cnt,tryit; char *tch; { /* pack transitions into nchar, nexts */ /* nchar is terminated by '\0', nexts uses cnt, followed by elements */ /* gotof[st] = index into nchr, nexts for state st */ /* sfall[st] = t implies t is fall back state for st */ /* == -1 implies no fall back */ int cmin, cval, tcnt, diff, p, *ast; register int i,j,k; char *ach; int go[NCH], temp[NCH], c; int swork[NCH]; char cwork[NCH]; int upper; rcount =+ cnt; cmin = -1; cval = NCH; ast = tst; ach = tch; /* try to pack transitions using ccl's */ if(!optim)goto nopack; /* skip all compaction */ if(tryit){ /* ccl's used */ for(i=1;i cnt) continue; diff = 0; k = 0; j = 0; upper = p + tcnt; while(ach[j] && p < upper){ while(ach[j] < nchar[p] && ach[j]){diff++; j++; } if(ach[j] == 0)break; if(ach[j] > nchar[p]){diff=NCH;break;} /* ach[j] == nchar[p] */ if(ast[j] != nexts[++p] || ast[j] == -1 || (cpackflg[st] && ach[j] != match[ach[j]]))diff++; j++; } while(ach[j]){ diff++; j++; } if(p < upper)diff = NCH; if(diff < cval && diff < tcnt){ cval = diff; cmin = i; if(cval == 0)break; } } /* cmin = state "most like" state st */ # ifdef DEBUG if(debug)printf("select st %d for st %d diff %d\n",cmin,st,cval); # endif # ifdef PS if(cmin != -1){ /* if we can use st cmin */ gotof[st] = nptr; k = 0; sfall[st] = cmin; p = gotof[cmin]+1; j = 0; while(ach[j]){ /* if cmin has a transition on c, then so will st */ /* st may be "larger" than cmin, however */ while(ach[j] < nchar[p-1] && ach[j]){ k++; nchar[nptr] = ach[j]; nexts[++nptr] = ast[j]; j++; } if(nchar[p-1] == 0)break; if(ach[j] > nchar[p-1]){ warning("bad transition %d %d",st,cmin); goto nopack; } /* ach[j] == nchar[p-1] */ if(ast[j] != nexts[p] || ast[j] == -1 || (cpackflg[st] && ach[j] != match[ach[j]])){ k++; nchar[nptr] = ach[j]; nexts[++nptr] = ast[j]; } p++; j++; } while(ach[j]){ nchar[nptr] = ach[j]; nexts[++nptr] = ast[j++]; k++; } nexts[gotof[st]] = cnt = k; nchar[nptr++] = 0; } else { # endif nopack: /* stick it in */ gotof[st] = nptr; nexts[nptr] = cnt; for(i=0;i ntrans) error("Too many transitions %s",(ntrans==NTRANS?"\nTry using %a num":"")); return; } # ifdef DEBUG pstate(s) int s; { register int *p,i,j; printf("State %d:\n",s); p = state[s]; i = *p++; if(i == 0) return; printf("%4d",*p++); for(j = 1; j= 0) printf("%d\t",nexts[p+1]); else printf("err\t"); allprint(nchar[p++]); while(nexts[p] == nexts[p+1] && nchar[p]){ if(charc > LINESIZE){ charc = 0; printf("\n\t"); } allprint(nchar[p++]); } putchar('\n'); } putchar('\n'); return; } # endif acompute(s) /* compute action list = set of poss. actions */ int s; { register int *p, i, j; int cnt, m; int temp[300], k, neg[300], n; k = 0; n = 0; p = state[s]; cnt = *p++; if(cnt > 300) error("Too many positions for one state - acompute"); for(i=0;iNACTIONS) error("Too many right contexts"); extra[left[*p]] = 1; } else if(name[*p] == S2FINAL)neg[n++] = left[*p]; p++; } atable[s] = -1; if(k < 1 && n < 1) return; # ifdef DEBUG if(debug) printf("final %d actions:",s); # endif /* sort action list */ for(i=0; i LINESIZE){ printf("\n\t"); charc = 0; } } putchar('\n'); } charc = 0; printf("match:\n"); for(i=0;i LINESIZE){ putchar('\n'); charc = 0; } } putchar('\n'); return; } # endif mkmatch(){ register int i; char tab[NCH]; for(i=0; i outsize - ZCH) error("output table overflow"); for(j = bot; j<= top; j++){ k=startup+ctable[nchar[j]]; if(verify[k])break; } } while (j <= top); # if DEBUG if (debug) printf(" startup will be %d\n",startup); # endif /* have found place */ for(j = bot; j<= top; j++){ k = startup + ctable[nchar[j]]; if (ctable[nchar[j]]<=0) printf("j %d nchar %d ctable.nch %d\n",j,nchar[j],ctable[nchar[k]]); verify[k] = i+1; /* state number + 1*/ advance[k] = nexts[j+1]+1; /* state number + 1*/ if(yytop < k) yytop = k; } } else { do { startup =+ 1; if(startup > outsize - ZCH) error("output table overflow"); for(j = bot; j<= top; j++){ k = startup + nchar[j]; if(verify[k])break; } } while (j <= top); /* have found place */ # if DEBUG if (debug) printf(" startup going to be %d\n", startup); # endif for(j = bot; j<= top; j++){ k = startup + nchar[j]; verify[k] = i+1; /* state number + 1*/ advance[k] = nexts[j+1]+1; /* state number + 1*/ if(yytop < k) yytop = k; } } stoff[i] = startup; } /* stoff[i] = offset into verify, advance for trans for state i */ /* put out yywork */ if(ratfor){ fprintf(fout, "define YYTOPVAL %d\n", yytop); rprint(verify,"verif",yytop+1); rprint(advance,"advan",yytop+1); shiftr(stoff, stnum); rprint(stoff,"stoff",stnum+1); shiftr(sfall, stnum); upone(sfall, stnum+1); rprint(sfall,"sfall",stnum+1); bprint(extra,"extra",casecount+1); bprint(match,"match",NCH); shiftr(atable, stnum); rprint(atable,"atable",stnum+1); return; } fprintf(fout,"# define YYTYPE %s\n",stnum+1 > NCH ? "int" : "char"); fprintf(fout,"struct yywork { YYTYPE verify, advance; } yycrank[] ={\n"); for(i=0;i<=yytop;i=+4){ for(j=0;j<4;j++){ k = i+j; if(verify[k]) fprintf(fout,"%d,%d,\t",verify[k],advance[k]); else fprintf(fout,"0,0,\t"); } putc('\n',fout); } fprintf(fout,"0,0};\n"); /* put out yysvec */ fprintf(fout,"struct yysvf yysvec[] ={\n"); fprintf(fout,"0,\t0,\t0,\n"); for(i=0;i<=stnum;i++){ /* for each state */ if(cpackflg[i])stoff[i] = -stoff[i]; fprintf(fout,"yycrank+%d,\t",stoff[i]); if(sfall[i] != -1) fprintf(fout,"yysvec+%d,\t", sfall[i]+1); /* state + 1 */ else fprintf(fout,"0,\t\t"); if(atable[i] != -1) fprintf(fout,"yyvstop+%d,",atable[i]); else fprintf(fout,"0,\t"); # ifdef DEBUG fprintf(fout,"\t\t/* state %d */",i); # endif putc('\n',fout); } fprintf(fout,"0,\t0,\t0};\n"); /* put out yymatch */ fprintf(fout,"struct yywork *yytop = yycrank+%d;\n",yytop); fprintf(fout,"struct yysvf *yybgin = yysvec+1;\n"); if(optim){ fprintf(fout,"char yymatch[] ={\n"); if (chset==0) /* no chset, put out in normal order */ { for(i=0; i=0; i--) a[i+1]=a[i]; } upone(a,n) int *a; { int i; for(i=0; i<=n ; i++) a[i]++; } bprint(a,s,n) char *s, *a; int n; { register int i, j, k; fprintf(fout,"block data\n"); fprintf(fout,"common /L%s/ %s\n",s,s); fprintf(fout,"define S%s %d\n",s,n); fprintf(fout,"integer %s (S%s)\n",s,s); for(i=1;i=0;i--){ j = array[i]; if(j && *j++ == count){ for(k=0;k= count){ array[n] = array[i]; return; } } } add(array,n); return; } # endif 'skD/Ti # include "ldefs.c" getl(p) /* return next line of input, throw away trailing '\n' */ /* returns 0 if eof is had immediately */ char *p; { register int c; register char *s, *t; t = s = p; while(((c = gch()) != 0) && c != '\n') *t++ = c; *t = 0; if(c == 0 && s == t) return(0); prev = '\n'; pres = '\n'; return(s); } space(ch) { switch(ch) { case ' ': case '\t': case '\n': return(1); } return(0); } digit(c) { return(c>='0' && c <= '9'); } error(s,p,d) { if(!eof)fprintf(errorf,"%d: ",yyline); fprintf(errorf,"(Error) "); fprintf(errorf,s,p,d); putc('\n',errorf); # ifdef DEBUG if(debug && sect != ENDSECTION) { sect1dump(); sect2dump(); } # endif if( # ifdef DEBUG debug || # endif report == 1) statistics(); exit(1); /* error return code */ } warning(s,p,d) { if(!eof)fprintf(errorf,"%d: ",yyline); fprintf(errorf,"(Warning) "); fprintf(errorf,s,p,d); putc('\n',errorf); fflush(errorf); fflush(fout); fflush(stdout); } index(a,s) char *s; { register int k; for(k=0; s[k]; k++) if (s[k]== a) return(k); return(-1); } alpha(c) int c; { # ifdef ASCII return('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z'); # endif # ifdef EBCDIC return(index(c,"abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") >= 0); # endif } printable(c) { # ifdef ASCII return( c>040 && c < 0177); # endif # ifdef EBCDIC return(index(c, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,;:><+*)('&%!-=\"")>=0); # endif } lgate() { char fname[20]; if (lgatflg) return; lgatflg=1; if(fout == NULL){ sprintf(fname, "lex.yy.%c", ratfor ? 'r' : 'c' ); fout = fopen(fname, "w"); } if(fout == NULL) error("Can't open %s",fname); if(ratfor) fprintf( fout, "#\n"); phead1(); } /* scopy(ptr to str, ptr to str) - copy first arg str to second */ /* returns ptr to second arg */ scopy(s,t) char *s, *t; { register char *i; i = t; while(*i++ = *s++); return; } siconv(t) /* convert string t, return integer value */ char *t; { register int i,sw; register char *s; s = t; while(!(('0' <= *s && *s <= '9') || *s == '-') && *s) s++; sw = 0; if(*s == '-'){ /* neg */ sw = 1; s++; } i = 0; while('0' <= *s && *s <= '9') i = i * 10 + (*(s++)-'0'); return(sw ? -i : i); } /* slength(ptr to str) - return integer length of string arg */ /* excludes '\0' terminator */ slength(s) char *s; { register int n; register char *t; t = s; for (n = 0; *t++; n++); return(n); } /* scomp(x,y) - return -1 if x < y, 0 if x == y, return 1 if x > y, all lexicographically */ scomp(x,y) char *x,*y; { register char *a,*d; a = x; d = y; while(*a || *d){ if(*a > *d) return(1); /* greater */ if(*a < *d) return(-1); /* less */ a++; d++; } return(0); /* equal */ } ctrans(ss) char **ss; { register int c, k; if ((c = **ss) != '\\') return(c); switch(c= *++*ss) { case 'n': c = '\n'; break; case 't': c = '\t'; break; case 'r': c = '\r'; break; case 'b': c = '\b'; break; case 'f': c = 014; break; /* form feed for ascii */ case '\\': c = '\\'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': c =- '0'; while ((k = *(*ss+1)) >= '0' && k <= '7') { c = c*8 + k - '0'; (*ss)++; } break; } return(c); } cclinter(sw) int sw; { /* sw = 1 ==> ccl */ register int i, j, k; int m; if(!sw){ /* is NCCL */ for(i=1;i= NCH) return; i = cindex[i]; /* see if ccl is already in our table */ j = 0; if(i){ for(j=1;j= NCH) return; /* already in */ m = 0; k = 0; for(i=1;i pushc ? *--pushptr : getc(fin); if(peek == EOF && sargc > 1){ fclose(fin); fin = fopen(sargv[++fptr],"r"); if(fin == NULL) error("Cannot open file %s",sargv[fptr]); peek = getc(fin); sargc--; sargv++; } if(c == EOF) { eof = TRUE; fclose(fin); return(0); } if(c == '\n')yyline++; return(c); } mn2(a,d,c) int a,d,c; { name[tptr] = a; left[tptr] = d; right[tptr] = c; parent[tptr] = 0; nullstr[tptr] = 0; switch(a){ case RSTR: parent[d] = tptr; break; case BAR: case RNEWE: if(nullstr[d] || nullstr[c]) nullstr[tptr] = TRUE; parent[d] = parent[c] = tptr; break; case RCAT: case DIV: if(nullstr[d] && nullstr[c])nullstr[tptr] = TRUE; parent[d] = parent[c] = tptr; break; case RSCON: parent[d] = tptr; nullstr[tptr] = nullstr[d]; break; # ifdef DEBUG default: warning("bad switch mn2 %d %d",a,d); break; # endif } if(tptr > treesize) error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":"")); return(tptr++); } mn1(a,d) int a,d; { name[tptr] = a; left[tptr] = d; parent[tptr] = 0; nullstr[tptr] = 0; switch(a){ case RCCL: case RNCCL: if(slength(d) == 0) nullstr[tptr] = TRUE; break; case STAR: case QUEST: nullstr[tptr] = TRUE; parent[d] = tptr; break; case PLUS: case CARAT: nullstr[tptr] = nullstr[d]; parent[d] = tptr; break; case S2FINAL: nullstr[tptr] = TRUE; break; # ifdef DEBUG case FINAL: case S1FINAL: break; default: warning("bad switch mn1 %d %d",a,d); break; # endif } if(tptr > treesize) error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":"")); return(tptr++); } mn0(a) int a; { name[tptr] = a; parent[tptr] = 0; nullstr[tptr] = 0; if(a >= NCH) switch(a){ case RNULLS: nullstr[tptr] = TRUE; break; # ifdef DEBUG default: warning("bad switch mn0 %d",a); break; # endif } if(tptr > treesize) error("Parse tree too big %s",(treesize == TREESIZE?"\nTry using %e num":"")); return(tptr++); } munput(t,p) /* implementation dependent */ char *p; int t; { register int i,j; if(t == 'c'){ *pushptr++ = peek; /* watch out for this */ peek = p; } else if(t == 's'){ *pushptr++ = peek; peek = p[0]; i = slength(p); for(j = i-1; j>=1; j--) *pushptr++ = p[j]; } # ifdef DEBUG else error("Unrecognized munput option %c",t); # endif if(pushptr >= pushc+TOKENSIZE) error("Too many characters pushed"); return; } dupl(n) int n; { /* duplicate the subtree whose root is n, return ptr to it */ register int i; i = name[n]; if(i < NCH) return(mn0(i)); switch(i){ case RNULLS: return(mn0(i)); case RCCL: case RNCCL: case FINAL: case S1FINAL: case S2FINAL: return(mn1(i,left[n])); case STAR: case QUEST: case PLUS: case CARAT: return(mn1(i,dupl(left[n]))); case RSTR: case RSCON: return(mn2(i,dupl(left[n]),right[n])); case BAR: case RNEWE: case RCAT: case DIV: return(mn2(i,dupl(left[n]),dupl(right[n]))); # ifdef DEBUG default: warning("bad switch dupl %d",n); # endif } return(0); } # ifdef DEBUG allprint(c) char c; { switch(c){ case 014: printf("\\f"); charc++; break; case '\n': printf("\\n"); charc++; break; case '\t': printf("\\t"); charc++; break; case '\b': printf("\\b"); charc++; break; case ' ': printf("\\\bb"); break; default: if(!printable(c)){ printf("\\%-3o",c); charc =+ 3; } else putchar(c); break; } charc++; return; } strpt(s) char *s; { charc = 0; while(*s){ allprint(*s++); if(charc > LINESIZE){ charc = 0; printf("\n\t"); } } return; } sect1dump(){ register int i; printf("Sect 1:\n"); if(def[0]){ printf("str trans\n"); i = -1; while(def[++i]) printf("%s\t%s\n",def[i],subs[i]); } if(sname[0]){ printf("start names\n"); i = -1; while(sname[++i]) printf("%s\n",sname[i]); } if(chset == TRUE){ printf("char set changed\n"); for(i=1;i # define PP 1 # ifdef unix # define CWIDTH 7 # define CMASK 0177 # define ASCII 1 # endif # ifdef gcos # define CWIDTH 9 # define CMASK 0777 # define ASCII 1 # endif # ifdef ibm # define CWIDTH 8 # define CMASK 0377 # define EBCDIC 1 # endif # ifdef ASCII # define NCH 128 # endif # ifdef EBCDIC # define NCH 256 # endif # define TOKENSIZE 1000 # define DEFSIZE 40 # define DEFCHAR 1000 # define STARTCHAR 100 # define STARTSIZE 256 # define CCLSIZE 1000 # ifdef SMALL # define TREESIZE 600 # define NTRANS 1500 # define NSTATES 300 # define MAXPOS 1500 # define NOUTPUT 1500 # endif # ifndef SMALL # define TREESIZE 1000 # define NSTATES 500 # define MAXPOS 2500 # define NTRANS 2000 # define NOUTPUT 3000 # endif # define NACTIONS 100 # define ALITTLEEXTRA 30 # define RCCL NCH+90 # define RNCCL NCH+91 # define RSTR NCH+92 # define RSCON NCH+93 # define RNEWE NCH+94 # define FINAL NCH+95 # define RNULLS NCH+96 # define RCAT NCH+97 # define STAR NCH+98 # define PLUS NCH+99 # define QUEST NCH+100 # define DIV NCH+101 # define BAR NCH+102 # define CARAT NCH+103 # define S1FINAL NCH+104 # define S2FINAL NCH+105 # define DEFSECTION 1 # define RULESECTION 2 # define ENDSECTION 5 # define TRUE 1 # define FALSE 0 # define PC 1 # define PS 1 # ifdef DEBUG # define LINESIZE 110 extern int yydebug; extern int debug; /* 1 = on */ extern int charc; # endif # ifndef DEBUG # define freturn(s) s # endif extern int sargc; extern char **sargv; extern char buf[520]; extern int ratfor; /* 1 = ratfor, 0 = C */ extern int yyline; /* line number of file */ extern int sect; extern int eof; extern int lgatflg; extern int divflg; extern int funcflag; extern int pflag; extern int casecount; extern int chset; /* 1 = char set modified */ extern FILE *fin, *fout, *fother, *errorf; extern int fptr; extern char *ratname, *cname; extern int prev; /* previous input character */ extern int pres; /* present input character */ extern int peek; /* next input character */ extern int *name; extern int *left; extern int *right; extern int *parent; extern char *nullstr; extern int tptr; extern char pushc[TOKENSIZE]; extern char *pushptr; extern char slist[STARTSIZE]; extern char *slptr; extern char **def, **subs, *dchar; extern char **sname, *schar; extern char *ccl; extern char *ccptr; extern char *dp, *sp; extern int dptr, sptr; extern char *bptr; /* store input position */ extern char *tmpstat; extern int count; extern int **foll; extern int *nxtpos; extern int *positions; extern int *gotof; extern int *nexts; extern char *nchar; extern int **state; extern int *sfall; /* fallback state num */ extern char *cpackflg; /* true if state has been character packed */ extern int *atable, aptr; extern int nptr; extern char symbol[NCH]; extern char cindex[NCH]; extern int xstate; extern int stnum; extern int ctable[]; extern int ZCH; extern int ccount; extern char match[NCH]; extern char extra[NACTIONS]; extern char *pcptr, *pchar; extern int pchlen; extern int nstates, maxpos; extern int yytop; extern int report; extern int ntrans, treesize, outsize; extern long rcount; extern int optim; extern int *verify, *advance, *stoff; extern int scon; extern char *psave; extern char *calloc(), *myalloc(); extern int buserr(), segviol(); 'k\?BEHKNQTRi # include "ldefs.c" phead1(){ ratfor ? rhd1() : chd1(); } chd1(){ fprintf(fout,"# include \"stdio.h\"\n"); if (ZCH>NCH) fprintf(fout, "# define U(x) ((x)&0377)\n"); else fprintf(fout, "# define U(x) x\n"); fprintf(fout, "# define NLSTATE yyprevious=YYNEWLINE\n"); fprintf(fout,"# define BEGIN yybgin = yysvec + 1 +\n"); fprintf(fout,"# define INITIAL 0\n"); fprintf(fout,"# define YYLERR yysvec\n"); fprintf(fout,"# define YYSTATE (yyestate-yysvec-1)\n"); if(optim) fprintf(fout,"# define YYOPTIM 1\n"); # ifdef DEBUG fprintf(fout,"# define LEXDEBUG 1\n"); # endif fprintf(fout,"# define YYLMAX 200\n"); fprintf(fout,"# define output(c) putc(c,yyout)\n"); fprintf(fout, "%s%d%s\n", "# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==", ctable['\n'], "?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)"); fprintf(fout, "# define unput(c) {yytchar= (c);if(yytchar=='\\n')yylineno--;*yysptr++=yytchar;}\n"); fprintf(fout,"# define yymore() (yymorfg=1)\n"); fprintf(fout,"# define ECHO fprintf(yyout, \"%%s\",yytext)\n"); fprintf(fout,"# define REJECT { nstr = yyreject(); goto yyfussy;}\n"); fprintf(fout,"int yyleng; extern char yytext[];\n"); fprintf(fout,"int yymorfg;\n"); fprintf(fout,"extern char *yysptr, yysbuf[];\n"); fprintf(fout,"int yytchar;\n"); fprintf(fout,"FILE *yyin ={stdin}, *yyout ={stdout};\n"); fprintf(fout,"extern int yylineno;\n"); fprintf(fout,"struct yysvf { \n"); fprintf(fout,"\tstruct yywork *yystoff;\n"); fprintf(fout,"\tstruct yysvf *yyother;\n"); fprintf(fout,"\tint *yystops;};\n"); fprintf(fout,"struct yysvf *yyestate;\n"); fprintf(fout,"extern struct yysvf yysvec[], *yybgin;\n"); } rhd1(){ fprintf(fout,"integer function yylex(dummy)\n"); fprintf(fout,"define YYLMAX 200\n"); fprintf(fout,"define ECHO call yyecho(yytext,yyleng)\n"); fprintf(fout,"define REJECT nstr = yyrjct(yytext,yyleng);goto 30998\n"); fprintf(fout,"integer nstr,yylook,yywrap\n"); fprintf(fout,"integer yyleng, yytext(YYLMAX)\n"); fprintf(fout,"common /yyxel/ yyleng, yytext\n"); fprintf(fout,"common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta\n"); fprintf(fout,"integer yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta(YYLMAX)\n"); fprintf(fout,"for(;;){\n"); fprintf(fout,"\t30999 nstr = yylook(dummy)\n"); fprintf(fout,"\tgoto 30998\n"); fprintf(fout,"\t30000 k = yywrap(dummy)\n"); fprintf(fout,"\tif(k .ne. 0){\n"); fprintf(fout,"\tyylex=0; return; }\n"); fprintf(fout,"\t\telse goto 30998\n"); } phead2(){ if(!ratfor)chd2(); } chd2(){ fprintf(fout,"while((nstr = yylook()) >= 0)\n"); fprintf(fout,"yyfussy: switch(nstr){\n"); fprintf(fout,"case 0:\n"); fprintf(fout,"if(yywrap()) return(0); break;\n"); } ptail(){ if(!pflag) ratfor ? rtail() : ctail(); pflag = 1; } ctail(){ fprintf(fout,"case -1:\nbreak;\n"); /* for reject */ fprintf(fout,"default:\n"); fprintf(fout,"fprintf(yyout,\"bad switch yylook %%d\",nstr);\n"); fprintf(fout,"} return(0); }\n"); fprintf(fout,"/* end of yylex */\n"); } rtail(){ register int i; fprintf(fout,"\n30998 if(nstr ((.lt. 0 .or. nstr .gt. %d)goto 30999\n",casecount); fprintf(fout,"nstr = nstr + 1\n"); fprintf(fout,"goto(\n"); for(i=0; i=0 && x <= yyleng) ptr = x + yytext; else ptr = x; while (lastch > ptr) yyunput(*--lastch); *lastch = 0; if (ptr >yytext) yyprevious = *--lastch; yyleng = ptr-yytext; } 'ksഁ@361Qi # include extern struct {int *yyaa, *yybb; int *yystops;} *yylstate [], **yylsp, **yyolsp; yyreject () { extern FILE *yyout, *yyin; extern int yyprevious , *yyfnd; extern char yyextra[]; extern char yytext[]; extern int yyleng; for( ; yylsp < yyolsp; yylsp++) yytext[yyleng++] = yyinput(); if (*yyfnd > 0) return(yyracc(*yyfnd++)); while (yylsp-- > yylstate) { yyunput(yytext[yyleng-1]); yytext[--yyleng] = 0; if (*yylsp != 0 && (yyfnd= (*yylsp)->yystops) && *yyfnd > 0) return(yyracc(*yyfnd++)); } if (yytext[0] == 0) return(0); yyoutput(yyprevious = yyinput()); yyleng=0; return(-1); } yyracc(m) { yyolsp = yylsp; if (yyextra[m]) { while (yyback((*yylsp)->yystops, -m) != 1 && yylsp>yylstate) { yylsp--; yyunput(yytext[--yyleng]); } } yyprevious = yytext[yyleng-1]; yytext[yyleng] = 0; return(m); } 'k00+Pi # include "stdio.h" main(){ yylex(); exit(0); } 'k-$Pi # include allprint(c) char c; { extern FILE *yyout; switch(c){ case '\n': fprintf(yyout,"\\n"); break; case '\t': fprintf(yyout,"\\t"); break; case '\b': fprintf(yyout,"\\b"); break; case ' ': fprintf(yyout,"\\\bb"); break; default: if(!printable(c)) fprintf(yyout,"\\%-3o",c); else putc(c,yyout); break; } return; } sprint(s) char *s; { while(*s) allprint(*s++); return; } printable(c) int c; { return(040 < c && c < 0177); } 'kz  !BLiLi 6 0  6 >  67% % w  5555%0!> @& ~% #@@ &! %_!E @& ~% @G %V L  7! X &!     E  ! > 5% % 5 %%5 !  d  %@ r y j  v Dm ! !~ t ~%  &!  ` \  X!f <4E ,! > 5%  w`   _: ._ E ! > 5%1%2NeO .!f  E  2 E F?! >  1CDLP F>E 6! > eG_! > 5%1JIH_M 25 C S!f N_( ee E ! > 5 * 1ee vnE f! > %1#_("_(  L 2*E "! > 5%[2!N . E ! > 5%] E ! >   _!f E ! > 5 r y ; . _ __5  5 5? E ! > 5%*e@!f Nf  e   %N . E ! > 5%]5 5 _\ > %_ _z !_ #_ &_N_  _   5_ _z _ !_ $_ ( 5 _  t_ _(  _( 5  J B>_  , 5   _ _   N_(  _ _0 _    _  _| _  _E _ ?_f _ _ K .A_bw   x   e "E ! > b ΃!& w> w . 7 Ne  %  H|f w w DC D̥wf $#̥af  f $ &  fe f    wt ̥rw H D!- w> e̥wf $'̥af   %f $ &  fe f   2 ̥rw Nfef %@ w| w h D%    | wD  - -w  DD@ ?e%4  4 && %4 % 4 wE w rwDB %w f& & e w67 7  ׯ-  ׯ00w7  .w BwD Jzt _ d ` o x d u D     ((  ӕ- f&Ew ӕ0 S r@A r  f  e0 9e' E,* !ҋ D~lf ^ V p7>w,0 * (ff Fe w7   0   Wp `e0eӕ?w DCB &E z f  #̥-%0  E: E:  &E  z f  wnw ^DwR;%!)  uNfe& 0%4 *!!   & 0%S  @w DE%& 0%  wJ w 6! De-xw(w D@     4 4 wf x@w  X&U7J&U7@&>&6Ae vB"7 $55 a  a!PE -%& w. %e rt 7  `   %e U?zz `e 7h&U?\ a7N FH?@<U ew rDE wdw TD5 @ r5N !w"5A vBB-  }ee@ !ۃ `!ւ `@ r `lw Nef   ww N tf B%wxw hNtf B%w^f@w4 fww!wfwtwpwl!wf@wTwPw L!wfw8w4!wf@ww!wfwm!wjwmfw!wHw fw!w( f@ww!w7F@& BF(0tr%s? w%s? cvopt.tmpwcvopt.tmp? L%d:<0 .ev'kz  !BLiLien cvopt.tmprtmp? cvopt.tmp=.+2; 0;.byte %o,%oL%d= L%d \0> \n> <>;.byte %o;< d o x f e gj c| s l L u r D O X U(null)##!6 & 'k꽢 $KiKi CFLAGS = -O -n -s all: c0 c1 c2 cmp: all cmp c0 /lib/c0 cmp c1 /lib/c1 cmp c2 /lib/c2 rm c0 c1 c2 *.o cp: all cp c0 /lib/c0 cp c1 /lib/c1 cp c2 /lib/c2 rm c0 c1 c2 *.o fcp: fc1 cp fc1 /lib/fc1 rm fc1 c1*.o c0: c00.o c01.o c02.o c03.o c04.o c05.o cc $(CFLAGS) -o c0 c00.o c01.o c02.o c03.o c04.o c05.o c00.o c01.o c02.o c03.o c04.o c05.o: c0.h c1: c10.o c11.o c12.o c13.o table.o cc $(CFLAGS) -o c1 c10.o c11.o c12.o c13.o table.o fc1: c10.o c11.o c12.o c13.o table.o cc $(CFLAGS) -f -o fc1 c10.o c11.o c12.o c13.o table.o c10.o c11.o c12.o c13.o: c1.h table.o: table.s cvopt cvopt table.i as -o table.o table.i rm table.i c2: c20.o c21.o cc -i -O -s -o c2 c20.o c21.o c20.o c21.o: c2.h cvopt: cvopt.c cc $(CFLAGS) -o cvopt cvopt.c ' k{ 7ZKiKi #include int tabflg; int labno = 1; FILE *curbuf; FILE *obuf; main(argc, argv) char **argv; { /* A1 -> A A2 B A O B1 C B2 D BE L BF P C1 E C2 F F G H H R I R1 J S K I M M N * +1 S +2 C +4 1 +8 z -> 4 c 10 a 14 e 20 n 63 * +0100 */ int c, snlflg, nlflg, t, smode, m, ssmode, peekc; smode = nlflg = snlflg = ssmode = 0; if (argc>1) if (freopen(argv[1], "r", stdin) == NULL) { fprintf(stderr, "%s?\n", argv[1]); return(1); } if (argc>2) if (freopen(argv[2], "w", stdout) == NULL) { fprintf(stderr, "%s?\n", argv[2]); return(1); } if ((obuf = fopen("cvopt.tmp", "w")) == NULL) { fprintf(stderr, "cvopt.tmp?\n"); exit(1); } curbuf = obuf; loop: c = getchar(); if (c!='\n' && c!='\t') nlflg = 0; if (ssmode!=0 && c!='%') { ssmode = 0; curbuf = stdout; fprintf(curbuf, "L%d:<", labno++); } switch(c) { case EOF: fprintf(obuf, "0\n"); fclose(obuf); fprintf(stdout, ".even\n"); if (freopen("cvopt.tmp", "r", stdin) == NULL) { fprintf(stderr, "tmp?\n"); exit(1); } while ((c = getchar()) != EOF) putchar(c); unlink("cvopt.tmp"); return(0); case ':': if (!smode) fprintf(curbuf, "=.+2; 0"); else put(':'); goto loop; case 'A': if ((c=getchar())=='1' || c=='2') { put(c+'A'-'1'); goto loop; } put('O'); ungetc(c, stdin); goto loop; case 'B': switch (getchar()) { case '1': put('C'); goto loop; case '2': put('D'); goto loop; case 'E': put('L'); goto loop; case 'F': put('P'); goto loop; } put('?'); goto loop; case 'C': put(getchar()+'E'-'1'); goto loop; case 'F': put('G'); goto subtre; case 'R': if ((c=getchar()) == '1') put('J'); else { put('I'); ungetc(c, stdin); } goto loop; case 'H': put('H'); goto subtre; case 'I': put('M'); goto loop; case 'S': put('K'); subtre: snlflg = 1; t = 'A'; l1: switch (c=getchar()) { case '*': t++; goto l1; case 'S': t =+ 2; goto l1; case 'C': t =+ 4; goto l1; case '1': t =+ 8; goto l1; case '2': t =+ 16; goto l1; } ungetc(c, stdin); put(t); goto loop; case '#': if(getchar()=='1') put('#'); else put('"'); goto loop; case '%': if (smode) curbuf = obuf; if (ssmode==0) { if ((peekc=getchar())=='[') { curbuf = stdout; while((c=getchar())!=']') put(c); getchar(); fprintf(curbuf, ";"); curbuf = obuf; goto loop; } ungetc(peekc, stdin); } loop1: switch (c=getchar()) { case ' ': case '\t': goto loop1; case 'a': m = 16; t = flag(); goto pf; case ',': put(';'); goto loop1; case 'i': m = 12; t = flag(); goto pf; case 'z': m = 4; t = flag(); goto pf; case 'r': m = 9; t = flag(); goto pf; case '1': m = 5; t = flag(); goto pf; case 'c': t = 0; m = 8; goto pf; case 'e': t = flag(); m = 20; goto pf; case 'n': t = flag(); m = 63; pf: if ((c=getchar())=='*') m =+ 0100; else ungetc(c, stdin); fprintf(curbuf, ".byte %o,%o", m, t); goto loop1; case '[': fprintf(curbuf, "L%d=", labno++); while ((c=getchar())!=']') put(c); ssmode = 0; smode = 0; goto loop; case '\n': fprintf(curbuf, "\nL%d\n", labno); ssmode = 1; nlflg = 1; smode = 1; goto loop; } put(c); goto loop1; case '\t': if (nlflg) { nlflg = 0; goto loop; } if (smode) { tabflg++; goto loop; } put('\t'); goto loop; case '\n': if (!smode) { put('\n'); goto loop; } if (nlflg) { nlflg = 0; fprintf(curbuf, "\\0>\n"); curbuf = obuf; smode = 0; goto loop; } if (!snlflg) fprintf(curbuf, "\\n"); snlflg = 0; fprintf(curbuf, ">\n<"); nlflg = 1; goto loop; case 'X': case 'Y': case 'T': snlflg++; } put(c); goto loop; } flag() { register c, f; f = 0; l1: switch(c=getchar()) { case 'w': f = 1; goto l1; case 'i': f = 2; goto l1; case 'b': f = 3; goto l1; case 'f': f = 4; goto l1; case 'd': f = 5; goto l1; case 'u': f = 9; goto l1; case 's': f = 6; goto l1; case 'l': f = 8; goto l1; case 'p': f =+ 16; goto l1; } ungetc(c, stdin); return(f); } put(c) { if (tabflg) { tabflg = 0; fprintf(curbuf, ">;.byte %o;<", c+0200); } else putc(c, curbuf); } '!kUD2/ ?rr ((/ / c code tables-- compile to register / .globl _regtab .data _regtab=. 106.; cr106 30.; cr70 31.; cr70 32.; cr32 33.; cr32 37.; cr37 38.; cr37 98.; cr100 99.; cr100 80.; cr80 40.; cr40 41.; cr40 / - like + 42.; cr42 43.; cr43 14.; cr43 44.; cr43 45.; cr45 46.; cr40 55.; cr40 48.; cr40 49.; cr49 70.; cr70 71.; cr70 72.; cr72 73.; cr73 74.; cr74 75.; cr75 76.; cr72 78.; cr70 85.; cr70 79.; cr79 102.; cr102 51.; cr51 52.; cr52 56.; cr56 57.; cr57 58.; cr58 59.; cr59 91.; cr91 82.; cr82 83.; cr82 84.; cr82 86.; cr86 87.; cr86 88.; cr86 16.; cr16 92.; cr92 17.; cr43 18.; cr74 109.; cr109 0 .text / goto cr102: %a,n jmp A1 %n*,n F* jmp #1(R) / call cr100: %a,n jsr pc,IA1 %n*,n F* jsr pc,#1(R) %n,n F jsr pc,(R) / addressible cr106: %z,n clr R %zf,n clrf R %a,n %ad,n movB1 A1,R %af,n movof A1,R %n*,n %nd*,n F* movB1 #1(R),R %nf*,n F* movof #1(R),R %al,n mov A1+,R+ mov A1,R %nl*,n F* mov #1+2(R),R+ mov #1(R),R %n,n F / ++,-- postfix cr32: %a,1 movB1 A1',R I'B1 A1'' %aw,n mov A1',R I A2,A1'' %e*,1 F1* movB1 #1(R1),R I'B1 #1(R1) %n*,1 F* movB1 #1(R),-(sp) I'B1 #1(R) movB1 (sp)+,R %ew*,n F1* mov #1(R1),R I A2,#1(R1) %nw*,n F* mov #1(R),-(sp) I A2,#1(R) mov (sp)+,R %al,1 F I $1,A1+ V A1 %el*,1 F1* mov #1+2(R1),R+ mov #1(R1),R I $1,#1+2(R1) V #1(R1) %nl*,1 F* mov #1+2(R),-(sp) mov #1(R),-(sp) I $1,#1+2(R) V #1(R) mov (sp)+,R mov (sp)+,R+ / - unary, ~ cr37: %n,n %nf,n F IBF R %nl,n F I R I R+ V R / = cr80: %a,n %ad,nf S movB1 R,A1 %af,nf S movfo R,A1 %nd*,af F* S movf R,#1(R) %n*,aw F* movB1 A2,#1(R) movB1 #1(R),R %nf*,af F* S movfo R,#1(R) %n*,e F* S1 movB1 R1,#1(R) movB1 R1,R %ed*,nf S F1* movf R,#1(R1) %ef*,nf S F1* movfo R,#1(R1) %n*,n %nd*,nf FS* S movB1 R,*(sp)+ %nf*,nf FS* S movfo R,*(sp)+ %al,nl S mov R+,A1+ mov R,A1 %el*,nl S F1* mov R+,2+#1(R1) mov R,#1(R1) %nl*,nl FS* S mov R,*(sp) add $2,(sp) mov R+,*(sp)+ / field assign, value in reg. cr16: %a,n S bicB1 Z,A1' bisB1 R,A1'' %e*,n % [fas1] %n*,n SS F* bicB1 Z,#1(R) bisB1 (sp),#1(R) mov (sp)+,R / +, -, |, &~, << cr40: %n,z F %n,1 F I' R %[add1:] %n,aw %nf,ad F IB2 A2,R %[add2:] %n,ew* %nf,ed* F S1* IB2 #2(R1),R %[add3:] %n,e %nf,ef F S1 IBF R1,R %[add4:] %n,nw* %nf,nd* SS* F IB2 *(sp)+,R %[add5:] %n,n %nf,nf SS F IBF (sp)+,R %nl,c %nl,au F I A2,R+ V R %nl,eu F S1 I R1,R+ V R %nl,al F I A2,R I A2+,R+ V R %[addl1:] %nl,el F S1 I R1+,R+ V R I R1,R %[addl2:] %nl,nl SS F I (sp)+,R I (sp)+,R+ V R / ^ -- xor cr49: %n,e % [add3] %n,n FS S xor R,(sp) mov (sp)+,R %nl,el % [addl1] %nl,nl SS F I R,(sp) mov (sp)+,R I R+,(sp) mov (sp)+,R+ / >> (all complicated cases taken care of by << -) cr45: %n,1 F asr R / * -- R must be odd on integers cr42: %n,aw %nf,ad % [add1] %n,ew* %nf,ed* % [add2] %n,e %nf,ef % [add3] %n,n %nf,nf % [add5] / / R must be odd on integers cr43: %n,aw F T I A2,R- %n,ew* F T S1* I #2(R1),R- %n,e F T S1 I R1,R- %n,n SS F T I (sp)+,R- %nf,ad % [add1] %nf,ed* % [add2] %nf,ef % [add3] %nf,nf % [add5] / =+, =-, =|, =&~ cr70: %[addq1:] %aw,aw I A2,A1' mov A1'',R %[addq1a:] %a,aw %ad,ad movB1 A1',R IBF A2,R movB1 R,A1'' %[addq2:] %aw,nw* S* I #2(R),A1' mov A1'',R %[addq3:] %aw,n S I R,A1' mov A1'',R %[addq4:] %ew*,nw* S* F1* I #2(R),#1(R1) mov #1(R1),R %[addq4a:] %ad,ef movf A1',R S1 IBF R1,R movf R,A1'' %[addq5:] %a,n %ad,nf SS movB1 A1',R IBF (sp)+,R movB1 R,A1'' %[addq6:] %af,nf SS movof A1',R IBF (sp)+,R movfo R,A1'' %[addq7:] %ew*,n S F1* I R,#1(R1) mov #1(R1),R %[addq8:] %nw*,n SS F* I (sp)+,#1(R) mov #1(R),R %[addq9:] %n*,n FS* SS movB1 *2(sp),R IBF (sp)+,R movB1 R,*(sp)+ %[addq9a:] %nd*,nf SS F* movB1 #1(R),R IBF (sp)+,R movB1 R,#1(R) %[addq10:] %nf*,nf SS F* movof #1(R),R1 IBF (sp)+,R1 movfo R1,#1(R) movf R1,R %al,c I A2,A1+ V A1 F %al,al I A2+,A1+ V A1 I A2,A1 F %al,nl S I R+,A1+ V A1 I R,A1 F %nl*,c F* I A2,#1+2(R) V #1(R) mov #1+2(R),R+ mov #1(R),R %nl*,al F* I A2+,#1+2(R) V #1(R) I A2,#1(R) mov #1+2(R),R+ mov #1(R),R %nl*,nl SS F* I (sp)+,#1(R) I (sp)+,#1+2(R) V #1(R) mov #1+2(R),R+ mov #1(R),R / =*, =<< (for integer multiply, R must be odd) cr72: %a,aw %ad,ad % [addq1a] %ad,ef % [addq4a] %a,n %ad,nf % [addq5] %af,nf % [addq6] %n*,n % [addq9] %nd*,nf % [addq9a] %nf*,nf % [addq10] / =/ ; R must be odd on integers cr73: %a,aw movB1 A1',R V R- IBF A2,R- movB1 R-,A1'' %a,n SS movB1 A1',R V R- I (sp)+,R- movB1 R-,A1'' %e*,n SS F1* movB1 #1(R1),R V R- I (sp)+,R- movB1 R-,#1(R1) %n*,n FS* SS movB1 *2(sp),R V R- I (sp)+,R- movB1 R-,*(sp)+ %ad,ad % [addq1a] %ad,ef % [addq4a] %ad,nf % [addq5] %af,nf % [addq6] %nd*,nf % [addq9a] %nf*,nf % [addq10] / =mod; R must be odd on integers cr74: %a,aw movB1 A1',R V R- I A2,R- movB1 R,A1'' %a,n SS movB1 A1',R V R- I (sp)+,R- movB1 R,A1'' %e*,n SS F1* movB1 #1(R1),R V R- I (sp)+,R- movB1 R,#'!kA2/ ?rr1(R1) %n*,n FS* SS movB1 *2(sp),R V R- I (sp)+,R- mov R,*(sp)+ / =^ -- =xor cr79: %aw,n % [addq3] %ab,n SS movb A1',R xor R,(sp) mov (sp)+,R movb R,A1'' %n*,n FS* movB1 *(sp),-(sp) S xor R,(sp) movB1 (sp)+,R movB1 R,*(sp)+ / =>> (all complicated cases done by =<< -) cr75: %a,1 asrB1 A1' movB1 A1'',R %n*,1 F* asrB1 #1(R) movB1 #1(R),R / << for longs cr91: %nl,aw % [add1] %nl,ew* % [add2] %nl,e % [add3] %nl,nw* % [add4] %nl,n % [add5] / int -> float cr51: %aw,n movif A1,R %nw*,n F* movif #1(R),R %n,n F movif R,R / float, double -> int cr52: %nf,n F movfi R,R / double (float) to long cr56: %nf,n F setl movfi R,-(sp) mov (sp)+,R mov (sp)+,R+ seti / long to double cr57: %al,n setl movif A1,R seti %nl*,n F* setl movif #1(R),R seti %nl,n FS setl movif (sp)+,R seti / integer to long cr58: %eu,n F1! clr R %nu,n F mov R,R1 clr R %e,n F1! sxt R %n,n F mov R,R1 sxt R / long to integer cr59: %al,n mov A1+,R %nl*,n F* mov #1+2(R),R / *, /, remainder for longs. cr82: %nl,nl SS FS jsr pc,I add $10,sp / =*, =/, =rem for longs / Operands of the form &x op y, so stack space is known. cr86: %n,nl SS FS jsr pc,I add $6,sp / convert integer to character (sign extend) cr109: %n,n F movb R,R / / c code tables -- compile for side effects. / Also set condition codes properly (except for ++, --) / .globl _efftab .data _efftab=. 30.; ci70 31.; ci70 32.; ci70 33.; ci70 80.; ci80 70.; ci70 71.; ci70 / - like + 78.; ci78 79.; ci79 85.; ci78 75.; ci75 76.; ci76 16.; ci16 116.; ci116 0 .text / = ci80: %[move1:] %a,z %ad,zf I'B1 A1 %[move2:] %n*,z %nd*,zf F* I'B1 #1(R) %[move3:] %a,aw %ab,a IBE A2,A1 %[move4:] %ab,n* %a,nw* S* IBE #2(R),A1 %[move5:] %a,n S IB1 R,A1 %[move6:] %n*,aw %nb*,a F* IBE A2,#1(R) %[move7:] %n*,ew* %nb*,e* F* S1* IBE #2(R1),#1(R) %[move8:] %n*,e F* S1 IB1 R1,#1(R) %[move9:] %e*,nw* %eb*,n* S* F1* IBE #2(R),#1(R1) %[move10:] %e*,n S F1* IB1 R,#1(R1) %[move11:] %n*,nw* %nb*,n* FS* S* IBE #2(R),*(sp)+ %[move12:] %n*,n FS* S IB1 R,*(sp)+ %aw,nf S movfi R,A1 %ew*,nf S F1* movfi R,#1(R1) %al,z clr A1 clr A1+ %nl*,z F* clr #1(R) clr 2+#1(R) %[move13a:] %al,aw I A2,A1+ V A1 %al,nw* S* mov #2(R),A1+ V A1 %al,n S mov R,A1+ V A1 %al,nf S setl movfi R,A1 seti %el*,nf S F1* setl movfi R,#1(R1) seti %[move13:] %al,al I A2,A1 I A2+,A1+ V A1 %[move14:] %al,nl* S* I #2(R),A1 I #2+2(R),A1+ V A1 %[move15:] %al,nl S I R,A1 I R+,A1+ V A1 %[move14a:] %nl*,aw F* I A2,#1+2(R) V #1(R) %[move16a:] %nl*,al F* I A2+,#1+2(R) V #1(R) I A2,#1(R) %[move16:] %el*,nl S F1* I R+,#1+2(R1) V #1(R1) I R,#1(R1) %nl*,n SS F* mov (sp)+,#1+2(R) V #1(R) %[move17:] %nl*,nl SS F* I (sp)+,#1(R) I (sp)+,#1+2(R) V #1(R) / =| and =& ~ ci78: %a,aw %ab,a % [move3] %a,n % [move5] %n*,aw %nb*,a % [move6] %n*,ew* %nb*,e* % [move7] %n*,e % [move8] %e*,nw* %eb*,n* % [move9] %e*,n % [move10] %n*,nw* %nb*,n* % [move11] %n*,n % [move12] %al,c %al,au % [move13a] %al,al % [move13] %al,nl* % [move14] %al,nl % [move15] %nl*,c % [move14a] %nl*,al % [move16a] %el*,nl % [move16] %nl*,nl % [move17] / =^ ci79: %al,nl % [move15] %el*,nl % [move16] %nl*,nl FS* S I R,*(sp) mov (sp)+,R I R+,2(R) / =+ ci70: %n*,z %a,z %a,1 I'B1 A1 %aw,aw % [move3] %aw,nw* % [move4] %aw,n % [move5] %n*,1 % [move2] %ew*,nw* % [move9] %a,nw* S* movB1 A1',R1 I #2(R),R1 movB1 R1,A1'' %a,n S movB1 A1',R1 I R,R1 movB1 R1,A1'' %ew*,n % [move10] %nw*,n % [move12] %n*,n SS F* movB1 #1(R),R1 I (sp)+,R1 movB1 R1,#1(R) %al,c %al,au % [move13a] %al,al % [move13] %al,nl* % [move14] %al,nl % [move15] %nl*,c %nl*,au % [move14a] %nl*,al % [move16a] %el*,nl % [move16] %nl*,nl % [move17] / =>> (all harder cases handled by =<< -) ci75: %a,1 asrB1 A1 %n*,1 F* asrB1 #1(R) / =<< ci76: %a,1 aslB1 A1 %n*,1 F* aslB1 #1(R) %r,aw ash A2,A1 %r,nw* S* ash #2(R),A1 %r,n S ash R,A1 / =<< for longs cr92: %al,aw F ashc A2,R mov R,A1 mov R+,A1+ %al,n SS F ashc (sp)+,R mov R,A1 mov R+,A1+ %nl*,n FS* SS mov 2(sp),R mov 2(R),R+ mov (R),R ashc (sp)+,R mov R,*(sp) add $2,(sp) mov R+,*(sp)+ / field = ... ci16: %a,a bicB1 Z,A1' bisB1 A2,A1'' %a,n S bicB1 Z,A1' bisB1 R,A1'' %n*,a F* bicB1 Z,#1(R) bisB1 A2,#1(R) %[fas1:] %e*,n S F1* bicB1 Z,#1(R1) bisB1 R,#1(R1) %n*,e F* S1 bicB1 Z,#1(R) bisB1 R1,#1(R) %n*,n SS F* bicB1 Z,#1(R) bisB1 (sp)+,#1(R) / / c code tables-- set condition codes / .globl _cctab .data _cctab=((. 106.; cc60 28.; rest 55.; rest 34.; rest 35.; rest 36.; rest 37.; rest 40.; rest 41.; rest 42.; rest 43.; rest 81.; cc81 / & as in "if ((a&b)==0)" 48.; rest 60.; cc60 61.; cc60 62.; cc60 63.; cc60 64.; cc60 65.; cc60 66.; cc60 67.; cc60 68.; cc60 69.; cc60 72.; rest 73.; rest 79.; rest 0 .text / relationals cc60: %a,z %ad,zf % [move1] %af,z movof A1,R %n*,z %nd*,zf % [move2] %nf*,z F* movof #1(R),R %n,z %nf,zf FC %aw,aw %ab,ab % [move3] %nw*,aw %nb*,ab % [move6] %n,aw %nf,ad % [add1] %nw*,ew* %nb*,eb* % [move7] %nw*,e % [move8] %n,ew* %nf,ed* % [add2] %n,e %nf,ef % [add3] %nw*,nw* %nb*,nb* % [move11] %nw*,n % [move12] %n,n %nf,nf % [add5] %al,z tst A1 X0 tst A1+ X1 %al,c %al,au tst A1 X0 cmp A1+,A2 X1 %[lcmp1:] %al,al I A1,A2 X0 I A1+,A2+ X1 %nl*,z F* tst #1(R) X0 tst #1+2(R) X1 %nl*,c %nl*,au F* tst #1(R) X0 cmp #1+2(R),A2 X1 %[lcmp2:] %nl*,al F* I #1(R),A2 X0 I #1+2(R),A2+ X1 %nl,z F tst R X0 tst R+ X1 %nl,c %nl,au F tst R X0 cmp R+,A2 X1 %[lcmp3:] %nl,al F I R,A2 X0 I R+,A2+ X1 %[lcmp4:] %nl*,el* F* S1* I #1(R),#2(R1) X0 I #1+2(R),#2+2(R1) X1 %[lcmp5:] %nl,el* F S1* I R,#2(R1) X0 I R+,#2+2(R1) X1 %[lcmp6:] %nl,nl FS S mov R,-(sp) mov 4(sp),R mov (sp)+,2(sp) I (sp)+,(sp)+ X0 I R,R+ X1 / & as in "if ((a&b) ==0)" cc81: %a,a % [move3] %n*,a % [move6] %n,a % [add1] %n,e % [add3] %n,n % [add5] %al,c %al,au /bit $0,A1 /X0 bit A2,A1+ X1 %nl*,c %nl*,au F* /bit $0,#2(R) /X0 bit A2,#2+2(R) X1 %al,al % [lcmp1] %nl*,al % [lcmp2] %nl,al % [lcmp3] %nl*,el* % [lcmp4] %nl,el* % [lcmp5] %nl,nl % [lcmp6] %nl,c %nl,au F /bit $0,R /X0 bit A2,R+ X1 / set codes right rest: %n,n %nf,nf H / / c code tables-- expression to -(sp) / .globl _sptab .data _sptab=. 106.; cs106 40.; cs40 41.; cs40 55.; cs40 48.; cs40 58.; cs58 56.; cs56 0 .text / name cs106: %z,n %zf,n clrB1 -(sp) %aw,n mov A1,-(sp) %nw*,n F* mov #1(R),-(sp) %al,n mov A1+,-(sp) mov A1,-(sp) / +, -, |, &~ cs40: %a,1 FS I' (sp) %a,aw FS I A2,(sp) %a,nw* FS S* I #2(R),(sp) %a,n FS S I R,(sp) / integer to long cs58: %nu,n FS clr -(sp) %n,n FS sxt -(sp) / float to long cs56: %nf,n F setl movfi R,-(sp) seti / setup for structure assign ci116: %n,e F! S1! %n,n SS F! mov (sp)+,r1 '"kᴁ0ILORUX[^adgpp # /* * C object code improver-- second part */ #include "c2.h" rmove() { register struct node *p; register int r; register r1, flt; for (p=first.forw; p!=0; p = p->forw) { flt = 0; switch (p->op) { case MOVF: case MOVFO: case MOVOF: flt = NREG; case MOV: if (p->subop==BYTE) goto dble; dualop(p); if ((r = findrand(regs[RT1], flt)) >= 0) { if (r == flt+isreg(regs[RT2]) && p->forw->op!=CBR && p->forw->op!=SXT && p->forw->op!=CFCC) { p->forw->back = p->back; p->back->forw = p->forw; redunm++; continue; } } if (equstr(regs[RT1], "$0")) { p->op = CLR; strcpy(regs[RT1], regs[RT2]); regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); goto sngl; } repladdr(p, 0, flt); r = isreg(regs[RT1]); r1 = isreg(regs[RT2]); dest(regs[RT2], flt); if (r >= 0) if (r1 >= 0) savereg(r1+flt, regs[r+flt]); else savereg(r+flt, regs[RT2]); else if (r1 >= 0) savereg(r1+flt, regs[RT1]); else setcon(regs[RT1], regs[RT2]); source(regs[RT1]); setcc(regs[RT2]); continue; case ADDF: case SUBF: case DIVF: case MULF: flt = NREG; goto dble; case ADD: case SUB: case BIC: case BIS: case MUL: case DIV: case ASH: dble: dualop(p); if (p->op==BIC && (equstr(regs[RT1], "$-1") || equstr(regs[RT1], "$177777"))) { p->op = CLR; strcpy(regs[RT1], regs[RT2]); regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); goto sngl; } if ((p->op==BIC || p->op==BIS) && equstr(regs[RT1], "$0")) { if (p->forw->op!=CBR) { p->back->forw = p->forw; p->forw->back = p->back; continue; } } repladdr(p, 0, flt); source(regs[RT1]); dest(regs[RT2], flt); if (p->op==DIV && (r = isreg(regs[RT2])>=0)) regs[r+1][0] = 0; ccloc[0] = 0; continue; case CLRF: case NEGF: flt = NREG; case CLR: case COM: case INC: case DEC: case NEG: case ASR: case ASL: case SXT: singop(p); sngl: dest(regs[RT1], flt); if (p->op==CLR && flt==0) if ((r = isreg(regs[RT1])) >= 0) savereg(r, "$0"); else setcon("$0", regs[RT1]); ccloc[0] = 0; continue; case TSTF: flt = NREG; case TST: singop(p); repladdr(p, 0, flt); source(regs[RT1]); if (equstr(regs[RT1], ccloc)) { p->back->forw = p->forw; p->forw->back = p->back; p = p->back; nrtst++; nchange++; } continue; case CMPF: flt = NREG; case CMP: case BIT: dualop(p); source(regs[RT1]); source(regs[RT2]); if(p->op==BIT) { if (equstr(regs[RT1], "$-1") || equstr(regs[RT1], "$177777")) { p->op = TST; strcpy(regs[RT1], regs[RT2]); regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); nchange++; nsaddr++; } else if (equstr(regs[RT2], "$-1") || equstr(regs[RT2], "$177777")) { p->op = TST; regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); nchange++; nsaddr++; } if (equstr(regs[RT1], "$0")) { p->op = TST; regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); nchange++; nsaddr++; } else if (equstr(regs[RT2], "$0")) { p->op = TST; strcpy(regs[RT1], regs[RT2]); regs[RT2][0] = 0; p->code = copy(1, regs[RT1]); nchange++; nsaddr++; } } repladdr(p, 1, flt); ccloc[0] = 0; continue; case CBR: if (p->back->op==TST || p->back->op==CMP) { if (p->back->op==TST) { singop(p->back); savereg(RT2, "$0"); } else dualop(p->back); r = compare(p->subop, findcon(RT1), findcon(RT2)); if (r==0) { p->back->back->forw = p->forw; p->forw->back = p->back->back; decref(p->ref); p = p->back->back; nchange++; } else if (r>0) { p->op = JBR; p->subop = 0; p->back->back->forw = p; p->back = p->back->back; p = p->back; nchange++; } } case CFCC: ccloc[0] = 0; continue; case JBR: redunbr(p); default: clearreg(); } } } jumpsw() { register struct node *p, *p1; register t; register struct node *tp; int nj; t = 0; nj = 0; for (p=first.forw; p!=0; p = p->forw) p->refc = ++t; for (p=first.forw; p!=0; p = p1) { p1 = p->forw; if (p->op == CBR && p1->op==JBR && p->ref && p1->ref && abs(p->refc - p->ref->refc) > abs(p1->refc - p1->ref->refc)) { if (p->ref==p1->ref) continue; p->subop = revbr[p->subop]; tp = p1->ref; p1->ref = p->ref; p->ref = tp; t = p1->labno; p1->labno = p->labno; p->labno = t; nrevbr++; nj++; } } return(nj); } addsob() { register struct node *p, *p1; for (p = &first; (p1 = p->forw)!=0; p = p1) { if (p->op==DEC && isreg(p->code)>=0 && p1->op==CBR && p1->subop==JNE) { if (p->refc < p1->ref->refc) continue; if (toofar(p1)) continue; p->labno = p1->labno; p->op = SOB; p->subop = 0; p1->forw->back = p; p->forw = p1->forw; nsob++; } } } toofar(p) struct node *p; { register struct node *p1; int len; len = 0; for (p1 = p->ref; p1 && p1!=p; p1 = p1->forw) len += ilen(p1); if (len < 128) return(0); return(1); } ilen(p) register struct node *p; { register l; switch (p->op) { case LABEL: case DLABEL: case TEXT: case EROU: case EVEN: return(0); '"kXᴁ0ILORUX[^adgppcase CBR: return(6); default: dualop(p); return(2 + adrlen(regs[RT1]) + adrlen(regs[RT2])); } } adrlen(s) register char *s; { if (*s == 0) return(0); if (*s=='r') return(0); if (*s=='(' && *(s+1)=='r') return(0); if (*s=='-' && *(s+1)=='(') return(0); return(2); } abs(x) { return(x<0? -x: x); } equop(ap1, p2) struct node *ap1, *p2; { register char *cp1, *cp2; register struct node *p1; p1 = ap1; if (p1->op!=p2->op || p1->subop!=p2->subop) return(0); if (p1->op>0 && p1->opcode; cp2 = p2->code; if (cp1==0 && cp2==0) return(1); if (cp1==0 || cp2==0) return(0); while (*cp1 == *cp2++) if (*cp1++ == 0) return(1); return(0); } decref(p) register struct node *p; { if (--p->refc <= 0) { nrlab++; p->back->forw = p->forw; p->forw->back = p->back; } } struct node * nonlab(p) struct node *p; { while (p && p->op==LABEL) p = p->forw; return(p); } char * alloc(n) register n; { register char *p; n++; n &= ~01; if (lasta+n >= lastr) { if (sbrk(2000) == (char *)-1) { fprintf(stderr, "C Optimizer: out of space\n"); exit(1); } lastr += 2000; } p = lasta; lasta += n; return(p); } clearreg() { register int i; for (i=0; i<2*NREG; i++) regs[i][0] = '\0'; conloc[0] = 0; ccloc[0] = 0; } savereg(ai, as) char *as; { register char *p, *s, *sp; sp = p = regs[ai]; s = as; if (source(s)) return; while (*p++ = *s) { if (s[0]=='(' && s[1]=='r' && s[2]<'5') { *sp = 0; return; } if (*s++ == ',') break; }(( *--p = '\0'; } dest(as, flt) char *as; { register char *s; register int i; s = as; source(s); if ((i = isreg(s)) >= 0) regs[i+flt][0] = 0; for (i=0; i= 0) regs[i][0] = 0; while (*s) { if ((*s=='(' && (*(s+1)!='r' || *(s+2)!='5')) || *s++=='*') { for (i=0; icode; p2 = regs[RT1]; while (*p2++ = *p1++); regs[RT2][0] = 0; } dualop(ap) struct node *ap; { register char *p1, *p2; register struct node *p; p = ap; p1 = p->code; p2 = regs[RT1]; while (*p1 && *p1!=',') *p2++ = *p1++; *p2++ = 0; p2 = regs[RT2]; *p2 = 0; if (*p1++ !=',') return; while (*p2++ = *p1++); } findrand(as, flt) char *as; { register int i; for (i = flt; i='0' && s[1]<='4' && s[2]==0) return(s[1]-'0'); return(-1); } check() { register struct node *p, *lp; lp = &first; for (p=first.forw; p!=0; p = p->forw) { if (p->back != lp) abort(); lp = p; } } source(ap) char *ap; { register char *p1, *p2; p1 = ap; p2 = p1; if (*p1==0) return(0); while (*p2++); if (*p1=='-' && *(p1+1)=='(' || *p1=='*' && *(p1+1)=='-' && *(p1+2)=='(' || *(p2-2)=='+') { while (*p1 && *p1++!='r'); if (*p1>='0' && *p1<='4') regs[*p1 - '0'][0] = 0; return(1); } return(0); } repladdr(p, f, flt) struct node *p; { register r; int r1; register char *p1, *p2; static char rt1[50], rt2[50]; if (f) r1 = findrand(regs[RT2], flt); else r1 = -1; r = findrand(regs[RT1], flt); if (r1 >= NREG) r1 -= NREG; if (r >= NREG) r -= NREG; if (r>=0 || r1>=0) { p2 = regs[RT1]; for (p1 = rt1; *p1++ = *p2++;); if (regs[RT2][0]) { p1 = rt2; *p1++ = ','; for (p2 = regs[RT2]; *p1++ = *p2++;); } else rt2[0] = 0; if (r>=0) { rt1[0] = 'r'; rt1[1] = r + '0'; rt1[2] = 0; nsaddr++; } if (r1>=0) { rt2[1] = 'r'; rt2[2] = r1 + '0'; rt2[3] = 0; nsaddr++; } p->code = copy(2, rt1, rt2); } } movedat() { register struct node *p1, *p2; struct node *p3; register seg; struct node data; struct node *datp; if (first.forw == 0) return; if (lastseg != TEXT && lastseg != -1) { p1 = (struct node *)alloc(sizeof(first)); p1->op = lastseg; p1->subop = 0; p1->code = NULL; p1->forw = first.forw; p1->back = &first; first.forw->back = p1; first.forw = p1; } datp = &data; for (p1 = first.forw; p1!=0; p1 = p1->forw) { if (p1->op == DATA) { p2 = p1->forw; while (p2 && p2->op!=TEXT) p2 = p2->forw; if (p2==0) break; p3 = p1->back; p1->back->forw = p2->forw; p2->forw->back = p3; p2->forw = 0; datp->forw = p1; p1->back = datp; p1 = p3; datp = p2; } } if (data.forw) { datp->forw = first.forw; first.forw->back = datp; data.forw->back = &first; first.forw = data.forw; } seg = lastseg; for (p1 = first.forw; p1!=0; p1 = p1->forw) { if (p1->op==TEXT||p1->op==DATA||p1->op==BSS) { if (p2 = p1->forw) { if (p2->op==TEXT||p2->op==DATA||p2->op==BSS) p1->op = p2->op; } if (p1->op == seg || p1->forw&&p1->forw->op==seg) { p1->back->forw = p1->forw; p1->forw->back = p1->back; p1 = p1->back; continue; } seg = p1->op; } } } redunbr(p) register struct node *p; { register struct node *p1; register char *ap1; char *ap2; if ((p1 = p->ref) == 0) return; p1 = nonlab(p1); if (p1->op==TST) { singop(p1); savereg(RT2, "$0"); } else if (p1->op==CMP) dualop(p1); else return; if (p1->forw->op!=CBR) return; ap1 = findcon(RT1); ap2 = findcon(RT2); p1 = p1->forw; if (compare(p1->subop, ap1, ap2)>0) { nredunj++; nchange++; decref(p->ref); p->ref = p1->ref; p->labno = p1->labno; p->ref->refc++; } } char * findcon(i) { register char *p; register r; p = regs[i]; if (*p=='$') return(p); if ((r = isreg(p)) >= 0) return(regs[r]); if (equstr(p, conloc)) return(conval); return(p); } compare(oper, cp1, cp2) register char *cp1, *cp2; { register unsigned n1, n2; if (*cp1++ != '$' || *cp2++ != '$') return(-1); n1 = 0; while (*cp2 >= '0' && *cp2 <= '7') { n1 <<= 3; n1 += *cp2++ - '0'; } n2 = n1; n1 = 0; while (*cp1 >= '0' && *cp1 <= '7') { n1 <<= 3; n1 += *cp1++ - '0'; } if (*cp1=='+') cp1++; if (*cp2=='+') cp2++; do { if (*cp1++ != *cp2) return(-1); } while (*cp2++); switch(oper) { case JEQ: return(n1 == n2); case JNE: return(n1 != n2); case JLE: return((int)n1 <= (int)n2); case JGE: return((int)n1 >= (int)n2); case JLT: return((int)n1 < (int)n2); case JGT: return((int)n1 > (int)n2); case JLO: return(n1 < n2); case JHI: return(n1 > n2); case JLOS: return(n1 <= n2); case JHIS: return(n1 >= n2); } return(-1); } setcon(ar1, ar2) char *ar1, *ar2; { register char *cl, *cv, *p; cl = ar2; cv = ar1; if (*cv != '$') return; if (!natural(cl)) return; p = conloc; while (*p++ = *cl++); p = conval; while (*p++ = *cv++); } equstr(ap1, ap2) char *ap1, *ap2; { char *p1, *p2; p1 = ap1; p2 = ap2; do { if (*p1++ != *p2) return(0); } while (*p2++); return(1); } setcc(ap) char *ap; { register char *p, *p1; p = ap; if (!natural(p)) { ccloc[0] = 0; return; } p1 = ccloc; while (*p1++ = *p++); } natural(ap) char *ap; { register char *p; p = ap; if (*p=='*' || *p=='(' || *p=='-'&&*(p+1)=='(') return(0); while (*p++); p--; if (*--p == '+' || *p ==')' && *--p != '5') return(0); return(1); } '#ky0  nnn # /* * C object code improver */ #include "c2.h" struct optab optab[] { "jbr", JBR, "jeq", CBR | JEQ<<8, "jne", CBR | JNE<<8, "jle", CBR | JLE<<8, "jge", CBR | JGE<<8, "jlt", CBR | JLT<<8, "jgt", CBR | JGT<<8, "jlo", CBR | JLO<<8, "jhi", CBR | JHI<<8, "jlos", CBR | JLOS<<8, "jhis", CBR | JHIS<<8, "jmp", JMP, ".globl",EROU, "mov", MOV, "clr", CLR, "com", COM, "inc", INC, "dec", DEC, "neg", NEG, "tst", TST, "asr", ASR, "asl", ASL, "sxt", SXT, "cmp", CMP, "add", ADD, "sub", SUB, "bit", BIT, "bic", BIC, "bis", BIS, "mul", MUL, "ash", ASH, "xor", XOR, ".text",TEXT, ".data",DATA, ".bss", BSS, ".even",EVEN, "movf", MOVF, "movof",MOVOF, "movfo",MOVFO, "addf", ADDF, "subf", SUBF, "divf", DIVF, "mulf", MULF, "clrf", CLRF, "cmpf", CMPF, "negf", NEGF, "tstf", TSTF, "cfcc", CFCC, "sob", SOB, "jsr", JSR, ".end", END, 0, 0}; char revbr[] { JNE, JEQ, JGT, JLT, JGE, JLE, JHIS, JLOS, JHI, JLO }; int isn = 20000; int lastseg = -1; main(argc, argv) char **argv; { register int niter, maxiter, isend; extern end; int nflag; if (argc>1 && argv[1][0]=='+') { argc--; argv++; debug++; } nflag = 0; if (argc>1 && argv[1][0]=='-') { argc--; argv++; nflag++; } if (argc>1) { if (freopen(argv[1], "r", stdin) == NULL) { fprintf(stderr, "C2: can't find %s\n", argv[1]); exit(1); } } if (argc>2) { if (freopen(argv[2], "w", stdout) == NULL) { fprintf(stderr, "C2: can't create %s\n", argv[2]); exit(1); } } lasta = firstr = lastr = sbrk(2); maxiter = 0; opsetup(); do { isend = input(); movedat(); niter = 0; do { refcount(); do { iterate(); clearreg(); niter++; } while (nchange); comjump(); rmove(); } while (nchange || jumpsw()); addsob(); output(); if (niter > maxiter) maxiter = niter; lasta = firstr; } while (isend); if (nflag) { fprintf(stderr, "%d iterations\n", maxiter); fprintf(stderr, "%d jumps to jumps\n", nbrbr); fprintf(stderr, "%d inst. after jumps\n", iaftbr); fprintf(stderr, "%d jumps to .+2\n", njp1); fprintf(stderr, "%d redundant labels\n", nrlab); fprintf(stderr, "%d cross-jumps\n", nxjump); fprintf(stderr, "%d code motions\n", ncmot); fprintf(stderr, "%d branches reversed\n", nrevbr); fprintf(stderr, "%d redundant moves\n", redunm); fprintf(stderr, "%d simplified addresses\n", nsaddr); fprintf(stderr, "%d loops inverted\n", loopiv); fprintf(stderr, "%d redundant jumps\n", nredunj); fprintf(stderr, "%d common seqs before jmp's\n", ncomj); fprintf(stderr, "%d skips over jumps\n", nskip); fprintf(stderr, "%d sob's added\n", nsob); fprintf(stderr, "%d redundant tst's\n", nrtst); fprintf(stderr, "%d literals eliminated\n", nlit); fprintf(stderr, "%dK core\n", (((int)lastr+01777)>>10)&077); } exit(0); } input() { register struct node *p, *lastp; register int oper; lastp = &first; for (;;) { oper = getline(); switch (oper&0377) { case LABEL: p = (struct node *)alloc(sizeof first); if (line[0] == 'L') { p->op = LABEL; p->subop = 0; p->labno = getnum(line+1); p->code = 0; } else { p->op = DLABEL; p->subop = 0; p->labno = 0; p->code = copy(1, line); } break; case JBR: case CBR: case JMP: case JSW: p = (struct node *)alloc(sizeof first); p->op = oper&0377; p->subop = oper>>8; if (*curlp=='L' && (p->labno = getnum(curlp+1))) p->code = 0; else { p->labno = 0; p->code = copy(1, curlp); } break; default: p = (struct node *)alloc(sizeof first); p->op = op((er&0377; p->subop = oper>>8; p->labno = 0; p->code = copy(1, curlp); break; } p->forw = 0; p->back = lastp; lastp->forw = p; lastp = p; p->ref = 0; if (oper==EROU) return(1); if (oper==END) return(0); } } getline() { register char *lp; register c; lp = line; while ((c = getchar())==' ' || c=='\t') ; do { if (c==':') { *lp++ = 0; return(LABEL); } if (c=='\n') { *lp++ = 0; return(oplook()); } if (lp >= &line[LSIZE-2]) { fprintf(stderr, "C2: Sorry, input line too long\n"); exit(1); } *lp++ = c; } while ((c = getchar()) != EOF); *lp++ = 0; return(END); } getnum(ap) char *ap; { register char *p; register n, c; p = ap; n = 0; while ((c = *p++) >= '0' && c <= '9') n = n*10 + c - '0'; if (*--p != 0) return(0); return(n); } output() { register struct node *t; register struct optab *oper; register int byte; t = &first; while (t = t->forw) switch (t->op) { case END: return; case LABEL: printf("L%d:", t->labno); continue; case DLABEL: printf("%s:", t->code); continue; case TEXT: case DATA: case BSS: lastseg = t->op; default: if ((byte = t->subop) == BYTE) t->subop = 0; for (oper = optab; oper->opstring!=0; oper++) if ((oper->opcode&0377) == t->op && (oper->opcode>>8) == t->subop) { printf("%s", oper->opstring); if (byte==BYTE) printf("b"); break; } if (t->code) { reducelit(t); printf("\t%s\n", t->code); } else if (t->op==JBR || t->op==CBR) printf("\tL%d\' #k0  nnnn", t->labno); else printf("\n"); continue; case JSW: printf("L%d\n", t->labno); continue; case SOB: printf("sob %s", t->code); if (t->labno) printf(",L%d", t->labno); printf("\n"); continue; case 0: if (t->code) printf("%s", t->code); printf("\n"); continue; } } /* * Notice addresses of the form * $xx,xx(r) * and replace them with (pc),xx(r) * -- Thanx and a tip of the Hatlo hat to Bliss-11. */ reducelit(at) struct node *at; { register char *c1, *c2; char *c2s; register struct node *t; t = at; if (*t->code != '$') return; c1 = t->code; while (*c1 != ',') if (*c1++ == '\0') return; c2s = c1; c1++; if (*c1=='*') c1++; c2 = t->code+1; while (*c1++ == *c2++); if (*--c1!='(' || *--c2!=',') return; t->code = copy(2, "(pc)", c2s); nlit++; } char * copy(na, ap) char *ap; { register char *p, *np; char *onp; register n; p = ap; n = 0; if (*p==0) return(0); do n++; while (*p++); if (na>1) { p = (&ap)[1]; while (*p++) n++; } onp = np = alloc(n); p = ap; while (*np++ = *p++) ; if (na>1) { p = (&ap)[1]; np--; while (*np++ = *p++); } return(onp); } opsetup() { register struct optab *optp, **ophp; register char *p; for (optp = optab; p = optp->opstring; optp++) { ophp = &ophash[(((p[0]<<3)+(p[1]<<1)+p[2])&077777) % OPHS]; while (*ophp++) if (ophp > &ophash[OPHS]) ophp = ophash; *--ophp = optp; } } oplook() { register struct optab *optp; register char *lp, *np; static char tmpop[32]; struct optab **ophp; if (line[0]=='\0') { curlp = line; return(0); } np = tmpop; for (lp = line; *lp && *lp!=' ' && *lp!='\t';) *np++ = *lp++; *np++ = 0; while (*lp=='\t' || *lp==' ') lp++; curlp = lp; ophp = &ophash[(((tmpop[0]<<3)+(tmpop[1]<<1)+tmpop[2])&077777) % OPHS]; while (optp = *ophp) { np = optp->opstring; lp = tmpop; while (*lp == *np++) if (*lp++ == 0) return(optp->opcode); if (*lp++=='b' && *lp++==0 && *--np==0) return(optp->opcode + (BYTE<<8)); ophp++; if (ophp >= &ophash[OPHS]) ophp = ophash; } if (line[0]=='L') { lp = &line[1]; while (*lp) if (*lp<'0' || *lp++>'9') return(0); curlp = line; return(JSW); } curlp = line; return(0); } refcount() { register struct node *p, *lp; static struct node *labhash[LABHS]; register struct node **hp, *tp; for (hp = labhash; hp < &labhash[LABHS];) *hp++ = 0; for (p = first.forw; p!=0; p = p->forw) if (p->op==LABEL) { labhash[p->labno % LABHS] = p; p->refc = 0; } for (p = first.forw; p!=0; p = p->forw) { if (p->op==JBR || p->op==CBR || p->op==JSW) { p->ref = 0; lp = labhash[p->labno % LABHS]; if (lp==0 || p->labno!=lp->labno) for (lp = first.forw; lp!=0; lp = lp->forw) { if (lp->op==LABEL && p->labno==lp->labno) break; } if (lp) { tp = nonlab(lp)->back; if (tp!=lp) { p->labno = tp->labno; lp = tp; } p->ref = lp; lp->refc++; } } } for (p = first.forw; p!=0; p = p->forw) if (p->op==LABEL && p->refc==0 && (lp = nonlab(p))->op && lp->op!=JSW) decref(p); } iterate() { register struct node *p, *rp, *p1; nchange = 0; for (p = first.forw; p!=0; p = p->forw) { if ((p->op==JBR||p->op==CBR||p->op==JSW) && p->ref) { rp = nonlab(p->ref); if (rp->op==JBR && rp->labno && p->labno!=rp->labno) { nbrbr++; p->labno = rp->labno; decref(p->ref); rp->ref->refc++; p->ref = rp->ref; nchange++; } } if (p->op==CBR && (p1 = p->forw)->op==JBR) { rp = p->ref; do rp = rp->back; while (rp->op==LABEL); if (rp==p1) { decref(p->ref); p->ref = p1->ref; p->labno = p1->labno; p1->forw->back = p; p->forw = p1->forw; p->subop = revbr[p->subop]; nchange++; nskip++; } } if (p->op==JBR || p->op==JMP) { while (p->forw && p->forw->op!=LABEL && p->forw->op!=DLABEL && p->forw->op!=EROU && p->forw->op!=END && p->forw->op!=0 && p->forw->op!=DATA) { nchange++; iaftbr++; if (p->forw->ref) decref(p->forw->ref); p->forw = p->forw->forw; p->forw->back = p; } rp = p->forw; while (rp && rp->op==LABEL) { if (p->ref == rp) { p->back->forw = p->forw; p->forw->back = p->back; p = p->back; decref(rp); nchange++; njp1++; break; } rp = rp->forw; } } if (p->op==JBR || p->op==JMP) { xjump(p); p = codemove(p); } } } xjump(p1) register struct node *p1; { register struct node *p2, *p3; if ((p2 = p1->ref)==0) return; for (;;) { while ((p1 = p1->back) && p1->op==LABEL); while ((p2 = p2->back) && p2->op==LABEL); if (!equop(p1, p2) || p1==p2) return; p3 = insertl(p2); p1->op = JBR; p1->subop = 0; p1->ref = p3; p1->labno = p3->labno; p1->code = 0; nxjump++; nchange++; } } struct node * insertl(oldp) register struct node *oldp; { register struct node *lp; if (oldp->op == LABEL) { oldp->refc++; return(oldp); } if (oldp->back->op == LABEL) { oldp = oldp->back; oldp->refc++; return(oldp); } lp = (struct node *)alloc(sizeof first); lp->op = LABEL; lp->subop = 0; lp->labno = isn++; lp->ref = 0; lp->code = 0; lp->refc = 1; lp->back = oldp->back; lp->forw = oldp; oldp->back->forw = lp; oldp->back = lp; return(lp); } struct node * codemove(p) struct node *p; { register struct node *p1, *p2, *p3; struct node *t, *tl; int n; p1 = p; if (p1->op!=JBR || (p2 = p1->ref)==0) return(p1); while (p2->op == LABEL) if ((p2 = p2->back) == 0) return(p1); if (p2->op!=JBR && p2->op!=JMP) goto ivloop; p2 = p2->forw; p3 = p1->ref; while (p3) { if (p3->op==JBR || p3->op==JMP) { if (p1==p3) return(p1); ncmot++; nchange++; p1->back->forw = p2; p1->forw->back = p3; p2->back->forw = p3->forw; p3->forw->back = p2->back; p2->back = p1->back; p3->forw = p1->forw; decref(p1->ref); return(p2); } else p3 = p3->forw; } return(p1); ivloop: if (p1->forw->op!=LABEL) return(p1); p3 = p2 = p2->forw; n = 16; do { if ((p3 = p3->forw) == 0 || p3==p1 || --n==0) return(p1); } while (p3->op!=CBR || p3->labno!=p1->forw->labno); do if ((p1 = p1->back) == 0) return(p); while (p1!=p3); p1 = p; tl = insertl(p1); p3->subop = revbr[p3->subop]; decref(p3->ref); p2->back->forw = p1; p3->forw->back = p1; p1->back->forw = p2; p1->forw->back = p3; t = p1->back; p1->back = p2->back; p2->back = t; t = p1->forw; p1->forw = p3->forw; p3->forw = t; p2 = insertl(p1->forw); p3->labno = p2->labno; p3->ref = p2; decref(tl); if (tl->refc<=0) nrlab--; loopiv++; nchange++; return(p3); } comjump() { register struct node *p1, *p2, *p3; for (p1 = first.forw; p1!=0; p1 = p1->forw) if (p1->op==JBR && (p2 = p1->ref) && p2->refc > 1) for (p3 = p1->forw; p3!=0; p3 = p3->forw) if (p3->op==JBR && p3->ref == p2) backjmp(p1, p3); } backjmp(ap1, ap2) struct node *ap1, *ap2; { register struct node *p1, *p2, *p3; p1 = ap1; p2 = ap2; for(;;) { while ((p1 = p1->back) && p1->op==LABEL); p2 = p2->back; if (equop(p1, p2)) { p3 = insertl(p1); p2->back->forw = p2->forw; p2->forw->back = p2->back; p2 = p2->forw; decref(p2->ref); p2->labno = p3->labno; p2->ref = p3; nchange++; ncomj++; } else return; } } '$kдFiFi ((/* * Header for object code improver */ #include #define JBR 1 #define CBR 2 #define JMP 3 #define LABEL 4 #define DLABEL 5 #define EROU 7 #define JSW 9 #define MOV 10 #define CLR 11 #define COM 12 #define INC 13 #define DEC 14 #define NEG 15 #define TST 16 #define ASR 17 #define ASL 18 #define SXT 19 #define CMP 20 #define ADD 21 #define SUB 22 #define BIT 23 #define BIC 24 #define BIS 25 #define MUL 26 #define DIV 27 #define ASH 28 #define XOR 29 #define TEXT 30 #define DATA 31 #define BSS 32 #define EVEN 33 #define MOVF 34 #define MOVOF 35 #define MOVFO 36 #define ADDF 37 #define SUBF 38 #define DIVF 39 #define MULF 40 #define CLRF 41 #define CMPF 42 #define NEGF 43 #define TSTF 44 #define CFCC 45 #define SOB 46 #define JSR 47 #define END 48 #define JEQ 0 #define JNE 1 #define JLE 2 #define JGE 3 #define JLT 4 #define JGT 5 #define JLO 6 #define JHI 7 #define JLOS 8 #define JHIS 9 #define BYTE 100 #define LSIZE 512 struct node { char op; char subop; struct node *forw; struct node *back; struct node *ref; int labno; char *code; int refc; }; struct optab { char *opstring; int opcode; } optab[]; char line[LSIZE]; struct node first; char *curlp; int nbrbr; int nsaddr; int redunm; int iaftbr; int njp1; int nrlab; int nxjump; int ncmot; int nrevbr; int loopiv; int nredunj; int nskip; int ncomj; int nsob; int nrtst; int nlit; int nchange; int isn; int debug; int lastseg; char *lasta; char *lastr; char *firstr; char revbr[]; char regs[12][20]; char conloc[20]; char conval[20]; char ccloc[20]; #define RT1 10 #define RT2 11 #define FREG 5 #define NREG 5 #define LABHS 127 #define OPHS 57 struct optab *ophash[OPHS]; struct node *nonlab(); char *copy(); char *sbrk(); char *findcon(); struct node *insertl(); struct node *codemove(); char *sbrk(); char *alloc(); ' %k{(EiEi /* * C second pass -- tables */ #include "c1.h" /* * Operator dope table-- see description in c0. */ int opdope[] { 000000, /* EOFC */ 000000, /* ; */ 000000, /* { */ 000000, /* } */ 036000, /* [ */ 002000, /* ] */ 036000, /* ( */ 002000, /* ) */ 014201, /* : */ 007001, /* , */ 000000, /* field selection */ 000000, /* reverse field selection */ 000001, /* temporary field selection */ 000001, /* int->ptr */ 000001, /* ptr->int */ 000001, /* long->ptr */ 000001, /* field assignment */ 000001, /* >> unsigned */ 000001, /* >> unsigned */ 000000, /* 19 */ 000400, /* name */ 000400, /* short constant */ 000400, /* string */ 000400, /* float */ 000400, /* double */ 0000400, /* long const */ 000400, /* long const <= 16 bits */ 000400, /* autoi, *r++ */ 000400, /* autod, *--r */ 000000, /* 29 */ 034203, /* ++pre */ 034203, /* --pre */ 034203, /* ++post */ 034203, /* --post */ 034220, /* !un */ 034202, /* &un */ 034220, /* *un */ 034200, /* -un */ 034220, /* ~un */ 036001, /* . (structure reference) */ 030101, /* + */ 030001, /* - */ 032101, /* * */ 032001, /* / */ 032001, /* % */ 026061, /* >> */ 026061, /* << */ 020161, /* & */ 016161, /* | */ 016161, /* ^ */ 036001, /* -> */ 001000, /* int -> double */ 001000, /* double -> int */ 000001, /* && */ 000001, /* || */ 030001, /* &~ */ 001000, /* double -> long */ 001000, /* long -> double */ 001000, /* integer -> long */ 000000, /* long -> integer */ 022005, /* == */ 022005, /* != */ 024005, /* <= */ 024005, /* < */ 024005, /* >= */ 024005, /* > */ 024005, /*

p */ 024005, /* >=p */ 012213, /* =+ */ 012213, /* =- */ 012213, /* =* */ 012213, /* =/ */ 012213, /* =% */ 012253, /* =>> */ 012253, /* =<< */ 012253, /* =& */ 012253, /* =| */ 012253, /* =^ */ 012213, /* = */ 030001, /* & for tests */ 032001, /* * (long) */ 032001, /* / (long) */ 032001, /* % (long) */ 012253, /* =& ~ */ 012213, /* =* (long) */ 012213, /* / (long) */ 012213, /* % (long) */ 000000, /* 89 */ 014201, /* ? */ 026061, /* long << */ 012253, /* long =<< */ 000101, /* max */ 000101, /* maxp */ 000101, /* min */ 000101, /* minp */ 000001, /* , */ 000000, /* 98 */ 000000, /* 99 */ 036001, /* call */ 036000, /* mcall */ 000000, /* goto */ 000000, /* jump cond */ 000000, /* branch cond */ 000400, /* set nregs */ 000000, /* 106 */ 000000, /* 107 */ 000000, /* 108 */ 000000, /* int->char */ 000000, /* force r0 */ 000000, /* 111 */ 000000, /* 112 */ 000000, /* 113 */ 000000, /* 114 */ 000000, /* structure assign */ 000001, /* struct assignment setup */ }; char *opntab[] { 0, 0, 0, 0, 0, 0, 0, 0, ":", ",", "field select", 0, 0, "int->ptr", "ptr->int", "long->ptr", "field assign", ">>", ">>", 0, "name", "short constant", "string", "float", "double", "long constant", "long constant", "*r++", "*--r", 0, "++pre", "--pre", "++post", "--post", "!un", "&", "*", "-", "~", ".", "+", "-", "*", "/", "%", ">>", "<<", "&", "|", "^", "->", "int->double", "double->int", "&&", "||", "&~", "double->long", "long->double", "integer->long", "long->integer", "==", "!=", "<=", "<", ">=", ">", "p", ">=p", "+=", "-=", "*=", "/=", "%=", ">>=", "<<=", "&=", "|=", "^=", "=", "& for tests", "*", "/", "%", "&= ~", "*=", "/=", "%=", 0, "?", "<<", "<<=", "\\/", "\\/", "/\\", "/\\", 0, "call", "call", "call", 0, "goto", "jump cond", "branch cond", "set nregs", "load value", 0, 0, "int->char", "force register", "", "", "", "", "=structure", "= (struct setup)", }; /* * Strings for instruction tables. */ char mov[] "mov"; char clr[] "clr"; char cmp[] "cmp"; char tst[] "tst"; char add[] "add"; char sub[] "sub"; char inc[] "inc"; char dec[] "dec"; char mul[] "mul"; char div[] "div"; char asr[] "asr"; char ash[] "ash"; char asl[] "asl"; char bic[] "bic"; char bic1[] "bic $1,"; char bit[] "bit"; char bit1[] "bit $1,"; char bis[] "bis"; char bis1[] "bis $1,"; char xor[] "xor"; char neg[] "neg"; char com[] "com"; char stdol[] "*$"; char ashc[] "ashc"; char slmul[] "lmul"; char sldiv[] "ldiv"; char slrem[] "lrem"; char almul[] "almul"; char aldiv[] "aldiv"; char alrem[] "alrem"; char jeq[] "jeq"; char jne[] "jne"; char jle[] "jle"; char jgt[] "jgt"; char jlt[] "jlt"; char jge[] "jge"; char jlos[] "jlos"; char jhi[] "jhi"; char jlo[] "jlo"; char jhis[] "jhis"; char nop[] "/nop"; char jbr[] "jbr"; /* * Instruction tables, accessed by * I (first operand) or I' (second) macros. */ struct instab instab[] { LOAD, mov, tst, ASSIGN, mov, clr, EQUAL, cmp, tst, NEQUAL, cmp, tst, LESSEQ, cmp, tst, LESS, cmp, tst, GREATEQ,cmp, tst, GREAT, cmp, tst, LESSEQP,cmp, tst, LESSP, cmp, tst, GREATQP,cmp, tst, GREATP, cmp, tst, PLUS, add, inc, ASPLUS, add, inc, MINUS, sub, dec, ASMINUS,sub, dec, INCBEF, add, inc, DECBEF, sub, dec, INCAFT, add, inc, DECAFT, sub, dec, TIMES, mul, mul, ASTIMES,mul, mul, DIVIDE, div, div, ASDIV, div, div, MOD, div, div, ASMOD, div, div, PTOI,'+%kV(EiEi div, div, RSHIFT, ash, asr, ASRSH, ash, asr, LSHIFT, ash, asl, ASLSH, ash, asl, AND, bic, bic1, ANDN, bic, bic1, ASANDN, bic, bic1, TAND, bit, bit1, OR, bis, bis1, ASOR, bis, bis1, EXOR, xor, xor, ASXOR, xor, xor, NEG, neg, neg, COMPL, com, com, CALL1, stdol, stdol, CALL2, "", "", LLSHIFT,ashc, ashc, ASLSHL, ashc, ashc, LTIMES, slmul, slmul, LDIV, sldiv, sldiv, LMOD, slrem, slrem, LASTIMES,almul, almul, LASDIV, aldiv, aldiv, LASMOD, alrem, alrem, ULSH, ashc, ashc, ASULSH, ashc, ashc, 0, 0, 0}; /* * Similar table for relationals. * The first string is for the positive * test, the second for the inverted one. * The '200+' entries are * used in tests against 0 where a 'tst' * instruction is used; it clears the c-bit * the c-bit so ptr tests are funny. */ struct instab branchtab[] { EQUAL, jeq, jne, NEQUAL, jne, jeq, LESSEQ, jle, jgt, LESS, jlt, jge, GREATEQ,jge, jlt, GREAT, jgt, jle, LESSEQP,jlos, jhi, LESSP, jlo, jhis, GREATQP,jhis, jlo, GREATP, jhi, jlos, 200+EQUAL, jeq, jne, 200+NEQUAL, jne, jeq, 200+LESSEQ, jle, jgt, 200+LESS, jlt, jge, 200+GREATEQ, jge, jlt, 200+GREAT, jgt, jle, 200+LESSEQP, jeq, jne, 200+LESSP, nop, jbr, 200+GREATQP, jbr, nop, 200+GREATP, jne, jeq, 0, 0, 0 }; '/&k紁PY\_behknqtw?ݟ? ((# /* * C compiler part 2 -- expression optimizer * */ #include "c1.h" optim(atree) struct tnode *atree; { struct { int intx[4]; }; register op, dope; int d1, d2; struct tnode *t; register struct tnode *tree; if ((tree=atree)==0) return(0); if ((op = tree->op)==0) return(tree); if (op==NAME && tree->class==AUTO) { tree->class = OFFS; tree->regno = 5; tree->offset = tree->nloc; } dope = opdope[op]; if ((dope&LEAF) != 0) { if (op==FCON && tree->fvalue.intx[1]==0 && tree->fvalue.intx[2]==0 && tree->fvalue.intx[3]==0) { tree->op = SFCON; tree->value = tree->fvalue.intx[0]; } return(tree); } if ((dope&BINARY) == 0) return(unoptim(tree)); /* is known to be binary */ if (tree->type==CHAR) tree->type = INT; switch(op) { /* * PDP-11 special: * generate new =&~ operator out of =& * by complementing the RHS. */ case ASAND: tree->op = ASANDN; tree->tr2 = tnode(COMPL, tree->tr2->type, tree->tr2); break; /* * On the PDP-11, int->ptr via multiplication * Longs are just truncated. */ case LTOP: tree->op = ITOP; tree->tr1 = unoptim(tnode(LTOI,INT,tree->tr1)); case ITOP: tree->op = TIMES; break; case MINUS: if ((t = isconstant(tree->tr2)) && (t->type!=UNSIGN || tree->type!=LONG)) { tree->op = PLUS; if (t->type==DOUBLE) /* PDP-11 FP representation */ t->value =^ 0100000; else t->value = -t->value; } break; } op = tree->op; dope = opdope[op]; if (dope&LVALUE && tree->tr1->op==FSEL) return(lvfield(tree)); if ((dope&COMMUTE)!=0) { d1 = tree->type; tree = acommute(tree); if (tree->op == op) tree->type = d1; /* * PDP-11 special: * replace a&b by a ANDN ~ b. * This will be undone when in * truth-value context. */ if (tree->op!=AND) return(tree); /* * long & pos-int is simpler */ if (tree->type==LONG && tree->tr2->op==ITOL && (tree->tr2->tr1->op==CON && tree->tr2->tr1->value>=0 || tree->tr2->tr1->type==UNSIGN)) { tree->type = UNSIGN; t = tree->tr2; tree->tr2 = tree->tr2->tr1; t->tr1 = tree; tree->tr1 = tnode(LTOI, UNSIGN, tree->tr1); return(optim(t)); } /* * Keep constants to the right */ if ((tree->tr1->op==ITOL && tree->tr1->tr1->op==CON) || tree->tr1->op==LCON) { t = tree->tr1; tree->tr1 = tree->tr2; tree->tr2 = t; } tree->op = ANDN; op = ANDN; tree->tr2 = tnode(COMPL, tree->tr2->type, tree->tr2); } again: tree->tr1 = optim(tree->tr1); tree->tr2 = optim(tree->tr2); if (tree->type == LONG) { t = lconst(tree->op, tree->tr1, tree->tr2); if (t) return(t); } if ((dope&RELAT) != 0) { if ((d1=degree(tree->tr1)) < (d2=degree(tree->tr2)) || d1==d2 && tree->tr1->op==NAME && tree->tr2->op!=NAME) { t = tree->tr1; tree->tr1 = tree->tr2; tree->tr2 = t; tree->op = maprel[op-EQUAL]; } if (tree->tr1->type==CHAR && tree->tr2->op==CON && (dcalc(tree->tr1, 0) <= 12 || tree->tr1->op==STAR) && tree->tr2->value <= 127 && tree->tr2->value >= 0) tree->tr2->type = CHAR; } d1 = max(degree(tree->tr1), islong(tree->type)); d2 = max(degree(tree->tr2), 0); switch (op) { /* * In assignment to fields, treat all-zero and all-1 specially. */ case FSELA: if (tree->tr2->op==CON && tree->tr2->value==0) { tree->op = ASAND; tree->tr2->value = ~tree->mask; return(optim(tree)); } if (tree->tr2->op==CON && tree->mask==tree->tr2->value) { tree->op = ASOR; return(optim(tree)); } case LTIMES: case LDIV: case LMOD: case LASTIMES: case LASDIV: case LASMOD: tree->degree = 10; break; case ANDN: if (isconstant(tree->tr2) && tree->tr2->value==0) { return(tree->tr1); } goto def; case CALL: tree->degree = 10; break; case QUEST: case COLON: tree->degree = max(d1, d2); break; case DIVIDE: case ASDIV: case ASTIMES: case PTOI: if (tree->tr2->op==CON && tree->tr2->value==1) return(tree->tr1); case MOD: case ASMOD: if (tree->tr1->type==UNSIGN && ispow2(tree)) return(pow2(tree)); if ((op==MOD||op==ASMOD) && tree->type==DOUBLE) { error("Floating %% not defined"); tree->type = INT; } case ULSH: case ASULSH: d1 =+ 2; d2 =+ 2; if (tree->type==LONG) return(hardlongs(tree)); goto constant; case LSHIFT: case RSHIFT: case ASRSH: case ASLSH: if (tree->tr2->op==CON && tree->tr2->value==0) { return(tree->tr1); } /* * PDP-11 special: turn right shifts into negative * left shifts */ if (tree->type == LONG) { d1++; d2++; } if (op==LSHIFT||op==ASLSH) goto constant; if (tree->tr2->op==CON && tree->tr2->value==1 && tree->tr1->type!=UNSIGN) goto constant; op =+ (LSHIFT-RSHIFT); tree->op = op; tree->tr2 = tnode(NEG, tree->type, tree->tr2); if (tree->tr1->type==UNSIGN) { if (tree->op==LSHIFT) tree->op = ULSH; else if (tree->op==ASLSH) tree->op = ASULSH; } goto again; constant: if (tree->tr1->op==CON && tree->tr2->op==CON) { const(op, &tree->tr1->value, tree->tr2->value); return(tree->tr1); } def: default: if (dope&RELAT) { if (tree->tr1->type==LONG) /* long re':&kܴPY\_behknqtw?ݟ?݀lations are a mess */ d1 = 10; if (opdope[tree->tr1->op]&RELAT && tree->tr2->op==CON && tree->tr2->value==0) { tree = tree->tr1; switch(op) { case GREATEQ: return(&cone); case LESS: return(&czero); case LESSEQ: case EQUAL: tree->op = notrel[tree->op-EQUAL]; } return(tree); } } tree->degree = d1==d2? d1+islong(tree->type): max(d1, d2); break; } return(tree); } unoptim(atree) struct tnode *atree; { struct { int intx[4]; }; register struct tnode *subtre, *tree; register int *p; double static fv; struct ftconst *fp; if ((tree=atree)==0) return(0); again: if (tree->op==AMPER && tree->tr1->op==STAR) { subtre = tree->tr1->tr1; subtre->type = tree->type; return(optim(subtre)); } subtre = tree->tr1 = optim(tree->tr1); switch (tree->op) { case ITOL: if (subtre->op==CON && subtre->type==INT && subtre->value<0) { subtre = getblk(sizeof(struct lconst)); subtre->op = LCON; subtre->type = LONG; subtre->lvalue = tree->tr1->value; return(subtre); } break; case FTOI: if (tree->type==UNSIGN) { tree->op = FTOL; tree->type = LONG; tree = tnode(LTOI, UNSIGN, tree); } break; case LTOF: if (subtre->op==LCON) { tree = getblk(sizeof(*fp)); tree->op = FCON; tree->type = DOUBLE; tree->value = isn++; tree->fvalue = subtre->lvalue; return(optim(tree)); } break; case ITOF: if (tree->tr1->type==UNSIGN) { tree->tr1 = tnode(ITOL, LONG, tree->tr1); tree->op = LTOF; tree = optim(tree); } if (subtre->op!=CON) break; fv = subtre->value; p = &fv; p++; if (*p++==0 && *p++==0 && *p++==0) { tree = getblk(sizeof(*fp)); tree->op = SFCON; tree->type = DOUBLE; tree->value = * (int *) &fv; tree->fvalue = fv; return(tree); } break; case ITOC: p = tree->tr1; /* * Sign-extend PDP-11 characters */ if (p->op==CON) { p->value = p->value << 8 >> 8; return(p); } else if (p->op==NAME) { p->type = CHAR; return(p); } break; case LTOI: p = tree->tr1; switch (p->op) { case LCON: p->op = CON; p->type = tree->type; p->value = p->lvalue; return(p); case NAME: p->offset =+ 2; p->type = tree->type; return(p); case STAR: p->type = tree->type; p->tr1->type = tree->type+PTR; p->tr1 = tnode(PLUS, tree->type, p->tr1, tconst(2, INT)); return(optim(p)); case ITOL: return(p->tr1); case PLUS: case MINUS: case AND: case ANDN: case OR: case EXOR: p->tr2 = tnode(LTOI, tree->type, p->tr2); case NEG: case COMPL: p->tr1 = tnode(LTOI, tree->type, p->tr1); p->type = tree->type; return(optim(p)); } break; case FSEL: tree->op = AND; tree->tr1 = tree->tr2->tr1; tree->tr2->tr1 = subtre; tree->tr2->op = RSHIFT; tree->tr1->value = (1 << tree->tr1->value) - 1; return(optim(tree)); case FSELR: tree->op = LSHIFT; tree->type = UNSIGN; tree->tr1 = tree->tr2; tree->tr1->op = AND; tree->tr2 = tree->tr2->tr2; tree->tr1->tr2 = subtre; tree->tr1->tr1->value = (1 << tree->tr1->tr1->value) -1; return(optim(tree)); case AMPER: if (subtre->op==STAR) return(subtre->tr1); if (subtre->op==NAME && subtre->class == OFFS) { p = tnode(PLUS, tree->type, subtre, tree); subtre->type = tree->type; tree->op = CON; tree->type = INT; tree->degree = 0; tree->value = subtre->offset; subtre->class = REG; subtre->nloc = subtre->regno; subtre->offset = 0; return(optim(p)); } break; case STAR: if (subtre->op==AMPER) { subtre->tr1->type = tree->type; return(subtre->tr1); } if (tree->type==STRUCT) break; if (subtre->op==NAME && subtre->class==REG) { subtre->type = tree->type; subtre->class = OFFS; subtre->regno = subtre->nloc; return(subtre); } p = subtre->tr1; if ((subtre->op==INCAFT||subtre->op==DECBEF)&&tree->type!=LONG && p->op==NAME && p->class==REG && p->type==subtre->type) { p->type = tree->type; p->op = subtre->op==INCAFT? AUTOI: AUTOD; return(p); } if (subtre->op==PLUS && p->op==NAME && p->class==REG) { if (subtre->tr2->op==CON) { p->offset =+ subtre->tr2->value; p->class = OFFS; p->type = tree->type; p->regno = p->nloc; return(p); } if (subtre->tr2->op==AMPER) { subtre = subtre->tr2->tr1; subtre->class =+ XOFFS-EXTERN; subtre->regno = p->nloc; subtre->type = tree->type; return(subtre); } } break; case EXCLA: if ((opdope[subtre->op]&RELAT)==0) break; tree = subtre; tree->op = notrel[tree->op-EQUAL]; break; case COMPL: (( if (tree->type==CHAR) tree->type = INT; if (tree->op == subtre->op) return(subtre->tr1); if (subtre->op==CON) { subtre->value = ~subtre->value; return(subtre); } if (subtre->op==LCON) { subtre->lvalue = ~subtre->lvalue; return(subtre); } if (subtre->op==ITOL) { if (subtre->tr1->op==CON) { tree = getblk(sizeof(struct lconst)); tree->op = LCON; tree->type = LONG; if (subtre->tr1->type==UNSIGN) tree->lvalue = ~(long)(unsigned)subtre->tr1->value; else tree->lvalue = ~subtre->tr1->value; return(tree); } if (subtre->tr1->type==UNSIGN) break; subtre->op = tree->op; subtre->type = subtre->tr1->type; tree->op = ITOL; tree->type = LONG; goto again; } case NEG: if (tree->type==CHAR) tree->type = INT; if (tree->op==subtre->op) return(subtre->tr1); if (subtre->op==CON) { subtre->value = -subtre->value; return(subtre); } if (subtre->op==LCON) { subtre->lvalue = -subtre->lvalue; return(subtre); } if (subtre->op==ITOL && subtre->tr1->op==CON) { tree = getblk(sizeof(struct lconst)); tree->op = LCON; tree->type = LONG; if (subtre->tr1->type==UNSIGN) tree->lvalue = -(long)(unsigned)subtre->tr1->value; else tree->lvalue = -subtre->tr1->value; return(tree); } /* * PDP-11 FP negation */ if (subtre->op==SFCON) { subtre->value =^ 0100000; subtre->fvalue.intx[0] =^ 0100000; return(subtre); } if (subtre->op==FCON) { subtre->fvalue.intx[0] =^ 0100000; return(subtre); } } if ((opdope[tree->op]&LEAF)==0) tree->degree = max(islong(tree->type), degree(subtre)); return(tree); } /* * Deal with assignments to partial-word fields. * The game is that select(x) =+ y turns into * select(x =+ select(y)) where the shifts and masks * are chosen properly. The outer select * is discarded where the value doesn't matter. * Sadly, overflow is undetected on =+ and the like. * Pure assignment is handled specially. */ lvfield(at) struct tnode *at; { register struct tnode *t, *t1; register struct fasgn *t2; t = at; switch (t->op) { case ASSIGN: t2 = getblk(sizeof(*t2)); t2->op = FSELA; t2->type = UNSIGN; t1 = t->tr1->tr2; t2->mask = ((1<tr1->value)-1)<tr2->value; t2->tr1 = t->tr1; t2->tr2 = t->tr2; t = t2; case ASANDN: case ASPLUS: case ASMINUS: case ASOR: case ASXOR: case INCBEF: case INCAFT: case DECBEF: case DECAFT: t1 = t->tr1; t1->op = FSELR; t->tr1 = t1->tr1; t1->tr1 = t->tr2; t->tr2 = t1; t1 = t1->tr2; t1 = tnode(COMMA, INT, tconst(t1->tr1->value, INT), tconst(t1->tr2->value, INT)); return(optim(tnode(FSELT, UNSIGN, t, t1))); } error("Unimplemented field operator"); return(t); } #define LSTSIZ 20 struct acl { int nextl; int nextn; struct tnode *nlist[LSTSIZ]; struct tnode *llist[LSTSIZ+1]; }; acommute(atree) { struct acl acl; int d, i, op, flt, d1; register struct tnode *t1, **t2, *tree; struct tnode *t; acl.nextl = 0; acl.nextn = 0; tree = atree; op = tree->op; flt = isfloat(tree); insert(op, tree, &acl); acl.nextl--; t2 = &acl.llist[acl.nextl]; if (!flt) { /* put constants together */ for (i=acl.nextl; i>0; i--) { if (t2[0]->op==CON && t2[-1]->op==CON) { acl.nextl--; t2--; const(op, &t2[0]->value, t2[1]->value); } else if (t = lconst(op, t2[-1], t2[0])) { acl.nextl--; t2--; t2[0] = t; } } } if (op==PLUS || op==OR) { /* toss out "+0" */ if (acl.nextl>0 && (t1 = isconstant(*t2)) && t1->value==0 || (*t2)->op==LCON && (*t2)->lvalue==0) { acl.nextl--; t2--; } if (acl.nextl <= 0) { if ((*t2)->type==CHAR) *t2 = tnode(LOAD, tree->type, *t2, NULL); (*t2)->type = tree->type; return(*t2); } /* subsume constant in "&x+c" */ if (op==PLUS && t2[0]->op==CON && t2[-1]->op==AMPER) { t2--; t2[0]->tr1->offset =+ t2[1]->value; acl.nextl--; } } else if (op==TIMES || op==AND) { t1 = acl.llist[acl.nextl]; if (t1->op==CON) { if (t1->value==0) return(t1); if (op==TIMES && t1->value==1 && acl.nextl>0) if (--acl.nextl <= 0) { t1 = acl.llist[0]; if (tree->type == UNSIGN) t1->type = tree->type; return(t1); } } } if (op==PLUS && !flt) distrib(&acl); tree = *(t2 = &acl.llist[0]); d = max(degree(tree), islong(tree->type)); if (op==TIMES && !flt) d++; for (i=0; itr2 = t = *++t2; d1 = degree(t); /* * PDP-11 strangeness: * rt. op of ^ must be in a register. */ if (op==EXOR && dcalc(t, 0)<=12) { t1->tr2 = t = optim(tnode(LOAD, t->type, t)); d1 = t->degree; } t1->degree = d = d==d1? d+islong(t1->type): max(d, d1); t1->tr1 = tree; tree = t1; if (tree->type==LONG) { if (tree->op==TIMES) tree = hardlongs(tree); else if (tree->op==PLUS && (t = isconstant(tree->tr1)) && t->value < 0 && t->type!=UNSIGN) { tree->op = MINUS; t->value = - t->value; t = tree->tr1; tree->tr1 = tree->tr2; tree->tr2 = t; } } } if (tree->op==TIMES && ispow2(tree)) tree->degree = max(degree(tree->tr1), islong(tree->type)); return(tree); } distrib(list) struct acl *list; { /* * Find a list member of the form c1c2*x such * that c1c2 divides no other such constant, is divided by * at least one other (say in the form c1*y), and which has * fewest divisors. Reduce this pair to c1*(y+c2*x) * and iterate until no reductions occur. */ register struct tnode **p1, **p2; struct tnode *t; int ndmaj, ndmin; struct tnode **dividend, **divisor; struct tnode **maxnod, **mindiv; loop: maxnod = &list->llist[list->nextl]; ndmaj = 1000; dividend = 0; for (p1 = list->llist; p1 <= maxnod; p1++) { if ((*p1)->op!=TIMES || (*p1)->tr2->op!=CON) continue; ndmin = 0; for (p2 = list->llist; p2 <= maxnod; p2++) { if (p1==p2 || (*p2)->op!=TIMES || (*p2)->tr2->op!=CON) continue; if ((*p1)->tr2->value == (*p2)->tr2->value) { (*p2)->tr2 = (*p1)->tr1; (*p2)->op = PLUS; (*p1)->tr1 = (*p2); *p1 = optim(*p1); squash(p2, maxnod); list->nextl--; goto loop; } if (((*p2)->tr2->value % (*p1)->tr2->value) == 0) goto contmaj; if (((*p1)->tr2->value % (*p2)->tr2->value) == 0) { ndmin++; mindiv = p2; } } if (ndmin > 0 && ndmin < ndmaj) { ndmaj = ndmin; dividend = p1; divisor = mindiv; } contmaj:; } if (dividend==0) return; t = list->nlist[--list->nextn]; p1 = dividend; p2 = divisor; t->op = PLUS; t->type = (*p1)->type; t->tr1 = (*p1); t->tr2 = (*p2)->tr1; (*p1)->tr2->value =/ (*p2)->tr2->value; (*p2)->tr1 = t; t = optim(*p2); if (p1 < p2) { *p1 = t; squash(p2, maxnod); } else { *p2 = t; squash(p1, maxnod); } list->nextl--; goto loop; } squash(p, maxp) struct tnode **p, **maxp; { register struct tnode **np; for (np = p; np < maxp; np++) *np = *(np+1); } const(op, vp, av) int *vp; { register int v; struct { unsigned u;}; v = av; switch (op) { case PTOI: (*vp).u =/ v; return; case PLUS: *vp =+ v; return; case TIMES: *vp =* v; return; case AND: *vp =& v; return; case OR: *vp =| v; return; case EXOR: *vp =^ v; return; case DIVIDE: case MOD: if (v==0) error("Divide check"); else if (op==DIVIDE) *vp =/ v; else *vp =% v; return; case RSHIFT: *vp =>> v; return; case LSHIFT: *vp =<< v; return; case ANDN: *vp =& ~ v; return; } error("C error: const"); } struct tnode * lconst(op, lp, rp) register struct tnode *lp, *rp; { long l, r; if (lp->op==LCON) l = lp->lvalue; else if (lp->op==ITOL && lp->tr1->op==CON) { if (lp->tr1->type==INT) l = lp->tr1->value; else l = (unsigned)lp->tr1->value; } else return(0); if (rp->op==LCON) r = rp->lvalue; else if (rp->op==ITOL && rp->tr1->op==CON) { if (rp->tr1->type==INT) r = rp->tr1->value; else r = (unsigned)rp->tr1->value; } else return(0); switch (op) { case PLUS: l += r; break; case MINUS: l -= r; break; case TIMES: case LTIMES: l *= r; break; case DIVIDE: case LDIV: if (r==0) error("Divide check"); else l /= r; break; case MOD: case LMOD: if (r==0) error("Divide check"); else l %= r; break; case AND: l &= r; break; case ANDN: l &= ~r; break; case OR: l |= r; break; case EXOR: l ^= r; break; case LSHIFT: l <<= r; break; case RSHIFT: l >>= r; break; default: return(0); } if (lp->op==LCON) { lp->lvalue = l; return(lp); } lp = getblk(sizeof(struct lconst)); lp->op = LCON; lp->type = LONG; lp->lvalue = l; return(lp); } insert(op, atree, alist) struct acl *alist; { register d; register struct acl *list; register struct tnode *tree; int d1, i; struct tnode *t; tree = atree; list = alist; ins: if (tree->op != op) tree = optim(tree); if (tree->op == op && list->nextn < LSTSIZ-2) { list->nlist[list->nextn++] = tree; insert(op, tree->tr1, list); insert(op, tree->tr2, list); return; } if (!isfloat(tree)) { /* c1*(x+c2) -> c1*x+c1*c2 */ if ((tree->op==TIMES||tree->op==LSHIFT) && tree->tr2->op==CON && tree->tr2->value>0 && tree->tr1->op==PLUS && tree->tr1->tr2->op==CON) { d = tree->tr2->value; if (tree->op==TIMES) tree->tr2->value =* tree->tr1->tr2->value; else tree->tr2->value = tree->tr1->tr2->value << d; tree->tr1->tr2->value = d; tree->tr1->op = tree->op; tree->op = PLUS; tree = optim(tree); if (op==PLUS) goto ins; } } d = degree(tree); for (i=0; inextl; i++) { if ((d1=degree(list->llist[i]))llist[i]; list->llist[i] = tree; tree = t; d = d1; } } list->llist[list->nextl++] = tree; } tnode(op, type, tr1, tr2) struct tnode *tr1, *tr2; { register struct tnode *p; p = getblk(sizeof(*p)); p->op = op; p->type = type; p->degree = 0; p->tr1 = tr1; if (opdope[op]&BINARY) p->tr2 = tr2; else p->tr2 = NULL; return(p); } tconst(val, type) { register struct tconst *p; p = getblk(sizeof(*p)); p->op = CON; p->type = type; p->value = val; return(p); } getblk(size) { register *p; if (size&01) abort(); p = curbase; if ((curbase =+ size) >= c((oremax) { if (sbrk(1024) == -1) { error("Out of space-- c1"); exit(1); } coremax =+ 1024; } return(p); } islong(t) { if (t==LONG) return(2); return(1); } isconstant(at) struct tnode *at; { register struct tnode *t; t = at; if (t->op==CON || t->op==SFCON) return(t); if (t->op==ITOL && t->tr1->op==CON) return(t->tr1); return(0); } hardlongs(at) struct tnode *at; { register struct tnode *t; t = at; switch(t->op) { case TIMES: case DIVIDE: case MOD: t->op =+ LTIMES-TIMES; break; case ASTIMES: case ASDIV: case ASMOD: t->op =+ LASTIMES-ASTIMES; t->tr1 = tnode(AMPER, LONG+PTR, t->tr1); break; default: return(t); } return(optim(t)); } 'Z'kcI  # /* * C compiler */ #include "c1.h" max(a, b) { if (a>b) return(a); return(b); } degree(at) struct tnode *at; { register struct tnode *t, *t1; if ((t=at)==0 || t->op==0) return(0); if (t->op == CON) return(-3); if (t->op == AMPER) return(-2); if (t->op==ITOL) { if ((t1 = isconstant(t)) && (t1->value>=0 || t1->type==UNSIGN)) return(-2); if ((t1=t->tr1)->type==UNSIGN && opdope[t1->op]&LEAF) return(-1); } if ((opdope[t->op] & LEAF) != 0) { if (t->type==CHAR || t->type==FLOAT) return(1); return(0); } return(t->degree); } pname(ap, flag) struct tnode *ap; { register i; register struct tnode *p; struct { int intx[2]; }; p = ap; loop: switch(p->op) { case LCON: printf("$%o", flag>10? p->lvalue.intx[1]:p->lvalue.intx[0]); return; case SFCON: case CON: printf("$"); psoct(p->value); return; case FCON: printf("L%d", (p->value>0? p->value: -p->value)); return; case NAME: i = p->offset; if (flag>10) i =+ 2; if (i) { psoct(i); if (p->class!=OFFS) putchar('+'); if (p->class==REG) regerr(); } switch(p->class) { case SOFFS: case XOFFS: pbase(p); case OFFS: printf("(r%d)", p->regno); return; case EXTERN: case STATIC: pbase(p); return; case REG: printf("r%d", p->nloc); return; } error("Compiler error: pname"); return; case AMPER: putchar('$'); p = p->tr1; if (p->op==NAME && p->class==REG) regerr(); goto loop; case AUTOI: printf("(r%d)%c", p->nloc, flag==1?0:'+'); return; case AUTOD: printf("%c(r%d)", flag==2?0:'-', p->nloc); return; case STAR: p = p->tr1; putchar('*'); goto loop; } error("pname called illegally"); } regerr() { error("Illegal use of register"); } pbase(ap) struct tnode *ap; { register struct tnode *p; p = ap; if (p->class==SOFFS || p->class==STATIC) printf("L%d", p->nloc); else printf("%.8s", &(p->nloc)); } xdcalc(ap, nrleft) struct tnode *ap; { register struct tnode *p; register d; p = ap; d = dcalc(p, nrleft); if (d<20 && p->type==CHAR) { if (nrleft>=1) d = 20; else d = 24; } return(d); } dcalc(ap, nrleft) struct tnode *ap; { register struct tnode *p, *p1; if ((p=ap)==0) return(0); switch (p->op) { case NAME: if (p->class==REG) return(9); case AMPER: case FCON: case LCON: case AUTOI: case AUTOD: return(12); case CON: case SFCON: if (p->value==0) return(4); if (p->value==1) return(5); if (p->value > 0) return(8); return(12); case STAR: p1 = p->tr1; if (p1->op==NAME||p1->op==CON||p1->op==AUTOI||p1->op==AUTOD) if (p->type!=LONG) return(12); } if (p->type==LONG) nrleft--; return(p->degree <= nrleft? 20: 24); } notcompat(ap, ast, op) struct tnode *ap; { register at, st; register struct tnode *p; p = ap; at = p->type; st = ast; if (st==0) /* word, byte */ return(at!=CHAR && at!=INT && at!=UNSIGN && atop==NAME && p->class==REG && op==ASSIGN && st==CHAR) return(0); return(st != at); } prins(op, c, itable) struct instab *itable; { register struct instab *insp; register char *ip; for (insp=itable; insp->op != 0; insp++) { if (insp->op == op) { ip = c? insp->str2: insp->str1; if (ip==0) break; printf("%s", ip); return; } } error("No match' for op %d", op); } collcon(ap) struct tnode *ap; { register op; register struct tnode *p; p = ap; if (p->op==STAR) { if (p->type==LONG+PTR) /* avoid *x(r); *x+2(r) */ return(0); p = p->tr1; } if (p->op==PLUS) { op = p->tr2->op; if (op==CON || op==AMPER) return(1); } return(0); } isfloat(at) struct tnode *at; { register struct tnode *t; t = at; if ((opdope[t->op]&RELAT)!=0) t = t->tr1; if (t->type==FLOAT || t->type==DOUBLE) { nfloat = 1; return('f'); } return(0); } oddreg(t, areg) struct tnode *t; { register reg; reg = areg; if (!isfloat(t)) { if (opdope[t->op]&RELAT) { if (t->tr1->type==LONG) return((reg+1) & ~01); return(reg); } switch(t->op) { case LLSHIFT: case ASLSHL: return((reg+1)&~01); case DIVIDE: case MOD: case ASDIV: case ASMOD: case PTOI: case ULSH: case ASULSH: reg++; case TIMES: case ASTIMES: return(reg|1); } } return(reg); } arlength(t) { if (t>=PTR) return(2); switch(t) { case INT: case CHAR: case UNSIGN: return(2); case LONG: return(4); case FLOAT: case DOUBLE: return(8); } return(1024); } /* * Strings for switch code. */ char dirsw[] {"\ cmp r0,$%o\n\ jhi L%d\n\ asl r0\n\ jmp *L%d(r0)\n\ .data\n\ L%d:\ " }; char hashsw[] {"\ mov r0,r1\n\ clr r0\n\ div $%o,r0\n\ asl r1\n\ jmp *L%d(r1)\n\ .data\n\ L%d:\ "}; /* * If the unsigned casts below won't compile, * try using the calls to lrem and ldiv. */ pswitch(afp, alp, deflab) struct swtab *afp, *alp; { int ncase, i, j, tabs, worst, best, range;'e'k‴I  register struct swtab *swp, *fp, *lp; int *poctab; fp = afp; lp = alp; if (fp==lp) { printf("jbr L%d\n", deflab); return; } isn++; if (sort(fp, lp)) return; ncase = lp-fp; lp--; range = lp->swval - fp->swval; /* direct switch */ if (range>0 && range <= 3*ncase) { if (fp->swval) printf("sub $%o,r0\n", fp->swval); printf(dirsw, range, deflab, isn, isn); isn++; for (i=fp->swval; ; i++) { if (i==fp->swval) { printf("L%d\n", fp->swlab); if (fp==lp) break; fp++; } else printf("L%d\n", deflab); } printf(".text\n"); return; } /* simple switch */ if (ncase<10) { for (fp = afp; fp<=lp; fp++) breq(fp->swval, fp->swlab); printf("jbr L%d\n", deflab); return; } /* hash switch */ best = 077777; poctab = getblk(((ncase+2)/2) * sizeof(*poctab)); for (i=ncase/4; i<=ncase/2; i++) { for (j=0; jswval, i) */ poctab[(unsigned)swp->swval%i]++; worst = 0; for (j=0; jworst) worst = poctab[j]; if (i*worst < best) { tabs = i; best = i*worst; } } i = isn++; printf(hashsw, tabs, i, i); isn++; for (i=0; iswval, tabs) */ if ((unsigned)swp->swval%tabs == i) { /* ldiv(0, swp->swval, tabs) */ breq((unsigned)swp->swval/tabs, swp->swlab); } } printf("jbr L%d\n", deflab); } } breq(v, l) { if (v==0) printf("tst r0\n"); else printf("cmp r0,$%o\n", v); printf("jeq L%d\n", l); } sort(afp, alp) struct swtab *afp, *alp; { register struct swtab *cp, *fp, *lp; int intch, t; fp = afp; lp = alp; while (fp < --lp) { intch = 0; for (cp=fp; cpswval == cp[1].swval) { error("Duplicate case (%d)", cp->swval); return(1); } if (cp->swval > cp[1].swval) { intch++; t = cp->swval; cp->swval = cp[1].swval; cp[1].swval = t; t = cp->swlab; cp->swlab = cp[1].swlab; cp[1].swlab = t; } } if (intch==0) break; } return(0); } ispow2(atree) { register int d; register struct tnode *tree; tree = atree; if (!isfloat(tree) && tree->tr2->op==CON) { d = tree->tr2->value; if (d>1 && (d&(d-1))==0) return(d); } return(0); } pow2(atree) struct tnode *atree; { register int d, i; register struct tnode *tree; tree = atree; if (d = ispow2(tree)) { for (i=0; (d=>>1)!=0; i++); tree->tr2->value = i; switch (tree->op) { case TIMES: tree->op = LSHIFT; break; case ASTIMES: tree->op = ASLSH; break; case DIVIDE: tree->op = ULSH; tree->tr2->value = -i; break; case ASDIV: tree->op = ASULSH; tree->tr2->value = -i; break; case MOD: tree->op = AND; tree->tr2->value = (1<op = ASAND; tree->tr2->value = (1<op) { case LOGAND: if (cond) { cbranch(tree->tr1, l1=isn++, 0, reg); cbranch(tree->tr2, lbl, 1, reg); label(l1); } else { cbranch(tree->tr1, lbl, 0, reg); cbranch(tree->tr2, lbl, 0, reg); } return; case LOGOR: if (cond) { cbranch(tree->tr1, lbl, 1, reg); cbranch(tree->tr2, lbl, 1, reg); } else { cbranch(tree->tr1, l1=isn++, 1, reg); cbranch(tree->tr2, lbl, 0, reg); label(l1); } return; case EXCLA: cbranch(tree->tr1, lbl, !cond, reg); return; case SEQNC: rcexpr(tree->tr1, efftab, reg); atree = tree->tr2; goto again; case ITOL: tree = tree->tr1; break; } op = tree->op; if (opdope[op]&RELAT && tree->tr1->op==ITOL && tree->tr2->op==ITOL) { tree->tr1 = tree->tr1->tr1; tree->tr2 = tree->tr2->tr1; if (op>=LESSEQ && op<=GREAT && (tree->tr1->type==UNSIGN || tree->tr2->type==UNSIGN)) tree->op = op = op+LESSEQP-LESSEQ; } if (tree->type==LONG || opdope[op]&RELAT&&tree->tr1->type==LONG) { longrel(tree, lbl, cond, reg); return; } rcexpr(tree, cctab, reg); op = tree->op; if ((opdope[op]&RELAT)==0) op = NEQUAL; else { l1 = tree->tr2->op; if ((l1==CON || l1==SFCON) && tree->tr2->value==0) op =+ 200; /* special for ptr tests */ else op = maprel[op-EQUAL]; } if (isfloat(tree)) printf("cfcc\n"); branch(lbl, op, !cond); } branch(lbl, aop, c) { register op; if(op=aop) prins(op, c, branchtab); else printf("jbr"); printf("\tL%d\n", lbl); } longrel(atree, lbl, cond, reg) struct tnode *atree; { int xl1, xl2, xo, xz; register int op, isrel; register struct tnode *tree; if (reg&01) reg++; reorder(&atree, cctab, reg); tree = atree; isrel = 0; if (opdope[tree->op]&RELAT) { isrel++; op = tree->op; } else op = NEQUAL; if (!cond) op = notrel[op-EQUAL]; xl1 = xlab1; xl2 = xlab2; xo = xop; xlab1 = lbl; xlab2 = 0; xop = op; xz = xzero; xzero = !isrel || tree->tr2->op==ITOL && tree->tr2->tr1->op==CON && tree->tr2->tr1->value==0; if (tree->op==ANDN) { tree->op = TAND; tree->tr2 = optim(tnode(COMPL, LONG, tree->tr2)); } if (cexpr(tree, cctab, reg) < 0) { reg = rcexpr(tree, regtab, reg); printf("ashc $0,r%d\n", reg); branch(xlab1, op, 0); } xlab1 = xl1; xlab2 = xl2; xop = xo; xzero = xz; } /* * Tables for finding out how best to do long comparisons. * First dimen is whether or not the comparison is with 0. * Second is which test: e.g. a>b-> * cmp a,b * bgt YES (first) * blt NO (second) * cmp a+2,b+2 * bhi YES (third) * NO: ... * Note some tests may not be needed. */ char lrtab[2][3][6] { 0, NEQUAL, LESS, LESS, GREAT, GREAT, NEQUAL, 0, GREAT, GREAT, LESS, LESS, EQUAL, NEQUAL, LESSEQP,LESSP, GREATQP,GREATP, 0, NEQUAL, LESS, LESS, GREATEQ,GREAT, NEQUAL, 0, GREAT, 0, 0, LESS, EQUAL, NEQUAL, EQUAL, 0, 0, NEQUAL, }; xlongrel(f) { register int op, bno; op = xop; if (f==0) { if (bno = lrtab[xzero][0][op-EQUAL]) branch(xlab1, bno, 0); if (bno = lrtab[xzero][1][op-EQUAL]) { xlab2 = isn++; branch(xlab2, bno, 0); } if (lrtab[xzero][2][op-EQUAL]==0) return(1); } else { branch(xlab1, lrtab[xzero][2][op-EQUAL], 0); if (xlab2) label(xlab2); } return(0); } label(l) { printf("L%d:", l); } popstk(a) { switch(a) { case 0: return; case 2: printf("tst (sp)+\n"); return; case 4: printf("cmp (sp)+,(sp)+\n"); return; } printf("add $%o,sp\n", a); } error(s, p1, p2, p3, p4, p5, p6) { nerror++; fprintf(stderr, "%d: ", line); fprintf(stderr, s, p1, p2, p3, p4, p5, p6); putc('\n', stderr); } psoct(an) { register int n, sign; sign = 0; if ((n = an) < 0) { n = -n; sign = '-'; } printf("%c%o", sign, n); } /* * Read in an intermediate file. */ #define STKS 100 getree() { struct tnode *expstack[STKS]; register struct tnode **sp; register t, op; static char s[9]; struct swtab *swp; double atof(); char numbuf[64]; struct tname *np; struct xtname *xnp; struct ftconst *fp; struct lconst *lp; struct fasgn *sap; int lbl, cond, lbl2, lbl3; curbase = funcbase; sp = expstack; for (;;) { if (sp >= &expstack[STKS]) error("Stack overflow botch"); op = geti(); if ((op&0177400) != 0177000) { error("Intermediate file error"); exit(1); } lbl = 0; switch(op =& 0377) { case SINIT: printf("%o\n", geti()); break; case EOFC: return; case BDATA: if (geti() == 1) { printf(".byte "); for (;;) { printf("%o", geti()); if (geti() != 1) break; printf(","); } printf("\n"); } break; case PROG: printf(".text\n"); break; case DATA: printf(".data\n"); break; case BSS: printf(".bss\n"); break; case SYMDEF: outname(s); printf(".globl%s%.8s\n", s[0]?" ":"", s); sfuncr.nloc = 0; break; case RETRN: printf("jmp cret\n"); break; case CSPACE: t = outname(s); printf(".comm %.8s,%o\n", t, geti()); break; case SSPACE: printf(".=.+%o\n", (t=geti())); totspace += (unsigned)t; break; case EVEN: printf(".even\n"); break; case SAVE: printf("jsr r5,csv\n"); break; case SETSTK: t = geti()-6; if (t==2) printf("tst -(sp)\n"); else if (t != 0) printf("sub $%o,sp\n", t); break; case PROFIL: t = geti(); printf("mov $L%d,r0\njsr pc,mcount\n", t); printf(".bss\nL%d:.=.+2\n.text\n", t); break; case SNAME: t = outname(s); printf("~%s=L%d\n", t+1, geti()); break; case ANAME: t = outname(s); printf("~%s=%o\n", t+1, geti()); break; case RNAME: t = outname(s); printf("~%s=r%d\n", t+1, geti()); break; case SWIT: t = geti(); line = geti(); curbase = funcbase; while(swp=getblk(sizeof(*swp)), swp->swlab = geti()) swp->swval = geti(); pswitch(funcbase, swp, t); break; case C3BRANCH: /* for fortran [sic] */ lbl = geti(); lbl2 = geti(); lbl3 = geti(); goto xpr; case CBRANCH: lbl = geti(); cond = geti(); case EXPR: xpr: line = geti(); if (sp != &expstack[1]) { error("Expression input botch"); exit(1); } nstack = 0; *sp = optim(*--sp); if (op==CBRANCH) cbranch(*sp, lbl, cond, 0); else if (op==EXPR) rcexpr(*sp, efftab, 0); else { if ((*sp)->type==LONG) { rcexpr(tnode(RFORCE, (*sp)->type, *sp), efftab, 0); printf("ashc $0,r0\n"); } else { rcexpr(*sp, cctab, 0); if (isfloat(*sp)) printf("cfcc\n"); } printf("jgt L%d\n", lbl3); printf("jlt L%d\njbr L%d\n", lbl, lbl2); } curbase = funcbase; break; case NAME: t = geti(); if (t==EXTERN) { np = getblk(sizeof(*xnp)); np->type = geti(); outname(np->name); } else { np = getblk(sizeof(*np)); np->type = geti(); np->nloc = geti(); } np->op = NAME; np->class = t; np->regno = 0; np->offset = 0; *sp++ = np; break; case CON: t = geti(); *sp++ = tconst(geti(), t); break; case LCON: geti(); /* ignore type, assume long */ t = geti(); op = geti(); if (t==0 && op>=0 || t == -1 && op<0) { *sp++ = tnode(ITOL, LONG, tconst(op, INT)); break; } lp = getblk(sizeof(*lp)); lp->op = LCON; lp->type = LONG; lp->lvalue = ((long)t<<16) + (unsigned)op; /* nonportable */ *sp++ = lp; break; case FCON: t = geti(); outname(numbuf); fp = getblk(sizeof(*fp)); fp->op = FCON; fp->type = t; fp->value = isn++; fp->fvalue = atof(numbuf); *sp++ = fp; break; case FSEL: *sp = tnode(FSEL, geti(), *--sp, NULL); t = geti(); (*sp++)->tr2 = tnode(COMMA, INT, tconst(geti(), INT), tconst(t, INT)); break; case STRASG: sap = getblk(sizeof(*sap)); sap->op = STRASG; sap->type = geti(); sap->mask = geti(); sap->tr1 = *--sp; sap->tr2 = NULL; *sp++ = sap; break; case NULLOP: *sp++ = tnode(0, 0, NULL, NULL); break; case LABEL: label(geti()); break; case NLABEL: t = outname(s); printf("%.8s:\n", t, t); break; case RLABEL: t = outname(s); printf("%.8s:\n~~%s:\n", t, t+1); break; case BRANCH: branch(geti(), 0); break; case SETREG: nreg = geti()-1; break; default: if (opdope[op]&BINARY) { if (sp < &expstack[1]) { error("Binary expression botch"); exit(1); } t = *--sp; *sp++ = tnode(op, geti(), *--sp, t); } else sp[-1] = tnode(op, geti(), sp[-1]); break; } } } geti() { register i; i = getchar(); i += getchar()<<8; return(i); } outname(s) { register char *p, c; register n; p = s; n = 0; while (c = getchar()) { *p++ = c; n++; } do { *p++ = 0; } while (n++ < 8); return(s); } strasg(atp) struct fasgn *atp; { register struct tnode *tp; register nwords, i; nwords = atp->mask/sizeof(int); tp = atp->tr1; if (tp->op != ASSIGN) { if (tp->op==RFORCE) { /* function return */ if (sfuncr.nloc==0) { sfuncr.nloc = isn++; printf(".bss\nL%d:.=.+%o\n.text\n", sfuncr.nloc, nwords*sizeof(int)); } atp->tr1 = tnode(ASSIGN, STRUCT, &sfuncr, tp->tr1); strasg(atp); printf("mov $L%d,r0\n", sfuncr.nloc); return; } if (tp->op==CALL) { rcexpr(tp, efftab, 0); return; } error("Illegal structure operation"); return; } tp->tr2 = strfunc(tp->tr2); if (nwords==1) setype(tp, INT); else if (nwords==sizeof(int)) setype(tp, LONG); else { if (tp->tr1->op!=NAME && tp->tr1->op!=STAR || tp->tr2->op!=NAME && tp->tr2->op!=STAR) { error("unimplemented structure assignment"); return; } tp->tr1 = tnode(AMPER, STRUCT+PTR, tp->tr1); tp->tr2 = tnode(AMPER, STRUCT+PTR, tp->tr2); tp->op = STRSET; tp->type = STRUCT+PTR; tp = optim(tp); rcexpr(tp, efftab, 0); if (nwords < 7) { for (i=0; itr1) { p->type = t; if (p->op==AMPER) t = decref(t); else if (p->op==STAR) t = incref(t); else if (p->op==ASSIGN) setype(p->tr2, t); ((else if (p->op!=PLUS) break; } } /* * Reduce the degree-of-reference by one. * e.g. turn "ptr-to-int" into "int". */ decref(at) { register t; t = at; if ((t & ~TYPE) == 0) { error("Illegal indirection"); return(t); } return((t>>TYLEN) & ~TYPE | t&TYPE); } /* * Increase the degree of reference by * one; e.g. turn "int" to "ptr-to-int". */ incref(t) { return(((t&~TYPE)<= (unsigned)56000) { error("Warning: possibly too much data"); nerror--; } exit(nerror!=0); } /* * Given a tree, a code table, and a * count of available registers, find the code table * for the appropriate operator such that the operands * are of the right type and the number of registers * required is not too large. * Return a ptr to the table entry or 0 if none found. */ char * match(atree, table, nrleft, nocvt) struct tnode *atree; struct table *table; { #define NOCVL 1 #define NOCVR 2 int op, d1, d2, dope; struct tnode *p2; register struct tnode *p1, *tree; register struct optab *opt; if ((tree=atree)==0) return(0); if (table==lsptab) table = sptab; if ((op = tree->op)==0) return(0); dope = opdope[op]; if ((dope&LEAF) == 0) p1 = tree->tr1; else p1 = tree; d1 = dcalc(p1, nrleft); if ((dope&BINARY)!=0) { p2 = tree->tr2; /* * If a subtree starts off with a conversion operator, * try for a match with the conversion eliminated. * E.g. int = double can be done without generating * the converted int in a register by * movf double,fr0; movfi fr0,int . */ if (opdope[p2->op]&CNVRT && (nocvt&NOCVR)==0 && (opdope[p2->tr1->op]&CNVRT)==0) { tree->tr2 = p2->tr1; if (opt = match(tree, table, nrleft, NOCVL)) return(opt); tree->tr2 = p2; } else if (opdope[p1->op]&CNVRT && (nocvt&NOCVL)==0 && (opdope[p1->tr1->op]&CNVRT)==0) { tree->tr1 = p1->tr1; if (opt = match(tree, table, nrleft, NOCVR)) return(opt); tree->tr1 = p1; } d2 = dcalc(p2, nrleft); } for (; table->op!=op; table++) if (table->op==0) return(0); for (opt = table->tabp; opt->tabdeg1!=0; opt++) { if (d1 > (opt->tabdeg1&077) || (opt->tabdeg1 >= 0100 && (p1->op != STAR))) continue; if (notcompat(p1, opt->tabtyp1, op)) { continue; } if ((opdope[op]&BINARY)!=0 && p2!=0) { if (d2 > (opt->tabdeg2&077) || (opt->tabdeg2 >= 0100) && (p2->op != STAR) ) continue; if (notcompat(p2,opt->tabtyp2, 0)) continue; } return(opt); } return(0); } /* * Given a tree, a code table, and a register, * produce code to evaluate the tree with the appropriate table. * Registers reg and upcan be used. * If there is a value, it is desired that it appear in reg. * The routine returns the register in which the value actually appears. * This routine must work or there is an error. * If the table called for is cctab, sptab, or efftab, * and tree can't be done using the called-for table, * another try is made. * If the tree can't be compiled using cctab, regtab is * used and a "tst" instruction is produced. * If the tree can't be compiled using sptab, * regtab is used and the register is pushed on the stack. * If the tree can't be compiled using efftab, * just use regtab. * Regtab must succeed or an "op not found" error results. * * A number of special cases are recognized, and * there is an interaction with the optimizer routines. */ rcexpr(atree, atable, reg) struct tnode *atree; struct table *atable; { register r; int modf, nargs, recurf; register struct tnode *tree; register struct table *table; table = atable; recurf = 0; if (reg<0) { recurf++; reg = ~reg; if (reg>=020) { reg =- 020; recurf++; } } again: if((tree=atree)==0) return(0); if (opdope[tree->op]&RELAT && tree->tr2->op==CON && tree->tr2->value==0 && table==cctab) tree = atree = tree->tr1; /* * fieldselect(...) : in efftab mode, * ignore the select, otherwise * do the shift and mask. */ if (tree->op == FSELT) { if (table==efftab) atree = tree = tree->tr1; else { tree->op = FSEL; atree = tree = optim(tree); } } switch (tree->op) { /* * Structure assignments */ case STRASG: strasg(tree); return(0); /* * An initializing expression */ case INIT: tree = optim(tree); doinit(tree->type, tree->tr'(kڴ^T W Z ] ` c f i l o r q1); return(0); /* * Put the value of an expression in r0, * for a switch or a return */ case RFORCE: tree = tree->tr1; if((r=rcexpr(tree, regtab, reg)) != 0) movreg(r, 0, tree); return(0); /* * sequential execution */ case SEQNC: r = nstack; rcexpr(tree->tr1, efftab, reg); nstack = r; atree = tree = tree->tr2; goto again; /* * In the generated &~ operator, * fiddle things so a PDP-11 "bit" * instruction will be produced when cctab is used. */ case ANDN: if (table==cctab) { tree->op = TAND; tree->tr2 = optim(tnode(COMPL, tree->type, tree->tr2)); } break; /* * Handle a subroutine call. It has to be done * here because if cexpr got called twice, the * arguments might be compiled twice. * There is also some fiddling so the * first argument, in favorable circumstances, * goes to (sp) instead of -(sp), reducing * the amount of stack-popping. */ case CALL: r = 0; nargs = 0; modf = 0; if (tree->tr1->op!=NAME || tree->tr1->class!=EXTERN) { nargs++; nstack++; } tree = tree->tr2; if(tree->op) { while (tree->op==COMMA) { r =+ comarg(tree->tr2, &modf); tree = tree->tr1; nargs++; } r =+ comarg(tree, &modf); nargs++; } tree = atree; tree->op = CALL2; if (modf && tree->tr1->op==NAME && tree->tr1->class==EXTERN) tree->op = CALL1; if (cexpr(tree, regtab, reg)<0) error("compiler botch: call"); popstk(r); nstack =- nargs; if (table==efftab || table==regtab) return(0); r = 0; goto fixup; /* * Longs need special treatment. */ case ASLSH: case LSHIFT: if (tree->type==LONG) { if (tree->tr2->op==ITOL) tree->tr2 = tree->tr2->tr1; else tree->tr2 = optim(tnode(LTOI,INT,tree->tr2)); if (tree->op==ASLSH) tree->op = ASLSHL; else tree->op = LLSHIFT; } break; /* * Try to change * to shift. */ case TIMES: case ASTIMES: tree = pow2(tree); } /* * Try to find postfix ++ and -- operators that can be * pulled out and done after the rest of the expression */ if (table!=cctab && table!=cregtab && recurf<2 && (opdope[tree->op]&LEAF)==0) { if (r=delay(&atree, table, reg)) { tree = atree; table = efftab; reg = r-1; } } /* * Basically, try to reorder the computation * so reg = x+y is done as reg = x; reg =+ y */ if (recurf==0 && reorder(&atree, table, reg)) { if (table==cctab && atree->op==NAME) return(reg); } tree = atree; if (table==efftab && tree->op==NAME) return(reg); if ((r=cexpr(tree, table, reg))>=0) return(r); if (table!=regtab && (table!=cctab||(opdope[tree->op]&RELAT)==0)) { if((r=cexpr(tree, regtab, reg))>=0) { fixup: modf = isfloat(tree); dbprint(tree->op); if (table==sptab || table==lsptab) { if (tree->type==LONG) { printf("mov\tr%d,-(sp)\n",r+1); nstack++; } printf("mov%c r%d,%c(sp)\n", modf, r, table==sptab? '-':0); nstack++; } if (table==cctab) printf("tst%c r%d\n", modf, r); return(r); } } /* * There's a last chance for this operator */ if (tree->op==LTOI) { r = rcexpr(tree->tr1, regtab, reg); if (r >= 0) { r++; goto fixup; } } if (tree->type == STRUCT) error("Illegal operation on structure"); else if (tree->op>0 && tree->opop]) error("No code table for op: %s", opntab[tree->op]); else error("No code table for op %d", tree->op); return(reg); } /* * Try to compile the tree with the code table using * registers areg and up. If successful, * return the register where the value actuall((y ended up. * If unsuccessful, return -1. * * Most of the work is the macro-expansion of the * code table. */ cexpr(atree, table, areg) struct tnode *atree; struct table *table; { int c, r; register struct tnode *p, *p1, *tree; struct table *ctable; struct tnode *p2; char *string; int reg, reg1, rreg, flag, opd; char *opt; tree = atree; reg = areg; p1 = tree->tr2; c = tree->op; opd = opdope[c]; /* * When the value of a relational or a logical expression is * desired, more work must be done. */ if ((opd&RELAT||c==LOGAND||c==LOGOR||c==EXCLA) && table!=cctab) { cbranch(tree, c=isn++, 1, reg); rcexpr(&czero, table, reg); branch(isn, 0); label(c); rcexpr(&cone, table, reg); label(isn++); return(reg); } if(c==QUEST) { if (table==cctab) return(-1); cbranch(tree->tr1, c=isn++, 0, reg); flag = nstack; rreg = rcexpr(p1->tr1, table, reg); nstack = flag; branch(r=isn++, 0); label(c); reg = rcexpr(p1->tr2, table, rreg); if (rreg!=reg) movreg(reg, rreg, tree->tr2); label(r); return(rreg); } reg = oddreg(tree, reg); reg1 = reg+1; /* * long values take 2 registers. */ if ((tree->type==LONG||opd&RELAT&&tree->tr1->type==LONG) && tree->op!=ITOL) reg1++; /* * Leaves of the expression tree */ if ((r = chkleaf(tree, table, reg)) >= 0) return(r); /* * x + (-1) is better done as x-1. */ if ((tree->op==PLUS||tree->op==ASPLUS) && (p1=tree->tr2)->op == CON && p1->value == -1) { p1->value = 1; tree->op =+ (MINUS-PLUS); } /* * Because of a peculiarity of the PDP11 table * char = *intreg++ and *--intreg cannot go through. */ if (tree->tr1->type==CHAR && tree->tr2->type!=CHAR && (tree->tr2->op==AUTOI||tree->tr2->op==AUTOD)) tree->tr2 = tnode(LOAD, tree->tr2->type, tree->tr2); if (table==cregtab) table = regtab; /* * The following peculiar code depends on the fact that * if you just want the codition codes set, efftab * will generate the right code unless the operator is * a shift or * postfix ++ or --. Unravelled, if the table is * cctab and the operator is not special, try first * for efftab; if the table isn't, if the operator is, * or the first match fails, try to match * with the table actually asked for. */ /* * Account for longs and oddregs; below is really * r = nreg - reg - (reg-areg) - (reg1-reg-1); */ r = nreg - reg + areg - reg1 + 1; if (table!=cctab || c==INCAFT || c==DECAFT || tree->type==LONG || c==ASRSH || c==ASLSH || c==ASULSH || (opt = match(tree, efftab, r, 0)) == 0) if ((opt=match(tree, table, r, 0))==0) return(-1); string = opt->tabstring; p1 = tree->tr1; if (p1->op==FCON && p1->value>0) { printf(".data\nL%d:%o;%o;%o;%o\n.text\n", p1->value, p1->fvalue); p1->value = -p1->value; } p2 = 0; if (opdope[tree->op]&BINARY) { p2 = tree->tr2; if (p2->op==FCON && p2->value>0) { printf(".data\nL%d:%o;%o;%o;%o\n.text\n", p2->value, p2->fvalue); p2->value = -p2->value; } } loop: /* * The 0200 bit asks for a tab. */ if ((c = *string++) & 0200) { c =& 0177; putchar('\t'); } switch (c) { case '\n': dbprint(tree->op); break; case '\0': if (!isfloat(tree)) if (tree->op==DIVIDE||tree->op==ASDIV||tree->op==PTOI) reg--; return(reg); /* A1 */ case 'A': p = p1; goto adr; /* A2 */ case 'B': p = p2; goto adr; adr: c = 0; while (*string=='\'') { c++; string++; } if (*string=='+') { c = 100; string++; } pname(p, c); goto loop; /* I */ case 'M': if ((c = *string)=='\'') string++; else c = 0; prins(tree->op, c, instab); goto loop; /* B1 */ case 'C': if ((opd&LEAF) != 0) p = tree; else p = p1; goto pbyte; /* BF */ case 'P': p = tree; goto pb1; /* B2 */ case 'D': p = p2; pbyte: if (p->type==CHAR) putchar('b'); pb1: if (isfloat(p)) putchar('f'); goto loop; /* BE */ case 'L': if (p1->type==CHAR || p2->type==CHAR) putchar('b'); p = tree; goto pb1; /* F */ case 'G': p = p1; flag = 01; goto subtre; /* S */ case 'K': p = p2; flag = 02; goto subtre; /* H */ case 'H': p = tree; flag = 04; subtre: ctable = regtab; if (flag&04) ctable = cregtab; c = *string++ - 'A'; if (*string=='!') { string++; c =| 020; /* force right register */ } if ((c&02)!=0) ctable = sptab; if ((c&04)!=0) ctable = cctab; if ((flag&01) && ctable==regtab && (c&01)==0 && (tree->op==DIVIDE||tree->op==MOD || tree->op==ASDIV||tree->op==ASMOD||tree->op==ITOL)) ctable = cregtab; if ((c&01)!=0) { p = p->tr1; if(collcon(p) && ctable!=sptab) { if (p->op==STAR) p = p->tr1; p = p->tr1; } } if (table==lsptab && ctable==sptab) ctable = lsptab; if (c&010) r = reg1; else if (opdope[p->op]&LEAF || p->degree < 2) r = reg; else r = areg; rreg = rcexpr(p, ctable, r); if (ctable!=regtab && ctable!=cregtab) goto loop; if (c&010) { if (c&020 && rreg!=reg1) movreg(rreg, reg1, p); else reg1 = rreg; } else if (rreg!=reg) if ((c&020)==0 && oddreg(tree, 0)==0 && tree->type!=LONG && (flag&04 || flag&01&&xdcalc(p2,nreg-rreg-1)<=(opt->tabdeg2&077) || flag&02&&xdcalc(p1,nreg-rreg-1)<=(opt->tabdeg1&077))) { reg = rreg; reg1 = rreg+1; } else movreg(rreg, reg, p); goto loop; /* R */ case 'I': r = reg; if (*string=='-') { string++; r--; } goto preg; /* R1 */ case 'J': r = reg1; preg: if (*string=='+') { string++; r++; } if (r>nreg || r>=4 && tree->type==DOUBLE) error("Register overflow: simplify expression"); printf("r%d", r); goto loop; case '-': /* check -(sp) */ if (*string=='(') { nstack++; if (table!=lsptab) putchar('-'); goto loop; } break; case ')': /* check (sp)+ */ putchar(')'); if (*string=='+') nstack--; goto loop; /* #1 */ case '#': p = p1->tr1; goto nmbr; /* #2 */ case '"': p = p2->tr1; nmbr: if(collcon(p)) { if (p->op==STAR) { printf("*"); p = p->tr1; } if ((p = p->tr2)->op == CON) { if (p->value) psoct(p->value); } else if (p->op==AMPER) pname(p->tr1, 0); } goto loop; /* * Certain adjustments for / % and PTOI */ case 'T': c = reg-1; if (tree->op == PTOI) { printf("bic r%d,r%d\nsbc r%d\n", c,c,c); goto loop; } if (p1->type==UNSIGN || p1->type&XTYPE) { printf("clr r%d\n", c); goto loop; } if (dcalc(p1, 5)>12 && !match(p1, cctab, 10, 0)) printf("tst r%d\n", reg); printf("sxt r%d\n", c); goto loop; case 'V': /* adc sbc, clr, or sxt as required for longs */ switch(tree->op) { case PLUS: case ASPLUS: case INCBEF: case INCAFT: printf("adc"); break; case MINUS: case ASMINUS: case NEG: case DECBEF: case DECAFT: printf("sbc"); break; case ASSIGN: p = tree->tr2; goto lcasev; case ASDIV: case ASMOD: case ASULSH: p = tree->tr1; lcasev: if (p->type!=LONG) { if (p->type==UNSIGN || p->type&XTYPE) printf("clr"); else printf("sxt"); goto loop; } default: while ((c = *string++)!='\n' && c!='\0'); break; } goto loop; /* * Mask used in field assignments */ case 'Z': printf("$%o", tree->mask); goto loop; /* * Relational on long values. * Might bug out early. E.g., * (long<0) can be determined with only 1 test. */ case 'X': if (xlongrel(*string++ - '0')) return(reg); goto loop; } putchar(c); goto loop; } /* * This routine just calls sreorder (below) * on the subtrees and then on the tree itself. * It returns non-zero if anything changed. */ reorder(treep, table, reg) struct tnode **treep; struct table *table; { register r, o; register struct tnode *p; p = *treep; o = p->op; if (opdope[o]&LEAF || o==LOGOR || o==LOGAND) return(0); while(sreorder(&p->tr1, regtab, reg, 1)) ; if (opdope[o]&BINARY) while(sreorder(&p->tr2, regtab, reg, 1)) ; r = 0; if (table!=cctab) while (sreorder(treep, table, reg, 0)) r++; *treep = optim(*treep); return(r); } /* * Basically this routine carries out two kinds of optimization. * First, it observes that "x + (reg = y)" where actually * the = is any assignment op is better done as "reg=y; x+reg". * In this case rcexpr is called to do the first part and the * tree is modified so the name of the register * replaces the assignment. * Moreover, expressions like "reg = x+y" are best done as * "reg = x; reg =+ y" (so long as "reg" and "y" are not the same!). */ sreorder(treep, table, reg, recurf) struct tnode **treep; struct table *table; { register struct tnode *p, *p1; p = *treep; if (opdope[p->op]&LEAF) return(0); if (p->op==PLUS && recurf) if (reorder(&p->tr2, table, reg)) *treep = p = optim(p); p1 = p->tr1; if (p->op==STAR || p->op==PLUS) { if (recurf && reorder(&p->tr1, table, reg)) *treep = p = optim(p); p1 = p->tr1; } if (p1->op==NAME) switch(p->op) { case ASLSH: case ASRSH: case ASSIGN: if (p1->class != REG||p1->type==CHAR||isfloat(p->tr2)) return(0); if (p->op==ASSIGN) switch (p->tr2->op) { case TIMES: if (!ispow2(p->tr2)) break; p->tr2 = pow2(p->tr2); case PLUS: case MINUS: case AND: case ANDN: case OR: case EXOR: case LSHIFT: case RSHIFT: p1 = p->tr2->tr2; if (xdcalc(p1, 16) > 12 || p1->op==NAME &&(p1->nloc==p->tr1->nloc || p1->regno==p->tr1->nloc)) return(0); p1 = p->tr2; p->tr2 = p1->tr1; if (p1->tr1->op!=NAME || p1->tr1->class!=REG || p1->tr1->nloc!=p->tr1->nloc) rcexpr(p, efftab, reg); p->tr2 = p1->tr2; p->op = p1->op + ASPLUS - PLUS; *treep = p; return(1); } goto OK; case ASTIMES: if (!ispow2(p)) return(0); case ASPLUS: case ASMINUS: case ASAND: case ASANDN: case ASOR: case ASXOR: case INCBEF: case DECBEF: OK: if (table==cctab||table==cregtab) reg =+ 020; rcexpr(optim(p), efftab, ~reg); *treep = p1; return(1); } return(0); } /* * Delay handles postfix ++ and -- * It observes that "x + y++" is better * treated as "x + y; y++". * If the operator is ++ or -- itself, * it calls rcexpr to load the oper((and, letting * the calling instance of rcexpr to do the * ++ using efftab. * Otherwise it uses sdelay to search for inc/dec * among the operands. */ delay(treep, table, reg) struct tnode **treep; { register struct tnode *p, *p1; register r; p = *treep; if ((p->op==INCAFT||p->op==DECAFT) && p->tr1->op==NAME) { return(1+rcexpr(p->tr1, table, reg)); } p1 = 0; if (opdope[p->op]&BINARY) { if (p->op==LOGAND || p->op==LOGOR) return(0); } p1 = sdelay(&p->tr2); if (p1==0) p1 = sdelay(&p->tr1); if (p1) { r = rcexpr(optim(p), table, reg); *treep = p1; return(r+1); } return(0); } sdelay(ap) struct tnode **ap; { register struct tnode *p, *p1; p = *ap; if ((p->op==INCAFT||p->op==DECAFT) && p->tr1->op==NAME) { *ap = ncopy(p->tr1); return(p); } if (p->op==STAR || p->op==PLUS) if (p1=sdelay(&p->tr1)) return(p1); if (p->op==PLUS) return(sdelay(&p->tr2)); return(0); } /* * Copy a tree node for a register variable. * Used by sdelay because if *reg-- is turned * into *reg; reg-- the *reg will in turn * be changed to some offset class, accidentally * modifying the reg--. */ ncopy(ap) struct tname *ap; { register struct tname *p, *q; p = ap; if (p->class!=REG) return(p); q = getblk(sizeof(*p)); q->op = p->op; q->type = p->type; q->class = p->class; q->offset = p->offset; q->nloc = p->nloc; return(q); } /* * If the tree can be immediately loaded into a register, * produce code to do so and return success. */ chkleaf(atree, table, reg) struct tnode *atree; { struct tnode lbuf; register struct tnode *tree; tree = atree; if (tree->op!=STAR && dcalc(tree, nreg-reg) > 12) return(-1); lbuf.op = LOAD; lbuf.type = tree->type; lbuf.degree = tree->degree; lbuf.tr1 = tree; return(rcexpr(&lbuf, table, reg)); } /* * Compile a function argument. * If the stack is currently empty, put it in (sp) * rather than -(sp); this will save a pop. * Return the number of bytes pushed, * for future popping. */ comarg(atree, flagp) int *flagp; { register struct tnode *tree; register retval; int i; int size; tree = atree; if (tree->op==STRASG) { size = tree->mask; tree = tree->tr1; tree = strfunc(tree); if (size <= 2) { setype(tree, INT); goto normal; } if (size <= 4) { setype(tree, LONG); goto normal; } if (tree->op!=NAME && tree->op!=STAR) { error("Unimplemented structure assignment"); return(0); } tree = tnode(AMPER, STRUCT+PTR, tree); tree = tnode(PLUS, STRUCT+PTR, tree, tconst(size, INT)); tree = optim(tree); retval = rcexpr(tree, regtab, 0); size =>> 1; if (size <= 5) { for (i=0; itype==LONG) { rcexpr(tree, sptab, 0); retval = arlength(tree->type); } else { (*flagp)++; rcexpr(tree, lsptab, 0); retval = 0; } return(retval); } struct tnode * strfunc(atp) struct tnode *atp; { register struct tnode *tp; tp = atp; if (tp->op != CALL) return(tp); setype(tp, STRUCT+PTR); return(tnode(STAR, STRUCT, tp)); } /* * Compile an initializing expression */ doinit(atype, atree) struct tnode *atree; { register struct tnode *tree; register int type; float sfval; double fval; long lval; tree = atree; type = atype; if (type==CHAR) { printf(".byte "); if (tree->type&XTYPE) goto illinit; type = INT; } if (type&XTYPE) type = INT; switch (type) { case INT: case UNSIGN: if (tree->op==FTOI) { if (tree->tr1->op!=FCON && tree->tr1->op!=SFCON) goto illinit; tree = tree->tr1; tree->value = tree->fvalue; tree->op = CON; } else if (tree->op==LTOI) { if (tree->tr1->op!=LCON) goto illinit; tree = tree->tr1; lval = tree->lvalue; tree->op = CON; tree->value = lval; } if (tree->op == CON) printf("%o\n", tree->value); else if (tree->op==AMPER) { pname(tree->tr1, 0); putchar('\n'); } else goto illinit; return; case DOUBLE: case FLOAT: if (tree->op==ITOF) { if (tree->tr1->op==CON) { fval = tree->tr1->value; } else goto illinit; } else if (tree->op==FCON || tree->op==SFCON) fval = tree->fvalue; else if (tree->op==LTOF) { if (tree->tr1->op!=LCON) goto illinit; fval = tree->tr1->lvalue; } else goto illinit; if (type==FLOAT) { sfval = fval; printf("%o; %o\n", sfval); } else printf("%o; %o; %o; %o\n", fval); return; case LONG: if (tree->op==FTOL) { tree = tree->tr1; if (tree->op==SFCON) tree->op = FCON; if (tree->op!= FCON) goto illinit; lval = tree->fvalue; } else if (tree->op==ITOL) { if (tree->tr1->op != CON) goto illinit; lval = tree->tr1->value; } else if (tree->op==LCON) lval = tree->lvalue; else goto illinit; printf("%o; %o\n", lval); return; } illinit: error("Illegal initialization"); } movreg(r0, r1, tree) struct tnode *tree; { register char *s; if (r0==r1) return; if (tree->type==LONG) { s = "mov r%d,r%d\nmov r%d,r%d\n"; if (r0 < r1) printf(s, r0+1,r1+1,r0,r1); else printf(s, r0,r1,r0+1,r1+1); return; } printf("mov%c r%d,r%d\n", isfloat(tree), r0, r1); } ')k!!6 9 < ? B E H K N Q ' /* * C code generator header */ #include #define LTYPE long /* change to int for no long consts */ #define NCPS 8 #define NULL 0 /* * Tree node for unary and binary */ struct tnode { int op; int type; int degree; struct tnode *tr1, *tr2; }; /* * tree names for locals */ struct tname { int op; int type; char class; char regno; int offset; int nloc; }; /* * tree names for externals */ struct xtname { int op; int type; char class; char regno; int offset; char name[NCPS]; }; struct tconst { int op; int type; int value; }; /* * long constants */ struct lconst { int op; int type; LTYPE lvalue; }; struct ftconst { int op; int type; int value; double fvalue; }; /* * Node used for field assignemnts */ struct fasgn { int op; int type; int degree; struct tnode *tr1, *tr2; int mask; }; struct optab { char tabdeg1; char tabtyp1; char tabdeg2; char tabtyp2; char *tabstring; }; struct table { int tabop; struct optab *tabp; }; struct instab { int iop; char *str1; char *str2; }; struct swtab { int swlab; int swval; }; char maprel[]; char notrel[]; int nreg; int isn; int namsiz; int line; int nerror; struct table cctab[]; struct table efftab[]; struct table regtab[]; struct table sptab[]; struct table lsptab[1]; struct instab instab[]; struct instab branchtab[]; int opdope[]; char *opntab[]; int nstack; int nfloat; struct tname sfuncr; char *funcbase; char *curbase; char *coremax; struct tconst czero, cone; struct ftconst fczero; long totspace; /* * Some special stuff for long comparisons */ int xlab1, xlab2, xop, xzero; /* operators */ #define EOFC 0 #define SEMI 1 #define LBRACE 2 #define RBRACE 3 #define LBRACK 4 #define RBRACK 5 #define LPARN 6 #define RPARN 7 #define COLON 8 #define COMMA 9 #define FSEL 10 #define FSELR 11 #define FSELT 12 #define FSELA 16 #define ULSH 17 #define ASULSH 18 #define KEYW 19 #define NAME 20 #define CON 21 #define STRING 22 #define FCON 23 #define SFCON 24 #define LCON 25 #define SLCON 26 #define AUTOI 27 #define AUTOD 28 #define INCBEF 30 #define DECBEF 31 #define INCAFT 32 #define DECAFT 33 #define EXCLA 34 #define AMPER 35 #define STAR 36 #define NEG 37 #define COMPL 38 #define DOT 39 #define PLUS 40 #define MINUS 41 #define TIMES 42 #define DIVIDE 43 #define MOD 44 #define RSHIFT 45 #define LSHIFT 46 #define AND 47 #define ANDN 55 #define OR 48 #define EXOR 49 #define ARROW 50 #define ITOF 51 #define FTOI 52 #define LOGAND 53 #define LOGOR 54 #define FTOL 56 #define LTOF 57 #define ITOL 58 #define LTOI 59 #define ITOP 13 #define PTOI 14 #define LTOP 15 #define EQUAL 60 #define NEQUAL 61 #define LESSEQ 62 #define LESS 63 #define GREATEQ 64 #define GREAT 65 #define LESSEQP 66 #define LESSP 67 #define GREATQP 68 #define GREATP 69 #define ASPLUS 70 #define ASMINUS 71 #define ASTIMES 72 #define ASDIV 73 #define ASMOD 74 #define ASRSH 75 #define ASLSH 76 #define ASAND 77 #define ASOR 78 #define ASXOR 79 #define ASSIGN 80 #define TAND 81 #define LTIMES 82 #define LDIV 83 #define LMOD 84 #define ASANDN 85 #define LASTIMES 86 #define LASDIV 87 #define LASMOD 88 #define QUEST 90 #define MAX 93 #define MAXP 94 #define MIN 95 #define MINP 96 #define LLSHIFT 91 #define ASLSHL 92 #define SEQNC 97 #define CALL1 98 #define CALL2 99 #define CALL 100 #define MCALL 101 #define JUMP 102 #define CBRANCH 103 #define INIT 104 #define SETREG 105 #define LOAD 106 #define ITOC 109 #define RFORCE 110 /* * Intermediate code operators */ #define BRANCH 111 #define LABEL 112 #define NLABEL 113 #define RLABEL 114 #define STRASG 115 #define STRSET 116 #define BDATA 200 #define PROG 202 #define DATA 203 #define BSS 204 #define CSPACE 205 #define SSPACE 206 #define SYMDEF 207 #define SAVE 208 #define RETRN 209 #define EVEN 210 #define PROFIL 212 #define SWIT 213 #define EXPR 214 #define SNAME 215 #define RNAME 216 #define ANAME 217 #define NULLOP 218 #define SETSTK 219 #define SINIT 220 #define GLOBAL 221 #define C3BRANCH 222 /* * types */ #define INT 0 #define CHAR 1 #define FLOAT 2 #define DOUBLE 3 #define STRUCT 4 #define RSTRUCT 5 #def((ine LONG 6 #define UNSIGN 7 #define TYLEN 2 #define TYPE 07 #define XTYPE (03<<3) #define PTR 010 #define FUNC 020 #define ARRAY 030 /* storage classes */ #define KEYWC 1 #define MOS 10 #define AUTO 11 #define EXTERN 12 #define STATIC 13 #define REG 14 #define STRTAG 15 #define ARG 16 #define OFFS 20 #define XOFFS 21 #define SOFFS 22 /* Flag bits */ #define BINARY 01 #define LVALUE 02 #define RELAT 04 #define ASSGOP 010 #define LWORD 020 #define RWORD 040 #define COMMUTE 0100 #define RASSOC 0200 #define LEAF 0400 #define CNVRT 01000 '*kꛓ  ! $ ' * - 0 3 {&?i?i # #include "c0.h" /* * info on operators: * 01-- is binary operator * 02-- left (or only) operand must be lvalue * 04-- is relational operator * 010-- is assignment-type operator * 020-- non-float req. on left * 040-- non-float req. on right * 0100-- is commutative * 0200-- is right, not left-associative * 0400-- is leaf of tree * *0XX000-- XX is priority of operator */ int opdope[] { 000000, /* EOFC */ 000000, /* ; */ 000000, /* { */ 000000, /* } */ 036000, /* [ */ 002000, /* ] */ 037000, /* ( */ 002000, /* ) */ 014201, /* : */ 007001, /* , */ 000001, /* field selection */ 034201, /* CAST */ 000000, /* ETYPE */ 000001, /* integer->ptr */ 000001, /* ptr->integer */ 000001, /* long->ptr */ 000000, /* 16 */ 000000, /* 17 */ 000000, /* 18 */ 000000, /* 19 */ 000400, /* name */ 000400, /* short constant */ 000400, /* string */ 000400, /* float */ 000400, /* double */ 000400, /* long constant */ 000400, /* long constant <= 16 bits */ 000000, /* 27 */ 000000, /* 28 */ 000000, /* 29 */ 034203, /* ++pre */ 034203, /* --pre */ 034203, /* ++post */ 034203, /* --post */ 034200, /* !un */ 034202, /* &un */ 034220, /* *un */ 034200, /* -un */ 034220, /* ~un */ 036001, /* . (structure reference) */ 030101, /* + */ 030001, /* - */ 032101, /* * */ 032001, /* / */ 032001, /* % */ 026061, /* >> */ 026061, /* << */ 020161, /* & */ 017161, /* | */ 017161, /* ^ */ 036001, /* -> */ 000000, /* int -> double */ 000000, /* double -> int */ 016001, /* && */ 015001, /* || */ 030001, /* &~ */ 000000, /* 56 */ 000000, /* 57 */ 000000, /* 58 */ 000000, /* 59 */ 022005, /* == */ 022005, /* != */ 024005, /* <= */ 024005, /* < */ 024005, /* >= */ 024005, /* > */ 024005, /*

p */ 024005, /* >=p */ 012213, /* =+ */ 012213, /* =- */ 012213, /* =* */ 012213, /* =/ */ 012213, /* =% */ 012253, /* =>> */ 012253, /* =<< */ 012253, /* =& */ 012253, /* =| */ 012253, /* =^ */ 012213, /* = */ 000000, /* 81 */ 000000, /* 82 */ 000000, /* 83 */ 000000, /* 84 */ 000000, /* 85 */ 000000, /* 86 */ 000000, /* 87 */ 000000, /* 88 */ 000000, /* 89 */ 014201, /* ? */ 034200, /* sizeof */ 000000, /* 92 */ 021101, /* min */ 021101, /* minp */ 021101, /* max */ 021101, /* maxp */ 007001, /* , */ 000000, /* 98 */ 000000, /* 99 */ 036001, /* call */ 036001, /* mcall */ 000000, /* goto */ 000000, /* jump cond */ 000000, /* branch cond */ 000000, /* 105 */ 000000, /* 106 */ 000000, /* 107 */ 000000, /* 108 */ 000000, /* char->int */ 000000 /* force r0 */ }; /* * conversion table: * FTI: float (or double) to integer * ITF: integer to float * ITP: integer to pointer * ITL: integer to long * LTI: long to integer * LTF: long to float * FTL: float to long * PTI: pointer to integer * LTP: long to ptr (ptr[long]) * XX: usually illegal * When FTI, LTI, FTL are added in they specify * that it is the left operand that should be converted. * For + this is done and the conversion is turned back into * ITF, ITL, LTF. * For = however the left operand can't be converted * and the specified conversion is applied to the rhs. */ char cvtab[4][4] { /* int double long ptr */ /* int */ 0, (FTI<<4)+ITF, (LTI<<4)+ITL, (ITP<<4)+ITP, /* double */ ITF, 0, LTF, XX, /* long */ ITL, (FTL<<4)+LTF, 0, (LTP<<4)+LTP, /* ptr */ ITP, XX, LTP, PTI, }; /* * relate conversion numbers to operators */ char cvntab[] { 0, ITOF, ITOL, LTOF, ITOP, PTOI, FTOI, LTOI, FTOL, LTOP, }; /* * character type table */ char ctab[] { EOFC, INSERT, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, SPACE, NEWLN, SPACE, SPACE, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, SPACE, EXCLA, DQUOTE, SHARP, UNKN, MOD, AND, SQUOTE, LPARN, RPARN, TIMES, PLUS, COMMA, MINUS, PERIOD, DIVIDE, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, COLON, SEMI, LESS, ASSIGN, GREAT, QUEST, UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LBRACK, BSLASH, RBRACK, EXOR, LETTER, UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LBRACE, OR, RBRACE, COMPL, UNKN }; '+kD    b& # /* * C compiler * * */ #include "c0.h" /* * Reduce the degree-of-reference by one. * e.g. turn "ptr-to-int" into "int". */ decref(at) { register t; t = at; if ((t & ~TYPE) == 0) { error("Illegal indirection"); return(t); } return((t>>TYLEN) & ~TYPE | t&TYPE); } /* * Increase the degree of reference by * one; e.g. turn "int" to "ptr-to-int". */ incref(t) { return(((t&~TYPE)<op==INIT && tp->tr1->op==CON) { if (tp->type==CHAR) { outcode("B1N0", BDATA, tp->tr1->value); return; } else if (tp->type==INT || tp->type==UNSIGN) { outcode("BN", SINIT, tp->tr1->value); return; } } treeout(tp, 0); outcode("BN", EXPR, line); } treeout(atp, isstruct) struct tnode *atp; { register struct tnode *tp; register struct hshtab *hp; register nextisstruct; if ((tp = atp) == 0) { outcode("B", NULLOP); return; } nextisstruct = tp->type==STRUCT; switch(tp->op) { case NAME: hp = tp->tr1; if (hp->hclass==TYPEDEF) error("Illegal use of type name"); outcode("BNN", NAME, hp->hclass==0?STATIC:hp->hclass, tp->type); if (hp->hclass==EXTERN) outcode("S", hp->name); else outcode("N", hp->hoffset); break; case LCON: outcode("BNNN", tp->op, tp->type, tp->lvalue); break; case CON: outcode("BNN", tp->op, tp->type, tp->value); break; case FCON: outcode("BNF", tp->op, tp->type, tp->cstr); break; case STRING: outcode("BNNN", NAME, STATIC, tp->type, tp->tr1); break; case FSEL: treeout(tp->tr1, nextisstruct); outcode("BNNN",tp->op,tp->type,tp->tr2->bitoffs,tp->tr2->flen); break; case ETYPE: error("Illegal use of type"); break; case AMPER: treeout(tp->tr1, 1); outcode("BN", tp->op, tp->type); break; case CALL: treeout(tp->tr1, 1); treeout(tp->tr2, 0); outcode("BN", CALL, tp->type); break; default: treeout(tp->tr1, nextisstruct); if (opdope[tp->op]&BINARY) treeout(tp->tr2, nextisstruct); outcode("BN", tp->op, tp->type); break; } if (nextisstruct && isstruct==0) outcode("BNN", STRASG, STRUCT, tp->strp->ssize); } /* * Generate a branch */ branch(lab) { outcode("BN", BRANCH, lab); } /* * Generate a label */ label(l) { outcode("BN", LABEL, l); } /* * ap is a tree node whose type * is some kind of pointer; return the size of the object * to which the pointer points. */ plength(ap) struct tname *ap; { register t, l; register struct tnode *p; p = ap; if (p==0 || ((t=p->type)&~TYPE) == 0) /* not a reference */ return(1); p->type = decref(t); l = length(p); p->type = t; return(l); } /* * return the number of bytes in the object * whose tree node is acs. */ length(acs) struct tnode *acs; { register t, elsz; long n; register struct tnode *cs; int nd; cs = acs; t = cs->type; n = 1; nd = 0; while ((t&XTYPE) == ARRAY) { t = decref(t); n =* cs->subsp[nd++]; } if ((t&~TYPE)==FUNC) return(0); if (t>=PTR) elsz = SZPTR; else switch(t&TYPE) { case INT: case UNSIGN: elsz = SZINT; break; case CHAR: elsz = 1; break; case FLOAT: elsz = SZFLOAT; break; case LONG: elsz = SZLONG; break; case DOUBLE: elsz = SZDOUB; break; case STRUCT: if ((elsz = cs->strp->ssize) == 0) error("U((ndefined structure"); break; default: error("Compiler error (length)"); return(0); } n *= elsz; if (n >= (unsigned)50000) { error("Warning: very large data structure"); nerror--; } return(n); } /* * The number of bytes in an object, rounded up to a word. */ rlength(cs) struct tnode *cs; { return((length(cs)+ALIGN) & ~ALIGN); } /* * After an "if (...) goto", look to see if the transfer * is to a simple label. */ simplegoto() { register struct hshtab *csp; if ((peeksym=symbol())==NAME && nextchar()==';') { csp = csym; if (csp->hblklev == 0) pushdecl(csp); if (csp->hclass==0 && csp->htype==0) { csp->htype = ARRAY; csp->hflag =| FLABL; if (csp->hoffset==0) csp->hoffset = isn++; } if ((csp->hclass==0||csp->hclass==STATIC) && csp->htype==ARRAY) { peeksym = -1; return(csp->hoffset); } } return(0); } /* * Return the next non-white-space character */ nextchar() { while (spnextchar()==' ') peekc = 0; return(peekc); } /* * Return the next character, translating all white space * to blank and handling line-ends. */ spnextchar() { register c; if ((c = peekc)==0) c = getchar(); if (c=='\t' || c=='\014') /* FF */ c = ' '; else if (c=='\n') { c = ' '; if (inhdr==0) line++; inhdr = 0; } else if (c=='\001') { /* SOH, insert marker */ inhdr++; c = ' '; } peekc = c; return(c); } /* * is a break or continue legal? */ chconbrk(l) { if (l==0) error("Break/continue error"); } /* * The goto statement. */ dogoto() { register'+k~V    b& struct tnode *np; *cp++ = tree(); build(STAR); chkw(np = *--cp, -1); rcexpr(block(JUMP,0,NULL,NULL,np)); } /* * The return statement, which has to convert * the returned object to the function's type. */ doret() { register struct tnode *t; if (nextchar() != ';') { t = tree(); *cp++ = &funcblk; *cp++ = t; build(ASSIGN); cp[-1] = cp[-1]->tr2; if (funcblk.type==CHAR) cp[-1] = block(ITOC, INT, NULL, NULL, cp[-1]); build(RFORCE); rcexpr(*--cp); } branch(retlab); } /* * Write a character on the error output. */ /* * Coded output: * B: beginning of line; an operator * N: a number * S: a symbol (external) * 1: number 1 * 0: number 0 */ outcode(s, a) char *s; { register *ap; register FILE *bufp; int n; register char *np; bufp = stdout; if (strflg) bufp = sbufp; ap = &a; for (;;) switch(*s++) { case 'B': putc(*ap++, bufp); putc(0376, bufp); continue; case 'N': putc(*ap, bufp); putc(*ap++>>8, bufp); continue; case 'F': n = 1000; np = *ap++; goto str; case 'S': n = NCPS; np = *ap++; if (*np) putc('_', bufp); str: while (n-- && *np) { putc(*np++&0177, bufp); } putc(0, bufp); continue; case '1': putc(1, bufp); putc(0, bufp); continue; case '0': putc(0, bufp); putc(0, bufp); continue; case '\0': if (ferror(bufp)) { error("Write error on temp"); exit(1); } return; default: error("Botch in outcode"); } } ',k0l2 A&>i>i # /* * C compiler, phase 1 * * * Handles processing of declarations, * except for top-level processing of * externals. */ #include "c0.h" /* * Process a sequence of declaration statements */ declist(sclass) { register sc, offset; struct hshtab typer; offset = 0; sc = sclass; while (getkeywords(&sclass, &typer)) { offset = declare(sclass, &typer, offset); sclass = sc; } return(offset+align(INT, offset, 0)); } /* * Read the keywords introducing a declaration statement * Store back the storage class, and fill in the type * entry, which looks like a hash table entry. */ getkeywords(scptr, tptr) int *scptr; struct hshtab *tptr; { register skw, tkw, longf; int o, isadecl, ismos, unsignf; isadecl = 0; longf = 0; unsignf = 0; tptr->htype = INT; tptr->hstrp = NULL; tptr->hsubsp = NULL; tkw = -1; skw = *scptr; ismos = skw==MOS||skw==MOU; for (;;) { mosflg = ismos && isadecl; o = symbol(); if (o==NAME && csym->hclass==TYPEDEF && tkw<0) { tkw = csym->htype; tptr->hsubsp = csym->hsubsp; tptr->hstrp = csym->hstrp; isadecl++; continue; } switch (o==KEYW? cval: -1) { case AUTO: case STATIC: case EXTERN: case REG: case TYPEDEF: if (skw && skw!=cval) { if (skw==ARG && cval==REG) cval = AREG; else error("Conflict in storage class"); } skw = cval; break; case UNSIGN: unsignf++; break; case LONG: longf++; break; case ENUM: strdec(ismos, cval); cval = INT; goto types; case UNION: case STRUCT: tptr->hstrp = strdec(ismos, cval); cval = STRUCT; case INT: case CHAR: case FLOAT: case DOUBLE: types: if (tkw>=0) error("Type clash"); tkw = cval; break; default: peeksym = o; if (isadecl==0) return(0); if (tkw<0) tkw = INT; if (skw==0) skw = blklev==0? DEFXTRN: AUTO; if (unsignf) { if (tkw==INT) tkw = UNSIGN; else error("Misplaced 'unsigned'"); } if (longf) { if (tkw==FLOAT) tkw = DOUBLE; else if (tkw==INT) tkw = LONG; else error("Misplaced 'long'"); } *scptr = skw; tptr->htype = tkw; return(1); } isadecl++; } } /* * Process a structure, union, or enum declaration; a subroutine * of getkeywords. */ struct str * strdec(mosf, kind) { register elsize, o; register struct hshtab *ssym; int savebits; struct hshtab **savememlist; int savenmems; struct str *strp; struct hshtab *ds; struct hshtab *mems[NMEMS]; struct hshtab typer; int tagkind; if (kind!=ENUM) { tagkind = STRTAG; mosflg = 1; } else tagkind = ENUMTAG; ssym = 0; if ((o=symbol())==NAME) { ssym = csym; mosflg = mosf; o = symbol(); if (o==LBRACE && ssym->hblklevhclass==0) { ssym->hclass = tagkind; ssym->strp = gblock(sizeof(*strp)); funcbase = curbase; ssym->strp->ssize = 0; ssym->strp->memlist = NULL; } if (ssym->hclass != tagkind) redec(); strp = ssym->strp; } else { strp = gblock(sizeof(*strp)); funcbase = curbase; strp->ssize = 0; strp->memlist = NULL; } mosflg = 0; if (o != LBRACE) { if (ssym==0) goto syntax; if (ssym->hclass!=tagkind) error("Bad structure/union/enum name"); peeksym = o; } else { ds = defsym; mosflg = 0; savebits = bitoffs; savememlist = memlist; savenmems = nmems; memlist = mems; nmems = 2; bitoffs = 0; if (kind==ENUM) { typer.htype = INT; typer.hstrp = strp; declare(ENUM, &typer, 0); } else elsize = declist(kind==UNION?MOU:MOS); bitoffs = savebits; defsym = ds; if (strp->ssize) error("%.8s redeclared", ssym->name); strp->ssize = elsize; *memlist++ = NULL; strp->memlist = gblock((memlist-mems)*sizeof(*memlist)); funcbase = curbase; for (o=0; &mems[o] != memlist; o++) strp->memlist[o] = mems[o]; memlist = savememlist; nmems = savenmems; if ((o = symbol()) != RBRACE) goto syntax; } return(strp); syntax: decsyn(o); return(0); } /* * Process a comma-separated list of declarators */ declare(askw, tptr, offset) struct hshtab *tptr; { register int o; register int skw, isunion; skw = askw; isunion = 0; if (skw==MOU) { skw = MOS; isunion++; mosflg = 1; if ((peeksym=symbol()) == SEMI) { o = length(tptr); if (o>offset) offset = o; } } do { if (skw==ENUM && (peeksym=symbol())==RBRACE) { o = peeksym; peeksym = -1; break; } o = decl1(skw, tptr, isunion?0:offset, NULL); if (isunion) { o =+ align(CHAR, o, 0); if (o>offset) offset = o; } else offset =+ o; } while ((o=symbol()) == COMMA); if (o==RBRACE) { peeksym = o; o = SEMI; } if (o!=SEMI && (o!=RPARN || skw!=ARG1)) decsyn(o); return(offset); } /* * Process a single declarator */ decl1(askw, atptr, offset, absname) struct hshtab *atptr, *absname; { int t1, chkoff, a, elsize; register int skw; int type; register struct hshtab *dsym; register struct hshtab *tptr; struct tdim dim; struct field *fldp; int *dp; int isinit; skw = askw; tptr = atptr; chkoff = 0; mosflg = skw==MOS; dim.rank = 0; if (((peeksym=',kl2 A&>i>isymbol())==SEMI || peeksym==RPARN) && absname==NULL) return(0); /* * Filler field */ if (peeksym==COLON && skw==MOS) { peeksym = -1; t1 = conexp(); elsize = align(tptr->htype, offset, t1); bitoffs =+ t1; return(elsize); } t1 = getype(&dim, absname); if (t1 == -1) return(0); if (tptr->hsubsp) { type = tptr->htype; for (a=0; type&XTYPE;) { if ((type&XTYPE)==ARRAY) dim.dimens[dim.rank++] = tptr->hsubsp[a++]; type =>> TYLEN; } } type = tptr->htype & ~TYPE; while (t1&XT((YPE) { if (type&BIGTYPE) { typov(); type = t1 = 0; } type = type<> TYLEN; } type =| tptr->htype&TYPE; if (absname) defsym = absname; dsym = defsym; if (dsym->hblklev < blklev) pushdecl(dsym); if (dim.rank == 0) dsym->subsp = NULL; else { dp = gblock(dim.rank*sizeof(dim.rank)); funcbase = curbase; if (skw==EXTERN) maxdecl = curbase; for (a=0; ahtype&XTYPE) == ARRAY && dsym->subsp[a] && t1!=dsym->subsp[a]) redec(); } dsym->subsp = dp; } if ((type&XTYPE) == FUNC) { if (skw==AUTO) skw = EXTERN; if ((skw!=EXTERN && skw!=TYPEDEF) && absname==NULL) error("Bad func. storage class"); } if (!(dsym->hclass==0 || ((skw==ARG||skw==AREG) && dsym->hclass==ARG1) || (skw==EXTERN && dsym->hclass==EXTERN && dsym->htype==type))) if (skw==MOS && dsym->hclass==MOS && dsym->htype==type) chkoff = 1; else { redec(); goto syntax; } if (dsym->hclass && (dsym->htype&TYPE)==STRUCT && (type&TYPE)==STRUCT) if (dsym->hstrp != tptr->hstrp) { error("Warning: structure redeclaration"); nerror--; } dsym->htype = type; if (tptr->hstrp) dsym->hstrp = tptr->hstrp; if (skw==TYPEDEF) { dsym->hclass = TYPEDEF; return(0); } if (absname) return(0); if (skw==ARG1) { if (paraml==0) paraml = dsym; else parame->hoffset = dsym; parame = dsym; dsym->hclass = skw; return(0); } elsize = 0; if (skw==MOS) { elsize = length(dsym); if ((peeksym = symbol())==COLON) { elsize = 0; peeksym = -1; t1 = conexp(); a = align(type, offset, t1); if (dsym->hflag&FFIELD) { if (dsym->hstrp->bitoffs!=bitoffs || dsym->hstrp->flen!=t1) redec(); } else { dsym->hstrp = gblock(sizeof(*fldp)); funcbase = curbase; } dsym->hflag =| FFIELD; dsym->hstrp->bitoffs = bitoffs; dsym->hstrp->flen = t1; bitoffs =+ t1; } else a = align(type, offset, 0); elsize =+ a; offset =+ a; if (++nmems >= NMEMS) { error("Too many structure members"); nmems =- NMEMS/2; memlist =- NMEMS/2; } if (a) *memlist++ = &structhole; if (chkoff && dsym->hoffset != offset) redec(); dsym->hoffset = offset; *memlist++ = dsym; } if (skw==REG) if ((dsym->hoffset = goodreg(dsym)) < 0) skw = AUTO; dsym->hclass = skw; isinit = 0; if ((a=symbol())!=COMMA && a!=SEMI && a!=RBRACE) isinit++; if (a!=ASSIGN) peeksym = a; if (skw==AUTO) { /* if (STAUTO < 0) { */ autolen =- rlength(dsym); dsym->hoffset = autolen; if (autolen < maxauto) maxauto = autolen; /* } else { */ /* dsym->hoffset = autolen; */ /* autolen =+ rlength(dsym); */ /* if (autolen > maxauto) */ /* maxauto = autolen; */ /* } */ if (isinit) cinit(dsym, 0, AUTO); } else if (skw==STATIC) { dsym->hoffset = isn; if (isinit) { outcode("BBN", DATA, LABEL, isn++); if (cinit(dsym, 1, STATIC) & ALIGN) outcode("B", EVEN); } else outcode("BBNBN", BSS, LABEL, isn++, SSPACE, rlength(dsym)); outcode("B", PROG); } else if (skw==REG && isinit) cinit(dsym, 0, REG); else if (skw==ENUM) { if (type!=INT) error("Illegal enumeration %.8s", dsym->name); dsym->hclass = ENUMCON; dsym->hoffset = offset; if (isinit) cinit(dsym, 0, ENUMCON); elsize = dsym->hoffset-offset+1; } prste(dsym); syntax: return(elsize); } /* * Push down an outer-block declaration * after redeclaration in an inner block. */ pushdecl(asp) struct phshtab *asp; { register struct phshtab *sp, *nsp; sp = asp; nsp = gblock(sizeof(*nsp)); maxdecl = funcbase = curbase; cpysymb(nsp, sp); sp->hclass = 0; sp->hflag =& (FKEYW|FMOS); sp->htype = 0; sp->hoffset = 0; sp->hblklev = blklev; sp->hpdown = nsp; } /* * Copy the non-name part of a symbol */ cpysymb(s1, s2) struct phshtab *s1, *s2; { register struct phshtab *rs1, *rs2; rs1 = s1; rs2 = s2; rs1->hclass = rs2->hclass; rs1->hflag = rs2->hflag; rs1->htype = rs2->htype; rs1->hoffset = rs2->hoffset; rs1->hsubsp = rs2->hsubsp; rs1->hstrp = rs2->hstrp; rs1->hblklev = rs2->hblklev; rs1->hpdown = rs2->hpdown; } /* * Read a declarator and get the implied type */ getype(adimp, absname) struct tdim *adimp; struct hshtab *absname; { static struct hshtab argtype; int type; register int o; register struct hshtab *ds; register struct tdim *dimp; ds = defsym; dimp = adimp; type = 0; switch(o=symbol()) { case TIMES: type = getype(dimp, absname); if (type==-1) return(type); if (type&BIGTYPE) { typov(); type = 0; } return(type<rank>=5) { error("Rank too large"); dimp->rank = 4; } if ((o=symbol()) != RBRACK) { peeksym = o; cval = conexp(); defsym = ds; if ((o=symbol())!=RBRACK) goto syntax; } else { if (dimp->rank!=0) error("Null dimension"); cval = 0; } dimp->dimens[dimp->rank++] = cval; if (type&BIGTYPE) { typov(); type = 0; } type = type<offset) bitoffs = 0; } if (flen) { if (type==INT || type==UNSIGN) { if (flen > NBPW) error(ftl); if (flen+bitoffs > NBPW) { bitoffs = 0; a =+ NCPW; } } else if (type==CHAR) { if (flen > NBPC) error(ftl); if (flen+bitoffs > NBPC) { bitoffs = 0; a =+ 1; } } else error("Bad type for field"); } return(a-offset); } /* * Complain about syntax error in declaration */ decsyn(o) { error("Declaration syntax"); errflush(o); } /* * Complain about a redeclaration */ redec() { error("%.8s redeclared", defsym->name); } /* * Determine if a variable is suitable for storage in * a register; if so return the register number */ goodreg(hp) struct hshtab *hp; { int type; type = hp->htype; /* * Special dispensation for unions */ if (type==STRUCT && length(hp)<=SZINT) type = INT; if ((type!=INT && type!=CHAR && type!=UNSIGN && (type&XTYPE)==0) || (type&XTYPE)>PTR || regvar<3) return(-1); return(--regvar); } '-kʴ9F I L O R U X [ ^ a d &ff # /* C compiler * * */ #include "c0.h" /* * Process a single external definition */ extdef() { register o; int sclass, scflag, *cb; struct hshtab typer; register struct hshtab *ds; if(((o=symbol())==EOFC) || o==SEMI) return; peeksym = o; sclass = 0; blklev = 0; if (getkeywords(&sclass, &typer)==0) { sclass = EXTERN; if (peeksym!=NAME) goto syntax; } scflag = 0; if (sclass==DEFXTRN) { scflag++; sclass = EXTERN; } if (sclass!=EXTERN && sclass!=STATIC && sclass!=TYPEDEF) error("Illegal storage class"); do { defsym = 0; paraml = 0; parame = 0; if (sclass==TYPEDEF) { decl1(TYPEDEF, &typer, 0, NULL); continue; } decl1(EXTERN, &typer, 0, NULL); if ((ds=defsym)==0) return; funcsym = ds; if ((ds->type&XTYPE)==FUNC) { if ((peeksym=symbol())==LBRACE || peeksym==KEYW || (peeksym==NAME && csym->hclass==TYPEDEF)) { funcblk.type = decref(ds->type); funcblk.strp = ds->strp; setinit(ds); outcode("BS", SYMDEF, sclass==EXTERN?ds->name:""); cfunc(); return; } if (paraml) error("Inappropriate parameters"); } else if ((o=symbol())==COMMA || o==SEMI) { peeksym = o; o = (length(ds)+ALIGN) & ~ALIGN; if (sclass==STATIC) { setinit(ds); outcode("BSBBSBN", SYMDEF, "", BSS, NLABEL, ds->name, SSPACE, o); } else if (scflag) outcode("BSN", CSPACE, ds->name, o); } else { if (o!=ASSIGN) peeksym = o; setinit(ds); if (sclass==EXTERN) outcode("BS", SYMDEF, ds->name); outcode("BBS", DATA, NLABEL, ds->name); cb = funcbase; if (cinit(ds, 1, sclass) & ALIGN) outcode("B", EVEN); if (maxdecl > cb) cb = maxdecl; funcbase = cb; } } while ((o=symbol())==COMMA); if (o==SEMI) return; syntax: if (o==RBRACE) { error("Too many }'s"); peeksym = 0; return; } error("External definition syntax"); errflush(o); statement(); } /* * Process a function definition. */ cfunc() { register int *cb; register sloc; sloc = isn; isn =+ 2; outcode("BBS", PROG, RLABEL, funcsym->name); ((if (proflg) outcode("BN", PROFIL, isn++); cb = curbase; regvar = 5; autolen = STAUTO; maxauto = STAUTO; blklev = 1; declist(ARG); outcode("B", SAVE); funchead(); branch(sloc); label(sloc+1); retlab = isn++; blklev = 0; if ((peeksym = symbol()) != LBRACE) error("Compound statement required"); statement(); outcode("BNB", LABEL, retlab, RETRN); label(sloc); outcode("BN", SETSTK, -maxauto); branch(sloc+1); if (cb < maxdecl) cb = maxdecl; curbase = funcbase = cb; } /* * Process the initializers for an external definition. */ cinit(anp, flex, sclass) struct hshtab *anp; { register struct phshtab *np; register nel, ninit; int width, isarray, o, brace, realtype, *cb; struct tnode *s; cb = funcbase; np = gblock(sizeof(*np)); funcbase = curbase; cpysymb(np, anp); realtype = np->type; isarray = 0; if ((realtype&XTYPE) == ARRAY) isarray++; else flex = 0; width = length(np); nel = 1; /* * If it's an array, find the number of elements. * temporarily modify to look like kind of thing it's * an array of. */ if (sclass==AUTO) if (isarray || realtype==STRUCT) error("No auto. aggregate initialization"); if (isarray) { np->type = decref(realtype); np->subsp++; if (width==0 && flex==0) error("0-length row: %.8s", anp->name); o = length(np); /* nel = ldiv(0, width, o); */ nel = (unsigned)width/o; width = o; } brace = 0; if ((peeksym=symbol())==LBRACE && (isarray || np->type!=STRUCT)) { peeksym = -1; brace++; } ninit = 0; do { if ((o=symbol())==RBRACE) break; peeksym = o; if (o==STRING && realtype==ARRAY+CHAR) { if (sclass==AUTO) error("No strings in automatic"); peeksym = -1; putstr(0, flex?10000:nel); ninit =+ nchstr; o = symbol(); break; } else if (np->type==STRUCT) { strinit(np, sclass); } else if ((np->type&ARRAY)==ARRAY || peeksym==LBRACE) cinit(np, 0, sclass); else { initflg++; s = tree(); initflg = 0; if (np->hflag&FFIELD) error("No field initialization"); *cp++ = nblock(np); *cp++ = s; build(ASSIGN); if (sclass==AUTO||sclass==REG) rcexpr(*--cp); else if (sclass==ENUMCON) { if (s->op!=CON) error("Illegal enum constant for %.8s", anp->name); anp->hoffset = s->value; } else rcexpr(block(INIT,np->type,NULL,NULL,(*--cp)->tr2)); } ninit++; if ((ninit&077)==0 && sclass==EXTERN) outcode("BS", SYMDEF, ""); } while ((o=symbol())==COMMA && (ninitnel) { if (flex && nel==0) { np->subsp[-1] = ninit; } else error("Too many initializers: %.8s", anp->name); nel = ninit; } curbase = funcbase = cb; return(nel*width); } /* * Initialize a structure */ strinit(np, sclass) struct tnode *np; { register struct hshtab **'-kJɴ9F I L O R U X [ ^ a d &ffmlp; static zerloc; register int o, brace; if ((mlp = np->strp->memlist)==NULL) { mlp = &zerloc; error("Undefined structure initialization"); } brace = 0; if ((o = symbol()) == LBRACE) brace++; else peeksym = o; do { if ((o=symbol()) == RBRACE) break; peeksym = o; if (*mlp==0) { error("Too many structure initializers"); cinit(&funcblk, 0, sclass); } else cinit(*mlp++, 0, sclass); if (*mlp == &structhole) { outcode("B", EVEN); mlp++; } } while ((o=symbol())==COMMA && (*mlp || brace)); if (sclass!=AUTO && sclass!=REG) { if (*mlp) outcode("BN", SSPACE, np->strp->ssize - (*mlp)->hoffset); outcode("B", EVEN); } if (o!=RBRACE || brace==0) peeksym = o; } /* * Mark already initialized */ setinit(anp) struct hshtab *anp; { register struct hshtab *np; np = anp; if (np->hflag&FINIT) error("%s multiply defined", np->name); np->hflag =| FINIT; } /* * Process one statement in a function. */ statement() { register o, o1, o2; int o3; struct tnode *np; int sauto, sreg; stmt: switch(o=symbol()) { case EOFC: error("Unexpected EOF"); case SEMI: return; case LBRACE: sauto = autolen; sreg = regvar; blockhead(); while (!eof) { if ((o=symbol())==RBRACE) { autolen = sauto; if (sreg!=regvar) outcode("BN", SETREG, sreg); regvar = sreg; blkend(); return; } peeksym = o; statement(); } error("Missing '}'"); return; case KEYW: switch(cval) { case GOTO: if (o1 = simplegoto()) branch(o1); else dogoto(); goto semi; case RETURN: doret(); goto semi; case IF: np = pexpr(); o2 = 0; if ((o1=symbol())==KEYW) switch (cval) { case GOTO: if (o2=simplegoto()) goto simpif; cbranch(np, o2=isn++, 0); dogoto(); label(o2); goto hardif; case RETURN: if (nextchar()==';') { o2 = retlab; goto simpif; } cbranch(np, o1=isn++, 0); doret(); label(o1); o2++; goto hardif; case BREAK: o2 = brklab; goto simpif; case CONTIN: o2 = contlab; simpif: chconbrk(o2); cbranch(np, o2, 1); hardif: if ((o=symbol())!=SEMI) goto syntax; if ((o1=symbol())==KEYW && cval==ELSE) goto stmt; peeksym = o1; return; } peeksym = o1; cbranch(np, o1=isn++, 0); statement(); if ((o=symbol())==KEYW && cval==ELSE) { o2 = isn++; branch(o2); label(o1); statement(); label(o2); return; } peeksym = o; label(o1); return; case WHILE: o1 = contlab; o2 = brklab; label(contlab = isn++); cbranch(pexpr(), brklab=isn++, 0); statement(); branch(contlab); label(brklab); contlab = o1; brklab = o2; return; case BREAK: chconbrk(brklab); branch(brklab); goto semi; case CONTIN: chconbrk(contlab); branch(contlab); goto semi; case DO: o1 = contlab; o2 = brklab; contlab = isn++; brklab = isn++; label(o3 = isn++); statement(); label(contlab); contlab = o1; if ((o=symbol())==KEYW && cval==WHILE) { cbranch(tree(), o3, 1); label(brklab); brklab = o2; goto semi; } goto syntax; case CASE: o1 = conexp(); if ((o=symbol())!=COLON) goto syntax; if (swp==0) { error("Case not in switch"); goto stmt; } if(swp>=swtab+SWSIZ) { error("Switch table overflow"); } else { swp->swlab = isn; (swp++)->swval = o1; label(isn++); } goto stmt; case SWITCH: o1 = brklab; brklab = isn++; np = pexpr(); chkw(np, -1); rcexpr(block(RFORCE,0,NULL,NULL,np)); pswitch(); brklab = o1; return; case DEFAULT: if (swp==0) error("Default not in switch"); if (deflab) error("More than 1 'default'"); if ((o=symbol())!=COLON) goto syntax; label(deflab = isn++); goto stmt; case FOR: o1 = contlab; o2 = brklab; contlab = isn++; brklab = isn++; if (o=forstmt()) goto syntax; label(brklab); contlab = o1; brklab = o2; return; case ELSE: error("Inappropriate 'else'"); statement(); return; } error("Unknown keyword"); goto syntax; case NAME: if (nextchar()==':') { peekc = 0; o1 = csym; if (o1->hclass>0) { if (o1->hblklev==0) { pushdecl(o1); o1->hoffset = 0; } else { defsym = o1; redec(); goto stmt; } } o1->hclass = STATIC; o1->htype = ARRAY; o1->hflag =| FLABL; if (o1->hoffset==0) o1->hoffset = isn++; label(o1->hoffset); goto stmt; } } peeksym = o; rcexpr(tree()); semi: if ((o=symbol())==SEMI) return; syntax: error("Statement syntax"); errflush(o); } /* * Process a for statement. */ forstmt() { register int l, o, sline; int sline1, *ss; struct tnode *st; if ((o=symbol()) != LPARN) return(o); if ((o=symbol()) != SEMI) { /* init part */ peeksym = o; rcexpr(tree()); if ((o=symbol()) != SEMI) return(o); } label(contlab); if ((o=symbol()) != SEMI) { /* test part */ peeksym = o; cbranch(tree(), brklab, 0); if ((o=symbol()) != SEMI) return(o); } if ((peeksym=symbol()) == RPARN) { /* incr part */ peeksym = -1; statement(); branch(contlab); return(0); } l = contlab; contlab = isn++; st = tree(); sline = line; if ((o=symbol()) != RPARN) return(o); ss = funcbase; funcbase = curbase; statement(); sline1 = line; line = sline; label(contlab); rcexpr(st); line = sline1; if (ss < maxdecl) ss = maxdecl; curbase = funcbase = ss; branch(l); return(0); } /* * A parenthesized expression, * as after "if". */ struct tnode * pexpr() { register o, t; if ((o=symbol())!=LPARN) goto syntax; t = tree(); if ((o=symbol())!=RPARN) goto syntax; return(t); syntax: error("Statement syntax"); errflush(o); return(0); } /* * The switch statement, which involves collecting the * constants and labels for the cases. */ pswitch() { register struct swtab *cswp, *sswp; int dl, swlab; cswp = sswp = swp; if (swp==0) cswp = swp = swtab; branch(swlab=isn++); dl = deflab; deflab = 0; statement(); branch(brklab); label(swlab); if (deflab==0) deflab = brklab; outcode("BNN", SWIT, deflab, line); for (; cswp < swp; cswp++) outcode("NN", cswp->swlab, cswp->swval); outcode("0"); label(brklab); deflab = dl; swp = sswp; } /* * funchead is called at the start of each function * to process the arguments, which have been linked in a list. * This list is necessary because in * f(a, b) float b; int a; ... * the names are seen before the types. */ /* * Structure resembling a block for a register variable. */ struct hshtab hreg { R((EG, 0, 0, NULL, NULL, 0 }; struct tnode areg { NAME, 0, NULL, NULL, &hreg}; funchead() { register pl; register struct hshtab *cs; struct tnode *bstack[2]; pl = STARG; while(paraml) { parame->hoffset = 0; cs = paraml; paraml = paraml->hoffset; if (cs->htype==FLOAT) cs->htype = DOUBLE; cs->hoffset = pl; if ((cs->htype&XTYPE) == ARRAY) { cs->htype =- (ARRAY-PTR); /* set ptr */ cs->subsp++; /* pop dims */ } pl =+ rlength(cs); if (cs->hclass==AREG && (hreg.hoffset=goodreg(cs))>=0) { bstack[0] = &areg; bstack[1] = nblock(cs); cp = &bstack[2]; areg.type = cs->htype; cs->hclass = AUTO; build(ASSIGN); rcexpr(bstack[0]); cs->hoffset = hreg.hoffset; cs->hclass = REG; } else cs->hclass = AUTO; prste(cs); } for (cs=hshtab; csname[0] == '\0') continue; if (cs->hclass == ARG || cs->hclass==AREG) error("Not an argument: %.8s", cs->name); } outcode("BN", SETREG, regvar); } blockhead() { register r; r = regvar; blklev++; declist(0); if (r != regvar) outcode("BN", SETREG, regvar); } /* * After the end of a block, delete local * symbols; save those that are external. * Also complain about undefined labels. */ blkend() { register struct hshtab *cs, *ncs; struct hshtab *endcs; register i; blklev--; for (cs=hshtab; cs->name[0] && csname[0]) { if (cs->hblklev <= blklev) continue; if ((cs->hclass!=EXTERN || blklev!=0) && ((cs->hflag&FLABL)==0 || blklev==0)) { if (cs->hclass==0) error("%.8s undefined", cs->name); if ((ncs = cs->hpdown)==NULL) { cs->name[0] = '\0'; hshused--; cs->hflag =& FKEYW; } else { cpysymb(cs, ncs); } continue; } /* * Retained name; must rehash. */ for (i=0; iname[i]; mossym = cs->hflag&FMOS; lookup(); if ((ncs=csym) != cs) { cs->name[0] = '\0'; hshused--; i = ncs->hflag; cpysymb(ncs, cs); ncs->hflag =| i&FKEYW; cs->hflag =& FKEYW; } if (ncs->hblklev>1 || (ncs->hblklev>0 && ncs->hclass==EXTERN)) ncs->hblklev--; } while ((cs = (cs<&hshtab[HSHSIZ-1])? ++cs: hshtab) != endcs); } /* * write out special definitions of local symbols for * benefit of the debugger. None of these are used * by the assembler except to save them. */ prste(acs) struct hshtab *acs; { register struct hshtab *cs; register nkind; cs = acs; switch (cs->hclass) { case REG: nkind = RNAME; break; case AUTO: nkind = ANAME; break; case STATIC: nkind = SNAME; break; default: return; } outcode("BSN", nkind, cs->name, cs->hoffset); } /* * In case of error, skip to the next * statement delimiter. */ errflush(ao) { register o; o = ao; while(o>RBRACE) /* ; { } */ o = symbol(); peeksym = o; } '.k C)        " %;i # /* * C compiler * * */ #include "c0.h" /* * Called from tree, this routine takes the top 1, 2, or 3 * operands on the expression stack, makes a new node with * the operator op, and puts it on the stack. * Essentially all the work is in inserting * appropriate conversions. */ build(op) { register int t1; int t2, t; register struct tnode *p1, *p2; struct tnode *p3; int dope, leftc, cvn, pcvn; /* * a[i] => *(a+i) */ if (op==LBRACK) { build(PLUS); op = STAR; } dope = opdope[op]; if ((dope&BINARY)!=0) { p2 = chkfun(disarray(*--cp)); t2 = p2->type; } p1 = *--cp; /* * sizeof gets turned into a number here. */ if (op==SIZEOF) { t1 = cblock(length(p1)); t1->type = UNSIGN; *cp++ = t1; return; } if (op!=AMPER) { p1 = disarray(p1); if (op!=CALL) p1 = chkfun(p1); } t1 = p1->type; pcvn = 0; t = INT; switch (op) { case CAST: if ((t1&XTYPE)==FUNC || (t1&XTYPE)==ARRAY) error("Disallowed conversion"); if (t1==UNSIGN && t2==CHAR) { t2 = INT; p2 = block(AND,INT,NULL,NULL,p2,cblock(0377)); } break; /* end of expression */ case 0: *cp++ = p1; return; /* no-conversion operators */ case QUEST: if (p2->op!=COLON) error("Illegal conditional"); else if (fold(QUEST, p1, p2)) return; case SEQNC: t = t2; case COMMA: case LOGAND: case LOGOR: *cp++ = block(op, t, NULL, NULL, p1, p2); return; case EXCLA: t1 = INT; break; case CALL: if ((t1&XTYPE) != FUNC) error("Call of non-function"); *cp++ = block(CALL,decref(t1),p1->subsp,p1->strp,p1,p2); return; case STAR: if ((t1&XTYPE) == FUNC) error("Illegal indirection"); *cp++ = block(STAR, decref(t1), p1->subsp, p1->strp, p1); return; case AMPER: if (p1->op==NAME || p1->op==STAR) { *cp++ = block(op,incref(t1),p1->subsp,p1->strp,p1); return; } error("Illegal lvalue"); break; /* * a.b goes to (&a)->b */ case DOT: if (p1->op==CALL && t1==STRUCT) { t1 = incref(t1); setype(p1, t1, p1); } else { *cp++ = p1; build(AMPER); p1 = *--cp; } /* * In a->b, a is given the type ptr-to-structure element; * then the offset is added in without conversion; * then * is tacked on to access the member. */ case ARROW: if (p2->op!=NAME || p2->tr1->hclass!=MOS) { error("Illegal structure ref"); *cp++ = p1; return; } if (t2==INT && p2->tr1->hflag&FFIELD) t2 = UNSIGN; t = incref(t2); chkw(p1, -1); setype(p1, t, p2); *cp++ = block(PLUS,t,p2->subsp,p2->strp,p1,cblock(p2->tr1->hoffset)); build(STAR); if (p2->tr1->hflag&FFIELD) *cp++ = block(FSEL,UNSIGN,NULL,NULL,*--cp,p2->tr1->hstrp); return; } if ((dope&LVALUE)!=0) chklval(p1); if ((dope&LWORD)!=0) chkw(p1, LONG); if ((dope&RWORD)!=0) chkw(p2, LONG); if ((dope&BINARY)==0) { if (op==ITOF) t1 = DOUBLE; else if (op==FTOI) t1 = INT; if (!fold(op, p1, 0)) *cp++ = block(op,t1,p1->subsp,p1->strp,p1); return; } cvn = 0; if (t1==STRUCT || t2==STRUCT) { if (t1!=t2 || p1->strp != p2->strp) error("Incompatible structures"); cvn = 0; } else cvn = cvtab[lintyp(t1)][lintyp(t2)]; leftc = (cvn>>4)&017; cvn =& 017; t = leftc? t2:t1; if ((t==INT||t==CHAR) && (t1==UNSIGN||t2==UNSIGN)) t = UNSIGN; if (dope&ASSGOP || op==CAST) { t = t1; if (op==ASSIGN || op==CAST) { if (cvn==ITP||cvn==PTI) cvn = leftc = 0; else if (cvn==LTP) { if (leftc==0) cvn = LTI; else { cvn = ITL; leftc = 0; } } } if (leftc) cvn = leftc; leftc = 0; } else if (op==COLON || op==MAX || op==MIN) { if (t1>=PTR && t1==t2) cvn = 0; if (op!=COLON && (t1>=PTR || t2>=PTR)) op =+ MAXP-MAX; } else if (dope&RELAT) { if (op>=LESSEQ && (t1>=PTR||t2>=PTR||(t1==UNSIGN||t2==UNSIGN) && (t==INT||t==CHAR||t==UNSIGN))) op =+ LESSEQP-LESSEQ; if (cvn==ITP || cvn==PTI) cvn = 0; } if (cvn==PTI) { cvn = 0; if (op==MINUS) { t = INT; pcvn++; } else { if (t1!=t2 || t1!=(PTR+CHAR)) cvn = XX; } } if (cvn) { t1 = plength(p1); t2 = plength(p2); if (cvn==XX || (cvn==PTI&&t1!=t2)) error("Illegal conversion"); else if (leftc) p1 = convert(p1, t, cvn, t2); else p2 = convert(p2, t, cvn, t1); } if (dope&RELAT) t = INT; if (t==FLOAT) t = DOUBLE; if (t==CHAR) t = INT; if (op==CAST) { if (t!=DOUBLE && (t!=INT || p2->type!=CHAR)) { p2->type = t; p2->subsp = p1->subsp; p2->strp = p1->strp; } if (t==INT && p1->type==CHAR) p2 = block(ITOC, INT, NULL, NULL, p2); *cp++ = p2; return; } if (fold(op, p1, p2)==0) { p3 = leftc?p2:p1; *cp++ = block(op, t, p3->subsp, p3->strp, p1, p2); } if (pcvn && t1!=(PTR+CHAR)) { p1 = *--cp; *cp++ = convert(p1, 0, PTI, plength(p1->tr1)); } } /* * Generate the appropriate conversion operator. */ struct tnode * convert(p, t, cvn, len) struct tnode *p; { register int op; op = cvntab[cvn]; if (opdope[op]&BINARY) { if (len==0) error("Illegal conversion"); return(block(op, t, NULL, NULL, p, cblock(len))); } return(block(op, t, NULL, NULL, p)); } /* * Traverse an expression tree, adjust things * so the'.k9$C)        " %;i types of things in it are consistent * with the view that its top node has * type at. * Used with structure references. */ setype(ap, at, anewp) struct tnode *ap, *anewp; { register struct tnode *p, *newp; register t; p = ap; t = at; newp = anewp; for (;; p = p->tr1) { p->subsp = newp->subsp; p->strp = newp->strp; p->type = t; if (p->op==AMPER) t = decref(t); else if (p->op==STAR) t = incref(t); else if (p->op!=PLUS) break; } } /* * A mention of a function name is turned into * a pointer to that function. */ struct tnode * chkfun(ap) struct tnode *ap; { register struct tnode *p; register int t; p = ap; if (((t = p->type)&XTYPE)==FUNC && p->op!=ETYPE) return(block(AMPER,incref(t),p->subsp,p->strp,p)); return(p); } /* * A mention of an array is turned into * a pointer to the base of the array. */ struct tnode * disarray(ap) struct tnode *ap; { register int t; register struct tnode *p; p = ap; /* check array & not MOS and not typer */ if (((t = p->type)&XTY((PE)!=ARRAY || p->op==NAME&&p->tr1->hclass==MOS || p->op==ETYPE) return(p); p->subsp++; *cp++ = p; setype(p, decref(t), p); build(AMPER); return(*--cp); } /* * make sure that p is a ptr to a node * with type int or char or 'okt.' * okt might be nonexistent or 'long' * (e.g. for <<). */ chkw(p, okt) struct tnode *p; { register int t; if ((t=p->type)!=INT && top = op; p->type = t; p->subsp = subs; p->strp = str; p->tr1 = p1; if (opdope[op]&BINARY) p->tr2 = p2; else p->tr2 = NULL; return(p); } struct tnode * nblock(ads) struct hshtab *ads; { register struct hshtab *ds; ds = ads; return(block(NAME, ds->htype, ds->hsubsp, ds->hstrp, ds)); } /* * Generate a block for a constant */ struct cnode * cblock(v) { register struct cnode *p; p = gblock(sizeof(*p)); p->op = CON; p->type = INT; p->subsp = NULL; p->strp = NULL; p->value = v; return(p); } /* * A block for a float or long constant */ struct fnode * fblock(t, string) char *string; { register struct fnode *p; p = gblock(sizeof(*p)); p->op = FCON; p->type = t; p->subsp = NULL; p->strp = NULL; p->cstr = string; return(p); } /* * Assign a block for use in the * expression tree. */ char * gblock(n) { register int *p; p = curbase; if ((curbase =+ n) >= coremax) { if (sbrk(1024) == -1) { error("Out of space"); exit(1); } coremax =+ 1024; } return(p); } /* * Check that a tree can be used as an lvalue. */ chklval(ap) struct tnode *ap; { register struct tnode *p; p = ap; if (p->op==FSEL) p = p->tr1; if (p->op!=NAME && p->op!=STAR) error("Lvalue required"); } /* * reduce some forms of `constant op constant' * to a constant. More of this is done in the next pass * but this is used to allow constant expressions * to be used in switches and array bounds. */ fold(op, ap1, ap2) struct tnode *ap1, *ap2; { register struct tnode *p1; register int v1, v2; int unsignf; p1 = ap1; if (p1->op!=CON) return(0); unsignf = p1->type==UNSIGN; if (op==QUEST) { if (ap2->tr1->op==CON && ap2->tr2->op==CON) { p1->value = p1->value? ap2->tr1->value: ap2->tr2->value; *cp++ = p1; return(1); } return(0); } if (ap2) { if (ap2->op!=CON) return(0); v2 = ap2->value; unsignf |= ap2->type==UNSIGN; } v1 = p1->value; switch (op) { case PLUS: v1 =+ v2; break; case MINUS: v1 =- v2; break; case TIMES: v1 =* v2; break; case DIVIDE: if (v2==0) goto divchk; if (unsignf) { v1 = (unsigned)v1 / v2; break; } v1 =/ v2; break; case MOD: if (v2==0) goto divchk; if (unsignf) { v1 = (unsigned)v1 % v2; break; } v1 =% v2; break; case AND: v1 =& v2; break; case OR: v1 =| v2; break; case EXOR: v1 =^ v2; break; case NEG: v1 = - v1; break; case COMPL: v1 = ~ v1; break; case LSHIFT: v1 =<< v2; break; case RSHIFT: if (unsignf) { v1 = (unsigned)v1 >> v2; break; } v1 =>> v2; break; case EQUAL: v1 = v1==v2; break; case NEQUAL: v1 = v1!=v2; break; case LESS: v1 = v1v2; break; case LESSEQ: v1 = v1<=v2; break; case GREATEQ: v1 = v1>=v2; break; divchk: error("Divide check"); default: return(0); } p1->value = v1; *cp++ = p1; return(1); } /* * Compile an expression expected to have constant value, * for example an array bound or a case value. */ conexp() { register struct tnode *t; initflg++; if (t = tree()) if (t->op != CON) error("Constant required"); initflg--; curbase = funcbase; return(t->value); } ')/k\}Si+ #include #include /* size -- determine object size */ int a_magic[] = {A_MAGIC1,A_MAGIC2,A_MAGIC3,A_MAGIC4,0}; main(argc, argv) char **argv; { struct exec buf; long sum; int gorp,i; FILE *f; if (argc==1) { *argv = "a.out"; argc++; --argv; } gorp = argc; while(--argc) { ++argv; if ((f = fopen(*argv, "r"))==NULL) { printf("size: %s not found\n", *argv); continue; } fread((char *)&buf, sizeof(buf), 1, f); for(i=0;a_magic[i];i++) if(a_magic[i] == buf.a_magic) break; if(a_magic[i] == 0) { printf("size: %s not an object file\n", *argv); fclose(f); continue; } if (gorp>2) printf("%s: ", *argv); printf("%u+%u+%u = ", buf.a_text,buf.a_data,buf.a_bss); sum = (long) buf.a_text + (long) buf.a_data + (long) buf.a_bss; printf("%Db = 0%Ob\n", sum, sum); fclose(f); } } ',0klgjmpsvyK`` #include #include #include #include /* interpret command time accounting */ #define size 1000 #define NC sizeof(acctbuf.ac_comm) struct acct acctbuf; int lflg; int cflg; int iflg; int jflg; int nflg; int aflg; int rflg; int oflg; int tflg; int vflg; int uflg; int thres = 1; int sflg; int bflg; int mflg; struct user { int ncomm; int fill; float fctime; } user[256]; struct tab { char name[NC]; int count; float realt; float cput; float syst; } tab[size]; float treal; float tcpu; float tsys; int junkp = -1; char *sname; float ncom; time_t expand(); main(argc, argv) char **argv; { FILE *ff; int i, j, k; extern tcmp(), ncmp(), bcmp(); extern float sum(); float ft; if (argc>1) if (argv[1][0]=='-') { argv++; argc--; for(i=1; argv[0][i]; i++) switch(argv[0][i]) { case 'o': oflg++; break; case 'i': iflg++; break; case 'b': bflg++; break; case 'l': lflg++; break; case 'c': cflg++; break; case 'j': jflg++; break; case 'n': nflg++; break; case 'a': aflg++; break; case 'r': rflg++; break; case 't': tflg++; break; case 's': sflg++; aflg++; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': thres = argv[0][i]-'0'; break; case 'v': vflg++; break; case 'u': uflg++; break; case 'm': mflg++; break; } } if (iflg==0) init(); if (argc<2) doacct("/usr/adm/acct"); else while (--argc) doacct(*++argv); if (uflg) { return; } /* * cleanup pass * put junk together */ if (vflg) strip(); if(!aflg) for (i=0; i= 0200)) { *cp = '?'; } } if (fbuf.ac_flag&AFORK) { for (cp=fbuf.ac_comm; cp < &fbuf.ac_comm[NC]; cp++) if (*cp==0) { *cp = '*'; break; } } x = expand(fbuf.ac_utime) + expand(fbuf.ac_stime); if (uflg) { printf("%3d%6.1f %.10s\n", fbuf.ac_uid&0377, x/60.0, fbuf.ac_comm); continue; } c = fbuf.ac_uid&0377; user[c].ncomm++; user[c].fctime += x/60.; ncom += 1.0; i = enter(fbuf.ac_comm); tab[i].count++; x = expand(fbuf.ac_etime)*60; tab[i].realt += x; treal += x; x = expand(fbuf.ac_utime); tab[i].cput += x; tcpu += x; x = expand(fbuf.ac_stime); tab[i].syst += x; tsys += x; } fclose(ff); } ncmp(p1, p2) struct tab *p1, *p2; { if(p1'70kꎒlgjmpsvyK``->count == p2->count) return(tcmp(p1, p2)); if(rflg) return(p1->count - p2->count); return(p2->count - p1->count); } bcmp(p1, p2) struct tab *p1, *p2; { float f1, f2; float sum(); f1 = sum(p1)/p1->count; f2 = sum(p2)/p2->count; if(f1 < f2) { if(rflg) return(-1); return(1); } if(f1 > f2) { if(rflg) return(1); return(-1); } return(0); } tcmp(p1, p2) struct tab *p1, *p2; { extern float sum(); float f1, f2; f1 = sum(p1); f2 = sum(p2); if(f1 < f2) { if(rflg) return(-1); return(1); } if(f1 > f2) { if(rflg) return(1); return(-1); } return(0); } float sum(p) struct tab *p; { if(p->name[0] == 0) return(0.0); return( p->cput+ p->syst); } init() { struct tab tbuf; int i; FILE *f; if ((f = fopen("/usr/adm/savacct", "r")) == NULL) goto gshm; while (fread((char *)&tbuf, sizeof(tbuf), 1, f) == 1) { i = enter(tbuf.name); ncom += tbuf.count; tab[i].count = tbuf.count; treal += tbuf.realt; tab[i].realt = tbuf.realt; tcpu += tbuf.cput; tab[i].cput = tbuf.cput; tsys += tbuf.syst; tab[i].syst = tbuf.syst; } fclose(f); gshm: if ((f = fopen("/usr/adm/usracct", "r")) == NULL) return; fread((char *)user, sizeof(user), 1, f); fclose(f); } enter(np) char *np; { int i, j; for (i=j=0; i>= 13; while (t!=0) { t--; nt <<= 3; } return(nt); } '=1kG[^ad2i* /* * Remove directory */ #include #include #include #include int Errors = 0; char *rindex(); char *strcat(); char *strcpy(); main(argc,argv) int argc; char **argv; { if(argc < 2) { fprintf(stderr, "rmdir: arg count\n"); exit(1); } while(--argc) rmdir(*++argv); exit(Errors!=0); } rmdir(d) char *d; { int fd; char *np, name[500]; struct stat st, cst; struct direct dir; strcpy(name, d); if((np = rindex(name, '/')) == NULL) np = name; if(stat(name,&st) < 0) { fprintf(stderr, "rmdir: %s non-existent\n", name); ++Errors; return; } if (stat("", &cst) < 0) { fprintf(stderr, "rmdir: cannot stat \"\""); ++Errors; exit(1); } if((st.st_mode & S_IFMT) != S_IFDIR) { fprintf(stderr, "rmdir: %s not a directory\n", name); ++Errors; return; } if(st.st_ino==cst.st_ino &&st.st_dev==cst.st_dev) { fprintf(stderr, "rmdir: cannot remove current directory\n"); ++Errors; return; } if((fd = open(name,0)) < 0) { fprintf(stderr, "rmdir: %s unreadable\n", name); ++Errors; return; } while(read(fd, (char *)&dir, sizeof dir) == sizeof dir) { if(dir.d_ino == 0) continue; if(!strcmp(dir.d_name, ".") || !strcmp(dir.d_name, "..")) continue; fprintf(stderr, "rmdir: %s not empty\n", name); ++Errors; close(fd); return; } close(fd); if(!strcmp(np, ".") || !strcmp(np, "..")) { fprintf(stderr, "rmdir: cannot remove . or ..\n"); ++Errors; return; } strcat(name, "/."); if((access(name, 0)) < 0) { /* name/. non-existent */ strcat(name, "."); goto unl; } strcat(name, "."); if((access(name, 0)) < 0) /* name/.. non-existent */ goto unl2; if(access(name, 02)) { name[strlen(name)-3] = '\0'; fprintf(stderr, "rmdir: %s: no permission\n", name); ++Errors; return; } unl: unlink(name); /* unlink name/.. */ unl2: name[strlen(name)-1] = '\0'; unlink(name); /* unlink name/. */ name[strlen(name)-2] = '\0'; if (unlink(name) < 0) { fprintf(stderr, "rmdir: %s not removed\n", name); ++Errors; } } 'B2ky ILORUXi* int errcode; #include #include #include #include char *sprintf(); main(argc, argv) char *argv[]; { register char *arg; int fflg, iflg, rflg; fflg = 0; if (isatty(0) == 0) fflg++; iflg = 0; rflg = 0; if(argc>1 && argv[1][0]=='-') { arg = *++argv; argc--; while(*++arg != '\0') switch(*arg) { case 'f': fflg++; break; case 'i': iflg++; break; case 'r': rflg++; break; default: printf("rm: unknown option %s\n", *argv); exit(1); } } while(--argc > 0) { if(!strcmp(*++argv, "..")) { fprintf(stderr, "rm: cannot remove `..'\n"); continue; } rm(*argv, fflg, rflg, iflg, 0); } exit(errcode); } rm(arg, fflg, rflg, iflg, level) char arg[]; { struct stat buf; struct direct direct; char name[100]; int d; if(stat(arg, &buf)) { if (fflg==0) { printf("rm: %s nonexistent\n", arg); ++errcode; } return; } if ((buf.st_mode&S_IFMT) == S_IFDIR) { if(rflg) { if (access(arg, 02) < 0) { if (fflg==0) printf("%s not changed\n", arg); errcode++; return; } if(iflg && level!=0) { printf("directory %s: ", arg); if(!yes()) return; } if((d=open(arg, 0)) < 0) { printf("rm: %s: cannot read\n", arg); exit(1); } while(read(d, (char *)&direct, sizeof(direct)) == sizeof(direct)) { if(direct.d_ino != 0 && !dotname(direct.d_name)) { sprintf(name, "%s/%.14s", arg, direct.d_name); rm(name, fflg, rflg, iflg, level+1); } } close(d); errcode += rmdir(arg, iflg); return; } printf("rm: %s directory\n", arg); ++errcode; return; } if(iflg) { printf("%s: ", arg); if(!yes()) return; } else if(!fflg) { if (access(arg, 02)<0) { printf("rm: %s %o mode ", arg, buf.st_mode&0777); if(!yes()) return; } } if(unlink(arg) && (fflg==0 || iflg)) { printf("rm: %s not removed\n", arg); ++errcode; } } dotname(s) char *s; { if(s[0] == '.') if(s[1] == '.') if(s[2] == '\0') return(1); else return(0); else if(s[1] == '\0') return(1); return(0); } rmdir(f, iflg) char *f; { int status, i; if(dotname(f)) return(0); if(iflg) { printf("%s: ", f); if(!yes()) return(0); } while((i=fork()) == -1) sleep(3); if(i) { wait(&status); return(status); } execl("/bin/rmdir", "rmdir", f, 0); execl("/usr/bin/rmdir", "rmdir", f, 0); printf("rm: can't find rmdir\n"); exit(1); } yes() { int i, b; i = b = getchar(); while(b != '\n' && b != EOF) b = getchar(); return(i ==(( 'y'); } 'I3kݴhCFi* #include /* reverse lines of a file */ #define N 256 char line[N]; FILE *input; main(argc,argv) char **argv; { register i,c; input = stdin; do { if(argc>1) { if((input=fopen(argv[1],"r"))==NULL) { fprintf(stderr,"rev: cannot open %s\n", argv[1]); exit(1); } } for(;;){ for(i=0;i=0) putc(line[i],stdout); putc('\n',stdout); } eof: fclose(input); argc--; argv++; } while(argc>1); } 'L4kꅺJ2WWW #define MAXINO 3000 #define BITS 8 #define MAXXTR 60 #define NCACHE 3 #ifndef STANDALONE #include #include #endif #include #include #include #include #include #include #include #define MWORD(m,i) (m[(unsigned)(i-1)/MLEN]) #define MBIT(i) (1<<((unsigned)(i-1)%MLEN)) #define BIS(i,w) (MWORD(w,i) |= MBIT(i)) #define BIC(i,w) (MWORD(w,i) &= ~MBIT(i)) #define BIT(i,w) (MWORD(w,i) & MBIT(i)) struct filsys sblock; int fi; ino_t ino, maxi, curino; int mt; char tapename[] = "/dev/rmt1"; char *magtape = tapename; #ifdef STANDALONE char mbuf[50]; #endif #ifndef STANDALONE daddr_t seekpt; int df, ofile; char dirfile[] = "rstXXXXXX"; struct { ino_t t_ino; daddr_t t_seekpt; } inotab[MAXINO]; int ipos; #define ONTAPE 1 #define XTRACTD 2 #define XINUSE 4 struct xtrlist { ino_t x_ino; char x_flags; } xtrlist[MAXXTR]; char name[12]; char drblock[BSIZE]; int bpt; #endif int eflag; int volno = 1; struct dinode tino, dino; daddr_t taddr[NADDR]; daddr_t curbno; short dumpmap[MSIZ]; short clrimap[MSIZ]; int bct = NTREC+1; char tbf[NTREC*BSIZE]; struct cache { daddr_t c_bno; int c_time; char c_block[BSIZE]; } cache[NCACHE]; int curcache; main(argc, argv) char *argv[]; { register char *cp; char command; int done(); #ifndef STANDALONE mktemp(dirfile); if (argc < 2) { usage: printf("Usage: restor x file file..., restor r filesys, or restor t\n"); exit(1); } argv++; argc -= 2; for (cp = *argv++; *cp; cp++) { switch (*cp) { case '-': break; case 'f': magtape = *argv++; argc--; break; case 'r': case 'R': case 't': case 'x': command = *cp; break; default: printf("Bad key character %c\n", *cp); goto usage; } } if (command == 'x') { if (signal(SIGINT, done) == SIG_IGN) signal(SIGINT, SIG_IGN); if (signal(SIGTERM, done) == SIG_IGN) signal(SIGTERM, SIG_IGN); df = creat(dirfile, 0666); if (df < 0) { printf("restor: %s - cannot create directory temporary\n", dirfile); exit(1); } close(df); df = open(dirfile, 2); } doit(command, argc, argv); if (command == 'x') unlink(dirfile); exit(0); #else magtape = "tape"; doit('r', 1, 0); #endif } doit(command, argc, argv) char command; int argc; char *argv[]; { extern char *ctime(); register i, k; ino_t d; #ifndef STANDALONE int xtrfile(), skip(); #endif int rstrfile(), rstrskip(); struct dinode *ip, *ip1; #ifndef STANDALONE if ((mt = open(magtape, 0)) < 0) { printf("%s: cannot open tape\n", magtape); exit(1); } #else do { printf("Tape? "); gets(mbuf); mt = open(mbuf, 0); } while (mt == -1); magtape = mbuf; #endif switch(command) { #ifndef STANDALONE case 't': if (readhdr(&spcl) == 0) { printf("Tape is not a dump tape\n"); exit(1); } printf("Dump date: %s", ctime(&spcl.c_date)); printf("Dumped from: %s", ctime(&spcl.c_ddate)); return; case 'x': if (readhdr(&spcl) == 0) { printf("Tape is not a dump tape\n"); exit(1); } if (checkvol(&spcl, 1) == 0) { printf("Tape is not volume 1 of the dump\n"); exit(1); } pass1(); /* This sets the various maps on the way by */ i = 0; while (i < MAXXTR-1 && argc--) { if ((d = psearch(*argv)) == 0 || BIT(d, dumpmap) == 0) { printf("%s: not on the tape\n", *argv++); continue; } xtrlist[i].x_ino = d; xtrlist[i].x_flags |= XINUSE; printf("%s: inode %u\n", *argv, d); argv++; i++; } newvol: flsht(); close(mt); getvol: printf("Mount desired tape volume: Specify volume #: "); if (gets(tbf) == NULL) return; volno = atoi(tbf); if (volno <= 0) { printf("Volume numbers are positive numerics\n"); goto getvol; } mt = open(magtape, 0); if (readhdr(&spcl) == 0) { printf("tape is not dump tape\n"); goto newvol; } if (checkvol(&spcl, volno) == 0) { printf("Wrong volume (%d)\n", spcl.c_volume); goto newvol; } rbits: while (gethead(&spcl) == 0) ; if (checktype(&spcl, TS_INODE) == 1) { printf("Can't find inode mask!\n"); goto newvol; } if (checktype(&spcl, TS_BITS) == 0) goto rbits; readbits(dumpmap); i = 0; for (k = 0; xtrlist[k].x_flags; k++) { if (BIT(xtrlist[k].x_ino, dumpmap)) { xtrlist[k].x_flags |= ONTAPE; i++; } } while (i > 0) { again: if (ishead(&spcl) == 0) while(gethead(&spcl) == 0) ; if (checktype(&spcl, TS_END) == 1) { printf("end of tape\n"); checkdone: for (k = 0; xtrlist[k].x_flags; k++) if ((xtrlist[k].x_flags&XTRACTD) == 0) goto newvol; return; } if (checktype(&spcl, TS_INODE) == 0) { gethead(&spcl); goto again; } d = spcl.c_inumber; for (k = 0; xtrlist[k].x_flags; k++) { if (d == xtrlist[k].x_ino) { printf("extract file %u\n", xtrlist[k].x_ino); sprintf(name, "%u", xtrlist[k].x_ino); if ((ofile = creat(name, 0666)) < 0) { printf("%s: cannot create file\n", name); i--; continue; } chown(name, spcl.c_dinode.di_uid, spcl.c_dinode.di_gid); getfile(ino, xtrfile, skip'W4kJ2WWW, spcl.c_dinode.di_size); i--; xtrlist[k].x_flags |= XTRACTD; close(ofile); goto done; } } gethead(&spcl); done: ; } goto checkdone; #endif case 'r': case 'R': #ifndef STANDALONE if ((fi = open(*argv, 2)) < 0) { printf("%s: cannot open\n", *argv); exit(1); } #else do { char charbuf[50]; printf("Disk? "); gets(charbuf); fi = open(charbuf, 2); } while (fi == -1); #endif #ifndef STANDALONE if (command == 'R') { printf("Enter starting volume number: "); if (gets(tbf) == EOF) { volno = 1; printf("\n"); } else volno = atoi(tbf); } else #endif volno = 1; printf("Last chance before scribbling on %s. ", #ifdef STANDALONE "disk"); #else *argv); #endif while (getchar() != '\n'); dread((daddr_t)1, (char *)&sblock, sizeof(sblock)); maxi = (sblock.s_isize-2)*INOPB; if (readhdr(&spcl) == 0) { printf("Missing volume record\n"); exit(1); } if (checkvol(&spcl, volno) == 0) { printf("Tape is not volume %d\n", volno); exit(1); } gethead(&spcl); for (;;) { ragain: if (ishead(&spcl) == 0) { printf("Missing header block\n"); while (gethead(&spcl) == 0) ; eflag++; } if (checktype(&spcl, TS_END) == 1) { printf("End of tape\n"); close(mt); dwrite( (daddr_t) 1, (char *) &sblock); return; } if (checktype(&spcl, TS_CLRI) == 1) { readbits(clrimap); for (ino = 1; ino <= maxi; ino++) if (BIT(ino, clrimap) == 0) { getdino(ino, &tino); if (tino.di_mode == 0) continue; itrunc(&tino); clri(&tino); putdino(ino, &tino); } dwrite( (daddr_t) 1, (char *) &sblock); goto ragain; } if (checktype(&spcl, TS_BITS) == 1) { readbits(dumpmap); goto ragain; } if (checktype(&spcl, TS_INODE) == 0) { printf("Unknown header type\n"); eflag++; gethead(&spcl); goto ragain; } ino = spcl.c_inumber; if (eflag) printf("Resynced at inode %u\n", ino); eflag = 0; if (i((no > maxi) { printf("%u: ilist too small\n", ino); gethead(&spcl); goto ragain; } dino = spcl.c_dinode; getdino(ino, &tino); curbno = 0; itrunc(&tino); clri(&tino); for (i = 0; i < NADDR; i++) taddr[i] = 0; l3tol(taddr, dino.di_addr, 1); getfile(ino, rstrfile, rstrskip, dino.di_size); ip = &tino; ltol3(ip->di_addr, taddr, NADDR); ip1 = &dino; ip->di_mode = ip1->di_mode; ip->di_nlink = ip1->di_nlink; ip->di_uid = ip1->di_uid; ip->di_gid = ip1->di_gid; ip->di_size = ip1->di_size; ip->di_atime = ip1->di_atime; ip->di_mtime = ip1->di_mtime; ip->di_ctime = ip1->di_ctime; putdino(ino, &tino); } } } /* * Read the tape, bulding up a directory structure for extraction * by name */ #ifndef STANDALONE pass1() { register i; struct dinode *ip; int putdir(), null(); while (gethead(&spcl) == 0) { printf("Can't find directory header!\n"); } for (;;) { if (checktype(&spcl, TS_BITS) == 1) { readbits(dumpmap); continue; } if (checktype(&spcl, TS_CLRI) == 1) { readbits(clrimap); continue; } if (checktype(&spcl, TS_INODE) == 0) { finish: flsh(); close(mt); return; } ip = &spcl.c_dinode; i = ip->di_mode & IFMT; if (i != IFDIR) { goto finish; } inotab[ipos].t_ino = spcl.c_inumber; inotab[ipos++].t_seekpt = seekpt; getfile(spcl.c_inumber, putdir, null, spcl.c_dinode.di_size); putent("\000\000/"); } } #endif /* * Do the file extraction, calling the supplied functions * with the blocks */ getfile(n, f1, f2, size) ino_t n; int (*f2)(), (*f1)(); long size; { register i; struct spcl addrblock; char buf[BSIZE]; addrblock = spcl; curino = n; goto start; for (;;) { if (gethead(&addrblock) == 0) { printf("Missing address (header) block\n"); goto eloop; } if (checktype(&addrblock, TS_ADDR) == 0) { spcl = addrblock; curino = 0; return; } start: for (i = 0; i < addrblock.c_count; i++) { if (addrblock.c_addr[i]) { readtape(buf); (*f1)(buf, size > BSIZE ? (long) BSIZE : size); } else { clearbuf(buf); (*f2)(buf, size > BSIZE ? (long) BSIZE : size); } if ((size -= BSIZE) <= 0) { eloop: while (gethead(&spcl) == 0) ; if (checktype(&spcl, TS_ADDR) == 1) goto eloop; curino = 0; return; } } } } /* * Do the tape i\/o, dealling with volume changes * etc.. */ readtape(b) char *b; { register i; struct spcl tmpbuf; if (bct >= NTREC) { for (i = 0; i < NTREC; i++) ((struct spcl *)&tbf[i*BSIZE])->c_magic = 0; bct = 0; if ((i = read(mt, tbf, NTREC*BSIZE)) < 0) { printf("Tape read error: inode %u\n", curino); eflag++; for (i = 0; i < NTREC; i++) clearbuf(&tbf[i*BSIZE]); } if (i == 0) { bct = NTREC + 1; volno++; loop: flsht(); close(mt); printf("Mount volume %d\n", volno); while (getchar() != '\n') ; if ((mt = open(magtape, 0)) == -1) { printf("Cannot open tape!\n"); goto loop; } if (readhdr(&tmpbuf) == 0) { printf("Not a dump tape.Try again\n"); goto loop; } if (checkvol(&tmpbuf, volno) == 0) { printf("Wrong tape. Try again\n"); goto loop; } readtape(b); return; } } copy(&tbf[(bct++*BSIZE)], b, BSIZE); } flsht() { bct = NTREC+1; } copy(f, t, s) register char *f, *t; { register i; i = s; do *t++ = *f++; while (--i); } clearbuf(cp) register char *cp; { register i; i = BSIZE; do *cp++ = 0; while (--i); } /* * Put and get the directory entries from the compressed * directory file */ #ifndef STANDALONE putent(cp) char *cp; { register i; for (i = 0; i < sizeof(ino_t); i++) writec(*cp++); for (i = 0; i < DIRSIZ; i++) { writec(*cp); if (*cp++ == 0) return; } return; } getent(bf) register char *bf; { register i; for (i = 0; i < sizeof(ino_t); i++) *bf++ = readc(); for (i = 0; i < DIRSIZ; i++) if ((*bf++ = readc()) == 0) return; return; } /* * read/write te directory file */ writec(c) char c; { drblock[bpt++] = c; seekpt++; if (bpt >= BSIZE) { bpt = 0; write(df, drblock, BSIZE); } } readc() { if (bpt >= BSIZE) { read(df, drblock, BSIZE); bpt = 0; } return(drblock[bpt++]); } mseek(pt) daddr_t pt; { bpt = BSIZE; lseek(df, pt, 0); } flsh() { write(df, drblock, bpt+1); } /* * search the directory inode ino * looking for entry cp */ ino_t search(inum, cp) ino_t inum; char *cp; { register i; struct direct dir; for (i = 0; i < MAXINO; i++) if (inotab[i].t_ino == inum) { goto found; } return(0); found: mseek(inotab[i].t_seekpt); do { getent((char *)&dir); if (direq(dir.d_name, "/")) return(0); } while (direq(dir.d_name, cp) == 0); return(dir.d_ino); } /* * Search the directory tree rooted at inode 2 * for the path pointed at by n */ psearch(n) char *n; { register char *cp, *cp1; char c; ino = 2; if (*(cp = n) == '/') cp++; next: cp1 = cp + 1; while (*cp1 != '/' && *cp1) cp1++; c = *cp1; *cp1 = 0; ino = search(ino, cp); if (ino == 0) { *cp1 = c; return(0); } *cp1 = c; if (c == '/') { cp = cp1+1; goto next; } return(ino); } direq(s1, s2) register char *s1, *s2; { register i; for (i = 0; i < DIRSIZ; i++) if (*s1++ == *s2) { if (*s2++ == 0) return(1); } else return(0); return(1); } #endif /* * read/write a disk block, be sure to update the buffer * cache if needed. */ dwrite(bno, b) daddr_t bno; char *b; { register i; for (i = 0; i < NCACHE; i++) { if (cache[i].c_bno == bno) { copy(b, cache[i].c_block, BSIZE); cache[i].c_time = 0; break; } else cache[i].c_time++; } lseek(fi, bno*BSIZE, 0); if(write(fi, b, BSIZE) != BSIZE) { #ifdef STANDALONE printf("disk write error %D\n", bno); #else fprintf(stderr, "disk write error %ld\n", bno); #endif exit(1); } } dread(bno, buf, cnt) daddr_t bno; char *buf; { register i, j; j = 0; for (i = 0; i < NCACHE; i++) { if (++curcache >= NCACHE) curcache = 0; if (cache[curcache].c_bno == bno) { copy(cache[curcache].c_block, buf, cnt); cache[curcache].c_time = 0; return; } else { cache[curcache].c_time++; if (cache[j].c_time < cache[curcache].c_time) j = curcache; } } lseek(fi, bno*BSIZE, 0); if (read(fi, cache[j].c_block, BSIZE) != BSIZE) { #ifdef STANDALONE printf("read error %D\n", bno); #else printf("read error %ld\n", bno); #endif exit(1); } copy(cache[j].c_block, buf, cnt); cache[j].c_time = 0; cache[j].c_bno = bno; } /* * the inode manpulation routines. Like the system. * * clri zeros the inode */ clri(ip) struct dinode *ip; { int i, *p; i = sizeof(struct dinode)/sizeof(int); p = (int *)ip; do *p++ = 0; while(--i); } /* * itrunc/tloop/bfree free all of the blocks pointed at by the inode */ itrunc(ip) register struct dinode *ip; { register i; daddr_t bn, iaddr[NADDR]; if (ip->di_mode == 0) return; i = ip->di_mode & IFMT; if (i != IFDIR && i != IFREG) return; l3tol(iaddr, ip->di_addr, NADDR); for(i=NADDR-1;i>=0;i--) { bn = iaddr[i]; if(bn == 0) continue; switch(i) { default: bfree(bn); break; case NADDR-3: tloop(bn, 0, 0); break; case NADDR-2: tloop(bn, 1, 0); break; case NADDR-1: tloop(bn, 1, 1); } } ip->di_size = 0; } tloop(bn, f1, f2) daddr_t bn; int f1, f2; { register i; daddr_t nb; union { char data[BSIZE]; daddr_t indir[NINDIR]; } ibuf; dread(bn, ibuf.data, BSIZE); for(i=NINDIR-1;i>=0;i--) { nb = ibuf.indir[i]; if(nb) { if(f1) tloop(nb, f2, 0); else bfree(nb); } } bfree(bn); } bfree(bn) daddr_t bn; { register i; union { char data[BSIZE]; struct fblk frees; } fbuf; if(sblock.s_nfree >= NICFREE) { fbuf.df_nfree = sblock.s_nfree; for(i=0;i0; j--) { sh += NSHIFT; nb <<= NSHIFT; if(bn < nb) break; bn -= nb; } if(j == 0) { return((daddr_t)0); } /* * fetch the address from the inode */ if((nb = iaddr[NADDR-j]) == 0) { iaddr[NADDR-j] = nb = balloc(); } /* * fetch through the indirect blocks */ for(; j<=3; j++) { dread(nb, (char *)indir, BSIZE); sh -= NSHIFT; i = (bn>>sh) & NMASK; nnb = indir[i]; if(nnb == 0) { nnb = balloc(); indir[i] = nnb; dwrite(nb, (char *)indir); } nb = nnb; } return(nb); } /* * read the tape into buf, then return whether or * or not it is a header block. */ gethead(buf) struct spcl *buf; { readtape((char *)buf); if (buf->c_magic != MAGIC || checksum((int *) buf) == 0) return(0); return(1); } /* * return whether or not the buffer contains a header block */ ishead(buf) struct spcl *buf; { if (buf->c_magic != MAGIC || checksum((int *) buf) == 0) return(0); return(1); } checktype(b, t) struct spcl *b; int t; { return(b->c_type == t); } checksum(b) int *b; { register i, j; j = BSIZE/sizeof(int); i = 0; do i += *b++; while (--j); if (i != CHECKSUM) { printf("Checksum error %o\n", i); return(0); ((} return(1); } checkvol(b, t) struct spcl *b; int t; { if (b->c_volume == t) return(1); return(0); } readhdr(b) struct spcl *b; { if (gethead(b) == 0) return(0); if (checktype(b, TS_TAPE) == 0) return(0); return(1); } /* * The next routines are called during file extraction to * put the data into the right form and place. */ #ifndef STANDALONE xtrfile(b, size) char *b; long size; { write(ofile, b, (int) size); } null() {;} skip() { lseek(ofile, (long) BSIZE, 1); } #endif rstrfile(b, s) char *b; long s; { daddr_t d; d = bmap(taddr, curbno); dwrite(d, b); curbno += 1; } rstrskip(b, s) char *b; long s; { curbno += 1; } #ifndef STANDALONE putdir(b) char *b; { register struct direct *dp; register i; for (dp = (struct direct *) b, i = 0; i < BSIZE; dp++, i += sizeof(*dp)) { if (dp->d_ino == 0) continue; putent((char *) dp); } } #endif /* * read/write an inode from the disk */ getdino(inum, b) ino_t inum; struct dinode *b; { daddr_t bno; char buf[BSIZE]; bno = (ino - 1)/INOPB; bno += 2; dread(bno, buf, BSIZE); copy(&buf[((inum-1)%INOPB)*sizeof(struct dinode)], (char *) b, sizeof(struct dinode)); } putdino(inum, b) ino_t inum; struct dinode *b; { daddr_t bno; char buf[BSIZE]; bno = ((ino - 1)/INOPB) + 2; dread(bno, buf, BSIZE); copy((char *) b, &buf[((inum-1)%INOPB)*sizeof(struct dinode)], sizeof(struct dinode)); dwrite(bno, buf); } /* * read a bit mask from the tape into m. */ readbits(m) short *m; { register i; i = spcl.c_count; while (i--) { readtape((char *) m); m += (BSIZE/(MLEN/BITS)); } while (gethead(&spcl) == 0) ; } done() { #ifndef STANDALONE unlink(dirfile); #endif exit(0); } 't5kO<i* #include #define MAXINT 32768. float fract = 2; double atof(); char rflag,eflag,c; char ibuf[BUFSIZ],obuf[BUFSIZ],line[BUFSIZ]; main(argc,argv) char **argv; { long tvec; int i; for(i=1;i #include #include #include #include #include #include #define ITABSZ 256 #define ISIZ (BSIZE/sizeof(struct dinode)) #define NUID 300 struct filsys sblock; struct dinode itab[ITABSZ]; struct du { long blocks; long nfiles; int uid; char *name; } du[NUID]; #define TSIZE 500 int sizes[TSIZE]; long overflow; int nflg; int fflg; int cflg; int fi; unsigned ino; unsigned nfiles; struct passwd *getpwent(); char *malloc(); char *copy(); main(argc, argv) char **argv; { register int n; register struct passwd *lp; register char **p; for(n=0; npw_uid; if (n>NUID) continue; if(du[n].name) continue; du[n].name = copy(lp->pw_name); } if (argc == 1) { for (p = dargv; *p;) { check(*p++); report(); } return(0); } while (--argc) { argv++; if (argv[0][0]=='-') { if (argv[0][1]=='n') nflg++; else if (argv[0][1]=='f') fflg++; else if (argv[0][1]=='c') cflg++; } else { check(*argv); report(); } } return(0); } check(file) char *file; { register unsigned i, j; register c; fi = open(file, 0); if (fi < 0) { printf("cannot open %s\n", file); return; } printf("%s:\n", file); sync(); bread(1, (char *)&sblock, sizeof sblock); nfiles = (sblock.s_isize-2)*(BSIZE/sizeof(struct dinode)); ino = 0; if (nflg) { if (isdigit(c = getchar())) ungetc(c, stdin); else while (c!='\n' && c != EOF) c = getchar(); } for(i=2; inodi_mode&IFMT) == 0) return; if (cflg) { if ((ip->di_mode&IFMT)!=IFDIR && (ip->di_mode&IFMT)!=IFREG) return; n = (ip->di_size+BSIZE-1)/BSIZE; if (n >= TSIZE) { overflow += n; n = TSIZE-1; } sizes[n]++; return; } if (ip->di_uid >= NUID) return; du[ip->di_uid].blocks += (ip->di_size+BSIZE-1)/BSIZE; du[ip->di_uid].nfiles++; if (nflg) { tryagain: if (fino==0) if (scanf("%d", &fino)<=0) return; if (fino > ino) return; if (finodi_uid].name) printf("%.7s ", np); else printf("%d ", ip->di_uid); while ((n = getchar())==' ' || n=='\t') ; putchar(n); while (n!=EOF && n!='\n') { n = getchar(); putchar(n); } fino = 0; } } bread(bno, buf, cnt) unsigned bno; char *buf; { lseek(fi, (long)bno*BSIZE, 0); if (read(fi, buf, cnt) != cnt) { printf("read error %u\n", bno); exit(1); } } qcmp(p1, p2) register struct du *p1, *p2; { if (p1->blocks > p2->blocks) return(-1); if (p1->blocks < p2->blocks) return(1); return(strcmp(p1->name, p2->name)); } report() { register i; if (nflg) return; if (cflg) { long t = 0; for (i=0; i #include #include #include char dot[] = "."; char dotdot[] = ".."; char name[512]; int file; int off = -1; struct stat d, dd; struct direct dir; main() { int rdev, rino; stat("/", &d); rdev = d.st_dev; rino = d.st_ino; for (;;) { stat(dot, &d); if (d.st_ino==rino && d.st_dev==rdev) prname(); if ((file = open(dotdot,0)) < 0) { fprintf(stderr,"pwd: cannot open ..\n"); exit(1); } fstat(file, &dd); chdir(dotdot); if(d.st_dev == dd.st_dev) { if(d.st_ino == dd.st_ino) prname(); do if (read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) { fprintf(stderr,"read error in ..\n"); exit(1); } while (dir.d_ino != d.st_ino); } else do { if(read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) { fprintf(stderr,"read error in ..\n"); exit(1); } stat(dir.d_name, &dd); } while(dd.st_ino != d.st_ino || dd.st_dev != d.st_dev); close(file); cat(); } } prname() { write(1, "/", 1); if (off<0) off = 0; name[off] = '\n'; write(1, name, off+1); exit(0); } cat() { register i, j; i = -1; while (dir.d_name[++i] != 0); if ((off+i+2) > 511) prname(); for(j=off+1; j>=0; --j) name[j+i+1] = name[j]; off=i+off+1; name[i] = '/'; for(--i; i>=0; --i) name[i] = dir.d_name[i]; } (('8k´%knqtwz}i* # /* permuted title index ptx [-t] [-i ignore] [-o only] [-w num] [-f] [input] [output] Ptx reads the input file and permutes on words in it. It excludes all words in the ignore file. Alternately it includes words in the only file. if neither is given it excludes the words in /usr/lib/eign. The width of the output line can be changed to num characters. If omitted 72 is default unless troff than 100. the -f flag tells the program to fold the output the -t flag says the output is for troff and the output is then wider.  make: cc ptx.c -lS */ #include #include #include #define DEFLTX "/usr/lib/eign" #define TILDE 0177 #define SORT "/bin/sort" #define N 30 #define MAX N*BUFSIZ #define LMAX 200 #define MAXT 2048 #define MASK 03777 #define SET 1 #define isabreak(c) (btable[c]) extern char *calloc(), *mktemp(); extern char *getline(); int status; char *hasht[MAXT]; char line[LMAX]; char btable[128]; int ignore; int only; int llen = 72; int gap = 3; int gutter = 3; int mlen = LMAX; int wlen; int rflag; int halflen; char *strtbufp, *endbufp; char *empty = ""; char *infile; FILE *inptr = stdin; char *outfile; FILE *outptr = stdout; char *sortfile; /* output of sort program */ char nofold[] = {'-', 'd', 't', TILDE, 0}; char fold[] = {'-', 'd', 'f', 't', TILDE, 0}; char *sortopt = nofold; FILE *sortptr; char *bfile; /*contains user supplied break chars */ FILE *bptr; main(argc,argv) int argc; char **argv; { register int c; register char *bufp; int pid; char *pend; extern onintr(); char *xfile; FILE *xptr; if(signal(SIGHUP,onintr)==SIG_IGN) signal(SIGHUP,SIG_IGN); if(signal(SIGINT,onintr)==SIG_IGN) signal(SIGINT,SIG_IGN); signal(SIGPIPE,onintr); signal(SIGTERM,onintr); /* argument decoding */ xfile = DEFLTX; argv++; while(argc>1 && **argv == '-') { switch (*++*argv){ case 'r': rflag++; break; case 'f': sortopt = fold; break; case 'w': if(argc >= 2) { argc--; wlen++; llen = atoi(*++argv); if(llen == 0) diag("Wrong width:",*argv); if(llen > LMAX) { llen = LMAX; msg("Lines truncated to 200 chars.",empty); } break; } case 't': if(wlen == 0) llen = 100; break; case 'g': if(argc >=2) { argc--; gap = gutter = atoi(*++argv); } break; case 'i': if(only) diag("Only file already given.",empty); if (argc>=2){ argc--; ignore++; xfile = *++argv; } break; case 'o': if(ignore) diag("Ignore file already given",empty); if (argc>=2){ only++; argc--; xfile = *++argv; } break; case 'b': if(argc>=2) { argc--; bfile = *++argv; } break; default: msg("Illegal argument:",*argv); } argc--; argv++; } if(argc>3) diag("Too many filenames",empty); else if(argc==3){ infile = *argv++; outfile = *argv; if((outptr = fopen(outfile,"w")) == NULL) diag("Cannot open output file:",outfile); } else if(argc==2) { infile = *argv; outfile = 0; } /* Default breaks of blank, tab and newline */ btable[' '] = SET; btable['\t'] = SET; btable['\n'] = SET; if(bfile) { if((bptr = fopen(bfile,"r")) == NULL) diag("Cannot open break char file",bfile); while((c = getc(bptr)) != EOF) btable[c] = SET; } /* Allocate space for a buffer. If only or ignore file present read it into buffer. Else read in default ignore file and put resulting words in buffer. */ if((strtbufp = calloc(N,BUFSIZ)) == NULL) diag("Out of memory space",empty); bufp = strtbufp; endbufp = strtbufp+MAX; if((xptr = fopen(xfile,"r")) == NULL) diag("Cannot open file",xfile); while(bufp < endbufp && (c = getc(xptr)) != EOF) { if(isabreak(c)) { if(storeh(hash(strtbufp,bufp),strtbufp)) diag("Too many words",xfile); *bufp++ = '\0'; strtbufp = bufp; } else { *bufp++ = (isupper(c)?tolower(c):c); } } if (bufp >= endbufp) diag("Too many words in file",xfile); endbufp = --bufp; /* open output file for sorting */ sortfile = mktemp("/tmp/ptxsXXXXX"); if((sortptr = fopen(sortfile, "w")) == NULL) diag("Cannot open output for sorting:",sortfile); /* get a line of data and compare each word for inclusion or exclusion in the sort phase */ if (infile!=0 && (inptr = fopen(infile,"r")) == NULL) diag("Cannot open data: ",infile); while(pend=getline()) cmpline(pend); fclose(sortptr); switch (pid = fork()){ case -1: /* cannot fork */ diag("Cannot fork",empty); case 0: /* child */ execl(SORT, SORT, sortopt, "+0", "-1", "+1", sortfile, "-o", sortfile, 0); default: /* parent */ while(wait(&status) != pid); } getsort(); onintr(); } msg(s,arg) char *s; char *arg; { fprintf(stderr,"%s %s\n",s,arg); return; } diag(s,arg) char *s, *arg; { msg(s,arg); exit(1); } char *getline() { register c; register char *linep; char *endlinep; endlinep= line + mlen; linep = line; /* Throw away leading white space */ while(isspace(c=getc(inptr))) ; if(c==EOF) return(0); ungetc(c,inptr); while(( c=getc(inptr)) != EOF) { switch (c) { case '\t': '8k̴%knqtwz}i*if(linephalflen-1) p3b = p3a+halflen-1; p2a = ltrim(ref,p2b=linep,halflen-1); if(p2b-p2a>halflen-1) p2a = p2b-halflen-1; p1b = rtrim(p1a=p3b+(isspace(p3b[0])!=0),tilde, w=halflen-(p2b-p2a)-gap); if(p1b-p1a>w) p1b = p1a; p4a = ltrim(ref,p4b=p2a-(isspace(p2a[-1])!=0), w=halflen-(p3b-p3a)-gap); if(p4b-p4a>w) p4a = p4b; fprintf(outptr,".xx \""); putout(p1a,p1b); /* tilde-1 to account for extra space before TILDE */ if(p1b!=(tilde-1) && p1a!=p1b) fprintf(outptr,"/"); fprintf(outptr,"\" \""); if(p4a==p4b && p2a!=ref && p2a!=p2b) fprintf(outptr,"/"); putout(p2a,p2b); fprintf(outptr,"\" \""); putout(p3a,p3b); /* ++p3b to account for extra blank after TILDE */ /* ++p3b to account for extra space before TILDE */ if(p1a==p1b && ++p3b!=tilde) fprintf(outptr,"/"); fprintf(outptr,"\" \""); if(p1a==p1b && p4a!=ref && p4a!=p4b) fprintf(outptr,"/"); putout(p4a,p4b); if(rflag) fprintf(outptr,"\" %s\n",tilde); else fprintf(outptr,"\"\n"); linep = line; break; case '"': /* put double " for " */ *linep++ = c; default: *linep++ = c; } } } char *rtrim(a,c,d) char *a,*c; { char *b,*x; b = c; for(x=a+1; x<=c&&x-a<=d; x++) if((x==c||isspace(x[0]))&&!isspace(x[-1])) b = x; if(b=c&&b-x<=d; x--) if(!isspace(x[0])&&(x==c||isspace(x[-1]))) a = x; if(a>c&&!isspace(a[-1])) a--; return(a); } putout(strt,end) char *strt, *end; { char *cp; cp = strt; for(cp=strt; cp>2)) & MASK; return(k); } storeh(num,strtp) int num; char *strtp; { int i; for(i=num; iADGJMPSDODO /* * Print system stuff */ #define mask(x) (x&0377) #include #include #include char *fcore = "/dev/mem"; char *fnlist = "/unix"; int fc; struct setup { char name[8]; int type; unsigned value; } setup[] = { #define SINODE 0 "_inode", 0, 0, #define STEXT 1 "_text", 0, 0, #define SPROC 2 "_proc", 0, 0, #define SDH 3 "_dh11", 0, 0, #define SNDH 4 "_ndh11", 0, 0, #define SKL 5 "_kl11", 0, 0, #define SFIL 6 "_file", 0, 0, 0, }; int inof; int txtf; int prcf; int ttyf; int usrf; long ubase; int filf; int allflg; main(argc, argv) char **argv; { while (--argc && **++argv == '-') { while (*++*argv) switch (**argv) { case 'a': allflg++; break; case 'i': inof++; break; case 'x': txtf++; break; case 'p': prcf++; break; case 't': ttyf++; break; case 'u': if (--argc == 0) break; usrf++; ubase = oatoi(*++argv); break; case 'f': filf++; break; } } if (argc>0) fcore = argv[0]; if ((fc = open(fcore, 0)) < 0) { printf("Can't find %s\n", fcore); exit(1); } if (argc>1) fnlist = argv[1]; nlist(fnlist, setup); if (setup[SINODE].type == -1) { printf("no namelist\n"); exit(1); } if (inof) doinode(); if (txtf) dotext(); if (ttyf) dotty(); if (prcf) doproc(); if (usrf) dousr(); if (filf) dofil(); } doinode() { #include register struct inode *ip; struct inode xinode[NINODE]; register int nin, loc; nin = 0; lseek(fc, (long)setup[SINODE].value, 0); read(fc, (char *)xinode, sizeof(xinode)); for (ip = xinode; ip < &xinode[NINODE]; ip++) if (ip->i_count) nin++; printf("%d active inodes\n", nin); printf(" LOC FLAGS CNT DEVICE INO MODE NLK UID SIZE/DEV\n"); loc = setup[SINODE].value; for (ip = xinode; ip < &xinode[NINODE]; ip++, loc += sizeof(xinode[0])) { if (ip->i_count == 0) continue; printf("%7.1o ", loc); putf(ip->i_flag&ILOCK, 'L'); putf(ip->i_flag&IUPD, 'U'); putf(ip->i_flag&IACC, 'A'); putf(ip->i_flag&IMOUNT, 'M'); putf(ip->i_flag&IWANT, 'W'); putf(ip->i_flag&ITEXT, 'T'); printf("%4d", ip->i_count&0377); printf("%3d,%3d", major(ip->i_dev), minor(ip->i_dev)); printf("%6l", ip->i_number); printf("%7o", ip->i_mode); printf("%4d", ip->i_nlink); printf("%4d", ip->i_uid); if ((ip->i_mode&IFMT)==IFBLK || (ip->i_mode&IFMT)==IFCHR) printf("%6d,%3d", major(ip->i_un.i_rdev), minor(ip->i_un.i_rdev)); else printf("%10ld", ip->i_size); printf("\n"); } } putf(v, n) { if (v) printf("%c", n); else printf(" "); } dotext() { #include register struct text *xp; struct text xtext[NTEXT]; register loc; int ntx; ntx = 0; lseek(fc, (long)setup[STEXT].value, 0); read(fc, (char *)xtext, sizeof(xtext)); for (xp = xtext; xp < &xtext[NTEXT]; xp++) if (xp->x_iptr!=NULL) ntx++; printf("%d text segments\n", ntx); printf(" LOC FLAGS DADDR CADDR SIZE IPTR CNT CCNT\n"); loc = setup[STEXT].value; for (xp = xtext; xp < &xtext[NTEXT]; xp++, loc+=sizeof(xtext[0])) { if (xp->x_iptr == NULL) continue; printf("%7.1o", loc); printf(" "); putf(xp->x_flag&XTRC, 'T'); putf(xp->x_flag&XWRIT, 'W'); putf(xp->x_flag&XLOAD, 'L'); putf(xp->x_flag&XLOCK, 'K'); putf(xp->x_flag&XWANT, 'w'); printf("%5u", xp->x_daddr); printf("%7.1o", xp->x_caddr); printf("%5d", xp->x_size); printf("%8.1o", xp->x_iptr); printf("%4d", xp->x_count&0377); printf("%4d", xp->x_ccount); printf("\n"); } } doproc() { #include struct proc xproc[NPROC]; register struct proc *pp; register loc, np; lseek(fc, (long)setup[SPROC].value, 0); read(fc, (char *)xproc, sizeof(xproc)); np = 0; for (pp=xproc; pp < &xproc[NPROC]; pp++) if (pp->p_stat) np++; printf("%d processes\n", np); printf(" LOC S F PRI SIGNAL UID TIM CPU NI PGRP PID PPID ADDR SIZE WCHAN LINK TEXTP CLKT\n"); for (loc=setup[SPROC].value,pp=xproc; pp<&xproc[NPROC]; pp++,loc+=sizeof(xproc[0])) { if (pp->p_stat==0 && allflg==0) continue; printf("%6o", loc); printf("%2d", pp->p_stat); printf("%3o", pp->p_flag); printf("%5d", pp->p_pri); printf("%7o", pp->p_sig); printf("%4d", pp->p_uid&0377); printf("%4d", pp->p_time&0377); printf("%4d", pp->p_cpu&0377); printf("%3d", pp->p_nice); printf("%6d", pp->p_pgrp); printf("%6d", pp->p_pid); printf("%6d", pp->p_ppid); printf("%5o", pp->p_addr); printf("%5o", pp->p_size); printf("%7o", pp->p_wchan); printf("%7o", pp->p_link); printf("%7o", pp->p_textp); printf(" %u", pp->p_clktim); printf("\n"); } } dotty() { struct tty dh11[48]; int ndh; register struct tty *tp; register char *mesg; printf("1 kl11\n"); lseek(fc, (long)setup[SKL].value, 0); read(fc, (char *)dh11, sizeof(dh11[0])); mesg = " # RAW CAN OUT MODE ADDR DEL COL STATE PGRP\n"; printf(mesg); ttyprt(0, &dh11[0]); if (setup[SNDH].type == -1) return; lseek(fc, (long)setup[SNDH].value, 0); read(fc, (char *)&ndh, sizeof(ndh)); printf("%d dh lines\n", ndh); lseek(fc, (long)setup[SDH].value, 0); read(fc, (char *)dh11, sizeof(dh11)); for (tp = d'9k!58;>ADGJMPSDODOh11; tp < &dh11[ndh]; tp++) ttyprt(tp-dh11, tp); } ttyprt(n, atp) struct tty *atp; { register struct tty *tp; tp = atp; printf("%2d", n); printf("%4d", tp->t_rawq.c_cc); printf("%4d", tp->t_canq.c_cc); printf("%4d", tp->t_outq.c_cc); printf("%8.1o", tp->t_flags); printf("%8.1o", tp->t_addr); printf("%3d", tp->t_delct); printf("%4d ", tp->t_col); putf(tp->t_state&TIMEOUT, 'T'); putf(tp->t_state&WOPEN, 'W'); putf(tp->t_state&ISOPEN, 'O'); putf(tp->t_state&CARR_ON, 'C'); putf(tp->t_state&BUSY, 'B'); putf(tp->t_state&ASLEEP, 'A'); putf(tp->t_state&XCLUDE, 'X'); putf(tp->t_state&HUPCLS, 'H'); printf("%6d", tp->t_pgrp); printf("\n"); } dousr() { #include #include union { struct user rxu; char fxu[ctob(USIZE)]; } xu; register struct user *up; register i; lseek(fc, ubase<<6, 0); read(fc, (char *)&xu, sizeof(xu)); up = &xu.rxu; printf("rsav %.1o %.1o\n", up->u_rsav[0], up->u_rsav[1]); printf("segflg, error %d, %d\n", up->u_segflg, up->u_error); printf("uids %d,%d,%d,%d\n", up->u_uid,up->u_gid,up->u_ruid,up->u_rgid); printf("procp %.1o\n", up->u_procp); printf("base, count, offset %.1o %.1o %ld\n", up->u_base, up->u_count, up->u_offset); printf("cdir %.1o\n", up->u_cdir); printf("dbuf %.14s\n", up->u_dbuf); printf("dirp %.1o\n", up->u_dirp); printf("dent %d %.14s\n", up->u_dent.d_ino, up->u_dent.d_name); printf("pdir %.1o\n", up->u_pdir); printf("dseg"); for (i=0; i<8; i++) printf("%8.1o", up->u_uisa[i]); printf("\n "); for (i=0; i<8; i++) printf("%8.1o", up->u_uisd[i]); if (up->u_sep) { printf("\ntseg"); for (i=8; i<16; i++) printf("%8.1o", up->u_uisa[i]); printf("\n "); for (i=8; i<16; i++) printf("%8.1o", up->u_uisd[i]); } printf("\nfile"); for (i=0; i<10; i++) printf("%8.1o", up->u_ofile[i]); printf("\n "); for (i=10; iu_ofile[i]); printf("\nargs"); for (i=0; i<5; i++) printf(" %.1o", up->u_arg[i]); printf("\nsizes %.1o %.1o %.1o\n", up->u_tsize, up->u_dsize, up->u_ssize); printf("sep %d\n", up->u_sep); printf("qsav %.1o %.1o\n", up->u_qsav[0], up->u_qsav[1]); printf("ssav %.1o %.1o\n", up->u_ssav[0], up->u_ssav[1]); printf("sigs"); for (i=0; iu_signal[i]); printf("\ntimes %ld %ld\n", up->u_utime/60, up->u_stime/60); printf("ctimes %ld %ld\n", up->u_cutime/60, up->u_cstime/60); printf("ar0 %.1o\n", up->u_ar0); /* printf("prof"); for (i=0; i<4; i++) printf(" %.1o", up->u_prof[i]); */ printf("\nintflg %d\n", up->u_intflg); printf("ttyp %.1o\n", up->u_ttyp); printf("ttydev %d,%d\n", major(up->u_ttyd), minor(up->u_ttyd)); printf("comm %.14s\n", up->u_comm); } oatoi(s) char *s; { register v; v = 0; while (*s) v = (v<<3) + *s++ - '0'; return(v); } dofil() { #include struct file xfile[NFILE]; register struct file *fp; register nf; int loc; nf = 0; lseek(fc, (long)setup[SFIL].value, 0); read(fc, (char *)xfile, sizeof(xfile)); for (fp=xfile; fp < &xfile[NFILE]; fp++) if (fp->f_count) nf++; printf("%d open files\n", nf); printf(" LOC FLG CNT INO OFFS\n"); for (fp=xfile,loc=setup[SFIL].value; fp < &xfile[NFILE]; fp++,loc+=sizeof(xfile[0])) { if (fp->f_count==0) continue; printf("%7.1o ", loc); putf(fp->f_flag&FREAD, 'R'); putf(fp->f_flag&FWRITE, 'W'); putf(fp->f_flag&FPIPE, 'P'); printf("%4d", mask(fp->f_count)); printf("%8.1o", fp->f_inode); printf(" %ld\n", fp->f_un.f_offset); } } ((':kT*u  #&i* /* * ps - process status * examine and print certain things about processes */ #include #include #include #include #include #include #include #include struct nlist nl[] = { { "_proc" }, { "_swapdev" }, { "_swplo" }, { "" }, }; struct proc mproc; struct user u; int chkpid; int retcode=1; int lflg; int vflg; int kflg; int xflg; char *tptr; long lseek(); char *gettty(); char *getptr(); char *strncmp(); int aflg; int mem; int swmem; int swap; daddr_t swplo; int ndev; struct devl { char dname[DIRSIZ]; dev_t dev; } devl[256]; char *coref; main(argc, argv) char **argv; { int i; char *ap; int uid, puid; if (argc>1) { ap = argv[1]; while (*ap) switch (*ap++) { case 'v': vflg++; break; case 'a': aflg++; break; case 't': if(*ap) tptr = ap; aflg++; if (*tptr == '?') xflg++; goto bbreak; case 'x': xflg++; break; case '-': break; case 'l': lflg++; break; case 'k': kflg++; break; default: chkpid = atoi(ap-1); goto bbreak; break; } } bbreak: if(chdir("/dev") < 0) { fprintf(stderr, "Can't change to /dev\n"); exit(1); } nlist(argc>2? argv[2]:"/unix", nl); if (nl[0].n_type==0) { fprintf(stderr, "No namelist\n"); exit(1); } coref = "/dev/mem"; if(kflg) coref = "/usr/sys/core"; if ((mem = open(coref, 0)) < 0) { fprintf(stderr, "No mem\n"); exit(1); } swmem = open(coref, 0); /* * read mem to find swap dev. */ lseek(mem, (long)nl[1].n_value, 0); read(mem, (char *)&nl[1].n_value, sizeof(nl[1].n_value)); /* * Find base of swap */ lseek(mem, (long)nl[2].n_value, 0); read(mem, (char *)&swplo, sizeof(swplo)); /* * Locate proc table */ lseek(mem, (long)nl[0].n_value, 0); getdev(); uid = getuid(); if (lflg) printf(" F S UID PID PPID CPU PRI NICE ADDR SZ WCHAN TTY TIME CMD\n"); else if (chkpid==0) printf(" PID TTY TIME CMD\n"); for (i=0; i register FILE *df; struct stat sbuf; struct direct dbuf; if ((df = fopen("/dev", "r")) == NULL) { fprintf(stderr, "Can't open /dev\n"); exit(1); } ndev = 0; while (fread((char *)&dbuf, sizeof(dbuf), 1, df) == 1) { if(dbuf.d_ino == 0) continue; if(stat(dbuf.d_name, &sbuf) < 0) continue; if ((sbuf.st_mode&S_IFMT) != S_IFCHR) continue; strcpy(devl[ndev].dname, dbuf.d_name); devl[ndev].dev = sbuf.st_rdev; ndev++; } fclose(df); if ((swap = open("/dev/swap", 0)) < 0) { fprintf(stderr, "Can't open /dev/swap\n"); exit(1); } } long round(a, b) long a, b; { long w = ((a+b-1)/b)*b; return(w); } struct map { long b1, e1; long f1; long b2, e2; long f2; }; struct map datmap; int file; prcom(puid) { char abuf[512]; long addr; register int *ip; register char *cp, *cp1; long tm; int c, nbad; register char *tp; long txtsiz, datsiz, stksiz; int septxt; int lw=(lflg?35:80); char **ap; if (mproc.p_flag&SLOAD) { addr = ctob((long)mproc.p_addr); file = swmem; } else { addr = (mproc.p_addr+swplo)<<9; file = swap; } lseek(file, addr, 0); if (read(file, (char *)&u, sizeof(u)) != sizeof(u)) return(0); /* set up address maps for user pcs */ txtsiz = ctob(u.u_tsize); datsiz = ctob(u.u_dsize); stksiz = ctob(u.u_ssize); septxt = u.u_sep; datmap.b1 = (septxt ? 0 : round(txtsiz,TXTRNDSIZ)); datmap.e1 = datmap.b1+datsiz; datmap.f1 = ctob(USIZE)+addr; datmap.b2 = stackbas(stksiz); datmap.e2 = stacktop(stksiz); datmap.f2 = ctob(USIZE)+(datmap.e1-datmap.b1)+addr; tp = gettty(); if (tptr && strncmp(tptr, tp, 2)) return(0); if (lflg) { printf("%2o %c%4d", mproc.p_flag, "0SWRIZT"[mproc.p_stat], puid); } printf("%6u", mproc.p_pid); if (lflg) { printf("%6u%4d%4d%5d%6o%4d", mproc.p_ppid, mproc.p_cpu&0377, mproc.p_pri, mproc.p_nice, mproc.p_addr, (mproc.p_size+7)>>3); if (mproc.p_wchan) printf("%7o", mproc.p_wchan); else printf(" "); } printf(" %-2.2s", tp); if (mproc.p_stat==SZOMB) { printf(" "); return(1); } tm = (u.u_utime + u.u_stime + 30)/60; printf(" %2ld:", tm/60); tm %= 60; printf(tm<10?"0%ld":"%ld", tm); if (vflg && lflg==0) { /* 0 == old tflg (print long times) */ tm = (u.u_cstime + 30)/60; printf(" %2ld:", tm/60); tm %= 60; printf(tm<10?"0%ld":"%ld", tm); tm = (u.u_cutime + 30)/60; printf(" %2ld:", tm/60); tm %= 60; printf(tm<10?"0%ld":"%ld", tm); } if (mproc.p_pid == 0) { printf(" swapper"); return(1); } addr += ctob((long)mproc.p_size) - 512; /* look for sh special */ lseek(file, addr+512-sizeof(char **), 0); if (read(file, (char *)&ap, sizeof(char *)) != sizeof(char *)) return(1); if (ap) { char b[82]; char *bp = b; while((cp=ge':k,u  #&i*tptr(ap++)) && cp && (bp'~') { if (nbad++>3) break; continue; } *bp++ = c; } *bp++ = ' '; } *bp++ = 0; printf(lflg?" %.30s":" %.60s", b); return(1); } lseek(file, addr, 0); if (read(file, abuf, sizeof(abuf)) != sizeof(abuf)) return(1); for (ip = (int *)&abuf[512]-2; ip > (int *)abuf; ) { if (*--ip == -1 || *ip==0) { cp = (char *)(ip+1); if (*cp==0) cp++; nbad = 0; for (cp1 = cp; cp1 < &abuf[512]; cp1++) { c = *cp1&0177; if (c==0) *cp1 = ' '; else if (c < ' ' || c > 0176) { if (++nbad >= 5) { *cp1++ = ' '; break; } *cp1 = '?'; } else if (c=='=') { *cp1 = 0; while (cp1>cp && *--cp1!=' ') *cp1 = 0; break; } } while (*--cp1==' ') *cp1 = 0; printf(lflg?" %.30s":" %.60s", cp); return(1); } } return(1); } char * gettty() { register i; register char *p; if (u.u_ttyp==0) return("?"); for (i=0; ib1, amap->e1)) { if(within(adr, amap->b2, amap->e2)) { saddr = (unsigned)adr + amap->f2 - amap->b2; } else return(0); } else saddr = (unsigned)adr + amap->f1 - amap->b1; if(lseek(file, saddr, 0)==-1 || read(file, &b, 1)<1) { return(0); } return((unsigned)b); } within(adr,lbd,ubd) char *adr; long lbd, ubd; { return((unsigned)adr>=lbd && (unsigned)adr #include #include #include int ncol = 1; char *header; int col; int icol; FILE *file; char *bufp; #define BUFS 6720 char buffer[BUFS]; /* for multi-column output */ char obuf[BUFSIZ]; #define FF 014 int line; char *colp[72]; int nofile; char isclosed[10]; FILE *ifile[10]; char **lastarg; int peekc; int fpage; int page; int colw; int nspace; int width = 72; int length = 66; int plength = 61; int margin = 10; int ntflg; int mflg; int tabc; char *tty; int mode; char *ttyname(); char *ctime(); main(argc, argv) char **argv; { int nfdone; int onintr(); setbuf(stdout, obuf); if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, onintr); lastarg = &argv[argc-1]; fixtty(); for (nfdone=0; argc>1; argc--) { argv++; if (**argv == '-') { switch (*++*argv) { case 'h': if (argc>=2) { header = *++argv; argc--; } continue; case 't': ntflg++; continue; case 'l': length = atoi(++*argv); continue; case 'w': width = atoi(++*argv); continue; case 's': if (*++*argv) tabc = **argv; else tabc = '\t'; continue; case 'm': mflg++; continue; default: ncol = atoi(*argv); continue; } } else if (**argv == '+') { fpage = atoi(++*argv); } else { print(*argv, argv); nfdone++; if (mflg) break; } } if (nfdone==0) print((char *)0, (char **)0); done(); } done() { if (tty)(( chmod(tty, mode); exit(0); } onintr() { if (tty) chmod(tty, mode); _exit(1); } fixtty() { struct stat sbuf; tty = ttyname(1); if (tty == 0) return; stat(tty, &sbuf); mode = sbuf.st_mode&0777; chmod(tty, 0600); } print(fp, argp) char *fp; char **argp; { extern char *sprintf(); struct stat sbuf; register sncol; register char *sheader; register char *cbuf; char linebuf[150], *cp; if (ntflg) margin = 0; else margin = 10; if (length <= margin) length = 66; if (width <= 0) width = 72; if (ncol>72 || ncol>width) { fprintf(stderr, "pr: No room for columns.\n"); done(); } if (mflg) { mopen(argp); ncol = nofile; } colw = width/ncol; sncol = ncol; sheader = header; plength = length-5; if (ntflg) plength = length; if (--ncol<0) ncol = 0; if (mflg) fp = 0; if (fp) { if((file=fopen(fp, "r"))==NULL) { if (tty==NULL) fprintf(stderr, "pr: can't open %s\n", fp); ncol = sncol; header = sheader; return; } stat(fp, &sbuf); } else { file = stdin; time(&sbuf.st_mtime); } if (header == 0) header = fp?fp:""; cbuf = ctime(&sbuf.st_mtime); cbuf[16] = '\0'; cbuf[24] = '\0'; page = 1; icol = 0; colp[ncol] = bufp = buffer; if (mflg==0) nexbuf(); while (mflg&&nofile || (!mflg)&&tpgetc(ncol)>0) { if (mflg==0) { colp[ncol]--; if (colp[ncol] < buffer) colp[ncol] = &buffer[BUFS]; } line = 0; if (ntflg==0) { sprintf(linebuf, "\n\n%s %s %s Page %d\n\n\n", cbuf+4, cbuf+20, header, page); for(cp=linebuf;*cp;) put(*cp++); } putpage(); if (ntflg==0) while(line=10) { fprintf(stderr, "pr: Too many args\n"); done(); } } } putpage() { register int lastcol, i, c; int j; if (ncol==0) { while (line512) n = 512; if(feof(file) || (n=fread(rbufp,1,n,file)) <= 0){ fclose(file); *rbufp = 0376; } else { rbufp += n; if (rbufp >= &buffer[BUFS]) rbufp = buffer; *rbufp = 0375; } bufp = rbufp; } tpgetc(ai) { register char **p; register int c, i; i = ai; if (mflg) { if((c=getc(ifile[i])) == EOF) { if (isclosed[i]==0) { isclosed[i] = 1; if (--nofile <= 0) return(0); } return('\n'); } if (c==FF && ncol>0) c = '\n'; return(c); } loop: c = **(p = &colp[i]) & 0377; if (c == 0375) { nexbuf(); c = **p & 0377; } if (c == 0376) return(0); (*p)++; if (*p >= &buffer[BUFS]) *p = buffer; if (c==0) goto loop; return(c); } pgetc(i) { register int c; if (peekc) { c = peekc; peekc = 0; } ';k.``else c = tpgetc(i); if (tabc) return(c); switch (c) { case '\t': icol++; if ((icol&07) != 0) peekc = '\t'; return(' '); case '\n': icol = 0; break; case 010: case 033: icol--; break; } if (c >= ' ') icol++; return(c); } put(ac) { register int ns, c; c = ac; if (tabc) { putcp(c); if (c=='\n') line++; return; } switch (c) { case ' ': nspace++; col++; return; case '\n': col = 0; nspace = 0; line++; break; case 010: case 033: if (--col<0) col = 0; if (--nspace<0) nspace = 0; } while(nspace) { if (nspace>2 && col > (ns=((col-nspace)|07))) { nspace = col-ns-1; putcp('\t'); } else { nspace--; putcp(' '); } } if (c >= ' ') col++; putcp(c); } putcp(c) { if (page >= fpage) putchar(c); } '<ks #i* /* * enter a password in the password file * this program should be suid with owner * with an owner with write permission on /etc/passwd */ #include #include #include char passwd[] = "/etc/passwd"; char temp[] = "/etc/ptmp"; struct passwd *pwd; struct passwd *getpwent(); int endpwent(); char *strcpy(); char *crypt(); char *getpass(); char *getlogin(); char *pw; char pwbuf[10]; char buf[512]; main(argc, argv) char *argv[]; { char *p; int i; char saltc[2]; long salt; int u,fi,fo; int insist; int ok, flags; int c; int pwlen; FILE *tf; char *uname; insist = 0; if(argc < 2) { if ((uname = getlogin()) == NULL) { printf ("Usage: passwd user\n"); goto bex; } else { printf("Changing password for %s\n", uname); } } else { uname = argv[1]; } while(((pwd=getpwent()) != NULL)&&(strcmp(pwd->pw_name,uname)!=0)); u = getuid(); if((pwd==NULL) || (u!=0 && u != pwd->pw_uid)) { printf("Permission denied.\n"); goto bex; } endpwent(); if (pwd->pw_passwd[0] && u != 0) { strcpy(pwbuf, getpass("Old password:")); pw = crypt(pwbuf, pwd->pw_passwd); if(strcmp(pw, pwd->pw_passwd) != 0) { printf("Sorry.\n"); goto bex; } } tryagn: strcpy(pwbuf, getpass("New password:")); pwlen = strlen(pwbuf); if (pwlen == 0) { printf("Password unchanged.\n"); goto bex; } ok = 0; flags = 0; p = pwbuf; while(c = *p++){ if(c>='a' && c<='z') flags |= 2; else if(c>='A' && c<='Z') flags |= 4; else if(c>='0' && c<='9') flags |= 1; else flags |= 8; } if(flags >=7 && pwlen>= 4) ok = 1; if(((flags==2)||(flags==4)) && pwlen>=6) ok = 1; if(((flags==3)||(flags==5)||(flags==6))&&pwlen>=5) ok = 1; if((ok==0) && (insist<2)){ if(flags==1) printf("Please use at least one non-numeric character.\n"); else printf("Please use a longer password.\n"); insist++; goto tryagn; } if (strcmp(pwbuf,getpass("Retype new password:")) != 0) { printf ("Mismatch - password unchanged.\n"); goto bex; } time(&salt); salt += getpid(); saltc[0] = salt & 077; saltc[1] = (salt>>6) & 077; for(i=0;i<2;i++){ c = saltc[i] + '.'; if(c>'9') c += 7; if(c>'Z') c += 6; saltc[i] = c; } pw = crypt(pwbuf, saltc); signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); if(access(temp, 0) >= 0) { printf("Temporary file busy -- try again\n"); goto bex; } close(creat(temp,0600)); if((tf=fopen(temp,"w")) == NULL) { printf("Cannot create temporary file\n"); goto bex; } /* * copy passwd to temp, replacing matching lines * with new password. */ while((pwd=getpwent()) != NULL) { if(strcmp(pwd->pw_name,uname) == 0) { u = getuid(); if(u != 0 && u != pwd->pw_uid) { printf("Permission denied.\n"); goto out; } pwd->pw_passwd = pw; } fprintf(tf,"%s:%s:%d:%d:%s:%s:%s\n", pwd->pw_name, pwd->pw_passwd, pwd->pw_uid, pwd->pw_gid, pwd->pw_gecos, pwd->pw_dir, pwd->pw_shell); } endpwent(); fclose(tf); /* * copy temp back to passwd file */ if((fi=open(temp,0)) < 0) { printf("Temp file disappeared!\n"); goto out; } if((fo=creat(passwd, 0644)) < 0) { printf("Cannot recreat passwd file.\n"); goto out; } while((u=read(fi,buf,sizeof(buf))) > 0) write(fo,buf,u); out: unlink(temp); bex: exit(1); } '=k i) /* * od -- octal (also hex, decimal, and character) dump */ #include unsigned short word[8]; unsigned short lastword[8]; int conv; int base = 010; int max; long addr; main(argc, argv) char **argv; { register char *p; register n, f, same; argv++; f = 0; if(argc > 1) { p = *argv; if(*p == '-') { while(*p != '\0') { switch(*p++) { case 'o': conv |= 001; f = 6; break; case 'd': conv |= 002; f = 5; break; case 'x': case 'h': conv(( |= 010; f = 4; break; case 'c': conv |= 020; f = 7; break; case 'b': conv |= 040; f = 7; break; } if(f > max) max = f; } argc--; argv++; } } if(!conv) { max = 6; conv = 1; } if(argc > 1) if(**argv != '+') { if (freopen(*argv, "r", stdin) == NULL) { printf("cannot open %s\n", *argv); exit(1); } argv++; argc--; } if(argc > 1) offset(*argv); same = -1; for ( ; (n = fread((char *)word, 1, sizeof(word), stdin)) > 0; addr += n) { if (same>=0) { for (f=0; f<8; f++) if (lastword[f] != word[f]) goto notsame; if (same==0) { printf("*\n"); same = 1; } continue; } notsame: line(addr, word, (n+sizeof(word[0])-1)/sizeof(word[0])); same = 0; for (f=0; f<8; f++) lastword[f] = word[f]; for (f=0; f<8; f++) word[f] = 0; } putn(addr, base, 7); putchar('\n'); } line(a, w, n) long a; unsigned short *w; { register i, f, c; f = 1; for(c=1; c; c<<=1) { if((c&conv) == 0) continue; if(f) { putn(a, base, 7); putchar(' '); f = 0; } else putchar('\t'); for (i=0; i037 && c<0177) { printf(" "); putchar(c); return; } switch(c) { case '\0': printf(" \\0"); break; case '\b': printf(" \\b"); break; case '\f': printf(" \\f"); break; case '\n': printf(" \\n"); break; case '\r': printf(" \\r"); break; case '\t': printf(" \\t"); break; default: putn((long)c, 8, 3); } } putn(n, b, c) long n; { register d; if(!c) return; putn(n/b, b, c-1); d = n%b; if (d > 9) putchar(d-10+'a'); else putchar(d+'0'); } pre(n) { int i; for(i=n; i='0' && d<='9') a = a*base + d - '0'; else if (d>='a' && d<='f' && base==16) a = a*base + d + 10 - 'a'; else break; } if (*s == '.') s++; if(*s=='b' || *s=='B') a *= 512; fseek(stdin, a, 0); addr = a; } '>k bi) /* ** print symbol tables for ** object or archive files ** ** nm [-goprun] [name ...] */ #include #include #include #include #define MAGIC exp.a_magic #define BADMAG MAGIC!=A_MAGIC1 && MAGIC!=A_MAGIC2 \ && MAGIC!=A_MAGIC3 && MAGIC!=A_MAGIC4 #define SELECT arch_flg ? arp.ar_name : *argv int numsort_flg; int undef_flg; int revsort_flg = 1; int globl_flg; int nosort_flg; int arch_flg; int prep_flg; struct ar_hdr arp; struct exec exp; FILE *fi; long off; long ftell(); char *malloc(); char *realloc(); main(argc, argv) char **argv; { int narg; int compare(); if (--argc>0 && argv[1][0]=='-' && argv[1][1]!=0) { argv++; while (*++*argv) switch (**argv) { case 'n': /* sort numerically */ numsort_flg++; continue; case 'g': /* globl symbols only */ globl_flg++; continue; case 'u': /* undefined symbols only */ undef_flg++; continue; case 'r': /* sort in reverse order */ revsort_flg = -1; continue; case 'p': /* don't sort -- symbol table order */ nosort_flg++; continue; case 'o': /* prepend a name to each line */ prep_flg++; continue; default: /* oops */ fprintf(stderr, "nm: invalid argument -%c\n", *argv[0]); exit(1); } argc--; } if (argc == 0) { argc = 1; argv[1] = "a.out"; } narg = argc; while(argc--) { fi = fopen(*++argv,"r"); if (fi == NULL) { fprintf(stderr, "nm: cannot open %s\n", *argv); continue; } off = sizeof(exp.a_magic); fread((char *)&exp, 1, sizeof(MAGIC), fi); /* get magic no. */ if (MAGIC == ARMAG) arch_flg++; else if (BADMAG) { fprintf(stderr, "nm: %s-- bad format\n", *argv); continue; } fseek(fi, 0L, 0); if (arch_flg) { nextel(fi); if (narg > 1) printf("\n%s:\n", *argv); } do { long o; register i, n, c; struct nlist *symp = NULL; struct nlist sym; fread((char *)&exp, 1, sizeof(struct exec), fi); if (BADMAG) /* archive element not in */ continue; /* proper format - skip it */ o = (long)exp.a_text + exp.a_data; if ((exp.a_flag & 01) == 0) o *= 2; fseek(fi, o, 1); n = exp.a_syms / sizeof(struct nlist); if (n == 0) { fprintf(stderr, "nm: %s-- no name list\n", SELECT); continue; } i = 0; while (--n >= 0) { fread((char *)&sym, 1, sizeof(sym), fi); if (globl_flg && (sym.n_type&N_EXT)==0) continue; switch (sym.n_type&N_TYPE) { case N_UNDF: c = 'u'; if (sym.n_value) c = 'c'; break; default: case N_ABS: c = 'a'; break; case N_TEXT: c = 't'; break; case N_DATA: c = 'd'; break; case N_BSS: c = 'b'; break; case N_FN: c = 'f'; break; case N_REG: c = 'r'; break; } if (undef_flg && c!='u') continue; if (sym.n_type&N_EXT) c = toupper(c); sym.n_type = c; if (symp==NULL) symp = (struct nlist *)malloc(sizeof(struct nlist)); else { symp = (struct nlist *)realloc(symp, (i+1)*sizeof(struct nlist)); } if (symp == NULL) { fprintf(stderr, "nm: out of memory on %s\n", *argv); exit(2); } symp[i++] = sym; } if (nosort_flg==0) qsort(symp, i, sizeof(struct nlist), compare); if ((arch_flg || narg>1) && prep_flg==0) printf("\n%s:\n", SELECT); for (n=0; nn_value > p2->n_value) return(revsort_flg); if (p1->n_value < p2->n_value) return(-revsort_flg); } for(i=0; in_name); i++) if (p1->n_name[i] != p2->n_name[i]) { if (p1->n_name[i] > p2->n_name[i]) return(revsort_flg); else return(-revsort_flg); } return(0); } nextel(af) FILE *af; { register r; fseek(af, off, 0); r = fread((char *)&arp, 1, sizeof(struct ar_hdr), af); /* read archive header */ if (r <= 0) return(0); if (arp.ar_size & 1) ++arp.ar_size; off = ftell(af) + arp.ar_size; /* offset to next element */ return(1); } '?kٟi) /* nice */ #include main(argc, argv) int argc; char *argv[]; { int nicarg = 10; extern errno; extern char *sys_errlist[]; if(argc > 1 && argv[1][0] == '-') { nicarg = atoi(&argv[1][1]); argc--; argv++; } if(argc < 2) { fputs("usage: nice [ -n ] command\n", stderr); exit(1); } nice(nicarg); execvp(argv[1], &argv[1]); fprintf(stderr, "%s: %s\n", sys_errlist[errno], argv[1]); exit(1); } '@k~i) #include #include #include struct group *getgrnam(), *grp; struct passwd *getpwuid(), *pwd; char *getpass(), *crypt(); main(argc,argv) int argc; char **argv; { register i; if(argc != 2) { printf("usage: newgrp groupname\n"); done(); } if((grp=getgrnam(argv[1])) == NULL) { printf("%s: no such group\n", argv[1]); done(); } if((pwd=getpwuid(getuid())) == NULL) { printf("You do not exist!\n"); done(); } for(i=0;grp->gr_mem[i];i++) if(strcmp(grp->gr_mem[i], pwd-((>pw_name) == 0) break; if(grp->gr_mem[i] == 0 && strcmp(grp->gr_name,"other")) { printf("Sorry\n"); done(); } if(grp->gr_passwd[0] != '\0' && pwd->pw_passwd[0] == '\0') { if(strcmp(grp->gr_passwd, crypt(getpass("Password:"),grp->gr_passwd)) != 0) { printf("Sorry\n"); done(); } } if(setgid(grp->gr_gid) < 0) perror("setgid"); done(); } done() { register i; setuid(getuid()); for (i=3; i<15; i++) close(i); execl("/bin/sh", "sh", 0); printf("No shell!\n"); exit(0); } 'Ak˴orux{~]i) /* * ncheck -- obtain file names from reading filesystem */ #define NI 16 #define NB 100 #define HSIZE 2503 #define NDIR (BSIZE/sizeof(struct direct)) #include #include #include #include #include #include #include struct filsys sblock; struct dinode itab[INOPB*NI]; daddr_t iaddr[NADDR]; ino_t ilist[NB]; struct htab { ino_t h_ino; ino_t h_pino; char h_name[DIRSIZ]; } htab[HSIZE]; int aflg; int sflg; int fi; ino_t ino; int nhent; int nxfile; int nerror; daddr_t bmap(); long atol(); struct htab *lookup(); main(argc, argv) char *argv[]; { register i; long n; while (--argc) { argv++; if (**argv=='-') switch ((*argv)[1]) { case 'a': aflg++; continue; case 'i': for(i=0; i= mino) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= mino) break; ino++; pass1(&itab[j]); } } ilist[nxfile+1] = 0; ino = 0; for(i=2;; i+=NI) { if(ino >= mino) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= mino) break; ino++; pass2(&itab[j]); } } ino = 0; for(i=2;; i+=NI) { if(ino >= mino) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= mino) break; ino++; pass3(&itab[j]); } } } pass1(ip) register struct dinode *ip; { if((ip->di_mode & IFMT) != IFDIR) { if (sflg==0 || nxfile>=NB) return; if ((ip->di_mode&IFMT)==IFBLK || (ip->di_mode&IFMT)==IFCHR || ip->di_mode&(ISUID|ISGID)) ilist[nxfile++] = ino; return; } lookup(ino, 1); } pass2(ip) register struct dinode *ip; { struct direct dbuf[NDIR]; long doff; struct direct *dp; register i, j; int k; struct htab *hp; daddr_t d; ino_t kno; if((ip->di_mode&IFMT) != IFDIR) return; l3tol(iaddr, ip->di_addr, NADDR); doff = 0; for(i=0;; i++) { if(doff >= ip->di_size) break; d = bmap(i); if(d == 0) break; bread(d, (char *)dbuf, sizeof(dbuf)); for(j=0; j= ip->di_size) break; doff += sizeof(struct direct); dp = dbuf+j; kno = dp->d_ino; if(kno == 0) continue; hp = lookup(kno, 0); if(hp == 0) continue; if(dotname(dp)) continue; hp->h_pino = ino; for(k=0; kh_name[k] = dp->d_name[k]; } } } pass3(ip) register struct dinode *ip; { struct direct dbuf[NDIR]; long doff; struct direct *dp; register i, j; int k; daddr_t d; ino_t kno; if((ip->di_mode&IFMT) != IFDIR) return; l3tol(iaddr, ip->di_addr, NADDR); doff = 0; for(i=0;; i++) { if(doff >= ip->di_size) break; d = bmap(i); if(d == 0) break; bread(d, (char *)dbuf, sizeof(dbuf)); for(j=0; j= ip->di_size) break; doff += sizeof(struct direct); dp = dbuf+j; kno = dp->d_ino; if(kno == 0) continue; if(aflg==0 && dotname(dp)) continue; if(ilist[0] == 0) goto pr; for(k=0; ilist[k] != 0; k++) if(ilist[k] == kno) goto pr; continue; pr: printf("%u ", kno); pname(ino, 0); printf("/%.14s", dp->d_name); if (lookup(kno, 0)) printf("/."); printf("\n"); } } } dotname(dp) register struct direct *dp; { if (dp->d_name[0]=='.') if (dp->d_name[1]==0 || (dp->d_name[1]=='.' && dp->d_name[2]==0)) return(1); return(0); } pname(i, lev) ino_t i; { register struct htab *hp; if (i==ROOTINO) return; if ((hp = lookup(i, 0)) == 0) { printf("???"); return; } if (lev > 10) { printf("..."); return; } pname(hp->h_pino, ++lev); printf("/%.14s", hp->h_name); } struct htab * lookup(i, ef) ino_t i; { register struct htab *hp; for (hp = &htab[i%HSIZE]; hp->h_ino;) { if (hp->h_ino==i) return(hp); if (++hp >= &htab[HSIZE]) hp = htab; } if (ef==0) return(0); if (++nhent >= HSIZE) { fprintf(stderr, "ncheck: out of core-- increase HSIZE\n"); exit(1); } hp->h_ino = i; return(hp); } bread(bno, buf, cnt) daddr_t bno; char *buf; { register i; lseek(fi, bno*BSIZE, 0); if (read(fi, buf, cnt) != cnt) { fprintf(stderr, "ncheck: read error %d\n", bno); for(i=0; i NINDIR) { fprintf(stderr, "ncheck: %u - huge directory\n", ino); return((daddr_t)0); } bread(iaddr[NADDR-3], (char *)ibuf, sizeof(ibuf)); return(ibuf'AkTдorux{~]i)[i]); } 'BkAִBEHKNQTWZ]`3i) /* * mv file1 file2 */ #include #include #include #include #include #define DOT "." #define DOTDOT ".." #define DELIM '/' #define SDELIM "/" #define MAXN 100 #define MODEBITS 07777 #define ROOTINO 2 char *pname(); char *sprintf(); char *dname(); struct stat s1, s2; main(argc, argv) register char *argv[]; { register i, r; if (argc < 3) goto usage; if (stat(argv[1], &s1) < 0) { fprintf(stderr, "mv: cannot access %s\n", argv[1]); return(1); } if ((s1.st_mode & S_IFMT) == S_IFDIR) { if (argc != 3) goto usage; return mvdir(argv[1], argv[2]); } setuid(getuid()); if (argc > 3) if (stat(argv[argc-1], &s2) < 0 || (s2.st_mode & S_IFMT) != S_IFDIR) goto usage; r = 0; for (i=1; i= 0) { if ((s2.st_mode & S_IFMT) == S_IFDIR) { sprintf(buf, "%s/%s", target, dname(source)); target = buf; } if (stat(target, &s2) >= 0) { if ((s2.st_mode & S_IFMT) == S_IFDIR) { fprintf(stderr, "mv: %s is a directory\n", target); return(1); } if (s1.st_dev==s2.st_dev && s1.st_ino==s2.st_ino) { fprintf(stderr, "mv: %s and %s are identical\n", source, target); return(1); } if (access(target, 2) < 0 && isatty(fileno(stdin))) { fprintf(stderr, "mv: %s: %o mode ", target, s2.st_mode & MODEBITS); i = c = getchar(); while (c != '\n' && c != EOF) c = getchar(); if (i != 'y') return(1); } if (unlink(target) < 0) { fprintf(stderr, "mv: cannot unlink %s\n", target); return(1); } } } if (link(source, target) < 0) { i = fork(); if (i == -1) { fprintf(stderr, "mv: try again\n"); return(1); } if (i == 0) { execl("/bin/cp", "cp", source, target, 0); fprintf(stderr, "mv: cannot exec cp\n"); exit(1); } while ((c = wait(&status)) != i && c != -1) ; if (status != 0) return(1); utime(target, &s1.st_atime); } if (unlink(source) < 0) { fprintf(stderr, "mv: cannot unlink %s\n", source); return(1); } return(0); } mvdir(source, target) char *source, *target; { register(( char *p; register i; char buf[MAXN]; if (stat(target, &s2) >= 0) { if ((s2.st_mode&S_IFMT) != S_IFDIR) { fprintf(stderr, "mv: %s exists\n", target); return(1); } if (strlen(target) > MAXN-DIRSIZ-2) { fprintf(stderr, "mv :target name too long\n"); return(1); } strcpy(buf, target); target = buf; strcat(buf, SDELIM); strcat(buf, dname(source)); if (stat(target, &s2) >= 0) { fprintf(stderr, "mv: %s exists\n", buf); return(1); } } if (strcmp(source, target) == 0) { fprintf(stderr, "mv: ?? source == target, source exists and target doesnt\n"); return(1); } p = dname(source); if (!strcmp(p, DOT) || !strcmp(p, DOTDOT) || !strcmp(p, "") || p[strlen(p)-1]=='/') { fprintf(stderr, "mv: cannot rename %s\n", p); return(1); } if (stat(pname(source), &s1) < 0 || stat(pname(target), &s2) < 0) { fprintf(stderr, "mv: cannot locate parent\n"); return(1); } if (access(pname(target), 2) < 0) { fprintf(stderr, "mv: no write access to %s\n", pname(target)); return(1); } if (access(pname(source), 2) < 0) { fprintf(stderr, "mv: no write access to %s\n", pname(source)); return(1); } if (access(source, 2) < 0) { fprintf(stderr, "mv: no write access to %s\n", source); return(1); } if (s1.st_dev != s2.st_dev) { fprintf(stderr, "mv: cannot move directories across devices\n"); return(1); } if (s1.st_ino != s2.st_ino) { char dst[MAXN+5]; if (chkdot(source) || chkdot(target)) { fprintf(stderr, "mv: Sorry, path names including %s aren't allowed\n", DOTDOT); return(1); } stat(source, &s1); if (check(pname(target), s1.st_ino)) return(1); for (i = 1; i <= NSIG; i++) signal(i, SIG_IGN); if (link(source, target) < 0) { fprintf(stderr, "mv: cannot link %s to %s\n", target, source); return(1); } if (unlink(source) < 0) { fprintf(stderr, "mv: %s: cannot unlink\n", source); unlink(target); return(1); } strcat(dst, target); strcat(dst, "/"); strcat(dst, DOTDOT); if (unlink(dst) < 0) { fprintf(stderr, "mv: %s: cannot unlink\n", dst); if (link(target, source) >= 0) unlink(target); return(1); } if (link(pname(target), dst) < 0) { fprintf(stderr, "mv: cannot link %s to %s\n", dst, pname(target)); if (link(pname(source), dst) >= 0) if (link(target, source) >= 0) unlink(target); return(1); } return(0); } if (link(source, target) < 0) { fprintf(stderr, "mv: cannot link %s and %s\n", source, target); return(1); } if (unlink(source) < 0) { fprintf(stderr, "mv: ?? cannot u' BkٴBEHKNQTWZ]`3i)nlink %s\n", source); return(1); } return(0); } char * pname(name) register char *name; { register c; register char *p, *q; static char buf[MAXN]; p = q = buf; while (c = *p++ = *name++) if (c == DELIM) q = p-1; if (q == buf && *q == DELIM) q++; *q = 0; return buf[0]? buf : DOT; } char * dname(name) register char *name; { register char *p; p = name; while (*p) if (*p++ == DELIM && *p) name = p; return name; } check(spth, dinode) char *spth; ino_t dinode; { char nspth[MAXN]; struct stat sbuf; sbuf.st_ino = 0; strcpy(nspth, spth); while (sbuf.st_ino != ROOTINO) { if (stat(nspth, &sbuf) < 0) { fprintf(stderr, "mv: cannot access %s\n", nspth); return(1); } if (sbuf.st_ino == dinode) { fprintf(stderr, "mv: cannot move a directory into itself\n"); return(1); } if (strlen(nspth) > MAXN-2-sizeof(DOTDOT)) { fprintf(stderr, "mv: name too long\n"); return(1); } strcat(nspth, SDELIM); strcat(nspth, DOTDOT); } return(0); } chkdot(s) register char *s; { do { if (strcmp(dname(s), DOTDOT) == 0) return(1); s = pname(s); } while (strcmp(s, DOT) != 0 && strcmp(s, SDELIM) != 0); return(0); } ' CkЩ9<?i) #include #define NMOUNT 16 #define NAMSIZ 32 struct mtab { char file[NAMSIZ]; char spec[NAMSIZ]; } mtab[NMOUNT]; main(argc, argv) char **argv; { register int ro; register struct mtab *mp; register char *np; int mf; mf = open("/etc/mtab", 0); read(mf, (char *)mtab, NMOUNT*2*NAMSIZ); if (argc==1) { for (mp = mtab; mp < &mtab[NMOUNT]; mp++) if (mp->file[0]) printf("%s on %s\n", mp->spec, mp->file); exit(0); } if(argc < 3) { fprintf(stderr,"arg count\n"); exit(1); } ro = 0; if(argc > 3) ro++; if(mount(argv[1], argv[2], ro) < 0) { perror("mount"); exit(1); } np = argv[1]; while(*np++) ; np--; while(*--np == '/') *np = '\0'; while(np > argv[1] && *--np != '/') ; if(*np == '/') np++; argv[1] = np; for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { if (mp->file[0] == 0) { for (np = mp->spec; np < &mp->spec[NAMSIZ-1];) if ((*np++ = *argv[1]++) == 0) argv[1]--; for (np = mp->file; np < &mp->file[NAMSIZ-1];) if ((*np++ = *argv[2]++) == 0) argv[2]--; mp = &mtab[NMOUNT]; while ((--mp)->file[0] == 0); mf = creat("/etc/mtab", 0644); write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ); exit(0); } } exit(0); } ' Dk236i) main(argc, argv) int argc; char **argv; { int m, a, b; if(argc != 5) { printf("arg count\n"); goto usage; } if(*argv[2] == 'b') m = 060666; else if(*argv[2] == 'c') m = 020666; else goto usage; a = number(argv[3]); if(a < 0) goto usage; b = number(argv[4]); if(b < 0) goto usage; if(mknod(argv[1], m, (a<<8)|b) < 0) perror("mknod"); exit(0); usage: printf("usage: mknod name b/c major minor\n"); } number(s) char *s; { int n, c; n = 0; while(c = *s++) { if(c<'0' || c>'9') return(-1); n = n*10 + c-'0'; } return(n); } ' Ek!%  Vi) /* * Make a file system prototype. * usage: mkfs filsys proto/size [ m n ] */ #define NIPB (BSIZE/sizeof(struct dinode)) #define NINDIR (BSIZE/sizeof(daddr_t)) #define NDIRECT (BSIZE/sizeof(struct direct)) #define LADDR 10 #define MAXFN 500 #define itoo(x) (int)((x+15)&07) #ifndef STANDALONE #include #include #endif #include #include #include #include #include #include time_t utime; #ifndef STANDALONE FILE *fin; #else int fin; #endif int fsi; int fso; char *charp; char buf[BSIZE]; union { struct fblk fb; char pad1[BSIZE]; } fbuf; #ifndef STANDALONE struct exec head; #endif char string[50]; union { struct filsys fs; char pad2[BSIZE]; } filsys; char *fsys; char *proto; int f_n = MAXFN; int f_m = 3; int error; ino_t ino; long getnum(); daddr_t alloc(); main(argc, argv) char *argv[]; { int f, c; long n; #ifndef STANDALONE time(&utime); if(argc < 3) { printf("usage: mkfs filsys proto/size [ m n ]\n"); exit(1); } fsys = argv[1]; proto = argv[2]; #else { static char protos[60]; printf("file sys size: "); gets(protos); proto = protos; } #endif #ifdef STANDALONE { char fsbuf[100]; do { printf("file system: "); gets(fsbuf); fso = open(fsbuf, 1); fsi = open(fsbuf, 0); } while (fso < 0 || fsi < 0); } fin = NULL; argc = 0; #else fso = creat(fsys, 0666); if(fso < 0) { printf("%s: cannot create\n", fsys); exit(1); } fsi = open(fsys, 0); if(fsi < 0) { printf("%s: ((cannot open\n", fsys); exit(1); } fin = fopen(proto, "r"); #endif if(fin == NULL) { n = 0; for(f=0; c=proto[f]; f++) { if(c<'0' || c>'9') { printf("%s: cannot open\n", proto); exit(1); } n = n*10 + (c-'0'); } filsys.s_fsize = n; n = n/25; if(n <= 0) n = 1; if(n > 65500/NIPB) n = 65500/NIPB; filsys.s_isize = n + 2; printf("isize = %D\n", n*NIPB); charp = "d--777 0 0 $ "; goto f3; } #ifndef STANDALONE /* * get name of boot load program * and read onto block 0 */ getstr(); f = open(string, 0); if(f < 0) { printf("%s: cannot open init\n", string); goto f2; } read(f, (char *)&head, sizeof head); if(head.a_magic != A_MAGIC1) { printf("%s: bad format\n", string); goto f1; } c = head.a_text + head.a_data; if(c > BSIZE) { printf("%s: too big\n", string); goto f1; } read(f, buf, c); wtfs((long)0, buf); f1: close(f); /* * get total disk size * and inode block size */ f2: filsys.s_fsize = getnum(); n = getnum(); n /= NIPB; filsys.s_isize = n + 3; #endif f3: if(argc >= 5) { f_m = atoi(argv[3]); f_n = atoi(argv[4]); if(f_n <= 0 || f_n >= MAXFN) f_n = MAXFN; if(f_m <= 0 || f_m > f_n) f_m = 3; } filsys.s_m = f_m; filsys.s_n = f_n; printf("m/n = %d %d\n", f_m, f_n); if(filsys.s_isize >= filsys.s_fsize) { printf("%ld/%ld: bad ratio\n", filsys.s_fsize, filsys.s_isize-2); exit(1); } filsys.s_tfree = 0; filsys.s_tinode = 0; for(c=0; c'7') { printf("%c/%s: bad octal mode digit\n", c, string); error = 1; c = 0; } in.i_mode |= (c-'0')<<(15-3*i); } in.i_uid = getnum(); in.i_gid = getnum(); /* * general initialization prior to * switching on format */ ino++; in.i_number = ino; for(i=0; i 0) { in.i_size += i; newblk(&dbc, db, &ibc, ib); } close(f); break; case IFBLK: case IFCHR: /* * special file * content is maj/min types */ i = getnum() & 0377; f = getnum() & 0377; in.i_un.i_addr[0] = (i<<8) | f; break; case IFDIR: /* * directory * put in extra links * call recursively until * name of "$" found */ par->i_nlink++; in.i_nlink++; entry(in.i_number, ".", &dbc, db, &ibc, ib); entry(par->i_number, "..", &dbc, db, &ibc, ib); in.i_size = 2*sizeof(struct direct); for(;;) { getstr(); if(string[0]=='$' && string[1]=='\0') break; entry(ino+1, string, &dbc, db, &ibc, ib); in.i_size += sizeof(struct direct); cfile(&' Ekd"%  Vi)in); } break; } if(dbc != 0) newblk(&dbc, db, &ibc, ib); iput(&in, &ibc, ib); } gmode(c, s, m0, m1, m2, m3) char c, *s; { int i; for(i=0; s[i]; i++) if(c == s[i]) return((&m0)[i]); printf("%c/%s: bad mode\n", c, string); error = 1; return(0); } long getnum() { int i, c; long n; getstr(); n = 0; i = 0; for(i=0; c=string[i]; i++) { if(c<'0' || c>'9') { printf("%s: bad number\n", string); error = 1; return((long)0); } n = n*10 + (c-'0'); } return(n); } getstr() { int i, c; loop: switch(c=getch()) { case ' ': case '\t': case '\n': goto loop; case '\0': printf("EOF\n"); exit(1); case ':': while(getch() != '\n'); goto loop; } i = 0; do { string[i++] = c; c = getch(); } while(c!=' '&&c!='\t'&&c!='\n'&&c!='\0'); string[i] = '\0'; } rdfs(bno, bf) daddr_t bno; char *bf; { int n; lseek(fsi, bno*BSIZE, 0); n = read(fsi, bf, BSIZE); if(n != BSIZE) { printf("read error: %ld\n", bno); exit(1); } } wtfs(bno, bf) daddr_t bno; char *bf; { int n; lseek(fso, bno*BSIZE, 0); n = write(fso, bf, BSIZE); if(n != BSIZE) { printf("write error: %D\n", bno); exit(1); } } daddr_t alloc() { int i; daddr_t bno; filsys.s_tfree--; bno = filsys.s_free[--filsys.s_nfree]; if(bno == 0) { printf("out of free space\n"); exit(1); } if(filsys.s_nfree <= 0) { rdfs(bno, (char *)&fbuf); filsys.s_nfree = fbuf.df_nfree; for(i=0; i= NICFREE) { fbuf.df_nfree = filsys.s_nfree; for(i=0; id_ino = inum; for(i=0; id_name[i] = 0; for(i=0; id_name[i] = str[i]) == 0) break; if(*adbc >= NDIRECT) newblk(adbc, db, aibc, ib); } newblk(adbc, db, aibc, ib) int *adbc, *aibc; char *db; daddr_t *ib; { int i; daddr_t bno; bno = alloc(); wtfs(bno, db); for(i=0; i= NINDIR) { printf("indirect block full\n"); error = 1; *aibc = 0; } } getch() { #ifndef STANDALONE if(charp) #endif return(*charp++); #ifndef STANDALONE return(getc(fin)); #endif } bflist() { struct inode in; daddr_t ib[NINDIR]; int ibc; char flg[MAXFN]; int adr[MAXFN]; int i, j; daddr_t f, d; for(i=0; i 0; d -= f_n) for(i=0; i= filsys.s_isize) if(badblk(f)) { if(ibc >= NINDIR) { printf("too many bad blocks\n"); error = 1; ibc = 0; } ib[ibc] = f; ibc++; } else bfree(f); } iput(&in, &ibc, ib); } iput(ip, aibc, ib) struct inode *ip; int *aibc; daddr_t *ib; { struct dinode *dp; daddr_t d; int i; filsys.s_tinode--; d = itod(ip->i_number); if(d >= filsys.s_isize) { if(error == 0) printf("ilist too small\n"); error = 1; return; } rdfs(d, buf); dp = (struct dinode *)buf; dp += itoo(ip->i_number); dp->di_mode = ip->i_mode; dp->di_nlink = ip->i_nlink; dp->di_uid = ip->i_uid; dp->di_gid = ip->i_gid; dp->di_size = ip->i_size; dp->di_atime = utime; dp->di_mtime = utime; dp->di_ctime = utime; switch(ip->i_mode&IFMT) { case IFDIR: case IFREG: for(i=0; i<*aibc; i++) { if(i >= LADDR) break; ip->i_un.i_addr[i] = ib[i]; } if(*aibc >= LADDR) { ip->i_un.i_addr[LADDR] = alloc(); for(i=0; ii_un.i_addr[LADDR], (char *)ib); } case IFBLK: case IFCHR: ltol3(dp->di_addr, ip->i_un.i_addr, NADDR); break; default: printf("bad mode %o\n", ip->i_mode); exit(1); } wtfs(d, buf); } badblk(bno) daddr_t bno; { return(0); } '! FkX@i) /* ** make directory */ #include #include int Errors = 0; char *strcat(); char *strcpy(); main(argc, argv) char *argv[]; { signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); signal(SIGPIPE, SIG_IGN); signal(SIGTERM, SIG_IGN); if(argc < 2) { fprintf(stderr, "mkdir: arg count\n"); exit(1); } while(--argc) mkdir(*++argv); exit(Errors!=0); } mkdir(d) char *d; { char pname[128], dname[128]; register i, slash = 0; pname[0] = '\0'; for(i = 0; d[i]; ++i) if(d[i] == '/') slash = i + 1; if(slash) strncpy(pname, d, slash); strcpy(pname+slash, "."); if (access(pname, 02)) { fprintf(stderr,"mkdir: cannot access %s\n", pname); ++Errors; return; } if ((mknod(d, 040777, 0)) < 0) { fprintf(stderr,"mkdir: cannot make directory %s\n", d); ++Errors; return; } chown(d, getuid(), getgid()); strcpy(dname, d); strcat(dname, "/."); if((link(d, dname)) < 0) { fprintf(stderr, "mkdir: cannot link %s\n", dname); unlink(d); ++Errors;(( return; } strcat(dname, "."); if((link(pname, dname)) < 0) { fprintf(stderr, "mkdir: cannot link %s\n",dname); dname[strlen(dname)] = '\0'; unlink(dname); unlink(d); ++Errors; } } '% Gk;< i) /* * mesg -- set current tty to accept or * forbid write permission. * * mesg [y] [n] * y allow messages * n forbid messages */ #include #include #include struct stat sbuf; char *tty; char *ttyname(); main(argc, argv) char *argv[]; { int r=0; tty = ttyname(2); if(stat(tty, &sbuf) < 0) error("cannot stat"); if(argc < 2) { if(sbuf.st_mode & 02) fprintf(stderr,"is y\n"); else { r=1; fprintf(stderr,"is n\n"); } } else switch(*argv[1]) { case 'y': newmode(0622); break; case 'n': newmode(0600); r=1; break; default: error("usage: mesg [y] [n]"); } exit(r); } error(s) char *s; { fprintf(stderr,"mesg: %s\n",s); exit(-1); } newmode(m) { if(chmod(tty,m)<0) error("cannot change mode"); } '( Hk&Ui( /* * You send it 10 bytes. * It sends you 13 bytes. * The transformation is expensive to perform * (a significant part of a second). */ char *crypt(); main() { char key[8]; char salt[2]; read(0, key, 8); read(0, salt, 2); write(1, crypt(key, salt), 13); return(0); } '* Ik\d{(Z;O;O #include #include #include #include #include #include #include #include /*copylet flags */ /*remote mail, add rmtmsg */ #define REMOTE 1 /* zap header and trailing empty line */ #define ZAP 3 #define ORDINARY 2 #define FORWARD 4 #define LSIZE 256 #define MAXLET 300 /* maximum number of letters */ #define MAILMODE (~0644) /* mode of created mail */ char line[LSIZE]; char resp[LSIZE]; struct let { long adr; char change; } let[MAXLET]; int nlet = 0; char lfil[50]; long iop, time(); char lettmp[] = "/tmp/maXXXXX"; char maildir[] = "/usr/spool/mail/"; char mailfile[] = "/usr/spool/mail/xxxxxxxxxxxxxxxxxxxxxxx"; char dead[] = "dead.letter"; char *thissys = sysname; char forwmsg[] = " forwarded\n"; char *curlock; int lockerror; FILE *tmpf; FILE *malf; char *my_name; char *getlogin(); struct passwd *getpwuid(); int error; int locked; int changed; int forward; char from[] = "From "; long ftell(); int delete(); char *ctime(); int flgf; int flgp; int delflg = 1; jmp_buf sjbuf; main(argc, argv) char **argv; { register i; char sobuf[BUFSIZ]; setbuf(stdout, sobuf); mktemp(lettmp); unlink(lettmp); my_name = getlogin(); if (my_name == NULL) { struct passwd *pwent; pwent = getpwuid(getuid()); if (pwent==NULL) my_name = "???"; else my_name = pwent->pw_name; } if(setjmp(sjbuf)) done(); for (i=0; i<20; i++) setsig(i, delete); tmpf = fopen(lettmp, "w"); if (tmpf == NULL) { fprintf(stderr, "mail: cannot open %s for writing\n", lettmp); done(); } if (argv[0][0] != 'r' && /* no favors for rmail*/ (argc == 1 || argv[1][0] == '-')) printmail(argc, argv); else sendmail(argc, argv); done(); } setsig(i, f) int i; int (*f)(); { if(signal(i, SIG_IGN)!=SIG_IGN) signal(i, f); } printmail(argc, argv) char **argv; { int flg, i, j, print; char *p, *getarg(); setuid(getuid()); cat(mailfile, maildir, my_name); for (; argc>1; argv++, argc--) { if (argv[1][0]=='-') { if (argv[1][1]=='q') delflg = 0; else if (argv[1][1]=='p') { flgp++; delflg = 0; } else if (argv[1][1]=='f') { if (argc>=3) { strcpy(mailfile, argv[2]); argv++; argc--; } } else if (argv[1][1]=='r') { forward = 1; } else { fprintf(stderr, "mail: unknown option %c\n", argv[1][1]); done(); } } else break; } malf = fopen(mailfile, "r"); if (malf == NULL) { fprintf(stdout, "No mail.\n"); return; } lock(mailfile); copymt(malf, tmpf); fclose(malf); fclose(tmpf); unlock(); tmpf = fopen(lettmp, "r"); changed = 0; print = 1; for (i = 0; i < nlet; ) { j = forward ? i : nlet - i - 1; if(setjmp(sjbuf)) { print=0; } else { if (print) copylet(j, stdout, ORDINARY); print = 1; } if (flgp) { i++; continue; } setjmp(sjbuf); fprintf(stdout, "? "); fflush(stdout); if (fgets(resp, LSIZE, stdin) == NULL) break; switch (resp[0]) { default: fprintf(stderr, "usage\n"); case '?': print = 0; fprintf(stderr, "q\tquit\n"); fprintf(stderr, "x\texit without changing mail\n"); fprintf(stderr, "p\tprint\n"); fprintf(stderr, "s[file]\tsave (default mbox)\n"); fprintf(stderr, "w[file]\tsame without header\n"); fprintf(stderr, "-\tprint previous\n"); fprintf(stderr, "d\tdelete\n"); fprintf(stderr, "+\tnext (no delete)\n"); fprintf(stderr, "m user\tmail to user\n"); fprintf(stderr, "! cmd\texecute cmd\n"); break; case '+': case 'n': case '\n': i++; break; case 'x': changed = 0; case 'q': goto donep; case 'p': break; case '^': case '-': if (--i < 0) i = 0; break; case 'y': case 'w': case 's': flg = 0; if (resp[1] != '\n' && resp[1] != ' ') { printf("illegal\n"); flg++; print = 0; continue; } if (resp[1] == '\n' || resp[1] == '\0') cat(resp+1, "mbox", ""); for (p = resp+1; (p = getarg(lfil, p)) != NULL; ) { malf = fopen(lfil, "a"); if (malf == NULL) { fprintf(stdout, "mail: cannot append to %s\n", lfil); flg++; continue; } copylet(j, malf, resp[0]=='w'? ZAP: ORDINARY); fclose(malf); } if (flg) print = 0; else { let[j].change = 'd'; changed++; i++; } break; case 'm': flg = 0; if (resp[1] == '\n' || resp[1] == '\0') { i++; continue; } if (resp[1] != ' ') { printf("invalid command\n"); flg++; print = 0; continue; } for (p = resp+1; (p = getarg(lfil, p)) != NULL; ) if (!sendrmt(j, lfil)) /* couldn't send it */ flg++; if (flg) print = 0; else { let[j].change = 'd'; changed++; i++; } break; case '!': system(resp+1); printf("!\n"); print = 0; break; case 'd': let[j].change = 'd'; changed++; i++; if (resp[1] == 'q') goto donep; break; } } donep: if (changed) copyback(); } copyback() /* copy temp or whatever back to /usr/spool/mail */ { register i, n, c; int new = 0; struct stat stbuf; signal(SIGINT, SIG_IGN); signal(SIGHUP, SIG_IGN); signal(SIGQUIT'5 Ikc{(Z;O;O, SIG_IGN); lock(mailfile); stat(mailfile, &stbuf); if (stbuf.st_size != let[nlet].adr) { /* new mail has arrived */ malf = fopen(mailfile, "r"); if (malf == NULL) { fprintf(stdout, "mail: can't re-read %s\n", mailfile); done(); } fseek(malf, let[nlet].adr, 0); fclose(tmpf); tmpf = fopen(lettmp, "a"); fseek(tmpf, let[nlet].adr, 0); while ((c = fgetc(malf)) != EOF) fputc(c, tmpf); fclose(malf); fclose(tmpf); tmpf = fopen(lettmp, "r"); let[++nlet].adr = stbuf.st_size; new = 1; } malf = fopen(mailfile, "w"); if (malf == NULL) { fprintf(stderr, "mail: can't rewrite %s\n", lfil); done(); } n = 0; for (i = 0; i < nlet; i++) if (let[i].change != 'd') { copylet(i, malf, ORDINARY); n++; } fclose(malf); if (new) fprintf(stdout, "new mail arrived\n"); unlock(); } copymt(f1, f2) /* copy mail (f1) to temp (f2) */ FILE *f1, *f2; { long nextadr; nlet = nextadr = 0; let[0].adr = 0; while (fgets(line, LSIZE, f1) != NULL) { if (isfrom(line)) let[nlet++].((adr = nextadr; nextadr += strlen(line); fputs(line, f2); } let[nlet].adr = nextadr; /* last plus 1 */ } copylet(n, f, type) FILE *f; { int ch, k; fseek(tmpf, let[n].adr, 0); k = let[n+1].adr - let[n].adr; while(k-- > 1 && (ch=fgetc(tmpf))!='\n') if(type!=ZAP) fputc(ch,f); if(type==REMOTE) fprintf(f, " remote from %s\n", thissys); else if (type==FORWARD) fprintf(f, forwmsg); else if(type==ORDINARY) fputc(ch,f); while(k-->1) fputc(ch=fgetc(tmpf), f); if(type!=ZAP || ch!= '\n') fputc(fgetc(tmpf), f); } isfrom(lp) register char *lp; { register char *p; for (p = from; *p; ) if (*lp++ != *p++) return(0); return(1); } sendmail(argc, argv) char **argv; { time(&iop); fprintf(tmpf, "%s%s %s", from, my_name, ctime(&iop)); iop = ftell(tmpf); flgf = 1; while (fgets(line, LSIZE, stdin) != NULL) { if (line[0] == '.' && line[1] == '\n') break; if (isfrom(line)) fputs(">", tmpf); fputs(line, tmpf); flgf = 0; } fputs("\n", tmpf); nlet = 1; let[0].adr = 0; let[1].adr = ftell(tmpf); fclose(tmpf); if (flgf) return; tmpf = fopen(lettmp, "r"); if (tmpf == NULL) { fprintf(stderr, "mail: cannot reopen %s for reading\n", lettmp); return; } while (--argc > 0) if (!send(0, *++argv)) /* couldn't send to him */ error++; if (error) { setuid(getuid()); malf = fopen(dead, "w"); if (malf == NULL) { fprintf(stdout, "mail: cannot open %s\n", dead); fclose(tmpf); return; } copylet(0, malf, ZAP); fclose(malf); fprintf(stdout, "Mail saved in %s\n", dead); } fclose(tmpf); } sendrmt(n, name) char *name; { FILE *rmf, *popen(); register char *p; char rsys[64], cmd[64]; register local, pid; int sts; local = 0; if (*name=='!') name++; for(p=rsys; *name!='!'; *p++ = *name++) if (*name=='\0') { local++; break; } *p = '\0'; if ((!local && *name=='\0') || (local && *rsys=='\0')) { fprintf(stdout, "null name\n"); return(0); } if ((pid = fork()) == -1) { fprintf(stderr, "mail: can't create proc for remote\n"); return(0); } if (pid) { while (wait(&sts) != pid) { if (wait(&sts)==-1) return(0); } return(!sts); } setuid(getuid()); if (local) sprintf(cmd, "mail %s", rsys); else { if (index(name+1, '!')) sprintf(cmd, "uux - %s!rmail \\(%s\\)", rsys, name+1); else sprintf(cmd, "uux - %s!rmail %s", rsys, name+1); } if ((rmf=popen(cmd, "w")) == NULL) exit(1); copylet(n, rmf, local? FORWARD: REMOTE); pclose(rmf); exit(0); } send(n, name) /* send letter n to name */ int n; char *name; { char file[50]; register char *p; register mask; struct passwd *pw, *getpwnam(); for(p=name; *p!='!' &&*p!='\0'; p++) ; if (*p == '!') return(sendrmt(n, name)); if ((pw = getpwnam(name)) == NULL) { fprintf(stdout, "mail: can't send to %s\n", name); return(0); } cat(file, maildir, name); mask = umask(MAILMODE); malf = fopen(file, "a"); umask(mask); if (malf == NULL) { fprintf(stdout, "mail: cannot append to %s\n", file); return(0); } lock(file); chown(file, pw->pw_uid, pw->pw_gid); copylet(n, malf, ORDINARY); fclose(malf); unlock(); return(1); } delete(i) { setsig(i, delete); fprintf(stderr, "\n"); if(delflg) longjmp(sjbuf, 1); done(); } done() { if(!lockerror) unlock(); unlink(lettmp); exit(error+lockerror); } lock(file) char *file; { struct stat stbuf; if (locked || flgf) return; if (stat(file, &stbuf)<0) return; if (stbuf.st_mode&01) { /* user x bit is the lock */ if (stbuf.st_ctime+60 >= time((long *)0)) { fprintf(stderr, "%s busy; try again in a minute\n", file); lockerror++; done(); } } locked = stbuf.st_mode & ~01; curlock = file; chmod(file, stbuf.st_mode|01); } unlock() { if (locked) chmod(curlock, locked); locked = 0; } cat(to, from1, from2) char *to, *from1, *from2; { int i, j; j = 0; for (i=0; from1[i]; i++) to[j++] = from1[i]; for (i=0; from2[i]; i++) to[j++] = from2[i]; to[j] = 0; } char *getarg(s, p) /* copy p... into s, update p */ register char *s, *p; { while (*p == ' ' || *p == '\t') p++; if (*p == '\n' || *p == '\0') return(NULL); while (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0') *s++ = *p++; *s = '\0'; return(p); } 'A Jkꁆ }i  # include "e.h" # include "e.def" int csp; int psp; #define CSSIZE 400 char cs[420]; int lf, rf; /* temporary spots for left and right fonts */ text(t,p1) int t; char *p1; { int c; char *p; tbl *tp, *lookup(); extern tbl *restbl; yyval = oalloc(); ebase[yyval] = 0; eht[yyval] = VERT(6 * ((ps>6)?ps:6)); /* ht in machine units */ lfont[yyval] = rfont[yyval] = ROM; if (t == QTEXT) p = p1; else if ( t == SPACE ) p = "\\ "; else if ( t == THIN ) p = "\\|"; else if ( t == TAB ) p = "\\t"; else if ((tp = lookup(&restbl, p1, NULL)) != NULL) p = tp->defn; else { lf = rf = 0; for (csp=psp=0; (c=p1[psp++])!='\0';) { rf = trans(c, p1); if (lf == 0) lf = rf; /* save first */ if (csp>CSSIZE) error(FATAL,"converted token %.25s... too long",p1); } cs[csp] = '\0'; p = cs; lfont[yyval] = lf; rfont[yyval] = rf; } if(dbg)printf(".\t%dtext: S%d <- %s; b=%d,h=%d,lf=%c,rf=%c\n", t, yyval, p, ebase[yyval], eht[yyval], lfont[yyval], rfont[yyval]); printf(".ds %d \"%s\n", yyval, p); } trans(c,p1) int c; char *p1; { int f; f = ROM; switch( c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '!': case '%': case '(': case '[': case ')': case ']': case ',': if (rf == ITAL) shim(); roman(c); break; case '.': if (rf == ROM) roman(c); else cs[csp++] = c; f = rf; break; case '|': if (rf == ITAL) shim(); shim(); roman(c); shim(); break; case '=': if (rf == ITAL) shim(); name4('e','q'); break; case '+': if (rf == ITAL) shim(); name4('p', 'l'); break; case '>': case '<': if (rf == ITAL) shim(); if (p1[psp]=='=') { /* look ahead for == <= >= */ name4(c,'='); psp++; } else { cs[csp++] = c; } break; case '-': if (rf == ITAL) shim(); if (p1[psp]=='>') { name4('-','>'); psp++; } else { name4('m','i'); } break; case '/': if (rf == ITAL) shim(); name4('s','l'); break; case '~': case ' ': shim(); shim(); break; case '^': shim(); break; case '\\': /* troff - pass 2 or 3 more chars */ if (rf == ITAL) shim(); cs[csp++] = c; cs[csp++] = c = p1[psp++]; cs[csp++] = p1[psp++]; if (c=='(') cs[csp++] = p1[psp++]; if (c=='*' && cs[csp-1] == '(') { cs[csp++] = p1[psp++]; cs[csp++] = p1[psp++]; } break; case '\'': cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = rf==ITAL ? ITAL : ROM; name4('f','m'); cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = 'P'; f = rf==ITAL ? ITAL : ROM; break; case 'f': if (ft == ITAL) { cs[csp++] = '\\'; cs[csp++] = '^'; cs[csp++] = 'f'; cs[csp++] = '\\'; cs[csp++] = '|'; /* trying | instead of ^ */ f = ITAL; } else cs[csp++] = 'f'; break; case 'j': if (ft == ITAL) { cs[csp++] = '\\'; cs[csp++] = '^'; cs[csp++] = 'j'; f = ITAL; } else cs[csp++] = 'j'; break; default: cs[csp++] = c; f = ft==ITAL ? ITAL : ROM; break; } return(f); } shim() { cs[csp++] = '\\'; cs[csp++] = '|'; } roman(c) int c; { cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = ROM; cs[csp++] = c; cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = 'P'; } name4(c1,c2) int c1,c2; { cs[csp++] = '\\'; cs[csp++] = '('; cs[csp++] = c1; cs[csp++] = c2; } 'I Kkfqi  # include "e.h" sqrt(p2) int p2; { int nps; nps = EFFPS(((eht[p2]*9)/10+5)/6); yyval = p2; eht[yyval] = VERT( (nps*6*12)/10 ); if(dbg)printf(".\tsqrt: S%d <- S%d;b=%d, h=%d\n", yyval, p2, ebase[yyval], eht[yyval]); if (rfont[yyval] == ITAL) printf(".as %d \\|\n", yyval); nrwid(p2, ps, p2); printf(".ds %d \\v'%du'\\s%d\\v'-.2m'\\(sr\\l'\\n(%du\\(rn'\\v'.2m'\\s%d", yyval, ebase[p2], nps, p2, ps); printf("\\v'%du'\\h'-\\n(%du'\\*(%d\n", -ebase[p2], p2, p2); lfont[yyval] = ROM; } 'K Lkvfei  ((# include "e.h" setsize(p) /* set size as found in p */ char *p; { if (*p == '+') ps += atoi(p+1); else if (*p == '-') ps -= atoi(p+1); else ps = atoi(p); if(dbg)printf(".\tsetsize %s; ps = %d\n", p, ps); } size(p1, p2) int p1, p2; { /* old size in p1, new in ps */ int effps, effp1; yyval = p2; if(dbg)printf(".\tb:sb: S%d <- \\s%d S%d \\s%d; b=%d, h=%d\n", yyval, ps, p2, p1, ebase[yyval], eht[yyval]); effps = EFFPS(ps); effp1 = EFFPS(p1); printf(".ds %d \\s%d\\*(%d\\s%d\n", yyval, effps, p2, effp1); ps = p1; } globsize() { char temp[20]; getstr(temp, 20); if (temp[0] == '+') gsize += atoi(temp+1); else if (temp[0] == '-') gsize -= atoi(temp+1); else gsize = atoi(temp); yyval = eqnreg = 0; setps(gsize); ps = gsize; if (gsize >= 12) /* sub and sup size change */ deltaps = gsize / 4; else deltaps = gsize / 3; } 'N Mky svy|Oi  # include "e.h" #include "e.def" bshiftb(p1, dir, p2) int p1, dir, p2; { int shval, diffps, effps, effps2, d1, h1, b1, h2, b2; char *sh1, *sh2; yyval = p1; h1 = eht[p1]; b1 = ebase[p1]; h2 = eht[p2]; b2 = ebase[p2]; effps = EFFPS(ps); effps2 = EFFPS(ps+deltaps); diffps = deltaps; sh1 = sh2 = ""; if( dir == SUB ) { /* top 1/2m above bottom of main box */ d1 = VERT( (effps2*6)/2 ); shval = - d1 + h2 - b2; if( d1+b1 > h2 ) /* move little sub down */ shval = b1-b2; ebase[yyval] = b1 + max(0, h2-b1-d1); eht[yyval] = h1 + max(0, h2-b1-d1); if (rfont[p1] == ITAL && lfont[p2] == ROM) sh1 = "\\|"; if (rfont[p2] == ITAL) sh2 = "\\|"; } else { /* superscript */ /* 4/10 up main box */ d1 = VERT( (effps*6*2)/10 ); ebase[yyval] = b1; shval = -VERT( (4 * (h1-b1)) / 10 ) - b2; if( VERT(4*(h1-b1)/10) + h2 < h1-b1 ) /* raise little super */ shval = -(h1-b1) + h2-b2 - d1; eht[yyval] = h1 + max(0, h2-VERT((6*(h1-b1))/10)); if (rfont[p1] == ITAL) sh1 = "\\|"; if (rfont[p2] == ITAL) sh2 = "\\|"; } if(dbg)printf(".\tb:b shift b: S%d <- S%d vert %d S%d vert %d; b=%d, h=%d\n", yyval, p1, shval, p2, -shval, ebase[yyval], eht[yyval]); printf(".as %d \\v'%du'\\s-%d%s\\*(%d\\s+%d%s\\v'%du'\n", yyval, shval, diffps, sh1, p2, diffps, sh2, -shval); ps += deltaps; if (rfont[p2] == ITAL) rfont[p1] = 0; else rfont[p1] = rfont[p2]; ofree(p2); } shift(p1) int p1; { ps -= deltaps; yyval = p1; if(dbg)printf(".\tshift: %d;ps=%d\n", yyval, ps); } shift2(p1, p2, p3) int p1, p2, p3; { int effps, effps2, h1, h2, h3, b1, b2, b3, subsh, d1, d2, supsh; int treg; treg = oalloc(); yyval = p1; if(dbg)printf(".\tshift2 s%d <- %d %d %d\n", yyval, p1, p2, p3); effps = EFFPS(ps+deltaps); eht[p3] = h3 = VERT( (eht[p3] * effps) / EFFPS(ps) ); ps += deltaps; effps2 = EFFPS(ps+deltaps); h1 = eht[p1]; b1 = ebase[p1]; h2 = eht[p2]; b2 = ebase[p2]; b3 = ebase[p3]; d1 = VERT( (effps2*6)/2 ); subsh = -d1+h2-b2; if( d1+b1 > h2 ) /* move little sub down */ subsh = b1-b2; supsh = -VERT( (4*(h1-b1))/10 ) - b3; d2 = VERT( (effps*6*2)/10 ); if( VERT(4*(h1-b1)/10)+h3 < h1-b1 ) supsh = -(h1-b1) + (h3-b3) - d2; eht[yyval] = h1 + max(0, h3-VERT( (6*(h1-b1))/10 )) + max(0, h2-b1-d1); ebase[yyval] = b1+max(0, h2-b1-d1); if (rfont[p1] == ITAL && lfont[p2] == ROM) printf(".ds %d \\|\\*(%d\n", p2, p2); if (rfont[p2] == ITAL) printf(".as %d \\|\n", p2); nrwid(p2, effps, p2); if (rfont[p1] == ITAL && lfont[p3] == ROM) printf(".ds %d \\|\\|\\*(%d\n", p3, p3); else printf(".ds %d \\|\\*(%d\n", p3, p3); nrwid(p3, effps, p3); printf(".nr %d \\n(%d\n", treg, p3); printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p2, treg, treg, p2); printf(".as %d \\v'%du'\\s%d\\*(%d\\h'-\\n(%du'\\v'%du'\\\n", p1, subsh, effps, p2, p2, -subsh+supsh); printf("\\s%d\\*(%d\\h'-\\n(%du+\\n(%du'\\s%d\\v'%du'\n", effps, p3, p3, treg, effps2, -supsh); ps += deltaps; if (rfont[p2] == ITAL) rfont[yyval] = 0; /* lie */ ofree(p2); ofree(p3); ofree(treg); } 'U Nk)xgjmp=i  # include "e.h" lpile(type, p1, p2) int type, p1, p2; { int bi, hi, i, gap, h, b, nlist, nlist2, mid; yyval = oalloc(); gap = VERT( (ps*6*4)/10 ); /* 4/10 m between blocks */ if( type=='-' ) gap = 0; nlist = p2 - p1; nlist2 = (nlist+1)/2; mid = p1 + nlist2 -1; h = 0; for( i=p1; imid; i-- ) b += eht[lp[i]] + gap; ebase[yyval] = (nlist%2) ? b + ebase[lp[mid]] : b - VERT( (ps*6*5)/10 ) - gap; if(dbg) { printf(".\tS%d <- %c pile of:", yyval, type); for( i=p1; i\\n(%d .nr %d \\n(%d\n", lp[i], yyval, yyval, lp[i]); } printf(".ds %d \\v'%du'\\h'%du*\\n(%du'\\\n", yyval, ebase[yyval], type=='R' ? 1 : 0, yyval); for(i = p2-1; i >=p1; i--) { hi = eht[lp[i]]; bi = ebase[lp[i]]; switch(type) { case 'L': printf("\\v'%du'\\*(%d\\h'-\\n(%du'\\v'0-%du'\\\n", -bi, lp[i], lp[i], hi-bi+gap); continue; case 'R': printf("\\v'%du'\\h'-\\n(%du'\\*(%d\\v'0-%du'\\\n", -bi, lp[i], lp[i], hi-bi+gap); continue; case 'C': case '-': printf("\\v'%du'\\h'\\n(%du-\\n(%du/2u'\\*(%d", -bi, yyval, lp[i], lp[i]); printf("\\h'-\\n(%du-\\n(%du/2u'\\v'0-%du'\\\n", yyval, lp[i], hi-bi+gap); continue; } } printf("\\v'%du'\\h'%du*\\n(%du'\n", eht[yyval]-ebase[yyval]+gap, type!='R' ? 1 : 0, yyval); for( i=p1; i\\n(%d .nr %d \\n(%d\n", p2, treg, treg, p2); printf(".nr %d \\n(%d+\\s%d.5m\\s0\n", treg, treg, EFFPS(ps)); printf(".ds %d \\v'%du'\\h'\\n(%du-\\n(%du/2u'\\*(%d\\\n", yyval, eht[p2]-ebase[p2]-d, treg, p2, p2); printf("\\h'-\\n(%du-\\n(%du/2u'\\v'%du'\\*(%d\\\n", p2, p1, -(eht[p2]-ebase[p2]+d+ebase[p1]), p1); printf("\\h'-\\n(%du-\\n(%du/2u+.1m'\\v'%du'\\l'\\n(%du-.2m'\\h'.1m'\\v'%du'\n", treg, p1, ebase[p1]+d, treg, d); ebase[yyval] = b; eht[yyval] = h; lfont[yyval] = rfont[yyval] = 0; ofree(p2); ofree(treg); } 'c QkٴOi # include "e.h" # include "e.def" move(dir, amt, p) int dir, amt, p; { int a; yyval = p; a = VERT( (EFFPS(ps) * 6 * amt) / 100); printf(".ds %d ", yyval); if( dir == FWD || dir == BACK ) /* fwd, back */ printf("\\h'%s%du'\\*(%d\n", (dir==BACK) ? "-" : "", a, p); else if (dir == UP) printf("\\v'-%du'\\*(%d\\v'%du'\n", a, p, a); else if (dir == DOWN) printf("\\v'%du'\\*(%d\\v'-%du'\n", a, p, a); if(dbg)printf(".\tmove %d dir %d amt %d; h=%d b=%d\n", p, dir, a, eht[yyval], ebase[yyval]); } 'e Rk."FILi #include "e.h" column(type, p1) int type, p1; { int i; lp[p1] = ct - p1 - 1; if( dbg ){ printf(".\t%d column of", type); for( i=p1+1; i=", "\\(>=", "<=", "\\(<=", "==", "\\(==", "!=", "\\(!=", "+-", "\\(+-", "->", "\\(->", "<-", "\\(<-", "inf", "\\(if", "infinity", "\\(if", "partial", "\\(pd", "half", "\\f1\\(12\\fP", "prime", "\\f1\\(fm\\fP", "dollar", "\\f1$\\fP", "nothing", "", "times", "\\(mu", "del", "\\(gr", "grad", "\\(gr", #ifdef NEQN "<<", "<<", ">>", ">>", "approx", "~\b\\d~\\u", "cdot", "\\v'-.5'.\\v'.5'", "...", "...", ",...,", ",...,", #else "<<", "<\\h'-.3m'<", ">>", ">\\h'-.3m'>", "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'", "cdot", "\\v'-.3m'.\\v'.3m'", "...", "\\v'-.3m'\\ .\\ .\\ .\\ \\v'.3m'", ",...,", ",\\ .\\ .\\ .\\ ,\\|", #endif "alpha", "\\(*a", "beta", "\\(*b", "gamma", "\\(*g", "GAMMA", "\\(*G", "delta", "\\(*d", "DELTA", "\\(*D", "epsilon", "\\(*e", "EPSILON", "\\f1E\\fP", "omega", "\\(*w", "OMEGA", "\\(*W", "lambda", "\\(*l", "LAMBDA", "\\(*L", "mu", "\\(*m", "nu", "\\(*n", "theta", "\\(*h", "THETA", "\\(*H", "phi", "\\(*f", "PHI", "\\(*F", "pi", "\\(*p", "PI", "\\(*P", "sigma", "\\(*s", "SIGMA", "\\(*S", "xi", "\\(*c", "XI", "\\(*C", "zeta", "\\(*z", "iota", "\\(*i", "eta", "\\(*y"((, "kappa", "\\(*k", "rho", "\\(*r", "tau", "\\(*t", "omicron", "\\(*o", "upsilon", "\\(*u", "UPSILON", "\\(*U", "psi", "\\(*q", "PSI", "\\(*Q", "chi", "\\(*x", "and", "\\f1and\\fP", "for", "\\f1for\\fP", "if", "\\f1if\\fP", "Re", "\\f1Re\\fP", "Im", "\\f1Im\\fP", "sin", "\\f1sin\\fP", "cos", "\\f1cos\\fP", "tan", "\\f1tan\\fP", "arc", "\\f1arc\\fP", "sinh", "\\f1sinh\\fP", "coth", "\\f1coth\\fP", "tanh", "\\f1tanh\\fP", "cosh", "\\f1cosh\\fP", "lim", "\\f1lim\\fP", "log", "\\f1log\\fP", "max", "\\f1max\\fP", "min", "\\f1min\\fP", "ln", "\\f1ln\\fP", "exp", "\\f1exp\\fP", "det", "\\f1det\\fP", 0, 0 }; tbl *lookup(tblp, name, defn) /* find name in tbl. if defn non-null, install */ tbl **tblp; char *name, *defn; { register tbl *p; register int h; register char *s = name; char *malloc(); for (h = 0; *s != '\0'; ) h += *s++; h %= TBLSIZE; for (p = tblp[h]; p != NULL; p = p->next) if (strcmp(name, p->name) == 0) { /* found it */ if (defn != NULL) p->defn = defn; return(p); } /* didn't find it */ if (defn == NULL) return(NULL); p = (tbl *) malloc(sizeof (tbl)); if (p == NULL) error(FATAL, "out of space in lookup"); p->name = name; p->defn = defn; p->next = tblp[h]; tblp[h] = p; return(p); } init_tbl() /* initialize all tables */ { int i; for (i = 0; keyword[i].key != NULL; i++) lookup(keytbl, keyword[i].key, keyword[i].keyval); for (i = 0; resword[i].res != NULL; i++) lookup(restbl, resword[i].res, resword[i].resval); } 'w Vk_  "i #include "e.h" #include "e.def" #define SSIZE 400 char token[SSIZE]; int sp; #define putbak(c) *ip++ = c; #define PUSHBACK 300 /* maximum pushback characters */ char ibuf[PUSHBACK+SSIZE]; /* pushback buffer for definitions, etc. */ char *ip = ibuf; gtc() { loop: if (ip > ibuf) return(*--ip); /* already present */ lastchar = getc(curfile); if (lastchar=='\n') linect++; if (lastchar != EOF) return(lastchar); if (++ifile > svargc) { return(EOF); } fclose(curfile); linect = 1; if ((curfile=fopen(svargv[ifile], "r")) != NULL) goto loop; error(FATAL, "can't open file %s", svargv[ifile]); return(EOF); } pbstr(str) register char *str; { register char *p; p = str; while (*p++); --p; if (ip >= &ibuf[PUSHBACK]) error( FATAL, "pushback overflow"); while (p > str) putbak(*--p); } yylex() { register int c; tbl *tp, *lookup(); extern tbl **keytbl, **deftbl; beg: while ((c=gtc())==' ' || c=='\n') ; yylval=c; switch(c) { case EOF: return(EOF); case '~': return(SPACE); case '^': return(THIN); case '\t': return(TAB); case '{': return('{'); case '}': return('}'); case '"': for (sp=0; (c=gtc())!='"' && c != '\n'; ) { if (c == '\\') if ((c = gtc()) != '"') token[sp++] = '\\'; token[sp++] = c; if (sp>=SSIZE) error(FATAL, "quoted string %.20s... too long", token); } token[sp]='\0'; yylval = (int) &token[0]; if (c == '\n') error(!FATAL, "missing \" in %.20s", token); return(QTEXT); } if (c==righteq) return(EOF); putbak(c); getstr(token, SSIZE); if (dbg)printf(".\tlex token = |%s|\n", token); if ((tp = lookup(&deftbl, token, NULL)) != NULL) { putbak(' '); pbstr(tp->defn); putbak(' '); if (dbg) printf(".\tfound %s|=%s|\n", token, tp->defn); } else if ((tp = lookup(&keytbl, token, NULL)) == NULL) { if(dbg)printf(".\t%s is not a keyword\n", token); return(CONTIG); } else if (tp->defn == (char *) DEFINE || tp->defn == (char *) NDEFINE || tp->defn == (char *) TDEFINE) define(tp->defn); else if (tp->defn == (char *) DELIM) delim(); else if (tp->defn == (char *) GSIZE) globsize(); else if (tp->defn == (char *) GFONT) globfont(); else if (tp->defn == (char *) INCLUDE) include(); else { return((int) tp->defn); } goto beg; } getstr(s, n) char *s; register int n; { register int c; register char *p; p = s; while ((c = gtc()) == ' ' || c == '\n') ; if (c == EOF) { *s = 0; return; } while (c != ' ' && c != '\t' && c != '\n' && c != '{' && c != '}' && c != '"' && c != '~' && c != '^' && c != righteq) { if (c == '\\') if ((c = gtc()) != '"') *p++ = '\\'; *p++ = c; if (--n <= 0) error(FATAL, "token %.20s... too long", s); c = gtc(); } if (c=='{' || c=='}' || c=='"' || c=='~' || c=='^' || c=='\t' || c==righteq) putbak(c); *p = '\0'; yylval = (int) s; } cstr(s, quote, maxs) char *s; int quote; { int del, c, i; while((del=gtc()) == ' ' || del == '\t' || del == '\n'); if (quote) for (i=0; (c=gtc()) != del && c != EOF;) { s[i++] = c; if (i >= maxs) return(1); /* disaster */ } else { s[0] = del; for (i=1; (c=gtc())!=' ' && c!= '\t' && c!='\n' && c!=EOF;) { s[i++]=c; if (i >= maxs) return(1); /* disaster */ } } s[i] = '\0'; if (c == EOF) error(FATAL, "Unexpected end of input at %.20s", s); return(0); } define(type) int type; { char *strsave(), *p1, *p2; tbl *lookup(); extern tbl **deftbl; getstr(token, SSIZE); /* get name */ if (type != DEFINE) { cstr(token, 1, SSIZE); /* skip the definition too */ return; } p1 = strsave(token); if (cstr(token, 1, SSIZE)) error(FATAL, "Unterminated definition at %.20s", token); p2 = strsave(token); lookup(&deftbl, p1, p2); if (dbg)printf(".\tname %s defined as %s\n", p1, p2); } char *strsave(s) char *s; { char *malloc(); register char *q; q = malloc(strlen(s)+1); if (q == NULL) error(FATAL, "out of space in strsave on %s", s); strcpy(q, s); return(q); } include() { error(!FATAL, "Include not yet implemented"); } delim() { yyval = eqnreg = 0; if (cstr(token, 0, SSIZE)) error(FATAL, "Bizarre delimiters at %.20s", token); lefteq = token[0]; righteq = token[1]; if (lefteq == 'o' && righteq == 'f') lefteq = righteq = '\0'; } ' WkT紁Vi # include "e.h" #define MAXLINE 1200 /* maximum input line */ char in[MAXLINE]; /* input buffer */ int eqnexit(); int noeqn; main(argc,argv) int argc; char *argv[];{ eqnexit(eqn(argc, argv)); } eqnexit(n) { #ifdef gcos if (n) fprintf(stderr, "run terminated due to eqn error\n"); exit(0); #endif exit(n); } eqn(argc,argv) int argc; char *argv[];{ int i, type; setfile(argc,argv); init_tbl(); /* install keywords in tables */ while ((type=getline(in)) != EOF) { eqline = linect; if (in[0]=='.' && in[1]=='E' && in[2]=='Q') { for (i=11; i<100; used[i++]=0); printf("%s",in); printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n"); markline = 0; init(); yyparse(); if (eqnreg>0) { printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg); /* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n", */ /* eqnreg, svargv[ifile], eqline, linect); */ printf(".nr MK %d\n", markline); /* for -ms macros */ printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht); printf(".rn %d 10\n", eqnreg); if(!noeqn)printf("\\*(10\n"); } printf(".ps \\n(99\n.ft \\n(98\n"); printf(".EN"); if (lastchar == EOF) { putchar('\n'); break; } if (putchar(lastchar) != '\n') while (putchar(gtc()) != '\n'); } else if (type == lefteq) inline(); else printf("%s",in); } return(0); } getline(s) register char *s; { register c; while((*s++=c=gtc())!='\n' && c!=EOF && c!=lefteq) if (s >= in+MAXLINE) { error( !FATAL, "input line too long: %.20s\n", in); in[MAXLINE] = '\0'; break; } if (c==lefteq) s--; *s++ = '\0'; return(c); } inline() { int ds; printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n"); ds = oalloc(); printf(".rm %d \n", ds); do{ if (*in) printf(".as %d \"%s\n", ds, in); init(); yyparse(); if (eqnreg > 0) { printf(".as %d \\*(%d\n", ds, eqnreg); ofree(eqnreg); } printf(".ps \\n(99\n.ft \\n(98\n"); } while (getline(in) == lefteq); if (*in) printf(".as %d \"%s", ds, in); printf(".ps \\n(99\n.ft \\n(98\n"); printf("\\*(%d\n", ds); ofree(ds); } putout(p1) int p1; { extern int gsize, gfont; int before, after; if(dbg)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1, eht[p1], ebase[p1]); eqnht = eht[p1]; printf(".ds %d \\x'0'", p1); /* suppposed to leave room for a subscript or superscript */ before = eht[p1] - ebase[p1] - VERT((ps*6*12)/10); if (before > 0) printf("\\x'0-%du'", before); printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98", gfont, gsize, p1, rfont[p1] == ITAL ? "\\|" : ""); after = ebase[p1] - VERT((ps*6*2)/10); if (after > 0) printf("\\x'%du'", after); putchar('\n'); eqnreg = p1; } max(i,j) int i,j; { return (i>j ? i : j); } oalloc() { int i; for (i=11; i<100; i++) if (used[i]++ == 0) return(i); error( FATAL, "no eqn strings left", i); return(0); } ofree(n) int n; { used[n] = 0; } setps(p) int p; { printf(".ps %d\n", EFFPS(p)); } nrwid(n1, p, n2) int n1, p, n2; { printf(".nr %d \\w'\\s%d\\*(%d'\n", n1, EFFPS(p), n2); } setfile(argc, argv) int argc; char *argv[]; { static char *nullst((r = "-"; svargc = --argc; svargv = argv; while (svargc > 0 && svargv[1][0] == '-') { switch (svargv[1][1]) { case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break; case 's': gsize = atoi(&svargv[1][2]); break; case 'p': deltaps = atoi(&svargv[1][2]); break; case 'f': gfont = svargv[1][2]; break; case 'e': noeqn++; break; default: dbg = 1; } svargc--; svargv++; } ifile = 1; linect = 1; if (svargc <= 0) { curfile = stdin; svargv[1] = nullstr; } else if ((curfile = fopen(svargv[1], "r")) == NULL) error( FATAL,"can't open file %s", svargv[1]); } yyerror() {;} init() { ct = 0; ps = gsize; ft = gfont; setps(ps); printf(".ft %c\n", ft); } error(fatal, s1, s2) int fatal; char *s1, *s2; { if (fatal>0) printf("eqn fatal error: "); printf(s1,s2); printf("\nfile %s, between lines %d and %d\n", svargv[ifile], eqline, linect); fprintf(stderr, "eqn: "); if (fatal>0) fprintf(stderr, "fatal error: "); fprintf(stderr, s1, s2); fprintf(stderr, "\nfile %s, between lines %d and %d\n", svargv[ifile], eqline, linect); if (fatal > 0) eqnexit(1); } ' XkE,i # include "e.h" # include "e.def" integral(p, p1, p2) { if (p1 != 0) printf(".ds %d \\h'-0.4m'\\v'0.4m'\\*(%d\\v'-0.4m'\n", p1, p1); if (p2 != 0) printf(".ds %d \\v'-0.3m'\\*(%d\\v'0.3m'\n", p2, p2); if (p1 != 0 && p2 != 0) shift2(p, p1, p2); else if (p1 != 0) bshiftb(p, SUB, p1); else if (p2 != 0) bshiftb(p, SUP, p2); if(dbg)printf(".\tintegral: S%d; h=%d b=%d\n", p, eht[p], ebase[p]); lfont[p] = ROM; } setintegral() { char *f; yyval = oalloc(); f = "\\(is"; printf(".ds %d \\s%d\\v'.1m'\\s+4%s\\s-4\\v'-.1m'\\s%d\n", yyval, ps, f, ps); eht[yyval] = VERT( (((ps+4)*12)/10)*6 ); ebase[yyval] = VERT( (ps*6*3)/10 ); lfont[yyval] = rfont[yyval] = ROM; } ' Yk1i #include "e.h" int dbg; /* debugging print if non-zero */ int lp[80]; /* stack for things like piles and matrices */ int ct; /* pointer to lp */ int used[100]; /* available registers */ int ps; /* default init point size */ int deltaps = 3; /* default change in ps */ int gsize = 10; /* default initial point size */ int gfont = ITAL; /* italic */ int ft; /* default font */ FILE *curfile; /* current input file */ int ifile; int linect; /* line number in file */ int eqline; /* line where eqn started */ int svargc; char **svargv; int eht[100]; int ebase[100]; int lfont[100]; int rfont[100]; int eqnreg; /* register where final string appears */ int eqnht; /* inal height of equation */ int lefteq = '\0'; /* left in-line delimiter */ int righteq = '\0'; /* right in-line delimiter */ int lastchar; /* last character read by lex */ int markline = 0; /* 1 if this EQ/EN contains mark or lineup */ ' Zk8Xi # include "e.h" # include "e.def" funny(n) int n; { char *f; yyval = oalloc(); switch(n) { case SUM: f = "\\(*S"; break; case UNION: f = "\\(cu"; break; case INTER: /* intersection */ f = "\\(ca"; break; case PROD: f = "\\(*P"; break; default: error(FATAL, "funny type %d in funny", n); } printf(".ds %d \\s%d\\v'.3m'\\s+5%s\\s-5\\v'-.3m'\\s%d\n", yyval, ps, f, ps); eht[yyval] = VERT( (ps+5)*6 -(ps*6*2)/10 ); ebase[yyval] = VERT( (ps*6*3)/10 ); if(dbg)printf(".\tfunny: S%d <- %s; h=%d b=%d\n", yyval, f, eht[yyval], ebase[yyval]); lfont[yyval] = rfont[yyval] = ROM; } ' [kd8i # include "e.h" fromto(p1, p2, p3) int p1, p2, p3; { int b, h1, b1, pss; yyval = oalloc(); lfont[yyval] = rfont[yyval] = 0; h1 = eht[yyval] = eht[p1]; b1 = ebase[p1]; b = 0; pss = EFFPS(ps); ps += 3; nrwid(p1, ps, p1); printf(".nr %d \\n(%d\n", yyval, p1); if( p2>0 ) { nrwid(p2, pss, p2); printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p2, yyval, yyval, p2); eht[yyval] += eht[p2]; b = eht[p2]; } if( p3>0 ) { nrwid(p3, pss, p3); printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p3, yyval, yyval, p3); eht[yyval] += eht[p3]; } printf(".ds %d ", yyval); /* bottom of middle box */ if( p2>0 ) { printf("\\v'%du'\\h'\\n(%du-\\n(%du/2u'\\s%d\\*(%d\\s%d", eht[p2]-ebase[p2]+b1, yyval, p2, pss, p2, EFFPS(ps)); printf("\\h'-\\n(%du-\\n(%du/2u'\\v'%du'\\\n", yyval, p2, -(eht[p2]-ebase[p2]+b1)); } printf("\\h'\\n(%du-\\n(%du/2u'\\*(%d\\h'\\n(%du-\\n(%du/2u'\\\n", yyval, p1, p1, yyval, p1); if( p3>0 ) { printf("\\v'%du'\\h'-\\n(%du-\\n(%du/2u'\\s%d\\*(%d\\s%d\\h'\\n(%du-\\n(%du/2u'\\v'%du'\\\n", -(h1-b1+ebase[p3]), yyval, p3, pss, p3, EFFPS(ps), yyval, p3, (h1-b1+ebase[p3])); } printf("\n"); ebase[yyval] = b + b1; if(dbg)printf(".\tfrom to: S%d <- %d f %d t %d; h=%d b=%d\n", yyval, p1, p2, p3, eht[yyval], ebase[yyval]); ofree(p1); if( p2>0 ) ofree(p2); if( p3>0 ) ofree(p3); } ' \kywyi # include "e.h" setfont(ch1) char ch1; { /* use number '1', '2', '3' for roman, italic, bold */ yyval = ft; if (ch1 == 'r' || ch1 == 'R') ft = ROM; else if (ch1 == 'i' || ch1 == 'I') ft = ITAL; else if (ch1 == 'b' || ch1 == 'B') ft = BLD; else ft = ch1; printf(".ft %c\n", ft); if(dbg)printf(".\tsetfont %c %c\n", ch1, ft); } font(p1, p2) int p1, p2; { /* old font in p1, new in ft */ yyval = p2; lfont[yyval] = rfont[yyval] = ft==ITAL ? ITAL : ROM; if(dbg)printf(".\tb:fb: S%d <- \\f%c S%d \\f%c b=%d,h=%d,lf=%c,rf=%c\n", yyval, ft, p2, p1, ebase[yyval], eht[yyval], lfont[yyval], rfont[yyval]); printf(".ds %d \\f%c\\*(%d\\f%c\n", yyval, ft, p2, p1); ft = p1; printf(".ft %c\n", ft); } fatbox(p) int p; { int sh; yyval = p; sh = ps / 4; nrwid(p, ps, p); printf(".ds %d \\*(%d\\h'-\\n(%du+%du'\\*(%d\n", p, p, p, sh, p); if(dbg)printf(".\tfat %d, sh=%d\n", p, sh); } globfont() { char temp[20]; getstr(temp, 20); yyval = eqnreg = 0; gfont = temp[0]; switch (gfont) { case 'r': case 'R': gfont = '1'; break; case 'i': case 'I': gfont = '2'; break; case 'b': case 'B': gfont = '3'; break; } printf(".ft %c\n", gfont); ft = gfont; } ((' ]kQ7ni # include "e.h" eqnbox(p1, p2, lu) { int b, h; char *sh; yyval = p1; b = max(ebase[p1], ebase[p2]); eht[yyval] = h = b + max(eht[p1]-ebase[p1], eht[p2]-ebase[p2]); ebase[yyval] = b; if(dbg)printf(".\te:eb: S%d <- S%d S%d; b=%d, h=%d\n", yyval, p1, p2, b, h); if (rfont[p1] == ITAL && lfont[p2] == ROM) sh = "\\|"; else sh = ""; if (lu) { printf(".nr %d \\w'\\s%d\\*(%d%s'\n", p1, ps, p1, sh); printf(".ds %d \\h'|\\n(97u-\\n(%du'\\*(%d\n", p1, p1, p1); } printf(".as %d \"%s\\*(%d\n", yyval, sh, p2); rfont[p1] = rfont[p2]; ofree(p2); } ' ^k!i %{# #include "e.h" # int fromflg; %} %term CONTIG QTEXT SPACE THIN TAB %term MATRIX LCOL CCOL RCOL COL %term MARK LINEUP %term SUM INT PROD UNION INTER %term LPILE PILE CPILE RPILE ABOVE %term DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE %right FROM TO %left OVER SQRT %right SUP SUB %right SIZE FONT ROMAN ITALIC BOLD FAT %right UP DOWN BACK FWD %left LEFT RIGHT %right DOT DOTDOT HAT TILDE BAR UNDER VEC DYAD %% stuff : eqn { putout($1); } | error { error(!FATAL, "syntax error"); } | { eqnreg = 0; } ; eqn : box | eqn box { eqnbox($1, $2, 0); } | eqn lineupbox { eqnbox($1, $2, 1); } | LINEUP { lineup(0); } ; lineupbox: LINEUP box { $$ = $2; lineup(1); } ; matrix : MATRIX { $$ = ct; } ; collist : column | collist column ; column : lcol '{' list '}' { column('L', $1); } | ccol '{' list '}' { column('C', $1); } | rcol '{' list '}' { column('R', $1); } | col '{' list '}' { column('-', $1); } ; lcol : LCOL { $$ = ct++; } ; ccol : CCOL { $$ = ct++; } ; rcol : RCOL { $$ = ct++; } ; col : COL { $$ = ct++; } ; sbox : sup box %prec SUP { $$ = $2; } ; tbox : to box %prec TO { $$ = $2; } | %prec FROM { $$ = 0; } ; box : box OVER box { boverb($1, $3); } | MARK box { mark($2); } | size box %prec SIZE { size($1, $2); } | font box %prec FONT { font($1, $2); } | FAT box { fatbox($2); } | SQRT box { sqrt($2); } | lpile '{' list '}' { lpile('L', $1, ct); ct = $1; } | cpile '{' list '}' { lpile('C', $1, ct); ct = $1; } | rpile '{' list '}' { lpile('R', $1, ct); ct = $1; } | pile '{' list '}' { lpile('-', $1, ct); ct = $1; } | box sub box sbox %prec SUB { shift2($1, $3, $4); } | box sub box %prec SUB { bshiftb($1, $2, $3); } | box sup box %prec SUP { bshiftb($1, $2, $3); } | int sub box sbox %prec SUB { integral($1, $3, $4); } | int sub box %prec SUB { integral($1, $3, 0); } | int sup box %prec SUP { integral($1, 0, $3); } | int { integral($1, 0, 0); } | left eqn right { paren($1, $2, $3); } | pbox | box from box tbox %prec FROM { fromto($1, $3, $4); fromflg=0; } | box to box %prec TO { fromto($1, 0, $3); } | box diacrit { diacrit($1, $2); } | fwd box %prec UP { move(FWD, $1, $2); } | up box %prec UP { move(UP, $1, $2); } | back box %prec UP { move(BACK, $1, $2); } | down box %prec UP { move(DOWN, $1, $2); } | matrix '{' collist '}' { matrix($1); } ; int : INT { setintegral(); } ; fwd : FWD text { $$ = atoi((char *) $1); } ; up : UP text { $$ = atoi((char *) $1); } ; back : BACK text { $$ = atoi((char *) $1); } ; down : DOWN text { $$ = atoi((char *) $1); } ; diacrit : HAT { $$ = HAT; } | VEC { $$ = VEC; } | DYAD { $$ = DYAD; } | BAR { $$ = BAR; } | UNDER { $$ = UNDER; } /* under bar */ | DOT { $$ = DOT; } | TILDE { $$ = TILDE; } | DOTDOT { $$ = DOTDOT; } /* umlaut = double dot */ ; from : FROM { $$=ps; ps -= 3; fromflg = 1; if(dbg)printf(".\tfrom: old ps %d, new ps %d, fflg %d\n", $$, ps, fromflg); } ; to : TO { $$=ps; if(fromflg==0)ps -= 3; if(dbg)printf(".\tto: old ps %d, new ps %d\n", $$, ps); } ; left : LEFT text { $$ = ((char *)$2)[0]; } | LEFT '{' { $$ = '{'; } ; right : RIGHT text { $$ = ((char *)$2)[0]; } | RIGHT '}' { $$ = '}'; } | { $$ = 0; } ; list : eqn { lp[ct++] = $1; } | list ABOVE eqn { lp[ct++] = $3; } ; lpile : LPILE { $$ = ct; } ; cpile : CPILE { $$ = ct; } ; pile : PILE { $$ = ct; } ; rpile : RPILE { $$ = ct; } ; size : SIZE text { $$ = ps; setsize((char *) $2); } ; font : ROMAN { setfont(ROM); } | ITALIC { setfont(ITAL); } | BOLD { setfont(BLD); } | FONT text { setfont(((char *)$2)[0]); } ; sub : SUB { shift(SUB); } ; sup : SUP { shift(SUP); } ; pbox : '{' eqn '}' { $$ = $2; } | QTEXT { text(QTEXT, (char *) $1); } | CONTIG { text(CONTIG, (char *) $1); } | SPACE { text(SPACE, 0); } | THIN { text(THIN, 0); } | TAB { text(TAB, 0); } | SUM { funny(SUM); } | PROD { funny(PROD); } | UNION { funny(UNION); } | INTER { funny(INTER); } /* intersection */ ; text : CONTIG | QTEXT ; %% ' _kŴ |i #include #define FATAL 1 #define ROM '1' #define ITAL '2' #define BLD '3' #define VERT(n) ((((n)+1)/3)*3) #define EFFPS(p) ((p) >= 6 ? (p) : 6) extern int dbg; extern int ct; extern int lp[]; extern int used[]; /* available registers */ extern int ps; /* dflt init pt size */ extern int deltaps; /* default change in ps */ extern int gsize; /* global size */ extern int gfont; /* global font */ extern int ft; /* dflt font */ extern FILE *curfile; /* current input file */ extern int ifile; /* input file number */ extern int linect; /* line number in current file */ extern int eqline; /* line where eqn started */ extern int svargc; extern char **svargv; extern int eht[]; extern int ebase[]; extern int lfont[]; extern int rfont[]; extern int yyval; extern int *yypv; extern int yylval; extern int eqnreg, eqnht; extern int lefteq, righteq; extern int lastchar; /* last character read by lex */ extern int markline; /* 1 if this EQ/EN contains mark or lineup */ typedef struct s_tbl { char *name; char *defn; struct s_tbl *next; } tbl; ' `kɴ_i # include "e.h" # include "e.def" diacrit(p1, type) int p1, type; { int c, t, effps; c = oalloc(); t = oalloc(); effps = EFFPS(ps); nrwid(p1, effps, p1); printf(".nr 10 %du\n", VERT(max(eht[p1]-ebase[p1]-6*ps,0))); /* vertical shift if high */ printf(".if \\n(ct>1 .nr 10 \\n(10+\\s%d.25m\\s0\n", effps); printf(".nr %d \\s%d.1m\\s0\n", t, effps); /* horiz shift if high */ printf(".if \\n(ct>1 .nr %d \\s%d.15m\\s0\n", t, effps); switch(type) { case VEC: printf(".ds %d \\v'-.4m'\\s%d\\(->\\s0\\v'.4m'\n", c, max(effps-3, 6)); break; case DYAD: printf(".ds %d \\v'-.4m'\\s%d\\z\\(<-\\(->\\s0\\v'.4m'\n", c, max(effps-3, 6)); break; case HAT: printf(".ds %d ^\n", c); break; case TILDE: printf(".ds %d ~\n", c); break; case DOT: printf(".ds %d \\s%d\\v'-.67m'.\\v'.67m'\\s0\n", c, effps); break; case DOTDOT: printf(".ds %d \\s%d\\v'-.67m'..\\v'.67m\\s0'\n", c, effps); break; case BAR: printf(".ds %d \\s%d\\v'.18m'\\h'.05m'\\l'\\n(%du-.1m\\(rn'\\h'.05m'\\v'-.18m'\\s0\n", c, effps, p1); break; case UNDER: printf(".ds %d \\l'\\n(%du\\(ul'\n", c, p1); printf(".nr %d 0\n", t); printf(".nr 10 0-%d\n", ebase[p1]); break; } nrwid(c, ps, c); if (lfont[p1] != ITAL) printf(".nr %d 0\n", t); printf(".as %d \\h'-\\n(%du-\\n(%du/2u+\\n(%du'\\v'0-\\n(10u'\\*(%d", p1, p1, c, t, c); printf("\\v'\\n(10u'\\h'-\\n(%du+\\n(%du/2u-\\n(%du'\n", c, p1, t); /* BUG - should go to right end of widest */ if (type != UNDER) eht[p1] += VERT( (6*ps*15) ((/ 100); /* 0.15m */ if(dbg)printf(".\tdiacrit: %c over S%d, lf=%c, rf=%c, h=%d,b=%d\n", type, p1, lfont[p1], rfont[p1], eht[p1], ebase[p1]); ofree(c); ofree(t); } ' bkCH[Y\_behknqtw1i( /* * list file or directory */ #include #include #include #include #define NFILES 1024 FILE *pwdf, *dirf; char stdbuf[BUFSIZ]; struct lbuf { union { char lname[15]; char *namep; } ln; char ltype; short lnum; short lflags; short lnl; short luid; short lgid; long lsize; long lmtime; }; int aflg, dflg, lflg, sflg, tflg, uflg, iflg, fflg, gflg, cflg; int rflg = 1; long year; int flags; int lastuid = -1; char tbuf[16]; long tblocks; int statreq; struct lbuf *flist[NFILES]; struct lbuf **lastp = flist; struct lbuf **firstp = flist; char *dotp = "."; char *makename(); struct lbuf *gstat(); char *ctime(); long nblock(); #define ISARG 0100000 main(argc, argv) char *argv[]; { int i; register struct lbuf *ep, **ep1; register struct lbuf **slastp; struct lbuf **epp; struct lbuf lb; char *t; int compar(); setbuf(stdout, stdbuf); time(&lb.lmtime); year = lb.lmtime - 6L*30L*24L*60L*60L; /* 6 months ago */ if (--argc > 0 && *argv[1] == '-') { argv++; while (*++*argv) switch (**argv) { case 'a': aflg++; continue; case 's': sflg++; statreq++; continue; case 'd': dflg++; continue; case 'g': gflg++; continue; case 'l': lflg++; statreq++; continue; case 'r': rflg = -1; continue; case 't': tflg++; statreq++; continue; case 'u': uflg++; continue; case 'c': cflg++; continue; case 'i': iflg++; continue; case 'f': fflg++; continue; default: continue; } argc--; } if (fflg) { aflg++; lflg = 0; sflg = 0; tflg = 0; statreq = 0; } if(lflg) { t = "/etc/passwd"; if(gflg) t = "/etc/group"; pwdf = fopen(t, "r"); } if (argc==0) { argc++; argv = &dotp - 1; } for (i=0; i < argc; i++) { if ((ep = gstat(*++argv, 1))==NULL) continue; ep->ln.namep = *argv; ep->lflags |= ISARG; } qsort(firstp, lastp - firstp, sizeof *lastp, compar); slastp = lastp; for (epp=firstp; eppltype=='d' && dflg==0 || fflg) { if (argc>1) printf("\n%s:\n", ep->ln.namep); lastp = slastp; readdir(ep->ln.namep); if (fflg==0) qsort(slastp,lastp - slastp,sizeof *lastp,compar); if (lflg || sflg) printf("total %D\n", tblocks); for (ep1=slastp; ep1lnum == -1) return; if (iflg) printf("%5u ", p->lnum); if (sflg) printf("%4D ", nblock(p->lsize)); if (lflg) { putchar(p->ltype); pmode(p->lflags); printf("%2d ", p->lnl); t = p->luid; if(gflg) t = p->lgid; if (getname(t, tbuf)==0) printf("%-6.6s", tbuf); else printf("%-6d", t); if (p->ltype=='b' || p->ltype=='c') printf("%3d,%3d", major((int)p->lsize), minor((int)p->lsize)); else printf("%7ld", p->lsize); cp = ctime(&p->lmtime); if(p->lmtime < year) printf(" %-7.7s %-4.4s ", cp+4, cp+20); else printf(" %-12.12s ", cp+4); } if (p->lflags&ISARG) printf("%s\n", p->ln.namep); else printf("%.14s\n", p->ln.lname); } getname(uid, buf) int uid; char buf[]; { int j, c, n, i; if (uid==lastuid) return(0); if(pwdf == NULL) return(-1); rewind(pwdf); lastuid = -1; do { i = 0; j = 0; n = 0; while((c=fgetc(pwdf)) != '\n') { if (c==EOF) return(-1); if (c==':') { j++; c = '0'; } if (j==0) buf[i++] = c; if (j==2) n = n*10 + c - '0'; } } while (n != uid); buf[i++] = '\0'; lastuid = uid; return(0); } long nblock(size) long size; { return((size+511)>>9); } int m1[] = { 1, S_IREAD>>0, 'r', '-' }; int m2[] = { 1, S_IWRITE>>0, 'w', '-' }; int m3[] = { 2, S_ISUID, 's', S_IEXEC>>0, 'x', '-' }; int m4[] = { 1, S_IREAD>>3, 'r', '-' }; int m5[] = { 1, S_IWRITE>>3, 'w', '-' }; int m6[] = { 2, S_ISGID, 's', S_IEXEC>>3, 'x', '-' }; int m7[] = { 1, S_IREAD>>6, 'r', '-' }; int m8[] = { 1, S_IWRITE>>6, 'w', '-' }; int m9[] = { 2, S_ISVTX, 't', S_IEXEC>>6, 'x', '-' }; int *m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9}; pmode(aflag) { register int **mp; flags = aflag; for (mp = &m[0]; mp < &m[sizeof(m)/sizeof(m[0])];) select(*mp++); } select(pairp) register int *pairp; { register int n; n = *pairp++; while (--n>=0 && (flags&*pairp++)==0) pairp++; putchar(*pairp); } char * makename(dir, file) char *dir, *file; { static char dfile[100]; register char *dp, *fp; register int i; dp = dfile; fp = dir; while (*fp) *dp++ = *fp++; *dp++ = '/'; fp = file; for (i=0; ilnum != -1) ep->lnum = dentry.d_ino; for (j=0; jln.lname[j] = dentry.d_name[j]; } fclose(dirf); } struct lbuf * gstat(file, argfl) char *file; { extern char *malloc(); struct stat statb; register struct lbuf *rep; static int nomocore; if (nomocore) return(NULL); rep = (struct lbuf *)malloc(sizeof(struct lbuf)); if (rep==NULL) { fprintf(stderr, "ls: out of memory\n"); nomocore = 1; return(NULL); } if (lastp >= &flist[NFILES]) { static int msg; lastp--; if (msg==0) { fprintf(stderr, "ls: too many files\n"); msg++; } } *lastp++ = rep; rep->lflags = 0; rep->lnum = 0; rep->ltype = '-'; if (argfl || statreq) { if (stat(file, &statb)<0) { printf("%s not found\n", file); statb.st_ino = -1; statb.st_size = 0; statb.st_mode = 0; if (argfl) { lastp--; return(0); } } rep->lnum = statb.st_ino; rep->lsize = statb.st_size; switch(statb.st_mode&S_IFMT) { case S_IFDIR: rep->ltype = 'd'; break; case S_IFBLK: rep->ltype = 'b'; rep->lsize = statb.st_rdev; break; case S_IFCHR: rep->ltype = 'c'; rep->lsize = statb.st_rdev; break; } rep->lflags = statb.st_mode & ~S_IFMT; rep->luid = statb.st_uid; rep->lgid = statb.st_gid; rep->lnl = statb.st_nlink; if(uflg) rep->lmtime = statb.st_atime; else if (cflg) rep->lmtime = statb.st_ctime; else rep->lmtime = statb.st_mtime; tblocks += nblock(statb.st_size); } return(rep); } compar(pp1, pp2) struct lbuf **pp1, **pp2; { register struct lbuf *p1, *p2; p1 = *pp1; p2 = *pp2; if (dflg==0) { if (p1->lflags&ISARG && p1->ltype=='d') { if (!(p2->lflags&ISARG && p2->ltype=='d')) return(1); } else { if (p2->lflags&ISARG && p2->ltype=='d') return(-1); } } if (tflg) { if(p2->lmtime == p1->lmtime) return(0); if(p2->lmtime > p1->lmtime) return(rflg); return(-rflg); } return(rflg * strcmp(p1->lflags&ISARG? p1->ln.namep: p1->ln.lname, p2->lflags&ISARG? p2->ln.namep: p2->ln.lname)); } ' ck봁f GJMPSVOO /* * login [ name ] */ #include #include #include #include #include #include #include #define SCPYN(a, b) strncpy(a, b, sizeof(a)) char maildir[30] = "/usr/spool/mail/"; struct passwd nouser = {"", "nope"}; struct sgttyb ttyb; struct utmp utmp; char minusnam[16] = "-"; char homedir[64] = "HOME="; char *envinit[] = {homedir, "PATH=:/bin:/usr/bin", 0}; struct passwd *pwd; struct passwd *getpwnam(); char *strcat(); int setpwent(); ((char *ttyname(); char *crypt(); char *getpass(); char *rindex(), *index(); extern char **environ; main(argc, argv) char **argv; { register char *namep; int t, f, c; char *ttyn; alarm(60); signal(SIGQUIT, SIG_IGN); signal(SIGINT, SIG_IGN); nice(-100); nice(20); nice(0); gtty(0, &ttyb); ttyb.sg_erase = '#'; ttyb.sg_kill = '@'; stty(0, &ttyb); for (t=3; t<20; t++) close(t); ttyn = ttyname(0); if (ttyn==0) ttyn = "/dev/tty??"; loop: SCPYN(utmp.ut_name, ""); if (argc>1) { SCPYN(utmp.ut_name, argv[1]); argc = 0; } while (utmp.ut_name[0] == '\0') { namep = utmp.ut_name; printf("login: "); while ((c = getchar()) != '\n') { if(c == ' ') c = '_'; if (c == EOF) exit(0); if (namep < utmp.ut_name+8) *namep++ = c; } } setpwent(); if ((pwd = getpwnam(utmp.ut_name)) == NULL) pwd = &nouser; endpwent(); if (*pwd->pw_passwd != '\0') { namep = crypt(getpass("Password:"),pwd->pw_passwd); if (strcmp(namep, pwd->pw_passwd)) { printf("Login incorrect\n"); goto loop; } } if(chdir(pwd->pw_dir) < 0) { printf("No directory\n"); goto loop; } time(&utmp.ut_time); t = ttyslot(); if (t>0 && (f = open("/etc/utmp", 1)) >= 0) { lseek(f, (long)(t*sizeof(utmp)), 0); SCPYN(utmp.ut_line, index(ttyn+1, '/')+1); write(f, (char *)&utmp, sizeof(utmp)); close(f); } if (t>0 && (f = open("/usr/adm/wtmp", 1)) >= 0) { lseek(f, 0L, 2); write(f, (char *)&utmp, sizeof(utmp)); close(f); } chown(ttyn, pwd->pw_uid, pwd->pw_gid); setgid(pwd->pw_gid); setuid(pwd->pw_uid); if (*pwd->pw_shell == '\0') pwd->pw_shell = "/bin/sh"; environ = envinit; strncat(homedir, pwd->pw_dir, sizeof(homedir)-6); if ((namep = rindex(pwd->pw_shell, '/')) == NULL) namep = pwd->pw_shell; else namep++; strcat(minusnam, namep); alarm(0); umask(02); showmotd(); strcat(maildir, pwd->pw_name); if(access(maildir,4)==0) { struct stat statb; stat(maildir, &statb); if (statb.st_size) printf("You have mail.\n"); } signal(SIGQUIT, SIG_DFL); signal(SIGINT, SIG_DFL); execlp(pwd->pw_shell, minusnam, 0); printf("No shell\n"); exit(0); } int stopmotd; catch() { signal(SIGINT, SIG_IGN); stopmotd++; } showmotd() { FILE *mf; register c; signal(SIGINT, catch); if((mf = fopen("/etc/motd","r")) != NULL) { while((c = getc(mf)) != EOF && stopmotd == 0) putchar(c); fclose(mf); } signal(SIGINT, SIG_IGN); } ' dk/ⴁADi( /* * ln [ -f ] target [ new name ] */ #include #include #include "stdio.h" char *rindex(); main(argc, argv) char **argv; { struct stat statb; register char *np; int fflag = 0; char nb[100], *name=nb, *arg2; int statres; if (argc >1 && strcmp(argv[1], "-f")==0) { argc--; argv++; fflag++; } if (argc<2 || argc>3) { printf("Usage: ln target [ newname ]\n"); exit(1); } np = rindex(argv[1], '/'); if (np==0) np = argv[1]; else np++; if (argc==2) arg2 = np; else arg2 = argv[2]; statres = stat(argv[1], &statb); if (statres<0) { printf ("ln: %s does not exist\n", argv[1]); exit(1); } if (fflag==0 && (statb.st_mode&S_IFMT) == S_IFDIR) { printf("ln: %s is a directory\n", argv[1]); exit(1); } statres = stat(arg2, &statb); if (statres>=0 && (statb.st_mode&S_IFMT) == S_IFDIR) sprintf(name, "%s/%s", arg2, np); else name = arg2; if (link(argv[1], name)<0) { perror("ln"); exit(1); } exit(0); } ' ekݴ&),/258;>oi* ldfps = 170100^tst / ldfps $240 clr argflg cmp (sp)+,$2 blt begin tst (sp)+ mov (sp),r2 jsr r5,atof; getch1 inc argflg br begin1 begin: tst argflg beq 9f; sys exit; 9: jsr r5,atof; getch begin1: tstf fr0 cfcc bpl 9f; jmp ouch; 9: bne 9f; sys exit; 9: cmpf big,fr0 cfcc bgt 9f; jmp ouch; 9: / movf $f100,fr1 cmpf fr0,fr1 cfcc bge 1f mov $pt,r3 3: cmp r3,$ptend bhis 1f movif (r3)+,fr1 cmpf fr1,fr0 cfcc blt 3b tst -(r3) 3: movif (r3),fr0 jsr r5,ftoa; wrchar mov $'\n,r0 jsr r5,wrchar tst (r3)+ cmp r3,$ptend blo 3b movf $f100,fr0 / 1: divf $two,fr0 modf $one,fr0 movf fr1,fr0 mulf $two,fr0 addf $one,fr0 movif $tsiz8,fr1 movf fr1,fr5 movf fr0,nn / / / / clear the sieve table / 2: mov $table,r3 3: cmp r3,$table+tabsiz bhis 3f clrb (r3)+ br 3b / / run the sieve / 3: movf nn,fr0 addf fr5,fr0 jsr r5,sqrt movf fr0,v / movf nn,fr0 movif $3.,fr1 jsr pc,5f movif $5.,fr1 jsr pc,5f movif $7.,fr1 jsr pc,5f movif $11.,fr1 mov $factab+2,r4 4: jsr pc,5f mov (r4)+,kazoo kazoo =.+2 addf $kazoo,fr1 cmp r4,$ftabend blo 3f mov $factab,r4 3: cmpf v,fr1 cfcc bge 4b br 1f / / 5: movf fr0,fr2 divf fr1,fr2 modf $one,fr2 mulf fr1,fr3 subf fr0,fr3 cfcc bpl 3f addf fr1,fr3 3: cmpf fr5,fr3 cfcc ble 3f movfi fr3,r0 ashc $-3.,r0 ash $-13.,r1 bic $177770,r1 bisb bittab(r1),table(r0) addf fr1,fr3 br 3b 3: rts pc / / / get one character form the argument string. getch1: movb (r2)+,r0 rts r5 / / now get the primes from the table / and print them. / 1: / movf nn,fr0 clr r3 br 4f / 1: inc r3 inc r3 cmp r3,$tsiz8 bge 2b / 4: / jsr pc,prime bec 3f movf nn,fr0 jsr r5,ftoa; wrchar mov $'\n,r0 jsr r5,wrchar 3: movf nn,fr0 addf $two,fr0 movf fr0,nn br 1b / / / / prime: mov r3,r4 ashc $-3.,r4 ash $-13.,r5 bic $177770,r5 bitb bittab(r5),table(r4) bne 1f sec 1: rts pc / / / / one = 40200 half = 40000 opower = 34400 power = 44000 f100 = 41710 / / get one character from the console. / called from atof. / getch: clr r0 sys read; ch; 1 bec 9f; sys exit; 9: tst r0; bne 9f; sys exit; 9: mov ch,r0 rts r5 / / / write one character on the console / called from ftoa. / wrchar: tst iobuf bne 1f mov $iobuf+2,iobuf 1: movb r0,*iobuf inc iobuf cmp iobuf,$iobuf+514. blo 1f mov $1,r0 sys write; iobuf+2; 512. mov $iobuf+2,iobuf 1: rts r5 / .bss iobuf: .=.+518. .text / / / read and convert a line from the console into fr0. / atof: mov r1,-(sp) movif $10.,r3 clrf r0 1: jsr r5,*(r5) sub $'0,r0 cmp r0,$9. bhi 2f mulf r3,r0 movif r0,r1 addf r1,r0 br 1b 2: cmp r0,$' -'0 beq 1b / mov (sp)+,r1 tst (r5)+ rts r5 / / ftoa: mov $ebuf,r2 1: movf fr0,fr1 divf $ten,fr1 movf fr1,fr2 modf $one,fr2 movf fr3,-(sp) mulf $ten,fr3 negf fr3 addf fr0,fr3 movfi fr3,-(r2) movf (sp)+,fr0 tstf fr0 cfcc bne 1b 1: mov (r2)+,r0 add $60,r0 jsr r5,*(r5) cmp r2,$ebuf blo 1b tst (r5)+ rts r5 / / / / replace the f.p. number in fr0 by its square root / sqrt: movf r0,r1 / a tstf fr0 cfcc beq 2f bgt 1f sec rts r5 / sqrt(-a) 1: seti movf fr0,-(sp) asr (sp) add $20100,(sp) movf (sp)+,fr0 movif $2,r3 / constant 2 mov $4,r0 1: movf r1,r2 divf r0,r2 addf r2,r0 divf r3,r0 / x = (x+a/x)/2 dec r0 bgt 1b 2: clc rts r5 / / buf: .=.+38. ebuf: / / / / complain about a number which the program / is unable to digest ouch: mov $2,r0 sys write; 1f; 2f-1f jmp begin / 1: 2: .even / / one = 40200 two = 40400 four = 40600 six = 40700 ten = 41040 / .data bittab: .byte 1, 2, 4, 10, 20, 40, 100, 200 big: 056177; 177777; 177777; 177777 / pt: 2.; 3.; 5.; 7.; 11.; 13.; 17.; 19.; 23.; 29.; 31.; 37.; 41.; 43. 47.; 53.; 59.; 61.; 67.; 71.; 73.; 79.; 83.; 89.; 97. ptend: nl: <\n> sp5: < > .even / / factab: 41040; 40400; 40600; 40400; 40600; 40700; 40400; 40700 40600; 40400; 40600; 40700; 40700; 40400; 40700; 40600 40400; 40700; 40600; 40700; 41000; 40600; 40400; 40600 40400; 40600; 41000; 40700; 40600; 40700; 40400; 40600 40700; 40400; 40700; 40700; 40600; 40400; 40600; 40700 40400; 40700; 40600; 40400; 40600; 40400; 41040; 40400 ftabend: / .bss ch: .=.+2 t: .=.+8 n: .=.+8 v: .=.+8 nn: .=.+8 place: .=.+8 / tabsiz = 1000. tsiz8 = 8000. table: .=.+tabsiz argflg: .=.+2 .text ' fk&*YVV /* * link editor */ #include #include "sys/types.h" #include "sys/stat.h" /* Layout of a.out file : * * header of 8 words magic number 405, 407, 410, 411 * text size ) * data size ) in bytes but even * bss size ) * symbol table size * entry point * {unused} * flag set if no relocation * * * header: 0 * text: 16 * data: 16+textsize * relocation: 16+textsize+datasize * symbol table: 16+2*(textsize+datasize) or 16+textsize+datasize * */ #define TRUE 1 #((define FALSE 0 #define ARCMAGIC 0177545 #define OMAGIC 0405 #define FMAGIC 0407 #define NMAGIC 0410 #define IMAGIC 0411 #define EXTERN 040 #define UNDEF 00 #define ABS 01 #define TEXT 02 #define DATA 03 #define BSS 04 #define COMM 05 /* internal use only */ #define RABS 00 #define RTEXT 02 #define RDATA 04 #define RBSS 06 #define REXT 010 #define NOVLY 16 #define RELFLG 01 #define NROUT 256 #define NSYM 1103 #define NSYMPR 1000 char premeof[] = "Premature EOF"; char goodnm[] = "__.SYMDEF"; /* table of contents stuff */ #define TABSZ 700 struct tab { char cname[8]; long cloc; } tab[TABSZ]; int tnum; /* overlay management */ int vindex; struct overlay { int argsav; int symsav; struct liblist *libsav; char *vname; int ctsav, cdsav, cbsav; int offt, offd, offb, offs; } vnodes[NOVLY]; /* input management */ struct page { int nuser; int bno; int nibuf; int buff[256]; } page[2]; struct { int nuser; int bno; } fpage; struct stream { int *ptr; int bno; int nibuf; int size; struct page *pno; }; struct stream text; struct stream reloc; struct { char aname[14]; long atime; char auid, agid; int amode; long asize; } archdr; struct { int fmagic; int tsize; int dsize; int bsize; int ssize; int entry; int pad; int relflg; } filhdr; /* one entry for each archive member referenced; * set in first pass; needs restoring for overlays */ struct liblist { long loc; }; struct liblist liblist[NROUT]; struct liblist *libp = liblist; /* symbol management */ struct symbol { char sname[8]; char stype; char spare; int svalue; }; struct local { int locindex; /* index to symbol in file */ struct symbol *locsymbol; /* ptr to symbol table */ }; struct symbol cursym; /* current symbol */ struct symbol symtab[NSYM]; /* actual symbols */ struct symbol **symhash[NSYM]; /* ptr to hash table entry */ struct symbol *lastsym; /* last symbol entered */ int symindex; /* next available symbol table entry */ struct symbol *hshtab[NSYM+2]; /* hash table for symbols */ struct local local[NSYMPR]; /* internal symbols */ struct symbol *p_etext; struct symbol *p_edata; struct symbol *p_end; struct symbol *entrypt; int trace; /* flags */ int xflag; /* discard local symbols */ int Xflag; /* discard locals starting with 'L' */ int Sflag; /* discard all except locals and globals*/ int rflag; /* preserve relocation bits, don't define common */ int arflag; /* original copy of rflag */ int sflag; /* discard all symbols */ int nflag; /* pure procedure */ int Oflag; /* set magic # to 0405 (overlay) */ int dflag; /* define common even with rflag */ int iflag; /* I/D space separated */ int vflag; /* overlays used */ int ofilfnd; char *ofilename = "l.out"; int infil; char *filname; /* cumulative sizes set in pass 1 */ int tsize; int dsize; int bsize; int ssize; /* symbol relocation; both passes */ int ctrel; int cdrel; int cbrel; int errlev; int delarg = 4; char tfname[] = "/tmp/ldaXXXXX"; /* output management */ struct buf { int fildes; int nleft; int *xnext; int iobuf[256]; }; struct buf toutb; struct buf doutb; struct buf troutb; struct buf droutb; struct buf soutb; struct symbol **lookup(); struct symbol **slookup(); struct symbol *lookloc(); delexit() { unlink("l.out"); if (delarg==0) chmod(ofilename, 0777 & ~umask(0)); exit(delarg); } main(argc, argv) char **argv; { register int c, i; int num; register char *ap, **p; int found; int vscan; char save; if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, delexit); if (signal(SIGTERM, SIG_IGN) != SIG_IGN) signal(SIGTERM, delexit); if (argc == 1) exit(4); p = argv+1; /* scan files once to find symdefs */ for (c=1; c= argc) error(2, "Bad output file"); ofilename = *p++; ofilfnd++; continue; case 'u': case 'e': if (++c >= argc) error(2, "Bad 'use' or 'entry'"); enter(slookup(*p++)); if (ap[i]=='e') entrypt = lastsym; continue; case 'v': if (++c >= argc) error(2, "-v: arg missing"); vflag=TRUE; vscan = vindex; found=FALSE; while (--vscan>=0 && found==FALSE) found = eq(vnodes[vscan].vname, *p); if (found) { endload(c, argv); restore(vscan); } else record(c, *p); p++; continue; case 'D': if (++c >= argc) error(2, "-D: arg missing"); num = atoi(*p++); if (dsize>num) error(2, "-D: too small"); dsize = num; ' fkYVV continue; case 'l': save = ap[--i]; ap[i]='-'; load1arg(&ap[i]); ap[i]=save; break; case 'x': xflag++; continue; case 'X': Xflag++; continue; case 'S': Sflag++; continue; case 'r': rflag++; arflag++; continue; case 's': sflag++; xflag++; continue; case 'n': nflag++; continue; case 'd': dflag++; continue; case 'i': iflag++; continue; case 'O': Oflag++; continue; case 't': trace++; continue; default: error(2, "bad flag"); } /*endsw*/ break; } /*endfor*/ } else load1arg(ap); } endload(argc, argv); } /* used after pass 1 */ int nsym; int torigin; int dorigin; int borigin; endload(argc, argv) int argc; char **argv; { register int c, i; int dnum; register char *ap, **p; filname = 0; middle(); setupout(); p = argv+1; libp = liblist; for (c=1; cargsav = c; v->symsav = symindex; v->libsav = libp; v->vname = nam; v->offt = tsize; v->offd = dsize; v->offb = bsize; v->offs = ssize; v->ctsav = ctrel; v->cdsav = cdrel; v->cbsav = cbrel; } restore(vscan) int vscan; { register struct overlay *v; register int saved; v = &vnodes[vscan]; vindex = vscan+1; libp = v->libsav; ctrel = v->ctsav; cdrel = v->cdsav; cbrel = v->cbsav; tsize = v->offt; dsize = v->offd; bsize = v->offb; ssize = v->offs; saved = v->symsav; while (symindex>saved) *symhash[--symindex]=0; } /* scan file to find defined symbols */ load1arg(acp) char *acp; { register char *cp; long nloc; cp = acp; switch ( getfile(cp)) { case 0: load1(0, 0L); break; /* regular archive */ case 1: nloc = 1; while ( step(nloc)) nloc += (archdr.asize + sizeof(archdr) + 1) >> 1; break; /* table of contents */ case 2: tnum = archdr.asize / sizeof(struct tab); if (tnum >= TABSZ) { error(2, "fast load buffer too small"); } lseek(infil, (long)(sizeof(filhdr.fmagic)+sizeof(archdr)), 0); read(infil, (char *)tab, tnum * sizeof(struct tab)); while (ldrand()); libp->loc = -1; libp++; break; /* out of date table of contents */ case 3: error(0, "out of date (warning)"); for(nloc = 1+((archdr.asize+sizeof(archdr)+1) >> 1); step(nloc); nloc += (archdr.asize + sizeof(archdr) + 1) >> 1); break; } close(infil); } step(nloc) long nloc; { dseek(&text, nloc, sizeof archdr); if (text.size <= 0) { libp->loc = -1; libp++; return(0); } mget((int *)&archdr, sizeof archdr); if (load1(1, nloc + (sizeof archdr) / 2)) { libp->loc = nloc; libp++; } return(1); } ldrand() { int i; struct symbol *sp, **pp; struct liblist *oldp = libp; for(i = 0; istype != EXTERN+UNDEF) continue; step(tab[i].cloc >> 1); } return(oldp != libp); } add(a,b,s) int a, b; char *s; { long r; r = (long)(unsigned)a + (unsigned)b; if (r >= 0200000) error(1,s); return(r); } /* single file or archive member */ load1(libflg, loc) long loc; { register struct symbol *sp; int savindex; int ndef, nloc, type, mtype; readhdr(loc); ctrel = tsize; cdrel += dsize; cbrel += bsize; ndef = 0; nloc = sizeof cursym; savindex = symindex; if ((filhdr.relflg&RELFLG)==1) { error(1, "No relocation bits"); return(0); } loc += (sizeof filhdr)/2 + filhdr.tsize + filhdr.dsize; dseek(&text, loc, filhdr.ssize); while (text.size > 0) { mget((int *)&cursym, sizeof cursym); type = cursym.stype; if (Sflag) { mtype = type&037; if (mtype==1 || mtype>4) { continue; } } if ((type&EXTERN)==0) { if (Xflag==0 || cursym.sname[0]!='L') nloc += sizeof cursym; continue; } symreloc(); if (enter(lookup())) continue; if ((sp = lastsym)->stype != EXTERN+UNDEF) continue; if (cursym.stype == EXTERN+UNDEF) { if (cursym.svalue > sp->svalue) sp->svalue = cursym.svalue; continue; } if (sp->svalue != 0 && cursym.stype == EXTERN+TEXT) continue; ndef++; sp->stype = cursym.stype; sp->svalue = cursym.svalue; } if (libflg==0 || ndef) { tsize = add(tsize,filhdr.tsize,"text overflow"); dsize = add(dsize,filhdr.dsize,"data overflow"); bsize = add(bsize,filhdr.bsize,"bss overflow"); ssize = add(ssize,nloc,"symbol table overflow"); return(1); } /* * No symbols defined by this library member. * Rip out the hash table entries and reset the symbol table. */ while (symindex>savindex) *symhash[--symind((ex]=0; return(0); } middle() { register struct symbol *sp, *symp; register t, csize; int nund, corigin; torigin=0; dorigin=0; borigin=0; p_etext = *slookup("_etext"); p_edata = *slookup("_edata"); p_end = *slookup("_end"); /* * If there are any undefined symbols, save the relocation bits. */ symp = &symtab[symindex]; if (rflag==0) { for (sp = symtab; spstype==EXTERN+UNDEF && sp->svalue==0 && sp!=p_end && sp!=p_edata && sp!=p_etext) { rflag++; dflag = 0; break; } } if (rflag) nflag = sflag = iflag = Oflag = 0; /* * Assign common locations. */ csize = 0; if (dflag || rflag==0) { ldrsym(p_etext, tsize, EXTERN+TEXT); ldrsym(p_edata, dsize, EXTERN+DATA); ldrsym(p_end, bsize, EXTERN+BSS); for (sp = symtab; spstype==EXTERN+UNDEF && (t = sp->svalue)!=0) { t = (t+1) & ~01; sp->svalue = csize; sp->stype = EXTERN+COMM; csize = add(csize, t, "bss overflow"); } } /* * Now set symbols to their final value */ if (nflag || iflag) tsize = (tsize + 077) & ~077; dorigin = tsize; if (nflag) dorigin = (tsize+017777) & ~017777; if (iflag) dorigin = 0; corigin = dorigin + dsize; borigin = corigin + csize; nund = 0; for (sp = symtab; spstype) { case EXTERN+UNDEF: errlev |= 01; if (arflag==0 && sp->svalue==0) { if (nund==0) printf("Undefined:\n"); nund++; printf("%.8s\n", sp->sname); } continue; case EXTERN+ABS: default: continue; case EXTERN+TEXT: sp->svalue += torigin; continue; case EXTERN+DATA: sp->svalue += dorigin; continue; case EXTERN+BSS: sp->svalue += borigin; continue; case EXTERN+COMM: sp->stype = EXTERN+BSS; sp->svalue += corigin; continue; } if (sflag || xflag) ssize = 0; bsize = add(bsize, csize, "bss overflow"); nsym = ssize / (sizeof cursym); } ldrsym(asp, val, type) struct symbol *asp; { register struct symbol *sp; if ((sp = asp) == 0) return; if (sp->stype != EXTERN+UNDEF || sp->svalue) { printf("%.8s: ", sp->sname); error(1, "Multiply defined"); return; } sp->stype = type; sp->svalue = val; } setupout() { tcreat(&toutb, 0); mktemp(tfname); tcreat(&doutb, 1); if (sflag==0 || xflag==0) tcreat(&soutb, 1); if (rflag) { tcreat(&troutb, 1); tcreat(&droutb, 1); } filhdr.fmagic = (Oflag ? OMAGIC :( iflag ? IMAGIC : ( nflag ? NMAGIC : FMAGIC ))); filhdr.tsize = tsize; filhdr.dsize = dsize; filhdr.bsize = bsize; filhdr.ssize = sflag? 0: (ssize + (sizeof cursym)*symindex); if (entrypt) { if (entrypt->stype!=EXTERN+TEXT) error(1, "Entry point not in text"); else filhdr.entry = entrypt->svalue | 01; } else filhdr.entry=0; filhdr.pad = 0; filhdr.relflg = (rflag==0); mput(&toutb, (int *)&filhdr, sizeof filhdr); } tcreat(buf, tempflg) struct buf *buf; { register int ufd; char *nam; nam = (tempflg ? tfname : ofilename); if ((ufd = creat(nam, 0666)) < 0) error(2, tempflg?"cannot create temp":"cannot create output"); close(ufd); buf->fildes = open(nam, 2); if (tempflg) unlink(tfname); buf->nleft = sizeof(buf->iobuf)/sizeof(int); buf->xnext = buf->iobuf; } load2arg(acp) char *acp; { register char *cp; register struct liblist *lp; cp = acp; if (getfile(cp) == 0) { while (*cp) cp++; while (cp >= acp && *--cp != '/'); mkfsym(++cp); load2(0L); } else { /* scan archive members referenced */ for (lp = libp; lp->loc != -1; lp++) { dseek(&text, lp->loc, sizeof archdr); mget((int *)&archdr, sizeof archdr); mkfsym(archdr.aname); load2(lp->loc + (sizeof archdr) / 2); } libp = ++lp; } close(infil); } load2(loc) long loc; { register struct symbol *sp; register struct local *lp; register int symno; int type, mtype; readhdr(loc); ctrel = torigin; cdrel += dorigin; cbrel += borigin; /* * Reread the symbol table, recording the numbering * of symbols for fixing external references. */ lp = local; symno = -1; loc += (sizeof filhdr)/2; dseek(&text, loc + filhdr.tsize + filhdr.dsize, filhdr.ssize); while (text.size > 0) { symno++; mget((int *)&cursym, sizeof cursym); symreloc(); type = cursym.stype; if (Sflag) { mtype = type&037; if (mtype==1 || mtype>4) continue; } if ((type&EXTERN) == 0) { if (!sflag&&!xflag&&(!Xflag||cursym.sname[0]!='L')) mput(&soutb, (int *)&cursym, sizeof cursym); continue; } if ((sp = *lookup()) == 0) error(2, "internal error: symbol not found"); if (cursym.stype == EXTERN+UNDEF) { if (lp >= &local[NSYMPR]) error(2, "Local symbol overflow"); lp->locindex = symno; lp++->locsymbol = sp; continue; } if (cursym.stype!=sp->stype || cursym.svalue!=sp->svalue) { printf("%.8s: ", cursym.sname); error(1, "Multiply defined"); } } dseek(&text, loc, filhdr.tsize); dseek(&reloc, loc + half(filhdr.tsize + filhdr.dsize), filhdr.tsize); load2td(lp, ctrel, &toutb, &troutb); dseek(&text, loc+half(filhdr.tsize), filhdr.dsize); dseek(&reloc, loc+filhdr.tsize+half(filhdr.dsize), filhdr.dsize); load2td(lp, cdrel, &doutb, &droutb); torigin += filhdr.tsize; dorigin += filhdr.dsize; borigin += filhdr.bsize; } load2td(lp, creloc, b1, b2) struct local *lp; struct buf *b1, *b2; { register r, t; register struct symbol *sp; for (;;) { /* * The pickup code is copied from "get" for speed. */ /* next text or data word */ if (--text.size <= 0) { if (text.size < 0) break; text.size++; t = get(&text); } else if (--text.nibuf < 0) { text.nibuf++; text.size++; t = get(&text); } else t = *text.ptr++; /* next relocation word */ if (--reloc.size <= 0) { if (reloc.size < 0) error(2, "Relocation error"); reloc.size++; r = get(&reloc); } else if (--reloc.nibuf < 0) { reloc.nibuf++; reloc.size++; r = get(&reloc); } else r = *reloc.ptr++; switch (r&016) { case RTEXT: t += ctrel; break; case RDATA: t += cdrel; break; case RBSS: t += cbrel; break; case REXT: sp = lookloc(lp, r); if (sp->stype==EXTERN+UNDEF) { r = (r&01) + ((nsym+(sp-symtab))<<4) + REXT; break; } t += sp->svalue; r = (r&01) + ((sp->stype-(EXTERN+ABS))<<1); break; } if (r&01) t -= creloc; putw(t, b1); if (rflag) putw(r, b2); } } finishout() { register n, *p; if (nflag||iflag) { n = torigin; while (n&077) { n += 2; putw(0, &toutb); if (rflag) putw(0, &troutb); } } copy(&doutb); if (rflag) { copy(&troutb); copy(&droutb); } if (sflag==0) { if (xflag==0) copy(&soutb); for (p = (int *)symtab; p < (int *)&symtab[symindex];) putw(*p++, &toutb); } flush(&toutb); close(toutb.fildes); if (!ofilfnd) { unlink("a.out"); link("l.out", "a.out"); ofilename = "a.out"; } delarg = errlev; delexit(); } copy(buf) struct buf *buf; { register f, *p, n; flush(buf); lseek(f = buf->fildes, (long)0, 0); while ((n = read(f, (char *)doutb.iobuf, sizeof(doutb.iobuf))) > 1) { n >>= 1; p = (int *)doutb.iobuf; do putw(*p++, &toutb); while (--n); } close(f); } mkfsym(s) char *s; { if (sflag || xflag) return; cp8c(s, cursym.sname); cursym.stype = 037; cursym.svalue = torigin; mput(&soutb, (int *)&cursym, sizeof cursym); } mget(aloc, an) int *aloc; { register *loc, n; register *p; n = an; n >>= 1; loc = aloc; if ((text.nibuf -= n) >= 0) { if ((text.size -= n) > 0) { p = text.ptr; do *loc++ = *p++; while (--n); text.ptr = p; return; } else text.size += n; } text.nibuf += n; do { *loc++ = get(&text); } while (--n); } mput(buf, aloc, an) struct buf *buf; int *aloc; { register *loc; register n; loc = aloc; n = an>>1; do { putw(*loc++, buf); } while (--n); } dseek(asp, aloc, s) long aloc; struct stream *asp; { register struct stream *sp; register struct page *p; /* register */ long b, o; int n; b = aloc >> 8; o = aloc & 0377; sp = asp; --sp->pno->nuser; if ((p = &page[0])->bno!=b && (p = &page[1])->bno!=b) if (p->nuser==0 || (p = &page[0])->nuser==0) { if (page[0].nuser==0 && page[1].nuser==0) if (page[0].bno < page[1].bno) p = &page[0]; p->bno = b; lseek(infil, (aloc & ~0377L) << 1, 0); if ((n = read(infil, (char *)p->buff, 512)>>1) < 0) n = 0; p->nibuf = n; } else error(2, "No pages"); ++p->nuser; sp->bno = b; sp->pno = p; sp->ptr = p->buff + o; if (s != -1) sp->size = half(s); if ((sp->nibuf = p->nibuf-o) <= 0) sp->size = 0; } half(i) { return((i>>1)&077777); } get(asp) struct stream *asp; { register struct stream *sp; sp = asp; if (--sp->nibuf < 0) { dseek(sp, (long)(sp->bno + 1) << 8, -1); --sp->nibuf; } if (--sp->size <= 0) { if (sp->size < 0) error(2, premeof); ++fpage.nuser; --sp->pno->nuser; sp->pno = (struct page *)&fpage; } return(*sp->ptr++); } getfile(acp) char *acp; { register char *cp; register int c; struct stat x; cp = acp; infil = -1; archdr.aname[0] = '\0'; filname = cp; if (cp[0]=='-' && cp[1]=='l') { if(cp[2] == '\0') cp = "-la"; filname = "/usr/lib/libxxxxxxxxxxxxxxx"; for(c=0; cp[c+2]; c++) filname[c+12] = cp[c+2]; filname[c+12] = '.'; filname[c+13] = 'a'; filname[c+14] = '\0'; if ((infil = open(filname+4, 0)) >= 0) { filname += 4; } } if (infil == -1 && (infil = open(filname, 0)) < 0) error(2, "cannot open"); page[0].bno = page[1].bno = -1; page[0].nuser = page[1].nuser = 0; text.pno = reloc.pno = (struct page *)&fpage; fpage.nuser = 2; dseek(&text, 0L, 2); if (text.size <= 0) error(2, premeof); if(get(&text) != ARCMAGIC) return(0); /* regualr file */ dseek(&text, 1L, sizeof archdr); /* word addressing */ if(text.size <= 0) return(1); /* regular archive */ mget((int *)&archdr, sizeof archdr); if(strncmp(archdr.aname, goodnm, 14) != 0) return(1); /* regular archive */ else { fstat(infil, &x); if(x.st_mtime > archdr.atime) { return(3); } else return(2); } } struct symbol **lookup() { int i; int clash; register struct symbol **hp; register char *cp, *cp1; i = 0; for (cp = cursym.sname; cp < &cursym.sname[8];) i = (i<<1) + *cp++; for (hp = &hshtab[(i&077777)%NSYM+2]; *hp!=0;) { cp1 = (*((hp)->sname; clash=FALSE; for (cp = cursym.sname; cp < &cursym.sname[8];) if (*cp++ != *cp1++) { clash=TRUE; break; } if (clash) { if (++hp >= &hshtab[NSYM+2]) hp = hshtab; } else break; } return(hp); } struct symbol **slookup(s) char *s; { cp8c(s, cursym.sname); cursym.stype = EXTERN+UNDEF; cursym.svalue = 0; return(lookup()); } enter(hp) struct symbol **hp; { register struct symbol *sp; if (*hp==0) { if (symindex>=NSYM) error(2, "Symbol table overflow"); symhash[symindex] = hp; *hp = lastsym = sp = &symtab[symindex++]; cp8c(cursym.sname, sp->sname); sp->stype = cursym.stype; sp->svalue = cursym.svalue; return(1); } else { lastsym = *hp; return(0); } } symreloc() { switch (cursym.stype) { case TEXT: case EXTERN+TEXT: cursym.svalue += ctrel; return; case DATA: case EXTERN+DATA: cursym.svalue += cdrel; return; case BSS: case EXTERN+BSS: cursym.svalue += cbrel; return; case EXTERN+UNDEF: return; } if (cursym.stype&EXTERN) cursym.stype = EXTERN+ABS; } error(n, s) char *s; { if (errlev==0) printf("ld:"); if (filname) { printf("%s", filname); if (archdr.aname[0]) printf("(%.14s)", archdr.aname); printf(": "); } printf("%s\n", s); if (n > 1) delexit(); errlev = n; } struct symbol * lookloc(alp, r) struct local *alp; { register struct local *clp, *lp; register sn; lp = alp; sn = (r>>4) & 07777; for (clp = local; clplocindex == sn) return(clp->locsymbol); error(2, "Local symbol botch"); } readhdr(loc) long loc; { register st, sd; dseek(&text, loc, sizeof filhdr); mget((int *)&filhdr, sizeof filhdr); if (filhdr.fmagic != FMAGIC) error(2, "Bad format"); st = (filhdr.tsize+01) & ~01; filhdr.tsize = st; cdrel = -st; sd = (filhdr.dsize+01) & ~01; cbrel = - (st+sd); filhdr.bsize = (filhdr.bsize+01) & ~01; } cp8c(from, to) char *from, *to; { register char *f, *t, *te; f = from; t = to; te = t+8; while ((*t++ = *f++) && txnext)++ = w; if (--b->nleft <= 0) flush(b); } flush(b) register struct buf *b; { register n; if ((n = (char *)b->xnext - (char *)b->iobuf) > 0) if (write(b->fildes, (char *)b->iobuf, n) != n) error(2, "output error"); b->xnext = b->iobuf; b->nleft = sizeof(b->iobuf)/sizeof(int); } ' gkU}h~i( /* * kill - send signal to process */ #include main(argc, argv) char **argv; { register signo, pid, res; int errlev; extern char *sys_errlist[]; extern errno; errlev = 0; if (argc <= 1) { usage: printf("usage: kill [ -signo ] pid ...\n"); exit(2); } if (*argv[1] == '-') { signo = atoi(argv[1]+1); argc--; argv++; } else signo = SIGTERM; argv++; while (argc > 1) { if (**argv<'0' || **argv>'9') goto usage; res = kill(pid = atoi(*argv), signo); if (res<0) { printf("%u: %s\n", pid, sys_errlist[errno]); errlev = 1; } argc--; argv++; } return(errlev); } ' hk˴ \`` /* join F1 F2 on stuff */ #include #define F1 0 #define F2 1 #define NFLD 20 /* max field per line */ #define comp() cmp(ppi[F1][j1],ppi[F2][j2]) FILE *f[2]; char buf[2][BUFSIZ]; /*input lines */ char *ppi[2][NFLD]; /* pointers to fields in lines */ char *s1,*s2; int j1 = 1; /* join of this field of file 1 */ int j2 = 1; /* join of this field of file 2 */ int olist[2*NFLD]; /* output these fields */ int olistf[2*NFLD]; /* from these files */ int no; /* number of entries in olist */ int sep1 = ' '; /* default field separator */ int sep2 = '\t'; char* null = ""; int unpub1; int unpub2; int aflg; main(argc, argv) char *argv[]; { int i; int n1, n2; long top2, bot2; long ftell(); while (argc > 1 && argv[1][0] == '-') { if (argv[1][1] == '\0') break; switch (argv[1][1]) { case 'a': switch(argv[1][2]) { case '1': aflg |= 1; break; case '2': aflg |= 2; break; default: aflg |= 3; } break; case 'e': null = argv[2]; argv++; argc--; break; case 't': sep1 = sep2 = argv[1][2]; break; case 'o': for (no = 0; no < 2*NFLD; no++) { if (argv[2][0] == '1' && argv[2][1] == '.') { olistf[no] = F1; olist[no] = atoi(&argv[2][2]); } else if (argv[2][0] == '2' && argv[2][1] == '.') { olist[no] = atoi(&argv[2][2]); olistf[no] = F2; } else break; argc--; argv++; } break; case 'j': if (argv[1][2] == '1') j1 = atoi(argv[2]); else if (argv[1][2] == '2') j2 = atoi(argv[2]); else j1 = j2 = atoi(argv[2]); argc--; argv++; break; } argc--; argv++; } for (i = 0; i < no; i++) olist[i]--; /* 0 origin */ if (argc != 3) error("usage: join [-j1 x -j2 y] [-o list] file1 file2"); j1--; j2--; /* everyone else believes in 0 origin */ s1 = ppi[F1][j1]; s2 = ppi[F2][j2]; if (argv[1][0] == '-') f[F1] = stdin; else if ((f[F1] = fopen(argv[1], "r")) == NULL) error("can't open %s", argv[1]); if ((f[F2] = fopen(argv[2], "r")) == NULL) error("can't open %s", argv[2]); #define get1() n1=input(F1) #define get2() n2=input(F2) get1(); bot2 = ftell(f[F2]); get2(); while(n1>0 && n2>0 || aflg!=0 && n1+n2>0) { if(n1>0 && n2>0 && comp()>0 || n1==0) { if(aflg&2) output(0, n2); bot2 = ftell(f[F2]); get2(); } else if(n1>0 && n2>0 && comp()<0 || n2==0) { if(aflg&1) output(n1, 0); get1(); } else /*(n1>0 && n2>0 && comp()==0)*/ { while(n2>0 && comp()==0) { output(n1, n2); top2 = ftell(f[F2]); get2(); } fseek(f[F2], bot2, 0); get2(); get1(); for(;;) { if(n1>0 && n2>0 && comp()==0) { output(n1, n2); get2(); } else if(n1>0 && n2>0 && comp()<0 || n2==0) { fseek(f[F2], bot2, 0); get2(); get1(); } else /*(n1>0 && n2>0 && comp()>0 || n1==0)*/{ fseek(f[F2], top2, 0); bot2 = top2; get2(); break; } } } } return(0); } input(n) /* get input line and split into fields */ { register int i, c; char *bp; char **pp; bp = buf[n]; pp = ppi[n]; if (fgets(bp, BUFSIZ, f[n]) == NULL) return(0); for (i = 0; ; i++) { if (sep1 == ' ') /* strip multiples */ while ((c = *bp) == sep1 || c == sep2) bp++; /* skip blanks */ else c = *bp; if (c == '\n' || c == '\0') break; *pp++ = bp; /* record beginning */ while ((c = *bp) != sep1 && c != '\n' && c != sep2 && c != '\0') bp++; *bp++ = '\0'; /* mark end by overwriting blank */ /* fails badly if string doesn't have \n at end */ } *pp = 0; return(i); } output(on1, on2) /* print items from olist */ int on1, on2; { int i; char *temp; if (no <= 0) { /* default case */ printf("%s", on1? ppi[F1][j1]: ppi[F2][j2]); for (i = 0; i < on1; i++) if (i != j1) printf("%c%s", sep1, ppi[F1][i]); for (i = 0; i < on2; i++) if (i != j2) printf("%c%s", sep1, ppi[F2][i]); printf("\n"); } else { for (i = 0; i < no; i++) { temp = ppi[olistf[i]][olist[i]]; if(olistf[i]==F1 && on1<=olist[i] || olistf[i]==F2 && on2<=olist[i] || *temp==0) temp = null; printf("%s", temp); if (i == no - 1) printf("\n"); else printf("%c", sep1); } } } error(s1, s2, s3, s4, s5) char *s1; { fprintf(stderr, "join: "); fprintf(stderr, s1, s2, s3, s4, s5); fprintf(stderr, "\n"); exit(1); } cmp(s1, s2) char *s1, *s2; { return(strcmp(s1, s2)); } ' ik0Ufilorux{~3i( int bflg; int dflg; int tflg; int iflg; int aflg; int sflg; struct { char name[8]; int type; unsigned value; } nl[] = { "_dk_busy", 0, 0, "_io_info", 0, 0, "\0\0\0\0\0\0\0\0", 0, 0 }; struct { int busy; long etime[32]; long numb[3]; long wds[3]; long tin; long tout; } s, s1; struct iostat { int nbuf; long nread; long nreada; long ncache; long nwrite; long bufcount[50]; } io_info, io_delta; double etime; int mf; main(argc, argv) char *argv[]; { extern char *ctime(); register i; int i((ter; double f1, f2; long t; nlist("/unix", nl); if(nl[0].type == -1) { printf("dk_busy not found in /unix namelist\n"); exit(1); } mf = open("/dev/kmem", 0); if(mf < 0) { printf("cannot open /dev/kmem\n"); exit(1); } iter = 0; while (argc>1&&argv[1][0]=='-') { if (argv[1][1]=='d') dflg++; else if (argv[1][1]=='s') sflg++; else if (argv[1][1]=='a') aflg++; else if (argv[1][1]=='t') tflg++; else if (argv[1][1]=='i') iflg++; else if (argv[1][1]=='b') bflg++; argc--; argv++; } if(argc > 2) iter = atoi(argv[2]); if (!(sflg|iflg)) { if(tflg) printf(" TTY"); if (bflg==0) printf(" RF RK RP PERCENT\n"); if(tflg) printf(" tin tout"); if (bflg==0) printf(" tpm msps mspt tpm msps mspt tpm msps mspt user nice systm idle\n"); } loop: lseek(mf, (long)nl[0].value, 0); read(mf, (char *)&s, sizeof s); for(i=0; i<40; i++) { t = s.etime[i]; s.etime[i] -= s1.etime[i]; s1.etime[i] = t; } t = 0; for(i=0; i<32; i++) t += s.etime[i]; etime = t; if(etime == 0.) etime = 1.; if (bflg) { biostats(); goto contin; } if (dflg) { long tm; time(&tm); printf("%s", ctime(&tm)); } if (aflg) printf("%.2f minutes total\n", etime/3600); if (sflg) { stats2(etime); goto contin; } if (iflg) { stats3(etime); goto contin; } etime /= 60.; if(tflg) { f1 = s.tin; f2 = s.tout; printf("%6.1f", f1/etime); printf("%6.1f", f2/etime); } for(i=0; i<3; i++) stats(i); for(i=0; i<4; i++) stat1(i*8); printf("\n"); contin: --iter; if(iter) if(argc > 1) { sleep(atoi(argv[1])); goto loop; } } /* usec per word for the various disks */ double xf[] = { 16.0, /* RF */ 11.1, /* RK03/05 */ 2.48, /* RP06 */ }; stats(dn) { register i; double f1, f2, f3; double f4, f5, f6; long t; t = 0; for(i=0; i<32; i++) if(i & (1< #include #include #include #define TABSIZ 100 #define ALL p = &itab[0]; p < &itab[TABSIZ]; p++ #define EVER ;; char shell[] = "/bin/sh"; char getty[] = "/etc/getty"; char minus[] = "-"; char runc[] = "/etc/rc"; char ifile[] = "/etc/ttys"; char utmp[] = "/etc/utmp"; char wtmpf[] = "/usr/adm/wtmp"; char ctty[] = "/dev/console"; char dev[] = "/dev/"; struct utmp wtmp; struct { char line[8]; char comn; char flag; } line; struct tab { char line[8]; char comn; int pid; } itab[TABSIZ]; int fi; char tty[20]; jmp_buf sjbuf; main() { int reset(); setjmp(sjbuf); signal(SIGHUP, reset); for(EVER) { shutdown(); single(); runcom(); merge(); multiple(); } } shutdown() { register i; register struct tab *p; signal(SIGINT, SIG_IGN); for(ALL) term(p); signal(SIGALRM, reset); alarm(60); for(i=0; i<5; i++) kill(-1, SIGKILL); while(wait((int *)0) != -1) ; alarm(0); signal(SIGALRM, SIG_DFL); for(i=0; i<10; i++) close(i); } single() { register pid; pid = fork(); if(pid == 0) { /* alarm(300); */ signal(SIGHUP, SIG_DFL); signal(SIGINT, SIG_DFL); signal(SIGALRM, SIG_DFL); open(ctty, 2); dup(0); dup(0); execl(shell, minus, (char *)0); exit(0); } while(wait((int *)0) != pid) ; } runcom() { register pid; pid = fork(); if(pid == 0) { open("/", 0); dup(0); dup(0); execl(shell, shell, runc, (char *)0); exit(0); } while(wait((int *)0) != pid) ; } multiple() { register struct tab *p; register pid; for(EVER) { pid = wait((int *)0); if(pid == -1) return; for(ALL) if(p->pid == pid || p->pid == -1) { rmut(p); dfork(p); } } } term(p) register struct tab *p; { if(p->pid != 0) { rmut(p); kill(p->pid, SIGKILL); } p->pid = 0; p->line[0] = 0; } rline() { register c, i; c = get(); if(c < 0) return(0); if(c == 0) goto bad; line.flag = c; c = get(); if(c <= 0) goto bad; line.comn = c; for(i=0; i<8; i++) line.line[i] = 0; for(i=0; i<7; i++) { c = get(); if(c <= 0) break; line.line[i] = c; } while(c > 0) c = get(); maktty(line.line); if(access(tty, 06) < 0) goto bad; return(1); bad: line.flag = '0'; return(1); } maktty(lin) char *lin; { register i, j; for(i=0; dev[i]; i++) tty[i] = dev[i]; for(j=0; lin[j]; j++) { tty[i] = lin[j]; i++; } tty[i] = 0; } get() { char b; if(read(fi, &b, 1) != 1) return(-1); if(b == '\n') return(0); return(b); } merge() { register struct tab *p, *q; register i; close(creat(utmp, 0644)); signal(SIGINT, merge); fi = open(ifile, 0); if(fi < 0) return; q = &itab[0]; while(rline()) { if(line.flag == '0') continue; for(ALL) { if(p->line[0] != 0) for(i=0; i<8; i++) if(p->line[i] != line.line[i]) goto contin; if(p >= q) { i = p->pid; p->pid = q->pid; q->pid = i; for(i=0; i<8; i++) p->line[i] = q->line[i]; p->comn = q->comn; for(i=0; i<8; i++) q->line[i] = line.line[i]; q->comn = line.comn; q++; } break; contin: ; } } close(fi); for(; q < &itab[TABSIZ]; q++) term(q); for(ALL) if(p->line[0] != 0 && p->pid == 0) dfork(p); } dfork(p) struct tab *p; { register pid; pid = fork(); if(pid == 0) { signal(SIGHUP, SIG_DFL); signal(SIGINT, SIG_DFL); maktty(p->line); chown(tty, 0, 0); chmod(tty, 0622); open(tty, 2); dup(0); dup(0); tty[0] = p->comn; tty[1] = 0; execl(getty, minus, tty, (char *)0); exit(0); } p->pid = pid; } rmut(p) register struct tab *p; { register i, f; f = open(utmp, 2); if(f >= 0) { while(read(f, (char *)&wtmp, sizeof(wtmp)) == sizeof(wtmp)) { for(i=0; i<8; i++) if(wtmp.ut_line[i] != p->line[i]) goto contin; lseek(f, -(long)sizeof(wtmp), 1); for(i=0; i<8; i++) wtmp.ut_name[i] = 0; time(&wtmp.ut_time); write(f, (char *)&wtmp, sizeof(wtmp)); contin:; } close(f); } f = open(wtmpf, 1); if (f >= 0) { for(i=0; i<8; i++) { wtmp.ut_name[i] = 0; wtmp.ut_line[i] = p->line[i]; } time(&wtmp.ut_time); lseek(f, (long)0, 2); write(f, (char *)&wtmp, sizeof(wtmp)); close(f); } } reset() { longjmp(sjbuf, 1); } '& kkZ@!$'*-036Vi( #define NI 16 #define NB 10 #define BITS 8 #define MAXFN 500 #ifndef STANDALONE #include #endif #include #include #include #include #include struct filsys sblock; struct dinode itab[INOPB*NI]; daddr_t iaddr[NADDR]; daddr_t blist[NB]; char *bmap; int sflg; int mflg; int dflg; int fi; ino_t ino; ino_t nrfile; ino_t ndfile; ino_t nbfile; ino_t ncfile; daddr_t ndirect; daddr_t nindir; daddr_t niindir; daddr_t niiindir; daddr_t nf((ree; daddr_t ndup; int nerror; long atol(); daddr_t alloc(); #ifndef STANDALONE char *malloc(); #endif main(argc, argv) char *argv[]; { register i; long n; blist[0] = -1; #ifndef STANDALONE while (--argc) { argv++; if (**argv=='-') switch ((*argv)[1]) { case 'd': dflg++; continue; case 'm': mflg++; continue; case 's': sflg++; continue; case 'b': for(i=0; i= mino) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= mino) break; ino++; pass1(&itab[j]); } } ino = 0; #ifndef STANDALONE sync(); #endif bread((daddr_t)1, (char *)&sblock, sizeof(sblock)); if (sflg) { makefree(); close(fi); #ifndef STANDALONE if (bmap) free(bmap); #endif return; } nfree = 0; while(n = alloc()) { if (chk(n, "free")) break; nfree++; } close(fi); #ifndef STANDALONE if (bmap) free(bmap); #endif i = nrfile + ndfile + ncfile + nbfile; #ifndef STANDALONE printf("files %6u (r=%u,d=%u,b=%u,c=%u)\n", i, nrfile, ndfile, nbfile, ncfile); #else printf("files %u (r=%u,d=%u,b=%u,c=%u)\n", i, nrfile, ndfile, nbfile, ncfile); #endif n = ndirect + nindir + niindir + niindir; #ifdef STANDALONE printf("used %ld (i=%ld,ii=%ld,iii=%ld,d=%ld)\n", n, nindir, niindir, niiindir, ndirect); printf("free %ld\n", nfree); #else printf("used %7ld (i=%ld,ii=%ld,iii=%ld,d=%ld)\n", n, nindir, niindir, niiindir, ndirect); printf("free %7ld\n", nfree); #endif if(!dflg) { n = 0; for(d=sblock.s_isize; ddi_mode & IFMT; if(i == 0) { sblock.s_tinode++; return; } if(i == IFCHR) { ncfile++; return; } if(i == IFBLK) { nbfile++; return; } if(i == IFDIR) ndfile++; else if(i == IFREG) nrfile++; else { printf("bad mode %u\n", ino); return; } l3tol(iaddr, ip->di_addr, NADDR); for(i=0; i=sblock.s_fsize) { printf("%ld bad; inode=%u, class=%s\n", bno, ino, s); return(1); } if(duped(bno)) { printf("%ld dup; inode=%u, class=%s\n", bno, ino, s); ndup++; } for (n=0; blist[n] != -1; n++) if (bno == blist[n]) printf("%ld arg; inode=%u, class=%s\n", bno, ino, s); return(0); } duped(bno) daddr_t bno'1 kk;h@!$'*-036Vi(; { daddr_t d; register m, n; if(dflg) return(0); d = bno - sblock.s_isize; m = 1 << (d%BITS); n = (d/BITS); if(bmap[n] & m) return(1); bmap[n] |= m; return(0); } daddr_t alloc() { int i; daddr_t bno; union { char data[BSIZE]; struct fblk fb; } buf; sblock.s_tfree--; if (sblock.s_nfree<=0) return(0); if (sblock.s_nfree>NICFREE) { printf("Bad free list, s.b. count = %d\n", sblock.s_nfree); return(0); } bno = sblock.s_free[--sblock.s_nfree]; sblock.s_free[sblock.s_nfree] = (daddr_t)0; if(bno == 0) return(bno); if(sblock.s_nfree <= 0) { bread(bno, buf.data, BSIZE); sblock.s_nfree = buf.df_nfree; if (sblock.s_nfree<0 || sblock.s_nfree>NICFREE) { printf("Bad free list, entry count of block %ld = %d\n", bno, sblock.s_nfree); sblock.s_nfree = 0; return(0); } for(i=0; i= NICFREE) { for(i=0; i MAXFN) n = MAXFN; sblock.s_n = n; m = sblock.s_m; if(m <= 0 || m > sblock.s_n) m = 3; sblock.s_m = m; for(i=0; i 0; d -= sblock.s_n) for(i=0; i= sblock.s_isize) if(!duped(f)) bfree(f); } bwrite((daddr_t)1, (char *)&sblock); #ifndef STANDALONE sync(); #endif return; } '8 lk 8]8] /* * grep -- print lines matching (or not matching) a pattern * * status returns: * 0 - ok, and some matches * 1 - ok, but no matches * 2 - some error */ #include #include #include #define CBRA 1 #define CCHR 2 #define CDOT 4 #define CCL 6 #define NCCL 8 #define CDOL 10 #define CEOF 11 #define CKET 12 #define CBACK 18 #define STAR 01 #define LBSIZE 512 #define ESIZE 256 #define NBRA 9 char expbuf[ESIZE]; long lnum; char linebuf[LBSIZE+1]; char ybuf[ESIZE]; int bflag; int lflag; int nflag; int cflag; int vflag; int nfile; int hflag = 1; int sflag; int yflag; int circf; long tln; int nsucc; char *braslist[NBRA]; char *braelist[NBRA]; char bittab[] = { 1, 2, 4, 8, 16, 32, 64, 128 }; main(argc, argv) char **argv; { while (--argc > 0 && (++argv)[0][0]=='-') switch (argv[0][1]) { case 'y': yflag++; continue; case 'h': hflag = 0; continue; case 's': sflag++; continue; case 'v': vflag++; continue; case 'b': bflag++; continue; case 'l': lflag++; continue; case 'c': cflag++; continue; case 'n': nflag++; continue; case 'e': --argc; ++argv; goto out; default: errexit("grep: unknown flag\n", (char *)NULL); continue; } out: if (argc<=0) exit(2); if (yflag) { register char *p, *s; for (s = ybuf, p = *argv; *p; ) { if (*p == '\\') { *s++ = *p++; if (*p) *s++ = *p++; } else if (*p == '[') { while (*p != '\0' && *p != ']') *s++ = *p++; }(( else if (islower(*p)) { *s++ = '['; *s++ = toupper(*p); *s++ = *p++; *s++ = ']'; } else *s++ = *p++; if (s >= ybuf+ESIZE-5) errexit("grep: argument too long\n", (char *)NULL); } *s = '\0'; *argv = ybuf; } compile(*argv); nfile = --argc; if (argc<=0) { if (lflag) exit(1); execute((char *)NULL); } else while (--argc >= 0) { argv++; execute(*argv); } exit(nsucc == 0); } compile(astr) char *astr; { register c; register char *ep, *sp; char *cstart; char *lastep; int cclcnt; char bracket[NBRA], *bracketp; int closed; char numbra; char neg; ep = expbuf; sp = astr; lastep = 0; bracketp = bracket; closed = numbra = 0; if (*sp == '^') { circf++; sp++; } for (;;) { if (ep >= &expbuf[ESIZE]) goto cerror; if ((c = *sp++) != '*') lastep = ep; switch (c) { case '\0': *ep++ = CEOF; return; case '.': *ep++ = CDOT; continue; case '*': if (lastep==0 || *lastep==CBRA || *lastep==CKET) goto defchar; *lastep |= STAR; continue; case '$': if (*sp != '\0') goto defchar; *ep++ = CDOL; continue; case '[': if(&ep[17] >= &expbuf[ESIZE]) goto cerror; *ep++ = CCL; neg = 0; if((c = *sp++) == '^') { neg = 1; c = *sp++; } cstart = sp; do { if (c=='\0') goto cerror; if (c=='-' && sp>cstart && *sp!=']') { for (c = sp[-2]; c<*sp; c++) ep[c>>3] |= bittab[c&07]; sp++; } ep[c>>3] |= bittab[c&07]; } while((c = *sp++) != ']'); if(neg) { for(cclcnt = 0; cclcnt < 16; cclcnt++) ep[cclcnt] ^= -1; ep[0] &= 0376; } ep += 16; continue; case '\\': if((c = *sp++) == '(') { if(numbra >= NBRA) { goto cerror; } *bracketp++ = numbra; *ep++ = CBRA; *ep++ = numbra++; continue; } if(c == ')') { if(bracketp <= bracket) { goto cerror; } *ep++ = CKET; *ep++ = *--bracketp; closed++; continue; } if(c >= '1' && c <= '9') { if((c -= '1') >= closed) goto cerror; *ep++ = CBACK; *ep++ = c; continue; } defchar: default: *ep++ = CCHR; *ep++ = c; } } cerror: errexit("grep: RE error\n", (char *)NULL); } execute(file) char *file; { register char *p1, *p2; register c; if (file) { if (freopen(file, "r", stdin) == NULL) errexit("grep: can't open %s\n", file); } lnum = 0; tln = 0; for (;;) { lnum++; p1 = linebuf; while ((c = getchar()) != '\n') { if (c == EOF) { if (cflag) { if (nfile>1) printf("%s:", file); printf("%D\n", tln); } return; } *p1++ = c; if (p1 >= &linebuf[LBSIZE-1]) break; } *p1++ = '\0'; p1 = linebuf; p2 = expbuf; if (circf) { if (advance(p1, p2)) goto found; goto nfound; } /* fast check for first character */ if (*p2==CCHR) { c = p2[1]; do { if (*p1!=c) continue; if (advance(p1, p2)) goto found; } while (*p1++); goto nfound; } /* regular algorithm */ do { if (advance(p1, p2)) goto found; } while (*p1++); nfound: if (vflag) succeed(file); continue; found: if (vflag==0) succeed(file); } } advance(lp, ep) register char *lp, *ep; { register char *curlp; char c; char *bbeg; int ct; for (;;) switch (*ep++) { case CCHR: if (*ep++ == *lp++) continue; return(0); case CDOT: if (*lp++) continue; return(0); case CDOL: if (*lp==0) continue; return(0); case CEOF: return(1); case CCL: c = *lp++ & 0177; if(ep[c>>3] & bittab[c & 07]) { ep += 16;'C lkꆬ 8]8] continue; } return(0); case CBRA: braslist[*ep++] = lp; continue; case CKET: braelist[*ep++] = lp; continue; case CBACK: bbeg = braslist[*ep]; if (braelist[*ep]==0) return(0); ct = braelist[*ep++] - bbeg; if(ecmp(bbeg, lp, ct)) { lp += ct; continue; } return(0); case CBACK|STAR: bbeg = braslist[*ep]; if (braelist[*ep]==0) return(0); ct = braelist[*ep++] - bbeg; curlp = lp; while(ecmp(bbeg, lp, ct)) lp += ct; while(lp >= curlp) { if(advance(lp, ep)) return(1); lp -= ct; } return(0); case CDOT|STAR: curlp = lp; while (*lp++); goto star; case CCHR|STAR: curlp = lp; while (*lp++ == *ep); ep++; goto star; case CCL|STAR: curlp = lp; do { c = *lp++ & 0177; } while(ep[c>>3] & bittab[c & 07]); ep += 16; goto star; star: if(--lp == curlp) { continue; } if(*ep == CCHR) { c = ep[1]; do { if(*lp != c) continue; if(advance(lp, ep)) return(1); } while(lp-- > curlp); return(0); } do { if (advance(lp, ep)) return(1); } while (lp-- > curlp); return(0); default: errexit("grep RE botch\n", (char *)NULL); } } succeed(f) char *f; { long ftell(); nsucc = 1; if (sflag) return; if (cflag) { tln++; return; } if (lflag) { printf("%s\n", f); fseek(stdin, 0l, 2); return; } if (nfile > 1 && hflag) printf("%s:", f); if (bflag) printf("%ld:", (ftell(stdin)-1)/BSIZE); if (nflag) printf("%ld:", lnum); printf("%s\n", linebuf); } ecmp(a, b, count) char *a, *b; { register cc = count; while(cc--) if(*a++ != *b++) return(0); return(1); } errexit(s, f) char *s, *f; { fprintf(stderr, s, f); exit(2); } 'H mkJjnySyS # /* * getty -- adapt to terminal speed on dialup, and call login */ #include #include #define ERASE '#' #define KILL '@' struct sgttyb tmode; struct tchars tchars = { '\177', '\034', '\021', '\023', '\004', '\377' }; struct tab { char tname; /* this table name */ char nname; /* successor table name */ int iflags; /* initial flags */ int fflags; /* final flags */ int ispeed; /* input speed */ int ospeed; /* output speed */ char *message; /* login message */ } itab[] = { /* table '0'-1-2-3 300,1200,150,110 */ '0', 1, ANYP+RAW+NL1+CR1, ANYP+ECHO+CR1, B300, B300, "\n\r\033;\007login: ", 1, 2, ANYP+RAW+NL1+CR1, ANYP+XTABS+ECHO+CRMOD+FF1, B1200, B1200, "\n\r\033;login: ", 2, 3, ANYP+RAW+NL1+CR1, EVENP+ECHO+FF1+CR2+TAB1+NL1, B150, B150, "\n\r\033:\006\006\017login: ", 3, '0', ANYP+RAW+NL1+CR1, ANYP+ECHO+CRMOD+XTABS+LCASE+CR1, B110, B110, "\n\rlogin: ", /* table '-' -- Console TTY 110 */ '-', '-', ANYP+RAW+NL1+CR1, ANYP+ECHO+CRMOD+XTABS+LCASE+CR1, B110, B110, "\n\rlogin: ", /* table '1' -- 150 */ '1', '1', ANYP+RAW+NL1+CR1, EVENP+ECHO+FF1+CR2+TAB1+NL1, B150, B150, "\n\r\033:\006\006\017login: ", /* table '2' -- 9600 */ '2', '2', ANYP+RAW+NL1+CR1, ANYP+XTABS+ECHO+CRMOD+FF1, B9600, B9600, "\n\r\033;login: ", /* table '3'-'5' -- 1200,300 */ '3', '5', ANYP+RAW+NL1+CR1, ANYP+XTABS+ECHO+CRMOD+FF1, B1200, B1200, "\n\r\033;login: ", /* table '5'-'3' -- 300,1200 */ '5', '3', ANYP+RAW+NL1+CR1, ANYP+ECHO+CR1, B300, B300, "\n\r\033;\007login: ", /* table '4' -- Console Decwriter */ '4', '4', ANYP+RAW, ANYP+ECHO+CRMOD+XTABS, B300, B300, "\n\rlogin: ", /* table 'i' -- Interdata Console */ 'i', 'i', RAW+CRMOD, CRMOD+ECHO+LCASE, 0, 0, "\n\rlogin: ", /* table 'l' -- LSI Chess Terminal */ 'l', 'l', ANYP+RAW/*+HUPCL*/, ANYP+ECHO/*+HUPCL*/, B300, B300, "*", /* table '6' -- 2400 11/23 line */ '6', '6', ANYP+RAW+NL1+CR1, ANYP+ECHO, B2400, B2400, "\n\rlogin: ", }; #define NITAB sizeof itab/sizeof itab[0] #define EOT 04 /* EOT char */ char name[16]; int crmod; int upper; int lower; char partab[] = { 0001,0201,0201,0001,0201,0001,0001,0201, 0202,0004,0003,0205,0005,0206,0201,0001, 0201,0001,0001,0201,0001,0201,0201,0001, 0001,0201,0201,0001,0201,0001,0001,0201, 0200,0000,0000,0200,0000,0200,0200,0000, 0000,0200,0200,0000,0200,0000,0000,0200, 0000,0200,0200,0000,0200,0000,0000,0200, 0200,0000,0000,0200,0000,0200,0200,0000, 0200,0000,0000,0200,0000,0200,0200,0000, 0000,0200,0200,0000,0200,0000,0000,0200, 0000,0200,0200,0000,0200,0000,0000,0200, 0200,0000,0000,0200,0000,0200,0200,0000, 0000,0200,0200,0000,0200,0000,0000,0200, 0200,0000,0000,0200,0000,0200,0200,0000, 0200,0000,0000,0200,0000,0200,0200,0000, 0000,0200,0200,0000,0200,0000,0000,0201 }; main(argc, argv) char **argv; { register struct tab *tabp; int tname; tname = '0'; if (argc > 1) tname = argv[1][0]; switch (tname) { case '3': /* adapt to connect speed (212) */ ioctl(0, TIOCGETP, &tmode); if (tmode.sg_ispeed==B300) tname = '0'; else tname = '3'; break; } for (;;) { for(tabp = itab; tabp < &itab[NITAB]; tabp++) if(tabp->tname == tname) break; if(tabp >= &itab[NITAB]) tabp = itab; tmode.sg_flags = tabp->iflags; tmode.sg_ispeed = tabp->ispeed; tmode.sg_ospeed = tabp->ospeed; ioctl(0, TIOCSETP, &tmode); ioctl(0, TIOCSETC, &tchars); puts(tabp->message); if(getname()) { tmode.sg_erase = ERASE; tmode.sg_kill = KILL; tmode.sg_flags = tabp->fflags; if(crmod) tmode.sg_flags |= CRMOD; if(upper) tmode.((sg_flags |= LCASE; if(lower) tmode.sg_flags &= ~LCASE; stty(0, &tmode); putchr('\n'); execl("/bin/login", "login", name, 0); exit(1); } tname = tabp->nname; } } getname() { register char *np; register c; char cs; crmod = 0; upper = 0; lower = 0; np = name; for (;;) { if (read(0, &cs, 1) <= 0) exit(0); if ((c = cs&0177) == 0) return(0); if (c==EOT) exit(1); if (c=='\r' || c=='\n' || np >= &name[16]) break; putchr(cs); if (c>='a' && c <='z') lower++; else if (c>='A' && c<='Z') { upper++; c += 'a'-'A'; } else if (c==ERASE) { if (np > name) np--; continue; } else if (c==KILL) { putchr('\r'); putchr('\n'); np = name; continue; } else if(c == ' ') c = '_'; *np++ = c; } *np = 0; if (c == '\r') crmod++; return(1); } puts(as) char *as; { register char *s; s = as; while (*s) putchr(*s++); } putchr(cc) { char c; c = cc; c |= partab[c&0177] & 0200; write(1, &c, 1); } 'R nkvi' /* * determine type of file */ #include #include #include #include int in; int i = 0; char buf[512]; char *fort[] = { "function","subroutine","common","dimension","block","integer", "real","data","double",0}; char *asc[] = { "sys","mov","tst","clr","jmp",0}; char *c[] = { "int","char","float","double","struct","extern",0}; char *as[] = { "globl","byte","even","text","data","bss","comm",0}; int ifile; main(argc, argv) char **argv; { FILE *fl; register char *p; char ap[128]; if (argc>1 && argv[1][0]=='-' && argv[1][1]=='f') { if ((fl = fopen(argv[2], "r")) == NULL) { printf("Can't open %s\n", argv[2]); exit(2); } while ((p = fgets(ap, 128, fl)) != NULL) { int l = strlen(p); if (l>0) p[l-1] = '\0'; printf("%s: ", p); type(p); if (ifile>=0) close(ifile); } exit(1); } while(argc > 1) { printf("%s: ", argv[1]); type(argv[1]); argc--; argv++; if (ifile >= 0) close(ifile); } } type(file) char *file; { int j,nl; char ch; struct stat mbuf; ifile = -1; if(stat(file, &mbuf) < 0) { printf("cannot stat\n"); return; } switch (mbuf.st_mode & S_IFMT) { case S_IFCHR: printf("character"); goto spcl; case S_IFDIR: printf("directory\n"); return; case S_IFBLK: printf("block"); spcl: printf(" special (%d/%d)\n", major(mbuf.st_rdev), minor(mbuf.st_rdev)); return; } ifile = open(file, 0); if(ifile < 0) { printf("cannot open\n"); return; } in = read(ifile, buf, 512); if(in == 0){ printf("empty\n"); return; } switch(*(int *)buf) { case 0410: printf("pure "); goto exec; case 0411: printf("separate "); case 0407: exec: printf("executable"); if(((int *)buf)[4] != 0) printf(" not stripped"); printf("\n"); goto out; case 0177555: printf("old archive\n"); goto out; case 0177545: printf("archive\n"); goto out; } i = 0; if(ccom() == 0)goto notc; while(buf[i] == '#'){ j = i; while(buf[i++] != '\n'){ if(i - j > 255){ printf("data\n"); goto out; } if(i >= in)goto notc; } if(ccom() == 0)goto notc; } check: if(lookup(c) == 1){ while((ch = buf[i++]) != ';' && ch != '{')if(i >= in)goto notc; printf("c program text"); goto outa; } nl = 0; while(buf[i] != '('){ if(buf[i] <= 0) goto notas; if(buf[i] == ';'){ i++; goto check; } if(buf[i++] == '\n') if(nl++ > 6)goto notc; if(i >= in)goto notc; } while(buf[i] != ')'){ if(buf[i++] == '\n') if(nl++ > 6)goto notc; if(i >= in)goto notc; } while(buf[i] != '{'){ if(buf[i++] == '\n') if(nl++ > 6)goto notc; if(i >= in)goto notc; } printf("c program text"); goto outa; notc: i = 0; while(buf[i] == 'c' || buf[i] == '#'){ while(buf[i++] != '\n')if(i >= in)goto notfort; } if(lookup(fort) == 1){ printf("fortran program text"); goto outa; } notfort: i=0; if(ascom() == 0)goto notas; j = i-1; if(buf[i] == '.'){ i++; if(lookup(as) == 1){ printf("assembler program text"); goto outa; } else if(buf[j] == '\n' && isalpha(buf[j+2])){ printf("roff, nroff, or eqn input text"); goto outa; } } while(lookup(asc) == 0){ if(ascom() == 0)goto notas; while(buf[i] != '\n' && buf[i++] != ':') if(i >= in)goto notas; while(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\t')if(i++ >= in)goto notas; j = i-1; if(buf[i] == '.'){ i++; if(lookup(as) == 1){ printf("assembler program text"); goto outa; } else if(buf[j] == '\n' && isalpha(buf[j+2])){ printf("roff, nroff, or eqn input text"); goto outa; } } } printf("assembler program text"); goto outa; notas: for(i=0; i < in; i++)if(buf[i]&0200){ if (buf[0]=='\100' && buf[1]=='\357') { printf("troff output\n"); goto out; } printf("data\n"); goto out; } if (mbuf.st_mode&((S_IEXEC)|(S_IEXEC>>3)|(S_IEXEC>>6))) printf("commands text"); else if (english(buf, in)) printf("English text"); else printf("ascii text"); outa: while(i < in) if((buf[i++]&0377) > 127){ printf(" with garbage\n"); goto out; } /* if next few lines in then read whole file looking for nulls ... while((in = read(ifile,buf,512)) > 0) for(i = 0; i < in; i++) if((buf[i]&0377) > 127){ printf(" with garbage\n"); goto out; } /*.... */ printf("\n"); out:; } lookup(tab) char *tab[]; { char r; int k,j,l; while(buf[i] == ' ' || buf[i] == '\t' || buf[i] == '\n')i++; for(j=0; tab[j] != 0; j++){ l=0; for(k=i; ((r=tab[j][l++]) == buf[k] && r != '\0');k++); if(r == '\0') if(buf[k] == ' ' || buf[k] == '\n' || buf[k] == '\t' || buf[k] == '{' || buf[k] == '/'){ i=k; return(1); } } return(0); } ccom(){ char cc; while((cc = buf[i]) == ' ' || cc == '\t' || cc == '\n')if(i++ >= in)return(0); if(buf[i] == '/' && buf[i+1] == '*'){ i += 2; while(buf[i] != '*' || buf[i+1] != '/'){ if(buf[i] == '\\')i += 2; else i++; if(i >= in)return(0); } if((i += 2) >= in)return(0); } if(buf[i] == '\n')if(ccom() == 0)return(0); return(1); } ascom(){ while(buf[i] == '/'){ i++; while(buf[i++'] nkhzi'] != '\n')if(i >= in)return(0); while(buf[i] == '\n')if(i++ >= in)return(0); } return(1); } english (bp, n) char *bp; { # define NASC 128 int ct[NASC], j, vow, freq, rare; int badpun = 0, punct = 0; if (n<50) return(0); /* no point in statistics on squibs */ for(j=0; j punct) return(0); vow = ct['a'] + ct['e'] + ct['i'] + ct['o'] + ct['u']; freq = ct['e'] + ct['t'] + ct['a'] + ct['i'] + ct['o'] + ct['n']; rare = ct['v'] + ct['j'] + ct['k'] + ct['q'] + ct['x'] + ct['z']; if (2*ct[';'] > ct['e']) return(0); if ( (ct['>']+ct['<']+ct['/'])>ct['e']) return(0); /* shell file test */ return (vow*5 >= n-ct[' '] && freq >= 10*rare); } '` okw!vy|DD /* * fgrep -- print all lines containing any of a set of keywords * * status returns: * 0 - ok, and some matches * 1 - ok, but no matches * 2 - some error */ #include #define MAXSIZ 6000 #define QSIZE 400 struct words { char inp; char out; struct words *nst; struct words *link; struct words *fail; } w[MAXSIZ], *smax, *q; long lnum; int bflag, cflag, fflag, lflag, nflag, vflag, xflag; int hflag = 1; int sflag; int nfile; long blkno; int nsucc; long tln; FILE *wordf; char *argptr; main(argc, argv) char **argv; { while (--argc > 0 && (++argv)[0][0]=='-') switch (argv[0][1]) { case 's': sflag++; continue; case 'h': hflag = 0; continue; case 'b': bflag++; continue; case 'c': cflag++; continue; case 'e': argc--; argv++; goto out; case 'f': fflag++; continue; case 'l': lflag++; continue; case 'n': nflag++; continue; case 'v': vflag++; continue; case 'x': xflag++; continue; default: fprintf(stderr, "egrep: unknown flag\n"); continue; } out: if (argc<=0) exit(2); if (fflag) { wordf = fopen(*argv, "r"); if (wordf==NULL) { fprintf(stderr, "egrep: can't open %s\n", *argv); exit(2); } } else argptr = *argv; argc--; argv++; cgotofn(); cfail(); nfile = argc; if (argc<=0) { if (lflag) exit(1); execute((char *)NULL); } else while (--argc >= 0) { execute(*argv); argv++; } exit(nsucc == 0); } execute(file) char *file; { register char *p; register struct wo((rds *c; register ccount; char buf[1024]; int f; int failed; char *nlp; if (file) { if ((f = open(file, 0)) < 0) { fprintf(stderr, "fgrep: can't open %s\n", file); exit(2); } } else f = 0; ccount = 0; failed = 0; lnum = 1; tln = 0; blkno = 0; p = buf; nlp = p; c = w; for (;;) { if (--ccount <= 0) { if (p == &buf[1024]) p = buf; if (p > &buf[512]) { if ((ccount = read(f, p, &buf[1024] - p)) <= 0) break; } else if ((ccount = read(f, p, 512)) <= 0) break; blkno += ccount; } nstate: if (c->inp == *p) { c = c->nst; } else if (c->link != 0) { c = c->link; goto nstate; } else { c = c->fail; failed = 1; if (c==0) { c = w; istate: if (c->inp == *p) { c = c->nst; } else if (c->link != 0) { c = c->link; goto istate; } } else goto nstate; } if (c->out) { while (*p++ != '\n') { if (--ccount <= 0) { if (p == &buf[1024]) p = buf; if (p > &buf[512]) { if ((ccount = read(f, p, &buf[1024] - p)) <= 0) break; } else if ((ccount = read(f, p, 512)) <= 0) break; blkno += ccount; } } if ( (vflag && (failed == 0 || xflag == 0)) || (vflag == 0 && xflag && failed) ) goto nomatch; succeed: nsucc = 1; if (cflag) tln++; else if (sflag) ; /* ugh */ else if (lflag) { printf("%s\n", file); close(f); return; } else { if (nfile > 1 && hflag) printf("%s:", file); if (bflag) printf("%ld:", (blkno-ccount-1)/512); if (nflag) printf("%ld:", lnum); if (p <= nlp) { while (nlp < &buf[1024]) putchar(*nlp++); nlp = buf; } while (nlp < p) putchar(*nlp++); } nomatch: lnum++; nlp = p; c = w; failed = 0; continue; } if (*p++ == '\n') if (vflag) goto succeed; else { lnum++; nlp = p; c = w; failed = 0; } } close(f); if (cflag) { if (nfile > 1) printf("%s:", file); printf("%ld\n", tln); } } getargc() { register c; if (wordf) return(getc(wordf)); if ((c = *argptr++) == '\0') return(EOF); return(c); } cgotofn() { register c; register struct words *s; s = smax = w; nword: for(;;) { c = getargc(); if (c==EOF) return; if (c == '\n') { if (xflag) { for(;;) { if (s->inp == c) { s = s->nst; break; } if (s->inp == 0) goto nenter; if (s->link == 0) { if (smax >= &w[MAXSIZ -1]) overflo(); s->link = ++smax; s = smax; goto nenter; } s = s->link; } } s->out = 1; s = w; } else { loop: if (s->inp == c) { s = s->nst; continue; } if (s->inp == 0) goto enter; if (s->link == 0) { if (smax >= &w[MAXSIZ - 1]) overflo(); s->link = ++smax; s = smax; goto enter; } s = s->link; goto loop; } } enter: do { s->inp = c; if (smax >= &w[MAXSIZ - 1]) overflo(); s->nst = ++smax; s = smax; } while ((c = getargc()) != '\n' && c!=EOF); if (xflag) { nenter: s->inp = '\n'; if (smax >= &w[MAXSIZ -1]) overflo(); s->nst = ++smax; } smax->out = 1; s = w; if (c != EOF) goto nword; } overflo() { fprintf(stderr, "wordlist too large\n"); exit(2); } cfail() { struct words *queue[QSIZE]; struct words **front, **rear; struct words *state; register char c; register struct words *s; s = w; front = rear = queue; init: if ((s->inp) != 0) { *rear++ = s->nst; if (rear >= &queue[QSIZE - 1]) overflo(); } if ((s = s->link) != 0) { goto init; } while (rear!=front) { s = *front; if (front == &queue[QSIZE-1])'k okz!vy|DD front = queue; else front++; cloop: if ((c = s->inp) != 0) { *rear = (q = s->nst); if (front < rear) if (rear >= &queue[QSIZE-1]) if (front == queue) overflo(); else rear = queue; else rear++; else if (++rear == front) overflo(); state = s->fail; floop: if (state == 0) state = w; if (state->inp == c) { q->fail = state->nst; if ((state->nst)->out == 1) q->out = 1; continue; } else if ((state = state->link) != 0) goto floop; } if ((s = s->link) != 0) goto cloop; } } 'n pk{޴ai' /* * Editor */ #include #include #include #define NULL 0 #define FNSIZE 64 #define LBSIZE 512 #define ESIZE 128 #define GBSIZE 256 #define NBRA 5 #define EOF -1 #define KSIZE 9 #define CBRA 1 #define CCHR 2 #define CDOT 4 #define CCL 6 #define NCCL 8 #define CDOL 10 #define CEOF 11 #define CKET 12 #define CBACK 14 #define STAR 01 char Q[] = ""; char T[] = "TMP"; #define READ 0 #define WRITE 1 int peekc; int lastc; char savedfile[FNSIZE]; char file[FNSIZE]; char linebuf[LBSIZE]; char rhsbuf[LBSIZE/2]; char expbuf[ESIZE+4]; int circfl; int *zero; int *dot; int *dol; int *addr1; int *addr2; char genbuf[LBSIZE]; long count; char *nextip; char *linebp; int ninbuf; int io; int pflag; long lseek(); int (*oldhup)(); int (*oldquit)(); int vflag = 1; int xflag; int xtflag; int kflag; char key[KSIZE + 1]; char crbuf[512]; char perm[768]; char tperm[768]; int listf; int col; char *globp; int tfile = -1; int tline; char *tfname; char *loc1; char *loc2; char *locs; char ibuff[512]; int iblock = -1; char obuff[512]; int oblock = -1; int ichanged; int nleft; char WRERR[] = "WRITE ERROR"; int names[26]; int anymarks; char *braslist[NBRA]; char *braelist[NBRA]; int nbra; int subnewa; int subolda; int fchange; int wrapp; unsigned nlall = 128; int *address(); char *getline(); char *getblock(); char *place(); char *mktemp(); char *malloc(); char *realloc(); jmp_buf savej; main(argc, argv) char **argv; { register char *p1, *p2; extern int onintr(), quit(), onhup(); int (*oldintr)(); oldquit = signal(SIGQUIT, SIG_IGN); oldhup = signal(SIGHUP, SIG_IGN); oldintr = signal(SIGINT, SIG_IGN); if ((int)signal(SIGTERM, SIG_IGN) == 0) signal(SIGTERM, quit); argv++; while (argc > 1 && **argv=='-') { switch((*argv)[1]) { case '\0': vflag = 0; break; case 'q': signal(SIGQUIT, SIG_DFL); vflag = 1; break; case 'x': xflag = 1; break; } argv++; argc--; } if(xflag){ getkey(); kflag = crinit(key, perm); } if (argc>1) { p1 = *argv; p2 = savedfile; while (*p2++ = *p1++) ; globp = "r"; } zero = (int *)malloc(nlall*sizeof(int)); tfname = mktemp("/tmp/eXXXXX"); init(); if (((int)oldintr&01) == 0) signal(SIGINT, onintr); if (((int)oldhup&01) == 0) signal(SIGHUP, onhup); setjmp(savej); commands(); quit(); } commands() { int getfile(), gettty(); register *a1, c; for (;;) { if (pflag) { pflag = 0; addr1 = addr2 = dot; goto print; } addr1 = 0; addr2 = 0; do { addr1 = addr2; if ((a1 = address())==0) { c = getchr(); break; } addr2 = a1; if ((c=getchr()) == ';') { c = ','; dot = a1; } } while (c==','); if (addr1==0) addr1 = addr2; switch(c) { case 'a': setdot(); newline(); append(gettty, addr2); continue; case 'c': delete(); append(gettty, addr1-1); continue; case 'd': delete(); continue; case 'E': fchange = 0; c = 'e'; case 'e': setnoaddr(); if (vflag && fchange) { fchange = 0; error(Q); } filename(c); init(); addr2 = zero; goto caseread; case 'f': setnoaddr(); filename(c); puts(savedfile); continue; case 'g': global(1); continue; case 'i': setdot(); nonzero(); newline(); append(gettty, addr2-1); continue; case 'j': if (addr2==0) { addr1 = dot; addr2 = dot+1; } setdot(); newline(); nonzero(); join(); continue; case 'k': if ((c = getchr()) < 'a' || c > 'z') error(Q); newline(); setdot(); nonzero(); names[c-'a'] = *addr2 & ~01; anymarks |= 01; continue; case 'm': move(0); continue; case '\n': if (addr2==0) addr2 = dot+1; addr1 = addr2; goto print; case 'l': listf++; case 'p': case 'P': newline(); print: setdot(); nonzero(); a1 = addr1; do { puts(getline(*a1++)); } while (a1 <= addr2); dot = addr2; listf = 0; continue; case 'Q': fchange = 0; case 'q': setnoaddr(); newline(); quit(); case 'r': filename(c); caseread: if ((io = open(file, 0)) < 0) { lastc = '\n'; error(file); } setall(); ninbuf = 0; c = zero != dol; append(getfile, addr2); exfile(); fchange = c; continue; case 's': setdot(); nonzero(); substitute(globp!=0); continue; case 't': move(1); continue; case 'u': setdot(); nonzero(); newline(); if ((*addr2&~01) != subnewa) error(Q); *addr2 = subolda; dot = addr2; continue; case 'v': global(0); continue; case 'W': wrapp++; case 'w': setall(); nonzero(); filename(c); if(!wrapp || ((io = open(file,1)) == -1) || ((lseek(io, 0L, 2)) == -1)) if ((((io = creat(file, 0666)) < 0) error(file); wrapp = 0; putfile(); exfile(); if (addr1==zero+1 && addr2==dol) fchange = 0; continue; case 'x': setnoaddr(); newline(); xflag = 1; puts("Entering encrypting mode!"); getkey(); kflag = crinit(key, perm); continue; case '=': setall(); newline(); count = (addr2-zero)&077777; putd(); putchr('\n'); continue; case '!': callunix(); continue; case EOF: return; } error(Q); } } int * address() { register *a1, 'y pkϴai'minus, c; int n, relerr; minus = 0; a1 = 0; for (;;) { c = getchr(); if ('0'<=c && c<='9') { n = 0; do { n *= 10; n += c - '0'; } while ((c = getchr())>='0' && c<='9'); peekc = c; if (a1==0) a1 = zero; if (minus<0) n = -n; a1 += n; minus = 0; continue; } relerr = 0; if (a1 || minus) relerr++; switch(c) { case ' ': case '\t': continue; case '+': minus++; if (a1==0) a1 = dot; continue; case '-': case '^': minus--; if (a1==0) a1 = dot; continue; case '?': case '/': compile(c); a1 = dot; for (;;) { if (c=='/') { a1++; if (a1 > dol) a1 = zero; } else { a1--; if (a1 < zero) a1 = dol; } if (execute(0, a1)) break; if (a1==dot) error(Q); } break; case '$': a1 = dol; break; case '.': a1 = dot; break; case '\'': if ((c = getchr()) < 'a' || c > 'z') error(Q); for (a1=zero; a1<=dol; a1++) if (names[c-'a'] == (*a1 & ~01)) break; break; default: peekc = c; if (a1==0) return(0); a1 += minus; if (a1dol) error(Q); return(a1); } if (relerr) error(Q); } } setdot() { if (addr2 == 0) addr1 = addr2 = dot; if (addr1 > addr2) error(Q); } setall() { if (addr2==0) { addr1 = zero+1; addr2 = dol; if (dol==zero) addr1 = zero; } setdot(); } setnoaddr() { if (addr2) error(Q); } nonzero() { if (addr1<=zero || addr2>dol) error(Q); } newline() { register c; if ((c = getchr()) == '\n') return; if (c=='p' || c=='l') { pflag++; if (c=='l') listf++; if (getchr() == '\n') return; } error(Q); } filename(comm) { register char *p1, *p2; register c; count = 0; c = getchr(); if (c=='\n' || c==EOF) { p1 = savedfile; if (*p1==0 && comm!='f') error(Q); p2 = file; while (*p2++ = *p1++) ; return; } if (c!=' ') error(Q); while ((c = getchr()) == ' ') ; if (c=='\n') error(Q); p1 = file; do { *p1++ = c; if (c==' ' || c==EOF) error(Q); } while ((c = getchr()) != '\n'); *p1++ = 0; if (savedfile[0]==0 || comm=='e' || comm=='f') { p1 = savedfile; p2 = file; while (*p1++ = *p2++) ; } } exfile() { close(io); io = -1; if (vflag) { putd(); putchr('\n'); } } onintr() { signal(SIGINT, onintr); putchr('\n'); lastc = '\n'; error(Q); } onhup() { signal(SIGINT, SIG_IGN); signal(SIGHUP, SIG_IGN); if (dol > zero) { addr1 = zero+1; addr2 = dol; io = creat("ed.hup", 0666); if (io > 0) putfile(); } fchange = 0; quit(); } error(s) char *s; { register c; wrapp = 0; listf = 0; putchr('?'); puts(s); count = 0; lseek(0, (long)0, 2); pflag = 0; if (globp) lastc = '\n'; globp = 0; peekc = lastc; if(lastc) while ((c = getchr()) != '\n' && c != EOF) ; if (io > 0) { close(io); io = -1; } longjmp(savej, 1); } getchr() { char c; if (lastc=peekc) { peekc = 0; return(lastc); } if (globp) { if ((lastc = *globp++) != 0) return(lastc); globp = 0; return(EOF); } if (read(0, &c, 1) <= 0) return(lastc = EOF); lastc = c&0177; return(lastc); } gettty() { register c; register char *gf; register char *p; p = linebuf; gf = globp; while ((c = getchr()) != '\n') { if (c==EOF) { if (gf) peekc = c; return(c); } if ((c &= 0177) == 0) continue; *p++ = c; if (p >= &linebuf[LBSIZE-2]) error(Q); } *p++ = 0; if (linebuf[0]=='.' && linebuf[1]==0) return(EOF); return(0); } getfile() { register c; register char *lp, *fp; lp = linebuf; fp = nextip; do { if (--ninbuf < 0) { if ((ninbuf = read(io, genbuf, LBSIZE)-1) < 0) return(EOF); fp = genbuf; while(fp < &genbuf[ninbuf]) { if (*fp++ & 0200) { if (kflag) crblock(perm, genbuf, ninbuf+1, count); break; } } fp = genbuf; } c = *fp++; if (c=='\0') continue; if (c&0200 || lp >= &linebuf[LBSIZE]) { lastc = '\n'; error(Q); } *lp++ = c; count++; } while (c != '\n'); *--lp = 0; nextip = fp; return(0); } putfile() { int *a1, n; register char *fp, *lp; register nib; nib = 512; fp = genbuf; a1 = addr1; do { lp = getline(*a1++); for (;;) { if (--nib < 0) { n = fp-genbuf; if(kflag) crblock(perm, genbuf, n, count-n); if(write(io, genbuf, n) != n) { puts(WRERR); error(Q); } nib = 511; fp = genbuf; } count++; if ((*fp++ = *lp++) == 0) { fp[-1] = '\n'; break; } } } while (a1 <= addr2); n = fp-genbuf; if(kflag) crblock(perm, genbuf, n, count-n); if(write(io, genbuf, n) != n) { puts(WRERR); error(Q); } } append(f, a) int *a; int (*f)(); { register *a1, *a2, *rdot; int nline, tl; nline = 0; dot = a; while ((*f)() == 0) { if ((dol-zero)+1 >= nlall) { int *ozero = zero; nlall += 512; free((char *)zero); if ((zero = (int *)realloc((char *)zero, nlall*sizeof(int)))==NULL) { lastc = '\n'; zero = ozero; error("MEM?"); } dot += zero - ozero; dol += zero - ozero; } tl = putline(); nline++; a1 = ++dol; a2 = a1+1; rdot = ++dot; while (a1 > rdot) *--a2 = *--a1; *rdot = tl; } return(nline); } callunix() { register (*savint)(), pid, rpid; int retcode; setnoaddr(); if ((pid = fork()) == 0) { signal(SIGHUP, oldhup); signal(SIGQUIT, oldquit); execl("/bin/sh", "sh", "-t", 0); exit(0100); } savint = signal(SIGINT, SIG_IGN); while ((rpid = wait(&retcode)) != pid && rpid != -1) ; signal(SIGINT, savint); puts("!"); } quit() { if (vflag && fchange && dol!=zero) { fchange = 0; error(Q); } unlink(tfname); exit(0); } delete() { setdot(); newline(); nonzero(); rdelete(addr1, addr2); } rdelete(ad1, ad2) int *ad1, *ad2; { register *a1, *a2, *a3; a1 = ad1; a2 = ad2+1; a3 = dol; dol -= a2 - a1; do { *a1++ = *a2++; } while (a2 <= a3); a1 = ad1; if (a1 > dol) a1 = dol; dot = a1; fchange = 1; } gdelete() { register *a1, *a2, *a3; a3 = dol; for (a1=zero+1; (*a1&01)==0; a1++) if (a1>=a3) return; for (a2=a1+1; a2<=a3;) { if (*a2&01) { a2++; dot = a1; } else *a1++ = *a2++; } dol = a1-1; if (dot>dol) dot = dol; fchange = 1; } char * getline(tl) { register char *bp, *lp; register nl; lp = linebuf; bp = getblock(tl, READ); nl = nleft; tl &= ~0377; while (*lp++ = *bp++) if (--nl == 0) { bp = getblock(tl+=0400, READ); nl = nleft; } return(linebuf); } putline() { register char *bp, *lp; register nl; int tl; fchange = 1; lp = linebuf; tl = tline; bp = getblock(tl, WRITE); nl = nleft; tl &= ~0377; while (*bp = *lp++) { if (*bp++ == '\n') { *--bp = 0; linebp = lp; break; } if (--nl == 0) { bp = getblock(tl+=0400, WRITE); nl = nleft; } } nl = tline; tline += (((lp-linebuf)+03)>>1)&077776; return(nl); } char * getblock(atl, iof) { extern read(), write(); register bno, off; register char *p1, *p2; register int n; bno = (atl>>8)&0377; off = (atl<<1)&0774; if (bno >= 255) { lastc = '\n'; error(T); } nleft = 512 - off; if (bno==iblock) { ichanged |= iof; return(ibuff+off); } if (bno==oblock) return(obuff+off); if (iof==READ) { if (ichanged) { if(xtflag) crblock(tperm, ibuff, 512, (long)0); blkio(iblock, ibuff, write); } ichanged = 0; iblock = bno; blkio(bno, ibuff, read); if(xtflag) crblock(tperm, ibuff, 512, (long)0); return(ibuff+off); } if (oblock>=0) { if(xtflag) { p1 = obuff; p2 = crbuf; n = 512; while(n--) *p2++ = *p1++; crblock(tperm, crbuf, 512, (long)0); blkio(oblock, crbuf, write); } else blkio(oblock, obuff, write); } oblock = bno; return(obuff+off); } blkio(b, buf, iofcn) char *buf; int (*iofcn)(); { lseek(tfile, (long)b<<9, 0); if ((*iofcn)(tfile, buf, 512) != 512) { error(T); } } init() { register *markp; close(tfile); tline = 2; for (markp = names; markp < &names[26]; ) *markp++ = 0; subnewa = 0; anymarks = 0; iblock = -1; oblock = -1; ichanged = 0; close(creat(tfname, 0600)); tfile = open(tfname, 2); if(xflag) { xtflag = 1; makekey(key, tperm); } dot = dol = zero; } global(k) { register char *gp; register c; register int *a1; char globuf[GBSIZE]; if (globp) error(Q); setall(); nonzero(); if ((c=getchr())=='\n') error(Q); compile(c); gp = globuf; while ((c = getchr()) != '\n') { if (c==EOF) error(Q); if (c=='\\') { c = getchr(); if (c!='\n') *gp++ = '\\'; } *gp++ = c; if (gp >= &globuf[GBSIZE-2]) error(Q); } *gp++ = '\n'; *gp++ = 0; for (a1=zero; a1<=dol; a1++) { *a1 &= ~01; if (a1>=addr1 && a1<=addr2 && execute(0, a1)==k) *a1 |= 01; } /* * Special case: g/.../d (avoid n^2 algorithm) */ if (globuf[0]=='d' && globuf[1]=='\n' && globuf[2]=='\0') { gdelete(); return; } for (a1=zero; a1<=dol; a1++) { if (*a1 & 01) { *a1 &= ~01; dot = a1; globp = globuf; commands(); a1 = zero; } } } join() { register char *gp, *lp; register *a1; gp = genbuf; for (a1=addr1; a1<=addr2; a1++) { lp = getline(*a1); while (*gp = *lp++) if (gp++ >= &genbuf[LBSIZE-2]) error(Q); } lp = linebuf; gp = genbuf; (( while (*lp++ = *gp++) ; *addr1 = putline(); if (addr1= &rhsbuf[LBSIZE/2]) error(Q); } *p++ = 0; if ((peekc = getchr()) == 'g') { peekc = 0; newline(); return(1); } newline(); return(0); } getsub() { register char *p1, *p2; p1 = linebuf; if ((p2 = linebp) == 0) return(EOF); while (*p1++ = *p2++) ; linebp = 0; return(0); } dosub() { register char *lp, *sp, *rp; int c; lp = linebuf; sp = genbuf; rp = rhsbuf; while (lp < loc1) *sp++ = *lp++; while (c = *rp++&0377) { if (c=='&') { sp = place(sp, loc1, loc2); continue; } else if (c&0200 && (c &= 0177) >='1' && c < nbra+'1') { sp = place(sp, braslist[c-'1'], braelist[c-'1']); continue; } *sp++ = c&0177; if (sp >= &genbuf[LBSIZE]) error(Q); } lp = loc2; loc2 = sp - genbuf + linebuf; while (*sp++ = *lp++) if (sp >= &genbuf[LBSIZE]) error(Q); lp = linebuf; sp = genbuf; while (*lp++ = *sp++) ; } char * place(sp, l1, l2) register char *sp, *l1, *l2; { while (l1 < l2) { *sp++ = *l1++; if (sp >= &genbuf[LBSIZE]) error(Q); } return(sp); } move(cflag) { register int *adt, *ad1, *ad2; int getcopy(); setdot(); nonzero(); if ((adt = address())==0) error(Q); newline(); if (cflag) { int *ozero, delta; ad1 = dol; ozero = zero; append(getcopy, ad1++); ad2 = dol; delta = zero - ozero; ad1 += delta; adt += delta; } else { ad2 = addr2; for (ad1 = addr1; ad1 <= ad2;) *ad1++ &= ~01; ad1 = addr1; } ad2++; if (adt= ad2) { dot = adt++; reverse(ad1, ad2); reverse(ad2, adt); reverse(ad1, adt); } else error(Q); fchange = 1; } reverse(a1, a2) register int *a1, *a2; { register int t; for (;;) { t = *--a2; if (a2 <= a1) return; *a2 = *a1; *a1++ = t; } } getcopy() { if (addr1 > addr2) return(EOF); getline(*addr1++); return(0); } compile(aeof) { register eof, c; register char *ep; char *lastep; char bracket[NBRA], *bracketp; int cclcnt; ep = expbuf; eof = aeof; bracketp = bracket; if ((c = getchr()) == eof) { if (*ep==0) error(Q); return; } circfl = 0; nbra = 0; if (c=='^') { c = getchr(); circfl++; } peekc = c; lastep = 0; for (;;) { if (ep >= &expbuf[ESIZE]) goto cerror; c = getchr(); if (c==eof) { if (bracketp != bracket) goto cerror; *ep++ = CEOF; return; } if (c!='*') lastep = ep; switch (c) { case '\\': if ((c = getchr())=='(') { if (nbra >= NBRA) goto cerror; *bracketp++ = nbra; *ep++ = CBRA; *ep++ = nbra++; continue; } if (c == ')') { if (bracketp <= bracket) goto cerror; *ep++ = CKET; *ep++ = *--bracketp; continue; } if (c>='1' && c<'1'+NBRA) { *ep++ = CBACK; *ep++ = c-'1'; continue; } *ep++ = CCHR; if (c=='\n') goto cerror; *ep++ = c; continue; case '.': *ep++ = CDOT; continue; case '\n': goto cerror; case '*': if (lastep==0 || *lastep==CBRA || *lastep==CKET) goto defchar; *lastep |= STAR; continue; case '$': if ((peekc=getchr()) != eof) goto defchar; *ep++ = CDOL; continue; case '[': *ep++ = CCL; *ep++ = 0; cclcnt = 1; if ((c=getchr()) == '^') { c = getchr(); ep[-2] = NCCL; } do { if (c=='\n') goto cerror; if (c=='-' && ep[-1]!=0) { if ((c=getchr())==']') { *ep++ = '-'; cclcnt++; break; } while (ep[-1]=&expbuf[ESIZE]) goto cerror; } } *ep++ = c; cclcnt++; if (ep >= &expbuf[ESIZE]) goto cerror; } while ((c = getchr()) != ']'); lastep[1] = cclcnt; continue; defchar: default: *ep++ = CCHR; *ep++ = c; } } cerror: expbuf[0] = 0; nbra = 0; error(Q); } execute(gf, addr) int *addr; { register char *p1, *p2, c; for (c=0; c= curlp) { if (advance(lp, ep)) return(1); lp -= braelist[i] - braslist[i]; } continue; case CDOT|STAR: curlp = lp; while (*lp++) ; goto star; case CCHR|STAR: curlp = lp; while (*lp++ == *ep) ; ep++; goto star; case CCL|STAR: case NCCL|STAR: curlp = lp; while (cclass(ep, *lp++, ep[-1]==(CCL|STAR))) ; ep += *ep; goto star; star: do { lp--; if (lp==locs) break; if (advance(lp, ep)) return(1); } while (lp > curlp); return(0); default: error(Q); } } backref(i, lp) register i; register char *lp; { register char *bp; bp = braslist[i]; while (*bp++ == *lp++) if (bp >= braelist[i]) return(1); return(0); } cclass(set, c, af) register char *set, c; { register n; if (c==0) return(0); n = *set++; while (--n) if (*set++ == c) return(af); return(!af); } putd() { register r; r = count%10; count /= 10; if (count) putd(); putchr(r + '0'); } puts(sp) register char *sp; { col = 0; while (*sp) putchr(*sp++); putchr('\n'); } char line[70]; char *linp = line; putchr(ac) { register char *lp; register c; lp = linp; c = ac; if (listf) { col++; if (col >= 72) { col = 0; *lp++ = '\\'; *lp++ = '\n'; } if (c=='\t') { c = '>'; goto esc; } if (c=='\b') { c = '<'; esc: *lp++ = '-'; *lp++ = '\b'; *lp++ = c; goto out; } if (c<' ' && c!= '\n') { *lp++ = '\\'; *lp++ = (c>>3)+'0'; *lp++ = (c&07)+'0'; col += 2; goto out; } } *lp++ = c; out: if(c == '\n' || lp >= &line[64]) { linp = line; write(1, line, lp-line); return; } linp = lp; } crblock(permp, buf, nchar, startn) char *permp; char *buf; long startn; { register char *p1; int n1; int n2; register char *t1, *t2, *t3; t1 = permp; t2 = &permp[256]; t3 = &permp[512]; n1 = startn&0377; n2 = (startn>>8)&0377; p1 = buf; while(nchar--) { *p1 = t2[(t3[(t1[(*p1+n1)&0377]+n2)&0377]-n2)&0377]-n1; n1++; if(n1==256){ n1 = 0; n2++; if(n2==256) n2 = 0; } p1++; } } getkey() { struct sgttyb b; int save; int (*sig)(); register char *p; register c; sig = signal(SIGINT, SIG_IGN); if (gtty(0, &b) == -1) error("Input not tty"); save = b.sg_flags; b.sg_flags &= ~ECHO; stty(0, &b); puts("Key:"); p = key; while(((c=getchr()) != EOF) && (c!='\n')) { if(p < &key[KSIZE]) *p++ = c; } *p = 0; b.sg_flags = save; stty(0, &b); signal(SIGINT, sig); return(key[0] != 0); } /* * Besides initializing the encryption machine, this routine * returns 0 if the key is null, and 1 if it is non-null. */ crinit(keyp, permp) char *keyp, *permp; { register char *t1, *t2, *t3; register i; int ic, k, temp, pf[2]; unsigned random; char buf[13]; long seed; t1 = permp; t2 = &permp[256]; t3 = &permp[512]; if(*keyp == 0) return(0); strncpy(buf, keyp, 8); while (*keyp) *keyp++ = '\0'; buf[8] = buf[0]; buf[9] = buf[1]; if (pipe(pf)<0) pf[0] = pf[1] = -1; if (fork()==0) { close(0); close(1); dup(pf[0]); dup(pf[1]); execl("/usr/lib/makekey", "-", 0); execl("/lib/makekey", "-", 0); exit(1); } write(pf[1], buf, 10); if (wait((int *)NULL)==-1 || read(pf[0], buf, 13)!=13) error("crypt: cannot generate key"); close(pf[0]); close(pf[1]); seed = 123; for (i=0; i<13; i++) seed = seed*buf[i] + i; for(i=0;i<256;i++){ t1[i] = i; t3[i] = 0; } for(i=0; i<256; i++) { seed = 5*seed + buf[i%13]; random = seed % 65521; k = 256-1 - i; ic = (random&0377) % (k+1); random >>= 8; temp = t1[k]; t1[k] = t1[ic]; t1[ic] = temp; if(t3[k]!=0) continue; ic = (random&0377) % k; while(t3[ic]!=0) ic = (ic+1) % k; t3[k] = ic; t3[ic] = k; } for(i=0; i((<256; i++) t2[t1[i]&0377] = i; return(1); } makekey(a, b) char *a, *b; { register int i; long t; char temp[KSIZE + 1]; for(i = 0; i < KSIZE; i++) temp[i] = *a++; time(&t); t += getpid(); for(i = 0; i < 4; i++) temp[i] ^= (t>>(8*i))&0377; crinit(temp, b); } ' qk)QBi' #include main(argc, argv) int argc; char *argv[]; { register int i, nflg; nflg = 0; if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'n') { nflg++; argc--; argv++; } for(i=1; i #include #include #include #include #include #include #include #define MWORD(m,i) (m[(unsigned)(i-1)/MLEN]) #define MBIT(i) (1<<((unsigned)(i-1)%MLEN)) #define BIS(i,w) (MWORD(w,i) |= MBIT(i)) #define BIC(i,w) (MWORD(w,i) &= ~MBIT(i)) #define BIT(i,w) (MWORD(w,i) & MBIT(i)) struct filsys sblock; struct dinode itab[INOPB*NI]; short clrmap[MSIZ]; short dirmap[MSIZ]; short nodmap[MSIZ]; char *disk; char *tape; char *increm; char incno; int uflag; int fi; int to; ino_t ino; int nsubdir; int ntape; int nadded; int dadded; int density = 160; char *ctime(); char *prdate(); long atol(); int fi; long tsize; long esize; long asize; int mark(); int add(); int dump(); int tapsrec(); int dmpspc(); int dsrch(); int nullf(); #define HOUR (60L*60L) #define DAY (24L*HOUR) #define YEAR (365L*DAY) main(argc, argv) char *argv[]; { char *arg; register i; time(&spcl.c_date); tsize = 2300L*12L*10L; tape = "/dev/rmt1"; disk = "/dev/rrp3"; increm = "/etc/ddate"; incno = '9'; uflag = 0; arg = "u"; if(argc > 1) { argv++; argc--; arg = *argv; } while(*arg) switch (*arg++) { case 'f': if(argc > 1) { argv++; argc--; tape = *argv; } break; case 'd': if (argc > 1) { argv++; argc--; density = atoi(*argv)/10; } break; case 's': if(argc > 1) { argv++; argc--; tsize = atol(*argv); tsize *= 12L*10L; } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': incno = arg[-1]; break; case 'u': uflag++; break; default: printf("bad key '%c%'\n", arg[-1]); exit(1); } if(argc > 1) { argv++; argc--; disk = *argv; } getitime(); printf(" date = %s\n", prdate(spcl.c_date)); printf("dump date = %s\n", prdate(spcl.c_ddate)); printf("dumping %s to %s\n", disk, tape); fi = open(disk, 0); if(fi < 0) { printf("dump: cannot open %s\n", disk); exit(1); } otape(); printf("I\n"); esize = 0; CLR(clrmap); CLR(dirmap); CLR(nodmap); pass(mark, (short *)NULL); do { printf("II\n"); nadded = 0; pass(add, dirmap); } while(nadded); bmapest(clrmap); bmapest(nodmap); printf("estimated %ld tape blocks on %d tape(s)\n", esize, 0); printf("III\n"); bitmap(clrmap, TS_CLRI); pass(dump, dirmap); printf("IV\n"); pass(dump, nodmap); putitime(); printf("DONE\n"); spcl.c_type = TS_END; for(i=0; i= mino) break; d = (unsigned)i; for(j=0; j= mino) break; if((ino % MLEN) == 0) { bits = ~0; if(map != NULL) bits = *map++; } ino++; if(bits & 1) { if(d != 0) { bread(d, (char *)itab, sizeof(itab)); d = 0; } (*fn)(&itab[j]); } bits >>= 1; } } } icat(ip, fn1, fn2) struct dinode *ip; int (*fn1)(), (*fn2)(); { register i; daddr_t d[NADDR]; l3tol(&d[0], &ip->di_addr[0], NADDR); (*fn2)(d, NADDR-3); for(i=0; idi_mode & IFMT; if(f == 0) return; BIS(ino, clrmap); if(f == IFDIR) BIS(ino, dirmap); if(ip->di_mtime >= spcl.c_ddate || ip->di_ctime >= spcl.c_ddate) { BIS(ino, nodmap); if (f != IFREG) return; est(ip); } } add(ip) struct dinode *ip; { if(BIT(ino, nodmap)) return; nsubdir = 0; dadded = 0; icat(ip, dsrch, nullf); if(dadded) { BIS(ino, nodmap); est(ip); nadded++; } if(nsubdir == 0) if(!BIT(ino, nodmap)) BIC(ino, dirmap); } dump(ip) struct dinode *ip; { register i; if(ntape) { ntape = 0; bitmap(nodmap, TS_BITS); } BIC(ino, nodmap); spcl.c_dinode = *ip; spcl.c_type = TS_INODE; spcl.c_count = 0; i = ip->di_mode & IFMT; if(i != IFDIR && i != IFREG) { spclrec(); return; } icat(ip, tapsrec, dmpspc); } dmpspc(dp, n) daddr_t *dp; { register i, t; spcl.c_count = n; for(i=0; i= NTREC) flusht(); } tapsrec(d) daddr_t d; { if(d == 0) return; tdaddr[trecno] = d; trecno++; spcl.c_tapea++; if(trecno >= NTREC) flusht(); } flusht() { char place[100]; register i, si; daddr_t d; while(trecno < NTREC) tdaddr[trecno++] = 1; loop: d = 0; for(i=0; i tsize) { close(to); printf("change tapes\n"); read(0, place, sizeof(place)); otape(); } } otape() { to = creat(tape, 0666); if(to < 0) { printf("dump: cannot create %s\n", tape); exit(1); } asize = 0; ntape++; spcl.c_volume++; spcl.c_type = TS_TAPE; spclrec(); } char * prdate(d) time_t d; { char *p; if(d == 0) return("the epoch"); p = ctime(&d); p[24] = 0; return(p); } getitime() { register i, df; struct idates idbuf; char *fname; fname = disk; l1: for(i=0; fname[i]; i++) if(fname[i] == '/') { fname += i+1; goto l1; } spcl.c_ddate = 0; df = open(increm, 0); if(df < 0) { printf("cannot open %s\n", increm); exit(1); } l2: i = read(df, (char *)&idbuf, sizeof(idb((uf)); if(i != sizeof(idbuf)) { close(df); return; } for(i=0;; i++) { if(fname[i] != idbuf.id_name[i]) goto l2; if(fname[i] == '\0') break; } if(idbuf.id_incno >= incno) goto l2; if(idbuf.id_ddate <= spcl.c_ddate) goto l2; spcl.c_ddate = idbuf.id_ddate; goto l2; } putitime() { register i, n, df; struct idates idbuf; char *fname; if(uflag == 0) return; fname = disk; l1: for(i=0; fname[i]; i++) if(fname[i] == '/') { fname += i+1; goto l1; } spcl.c_ddate = 0; df = open(increm, 2); if(df < 0) { printf("cannot open %s\n", increm); exit(1); } n = 0; l2: i = read(df, (char *)&idbuf, sizeof(idbuf)); if(i != sizeof(idbuf)) goto l3; n++; for(i=0;; i++) { if(fname[i] != idbuf.id_name[i]) goto l2; if(fname[i] == '\0') break; } if(idbuf.id_incno != incno) goto l2; l3: lseek(df, (long)n*sizeof(idbuf), 0); for(i=0;; i++) { idbuf.id_name[i] = fname[i]; if(fname[i] == '\0') break; } idbuf.id_incno = incno; idbuf.id_ddate = spcl.c_date; write(df, (char *)&idbuf, sizeof(idbuf)); close(df); printf("level %c dump on %s\n", incno, prdate(spcl.c_date)); } est(ip) struct dinode *ip; { long s; esize++; s = (ip->di_size + BSIZE-1) / BSIZE; esize += s; if(s > NADDR-3) { s -= NADDR-3; s = (s + (BSIZE/sizeof(daddr_t))-1) / (BSIZE/sizeof(daddr_t)); esize += s; } } bmapest(map) short *map; { register i, n; n = -1; for(i=0; i #include #include #include #define EQ(x,y) (strcmp(x,y)==0) #define ML 1000 struct stat Statb; char path[256], name[256]; int Aflag = 0, Sflag = 0, Noarg = 0; struct { int dev, ino; } ml[ML]; long descend(); char *rindex(); char *strcpy(); main(argc, argv) char **argv; { register i = 1; long blocks = 0; register char *np; if (argc>1) { if(EQ(argv[i], "-s")) { ++i; ++Sflag; } else if(EQ(argv[i], "-a")) { ++i; ++Aflag; } } if(i == argc) ++Noarg; do { strcpy(path, Noarg? ".": argv[i]); strcpy(name, path); if(np = rindex(name, '/')) { *np++ = '\0'; if(chdir(*name? name: "/") == -1) { fprintf(stderr, "cannot chdir()\n"); exit(1); } } else np = path; blocks = descend(path, *np? np: "."); if(Sflag) printf("%ld %s\n", blocks, path); } while(++i < argc); exit(0); } long descend(np, fname) char *np, *fname; { int dir = 0, /* open directory */ offset, dsize, entries, dirsize; struct direct dentry[32]; register struct direct *dp; register char *c1, *c2; int i; char *endofname; long blocks = 0; if(stat(fname,&Statb)<0) { fprintf(stderr, "--bad status < %s >\n", name); return 0L; } if(Statb.st_nlink > 1 && (Statb.st_mode&S_IFMT)!=S_IFDIR) { static linked = 0; for(i = 0; i <= linked; ++i) { if(ml[i].ino==Statb.st_ino && ml[i].dev==Statb.st_dev) return 0; } if (linked < ML) { ml[linked].dev = Statb.st_dev; ml[linked].ino = Statb.st_ino; ++linked; } } blocks = (Statb.st_size + BSIZE-1) >> BSHIFT; if((Statb.st_mode&S_IFMT)!=S_IFDIR) { if(Aflag) printf("%ld %s\n", blocks, np); return(blocks); } for(c1 = np; *c1; ++c1); if(*(c1-1) == '/') --c1; endofname = c1; dirsize = Statb.st_size; if(chdir(fname) == -1) return 0; for(offset=0; offset < dirsize; offset += 512) { /* each block */ dsize = 512<(dirsize-offset)? 512: (dirsize-offset); if(!dir) { if((dir=open(".",0))<0) { fprintf(stderr, "--cannot open < %s >\n", np); goto ret; } if(offset) lseek(dir, (long)offset, 0); if(read(dir, (char *)dentry, dsize)<0) { fprintf(stderr, "--cannot read < %s >\n", np); goto ret; } if(dir > 10) { close(dir); dir = 0; } } else if(read(dir, (char *)dentry, dsize)<0) { fprintf(stderr, "--cannot read < %s >\n", np); goto ret; } for(dp=dentry, entries=dsize>>4; entries; --entries, ++dp) { /* each directory entry */ if(dp->d_ino==0 || EQ(dp->d_name, ".") || EQ(dp->d_name, "..")) continue; c1 = endofname; *c1++ = '/'; c2 = dp->d_name; for(i=0; i\n", np); while(*--endofname != '/'); *endofname = '\0'; if(chdir(np) == -1) exit(1); } return(blocks); } ' tk=i& /* * Suck up system messages */ #include #include #include char msgbuf[MSGBUFS]; char *msgbufp; int sflg; int of = -1; struct { char *omsgflg; int omindex; char omsgbuf[MSGBUFS]; } omesg; struct nlist nl[3] = { {"_msgbuf"}, {"_msgbufp"} }; main(argc, argv) char **argv; { int mem; register char *mp, *omp, *mstart; int samef; if (argc>1 && argv[1][0] == '-') { sflg++; argc--; argv++; } if (sflg) of = open("/usr/adm/msgbuf", 2); read(of, (char *)&omesg, sizeof(omesg)); lseek(of, 0L, 0); sflg = 0; nlist(argc>2? argv[2]:"/unix", nl); if (nl[0].n_type==0) done("No namelist\n"); if ((mem = open((argc>1? argv[1]: "/dev/mem"), 0)) < 0) done("No mem\n"); lseek(mem, (long)nl[0].n_value, 0); read(mem, msgbuf, MSGBUFS); lseek(mem, (long)nl[1].n_value, 0); read(mem, (char *)&msgbufp, sizeof(msgbufp)); if (msgbufp < (char *)nl[0].n_value || msgbufp >= (char *)nl[0].n_value+MSGBUFS) done("Namelist mismatch\n"); msgbufp += msgbuf - (char *)nl[0].n_value; mstart = &msgbuf[omesg.omindex]; omp = &omesg.omsgbuf[msgbufp-msgbuf]; mp = msgbufp; samef = 1; do { if (*mp++ != *omp++) { mstart = msgbufp; samef = 0; pdate(); printf("...\n"); break; } if (mp == &msgbuf[MSGBUFS]) mp = msgbuf; if (omp == &omesg.omsgbuf[MSGBUFS]) omp = omesg.omsgbuf; } while (mp != mstart); if (samef && mstart == msgbufp) exit(0); mp = mstart; do { pdate(); if (*mp) putchar(*mp); mp++; if (mp == &msgbuf[MSGBUFS]) mp = msgbuf; } while (mp != msgbufp); done((char *)NULL); } done(s) char *s; { register char *p, *q; if (s && s!=omesg.omsgflg && sflg==0) { pdate(); printf(s); } omesg.omsgflg = s; q = omesg.omsgbuf; for (p = msgbuf; p < &msgbuf[MSGBUFS]; ) *q++ = *p++; omesg.omindex = msgbufp - msgbuf; write(of, (char *)&omesg, sizeof(omesg)); exit(s!=NULL); } pdate() { extern char *ctime(); static firstime; time_t tbuf; if (firstime==0) { firstime++; time(&tbuf); printf("\n%.12s\n", ctime(&tbuf)+4); } } ' uk1bwz}i& #include #include #include #include daddr_t blkno = 1; char *dargv[] = { 0, "/dev/rp0", "/dev/rp3", 0 }; struct filsys sblock; int fi; daddr_t alloc(); main(argc, argv) char **argv; { int i; if(argc <= 1) { for(argc = 1; dargv[argc]; argc++); argv = dargv; } for(i=1; i=NICFREE) { printf("bad free count, b=%D\n", blkno); return(0); } b = sblock.s_free[i]; if(b == 0) return(0); if(b=sblock.s_fsize) { printf("bad free block (%D)\n", b); return(0); } if(sblock.s_nfree <= 0) { bread(b, (char *)&buf, sizeof(buf)); blkno =(( b; sblock.s_nfree = buf.df_nfree; for(i=0; i /* Deroff command -- strip troff, eqn, and Tbl sequences from a file. Has one flag argument, -w, to cause output one word per line rather than in the original format. Deroff follows .so and .nx commands, removes contents of macro definitions, equations (both .EQ ... .EN and $...$), Tbl command sequences, and Troff backslash constructions. All input is through the C macro; the most recently read character is in c. */ #define C ( (c=getc(infile)) == EOF ? eof() : ((c==ldelim)&&(filesp==files) ? skeqn() : c) ) #define C1 ( (c=getc(infile)) == EOF ? eof() : c) #define SKIP while(C != '\n') #define YES 1 #define NO 0 #define NOCHAR -2 #define SPECIAL 0 #define APOS 1 #define DIGIT 2 #define LETTER 3 int wordflag = NO; int inmacro = NO; int intable = NO; char chars[128]; /* SPECIAL, APOS, DIGIT, or LETTER */ char line[512]; char *lp; int c; int ldelim = NOCHAR; int rdelim = NOCHAR; int argc; char **argv; char fname[50]; FILE *files[15]; FILE **filesp; FILE *infile; char *calloc(); main(ac, av) int ac; char **av; { register int i; register char *p; static char onechar[2] = "X"; FILE *opn(); argc = ac - 1; argv = av + 1; while(argc>0 && argv[0][0]=='-' && argv[0][1]!='\0') { for(p=argv[0]+1; *p; ++p) switch(*p) { case 'w': wordflag = YES; break; default: onechar[0] = *p; fatal("Invalid flag %s\n", onechar); } --argc; ++argv; } if(argc == 0) infile = stdin; else { infile = opn(argv[0]); --argc; ++argv; } files[0] = infile; filesp = &files[0]; for(i='a'; i<='z' ; ++i) chars[i] = LETTER; for(i='A'; i<='Z'; ++i) chars[i] = LETTER; for(i='0'; i<='9'; ++i) chars[i] = DIGIT; chars['\''] = APOS; chars['&'] = APOS; work(); } skeqn() { while((c = getc(infile)) != rdelim) if(c == EOF) c = eof(); else if(c == '"') while( (c = getc(infile)) != '"') if(c == EOF) c = eof(); else if(c == '\\') if((c = getc(infile)) == EOF) c = eof(); return(c = ' '); } FILE *opn(p) register char *p; { FILE *fd; if(p[0]=='-' && p[1]=='\0') fd = stdin; else if( (fd = fopen(p, "r")) == NULL) fatal("Cannot open file %s\n", p); return(fd); } eof() { if(infile != stdin) fclose(infile); if(filesp > files) infile = *--filesp; else if(argc > 0) { infile = opn(argv[0]); --argc; ++argv; } else exit(0); return(C); } getfname() { register char *p; struct chain { struct chain *nextp; char *datap; } *chainblock; register struct chain *q; static struct chain *namechain = NULL; char *copys(); while(C == ' ') ; for(p = fname ; (*p=c)!= '\n' && c!=' ' && c!='\t' && c!='\\' ; ++p) C; *p = '\0'; while(c != '\n') C; /* see if this name has already been used */ for(q = namechain ; q; q = q->nextp) if( ! strcmp(fname, q->datap)) { fname[0] = '\0'; return; } q = (struct chain *) calloc(1, sizeof(*chainblock)); q->nextp = namechain; q->datap = copys(fname); namechain = q; } fatal(s,p) char *s, *p; { fprintf(stderr, "Deroff: "); fprintf(stderr, s, p); exit(1); } work() { for( ;; ) { if(C == '.' || c == '\'') comline(); else regline(NO); } } regline(macline) int macline; { line[0] = c; lp = line; for( ; ; ) { if(c == '\\') { *lp = ' '; backsl(); } if(c == '\n') break; if(intable && c=='T') { *++lp = C; if(c=='{' || c=='}') { lp[-1] = ' '; *lp = C; } } else *++lp = C; } *lp = '\0'; if(line[0] != '\0') if(wordflag) putwords(macline); else if(macline) putmac(line); else puts(line); } putmac(s) register char *s; { register char *t; while(*s) { while(*s==' ' || *s=='\t') putchar(*s++); for(t = s ; *t!=' ' && *t!='\t' && *t!='\0' ; ++t) ; if(t>s+2 && chars[ s[0] ]==LETTER && chars[ s[1] ]==LETTER) while(s < t) putchar(*s++); else s = t; } putchar('\n'); } putwords(macline) /* break into words for -w option */ int macline; { register char *p, *p1; int i, nlet; for(p1 = line ; ;) { /* skip initial specials ampersands and apostrophes */ while( chars[*p1] < DIGIT) if(*p1++ == '\0') return; nlet = 0; for(p = p1 ; (i=chars[*p]) != SPECIAL ; ++p) if(i == LETTER) ++nlet; if( (!macline && nlet>1) /* MDM definition of word */ || (macline && nlet>2 && chars[ p1[0] ]==LETTER && chars[ p1[1] ]==LETTER) ) { /* delete trailing ampersands and apostrophes */ while(p[-1]=='\'' || p[-1]=='&') --p; while(p1 < p) putchar(*p1++); putchar('\n'); } else p1 = p; } } comline() { register int c1, c2; while(C==' ' || c=='\t') ; if( (c1=c) == '\n') return; c2 = C; if(c1=='.' && c2!='.') inmacro = NO; if(c2 == '\n') return; if(c1=='E' && c2=='Q' && filesp==files) eqn(); else if(c1=='T' && (c2=='S' || c2=='C' || c2=='&') && filesp==files) tbl(); else if(c1=='T' && c2=='E') intable = NO; else if(!inmacro && c1=='d' && c2=='e') macro(); else if(!inmacro && c1=='i' && c2=='g') macro(); else if(!inmacro && c1=='a' && c2 == 'm') macro(); else if(c1=='s' && c2=='o') { getfname(); if( fname[0] ) infile = *++filesp = opn( fname ); } else if(c1=='n' && c2=='x') { getfname(); if(fname[' vkkJMPSVY\_beh]``0] == '\0') exit(0); if(infile != stdin) fclose(infile); infile = *filesp = opn(fname); } else if(c1=='h' && c2=='w') { SKIP; } else { if(c1=='.' && c2=='.') while(C == '.') ; ++inmacro; regline(YES); --inmacro; } } macro() { /* do { SKIP; } while(C!='.' || C!='.' || C=='.'); /* look for .. */ SKIP; inmacro = YES; } tbl() { while(C != '.'); SKIP; intable = YES; } eqn() { register int c1, c2; SKIP; for( ;;) { if(C == '.' || c == '\'') { while(C==' ' || c=='\t') ; if(c=='E' && C=='N') { SKIP; return; } } else if(c == 'd') /* look for delim */ { if(C=='e' && C=='l') if( C=='i' && C=='m') { while(C1 == ' '); if((c1=c)=='\n' || (c2=C1)=='\n' || (c1=='o' && c2=='f' && C1=='f') ) { ldelim = NOCHAR; rdelim = NOCHAR; } else { ldelim = c1; rdelim = c2; } } } if(c != '\n') SKIP; } } backsl() /* skip over a complete backslash construction */ { int bdelim; sw: switch(C) { case '"': SKIP; return; case 's': if(C == '\\') backsl(); else { while(C>='0' && c<='9') ; ungetc(c,infile); c = '0'; } --lp; return; case 'f': case 'n': case '*': if(C != '(') return; case '(': if(C != '\n') C; return; case '$': C; /* discard argument number */ return; case 'b': case 'x': case 'v': case 'h': case 'w': case 'o': case 'l': case 'L': if( (bdelim=C) == '\n') return; while(C!='\n' && c!=bdelim) if(c == '\\') backsl(); return; case '\\': if(inmacro) goto sw; default: return; } } char *copys(s) register char *s; { register char *t, *t0; if( (t0 = t = calloc( strlen(s)+1, sizeof(*t) ) ) == NULL) fatal("Cannot allocate memory", (char *) NULL); while( *t++ = *s++ ) ; return(t0); } ' wk'  #&)/i& #include #include #define BIG 32767 #define LCASE 01 #define UCASE 02 #define SWAB 04 #define NERR 010 #define SYNC 020 int cflag; int fflag; int skip; int seekn; int count; int files = 1; char *string; char *ifile; char *ofile; char *ibuf; char *obuf; char *sbrk(); int ibs = 512; int obs = 512; int bs; int cbs; int ibc; int obc; int cbc; int nifr; int nipr; int nofr; int nopr; int ntrunc; int ibf; int obf; char *op; int nspace; char etoa[] = { 0000,0001,0002,0003,0234,0011,0206,0177, 0227,0215,0216,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0235,0205,0010,0207, 0030,0031,0222,0217,0034,0035,0036,0037, 0200,0201,0202,0203,0204,0012,0027,0033, 0210,0211,0212,0213,0214,0005,0006,0007, 0220,0221,0026,0223,0224,0225,0226,0004, 0230,0231,0232,0233,0024,0025,0236,0032, 0040,0240,0241,0242,0243,0244,0245,0246, 0247,0250,0133,0056,0074,0050,0053,0041, 0046,0251,0252,0253,0254,0255,0256,0257, 0260,0261,0135,0044,0052,0051,0073,0136, 0055,0057,0262,0263,0264,0265,0266,0267, 0270,0((271,0174,0054,0045,0137,0076,0077, 0272,0273,0274,0275,0276,0277,0300,0301, 0302,0140,0072,0043,0100,0047,0075,0042, 0303,0141,0142,0143,0144,0145,0146,0147, 0150,0151,0304,0305,0306,0307,0310,0311, 0312,0152,0153,0154,0155,0156,0157,0160, 0161,0162,0313,0314,0315,0316,0317,0320, 0321,0176,0163,0164,0165,0166,0167,0170, 0171,0172,0322,0323,0324,0325,0326,0327, 0330,0331,0332,0333,0334,0335,0336,0337, 0340,0341,0342,0343,0344,0345,0346,0347, 0173,0101,0102,0103,0104,0105,0106,0107, 0110,0111,0350,0351,0352,0353,0354,0355, 0175,0112,0113,0114,0115,0116,0117,0120, 0121,0122,0356,0357,0360,0361,0362,0363, 0134,0237,0123,0124,0125,0126,0127,0130, 0131,0132,0364,0365,0366,0367,0370,0371, 0060,0061,0062,0063,0064,0065,0066,0067, 0070,0071,0372,0373,0374,0375,0376,0377, }; char atoe[] = { 0000,0001,0002,0003,0067,0055,0056,0057, 0026,0005,0045,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0074,0075,0062,0046, 0030,0031,0077,0047,0034,0035,0036,0037, 0100,0117,0177,0173,0133,0154,0120,0175, 0115,0135,0134,0116,0153,0140,0113,0141, 0360,0361,0362,0363,0364,0365,0366,0367, 0370,0371,0172,0136,0114,0176,0156,0157, 0174,0301,0302,0303,0304,0305,0306,0307, 0310,0311,0321,0322,0323,0324,0325,0326, 0327,0330,0331,0342,0343,0344,0345,0346, 0347,0350,0351,0112,0340,0132,0137,0155, 0171,0201,0202,0203,0204,0205,0206,0207, 0210,0211,0221,0222,0223,0224,0225,0226, 0227,0230,0231,0242,0243,0244,0245,0246, 0247,0250,0251,0300,0152,0320,0241,0007, 0040,0041,0042,0043,0044,0025,0006,0027, 0050,0051,0052,0053,0054,0011,0012,0033, 0060,0061,0032,0063,0064,0065,0066,0010, 0070,0071,0072,0073,0004,0024,0076,0341, 0101,0102,0103,0104,0105,0106,0107,0110, 0111,0121,0122,0123,0124,0125,0126,0127, 0130,0131,0142,0143,0144,0145,0146,0147, 0150,0151,0160,0161,0162,0163,0164,0165, 0166,0167,0170,0200,0212,0213,0214,0215, 0216,0217,0220,0232,0233,0234,0235,0236, 0237,0240,0252,0253,0254,0255,0256,0257, 0260,0261,0262,0263,0264,0265,0266,0267, 0270,0271,0272,0273,0274,0275,0276,0277, 0312,0313,0314,0315,0316,0317,0332,0333, 0334,0335,0336,0337,0352,0353,0354,0355, 0356,0357,0372,0373,0374,0375,0376,0377, }; char atoibm[] = { 0000,0001,0002,0003,0067,0055,0056,0057, 0026,0005,0045,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0074,0075,0062,0046, 0030,0031,0077,0047,0034,0035,0036,0037, 0100,0132,0177,0173,0133,0154,0120,0175, 0115,0135,0134,0116,0153,0140,0113,0141, 0360,0361,0362,0363,0364,0365,0366,0367, 0370,0371,0172,0136,0114,0176,0156,0157, 0174,0301,0302,0303,0304,0305,0306,0307, 0310,0311,0321,0322,0323,0324,0325,0326, 0327,0330,0331,0342,0343,0344,0345,0346, 0347,0350,0351,0255,0340,0275,0137,0155, 0171,0201,0202,0203,0204,0205,0206,0207, 0210,0211,0221,0222,0223,0224,0225,0226, 0227,0230,0231,0242,0243,0244,0245,0246, 0247,0250,0251,0300,0117,0320,0241,0007, 0040,0041,0042,0043,0044,0025,0006,0027, 0050,0051,0052,0053,0054,0011,0012,0033, 0060,0061,0032,0063,0064,0065,0066,0010, 0070,0071,0072,0073,0004,0024,0076,0341, 0101,0102,0103,0104,0105,0106,0107,0110, 0111,0121,0122,0123,0124,0125,0126,0127, 0130,0131,0142,0143,0144,0145,0146,0147, 0150,0151,0160,0161,0162,0163,0164,0165, 0166,0167,0170,0200,0212,0213,0214,0215, 0216,0217,0220,0232,0233,0234,0235,0236, 0237,0240,0252,0253,0254,0255,0256,0257, 0260,0261,0262,0263,0264,0265,0266,0267, 0270,0271,0272,0273,0274,0275,0276,0277, 0312,0313,0314,0315,0316,0317,0332,0333, 0334,0335,0336,0337,0352,0353,0354,0355, 0356,0357,0372,0373,0374,0375,0376,0377, }; main(argc, argv) int argc; char **argv; { int (*conv)(); register char *ip; register c; int ebcdic(), ibm(), ascii(), null(), cnull(), term(); int a; conv = null; for(c=1; cibuf;) *--ip = 0; ibc = read(ibf, ibuf, ibs); } if(ibc == -1) { perror("read"); if((cflag&NERR) == 0) { flsh(); term(); } ibc = 0; for(c=0; c>1) & ~1; if(cflag&SWAB && c) do { a = *ip++; ip[-1] = *ip; *ip++ = a; } while(--c); ip = ibuf; if (fflag) { obc = ibc; flsh(); ibc = 0; } goto loop; } c = 0; c |= *ip++; c &= 0377; (*conv)(c); goto loop; } flsh() { register c; if(obc) { if(obc == obs) nofr++; else nopr++; c = write(obf, obuf, obc); if(c != obc) { perror("write"); term(); } obc = 0; } } match(s) char *s; { register char *cs; cs = string; while(*cs++ == *s) if(*s++ == '\0') goto true; if(*s != '\0') return(0); true: cs--; string = cs; return(1); } number(big) { register char *cs; long n; cs = string; n = 0; while(*cs >= '0' && *cs <= '9') n = n*10 + *cs++ - '0'; for(;;) switch(*cs++) { case 'k': n *= 1024; continue; case 'w': n *= sizeof(int); continue; case 'b': n *= 512; continue; case '*': case 'x': string = cs; n *= number(BIG); case '\0': if (n>=big || n<0) { fprintf(stderr, "dd: argument %D out of range\n", n); exit(1); } return(n); } /* never gets here */ } cnull(cc) { register c; c = cc; if(cflag&UCASE && c>='a' && c<='z') c += 'A'-'a'; if(cflag&LCASE && c>='A' && c<='Z') c += 'a'-'A'; null(c); } null(c) { *op = c; op++; if(++obc >= obs) { flsh(); op = obuf; } } ascii(cc) { register c; c = etoa[cc] & 0377; if(cbs == 0) { cnull(c); return; } if(c == ' ') { nspace++; goto out; } while(nspace > 0) { null(' '); nspace--; } cnull(c); out: if(++cbc >= cbs) { null('\n'); cbc = 0; nspace = 0; } } ebcdic(cc) { register c; c = cc; if(cflag&UCASE && c>='a' && c<='z') c += 'A'-'a'; if(cflag&LCASE && c>='A' && c<='Z') c += 'a'-'A'; c = atoe[c] & 0377; if(cbs == 0) { null(c); return; } if(cc == '\n') { while(cbc < cbs) { null(atoe[' ']); cbc++; } cbc = 0; return; } if(cbc == cbs) ntrunc++; cbc++; if(cbc <= cbs) null(c); } ibm(cc) { register c; c = cc; if(cflag&UCASE && c>='a' && c<='z') c += 'A'-'a'; if(cflag&LCASE && c>='A' && c<='Z') c += 'a'-'A'; c = atoibm[c] & 0377; if(cbs == 0) { null(c); return; } if(cc == '\n') { while(cbc < cbs) { null(atoibm[' ']); cbc++; } cbc = 0; return; } if(cbc == cbs) ntrunc++; cbc++; if(cbc <= cbs) null(c); } term() { stats(); exit(0); } stats() { fprintf(stderr,"%u+%u records in\n", nifr, nipr); fprintf(stderr,"%u+%u records out\n", nofr, nopr); if(ntrunc) fprintf(stderr,"%u truncated records\n", ntrunc); } ' xk꫋  ((/* * dcheck - check directory consistency */ #define NI 16 #define NB 10 #define NDIR (BSIZE/sizeof(struct direct)) #include #include #include #include #include #include #include struct filsys sblock; struct dinode itab[INOPB*NI]; daddr_t iaddr[NADDR]; ino_t ilist[NB]; int fi; ino_t ino; char *ecount; int headpr; unsigned nfiles; int nerror; daddr_t bmap(); long atol(); char *malloc(); main(argc, argv) char *argv[]; { register i; long n; while (--argc) { argv++; if (**argv=='-') switch ((*argv)[1]) { case 'i': for(i=0; i 40000) { printf("Only doing 40000 files\n"); nfiles = 40000; } ecount = malloc(nfiles+1); if (ecount==NULL) { printf("Not enough core\n"); exit(04); } for (i=0; i<=nfiles; i++) ecount[i] = 0; ino = 0; for(i=2;; i+=NI) { if(ino >= nfiles) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= nfiles) break; ino++; pass1(&itab[j]); } } ino = 0; for(i=2;; i+=NI) { if(ino >= nfiles) break; bread((daddr_t)i, (char *)itab, sizeof(itab)); for(j=0; j= nfiles) break; ino++; pass2(&itab[j]); } } free(ecount); } pass1(ip) register struct dinode *ip; { struct direct dbuf[NDIR]; long doff; struct direct *dp; register i, j; int k; daddr_t d; ino_t kno; if((ip->di_mode&IFMT) != IFDIR) return; l3tol(iaddr, ip->di_addr, NADDR); doff = 0; for(i=0;; i++) { if(doff >= ip->di_size) break; d = bmap(i); if(d == 0) break; bread(d, (char *)dbuf, BSIZE); for(j=0; j= ip->di_size) break; doff += sizeof(struct direct); dp = &dbuf[j]; kno = dp->d_ino; if(kno == 0) continue; if(kno > nfiles || kno <= 1) { printf("%5u bad; %u/%.14s\n", kno, ino, dp->d_name); nerror++; continue; } for (k=0; ilist[k] != 0; k++) if (ilist[k]==kno) { printf("%5u arg; %u/%.14s\n", kno, ino, dp->d_name); nerror++; } ecount[kno]++; if (ecount[kno] == 0) ecount[kno] = 0377; } } } pass2(ip) register struct dinode *ip; { register i; i = ino; if ((ip->di_mode&IFMT)==0 && ecount[i]==0) return; if (ip->di_nlink==((ecount[i])&0377) && ip->di_nlink!=0) return; if (ino < ROOTINO && ip->di_nlink==0 && ecount[i]==0) return; if (headpr==0) { printf(" entries link cnt\n"); headpr++; } printf("%u %d %d\n", ino, ecount[i]&0377, ip->di_nlink); } bread(bno, buf, cnt) daddr_t bno; char *buf; { register i; lseek(fi, bno*BSIZE, 0); if (read(fi, buf, cnt) != cnt) { printf("read error %D\n", bno); for(i=0; i NINDIR) { printf("%u - huge directory\n", ino); return((daddr_t)0); } bread(iaddr[NADDR-3], (char *)ibuf, sizeof(ibuf)); return(ibuf[i]); } ' ykFO i& /* * date : print date * date YYMMDDHHMM[.SS] : set date, if allowed * date -u ... : date in GMT */ #include #include #include #include long timbuf; char *ap, *ep, *sp; int uflag; char *timezone(); static int dmsize[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; struct utmp wtmp[2] = { {"|", "", 0}, {"{", "", 0}}; char *ctime(); char *asctime(); struct tm *localtime(); struct tm *gmtime(); main(argc, argv) char *argv[]; { register char *tzn; struct timeb info; int wf, rc; rc = 0; ftime(&info); if (argc>1 && argv[1][0]=='-' && argv[1][1]=='u') { argc--; argv++; uflag++; } if(argc > 1) { ap = argv[1]; if (gtime()) { printf("date: bad conversion\n"); exit(1); } /* convert to GMT assuming local time */ if (uflag==0) { timbuf += (long)info.timezone*60; /* now fix up local daylight time */ if(localtime(&timbuf)->tm_isdst) timbuf -= 60*60; } time(&wtmp[0].ut_time); if(stime(&timbuf) < 0) { rc++; printf("date: no permission\n"); } else if ((wf = open("/usr/adm/wtmp", 1)) >= 0) { time(&wtmp[1].ut_time); lseek(wf, 0L, 2); write(wf, (char *)wtmp, sizeof(wtmp)); close(wf); } } if (rc==0) time(&timbuf); if(uflag) { ap = asctime(gmtime(&timbuf)); tzn = "GMT"; } else { struct tm *tp; tp = localtime(&timbuf); ap = asctime(tp); tzn = timezone(info.timezone, tp->tm_isdst); } printf("%.20s", ap); if (tzn) printf("%s", tzn); printf("%s", ap+19); exit(rc); } gtime() { register int i, year, month; int day, hour, mins, secs; struct tm *L; char x; ep=ap; while(*ep) ep++; sp=ap; while(sptm_mday); month = gp(L->tm_mon+1); year = gp(L->tm_year); if(*sp) return(1); if( month<1 || month>12 || day<1 || day>31 || mins<0 || mins>59 || secs<0 || secs>59) return(1); if (hour==24) { hour=0; day++; } if (hour<0 || hour>23) return(1); timbuf = 0; year += 1900; for(i=1970; i= 3) timbuf++; while(--month) timbuf += dmsize[month-1]; timbuf += day-1; timbuf = 24*timbuf + hour; timbuf = 60*timbuf + mins; timbuf = 60*timbuf + secs; return(0); } gp(dfault) { register int c, d; if(*sp==0) return(dfault); c = (*sp++)-'0'; d = (*sp ? (*sp++)-'0' : 0); if(c<0 || c>9 || d<0 || d>9) return(-1); return(c+10*d); } ' zks#i& #include #include #include /* * cu telno [-t] [-s speed] [-l line] [-a acu] * * -t is for dial-out to terminal. * speeds are: 110, 134, 150, 300, 1200. 300 is default. * * Escape with `~' at beginning of line. * Ordinary diversions are ~<, ~> and ~>>. * Silent output diversions are ~>: and ~>>:. * Terminate output diversion with ~> alone. * Quit is ~. and ~! gives local command or shell. * Also ~$ for canned procedure pumping remote. * ~%put from [to] and ~%take from [to] invoke builtins */ #define CRLF "\r\n" #define wrc(ds) write(ds,&c,1) char *devcul = "/dev/cul0"; char *devcua = "/dev/cua0"; char *lspeed = "300"; int ln; /* fd for comm line */ char tkill, terase; /* current input kill & erase */ char c; char *connmsg[] = { "", "line busy", "call dropped", "no carrier", "can't fork", "acu access", "tty access", "tty hung", "usage: cu telno [-t] [-s speed] [-l line] [-a acu]" }; rdc(ds) { ds=read(ds,&c,1); c&= 0177; return (ds); } int intr; sig2() { signal(SIGINT, SIG_IGN); intr = 1; } int set14; xsleep(n) { xalarm(n); pause(); xalarm(0); } xalarm(n) { set14=n; alarm(n); } sig14() { signal(SIGALRM, sig14); if (set14) alarm(1); } int dout; int nhup; /* * main: get connection, set speed for line. * spawn child to invoke rd to read from line, output to fd 1 * main line invokes wr to read tty, write to line */ main(ac,av) char *av[]; { int fk; int speed; char *telno; struct sgttyb stbuf; signal(SIGALRM, sig14); if (ac < 2) { prf(connmsg[8]); exit(8); } telno = av[1]; av += 2; ac -= 2; for (; ac > 0; av++) { if (equal(*av, "-t")) { dout = 1; --ac; continue; } if (ac < 2) break; if (equal(*av, "-s")) lspeed = *++av; else if (equal(*av, "-l")) devcul = *++av; else if (equal(*av, "-a")) devcua = *++av; else break; ac -= 2; } if (!exists(devcua) || !exists(devcul)) exit(9); ln = conn(devcul, devcua, telno); if (ln < 0) { prf("Connect failed: %s",connmsg[-ln]); exit(-ln); } switch(atoi(lspeed)) { case 110: speed = B110;break; case 150: speed = B150;break; default: case 300: speed = B300;break; case 1200: speed = B1200;break; } stbuf.sg_ispeed = speed; stbuf.sg_ospeed = speed; stbuf.sg_flags = EVENP|ODDP; if (!dout) stbuf.sg_flags |= RAW; ioctl(TIOCSETP, ln, &stbuf); ioctl(TIOCEXCL, ln, (struct sgttyb *)NULL); ioctl(TIOCHPCL, ln, (struct sgttyb *)NULL); prf("Connected"); if (dout) fk = -1; else fk = fork(); nhup = (int)signal(SIGINT, SIG((_IGN); if (fk == 0) { rd(); prf("\007Lost carrier"); exit(3); } mode(1); wr(); mode(0); kill(fk, SIGKILL); wait((int *)NULL); stbuf.sg_ispeed = 0; stbuf.sg_ospeed = 0; ioctl(TIOCSETP, ln, &stbuf); prf("Disconnected"); exit(0); } /* * conn: establish dial-out connection. * Example: fd = conn("/dev/ttyh","/dev/dn1","4500"); * Returns descriptor open to tty for reading and writing. * Negative values (-1...-7) denote errors in connmsg. * Uses alarm and fork/wait; requires sig14 handler. * Be sure to disconnect tty when done, via HUPCL or stty 0. */ conn(dev,acu,telno) char *dev, *acu, *telno; { struct sgttyb stbuf; extern errno; char *p, *q, b[30]; int er, fk, dn, dh, t; er=0; fk=(-1); if ((dn=open(acu,1))<0) { er=(errno == 6? 1:5); goto X; } if ((fk=fork()) == (-1)) { er=4; goto X; } if (fk == 0) { open(dev,2); for (;;) pause(); } xsleep(2); /* * copy phone #, assure EON */ p=b; q=telno; while (*p++=(*q++)) ; p--; if (*(p-1)!='<') { if (*(p-1)!='-') *p++='-'; *p++='<'; } t=p-b; xalarm(5*t); t=write(dn,b,t); xalarm(0); if (t<0) { er=2; goto X; } /* close(dn) */ xalarm(40); /* was 5; sometimes missed carrier */ dh = open(dev,2); xalarm(0); if (dh<0) { er=(errno == 4? 3:6); goto X; } ioctl(TIOCGETP, ln, &stbuf); stbuf.sg_flags &= ~ECHO; xalarm(10); ioctl(TIOCSETP, dh, &stbuf); ioctl(TIOCHPCL, dh, (struct sgttyb *)NULL); xalarm(0); X: if (er) close(dn); if (fk!=(-1)) { kill(fk, SIGKILL); xalarm(10); while ((t=wait((int *)NULL))!=(-1) && t!=fk); xalarm(0); } return (er? -er:dh); } /* * wr: write to remote: 0 -> line. * ~. terminate * ~:'"); wrln(args[2]); wrln(";tee /dev/null <"); wrln(args[1]); wrln(";echo '~>'\n"); return; } else if (equal(args[0], "put")) { if (narg < 2) { prf("usage: ~%%put from [to]"); return; } if (narg < 3) args[2] = args[1]; if ((f = open(args[1], 0)) < 0) { prf("cannot open: %s", args[1]); return; } wrln("stty -echo;cat >"); wrln(args[2]); wrln(";stty echo\n"); xsleep(5); intr = 0; if (!nhup) signal(SIGINT, sig2); mode(2); rcount = 0; while(!intr && rdc(f) == 1) { rcount++; if (c == tkill || c == terase) wrln("\\"); if (wrc(ln) != 1) { xsleep(2); if (wrc(ln) != 1) { prf("character missed"); intr = 1; break; } } } signal(SIGINT, SIG_IGN); close(f); if (intr) { wrln("\n"); prf("stopped after %d bytes", rcount); } wrln("\004"); xsleep(5); mode(1); return; } prf("~%%%s unknown\n", args[0]); } equal(s1, s2) register char *s1, *s2; { while (*s1++ == *s2) if (*s2++ == '\0') return(1); return(0); } wrln(s) register char *s; { while (*s) write(ln, s++, 1); } /* * rd: read from remote: line -> 1 * catch: * ~>[>][:][file] * stuff from file... * ~> (ends diversion) */ rd() { int ds,slnt; char *p,*q,b[600]; p=b; ds=(-1); while (rdc(ln) == 1) { if (ds<0) slnt=0; if (!slnt) wrc(1); *p++=c; if (c!='\n') continue; q=p; p=b; if (b[0]!='~' || b[1]!='>') { if (*(q-2) == '\r') { q--; *(q-1)=(*q); } if (ds>=0) write(ds,b,q-b); continue; } if (ds>=0) close(ds); if (slnt) { write(1, b, q - b); write(1, CRLF, sizeof(CRLF)); } if (*(q-2) == '\r') q--; *(q-1)=0; slnt=0; q=b+2; if (*q == '>') q++; if (*q == ':') { slnt=1; q++; } if (*q == 0) { ds=(-1); continue; } if (b[2]!='>' || (ds=open(q,1))<0) ds=creat(q,0644); lseek(ds, (long)0, 2); if (ds<0) prf("Can't divert %s",b+1); } } struct {char lobyte; char hibyte;}; mode(f) { struct sgttyb stbuf; if (dout) return; ioctl(TIOCGETP, 0, &stbuf); tkill = stbuf.sg_kill; terase = stbuf.sg_erase; if (f == 0) { stbuf.sg_flags &= ~RAW; stbuf.sg_flags |= ECHO|CRMOD; } if (f == 1) { stbuf.sg_flags |= RAW; stbuf.sg_flags &= ECHO|CRMOD; } if (f == 2) { stbuf.sg_flags &= ~RAW; stbuf.sg_flags &= ~(ECHO|CRMOD); } ioctl(TIOCSETP, 0, &stbuf); } echo(s) char *s; { char *p; for (p=s;*p;p++); if (p>s) write(0,s,p-s); write(0,CRLF, sizeof(CRLF)); } prf(f, s) char *f; char *s; { fprintf(stderr, f, s); fprintf(stderr, CRLF); } exists(devname) char *devname; { if (access(devname, 0)==0) return(1); prf("%s does not exist", devname); return(0); } ' {kbbzi* /* * Print execution profile */ #include #include #include #include typedef short UNIT; /* unit of profiling */ struct stat stbuf; struct nl { char name[8]; unsigned value; float time; long ncall; }; struct hdr { UNIT *lowpc; UNIT *highpc; int ncount; }; struct nl nl[1200]; struct cnt { unsigned cvalue; long cncall; } cbuf[350]; FILE *pfile, *nfile; unsigned highpc; unsigned lowpc; double ransca; double ranoff; unsigned pcl; unsigned pch; unsigned bufs; int nname; double ftime; double actime; double totime; double maxtime; double scale; double lastx; double lasty; struct nl *np; struct nl *npe; int aflg; int vflg; int lflg; long symoff; main(argc, argv) char **argv; { char *namfil; int timcmp(), valcmp(); int i, overlap; long pfpos; double lastsx; struct cnt *cp; double tx, ty; struct exec xbuf; struct hdr h; lowpc = -1; highpc = -1; argv++; namfil = "a.out"; while (argc>1) { if (**argv == '-') { if (*++*argv == 'l') lflg++; if (**argv == 'a') aflg = 040; if(**argv == 'v') vflg++; if(**argv >= '0' && **argv <= '9') { i = atoi(*argv); if(lowpc == -1) lowpc = i; else highpc = i; } } else namfil = *argv; argc--; argv++; } if (lowpc >= 100) lowpc = 0; if(highpc <= lowpc || highpc > 100) highpc = 100; ransca = 100./(highpc-lowpc); ranoff = 2040. + 40.8*lowpc*ransca; if((nfile=fopen(namfil,"r"))==NULL) { fprintf(stderr, "%s: not found\n", namfil); done(); } fread((char *)&xbuf, 1, sizeof(xbuf), nfile); if (xbuf.a_magic!=A_MAGIC1 && xbuf.a_magic!=A_MAGIC2 && xbuf.a_magic!=A_MAGIC3) { fprintf(stderr, "%s: bad format\n", namfil); done(); } symoff = (long)xbuf.a_text + xbuf.a_data; if ((xbuf.a_flag&01) == 0) symoff *= 2; fseek(nfile, symoff+sizeof(xbuf), 0); if((pfile = fopen("mon.out","r")) == NULL) { fprintf(stderr, "No mon.out\n"); done(); } fstat(fileno(pfile), &stbuf); fread((char *)&h, sizeof(struct hdr), 1, pfile); lowpc = h.lowpc - (UNIT *)0; highpc = h.highpc - (UNIT *)0; bufs = stbuf.st_size - sizeof(struct hdr) - h.ncount*sizeof(struct cnt); fread((char *)cbuf, sizeof(struct cnt), h.ncount, pfile); pfpos = ftell(pfile); npe = nl; for (nname = 0; xbuf.a_syms > 0; xbuf.a_syms -= sizeof(struct nlist)) { struct nlist nbuf; fread((char *)&nbuf, sizeof(nbuf), 1, nfile); if (nbuf.n_type!=N_TEXT && nbuf.n_type!=N_TEXT+N_EXT) continue; if (aflg==0 && nbuf.n_type!=N_TEXT+N_EXT) continue; npe->value = nbuf.n_value/sizeof(UNIT);(( for (i=0; i<8; i++) npe->name[i] = nbuf.n_name[i]; npe++; nname++; } if (nname == 0) { fprintf(stderr, "%s: no symbols\n", namfil); done(); } npe->value = -1; npe++; for (cp = cbuf; cp < &cbuf[h.ncount]; cp++) for (np = nl; np < npe; np++) if ((unsigned)(cp->cvalue/sizeof(UNIT) - np->value) <=10) { np->ncall = cp->cncall; break; } qsort(nl, nname, sizeof(struct nl), valcmp); scale = highpc - lowpc; scale /= bufs/sizeof(UNIT); for(i=0;;i++) { register j; unsigned UNIT ccnt; fread((char *)&ccnt, sizeof(ccnt), 1, pfile); if(feof(pfile)) break; if (ccnt == 0) continue; pcl = lowpc + scale*i; pch = lowpc + scale*(i+1); ftime = ccnt; totime += ftime; if(ftime > maxtime) maxtime = ftime; for (j=0; j= nl[j+1].value) continue; overlap=(min(pch,nl[j+1].value)-max(pcl,nl[j].value)); nl[j].time += overlap*ftime/scale; } } if (totime==0.0) { fprintf(stderr, "No time accumulated\n"); done(); } #ifdef plot if(!vflg) goto print; openpl(); erase(); space(-2048, -2048, 2048, 2048); line(-2040, -2040, -2040, 2040); line(0, 2040, 0, -2040); for(i=0; i<11; i++) line(-2040, 2040-i*408, 0, 2040-i*408); lastx = 0.; lasty = ranoff; scale = (4080.*ransca)/(bufs/sizeof(UNIT)); fclose(pfile); /*to turn off eof*/ pfile = fopen("mon.out", "r"); fseek(pfile, pfpos, 0); lastsx = 0.0; for(;;) { unsigned UNIT ccnt; fread((char *)&ccnt, sizeof(ccnt), 1, pfile); if(feof(pfile)) break; ftime = ccnt; tx = lastsx; ty = lasty; lastsx -= 2000.*ftime/totime; lasty -= scale; if(lasty >= -2040. && ty <= 2040.) { line((int)tx, (int)ty, (int)lastsx, (int)lasty); if (ccnt!=0 || lastx!=0.0) { tx = lastx; lastx = -ftime*2000./maxtime; ty += scale/2; line(0, (int)ty, (int)tx, (int)ty); } } } scale = (4080.*ransca)/(highpc-lowpc); lastx = 50.; for(np = nl; npvalue < lowpc) continue; if(np->value >= highpc) continue; ftime = np->time/totime; lasty = ranoff - (np->value - lowpc)*scale; if(lasty >= -2040. && lasty <= 2040.) { char bufl[8+3], *namp; register j; line(0, (int)lasty, 50, (int)lasty); line((int)(lastx-50),(int)lasty,(int)lastx,(int)lasty); point((int)(lastx+30), (int)(lasty+10)); namp = bufl; for(j=0; j<8; j++) if(np->name[j] != '_') *namp++ = np->name[j]; *namp++ = '\n'; *namp++ = 0; label(bufl); } lastx += 500.; if(lastx > 2000.) lastx = 50.; } do' {kPfbzi*ne(); print: #endif actime = 0; printf(" name %%time cumsecs #call ms/call\n"); if (!lflg) qsort(nl, nname, sizeof(struct nl), timcmp); for (np = nl; nptime/totime; actime += np->time; printf("%8.8s%6.1f%9.2f", np->name, 100*ftime, actime/60); if(np->ncall!=0) { printf("%6ld", np->ncall); printf(" %7.2f\n", np->time/(np->ncall*.06)); } else printf("\n"); } done(); } min(a, b) unsigned a, b; { if (ab) return(a); return(b); } valcmp(p1, p2) struct nl *p1, *p2; { return(p1->value - p2->value); } timcmp(p1, p2) struct nl *p1, *p2; { float d; d = p2->time - p1->time; if (d > 0.0) return(1); if (d < 0.0) return(-1); return(0); } done() { #ifdef plot if(vflg) { point(0, -2040); closepl(); } #endif exit(0); } ' |k۴ ilorux{~E`` #include #include #include #include #include #include #define LISTS 512 #define EXACT 100 #define ANY 101 #define LIST 102 #define RANGE 103 #define EOS 104 char crontab[] = "/usr/lib/crontab"; time_t itime; struct tm *loct; struct tm *localtime(); char *malloc(); char *realloc(); int flag; char *list; unsigned listsize; main() { register char *cp; char *cmp(); time_t filetime = 0; setuid(1); if (fork()) exit(0); chdir("/"); freopen(crontab, "r", stdin); freopen("/", "r", stdout); freopen("/", "r", stderr); signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); time(&itime); itime -= localtime(&itime)->tm_sec; fclose(stdin); for (;; itime+=60, slp()) { struct stat cstat; if (stat(crontab, &cstat) == -1) continue; if (cstat.st_mtime > filetime) { filetime = cstat.st_mtime; init(); } loct = localtime(&itime); loct->tm_mon++; /* 1-12 for month */ for(cp = list; *cp != EOS;) { flag = 0; cp = cmp(cp, loct->tm_min); cp = cmp(cp, loct->tm_hour); cp = cmp(cp, loct->tm_mday); cp = cmp(cp, loct->tm_mon); cp = cmp(cp, loct->tm_wday); if(flag == 0) { slp(); ex(cp); } while(*cp++ != 0) ; } } } char * cmp(p, v) char *p; { register char *cp; cp = p; switch(*cp++) { case EXACT: if (*cp++ != v) flag++; return(cp); case ANY: return(cp); case LIST: while(*cp != LIST) if(*cp++ == v) { while(*cp++ != LIST) ; return(cp); } flag++; return(cp+1); case RANGE: if(*cp > v || cp[1] < v) flag++; return(cp+2); } if(cp[-1] != v) flag++; return(cp); } slp() { register i; time_t t; time(&t); i = itime - t; if(i > 0) sleep(i); } ex(s) char *s; { int st; if(fork()) { wait(&st); return; } if(fork()) exit(0); freopen("/", "r", stdin); execl("/bin/sh", "sh", "-c", s, 0); exit(0); } init() { register i, c; register char *cp; register char *ocp; register int n; freopen(crontab, "r", stdin); if (list) { free(list); list = realloc(list, LISTS); } else list = malloc(LISTS); listsize = LISTS; cp = list; loop: if(cp > list+listsize-100) { char *olist; listsize += LISTS; olist = list; free(list); list = realloc(list, listsize); cp = list + (cp - olist); } ocp = cp; for(i=0;; i++) { do c = getchar(); while(c == ' ' || c == '\t') ; if(c == EOF || c == '\n') goto ignore; if(i == 5) break; if(c == '*') { *cp++ = ANY; continue; } if ((n = number(c)) < 0) goto ignore; c = getchar(); if(c == ',') goto mlist; if(c == '-') goto mrange; if(c != '\t' && c != ' ') goto ignore; *cp++ = EXACT; *cp++ = n; continue; mlist: *cp++ = LIST; *cp++ = n; do { if ((n = number(getchar())) < 0) goto ignore; *cp++ = n; c = getchar(); } while (c==','); if(c != '\t' && c != ' ') goto ignore; *cp++ = LIST; continue; mrange: *cp++ = RANGE; *cp++ = n; if ((n = number(getchar())) < 0) goto ignore; c = getchar(); if(c != '\t' && c != ' ') goto ignore; *cp++ = n; } while(c != '\n') { if(c == EOF) goto ignore; if(c == '%') c = '\n'; *cp++ = c; c = getchar(); } *cp++ = '\n'; *cp++ = 0; goto loop; ignore: cp = ocp; while(c != '\n') { if(c == EOF) { *cp++ = EOS; *cp++ = EOS; fclose(stdin); return; } c = getchar(); } goto loop; } number(c) register c; { register n = 0; while (isdigit(c)) { n = n*10 + c - '0'; c = getchar(); } ungetc(c, stdin); if (n>=100) return(-1); return(n); } ') }k@T]`cfi& /* * cp oldfile newfile */ #define BSIZE 512 #include #include #include struct stat stbuf1, stbuf2; char iobuf[BSIZE]; main(argc, argv) char *argv[]; { register i, r; if (argc < 3) goto usage; if (argc > 3) { if (stat(argv[argc-1], &stbuf2) < 0) goto usage; if ((stbuf2.st_mode&S_IFMT) != S_IFDIR) goto usage; } r = 0; for(i=1; i=0 && (stbuf2.st_mode&S_IFMT) == S_IFDIR) { p1 = from; p2 = to; bp = iobuf; while(*bp++ = *p2++) ; bp[-1] = '/'; p2 = bp; while(*bp = *p1++) if (*bp++ == '/') bp = p2; ((to = iobuf; } if (stat(to, &stbuf2) >= 0) { if (stbuf1.st_dev == stbuf2.st_dev && stbuf1.st_ino == stbuf2.st_ino) { fprintf(stderr, "cp: cannot copy file to itself.\n"); return(1); } } if ((fnew = creat(to, mode)) < 0) { fprintf(stderr, "cp: cannot create %s\n", to); close(fold); return(1); } while(n = read(fold, iobuf, BSIZE)) { if (n < 0) { fprintf(stderr, "cp: read error\n"); close(fold); close(fnew); return(1); } else if (write(fnew, iobuf, n) != n) { fprintf(stderr, "cp: write error.\n"); close(fold); close(fnew); return(1); } } close(fold); close(fnew); return(0); } '. ~ksNQTWZi& #include #define LB 256 int one; int two; int three; char *ldr[3]; FILE *ib1; FILE *ib2; FILE *openfil(); main(argc,argv) char *argv[]; { int l; char lb1[LB],lb2[LB]; ldr[0] = ""; ldr[1] = "\t"; ldr[2] = "\t\t"; if(argc > 1) { if(*argv[1] == '-' && argv[1][1] != 0) { l = 1; while(*++argv[1]) { switch(*argv[1]) { case'1': if(!one) { one = 1; ldr[1][0] = ldr[2][l--] = '\0'; } break; case '2': if(!two) { two = 1; ldr[2][l--] = '\0'; } break; case '3': three = 1; break; default: fprintf(stderr,"comm: illegal flag\n"); exit(1); } } argv++; argc--; } } if(argc < 3) { fprintf(stderr,"comm: arg count\n"); exit(1); } ib1 = openfil(argv[1]); ib2 = openfil(argv[2]); if(rd(ib1,lb1) < 0) { if(rd(ib2,lb2) < 0) exit(0); copy(ib2,lb2,2); } if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); while(1) { switch(compare(lb1,lb2)) { case 0: wr(lb1,3); if(rd(ib1,lb1) < 0) { if(rd(ib2,lb2) < 0) exit(0); copy(ib2,lb2,2); } if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); continue; case 1: wr(lb1,1); if(rd(ib1,lb1) < 0) copy(ib2,lb2,2); continue; case 2: wr(lb2,2); if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); continue; } } } rd(file,buf) FILE *file; char *buf; { register int i, c; i = 0; while((c = getc(file)) != EOF) { *buf = c; if(c == '\n' || i > LB-2) { *buf = '\0'; return(0); } i++; buf++; } return(-1); } wr(str,n) char *str; { switch(n) { case 1: if(one) return; break; case 2: if(two) return; break; case 3: if(three) return; } printf("%s%s\n",ldr[n-1],str); } copy(ibuf,lbuf,n) FILE *ibuf; char *lbuf; { do { wr(lbuf,n); } while(rd(ibuf,lbuf) >= 0); exit(0); } compare(a,b) char *a,*b; { register char *ra,*rb; ra = --a; rb = --b; while(*++ra == *++rb) if(*ra == '\0') return(0); if(*ra < *rb) return(1); return(2); } FILE *openfil(s) char *s; { FILE *b; if(s[0]=='-' && s[1]==0) b = stdin; else if((b=fopen(s,"r")) == NULL) { fprintf(stderr,"comm: cannot open %s\n",s); exit(1); } return(b); } '4 kg369<?BEHK`` # include # define PL 256 # define ESC '\033' # define RLF '\013' # define SI '\017' # define SO '\016' # define GREEK 0200 # define LINELN 800 char *page[PL]; char lbuff [LINELN], *line; int bflag, xflag, fflag; int half; int cp, lp; int ll, llh, mustwr; int pcp = 0; char *pgmname; char *strcpy(); main (argc, argv) int argc; char **argv; { int i; int greek; register int c; char fbuff[BUFSIZ]; setbuf (stdout, fbuff); pgmname = argv[0]; for (i = 1; i < argc; i++) { register char *p; if (*argv[i] != '-') { fprintf (stderr, "%s: bad option %s\n", pgmname, argv[i]); exit (2); } for (p = argv[i]+1; *p; p++) { switch (*p) { case 'b': bflag++; break; case 'x': xflag++; break; case 'f': fflag++; break; default: fprintf (stderr, "%s: bad option letter %c\n", pgmname, *p); exit (2); } } } for (ll=0; ll 0) { incr(); incr(); half -= 2; } } break; } continue; case SO: greek = GREEK; continue; case SI: greek = 0; continue; case RLF: decr(); decr(); continue; case '\r': cp = 0; continue; case '\t': cp = (cp + 8) & -8; continue; case '\b': if (cp > 0) cp--; continue; case ' ': cp++; continue; default: c &= 0177; if (c > 040 && c < 0177) { /* if printable */ outc(c | greek); cp++; } continue; } } for (i=0; i cp) { line = lbuff; lp = 0; } while (lp < cp) { switch (*line) { case '\0': *line = ' '; lp++; break; case '\b': lp--; break; default: lp++; } line++; } while (*line == '\b') { line += 2; } if (bflag || *line == '\0' || *line == ' ') *line = c; else { register char c1, c2, c3; c1 = *++line; *line++ = '\b'; c2 = *line; *line++ = c; while (c1) { c3 = *line; *line++ = c1; c1 = c2; c2 = c3; } lp = 0; line = lbuff; } } store (lno) { char *malloc(); lno %= PL; if (page[lno] != 0) free (page[lno]); page[lno] = malloc((unsigned)strlen(lbuff) + 2); if (page[lno] == 0) { fprintf (stderr, "%s: no storage\n", pgmname); exit (2); } strcpy (page[lno],lbuff); } fetch(lno) { register char *p; lno %= PL; p = lbuff; while (*p) *p++ = '\0'; line = lbuff; lp = 0; if (page[lno]) strcpy (line, page[lno]); } emit (s, lineno) char *s; int lineno; { static int cline = 0; register int ncp; register char *p; static int gflag = 0; if (*s) { if (gflag) { putchar (SI); gflag = 0; } while (cline < lineno - 1) { putchar ('\n'); pcp = 0; cline += 2; } if (cline != lineno) { putchar (ESC); putchar ('9'); cline++; } if (pcp) putchar ('\r'); pcp = 0; p = s; while (*p) { ncp = pcp; while (*p++ == ' ') { if ((++ncp & 7) == 0 && !xflag) { pcp = ncp; putchar ('\t'); } } if (!*--p) break; while (pcp < ncp) { putchar (' '); pcp++; } if (gflag != (*p & GREEK) && *p != '\b') { if (gflag) putchar (SI); else putchar (SO); gflag ^= GREEK; } putchar (*p & ~GREEK); if (*p++ == '\b') pcp--; else pcp++; } } } incr() { store (ll++); if (ll > llh) llh = ll; if (ll >= mustwr && page[ll%PL]) { emit (page[ll%PL], ll - PL); mustwr++; free (page[ll%PL]); page[ll%PL] = 0; } fetch (ll); } decr() { if (ll > mustwr - PL) { store (ll--); fetch (ll); } } '> k,'*-0i& #include #include FILE *file1,*file2; int eflg; int lflg = 1; long line = 1; long chr = 0; long skip1; long skip2; long otoi(); main(argc, argv) char **argv; { register c1, c2; char *arg; if(argc < 3) goto narg; arg = argv[1]; if(arg[0] == '-' && arg[1] == 's') { lflg--; argv++; argc--; } arg = argv[1]; if(arg[0] == '-' && arg[1] == 'l') { lflg++; argv++; argc--; } if(argc < 3) goto narg; arg = argv[1]; if( arg[0]=='-' && arg[1]==0 ) file1 = stdin; else(( if((file1 = fopen(arg, "r")) == NULL) goto barg; arg = argv[2]; if((file2 = fopen(arg, "r")) == NULL) goto barg; if (argc>3) skip1 = otoi(argv[3]); if (argc>4) skip2 = otoi(argv[4]); while (skip1) { if ((c1 = getc(file1)) == EOF) { arg = argv[1]; goto earg; } skip1--; } while (skip2) { if ((c2 = getc(file2)) == EOF) { arg = argv[2]; goto earg; } skip2--; } loop: chr++; c1 = getc(file1); c2 = getc(file2); if(c1 == c2) { if (c1 == '\n') line++; if(c1 == EOF) { if(eflg) exit(1); exit(0); } goto loop; } if(lflg == 0) exit(1); if(c1 == EOF) { arg = argv[1]; goto earg; } if(c2 == EOF) goto earg; if(lflg == 1) { printf("%s %s differ: char %ld, line %ld\n", argv[1], arg, chr, line); exit(1); } eflg = 1; printf("%6ld %3o %3o\n", chr, c1, c2); goto loop; narg: printf("cmp: arg count\n"); exit(2); barg: if (lflg) printf("cmp: cannot open %s\n", arg); exit(2); earg: printf("cmp: EOF on %s\n", arg); exit(1); } long otoi(s) char *s; { long v; int base; v = 0; base = 10; if (*s == '0') base = 8; while(isdigit(*s)) v = v*base + *s++ - '0'; return(v); } 'C k洁!$Xi& /* * clri filsys inumber ... */ #include #include #define ISIZE (sizeof(struct dinode)) #define BSIZE 512 #define NI (BSIZE/ISIZE) struct ino { char junk[ISIZE]; }; struct ino buf[NI]; int status; main(argc, argv) char *argv[]; { register i, f; unsigned n; int j, k; long off; if(argc < 3) { printf("usage: clri filsys inumber ...\n"); exit(4); } f = open(argv[1], 2); if(f < 0) { printf("cannot open %s\n", argv[1]); exit(4); } for(i=2; i '9') return(0); return(1); } 'G k]-i& /* * chown uid file ... */ #include #include #include #include #include struct passwd *pwd,*getpwnam(); struct stat stbuf; int uid; int status; main(argc, argv) char *argv[]; { register c; if(argc < 3) { printf("usage: chown uid file ...\n"); exit(4); } if(isnumber(argv[1])) { uid = atoi(argv[1]); goto cho; } if((pwd=getpwnam(argv[1])) == NULL) { printf("unknown user id: %s\n",argv[1]); exit(4); } uid = pwd->pw_uid; cho: for(c=2; c #include #include #define USER 05700 /* user's bits */ #define GROUP 02070 /* group's bits */ #define OTHER 00007 /* other's bits */ #define ALL 01777 /* all (note absence of setuid, etc) */ #define READ 00444 /* read permit */ #define WRITE 00222 /* write permit */ #define EXEC 00111 /* exec permit */ #define SETID 06000 /* set[ug]id */ #define STICKY 01000 /* sticky bit */ char *ms; int um; struct stat st; main(argc,argv) char **argv; { register i; register char *p; int status = 0; if (argc < 3) { fprintf(stderr, "Usage: chmod [ugoa][+-=][rwxstugo] file ...\n"); exit(255); } ms = argv[1]; um = umask(0); newmode(0); for (i = 2; i < argc; i++) { p = argv[i]; if (stat(p, &st) < 0) { fprintf(stderr, "chmod: can't access %s\n", p); ++status; continue; } ms = argv[1]; if (chmod(p, newmode(st.st_mode)) < 0) { fprintf(stderr, "chmod: can't change %s\n", p); ++status; continue; } } exit(status); } newmode(nm) unsigned nm; { register o, m, b; m = abs(); if (!*ms) return(m); do { m = who(); while (o = what()) { b = where(nm); switch (o) { case '+': nm |= b & m; break; case '-': nm &= ~(b & m); break; case '=': nm &= ~m; nm |= b & m; break; } } } while (*ms++ == ','); if (*--ms) { fprintf(stderr, "chmod: invalid mode\n"); exit(255); } return(nm); } abs() { register c, i; i = 0; while ((c = *ms++) >= '0' && c <= '7') i = (i << 3) + (c - '0'); ms--; return(i); } who() { register m; m = 0; for (;;) switch (*ms++) { case 'u': m |= USER; continue; case 'g': m |= GROUP; continue; case 'o': m |= OTHER; continue; case 'a': m |= ALL; continue; default: ms--; if (m == 0) m = ALL & ~um; return m; } } what() { switch (*ms) { case '+': case '-': case '=': return *ms++; } return(0); } where(om) register om; { register m; m = 0; switch (*ms) { case 'u': m = (om & USER) >> 6; goto dup; case 'g': m = (om & GROUP) >> 3; goto dup; case 'o': m = (om & OTHER); dup: m &= (READ|WRITE|EXEC); m |= (m << 3) | (m << 6); ++ms; return m; } for (;;) switch (*ms++) { case 'r': m |= READ; continue; case 'w': m |= WRITE; continue; case 'x': m |= EXEC; continue; case 's': m |= SETID; continue; case 't': m |= STICKY; continue; default: ms--; return m; } } 'P k(i& /* * chgrp gid file ... */ #include #include #include #include #include struct group *gr,*getgrnam(); struct stat stbuf; int gid; int status; main(argc, argv) char *argv[]; { register c; if(argc < 3) { printf("usage: chgrp gid file ...\n"); exit(4); } if(isnumber(argv[1])) { gid = atoi(argv[1]); } else { if((gr=getgrnam(argv[1])) == NULL) { printf("unknown group: %s\n",argv[1]); exit(4); } gid = gr->gr_gid; } for(c=2; c FILE *fin; int delim = 0; /* today's version assumes no delimiters; they must be explicitly set */ main(argc, argv) char **argv; { while (argc > 1 && argv[1][0] == '-') { switch (argv[1][1]) { case 'd': delim = argv[1][2]; break; } argc--; argv++; } if (argc <= 1) check(stdin); else while (--argc > 0) { if ((fin = fopen(*++argv, "r")) == NULL) { printf("Can't open %s\n", *argv); exit(1); } printf("%s:\n", *argv); check(fin); fclose(fin); } } check(f) FILE *f; { int start, line, eq, ndel, totdel; char in[600], *p; start = eq = line = ndel = totdel = 0; while (fgets(in, 600, f) != NULL) { line++; ndel = 0; for (p = in; *p; p++) if (*p == delim) ndel++; if (*in=='.' && *(in+1)=='E' && *(in+2)=='Q') { if (eq++) printf(" Spurious EQ, line %d\n", line); if (totdel) printf(" EQ in %c%c, line %d\n", delim, delim, line); } else if (*in=='.' && *(in+1)=='E' && *(in+2)=='N') { if (eq==0) printf(" Spurious EN, line %d\n", line); else eq = 0; if (totdel > 0) printf(" EN in %c%c, line %d\n", delim, delim, line); start = 0; } else if (eq && *in=='d' && *(in+1)=='e' && *(in+2)=='l' && *(in+3)=='i' && *(in+4)=='m') { for (p=in+5; *p; p++) if (*p != ' ') { if (*p == 'o' && *(p+1) == 'f') delim = 0; else { delim = *p; ndel = totdel = 0; } break; } if (delim == 0) printf(" Delim off, line %d\n", line); else printf(" New delims %c%c, line %d\n", delim, delim, line); } if (ndel > 0 && eq > 0) printf(" %c%c in EQ, line %d\n", delim, delim, line); if (ndel == 0) continue; totdel += ndel; if (totdel%2) { if (start == 0) start = line; else { printf(" %d line %c%c, lines %d-%d\n", line-start+1, delim, delim, start, line); start = line; } } else { if (start > 0) { printf(" %d line %c%c, lines %d-%d\n", line-start+1, delim, delim, start, line); start = 0; } totdel = 0; } } if (totdel) printf(" Unfinished %c%c\n", delim, delim); if (eq) printf(" Unfinished EQ\n"); } 'Y kR% # # include # include # include /* cc command */ # define MAXINC 10 # define MAXFIL 100 # define MAXLIB 100 # define MAXOPT 100 char *tmp0; char *tmp1; char *tmp2; char *tmp3; char *tmp4; char *tmp5; char *outfile; # define CHSPACE 1000 char ts[CHSPACE+50]; char *tsa = ts; char *tsp = ts; char *av[50]; char *clist[MAXFIL]; char *llist[MAXLIB]; int pflag; int sflag; int cflag; int eflag; int exflag; int oflag; int proflag; int noflflag; char *chpass ; char *npassname ; char pass0[20] = "/lib/c0"; char pass1[20] = "/lib/c1"; char pass2[20] = "/lib/c2"; char passp[20] = "/lib/cpp"; char *pref = "/lib/crt0.o"; char *copy(); char *setsuf(); char *strcat(); char *strcpy(); main(argc, argv) char *argv[]; { char *t; char *savetsp; char *assource; char **pv, *ptemp[MAXOPT], **pvt; int nc, nl, i, j, c, f20, nxo, na; int idexit(); i = nc = nl = f20 = nxo = 0; setbuf(stdout, (char *)NULL); pv = ptemp; while(++i < argc) { if(*argv[i] == '-') switch (argv[i][1]) { default: goto passa; case 'S': sflag++; cflag++; break; case 'o': if (++i < argc) { outfile = argv[i]; if ((c=getsuf(outfile))=='c'||c=='o') { error("Would overwrite %s", outfile); exit(8); } } break; case 'O': oflag++; break; case 'p': proflag++; break; case 'E': exflag++; case 'P': pflag++; *pv++ = argv[i]; case 'c': cflag++; break; case 'f': noflflag++; if (npassname || chpass) error("-f overwrites earlier option", (char *)NULL); npassname = "/lib/f"; chpass = "1"; break; case '2': if(argv[i][2] == '\0') pref = "/lib/crt2.o"; else { pref = "/lib/crt20.o"; f20 = 1; } break; case 'D': case 'I': case 'U': case 'C': *pv++ = argv[i]; if (pv >= ptemp+MAXOPT) { error("Too many DIUC options", (char *)NULL); --pv; } break; case 't': if (chpass) error("-t overwrites earlier option", (char *)NULL); chpass = argv[i]+2; if (chpass[0]==0) chpass = "012p"; break; case 'B': if (npassname) error("-B overwrites earlier option", (char *)NULL); npassname = argv[i]+2; if (npassname[0]==0) npassname = "/usr/src/cmd/c/o"; break; } else { passa: t = argv[i]; if((c=getsuf(t))=='c' || c=='s'|| exflag) { clist[nc++] = t; if (nc>=MAXFIL) { error("Too many source files", (char *)NULL); exit(1); } t = setsuf(t, 'o'); } if (nodup(llist, t)) { llist[nl++] = t; if (nl >= MAXLIB) { error("Too many object/library files", (char *)NULL); exit(1); } if (getsuf(t)=='o') nxo++; } } } if (npassname && chpass ==0) chpass = "012p"; if (chpass && npassname==0) npassname = "/usr/src/cmd/c/"; if (chpass) for (t=chpass; *t; t++) { switch (*t) { case '0': strcpy (pass0, npassname); strcat (pass0, "c0"); continue; case '1': strcpy (pass1, npassname); strcat (pass1, "c1"); continue; case '2': strcpy (pass2, npassname); strcat (pass2, "c2"); continue; case 'p': strcpy (passp, npassname); strcat (passp, "cpp"); continue; } } if (noflflag) pref = proflag ? "/lib/fmcrt0.o" : "/lib/fcrt0.o"; else if (proflag) pref = "/lib/mcrt0.o"; if(nc==0) goto nocom; if (pflag==0) { tmp0 = copy("/tmp/ctm0a"); while (access(tmp0, 0)==0) tmp0[9]++; while((creat(tmp0, 0400))<0) { if (tmp0[9]=='z') { error("cc: cannot create temp", NULL); exit(1); } tmp0[9]++; } } if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, idexit); if (signal(SIGTERM, SIG_IGN) != SIG_IGN) signal(SIGTERM, idexit); (tmp1 = copy(tmp0))[8] = '1'; (tmp2 = copy(tmp0))[8] = '2'; (tmp3 = copy(tmp0))[8] = '3'; if (oflag) (tmp5 = copy(tmp0))[8] = '5'; if (pflag==0) (tmp4 = copy(tmp0))[8] = '4'; pvt = pv; for (i=0; i1) printf("%s:\n", clist[i]); if (getsuf(clist[i])=='s') { assource = clist[i]; goto assemble; } else assource = tmp3; if (pflag) tmp4 = setsuf(clist[i], 'i'); savetsp = tsp; av[0] = "cpp"; av[1] = clist[i]; av[2] = exflag ? "-" : tmp4; na = 3; for(pv=ptemp; pv 1) { cflag++; eflag++; continue; } } nocom: if (cflag==0 && nl!=0) { i = 0; av[0] = "ld"; av[1] = "-X"; av[2] = pref; j = 3; if (noflflag) { j = 4; av[3] = "-lfpsim"; } if (outfile) { av[j++] = "-o"; av[j++] = outfile; } while(i2 && *s++=='.') return(*s); return(0); } char * setsuf(as, ch) char *as; { register char *s, *s1; s = s1 = copy(as); while(*s) if (*s++ == '/') s1 = s; s[-1] = ch; return(s1); } callsys(f, v) char f[], *v[]; { int t, status; if ((t=fork())==0) { execv(f, v); printf("Can't find %s\n", f); exit(100); } else if (t == -1) { printf("Try again\n"); return(100); } w((hile(t!=wait(&status)) ; if (t = status&0377) { if (t!=SIGINT) { printf("Fatal error in %s\n", f); eflag = 8; } dexit(); } return((status>>8) & 0377); } char * copy(as) char *as; { char *malloc(); register char *otsp, *s; otsp = tsp; s = as; while (*tsp++ = *s++) ; if (tsp > tsa+CHSPACE) { tsp = tsa = malloc(CHSPACE+50); if (tsp==NULL) { error("no space for file names", (char *)NULL); dexit(); } } return(otsp); } nodup(l, os) char **l, *os; { register char *t, *s; register int c; s = os; if (getsuf(s) != 'o') return(1); while(t = *l++) { while(c = *s++) if (c != *t++) break; if (*t=='\0' && c=='\0') return(0); s = os; } return(1); } cunlink(f) char *f; { if (f==NULL) return; unlink(f); } 'j k?ǴW #include int slevel[10]; int clevel = 0; int spflg[20][10]; int sind[20][10]; int siflev[10]; int sifflg[10]; int iflev = 0; int ifflg = -1; int level = 0; int ind[10] = { 0,0,0,0,0,0,0,0,0,0 }; int eflg = 0; int paren = 0; int pflg[10] = { 0,0,0,0,0,0,0,0,0,0 }; char lchar; char pchar; int aflg = 0; int ct; int stabs[20][10]; int qflg = 0; char *wif[] = { "if",0}; char *welse[] = { "else",0}; char *wfor[] = { "for",0}; char *wds[] = { "case","default",0}; int j = 0; char string[200]; char cc; int sflg = 1; int peek = -1; int tabs = 0; int lastchar; int c; main(argc,argv) int argc; char argv[]; { while((c = getch()) != EOF){ switch(c){ case ' ': case '\t': if(lookup(welse) == 1){ gotelse(); if(sflg == 0 || j > 0)string[j++] = c; puts(); sflg = 0; if(getnl() == 1){ puts(); printf("\n"); sflg = 1; pflg[level]++; tabs++; } continue; } if(sflg == 0 || j > 0)string[j++] = c; continue; case '\n': if((eflg = lookup(welse)) == 1)gotelse(); puts(); printf("\n"); sflg = 1; if(eflg == 1){ pflg[level]++; tabs++; } else if(pchar == lchar) aflg = 1; continue; case '{': if(lookup(welse) == 1)gotelse(); siflev[clevel] = iflev; sifflg[clevel] = ifflg; iflev = ifflg = 0; clevel++; if(sflg == 1 && pflg[level] != 0){ pflg[level]--; tabs--; } string[j++] = c; puts(); getnl(); puts(); printf("\n"); tabs++; sflg = 1; if(pflg[level] > 0){ ind[level] = 1; level++; slevel[level] = clevel; } continue; case '}': clevel--; if((iflev = siflev[clevel]-1) < 0)iflev = 0; ifflg = sifflg[clevel]; if(pflg[level] >0 && ind[level] == 0){ tabs -= pflg[level]; pflg[level] = 0; } puts(); tabs--; ptabs(); if((peek = getch()) == ';'){ printf("%c;",c); peek = -1; } else printf("%c",c); getnl(); puts(); printf("\n"); sflg = 1; if(clevel < slevel[level])if(level > 0)level--; if(ind[level] != 0){ tabs -= pflg[level]; pflg[level] = 0; ind[level] = 0; } continue; case '"': case '\'': string[j++] = c; while((cc = getch()) != c){ string[j++] = cc; if(cc == '\\'){ string[j++] = getch(); } if(cc == '\n'){ puts(); sflg = 1; } } string[j++] = cc; if(getnl() == 1){ lchar = cc; peek = '\n'; } continue; case ';': string[j++] = c; puts(); if(pflg[level] > 0 && ind[level] == 0){ tabs -= pflg[level]; pflg[level] = 0; } getnl(); puts(); printf("\n"); sflg = 1; if(iflev > 0) if(ifflg == 1){iflev--; ifflg = 0; } else iflev = 0; continue; case '\\': string[j++] = c; string[j++] = getch(); continue; case '?': qflg = 1; string[j++] = c; continue; case ':': string[j++] = c; if(qflg == 1){ qflg = 0; continue; } if(lookup(wds) == 0){ sflg = 0; puts(); } else{ tabs--; puts(); tabs++; } if((peek = getch()) == ';'){ printf(";"); peek = -1; } getnl(); puts(); printf("\n"); sflg = 1; continue; case '/': string[j++] = c; if((peek = getch()) != '*')continue; string[j++] = peek; peek = -1; comment(); continue; case ')': paren--; string[j++] = c; puts(); if(getnl() == 1){ peek = '\n'; if(paren != 0)aflg = 1; else if(tabs > 0){ pflg[level]++; tabs++; ind[level] = 0; } } continue; case '#': string[j++] = c; while((cc = getch()) != '\n')string[j++] = cc; string[j++] = cc; sflg = 0; puts(); sflg = 1; continue; case '(': string[j++] = c; paren++; if(lookup(wfor) == 1){ while((c = gets()) != ';'); ct=0; cont: while((c = gets()) != ')'){ if(c == '(') ct++; } if(ct != 0){ ct--; goto cont; } paren--; puts(); if(getnl() == 1){ peek = '\n'; pflg[level]++; tabs++; ind[level] = 0; } continue; } if(lookup(wif) == 1){ puts(); stabs[clevel][iflev] = tabs; spflg[clevel][iflev] = pflg[level]; sind[clevel][iflev] = ind[level]; iflev++; ifflg = 1; } continue; default: string[j++] = c; if(c != ',')lchar = c; } } } ptabs(){ int i; for(i=0; i < tabs; i++)printf("\t"); } getch(){ if(peek < 0 && lastchar != ' ' && lastchar != '\t')pchar = lastchar; lastchar = (peek<0) ? getc(stdin):peek; peek = -1; return(lastchar); } puts(){ if(j > 0){ if(sflg != 0){ ptabs(); sflg = 0; if(aflg == 1){ aflg = 0; if(tabs > 0)printf(" "); } } string[j] = '\0'; printf("%s",string); j = 0; } else{ if(sflg != 0){ sflg = 0; aflg = 0; } } } lookup(tab) char *tab[]; { char r; int l,kk,k,i; if(j < 1)return(0); kk=0; while(string[kk] == ' ')kk++; for(i=0; tab[i] != 0; i++){ l=0; for(k=kk;(r = tab[i][l++]) == string[k] && r != '\0';k++); if(r == '\0' && (string[k] < 'a' || string[k] > 'z' || k >= j))return(1); } return(0); } gets(){ char ch; beg: if((ch'u kʴW = string[j++] = getch()) == '\\'){ string[j++] = getch(); goto beg; } if(ch == '\'' || ch == '"'){ while((cc = string[j++] = getch()) != ch)if(cc == '\\')string[j++] = getch(); goto beg; } if(ch == '\n'){ puts(); aflg = 1; goto beg; } else return(ch); } gotelse(){ tabs = stabs[clevel][iflev]; pflg[level] = spflg[clevel][iflev]; ind[level] = sind[clevel][iflev]; ifflg = 1; } getnl(){ while((peek = getch()) == '\t' || peek == ' '){ string[j++] = peek; peek = -1; } if((peek = getch()) == '/'){ peek = -1; if((peek = getch()) == '*'){ string[j++] = '/'; string[j++] = '*'; peek = -1; comment(); } else string[j++] = '/'; } if((peek = getch()) == '\n'){ peek = -1; return(1); } return(0); } comment(){ rep: while((c = string[j++] = getch()) != '*') if(c == '\n'){ puts(); sflg = 1; } gotstar: if((c = string[j++] = getch()) != '/'){ if(c == '*')goto gotstar; goto rep; } } 'x kji% /* * Concatenate files. */ #include #include #include char stdbuf[BUFSIZ]; main(argc, argv) char **argv; { int fflg = 0; register FILE *fi; register c; int dev, ino = -1; struct stat statb; setbuf(stdout, stdbuf); for( ; argc>1 && argv[1][0]=='-'; argc--,argv++) { switch(argv[1][1]) { case 0: break; case 'u': setbuf(stdout, (char *)NULL); continue; } break; } fstat(fileno(stdout), &statb); statb.st_mode &= S_IFMT; if (statb.st_mode!=S_IFCHR && statb.st_mode!=S_IFBLK) { dev = statb.st_dev; ino = statb.st_ino; } if (argc < 2) { argc = 2; fflg++; } while (--argc > 0) { if (fflg || (*++argv)[0]=='-' && (*argv)[1]=='\0') fi = stdin; else { if ((fi = fopen(*argv, "r")) == NULL) { fprintf(stderr, "cat: can't open %s\n", *argv); continue; } } fstat(fileno(fi), &statb); if (statb.st_dev==dev && statb.st_ino==ino) { fprintf(stderr, "cat: input %s is output\n", fflg?"-": *argv); fclose(fi); continue; } while ((c = getc(fi)) != EOF) putchar(c); if (fi!=stdin) fclose(fi); } return(0); } (('| kb` $i% char dayw[] = { " S M Tu W Th F S" }; char *smon[]= { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", }; char string[432]; main(argc, argv) char *argv[]; { register y, i, j; int m; if(argc < 2) { printf("usage: cal [month] year\n"); exit(0); } if(argc == 2) goto xlong; /* * print out just month */ m = number(argv[1]); if(m<1 || m>12) goto badarg; y = number(argv[2]); if(y<1 || y>9999) goto badarg; printf(" %s %u\n", smon[m-1], y); printf("%s\n", dayw); cal(m, y, string, 24); for(i=0; i<6*24; i+=24) pstr(string+i, 24); exit(0); /* * print out complete year */ xlong: y = number(argv[1]); if(y<1 || y>9999) goto badarg; printf("\n\n\n"); printf(" %u\n", y); printf("\n"); for(i=0; i<12; i+=3) { for(j=0; j<6*72; j++) string[j] = '\0'; printf(" %.3s", smon[i]); printf(" %.3s", smon[i+1]); printf(" %.3s\n", smon[i+2]); printf("%s %s %s\n", dayw, dayw, dayw); cal(i+1, y, string, 72); cal(i+2, y, string+23, 72); cal(i+3, y, string+46, 72); for(j=0; j<6*72; j+=72) pstr(string+j, 72); } printf("\n\n\n"); exit(0); badarg: printf("Bad argument\n"); } number(str) char *str; { register n, c; register char *s; n = 0; s = str; while(c = *s++) { if(c<'0' || c>'9') return(0); n = n*10 + c-'0'; } return(n); } pstr(str, n) char *str; { register i; register char *s; s = str; i = n; while(i--) if(*s++ == '\0') s[-1] = ' '; i = n+1; while(i--) if(*--s != ' ') break; s[1] = '\0'; printf("%s\n", str); } char mon[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, }; cal(m, y, p, w) char *p; { register d, i; register char *s; s = p; d = jan1(y); mon[2] = 29; mon[9] = 30; switch((jan1(y+1)+7-d)%7) { /* * non-leap year */ case 1: mon[2] = 28; break; /* * 1752 */ default: mon[9] = 19; break; /* * leap year */ case 2: ; } for(i=1; i 9) *s = i/10+'0'; s++; *s++ = i%10+'0'; s++; if(++d == 7) { d = 0; s = p+w; p = s; } } } /* * return day of the week * of jan 1 of given year */ jan1(yr) { register y, d; /* * normal gregorian calendar * one extra day per four years */ y = yr; d = 4+y+(y+3)/4; /* * julian calendar * regular gregorian * less three days per 400 */ if(y > 1800) { d -= (y-1701)/100; d += (y-1601)/400; } /* * great calendar changeover instant */ if(y > 1752) d += 3; return(d%7); } ' k9ܴy|V2R2R M=/usr/src/cmd/mip LOAD1=-i -s LOAD2=-s -n CFLAGS=-O all: head cp: head cp lpass1 /usr/lib/lint1 cp lpass2 /usr/lib/lint2 rm lpass1 lpass2 *.o cgram.c cmp: head cmp lpass1 /usr/lib/lint1 cmp lpass2 /usr/lib/lint2 rm lpass1 lpass2 *.o cgram.c head: lpass1 lpass2 ; lpass1: cgram.o xdefs.o scan.o comm1.o pftn.o trees.o optim.o lint.o cc $(LOAD1) cgram.o xdefs.o scan.o comm1.o pftn.o trees.o optim.o lint.o mv a.out lpass1 trees.o: $M/manifest macdefs $M/mfile1 $M/trees.c cc -c $(CFLAGS) -I$M -I. $M/trees.c optim.o: $M/manifest macdefs $M/mfile1 $M/optim.c cc -c $(CFLAGS) -I$M -I. $M/optim.c pftn.o: $M/manifest macdefs $M/mfile1 $M/pftn.c cc -c $(CFLAGS) -I$M -I. $M/pftn.c lint.o: $M/manifest macdefs $M/mfile1 lmanifest cc -c $(CFLAGS) -I$M -I. lint.c scan.o: $M/manifest macdefs $M/mfile1 $M/scan.c cc -c $(CFLAGS) -I$M -I. $M/scan.c xdefs.o: $M/manifest $M/mfile1 macdefs $M/xdefs.c cc -c $(CFLAGS) -I$M -I. $M/xdefs.c cgram.o: $M/manifest $M/mfile1 macdefs cgram.c cc -c $(CFLAGS) -I$M -I. cgram.c cgram.c: $M/cgram.y yacc $M/cgram.y mv y.tab.c cgram.c comm1.o: $M/manifest $M/mfile1 $M/common macdefs $M/comm1.c cc -c $(CFLAGS) -I. -I$M $M/comm1.c shrink: rm *.o clobber: shrink rm lpass1 lpass2 lpass2: lpass2.o cc -o lpass2 $(LOAD2) lpass2.o lpass2.o: $M/manifest lmanifest cc $(CFLAGS) -c -I$M -I. lpass2.c lintall: cgram.c lint -hpv -I. -I$M cgram.c $M/xdefs.c $M/scan.c $M/pftn.c $M/trees.c $M/optim.c lint.c $M/reader.c local2.c order.c $M/match.c $M/allo.c $M/comm1.c table.c install: echo better be newgrp bin... diff SHELL /usr/bin/lint diff llib-lc /usr/lib diff llib-port /usr/lib cp lpass1 /usr/lib/lint1 cp lpass2 /usr/lib/lint2 cp llib-* /usr/lib cp SHELL /usr/bin/lint cp SHELL llib-* lmanifest macdefs lint.c lpass2.c /usr/src/cmd/lint ' kh:mpsvi # define makecc(val,i) lastcon |= val<<(8*i); /* pdp-11 womp next char */ # define ARGINIT 288 /* initial offset for arguments */ # define AUTOINIT 0 /* initial automatic offset */ extern int SZCHAR; extern int SZINT; extern int SZFLOAT; extern int SZDOUBLE; extern int SZLONG; extern int SZSHORT; extern int SZPOINT; extern int ALCHAR; extern int ALINT; extern int ALFLOAT; extern int ALDOUBLE; extern int ALLONG; extern int ALSHORT; extern int ALPOINT; extern int ALSTRUCT; # define SAVEADJUST 0 /* bits of adjustment required for stackframe */ /* type (INT OR LONG) big enough to hold pointers */ /* size in which constants are converted */ /* should be long if feasable */ # define CONSZ long # define CONFMT "%Ld" # define CONOFMT "%Lo" /* size in which offsets are kept /* should be large enough to cover address space in bits */ # define OFFSZ long /* character set macro */ # define CCTRANS(x) x /* register cookie for stack pointer */ # define STKREG 9 /* maximum and minimum register variable values */ # define MAXRVAR 1000 # define MINRVAR 1 /* many macro definitions for functions irrelevant to lint */ # define locctr(n) 0 # define getlab() 10 # define genswitch( x,y) # define bccode() # define cendarg() # define incode(a,s) (inoff += (s)) # define fincode(a,s) (inoff += (s) ) # define vfdzero(n) (inoff += (n)) # define aobeg() # define aoend() # ifndef unix # define NOFORTRAN {extern int pflag; if(pflag) werror( "fortran keyword nonportable" );} # else # define NOFORTRAN { werror( "fortran keyword nonportable" ); } # endif # define LINT ' kU@CFILORUX[^3=Q=Q # include "lmanifest" # include "manifest" # define USED 01 # define VUSED 02 # define EUSED 04 # define RVAL 010 # define VARARGS 0100 typedef struct { TWORD aty; int extra; } atype; struct line { char name[8]; int decflag; atype type; int nargs; atype atyp[50]; int fline; char file[100]; } l1, l2, *pd, /* pointer to line having definition */ *pc, /* pointer to current line read */ *p3; /* used for swapping pc and pd */ int uses = USED; int hflag = 0; int pflag = 0; int xflag = 0; int uflag = 1; main( argc, argv ) char *argv[]; { register char *p; /* first argument is - options */ if( argc>=2 && argv[1][0] == '-' ){ for( p=argv[1]; *p; ++p ){ switch( *p ){ case 'h': hflag = 1; break; case 'p': pflag = 1; break; case 'x': xflag = 1; break; case 'u': uflag = 0; break; } } } pd = &l1; pc = &l2; pd->name[0] = '\0' ; pd->fline = 0; pd->file[0] = '\0'; pd->decflag = LDI; /* main loop: read a line; if same as last ((line, check compatibility if not same as last line, becomes df. */ for(;;){ lread(); if( steq(pc->name, pd->name) ) chkcompat(); else { lastone(); setuse(); p3=pc; pc = pd; pd = p3; } } } lread(){ /* read a line into pc */ register i, n; getnam( pc->name ); pc->decflag = rdin10(); rdinty( &pc->type ); n = pc->nargs = rdin10(); if( n<0 ) n = -n; for( i=0; iatyp[i] ); } getnam( pc->file ); pc->fline = rdin10(); while( getchar() != '\n' ) ; /* VOID */ } rdin10(){ register val, c, s; val = 0; s = 1; while( (c=getchar()) != '\t' ){ if( c <= 0 ) error( "unexpected EOF" ); else if( c == '-' ) { s = -1; continue; } else if( c<'0' || c>'9' ) { error("rotten digit: %o\n", c ); } val = val*10 + c - '0'; } return( val*s ); } rdinty( p ) atype *p; { register val, c, s; val = 0; s = 1; while( (c=getchar()) != '\t' && c!= '<' ){ if( c <= 0 ) error( "unexpected EOF" ); else if( c == '-' ) { s = -1; continue; } else if( c<'0' || c>'7' ) { error("rotten digit: %o\n", c ); } val = (val<<3) + c - '0'; } p->aty = val*s; if( c == '<' ) p->extra = rdin10(); else p->extra = 0; } getnam(p) char *p; { register c; while( (c=getchar()) != '\t' ){ if( c == '\n' ) error( "rotten name\n" ); if( c <= 0 ) cleanup(); *p++ = c; } *p = '\0'; } /* VARARGS */ error( s, a ) char *s; { fprintf( stderr, "pass 2 error: " ); fprintf( stderr, s, a ); fprintf( stderr, "\n" ); exit(1); } steq(p,q) char *p,*q; { /* check that the p and q names are the same */ while( *p == *q ){ if( *p == 0 ) return(1); ++p; ++q; } return(0); } chkcompat(){ /* are the types, etc. in pc and pd compatible */ register int i; setuse(); /* argument check */ if( pd->decflag & (LDI|LIB|LUV|LUE) ){ if( pc->decflag & (LUV|LIB|LUE) ){ if( pd->nargs != pc->nargs ){ if( !(uses&VARARGS) ){ printf( "%.7s: variable # of args.", pd->name ); viceversa(); } if( pc->nargs > pd->nargs ) pc->nargs = pd->nargs; if( !(pd->decflag & (LDI|LIB) ) ) { pd->nargs = pc->nargs; uses |= VARARGS; } } for( i=0; inargs; ++i ){ if( chktype(&pd->atyp[i], &pc->atyp[i]) ){ printf( "%.7s, arg. %d used inconsistently", pd->name, i+1 ); viceversa(); } } } } if( (pd->decflag&(LDI|LIB|LUV)) && pc->decflag==LUV ){ if( chktype( &pc->type, &pd->type ) ){ printf( "%.7s value used inconsistently", pd->name ); viceversa(); } } /* check for multiple declaration */ if( (pd->decflag&LDI) && (pc->decflag&(LDI|LIB)) ){ printf( "%.7s multiply declared", pd->name ); viceversa(); } /* do a bit of checking of definitions and uses... */ if( (pd->decflag & (LDI|LIB|LDX|LDC)) && (pc->decflag & (LDX|LDC)) && pd->type.aty != pc->type.aty ){ printf( "%.7s value declared inconsistently", pd->name ); viceversa(); } /* better not call functions which are declared to be structure or union returning */ if( (pd->decflag & (LDI|LIB|LDX|LDC)) && (pc->decflag & LUE) && pd->type.aty != pc->type.aty ){ /* only matters if the function returns union or structure */ TWORD ty; ty = pd->type.aty; if( ISFTN(ty) && ((ty = DECREF(ty))==STRTY || ty==UNIONTY ) ){ printf( "%.7s function value type must be declared before use", pd->name ); viceversa(); } } if( pflag && pd->decflag==LDX && pc->decflag == LUM && !ISFTN(pd->type.aty) ){ /* make the external declaration go away */ /* in effect, it was used without being defined */ /* swap pc and pd */ p3 = pc; pc = pd; pd = p3; } } viceversa(){ /* print out file comparison */ printf( " %s(%d) :: %s(%d)\n", pd->file, pd->fline, pc->file, pc->fline ); } /* messages for defintion/use */ char * mess[2][2] = { "", "%.7s used( %s(%d) ), but not defined\n", "%.7s defined( %s(%d) ), but never used\n", "%.7s declared( %s(%d) ), but never used or defined\n" }; lastone(){ /* called when pc and pd are at last different */ register nu, nd; nu = nd = 0; if( !(u' kմ@CFILORUX[^3=Q=Qses&USED) && pd->decflag != LIB ) { if( !steq(pd->name,"main") ) nu = 1; } if( !ISFTN(pd->type.aty) ){ switch( pd->decflag ){ case LIB: nu = nd = 0; /* don't complain about uses on libraries */ break; case LDX: if( !xflag ) break; case LUV: case LUE: case LUM: nd = 1; } } if( uflag && ( nu || nd ) ) printf( mess[nu][nd], pd->name, pd->file, pd->fline ); if( (uses&(RVAL+EUSED)) == (RVAL+EUSED) ){ printf( "%.7s returns value which is %s ignored\n", pd->name, uses&VUSED ? "sometimes" : "always" ); } if( (uses&(RVAL+VUSED)) == (VUSED) && (pd->decflag&(LDI|LIB)) ){ printf( "%.7s value is used, but none returned\n", pd->name ); } /* clean up pc, in preparation for the next thing */ uses = 0; if( pc->nargs < 0 ){ pc->nargs = -pc->nargs; uses = VARARGS; } } cleanup(){ /* call lastone and die gracefully */ lastone(); exit(0); } setuse(){ /* check new type to ensure that it is used */ switch( pc->decflag ){ case LRV: uses |= RVAL; return; case LUV: uses |= VUSED+USED; return; case LUE: uses |= EUSED+USED; return; case LUM: uses |= USED; return; } } chktype( pt1, pt2 ) register atype *pt1, *pt2; { /* check the two type words to see if they are compatible */ /* for the moment, enums are turned into ints, and should be checked as such */ if( pt1->aty == ENUMTY ) pt1->aty = INT; if( pt2->aty == ENUMTY ) pt2->aty = INT; if( pt2->extra ){ /* constant passed in */ if( pt1->aty == UNSIGNED && pt2->aty == INT ) return( 0 ); else if( pt1->aty == ULONG && pt2->aty == LONG ) return( 0 ); } else if( pt1->extra ){ /* for symmetry */ if( pt2->aty == UNSIGNED && pt1->aty == INT ) return( 0 ); else if( pt2->aty == ULONG && pt1->aty == LONG ) return( 0 ); } return( pt1->aty != pt2->aty ); } ' k`ᴁ=1i /* the key: LDI defined and initialized: storage set aside LIB defined on a library LDC defined as a common region on UNIX LDX defined by an extern: if ! pflag, same as LDI LRV function returns a value LUV function used in a value context LUE function used in effects context LUM mentioned somewhere other than at the declaration */ # define LDI 01 # define LIB 02 # define LDC 04 # define LDX 010 # define LRV 020 # define LUV 040 # define LUE 0100 # define LUM 0200 ' kJAi # include "mfile1" # include "lmanifest" # include # define VAL 0 # define EFF 1 /* these are appropriate for the -p flag */ int SZCHAR = 8; int SZINT = 16; int SZFLOAT = 32; int SZDOUBLE = 64; int SZLONG = 32; int SZSHORT = 16; int SZPOINT = 16; int ALCHAR = 8; int ALINT = 16; int ALFLOAT = 32; int ALDOUBLE = 64; int ALLONG = 32; int ALSHORT = 16; int ALPOINT = 16; int ALSTRUCT = 16; int vflag = 1; /* tell about unused argments */ int xflag = 0; /* tell about unused externals */ int argflag = 0; /* used to turn off complaints about arguments */ int libflag = 0; /* used to generate library descriptions */ int vaflag = -1; /* used to signal functions with a variable number of args */ int aflag = 0; /* used th check precision of assignments */ char *flabel = "xxx"; # define LNAMES 100 struct lnm { short lid, flgs; } lnames[LNAMES], *lnp; contx( p, down, pl, pr ) register NODE *p; register *pl, *pr; { *pl = *pr = VAL; switch( p->op ){ case ANDAND: case OROR: case QUEST: *pr = down; break; case SCONV: case PCONV: case COLON: *pr = *pl = down; break; case COMOP: *pl = EFF; *pr = down; case FORCE: case INIT: case UNARY CALL: case STCALL: case UNARY STCALL: case CALL: case UNARY FORTCALL: case FORTCALL: case CBRANCH: break; default: if( asgop(p->op) ) break; if( p->op == UNARY MUL && ( p->type == STRTY || p->type == UNIONTY) ) { break; /* the compiler does this... */ } if( down == EFF && hflag ) werror( "null effect" ); } } ecode( p ) NODE *p; { /* compile code for p */ fwalk( p, contx, EFF ); lnp = lnames; lprt( p, EFF, 0 ); } ejobcode( flag ){ /* called after processing each job */ /* flag is nonzero if errors were detected */ register k; register struct symtab *p; for( p=stab; p< &stab[SYMTSZ]; ++p ){ if( p->stype != TNULL ) { if( p->stype == STRTY || p->stype == UNIONTY ){ if( dimtab[p->sizoff+1] < 0 ){ /* never defined */ if( hflag ) werror( "struct/union %.7s never defined", p->sname ); } (( } switch( p->sclass ){ case STATIC: if( p->suse > 0 ){ k = lineno; lineno = p->suse; uerror( "static variable %s unused", p->sname ); lineno = k; break; } case EXTERN: case USTATIC: /* with the xflag, worry about externs not used */ /* the filename may be wrong here... */ if( xflag && p->suse >= 0 && !libflag ){ printf( "%.7s\t%03d\t%o\t%d\t", p->sname, LDX, p->stype, 0 ); /* we don't really know the file number; we know only the line number, so we put only that out */ printf( "\"???\"\t%d\t%s\n", p->suse, flabel ); } case EXTDEF: if( p->suse < 0 ){ /* used */ printf( "%.7s\t%03d\t%o\t%d\t", exname(p->sname), LUM, p->stype, 0 ); fident( -p->suse ); } break; } } } exit( 0 ); } fident( line ){ /* like ident, but lineno = line */ register temp; temp = lineno; lineno = line; ident(); lineno = temp; } ident(){ /* write out file and line identification */ printf( "%s\t%d\t%s\n", ftitle, lineno, flabel ); } bfcode( a, n ) int a[]; { /* code for the beginning of a function; a is an array of indices in stab for the arguments; n is the number */ /* this must also set retlab */ register i; register struct symtab *cfp; register unsigned t; retlab = 1; cfp = &stab[curftn]; /* if variable number of arguments, only print the ones which will be checked */ if( vaflag > 0 ){ if( n < vaflag ) werror( "declare the VARARGS arguments you want checked!" ); else n = vaflag; } printf( "%.7s\t%03d\t%o\t%d\t", exname(cfp->sname), libflag?LIB:LDI, cfp->stype, vaflag>=0?-n:n ); vaflag = -1; for( i=0; iop == CM ){ ++c; p = p->left; } return( c ); } lpta( p ) NODE *p; { TWORD t; if( p->op == CM ){ lpta( p->left ); p = p->right; } switch( t = p->type ){ case CHAR: case SHORT: t = INT; case LONG: case ULONG: case INT: case UNSIGNED: break; case UCHAR: case USHORT: t = UNSIGNED; break; case FLOAT: printf( "%o\t", DOUBLE ); return; default: printf( "%o\t", p->type ); return; } if( p->op == ICON ) printf( "%o<1\t", t ); else printf( "%o\t", t ); } # define VALSET 1 # define VALUSED 2 # define VALASGOP 4 # define VALADDR 8 lprt( p, down, uses ) register NODE *p; { register struct symtab *q; register id; register acount; register down1, down2; register use1, use2; register struct lnm *np1, *np2; /* first, set variables which are set... */ use1 = use2 = VALUSED; if( p->op == ASSIGN ) use1 = VALSET; else if( p->op == UNARY AND ) use1 = VALADDR; else if( asgop( p->op ) ){ /* =op' kJAis */ use1 = VALUSED|VALSET; if( down == EFF ) use1 |= VALASGOP; } /* print the lines for lint */ down2 = down1 = VAL; acount = 0; switch( p->op ){ case EQ: case NE: case GT: case GE: case LT: case LE: if( p->left->type == CHAR && p->right->op==ICON && p->right->lval < 0 ){ werror( "nonportable character comparison" ); } if( (p->op==EQ || p->op==NE ) && ISUNSIGNED(p->left->type) && p->right->op == ICON ){ if( p->right->lval < 0 && p->right->rval == NONAME && !ISUNSIGNED(p->right->type) ){ werror( "comparison of unsigned with negative constant" ); } } break; case UGE: case ULT: if( p->right->op == ICON && p->right->lval == 0 && p->right->rval == NONAME ){ werror( "unsigned comparison with 0?" ); break; } case UGT: case ULE: if( p->right->op == ICON && p->right->lval <= 0 && !ISUNSIGNED(p->right->type) && p->right->rval == NONAME ){ werror( "degenerate unsigned comparison" ); } break; case COMOP: down1 = EFF; case ANDAND: case OROR: case QUEST: down2 = down; /* go recursively left, then right */ np1 = lnp; lprt( p->left, down1, use1 ); np2 = lnp; lprt( p->right, down2, use2 ); lmerge( np1, np2, 0 ); return; case SCONV: case PCONV: case COLON: down1 = down2 = down; break; case CALL: case STCALL: case FORTCALL: acount = ctargs( p->right ); case UNARY CALL: case UNARY STCALL: case UNARY FORTCALL: if( p->left->op == ICON && (id=p->left->rval) != NONAME ){ /* used to be &name */ printf( "%.7s\t%03d\t%o\t%d\t", exname(stab[id].sname), down==EFF ? LUE : LUV, DECREF(p->left->type), acount ); if( acount ) lpta( p->right ); ident(); } break; case ICON: /* look for &name case */ if( (id = p->rval) >= 0 && id != NONAME ){ q = &stab[id]; q->sflags |= (SREF|SSET); } return; case NAME: if( (id = p->rval) >= 0 && id != NONAME ){ q = &stab[id]; if( (uses&VALUSED) && !(q->sflags&SSET) ){ if( q->sclass == AUTO || q->sclass == REGISTER ){ if( !ISARY(q->stype ) && !ISFTN(q->stype) && q->stype!=STRTY ){ werror( "%.7s may be used before set", q->sname ); q->sflags |= SSET; } } } if( uses & VALASGOP ) break; /* not a real use */ if( uses & VALSET ) q->sflags |= SSET; if( uses & VALUSED ) q->sflags |= SREF; if( uses & VALADDR ) q->sflags |= (SREF|SSET); if( p->lval == 0 ){ lnp->lid = id; lnp->flgs = (uses&VALADDR)?0:((uses&VALSET)?VALSET:VALUSED); if( ++lnp >= &lnames[LNAMES] ) --lnp; } } return; } /* recurse, going down the right side first if we can */ switch( optype(p->op) ){ case BITYPE: np1 = lnp; lprt( p->right, down2, use2 ); case UTYPE: np2 = lnp; lprt( p->left, down1, use1 ); } if( optype(p->op) == BITYPE ){ if( p->op == ASSIGN && p->left->op == NAME ){ /* special case for a = .. a .. */ lmerge( np1, np2, 0 ); } else lmerge( np1, np2, p->op != COLON ); /* look for assignments to fields, and complain */ if( p->op == ASSIGN && p->left->op == FLD && p->right->op == ICON ) fldcon( p ); } } lmerge( np1, np2, flag ) struct lnm *np1, *np2; { /* np1 and np2 point to lists of lnm members, for the two sides * of a binary operator * flag is 1 if commutation is possible, 0 otherwise * lmerge returns a merged list, starting at np1, resetting lnp * it also complains, if appropriate, about side effects */ register struct lnm *npx, *npy; for( npx = np2; npx < lnp; ++npx ){ /* is it already there? */ for( npy = np1; npy < np2; ++npy ){ if( npx->lid == npy->lid ){ /* yes */ if( npx->flgs == 0 || npx->flgs == (VALSET|VALUSED) ) ; /* do nothing */ else if( (npx->flgs|npy->flgs)== (VALSET|VALUSED) || (npx->flgs&npy->flgs&VALSET) ){ if( flag ) werror( "%.8s evaluation order undefined", stab[npy->lid].sname ); } if( npy->flgs == 0 ) npx->flgs = 0; else npy->flgs |= npx->flgs; goto foundit; } } /* not there: update entry */ np2->lid = npx->lid; np2->flgs = npx->flgs; ++np2; foundit: ; } /* all finished: merged list is at np1 */ lnp = np2; } efcode(){ /* code for the end of a function */ register struct symtab *cfp; cfp = &stab[curftn]; if( retstat & RETVAL ){ printf( "%.7s\t%03d\t%o\t%d\t", exname(cfp->sname), LRV, DECREF( cfp->stype), 0 ); ident(); } if( !vflag ){ vflag = argflag; argflag = 0; } if( retstat == RETVAL+NRETVAL ) werror( "function %.8s has return(e); and return;", cfp->sname); } aocode(p) struct symtab *p; { /* called when automatic p removed from stab */ register struct symtab *cfs; cfs = &stab[curftn]; if(p->suse>0 && !(p->sflags&SMOS) ){ if( p->sclass == PARAM ){ if( vflag ) werror( "argument %.7s unused in function %.7s", p->sname, cfs->sname ); } else { if( p->sclass != TYPEDEF ) werror( "%.7s unused in function %.7s", p->sname, cfs->sname ); } } if( p->suse < 0 && (p->sflags & (SSET|SREF|SMOS)) == SSET && !ISARY(p->stype) && !ISFTN(p->stype) ){ werror( "%.7s set but not used in function %.7s", p->sname, cfs->sname ); } if( p->stype == STRTY || p->stype == UNIONTY || p->stype == ENUMTY ){ if( dimtab[p->sizoff+1] < 0 ) werror( "structure %.7s never defined", p->sname ); } } defnam( p ) register struct symtab *p; { /* define the current location as the name p->sname */ if( p->sclass == STATIC && p->slevel>1 ) return; if( !ISFTN( p->stype ) ){ printf( "%.7s\t%03d\t%o\t%d\t", exname(p->sname), libflag?LIB:LDI, p->stype, 0 ); ident(); } } zecode( n ){ /* n integer words of zeros */ OFFSZ temp; temp = n; inoff += temp*SZINT; ; } andable( p ) NODE *p; { /* p is a NAME node; can it accept & ? */ register r; if( p->op != NAME ) cerror( "andable error" ); if( (r = p->rval) < 0 ) return(1); /* labels are andable */ if( stab[r].sclass == AUTO || stab[r].sclass == PARAM ) return(0); return(1); } NODE * clocal(p) NODE *p; { /* this is called to do local transformations on an expression tree preparitory to its being written out in intermediate code. */ /* the major essential job is rewriting the automatic variables and arguments in terms of REG and OREG nodes */ /* conversion ops which are not necessary are also clobbered here */ /* in addition, any special features (such as rewriting exclusive or) are easily handled here as well */ register o; register unsigned t, tl; switch( o = p->op ){ case SCONV: case PCONV: if( p->left->type==ENUMTY ){ p->left = pconvert( p->left ); } /* assume conversion takes place; type is inherited */ t = p->type; (( tl = p->left->type; if( aflag && (tl==LONG||tl==ULONG) && (t!=LONG&&t!=ULONG) ){ werror( "long assignment may lose accuracy" ); } if( ISPTR(tl) && ISPTR(t) ){ tl = DECREF(tl); t = DECREF(t); switch( ISFTN(t) + ISFTN(tl) ){ case 0: /* neither is a function pointer */ if( talign(t,p->csiz) > talign(tl,p->left->csiz) ){ if( hflag||pflag ) werror( "possible pointer alignment problem" ); } break; case 1: werror( "questionable conversion of function pointer" ); case 2: ; } } p->left->type = p->type; p->left->cdim = p->cdim; p->left->csiz = p->csiz; p->op = FREE; return( p->left ); case PVCONV: case PMCONV: if( p->right->op != ICON ) cerror( "bad conversion"); p->op = FREE; return( buildtree( o==PMCONV?MUL:DIV, p->left, p->right ) ); } return(p); } NODE * offcon( off, t, d, s ) OFFSZ off; TWORD t;{ /* make a structure offset node */ register NODE *p; p = bcon(0); p->lval = off/SZCHAR; return(p); } noinit(){ /* storage class for such as "int a;" */ return( pflag ? EXTDEF : EXTERN ); } cinit( p, sz ) NODE *p; { /* initialize p into size sz */ inoff += sz; if( p->op == INIT ){ if( p->left->op == ICON ) return; if( p->left->op == NAME && p->left->type == MOE ) return; } uerror( "illegal initialization" ); } char * exname( p ) char *p; { /* make a name look like an external name in the local machine */ static char aa[8]; register int i; if( !pflag ) return(p); for( i=0; i<6; ++i ){ if( isupper(*p ) ) aa[i] = tolower( *p ); else aa[i] = *p; if( *p ) ++p; } aa[6] = '\0'; return( aa ); } where(f){ /* print true location of error */ if( f == 'u' && nerrors>1 ) --nerrors; /* don't get "too many errors" */ fprintf( stderr, "%s, line %d: ", ftitle, lineno ); } /* a number of dummy routines, unneeded by lint */ branch(n){;} defalign(n){;} deflab(n){;} bycode(t,i){;} cisreg(t){return(1);} /* everyting is a register variable! */ fldty(p) struct symtab *p; { ; /* all types are OK here... */ } fldal(t) unsigned t; { /* field alignment... */ if( t == ENUMTY ) return( ALCHAR ); /* this should be thought through better... */ if( ISPTR(t) ){ /* really for the benefit of honeywell (and someday IBM) */ if( pflag ) uerror( "nonportable field type" ); } else uerror( "illegal field type" ); return(ALINT); } main( argc, argv ) char *argv[]; { char *p; /* handle options */ for( p=argv[1]; *p; ++p ){ switch( *p ){ case '-': continue; case 'L': /* produced by driver program */ flabel = p; goto break2; case '\0': break; case 'b': brkflag = 1; continue; case 'p': pflag = 1; continue; case 'c': cflag = 1; continue; case 's': /* for the moment, -s triggers -h */ case 'h': hflag = 1; continue; case 'v': vflag = 0; continue; case 'x': xflag = 1; continue; case 'a': aflag = 1; case 'u': /* done in second pass */ case 'n': /* done in shell script */ continue; case 't': werror( "option %c now default: see `man 6 lint'", *p ); continue; default: uerror( "illegal option: %c", *p ); continue; } } break2: if( !pflag ){ /* set sizes to sizes of target machine */ # ifdef gcos SZCHAR = ALCHAR = 9; # else SZCHAR = ALCHAR = 8; # endif SZINT = ALINT = sizeof(int)*SZCHAR; SZFLOAT = ALFLOAT = sizeof(float)*SZCHAR; SZDOUBLE = ALDOUBLE = sizeof(double)*SZCHAR; SZLONG = ALLONG = sizeof(long)*SZCHAR; SZSHORT = ALSHORT = sizeof(short)*SZCHAR; SZPOINT = ALPOINT = sizeof(int *)*SZCHAR; ALSTRUCT = ALINT; /* now, fix some things up for various machines (I wish we had "alignof") */ # ifdef pdp11 ALLONG = ALDOUBLE = ALFLOAT = ALINT; #endif # ifdef ibm ALSTRUCT = ALCHAR; #endif } return( mainp1( argc, argv ) ); } ctype( type ) unsigned type; { /* are there any funny types? */ return( type ); } commdec( i ){ /* put out a common declaration */ register struct symtab *p; p = &stab[i]; printf( "%.7s\t%03d\t%o\t%d\t", exname(p->sname), libflag?LIB:LDC, p->stype, 0 ); ident(); } isitfloat ( s ) char *s; { /* s is a character string; if floating point is implemented, set dcon to the value of s */ /* lint version */ dcon = atof( s ); return( FCON ); } fldcon( p ) register NODE *p; { /* p is an assignment of a constant to a field */ /* check to see if the assignment is going to overflow, or otherwise cause trouble */ register s; CONSZ v; if( !hflag & !pflag ) return; s = UPKFSZ(p->left->rval); v = p->right->lval; switch( p->left->type ){ case CHAR: case INT: case SHORT: case LONG: case ENUMTY: if( v>=0 && (v>>(s-1))==0 ) return; werror( "precision lost in assignment to (possibly sign-extended) field" ); default: return; case UNSIGNED: case UCHAR: case USHORT: case ULONG: if( v<0 || (v>>s)!=0 ) werror( "precision lost in field assignment" ); return; } } ' kh?4i L=/usr/lib/lint T=/usr/tmp/lint.$$ PATH=/bin:/usr/bin O="-C -Dlint" X= P=unix LL=/usr/lib trap "rm -f $T; exit" 1 2 15 for A in $* do case $A in -*n*) P= ;; -*p*) P=port ;; esac case $A in -l*) (/lib/cpp $O $LL/llib$A | ${L}1 -v$X-L$A >>$T)2>&1 ;; -[IDOU]*) O="$O $A" ;; -X) LL=/usr/src/lint L=/usr/src/lint/lpass ;; -*) X="$X$A" ;; *) (/lib/cpp $O $A | ${L}1 $X-L$A >>$T)2>&1 esac done case $P in unix) (/lib/cpp $O $LL/llib-lc | ${L}1 -v$X-L-lc >>$T)2>&1 ;; port) (/lib/cpp $O $LL/llib-port | ${L}1 -v$X-L-lc >>$T)2>&1 ;; esac sort -u $T | ${L}2 $X rm -f $T ' kp4ii Most of lint's source files are shared with the portable compiler: they are found in /usr/src/cmd/mip. The files here are only those which are unique to lint. ' kwD j+ # include "e.h" #include "e.def" #define TBLSIZE 100 tbl *keytbl[TBLSIZE]; /* key words */ tbl *restbl[TBLSIZE]; /* reserved words */ tbl *deftbl[TBLSIZE]; /* user-defined names */ struct { char *key; int keyval; } keyword[] ={ "sub", SUB, "sup", SUP, ".EN", EOF, "from", FROM, "to", TO, "sum", SUM, "hat", HAT, "vec", VEC, "dyad", DYAD, "dot", DOT, "dotdot", DOTDOT, "bar", BAR, "tilde", TILDE, "under", UNDER, "prod", PROD, "int", INT, "integral", INT, "union", UNION, "inter", INTER, "pile", PILE, "lpile", LPILE, "cpile", CPILE, "rpile", RPILE, "over", OVER, "sqrt", SQRT, "above", ABOVE, "size", SIZE, "font", FONT, "fat", FAT, "roman", ROMAN, "italic", ITALIC, "bold", BOLD, "left", LEFT, "right", RIGHT, "delim", DELIM, "define", DEFINE, #ifdef NEQN /* make ndefine synonym for define, tdefine a no-op */ "tdefine", TDEFINE, "ndefine", DEFINE, #else /* tdefine = define, ndefine = no-op */ "tdefine", DEFINE, "ndefine", NDEFINE, #endif "gsize", GSIZE, ".gsize", GSIZE, "gfont", GFONT, "include", INCLUDE, "up", UP, "down", DOWN, "fwd", FWD, "back", BACK, "mark", MARK, "lineup", LINEUP, "matrix", MATRIX, "col", COL, "lcol", LCOL, "ccol", CCOL, "rcol", RCOL, 0, 0 }; struct { char *res; char *resval; } resword[] ={ ">=", "\\(>=", "<=", "\\(<=", "==", "\\(==", "!=", "\\(!=", "+-", "\\(+-", "->", "\\(->", "<-", "\\(<-", "inf", "\\(if", "infinity", "\\(if", "partial", "\\(pd", "half", "\\f1\\(12\\fP", "prime", "\\f1\\(fm\\fP", "dollar", "\\f1$\\fP", "nothing", "", "times", "\\(mu", "del", "\\(gr", "grad", "\\(gr", #ifdef NEQN "<<", "<<", ">>", ">>", "approx", "~\b\\d~\\u", "cdot", "\\v'-.5'.\\v'.5'", "...", "...", ",...,", ",...,", #else "<<", "<\\h'-.3m'<", ">>", ">\\h'-.3m'>", "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'", "cdot", "\\v'-.3m'.\\v'.3m'", "...", "\\v'-.3m'\\ .\\ .\\ .\\ \\v'.3m'", ",...,", ",\\ .\\ .\\ .((\\ ,\\|", #endif "alpha", "\\(*a", "beta", "\\(*b", "gamma", "\\(*g", "GAMMA", "\\(*G", "delta", "\\(*d", "DELTA", "\\(*D", "epsilon", "\\(*e", "EPSILON", "\\f1E\\fP", "omega", "\\(*w", "OMEGA", "\\(*W", "lambda", "\\(*l", "LAMBDA", "\\(*L", "mu", "\\(*m", "nu", "\\(*n", "theta", "\\(*h", "THETA", "\\(*H", "phi", "\\(*f", "PHI", "\\(*F", "pi", "\\(*p", "PI", "\\(*P", "sigma", "\\(*s", "SIGMA", "\\(*S", "xi", "\\(*c", "XI", "\\(*C", "zeta", "\\(*z", "iota", "\\(*i", "eta", "\\(*y", "kappa", "\\(*k", "rho", "\\(*r", "tau", "\\(*t", "omicron", "\\(*o", "upsilon", "\\(*u", "UPSILON", "\\(*U", "psi", "\\(*q", "PSI", "\\(*Q", "chi", "\\(*x", "and", "\\f1and\\fP", "for", "\\f1for\\fP", "if", "\\f1if\\fP", "Re", "\\f1Re\\fP", "Im", "\\f1Im\\fP", "sin", "\\f1sin\\fP", "cos", "\\f1cos\\fP", "tan", "\\f1tan\\fP", "arc", "\\f1arc\\fP", "sinh", "\\f1sinh\\fP", "coth", "\\f1coth\\fP", "tanh", "\\f1tanh\\fP", "cosh", "\\f1cosh\\fP", "lim", "\\f1lim\\fP", "log", "\\f1log\\fP", "max", "\\f1max\\fP", "min", "\\f1min\\fP", "ln", "\\f1ln\\fP", "exp", "\\f1exp\\fP", "det", "\\f1det\\fP", 0, 0 }; tbl *lookup(tblp, name, defn) /* find name in tbl. if defn non-null, install */ tbl **tblp; char *name, *defn; { register tbl *p; register int h; register char *s = name; char *malloc(); for (h = 0; *s != '\0'; ) h += *s++; h %= TBLSIZE; for (p = tblp[h]; p != NULL; p = p->next) if (strcmp(name, p->name) == 0) { /* found it */ if (defn != NULL) p->defn = defn; return(p); } /* didn't find it */ if (defn == NULL) return(NULL); p = (tbl *) malloc(sizeof (tbl)); if (p == NULL) error(FATAL, "out of space in lookup"); p->name = name; p->defn = defn; p->next = tblp[h]; tblp[h] = p; return(p); } init_tbl() /* initialize all tables */ { int i; for (i = 0; keyword[i].key != NULL; i++) lookup(keytbl, keyword[i].key, keyword[i].keyval); for (i = 0; resword[i].res != NULL; i++) lookup(restbl, resword[i].res, resword[i].resval); } ' k#0 j+ #include "e.h" #include "e.def" #define SSIZE 400 char token[SSIZE]; int sp; #define putbak(c) *ip++ = c; #define PUSHBACK 300 /* maximum pushback characters */ char ibuf[PUSHBACK+SSIZE]; /* pushback buffer for definitions, etc. */ char *ip = ibuf; gtc() { loop: if (ip > ibuf) return(*--ip); /* already present */ lastchar = getc(curfile); if (lastchar=='\n') linect++; if (lastchar != EOF) return(lastchar); if (++ifile > svargc) { return(EOF); } fclose(curfile); linect = 1; if ((curfile=fopen(svargv[ifile], "r")) != NULL) goto loop; error(FATAL, "can't open file %s", svargv[ifile]); return(EOF); } pbstr(str) register char *str; { register char *p; p = str; while (*p++); --p; if (ip >= &ibuf[PUSHBACK]) error( FATAL, "pushback overflow"); while (p > str) putbak(*--p); } yylex() { register int c; tbl *tp, *lookup(); extern tbl **keytbl, **deftbl; beg: while ((c=gtc())==' ' || c=='\n') ; yylval=c; switch(c) { case EOF: return(EOF); case '~': return(SPACE); case '^': return(THIN); case '\t': return(TAB); case '{': return('{'); case '}': return('}'); case '"': for (sp=0; (c=gtc())!='"' && c != '\n'; ) { if (c == '\\') if ((c = gtc()) != '"') token[sp++] = '\\'; token[sp++] = c; if (sp>=SSIZE) error(FATAL, "quoted string %.20s... too long", token); } token[sp]='\0'; yylval = (int) &token[0]; if (c == '\n') error(!FATAL, "missing \" in %.20s", token); return(QTEXT); } if (c==righteq) return(EOF); putbak(c); getstr(token, SSIZE); if (dbg)printf(".\tlex token = |%s|\n", token); if ((tp = lookup(&deftbl, token, NULL)) != NULL) { putbak(' '); pbstr(tp->defn); putbak(' '); if (dbg) printf(".\tfound %s|=%s|\n", token, tp->defn); } else if ((tp = lookup(&keytbl, token, NULL)) == NULL) { if(dbg)printf(".\t%s is not a keyword\n", token); return(CONTIG); } else if (tp->defn == (char *) DEFINE || tp->defn == (char *) NDEFINE || tp->defn == (char *) TDEFINE) define(tp->defn); else if (tp->defn == (char *) DELIM) delim(); else if (tp->defn == (char *) GSIZE) globsize(); else if (tp->defn == (char *) GFONT) globfont(); else if (tp->defn == (char *) INCLUDE) include(); else { return((int) tp->defn); } goto beg; } getstr(s, n) char *s; register int n; { register int c; register char *p; p = s; while ((c = gtc()) == ' ' || c == '\n') ; if (c == EOF) { *s = 0; return; } while (c != ' ' && c != '\t' && c != '\n' && c != '{' && c != '}' && c != '"' && c != '~' && c != '^' && c != righteq) { if (c == '\\') if ((c = gtc()) != '"') *p++ = '\\'; *p++ = c; if (--n <= 0) error(FATAL, "token %.20s... too long", s); c = gtc(); } if (c=='{' || c=='}' || c=='"' || c=='~' || c=='^' || c=='\t' || c==righteq) putbak(c); *p = '\0'; yylval = (int) s; } cstr(s, quote, maxs) char *s; int quote; { int del, c, i; while((del=gtc()) == ' ' || del == '\t' || del == '\n'); if (quote) for (i=0; (c=gtc()) != del && c != EOF;) { s[i++] = c; if (i >= maxs) return(1); /* disaster */ } else { s[0] = del; for (i=1; (c=gtc())!=' ' && c!= '\t' && c!='\n' && c!=EOF;) { s[i++]=c; if (i >= maxs) return(1); /* disaster */ } } s[i] = '\0'; if (c == EOF) error(FATAL, "Unexpected end of input at %.20s", s); return(0); } define(type) int type; { char *strsave(), *p1, *p2; tbl *lookup(); extern tbl **deftbl; getstr(token, SSIZE); /* get name */ if (type != DEFINE) { cstr(token, 1, SSIZE); /* skip the definition too */ return; } p1 = strsave(token); if (cstr(token, 1, SSIZE)) error(FATAL, "Unterminated definition at %.20s", token); p2 = strsave(token); lookup(&deftbl, p1, p2); if (dbg)printf(".\tname %s defined as %s\n", p1, p2); } char *strsave(s) char *s; { char *malloc(); register char *q; q = malloc(strlen(s)+1); if (q == NULL) error(FATAL, "out of space in strsave on %s", s); strcpy(q, s); return(q); } include() { error(!FATAL, "Include not yet implemented"); } delim() { yyval = eqnreg = 0; if (cstr(token, 0, SSIZE)) error(FATAL, "Bizarre delimiters at %.20s", token); lefteq = token[0]; righteq = token[1]; if (lefteq == 'o' && righteq == 'f') lefteq = righteq = '\0'; } ' kUY\_behkn} j* # include "e.h" #define MAXLINE 1200 /* maximum input line */ char in[MAXLINE]; /* input buffer */ int eqnexit(); int noeqn; main(argc,argv) int argc; char *argv[];{ eqnexit(eqn(argc, argv)); } eqnexit(n) { #ifdef gcos if (n) fprintf(stderr, "run terminated due to eqn error\n"); exit(0); #endif exit(n); } eqn(argc,argv) int argc; char *argv[];{ int i, type; setfile(argc,argv); init_tbl(); /* install keywords in tables */ while ((type=getline(in)) != EOF) { eqline = linect; if (in[0]=='.' && in[1]=='E' && in[2]=='Q') { for (i=11; i<100; used[i++]=0); printf("%s",in); printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n"); markline = 0; init(); yyparse(); if (eqnreg>0) { printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg); /* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n", */ /* eqnreg, svargv[ifile], eqline, linect); */ printf(".nr MK %d\n", markline); /* for -ms macros */ printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht); printf(".rn %d 10\n", eqnreg); if(!noeqn)printf("\\*(10\n"); } printf(".ps \\n(99\n.ft \\n(98\n"); printf(".EN"); if (lastchar == EOF) { putchar('\n'); break; } if (putchar(lastchar) != '\n') while (putchar(gtc()) != '\n'); } else if (type == lefteq) inline(); else printf("%s",in); } return(0); } getline(s) register char *s; { register c; while((*s++=c=gtc())!='\n' && c!=EOF && c!=lefteq) if (s >= in+MAXLINE) { error( !FATAL, "input line too long: %.20s\n", in); in[MAXLINE] = '\0'; break; } if (c==lefteq) s--; *s++ = '\0'; return(c); } inline() { int ds; printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n"); ds = oalloc(); printf(".rm %d \n", ds); do{ if (*in) printf(".as %d \"%s\n", ds, in); init(); yyparse(); if (eqnreg > 0) { printf(".as %d \\*(%d\n", ds, eqnreg); ofree(eqnreg); } printf(".ps \\n(99\n.ft \\n(98\n"); } while (getline(in) == lefteq); if (*in) printf(".as %d \"%s", ds, in); printf(".ps \\n(99\n.ft \\n(98\n"); printf("\\*(%d\n", ds); ofree(ds); } putout(p1) int p1; { extern int gsize, gfont; int before, after; if(dbg)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1, eht[p1], ebase[p1]); eqnht = eht[p1]; printf(".ds %d \\x'0'", p1); /* suppposed to leave room for a subscript or superscript */ before = eht[p1] - ebase[p1] - VERT(3); /* 3 = 1.5 lines */ if (before > 0) printf("\\x'0-%du'", before); printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98", gfont, gsize, p1, rfont[p1] == ITAL ? "\\|" : ""); after = ebase[p1] - V((ERT(1); if (after > 0) printf("\\x'%du'", after); putchar('\n'); eqnreg = p1; } max(i,j) int i,j; { return (i>j ? i : j); } oalloc() { int i; for (i=11; i<100; i++) if (used[i]++ == 0) return(i); error( FATAL, "no eqn strings left", i); return(0); } ofree(n) int n; { used[n] = 0; } setps(p) int p; { printf(".ps %d\n", EFFPS(p)); } nrwid(n1, p, n2) int n1, p, n2; { printf(".nr %d \\w'\\s%d\\*(%d'\n", n1, EFFPS(p), n2); } setfile(argc, argv) int argc; char *argv[]; { static char *nullstr = "-"; svargc = --argc; svargv = argv; while (svargc > 0 && svargv[1][0] == '-') { switch (svargv[1][1]) { case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break; case 's': gsize = atoi(&svargv[1][2]); break; case 'p': deltaps = atoi(&svargv[1][2]); break; case 'f': gfont = svargv[1][2]; break; case 'e': noeqn++; break; default: dbg = 1; } svargc--; svargv++; } ifile = 1; linect = 1; if (svargc <= 0) { curfile = stdin; svargv[1] = nullstr; } else if ((curfile = fopen(svargv[1], "r")) == NULL) error( FATAL,"can't open file %s", svargv[1]); } yyerror() {;} init() { ct = 0; ps = gsize; ft = gfont; setps(ps); printf(".ft %c\n", ft); } error(fatal, s1, s2) int fatal; char *s1, *s2; { if (fatal>0) printf("eqn fatal error: "); printf(s1,s2); printf("\nfile %s, between lines %d and %d\n", svargv[ifile], eqline, linect); fprintf(stderr, "eqn: "); if (fatal>0) fprintf(stderr, "fatal error: "); fprintf(stderr, s1, s2); fprintf(stderr, "\nfile %s, between lines %d and %d\n", svargv[ifile], eqline, linect); if (fatal > 0) eqnexit(1); } ' kꏩpSV j) # include "e.h" # include "e.def" integral(p, p1, p2) { #ifndef NEQN if (p1 != 0) printf(".ds %d \\h'-0.4m'\\v'0.4m'\\*(%d\\v'-0.4m'\n", p1, p1); if (p2 != 0) printf(".ds %d \\v'-0.3m'\\*(%d\\v'0.3m'\n", p2, p2); #endif if (p1 != 0 && p2 != 0) shift2(p, p1, p2); else if (p1 != 0) bshiftb(p, SUB, p1); else if (p2 != 0) bshiftb(p, SUP, p2); if(dbg)printf(".\tintegral: S%d; h=%d b=%d\n", p, eht[p], ebase[p]); lfont[p] = ROM; } setintegral() { char *f; yyval = oalloc(); f = "\\(is"; printf(".ds %d %s\n", yyval, f); eht[yyval] = VERT(2); ebase[yyval] = 0; lfont[yyval] = rfont[yyval] = ROM; } ' kꈮMP j( #include "e.h" int dbg; /* debugging print if non-zero */ int lp[80]; /* stack for things like piles and matrices */ int ct; /* pointer to lp */ int used[100]; /* available registers */ int ps; /* default init point size */ int deltaps = 3; /* default change in ps */ int gsize = 10; /* default initial point size */ int gfont = ITAL; /* italic */ int ft; /* default font */ FILE *curfile; /* current input file */ int ifile; int linect; /* line number in file */ int eqline; /* line where eqn started */ int svargc; char **svargv; int eht[100]; int ebase[100]; int lfont[100]; int rfont[100]; int eqnreg; /* register where final string appears */ int eqnht; /* inal height of equation */ int lefteq = '\0'; /* left in-line delimiter */ int righteq = '\0'; /* right in-line delimiter */ int lastchar; /* last character read by lex */ int markline = 0; /* 1 if this EQ/EN contains mark or lineup */ ' kGJj( # include "e.h" # include "e.def" funny(n) int n; { char *f; yyval = oalloc(); switch(n) { case SUM: f = "\\(*S"; break; case UNION: f = "\\(cu"; break; case INTER: /* intersection */ f = "\\(ca"; break; case PROD: f = "\\(*P"; break; default: error(FATAL, "funny type %d in funny", n); } printf(".ds %d %s\n", yyval, f); eht[yyval] = VERT(2); ebase[yyval] = 0; if(dbg)printf(".\tfunny: S%d <- %s; h=%d b=%d\n", yyval, f, eht[yyval], ebase[yyval]); lfont[yyval] = rfont[yyval] = ROM; } ' kw;>ADj' # include "e.h" fromto(p1, p2, p3) int p1, p2, p3; { int b, h1, b1, pss; yyval = oalloc(); lfont[yyval] = rfont[yyval] = 0; h1 = eht[yyval] = eht[p1]; b1 = ebase[p1]; b = 0; pss = EFFPS(ps); ps += 3; nrwid(p1, ps, p1); printf(".nr %d \\n(%d\n", yyval, p1); if( p2>0 ) { nrwid(p2, pss, p2); printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p2, yyval, yyval, p2); eht[yyval] += eht[p2]; b = eht[p2]; } if( p3>0 ) { nrwid(p3, pss, p3); printf(".if \\n(%d>\\n(%d .nr %d \\n(%d\n", p3, yyval, yyval, p3); eht[yyval] += eht[p3]; } printf(".ds %d ", yyval); /* bottom of middle box */ if( p2>0 ) { printf("\\v'%du'\\h'\\n(%du-\\n(%du/2u'\\s%d\\*(%d\\s%d", eht[p2]-ebase[p2]+b1, yyval, p2, pss, p2, EFFPS(ps)); printf("\\h'-\\n(%du-\\n(%du/2u'\\v'%du'\\\n", yyval, p2, -(eht[p2]-ebase[p2]+b1)); } printf("\\h'\\n(%du-\\n(%du/2u'\\*(%d\\h'\\n(%du-\\n(%du+2u/2u'\\\n", yyval, p1, p1, yyval, p1); if( p3>0 ) { printf("\\v'%du'\\h'-\\n(%du-\\n(%du/2u'\\s%d\\*(%d\\s%d\\h'\\n(%du-\\n(%du/2u'\\v'%du'\\\n", -(h1-b1+ebase[p3]), yyval, p3, pss, p3, EFFPS(ps), yyval, p3, (h1-b1+ebase[p3])); } printf("\n"); ebase[yyval] = b + b1; if(dbg)printf(".\tfrom to: S%d <- %d f %d t %d; h=%d b=%d\n", yyval, p1, p2, p3, eht[yyval], ebase[yyval]); ofree(p1); if( p2>0 ) ofree(p2); if( p3>0 ) ofree(p3); } ' k~58;j& # include "e.h" setfont(ch1) char ch1; { /* use number '1', '2', '3' for roman, italic, bold */ yyval = ft; if (ch1 == 'r' || ch1 == 'R') ft = ROM; else if (ch1 == 'i' || ch1 == 'I') ft = ITAL; else if (ch1 == 'b' || ch1 == 'B') ft = BLD; else ft = ch1; printf(".ft %c\n", ft); if(dbg)printf(".\tsetfont %c\n", ft); } font(p1, p2) int p1, p2; { /* old font in p1, new in ft */ yyval = p2; lfont[yyval] = rfont[yyval] = ft==ITAL ? ITAL : ROM; if(dbg)printf(".\tb:fb: S%d <- \\f%c S%d \\f%c b=%d,h=%d,lf=%c,rf=%c\n", yyval, ft, p2, p1, ebase[yyval], eht[yyval], lfont[yyval], rfont[yyval]); printf(".ds %d \\f%c\\*(%d\\f%c\n", yyval, ft, p2, p1); ft = p1; printf(".ft %c\n", ft); } fatbox(p) int p; { int sh; yyval = p; sh = ps / 4; nrwid(p, ps, p); printf(".ds %d \\*(%d\\h'-\\n(%du+%du'\\*(%d\n", p, p, p, sh, p); if(dbg)printf(".\tfat %d, sh=%d\n", p, sh); } globfont() { char temp[20]; getstr(temp, 20); yyval = eqnreg = 0; gfont = temp[0]; switch (gfont) { case 'r': case '((R': gfont = '1'; break; case 'i': case 'I': gfont = '2'; break; case 'b': case 'B': gfont = '3'; break; } printf(".ft %c\n", gfont); ft = gfont; } ' kδ7/2j% # include "e.h" eqnbox(p1, p2, lu) { int b, h; char *sh; yyval = p1; b = max(ebase[p1], ebase[p2]); eht[yyval] = h = b + max(eht[p1]-ebase[p1], eht[p2]-ebase[p2]); ebase[yyval] = b; if(dbg)printf(".\te:eb: S%d <- S%d S%d; b=%d, h=%d\n", yyval, p1, p2, b, h); if (rfont[p1] == ITAL && lfont[p2] == ROM) sh = "\\|"; else sh = ""; if (lu) { printf(".nr %d \\w'\\s%d\\*(%d%s'\n", p1, ps, p1, sh); printf(".ds %d \\h'|\\n(97u-\\n(%du'\\*(%d\n", p1, p1, p1); } printf(".as %d \"%s\\*(%d\n", yyval, sh, p2); rfont[p1] = rfont[p2]; ofree(p2); } ' kR' #&),j% %{# #include "e.h" # int fromflg; %} %term CONTIG QTEXT SPACE THIN TAB %term MATRIX LCOL CCOL RCOL COL %term MARK LINEUP %term SUM INT PROD UNION INTER %term LPILE PILE CPILE RPILE ABOVE %term DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE %right FROM TO %left OVER SQRT %right SUP SUB %right SIZE FONT ROMAN ITALIC BOLD FAT %right UP DOWN BACK FWD %left LEFT RIGHT %right DOT DOTDOT HAT TILDE BAR UNDER VEC DYAD %% stuff : eqn { putout($1); } | error { error(!FATAL, "syntax error"); } | { eqnreg = 0; } ; eqn : box | eqn box { eqnbox($1, $2, 0); } | eqn lineupbox { eqnbox($1, $2, 1); } | LINEUP { lineup(0); } ; lineupbox: LINEUP box { $$ = $2; lineup(1); } ; matrix : MATRIX { $$ = ct; } ; collist : column | collist column ; column : lcol '{' list '}' { column('L', $1); } | ccol '{' list '}' { column('C', $1); } | rcol '{' list '}' { column('R', $1); } | col '{' list '}' { column('-', $1); } ; lcol : LCOL { $$ = ct++; } ; ccol : CCOL { $$ = ct++; } ; rcol : RCOL { $$ = ct++; } ; col : COL { $$ = ct++; } ; sbox : sup box %prec SUP { $$ = $2; } ; tbox : to box %prec TO { $$ = $2; } | %prec FROM { $$ = 0; } ; box : box OVER box { boverb($1, $3); } | MARK box { mark($2); } | size box %prec SIZE { size($1, $2); } | font box %prec FONT { font($1, $2); } | FAT box { fatbox($2); } | SQRT box { sqrt($2); } | lpile '{' list '}' { lpile('L', $1, ct); ct = $1; } | cpile '{' list '}' { lpile('C', $1, ct); ct = $1; } | rpile '{' list '}' { lpile('R', $1, ct); ct = $1; } | pile '{' list '}' { lpile('-', $1, ct); ct = $1; } | box sub box sbox %prec SUB { shift2($1, $3, $4); } | box sub box %prec SUB { bshiftb($1, $2, $3); } | box sup box %prec SUP { bshiftb($1, $2, $3); } | int sub box sbox %prec SUB { integral($1, $3, $4); } | int sub box %prec SUB { integral($1, $3, 0); } | int sup box %prec SUP { integral($1, 0, $3); } | int { integral($1, 0, 0); } | left eqn right { paren($1, $2, $3); } | pbox | box from box tbox %prec FROM { fromto($1, $3, $4); fromflg=0; } | box to box %prec TO { fromto($1, 0, $3); } | box diacrit { diacrit($1, $2); } | fwd box %prec UP { move(FWD, $1, $2); } | up box %prec UP { move(UP, $1, $2); } | back box %prec UP { move(BACK, $1, $2); } | down box %prec UP { move(DOWN, $1, $2); } | matrix '{' collist '}' { matrix($1); } ; int : INT { setintegral(); } ; fwd : FWD text { $$ = atoi((char *) $1); } ; up : UP text { $$ = atoi((char *) $1); } ; back : BACK text { $$ = atoi((char *) $1); } ; down : DOWN text { $$ = atoi((char *) $1); } ; diacrit : HAT { $$ = HAT; } | VEC { $$ = VEC; } | DYAD { $$ = DYAD; } | BAR { $$ = BAR; } | UNDER { $$ = UNDER; } /* under bar */ | DOT { $$ = DOT; } | TILDE { $$ = TILDE; } | DOTDOT { $$ = DOTDOT; } /* umlaut = double dot */ ; from : FROM { $$=ps; ps -= 3; fromflg = 1; if(dbg)printf(".\tfrom: old ps %d, new ps %d, fflg %d\n", $$, ps, fromflg); } ; to : TO { $$=ps; if(fromflg==0)ps -= 3; if(dbg)printf(".\tto: old ps %d, new ps %d\n", $$, ps); } ; left : LEFT text { $$ = ((char *)$2)[0]; } | LEFT '{' { $$ = '{'; } ; right : RIGHT text { $$ = ((char *)$2)[0]; } | RIGHT '}' { $$ = '}'; } | { $$ = 0; } ; list : eqn { lp[ct++] = $1; } | list ABOVE eqn { lp[ct++] = $3; } ; lpile : LPILE { $$ = ct; } ; cpile : CPILE { $$ = ct; } ; pile : PILE { $$ = ct; } ; rpile : RPILE { $$ = ct; } ; size : SIZE text { $$ = ps; setsize((char *) $2); } ; font : ROMAN { setfont(ROM); } | ITALIC { setfont(ITAL); } | BOLD { setfont(BLD); } | FONT text { setfont(((char *)$2)[0]); } ; sub : SUB { shift(SUB); } ; sup : SUP { shift(SUP); } ; pbox : '{' eqn '}' { $$ = $2; } | QTEXT { text(QTEXT, (char *) $1); } | CONTIG { text(CONTIG, (char *) $1); } | SPACE { text(SPACE, 0); } | THIN { text(THIN, 0); } | TAB { text(TAB, 0); } | SUM { funny(SUM); } | PROD { funny(PROD); } | UNION { funny(UNION); } | INTER { funny(INTER); } /* intersection */ ; text : CONTIG | QTEXT ; %% ' kBشj$ #include #define FATAL 1 #define ROM '1' #define ITAL '1' #define BLD '1' #define VERT(n) (20 * (n)) #define EFFPS(p) ((p) >= 6 ? (p) : 6) extern int dbg; extern int ct; extern int lp[]; extern int used[]; /* available registers */ extern int ps; /* dflt init pt size */ extern int deltaps; /* default change in ps */ extern int gsize; /* global size */ extern int gfont; /* global font */ extern int ft; /* dflt font */ extern FILE *curfile; /* current input file */ extern int ifile; /* input file number */ extern int linect; /* line number in current file */ extern int eqline; /* line where eqn started */ extern int svargc; extern char **svargv; extern int eht[]; extern int ebase[]; extern int lfont[]; extern int rfont[]; extern int yyval; extern int *yypv; extern int yylval; extern int eqnreg, eqnht; extern int lefteq, righteq; extern int lastchar; /* last character read by lex */ extern int markline; /* 1 if this EQ/EN contains mark or lineup */ typedef struct s_tbl { char *name; char *defn; struct s_tbl *next; } tbl; ' k j# # include "e.h" # include "e.def" diacrit(p1, type) int p1, type; { int c, t; c = oalloc(); t = oalloc(); nrwid(p1, ps, p1); printf(".nr 10 %du\n", max(eht[p1]-ebase[p1]-VERT(2),0)); switch(type) { case VEC: /* vec */ case DYAD: /* dyad */ printf(".ds %d \\v'-1'_\\v'1'\n", c); break; case HAT: printf(".ds %d ^\n", c); break; case TILDE: printf(".ds %d ~\n", c); break; case DOT: printf(".ds %d \\v'-1'.\\v'1'\n", c); break; case DOTDOT: printf(".ds %d \\v'-1'..\\v'1'\n", c); break; case BAR: printf(".ds %d \\v'-1'\\l'\\n(%du'\\v'1'\n", c, p1); break; case UNDER: printf(".ds %d \\l'\\n(%du'\n", c, p1); break; } nrwid(c, ps, c); printf(".as %d \\h'-\\n(%du-\\n(%du/2u'\\v'0-\\n(10u'\\*(%d", p1, p1, c, c); printf("\\v'\\n(10u'\\h'-\\n(%du+\\n(%du/2u'\n", c, p1); if (type != UNDER) eht[p1] += VERT(1); if (dbg) printf(".\tdiacrit: %c over S%d, h=%d, b=%d\n", type, p1, eht[p1], ebase[p1]); ofree(c); ofree(t); } ((' k *j( #include #include #include #define INF 1.e+37 #define F .25 struct xy { int xlbf; /*flag:explicit lower bound*/ int xubf; /*flag:explicit upper bound*/ int xqf; /*flag:explicit quantum*/ double (*xf)(); /*transform function, e.g. log*/ float xa,xb; /*scaling coefficients*/ float xlb,xub; /*lower and upper bound*/ float xquant; /*quantum*/ float xoff; /*screen offset fraction*/ float xsize; /*screen fraction*/ int xbot,xtop; /*screen coords of border*/ float xmult; /*scaling constant*/ } xd,yd; struct val { float xv; float yv; int lblptr; } *xx; char *labs; int labsiz; int tick = 50; int top = 4000; int bot = 200; float absbot; int n; int erasf = 1; int gridf = 2; int symbf = 0; int absf = 0; int transf; int brkf; float dx; char *plotsymb; double atof(); #define BSIZ 80 char labbuf[BSIZ]; char titlebuf[BSIZ]; char *modes[] = { "disconnected", "solid", "dotted", "dotdashed", "shortdashed", "longdashed" }; int mode = 1; char *realloc(); char *malloc(); double ident(x) double x; { return(x); } main(argc,argv) char *argv[]; { space(0,0,4096,4096); init(&xd); init(&yd); xd.xsize = yd.xsize = 1.; xx = (struct val *)malloc((unsigned)sizeof(struct val)); labs = malloc(1); labs[labsiz++] = 0; setopt(argc,argv); if(erasf) erase(); readin(); transpose(); scale(&xd,(struct val *)&xx->xv); scale(&yd,(struct val *)&xx->yv); axes(); title(); plot(); move(1,1); closevt(); return(0); } init(p) struct xy *p; { p->xf = ident; p->xmult = 1; } setopt(argc,argv) char *argv[]; { char *p1, *p2; float temp; xd.xlb = yd.xlb = INF; xd.xub = yd.xub = -INF; while(--argc > 0) { argv++; again: switch(argv[0][0]) { case '-': argv[0]++; goto again; case 'l': /* label for plot */ p1 = titlebuf; if (argc>=2) { argv++; argc--; p2 = argv[0]; while (*p1++ = *p2++); } break; case 'd': /*disconnected,obsolete option*/ case 'm': /*line mode*/ mode = 0; if(!numb(&temp,&argc,&argv)) break; if(temp>=sizeof(modes)/sizeof(*modes)) mode = 1; else if(temp>=0) mode = temp; break; case 'a': /*automatic abscissas*/ absf = 1; dx = 1; if(!numb(&dx,&argc,&argv)) break; if(numb(&absbot,&argc,&argv)) absf = 2; break; case 's': /*save screen, overlay plot*/ erasf = 0; break; case 'g': /*grid style 0 none, 1 ticks, 2 full*/ gridf = 0; if(!numb(&temp,&argc,&argv)) temp = argv[0][1]-'0'; /*for caompatibility*/ if(temp>=0&&temp<=2) gridf = temp; break; case 'c': /*character(s) for plotting*/ if(argc >= 2) { symbf = 1; plotsymb = argv[1]; argv++; argc--; } break; case 't': /*transpose*/ transf = 1; break; case 'b': /*breaks*/ brkf = 1; break; case 'x': /*x limits */ limread(&xd,&argc,&argv); break; case 'y': limread(&yd,&argc,&argv); break; case 'h': /*set height of plot */ if(!numb(&yd.xsize, &argc,&argv)) badarg(); break; case 'w': /*set width of plot */ if(!numb(&xd.xsize, &argc, &argv)) badarg(); break; case 'r': /* set offset to right */ if(!numb(&xd.xoff, &argc, &argv)) badarg(); break; case 'u': /*set offset up the screen*/ if(!numb(&yd.xoff,&argc,&argv)) badarg(); break; default: badarg(); } } } limread(p, argcp, argvp) register struct xy *p; int *argcp; char ***argvp; { if(*argcp>1 && (*argvp)[1][0]=='l') { (*argcp)--; (*argvp)++; p->xf = log10; } if(!numb(&p->xlb,argcp,argvp)) return; p->xlbf = 1; if(!numb(&p->xub,argcp,argvp)) return; p->xubf = 1; if(!numb(&p->xquant,argcp,argvp)) return; p->xqf = 1; } numb(np, argcp, argvp) int *argcp; float *np; register char ***argvp; { register char c; if(*argcp <= 1) return(0); while((c=(*argvp)[1][0]) == '+') (*argvp)[1]++; if(!(isdigit(c) || c=='-'&&(*argvp)[1][1]<'A' || c=='.')) return(0); *np = atof((*argvp)[1]); (*argcp)--; (*argvp)++; return(1); } readin() { register t; struct val *temp; if(absf==1) { if(xd.xlbf) absbot = xd.xlb; else if(xd.xf==log10) absbot = 1; } for(;;) { temp = (struct val *)realloc((char*)xx, (unsigned)(n+1)*sizeof(struct val)); if(temp==0) return; xx = temp; if(absf) xx[n].xv = n*dx + absbot; else if(!getfloat(&xx[n].xv)) return; if(!getfloat(&xx[n].yv)) return; xx[n].lblptr = -1; t = getstring(); if(t>0) xx[n].lblptr = copystring(t); n++; if(t<0) return; } } transpose() { register i; float f; struct xy t; if(!transf) return; t = xd; xd = yd; yd = t; for(i= 0;ixlbf && p->xlb>v[i].xv) p->xlb = v[i].xv; if(!p->xubf && p->xubxub = v[i].xv; i++; } while(i < n); } struct z { float lb,ub,mult,quant; } setloglim(), setlinlim(); setlim(p) register struct xy *p; { float t,delta,sign; struct z z; int mark[50]; float lb,ub; int lbf,ubf; lb = p->xlb; ub = p->xub; delta = ub-lb; if(p->xqf) { if(delta*p->xquant <=0 ) badarg(); return; } sign = 1; lbf = p->xlbf; ubf = p->xubf; if(delta < 0) { sign = -1; t = lb; lb = ub; ub = t; t = lbf; lbf = ubf; ubf = t; } else if(delta == 0) { if(ub > 0) { ub = 2*ub; lb = 0; } else if(lb < 0) { lb = 2*lb; ub = 0; } else { ub = 1; lb = -1; } } if(p->xf==log10 && lb>0 && ub>lb) { z = setloglim(lbf,ubf,lb,ub); p->xlb = z.lb; p->xub = z.ub; p->xmult *= z.mult; p->xquant = z.quant; if(setmark(mark,p)<2) { p->xqf = lbf = ubf = 1; lb = z.lb; ub = z.ub; } else return; } z = setlinlim(lbf,ubf,lb,ub); if(sign > 0) { p->xlb = z.lb; p->xub = z.ub; } else { p->xlb = z.ub; p->xub = z.lb; } p->xmult *= z.mult; p->xquant = sign*z.quant; } struct z setloglim(lbf,ubf,lb,ub) float lb,ub; { float r,s,t; struct z z; for(s=1; lb*s<1; s*=10) ; lb *= s; ub *= s; for(r=1; 10*r<=lb; r*=10) ; for(t=1; t= 5*z.lb) z.lb *= 5; else if(lb >= 2*z.lb) z.lb *= 2; } if(!ubf) { if(ub*5 <= z.ub) z.ub /= 5; else if(ub*2 <= z.ub) z.ub /= 2; } } z.mult = s; z.quant = r; return(z); } struct z setlinlim(lbf,ubf,xlb,xub) int lbf,ubf; float xlb,xub; { struct z z; float r,s,delta; float ub,lb; loop: ub = xub; lb = xlb; delta = ub - lb; /*scale up by s, a power of 10, so range (delta) exceeds 1*/ /*find power of 10 quantum, r, such that delta/10<=r=delta/2) r /= 2; else if(r0) { xlb = 0; goto loop; } else if(!ubf && z.ub>=-r && z.ub<0) { xub = 0; goto loop; } z.quant = r; z.mult = s; return(z); } scale(p,v) register struct xy *p; struct val *v; { float edge; getlim(p,v); setlim(p); edge = top-bot; p->xa = p->xsize*edge/((*p->xf)(p->xub) - (*p->xf)(p->xlb)); p->xbot = bot + edge*p->xoff; p->xtop = p->xbot + (top-bot)*p->xsize; p->xb = p->xbot - (*p->xf)(p->xlb)*p->xa + .5; } axes() { register i; int mark[50]; int xn, yn; if(gridf==0) return; line(xd.xbot,yd.xbot,xd.xtop,yd.xbot); cont(xd.xtop,yd.xtop); cont(xd.xbot,yd.xtop); cont(xd.xbot,yd.xbot); xn = setmark(mark,&xd); for(i=0; ixf==log10&&!p->xqf) { for(x=p->xquant; xxub; x*=10) { submark(xmark,&xn,x,p); if(p->xub/p->xlb<=100) { submark(xmark,&xn,2*x,p); submark(xmark,&xn,5*x,p); } } } else { xn = 0; q = p->xquant; if(q>0) { xl = modceil(p->xlb+q/6,q); xu = modfloor(p->xub-q/6,q)+q/2; } else { xl = modceil(p->xub-q/6,q); xu = modfloor(p->xlb+q/6,q)-q/2; } for(x=xl; x<=xu; x+=fabs(p->xquant)) xmark[xn++] = (*p->xf)(x)*p->xa + p->xb; } return(xn); } submark(xmark,pxn,x,p) int *xmark; int *pxn; float x; struct xy *p; { if(1.001*p->xlb < x && .999*p->xub > x) xmark[(*pxn)++] = log10(x)*p->xa + p->xb; } plot() { int ix,iy; int i; int conn; conn = 0; if(mo((de!=0) linemod(modes[mode]); for(i=0; ixa*(*p->xf)(xv*p->xmult) + p->xb; if(ixxbot || ix>p->xtop) return(0); *ip = ix; return(1); } getfloat(p) float *p; { register i; i = scanf("%f",p); return(i==1); } getstring() { register i; char junk[20]; i = scanf("%1s",labbuf); if(i==-1) return(-1); switch(*labbuf) { default: if(!isdigit(*labbuf)) { ungetc(*labbuf,stdin); i = scanf("%s",labbuf); break; } case '.': case '+': case '-': ungetc(*labbuf,stdin); return(0); case '"': i = scanf("%[^\"\n]",labbuf); scanf("%[\"]",junk); break; } if(i==-1) return(-1); return(strlen(labbuf)); } symbol(ix,iy,k) { if(symbf==0&&k<0) { if(mode==0) point(ix,iy); return(1); } else { move(ix,iy); label(k>=0?labs+k:plotsymb); move(ix,iy); return(!brkf|k<0); } } title() { move(xd.xbot,yd.xbot-60); if (titlebuf[0]) { label(titlebuf); label(" "); } if(erasf&&gridf) { axlab('x',&xd); label(" "); axlab('y',&yd); } } axlab(c,p) char c; struct xy *p; { char buf[50]; sprintf(buf,"%g -%s%c- %g", p->xlb/p->xmult, p->xf==log10?"log ":"", c, p->xub/p->xmult); label(buf); } badarg() { fprintf(stderr,"graph: error in arguments\n"); exit(1); } ' kn ]jj CFLAGS = -n -O -s m4: m4.o m4y.o cc -n -s -o m4 m4.o m4y.o all: m4 cmp: m4 cmp m4 /bin/m4 rm m4 *.o cp: m4 cp m4 /bin/m4 rm m4 *.o '" k,_jj %{ extern long evalval; #define YYSTYPE long %} %term DIGITS %left '|' %left '&' %right '!' %nonassoc GT GE LT LE NE EQ %left '+' '-' %left '*' '/' '%' %right POWER %right UMINUS %% s : e ={ evalval = $1; } | ={ evalval = 0; } ; e : e '|' e ={ $$ = ($1!=0 || $3!=0) ? 1 : 0; } | e '&' e ={ $$ = ($1!=0 && $3!=0) ? 1 : 0; } | '!' e ={ $$ = $2 == 0; } | e EQ e ={ $$ = $1 == $3; } | e NE e ={ $$ = $1 != $3; } | e GT e ={ $$ = $1 > $3; } | e GE e ={ $$ = $1 >= $3; } | e LT e ={ $$ = $1 < $3; } | e LE e ={ $$ = $1 <= $3; } | e '+' e ={ $$ = ($1+$3); } | e '-' e ={ $$ = ($1-$3); } | e '*' e ={ $$ = ($1*$3); } | e '/' e ={ $$ = ($1/$3); } | e '%' e ={ $$ = ($1%$3); } | '(' e ')' ={ $$ = ($2); } | e POWER e ={ for ($$=1; $3-->0; $$ *= $1); } | '-' e %prec UMINUS ={ $$ = $2-1; $$ = -$2; } | '+' e %prec UMINUS ={ $$ = $2-1; $$ = $2; } | DIGITS ={ $$ = evalval; } ; %% yylex() { extern char *pe; while (*pe==' ' || *pe=='\t' || *pe=='\n') pe++; switch(*pe) { case '\0': case '+': case '-': case '/': case '%': case '(': case ')': return(*pe++); case '^': pe++; return(POWER); case '*': return(peek('*', POWER, '*')); case '>': return(peek('=', GE, GT)); case '<': return(peek('=', LE, LT)); case '=': return(peek('=', EQ, EQ)); case '|': return(peek('|', '|', '|')); case '&': return(peek('&', '&', '&')); case '!': return(peek('=', NE, '!')); default: evalval = 0; while (*pe >= '0' && *pe <= '9') evalval = evalval*10 + *pe++ - '0'; return(DIGITS); } } peek(c, r1, r2) { if (*++pe != c) return(r2); ++pe; return(r1); } yyerror(s) char *s; { } '' kǴ;TWZ]`cfilorbjj #include #include #define ERROR NULL #define READ "r" #define WRITE "w" #define EOS 0 int lpar = '('; #define LPAR lpar #define RPAR ')' #define COMMA ',' #define GRAVE '`' #define ACUTE '\'' #define LBRAK '[' #define RBRAK ']' #ifdef M4 char lquote LBRAK; char rquote RBRAK; #endif #ifndef M4 char lquote = GRAVE; char rquote = ACUTE; #endif #define COMMENT '#' #define ALPH 1 #define DIG 2 #define HSHSIZ 199 /* prime */ #define STACKS 50 #define SAVS 4096 #define TOKS 128 #define putbak(c) *ip++ = c; #define getchr() (ip>cur_ip?*--ip: getc(infile[infptr])) #define putchr(c) if (cp==NULL) {if (curfile)putc(c,curfile);} else *op++ = c char type[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, DIG, DIG, DIG, DIG, DIG, DIG, DIG, DIG, DIG, DIG, 0, 0, 0, 0, 0, 0, 0, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, 0, 0, 0, 0, ALPH, 0, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, ALPH, 0, 0, 0, 0, 0, }; char token[TOKS]; char eoa[] = "\0"; struct nlist { char *name; char *def; struct nlist *next; }; struct nlist *hshtab[HSHSIZ]; char ibuf[SAVS+TOKS]; char obuf[SAVS+TOKS]; char *op = obuf; char *ip = ibuf; char *ip_stk[10] = {ibuf}; char *cur_ip = ibuf; struct call { char **argp; int plev; }; struct call *cp = NULL; char *makeloc; char *ifdefloc; char *lenloc; char *undefloc; char *shiftloc; char *cqloc; char *defloc; char *evaloc; char *incrloc; char *substrloc; char *indexloc; char *transloc; char *ifloc; char *divloc; char *divnumloc; char *undivloc; char *dnlloc; char *inclloc; char *sinclloc; char *syscmdloc; char *dumploc; char *errploc; char *tempname; struct nlist *lookup(); char *install(); char *malloc(); char *mktemp(); char *copy(); long ctol(); int hshval; FILE *olist[11] = { stdout }; int okret; int curout = 0; FILE *curfile = { stdout }; FILE *infile[10] = { stdin }; int infptr = 0; main(argc, argv) char **argv; { char *argstk[STACKS+10]; struct call callst[STACKS]; register char *tp, **ap; int delexit(), catchsig(); register t; int i; #ifdef gcos #ifdef M4 install("GCOS", eoa); #endif #ifndef M4 install("gcos", eoa); #endif #endif #ifdef unix #ifdef M4 install("UNIX", eoa); #endif #ifndef M4 install("unix", eoa); #endif #endif #ifdef M4 makeloc = install("MAKETEMP", eoa); ifdefloc = install("IFDEF", eoa); lenloc = install("LEN", eoa); undefloc = install("UNDEFINE", eoa); shiftloc = install("SHIFT", eoa); cqloc = install("CHANGEQUOTE", eoa); defloc = install("DEFINE", eoa); evaloc = install("EVAL", eoa); inclloc = install("INCLUDE", eoa); sinclloc = install("SINCLUDE", eoa); syscmdloc = install("SYSCMD", eoa); dumploc = install("DUMPDEF", eoa); errploc = install("ERRPRINT", eoa); incrloc = install("INCR", eoa); substrloc = install("SUBSTR", eoa); indexloc = install("INDEX", eoa); transloc = install("TRANSLIT", eoa); ifloc = install("IFELSE", eoa); divloc = install("DIVERT", eoa); divnumloc = install("DIVNUM", eoa); undivloc = install("UNDIVERT", eoa); dnlloc = install("DNL", eoa); #endif #ifndef M4 makeloc = install("maketemp", eoa); ifdefloc = install("ifdef", eoa); lenloc = install("len", eoa); undefloc = install("undefine", eoa); shiftloc = install("shift", eoa); cqloc = install("changequote", eoa); defloc = install("define", eoa); evaloc = install("eval", eoa); inclloc = install("include", eoa); sinclloc = install("sinclude", eoa); syscmdloc = install("syscmd", eoa); dumploc = install("dumpdef", eoa); errploc = install("errprint", eoa); incrloc = install("incr", eoa); substrloc = install("substr", eoa); indexloc = install("index", eoa); transloc = install("translit", eoa); ifloc = install("ifelse", eoa); divloc = install("divert", eoa); divnumloc = install("divnum", eoa); undivloc = install("undive((rt", eoa); dnlloc = install("dnl", eoa); #endif ap = argstk; #ifndef gcos if (signal(SIGHUP, SIG_IGN) != SIG_IGN) signal(SIGHUP, catchsig); if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, catchsig); tempname = mktemp("/tmp/m4aXXXXX"); close(creat(tempname, 0)); #endif #ifdef gcos tempname = "m4.tempa"; #endif if (argc>1) putbak(0); for (;;) { tp = token; *tp++ = t = getchr(); *tp = EOS; if (t<=0) { if (infptr > 0) { fclose(infile[infptr]); infptr--; cur_ip = ip_stk[infptr]; continue; } if (argc<=1) break; argc--; argv++; if (infile[infptr]!=stdin) fclose(infile[infptr]); if (**argv=='-') infile[infptr] = stdin; else if ((infile[infptr]=fopen(argv[0], READ))==ERROR) { fprintf(stderr, "m4: file not found: %s\n", argv[0]); delexit(); } continue; } if (type[t]==ALPH) { while ((t=type[*tp++=getchr()])==ALPH||t==DIG); putbak(*--tp); *tp = EOS; if (*ap = lookup(token)->def) { if (++ap >= &argstk[STACKS'2 kô;TWZ]`cfilorbjj]) { fprintf(stderr, "m4: arg stack overflow\n"); delexit(); } if (cp==NULL) cp = callst; else if (++cp > &callst[STACKS]) { fprintf(stderr, "m4: call stack overflow\n"); delexit(); } cp->argp = ap; *ap++ = op; puttok(); *op++ = '\0'; t = getchr(); putbak(t); if (t!=LPAR) { /* if (t!=' ' && t!='\t') */ putbak(')'); putbak('('); } else /* try to fix arg count */ *ap++ = op; cp->plev = 0; } else puttok(); } else if (t==lquote) { i = 1; for (;;) { t = getchr(); if (t==rquote) { i--; if (i==0) break; } else if (t==lquote) i++; else if (t<0) { fprintf(stderr, "m4: EOF in string\n"); delexit(); } putchr(t); } } else if (t==COMMENT) { putbak(t); while ((t = getchr())!='\n'&& t>=0) if (cp==NULL) putchr(t); putbak(t); } else if (cp==NULL) { puttok(); } else if (t==LPAR) { if (cp->plev) *op++ = t; cp->plev++; while ( (t=getchr())==' ' || t=='\t' || t=='\n') ; /* skip leading white space during arg collection */ putbak(t); /* } else if (t==' ' || t=='\t' || t=='\n') { continue; */ } else if (t==RPAR) { cp->plev--; if (cp->plev==0) { *op++ = '\0'; expand(cp->argp, ap-cp->argp-1); op = *cp->argp; ap = cp->argp-1; cp--; if (cp < callst) cp = NULL; } else *op++ = t; } else if (t==COMMA && cp->plev<=1) { *op++ = '\0'; *ap++ = op; while ((t=getchr())==' ' || t=='\t' || t=='\n') ; /* skip leading white space during arg collection */ putbak(t); } else *op++ = t; } if (cp!=NULL) { fprintf(stderr, "m4: unexpected EOF\n"); delexit(); } okret = 1; delexit(); } catchsig() { okret = 0; delexit(); } delexit() { register FILE *fp; register i, c; if (!okret) { signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); } for (i=1; i<10; i++) { if (olist[i]==NULL) continue; fclose(olist[i]); tempname[7] = 'a'+i; if (okret) { fp = fopen(tempname, READ); while ((c = getc(fp)) > 0) putchar(c); fclose(fp); } unlink(tempname); } tempname[7] = 'a'; unlink(tempname); exit(1-okret); } puttok() { register char *tp; tp = token; if (cp) { if (op >= &obuf[SAVS]) { fprintf(stderr, "m4: argument overflow\n"); delexit(); } while (*tp) *op++ = *tp++; } else if (curfile) while (*tp) putc(*tp++, curfile); } pbstr(str) register char *str; { register char *p; p = str; while (*p++); --p; if (ip >= &ibuf[SAVS]) { fprintf(stderr, "m4: pushback overflow\n"); delexit(); } while (p > str) putbak(*--p); } expand(a1, c) register char **a1; { register char *dp; register n; dp = a1[-1]; if (dp==defloc) dodef(a1, c); else if (dp==evaloc) doeval(a1, c); else if (dp==inclloc) doincl(a1, c, 1); else if (dp==sinclloc) doincl(a1, c, 0); else if (dp==makeloc) domake(a1, c); else if (dp==syscmdloc) dosyscmd(a1, c); else if (dp==incrloc) doincr(a1, c); else if (dp==substrloc) dosubstr(a1, c); else if (dp==indexloc) doindex(a1, c); else if (dp==transloc) dotransl(a1, c); else if (dp==ifloc) doif(a1, c); else if (dp==divloc) dodiv(a1, c); else if (dp==divnumloc) dodivnum(a1, c); else if (dp==undivloc) doundiv(a1, c); else if (dp==dnlloc) dodnl(a1, c); else if (dp==dumploc) dodump(a1, c); else if (dp==errploc) doerrp(a1, c); else if (dp==lenloc) dolen(a1, c); else if (dp==ifdefloc) doifdef(a1, c); else if (dp==undefloc) doundef(a1, c); else if (dp==shiftloc) doshift(a1, c); else if (dp==cqloc) docq(a1, c); else { while (*dp++); for (dp--; dp>a1[-1]; ) { if (--dp>a1[-1] && dp[-1]=='$') { n = *dp-'0'; if (n>=0 && n<=9) { if (n <= c) pbstr(a1[n]); dp--; } else putbak(*dp); } else putbak(*dp); } } } struct nlist *lookup(str) char *str; { register char *s1, *s2; register struct nlist *np; static struct nlist nodef; s1 = str; for (hshval = 0; *s1; ) hshval += *s1++; hshval %= HSHSIZ; for (np = hshtab[hshval]; np!=NULL; np = np->next) { s1 = str; s2 = np->name; while (*s1++ == *s2) if (*s2++ == EOS) return(np); } return(&nodef); } char *install(nam, val) char *nam, *val; { register struct nlist *np; if ((np = lookup(nam))->name == NULL) { np = (struct nlist *)malloc(sizeof(*np)); if (np == NULL) { fprintf(stderr, "m4: no space for alloc\n"); exit(1); } np->name = copy(nam); np->def = copy(val); np->next = hshtab[hshval]; hshtab[hshval] = np; return(np->def); } free(np->def); np->def = copy(val); return(np->def); } doundef(ap, c) char **ap; { register struct nlist *np, *tnp; if (c < 1 || (np = lookup(ap[1]))->name == NULL) return; tnp = hshtab[hshval]; /* lookup sets hshval */ if (tnp == np) /* it's in first place */ hshtab[hshval] = np->next; else { for ( ; tnp->next != np; tnp = tnp->next) ; tnp->next = np->next; } free(np->name); free(np->def); free((char *)np); } char *copy(s) register char *s; { register char *p, *s1; p = s1 = malloc((unsigned)strlen(s)+1); if (p == NULL) { fprintf(stderr, "m4: no space for alloc\n"); exit(1); } while (*s1++ = *s++); return(p); } dodef(ap, c) char **ap; { if (c >= 2) { if (strcmp(ap[1], ap[2]) == 0) { fprintf(stderr, "m4: %s defined as itself\n", ap[1]); delexit(); } install(ap[1], ap[2]); } else if (c == 1) install(ap[1], ""); } doifdef(ap, c) char **ap; { register struct nlist *np; if (c < 2) return; if (lookup(ap[1])->name != NULL) pbstr(ap[2]); else if (c >= 3) pbstr(ap[3]); } dolen(ap, c) char **ap; { putnum((long) strlen(ap[1])); } docq(ap, c) char **ap; { if (c > 1) { lquote = *ap[1]; rquote = *ap[2]; } else if (c == 1) { lquote = rquote = *ap[1]; } else { #ifndef M4 lquote = GRAVE; rquote = ACUTE; #endif #ifdef M4 lquote = LBRAK; rquote = RBRAK; #endif } } doshift(ap, c) char **ap; { fprintf(stderr, "m4: shift not yet implemented\n"); } dodump(ap, c) char **ap; { int i; register struct nlist *np; if (c > 0) while (c--) { if ((np = lookup(*++ap))->name != NULL) fprintf(stderr, "`%s' `%s'\n", np->name, np->def); } else for (i=0; inext) fprintf(stderr, "`%s' `%s'\n", np->name, np->def); } doerrp(ap, c) char **ap; { if (c > 0) { fprintf(stderr, ap[1], ap[2], ap[3], ap[4], ap[5], ap[6]); fprintf(stderr, "\n"); } } long evalval; /* return value from yacc stuff */ char *pe; /* used by grammar */ doeval(ap, c) char **ap; { if (c > 0) { pe = ap[1]; if (yyparse() == 0) putnum(evalval); else fprintf(stderr, "m4: invalid expression in eval: %s\n", ap[1]); } } doincl(ap, c, noisy) char **ap; { if (c > 0 && strlen(ap[1]) > 0) { infptr++; ip_stk[infptr] = cur_ip = ip; if ((infile[infptr] = fopen(ap[1], READ))==ERROR) { if (noisy) { fprintf(stderr, "m4: file not found: %s\n", ap[1]); delexit(); } else infptr--; } } } dosyscmd(ap, c) char **ap; { if (c > 0) system(ap[1]); } domake(ap, c) char **ap; { if (c > 0) pbstr(mktemp(ap[1])); } doincr(ap, c) char **ap; { if (c >= 1) putnum(ctol(ap[1])+1); } putnum(num) long num; { register sign; sign = (num < 0) ? '-' : '\0'; if (num < 0) num = -num; do { putbak(num%10+'0'); num = num/10; } while (num!=0); if (sign == '-') putbak('-'); } dosubstr(ap, c) char **ap; { int nc; register char *sp, *fc; if (c<2) return; if (c<3) nc = TOKS; else nc = ctoi(ap[3]); fc = ap[1] + max(0, min(ctoi(ap[2]), strlen(ap[1]))); sp = fc + min(nc, strlen(fc)); while (sp > fc) putbak(*--sp); } doindex(ap, c) char **ap; { if (c >= 2) putnum((long) strindex(ap[1], ap[2])); } strindex(p1, p2) char *p1, *p2; { register m; register char *s, *t, *p; for (p=p1; *p; p++) { s = p; m = 1; for (t=p2; *t; ) if (*t++ != *s++) m = 0; if (m == 1) return(p-p1); } return(-1); } dotransl(ap, c) char **ap; { register char *s, *fr, *to; if (c <= 1) return; if (c == 2) { register int i; to = ap[1]; for (s = ap[1]; *s; s++) { i = 0; for (fr = ap[2]; *fr; fr++) if (*s == *fr) { i++; break; } if (i == 0) *to++ = *s; } *to = '\0'; } if (c >= 3) { for (s = ap[1]; *s; s++) for (fr = ap[2], to = ap[3]; *fr && *to; fr++, to++) if (*s == *fr) *s = *to; } pbstr(ap[1]); } doif(ap, c) register char **ap; { if (c < 3) return; while (c >= 3) { if (strcmp(ap[1], ap[2]) == 0) { pbstr(ap[3]); return; } c -= 3; ap += 3; } if (c > 0) pbstr(ap[1]); } dodiv(ap, c) register char **ap;(( { register int f; if (c<1) f = 0; else f = ctoi(ap[1]); if (f>=10 || f<0) { curfile = NULL; return; } tempname[7] = 'a' + f; if (olist[f] || (olist[f]=fopen(tempname, WRITE))) { curout = f; curfile = olist[f]; } } doundiv(ap, c) char **ap; { register FILE *fp; register int i, ch; int j; if (c == 0) { for (i=1; i<10; i++) { if (i==curout || olist[i]==NULL) continue; fclose(olist[i]); tempname[7] = 'a'+i; fp = fopen(tempname, READ); if (curfile != NULL) while ((ch = getc(fp)) > 0) putc(ch, curfile); fclose(fp); unlink(tempname); olist[i] = NULL; } } else { for (j = 1; j <= c; j++) { i = ctoi(*++ap); if (i<1 || i>9 || i==curout || olist[i]==NULL) continue; fclose(olist[i]); tempname[7] = 'a'+i; fp = fopen(tempname, READ); if (curfile != NULL) while ((ch = getc(fp)) > 0) putc(ch, curfile); fclose(fp); unlink(tempname); olist[i] = NULL; } } } dodivnum(ap, c) char **ap; { putnum((long) curout); } dodnl(ap, c) char **ap; { register t; while ((t=getchr())!='\n' && t>=0) ; } long ctol(str) register char *str; { register sign; long num; while (*str==' ' || *str=='\t' || *str=='\n') str++; num = 0; if (*str == '-') { sign = -1; str++; } else sign = 1; while (*str>='0' && *str<='9') num = num*10 + *str++ - '0'; return(sign * num); } ctoi(s) char *s; { return(ctol(s)); } min(a, b) { if (a>b) return(b); return(a); } max(a, b) { if (a>b) return(a); return(b); } 'G k꣕%!$'*-0369<i& #include # /* diff3 - 3-way differential file comparison*/ /* diff3 [-e] d13 d23 f1 f2 f3 * * d13 = diff report on f1 vs f3 * d23 = diff report on f2 vs f3 * f1, f2, f3 the 3 files */ struct range {int from,to; }; /* from is first in range of changed lines * to is last+1 * from=to=line after point of insertion * for added lines */ struct diff {struct range old, new;}; #define NC 200 /* de is used to gather editing scripts, * that are later spewed out in reverse order. * its first element must be all zero * the "new" component of de contains line positions * or byte positions depending on when you look(!?) */ struct diff d13[NC]; struct diff d23[NC]; struct diff de[NC]; char line[256]; FILE *fp[3]; int linct[3] = {0,0,0}; /* the number of the last-read line in each file * is kept in cline[0-2] */ int cline[3]; /* the latest known correspondence between line * numbers of the 3 files is stored in last[1-3] */ int last[4]; int eflag; int debug = 0; main(argc,argv) char **argv; { register i,m,n; if(*argv[1]=='-') { switch(argv[1][1]) { default: eflag = 3; break; case '3': eflag = 2; break; case 'x': eflag = 1; } argv++; argc--; } if(argc<6) { fprintf(stderr,"diff3: arg count\n"); exit(1); } m = readin(argv[1],d13); n = readin(argv[2],d23); for(i=0;i<=2;i++) if((fp[i] = fopen(argv[i+3],"r")) == NULL) { printf("diff3: can't open %s\n",argv[i+3]); exit(1); } merge(m,n); } /*pick up the line numbers of allcahnges from * one change file * (this puts the numbers in a vector, which is not * strictly necessary, since the vector is processed * in one sequential pass. The vector could be optimized * out of existence) */ readin(name,dd) char *name; struct diff *dd; { register i; int a,b,c,d; char kind; char *p; fp[0] = fopen(name,"r"); for(i=0;getchange(fp[0]);i++) { if(i>=NC) { fprintf(stderr,"diff3: too many changes\n"); exit(0); } p = line; a = b = number(&p); if(*p==',') { p++; b = number(&p); } kind = *p++; c = d = number(&p); if(*p==',') { p++; d = number(&p); } if(kind=='a') a++; if(kind=='d') c++; b++; d++; dd[i].old.from = a; dd[i].old.to = b; dd[i].new.from = c; dd[i].new.to = d; } dd[i].old.from = dd[i-1].old.to; dd[i].new.from = dd[i-1].new.to; fclose(fp[0]); return(i); } number(lc) char **lc; { register nn; nn = 0; while(digit(**lc)) nn = nn*10 + *(*lc)++ - '0'; return(nn); } digit(c) { return(c>='0'&&c<='9'); } getchange(b) FILE *b; { while(getline(b)) if(digit(line[0])) return(1); return(0); } getline(b) FILE *b; { register i, c; for(i=0;iold.from,d1->old.to, d1->new.from,d1->new.to, d2->old.from,d2->old.to, d2->new.from,d2->new.to); } /* first file is different from others*/ if(!t2||t1&&d1->new.to < d2->new.from) { /* stuff peculiar to 1st file */ if(eflag==0) { separate("1"); change(1,&d1->old,0); keep(2,&d1->old,&d1->new); change(3,&d1->new,0); } d1++; continue; } /* second file is different from others*/ if(!t1||t2&&d2->new.to < d1->new.from) { if(eflag==0) { separate("2"); keep(1,&d2->old,&d2->new); change(2,&d2->old,0); change(3,&d2->new,0); } d2++; continue; } /* merge overlapping changes in first file * this happens after extension see below*/ if(d1+1new.to>=d1[1].new.from) { d1[1].old.from = d1->old.from; d1[1].new.from = d1->new.from; d1++; continue; } /* merge overlapping changes in second*/ if(d2+1new.to>=d2[1].new.from) { d2[1].old.from = d2->old.from; d2[1].new.from = d2->new.from; d2++; continue; } /* stuff peculiar to third file or different in all*/ if(d1->new.from==d2->new.from&& d1->new.to==d2->new.to) { dup = duplicate(&d1->old,&d2->old); /* dup=0 means all files differ * dup =1 meands files 1&2 identical*/ if(eflag==0) { separate(dup?"3":""); change(1,&d1->old,dup); change(2,&d2->old,0); d3 = d1->old.to>d1->old.from?d1:d2; change(3,&d3->new,0); } else j = edit(d1,dup,j); d1++; d2++; continue; } /* overlapping changes from file1 & 2 * extend changes appropriately to * make them coincide*/ if(d1->new.fromnew.from) { d2->old.from -= d2->new.from-d1->new.from; d2->new.from = d1->new.from; } else if(d2->new.fromnew.from) { d1->old.from -= d1->new.from-d2->new.from; d1->new.from = d2->new.from; } if(d1->new.to >d2->new.to) { d2->old.to += d1->new.to - d2->new.to; d2->new.to = d1->new.to; } else if(d2->new.to >d1->new.to) { d1->old.to += d2->new.to - d1->new.to; d1->new.to = d2->new.to; } } if(efla'R k'%!$'*-0369<i&g) edscript(j); } separate(s) char *s; { printf("====%s\n",s); } /* the range of ines rold.from thru rold.to in file i * is to be changed. it is to be printed only if * it does not duplicate something to be printed later */ change(i,rold,dup) struct range *rold; { printf("%d:",i); last[i] = rold->to; prange(rold); if(dup) return; if(debug) return; i--; skip(i,rold->from,(char *)0); skip(i,rold->to," "); } /* print the range of line numbers, rold.from thru rold.to * as n1,n2 or n1 */ prange(rold) struct range *rold; { if(rold->to<=rold->from) printf("%da\n",rold->from-1); else { printf("%d",rold->from); if(rold->to > rold->from+1) printf(",%d",rold->to-1); printf("c\n"); } } /* no difference was reported by diff between file 1(or 2) * and file 3, and an artificial dummy difference (trange) * must be ginned up to correspond to the change reported * in the other file */ keep(i,rold,rnew) struct range *rold, *rnew; { register delta; struct range trange; delta = last[3] - last[i]; trange.from = rnew->from - delta; trange.to = rnew->to - delta; change(i,&trange,1); } /* skip to just befor line number from in file i * if "pr" is nonzero, print all skipped stuff * w with string pr as a prefix */ skip(i,from,pr) char *pr; { register j,n; for(n=0;cline[i]to-r1->from != r2->to-r2->from) return(0); skip(0,r1->from,(char *)0); skip(1,r2->from,(char *)0); nchar = 0; for(nline=0;nlineto-r1->from;nline++) { do { c = getc(fp[0]); d = getc(fp[1]); if(c== -1||d== -1) trouble(); nchar++; if(c!=d) { repos(nchar); return; } } while(c!= '\n'); } repos(nchar); return(1); } repos(nchar) { register i; for(i=0;i<2;i++) fseek(fp[i], (long)-nchar, 1); } trouble() { fprintf(stderr,"diff3: logic error\n"); abort(); } /* collect an editing script for later regurgitation */ edit(diff,dup,j) struct diff *diff; { if(((dup+1)&eflag)==0) return(j); j++; de[j].old.from = diff->old.from; de[j].old.to = diff->old.to; de[j].new.from = de[j-1].new.to +skip(2,diff->new.from,(char *)0); de[j].new.to = de[j].new.from +skip(2,diff->new.to,(char *)0); return(j); } /* regurgitate */ edscript(n) (({ register j,k; char block[512]; for(n=n;n>0;n--) { prange(&de[n].old); fseek(fp[2], (long)de[n].new.from, 0); for(k=de[n].new.to-de[n].new.from;k>0;k-= j) { j = k>512?512:k; if(fread(block,1,j,fp[2])!=j) trouble(); fwrite(block, 1, j, stdout); } printf(".\n"); } } 'Y kSmeii all: dc cmp: dc cmp dc /bin/dc rm dc cp: dc cp dc /bin/dc rm dc dc: dc.c dc.h cc -n -s -O dc.c -o dc '[ kG   hii #define FATAL 0 #define NFATAL 1 #define BLK sizeof(struct blk) #define PTRSZ sizeof(int *) #define HEADSZ 1024 #define STKSZ 100 #define RDSKSZ 100 #define TBLSZ 256 #define ARRAYST 0241 #define MAXIND 2048 #define NL 1 #define NG 2 #define NE 3 #define length(p) ((p)->wt-(p)->beg) #define rewind(p) (p)->rd=(p)->beg #define create(p) (p)->rd = (p)->wt = (p)->beg #define fsfile(p) (p)->rd = (p)->wt #define truncate(p) (p)->wt = (p)->rd #define sfeof(p) (((p)->rd==(p)->wt)?1:0) #define sfbeg(p) (((p)->rd==(p)->beg)?1:0) #define sungetc(p,c) *(--(p)->rd)=c #ifdef interdata #define NEGBYTE 0200 #define MASK (-1 & ~0377) #define sgetc(p) ( ((p)->rd==(p)->wt) ? EOF :( ((*(p)->rd & NEGBYTE) != 0) ? ( *(p)->rd++ | MASK): *(p)->rd++ )) #define slookc(p) ( ((p)->rd==(p)->wt) ? EOF :( ((*(p)->rd & NEGBYTE) != 0) ? (*(p)->rd | MASK) : *(p)->rd )) #define sbackc(p) ( ((p)->rd==(p)->beg) ? EOF :( ((*(--(p)->rd) & NEGBYTE) != 0) ? (*(p)->rd | MASK): *(p)->rd )) #endif #ifndef interdata #define sgetc(p) (((p)->rd==(p)->wt)?EOF:*(p)->rd++) #define slookc(p) (((p)->rd==(p)->wt)?EOF:*(p)->rd) #define sbackc(p) (((p)->rd==(p)->beg)?EOF:*(--(p)->rd)) #endif #define sputc(p,c) {if((p)->wt==(p)->last)more(p); *(p)->wt++ = c; } #define salterc(p,c) {if((p)->rd==(p)->last)more(p); *(p)->rd++ = c; if((p)->rd>(p)->wt)(p)->wt=(p)->rd;} #define sunputc(p) (*( (p)->rd = --(p)->wt)) #define zero(p) for(pp=(p)->beg;pp<(p)->last;)*pp++='\0' #define OUTC(x) {printf("%c",x); if(--count == 0){printf("\\\n"); count=ll;} } #define TEST2 {if((count -= 2) <=0){printf("\\\n");count=ll;}} #define EMPTY if(stkerr != 0){printf("stack empty\n"); continue; } #define EMPTYR(x) if(stkerr!=0){pushp(x);printf("stack empty\n");continue;} #define EMPTYS if(stkerr != 0){printf("stack empty\n"); return(1);} #define EMPTYSR(x) if(stkerr !=0){printf("stack empty\n");pushp(x);return(1);} #define error(p) {printf(p); continue; } #define errorrt(p) {printf(p); return(1); } struct blk { char *rd; char *wt; char *beg; char *last; }; struct blk *hfree; struct blk *getwd(); struct blk *lookwd(); struct blk *getdec(); struct blk *morehd(); struct blk *arg1, *arg2; int svargc; char savk; char **svargv; int dbg; int ifile; FILE *curfile; struct blk *scalptr, *basptr, *tenptr, *inbas; struct blk *sqtemp, *chptr, *strptr, *divxyz; struct blk *stack[STKSZ]; struct blk **stkptr,**stkbeg; struct blk **stkend; int stkerr; int lastchar; struct blk *readstk[RDSKSZ]; struct blk **readptr; struct blk *rem; int k; struct blk *irem; int skd,skr; struct blk *pop(),*readin(),*add0(),*mult(); struct blk *scalint(); struct blk *removc(); struct blk *add(),*div(),*removr(); struct blk *exp(); struct blk *sqrt(); struct blk *salloc(),*copy(); struct blk *scale(); int neg; struct sym { struct sym *next; struct blk *val; } symlst[TBLSZ]; struct sym *stable[TBLSZ]; struct sym *sptr,*sfree; struct wblk { struct blk **rdw; struct blk **wtw; struct blk **begw; struct blk **lastw; }; FILE *fsave; long rel; long nbytes; long all; long headmor; long obase; int fw,fw1,ll; int (*outdit)(); int bigot(),hexot(); int logo; int log10; int count; char *pp; int (*signal())(); int onintr(); char *malloc(); char *nalloc(); char *realloc(); char *dummy; 'c k={=@CFILORUX[lXF #include #include #include "dc.h" main(argc,argv) int argc; char *argv[]; { init(argc,argv); commnds(); } commnds(){ register int c; register struct blk *p,*q; long l; int sign; struct blk **ptr,*s,*t; struct sym *sp; int sk,sk1,sk2; int n,d; while(1){ if(((c = readc())>='0' && c <= '9')|| (c>='A' && c <='F') || c == '.'){ unreadc(c); p = readin(); pushp(p); continue; } switch(c){ case ' ': case '\n': case 0377: case EOF: continue; case 'Y': sdump("stk",*stkptr); printf("all %ld rel %ld headmor %ld\n",all,rel,headmor); printf("nbytes %ld\n",nbytes); continue; case '_': p = readin(); savk = sunputc(p); chsign(p); sputc(p,savk); pushp(p); continue; case '-': subt(); continue; case '+': if(eqk() != 0)continue; binop('+'); continue; case '*': arg1 = pop(); EMPTY; arg2 = pop(); EMPTYR(arg1); sk1 = sunputc(arg1); sk2 = sunputc(arg2); binop('*'); p = pop(); sunputc(p); savk = sk1+sk2; if(savk>k && savk>sk1 && savk>sk2){ sk = sk1; if(sk=3){ error("exp too big\n"); } savk = sunputc(arg2); p = exp(arg2,arg1); release(arg2); rewind(arg1); c = sgetc(arg1); if(sfeof(arg1) == 0) c = sgetc(arg1)*100 + c; d = c*savk; release(arg1); if(neg == 0){ if(k>=savk)n = k; else n = savk; if(n= 100){ sputc(p,n/100); n %= 100; } sputc(p,n); sputc(p,0); pushp(p); continue; case 'Z': p = pop(); EMPTY; n = (length(p)-1)<<1; fsfile(p); sbackc(p); if(sfbeg(p) == 0){ if((c = sbackc(p))<0){ n -= 2; if(sfbeg(p) == 1)n += 1; else { if((c = sbackc(p)) == 0)n += 1; else if(c > 90)n -= 1; } } else if(c < 10) n -= 1; } release(p); q = salloc(1); if(n >= 100){ sputc(q,n%100); n /= 100; } sputc(q,n); sputc(q,0); pushp(q); continue; case 'i': p = pop(); EMPTY; p = scalint(p); release(inbas); inbas = p; continue; case 'I': p = copy(inbas,length(inbas)+1); sputc(p,0); pushp(p); continue; case 'o': p = pop(); EMPTY; p = scalint(p); sign = 0; n = length(p); q = copy(p,n); fsfile(q); l = c = sbackc(q); if(n != 1){ if(c<0){ sign = 1; chsign(q); n = length(q); fsfile(q); l = c = sbackc(q); } if(n != 1){ while(sfbeg(q) == 0)l = l*100+sbackc(q); } } logo = log2(l); obase = l; release(basptr); if(sign == 1)obase = -l; basptr = p; outdit = bigot; if(n =((= 1 && sign == 0){ if(c <= 16){ outdit = hexot; fw = 1; fw1 = 0; ll = 70; release(q); continue; } } n = 0; if(sign == 1)n++; p = salloc(1); sputc(p,-1); t = add(p,q); n += length(t)*2; fsfile(t); if((c = sbackc(t))>9)n++; release(t); release(q); release(p); fw = n; fw1 = n-1; ll = 70; if(fw>=ll)continue; ll = (70/fw)*fw; continue; case 'O': p = copy(basptr,length(basptr)+1); sputc(p,0); pushp(p); continue; case '[': n = 0; p = salloc(0); while(1){ if((c = readc()) == ']'){ if(n == 0)break; n--; } sputc(p,c); if(c == '[')n++; } pushp(p); continue; case 'k': p = pop(); EMPTY; p = scalint(p); if(length(p)>1){ error("scale too big\n"); } rewind(p); k = sfeof(p)?0:sgetc(p); release(scalptr); scalptr = p; continue; case 'K': p = copy(scalptr,length(scalptr)+1); sputc(p,0); pushp(p); continue; case 'X': p = pop()'n kjx={=@CFILORUX[lXF; EMPTY; fsfile(p); n = sbackc(p); release(p); p = salloc(2); sputc(p,n); sputc(p,0); pushp(p); continue; case 'Q': p = pop(); EMPTY; if(length(p)>2){ error("Q?\n"); } rewind(p); if((c = sgetc(p))<0){ error("neg Q\n"); } release(p); while(c-- > 0){ if(readptr == &readstk[0]){ error("readstk?\n"); } if(*readptr != 0)release(*readptr); readptr--; } continue; case 'q': if(readptr <= &readstk[1])exit(0); if(*readptr != 0)release(*readptr); readptr--; if(*readptr != 0)release(*readptr); readptr--; continue; case 'f': if(stkptr == &stack[0])printf("empty stack\n"); else { for(ptr = stkptr; ptr > &stack[0];){ print(*ptr--); } } continue; case 'p': if(stkptr == &stack[0])printf("empty stack\n"); else{ print(*stkptr); } continue; case 'P': p = pop(); EMPTY; sputc(p,0); printf("%s",p->beg); release(p); continue; case 'd': if(stkptr == &stack[0]){ printf("empty stack\n"); continue; } q = *stkptr; n = length(q); p = copy(*stkptr,n); pushp(p); continue; case 'c': while(stkerr == 0){ p = pop(); if(stkerr == 0)release(p); } continue; case 'S': if(stkptr == &stack[0]){ error("save: args\n"); } c = readc() & 0377; sptr = stable[c]; sp = stable[c] = sfree; sfree = sfree->next; if(sfree == 0)goto sempty; sp->next = sptr; p = pop(); EMPTY; if(c >= ARRAYST){ q = copy(p,PTRSZ); for(n = 0;n < PTRSZ-1;n++)sputc(q,0); release(p); p = q; } sp->val = p; continue; sempty: error("symbol table overflow\n"); case 's': if(stkptr == &stack[0]){ error("save:args\n"); } c = readc() & 0377; sptr = stable[c]; if(sptr != 0){ p = sptr->val; if(c >= ARRAYST){ rewind(p); while(sfeof(p) == 0)release(getwd(p)); } release(p); } else{ sptr = stable[c] = sfree; sfree = sfree->next; if(sfree == 0)goto sempty; sptr->next = 0; } p = pop(); sptr->val = p; continue; case 'l': load(); continue; case 'L': c = readc() & 0377; sptr = stable[c]; if(sptr == 0){ error("L?\n"); } stable[c] = sptr->next; sptr->next = sfree; sfree = sptr; p = sptr->val; if(c >= ARRAYST){ rewind(p); while(sfeof(p) == 0){ q = getwd(p); if(q != 0)release(q); } } pushp(p); continue; case ':': p = pop(); EMPTY; q = scalint(p); fsfile(q); c = 0; if((sfbeg(q) == 0) && ((c = sbackc(q))<0)){ error("neg index\n"); } if(length(q)>2){ error("index too big\n"); } if(sfbeg(q) == 0)c = c*100+sbackc(q); if(c >= MAXIND){ error("index too big\n"); } release(q); n = readc() & 0377; sptr = stable[n]; if(sptr == 0){ sptr = stable[n] = sfree; sfree = sfree->next; if(sfree == 0)goto sempty; sptr->next = 0; p = salloc((c+PTRSZ)*PTRSZ); zero(p); } else{ p = sptr->val; if(length(p)-PTRSZ < c*PTRSZ){ q = copy(p,(c+PTRSZ)*PTRSZ); release(p); p = q; } } seekc(p,c*PTRSZ); q = lookwd(p); if (q!=NULL) release(q); s = pop(); EMPTY; salterwd(p,s); sptr->val = p; continue; case ';': p = pop(); EMPTY; q = scalint(p); fsfile(q); c = 0; if((sfbeg(q) == 0) && ((c = sbackc(q))<0)){ error("neg index\n"); } if(length(q)>2){ error("index too big\n"); } if(sfbeg(q) == 0)c = c*100+sbackc(q); if(c >= MAXIND){ error("index too big\n"); } release(q); n = readc() & 0377; sptr = stable[n]; if(sptr != 0){ p = sptr->val; if(length(p)-PTRSZ >= c*PTRSZ){ seekc(p,c*PTRSZ); s = getwd(p); if(s != 0){ q = copy(s,length(s)); pushp(q); continue; } } } q = salloc(PTRSZ); putwd(q, (struct blk *)0); pushp(q); continue; case 'x': execute: p = pop(); EMPTY; if((readptr != &readstk[0]) && (*readptr != 0)){ if((*readptr)->rd == (*readptr)->wt) release(*readptr); else{ if(readptr++ == &readstk[RDSKSZ]){ error("nesting depth\n"); } } } else readptr++; *readptr = p; if(p != 0)rewind(p); else{ if((c = readc()) != '\n')unreadc(c); } continue; case '?': if(++readptr == &readstk[RDSKSZ]){ error("nesting depth\n"); } *readptr = 0; fsave = curfile; curfile = stdin; while((c = readc()) == '!')command(); p = salloc(0); sputc(p,c); while((c = readc()) != '\n'){ sputc(p,c); if(c == '\\')sputc(p,readc()); } curfile = fsave; *readptr = p; continue; case '!': if(command() == 1)goto execute; continue; case '<': case '>': case '=': if(cond(c) == 1)goto execute; continue; default: printf("%o is unimplemented\n",c); } } } struct blk * div(ddivd,ddivr) struct blk *ddivd,*ddivr; { int divsign,remsign,offset,divcarry; int carry, dig,magic,d,dd; long c,td,cc; struct blk *ps; register struct blk *p,*divd,*divr; rem = 0; p = salloc(0); if(length(ddivr) == 0){ pushp(ddivr); errorrt("divide by 0\n"); } divsign = remsign = 0; divr = ddivr; fsfile(divr); if(sbackc(divr) == -1){ divr = copy(ddivr,length(ddivr)); chsign(divr); divsign = ~divsign; } divd = copy(ddivd,length(ddivd)); fsfile(divd); if(sfbeg(divd) == 0 && sbackc(divd) == -1){ chsign(divd); divsign = ~divsign; remsign = ~remsign; } offset = length(divd) - length(divr); if(offset < 0)goto ddone; seekc(p,offset+1); sputc(divd,0); magic = 0; fsfile(divr); c = sbackc(divr); if(c<10)magic++; c = c*100 + (sfbeg(divr)?0:sbackc(divr)); if(magic>0){ c = (c*100 +(sfbeg(divr)?0:sbackc(divr)))*2; c /= 25; } while(offset >= 0){ fsfile(divd); td = sbackc(divd)*100; dd = sfbeg(divd)?0:sbackc(divd); td = (td+dd)*100; dd = sfbeg(divd)?0:sbackc(divd); td = td+dd; cc = c; if(offset == 0)td += 1; else cc += 1; if(magic != 0)td = td<<3; dig = td/cc; rewind(divr); rewind(divxyz); carry = 0; while(sfeof(divr) == 0){ d = sgetc(divr)*dig+carry; carry = d / 100; salterc(divxyz,d%100); } salterc(divxyz,carry); rewind(divxyz); seekc(divd,offset); carry = 0; while(sfeof(divd) == 0){ d = slookc(divd); d = d-(sfeof(divxyz)?0:sgetc(divxyz))-carry; carry = 0; if(d < 0){ d += 100; carry = 1; } salterc(divd,d); } divcarry = carry; sbackc(p); salterc(p,dig); sbackc(p); if(--offset >= 0)divd->wt--; } if(divcarry != 0){ salterc(p,dig-1); salterc(divd,-1); ps = add(divr,divd); release(divd); divd = ps; } rewind(p); divcarry = 0; while(sfeof(p) == 0){ d = slookc(p)+divcarry; divcarry = 0; if(d >= 100){ d -= 100; divcarry = 1; } salterc(p,d); } if(divcarry != 0)salterc(p,divcarry); fsfile(p); while(sfbeg(p) == 0){ if(sbackc(p) == 0)truncate(p); else break; } if(divsign < 0)chsign(p); fsfile(divd); while(sfbeg(divd) == 0){ if(sbackc(divd) == 0)truncate(divd); else break; } ddone: if(remsign<0)chsign(divd); if(divr != ddivr)release(divr); rem = divd; return(p); } dscale(){ register struct blk *dd,*dr; register struct blk *r; int c; dr = pop(); EMPTYS; dd = pop(); EMPTYSR(dr); fsfile(dd); skd = sunputc(dd); fsfile(dr); skr = sunputc(dr); if(sfbeg(dr) == 1 || (sfbeg(dr) == 0 && sbackc(dr) == 0)){ sputc(dr,skr); pushp(dr); errorrt("divide by 0\n"); } c = k-skd+skr; if(c < 0)r = removr(dd,-c); else { r = add0(dd,c); irem = 0; } arg1 = r; arg2 = dr; savk = k; return(0); } struct blk * removr(p,n) struct blk *p; { int nn; register struct blk *q,*s,*r; rewind(p); nn = (n+1)/2; q = salloc(nn); while(n>1){ sputc(q,sgetc(p)); n -= 2; } r = salloc(2); while(sfeof(p) == 0)sputc(r,sgetc(p)); release(p); if(n == 1){ s = div(r,tenptr); release(r); rewind(rem); if(sfeof(rem) == 0)sputc(q,sgetc(rem)); release(rem); irem = q; return(s); } irem = q; return(r); } struct blk * sqrt(p) struct blk *p; { struct blk *t; struct blk *r,*q,*s; int c,n,nn; n = length(p); fsfile(p); c = sbackc(p); if((n&1) != 1)c = c*100+(sfbeg(p)?0:sbackc(p)); n = (n+1)>>1; r = salloc(n); zero(r); seekc(r,n); nn=1; while((c -= nn)>=0)nn+=2; c=(nn+1)>>1; fsfile(r); sbackc(r); if(c>=100){ c -= 100; salterc(r,c); sputc(r,1); } else salterc(r,c); while(1){ q = div(p,r); s = add(q,r); release(q); release(rem); q = div(s,sqtemp); release(s); release(rem); s = copy(r,length(r)); chsign(s); t = add(s,q); release(s); fsfile(t); nn = sfbeg(t)?0:sbackc(t); if(nn>=0)break; release(r); (( release(t); r = q; } release(t); release(q); release(p); return(r); } struct blk * exp(base,ex) struct blk *base,*ex; { register struct blk *r,*e,*p; struct blk *e1,*t,*cp; int temp,c,n; r = salloc(1); sputc(r,1); p = copy(base,length(base)); e = copy(ex,length(ex)); fsfile(e); if(sfbeg(e) != 0)goto edone; temp=0; c = sbackc(e); if(c<0){ temp++; chsign(e); } while(length(e) != 0){ e1=div(e,sqtemp); release(e); e = e1; n = length(rem); release(rem); if(n != 0){ e1=mult(p,r); release(r); r = e1; } t = copy(p,length(p)); cp = mult(p,t); release(p); release(t); p = cp; } if(temp != 0){ if((c = length(base)) == 0){ goto edone; } if(c>1)create(r); else{ rewind(base); if((c = sgetc(base))<=1){ create(r); sputc(r,c); } else create(r); } } edone: release(p); release(e); return(r); } init(argc,argv) int argc; char *argv[]; { register struct sym *sp; if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT,onintr); setbuf(stdout,(char *)NULL); svargc = --argc; svargv = argv; while(svargc>0 && svargv[1][0] == '-'){ switch(svargv[1][1]){ default: dbg=1; } svargc--; svargv++; } ifile=1; if(svargc<=0)curfile = stdin; else if((curfile = fopen(svargv[1],"r")) == NULL){ printf("can't open file %s\n",svargv[1]); exit(1); } dummy = malloc(1); scalptr = salloc(1); sputc(scalptr,0); basptr = salloc(1); sputc(basptr,10); obase=10; log10=log2(10L); ll=70; fw=1; fw1=0; tenptr = salloc(1); sputc(tenptr,10); obase=10; inbas = salloc(1); sputc(inbas,10); sqtemp = salloc(1); sputc(sqtemp,2); chptr = salloc(0); strptr = salloc(0); divxyz = salloc(0); stkbeg = stkptr = &stack[0]; stkend = &stack[STKSZ]; stkerr = 0; readptr = &readstk[0]; k=0; sp = sptr = &symlst[0]; while(sptr < &symlst[TBLSZ]){ sptr->next = ++sp; sptr++; } sptr->next=0; sfree = &symlst[0]; return; } onintr(){ signal(SIGINT,onintr); while(readptr != &readstk[0]){ if(*readptr != 0){release(*readptr);} readptr--; } curfile = stdin; commnds(); } pushp(p) struct blk *p; { if(stkptr == stkend){ printf("out of stack space\n"); return; } stkerr=0; *++stkptr = p; return; } struct blk * pop(){ if(stkptr == stack){ stkerr=1; return(0); } return(*stkptr--); } struct blk * readin(){ register struct blk *p,*q; int dp,dpct; register int c; dp = dpct=0; p = salloc(0); while(1){ c = readc(); switch(c){ case '.': if(dp != 0){ unreadc(c); break; } dp++; continue; case '\\': readc(); continue; default: if(c >= 'A' && c <= 'F')c = c - 'A' + 10; else if(c >= '0' && c <= '9')c -= '0'; else goto gotnum; if(dp != 0){ if(dpct >= 99)continue; dpct++; } create(chptr); if(c != 0)sputc(chptr,c); q = mult(p,inbas); release(p); p = add(chptr,q); release(q); } } gotnum: unreadc(c); if(dp == 0){ sputc(p,0); return(p); } else{ q = scale(p,dpct); return(q); } } struct blk * add0(p,ct) int ct; struct blk *p; { /* returns pointer to struct with ct 0's & p */ register struct blk *q,*t; q = salloc(length(p)+(ct+1)/2); while(ct>1){ sputc(q,0); ct -= 2; } rewind(p); while(sfeof(p) == 0){ sputc(q,sgetc(p)); } release(p); if(ct == 1){ t = mult(tenptr,q); release(q); return(t); } return(q); } struct blk * mult(p,q) struct blk *p,*q; { register struct blk *mp,*mq,*mr; int sign,offset,carry; int cq,cp,mt,mcr; offset = sign = 0; fsfile(p); mp = p; if(sfbeg(p) == 0){ if(sbackc(p)<0){ mp = copy(p,length(p)); chsign(mp); sign = ~sign; } } fsfile(q); mq = q; if(sfbeg(q) == 0){ if(sbackc(q)<0){ mq = copy(q,length(q)); chsign(mq); sign = ~sign; } } mr = salloc(length(mp)+length(mq)); zero(mr); rewind(mq); while(sfeof(mq) == 0){ cq = sgetc(mq); rewind(mp); rewind(mr); mr->rd += offset; carry=0; while(sfeof(mp) == 0){ cp = sgetc(mp); mcr = sfeof(mr)?0:slookc(mr); mt = cp*cq + carry + mcr; carry = mt/100; salterc(mr,mt%100); } offset++; if(carry != 0){ mcr = sfeof(mr)?0:slookc(mr); salterc(mr,mcr+carry); } } if(sign < 0){ chsign(mr); } if(mp != p)release(mp); if(mq != q)release(mq); return(mr); } chsign(p) struct blk *p; { register int carry; register char ct; carry=0; rewind(p); while(sfeof(p) == 0){ ct=100-slookc(p)-carry; carry=1; if(ct>=100){ ct -= 100; carry=0; } salterc(p,ct); } if(carry != 0){ sputc(p,-1); fsfile(p); sbackc(p); ct = sbackc(p); if(ct == 99){ truncate(p); sputc(p,-1); } } else{ fsfile(p); ct = sbackc(p); if(ct == 0)truncate(p); } return; } readc(){ loop: if((readptr != &readstk[0]) && (*readptr != 0)){ if(sfeof(*readptr) == 0)return(lastchar = sgetc(*readptr)); release(*readptr); readptr--; goto loop; } lastchar = getc(curfile); if(lastchar != EOF)return(lastchar); if(readptr != &readptr[0]){ readptr--; if(*readptr == 0)curfile = stdin; goto loop; } if(curfile != stdin){ fclose(curfile); curfile = stdin; goto loop; } exit(0); } unreadc(c) char c; { if((readptr != &readstk[0]) && (*readptr != 0)){ sungetc(*readptr,c); } else ungetc(c,curfile); return; } binop(c) char c; { register struct blk *r; switch(c){ case '+': r = add(arg1,arg2); break; case '*': r = mult(arg1,arg2); break; case '/': r = div(arg1,arg2); break; } release(arg1); release(arg2); sputc(r,savk); pushp(r); return; } print(hptr) struct blk *hptr; { int sc; register struct blk *p,*q,*dec; int dig,dout,ct; rewind(hptr); while(sfeof(hptr) == 0){ if(sgetc(hptr)>99){ rewind(hptr); while(sfeof(hptr) == 0){ printf("%c",sgetc(hptr)); } printf("\n"); return; } } fsfile(hptr); sc = sbackc(hptr); if(sfbeg(hptr) != 0){ printf("0\n"); return; } count = ll; p = copy(hptr,length(hptr)); sunputc(p); fsfile(p); if(sbackc(p)<0){ chsign(p); OUTC('-'); } if((obase == 0) || (obase == -1)){ oneot(p,sc,'d'); return; } if(obase == 1){ oneot(p,sc,'1'); return; } if(obase == 10){ tenot(p,sc); return; } create(strptr); dig = log10*sc; dout = ((dig/10) + dig) /logo; dec = getdec(p,sc); p = removc(p,sc); while(length(p) != 0){ q = div(p,basptr); release(p); p = q; (*outdit)(rem,0); } release(p); fsfile(strptr); while(sfbeg(strptr) == 0)OUTC(sbackc(strptr)); if(sc == 0){ release(dec); printf("\n"); return; } create(strptr); OUTC('.'); ct=0; do{ q = mult(basptr,dec); release(dec); dec = getdec(q,sc); p = removc(q,sc); (*outdit)(p,1); }while(++ct < dout); release(dec); rewind(strptr); while(sfeof(strptr) == 0)OUTC(sgetc(strptr)); printf("\n"); return; } struct blk * getdec(p,sc) struct blk *p; { int cc; register struct blk *q,*t,*s; rewind(p); if(length(p)*2 < sc){ q = copy(p,length(p)); return(q); } q = salloc(length(p)); while(sc >= 1){ sputc(q,sgetc(p)); sc -= 2; } if(sc != 0){ t = mult(q,tenptr); s = salloc(cc = length(q)); release(q); rewind(t); while(cc-- > 0)sputc(s,sgetc(t)); sputc(s,0); release(t); t = div(s,tenptr); release(s); release(rem); return(t); } return(q); } tenot(p,sc) struct blk *p; { register int c,f; fsfile(p); f=0; while((sfbeg(p) == 0) && ((p->rd-p->beg-1)*2 >= sc)){ c = sbackc(p); if((c<10) && (f == 1))printf("0%d",c); else printf("%d",c); f=1; TEST2; } if(sc == 0){ printf("\n"); release(p); return; } if((p->rd-p->beg)*2 > sc){ c = sbackc(p); printf("%d.",c/10); TEST2; OUTC(c%10 +'0'); sc--; } else { OUTC('.'); } if(sc > (p->rd-p->beg)*2){ while(sc>(p->rd-p->beg)*2){ OUTC('0'); sc--; } } while(sc > 1){ c = sbackc(p); if(c<10)printf("0%d",c); else printf("%d",c); sc -= 2; TEST2; } if(sc == 1){ OUTC(sbackc(p)/10 +'0'); } printf("\n"); release(p); return; } oneot(p,sc,ch) struct blk *p; char ch; { register struct blk *q; q = removc(p,sc); create(strptr); sputc(strptr,-1); while(length(q)>0){ p = add(strptr,q); release(q); q = p; OUTC(ch); } release(q); printf("\n"); return; } hexot(p,flg) struct blk *p; { register int c; rewind(p); if(sfeof(p) != 0){ sputc(strptr,'0'); release(p); return; } c = sgetc(p); release(p); if(c >= 16){ printf("hex digit > 16"); return; } sputc(strptr,c<10?c+'0':c-10+'A'); return; } bigot(p,flg) struct blk *p; { register struct blk *t,*q; register int l; int neg; if(flg == 1)t = salloc(0); else{ t = strptr; l = length(strptr)+fw-1; } neg=0; if(length(p) != 0){ fsfile(p); if(sbackc(p)<0){ neg=1; chsign(p); } while(length(p) != 0){ q = div(p,tenptr); release(p); p = q; rewind(rem); sputc(t,sfeof(rem)?'0':sgetc(rem)+'0'); release(rem); } } release(p); if(flg == 1){ l = fw1-length(t); if(neg != 0){ l--; sputc(strptr,'-'); } fsfile(t); while(l-- > 0)sputc(strptr,'0'); while(sfbeg(t) == 0)sputc(strptr,sbackc(t)); release(t); } else{ l -= length(strptr); while(l-- > 0)sputc(strptr,'0'); if(neg != 0){ sunputc(strptr); sputc(strptr,'-'); } } sputc(strptr,' '); return; } struct blk * add(a1,a2) struct blk *a1,*a2; { register struct blk *p; register int carry,n; int size; int c,n1,n2; size = length(a1)>length(a2)?length(a1):length(a2); p = salloc(size); rewind(a1); rewind(a2); carry=0; while(--size >= 0){ n1 = sfeof(a1)?0:sgetc(a1); n2 = sfeof(a2)?0:sgetc(a2); n = n1 + n2 + carry; if(n>=100){ carry=1; n -= 100; } else if(n<0){ carry = -1; n += 100; } else carry = 0; sputc(p,n); } if(carry != 0)sputc(p,carry); fsfile(p); if(sfbeg(p) == 0){ while(sfbeg(p) == 0 && (c = sbackc(p)) == 0); if(c != 0)salterc(p,c); truncate(p); } fsfile(p); if(sfbeg(p) == 0 && sbackc(p) == -1){ while((c = sbackc(p)) == 99){ if(c == EOF)break; } sgetc(p); salterc(p,-1); truncate(p); } return(p); } eqk(){ register struct blk *p,*q; register int skp; int skq; p = pop(); EMPTYS; q = pop(); EMPTYSR(p); skp = sunputc(p); skq = sunputc(q); if(skp == skq){ arg1=p; arg2=q; savk = skp; return(0); } else if(skp < skq){ savk = skq; p = add0(p,skq-skp); } else (({ savk = skp; q = add0(q,skp-skq); } arg1=p; arg2=q; return(0); } struct blk * removc(p,n) struct blk *p; { register struct blk *q,*r; rewind(p); while(n>1){ sgetc(p); n -= 2; } q = salloc(2); while(sfeof(p) == 0)sputc(q,sgetc(p)); if(n == 1){ r = div(q,tenptr); release(q); release(rem); q = r; } release(p); return(q); } struct blk * scalint(p) struct blk *p; { register int n; n = sunputc(p); p = removc(p,n); return(p); } struct blk * scale(p,n) struct blk *p; { register struct blk *q,*s,*t; t = add0(p,n); q = salloc(1); sputc(q,n); s = exp(inbas,q); release(q); q = div(t,s); release(t); release(s); release(rem); sputc(q,n); return(q); } subt(){ arg1=pop(); EMPTYS; savk = sunputc(arg1); chsign(arg1); sputc(arg1,savk); pushp(arg1); if(eqk() != 0)return(1); binop('+'); return(0); } command(){ int c; char line[100],*sl; register (*savint)(),pid,rpid; int retcode; switch(c = readc()){ case '<': return(cond(NL)); case '>': return(cond(NG)); case '=': return(cond(NE)); default: sl = line; *sl++ = c; while((c = readc()) != '\n')*sl++ = c; *sl = 0; if((pid = fork()) == 0){ execl("/bin/sh","sh","-c",line,0); exit(0100); } savint = signal(SIGINT, SIG_IGN); while((rpid = wait(&retcode)) != pid && rpid != -1); signal(SIGINT,savint); printf("!\n"); return(0); } } cond(c) char c; { register struct blk *p; register char cc; if(subt() != 0)return(1); p = pop(); sunputc(p); if(length(p) == 0){ release(p); if(c == '<' || c == '>' || c == NE){ readc(); return(0); } load(); return(1); } else { if(c == '='){ release(p); readc(); return(0); } } if(c == NE){ release(p); load(); return(1); } fsfile(p); cc = sbackc(p); release(p); if((cc<0 && (c == '<' || c == NG)) || (cc >0) && (c == '>' || c == NL)){ readc(); return(0); } load(); return(1); } load(){ register int c; register struct blk *p,*q; struct blk *t,*s; c = readc() & 0377; sptr = stable[c]; if(sptr != 0){ p = sptr->val; if(c >= ARRAYST){ q = salloc(length(p)); rewind(p); while(sfeof(p) == 0){ s = getwd(p); if(s == 0){putwd(q, (struct blk *)NULL);} else{ t = copy(s,length(s)); putwd(q,t); } } pushp(q); } else{ q = copy(p,length(p)); pushp(q); } } else{ q = salloc(1); sputc(q,0); pushp(q); } return; } log2(n) long n; { register int i; if(n == 0)return(0); i=31; if(n<0)return(i); while((n= n<<1) >0)i--; return(--i); } struct blk * salloc(size) int size; { register struct blk *hdr; register char *ptr; all++; nbytes += size; ptr = malloc((unsigned)size); if(ptr == 0){ garbage("salloc"); if((ptr = malloc((unsigned)size)) == 0) ospace("salloc"); } if((hdr = hfree) == 0)hdr = morehd(); hfree = (struct blk *)hdr->rd; hdr->rd = hdr->wt = hdr->beg = ptr; hdr->last = ptr+size; return(hdr); } struct blk * morehd(){ register struct blk *h,*kk; headmor++; nbytes += HEADSZ; hfree = h = (struct blk *)malloc(HEADSZ); if(hfree == 0){ garbage("morehd"); if((hfree = h = (struct blk *)malloc(HEADSZ)) == 0) ospace("headers"); } kk = h; while(hrd = (char *)++kk; (--h)->rd=0; return(hfree); } /* sunputc(hptr) struct blk *hptr; { hptr->wt--; hptr->rd = hptr->wt; return(*hptr->wt); } */ struct blk * copy(hptr,size) struct blk *hptr; int size; { register struct blk *hdr; register unsigned sz; register char *ptr; all++; nbytes += size; sz = length(hptr); ptr = nalloc(hptr->beg, (unsigned)size); if(ptr == 0){ garbage("copy"); if((ptr = nalloc(hptr->beg, (unsigned)size)) == NULL){ printf("copy size %d\n",size); ospace("copy"); } } if((hdr = hfree) == 0)hdr = morehd(); hfree = (struct blk *)hdr->rd; hdr->rd = hdr->beg = ptr; hdr->last = ptr+size; hdr->wt = ptr+sz; ptr = hdr->wt; while(ptrlast)*ptr++ = '\0'; return(hdr); } sdump(s1,hptr) char *s1; struct blk *hptr; { char *p; printf("%s %o rd %o wt %o beg %o last %o\n",s1,hptr,hptr->rd,hptr->wt,hptr->beg,hptr->last); p = hptr->beg; while(p < hptr->wt)printf("%d ",*p++); printf("\n"); } seekc(hptr,n) struct blk *hptr; { register char *nn,*p; nn = hptr->beg+n; if(nn > hptr->last){ nbytes += nn - hptr->last; free(hptr->beg); p = realloc(hptr->beg, (unsigned)n); if(p == 0){ hptr->beg = realloc(hptr->beg, (unsigned)(hptr->last-hptr->beg)); garbage("seekc"); if((p = realloc(hptr->beg, (unsigned)n)) == 0) ospace("seekc"); } hptr->beg = p; hptr->wt = hptr->last = hptr->rd = p+n; return; } hptr->rd = nn; if(nn>hptr->wt)hptr->wt = nn; return; } salterwd(hptr,n) struct wblk *hptr; struct blk *n; { if(hptr->rdw == hptr->lastw)more(hptr); *hptr->rdw++ = n; if(hptr->rdw > hptr->wtw)hptr->wtw = hptr->rdw; return; } more(hptr) struct blk *hptr; { register unsigned size; register char *p; if((size=(hptr->last-hptr->beg)*2) == 0)size=1; nbytes += size/2; free(hptr->beg); p = realloc(hptr->beg, (unsigned)size); if(p == 0){ hptr->beg = realloc(hptr->beg, (unsigned)(hptr->last-hptr->beg)); garbage("more"); if((p = realloc(hptr->beg,size)) == 0) ospace("more"); } hptr->rd = hptr->rd-hptr->beg+p; hptr->wt = hptr->wt-hptr->beg+p; hptr->beg = p; hptr->last = p+size; return; } ospace(s) char *s; { printf("out of space: %s\n",s); printf("all %ld rel %ld headmor %ld\n",all,rel,headmor); printf("nbytes %ld\n",nbytes); sdump("stk",*stkptr); abort(); } garbage(s) char *s; { int i; struct blk *p, *q; struct sym *tmps; int ct; /* printf("got to garbage %s\n",s); */ for(i=0;ival; if(((int)p->beg & 01) != 0){ printf("string %o\n",i); sdump("odd beg",p); } redef(p); tmps = tmps->next; } while(tmps != 0); continue; } else { do { p = tmps->val; rewind(p); ct = 0; while((q = getwd(p)) != NULL){ ct++; if(q != 0){ if(((int)q->beg & 01) != 0){ printf("array %o elt %d odd\n",i-ARRAYST,ct); printf("tmps %o p %o\n",tmps,p); sdump("elt",q); } redef(q); } } tmps = tmps->next; } while(tmps != 0); } } } } redef(p) struct blk *p; { register offset; register char *newp; if ((int)p->beg&01) { printf("odd ptr %o hdr %o\n",p->beg,p); ospace("redef-bad"); } free(p->beg); free(dummy); dummy = malloc(1); if(dummy == NULL)ospace("dummy"); newp = realloc(p->beg, (unsigned)(p->last-p->beg)); if(newp == NULL)ospace("redef"); offset = newp - p->beg; p->beg = newp; p->rd += offset; p->wt += offset; p->last += offset; } release(p) register struct blk *p; { rel++; nbytes -= p->last - p->beg; p->rd = (char *)hfree; hfree = p; free(p->beg); } struct blk * getwd(p) struct blk *p; { register struct wblk *wp; wp = (struct wblk *)p; if (wp->rdw == wp->wtw) return(NULL); return(*wp->rdw++); } putwd(p, c) struct blk *p, *c; { register struct wblk *wp; wp = (struct wblk *)p; if (wp->wtw == wp->lastw) more(p); *wp->wtw++ = c; } struct blk * lookwd(p) struct blk *p; { register struct wblk *wp; wp = (struct wblk *)p; if (wp->rdw == wp->wtw) return(NULL); return(*wp->rdw); } char * nalloc(p,nbytes) register char *p; unsigned nbytes; { char *malloc(); register char *q, *r; q = r = malloc(nbytes); if(q==0) return(0); while(nbytes--) *q++ = *p++; return(r); } ' kq޴"%(+.147i& #include #include #include #include #define C 3 #define RANGE 30 #define LEN 255 #define INF 16384 char *text[2][RANGE]; long lineno[2] = {1, 1}; /*no. of 1st stored line in each file*/ int ntext[2]; /*number of stored lines in each*/ long n0,n1; /*scan pointer in each*/ int bflag; int debug = 0; FILE *file[2]; /* return pointer to line n of file f*/ char *getl(f,n) long n; { register char *t; char *malloc(); register delta, nt; again: delta = n - lineno[f]; nt = ntext[f]; if(delta<0) progerr("1"); if(deltant) progerr("2"); if(nt>=RANGE) progerr("3"); if(feof(file[f])) return(NULL); t = text[f][nt]; if(t==0) { t = text[f][nt] = malloc(LEN+1); if(t==NULL) if(hardsynch()) goto again; else progerr("5"); } t = fgets(t,LEN,file[f]); if(t!=NULL) ntext[f]++; return(t); } /*remove thru line n of file f from storage*/ clrl(f,n) long n; { register i,j; j = n-lineno[f]+1; for(i=0;i+j=0&&b>=0) printf("---\n"); for(i=0;i<=b;i++) { s = getl(1,n1+i); if(s==NULL) break; printf("> %s",s); clrl(1,n1+i); } n1 += i-1; return(1); } change(a,b,c,d,s) long a,c; char *s; { range(a,b); printf("%s",s); range(c,d); printf("\n"); } range(a,b) long a; { if(b==INF) printf("%ld,$",a); else if(b==0) printf("%ld",a); else printf("%ld,%ld",a,a+b); } cmp(s,t) char *s,*t; { if(debug) printf("%s:%s\n",s,t); for(;;){ if(bflag&&isspace(*s)&&isspace(*t)) { while(isspace(*++s)) ; while(isspace(*++t)) ; } if(*s!=*t||*s==0) break; s++; t++; } return(*s-*t); } FILE *dopen(f1,f2) char *f1,*f2; { FILE *f; char b[100],*bptr,*eptr; struct stat statbuf; if(cmp(f1,"-")==0) if(cmp(f2,"-")==0) error("can't do - -",""); else return(stdin); if(stat(f1,&statbuf)==-1) error("can't access ",f1); if((statbuf.st_mode&S_IFMT)==S_IFDIR) { for(bptr=b;*bptr= *f1++;bptr++) ; *bptr++ = '/'; for(eptr=f2;*eptr;eptr++) if(*eptr=='/'&&eptr[1]!=0&&eptr[1]!='/') f2 = eptr+1; while(*bptr++= *f2++) ; f1 = b; } f = fopen(f1,"r"); if(f==NULL) error("can't open",f1); return(f); } progerr(s) char *s; { error("program error ",s); } error(s,t) char *s,*t; { fprintf(stderr,"diffh: %s%s\n",s,t); exit(1); } /*stub for resychronization beyond limits of text buf*/ hardsynch() { change(n0,INF,n1,INF,"c"); printf("---change record omitted\n"); error("can't resynchronize",""); return(0); } ' k(l0 i"  /* tv.c: draw vertical lines */ # include "t..c" drawvert(start,end, c, lwid) { char *exb=0, *ext=0; int tp=0, sl, ln, pos, epb, ept, vm; end++; vm='v'; /* note: nr 35 has value of 1m outside of linesize */ while (instead[end]) end++; for(ln=0; ln1) switch(interh(start,c)) { case THRU: ept += 1; break; case LEFT: ept += (ln==0 ? 1 : -1); break; case RIGHT: ept += (ln==1 ? 1 : -1); break; } else if (lwid==1) switch(interh(start,c)) { case THRU: ept += 1; break; case LEFT: case RIGHT: ept -= 1; break; } if (exb) fprintf(tabout, "\\v'%s'", exb); if (epb) fprintf(tabout, "\\v'%dp'", epb); fprintf(tabout, "\\s\\n(%d",LSIZE); if (linsize) fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE); fprintf(tabout, "\\h'-\\n(#~u'"); /* adjustment for T450 nroff boxes */ fprintf(tabout, "\\L'|\\n(#%cu-%s", linestop[start]+'a'-1, vm=='v'? "1v" : "\\n(35u"); if (ext) fprintf(tabout, "-(%s)",ext); if (exb) fprintf(tabout, "-(%s)", exb); pos = ept-epb; if (pos) fprintf(tabout, "%s%dp", pos>=0? "+" : "", pos); /* the string #d is either "nl" or ".d" depending on diversions; on GCOS not the same */ fprintf(tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s", linestop[start]+'a'-1,vm=='v' ? "1v" : "\\n(35u"); if (ext) fprintf(tabout, "+%s",ext); if (ept) fprintf(tabout, "%s%dp", (-ept)>0 ? "+" : "", (-ept)); fprintf(tabout, "'"); if (linsize) fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE); } } midbar(i,c) { int k; k = midbcol(i,c); if (k==0 && c>0) k = midbcol(i, c-1); return(k); } midbcol(i,c) { int ct; while ( (ct=ctype(i,c)) == 's') c--; if (ct=='-' || ct == '=') return(ct); if (ct=barent(table[i][c].col)) return(ct); return(0); } barent(s) char *s; { if (s==0) return (1); if (s[0]== '\\') s++; if (s[1]!= 0) return(0); switch(s[0]) { case '_': return('-'); case '=': return('='); } return(0); } ' kÐ i!  /* tu.c: draws horizontal lines */ # include "t..c" makeline(i,c,lintype) { int cr, type, shortl; type = thish(i,c); if (type==0) return; cr=c; shortl = (table[i][c].col[0]=='\\'); if (c>0 && !shortl && thish(i,c-1) == type)return; if (shortl==0) for(cr=c; cr < ncol && (ctype(i,cr)=='s'||type==thish(i,cr)); cr++); else for(cr=c+1; cr0 && vspand(prev(i),cl,1)) cl++; for(cr=cl; cr0 && vspand(prev(i),cr,1)) break; if (cl1) { switch(interv(i,cl)) { case TOP: exhl = ln==0 ? "1p" : "-1p"; break; case BOT: exhl = ln==1 ? "1p" : "-1p"; break; case THRU: exhl = "1p"; break; } if (exhl[0]) fprintf(tabout, "\\h'%s'", exhl); } else if (lcount==1) { switch(interv(i,cl)) { case TOP: case BOT: exhl = "-1p"; break; case THRU: exhl = "1p"; break; } if (exhl[0]) fprintf(tabout, "\\h'%s'", exhl); } if (lcount>1) { switch(interv(i,cr+1)) { case TOP: exhr = ln==0 ? "-1p" : "+1p"; break; case BOT: exhr = ln==1 ? "-1p" : "+1p"; break; case THRU: exhr = "-1p"; break; } } else if (lcount==1) { switch(interv(i,cr+1)) { case TOP: case BOT: exhr = "+1p"; break; case THRU: exhr = "-1p"; break; } } } else fprintf(tabout, "\\h'|\\n(%du'", cl+CLEFT); fprintf(tabout, "\\s\\n(%d",LSIZE); if (linsize) fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE); if (shortl) fprintf(tabout, "\\l'|\\n(%du'", cr+CRIGHT); else { lnch = "\\(ul"; if (pr1403) lnch = lintype==2 ? "=" : "\\(ru"; if (cr+1>=ncol) fprintf(tabout, "\\l'|\\n(TWu%s%s'", exhr,lnch); else fprintf(tabout, "\\l'(|\\n(%du+|\\n(%du)/2u%s%s'", cr+CRIGHT, cr+1+CLEFT, exhr, lnch); } if (linsize) fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE); fprintf(tabout, "\\s0"); } if (oldpos!=0) fprintf(tabout, "\\v'%dp'", -oldpos); if (!nodata) fprintf(tabout, "\\v'+.5m'"); } getstop() { int i,c,k,junk, stopp; stopp=1; for(i=0; i=0 && linestop[k]==0) linestop[k]= ++stopp; } if (boxflg || allflg || dboxflg) linestop[0]=1; } left(i,c, lwidp) int *lwidp; { int kind, li, lj; /* returns -1 if no line to left */ /* returns number of line where it starts */ /* stores into lwid the kind of line */ *lwidp=0; kind = lefdata(i,c); if (kind==0) return(-1); if (i+1=0 && lefdata(i,c)==kind) i=prev(li=i); if (prev(li)== -1) li=0; *lwidp=kind; for(lj= i+1; lj=nlin) i=nlin-1; if (ctype(i,c) == 's') { for(ck=c; ctype(i,ck)=='s'; ck--); if (thish(i,ck)==0) return(0); } i =stynum[i]; i = lefline[i][c]; if (i>0) return(i); if (dboxflg && c==0) return(2); if (allflg)return(1); if (boxflg && c==0) return(1); return(0); } next(i) { while (i+1 =0 && (fullbot[i] || instead[i])) ; return(i); } ' khwi   /* tt.c: subroutines for drawing horizontal lines */ # include "t..c" ctype(il, ic) { if (instead[il]) return(0); if (fullbot[il]) return(0); il = stynum[il]; return(style[il][ic]); } min(a,b) { return(arcol : pc->col); if (s==0 || (point(s) && *s==0)) return(1); if (vspen(s)) return(1); if (t=barent( s)) return(t); return(0); } ' k^i   /* ts.c: minor string processing subroutines */ match (s1, s2) char *s1, *s2; { while (*s1 == *s2) if (*s1++ == '\0') return(1); else s2++; return(0); } prefix(small, big) char *small, *big; { int c; while ((c= *small++) == *big++) if (c==0) return(1); return(c==0); } letter (ch) { if (ch >= 'a' && ch <= 'z') return(1); if (ch >= 'A' && ch <= 'Z') return(1); return(0); } numb(str) char *str; { /* convert to integer */ int k; for (k=0; *str >= '0' && *str <= '9'; str++) k = k*10 + *str - '0'; return(k); } digit(x) { return(x>= '0' && x<= '9'); } max(a,b) { return( a>b ? a : b); } tcopy (s,t) char *s, *t; { while (*s++ = *t++); } ' ki  /* tm.c: split numerical fields */ # include "t..c" maknew(str) char *str; { /* make two numerical fields */ int dpoint, c; char *p, *q, *ba; p = str; for (ba= 0; c = *str; str++) if (c == '\\' && *(str+1)== '&') ba=str; str=p; if (ba==0) { for (dpoint=0; *str; str++) { if (*str=='.' && !ineqn(str,p) && (str>p && digit(*(str-1)) || digit(*(str+1)))) dpoint=str; } if (dpoint==0) for(; str>p; str--) { if (digit( * (str-1) ) && !ineqn(str, p)) break; } if (!dpoint && p==str) /* not numerical, don't split */ return(0); if (dpoint) str=dpoint; } else str = ba; p =str; if (exstore ==0 || exstore >exlim) { exstore = chspace(); exlim= exstore+MAXCHS; } q = exstore; while (*exstore++ = *str++); *p = 0; return(q); } ineqn (s, p) char *s, *p; { /* true if s is in a eqn within p */ int ineq = 0, c; while (c = *p) { if (s == p) return(ineq); p++; if ((ineq == 0) && (c == delim1)) ineq = 1; else if ((ineq == 1) && (c == delim2)) ineq = 0; } return(0); } ' k(i  /* ti.c: classify line intersections */ # include "t..c" /* determine local environment for intersections */ interv(i,c) { int ku, kl; if (c>=ncol || c == 0) { if (dboxflg) { if (i==0) return(BOT); if (i>=nlin) return(TOP); return(THRU); } if (c>=ncol) return(0); } ku = i>0 ? lefdata(i-1,c) : 0; if (i+1 >= nlin) kl=0; else kl = lefdata(allh(i) ? i+1 : i, c); if (ku==2 && kl==2) return(THRU); if (ku ==2) return(TOP); if (kl==BOT) return(2); return(0); } interh(i,c) { int kl, kr; if (fullbot[i]== '=' || (dboxflg && (i==0 || i>= nlin-1))) { if (c==ncol) return(LEFT); if (c==0) return(RIGHT); return(THRU); } if (i>=nlin) return(0); kl = c>0 ? thish (i,c-1) : 0; if (kl<=1 && i>0 && allh(up1(i))) kl = c>0 ? thish(up1(i),c-1) : 0; kr = thish(i,c); if (kr<=1 && i>0 && allh(up1(i))) kr = c>0 ? thish(up1(i), c) : 0; if (kl== '=' && kr == '=') return(THRU); if (kl== '=') return(LEFT); if (kr== '=') return(RIGHT); return(0); } up1(i) { i--; while (instead[i] && i>0) i--; return(i); } ' k%Vpi  /* tg.c: process included text blocks */ # include "t..c" gettext(sp, ilin,icol, fn, sz) char *sp, *fn, *sz; { /* get a section of text */ char line[256]; int oname; char *vs; if (texname==0) error("Too many text block diversions"); if (textflg==0) { fprintf(tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */ textflg=1; } fprintf(tabout, ".eo\n"); fprintf(tabout, ".am %02d\n", icol+80); fprintf(tabout, ".br\n"); fprintf(tabout, ".di %c+\n", texname); rstofill(); if (fn && *fn) fprintf(tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn); fprintf(tabout, ".ft \\n(.f\n"); /* protect font */ vs = vsize[stynum[ilin]][icol]; if ((sz && *sz) || (vs && *vs)) { fprintf(tabout, ".nr %d \\n(.v\n", S2); if (vs==0 || *vs==0) vs= "\\n(.s+2"; if (sz && *sz) fprintf(tabout, ".ps %s\n",sz); fprintf(tabout, ".vs %s\n",vs); fprintf(tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S2,S2); } if (cll[icol][0]) fprintf(tabout, ".ll %sn\n", cll[icol]); else fprintf(tabout, ".ll \\n(%du*%du/%du\n",SL,ctspan(ilin,icol),ncol+1); fprintf(tabout,".if \\n(.l<\\n(%d .ll \\n(%du\n", icol+CRIGHT, icol+CRIGHT); if (ctype(ilin,icol)=='a') fprintf(tabout, ".ll -2n\n"); fprintf(tabout, ".in 0\n"); while (gets1(line)) { if (line[0]=='T' && line[1]=='}' && line[2]== tab) break; if (match("T}", line)) break; fprintf(tabout, "%s\n", line); } if (fn && *fn) fprintf(tabout, ".ft \\n(%d\n", S1); if (sz && *sz) fprintf(tabout, ".br\n.ps\n.vs\n"); fprintf(tabout, ".br\n"); fprintf(tabout, ".di\n"); fprintf(tabout, ".nr %c| \\n(dn\n", texname); fprintf(tabout, ".nr %c- \\n(dl\n", texname); fprintf(tabout, "..\n"); fprintf(tabout, ".ec \\\n"); /* copy remainder of line */ if (line[2]) tcopy (sp, line+3); else *sp=0; oname=texname; texname = texstr[++texct]; return(oname); } untext() { rstofill(); fprintf(tabout, ".nf\n"); fprintf(tabout, ".ll \\n(%du\n", SL); } ((' kRpci  /* tf.c: save and restore fill mode around table */ # include "t..c" savefill() { /* remembers various things: fill mode, vs, ps in mac 35 (SF) */ fprintf(tabout, ".de %d\n",SF); fprintf(tabout, ".ps \\n(.s\n"); fprintf(tabout, ".vs \\n(.vu\n"); fprintf(tabout, ".in \\n(.iu\n"); fprintf(tabout, ".if \\n(.u .fi\n"); fprintf(tabout, ".if \\n(.j .ad\n"); fprintf(tabout, ".if \\n(.j=0 .na\n"); fprintf(tabout, "..\n"); fprintf(tabout, ".nf\n"); /* set obx offset if useful */ fprintf(tabout, ".nr #~ 0\n"); fprintf(tabout, ".if n .nr #~ 0.6n\n"); } rstofill() { fprintf(tabout, ".%d\n",SF); } endoff() { int i; for(i=0; ip; s--) nbl++; if (linstart && nbl % 2) /* fold escaped nl if in table */ gets1(s+1); return(p); } # define BACKMAX 500 char backup[BACKMAX]; char *backp = backup; un1getc(c) { if (c=='\n') iline--; *backp++ = c; if (backp >= backup+BACKMAX) error("too much backup"); } get1char() { int c; if (backp>backup) c = *--backp; else c=getc(tabin); if (c== EOF) /* EOF */ { if (swapin() ==0) error("unexpected EOF"); c = getc(tabin); } if (c== '\n') iline++; return(c); } ' kvXLi  /* tc.c: find character not in table to delimit fields */ # include "t..c" choochar() { /* choose funny characters to delimit fields */ int had[128], ilin,icol, k; char *s; for(icol=0; icol<128; icol++) had[icol]=0; F1 = F2 = 0; for(ilin=0;ilin= 128 || s<0); } ' kꝇ>i  /* tb.c: check which entries exist, also storage allocation */ # include "t..c" checkuse() { int i,c, k; for(c=0; c=MAXVEC) error("Too many characters in table"); spvecs[spcount++]= pp = calloc(MAXCHS+200,1); if (pp== -1 || pp == 0) error("no space for characters"); return(pp); } # define MAXPC 50 char *thisvec; int tpcount = -1; char *tpvecs[MAXPC]; alocv(n) { int *tp, *q; if (tpcount<0 || thisvec+n > tpvecs[tpcount]+MAXCHS) { tpcount++; if (tpvecs[tpcount]==0) { tpvecs[tpcount] = calloc(MAXCHS,1); } thisvec = tpvecs[tpcount]; if (thisvec == -1) error("no space for vectors"); } tp=thisvec; thisvec+=n; for(q=tp; q=MAXLIN) error("Wierd. No data in table."); table[0]=table[useln]; for(useln=nlin-1; useln>=0 && (fullbot[useln] || instead[useln]); useln--); if (useln<0) error("Wierd. No real lines in table."); domore(leftover); while (gets1(cstore=cspace) && domore(cstore)) ; last =cstore; return; } domore(dataln) char *dataln; { int icol, ch; if (prefix(".TE", dataln)) return(0); if (dataln[0] == '.' && !isdigit(dataln[1])) { puts(dataln); return(1); } instead[0]=fullbot[0]=0; if (dataln[1]==0) switch(dataln[0]) { case '_': fullbot[0]= '-'; putline(useln,0); return(1); case '=': fullbot[0]= '='; putline(useln, 0); return(1); } for (icol = 0; icol 0 && s<128) fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n",s); continue; } if (point(s)) continue; fprintf(tabout, ".ne \\n(%c|u+\\n(.Vu\n",s); watchout=1; } if (linestop[nl]) fprintf(tabout, ".mk #%c\n", linestop[nl]+'a'-1); lf = prev(nl); if (instead[nl]) { puts(instead[nl]); return; } if (fullbot[nl]) { switch (ct=fullbot[nl]) { case '=': case '-': fullwide(nl,ct); } return; } for(c=0; c=0) if (vspen(table[lf][c].col)) vspf=1; } if (vspf) { fprintf(tabout, ".nr #^ \\n(\\*(#du\n"); fprintf(tabout, ".nr #- \\n(#^\n"); /* current line position relative to bottom */ } vspf=0; chfont=0; for(c=0; c=0 && vspen(table[lf][c].col)) fprintf(tabout, ".if (\\n(%c|+\\n(^%c-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(^%c-\\n(#--1v)\n",s,'a'+c,s,'a'+c); else fprintf(tabout, ".if (\\n(%c|+\\n(#^-1v)>\\n(#- .nr #- +(\\n(%c|+\\n(#^-\\n(#--1v)\n",s,s); } if (allflg && once>0 ) fullwide(i,'-'); once=1; runtabs(i, nl); if (allh(i) && !pr1403) { fprintf(tabout, ".nr %d \\n(.v\n", SVS); fprintf(tabout, ".vs \\n(.vu-\\n(.sp\n"); } if (chfont) fprintf(tabout, ".nr %2d \\n(.f\n", S1); fprintf(tabout, ".nr 35 1m\n"); fprintf(tabout, "\\&"); vct = 0; for(c=0; c=0) { tohcol(c); drawvert(lf, i, c, lwid); vct += 2; } if (rightl && c+1==ncol) continue; vforml=i; for(lf=prev(nl); lf>=0 && vspen(table[lf][c].col); lf=prev(lf)) vforml= lf; form= ctype(vforml,c); if (form != 's') { ct = c+CLEFT; if (form=='a') ct = c+CMID; if (form=='n' && table[nl][c].rcol && lused[c]==0) ct= c+CMID; fprintf(tabout, "\\h'|\\n(%du'", ct); } s= table[nl][c].col; fn = font[stynum[vforml]][c]; size = csize[stynum[vforml]][c]; if (*size==0)size=0; switch(ct=ctype(vforml, c)) { case 'n': case 'a': if (table[nl][c].rcol) { if (lused[c]) /*Zero field width*/ { ip = prev(nl); if (ip>=0) if (vspen(table[ip][c].col)) { if (exvspen==0) { fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c+'a'); if (cmidx) fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); vct++; fprintf(tabout, "'"); exvspen=1; } } fprintf(tabout, "%c%c",F1,F2); puttext(s,fn,size); fprintf(tabout, "%c",F1); } s= table[nl][c].rcol; form=1; break; } case 'c': form=3; break; case 'r': form=2; break; case 'l': form=1; break; case '-': case '=': if (real(table[nl][c].col)) fprintf(stderr,"%s: line %d: Data ignored on table line %d\n", ifile, iline-1, i+1); makeline(i,c,ct); continue; default: continue; } if (realsplit ? rused[c]: used[c]) /*Zero field width*/ { /* form: 1 left, 2 right, 3 center adjust */ if (ifline(s)) { makeline(i,c,ifline(s)); continue; } if (filler(s)) { printf("\\l'|\\n(%du\\&%s'", c+CRIGHT, s+2); continue; } ip = prev(nl); cmidx = ctop[stynum[nl]][c]==0; if (ip>=0) if (vspen(table[ip][c].col)) { if (exvspen==0) { fprintf(tabout, "\\v'-(\\n(\\*(#du-\\n(^%cu", c+'a'); if (cmidx) fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); vct++; fprintf(tabout, "'"); } } fprintf(tabout, "%c", F1); if (form!= 1) fprintf(tabout, "%c", F2); if (vspen(s)) vspf=1; else puttext(s, fn, size); if (form !=2) fprintf(tabout, "%c", F2); fprintf(tabout, "%c", F1); } if (ip>=0) if (vspen(table[ip][c].col)) { exvspen = (c+1 < ncol) && vspen(table[ip][c+1].col) && (topat[c] == topat[c+1]) && (cmidx == (ctop [stynum[nl]][c+1]==0)) && (left(i,c+1,&lwid)<0); if (exvspen==0) { fprintf(tabout, "\\v'(\\n(\\*(#du-\\n(^%cu", c+'a'); if (cmidx) fprintf(tabout, "-((\\n(#-u-\\n(^%cu)/2u)", c+'a'); vct++; fprintf(tabout, "'"); } } else exvspen=0; /* if lines need to be split for gcos here is the place for a backslash */ if (vct > 7 && c < ncol) { fprintf(tabout, "\n.sp-1\n\\&"); vct=0; } } fprintf(tabout, "\n"); if (allh(i) && !pr1403) fprintf(tabout, ".vs \\n(%du\n", SVS); if (watchout) funnies(i,nl); if (vspf) { for(c=0; c0) fprintf(tabout, "\\f\\n(%2d", S1); if (size!=0) putsize("0"); } } funnies( stl, lin) { /* write out funny diverted things */ int c, s, pl, lwid, dv, lf, ct; char *fn; fprintf(tabout, ".mk ##\n"); /* rmember current vertical position */ fprintf(tabout, ".nr %d \\n(##\n", S1); /* bottom position */ for(c=0; c=0 && !isalpha(ct=ctype(pl,c)); pl=prev(pl)) ; switch (ct) { case 'n': case 'c': fprintf(tabout, "(\\n(%du+\\n(%du-\\n(%c-u)/2u\n",c+CLEFT,c-1+ctspan(lin,c)+CRIGHT, s); break; case 'l': fprintf(tabout, "\\n(%du\n",c+CLEFT); break; case 'a': fprintf(tabout, "\\n(%du\n",c+CMID); break; case 'r': fprintf(tabout, "\\n(%du-\\n(%c-u\n", c+CRIGHT, s); break; } fprintf(tabout, ".in +\\n(%du\n", SIND); fn=font[stynum[stl]][c]; putfont(fn); pl = prev(stl); if (stl>0 && pl>=0 && vspen(table[pl][c].col)) { fprintf(tabout, ".sp |\\n(^%cu\n", 'a'+c); if (ctop[stynum[stl]][c]==0) { fprintf(tabout, ".nr %d \\n(#-u-\\n(^%c-\\n(%c|+1v\n",TMP, 'a'+c, s); fprintf(tabout, ".if \\n(%d>0 .sp \\n(%du/2u\n", TMP, TMP); } } fprintf(tabout, ".%c+\n",s); fprintf(tabout, ".in -\\n(%du\n", SIND); if (*fn>0) putfont("P"); fprintf(tabout, ".mk %d\n", S2); fprintf(tabout, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n", S2, S1, S1, S2); } fprintf(tabout, ".sp |\\n(%du\n", S1); for(c=dv=0; c=0) { if (dv++ == 0) fprintf(tabout, ".sp -1\n"); tohcol(c); dv++; drawvert(lf, stl, c, lwid); } } if (dv) fprintf(tabout,"\n"); } putfont(fn) char *fn; { if (fn && *fn) fprintf(tabout, fn[1] ? "\\f(%.2s" : "\\f%.2s", fn); } putsize(s) char *s; { if (s && *s) fprintf(tabout, "\\s%s",s); } ' k30 Y\_behki  /* t7.c: control to write table entries */ # include "t..c" # define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol) runout() { int i; if (boxflg || allflg || dboxflg) need(); if (ctrflg) { fprintf(tabout, ".nr #I \\n(.i\n"); fprintf(tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n"); } fprintf(tabout, ".fc %c %c\n", F1, F2); fprintf(tabout, ".nr #T 0-1\n"); deftail(); for(i=0; i=0 && vspen(table[lf][c].col); lf=prev(lf)) vforml=lf; if (fspan(vforml,c)) continue; switch(ct=ctype(vforml,c)) { case 'n': case 'a': if (table[ldata][c].rcol) if (lused[c]) /*Zero field width*/ fprintf(tabout, "\\n(%du ",c+CMID); case 'c': case 'l': case 'r': if (realsplit((? rused[c]: (used[c]+lused[c])) fprintf(tabout, "\\n(%du ",c+CRIGHT); continue; case 's': if (lspan(lform, c)) fprintf(tabout, "\\n(%du ", c+CRIGHT); continue; } } fprintf(tabout, "\n"); } ifline(s) char *s; { if (s[0] == '\\') s++; if (s[1] ) return(0); if (s[0] == '_') return('-'); if (s[0] == '=') return('='); return(0); } need() { int texlin, horlin, i; for(texlin=horlin=i=0; i=0 .nr #%c \\n(#T\n",linestop[i]+'a'-1); if (boxflg || allflg || dboxflg) /* bottom of table line */ if (fullbot[nlin-1]==0) { if (!pr1403) fprintf(tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n"); fprintf(tabout, ".if \\n(T. "); drawline(nlin,0,ncol, dboxflg ? '=' : '-',1,0); fprintf(tabout, "\n.if \\n(T. .vs\n"); /* T. is really an argument to a macro but because of eqn we don't dare pass it as an argument and reference by $1 */ } for(c=0; c=0) { fprintf(tabout, ".if \\n(#%c>=0 .sp -1\n",linestop[lf]+'a'-1); fprintf(tabout, ".if \\n(#%c>=0 ", linestop[lf]+'a'-1); tohcol(c); drawvert(lf, nlin-1, c, lwid); fprintf(tabout, "\\h'|\\n(TWu'\n"); } } if (boxflg || allflg || dboxflg) /* right hand line */ { fprintf(tabout, ".if \\n(#a>=0 .sp -1\n"); fprintf(tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'"); drawvert (0, nlin-1, ncol, dboxflg? 2 : 1); fprintf(tabout, "\n"); } fprintf(tabout, ".ls\n"); fprintf(tabout, "..\n"); fprintf(tabout, ".ec\n"); } ' k B/258;>ADGJMi  /* t6.c: compute tab stops */ # define tx(a) (a>0 && a<128) # include "t..c" maktab() { # define FN(i,c) font[stynum[i]][c] # define SZ(i,c) csize[stynum[i]][c] /* define the tab stops of the table */ int icol, ilin, tsep, k, ik, vforml, il, text; int doubled[MAXCOL], acase[MAXCOL]; char *s; for(icol=0; icol =0 && vspen(table[il][icol].col); il=prev(il)) vforml=il; if (fspan(vforml,icol)) continue; if (filler(table[ilin][icol].col)) continue; switch(ctype(vforml,icol)) { case 'a': acase[icol]=1; s = table[ilin][icol].col; if (s>0 && s<128 && text) { if (doubled[icol]==0) fprintf(tabout, ".nr %d 0\n.nr %d 0\n",S1,S2); doubled[icol]=1; fprintf(tabout, ".if \\n(%c->\\n(%d .nr %d \\n(%c-\n",s,S2,S2,s); } case 'n': if (table[ilin][icol].rcol!=0) { if (doubled[icol]==0 && text==0) fprintf(tabout, ".nr %d 0\n.nr %d 0\n", S1, S2); doubled[icol]=1; if (real(s=table[ilin][icol].col) && !vspen(s)) { if (tx(s) != text) continue; fprintf(tabout, ".nr %d ", TMP); wide(s, FN(vforml,icol), SZ(vforml,icol)); fprintf(tabout, "\n"); fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", S1, TMP, S1, TMP); } if (text==0 && real(s=table[ilin][icol].rcol) && !vspen(s) && !barent(s)) { fprintf(tabout, ".nr %d \\w%c%s%c\n",TMP, F1, s, F1); fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",S2,TMP,S2,TMP); } continue; } case 'r': case 'c': case 'l': if (real(s=table[ilin][icol].col) && !vspen(s)) { if (tx(s) != text) continue; fprintf(tabout, ".nr %d ", TMP); wide(s, FN(vforml,icol), SZ(vforml,icol)); fprintf(tabout, "\n"); fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n", icol+CRIGHT, TMP, icol+CRIGHT, TMP); } } } } if (acase[icol]) { fprintf(tabout, ".if \\n(%d>=\\n(%d .nr %d \\n(%du+2n\n",S2,icol+CRIGHT,icol+CRIGHT,S2); } if (doubled[icol]) { fprintf(tabout, ".nr %d \\n(%d\n", icol+CMID, S1); fprintf(tabout, ".nr %d \\n(%d+\\n(%d\n",TMP,icol+CMID,S2); fprintf(tabout, ".if \\n(%d>\\n(%d .nr %d \\n(%d\n",TMP,icol+CRIGHT,icol+CRIGHT,TMP); fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d +(\\n(%d-\\n(%d)/2\n",TMP,icol+CRIGHT,icol+CMID,icol+CRIGHT,TMP); } if (cll[icol][0]) { fprintf(tabout, ".nr %d %sn\n", TMP, cll[icol]); fprintf(tabout, ".if \\n(%d<\\n(%d .nr %d \\n(%d\n",icol+CRIGHT, TMP, icol+CRIGHT, TMP); } for(ilin=0; ilin=0; ik--) { fprintf(tabout, "-\\n(%d",CRIGHT+icol-ik); if (!expflg && ik>0) fprintf(tabout, "-%dn", sep[icol-ik]); } fprintf(tabout, "\n"); fprintf(tabout, ".if \\n(%d>0 .nr %d \\n(%d/%d\n", TMP, TMP, TMP, k); fprintf(tabout, ".if \\n(%d<0 .nr %d 0\n", TMP, TMP); for(ik=1; ik<=k; ik++) { if (doubled[icol-k+ik]) fprintf(tabout, ".nr %d +\\n(%d/2\n", icol-k+ik+CMID, TMP); fprintf(tabout, ".nr %d +\\n(%d\n", icol-k+ik+CRIGHT, TMP); } } } if (textflg) untext(); /* if even requested, make all columns widest width */ # define TMP1 S1 # define TMP2 S2 if (evenflg) { fprintf(tabout, ".nr %d 0\n", TMP); for(icol=0; icol\\n(%d .nr %d \\n(%d\n", icol+CRIGHT, TMP, TMP, icol+CRIGHT); } for(icol=0; icolADGJMi+CLEFT); if (doubled[icol]) { /* the next line is last-ditch effort to avoid zero field width */ /*fprintf(tabout, ".if \\n(%d=0 .nr %d 1\n",icol+CMID, icol+CMID);*/ fprintf(tabout, ".nr %d +\\n(%d\n", icol+CMID, icol+CLEFT); /* fprintf(tabout, ".if n .if \\n(%d%%24>0 .nr %d +12u\n",icol+CMID, icol+CMID); */ } tsep=sep[icol]; } if (rightl) fprintf(tabout, ".nr %d (\\n(%d+\\n(%d)/2\n",ncol+CRIGHT-1, ncol+CLEFT-1, ncol+CRIGHT-2); fprintf(tabout, ".nr TW \\n(%d\n", ncol+CRIGHT-1); if (boxflg || allflg || dboxflg) fprintf(tabout, ".nr TW +%d*\\n(%d\n", sep[ncol-1], TMP); fprintf(tabout, ".if t .if (\\n(TW+\\n(.o)>7.65i .tm Table at line %d file %s is too wide - \\n(TW units\n", iline-1, ifile); return; } wide(s, fn, size) char *s, *size, *fn; { if (point(s)) { fprintf(tabout, "\\w%c", F1); if (*fn>0) putfont(fn); if (*size) putsize(size); fprintf(tabout, "%s", s); if (*fn>0) putfont("P"); if (*size) putsize("0"); fprintf(tabout, "%c",F1); } else fprintf(tabout, "\\n(%c-", s); } filler(s) char *s; { return (point(s) && s[0]=='\\' && s[1] == 'R'); } ((' k09  #&),i  /* t5.c: read data for table */ # include "t..c" gettbl() { int icol, ch; cstore=cspace= chspace(); textflg=0; for (nlin=nslin=0; gets1(cstore); nlin++) { stynum[nlin]=nslin; if (prefix(".TE", cstore)) { leftover=0; break; } if (prefix(".TC", cstore) || prefix(".T&", cstore)) { readspec(); nslin++; } if (nlin>=MAXLIN) { leftover=cstore; break; } fullbot[nlin]=0; if (cstore[0] == '.' && !isdigit(cstore[1])) { instead[nlin] = cstore; while (*cstore++); continue; } else instead[nlin] = 0; if (nodata(nlin)) { if (ch = oneh(nlin)) fullbot[nlin]= ch; nlin++; nslin++; instead[nlin]=fullbot[nlin]=0; } table[nlin] = alocv((ncol+2)*sizeof(table[0][0])); if (cstore[1]==0) switch(cstore[0]) { case '_': fullbot[nlin]= '-'; continue; case '=': fullbot[nlin]= '='; continue; } stynum[nlin] = nslin; nslin = min(nslin+1, nclin-1); for (icol = 0; icol MAXCHS) cstore = cspace = chspace(); } last = cstore; permute(); if (textflg) untext(); return; } nodata(il) { int c; for (c=0; c=nlin)return(0); if (instead[ir]) return(0); if (ifform==0 && ctype(ir,ij)=='^') return(1); if (table[ir][ij].rcol!=0) return(0); if (fullbot[ir]) return(0); return(vspen(table[ir][ij].col)); } vspen(s) char *s; { if (s==0) return(0); if (!point(s)) return(0); return(match(s, SPAN)); } ' kh i  /* t4.c: read table specification */ # include "t..c" int oncol; getspec() { int icol, i; for(icol=0; icol0) {ncol++; rightl++;}; if(sawchar) nclin++; if (nclin>=MAXHEAD) error("too many lines in specification"); icol=0; if (ncol==0 || nclin==0) error("no specification"); if (c== '.') { while ((c=get1char()) && c != '\n') if (c != ' ' && c != '\t') error("dot not last character on format line"); /* fix up sep - default is 3 except at edge */ for(icol=0; icol=MAXCOL) error("too many columns in table"); sawchar=1; continue; case 'b': case 'i': c += 'A'-'a'; case 'B': case 'I': if (icol==0) continue; snp=font[nclin][icol-1]; snp[0]= (c=='I' ? '2' : '3'); snp[1]=0; continue; case 't': case 'T': if (icol>0) ctop[nclin][icol-1] = 1; continue; case 'd': case 'D': if (icol>0) ctop[nclin][icol-1] = -1; continue; case 'f': case 'F': if (icol==0) continue; snp=font[nclin][icol-1]; snp[0]=snp[1]=stopc=0; for(i=0; i<2; i++) { c = get1char(); if (i==0 && c=='(') { stopc=')'; c = get1char(); } if (c==0) break; if (c==stopc) {stopc=0; break;} if (stopc==0) if (c==' ' || c== tab ) break; if (c=='\n'){un1getc(c); break;} snp[i] = c; if (c>= '0' && c<= '9') break; } if (stopc) if (get1char()!=stopc) error("Nonterminated font name"); continue; case 'P': case 'p': if (icol<=0) continue; temp = snp = csize[nclin][icol-1]; while (c = get1char()) { if (c== ' ' || c== tab || c=='\n') break; if (c=='-' || c == '+') if (snp>temp) break; else *snp++=c; else if (digit(c)) *snp++ = c; else break; if (snp-temp>4) error("point size too large"); } *snp = 0; if (atoi(temp)>36) error("point size unreasonable"); un1getc (c); continue; case 'V': case 'v': if (icol<=0) continue; temp = snp = vsize[nclin][icol-1]; while (c = get1char()) { if (c== ' ' || c== tab || c=='\n') break; if (c=='-' || c == '+') if (snp>temp) break; else *snp++=c; else if (digit(c)) *snp++ = c; else break; if (snp-temp>4) error("vertical spacing value too large"); } *snp=0; un1getc(c); continue; case 'w': case 'W': snp = cll [icol-1]; /* Dale Smith didn't like this check - possible to have two text blocks of different widths now .... if (*snp) { fprintf(tabout, "Ignored second width specification"); continue; } /* end commented out code ... */ stopc=0; while (c = get1char()) { if (snp==cll[icol-1] && c=='(') { stopc = ')'; continue; } if ( !stopc && (c>'9' || c< '0')) break; if (stopc && c== stopc) break; *snp++ =c; } *snp=0; if (snp-cll[icol-1]>CLLEN) error ("column width too long"); if (!stopc) un1getc(c); continue; case 'e': case 'E': if (icol<1) continue; evenup[icol-1]=1; evenflg=1; continue; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': sn[0] = c; snp=sn+1; while (digit(*snp++ = c = get1char())) ; un1getc(c); sep[icol-1] = max(sep[icol-1], numb(sn)); co' km i((ntinue; case '|': lefline[nclin][icol]++; if (icol==0) left1flg=1; continue; } } error("EOF reading table specification"); } '! ki  /* t3.c: interpret commands affecting whole table */ # include "t..c" struct optstr {char *optnam; int *optadd;} options [] { "expand", &expflg, "EXPAND", &expflg, "center", &ctrflg, "CENTER", &ctrflg, "box", &boxflg, "BOX", &boxflg, "allbox", &allflg, "ALLBOX", &allflg, "doublebox", &dboxflg, "DOUBLEBOX", &dboxflg, "frame", &boxflg, "FRAME", &boxflg, "doubleframe", &dboxflg, "DOUBLEFRAME", &dboxflg, "tab", &tab, "TAB", &tab, "linesize", &linsize, "LINESIZE", &linsize, "delim", &delim1, "DELIM", &delim1, 0,0}; getcomm() { char line[200], *cp, nb[25], *t; struct optstr *lp; int c, ci, found; for(lp= options; lp->optnam; lp++) *(lp->optadd) = 0; texname = texstr[texct=0]; tab = '\t'; printf(".nr %d \\n(.s\n", LSIZE); gets1(line); /* see if this is a command line */ if (index(line,';') == NULL) { backrest(line); return; } for(cp=line; (c = *cp) != ';'; cp++) { if (!letter(c)) continue; found=0; for(lp= options; lp->optadd; lp++) { if (prefix(lp->optnam, cp)) { *(lp->optadd) = 1; cp += strlen(lp->optnam); if (letter(*cp)) error("Misspelled global option"); while (*cp==' ')cp++; t=nb; if ( *cp == '(') while ((ci= *++cp) != ')') *t++ = ci; else cp--; *t++ = 0; *t=0; if (lp->optadd == &tab) { if (nb[0]) *(lp->optadd) = nb[0]; } if (lp->optadd == &linsize) printf(".nr %d %s\n", LSIZE, nb); if (lp->optadd == &delim1) { delim1 = nb[0]; delim2 = nb[1]; } found=1; break; } } if (!found) error("Illegal option"); } cp++; backrest(cp); return; } backrest(cp) char *cp; { char *s; for(s=cp; *s; s++); un1getc('\n'); while (s>cp) un1getc(*--s); return; } '& k&i  /* t2.c: subroutine sequencing for one table */ # include "t..c" tableput() { saveline(); savefill(); ifdivert(); cleanfc(); getcomm(); getspec(); gettbl(); getstop(); checkuse(); choochar(); maktab(); runout(); release(); rstofill(); endoff(); restline(); } '( k}i  /* t1.c: main control and input switching */ # # include "t..c" #include # ifdef gcos /* required by GCOS because file is passed to "tbl" by troff preprocessor */ # define _f1 _f extern FILE *_f[]; # endif # ifdef unix # define MACROS "/usr/lib/tmac.s" # define PYMACS "/usr/lib/tmac.m" # endif # ifdef gcos # define MACROS "cc/troff/smac" # define PYMACS "cc/troff/mmac" # endif # define ever (;;) main(argc,argv) char *argv[]; { # ifdef unix int badsig(); signal(SIGPIPE, badsig); # endif # ifdef gcos if(!intss()) tabout = fopen("qq", "w"); /* default media code is type 5 */ # endif exit(tbl(argc,argv)); } tbl(argc,argv) char *argv[]; { char line[512]; /* required by GCOS because "stdout" is set by troff preprocessor */ tabin=stdin; tabout=stdout; setinp(argc,argv); while (gets1(line)) { fprintf(tabout, "%s\n",line); if (prefix(".TS", line)) tableput(); } fclose(tabin); return(0); } int sargc; char **sargv; setinp(argc,argv) char **argv; { sargc = argc; sargv = argv; sargc--; sargv++; if (sargc>0) swapin(); } swapin() { while (sargc>0 && **sargv=='-') { if (match("-ms", *sargv)) { *sargv = MACROS; break; } if (match("-mm", *sargv)) { *sargv = PYMACS; break; } if (match("-TX", *sargv)) pr1403=1; sargc--; sargv++; } if (sargc<=0) return(0); # ifdef unix /* file closing is done by GCOS troff preprocessor */ if (tabin!=stdin) fclose(tabin); # endif tabin = fopen(ifile= *sargv, "r"); iline=1; # ifdef unix /* file names are all put into f. by the GCOS troff preprocessor */ fprintf(tabout, ".ds f. %s\n",ifile); # endif if (tabin==NULL) error("Can't open file"); sargc--; sargv++; return(1); } # ifdef unix badsig() { signal(SIGPIPE, 1); exit(0); } # endif '- kI4si  /* t0.c: storage allocation */ # # include "t..c" int expflg = 0; int ctrflg = 0; int boxflg = 0; int dboxflg = 0; int tab = '\t'; int linsize; int pr1403; int delim1, delim2; int evenup[MAXCOL], evenflg; int F1 = 0; int F2 = 0; int allflg = 0; int leftover = 0; int textflg = 0; int left1flg = 0; int rightl = 0; char *cstore, *cspace; char *last; struct colstr *table[MAXLIN]; int style[MAXHEAD][MAXCOL]; int ctop[MAXHEAD][MAXCOL]; char font[MAXHEAD][MAXCOL][2]; char csize[MAXHEAD][MAXCOL][4]; char vsize[MAXHEAD][MAXCOL][4]; int lefline[MAXHEAD][MAXCOL]; char cll[MAXCOL][CLLEN]; /*char *rpt[MAXHEAD][MAXCOL];*/ /*char rpttx[MAXRPT];*/ int stynum[MAXLIN+1]; int nslin, nclin; int sep[MAXCOL]; int fullbot[MAXLIN]; char *instead[MAXLIN]; int used[MAXCOL], lused[MAXCOL], rused[MAXCOL]; int linestop[MAXLIN]; int nlin, ncol; int iline = 1; char *ifile = "Input"; int texname = 'a'; int texct = 0; char texstr[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ0123456789"; int linstart; char *exstore, *exlim; FILE *tabin /*= stdin */; FILE *tabout /* = stdout */; '1 kG$i /* t..c : external declarations */ # include "stdio.h" # include "ctype.h" # define MAXLIN 200 # define MAXHEAD 30 # define MAXCOL 20 # define MAXCHS 2000 # define MAXRPT 100 # define CLLEN 10 # define SHORTLINE 4 extern int nlin, ncol, iline, nclin, nslin; extern int style[MAXHEAD][MAXCOL]; extern int ctop[MAXHEAD][MAXCOL]; extern char font[MAXHEAD][MAXCOL][2]; extern char csize[MAXHEAD][MAXCOL][4]; extern char vsize[MAXHEAD][MAXCOL][4]; extern char cll[MAXCOL][CLLEN]; extern int stynum[]; extern int F1, F2; extern int lefline[MAXHEAD][MAXCOL]; extern int fullbot[]; extern char *instead[]; extern int expflg; extern int ctrflg; extern int evenflg; extern int evenup[]; extern int boxflg; extern int dboxflg; extern int linsize; extern int tab; extern int pr1403; extern int linsize, delim1, delim2; extern int allflg; extern int textflg; extern int left1flg; extern int rightl; struct colstr {char *col, *rcol;}; extern struct colstr *table[]; extern char *cspace, *cstore; extern char *exstore, *exlim; extern int(( sep[]; extern int used[], lused[], rused[]; extern int linestop[]; extern int leftover; extern char *last, *ifile; extern int texname; extern int texct, texmax; extern char texstr[]; extern int linstart; extern FILE *tabin, *tabout; # define CRIGHT 80 # define CLEFT 40 # define CMID 60 # define S1 31 # define S2 32 # define TMP 38 # define SF 35 # define SL 34 # define LSIZE 33 # define SIND 37 # define SVS 36 /* this refers to the relative position of lines */ # define LEFT 1 # define RIGHT 2 # define THRU 3 # define TOP 1 # define BOT 2 '6 kaoii CFLAGS=-O -n -s all: tbl : cp: tbl cp tbl /bin/tbl rm tbl *.o cmp: tbl cmp tbl /bin/tbl rm tbl *.o tbl: t0.o t1.o t2.o t3.o t4.o t5.o t6.o t7.o t8.o t9.o tb.o tc.o te.o tf.o tg.o ti.o tm.o ts.o tt.o tu.o tv.o cc -i -s -O t?.o -o tbl t0.o t1.o t2.o t3.o t4.o t5.o t6.o t7.o t8.o t9.o tb.o tc.o te.o tf.o tg.o ti.o tm.o ts.o tt.o tu.o tv.o: t..c '8 kʢ3orux{~i& # /* diff - differential file comparison * * Uses an algorithm due to Harold Stone, which finds * a pair of longest identical subsequences in the two * files. * * The major goal is to generate the match vector J. * J[i] is the index of the line in file1 corresponding * to line i file0. J[i] = 0 if there is no * such line in file1. * * Lines are hashed so as to work in core. All potential * matches are located by sorting the lines of each file * on the hash (called value_____). In particular, this * collects the equivalence classes in file1 together. * Subroutine equiv____ replaces the value of each line in * file0 by the index of the first element of its * matching equivalence in (the reordered) file1. * To save space equiv_____ squeezes file1 into a single * array member______ in which the equivalence classes * are simply concatenated, except that their first * members are flagged by changing sign. * * Next the indices that point into member______ are unsorted_______ into * array class_____ according to the original order of file0. * * The cleverness lies in routine stone______. This marches * through the lines of file0, developing a vector klist_____ * of "k-candidates". At step i a k-candidate is a matched * pair of lines x,y (x in file0 y in file1) such that * there is a common subsequence of lenght k * between the first i lines of file0 and the first y * lines of file1, but there is no such subsequence for * any smaller y. x is the earliest possible mate to y * that occurs in such a subsequence. * * Whenever any of the members of the equivalence class of * lines in file1 matable to a line in file0 has serial number * less than the y of some k-candidate, that k-candidate * with the smallest such y is replaced. The new * k-candidate is chained (via pred____) to the current * k-1 candidate so that the actual subsequence can * be recovered. When a member has serial number greater * that the y of all k-candidates, the klist is extended. * At the end, the longest subsequence is pulled out * and placed in the array J by unravel_______. * * With J in hand, the matches there recorded are * check_____ed against reality to assure that no spurious * matches have crept in due to hashing. If they have, * they are broken, and "jackpot " is recorded--a harmless * matter except that a true match for a spuriously * mated line may now be unnecessarily reported as a change. * * Much of the complexity of the program comes simply * from trying to minimize core utilization and * maximize the range of doable problems by dynamically * allocating what is needed and reusing what is not. * The core requirements for problems larger than somewhat * are (in words) 2*length(file0) + length(file1) + * 3*(number of k-candidates installed), typically about * 6n words for files of length n. */ #include #include #include #include #include #define prints(s) fputs(s,stdout) #define HALFLONG 16 #define low(x) (x&((1L<>HALFLONG) FILE *input[2]; FILE *fopen(); struct cand { int x; int y; int pred; } cand; struct line { int serial; int value; } *file[2], line; int len[2]; struct line *sfile[2]; /*shortened by pruning common prefix and suffix*/ int slen[2]; int pref, suff; /*length of prefix and suffix*/ int *class; /*will be overlaid on file[0]*/ int *member; /*will be overlaid on file[1]*/ int *klist; /*will be overlaid on file[0] after class*/ struct cand *clist; /* merely a free storage pot for candidates */ int clen = 0; int *J; /*will be overlaid on class*/ long *ixold; /*will be overlaid on klist*/ long *ixnew; /*will be overlaid on file[1]*/ int opt; /* -1,0,1 = -e,normal,-f */ int status = 2; int anychange = 0; char *empty = ""; int bflag; char *tempfile; /*used when comparing against std input*/ char *mktemp(); char *dummy; /*used in resetting storage search ptr*/ done() { unlink(tempfile); exit(status); } char *talloc(n) { extern char *malloc(); register char *p; p = malloc((unsigned)n); if(p!=NULL) return(p); noroom(); } char *ralloc(p,n) /*compacting reallocation */ char *p; { register char *q; char *realloc(); free(p); free(dummy); dummy = malloc(1); q = realloc(p, (unsigned)n); if(q==NULL) noroom(); return(q); } noroom() { mesg("files too big, try -h\n",empty); done(); } sort(a,n) /*shellsort CACM #201*/ struct line *a; { struct line w; register int j,m; struct line *ai; register struct line *aim; int k; for(j=1;j<=n;j*= 2) m = 2*j - 1; for(m/=2;m!=0;m/=2) { k = n-m; for(j=1;j<=k;j++) { for(ai = &a[j]; ai > a; ai -= m) { aim = &ai[m]; if(aim < ai) break; /*wraparound*/ if(aim->value > ai[0].value || aim->value == ai[0].value && aim->serial > ai[0].serial) break; w.value = ai[0].value; ai[0].value = aim->value; aim->value = w.value; w.serial = ai[0].serial; ai[0].serial = aim->serial; aim->serial = w.serial; } } } } unsort(f, l, b) struct line *f; int *b; { register i'C kD3orux{~i&nt *a; register int i; a = (int *)talloc((l+1)*sizeof(int)); for(i=1;i<=l;i++) a[f[i].serial] = f[i].value; for(i=1;i<=l;i++) b[i] = a[i]; free((char *)a); } filename(pa1, pa2) char **pa1, **pa2; { register char *a1, *b1, *a2; char buf[512]; struct stat stbuf; int i, f; a1 = *pa1; a2 = *pa2; if(stat(a1,&stbuf)!=-1 && ((stbuf.st_mode&S_IFMT)==S_IFDIR)) { b1 = *pa1 = malloc(100); while(*b1++ = *a1++) ; b1[-1] = '/'; a1 = b1; while(*a1++ = *a2++) if(*a2 && *a2!='/' && a2[-1]=='/') a1 = b1; } else if(a1[0]=='-'&&a1[1]==0&&tempfile==0) { signal(SIGHUP,done); signal(SIGINT,done); signal(SIGPIPE,done); signal(SIGTERM,done); *pa1 = tempfile = mktemp("/tmp/dXXXXX"); if((f=creat(tempfile,0600)) < 0) { mesg("cannot create ",tempfile); done(); } while((i=read(0,buf,512))>0) write(f,buf,i); close(f); } } prepare(i, arg) char *arg; { register struct line *p; register j,h; if((input[i] = fopen(arg,"r")) == NULL){ mesg("cannot open ", arg); done(); } p = (struct line *)talloc(3*sizeof(line)); for(j=0; h=readhash(input[i]);) { p = (struct line *)ralloc((char *)p,(++j+3)*sizeof(line)); p[j].value = h; } len[i] = j; file[i] = p; fclose(input[i]); } prune() { register i,j; for(pref=0;pref3 && *argv[1]=='-') { argc--; argv++; for(k=1;argv[0][k];k++) { switch(argv[0][k]) { case 'e': opt = -1; break; case 'f': opt = 1; break; case 'b': bflag = 1; break; case 'h': execv("/usr/lib/diffh",args); mesg("cannot find diffh",empty); done(); } } } if(argc!=3) { mesg("arg count",empty); done(); } dummy = malloc(1); filename(&argv[1], &argv[2]); filename(&argv[2], &argv[1]); prepare(0, argv[1]); prepare(1, argv[2]); prune(); sort(sfile[0],slen[0]); sort(sfile[1],slen[1]); member = (int *)file[1]; equiv(sfile[0], slen[0], sfile[1], slen[1], member); member = (int *)ralloc((char *)member,(slen[1]+2)*sizeof(int)); class = (int *)file[0]; unsort(sfile[0], slen[0], class); class = (int *)ralloc((char *)class,(slen[0]+2)*sizeof(int)); klist = (int *)talloc((slen[0]+2)*sizeof(int)); clist = (struct cand *)talloc(sizeof(cand)); k = stone(class, slen[0], member, klist); free((char *)member); free((char *)class); J = (int *)talloc((len[0]+2)*sizeof(int)); unravel(klist[k]); free((char *)clist); free((char *)klist); ixold = (long *)talloc((len[0]+2)*sizeof(long)); ixnew = (long *)talloc((len[1]+2)*sizeof(long)); check(argv); output(argv); status = anychange; done(); } stone(a,n,b,c) int *a; int *b; int *c; { register int i, k,y; int j, l; int oldc, tc; int oldl; k = 0; c[0] = newcand(0,0,0); for(i=1; i<=n; i++) { j = a[i]; if(j==0) continue; y = -b[j]; oldl = 0; oldc = c[0]; do { if(y <= clist[oldc].y) continue; l = search(c, k, y); if(l!=oldl+1) oldc = c[l-1]; if(l<=k) { if(clist[c[l]].y <= y) continue; tc = c[l]; c[l] = newcand(i,y,oldc); oldc = tc; oldl = l; } else { c[l] = newcand(i,y,oldc); k++; break; } } while((y=b[++j]) > 0); } return(k); } newcand(x,y,pred) { register struct cand *q; clist = (struct cand *)ralloc((char *)clist,++clen*sizeof(cand)); q = clist + clen -1; q->x = x; q->y = y; q->pred = pred; return(clen-1); } search(c, k, y) int *c; { register int i, j, l; int t; if(clist[c[k]].y i) { t = clist[c[l]].y; if(t > y) j = l; else if(t < y) i = l; else return(l); } return(l+1); } unravel(p) { register int i; register struct cand *q; for(i=0; i<=len[0]; i++) J[i] = i<=pref ? i: i>len[0]-suff ? i+len[1]-len[0]: 0; for(q=clist+p;q->y!=0;q=clist+q->pred) J[q->x+pref] = q->y+pref; } /* check does double duty: 1. ferret out any fortuitous correspondences due to confounding by hashing (which result in "jackpot") 2. collect random access indexes to the two files */ check(argv) char **argv; { register int i, j; int jackpot; long ctold, ctnew; char c,d; input[0] = fopen(argv[1],"r"); input[1] = fopen(argv[2],"r"); j = 1; ixold[0] = ixnew[0] = 0; jackpot = 0; ctold = ctnew = 0; for(i=1;i<=len[0];i++) { if(J[i]==0) { ixold[i] = ctold += skipline(0); continue; } while(j=1;i0=i1-1) { while(i0>=1&&J[i0]==J[i0+1]-1&&J[i0]!=0) i0--; j0 = J[i0+1]-1; i1 = i0+1; while(i1>1&&J[i1-1]==0) i1--; j1 = J[i1-1]+1; J[i1] = j1; change(i1,i0,j1,j0); } if(m==0) change(1,0,1,len[1]); } change(a,b,c,d) { if(a>b&&c>d) return; anychange = 1; if(opt!=1) { range(a,b,","); putchar(a>b?'a':c>d?'d':'c'); if(opt!=-1) range(c,d,","); } else { putchar(a>b?'a':c>d?'d':'c'); range(a,b," "); } putchar('\n'); if(opt==0) { fetch(ixold,a,b,input[0],"< "); if(a<=b&&c<=d) prints("---\n"); } fetch(ixnew,c,d,input[1],opt==0?"> ":empty); if(opt!=0&&c<=d) prints(".\n"); } range(a,b,separator) char *separator; { printf("%d", a>b?b:a); if(a #define ESIZE 256 #define error(c) errxx(c) #define EQL(x,y) !strcmp(x,y) long atol(); char **Av; int Ac; int Argi; char Mstring[1][128]; char *malloc(); extern int nbra; main(argc, argv) char **argv; { Ac = argc; Argi = 1; Av = argv; yyparse(); } char *operators[] = { "|", "&", "+", "-", "*", "/", "%", ":", "=", "==", "<", "<=", ">", ">=", "!=", "match", "substr", "length", "index", "\0" }; int op[] = { OR, AND, ADD, SUBT, MULT, DIV, REM, MCH, EQ, EQ, LT, LEQ, GT, GEQ, NEQ, MATCH, SUBSTR, LENGTH, INDEX }; yylex() { register char *p; register i; if(Argi >= Ac) return NOARG; p = Av[Argi++]; if(*p == '(' || *p == ')') return (int)*p; for(i = 0; *operator[i]; ++i) if(EQL(operator[i], p)) return op[i]; yylval = p; return A_STRING; } char *rel(op, r1, r2) register char *r1, *r2; { register i; if(ematch(r1, "-*[0-9]*$") && ematch(r2, "[0-9]*$")) i = atol(r1) - atol(r2); else i = strcmp(r1, r2); switch(op) { case EQ: i = i==0; break; case GT: i = i>0; break; case GEQ: i = i>=0; break; case LT: i = i<0; break; case LEQ: i = i>=0; break; case NEQ: i = i!=0; break; } return i? "1": "0"; } char *arith(op, r1, r2) char *r1, *r2; { long i1, i2; register char *rv; if(!(ematch(r1, "[0-9]*$") && ematch(r2, "[0-9]*$"))) yyerror("non-numeric argument"); i1 = atol(r1); i2 = atol(r2); switch(op) { case ADD: i1 = i1 + i2; break; case SUBT: i1 = i1 - i2; break; case MULT: i1 = i1 * i2; break; case DIV: i1 = i1 / i2; break; case REM: i1 = i1 % i2; break; } rv = malloc(16); sprintf(rv, "%D", i1); return rv; } char *conj(op, r1, r2) char *r1, *r2; { register char *rv; switch(op) { case OR: if(EQL(r1, "0") || EQL(r1, "")) if(EQL(r2, "0") || EQL(r2, "")) rv = "0"; else rv = r2; else rv = r1; break; case AND: if(EQL(r1, "0") || EQL(r1, "")) rv = "0"; else if(EQL(r2, "0") || EQL(r2, "")) rv = "0"; else rv = r1; break; } return rv; } char *substr(v, s, w) char *v, *s, *w; { register si, wi; register char *res; si = atol(s); wi = atol(w); while(--si) if(*v) ++v; res = v; wh((ile(wi--) if(*v) ++v; *v = '\0'; return res; } char *length(s) register char *s; { register i = 0; register char *rv; while(*s++) ++i; rv = malloc(8); sprintf(rv, "%d", i); return rv; } char *index(s, t) char *s, *t; { register i, j; register char *rv; for(i = 0; s[i] ; ++i) for(j = 0; t[j] ; ++j) if(s[i]==t[j]) { sprintf(rv = malloc(8), "%d", ++i); return rv; } return "0"; } char *match(s, p) { register char *rv; sprintf(rv = malloc(8), "%d", ematch(s, p)); if(nbra) { rv = malloc(strlen(Mstring[0])+1); strcpy(rv, Mstring[0]); } return rv; } #define INIT register char *sp = instring; #define GETC() (*sp++) #define PEEKC() (*sp) #define UNGETC(c) (--sp) #define RETURN(c) return #define ERROR(c) errxx(c) ematch(s, p) char *s; register char *p; { static char expbuf[ESIZE]; char *compile(); register num; extern char *braslist[], *braelist[], *loc2; compile(p, expbuf, &expbuf[512], 0); if(nbra > 1) yyerror("Too many '\\('s"); if(advance(s, expbuf)) { if(nbra == 1) { p = braslist[0]; num = braelist[0] - p; strncpy(Mstring[0], p, num); Mstring[0][num] = '\0'; } return(loc2-s); } return(0); } errxx(c) { yyerror("RE error"); } #define CBRA 2 #define CCHR 4 #define CDOT 8 #define CCL 12 #define CDOL 20 #define CEOF 22 #define CKET 24 #define CBACK 36 #define STAR 01 #define RNGE 03 #define NBRA 9 #define PLACE(c) ep[c >> 3] |= bittab[c & 07] #define ISTHERE(c) (ep[c >> 3] & bittab[c & 07]) char *braslist[NBRA]; char *braelist[NBRA]; in'_ kGf**-0369<?BEHi't nbra; char *loc1, *loc2, *locs; int sed; int circf; int low; int size; char bittab[] = { 1, 2, 4, 8, 16, 32, 64, 128 }; char * compile(instring, ep, endbuf, seof) register char *ep; char *instring, *endbuf; { INIT /* Dependent declarations and initializations */ register c; register eof = seof; char *lastep = instring; int cclcnt; char bracket[NBRA], *bracketp; int closed; char neg; int lc; int i, cflg; lastep = 0; if((c = GETC()) == eof) { if(*ep == 0 && !sed) ERROR(41); RETURN(ep); } bracketp = bracket; circf = closed = nbra = 0; if (c == '^') circf++; else UNGETC(c); for (;;) { if (ep >= endbuf) ERROR(50); if((c = GETC()) != '*' && ((c != '\\') || (PEEKC() != '{'))) lastep = ep; if (c == eof) { *ep++ = CEOF; RETURN(ep); } switch (c) { case '.': *ep++ = CDOT; continue; case '\n': ERROR(36); case '*': if (lastep==0 || *lastep==CBRA || *lastep==CKET) goto defchar; *lastep |= STAR; continue; case '$': if(PEEKC() != eof) goto defchar; *ep++ = CDOL; continue; case '[': if(&ep[17] >= endbuf) ERROR(50); *ep++ = CCL; lc = 0; for(i = 0; i < 16; i++) ep[i] = 0; neg = 0; if((c = GETC()) == '^') { neg = 1; c = GETC(); } do { if(c == '\0' || c == '\n') ERROR(49); if(c == '-' && lc != 0) { if ((c = GETC()) == ']') { PLACE('-'); break; } while(lc < c) { PLACE(lc); lc++; } } lc = c; PLACE(c); } while((c = GETC()) != ']'); if(neg) { for(cclcnt = 0; cclcnt < 16; cclcnt++) ep[cclcnt] ^= -1; ep[0] &= 0376; } ep += 16; continue; case '\\': switch(c = GETC()) { case '(': if(nbra >= NBRA) ERROR(43); *bracketp++ = nbra; *ep++ = CBRA; *ep++ = nbra++; continue; case ')': if(bracketp <= bracket) ERROR(42); *ep++ = CKET; *ep++ = *--bracketp; closed++; continue; case '{': if(lastep == (char *) (0)) goto defchar; *lastep |= RNGE; cflg = 0; nlim: c = GETC(); i = 0; do { if ('0' <= c && c <= '9') i = 10 * i + c - '0'; else ERROR(16); } while(((c = GETC()) != '\\') && (c != ',')); if (i > 255) ERROR(11); *ep++ = i; if (c == ',') { if(cflg++) ERROR(44); if((c = GETC()) == '\\') *ep++ = 255; else { UNGETC(c); goto nlim; /* get 2'nd number */ } } if(GETC() != '}') ERROR(45); if(!cflg) /* one number */ *ep++ = i; else if((ep[-1] & 0377) < (ep[-2] & 0377)) ERROR(46); continue; case '\n': ERROR(36); case 'n': c = '\n'; goto defchar; default: if(c >= '1' && c <= '9') { if((c -= '1') >= closed) ERROR(25); *ep++ = CBACK; *ep++ = c; continue; } } /* Drop through to default to use \ to turn off special chars */ defchar: default: lastep = ep; *ep++ = CCHR; *ep++ = c; } } } step(p1, p2) register char *p1, *p2; { register c; if (circf) { loc1 = p1; return(advance(p1, p2)); } /* fast check for first character */ if (*p2==CCHR) { c = p2[1]; do { if (*p1 != c) continue; if (advance(p1, p2)) { loc1 = p1; return(1); } } while (*p1++); return(0); } /* regular algorithm */ do { if (advance(p1, p2)) { loc1 = p1; return(1); } } while (*p1++); return(0); } advance(lp, ep) register char *lp, *ep; { register char *curlp; char c; char *bbeg; int ct; for (;;) switch (*ep++) { case CCHR: if (*ep++ == *lp++) continue; return(0); case CDOT: if (*lp++) continue; return(0); case CDOL: if (*lp==0) continue; return(0); case CEOF: loc2 = lp; return(1); case CCL: c = *lp++ & 0177; if(ISTHERE(c)) { ep += 16; continue; } return(0); case CBRA: braslist[*ep++] = lp; continue; case CKET: braelist[*ep++] = lp; continue; case CCHR|RNGE: c = *ep++; getrnge(ep); while(low--) if(*lp++ != c) return(0); curlp = lp; while(size--) if(*lp++ != c) break; if(size < 0) lp++; ep += 2; goto star; case CDOT|RNGE: getrnge(ep); while(low--) if(*lp++ == '\0') return(0); curlp = lp; while(size--) if(*lp++ == '\0') break; if(size < 0) lp++; ep += 2; goto star; case CCL|RNGE: getrnge(ep + 16); while(low--) { c = *lp++ & 0177; if(!ISTHERE(c)) return(0); } curlp = lp; while(size--) { c = *lp++ & 0177; if(!ISTHERE(c)) break; } if(size < 0) lp++; ep += 18; /* 16 + 2 */ goto star; case CBACK: bbeg = braslist[*ep]; ct = braelist[*ep++] - bbeg; if(ecmp(bbeg, lp, ct)) { lp += ct; continue; } return(0); case CBACK|STAR: bbeg = braslist[*ep]; ct = braelist[*ep++] - bbeg; curlp = lp; while(ecmp(bbeg, lp, ct)) lp += ct; while(lp >= curlp) { if(advance(lp, ep)) return(1); lp -= ct; } return(0); case CDOT|STAR: curlp = lp; while (*lp++); goto star; case CCHR|STAR: curlp = lp; while (*lp++ == *ep); ep++; goto star; case CCL|STAR: curlp = lp; do { c = *lp++ & 0177; } while(ISTHERE(c)); ep += 16; goto star; star: do { if(--lp == locs) break; if (advance(lp, ep)) return(1); } while (lp > curlp); return(0); } } getrnge(str) register char *str; { low = *str++ & 0377; size = *str == 255 ? 20000 : (*str &0377) - low; } ecmp(a, b, count) register char *a, *b; register count; { if(a == b) /* should have been caught in compile() */ error(51); while(count--) if(*a++ != *b++) return(0); return(1); } yyerror(s) { fprintf(stderr, "%s\n", s); exit(2); } 'l kh$'ci% /* /usr/lib/calendar produces an egrep -f file that will select today's and tomorrow's calendar entries, with special weekend provisions used by calendar command */ #include #define DAY (3600*24L) char *month[] = { "[Jj]an", "[Ff]eb", "[Mm]ar", "[Aa]pr", "[Mm]ay", "[Jj]un", "[Jj]ul", "[Aa]ug", "[Ss]ep", "[Oo]ct", "[Nn]ov", "[Dd]ec" }; struct tm *localtime(); tprint(t) long t; { struct tm *tm; tm = localtime(&t); printf("(^|[ (,;])((%s[^ ]* *|%d/)0*%d)([^0123456789]|$)\n", month[tm->tm_mon], tm->tm_mon + 1, tm->tm_mday); } main() { long t; time(&t); tprint(t); switch(localtime(&t)->tm_wday) { case 5: t += DAY; tprint(t); case 6: t += DAY; tprint(t); default: t += DAY; tprint(t); } } 'o ke  !i' ((.globl sqrt exit = 1. read = 3. write = 4. ldfps = 170100^tst / ldfps $240 clr argflg cmp (sp)+,$2 blt begin tst (sp)+ mov (sp),r2 jsr r5,atof; getch1 inc argflg br begin1 begin: tst argflg beq 9f; sys exit; 9: jsr r5,atof; getch begin1: tstf fr0 cfcc bpl 9f; jmp ouch; 9: bne 9f; sys exit; 9: cmpf big,fr0 cfcc bgt 9f; jmp ouch; 9: / movf fr0,n jsr pc,sqrt movf fr0,v mov $1,r0 sys write; nl; 1 / movf $one,fr0 movf fr0,fr4 / movf n,fr0 movf $two,fr1 jsr r5,xt / movf n,fr0 movif $3,fr1 jsr r5,xt / movf n,fr0 movif $5,fr1 jsr r5,xt / movf n,fr0 movif $7,fr1 jsr r5,xt / movf n,fr0 movif $11.,fr1 jsr r5,xt / movf n,fr0 movif $13.,fr1 jsr r5,xt / movf n,fr0 movif $17.,fr1 mov $tab+6,r4 jsr pc,xx jmp begin / xt: movf fr0,fr2 divf fr1,fr2 modf $one,fr2 movf fr3,fr2 mulf fr1,fr2 cmpf fr2,fr0 cfcc beq hit2 rts r5 / / out1: mov $tab,r4 br in1 out2: modf fr4,fr2 cfcc bne 9f; mov $xx0,-(sp); jmp hit; 9: br in2 xx: mov (r4)+,kazoo xx0: mov $kazoo,r0 mov $100.,r1 clr r2 mov $gorp,r3 mov $gorp+6,r5 xx1: movf fr0,fr2 divf fr1,fr2 cmp r4,$tabend bhis out1 in1: movf fr2,(r3) bit r2,(r5) beq out2 in2: kazoo =.+2 addf $kazoo,fr1 mov (r4)+,(r0) sob r1,xx1 mov $100.,r1 mov $127.,r2 cmpf v,fr1 cfcc bge xx1 cmpf $one,fr0 cfcc beq 1f mov $1,r0 sys write; sp5; 5 movf n,fr0 jsr r5,ftoa; wrchar mov $1,r0 sys write; nl; 1 1: rts pc / / / hit2: movf fr1,t movf fr3,n movf fr3,fr0 jsr pc,sqrt movf fr0,v mov $1,r0 sys write; sp5; 5 movf t,fr0 jsr r5,ftoa; wrchar mov $1,r0 sys write; nl; 1 movf n,fr0 movf t,fr1 cmp r4,$tab bne 1f mov $tabend,r4 1: mov -(r4),kazoo jmp xt / hit: movf fr1,t movf fr3,n movf fr3,fr0 jsr pc,sqrt movf fr0,v mov $1,r0 sys write; sp5; 5 movf t,fr0 jsr r5,ftoa; wrchar mov $1,r0 sys write; nl; 1 movf n,fr0 movf t,fr1 mov $kazoo,r0 rts pc / / / get one character from the console. / called from atof. / getch: clr r0 sys read; ch; 1 bec 9f; sys exit; 9: tst r0; bne 9f; sys exit; 9: mov ch,r0 rts r5 / / / get one character form the argument string. getch1: movb (r2)+,r0 rts r5 / / write one character on the console / called from ftoa. / wrchar: mov r0,ch mov $1,r0 sys write; ch; 1 rts r5 / / / read and convert a line from the console into fr0. / atof: mov r1,-(sp) movif $10.,r3 clrf r0 1: jsr r5,*(r5) sub $'0,r0 cmp r0,$9. bhi 2f mulf r3,r0 movif r0,r1 addf r1,r0 br 1b 2: cmp r0,$' -'0 beq 1b / mov (sp)+,r1 tst (r5)+ rts r5 / / / / ftoa: mov $ebuf,r2 1: modf tenth,fr0 movf fr0,fr2 movf fr1,fr0 addf $epsilon,fr2 modf $ten,fr2 movfi fr3,r0 movb r0,-(r2) tstf fr0 cfcc bne 1b 1: movb (r2)+,r0 add $60,r0 jsr r5,*(r5) cmp r2,$ebuf blo 1b tst (r5)+ rts r5 / epsilon = 037114 tenth: 037314; 146314; 146314; 146315 .bss buf: .=.+18. ebuf: .text / / / / complain about a number which the program / is unable to digest ouch: mov $2,r0 sys write; 1f; 2f-1f jmp begin / 1: 2: .even / / one = 40200 two = 40400 four = 40600 ten = 41040 / .data big: 056177; 177777; 177777; 177777 nl: <\n> sp5: < > .even / tab: 41040; 40400; 40600; 40400; 40600; 40700; 40400; 40700 40600; 40400; 40600; 40700; 40700; 40400; 40700; 40600 40400; 40700; 40600; 40700; 41000; 40600; 40400; 40600 40400; 40600; 41000; 40700; 40600; 40700; 40400; 40600 40700; 40400; 40700; 40700; 40600; 40400; 40600; 40700 40400; 40700; 40600; 40400; 40600; 40400; 41040; 40400 tabend: / .bss ch: .=.+2 t: .=.+8 n: .=.+8 v: .=.+8 gorp: .=.+8 argflg: .=.+2 .text ldfps = 170100^tst stfps = 170200^tst / / sqrt replaces the f.p. number in fr0 by its / square root. newton's method / .globl sqrt, _sqrt / / _sqrt: mov r5,-(sp) mov sp,r5 movf 4(r5),fr0 jsr pc,sqrt mov (sp)+,r5 rts pc sqrt: tstf fr0 cfcc bne 1f clc rts pc /sqrt(0) 1: bgt 1f clrf fr0 sec rts pc / sqrt(-a) 1: mov r0,-(sp) stfps -(sp) mov (sp),r0 bic $!200,r0 / retain mode ldfps r0 movf fr1,-(sp) movf fr2,-(sp) / movf fr0,fr1 movf fr0,-(sp) asr (sp) add $20100,(sp) movf (sp)+,fr0 /initial guess mov $4,r0 1: movf fr1,fr2 divf fr0,fr2 addf fr2,fr0 mulf $half,fr0 / x = (x+a/x)/2 sob r0,1b 2: movf (sp)+,fr2 movf (sp)+,fr1 ldfps (sp)+ mov (sp)+,r0 clc rts pc / half = 40000 'y kԴ/?i% %{ int *getout(); %} %right '=' %left '+' '-' %left '*' '/' '%' %right '^' %left UMINUS %term LETTER DIGIT SQRT LENGTH _IF FFF EQ %term _WHILE _FOR NE LE GE INCR DECR %term _RETURN _BREAK _DEFINE BASE OBASE SCALE %term EQPL EQMI EQMUL EQDIV EQREM EQEXP %term _AUTO DOT %term QSTR %{ #include int in; char cary[1000], *cp = { cary }; char string[1000], *str = {string}; int crs = '0'; int rcrs = '0'; /* reset crs */ int bindx = 0; int lev = 0; int ln; char *ss; int bstack[10] = { 0 }; char *numb[15] = { " 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " 10", " 11", " 12", " 13", " 14" }; int *pre, *post; %} %% start : | start stat tail = output( $2 ); | start def dargs ')' '{' dlist slist '}' ={ bundle( 6,pre, $7, post ,"0",numb[lev],"Q"); conout( $$, $2 ); rcrs = crs; output( "" ); lev = bindx = 0; } ; dlist : tail | dlist _AUTO dlets tail ; stat : e ={ bundle(2, $1, "ps." ); } | ={ bundle(1, "" ); } | QSTR ={ bundle(3,"[",$1,"]P");} | LETTER '=' e ={ bundle(3, $3, "s", $1 ); } | LETTER '[' e ']' '=' e ={ bundle(4, $6, $3, ":", geta($1)); } | LETTER EQOP e ={ bundle(6, "l", $1, $3, $2, "s", $1 ); } | LETTER '[' e ']' EQOP e ={ bundle(8,$3, ";", geta($1), $6, $5, $3, ":", geta($1));} | _BREAK ={ bundle(2, numb[lev-bstack[bindx-1]], "Q" ); } | _RETURN '(' e ')' = bundle(4, $3, post, numb[lev], "Q" ); | _RETURN '(' ')' = bundle(4, "0", post, numb[lev], "Q" ); | _RETURN = bundle(4,"0",post,numb[lev],"Q"); | SCALE '=' e = bundle(2, $3, "k"); | SCALE EQOP e = bundle(4,"K",$3,$2,"k"); | BASE '=' e = bundle(2,$3, "i"); | BASE EQOP e = bundle(4,"I",$3,$2,"i"); | OBASE '=' e = bundle(2,$3,"o"); | OBASE EQOP e = bundle(4,"O",$3,$2,"o"); | '{' slist '}' ={ $$ = $2; } | FFF ={ bundle(1,"fY"); } | error ={ bundle(1,"c"); } | _IF CRS BLEV '(' re ')' stat ={ conout( $7, $2 ); bundle(3, $5, $2, " " ); } | _WHILE CRS '(' re ')' stat BLEV ={ bundle(3, $6, $4, $2 ); conout( $$, $2 ); bundle(3, $4, $2, " " ); } | fprefix CRS re ';' e ')' stat BLEV ={ bundle(5, $7, $5, "s.", $3, $2 ); conout( $$, $2 ); bundle(5, $1, "s.", $3, $2, " " ); } | '~' LETTER '=' e ={ bundle(3,$4,"S",$2); } ; EQOP : EQPL ={ $$ = "+"; } | EQMI ={ $$ = "-"; } | EQMUL ={ $$ = "*"; } | EQDIV ={ $$ = "/"; } | EQREM ={ $$ = "%%"; } | EQEXP ={ $$ = "^"; } ; fprefix : _FOR '(' e ';' ={ $$ = $3; } ; BLEV : ={ --bindx; } ; slist : stat | slist tail stat ={ bundle(2, $1, $3 ); } ; tail : '\n' ={ln++;} | ';' ; re : e EQ e = bundle(3, $1, $3, "=" ); | e '<' e = bundle(3, $1, $3, ">" ); | e '>' e = bundle(3, $1, $3, "<" ); | e NE e = bundle(3, $1, $3, "!=" ); | e GE e = bundle(3, $1, $3, "!>" ); | e LE e = bundle(3, $1, $3, "!<" ); | e = bundle(2, $1, " 0!=" ); ; e : e '+' e = bundle(3, $1, $3, "+" ); | e '-' e = bundle(3, $1, $3, "-" ); | '-' e %prec UMINUS = bundle(3, " 0", $2, "-" ); | e '*' e = bundle(3, $1, $3, "*" ); | e '/' e = bundle(3, $1, $3, "/" ); | e '%' e = bundle(3, $1, $3, "%%" ); | e '^' e = bundle(3, $1, $3, "^" ); | LETTER '[' e ']' ={ bundle(3,$3, ";", geta($1)); } | LETTER INCR = bundle(4, "l", $1, "d1+s", $1 ); | INCR LETTER = bundle(4, "l", $2, "1+ds", $2 ); | DECR LETTER = bundle(4, "l", $2, "1-ds", $2 ); | LETTER DECR = bundle(4, "l", $1, "d1-s", $1 ); | LETTER '[' e ']' INCR = bundle(7,$3,";",geta($1),"d1+",$3,":",geta($1)); | INCR LETTER '[' e ']' = bundle(7,$4,";",geta($2),"1+d",$4,":",geta($2)); | LETTER '[' e ']' DECR = bundle(7,$3,";",geta($1),"d1-",$3,":",geta($1)); | DECR LETTER '[' e ']' = bundle(7,$4,";",geta($2),"1-d",$4,":",geta($2)); | SCALE INCR = bundle(1,"Kd1+k"); | INCR SCALE = bundle(1,"K1+dk"); | SCALE DECR = bundle(1,"Kd1-k"); | DECR SCALE = bundle(1,"K1-dk"); | BASE INCR = bundle(1,"Id1+i"); | INCR BASE = bundle(1,"I1+di"); | BASE DECR = bundle(1,"Id1-i"); | DECR BASE = bundle(1,"I1-di"); | OBASE INCR = bundle(1,"Od1+o"); | INCR OBASE = bundle(1,"O1+do"); | OBASE DECR = bundle(1,"Od1-o"); | DECR OBASE = bundle(1,"O1-do"); | LETTER '(' cargs ')' = bundle(4, $3, "l", getf($1), "x" ); | LETTER '(' ')' = bundle(3, "l", getf($1), "x" ); | cons ={ bundle(2, " ", $1 ); } | DOT cons ={ bundle(2, " .", $2 ); } | cons DOT cons ={ bundle(4, " ", $1, ".", $3 ); } | cons DOT ={ bundle(3, " ", $1, "." ); } | DOT ={ $$ = "l."; } | LETTER = { bundle(2, "l", $1 ); } | LETTER '=' e ={ bundle(3, $3, "ds", $1 ); } | LETTER EQOP e %prec '=' ={ bundle(6, "l", $1, $3, $2, "ds", $1 ); } | LETTER '[' e ']' '=' e = { bundle(5,$6,"d",$3,":",geta($1)); } | LETTER '[' e ']' EQOP e = { bundle(9,$3,";",geta($1),$6,$5,"d",$3,":",geta($1)); } | LENGTH '(' e ')' = bundle(2,$3,"Z"); | SCALE '(' e ')' = bundle(2,$3,"X"); /* must be before '(' e ')' */ | '(' e ')' = { $$ = $2; } | '?' ={ bundle(1, "?" ); } | SQRT '(' e ')' ={ bundle(2, $3, "v" ); } | '~' LETTER ={ bundle((' kӴ/?i%(2,"L",$2); } | SCALE '=' e = bundle(2,$3,"dk"); | SCALE EQOP e %prec '=' = bundle(4,"K",$3,$2,"dk"); | BASE '=' e = bundle(2,$3,"di"); | BASE EQOP e %prec '=' = bundle(4,"I",$3,$2,"di"); | OBASE '=' e = bundle(2,$3,"do"); | OBASE EQOP e %prec '=' = bundle(4,"O",$3,$2,"do"); | SCALE = bundle(1,"K"); | BASE = bundle(1,"I"); | OBASE = bundle(1,"O"); ; cargs : eora | cargs ',' eora = bundle(2, $1, $3 ); ; eora: e | LETTER '[' ']' =bundle(2,"l",geta($1)); ; cons : constant ={ *cp++ = '\0'; } constant: '_' ={ $$ = cp; *cp++ = '_'; } | DIGIT ={ $$ = cp; *cp++ = $1; } | constant DIGIT ={ *cp++ = $2; } ; CRS : ={ $$ = cp; *cp++ = crs++; *cp++ = '\0'; if(crs == '[')crs=+3; if(crs == 'a')crs='{'; if(crs >= 0241){yyerror("program too big"); getout(); } bstack[bindx++] = lev++; } ; def : _DEFINE LETTER '(' ={ $$ = getf($2); pre = ""; post = ""; lev = 1; bstack[bindx=0] = 0; } ; dargs : | lora ={ pp( $1 ); } | dargs ',' lora ={ pp( $3 ); } ; dlets : lora ={ tp($1); } | dlets ',' lora ={ tp($3); } ; lora : LETTER | LETTER '[' ']' ={ $$ = geta($1); } ; %% # define error 256 int peekc = -1; int sargc; int ifile; char **sargv; char funtab[52] = { 01,0,02,0,03,0,04,0,05,0,06,0,07,0,010,0,011,0,012,0,013,0,014,0,015,0,016,0,017,0, 020,0,021,0,022,0,023,0,024,0,025,0,026,0,027,0,030,0,031,0,032,0 }; char atab[52] = { 0241,0,0242,0,0243,0,0244,0,0245,0,0246,0,0247,0,0250,0,0251,0,0252,0,0253,0, 0254,0,0255,0,0256,0,0257,0,0260,0,0261,0,0262,0,0263,0,0264,0,0265,0,0266,0, 0267,0,0270,0,0271,0,0272,0}; char *letr[26] = { "a","b","c","d","e","f","g","h","i","j", "k","l","m","n","o","p","q","r","s","t", "u","v","w","x","y","z" } ; char *dot = { "." }; yylex(){ int c, ch; restart: c = getch(); peekc = -1; while( c == ' ' || c == '\t' ) c = getch(); if(c == '\\'){ getch(); goto restart; } if( c<= 'z' && c >= 'a' ) { /* look ahead to look for reserved words */ peekc = getch(); if( peekc >= 'a' && peekc <= 'z' ){ /* must be reserved word */ if( c=='i' && peekc=='f' ){ c=_IF; goto skip; } if( c=='w' && peekc=='h' ){ c=_WHILE; goto skip; } if( c=='f' && peekc=='o' ){ c=_FOR; goto skip; } if( c=='s' && peekc=='q' ){ c=SQRT; goto skip; } if( c=='r' && peekc=='e' ){ c=_RETURN; goto skip; } if( c=='b' && peekc=='r' ){ c=_BREAK; goto skip; } if( c=='d' && peekc=='e' ){ c=_DEFINE; goto skip; } if( c=='s' && peekc=='c' ){ c= SCALE; goto skip; } if( c=='b' && peekc=='a' ){ c=BASE; goto skip; } if( c=='i' && peekc == 'b'){ c=BASE; goto skip; } if( c=='o' && peekc=='b' ){ c=OBASE; goto skip; } if( c=='d' && peekc=='i' ){ c=FFF; goto skip; } if( c=='a' && peekc=='u' ){ c=_AUTO; goto skip; } if( c == 'l' && peekc=='e'){ c=LENGTH; goto skip; } if( c == 'q' && peekc == 'u'){getout();} /* could not be found */ return( error ); skip: /* skip over rest of word */ peekc = -1; while( (ch = getch()) >= 'a' && ch <= 'z' ); peekc = ch; return( c ); } /* usual case; just one single letter */ yylval = letr[c-'a']; return( LETTER ); } if( c>= '0' && c <= '9' || c>= 'A' && c<= 'F' ){ yylval = c; return( DIGIT ); } switch( c ){ case '.': return( DOT ); case '=': switch( peekc = getch() ){ case '=': c=EQ; goto gotit; case '+': c=EQPL; goto gotit; case '-': c=EQMI; goto gotit; case '*': c=EQMUL; goto gotit; case '/': c=EQDIV; goto gotit; case '%': c=EQREM; goto gotit; case '^': c=EQEXP; goto gotit; default: return( '=' ); gotit: peekc = -1; return(c); } case '+': return( cpeek( '+', INCR, '+' ) ); case '-': return( cpeek( '-', DECR, '-' ) ); case '<': return( cpeek( '=', LE, '<' ) ); case '>': return( cpeek( '=', GE, '>' ) ); case '!': return( cpeek( '=', NE, '!' ) ); case '/': if((peekc = getch()) == '*'){ peekc = -1; while((getch() != '*') || ((peekc = getch()) != '/')); peekc = -1; goto restart; } else return(c); case '"': yylval = str; while((c=getch()) != '"'){*str++ = c; if(str >= &string[999]){yyerror("string space exceeded"); getout(); } } *str++ = '\0'; return(QSTR); default: return( c ); } } cpeek( c, yes, no ){ if( (peekc=getch()) != c ) return( no ); else { peekc = -1; return( yes ); } } getch(){ int ch; loop: ch = (peekc < 0) ? getc(in) : peekc; peekc = -1; if(ch != EOF)return(ch); if(++ifile > sargc){ if(ifile >= sargc+2)getout(); in = stdin; ln = 0; goto loop; } fclose(in); if((in = fopen(sargv[ifile],"r")) != NULL){ ln = 0; ss = sargv[ifile]; goto loop; } yyerror("cannot open input file"); } # define b_sp_max 3000 int b_space [ b_sp_max ]; int * b_sp_nxt = { b_space }; int bdebug = 0; bundle(a){ int i, *p, *q; p = &a; i = *p++; q = b_sp_nxt; if( bdebug ) printf("bundle %d elements at %o\n",i, q ); while(i-- > 0){ if( b_sp_nxt >= & b_space[b_sp_max] ) yyerror( "bundling space exceeded" ); * b_sp_nxt++ = *p++; } * b_sp_nxt++ = 0; yyval = q; return( q ); } routput(p) int *p; { if( bdebug ) printf("routput(%o)\n", p ); if( p >= &b_space[0] && p < &b_space[b_sp_max]){ /* part of a bundle */ while( *p != 0 ) routput( *p++ ); } else printf( p ); /* character string */ } output( p ) int *p; { routput( p ); b_sp_nxt = & b_space[0]; printf( "\n" ); fflush(stdout); cp = cary; crs = rcrs; } conout( p, s ) int *p; char *s; { printf("["); routput( p ); printf("]s%s\n", s ); fflush(stdout); lev--; } yyerror( s ) char *s; { if(ifile > sargc)ss="teletype"; printf("c[%s on line %d, %s]pc\n", s ,ln+1,ss); fflush(stdout); cp = cary; crs = rcrs; bindx = 0; lev = 0; b_sp_nxt = &b_space[0]; } pp( s ) char *s; { /* puts the relevant stuff on pre and post for the letter s */ bundle(3, "S", s, pre ); pre = yyval; bundle(4, post, "L", s, "s." ); post = yyval; } tp( s ) char *s; { /* same as pp, but for temps */ bundle(3, "0S", s, pre ); pre = yyval; bundle(4, post, "L", s, "s." ); post = yyval; } yyinit(argc,argv) int argc; char *argv[];{ signal( 2, (int(*)())1 ); /* ignore all interrupts */ sargv=argv; sargc= -- argc; if(sargc == 0)in=stdin; else if((in = fopen(sargv[1],"r")) == NULL) yyerror("cannot open input file"); ifile = 1; ln = 0; ss = sargv[1]; } int *getout(){ printf("q"); fflush(stdout); exit(); } int * getf(p) char *p;{ return(&funtab[2*(*p -0141)]); } int * geta(p) char *p;{ return(&atab[2*(*p - 0141)]); } main(argc, argv) char **argv; { int p[2]; if (argc > 1 && *argv[1] == '-') { if((argv[1][1] == 'd')||(argv[1][1] == 'c')){ yyinit(--argc, ++argv); yyparse(); exit(); } if(argv[1][1] != 'l'){ printf("unrecognizable argument\n"); fflush(stdout); exit(); } argv[1] = "/usr/lib/lib.b"; } pipe(p); if (fork()==0) { close(1); dup(p[1]); close(p[0]); close(p[1]); yyinit(argc, argv); yyparse(); exit(); } close(0); dup(p[0]); close(p[0]); close(p[1]); execl("/bin/dc", "dc", "-", 0); execl("/usr/bin/dc", "dc", "-", 0); } ' kLqTi. main(argc, argv) char **argv; { for (;;) printf("%s\n", argc>1? argv[1]: "y"); } ' kƲ OO /* * write to another user */ #include #include #include #include #include char *strcat(); char *strcpy(); struct utmp ubuf; int signum[] = {SIGHUP, SIGINT, SIGQUIT, 0}; char me[10] = "???"; char *him; char *mytty; char histty[32]; char *histtya; char *ttyname(); char *rindex(), *index(); int logcnt; int eof(); int timout(); FILE *tf; main(argc, argv) char *argv[]; { struct stat stbuf; register i; register FILE *uf; int c1, c2; if(argc < 2) { printf("usage: write user [ttyname]\n"); exit(1); } him = argv[1]; if(argc > 2) histtya = argv[2]; if ((uf = fopen("/etc/utmp", "r")) == NULL) { printf("cannot open /etc/utmp\n"); goto cont; } mytty = ttyname(2); if (mytty == NULL) { printf("Can't find your tty\n"); exit(1); } mytty = index(mytty+1, '/') + 1; if (histtya) { strcpy(histty, "/dev/"); strcat(histty, histtya); } while (fread((char *)&ubuf, sizeof(ubuf), 1, uf) == 1) { if (strcmp(ubuf.ut_line, mytty)==0) { f((or(i=0; i<8; i++) { c1 = ubuf.ut_name[i]; if(c1 == ' ') c1 = 0; me[i] = c1; if(c1 == 0) break; } } if(him[0] != '-' || him[1] != 0) for(i=0; i<8; i++) { c1 = him[i]; c2 = ubuf.ut_name[i]; if(c1 == 0) if(c2 == 0 || c2 == ' ') break; if(c1 != c2) goto nomat; } logcnt++; if (histty[0]==0) { strcpy(histty, "/dev/"); strcat(histty, ubuf.ut_line); } nomat: ; } cont: if (logcnt==0 && histty[0]=='\0') { printf("%s not logged in.\n", him); exit(1); } fclose(uf); if (histtya==0 && logcnt > 1) { printf("%s logged more than once\nwriting to %s\n", him, histty+5); } if(histty[0] == 0) { printf(him); if(logcnt) printf(" not on that tty\n"); else printf(" not logged in\n"); exit(1); } if (access(histty, 0) < 0) { printf("%s: ", histty); printf("No such tty\n"); exit(1); } signal(SIGALRM, timout); alarm(5); if ((tf = fopen(histty, "w")) == NULL) goto perm; alarm(0); if (fstat(fileno(tf), &stbuf) < 0) goto perm; if ((stbuf.st_mode&02) == 0) goto perm; sigs(eof); fprintf(tf, "Message from "); #ifdef interdata fprintf(tf, "(Interdata) " ); #endif fprintf(tf, "%s %s...\n", me, mytty); fflush(tf); for(;;) { char buf[128]; i = read(0, buf, 128); if(i <= 0) eof(); if(buf[0] == '!') { buf[i] = 0; ex(buf); continue; } write(fileno(tf), buf, i); } perm: printf("Permission denied\n"); exit(1); } timout() { printf("Timeout opening his tty\n"); exit(1); } eof() { fprintf(tf, "EOF\n"); exit(0); } ex(bp) char *bp; { register i; sigs(SIG_IGN); i = fork(); if(i < 0) { printf("Try again\n"); goto out; } if(i == 0) { sigs((int (*)())0); execl("/bin/sh", "sh", "-c", bp+1, 0); exit(0); } while(wait((int *)NULL) != i) ; printf("!\n"); out: sigs(eof); } sigs(sig) int (*sig)(); { register i; for(i=0;signum[i];i++) signal(signum[i],sig); } ' k꾬blOlO /* * who */ #include #include #include struct utmp utmp; struct passwd *pw; struct passwd *getpwuid(); char *ttyname(), *rindex(), *ctime(), *strcpy(), *index(); main(argc, argv) char **argv; { register char *tp, *s; register FILE *fi; s = "/etc/utmp"; if(argc == 2) s = argv[1]; if (argc==3) { tp = ttyname(0); if (tp) tp = index(tp+1, '/') + 1; else { /* no tty - use best guess from passwd file */ pw = getpwuid(getuid()); strcpy(utmp.ut_name, pw?pw->pw_name: "?"); strcpy(utmp.ut_line, "tty??"); time(&utmp.ut_time); putline(); exit(0); } } if ((fi = fopen(s, "r")) == NULL) { puts("who: cannot open utmp"); exit(1); } while (fread((char *)&utmp, sizeof(utmp), 1, fi) == 1) { if(argc==3) { if (strcmp(utmp.ut_line, tp)) continue; #ifdef interdata printf("(Interdata) "); #endif putline(); exit(0); } if(utmp.ut_name[0] == '\0' && argc==1) continue; putline(); } } putline() { register char *cbuf; printf("%-8.8s %-8.8s", utmp.ut_name, utmp.ut_line); cbuf = ctime(&utmp.ut_time); printf("%.12s\n", cbuf+4); } ' kݴLi- /* wc line and word count */ #include main(argc, argv) char **argv; { int i, token; register FILE *fp; long linect, wordct, charct; long tlinect=0, twordct=0, tcharct=0; char *wd; register int c; wd = "lwc"; if(argc > 1 && *argv[1] == '-') { wd = ++argv[1]; argc--; argv++; } i = 1; fp = stdin; do { if(argc>1 && (fp=fopen(argv[i], "r")) == NULL) { fprintf(stderr, "wc: can't open %s\n", argv[i]); continue; } linect = 0; wordct = 0; charct = 0; token = 0; for(;;) { c = getc(fp); if (c == EOF) break; charct++; if(' '1) { printf(" %s\n", argv[i]); } else printf("\n"); fclose(fp); tlinect += linect; twordct += wordct; tcharct += charct; } while(++i 2) { wcp(wd, tcharct, twordct, tlinect); printf(" total\n"); } exit(0); } wcp(wd, charct, wordct, linect) register char *wd; long charct; long wordct; long linect; { while (*wd) switch (*wd++) { case 'l': printf("%7ld", linect); break; case 'w': printf("%7ld ", wordct); break; case 'c': printf("%7ld", charct); break; } } ' kbi- #include #include #define USERS 50 char mesg[3000]; int msize; struct utmp utmp[USERS]; char *strcpy(); char *strcat(); main(argc, argv) char *argv[]; { register i; register struct utmp *p; FILE *f; if((f = fopen("/etc/utmp", "r")) == NULL) { fprintf(stderr, "Cannot open /etc/utmp\n"); exit(1); } fread((char *)utmp, sizeof(struct utmp), USERS, f); fclose(f); f = stdin; if(argc >= 2) { if((f = fopen(argv[1], "r")) == NULL) { fprintf(stderr,"Cannot open %s\n", argv[1]); exit(1); } } while((i = getc(f)) != EOF) mesg[msize++] = i; fclose(f); for(i=0; iut_name[0] == 0) continue; sleep(1); sendmes(p->ut_line); } exit(0); } sendmes(tty) char *tty; { register i; char t[50], buf[BUFSIZ]; FILE *f; i = fork(); if(i == -1) { fprintf(stderr, "Try again\n"); return; } if(i) return; strcpy(t, "/dev/"); strcat(t, tty); if((f = fopen(t, "w")) == NULL) { fprintf(stderr,"cannot open %s\n", t); exit(1); } setbuf(f, buf); fprintf(f, "Broadcast Message ...\n\n"); fwrite(mesg, msize, 1, f); exit(0); } ' kꣷ0@CFILORUX[^ti- /* * vpr -- Versatek printer filter */ #include #define LINELN 132 #define EJLINE 63 #define SETSTATE (('v'<<8)+1) int anydone; char linebuf[LINELN+2]; int sppmode[] = {0400, 0, 0}; int pltmode[] = {0200, 0, 0}; int clrcom[] = {0404, 0, 0}; int termcom[] = {0240, 0, 0}; int prtmode[] = {0100, 0, 0}; int ov; char ovbuf[2*LINELN]; FILE *in = stdin; FILE *out; char *ban; int npages = 1; char chrtab[][16]; int lineno; char *ctime(); main(argc, argv) char **argv; { if ((out = fopen("/dev/vp0", "w")) == NULL) { fprintf(stderr, "Can't open printer\n"); exit(1); } if (argc > 2 && argv[1][0]=='-' && argv[1][1]=='b') { argc -= 2; banner(ban = argv[2]); argv += 2; } if (argc<=1) anydone |= send(); else while (argc>1) { if ((in = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Can't find %s\n", argv[1]); argv++; argc--; anydone |= 01; continue; } anydone |= send(); argc--; argv++; fclose(in); fprintf(out, "\014"); } if (anydone==0) exit(1); fprintf(out, "\004"); if (ferror(out)) { fprintf(out, "Printer IO error\n"); exit(1); } fclose(out); if (ban && access("/usr/adm/vpacct", 02)>=0 && (out = fopen("/usr/adm/vpacct", "a"))!=NULL) { fprintf(out, "%4d %s\n", npages, ban); } return(0); } send() { register nskipped; lineno = 0; nskipped = 0; while (getline()) { if (lineno==0 && linebuf[0]==0 && nskipped<3) { nskipped ++; continue; } if (lineno >= EJLINE) { nskipped = 0; putline(1); lineno = 0; } else { putline(0)((; lineno++; } } if (lineno>0) npages++; return(1); } getline() { register col, maxcol, c; ov = 0; for (col=0; col=' ') { if (col < LINELN) { if (linebuf[col]=='_') { ov++; ovbuf[2*col] = 0377; ovbuf[2*col+1] = 0377; } linebuf[col++] = c; if (col > maxcol) maxcol = col; } } continue; case '\f': lineno = EJLINE; continue; case ' ': col++; continue; case '\t': col = (col|07) + 1; if (col>maxcol) maxcol = col; continue; case '\r': col = 0; continue; case '_': if (col>=LINELN) { col++; continue; } if (linebuf[col]!=' ') { ovbuf[2*col] = 0377; ovbuf[2*col+1] = 0377; ov++; } else linebuf[col] = c; col++; if (col>maxcol) maxcol = col; continue; case '\n': if (maxcol>=LINELN) maxcol = LINELN; linebuf[maxcol] = 0; return(1); case '\b': if (col>0) col--; continue; } } putline(ff) { register char *lp; register c; extern errno; errno = 0; lp = linebuf; while (c = *lp++) putc(c, out); if (ov) { putc('\n', out); fflush(out); ioctl(fileno(out), SETSTATE, pltmode); for (lp=ovbuf; lp < &ovbuf[2*LINELN]; ) putc(*lp++, out); fflush(out); ioctl(fileno(out), SETSTATE, prtmode); } if (ff) { putc('\014', out); npages++; } else if (ov==0) putc('\n', out); if (ferror(out)) { printf("Printer IO error\n"); exit(1); } } banner(s) char *s; { long timeb; register char *sp; int i, j, t; fprintf(out, "\n\n\n\n\n\n\n\n"); for (i=0; i<16; i++) { fprintf(out, " "); for (sp=s; *sp; sp++) { if (*sp<=' '|| *sp >'}') continue; fprintf(out, " "); t = chrtab[*sp - ' '][i]; for (j=7; j>=0; j--) if ((t>>j) & 01) putc('X', out); else putc(' ', out); } putc('\n', out); } fprintf(out, "\n\n\n\n\n\n\n\n"); time(&timeb); fprintf(out, " "); fprintf(out, ctime(&timeb)); fprintf(out, "\014"); } char chrtab[][16] = { 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, sp, */ 0010,0010,0010,0010,0010,0010,0010,0010,0000,0000,0010,0000,0000,0000,0000,0000, /*, !, */ 0024,0024,0024,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, ", */ 0000,0000,0000,0044,0044,0176,0044,0044,0176,0044,0044,0000,0000,0000,0000,0000, /*, #, */ 0000,0010,0010,0010,0076,0101,0100,0076,0001,0101,0076,0010,0010,0000,0000,0000, /*, $, */ 0000,0000,0000,0141,0142,0004,0010,0010,0020,0043,0103,0000,0000,0000,0000,0000, /*, %, */ 0000,0000,0070,0104,0110,0060,0060,0111,0106,0106,0071,0000,0000,0000,0000,0000, /*, &, */ 0004,0010,0020,0040,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, ', */ 0000,0004,0010,0020,0040,0040,0040,0040,0040,0040,0020,0010,0004,0000,0000,0000, /*, (, */ 0000,0040,0020,0010,0004,0004,0004,0004,0004,0004,0010,0020,0040,0000,0000,0000, /*, ), */ 0000,0000,0000,0010,0111,0052,0034,0177,0034,0052,0111,0010,0000,0000,0000,0000, /*, *, */ 0000,0000,0000,0000,0010,0010,0010,0177,0010,0010,0010,0000,0000,0000,0000,0000, /*, +, */ 0000,0000,0000,0000,0000,0000,0000,0000,0000,0030,0030,0010,0020,0000,0000,0000, /*, ,, */ 0000,0000,0000,0000,0000,0000,0000,0176,0000,0000,0000,0000,0000,0000,0000,0000, /*, -, */ 0000,0000,0000,0000,0000,0000,0000,0000,0000,0030,0030,0000,0000,0000,0000,0000, /*, ., */ 0000,0000,0001,0002,0004,0010,0010,0010,0020,0040,0100,0000,0000,00' k0@CFILORUX[^ti-00,0000,0000, /*, /, */ 0000,0030,0044,0102,0102,0102,0102,0102,0102,0044,0030,0000,0000,0000,0000,0000, /*, 0, */ 0000,0010,0030,0010,0010,0010,0010,0010,0010,0010,0034,0000,0000,0000,0000,0000, /*, 1, */ 0000,0070,0104,0004,0004,0010,0020,0040,0100,0100,0174,0000,0000,0000,0000,0000, /*, 2, */ 0000,0176,0004,0004,0010,0014,0002,0002,0002,0104,0070,0000,0000,0000,0000,0000, /*, 3, */ 0000,0004,0014,0024,0044,0104,0176,0004,0004,0004,0004,0000,0000,0000,0000,0000, /*, 4, */ 0000,0174,0100,0100,0130,0144,0002,0002,0102,0044,0030,0000,0000,0000,0000,0000, /*, 5, */ 0000,0074,0102,0100,0130,0144,0102,0102,0102,0044,0030,0000,0000,0000,0000,0000, /*, 6, */ 0000,0176,0004,0004,0010,0010,0020,0020,0040,0040,0040,0000,0000,0000,0000,0000, /*, 7, */ 0000,0034,0042,0101,0042,0076,0101,0101,0101,0101,0076,0000,0000,0000,0000,0000, /*, 8, */ 0000,0034,0042,0101,0101,0101,0043,0036,0004,0010,0020,0040,0000,0000,0000,0000, /*, 9, */ 0000,0000,0000,0000,0000,0000,0030,0030,0000,0030,0030,0000,0000,0000,0000,0000, /*, :, */ 0000,0000,0000,0000,0000,0000,0030,0030,0000,0030,0030,0020,0040,0000,0000,0000, /*, ;, */ 0002,0004,0010,0020,0040,0100,0040,0020,0010,0004,0002,0000,0000,0000,0000,0000, /*, <, */ 0000,0000,0000,0000,0177,0000,0177,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, =, */ 0100,0040,0020,0010,0004,0002,0004,0010,0020,0040,0100,0000,0000,0000,0000,0000, /*, >, */ 0000,0030,0044,0102,0001,0002,0004,0010,0010,0000,0010,0000,0000,0000,0000,0000, /*, ?, */ 0000,0074,0102,0101,0115,0123,0121,0121,0121,0111,0046,0000,0000,0000,0000,0000, /*, @, */ 0000,0010,0024,0042,0101,0101,0177,0101,0101,0101,0101,0000,0000,0000,0000,0000, /*, A, */ 0000,0176,0101,0101,0101,0176,0101,0101,0101,0101,0176,0000,0000,0000,0000,0000, /*, B, */ 0000,0076,0101,0100,0100,0100,0100,0100,0100,0101,0076,0000,0000,0000,0000,0000, /*, C, */ 0000,0176,0101,0101,0101,0101,0101,0101,0101,0101,0176,0000,0000,0000,0000,0000, /*, D, */ 0000,0176,0100,0100,0100,0170,0100,0100,0100,0100,0177,0000,0000,0000,0000,0000, /*, E, */ 0000,0177,0100,0100,0100,0174,0100,0100,0100,0100,0100,0000,0000,0000,0000,0000, /*, F, */ 0000,0076,0101,0100,0100,0117,0101,0101,0101,0101,0076,0000,0000,0000,0000,0000, /*, G, */ 0000,0101,0101,0101,0101,0176,0101,0101,0101,0101,0101,0000,0000,0000,0000,0000, /*, H, */ 0000,0034,0010,0010,0010,0010,0010,0010,0010,0010,0034,0000,0000,0000,0000,0000, /*, I, */ 0000,0016,0004,0004,0004,0004,0004,0004,0104,0104,0070,0000,0000,0000,0000,0000, /*, J, */ 0000,0101,0102,0104,0110,0120,0160,0110,0104,0102,0101,0000,0000,0000,0000,0000, /*, K, */ 0000,0100,0100,0100,0100,0100,0100,0100,0100,0100,0177,0000,0000,0000,0000,0000, /*, L, */ 0000,0101,0143,0125,0111,0101,0101,0101,0101,0101,0101,0000,0000,0000,0000,0000, /*, M, */ 0000,0101,0141,0121,0111,0105,0103,0101,0101,0101,0101,0000,0000,0000,0000,0000, /*, N, */ 0000,0076,0101,0101,0101,0101,0101,0101,0101,0101,0076,0000,0000,0000,0000,0000, /*, O, */ 0000,0176,0101,0101,0101,0176,0100,0100,0100,0100,0100,0000,0000,0000,0000,0000, /*, P, */ 0000,0076,0101,0101,0101,0101,0101,0101,0131,0105,0076,0002,0001,0000,0000,0000, /*, Q, */ 0000,0176,0101,0101,0101,0176,0104,0102,0101,0101,0101,0000,0000,0000,0000,0000, /*, R, */ 0000,0076,0101,0100,0100,0076,0001,0001,0001,0101,0076,0000,0000,0000,0000,0000, /*, S, */ 0000,0177,0010,0010,0010,0010,0010,0010,0010,0010,0010,0000,0000,0000,0000,0000, /*, T, */ 0000,0101,0101,0101,0101,0101,0101,0101,0101,0101,0076,0000,0000,0000,0000,0000, /*, U, */ 0000,0101,0101,0101,0101,0101,0101,0101,0042,0024,0010,0000,0000,0000,0000,0000, /*, V, */ 0000,0101,0101,0101,0101,0111,0111,0125,0143,0101,0101,0000,0000,0000,0000,0000, /*, W, */ 0000,0101,0101,0042,0024,0010,0024,0042,0101,0101,0101,0000,0000,0000,0000,0000, /*, X, */ 0000,0101,0042,0024,0010,0010,0010,0010,0010,0010,0010,0000,0000,0000,0000,0000, /*, Y, */ 0000,0177,0001,0002,0004,0010,0020,0040,0100,0100,0177,0000,0000,0000,0000,0000, /*, Z, */ 0000,0034,0020,0020,0020,0020,0020,0020,0020,0020,0020,0034,0000,0000,0000,0000, /*, [, */ 0000,0000,0100,0040,0020,0010,0010,0010,0004,0002,0001,0000,0000,0000,0000,0000, /*, , \, */ 0000,0070,0010,0010,0010,0010,0010,0010,0010,0010,0010,0070,0000,0000,0000,0000, /*, ], */ 0010,0024,0042,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, ^, */ 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0377,0000,0000, /*, _, */ 0040,0020,0010,0004,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, `, */ 0000,0000,0000,0000,0000,0074,0002,0076,0102,0102,0076,0000,0000,0000,0000,0000, /*, a, */ 0000,0100,0100,0100,0100,0174,0102,0102,0102,0102,0174,0000,0000,0000,0000,0000, /*, b, */ 0000,0000,0000,0000,0000,0074,0102,0100,0100,0102,0074,0000,0000,0000,0000,0000, /*, c, */ 0002,0002,0002,0002,0002,0076,0102,0102,0102,0102,0076,0000,0000,0000,0000,0000, /*, d, */ 0000,0000,0000,0000,0000,0074,0102,0174,0100,0102,0074,0000,0000,0000,0000,0000, /*, e, */ 0000,0016,0020,0020,0020,0176,0020,0020,0020,0020,0020,0000,0000,0000,0000,0000, /*, f, */ 0000,0000,0000,0000,0000,0076,0102,0102,0102,0102,0076,0002,0002,0102,0076,0000, /*, g, */ 0000,0100,0100,0100,0100,0174,0102,0102,0102,0102,0102,0000,0000,0000,0000,0000, /*, h, */ 0000,0000,0000,0010,0000,0030,0010,0010,0010,0010,0034,0000,0000,0000,0000,0000, /*, i, */ 0000,0000,0000,0010,0000,0030,0010,0010,0010,0010,0010,0010,0010,0050,0020,0000, /*, j, */ 0000,0100,0100,0100,0100,0106,0110,0120,0160,0110,0106,0000,0000,0000,0000,0000, /*, k, */ 0000,0030,0010,0010,0010,0010,0010,0010,0010,0010,0034,0000,0000,0000,0000,0000, /*, l, */ 0000,0000,0000,0000,0000,0166,0111,0111,0111,0111,0111,0000,0000,0000,0000,0000, /*, m, */ 0000,0000,0000,0000,0100,0174,0102,0102,0102,0102,0102,0000,0000,0000,0000,0000, /*, n, */ 0000,0000,0000,0000,0000,0074,0102,0102,0102,0102,0074,0000,0000,0000,0000,0000, /*, o, */ 0000,0000,0000,0000,0000,0174,0102,0102,0102,0102,0174,0100,0100,0100,0100,0000, /*, p, */ 0000,0000,0000,0000,0000,0076,0102,0102,0102,0102,0076,0002,0002,0002,0002,0000, /*, q, */ 0000,0000,0000,0000,0000,0134,0142,0100,0100,0100,0100,0000,0000,0000,0000,0000, /*, r, */ 0000,0000,0000,0000,0((000,0076,0100,0074,0002,0102,0074,0000,0000,0000,0000,0000, /*, s, */ 0000,0020,0020,0020,0020,0176,0020,0020,0020,0020,0014,0000,0000,0000,0000,0000, /*, t, */ 0000,0000,0000,0000,0000,0102,0102,0102,0102,0102,0075,0000,0000,0000,0000,0000, /*, u, */ 0000,0000,0000,0000,0000,0101,0101,0101,0042,0024,0010,0000,0000,0000,0000,0000, /*, v, */ 0000,0000,0000,0000,0000,0111,0111,0111,0111,0111,0066,0000,0000,0000,0000,0000, /*, w, */ 0000,0000,0000,0000,0000,0102,0044,0030,0030,0044,0102,0000,0000,0000,0000,0000, /*, x, */ 0000,0000,0000,0000,0000,0102,0102,0102,0042,0024,0010,0020,0040,0100,0000,0000, /*, y, */ 0000,0000,0000,0000,0000,0176,0004,0010,0020,0040,0176,0000,0000,0000,0000,0000, /*, z, */ 0000,0014,0020,0020,0020,0020,0040,0020,0020,0020,0020,0014,0000,0000,0000,0000, /*, {, */ 0000,0010,0010,0010,0010,0000,0000,0010,0010,0010,0010,0000,0000,0000,0000,0000, /*, |, */ 0000,0030,0010,0010,0010,0010,0004,0010,0010,0010,0010,0030,0000,0000,0000,0000, /*, }, */ 0020,0052,0004,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000, /*, ~, */ 0000,0176,0176,0176,0176,0176,0176,0176,0176,0176,0176,0000,0000,0000,0000,0000, /*, del, */ }; ' k=ai- /* * Update the file system every 30 seconds. * For cache benefit, open certain system directories. */ #include char *fillst[] = { "/bin", "/usr", "/usr/bin", 0, }; main() { char **f; if(fork()) exit(0); close(0); close(1); close(2); for(f = fillst; *f; f++) open(*f, 0); dosync(); for(;;) pause(); } dosync() { sync(); signal(SIGALRM, dosync); alarm(30); } ' kza147:i- /* * Deal with duplicated lines in a file */ #include #include int fields; int letters; int linec; char mode; int uniq; char *skip(); main(argc, argv) int argc; char *argv[]; { static char b1[1000], b2[1000]; while(argc > 1) { if(*argv[1] == '-') { if (isdigit(argv[1][1])) fields = atoi(&argv[1][1]); else mode = argv[1][1]; argc--; argv++; continue; } if(*argv[1] == '+') { letters = atoi(&argv[1][1]); argc--; argv++; continue; } if (freopen(argv[1], "r", stdin) == NULL) printe("cannot open %s\n", argv[1]); break; } if(argc > 2 && freopen(argv[2], "w", stdout) == NULL) printe("cannot create %s\n", argv[2]); if(gline(b1)) exit(0); for(;;) { linec++; if(gline(b2)) { pline(b1); exit(0); } if(!equal(b1, b2)) { pline(b1); linec = 0; do { linec++; if(gline(b1)) { pline(b2); exit(0); } } while(equal(b1, b2)); pline(b2); linec = 0; } } } gline(buf) register char buf[]; { register c; while((c = getchar()) != '\n') { if(c == EOF) return(1); *buf++ = c; } *buf = 0; return(0); } pline(buf) register char buf[]; { switch(mode) { case 'u': if(uniq) { uniq = 0; return; } break; case 'd': if(uniq) break; return; case 'c': printf("%4d ", linec); } uniq = 0; fputs(buf, stdout); putchar('\n'); } equal(b1, b2) register char b1[], b2[]; { register char c; b1 = skip(b1); b2 = skip(b2); while((c = *b1++) != 0) if(c != *b2++) return(0); if(*b2 != 0) return(0); uniq++; return(1); } char * skip(s) register char *s; { register nf, nl; nf = nl = 0; while(nf++ < fields) { while(*s == ' ' || *s == '\t') s++; while( !(*s == ' ' || *s == '\t' || *s == 0) ) s++; } while(nl++ < letters && *s != 0) s++; return(s); } printe(p,s) char *p,*s; { fprintf(stderr, p, s); exit(1); } ' ko鴁+.i- #define NMOUNT 16 #define NAMSIZ 32 struct mtab { char file[NAMSIZ]; char spec[NAMSIZ]; } mtab[NMOUNT]; main(argc, argv) char **argv; { register struct mtab *mp; register char *p1, *p2; int mf; sync(); mf = open("/etc/mtab", 0); read(mf, (char *)mtab, NMOUNT*2*NAMSIZ); if(argc != 2) { printf("arg count\n"); return(1); } if (umount(argv[1]) < 0) { perror("umount"); return(1); } p1 = argv[1]; while(*p1++) ; p1--; while(*--p1 == '/') *p1 = '\0'; while(p1 > argv[1] && *--p1 != '/') ; if(*p1 == '/') p1++; argv[1] = p1; for (mp = mtab; mp < &mtab[NMOUNT]; mp++) { p1 = argv[1]; p2 = &mp->spec[0]; while (*p1++ == *p2) if (*p2++ == 0) { for (p1 = mp->file; p1 < &mp->file[NAMSIZ*2];) *p1++ = 0; mp = &mtab[NMOUNT]; while ((--mp)->file[0] == 0); mf = creat("/etc/mtab", 0644); write(mf, (char *)mtab, (mp-mtab+1)*2*NAMSIZ); return(0); } } printf("%s not in mount table\n", argv[1]); return(1); } ' k(i- /* * Type tty name */ char *ttyname(); main(argc, argv) char **argv; { register char *p; p = ttyname(0); if(argc==2 && !strcmp(argv[1], "-s")) ; else printf("%s\n", (p? p: "not a tty")); exit(p? 0: 1); } ' k0]"%DD /* topological sort * input is sequence of pairs of items (blank-free strings) * nonidentical pair is a directed edge in graph * identical pair merely indicates presence of node * output is ordered list of items consistent with * the partial ordering specified by the graph */ #include "stdio.h" /* the nodelist always has an empty element at the end to * make it easy to grow in natural order */ struct nodelist { struct nodelist *nextnode; struct predlist *inedges; char *name; enum {DEAD, LIVE, ONCE, TWICE} live; } firstnode = {NULL, NULL, NULL, DEAD}; /* a predecessor list tells all the immediate * predecessors of a given node */ struct predlist { struct predlist *nextpred; struct nodelist *pred; }; struct nodelist *index(); struct nodelist *findloop(); struct nodelist *mark(); char *malloc(); char *empty = ""; /* the first for loop reads in the graph, * the second prints out the ordering */ main(argc,argv) char **argv; { register struct predlist *t; FILE *input = stdin; register struct nodelist *i, *j; int x; char precedes[50], follows[50]; if(argc>1) { input = fopen(argv[1],"r"); if(input==NULL) error("cannot open ", argv[1]); } for(;;) { x = fscanf(input,"%s%s",precedes, follows); if(x==EOF) break; if(x!=2) error("odd data",empty); i = index(precedes); j = index(follows); if(i==j||present(i,j)) continue; t = (struct predlist *)malloc(sizeof(struct predlist)); t->nextpred = j->inedges; t->pred = i; j->inedges = t; } for(;;) { x = 0; /*anything LIVE on this sweep?*/ for(i= &firstnode; i->nextnode!=NULL; i=i->nextnode) { if(i->live==LIVE) { x = 1; if(!anypred(i)) break; } } if(x==0) break; if(i->nextnode==NULL) i = findloop(); printf("%s\n",i->name); i->live = DEAD; } } /* is i present on j's predecessor list? */ present(i,j) struct nodelist *i, *j; { register struct predlist *t; for(t=j->inedges; t!=NULL; t=t->nextpred) if(t->pred==i) return(1); return(0); } /* is there any live predecessor for i? *((/ anypred(i) struct nodelist *i; { register struct predlist *t; for(t=i->inedges; t!=NULL; t=t->nextpred) if(t->pred->live==LIVE) return(1); return(0); } /* turn a string into a node pointer */ struct nodelist * index(s) register char *s; { register struct nodelist *i; register char *t; for(i= &firstnode; i->nextnode!=NULL; i=i->nextnode) if(cmp(s,i->name)) return(i); for(t=s; *t; t++) ; t = malloc((unsigned)(t+1-s)); i->nextnode = (struct nodelist *)malloc(sizeof(struct nodelist)); if(i->nextnode==NULL||t==NULL) error("too many items",empty); i->name = t; i->live = LIVE; i->nextnode->nextnode = NULL; i->nextnode->inedges = NULL; i->nextnode->live = DEAD; while(*t++ = *s++); return(i); } cmp(s,t) register char *s, *t; { while(*s==*t) { if(*s==0) return(1); s++; t++; } return(0); } error(s,t) char *s, *t; { note(s,t); exit(1); } note(s,t) char *s,*t; { fprintf(stderr,"tsort: %s%s\n",s,t); } /* given that there is a cycle, find some * node in it */ struct nodelist * findloop() { register struct nodelist *i, *j; register struct predlist *p; for(i= &firstnode; i->nextnode!=NULL; i=i->nextnode) if(i->live==LIVE) break; note("cycle in reverse order",empty); while(i->live==LIVE) { i->live = ONCE; for(p=i->inedges; ; p=p->nextpred) { if(p==NULL) error("error 1"); i = p->pred; if(i->live!=DEAD) break; } } while(i->live==ONCE) { i->live = TWICE; note(i->name,empty); for(p=i->inedges; ; p=p->nextpred) { if(p==NULL) error("error 2"); i = p->pred; if(i->live!=DEAD) break; } } for(j= &firstnode; j->nextnode!=NULL; j=j->nextnode) if(j->live!=DEAD) j->live = LIVE; return(i); } ' k洁_  i, #include /* tr - transliterate data stream */ int dflag = 0; int sflag = 0; int cflag = 0; int save = 0; char code[256]; char squeez[256]; char vect[256]; struct string { int last, max; char *p; } string1, string2; main(argc,argv) char **argv; { register i; int j; register c, d; char *compl; int lastd; string1.last = string2.last = 0; string1.max = string2.max = 0; string1.p = string2.p = ""; if(--argc>0) { argv++; if(*argv[0]=='-'&&argv[0][1]!=0) { while(*++argv[0]) switch(*argv[0]) { case 'c': cflag++; continue; case 'd': dflag++; continue; case 's': sflag++; continue; } argc--; argv++; } } if(argc>0) string1.p = argv[0]; if(argc>1) string2.p = argv[1]; for(i=0; i<256; i++) code[i] = vect[i] = 0; if(cflag) { while(c = next(&string1)) vect[c&0377] = 1; j = 0; for(i=1; i<256; i++) if(vect[i]==0) vect[j++] = i; vect[j] = 0; compl = vect; } for(i=0; i<256; i++) squeez[i] = 0; lastd = 0; for(;;){ if(cflag) c = *compl++; else c = next(&string1); if(c==0) break; d = next(&string2); if(d==0) d = lastd; else lastd = d; squeez[d&0377] = 1; code[c&0377] = dflag?1:d; } while(d = next(&string2)) squeez[d&0377] = 1; squeez[0] = 1; for(i=0;i<256;i++) { if(code[i]==0) code[i] = i; else if(dflag) code[i] = 0; } while((c=getc(stdin)) != EOF ) { if(c == 0) continue; if(c = code[c&0377]&0377) if(!sflag || c!=save || !squeez[c&0377]) putchar(save = c); } exit(0); } next(s) struct string *s; { again: if(s->max) { if(s->last++ < s->max) return(s->last); s->max = s->last = 0; } if(s->last && *s->p=='-') { nextc(s); s->max = nextc(s); if(s->max==0) { s->p--; return('-'); } if(s->max < s->last) { s->last = s->max-1; return('-'); } goto again; } return(s->last = nextc(s)); } nextc(s) struct string *s; { register c, i, n; c = *s->p++; if(c=='\\') { i = n = 0; while(i<3 && (c = *s->p)>='0' && c<='7') { n = n*8 + c - '0'; i++; s->p++; } if(i>0) c = n; else c = *s->p++; } if(c==0) *--s->p = 0; return(c&0377); } ' k1i, /* * optimize output for Tek 4014 */ #include #include #define MAXY 3071 #define LINE 47 #define XOFF 248 #define US 037 #define GS 035 #define ESC 033 #define CR 015 #define FF 014 #define SO 016 #define SI 017 int pl = 66*LINE; int yyll = -1; char obuf[BUFSIZ]; int xx = XOFF; int xoff = XOFF; int coff = 0; int ncol = 0; int maxcol = 1; int yy = MAXY; int ohy = -1; int ohx = -1; int oxb = -1; int oly = -1; int olx = -1; int alpha; int ry; FILE *ttyin; main(argc, argv) int argc; char **argv; { register i, j; extern ex(); while (--argc > 0 && (++argv)[0][0]=='-') switch(argv[0][1]) { case 'p': if (i = atoi(&argv[0][2])) pl = i; yyll = MAXY + 1 - pl; break; default: if (i = atoi(&argv[0][1])) { maxcol = i; xx = xoff = 0; coff = 4096/i; } break; } if ((ttyin = fopen("/dev/tty", "r")) != NULL) setbuf(ttyin, (char *)NULL); if (argc) { if (freopen(argv[0], "r", stdin) == NULL) { fprintf(stderr, "tk: cannot open %s\n", argv[0]); exit(1); } } signal(SIGINT, ex); setbuf(stdout, obuf); ncol = maxcol; init(); while ((i = getchar()) != EOF) { switch(i) { case FF: yy = 0; case '\n': xx = xoff; yy -= LINE; alpha = 0; if (yy < yyll) { ncol++; yy = 0; sendpt(0); putchar(US); fflush(stdout); if (ncol >= maxcol) kwait(); init(); } continue; case CR: xx = xoff; alpha = 0; continue; case ' ': xx += 31; alpha = 0; continue; case '\t': /*tabstops at 8*31=248*/ j = ((xx-xoff)/248) + 1; xx += j*248 - (xx-xoff); alpha = 0; continue; case '\b': xx -= 31; alpha = 0; continue; case ESC: switch(i = getchar()) { case '7': yy += LINE; alpha = 0; continue; case '8': yy += (LINE + ry)/2; ry = (LINE + ry)%2; alpha = 0; continue; case '9': yy -= (LINE - ry)/2; ry = -(LINE - ry)%2; alpha = 0; continue; default: continue; } default: sendpt(alpha); if (alpha==0) { putchar(US); alpha = 1; } putchar(i); if (i>' ') xx += 31; continue; } } xx = xoff; yy = 0; sendpt(0); putchar(US); kwait(); ex(); } init() { ohx = oxb = olx = ohy = oly = -1; if (ncol >= maxcol) { ncol = 0; if (maxcol > 1) xoff = 0; else xoff = XOFF; } else xoff += coff; xx = xoff; yy = MAXY; if (ncol==0) fputs("\033\014\033;", stdout); sendpt(0); } ex() { yy = MAXY; xx = 0; fputs("\033;\037", stdout); sendpt(1); exit(0); } kwait() { register c; fflush(stdout); if (ttyin==NULL) return; while ((c=getc(ttyin))!='\n') { if (c=='!') { execom(); printf("!\n"); fflush(stdout); continue; } if (c==EOF) ex(); } } execom() { int (*si)(), (*sq)(); if (fork() != 0) { si = signal(SIGINT, SIG_IGN); sq = signal(SIGQUIT, SIG_IGN); wait((int *)NULL); signal(SIGINT, si); signal(SIGQUIT, sq); return; } if (isatty(fileno(stdin)) == 0) { if (freopen("/dev/tty", "r", stdin)==NULL) freopen("/dev/null", "r", stdin); } execl("/bin/sh", "sh", "-t", 0); } sendpt(a) { register zz; int hy,xb,ly,hx,lx; if (a) return; if ((zz = yy) < 0) zz = 0; hy = ((zz>>7) & 037); xb = ((xx & 03) + ((zz<<2) & 014) & 017); ly = ((zz>>2) & 037); hx = ((xx>>7) & 037); lx = ((xx>>2) & 037); putchar(GS); if (hy != ohy) putchar(hy | 040); if (xb != oxb) putchar(xb | 0140); if ((ly != oly) || (hx != ohx) || (xb != oxb)) putchar(ly | 0140); if (hx != ohx) putchar(hx | 040); putchar(lx | 0100); ohy = hy; oxb = xb; oly = ly; ohx = hx; olx = lx; alpha = 0; } ' k7Mki, ((/* time command */ #include #include #include #include extern int errno; extern char *sys_errlist[]; main(argc, argv) char **argv; { struct tms buffer, obuffer; int status; register p; time_t before, after; if(argc<=1) exit(0); time(&before); p = fork(); if(p == -1) { fprintf(stderr, "Try again.\n"); exit(1); } if(p == 0) { execvp(argv[1], &argv[1]); fprintf(stderr, "%s: %s\n", argv[1], sys_errlist[errno]); exit(1); } signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); times(&obuffer); while(wait(&status) != p) times(&obuffer); time(&after); if((status&0377) != 0) fprintf(stderr,"Command terminated abnormally.\n"); times(&buffer); fprintf(stderr,"\n"); printt("real", (after-before) * 60); printt("user", buffer.tms_cutime - obuffer.tms_cutime); printt("sys ", buffer.tms_cstime - obuffer.tms_cstime); exit(status>>8); } char quant[] = { 6, 10, 10, 6, 10, 6, 10, 10, 10 }; char *pad = "000 "; char *sep = "\0\0.\0:\0:\0\0"; char *nsep = "\0\0.\0 \0 \0\0"; printt(s, a) char *s; long a; { char digit[9]; register i; char c; int nonzero; for(i=0; i<9; i++) { digit[i] = a % quant[i]; a /= quant[i]; } fprintf(stderr,s); nonzero = 0; while(--i>0) { c = digit[i]!=0 ? digit[i]+'0': nonzero ? '0': pad[i]; fprintf(stderr,"%c",c); nonzero |= digit[i]; c = nonzero?sep[i]:nsep[i]; fprintf(stderr,"%c",c); } fprintf(stderr,"\n"); } ' kJu Ii, /* * test expression * [ expression ] */ #include #include #include #define EQ(a,b) ((tmp=a)==0?0:(strcmp(tmp,b)==0)) #define DIR 1 #define FIL 2 int ap; int ac; char **av; char *tmp; main(argc, argv) char *argv[]; { ac = argc; av = argv; ap = 1; if(EQ(argv[0],"[")) { if(!EQ(argv[--ac],"]")) synbad("] missing",""); } argv[ac] = 0; if (ac<=1) exit(1); exit(exp()?0:1); } char *nxtarg(mt) { if (ap>=ac) { if(mt) { ap++; return(0); } synbad("argument expected",""); } return(av[ap++]); } exp() { int p1; p1 = e1(); if (EQ(nxtarg(1), "-o")) return(p1 | exp()); ap--; return(p1); } e1() { int p1; p1 = e2(); if (EQ(nxtarg(1), "-a")) return (p1 & e1()); ap--; return(p1); } e2() { if (EQ(nxtarg(0), "!")) return(!e3()); ap--; return(e3()); } e3() { int p1; register char *a; char *p2; int int1, int2; a=nxtarg(0); if(EQ(a, "(")) { p1 = exp(); if(!EQ(nxtarg(0), ")")) synbad(") expected",""); return(p1); } if(EQ(a, "-r")) return(tio(nxtarg(0), 0)); if(EQ(a, "-w")) return(tio(nxtarg(0), 1)); if(EQ(a, "-d")) return(ftype(nxtarg(0))==DIR); if(EQ(a, "-f")) return(ftype(nxtarg(0))==FIL); if(EQ(a, "-s")) return(fsizep(nxtarg(0))); if(EQ(a, "-t")) if(ap>=ac) return(isatty(1)); else return(isatty(atoi(nxtarg(0)))); if(EQ(a, "-n")) return(!EQ(nxtarg(0), "")); if(EQ(a, "-z")) return(EQ(nxtarg(0), "")); p2 = nxtarg(1); if (p2==0) return(!EQ(a,"")); if(EQ(p2, "=")) return(EQ(nxtarg(0), a)); if(EQ(p2, "!=")) return(!EQ(nxtarg(0), a)); if(EQ(a, "-l")) { int1=length(p2); p2=nxtarg(0); } else{ int1=atoi(a); } int2 = atoi(nxtarg(0)); if(EQ(p2, "-eq")) return(int1==int2); if(EQ(p2, "-ne")) return(int1!=int2); if(EQ(p2, "-gt")) return(int1>int2); if(EQ(p2, "-lt")) return(int1=int2); if(EQ(p2, "-le")) return(int1<=int2); synbad("unknown operator ",p2); } tio(a, f) char *a; int f; { f = open(a, f); if (f>=0) { close(f); return(1); } return(0); } ftype(f) char *f; { struct stat statb; if(stat(f,&statb)<0) return(0); if((statb.st_mode&S_IFMT)==S_IFDIR) return(DIR); return(FIL); } fsizep(f) char *f; { struct stat statb; if(stat(f,&statb)<0) return(0); return(statb.st_size>0); } synbad(s1,s2) char *s1, *s2; { write(2, "test: ", 6); write(2, s1, strlen(s1)); write(2, s2, strlen(s2)); write(2, "\n", 1); exit(255); } length(s) char *s; { char *es=s; while(*es++); return(es-s-1); } ' k~60i, /* * tee-- pipe fitting */ #include #include #include #include int openf[20] = { 1 }; int n = 1; int t = 0; int aflag; char in[512]; char out[512]; extern errno; long lseek(); main(argc,argv) char **argv; { int register r,w,p; struct stat buf; while(argc>1&&argv[1][0]=='-') { switch(argv[1][1]) { case 'a': aflag++; break; case 'i': case 0: signal(SIGINT, SIG_IGN); } argv++; argc--; } fstat(1,&buf); t = (buf.st_mode&S_IFMT)==S_IFCHR; if(lseek(1,0L,1)==-1&&errno==ESPIPE) t++; while(argc-->1) { if(aflag) { openf[n] = open(argv[1],1); if(openf[n] < 0) openf[n] = creat(argv[1],0666); lseek(openf[n++],0L,2); } else openf[n++] = creat(argv[1],0666); if(stat(argv[1],&buf)>=0) { if((buf.st_mode&S_IFMT)==S_IFCHR) t++; } else { puts("tee: cannot open "); puts(argv[1]); puts("\n"); n--; } argv++; } r = w = 0; for(;;) { for(p=0;p<512;) { if(r>=w) { if(t>0&&p>0) break; w = read(0,in,512); r = 0; if(w<=0) { stash(p); return; } } out[p++] = in[r++]; } stash(p); } } stash(p) { int k; int i; int d; d = t ? 16 : p; for(i=0; i #include #define oput(c) if (pgskip==0) putchar(c); else; #define MAXY 3071 #define US 037 #define GS 035 #define ESC 033 #define FF 014 #define DBL 0200 int pl = 11*144; int mpy = 1; int div = 1; char *ap; int ch; int nonumb; int psize = 10; int dfact = 1; int esc; int escd; int verd; int esct; int osize = 02; int size = 02; int rx; int xx; int yy = MAXY+62+48; int leadtot = -31; int ohy = -1; int ohx = -1; int oxb = -1; int oly = -1; int olx = -1; int tflag; int railmag; int lead; int skip; int pgskip; int ksize = ';'; int mcase; int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217}; int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18}; int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'}; int first = 1; int alpha; extern char *asctab[128]; extern char *spectab[128]; int erase = 1; int (*sigint)(); int (*sigquit)(); main(argc,argv) int argc; char **argv; { register i, j; register char *k; extern ex(); while((--argc > 0) && ((++argv)[0][0]=='-')){ switch(argv[0][1]){ case 'p': ap = &argv[0][2]; dfact = 72; if(i = atoi())pl = i/3; continue; case 't': tflag++; continue; case 's': ap = &argv[0][2]; dfact = 1; pgskip = atoi(); continue; default: dfact = 1; ap = &argv[0][1]; if(i = atoi())mpy = i; if(i = atoi())div = i; continue; } } if(argc){ if (freopen(argv[0], "r", stdin) == NULL) { fprintf(stderr, "tc: cannot open %s\n", argv[0]); exit(1); } } sigint = signal(SIGINT, ex); sigquit = signal(SIGQUIT, SIG_IGN); while((i = getchar()) != EOF){ if(!i)continue; if(i & 0200){ esc += (~i) & 0177; continue; } if(esc){ if(escd)esc = -esc; esct += esc; xx += (esc*mpy + rx)/div; rx = (esc*mpy + rx)%div; sendpt(); esc = 0; } switch(i){ case 0100: /*init*/ escd = verd = mcase = railmag = xx = 0; yy = MAXY + 48; leadtot = -31; ohy = oxb = oly = ohx = olx = -1; oput(US); fflush(stdout); if(!first && !tflag)kwait(); if(first){ first = 0; yy += 62; } init(); continue; case 0101: /*lower rail*/ railmag &= ~01; continue; case 0102: /*upper rail*/ railmag |= 01; continue; case 0103: /*upper mag*/ railmag |= 02; continue; case 0104: /*lower mag*/ railmag &= ~02; continue; case 0105: /*lower case*/ mcase = 0; continue; case 0106: /*upper case*/ mcase = 0100; continue; case 0107: /*escape forward*/ escd = 0; continue; case 0110: /*escape backward*/ escd = 1; continue; case 0111: /*stop*/ continue; case 0112: /*lead forward*/ verd = 0; continue; case 0113: /*undefined*/ continue; case 0114: /*lead backward*/ verd = 1; continue; case 0115: /*undefined*/ case 0116: case 0117: continue; } if((i & 0340) == 0140){ /*leading*/ lead = (~i) & 037; if(verd)lead = -lead; if((leadt((ot += lead) > pl){ leadtot = lead; oput(US); fflush(stdout); if(!tflag)kwait(); yy = MAXY; if(pgskip)--pgskip; init(); continue; } if(skip)continue; if((yy -= (lead<<1)) < 0){ skip++; yy = 0; }else sendpt(); continue; } if((i & 0360) == 0120){ /*size change*/ i &= 017; for(j = 0; i != (stab[j] & 017); j++); osize = size; size = stab[j]; psize = rtab[j]; ksize = ktab[j]; oput(ESC); oput(ksize); i = 0; if(!(osize & DBL) && (size & DBL))i = -55; else if((osize & DBL) && !(size & DBL))i = 55; if(escd)i = -i; esc += i; continue; } if(i & 0300)continue; i = (i & 077) | mcase; if(railmag != 03)k = asctab[i]; else k = spectab[i]; if(alpha)sendpt(); if(*k!='\0'){ oput(US); while(*k & 0377)oput(*k++); alpha++; continue; }else{ if(railmag != 03){ switch(i){ case 0124: lig("fi"); break; case 0125: lig("fl"); break; case 0126: lig("ff"); break; case 0130: lig("ffl"); break; case 0131: lig("ffi"); break; default: continue; } } continue; } } ex(); } lig(x) char *x; { register i, j; register char *k; j = 0; k = x; oput(US); oput(*k++); i = psize * 8 * mpy / (div * 6); /* 8/36 em */ while(*k){ xx += i; j += i; sendpt(); oput(US); oput(*k++); } xx -= j; sendpt(); } init(){ fflush(stdout); if(erase){ oput(ESC); oput(FF); }else erase = 1; oput(ESC); oput(ksize); /*delay about a second*/ /* let the system do it... for(i = 960; i > 0; i--)oput(GS); */ skip = 0; sendpt(); } ex(){ yy = MAXY; xx = 0; sendpt(); oput(ESC); oput(';'); oput(US); fflush(stdout); exit(0); } kwait(){ char buf[128]; char *bptr; char c; if(pgskip) return; next: bptr=buf; while((c=readch())&&(c!='\n')) *bptr++=c; *bptr=0; if(bptr!=buf){ bptr = buf; if(*bptr == '!'){callunix(&buf[1]); fputs("!\n", stderr); goto next;} else switch(*bptr++){ case 'e': erase = 0; goto next; case 's': ap = &buf[1]; dfact = 1; pgskip ='kV-twzi, atoi() + 1; goto next; default: fputs("?\n", stderr); goto next; } } else if (c==0) ex(); else return; } callunix(line) char line[]; { int rc, status, unixpid; if( (unixpid=fork())==0 ) { signal(SIGINT,sigint); signal(SIGQUIT,sigquit); close(0); dup(2); execl("/bin/sh", "-sh", "-c", line, 0); exit(255); } else if(unixpid == -1) return; else{ signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); while( (rc = wait(&status)) != unixpid && rc != -1 ) ; signal(SIGINT,ex); signal(SIGQUIT,sigquit); } } readch(){ char c; if (read(2,&c,1)<1) c=0; return(c); } sendpt(){ int hy,xb,ly,hx,lx; oput(GS); hy = ((yy>>7) & 037); xb = ((xx & 03) + ((yy<<2) & 014) & 017); ly = ((yy>>2) & 037); hx = ((xx>>7) & 037); lx = ((xx>>2) & 037); if(hy != ohy)oput(hy | 040); if(xb != oxb)oput(xb | 0140); if((ly != oly) || (hx != ohx) || (xb != oxb)) oput(ly | 0140); if(hx != ohx)oput(hx | 040); oput(lx | 0100); ohy = hy; oxb = xb; oly = ly; ohx = hx; olx = lx; alpha = 0; return; } atoi() { register i, j, acc; int field, digits; long dd; long tscale(); field = digits = acc = 0; a1: while(((j = (i = getch()) - '0') >= 0) && (j <= 9)){ field++; digits++; acc = 10*acc + j; } if(i == '.'){ field++; digits = 0; goto a1; } if(!(ch = i))ch = 'x'; dd = tscale(acc); acc = dd; if((field != digits) && (digits > 0)){ j = 1; while(digits--)j *= 10; acc = dd/j; } nonumb = !field; ch = 0; return(acc); } long tscale(n) int n; { register i, j; switch(i = getch()){ case 'u': j = 1; break; case 'p': /*Points*/ j = 6; break; case 'i': /*Inches*/ j = 432; break; case 'c': /*Centimeters; should be 170.0787*/ j = 170; break; case 'P': /*Picas*/ j = 72; break; default: j = dfact; ch = i; } return((long)n*j); } getch(){ register i; if(ch){ i = ch; ch = 0; return(i); } return(*ap++); } char *asctab[128] { "\0", /*blank*/ "h", /*h*/ "t", /*t*/ "n", /*n*/ "m", /*m*/ "l", /*l*/ "i", /*i*/ "z", /*z*/ "s", /*s*/ "d", /*d*/ "b", /*b*/ "x", /*x*/ "f", /*f*/ "j", /*j*/ "u", /*u*/ "k", /*k*/ "\0", /*blank*/ "p", /*p*/ "-", /*_ 3/4 em dash*/ ";", /*;*/ "\0", /*blank*/ "a", /*a*/ "_", /*rule*/ "c", /*c*/ "`", /*` open*/ "e", /*e*/ "\'", /*' close*/ "o", /*o*/ "\0", /*1/4*/ "r", /*r*/ "\0", /*1/2*/ "v", /*v*/ "-", /*- hyphen*/ "w", /*w*/ "q", /*q*/ "/", /*/*/ ".", /*.*/ "g", /*g*/ "\0", /*3/4*/ ",", /*,*/ "&", /*&*/ "y", /*y*/ "\0", /*blank*/ "%", /*%*/ "\0", /*blank*/ "Q", /*Q*/ "T", /*T*/ "O", /*O*/ "H", /*H*/ "N", /*N*/ "M", /*M*/ "L", /*L*/ "R", /*R*/ "G", /*G*/ "I", /*I*/ "P", /*P*/ "C", /*C*/ "V", /*V*/ "E", /*E*/ "Z", /*Z*/ "D", /*D*/ "B", /*B*/ "S", /*S*/ "Y", /*Y*/ "\0", /*blank*/ "F", /*F*/ "X", /*X*/ "A", /*A*/ "W", /*W*/ "J", /*J*/ "U", /*U*/ "K", /*K*/ "0", /*0*/ "1", /*1*/ "2", /*2*/ "3", /*3*/ "4", /*4*/ "5", /*5*/ "6", /*6*/ "7", /*7*/ "8", /*8*/ "9", /*9*/ "*", /***/ "-", /*minus*/ "", /*fi*/ "", /*fl*/ "", /*ff*/ "\033\016Z\bM\033\017", /*cent sign*/ "", /*ffl*/ "", /*ffi*/ "(", /*(*/ ")", /*)*/ "[", /*[*/ "]", /*]*/ "\033\016J\033\017", /*degree*/ "\033\016M\b_\033\017", /*dagger*/ "=", /*=*/ "\033\016O\b&\033\017", /*registered*/ ":", /*:*/ "+", /*+*/ "\0", /*blank*/ "!", /*!*/ "\033\016O\b~\033\017", /*bullet*/ "?", /*?*/ "\'", /*foot mark*/ "|", /*|*/ "\0", /*blank*/ "\033\016O\b#\033\017", /*copyright*/ "\033\016L\033\017", /*square*/ "$" }; /*$*/ char *spectab[128] = { "\0", /*blank*/ "\033\016(\bM\033\017", /*psi*/ "\033\016o\b_\033\017", /*theta*/ "v\b)", /*nu*/ "\033\016V\b,\033\017", /*mu*/ "\033\016)\b?\033\017", /*lambda*/ "\033\016I\033\017", /*iota*/ "S\b\033\016Z\033\017", /*zeta*/ "o\b\'", /*sigma*/ "o\b\033\0165\033\017", /*delta*/ "\033\016b\033\017", /*beta*/ "\033\016e\bc\033\017", /*xi*/ "j\b\033\016C\033\017", /*eta*/ "\033\016O\bM\033\017", /*phi*/ "\033\016(\033\017", /*upsilon*/ "\033\016k\033\017", /*kappa*/ "\0", /*blank*/ "T\b\033\016S\033\017", /*pi*/ "@", /*at-sign*/ "\033\016U\033\017", /*down arrow*/ "\0", /*blank*/ "\033\016A\033\017", /*alpha*/ "|", /*or*/ "l\b/", /*chi*/ "\"", /*"*/ "\033\016E\033\017", /*epsilon*/ "=", /*=*/ "\033\016O\033\017", /*omicron*/ "\033\016[\033\017", /*left arrow*/ "\033\016R\033\017", /*rho*/ "\033\016Y\033\017", /*up arrow*/ "\033\016N\033\017", /*tau*/ "_", /*underrule*/ "\\", /*\*/ "I\b\033\016(\033\017", /*Psi*/ "\033\016O\bJ\033\017", /*bell system sign*/ "\033\016W\bX\033\017", /*infinity*/ "`\b/", /*gamma*/ "\033\016X\bF\033\017", /*improper superset*/ "\033\016A\033\017", /*proportional to*/ "\033\016\\\b]\033\017", /*right hand*/ "\033\016W\033\017", /*omega*/ "\0", /*blank*/ "\033\016G\033\017", /*gradient*/ "\0", /*blank*/ "I\033\016\bO\033\017", /*Phi*/ "O\b=", /*Theta*/ "O\b_", /*Omega*/ "\033\016V\033\017", /*cup (union)*/ "\033\016@\033\017", /*root en*/ "s", /*terminal sigma*/ "\033\016)\bK\033\017", /*Lambda*/ "-", /*minus*/ "\033\016S\bK\033\017", /*Gamma*/ "\033\016i\033\017", /*integral sign*/ "\033\016t\b'\033\017", /*Pi*/ "\033\016Z\033\017", /*subset of*/ "\033\016X\033\017", /*superset of*/ "\033\016T\033\017", /*approximates*/ "o\b`", /*partial derivative*/ "\033\016H\033\017", /*Delta*/ "\033\016I\b'\033\017", /*square root*/ ">\b\033\016F\b@\033\017", /*Sigma*/ "\033\016T\bF\033\017", /*approx =*/ "\0", /*blank*/ ">", /*>*/ "\033\016_\bF\b@\033\017", /*Xi*/ "<", /*<*/ "/", /*slash (longer)*/ "\033\016C\033\017", /*cap (intersection)*/ "\033\016y\033\017", /*Upsilon*/ "\033\016|\033\017", /*not*/ "|", /*right ceiling (rt of ")*/ "|", /*left top (of big curly)*/ "|", /*bold vertical*/ "|", /*left center of big curly bracket*/ "|", /*left bottom*/ "|", /*right top*/ "|", /*right center of big curly bracket*/ "|", /*right bot*/ "|", /*right floor (rb of ")*/ "|", /*left floor (left bot of big sq bract)*/ "|", /*left ceiling (lt of ")*/ "\033\016=\033\017", /*multiply*/ "\033\016+\033\017", /*divide*/ "+\b_", /*plus-minus*/ "\033\016$\033\017", /*<=*/ "\033\016^\033\017", /*>=*/ "=\b_", /*identically equal*/ "\033\016*\033\017", /*not equal*/ "{", /*{*/ "}", /*}*/ "\'", /*' acute accent*/ "`", /*` grave accent*/ "^", /*^*/ "#", /*sharp*/ "\033\016|\b[\033\017", /*left hand*/ "\033\016c\b_\033\017", /*member of*/ "~", /*~*/ "\033\016O\b/\033\017", /*empty set*/ "\0", /*blank*/ "\033\016%\bM\033\017", /*dbl dagger*/ "|", /*box rule*/ "*", /*asterisk*/ "\033\016Z\bF\033\017", /*improper subset*/ "\033\016O\033\017", /*circle*/ "\0", /*blank*/ "+", /*eqn plus*/ "\033\016]\033\017", /*right arrow*/ "g\b\033\016C\033\017" }; /*section mark*/ 'kkehkQ # /* * rp03 disk driver */ #include #include #include "saio.h" struct device { int rpds; int rper; union { int w; char c; } rpcs; int rpwc; char *rpba; int rpca; int rpda; }; #define RPADDR ((struct device *) 0176710) #define GO 01 #define DONE 0200 #define RESET 0 #define HSEEK 014 #define IENABLE 0100 #define READY 0200 #define RCOM 4 #define WCOM 2 #define SUFU 01000 #define SUSU 02000 #define SUSI 04000 #define HNF 010000 rpstrategy(io, func) register s((truct iob *io; { int com,cn,tn,sn; /* dn = unit>>3; bn = bp->b_blkno; cn = bn/(20*10) + rp_sizes[unit&07].cyloff; */ cn = io->i_bn/(20*10); sn = io->i_bn%(20*10); tn = sn/10; sn = sn%10; RPADDR->rpcs.w = (io->i_unit<<8); RPADDR->rpda = (tn<<8) | sn; RPADDR->rpca = cn; RPADDR->rpba = io->i_ma; RPADDR->rpwc = -(io->i_cc>>1); com = (segflag<<4)|GO; if (func == READ) com |= RCOM; else com |= WCOM; RPADDR->rpcs.w |= com; while ((RPADDR->rpcs.w&DONE)==0) ; if (RPADDR->rpcs.w < 0) { /* error bit */ printf("disk error: cyl=%d track=%d sect=%d er=%o ds=%o\n", cn, tn, sn, RPADDR->rper, RPADDR->rpds); return(-1); } return(io->i_cc); } 'k fbVi main() { int c, i; char buf[50]; do { printf("File: "); gets(buf); i = open(buf, 0); } while (i <= 0); while ((c = getc(i)) > 0) putchar(c); exit(0); } 'k猴Y\_i #include #include #include #include #include #include char line[100]; main() { int i; segflag = 2; printf("Boot\n"); do { printf(": "); gets(line); i = open(line,0); } while (i < 0); copyunix(i); } copyunix(io) register io; { register addr,s; long phys; unsigned txtsiz,datsiz,bsssiz; int magic; lseek(io, (off_t)0, 0); magic = getw(io); txtsiz = getw(io); datsiz = getw(io); bsssiz = getw(io); switch (magic) { case 0411: setseg(0); lseek(io, (long)(020+txtsiz), 0); for(addr=0; addr!=datsiz; addr+=2) { mtpi(getw(io),addr); } clrseg(addr,bsssiz); phys = (long)datsiz + (long)bsssiz + 63L; phys =/ 64; setseg((int)phys); lseek(io, 020L, 0); for(addr=0; addr!=txtsiz; addr+=2) { mtpi(getw(io),addr); } return; case 0407: setseg(0); /* * space over the header. We do this instead of seeking * because the input might be a tape which doesn't know * how to seek. */ getw(io); getw(io); getw(io); getw(io); phys = txtsiz+datsiz; for (addr = 0; addr != phys; addr += 2) mtpi(getw(io),addr); clrseg(addr, bsssiz); return; default: printf("Can't load %o files\n", magic); exit(1); } } 'k MPSVQךך / Startup code for two-stage bootstrap / non-UNIX instructions mfpi = 6500^tst stst = 170300^tst mtpi = 6600^tst mfpd = 106500^tst mtpd = 106600^tst spl = 230 ldfps = 170100^tst stfps = 170200^tst wait = 1 rtt = 6 halt = 0 reset = 5 trap = 104400 .globl _end .globl _main start: reset mov $340,PS mov $140100,sp / set kernel I+D to physical 0 and IO page clr r1 mov $77406,r2 mov $KISA0,r3 mov $KISD0,r4 jsr pc,setseg mov $IO,-(r3) clr r1 mov $KDSA0,r3 mov $KDSD0,r4 jsr pc,setseg mov $IO,-(r3) / set user I+D to physical 64K (words) and IO page mov $4000,r1 mov $UISA0,r3 mov $UISD0,r4 jsr pc,setseg mov $IO,-(r3) mov $4000,r1 mov $UDSA0,r3 mov $UDSD0,r4 jsr pc,setseg mov $IO,-(r3) / enable map mov $65,SSR3 / 22-bit map bit $20,SSR3 beq 1f mov $3,MSCR 1: mov $30340,PS inc SSR0 / copy program to user I space mov $_end,r0 asr r0 clr r1 1: mov (r1),-(sp) mtpi (r1)+ sob r0,1b / continue execution in user space copy mov $140004,sp clr *$KDSA6 mov $140340,-(sp) mov $user,-(sp) rtt user: mov $_end+512.,sp mov sp,r5 jsr pc,_main trap br user setseg: mov $8,r0 1: mov r1,(r3)+ add $200,r1 mov r2,(r4)+ sob r0,1b rts pc .globl _setseg _setseg: mov 2(sp),r1 mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov $77406,r2 mov $KISA0,r3 mov $KISD0,r4 jsr pc,setseg mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 rts pc / clrseg(addr,count) .globl _clrseg _clrseg: mov 4(sp),r0 beq 2f asr r0 bic $!77777,r0 mov 2(sp),r1 1: clr -(sp) mtpi (r1)+ sob r0,1b 2: rts pc / mtpi(word,addr) .globl _mtpi _mtpi: mov 4(sp),r0 mov 2(sp),-(sp) mtpi (r0)+ rts pc .globl __rtt __rtt: halt PS = 177776 SSR0 = 177572 SSR1 = 177574 SSR2 = 177576 SSR3 = 172516 KISA0 = 172340 KISA1 = 172342 KISA7 = 172356 KISD0 = 172300 KISD7 = 172316 KDSA0 = 172360 KDSA6 = 172374 KDSA7 = 172376 KDSD0 = 172320 KDSD5 = 172332 SISA0 = 172240 SISA1 = 172242 SISD0 = 172200 SISD1 = 172202 UISA0 = 177640 UISD0 = 177600 UDSA0 = 177660 UDSD0 = 177620 MSCR = 017777746 / 11/70 memory control register IO = 177600 SWR = 177570 .data 'kno_GJ Ri /* * header file for standalone package */ /* * io block: includes an * inode, cells for the use of seek, etc, * and a buffer. */ struct iob { char i_flgs; struct inode i_ino; int i_unit; daddr_t i_boff; daddr_t i_cyloff; off_t i_offset; daddr_t i_bn; char *i_ma; int i_cc; char i_buf[512]; }; #define F_READ 01 #define F_WRITE 02 #define F_ALLOC 04 #define F_FILE 010 /* * dev switch */ struct devsw { char *dv_name; int (*dv_strategy)(); int (*dv_open)(); int (*dv_close)(); }; struct devsw devsw[]; /* * request codes. Must be the same a F_XXX above */ #define READ 1 #define WRITE 2 #define NBUFS 4 char b[NBUFS][512]; daddr_t blknos[NBUFS]; #define NFILES 4 struct iob iob[NFILES]; /* * Set to which 32Kw segment the code is physically running in. * Must be set by the users main (or there abouts). */ int segflag; '!k.GD_Wi cc -c -O -DSTANDALONE ../$1.c ld -s -o $1 srt0.o $1.o -lsa -lc rm $1.o '#k;>Ai ((#include #define MAXB 30 int mt; int fd; char buf[MAXB*512]; char name[50]; int blksz; main(argc, argv) int argc; char *argv[]; { int i, j, k; FILE *mf; if (argc != 3) { fprintf(stderr, "Usage: maketape tapedrive makefile\n"); exit(0); } if ((mt = creat(argv[1], 0666)) < 0) { perror(argv[1]); exit(1); } if ((mf = fopen(argv[2], "r")) == NULL) { perror(argv[2]); exit(2); } j = 0; k = 0; for (;;) { if ((i = fscanf(mf, "%s %d", name, &blksz))== EOF) exit(0); if (i != 2) { fprintf(stderr, "Help! Scanf didn't read 2 things (%d)\n", i); exit(1); } if (blksz <= 0 || blksz > MAXB) { fprintf(stderr, "Block size %d is invalid\n", blksz); continue; } if (strcmp(name, "*") == 0) { close(mt); mt = open(argv[1], 2); j = 0; k++; continue; } fd = open(name, 0); if (fd < 0) { perror(name); continue; } printf("%s: block %d, file %d\n", name, j, k); while (read(fd, buf, 512*blksz) > 0) { j++; write(mt, buf, 512*blksz); } } } ''k}588KW ٝ CFLAGS = -O all: /usr/lib/libsa.a srt0.o restor cat icheck mkfs mtboot maketape boot cp cmp: @echo "standalone stuff-- examine this makefile before running" xcp: all mkdir /stand cp restor cat mkfs icheck /stand rm restor cat mkfs icheck cp boot / rm boot rm *.o /usr/lib/libsa.a: SYS.o conf.o hp.o ht.o prf.o rk.o rp.o tm.o ar rv /usr/lib/libsa.a $? restor: srt0.o cc+ld-stand restor cat: srt0.o cc -c cat.c ld -s -o cat srt0.o cat.o -lsa -lc rm cat.o mkfs: srt0.o cc+ld-stand mkfs icheck: srt0.o cc+ld-stand icheck mtboot: mtboot.s as -o mtboot mtboot.s strip mtboot maketape: maketape.c cc -o maketape maketape.c boot: boot.o M.o ld -s -o boot M.o boot.o -lsa -lc distr: restor cat mkfs boot mtboot maketape maketape /dev/nrmt0 tapedir dump 0f /dev/nrmt0 /dev/rp11 dump 0f /dev/rmt0 /dev/rp13 rkdistr: restor cat mkfs boot mtboot maketape maketape /dev/nrmt0 rktapedir mv /v7/rp*unix /v7/hp*unix /v7/usr dump 0f /dev/nrmt0 /dev/rp11 mv /v7/usr/*unix /v7 cpgroup /v7/usr/src/cmd `cd /v7/usr/src/cmd; echo [a-m]*` dump 0f /dev/nrmt0 /dev/rrk2 cpgroup /v7/usr/src/cmd `cd /v7/usr/src/cmd; echo [n-z]*` dump 0f /dev/nrmt0 /dev/rrk2 cpgroup /v7/usr/src `cd /v7/usr/src/; echo [d-z]*` dump 0f /dev/nrmt0 /dev/rrk2 cpgroup /v7/usr lib dmr games include mdec pub spool tmp dump 0f /dev/nrmt0 /dev/rrk2 cpgroup /v7/usr doc dump 0f /dev/nrmt0 /dev/rrk2 cpgroup /v7/usr dict sys man dump 0f /dev/rmt0 /dev/rrk2 '+k*p&),/2Wi / tape boot program to load and transfer / the next item on the tape. / entry is made by jsr pc,*$0 / so return can be rts pc core = 24. halt=0 .. = [core*2048.]-512. start: mov $..,sp mov sp,r1 cmp pc,r1 bhis 2f clr r0 cmp (r0),$407 bne 1f mov $20,r0 1: mov (r0)+,(r1)+ cmp r1,$core*2048. blo 1b jmp (sp) 2: mov $1f,*$4 mov $340,*$6 tst *$htcs1 mov $htrew,rew mov $htread,tread br 2f 1: mov $tmread,tread mov $tmrew,rew 2: jsr pc,*rew mov $2,tapa mov $-256.,wc jsr pc,*tread mov *$2,r0 add *$4,r0 sub $512.,r0 asr r0 neg r0 bge 1f mov r0,wc mov $3,tapa mov $512.,ba jsr pc,*tread 1: jsr pc,*rew clr r0 mov $20,r1 mov sp,r4 clc ror r4 1: mov (r1)+,(r0)+ sob r4,1b jsr pc,*$0 br . htcs1 = 172440 htba = 172444 htfc = 172446 htcs2 = 172450 htds = 172452 httc = 172472 P800 = 1300 P1600 = 2300 PIP = 20000 RESET = 40 MOL = 10000 ERR = 40000 REV = 33 READ = 71 REW = 7 htread: 1: mov ba,mtma cmp mtapa,tapa beq 1f bhi 2f jsr pc,hrrec br 1b 2: jsr pc,htrew br 1b 1: mov wc,r1 1: jsr pc,hrrec add $256.,r1 bmi 1b rts pc hrrec: mov $htds,r0 tstb (r0) bpl hrrec bit $PIP,(r0) bne hrrec bit $MOL,(r0) beq hrrec mov $htfc,r0 mov $-512.,(r0) mov mtma,-(r0) mov $-256.,-(r0) mov $READ,-(r0) 1: tstb (r0) bpl 1b bit $ERR,(r0) bpl 1f mov $RESET,*$htcs2 mov $-1,*$htfc mov $REV,(r0) br hrrec 1: add $512.,mtma inc mtapa rts pc htrew: mov $RESET,*$htcs2 mov $P800,*$httc mov $REW,*$htcs1 clr mtapa rts pc mts = 172520 mtc = 172522 mtbrc = 172524 mtcma = 172526 tmread: 1: mov ba,mtma cmp mtapa,tapa beq 1f bhi 2f jsr pc,tmrrec br 1b 2: jsr pc,tmrew br 1b 1: mov wc,r1 1: jsr pc,tmrrec add $256.,r1 bmi 1b rts pc tmrrec: mov $mts,r0 bit $2,(r0)+ / rewind status bne tmrrec tstb (r0)+ / cu ready bpl tmrrec inc r0 mov $-512.,(r0)+ / byte count mov mtma,(r0) / bus address mov $mtc,r0 mov $60003,(r0) / read 800bpi 1: tstb (r0) bpl 1b tst (r0)+ bpl 1f mov $-1,(r0) mov $60013,-(r0) / backspace br tmrrec 1: add $512.,mtma inc mtapa rts pc tmrew: mov $60017,*$mtc clr mtapa rts pc mtapa: 0 mtma: 0 tapa: 0 wc: 0 ba: 0 rew: 0 tread: 0 '1k촁^i / Startup code for two-stage bootstrap / non-UNIX instructions mfpi = 6500^tst stst = 170300^tst mtpi = 6600^tst mfpd = 106500^tst mtpd = 106600^tst spl = 230 ldfps = 170100^tst stfps = 170200^tst wait = 1 rtt = 6 reset = 5 / trap = 104400 PS = 177776 .globl _end .globl _main, __rtt .globl _edata jmp start / / trap vectors / trap;340 trap;341 / illegal instruction trap;342 / BPT trap;343 / IOT trap;344 / POWER FAIL trap;345 / EMT tvec: start;346 / TRAP .=400^. .text start: mov $340,*$PS mov $trap,tvec / fix up stack segment clobbered by trap mov $1400,*$KDSA6 mov $157776,sp mov $_edata,r0 mov $_end,r1 sub r0,r1 inc r1 clc ror r1 1: clr (r0)+ sob r1,1b jsr pc,_main / fix up stack to point at trap ps-pc pair / so we can return to the bootstrap __rtt: clr *$KDSA6 mov $140000,sp rtt / we hope! br . .globl _trap trap: mov r0,-(sp) mov r1,-(sp) mov *$PS,-(sp) jsr pc,_trap tst (sp)+ mov (sp)+,r1 mov (sp)+,r0 rtt KDSA6 = 172374 '4keQ,, /* * RK disk driver */ #include #include #include "saio.h" #define RKADDR ((struct device *)0177400) #define NRK 4 #define NRKBLK 4872 #define RESET 0 #define WCOM 2 #define RCOM 4 #define GO 01 #define DRESET 014 #define IENABLE 0100 #define DRY 0200 #define ARDY 0100 #define WLO 020000 #define CTLRDY 0200 struct device { int rkds; int rker; int rkcs; int rkwc; caddr_t rkba; int rkda; }; rkstrategy(io, func) register struct iob *io; { register com; daddr_t bn; int dn, cn, sn; bn = io->i_bn; dn = io->i_unit; cn = bn/12; sn = bn%12; RKADDR->rkda = (dn<<13) | (cn<<4) | sn; RKADDR->rkba = io->i_ma; RKADDR->rkwc = -(io->i_cc>>1); com = (segflag<<4)|GO; if (func == READ) com |= RCOM; else com |= WCOM; RKADDR->rkcs = com; while ((RKADDR->rkcs&CTLRDY) == 0) ; if (RKADDR->rkcs<0) { /* error bit */ printf("disk error: cyl=%d, sector=%d, er=%o, ds=%o\n", cn, sn, RKADDR->rker, RKADDR->rkds); return(-1); } return(io->i_cc); } '7kt  Qi (( /* * Scaled down version of C Library printf. * Only %s %u %d (==%u) %o %x %D are recognized. * Used to print diagnostic information * directly on console tty. * Since it is not interrupt driven, * all system activities are pretty much * suspended. * Printf should not be used for chit-chat. */ printf(fmt, x1) register char *fmt; unsigned x1; { register c; register unsigned int *adx; char *s; adx = &x1; loop: while((c = *fmt++) != '%') { if(c == '\0') return; putchar(c); } c = *fmt++; if(c == 'd' || c == 'u' || c == 'o' || c == 'x') printn((long)*adx, c=='o'? 8: (c=='x'? 16:10)); else if(c == 's') { s = (char *)*adx; while(c = *s++) putchar(c); } else if (c == 'D') { printn(*(long *)adx, 10); adx += (sizeof(long) / sizeof(int)) - 1; } else if (c == 'c') putchar((char *)*adx); adx++; goto loop; } /* * Print an unsigned integer in base b. */ printn(n, b) long n; { register long a; if (n<0) { /* shouldn't happen */ putchar('-'); n = -n; } if(a = n/b) printn(a, b); putchar("0123456789ABCDEF"[(int)(n%b)]); } struct device { int rcsr,rbuf; int tcsr,tbuf; }; struct device *KLADDR {0177560}; putchar(c) register c; { register s; register unsigned timo; /* * If last char was a break or null, don't print if ((KLADDR->rbuf&0177) == 0) return; */ timo = 60000; /* * Try waiting for the console tty to come ready, * otherwise give up after a reasonable time. */ while((KLADDR->tcsr&0200) == 0) if(--timo == 0) break; if(c == 0) return; s = KLADDR->tcsr; KLADDR->tcsr = 0; KLADDR->tbuf = c; if(c == '\n') { putchar('\r'); putchar(0177); putchar(0177); } putchar(0); KLADDR->tcsr = s; } getchar() { register c; KLADDR->rcsr = 1; while((KLADDR->rcsr&0200)==0); c = KLADDR->rbuf&0177; if (c=='\r') c = '\n'; putchar(c); return(c); } gets(buf) char *buf; { register char *lp; register c; lp = buf; for (;;) { c = getchar() & 0177; if (c>='A' && c<='Z') c -= 'A' - 'a'; if (lp != buf && *(lp-1) == '\\') { lp--; if (c>='a' && c<='z') { c += 'A' - 'a'; goto store; } switch ( c) { case '(': c = '{'; break; case ')': c = '}'; break; case '!': c = '|'; break; case '^': c = '~'; break; case '\'': c = '`'; break; } } store: switch(c) { case '\n': case '\r': c = '\n'; *lp++ = '\0'; return; case '\b': case '#': lp--; if (lp < buf) lp = buf; continue; case '@': lp = buf; putchar('\n'); continue; default: *lp++ = c; } } } '>k;& UQPP /* * TJU16 tape driver */ #include #include #include "saio.h" struct device { int htcs1; int htwc; caddr_t htba; int htfc; int htcs2; int htds; int hter; int htas; int htck; int htdb; int htmr; int htdt; int htsn; int httc; int htbae; /* 11/70 bus extension */ int htcs3; }; #define HTADDR ((struct device *)0172440) #define GO 01 #define WCOM 060 #define RCOM 070 #define NOP 0 #define WEOF 026 #define SFORW 030 #define SREV 032 #define ERASE 024 #define REW 06 #define DCLR 010 #define CLR 040 #define P800 01300 /* 800 + pdp11 mode */ #define P1600 02300 /* 1600 + pdp11 mode */ #define IENABLE 0100 #define RDY 0200 #define TM 04 #define DRY 0200 #define EOT 02000 #define CS 02000 #define COR 0100000 #define PES 040 #define WRL 04000 #define MOL 010000 #define PIP 020000 #define ERR 040000 #define FCE 01000 #define TRE 040000 #define HARD 064023 /* UNS|OPI|NEF|FMT|RMR|ILR|ILF */ #define SIO 1 #define SSFOR 2 #define SSREV 3 #define SRETRY 4 #define SCOM 5 #define SOK 6 htopen(io) register struct iob *io; { register skip; int i; htstrategy(io, REW); skip = io->i_boff; while (skip--) { io->i_cc = -1; while (htstrategy(io, SFORW)) ; i = 0; while (--i) ; htstrategy(io, NOP); } } htclose(io) register struct iob *io; { htstrategy(io, REW); } htstrategy(io, func) register struct iob *io; { register unit, den, errcnt; unit = io->i_unit; errcnt = 0; retry: HTADDR->htcs2 = unit&03; if(unit > 3) den = P1600; else den = P800; htquiet(); if((HTADDR->httc&03777) != den) HTADDR->httc = den; HTADDR->htba = io->i_ma; HTADDR->htfc = -io->i_cc; HTADDR->htwc = -(io->i_cc>>1); den = ((segflag) << 8) | GO; if (func == READ) den =| RCOM; else if (func == WRITE) den =| WCOM; else if (func == SREV) { HTADDR->htfc = -1; HTADDR->htcs1 = den | SREV; return(0); } else den |= func; HTADDR->htcs1 = den; while ((HTADDR->htcs1&RDY) == 0) ; if (HTADDR->htds&TM) { htinit(); return(0); } if (HTADDR->htcs1&TRE) { if (errcnt == 0) printf("tape error: cs2=%o, er=%o", HTADDR->htcs2, HTADDR->hter); htinit(); if (errcnt == 10) { printf("\n"); return(-1); } errcnt++; htstrategy(io, SREV); goto retry; } if (errcnt) printf(" recovered by retry\n"); return(io->i_cc+HTADDR->htfc); } htinit() { int omt, ocs2; omt = HTADDR->httc & 03777; ocs2 = HTADDR->htcs2 & 07; HTADDR->htcs2 = CLR; HTADDR->htcs2 = ocs2; HTADDR->httc = omt; HTADDR->htcs1 = DCLR|GO; } htquiet() { while ((HTADDR->htcs1&RDY) == 0) ; while (HTADDR->htds&PIP) ; } 'Ek Q /* * RP04/RP06 disk driver */ #include #include #include "saio.h" struct device { union { int w; char c[2]; } hpcs1; /* Control and Status register 1 */ int hpwc; /* Word count register */ caddr_t hpba; /* UNIBUS address register */ int hpda; /* Desired address register */ union { int w; char c[2]; } hpcs2; /* Control and Status register 2*/ int hpds; /* Drive Status */ int hper1; /* Error register 1 */ int hpas; /* Attention Summary */ int hpla; /* Look ahead */ int hpdb; /* Data buffer */ int hpmr; /* Maintenance register */ int hpdt; /* Drive type */ int hpsn; /* Serial number */ int hpof; /* Offset register */ int hpdc; /* Desired Cylinder address register*/ int hpcc; /* Current Cylinder */ int hper2; /* Error register 2 */ int hper3; /* Error register 3 */ int hpec1; /* Burst error bit position */ int hpec2; /* Burst error bit pattern */ int hpbae; /* 11/70 bus extension */ int hpcs3; }; #define HPADDR ((struct device *)0176700) #define NSECT 22 #define NTRAC 19 #define SDIST 2 #define RDIST 6 #define P400 020 #define M400 0220 #define P800 040 #define M800 0240 #define P1200 060 #define M1200 0260 #define GO 01 #define PRESET 020 #define RTC 016 #define OFFSET 014 #define SEARCH 030 #define RECAL 06 #define DCLR 010 #define WCOM 060 #define RCOM 070 #define IE 0100 #define PIP 020000 #define DRY 0200 #define ERR 040000 #define TRE 040000 #define DCK 0100000 #define WLE 04000 #define ECH 0100 #define VV 0100 #define FMT22 010000 hpstrategy(io, func) register struct iob *io; { register unit; register i; daddr_t bn; int sn, cn, tn; if (((unit = io->i_unit) & 04) == 0) bn = io->i_bn; else { unit &= 03; bn = io->i_bn; bn -= io->i_boff; i = unit + 1; unit = bn%i; bn /= i; bn += io->i_boff; } HPADDR->hpcs2.w = unit; if((HPADDR->hpds & VV) == 0) { HPADDR->hpcs1.c[0] = PRESET|GO; HPADDR->hpof = FMT22; } cn = bn/(NSECT*NTRAC); sn = bn%(NSECT*NTRAC); tn = sn/NSECT; sn = sn%NSECT; HPADDR->hpdc = cn; HPADDR->hpda = (tn << 8) + sn; HPADDR->hpba = io->i_ma; HPADDR->hpwc = -(io->i_cc>>1); unit = (segflag << 8) | GO; if (func == READ) unit |= RCOM; else if (func == WRITE) unit |= WCOM; HPADDR->hpcs1.w = unit; while ((HPADDR->hpcs1.w&DRY) == 0) ; if (HPADDR->hpcs1.w & TRE) { printf("disk error: cyl=%d track=%d sect=%d cs2=%o, er1=%o\n", cn, tn, sn, HPADDR->hpcs2, HPADDR->hper1); return(-1); } return(io->i_cc); } 'Kk3ٴ0Qi  ((#include #include #include "saio.h" devread(io) register struct iob *io; { return( (*devsw[io->i_ino.i_dev].dv_strategy)(io,READ) ); } devwrite(io) register struct iob *io; { return( (*devsw[io->i_ino.i_dev].dv_strategy)(io, WRITE) ); } devopen(io) register struct iob *io; { (*devsw[io->i_ino.i_dev].dv_open)(io); } devclose(io) register struct iob *io; { (*devsw[io->i_ino.i_dev].dv_close)(io); } nullsys() { ; } int rpstrategy(); int rkstrategy(); int nullsys(); int tmstrategy(), tmrew(), tmopen(); int htstrategy(), htopen(),htclose(); int hpstrategy(); struct devsw devsw[] { "rp", rpstrategy, nullsys, nullsys, "hp", hpstrategy, nullsys, nullsys, "rk", rkstrategy, nullsys, nullsys, "tm", tmstrategy, tmopen, tmrew, "ht", htstrategy, htopen, htclose, 0,0,0,0 }; 'NkoH;Q #include #include #include #include #include #include "saio.h" int segflag = 0; static openi(n,io) register struct iob *io; { register struct dinode *dp; io->i_offset = 0; io->i_bn = (daddr_t)((n+15)/INOPB) + io->i_boff; io->i_cc = 512; io->i_ma = io->i_buf; devread(io); dp = io->i_buf; dp = &dp[(n-1)%INOPB]; io->i_ino.i_number = n; io->i_ino.i_mode = dp->di_mode; io->i_ino.i_size = dp->di_size; l3tol((char *)io->i_ino.i_un.i_addr,(char *)dp->di_addr,NADDR); } static find(path, file) register char *path; struct iob *file; { register char *q; char c; int n; if (path==NULL || *path=='\0') { printf("null path\n"); return(0); } openi((ino_t) 2, file); while (*path) { while (*path == '/') path++; q = path; while(*q != '/' && *q != '\0') q++; c = *q; *q = '\0'; if ((n=dlook(path, file))!=0) { if (c=='\0') break; openi(n, file); *q = c; path = q; continue; } else { printf("%s not found\n",path); return(0); } } return(n); } static daddr_t sbmap(io, bn) register struct iob *io; daddr_t bn; { register i; register struct inode *ip; int j, sh; daddr_t nb, *bap; ip = &io->i_ino;; if(bn < 0) { printf("bn negative\n"); return((daddr_t)0); } /* * blocks 0..NADDR-4 are direct blocks */ if(bn < NADDR-3) { i = bn; nb = ip->i_un.i_addr[i]; return(nb); } /* * addresses NADDR-3, NADDR-2, and NADDR-1 * have single, double, triple indirect blocks. * the first step is to determine * how many levels of indirection. */ sh = 0; nb = 1; bn -= NADDR-3; for(j=3; j>0; j--) { sh += NSHIFT; nb <<= NSHIFT; if(bn < nb) break; bn -= nb; } if(j == 0) { printf("bn ovf %D\n",bn); return((daddr_t)0); } /* * fetch the address from the inode */ nb = ip->i_un.i_addr[NADDR-j]; if(nb == 0) { printf("bn void %D\n",bn); return((daddr_t)0); } /* * fetch through the indirect blocks */ for(; j<=3; j++) { if (blknos[j] != nb) { io->i_bn = nb + io->i_boff; io->i_ma = b[j]; io->i_cc = 512; devread(io); blknos[j] = nb; } bap = b[j]; sh -= NSHIFT; i = (bn>>sh) & NMASK; nb = bap[i]; if(nb == 0) { printf("bn void %D\n",bn); return((daddr_t)0); } } return(nb); } static ino_t dlook(s, io) char *s; register struct iob *io; { register struct direct *dp; register struct inode *ip; daddr_t bn; int n,dc; if (s==NULL || *s=='\0') return(0); ip = &io->i_ino; if ((ip->i_mode&IFMT)!=IFDIR) { printf("not a directory\n"); return(0); } n = ip->i_size/sizeof(struct direct); if (n==0) { printf("zero length directory\n"); return(0); } dc = 512; bn = (daddr_t)0; while(n--) { if (++dc >= 512/sizeof(struct direct)) { io->i_bn = sbmap(io, bn++) + io->i_boff; io->i_ma = io->i_buf; io->i_cc = 512; devread(io); dp = io->i_buf; dc = 0; } if (match(s, dp->d_name)) return(dp->d_ino); dp++; } return(0); } static match(s1,s2) register char *s1,*s2; { register cc; cc = DIRSIZ; while (cc--) { if (*s1 != *s2) return(0); if (*s1++ && *s2++) continue; else return(1); } return(1); } lseek(fdesc, addr, ptr) int fdesc; off_t addr; int ptr; { register struct iob *io; if (ptr != 0) { printf("Seek not from beginning of file\n"); return(-1); } fdesc -= 3; if (fdesc < 0 || fdesc >= NFILES || ((io = &iob[fdesc])->i_flgs&F_ALLOC) == 0) return(-1); io->i_offset = addr; io->i_bn = addr/512 + io->i_boff; io->i_cc = 0; return(0); } getc(fdesc) int fdesc; { register struct iob *io; register char *p; register c; int off; if (fdesc >= 0 && fdesc <= 2) return(getchar()); fdesc -= 3; if (fdesc < 0 || fdesc >= NFILES || ((io = &iob[fdesc])->i_flgs&F_ALLOC) == 0) return(-1); p = io->i_ma; if (io->i_cc <= 0) { io->i_bn = io->i_offset/(off_t)512; if (io->i_flgs&F_FILE) io->i_bn = sbmap(io, io->i_bn) + io->i_boff; io->i_ma = io->i_buf; io->i_cc = 512; devread(io); if (io->i_flgs&F_FILE) { off = io->i_offset % (off_t)512; if (io->i_offset+(512-off) >= io->i_ino.i_size) io->i_cc = io->i_ino.i_size - io->i_offset + off; io->i_cc -= off; if (io->i_cc <= 0) return(-1); } else off = 0; p = &io->i_buf[off]; } io->i_cc--; io->i_offset++; c = (unsigned)*p++; io->i_ma = p; return(c); } getw(fdesc) int fdesc; { register w,i; register char *cp; int val; for (i = 0, val = 0, cp = &val; i < sizeof(val); i++) { w = getc(fdesc); if (w < 0) { if (i == 0) return(-1); else return(val); } *cp++ = w; } return(val); } read(fdesc, buf, count) int fdesc; char *buf; int count; { register i; register struct iob *file; if (fdesc >= 0 & fdesc <= 2) { i = count; do { *buf = getchar(); } while (--i && *buf++ != '\n'); return(count - i); } fdesc -= 3; if (fdesc < 0 || fdesc >= NFILES || ((file = &iob[fdesc])->i_flgs&F_ALLOC) == 0) return(-1); if ((file->i_flgs&F_READ) == 0) return(-1); if ((file->i_flgs&F_FILE) == 0) { file->i_cc = count; file->i_ma = buf; i = devread(file); file->i'YkJ;Q_bn++; return(i); } else { if (file->i_offset+count > file->i_ino.i_size) count = file->i_ino.i_size - file->i_offset; if ((i = count) <= 0) return(0); do { *buf++ = getc(fdesc+3); } while (--i); return(count); } } write(fdesc, buf, count) int fdesc; char *buf; int count; { register i; register struct iob *file; if (fdesc >= 0 && fdesc <= 2) { i = count; while (i--) putchar(*buf++); return(count); } fdesc -= 3; if (fdesc < 0 || fdesc >= NFILES || ((file = &iob[fdesc])->i_flgs&F_ALLOC) == 0) return(-1); if ((file->i_flgs&F_WRITE) == 0) return(-1); file->i_cc = count; file->i_ma = buf; i = devwrite(file); file->i_bn++; return(i); } open(str, how) char *str; int how; { register char *cp; int i; register struct iob *file; register struct devsw *dp; int fdesc; static first = 1; long atol(); if (first) { for (i = 0; i < NFILES; i++) iob[i].i_flgs = 0; first = 0; } for (fdesc = 0; fdesc < NFILES; fdesc++) if (iob[fdesc].i_flgs == 0) goto gotfile; _stop("No more file slots"); gotfile: (file = &iob[fdesc])->i_flgs |= F_ALLOC; for (cp = str; *cp && *cp != '('; cp++) ; if (*cp != '(') { printf("Bad device\n"); file->i_flgs = 0; return(-1); } *cp++ = '\0'; for (dp = devsw; dp->dv_name; dp++) { if (match(str, dp->dv_name)) goto gotdev; } printf("Unknown device\n"); file->i_flgs = 0; return(-1); gotdev: *(cp-1) = '('; file->i_ino.i_dev = dp-devsw; file->i_unit = *cp++ - '0'; if (file->i_unit < 0 || file->i_unit > 7) { printf("Bad unit specifier\n"); file->i_flgs = 0; return(-1); } if (*cp++ != ',') { badoff: printf("Missing offset specification\n"); file->i_flgs = 0; return(-1); } file->i_boff = atol(cp); for (;;) { if (*cp == ')') break; if (*cp++) continue; goto badoff; } devopen(file); if (*++cp == '\0') { file->i_flgs |= how+1; file->i_cc = 0; file->i_offset = 0; return(fdesc+3); } if ((i = find(cp, file)) == 0) { file->i_flgs = 0; return(-1); } if (how != 0) { printf("Can't write files yet.. Sorry\n"); file->i_flgs = 0; return(-1); } openi(i, file); file->i_offset = 0; file->i_cc = 0; file->i_flgs |= F_FILE | (how+1); return(fdesc+3); } close(fdesc) int fdesc; { struct iob *file; fdesc -= 3; if (fdesc < 0 || fdesc >= NFILES || ((file = &iob[fdesc])->i_flgs&F_ALLOC) == 0) return(-1); if ((file->i_flgs&F_FILE) == 0) devclose(file); file->i_flgs = 0; return(0); } exit() { _stop("Exit called"); } _stop(s) char *s; { printf("%s\n", s); _rtt(); } trap(ps) int ps; { printf("Trap %o\n", ps); for (;;) ; } (('`kQ RUU /* tail command * * tail where [file] * where is +_n[type] * - means n lines before end * + means nth line from beginning * type 'b' means tail n blocks, not lines * type 'c' means tail n characters * Type 'r' means in lines in reverse order from end * (for -r, default is entire buffer ) */ #include #include #include #define LBIN 4097 struct stat statb; char bin[LBIN]; int errno; main(argc,argv) char **argv; { long n,di; register i,j,k; char *p; int partial,piped,bylines,bkwds,fromend,lastnl; char *arg; lseek(0,(long)0,1); piped = errno==ESPIPE; arg = argv[1]; if(argc<=1 || *arg!='-'&&*arg!='+') { arg = "-10l"; argc++; argv--; } fromend = *arg=='-'; arg++; n = 0; while(digit(*arg)) n = n*10 + *arg++ - '0'; if(!fromend&&n>0) n--; if(argc>2) { close(0); if(open(argv[2],0)!=0) { write(2,"tail: can't open ",17); write(2,argv[2],strlen(argv[2])); write(2,"\n",1); exit(1); } } bylines = 0; bkwds = 0; switch(*arg) { case 'b': n <<= 9; break; case 'c': break; case 'r': if(n==0) n = LBIN; bkwds = 1; fromend = 1; bylines = 1; break; case '\0': case 'l': bylines = 1; break; default: goto errcom; } if(fromend) goto keep; /*seek from beginning */ if(bylines) { j = 0; while(n-->0) { do { if(j--<=0) { p = bin; j = read(0,p,512); if(j--<=0) exit(0); } } while(*p++ != '\n'); } write(1,p,j); } else if(n>0) { if(!piped) fstat(0,&statb); if(piped||(statb.st_mode&S_IFMT)==S_IFCHR) while(n>0) { i = n>512?512:n; i = read(0,bin,i); if(i<=0) exit(0); n -= i; } else lseek(0,n,0); } copy: while((i=read(0,bin,512))>0) write(1,bin,i); exit(0); /*seek from end*/ keep: if(n<=0) exit(0); if(!piped) { fstat(0,&statb); di = !bylines? n: LBIN-1; if(statb.st_size > di) lseek(0,-di,2); if(!bylines) goto copy; } partial = 1; for(;;) { i = 0; do { j = read(0,&bin[i],LBIN-i); if(j<=0) goto brka; i += j; } while(i=LBIN ? i+1: i-n+LBIN; k--; } else { if(bkwds && bin[i==0?LBIN-1:i-1]!='\n'){ /* force trailing newline */ bin[i]='\n'; if(++i>=LBIN) {i = 0; partial = 0;} } k = i; j = 0; do { lastnl = k; do { if(--k<0) { if(partial) { if(bkwds) write(1,bin,lastnl+1); goto brkb; } k = LBIN -1; } } while(bin[k]!='\n'&&k!=i); if(bkwds && j>0){ if(k=LBIN) k = 0; } while(bin[k]!='\n'&&k!=i); } if(k='0'&&c<='9'); } 'gk'G i, #include #include #define SP ' ' #define TB '\t' #define NL '\n' # define ESC 033 # define RHM 060 # define SI 017 # define DEL 0177 # define SET '1' # define CLR '2' # define MGN '9' # define CR '\r' # define BS '\b' struct sysnod { char *sysnam; int sysval; }; #define DASI300 1 #define DASI300S 2 #define DASI450 3 #define TN300 4 #define TTY37 5 #define HP 6 struct sysnod tty[] = { {"dasi300", DASI300}, {"300", DASI300}, {"dasi300s", DASI300S}, {"300s", DASI300S}, {"dasi450", DASI450}, {"450", DASI450}, {"37", TTY37}, {"tty37", TTY37}, {"tn300", TN300}, {"terminet", TN300}, {"tn", TN300}, {"hp", HP}, {0, 0}, }; int margset = 1; syslook(w) char *w; { register struct sysnod *sp; for (sp = tty; sp->sysnam!=NULL; sp++) if (strcmp(sp->sysnam, w)==0) return(sp->sysval); return(0); } main(argc,argv) int argc; char **argv; { struct sgttyb tb; int type; type=0; if (argc>=2 && strcmp(argv[1],"-n")==0) { margset--; argc--; argv++; } if (argc>=2) { type=syslook(argv[1]); } switch(type) { case DASI300: dasi300(); break; case DASI300S: dasi300(); break; case DASI450: dasi450(); break; case TN300: tn300(); break; case TTY37: tty37(); break; case HP: hp2645(); break; default: gtty (0, &tb); if ( (tb.sg_flags & (LCASE|CRMOD)) == CRMOD) { /* test for CR map on, upper case off, i.e. terminet but not 33 */ if ((tb.sg_ispeed) == B300) /* test for 300 baud */ misc(); } else if ((tb.sg_flags & (CRMOD|LCASE)) == 0 && (tb.sg_ispeed ) == B150) { /* apparent model 37 */ tty37(); } } } clear(n) { escape(CLR); delay(n); putchar(CR); nl(); } delay(n) { while (n--) putchar(DEL); } tabs(n) { int i,j; if(margset) n--; for( i=0; i main(argc,argv) char **argv; { register unsigned sum; register i, c; register FILE *f; register long nbytes; int errflg = 0; i = 1; do { if(i < argc) { if ((f = fopen(argv[i], "r")) == NULL) { fprintf(stderr, "sum: Can't open %s\n", argv[i]); errflg += 10; continue; } } else f = stdin; sum = 0; nbytes = 0; while ((c = getc(f)) != EOF) { nbytes++; if (sum&01) sum = (sum>>1) + 0x8000; else sum >>= 1; sum += c; sum &= 0xFFFF; } if (ferror(f)) { errflg++; fprintf(stderr, "sum: read error on %s\n", argc>1?argv[i]:"-"); } printf("%05u%6ld", sum, (nbytes+BUFSIZ-1)/BUFSIZ); if(argc > 2) printf(" %s", argv[i]); printf("\n"); fclose(f); } while(++i < argc); exit(errflg); } 'sk5_sux~aa ((#include #include struct passwd *pwd,*getpwnam(); char *crypt(); char *getpass(); char **environ; main(argc,argv) int argc; char **argv; { register char **p; char *nptr; char *password; int badsw = 0; char *shell = "/bin/sh"; if(argc > 1) nptr = argv[1]; else nptr = "root"; if((pwd=getpwnam(nptr)) == NULL) { printf("Unknown id: %s\n",nptr); exit(1); } if(pwd->pw_passwd[0] == '\0' || getuid() == 0) goto ok; password = getpass("Password:"); if(badsw || (strcmp(pwd->pw_passwd, crypt(password, pwd->pw_passwd)) != 0)) { printf("Sorry\n"); exit(2); } ok: endpwent(); setgid(pwd->pw_gid); setuid(pwd->pw_uid); if (pwd->pw_shell && *pwd->pw_shell) shell = pwd->pw_shell; for (p=environ; *p; p++) { if (strncmp("PS1=", *p, 4) == 0) { *p = "PS1=# "; break; } } execl(shell, "su", 0); printf("No shell\n"); exit(3); } 'vke3]`cfilor]i+ /* * set teletype modes */ #include #include struct { char *string; int speed; } speeds[] = { "0", B0, "50", B50, "75", B75, "110", B110, "134", B134, "134.5",B134, "150", B150, "200", B200, "300", B300, "600", B600, "1200", B1200, "1800", B1800, "2400", B2400, "4800", B4800, "9600", B9600, "exta", EXTA, "extb", EXTB, 0, }; struct { char *string; int set; int reset; } modes[] = { "even", EVENP, 0, "-even", 0, EVENP, "odd", ODDP, 0, "-odd", 0, ODDP, "raw", RAW, 0, "-raw", 0, RAW, "cooked", 0, RAW, "-nl", CRMOD, 0, "nl", 0, CRMOD, "echo", ECHO, 0, "-echo", 0, ECHO, "LCASE", LCASE, 0, "lcase", LCASE, 0, "-LCASE", 0, LCASE, "-lcase", 0, LCASE, "-tabs", XTABS, 0, "tabs", 0, XTABS, "cbreak", CBREAK, 0, "-cbreak", 0, CBREAK, "cr0", CR0, CR3, "cr1", CR1, CR3, "cr2", CR2, CR3, "cr3", CR3, CR3, "tab0", TAB0, XTABS, "tab1", TAB1, XTABS, "tab2", TAB2, XTABS, "nl0", NL0, NL3, "nl1", NL1, NL3, "nl2", NL2, NL3, "nl3", NL3, NL3, "ff0", FF0, FF1, "ff1", FF1, FF1, "bs0", BS0, BS1, "bs1", BS1, BS1, "33", CR1, ALLDELAY, "tty33", CR1, ALLDELAY, "37", FF1+CR2+TAB1+NL1, ALLDELAY, "tty37", FF1+CR2+TAB1+NL1, ALLDELAY, "05", NL2, ALLDELAY, "vt05", NL2, ALLDELAY, "tn", CR1, ALLDELAY, "tn300", CR1, ALLDELAY, "ti", CR2, ALLDELAY, "ti700", CR2, ALLDELAY, "tek", FF1, ALLDELAY, 0, }; char *arg; struct sgttyb mode; main(argc, argv) char *argv[]; { int i; gtty(1, &mode); if(argc == 1) { prmodes(); exit(0); } while(--argc > 0) { arg = *++argv; if (eq("ek")){ mode.sg_erase = '#'; mode.sg_kill = '@'; } if (eq("erase")) { if (**++argv == '^') mode.sg_erase = (*argv)[1] & 037; else mode.sg_erase = **argv; argc--; } if (eq("kill")) { if (**++argv == '^') mode.sg_kill = (*argv)[1] & 037; else mode.sg_kill = **argv; argc--; } if (eq("gspeed")) { mode.sg_ispeed = B300; mode.sg_ospeed = B9600; } if (eq("hup")) { ioctl(1, TIOCHPCL, NULL); } else for(i=0; speeds[i].string; i++) if(eq(speeds[i].string)) mode.sg_ispeed = mode.sg_ospeed = speeds[i].speed; for(i=0; modes[i].string; i++) if(eq(modes[i].string)) { mode.sg_flags &= ~modes[i].reset; mode.sg_flags |= modes[i].set; } if(arg) fprintf(stderr,"unknown mode: %s\n", arg); } stty(1,&mode); } eq(string) char *string; { int i; if(!arg) return(0); i = 0; loop: if(arg[i] != string[i]) return(0); if(arg[i++] != '\0') goto loop; arg = 0; return(1); } prmodes() { register m; if(mode.sg_ispeed != mode.sg_ospeed) { prspeed("input speed ", mode.sg_ispeed); prspeed("output speed ", mode.sg_ospeed); } else prspeed("speed ", mode.sg_ispeed); if (mode.sg_erase < ' ') fprintf(stderr, "erase = '^%c'; ", '@' + mode.sg_erase); else fprintf(stderr, "erase = '%c'; ", mode.sg_erase); if (mode.sg_kill < ' ') fprintf(stderr, "kill = '^%c'\n", '@' + mode.sg_kill); else fprintf(stderr, "kill = '%c'\n", mode.sg_kill); m = mode.sg_flags; if(m & EVENP) fprintf(stderr,"even "); if(m & ODDP) fprintf(stderr,"odd "); if(m & RAW) fprintf(stderr,"raw "); if(m & CRMOD) fprintf(stderr,"-nl "); if(m & ECHO) fprintf(stderr,"echo "); if(m & LCASE) fprintf(stderr,"lcase "); if((m & XTABS)==XTABS) fprintf(stderr,"-tabs "); if (m & CBREAK) fprintf(stderr,"cbreak "); delay((m&NLDELAY)/NL1, "nl"); if ((m&TBDELAY)!=XTABS) delay((m&TBDELAY)/TAB1, "tab"); delay((m&CRDELAY)/CR1, "cr"); delay((m&VTDELAY)/FF1, "ff"); delay((m&BSDELAY)/BS1, "bs"); fprintf(stderr,"\n"); } delay(m, s) char *s; { if(m) fprintf(stderr,"%s%d ", s, m); } int speed[] = { 0,50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,0,0 }; prspeed(c, s) char *c; { fprintf(stderr,"%s%d baud\n", c, speed[s]); } 'kV(QTWZBi+ #include #include char *tname; char *mktemp(); struct exec head; int a_magic[] = {A_MAGIC1, A_MAGIC2, A_MAGIC3, A_MAGIC4, 0}; int status; int tf; main(argc, argv) char *argv[]; { register i; signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); tname = mktemp("/tmp/sXXXXX"); close(creat(tname, 0600)); tf = open(tname, 2); if(tf < 0) { printf("cannot create temp file\n"); exit(2); } for(i=1; i 1) break; } close(tf); unlink(tname); exit(status); } strip(name) char *name; { register f; long size; int i; f = open(name, 0); if(f < 0) { printf("cannot open %s\n", name); status = 1; goto out; } read(f, (char *)&head, sizeof(head)); for(i=0;a_magic[i];i++) if(a_magic[i] == head.a_magic) break; if(a_magic[i] == 0) { printf("%s not in a.out format\n", name); status = 1; goto out; } if(head.a_syms == 0 && (head.a_flag&1) != 0) { printf("%s already stripped\n", name); goto out; } size = (long)head.a_text + head.a_data; head.a_syms = 0; head.a_flag |= 1; lseek(tf, (long)0, 0); write(tf, (char *)&head, sizeof(head)); if(copy(name, f, tf, size)) { status = 1; goto out; } size += sizeof(head); close(f); f = creat(name, 0666); if(f < 0) { printf("%s cannot recreate\n", name); status = 1; goto out; } lseek(tf, (long)0, 0); if(copy(name, tf, f, size)) status = 2; out: close(f); } copy(name, fr, to, size) char *name; long size; { register s, n; char buf[512]; while(size != 0) { s = 512; if(size < 512) s = size; n = read(fr, buf, s); if(n != s) { printf("%s unexpected eof\n", name); return(1); } n = write(to, buf, s); if(n != s) { printf("%s unexpected write eof\n", name); return(1); } size -= s; } return(0); } 'kꄀHKN)i+ #include unsigned count = 1000; int fnumber; char fname[100]; char *ifil; char *ofil; FILE *is; FILE *os; main(argc, argv) char *argv[]; { register i, c, f; int iflg = 0; for(i=1; i #define NP 1000 #define INF 1.e37 struct proj { int lbf,ubf; float a,b,lb,ub,quant,mult,val[NP]; } x,y; float *diag, *r; float dx = 1.; float ni = 100.; int n; int auta; int periodic; float konst = 0.0; float zero = 0.; /* Spline fit technique let x,y be vectors of abscissas and ordinates h be vector of differences h9i8=x9i8-x9i-1988 y" be vector of 2nd derivs of approx function If the points are numbered 0,1,2,...,n+1 then y" satisfies (R W Hamming, Numerical Methods for Engineers and Scientists, 2nd Ed, p349ff) h9i8y"9i-1988+2(h9i8+h9i+18)y"9i8+h9i+18y"9i+18 = 6[(y9i+18-y9i8)/h9i+18-(y9i8-y9i-18)/h9i8] i=1,2,...,n where y"908 = y"9n+18 = 0 This is a symmetric tridiagonal system of the form | a918 h928 | |y"918| |b918| | h928 a928 h938 | |y"928| |b928| | h938 a938 h948 | |y"938| = |b938| | . | | .| | .| | . | | .| | .| It can be triangularized into | d918 h928 | |y"918| |r918| | d928 h938 | |y"928| |r928| | d938 h948 | |y"938| = |r938| | . | | .| | .| | . | | .| | .| where d918 = a918 r908 = 0 d9i8 = a9i8 - h9i8829/d9i-18 1=0;){ /* back substitute */ end = i==n-1; hi1 = end?x.val[1]-x.val[0]: x.val[i+1]-x.val[i]; D2yi1 ='k*Ѵ!$'*-03i+ D2yi; if(i>0){ hi = x.val[i]-x.val[i-1]; corr = end?2*s+u:zero; D2yi = (r[i]-hi1*D2yi1-s*D2yn1+end*v)/ (diag[i]+corr); if(end) D2yn1 = D2yi; if(i>1){ a = 2*(hi+hi1); if(i==1) a += konst*hi; if(i==n-2) a += konst*hi1; d = diag[i-1]; s = -s*d/hi; }} else D2yi = D2yn1; if(!periodic) { if(i==0) D2yi = konst*D2yi1; if(i==n-2) D2yi1 = konst*D2yi; } if(end) continue; m = hi1>0?ni:-ni; m = 1.001*m*hi1/(x.ub-x.lb); if(m<=0) m = 1; h = hi1/m; for(j=m;j>0||i==0&&j==0;j--){ /* interpolate */ x0 = (m-j)*h/hi1; x1 = j*h/hi1; yy = D2yi*(x0-x0*x0*x0)+D2yi1*(x1-x1*x1*x1); yy = y.val[i]*x0+y.val[i+1]*x1 -hi1*hi1*yy/6; printf("%f ",x.val[i]+j*h); printf("%f\n",yy); } } return(1); } readin() { for(n=0;nlbf && p->lb>(p->val[i])) p->lb = p->val[i]; if(!p->ubf && p->ub<(p->val[i])) p->ub = p->val[i]; } } main(argc,argv) char *argv[];{ extern char *malloc(); int i; x.lbf = x.ubf = y.lbf = y.ubf = 0; x.lb = INF; x.ub = -INF; y.lb = INF; y.ub = -INF; while(--argc > 0) { argv++; again: switch(argv[0][0]) { case '-': argv[0]++; goto again; case 'a': auta = 1; numb(&dx,&argc,&argv); break; case 'k': numb(&konst,&argc,&argv); break; case 'n': numb(&ni,&argc,&argv); break; case 'p': periodic = 1; break; case 'x': if(!numb(&x.lb,&argc,&argv)) break; x.lbf = 1; if(!numb(&x.ub,&argc,&argv)) break; x.ubf = 1; break; default: fprintf(stderr, "Bad agrument\n"); exit(1); } } if(auta&&!x.lbf) x.lb = 0; readin(); getlim(&x); getlim(&y); i = (n+1)*sizeof(dx); diag = (float *)malloc((unsigned)i); r = (float *)malloc((unsigned)i); if(r==NULL||!spline()) for(i=0;i int tab[8] = {8,7,6,5,4,3,2,1}; int next; /*next output position on line*/ int slen; /*length at start of line*/ int alen; /*actual length*/ int elen; /*length on current line*/ char buf[256]; getit() { register int i; register c; slen=alen=elen=0; for(i=0;;i++) { buf[i]=c=getchar(); switch(c) { case '\n': if(i==0) continue; case EOF: alen=i; return(i); case '\t': elen+= tab[(next+elen)%8]; slen += tab[s((len%8]; continue; default: elen++; slen++; continue; } } } putit(ntab) { register int i; for(i=0;i1) { i=atoi(argv[1]); if(i<0) i= -i; len=(i<1?1:i); } else len=80; for(;;) { if(next==0) ntab=0; else if(tab[next%8]<1) { ntab=2; next+= tab[next%8]; next += tab[next%8]; } else { ntab=1; next += tab[next%8]; } if(getit()<=0) {clean(); exit(0);} if(elen+next>=len) { clean(); next=slen; putit(0); } else { next += elen; putit(ntab); } } } 'k)C=i+ #include #include #include #include #include #define L 512 #define N 7 #define C 20 #define MEM (16*2048) #define NF 10 FILE *is, *os; char *dirtry[] = {"/usr/tmp", "/tmp", NULL}; char **dirs; char file1[30]; char *file = file1; char *filep; int nfiles; unsigned nlines; unsigned ntext; int *lspace; char *tspace; int cmp(), cmpa(); int (*compare)() = cmpa; char *eol(); int term(); int mflg; int cflg; int uflg; char *outfil; int unsafeout; /*kludge to assure -m -o works*/ char tabchar; int eargc; char **eargv; char zero[256]; char fold[256] = { 0200,0201,0202,0203,0204,0205,0206,0207, 0210,0211,0212,0213,0214,0215,0216,0217, 0220,0221,0222,0223,0224,0225,0226,0227, 0230,0231,0232,0233,0234,0235,0236,0237, 0240,0241,0242,0243,0244,0245,0246,0247, 0250,0251,0252,0253,0254,0255,0256,0257, 0260,0261,0262,0263,0264,0265,0266,0267, 0270,0271,0272,0273,0274,0275,0276,0277, 0300,0301,0302,0303,0304,0305,0306,0307, 0310,0311,0312,0313,0314,0315,0316,0317, 0320,0321,0322,0323,0324,0325,0326,0327, 0330,0331,0332,0333,0334,0335,0336,0337, 0340,0341,0342,0343,0344,0345,0346,0347, 0350,0351,0352,0353,0354,0355,0356,0357, 0360,0361,0362,0363,0364,0365,0366,0367, 0370,0371,0372,0373,0374,0375,0376,0377, 0000,0001,0002,0003,0004,0005,0006,0007, 0010,0011,0012,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0024,0025,0026,0027, 0030,0031,0032,0033,0034,0035,0036,0037, 0040,0041,0042,0043,0044,0045,0046,0047, 0050,0051,0052,0053,0054,0055,0056,0057, 0060,0061,0062,0063,0064,0065,0066,0067, 0070,0071,0072,0073,0074,0075,0076,0077, 0100,0101,0102,0103,0104,0105,0106,0107, 0110,0111,0112,0113,0114,0115,0116,0117, 0120,0121,0122,0123,0124,0125,0126,0127, 0130,0131,0132,0133,0134,0134,0136,0137, 0140,0101,0102,0103,0104,0105,0106,0107, 0110,0111,0112,0113,0114,0115,0116,0117, 0120,0121,0122,0123,0124,0125,0126,0127, 0130,0131,0132,0173,0174,0175,0176,0177 }; char nofold[256] = { 0200,0201,0202,0203,0204,0205,0206,0207, 0210,0211,0212,0213,0214,0215,0216,0217, 0220,0221,0222,0223,0224,0225,0226,0227, 0230,0231,0232,0233,0234,0235,0236,0237, 0240,0241,0242,0243,0244,0245,0246,0247, 0250,0251,0252,0253,0254,0255,0256,0257, 0260,0261,0262,0263,0264,0265,0266,0267, 0270,0271,0272,0273,0274,0275,0276,0277, 0300,0301,0302,0303,0304,0305,0306,0307, 0310,0311,0312,0313,0314,0315,0316,0317, 0320,0321,0322,0323,0324,0325,0326,0327, 0330,0331,0332,0333,0334,0335,0336,0337, 0340,0341,0342,0343,0344,0345,0346,0347, 0350,0351,0352,0353,0354,0355,0356,0357, 0360,0361,0362,0363,0364,0365,0366,0367, 0370,0371,0372,0373,0374,0375,0376,0377, 0000,0001,0002,0003,0004,0005,0006,0007, 0010,0011,0012,0013,0014,0015,0016,0017, 0020,0021,0022,0023,0024,0025,0026,0027, 0030,0031,0032,0033,0034,0035,0036,0037, 0040,0041,0042,0043,0044,0045,0046,0047, 0050,0051,0052,0053,0054,0055,0056,0057, 0060,0061,0062,0063,0064,0065,0066,0067, 0070,0071,0072,0073,0074,0075,0076,0077, 0100,0101,0102,0103,0104,0105,0106,0107, 0110,0111,0112,0113,0114,0115,0116,0117, 0120,0121,0122,0123,0124,0125,0126,0127, 0130,0131,0132,0133,0134,0135,0136,0137, 0140,0141,0142,0143,0144,0145,0146,0147, 0150,0151,0152,0153,0154,0155,0156,0157, 0160,0161,0162,0163,0164,0165,0166,0167, 0170,0171,0172,0173,0174,0175,0176,0177 }; char nonprint[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }; char dict[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 }; struct field { char *code; char *ignore; int nflg; int rflg; int bflg[2]; int m[2]; int n[2]; } fields[NF]; struct field proto = { nofold+128, zero+128, 0, 1, 0,0, 0,-1, 0,0 }; int nfields; int error = 1; char *setfil(); char *sbrk(); char *brk(); main(argc, argv) char **argv; { register a; extern char end[1]; char *ep; char *arg; struct field *p, *q; int i; copyproto(); eargv = argv; while (--argc > 0) { if(**++argv == '-') for(arg = *argv;;) { switch(*++arg) { case '\0': if(arg[-1] == '-') eargv[eargc++] = "-"; break; case 'o': if(--argc > 0) outfil = *++argv; continue; case 'T': 'k$C=i+ if (--argc > 0) dirtry[0] = *++argv; continue; default: field(++*argv,nfields>0); break; } break; } else if (**argv == '+') { if(++nfields>=NF) { diag("too many keys",""); exit(1); } copyproto(); field(++*argv,0); } else eargv[eargc++] = *argv; } q = &fields[0]; for(a=1; a<=nfields; a++) { p = &fields[a]; if(p->code != proto.code) continue; if(p->ignore != proto.ignore) continue; if(p->nflg != proto.nflg) continue; if(p->rflg != proto.rflg) continue; if(p->bflg[0] != proto.bflg[0]) continue; if(p->bflg[1] != proto.bflg[1]) continue; p->code = q->code; p->ignore = q->ignore; p->nflg = q->nflg; p->rflg = q->rflg; p->bflg[0] = p->bflg[1] = q->bflg[0]; } if(eargc == 0) eargv[eargc++] = "-"; if(cflg && eargc>1) { diag("can check only 1 file",""); exit(1); } safeoutfil(); ep = end + MEM; lspace = (int *)sbrk(0); while((int)brk(ep) == -1) ep -= 512; brk(ep -= 512); /* for recursion */ a = ep - (char*)lspace; nlines = (a-L); nlines /= (5*(sizeof(char *)/sizeof(char))); ntext = nlines*8; tspace = (char *)(lspace + nlines); a = -1; for(dirs=dirtry; *dirs; dirs++) { sprintf(filep=file1, "%s/stm%05uaa", *dirs, getpid()); while (*filep) filep++; filep -= 2; if ( (a=creat(file, 0600)) >=0) break; } if(a < 0) { diag("can't locate temp",""); exit(1); } close(a); signal(SIGHUP, term); if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, term); signal(SIGPIPE,term); signal(SIGTERM,term); nfiles = eargc; if(!mflg && !cflg) { sort(); fclose(stdin); } for(a = mflg|cflg?0:eargc; a+N=nfiles) i = nfiles; newfile(); merge(a, i); } if(a != nfiles) { oldfile(); merge(a, nfiles); } error = 0; term(); } sort() { register char *cp; register char **lp; register c; int done; int i; char *f; done = 0; i = 0; c = EOF; do { cp = tspace; lp = (char **)lspace; while(lp < (char **)lspace+nlines && cp < tspace+ntext) { *lp++ = cp; while(c != '\n') { if(c != EOF) { *cp++ = c; c = getc(is); continue; } else if(is) fclose(is); if(i < eargc) { if((f = setfil(i++)) == 0) is = stdin; else if((is = fopen(f, "r")) == NULL) cant(f); c = getc(is); } else break; } *cp++ = '\n'; if(c == EOF) { done++; lp--; break; } c = getc(is); } qsort((char **)lspace, lp); if(done == 0 || nfiles != eargc) newfile(); else oldfile(); while(lp > (char **)lspace) { cp = *--lp; if(*cp) do putc(*cp, os); while(*cp++ != '\n'); } fclose(os); } while(done == 0); } struct merg { char l[L]; FILE *b; } *ibuf[256]; merge(a,b) { struct merg *p; register char *cp, *dp; register i; struct merg **ip, *jp; char *f; int j; int k, l; int muflg; p = (struct merg *)lspace; j = 0; for(i=a; i < b; i++) { f = setfil(i); if(f == 0) p->b = stdin; else if((p->b = fopen(f, "r")) == NULL) cant(f); ibuf[j] = p;(( if(!rline(p)) j++; p++; } do { i = j; qsort((char **)ibuf, (char **)(ibuf+i)); l = 0; while(i--) { cp = ibuf[i]->l; if(*cp == '\0') { l = 1; if(rline(ibuf[i])) { k = i; while(++k < j) ibuf[k-1] = ibuf[k]; j--; } } } } while(l); muflg = mflg & uflg | cflg; i = j; while(i > 0) { cp = ibuf[i-1]->l; if(!cflg && (uflg == 0 || muflg || (*compare)(ibuf[i-1]->l,ibuf[i-2]->l))) do putc(*cp, os); while(*cp++ != '\n'); if(muflg){ cp = ibuf[i-1]->l; dp = p->l; do { } while((*dp++ = *cp++) != '\n'); } for(;;) { if(rline(ibuf[i-1])) { i--; if(i == 0) break; if(i == 1) muflg = uflg; } ip = &ibuf[i]; while(--ip>ibuf&&(*compare)(ip[0]->l,ip[-1]->l)<0){ jp = *ip; *ip = *(ip-1); *(ip-1) = jp; } if(!muflg) break; j = (*compare)(ibuf[i-1]->l,p->l); if(cflg) { if(j > 0) disorder("disorder:",ibuf[i-1]->l); else if(uflg && j==0) disorder("nonunique:",ibuf[i-1]->l); } else if(j == 0) continue; break; } } p = (struct merg *)lspace; for(i=a; ib); p++; if(i >= eargc) unlink(setfil(i)); } fclose(os); } rline(mp) struct merg *mp; { register char *cp; register char *ce; FILE *bp; register c; bp = mp->b; cp = mp->l; ce = cp+L; do { c = getc(bp); if(c == EOF) return(1); if(cp>=ce) cp--; *cp++ = c; } while(c!='\n'); return(0); } disorder(s,t) char *s, *t; { register char *u; for(u=t; *u!='\n';u++) ; *u = 0; diag(s,t); term(); } newfile() { register char *f; f = setfil(nfiles); if((os=fopen(f, "w")) == NULL) { diag("can't create ",f); term(); } nfiles++; } char * setfil(i) { if(i < eargc) if(eargv[i][0] == '-' && eargv[i][1] == '\0') return(0); else return(eargv[i]); i -= eargc; filep[0] = i/26 + 'a'; filep[1] = i%26 + 'a'; return(file); } oldfile() { if(outfil) { if((os=fopen(outfil, "w")) == NULL) { diag("can't create ",outfil); term(); } } else os = stdout; } safeoutfil() { register int i; struct stat obuf,ibuf; if(!mflg||outfil==0) return; if(stat(outfil,&obuf)==-1) return; for(i=eargc-N;i0; k<=nfields; k++) { fp = &fields[k]; pa = i; pb = j; if(k) { la = skip(pa, fp, 1); pa = skip(pa, fp, 0); lb = skip(pb, fp, 1); pb = skip(pb, fp, 0); } else { la = eol(pa); lb = eol(pb); } if(fp->nflg) { while(blank(*pa)) pa++; while(blank(*pb)) pb++; sa = sb = fp->rflg; if(*pa == '-') { pa++; sa = -sa; } if(*pb == '-') { pb++; sb = -sb; } for(ipa = pa; ipa pa && ipb > pb) if(b = *--ipb - *--ipa) a = b; while(ipa > pa) if(*--ipa != '0') return(-sa); while(ipb > pb) if(*--ipb != '0') return(sb); if(a) return(a*sa); if(*(pa=jpa) == '.') pa++; if(*(pb=jpb) == '.') pb++; if(sa==sb) while(pacode; ignore = fp->ignore; loop: while(ignore[*pa]) pa++; while(ignore[*pb]) pb++; if(pa>=la || *pa=='\n') if(pbrflg); else continue; if(pb>=lb || *pb=='\n') return(-fp->rflg); if((sa = code[*pb++]-code[*pa++]) == 0) goto loop; return(sa*fp->rflg); } if(uflg) return(0); return(cmpa(i, j)); } cmpa(pa, pb) register char *pa, *pb; { while(*pa == *pb) { if(*pa++ == '\n') return(0); pb++; } return( *pa == '\n' ? fields[0].rflg: *pb == '\n' ?-fields[0].rflg: *pb > *pa ? fields[0].rflg: -fields[0].rflg ); } char * skip(pp, fp, j) struct field *fp; char *pp; { register i; register char *p; p = pp; if( (i=fp->m[j]) < 0) return(eol(p)); while(i-- > 0) { if(tabchar != 0) { while(*p != tabchar) if(*p != '\n') p++; else goto ret; p++; } else { while(blank(*p)) p++; while(!blank(*p)) if(*p != '\n') p++; else goto ret; } } if(fp->bflg[j]) while(blank(*p)) p++; i = fp->n[j]; while(i-- > 0) { if(*p != '\n') p++; else goto ret; } ret: return(p); } char * eol(p) register char *p; { while(*p != '\n') p++; return(p); } copyproto() { register i; register int *p, *q; p = (int *)&proto; q = (int *)&fields[nfields]; for(i=0; ibflg[k]++; break; case 'd': p->ignore = dict+128; break; case 'f': p->code = fold+128; break; case 'i': p->ignore = nonprint+128; break; case 'c': cflg = 1; continue; case 'm': mflg = 1; continue; case 'n': p->nflg++; break; case 't': tabchar = *++s; if(tabchar == 0) s--; continue; case 'r': p->rflg = -1; continue; case 'u': uflg = 1; break; case '.': if(p->m[k] == -1) /* -m.n with m missing */ p->m[k] = 0; d = &fields[0].n[0]-&fields[0].m[0]; default: p->m[k+d] = number(&s); } compare = cmp; } } number(ppa) char **ppa; { int n; register char *pa; pa = *ppa; n = 0; while(isdigit(*pa)) { n = n*10 + *pa - '0'; *ppa = pa++; } return(n); } blank(c) { if(c==' ' || c=='\t') return(1); return(0); } #define qsexc(p,q) t= *p;*p= *q;*q=t #define qstexc(p,q,r) t= *p;*p= *r;*r= *q;*q=t qsort(a,l) char **a, **l; { register char **i, **j; char **k; char **lp, **hp; int c; char *t; unsigned n; start: if((n=l-a) <= 1) return; n /= 2; hp = lp = a+n; i = a; j = l-1; for(;;) { if(i < lp) { if((c = (*compare)(*i, *lp)) == 0) { --lp; qsexc(i, lp); continue; } if(c < 0) { ++i; continue; } } loop: if(j > hp) { if((c = (*compare)(*hp, *j)) == 0) { ++hp; qsexc(hp, j); goto loop; } if(c > 0) { if(i == lp) { ++hp; qstexc(i, hp, j); i = ++lp; goto loop; } qsexc(i, j); --j; ++i; continue; } --j; goto loop; } if(i == lp) { if(uflg) for(k=lp+1; k<=hp;) **k++ = '\0'; if(lp-a >= l-hp) { qsort(hp+1, l); l = lp; } else { qsort(a, lp); a = hp+1; } goto start; } --lp; qstexc(j, lp, i); j = --hp; } } 'kہi+ main(argc, argv) char **argv; { int c, n; char *s; n = 0; if(argc < 2) { printf("arg count\n"); exit(0); } s = argv[1]; while(c = *s++) { if(c<'0' || c>'9') { printf("bad character\n"); exit(0); } n = n*10 + c - '0'; } sleep(n); } 'ks[cjcj /*modified for Commercial II*/ char CKw[256-32] { /*Century Bold Italic widths (CK)*/ 12, /*space*/ 14, /*!*/ 0, /*"*/ 0, /*#*/ 19, /*$*/ 31, /*%*/ 30, /*&*/ 10, /*' close*/ 18, /*(*/ 18, /*)*/ 18, /***/ 27, /*+*/ 10, /*,*/ 14, /*- hyphen*/ 10, /*.*/ 11, /*/*/ 19+0200, /*0*/ 19+0200, /*1*/ 19+0200, /*2*/ 19+0200, /*3*/ 19+0200, /*4*/ 19+0200, /*5*/ 19+0200, /*6*/ 19+0200, /*7*/ 19+0200, /*8*/ 19+0200, /*9*/ 13, /*:*/ 13, /*;*/ 0, /*<*/ 27, /*=*/ 0, /*>*/ 21, /*?*/ 0, /*@*/ 27+0200, /*A*/ 27+0200, /*B*/ 25+0200, /*C*/ 28+0200, /*D*/ 26+0200, /*E*/ 24+0200, /*F*/ 27+0200, /*G*/ 29+0200, /*H*/ 15+0200, /*I*/ 20+0200, /*J*/ 29+0200, /*K*/ 25+0200, /*L*/ 31+0200, /*M*/ 27+0200, /*N*/ 27+0200, /*O*/ 26+0200, /*P*/ 28+0300, /*Q*/ 29+0200, /*R*/ 22+0200, /*S*/ 25+0200, /*T*/ 28+0200, /*U*/ 25+0200, /*V*/ 35+0200, /*W*/ 26+0200, /*X*/ 27+0200, /*Y*/ 24+0200, /*Z*/ 14, /*[*/ 0, /*\*/ 14, /*]*/ 0, /*^*/ 0, /*_*/ 10, /*` open*/ 21, /*a*/ 19+0200, /*b*/ 18, /*c*/ 20+0200, /*d*/ 18, /*e*/ 14+((0200, /*f*/ 19+0100, /*g*/ 21+0200, /*h*/ 12+0200, /*i*/ 13+0300, /*j*/ 21+0200, /*k*/ 13+0200, /*l*/ 30, /*m*/ 21, /*n*/ 19, /*o*/ 20+0100, /*p*/ 20+0100, /*q*/ 15, /*r*/ 16, /*s*/ 14+0200, /*t*/ 21, /*u*/ 19, /*v*/ 27, /*w*/ 22, /*x*/ 20+0100, /*y*/ 17, /*z*/ 0, /*{*/ 5, /*|*/ 0, /*}*/ 0, /*~*/ 6, /*narrow space*/ 14, /*hyphen*/ 27, /*bullet*/ 27, /*square*/ 36, /*3/4 em*/ 18, /*rule*/ 31, /*1/4*/ 31, /*1/2*/ 31, /*3/4*/ 27, /*minus*/ 23, /*fi*/ 23, /*fl*/ 22, /*ff*/ 19, /*en*/ 33, /*paragraph*/ 15, /*degree*/ 19, /*dagger*/ 0, /*section*/ 8, /*foot mark*/ 0, /*'*/ 0, /*`*/ 0, /*_*/ 0, 3, /*half nar sp*/ 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 23, /*registered*/ 23, /*copywrite*/ 0, 19, /*cent*/ }; 'kbjbj /* * Century Schoolbook Italic-- Commercial II; name CI */ char XXw[256-32] { /*XX*/ 12, /*space*/ 14, /*!*/ 0, /*"*/ 0, /*#*/ 20, /*$*/ 22, /*%*/ 32, /*&*/ 9, /*' close*/ 14, /*(*/ 14, /*)*/ 18, /***/ 27, /*+*/ 9, /*,*/ 12, /*- hyphen*/ 9, /*.*/ 10, /*/*/ 20+0200, /*0*/ 20+0200, /*1*/ 20+0200, /*2*/ 20+0200, /*3*/ 20+0200, /*4*/ 20+0200, /*5*/ 20+0200, /*6*/ 20+0200, /*7*/ 20+0200, /*8*/ 20+0200, /*9*/ 12, /*:*/ 12, /*;*/ 0, /*<*/ 27, /*=*/ 0, /*>*/ 21, /*?*/ 0, /*@*/ 27+0200, /*A*/ 25+0200, /*B*/ 24+0200, /*C*/ 28+0200, /*D*/ 26+0200, /*E*/ 23+0200, /*F*/ 27+0200, /*G*/ 29+0200, /*H*/ 14+0200, /*I*/ 20+0200, /*J*/ 27+0200, /*K*/ 25+0200, /*L*/ 32+0200, /*M*/ 28+0200, /*N*/ 26+0200, /*O*/ 23+0200, /*P*/ 26+0300, /*Q*/ 27+0200, /*R*/ 21+0200, /*S*/ 24+0200, /*T*/ 28+0200, /*U*/ 27+0200, /*V*/ 34+0200, /*W*/ 26+0200, /*X*/ 27+0200, /*Y*/ 22+0200, /*Z*/ 12, /*[*/ 0, /*\*/ 12, /*]*/ 0, /*^*/ 0, /*_*/ 9, /*` open*/ 20, /*a*/ 20+0200, /*b*/ 16, /*c*/ 22+0200, /*d*/ 16, /*e*/ 12+0200, /*f*/ 18+0100, /*g*/ 21+0200, /*h*/ 11+0200, /*i*/ 11+0300, /*j*/ 20+0200, /*k*/ 12+0200, /*l*/ 31, /*m*/ 21, /*n*/ 18, /*o*/ 20+0100, /*p*/ 18+0100, /*q*/ 16, /*r*/ 15, /*s*/ 12+0200, /*t*/ 21, /*u*/ 18, /*v*/ 27, /*w*/ 18, /*x*/ 17+0100, /*y*/ 15, /*z*/ 0, /*{*/ 2, /*|*/ 0, /*}*/ 0, /*~*/ 6, /*narrow space*/ 12, /*hyphen*/ 27, /*bullet*/ 36, /*square*/ 36, /*3/4 em*/ 18, /*rule*/ 30, /*1/4*/ 30, /*1/2*/ 30, /*3/4*/ 27, /*minus*/ 21, /*fi*/ 21, /*fl*/ 21, /*ff*/ 29, /*ffi*/ 29, /*ffl*/ 16, /*degree*/ 19, /*dagger*/ 0, /*section*/ 9, /*foot mark*/ 0, /*'*/ 0, /*`*/ 0, /*_*/ 0,3, /*half nar sp*/ 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 21, /*registered*/ 21, /*copywrite*/ 0, 20, /*cent*/ 0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; 'kWGajaj /*modified for Commercial II*/ char Gw[256-32] { /*Geneva Regular widths*/ 12, /*space*/ 12, /*!*/ 0, /*"*/ 0, /*#*/ 23, /*$*/ 28, /*%*/ 25, /*&*/ 9, /*' close*/ 13, /*(*/ 13, /*)*/ 16, /***/ 36, /*+*/ 8, /*,*/ 15, /*- hyphen*/ 8, /*.*/ 15, /*/*/ 23+0200, /*0*/ 23+0200, /*1*/ 23+0200, /*2*/ 23+0200, /*3*/ 23+0200, /*4*/ 23+0200, /*5*/ 23+0200, /*6*/ 23+0200, /*7*/ 23+0200, /*8*/ 23+0200, /*9*/ 12, /*:*/ 12, /*;*/ 0, /*<*/ 36, /*=*/ 0, /*>*/ 25, /*?*/ 0, /*@*/ 25+0200, /*A*/ 26+0200, /*B*/ 27+0200, /*C*/ 26+0200, /*D*/ 24+0200, /*E*/ 22+0200, /*F*/ 29+0200, /*G*/ 27+0200, /*H*/ 11+0200, /*I*/ 20+0200, /*J*/ 26+0200, /*K*/ 22+0200, /*L*/ 32+0200, /*M*/ 27+0200, /*N*/ 29+0200, /*O*/ 24+0200, /*P*/ 29+0300, /*Q*/ 26+0200, /*R*/ 25+0200, /*S*/ 23+0200, /*T*/ 27+0200, /*U*/ 24+0200, /*V*/ 35+0200, /*W*/ 25+0200, /*X*/ 26+0200, /*Y*/ 23+0200, /*Z*/ 12, /*[*/ 0, /*\*/ 12, /*]*/ 0, /*^*/ 0, /*_*/ 9, /*` open*/ 21, /*a*/ 22+0200, /*b*/ 21, /*c*/ 22+0200, /*d*/ 21, /*e*/ 12+0200, /*f*/ 21+0100, /*g*/ 22+0200, /*h*/ 10+0200, /*i*/ 10+0300, /*j*/ 21+0200, /*k*/ 10+0200, /*l*/ 31, /*m*/ 22, /*n*/ 21, /*o*/ 22+0100, /*p*/ 22+0100, /*q*/ 14, /*r*/ 20, /*s*/ 12+0200, /*t*/ 22, /*u*/ 19, /*v*/ 28, /*w*/ 20, /*x*/ 20+0100, /*y*/ 18, /*z*/ 0, /*{*/ 2, /*|*/ 0, /*}*/ 0, /*~*/ 6, /*narrow space*/ 15, /*hyphen*/ 27, /*bullet*/ 36, /*square*/ 36, /*3/4 em*/ 18, /*rule*/ 30, /*1/4*/ 30, /*1/2*/ 30, /*3/4*/ 36, /*minus*/ 22, /*fi*/ 22, /*fl*/ 24, /*ff*/ 34, /*ffi*/ 34, /*ffl*/ 14, /*degree*/ 20, /*dagger*/ 0, /*section*/ 9, /*foot mark*/ 0, /*'*/ 0, /*`*/ 0, /*_*/ 0, 3, /*half nar sp*/ 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 21, /*registered*/ 21, /*copywrite*/ 0, 23, /*cent*/ }; 'kfL`j`j /*modified for Commercial II*/ char CEw[256-32] { /*Century Expanded widths*/ 12, /*space*/ 13, /*!*/ 0, /*"*/ 20, /*#*/ 18, /*$*/ 24, /*%*/ 27, /*&*/ 9, /*' close*/ 15, /*(*/ 15, /*)*/ 16, /***/ 27, /*+*/ 9, /*,*/ 14, /*- hyphen*/ 9, /*.*/ 12, /*/*/ 18+0200, /*0*/ 18+0200, /*1*/ 18+0200, /*2*/ 18+0200, /*3*/ 18+0200, /*4*/ 18+0200, /*5*/ 18+0200, /*6*/ 18+0200, /*7*/ 18+0200, /*8*/ 18+0200, /*9*/ 13, /*:*/ 13, /*;*/ 0, /*<*/ 27, /*=*/ 0, /*>*/ 19, /*?*/ 30, /*@*/ 28+0200, /*A*/ 25+0200, /*B*/ 25+0200, /*C*/ 27+0200, /*D*/ 26+0200, /*E*/ 25+0200, /*F*/ 26+0200, /*G*/ 29+0200, /*H*/ 15+0200, /*I*/ 20+0200, /*J*/ 28+0200, /*K*/ 25+0200, /*L*/ 32+0200, /*M*/ 29+0200, /*N*/ 25+0200, /*O*/ 24+0200, /*P*/ 26+0300, /*Q*/ 26+0200, /*R*/ 22+0200, /*S*/ 24+0200, /*T*/ 28+0200, /*U*/ 28+0200, /*V*/ 36+0200, /*W*/ 27+0200, /*X*/ 27+0200, /*Y*/ 24+0200, /*Z*/ 12, /*[*/ 0, /*\*/ 12, /*]*/ 0, /*^*/ 0, /*_*/ 9, /*` open*/ 18, /*a*/ 19+0200, /*b*/ 16, /*c*/ 19+0200, /*d*/ 17, /*e*/ 13+0200, /*f*/ 20+0100, /*g*/ 19+0200, /*h*/ 10+0200, /*i*/ 12+0300, /*j*/ 20+0200, /*k*/ 10+0200, /*l*/ 29, /*m*/ 19, /*n*/ 17, /*o*/ 19+0100, /*p*/ 19+0100, /*q*/ 16, /*r*/ 15, /*s*/ 14+0200, /*t*/ 19, /*u*/ 19, /*v*/ 27, /*w*/ 19, /*x*/ 20+0100, /*y*/ 17, /*z*/ 0, /*{*/ 5, /*|*/ 0, /*}*/ 0, /*~*/ 6, /*narrow space*/ 14, /*hyphen*/ 27, /*bullet*/ 27, /*square*/ 36, /*3/4 em*/ 18, /*rule*/ 24, /*1/4*/ 24, /*1/2*/ 24, /*3/4*/ 27, /*minus*/ 20, /*fi*/ 20, /*fl*/ 22, /*ff*/ 30, /*ffi*/ 30, /*ffl*/ 13, /*degree*/ 18, /*dagger*/ 0, /*section*/ 8, /*foot mark*/ 0, /*'*/ 0, /*`*/ 0, /*_*/ 0, 3, /*half nar sp*/ 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 20, /*registered*/ 20, /*copywrite*/ 0, 18, /*cent*/ }; 'kRӴt `j`j char Cw[256-32] { /*Comm I news Condensed made to look like II*/ 12, /*space*/ 8, /*!*/ 0, /*"*/ 0, /*#*/ 16, /*$*/ 24, /*%*/ 23, /*&*/ 8, /*' close*/ 11, /*(*/ 11, /*)*/ 14, /***/ 27, /*+*/ 8, /*,*/ 10, /*- hyphen*/ 8, /*.*/ 18, /*/*/ 16+0200, /*0*/ 16+0200, /*1*/ 16+0200, /*2*/ 16+0200, /*3*/ 16+0200, /*4*/ 16+0200, /*5*/ 16+0200, /*6*/ 16+0200, /*7*/ 16+0200, /*8*/ 16+0200, /*9*/ 8, /*:*/ 8, /*;*/ 0, /*<*/ 27, /*=*/ 0, /*>*/ 14, /*?*/ 0, /*@*/ 19+0200, /*A*/ 17+0200, /*B*/ 17+0200, /*C*/ 17+0200, /*D*/ 15+0200, /*E*/ 15+0200, /*F*/ 18+0200, /*G*/ 17+0200, /*H*/ 8+0200, /*I*/ 13+0200, /*J*/ 17+0200, /*K*/ 15+0200, /*L*/ 22+0200, /*M*/ 18+0200, /*N*/ 18+0200, /*O*/ 16+0200, /*P*/ 18+0300, /*Q*/ 17+0200, /*R*/ 17+0200, /*S*/ 17+0200, /*T*/ 17+0200, /*U*/ 17+0200, /*V*/ 24+0200, /*W*/ 16+0200, /*X*/ 17+0200, /*Y*/ 15+0200, /*Z*/ 10, /*[*/ 0, /*\*/ 10, /*]*/ 0, /*^*/ 0, /*_*/ 8, /*` open*/ 14, /*a*/ 15+0200, /*b*/ 14, /*c*/ 15+0200, /*d*/ 14, /*e*/ 11+0200, /*f*/ 14+0100, /*g*/ 1((4+0200, /*h*/ 8+0200, /*i*/ 8+0300, /*j*/ 14+0200, /*k*/ 8+0200, /*l*/ 22, /*m*/ 14, /*n*/ 15, /*o*/ 15+0100, /*p*/ 15+0100, /*q*/ 10, /*r*/ 14, /*s*/ 12+0200, /*t*/ 14, /*u*/ 14, /*v*/ 20, /*w*/ 13, /*x*/ 14+0100, /*y*/ 12, /*z*/ 0, /*{*/ 5, /*|*/ 0, /*}*/ 0, /*~*/ 6, /*narrow space*/ 10, /*hyphen*/ 27, /*bullet*/ 36, /*square*/ 36, /*3/4 em*/ 18, /*rule*/ 24, /*1/4*/ 24, /*1/2*/ 24, /*3/4*/ 27, /*minus*/ 18, /*fi*/ 18, /*fl*/ 20, /*ff*/ 18, /*ffi*/ 19, /*ffl*/ 15, /*degree*/ 19, /*dagger*/ 0, /*section*/ 9, /*foot mark*/ 0, /*'*/ 0, /*`*/ 0, /*_*/ 0,3, /*half nar sp*/ 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 0, /*registered*/ 0, /*copywrite*/ 0, 0, /*cent*/ 0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0}; 'k^(mpsvy|ZjZj Files in this directory form the C preprocessor, which handles '#include' files and macro definition and expansion for the C compiler. This new version was written by John F. Reiser and is from 5 to 12 times faster than the old. To create the executable file 'cpp' in the current directory: make To install the preprocessor 'cpp' so it will be used by the C compiler: : backup the existing version cp /lib/cpp /lib/ocpp : install the new version cp cpp /lib/cpp Documentation clarifications: Symbols defined on the command line by "-Dfoo" are defined as "1", i.e., as if they had been defined by "#define foo 1" or "-Dfoo=1". An unescaped linefeed (the single character "\n") terminates a character constant or quoted string. An escaped linefeed (the two-character sequence "\\\n") may be used in the body of a '#define' statement to continue the definition onto the next line. The escaped linefeed is not included in the macro body. Comments are uniformly removed. They are also ignored, except that a comment terminates a token. Thus "foo/* la di da */bar" may expand 'foo' and 'bar' but will never expand 'foobar'. If neither 'foo' nor 'bar' is a macro then the output is "foobar", even if 'foobar' is defined as something else. The file #define foo(a,b)b/**/a foo(1,2) produces "21" because the comment causes a break which enables the recognition of 'b' and 'a' as formals in the string "b/**/a". Macro formals are recognized even inside character constants and quoted strings. The output from #define foo(a) '\a' foo(bar) is the seven characters " '\\bar'". Macros are not expanded while processing a '#define' or '#undef'. Thus #define foo bletch #define bar foo #undef foo bar produces "foo". Macros are not expanded during the scan which determines the actual parameters to another macro call. Thus #define foo(a,b)b a #define bar hi foo(bar, #define bar bye ) produces " bye" (and warns about the redefinition of 'bar'). There are some differences between the new and the old preprocessor. Bugs fixed: "1.e4" is recognized as a floating-point number, rather than as an opportunity to expand the possible macro name "e4". Any kind and amount of white space (space, tab, linefeed, vertical tab, formfeed, carriage return) is allowed between a macro name and the left parenthesis which introduces its actual parameters. The comma operator is legal in preprocessor '#if' statements. Macros with parameters are legal in preprocessor '#if' statements. Single-character character constants are legal in preprocessor '#if' statements. Linefeeds are put out in the proper place when a multiline comment is not passed through to the output. The following example expands to "# # #" : #define foo # foo foo foo Recursion in macro definitions is strictly obeyed (to the extent that space is available). In particular, #define a a a causes an infinite loop with very little output. The tail recursion #define a a a causes the string "<>" to be output infinitely many times. The non-tail recursion #define a b> #define b a< a complains "too much pushback", dumps the pushback, and continues (again, infinitely). Stylistic choice: Nothing (not even linefeeds) is output while a false '#if', '#ifdef', or '#ifndef' is in effect. Thus when all conditions become true a line of the form "# 12345 foo.c" is output. Error and warning messages always appear on standard error (file descriptor 2). Mismatch between the number of formals and actuals in a macro call produces only a warning, and not an error. Excess actuals are ignored; missing actuals are turned into null strings. Incompatibility: The virgule '/' in "a=/*b" is interpreted as the first character of the pair "/*" which introduces a comment, rather than as the second character of the divide-and-replace operator "=/". This incompatibility reflects the recent change in the C language which made "a/=*b" the legal way to write such a statement if the meaning "a=a/ *b" is intended. 'k9ᴁdgj*ZjZj %term number stop DEFINED %term EQ NE LE GE LS RS %term ANDAND OROR %left ',' %right '=' %right '?' ':' %left OROR %left ANDAND %left '|' '^' %left '&' %binary EQ NE %binary '<' '>' LE GE %left LS RS %left '+' '-' %left '*' '/' '%' %right '!' '~' UMINUS %left '(' '.' %% S: e stop ={return($1);} e: e '*' e ={$$ = $1 * $3;} | e '/' e ={$$ = $1 / $3;} | e '%' e ={$$ = $1 % $3;} | e '+' e ={$$ = $1 + $3;} | e '-' e ={$$ = $1 - $3;} | e LS e ={$$ = $1 << $3;} | e RS e ={$$ = $1 >> $3;} | e '<' e ={$$ = $1 < $3;} | e '>' e ={$$ = $1 > $3;} | e LE e ={$$ = $1 <= $3;} | e GE e ={$$ = $1 >= $3;} | e EQ e ={$$ = $1 == $3;} | e NE e ={$$ = $1 != $3;} | e '&' e ={$$ = $1 & $3;} | e '^' e ={$$ = $1 ^ $3;} | e '|' e ={$$ = $1 | $3;} | e ANDAND e ={$$ = $1 && $3;} | e OROR e ={$$ = $1 || $3;} | e '?' e ':' e ={$$ = $1 ? $3 : $5;} | e ',' e ={$$ = $3;} | term ={$$ = $1;} term: '-' term %prec UMINUS ={$$ = -$1;} | '!' term ={$$ = !$1;} | '~' term ={$$ = ~$1;} | '(' e ')' ={$$ = $2;} | DEFINED '(' number ')' ={$$= $3;} | DEFINED number ={$$ = $2;} | number ={$$= $1;} %% # include "yylex.c" 'kp UX[^a5YjYj #define isid(a) ((fastab+COFF)[a]&IB) #define IB 1 /* #if '\377' < 0 it would be nice if this worked properly!!!!! */ #if pdp11 | vax #define COFF 128 #else #define COFF 0 #endif yylex() { static int ifdef=0; static char *op2[]={"||", "&&" , ">>", "<<", ">=", "<=", "!=", "=="}; static int val2[]={OROR, ANDAND, RS, LS, GE, LE, NE, EQ}; static char *opc="b\bt\tn\nf\fr\r\\\\"; extern char fastab[]; extern char *outp,*inp,*newp; extern int flslvl; register char savc, *s; char *skipbl(); int val; register char **p2; struct symtab { char *name; char *value; } *sp; for (;;) { newp=skipbl(newp); if (*inp=='\n') return(stop); /* end of #if */ savc= *newp; *newp='\0'; for (p2=op2+8; --p2>=op2; ) /* check 2-char ops */ if (0==strcmp(*p2,inp)) {val=val2[p2-op2]; goto ret;} s="+-*/%<>&^|?:!~(),"; /* check 1-char ops */ while (*s) if (*s++== *inp) {val= *--s; goto ret;} if (*inp<='9' && *inp>='0') {/* a number */ if (*inp=='0') yylval= (inp[1]=='x' || inp[1]=='X') ? tobinary(inp+2,16) : tobinary(inp+1,8); else yylval=tobinary(inp,10); val=number; } else if (isid(*inp)) { if (0==strcmp(inp,"defined")) {ifdef=1; ++flslvl; val=DEFINED;} else { sp=lookup(inp,-1); if (ifdef!=0) {ifdef=0; --flslvl;} yylval= (sp->value==0) ? 0 : 1; val=number; } } else if (*inp=='\'') {/* character constant */ val=number; if (inp[1]=='\\') {/* escaped */ char c; if (newp[-1]=='\'') newp[-1]='\0'; s=opc; while (*s) if (*s++!=inp[2]) ++s; else {yylval= *s; goto ret;} i((f (inp[2]<='9' && inp[2]>='0') yylval=c=tobinary(inp+2,8); else yylval=inp[2]; } else yylval=inp[1]; } else if (0==strcmp("\\\n",inp)) {*newp=savc; continue;} else { *newp=savc; pperror("Illegal character %c in preprocessor if", *inp); continue; } ret: *newp=savc; outp=inp=newp; return(val); } } tobinary(st, b) char *st; { int n, c, t; char *s; n=0; s=st; while (c = *s++) { switch(c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': t = c-'0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': t = c-'a'; if (b>10) break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': t = c - 'A'; if (b>10) break; default: t = -1; if ( c=='l' || c=='L') if (*s=='\0') break; pperror("Illegal number %s", st); } if (t<0) break; n = n*b+t; } return(n); } 'k,}XjXj # # include "stdio.h" /* C command /* written by John F. Reiser /* July/August 1978 */ #define STATIC #define STDIN 0 #define STDOUT 1 #define STDERR 2 #define READ 0 #define WRITE 1 #define SALT '#' #ifndef BUFSIZ #define BUFSIZ 512 #endif char *pbeg,*pbuf,*pend; char *outp,*inp; char *newp; char cinit; /* some code depends on whether characters are sign or zero extended */ /* #if '\377' < 0 not used here, old cpp doesn't understand */ #if pdp11 | vax #define COFF 128 #else #define COFF 0 #endif # if gcos #define ALFSIZ 512 /* alphabet size */ # else #define ALFSIZ 256 /* alphabet size */ # endif char macbit[ALFSIZ+11]; char toktyp[ALFSIZ]; #define BLANK 1 #define IDENT 2 #define NUMBR 3 /* a superimposed code is used to reduce the number of calls to the /* symbol table lookup routine. (if the kth character of an identifier /* is 'a' and there are no macro names whose kth character is 'a' /* then the identifier cannot be a macro name, hence there is no need /* to look in the symbol table.) 'scw1' enables the test based on /* single characters and their position in the identifier. 'scw2' /* enables the test based on adjacent pairs of characters and their /* position in the identifier. scw1 typically costs 1 indexed fetch, /* an AND, and a jump per character of identifier, until the identifier /* is known as a non-macro name or until the end of the identifier. /* scw1 is inexpensive. scw2 typically costs 4 indexed fetches, /* an add, an AND, and a jump per character of identifier, but it is also /* slightly more effective at reducing symbol table searches. /* scw2 usually costs too much because the symbol table search is /* usually short; but if symbol table search should become expensive, /* the code is here. /* using both scw1 and scw2 is of dubious value. */ #define scw1 1 #define scw2 0 #if scw2 char t21[ALFSIZ],t22[ALFSIZ],t23[ALFSIZ+8]; #endif #if scw1 #define b0 1 #define b1 2 #define b2 4 #define b3 8 #define b4 16 #define b5 32 #define b6 64 #define b7 128 #endif #define IB 1 #define SB 2 #define NB 4 #define CB 8 #define QB 16 #define WB 32 char fastab[ALFSIZ]; char slotab[ALFSIZ]; char *ptrtab; #define isslo (ptrtab==(slotab+COFF)) #define isid(a) ((fastab+COFF)[a]&IB) #define isspc(a) (ptrtab[a]&SB) #define isnum(a) ((fastab+COFF)[a]&NB) #define iscom(a) ((fastab+COFF)[a]&CB) #define isquo(a) ((fastab+COFF)[a]&QB) #define iswarn(a) ((fastab+COFF)[a]&WB) #define eob(a) ((a)>=pend) #define bob(a) (pbeg>=(a)) char buffer[8+BUFSIZ+BUFSIZ+8]; # define SBSIZE 12000 char sbf[SBSIZE]; char *savch = sbf; # define DROP 0xFE /* special character not legal ASCII or EBCDIC */ # define WARN DROP # define SAME 0 # define MAXINC 10 # define MAXFRE 14 /* max buffers of macro pushback */ # define MAXFRM 31 /* max number of formals/actuals to a macro */ static char warnc = WARN; int mactop,fretop; char *instack[MAXFRE],*bufstack[MAXFRE],*endbuf[MAXFRE]; int plvl; /* parenthesis level during scan for macro actuals */ int maclin; /* line number of macro call requiring actuals */ char *macfil; /* file name of macro call requiring actuals */ char *macnam; /* name of macro requiring actuals */ int maclvl; /* # calls since last decrease in nesting level */ char *macforw; /* pointer which must be exceeded to decrease nesting level */ int macdam; /* offset to macforw due to buffer shifting */ #if tgp int tgpscan; /* flag for dump(); */ #endif STATIC int inctop[MAXINC]; STATIC char *fnames[MAXINC]; STATIC char *dirnams[MAXINC]; /* actual directory of #include files */ STATIC int fins[MAXINC]; STATIC int lineno[MAXINC]; STATIC char *dirs[10]; /* -I and <> directories */ char *strdex(), *copy(), *subst(), *trmdir(); struct symtab *stsym(); STATIC int fin = STDIN; STATIC FILE *fout = stdout; STATIC int nd = 1; STATIC int pflag; /* don't put out lines "# 12 foo.c" */ STATIC int passcom; /* don't delete comments */ STATIC int rflag; /* allow macro recursion */ STATIC int ifno; # define NPREDEF 20 STATIC char *prespc[NPREDEF]; STATIC char **predef = prespc; STATIC char *punspc[NPREDEF]; STATIC char **prund = punspc; STATIC int exfail; struct symtab { char *name; char *value; } *lastsym, *lookup(), *slookup(); # if gcos #include static jmp_buf env; # define main mainpp # undef exit # define exit(S) longjmp(env, 1) # define open(S,D) fileno(fopen(S, "r")) # define close(F) fclose(_f[F]) extern FILE *_f[]; # define symsiz 500 # else # define symsiz 400 # endif STATIC struct symtab stab[symsiz]; STATIC struct symtab *defloc; STATIC struct symtab *udfloc; STATIC struct symtab *incloc; STATIC struct symtab *ifloc; STATIC struct symtab *elsloc; STATIC struct symtab *eifloc; STATIC struct symtab *ifdloc; STATIC struct symtab *ifnloc; STATIC struct symtab *ysysloc; STATIC struct symtab *varloc; STATIC struct symtab *lneloc; STATIC struct symtab *ulnloc; STATIC struct symtab *uflloc; STATIC int trulvl; STATIC int flslvl; sayline() { if (pflag==0) fprintf(fout,"# %d \"%s\"\n", lineno[ifno], fnames[ifno]); } /* data structure guide /* /* most of the scanning takes place in the buffer: /* /* (low address) 'k봁}XjXj (high address) /* pbeg pbuf pend /* | <-- BUFSIZ chars --> | <-- BUFSIZ chars --> | /* _______________________________________________________________________ /* |_______________________________________________________________________| /* | | | /* |<-- waiting -->| |<-- waiting --> /* | to be |<-- current -->| to be /* | written | token | scanned /* | | | /* outp inp p /* /* *outp first char not yet written to output file /* *inp first char of current token /* *p first char not yet scanned /* /* macro expansion: write from *outp to *inp (chars waiting to be written), /* ignore from *inp to *p (chars of the macro call), place generated /* characters in front of *p (in reverse order), update pointers, /* resume scanning. /* /* symbol table pointers point to just beyond the end of macro definitions; /* the first preceding character is the number of formal parameters. /* the appearance of a formal in the body of a definition is marked by /* 2 chars: the char WARN, and a char containing the parameter number. /* the first char of a definition is preceded by a zero character. /* /* when macro expansion attempts to back up over the beginning of the /* buffer, some characters preceding *pend are saved in a side buffer, /* the address of the side buffer is put on 'instack', and the rest /* of the main buffer is moved to the right. the end of the saved buffer /* is kept in 'endbuf' since there may be nulls in the saved buffer. /* /* similar action is taken when an 'include' statement is processed, /* except that the main buffer must be completely emptied. the array /* element 'inctop[ifno]' records the last side buffer saved when /* file 'ifno' was included. these buffers remain dormant while /* the file is being read, and are reactivated at end-of-file. /* /* instack[0 : mactop] holds the addresses of all pending side buffers. /* instack[inctop[ifno]+1 : mactop-1] holds the addresses of the side /* buffers which are "live"; the side buffers instack[0 : inctop[ifno]] /* are dormant, waiting for end-of-file on the current file. /* /* space for side buffers is obtained from 'savch' and is never returned. /* bufstack[0:fretop-1] holds addresses of side buffers which /* are available for use. */ dump() { /* write part of buffer which lies between outp and inp . /* this should be a direct call to 'write', but the system slows to a crawl /* if it has to do an unaligned copy. thus we buffer. this silly loop /* is 15% of the total time, thus even the 'putc' macro is too slow. */ register char *p1,*p2; register FILE *f; if ((p1=outp)==inp || flslvl!=0) return; #if tgp #define MAXOUT 80 if (!tgpscan) {/* scan again to insure <= MAXOUT chars between linefeeds */ register char c,*pblank; char savc,stopc,brk; tgpscan=1; br((k=stopc=pblank=0; p2=inp; savc= *p2; *p2='\0'; while (c= *p1++) { if (c=='\\') c= *p1++; if (stopc==c) stopc=0; else if (c=='"' || c=='\'') stopc=c; if (p1-outp>MAXOUT && pblank!=0) { *pblank++='\n'; inp=pblank; dump(); brk=1; pblank=0; } if (c==' ' && stopc==0) pblank=p1-1; } if (brk) sayline(); *p2=savc; inp=p2; p1=outp; tgpscan=0; } #endif f=fout; # if gcos /* filter out "$ program c" card if first line of input */ /* gmatch is a simple pattern matcher in the GCOS Standard Library */ { static int gmfirst = 0; if (!gmfirst) { ++gmfirst; if (gmatch(p1, "^$*program[ \t]*c*")) p1 = strdex(p1, '\n'); } } # endif while (p1inctop[ifno]) {/* retrieve hunk of pushed-back macro text */ op=instack[--mactop]; np=pbuf; do {while (*np++= *op++);} while (op=0) *np++=')'; /* supply missing parens */ pend=np; *np='\0'; if (plvl<0) plvl=0; return(p); } inp=p; dump(); exit(exfail); } close(fin); fin=fins[--ifno]; dirs[0]=dirnams[ifno]; sayline(); } } } #define BEG 0 #define LF 1 char * cotoken(p) register char *p; { register int c,i; char quoc; static int state = BEG; if (state!=BEG) goto prevlf; for (;;) { again: while (!isspc(*p++)); switch (*(inp=p-1)) { case 0: { if (eob(--p)) {p=refill(p); goto again;} else ++p; /* ignore null byte */ } break; case '|': case '&': for (;;) {/* sloscan only */ if (*p++== *inp) break; if (eob(--p)) p=refill(p); else break; } break; case '=': case '!': for (;;) {/* sloscan only */ if (*p++=='=') break; if (eob(--p)) p=refill(p); else break; } break; case '<': case '>': for (;;) {/* sloscan only */ if (*p++=='=' || p[-2]==p[-1]) break; if (eob(--p)) p=refill(p); else break; } break; case '\\': for (;;) { if (*p++=='\n') {++lineno[ifno]; break;} if (eob(--p)) p=refill(p); else {++p; break;} } break; case '/': for (;;) { if (*p++=='*') {/* comment */ if (!passcom) {inp=p-2; dump(); ++flslvl;} for (;;) { while (!iscom(*p++)); if (p[-1]=='*') for (;;) { if (*p++=='/') goto endcom; if (eob(--p)) { if (!passcom) {inp=p; p=refill(p);} else if ((p-inp)>=BUFSIZ) {/* split long comment */ inp=p; p=refill(p); /* last char written is '*' */ putc('/',fout); /* terminate first part */ /* and fake start of 2nd */ outp=inp=p-=3; *p++='/'; *p++='*'; *p++='*'; } else p=refill(p); } else break; } else if (p[-1]=='\n') { ++lineno[ifno]; if (!passcom) putc('\n',fout); } else if (eob(--p)) { if (!passcom) {inp=p; p=refill(p);} else if ((p-inp)>=BUFSIZ) {/* split long comment */ inp=p; p=refill(p); putc('*',fout); putc('/',fout); outp=inp=p-=2; *p++='/'; *p++='*'; } else p=refill(p); } else ++p; /* ignore null byte */ } endcom: if (!passcom) {outp=inp=p; --flslvl; goto again;} break; } if (eob(--p)) p=refill(p); else break; } break; # if gcos case '`': # endif case '"': case '\'': { quoc=p[-1]; for (;;) { while (!isquo(*p++)); if (p[-1]==quoc) break; if (p[-1]=='\n') {--p; break;} /* bare \n terminates quotation */ if (p[-1]=='\\') for (;;) { if (*p++=='\n') {++lineno[ifno]; break;} /* escaped \n ignored */ if (eob(--p)) p=refill(p); else {++p; break;} } else if (eob(--p)) p=refill(p); else ++p; /* it was a different quote character */ } } break; case '\n': { ++lineno[ifno]; if (isslo) {state=LF; return(p);} prevlf: state=BEG; for (;;) { if (*p++=='#') return(p); if (eob(inp= --p)) p=refill(p); else goto again; } } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': for (;;) { while (isnum(*p++)); if (eob(--p)) p=refill(p); else break; } break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': #if scw1 #define tmac1(c,bit) if (!xmac1(c,bit,&)) goto nomac #define xmac1(c,bit,op) ((macbit+COFF)[c] op (bit)) #else #define tmac1(c,bit) #define xmac1(c,bit,op) #endif #if scw2 #define tmac2(c0,c1,cpos) if (!xmac2(c0,c1,cpos,&)) goto nomac #define xmac2(c0,c1,cpos,op)\ ((macbit+COFF)[(t21+COFF)[c0]+(t22+COFF)[c1]] op (t23+COFF+cpos)[c0]) #else #define tmac2(c0,c1,cpos) #define xmac2(c0,c1,cpos,op) #endif if (flslvl) goto nomac; for (;;) { c= p[-1]; tmac1(c,b0); i= *p++; if (!isid(i)) goto endid; tmac1(i,b1); tmac2(c,i,0); c= *p++; if (!isid(c)) goto endid; tmac1(c,b2); tmac2(i,c,1); i= *p++; if (!isid(i)) goto endid; tmac1(i,b3); tmac2(c,i,2); c= *p++; if (!isid(c)) goto endid; tmac1(c,b4); tmac2(i,c,3); i= *p++; if (!isid(i)) goto endid; tmac1(i,b5); tmac2(c,i,4); c= *p++; if (!isid(c)) goto endid; tmac1(c,b6); tmac2(i,c,5); i= *p++; if (!isid(i)) goto endid; tmac1(i,b7); tmac2(c,i,6); tmac2(i,0,7); while (isid(*p++)); if (eob(--p)) {refill(p); p=inp+1; continue;} goto lokid; endid: if (eob(--p)) {refill(p); p=inp+1; continue;} tmac2(p[-1],0,-1+(p-inp)); lokid: slookup(inp,p,0); if (newp) {p=newp; goto again;} else break; nomac: while (isid(*p++)); if (eob(--p)) {p=refill(p); goto nomac;} else break; } break; } /* end of switch */ if (isslo) return(p); } /* end of infinite loop */ } char * skipbl(p) register char *p; {/* get next non-blank token */ do {outp=inp=p; p=cotoken(p);} while ((toktyp+COFF)[*inp]==BLANK); return(p); } char * unfill(p) register char *p; { /* take <= BUFSIZ chars from right end of buffer and put them on instack . /* slide rest of buffer to the right, update pointers, return new p. */ register char *np,*op; register int d; if (mactop>=MAXFRE) { pperror("%s: too much pushback",macnam); p=inp=pend; dump(); /* begin flushing pushback */ while (mactop>inctop[ifno]) {p=refill(p); p=inp=pend; dump();} } if (fretop>0) np=bufstack[--fretop]; else { np=savch; savch+=BUFSIZ; if (savch>=sbf+SBSIZE) {pperror("no space"); exit(exfail);} *savch++='\0'; } instack[mactop]=np; op=pend-BUFSIZ; if (op syntax */ inctype=1; for (;;) { outp=inp=p; p=cotoken(p); if (*inp=='\n') {--p; *cp='\0'; break;} if (*inp=='>') { *cp='\0'; break;} # ifdef gimpel if (*inp=='.' && !intss()) *inp='#'; # endif while (inp=MAXINC) { pperror("Unreasonable include nesting",0); return(p); } if((nfil=savch)>sbf+SBSIZE-BUFSIZ) {pperror("no space"); exit(exfail);} filok=0; for (dirp=dirs+inctype; *dirp; ++dirp) { if ( # if gcos strdex(filname, '/') # else filname[0]=='/' # endif || **dirp=='\0') strcpy(nfil,filname); else { strcpy(nfil,*dirp); # if unix || gcos strcat(nfil,"/"); # endif #ifdef ibm #ifndef gimpel strcat(nfil,"."); #endif #endif strcat(nfil,filname); } if (0<(fins[ifno+1]=open(nfil,READ))) { filok=1; fin=fins[++ifno]; break; } } if (filok==0) pperror("Can't find include file %s",filname); else { lineno[ifno]=1; fnames[ifno]=cp=nfil; while (*cp++); savch=cp; dirnams[ifno]=dirs[0]=trmdir(copy(nfil)); sayline(); /* save current contents of buffer */ while (!eob(p)) p=unfill(p); inctop[ifno]=mactop; } return(p); } equfrm(a,p1,p2) register char *a,*p1,*p2; { register char c; int flag; c= *p2; *p2='\0'; flag=strcmp(a,p1); *p2=c; return(flag==SAME); } char * dodef(p) char *p; {/* process '#define' */ register char *pin,*psav,*cf; char **pf,**qf; int b,c,params; struct symtab *np; char *oldval,*oldsavch; char *formal[MAXFRM]; /* formal[n] is name of nth formal */ char formtxt[BUFSIZ]; /* space for formal names */ if (savch>sbf+SBSIZE-BUFSIZ) {pperror("too much defining")((; return(p);} oldsavch=savch; /* to reclaim space if redefinition */ ++flslvl; /* prevent macro expansion during 'define' */ p=skipbl(p); pin=inp; if ((toktyp+COFF)[*pin]!=IDENT) { ppwarn("illegal macro name"); while (*inp!='\n') p=skipbl(p); return(p); } np=slookup(pin,p,1); if (oldval=np->value) savch=oldsavch; /* was previously defined */ b=1; cf=pin; while (cfname); break; } if (*pin==')') break; if (*pin==',') continue; if ((toktyp+COFF)[*pin]!=IDENT) { c= *p; *p='\0'; pperror("bad formal: %s",pin); *p=c; } else if (pf>= &formal[MAXFRM]) { c= *p; *p='\0'; pperror("too many formals: %s",pin); *p=c; } else { *pf++=cf; while (pin=formal; ) { if (equfrm(*qf,pin,p)) { *psav++=qf-formal+1; *psav++=WARN; pin=p; break; } } } else if (*pin=='"' || *pin=='\'' # if gcos || *pin=='`' # endif ) {/* inside quotation marks, too */ char quoc= *pin; for (*psav++= *pin++; pin

=formal; ) { if (equfrm(*qf,pin,cf)) { *psav++=qf-formal+1; *psav++=WARN; pin=cf; break; } } while (pinname); ++lineno[ifno]; np->value=psav-1; } else psav=oldsavch; /* identical redef.; reclaim space */ } else np->value=psav-1; --flslvl; inp=pin; savch=psav; return(p); } #define fasscan() ptrtab=fastab+COFF #define sloscan() ptrtab=slotab+COFF char * control(p) register char *p; {/* find and handle preprocessor control lines */ register struct symtab *np; for (;;) { fasscan(); p=cotoken(p); if (*inp=='\n') ++inp; dump(); sloscan(); p=skipbl(p); *--inp=SALT; outp=inp; ++flslvl; np=slookup(inp,p,0); --flslvl; if (np==defloc) {/* define */ if (flslvl==0) {p=dodef(p); continue;} } else if (np==incloc) {/* include */ if (flslvl==0) {p=doincl(p); continue;} } else if (np==ifnloc) {/* ifndef */ ++flslvl; p=skipbl(p); np=slookup(inp,p,0); --flslvl; if (flslvl==0 && np->value==0) ++trulvl; else ++flslvl; } else if (np==ifdloc) {/* ifdef */ ++flslvl; p=skipbl(p); np=slookup(inp,p,0); --flslvl; if (flslvl==0 && np->value!=0) ++trulvl; else ++flslvl; } else if (np==eifloc) {/* endif */ if (flslvl) {if (--flslvl==0) sayline();} else if (trulvl) --trulvl; else pperror("If-less endif",0); } else if (np==elsloc) {/* else */ if (flslvl) { if (--flslvl!=0) ++flslvl; else {++trulvl; sayline();} } else if (trulvl) {++flslvl; --trulvl;} else pperror("If-less else",0); } else if (np==udfloc) {/* undefine */ if (flslvl==0) { ++flslvl; p=skipbl(p); slookup(inp,p,DROP); --flslvl; } } else if (np==ifloc) {/* if */ #if tgp pperror(" IF not implemented, true assumed", 0); if (flslvl==0) ++trulvl; else ++flslvl; #else newp=p; if (flslvl==0 && yyparse()) ++trulvl; else ++flslvl; p=newp; #endif } else if (np==lneloc) {/* line */ if (flslvl==0 && pflag==0) { outp=inp=p; *--outp='#'; while (*inp!='\n') p=cotoken(p); continue; } } else if (*++inp=='\n') outp=inp; /* allows blank line after # */ else pperror("undefined control",0); /* flush to lf */ ++flslvl; while (*inp!='\n') {outp=inp=p; p=cotoken(p);} --flslvl; } } struct symtab * stsym(s) register char *s; { char buf[BUFSIZ]; register char *p; /* make definition look exactly like end of #define line */ /* copy to avoid running off end of world when param list is at end */ p=buf; while (*p++= *s++); p=buf; while (isid(*p++)); /* skip first identifier */ if (*--p=='=') {*p++=' '; while (*p++);} else {s=" 1"; while (*p++= *s++);} pend=p; *--p='\n'; sloscan(); dodef(buf); return(lastsym); } struct symtab * ppsym(s) char *s; {/* kluge */ register struct symtab *sp; cinit=SALT; *savch++=SALT; sp=stsym(s); --sp->name; cinit=0; return(sp); } /* VARARGS1 */ pperror(s,x,y) char *s; { if (fnames[ifno][0]) fprintf(stderr, # if gcos "*%c* \"%s\", line ", exfail >= 0 ? 'F' : 'W', # else "%s: ", # endif fnames[ifno]); fprintf(stderr, "%d: ",lineno[ifno]); fprintf(stderr, s, x, y); fprintf(stderr,"\n"); ++exfail; } yyerror(s,a,b) char *s; { pperror(s,a,b); } ppwarn(s,x) char *s; { int fail = exfail; exfail = -1; pperror(s,x); exfail = fail; } struct symtab * lookup(namep, enterf) char *namep; { register char *np, *snp; register int c, i; int around; register struct symtab *sp; /* namep had better not be too long (currently, <=8 chars) */ np=namep; around=0; i=cinit; while (c= *np++) i += i+c; c=i; /* c=i for register usage on pdp11 */ c %= symsiz; if (c<0) c += symsiz; sp = &stab[c]; while (snp=sp->name) { np = namep; while (*snp++ == *np) if (*np++ == '\0') { if (enterf==DROP) {sp->name[0]= DROP; sp->value=0;} return(lastsym=sp); } if (--sp < &stab[0]) if (around) {pperror("too many defines", 0); exit(exfail);} else {++around; sp = &stab[symsiz-1];} } if (enterf>0) sp->name=namep; return(lastsym=sp); } struct symtab * slookup(p1,p2,enterf) register char *p1,*p2; int enterf;{ register char *p3; char c2,c3; struct symtab *np; c2= *p2; *p2='\0'; /* mark end of token */ if ((p2-p1)>8) p3=p1+8; else p3=p2; c3= *p3; *p3='\0'; /* truncate to 8 chars or less */ if (enterf==1) p1=copy(p1); np=lookup(p1,enterf); *p3=c3; *p2=c2; if (np->value!=0 && flslvl==0) newp=subst(p2,np); else newp=0; return(np); } char * subst(p,sp) register char *p; struct symtab *sp; { static char match[]="%s: argument mismatch"; register char *ca,*vp; int params; char *actual[MAXFRM]; /* actual[n] is text of nth actual */ char acttxt[BUFSIZ]; /* space for actuals */ if (0==(vp=sp->value)) return(p); if ((p-macforw)<=macdam) { if (++maclvl>symsiz && !rflag) { pperror("%s: macro recursion",sp->name); return(p); } } else maclvl=0; /* level decreased */ macforw=p; macdam=0; /* new target for decrease in level */ macnam=sp->name; dump(); if (sp==ulnloc) { vp=acttxt; *vp++='\0'; sprintf(vp,"%d",lineno[ifno]); while (*vp++); } else if (sp==uflloc) { vp=acttxt; *vp++='\0'; sprintf(vp,"\"%s\"",fnames[ifno]); while (*vp++); } if (0!=(params= *--vp&0xFF)) {/* definition calls for params */ register char **pa; ca=acttxt; pa=actual; if (params==0xFF) params=1; /* #define foo() ... */ sloscan(); ++flslvl; /* no expansion during search for actuals */ plvl= -1; do p=skipbl(p); while (*inp=='\n'); /* skip \n too */ if (*inp=='(') { maclin=lineno[ifno]; macfil=fnames[ifno]; for (plvl=1; plvl!=0; ) { *ca++='\0'; for (;;) { outp=inp=p; p=cotoken(p); if (*inp=='(') ++plvl; if (*inp==')' && --plvl==0) {--params; break;} if (plvl==1 && *inp==',') {--params; break;} while (inp &acttxt[BUFSIZ]) pperror("%s: actuals too long",sp->name); } if (pa>= &actual[MAXFRM]) ppwarn(match,sp->name); else *pa++=ca; } } if (params!=0) ppwarn(match,sp->name); while (--params>=0) *pa++=""+1; /* null string for missing actuals */ --flslvl; fasscan(); } for (;;) {/* push definition onto front of input stack */ while (!iswarn(*--vp)) { if (bob(p)) {outp=inp=p; p=unfill(p);} *--p= *vp; } if (*vp==warnc) {/* insert actual param */ ca=actual[*--vp-1]; while (*--ca) { if (bob(p)) {outp=inp=p; p=unfill(p);} *--p= *ca; } } else break; } outp=inp=p; return(p); } char * trmdir(s) register char *s; { register char *p = s; while (*p++); --p; while (p>s && *--p!='/'); # if unix if (p==s) *p++='.'; # endif *p='\0'; return(s); } STATIC char * copy(s) register char *s; { register char *old; old = savch; while (*savch++ = *s++); return(old); } char * strdex(s,c) char *s,c; { while (*s) if (*s++==c) return(--s); return(0); } yywrap(){ return(1); } main(argc,argv) char *argv[]; { register int i,c; register char *p; char *tf,**cp2; # if gcos if (setjmp(env)) return (exfail); # endif p="_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; i=0; while (c= *p++) { (fastab+COFF)[c] |= IB|NB|SB; (toktyp+COFF)[c]=IDENT; #if scw2 /* 53 == 63-10; digits rarely appear in identifiers, /* and can never be the first char of an identifier. /* 11 == 53*53/sizeof(macbit) . */ ++i; (t21+COFF)[c]=(53*i)/11; (t22+COFF)[c]=i%11; #endif } p="0123456789."; while (c= *p++) {(fastab+COFF)[c] |= NB|SB; (toktyp+COFF)[c]=NUMBR;} # if gcos p="\n\"'`/\\"; # else p="\n\"'/\\"; # endif while (c= *p++) (fastab+COFF)[c] |= SB; # if gcos p="\n\"'`\\"; # else p="\n\"'\\"; # endif while (c= *p++) (fastab+COFF)[c] |= QB; p="*\n"; while (c= *p++) (fastab+COFF)[c] |= CB; (fastab+COFF)[warnc] |= WB; (fastab+COFF)['\0'] |= CB|QB|SB|WB; for (i=ALFSIZ; --i>=0; ) slotab[i]=fastab[i]|SB; p=" \t\013\f\r"; /* note no \n; \v not legal for vertical tab? */ while (c= *p++) (toktyp+COFF)[c]=BLANK; #if scw2 for ((t23+((COFF)[i=ALFSIZ+7-COFF]=1; --i>=-COFF; ) if (((t23+COFF)[i]=(t23+COFF+1)[i]<<1)==0) (t23+COFF)[i]=1; #endif # if unix fnames[ifno=0] = ""; # endif # if ibm fnames[ifno=0] = ""; # endif # if gcos if (inquire(stdin, _TTY)) freopen("*src", "rt", stdin); # endif # if gimpel || gcos fnames[ifno=0] = (char *)inquire(stdin, _FILENAME); dirnams[0] = dirs[0] = trmdir(copy(fnames[0])); # endif for(i=1; iprespc+NPREDEF) { pperror("too many -D options, ignoring %s",argv[i]); continue; } /* ignore plain "-D" (no argument) */ if (*(argv[i]+2)) *predef++ = argv[i]+2; continue; case 'U': if (prund>punspc+NPREDEF) { pperror("too many -U options, ignoring %s",argv[i]); continue; } *prund++ = argv[i]+2; continue; case 'I': if (nd>8) pperror("excessive -I file (%s) ignored",argv[i]); else dirs[nd++] = argv[i]+2; continue; case '\0': continue; default: pperror("unknown flag %s", argv[i]); continue; } default: if (fin==STDIN) { if (0>(fin=open(argv[i], READ))) { pperror("No source file %s",argv[i]); exit(8); } fnames[ifno]=copy(argv[i]); dirs[0]=dirnams[ifno]=trmdir(argv[i]); # ifndef gcos /* too dangerous to have file name in same syntactic position be input or output file depending on file redirections, so force output to stdout, willy-nilly [i don't see what the problem is. jfr] */ } else if (fout==stdout) { extern char _sobuf[BUFSIZ]; if (NULL==(fout=fopen(argv[i], "w"))) { pperror("Can't create %s", argv[i]); exit(8); } else {fclose(stdout); setbuf(fout,_sobuf);} # endif } else pperror("extraneous name %s", argv[i]); } } fins[ifno]=fin; exfail = 0; /* after user -I files here are the standard include libraries */ # if unix dirs[nd++] = "/usr/include"; # endif # if gcos dirs[nd++] = "cc/include"; # endif # if ibm # ifndef gimpel dirs[nd++] = "BTL$CLIB"; # endif # endif # ifdef gimpel dirs[nd++] = intss() ? "SYS3.C." : "" ; # endif /* dirs[nd++] = "/compool"; */ dirs[nd++] = 0; defloc=ppsym("define"); udfloc=ppsym("undef"); incloc=ppsym("include"); elsloc=ppsym("else"); eifloc=ppsym("endif"); ifdloc=ppsym("ifdef"); ifnloc=ppsym("ifndef"); ifloc=ppsym("if"); lneloc=ppsym("line"); for (i=sizeof(macbit)/sizeof(macbit[0]); --i>=0; ) macbit[i]=0; # if unix ysysloc=stsym("unix"); # endif # if gcos ysysloc=stsym ("gcos"); # endif # if ibm ysysloc=stsym ("ibm"); # endif # if pdp11 varloc=stsym("pdp11"); # endif # if vax varloc=stsym("vax"); # endif # if interdata varloc=stsym ("interdata"); # endif # if tss varloc=stsym ("tss"); # endif # if os varloc=stsym ("os"); # endif # if mert varloc=stsym ("mert"); # endif ulnloc=stsym ("__LINE__"); uflloc=stsym ("__FILE__"); tf=fnames[ifno]; fnames[ifno]="command line"; lineno[ifno]=1; cp2=prespc; while (cp2') #define DOCSYM (SYMREP|'<') #define EOFSYM 02000 #define SYMFLG 0400 /* arg to `cmd' */ #define NLFLG 1 #define MTFLG 2 /* for peekc */ #define MARK 0100000 /* odd chars */ #define DQUOTE '"' #define SQUOTE '`' #define LITERAL '\'' #define DOLLAR '$' #define ESCAPE '\\' #define BRACE '{' '9k괁9qtwzY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ /* To use stack as temporary workspace across * possible storage allocation (eg name lookup) * a) get ptr from `relstak' * b) can now use `pushstak' * c) then reset with `setstak' * d) `absstak' gives real address if needed */ #define relstak() (staktop-stakbot) #define absstak(x) (stakbot+Rcheat(x)) #define setstak(x) (staktop=absstak(x)) #define pushstak(c) (*staktop++=(c)) #define zerostak() (*staktop=0) /* Used to address an item left on the top of * the stack (very temporary) */ #define curstak() (staktop) /* `usestak' before `pushstak' then `fixstak' * These routines are safe against heap * being allocated. */ #define usestak() {locstak();} /* for local use only since it hands * out a real address for the stack top */ STKPTR locstak(); /* Will allocate the item being used and return its * address (safe now). */ #define fixstak() endstak(staktop) /* For use after `locstak' to hand back * new stack t((op and then allocate item */ STKPTR endstak(); /* Copy a string onto the stack and * allocate the space. */ STKPTR cpystak(); /* Allocate given ammount of stack space */ STKPTR getstak(); /* A chain of ptrs of stack blocks that * have become covered by heap allocation. * `tdystak' will return them to the heap. */ BLKPTR stakbsy; /* Base of the entire stack */ STKPTR stakbas; /* Top of entire stack */ STKPTR brkend; /* Base of current item */ STKPTR stakbot; /* Top of current item */ STKPTR staktop; /* Used with tdystak */ STKPTR savstak(); '>k7bY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #define N_RDONLY 0100000 #define N_EXPORT 0040000 #define N_ENVNAM 0020000 #define N_ENVPOS 0007777 #define N_DEFAULT 0 struct namnod { NAMPTR namlft; NAMPTR namrgt; STRING namid; STRING namval; STRING namenv; INT namflg; }; '@ k[V MPSVY\_Y # /* * UNIX shell */ #define BYTESPERWORD (sizeof(char *)) TYPE char CHAR; TYPE char BOOL; TYPE int UFD; TYPE int INT; TYPE float REAL; TYPE char *ADDRESS; TYPE long int L_INT; TYPE int VOID; TYPE unsigned POS; TYPE char *STRING; TYPE char MSG[]; TYPE int PIPE[]; TYPE char *STKPTR; TYPE char *BYTPTR; STRUCT stat STATBUF; /* defined in /usr/sys/stat.h */ STRUCT blk *BLKPTR; STRUCT fileblk FILEBLK; STRUCT filehdr FILEHDR; STRUCT fileblk *FILE; STRUCT trenod *TREPTR; STRUCT forknod *FORKPTR; STRUCT comnod *COMPTR; STRUCT swnod *SWPTR; STRUCT regnod *REGPTR; STRUCT parnod *PARPTR; STRUCT ifnod *IFPTR; STRUCT whnod *WHPTR; STRUCT fornod *FORPTR; STRUCT lstnod *LSTPTR; STRUCT argnod *ARGPTR; STRUCT dolnod *DOLPTR; STRUCT ionod *IOPTR; STRUCT namnod NAMNOD; STRUCT namnod *NAMPTR; STRUCT sysnod SYSNOD; STRUCT sysnod *SYSPTR; STRUCT sysnod SYSTAB[]; #define NIL ((char*)0) /* the following nonsense is required * because casts turn an Lvalue * into an Rvalue so two cheats * are necessary, one for each context. */ union { int _cheat;}; #define Lcheat(a) ((a)._cheat) #define Rcheat(a) ((int)(a)) /* address puns for storage allocation */ UNION { FORKPTR _forkptr; COMPTR _comptr; PARPTR _parptr; IFPTR _ifptr; WHPTR _whptr; FORPTR _forptr; LSTPTR _lstptr; BLKPTR _blkptr; NAMPTR _namptr; BYTPTR _bytptr; } address; /* for functions that do not return values */ struct void {INT vvvvvvvv;}; /* heap storage */ struct blk { BLKPTR word; }; #define BUFSIZ 64 struct fileblk { UFD fdes; POS flin; BOOL feof; CHAR fsiz; STRING fnxt; STRING fend; STRING *feval; FILE fstak; CHAR fbuf[BUFSIZ]; }; /* for files not used with file descriptors */ struct filehdr { UFD fdes; POS flin; BOOL feof; CHAR fsiz; STRING fnxt; STRING fend; STRING *feval; FILE fstak; CHAR _fbuf[1]; }; struct sysnod { STRING sysnam; INT sysval; }; /* this node is a proforma for those that follow */ struct trenod { INT tretyp; IOPTR treio; }; /* dummy for access only */ struct argnod { ARGPTR argnxt; CHAR argval[1]; }; struct dolnod { DOLPTR dolnxt; INT doluse; CHAR dolarg[1]; }; struct forknod { INT forktyp; IOPTR forkio; TREPTR forktre; }; struct comnod { INT comtyp; IOPTR comio; ARGPTR comarg; ARGPTR comset; }; struct ifnod { INT iftyp; TREPTR iftre; TREPTR thtre; TREPTR eltre; }; struct whnod { INT whtyp; TREPTR whtre; TREPTR dotre; }; struct fornod { INT fortyp; TREPTR fortre; STRING fornam; COMPTR forlst; }; struct swnod { INT swtyp; STRING swarg; REGPTR swlst; }; struct regnod { ARGPTR regptr; TREPTR regcom; REGPTR regnxt; }; struct parnod { INT partyp; TREPTR partre; }; struct lstnod { INT lsttyp; TREPTR lstlef; TREPTR lstrit; }; struct ionod { INT iofile; STRING ioname; IOPTR ionxt; IOPTR iolst; }; #define FORKTYPE (sizeof(struct forknod)) #define COMTYPE (sizeof(struct comnod)) #define IFTYPE (sizeof(struct ifnod)) #define WHTYPE (sizeof(struct whnod)) #define FORTYPE (sizeof(struct fornod)) #define SWTYPE (sizeof(struct swnod)) #define REGTYPE (sizeof(struct regnod)) #define PARTYPE (sizeof(struct parnod)) #define LSTTYPE (sizeof(struct lstnod)) #define IOTYPE (sizeof(struct ionod)) 'H krlGJY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #define LOCAL static #define PROC extern #define TYPE typedef #define STRUCT TYPE struct #define UNION TYPE union #define REG register #define IF if( #define THEN ){ #define ELSE } else { #define ELIF } else if ( #define FI ;} #define BEGIN { #define END } #define SWITCH switch( #define IN ){ #define ENDSW } #define FOR for( #define WHILE while( #define DO ){ #define OD ;} #define REP do{ #define PER }while( #define DONE ); #define LOOP for(;;){ #define POOL } #define SKIP ; #define DIV / #define REM % #define NEQ ^ #define ANDF && #define ORF || #define TRUE (-1) #define FALSE 0 #define LOBYTE 0377 #define STRIP 0177 #define QUOTE 0200 #define EOF 0 #define NL '\n' #define SP ' ' #define LQ '`' #define RQ '\'' #define MINUS '-' #define COLON ':' #define MAX(a,b) ((a)>(b)?(a):(b)) 'K k%ƴaDAY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #define DUPFLG 0100 'M k ),/258;>AY # /* * UNIX shell */ /* error exits from various parts of shell */ #define ERROR 1 #define SYNBAD 2 #define SIGFAIL 3 #define SIGFLG 0200 /* command tree */ #define FPRS 020 #define FINT 040 #define FAMP 0100 #define FPIN 0400 #define FPOU 01000 #define FPCL 02000 #define FCMD 04000 #define COMMSK 017 #define TCOM 0 #define TPAR 1 #define TFIL 2 #define TLST 3 #define TIF 4 #define TWH 5 #define TUN 6 #define TSW 7 #define TAND 8 #define TORF 9 #define TFORK 10 #define TFOR 11 /* execute table */ #define SYSSET 1 #define SYSCD 2 #define SYSEXEC 3 #define SYSLOGIN 4 #define SYSTRAP 5 #define SYSEXIT 6 #define SYSSHFT 7 #define SYSWAIT 8 #define SYSCONT 9 #define SYSBREAK 10 #define SYSEVAL 11 #define SYSDOT 12 #define SYSRDONLY 13 #define SYSTIMES 14 #define SYSXPORT 15 #define SYSNULL 16 #define SYSREAD 17 #define SYSTST 18 #define SYSUMASK 19 /* used for input and output of shell */ #define INIO 10 #define OTIO 11 /*io nodes*/ #define USERIO 10 #define IOUFD 15 #define IODOC 16 #define IOPUT 32 #defi((ne IOAPP 64 #define IOMOV 128 #define IORDW 256 #define INPIPE 0 #define OTPIPE 1 /* arg list terminator */ #define ENDARGS 0 #include "mac.h" #include "mode.h" #include "name.h" /* result type declarations */ #define alloc malloc ADDRESS alloc(); VOID addblok(); STRING make(); STRING movstr(); TREPTR cmd(); TREPTR makefork(); NAMPTR lookup(); VOID setname(); VOID setargs(); DOLPTR useargs(); REAL expr(); STRING catpath(); STRING getpath(); STRING *scan(); STRING mactrim(); STRING macro(); STRING execs(); VOID await(); VOID post(); STRING copyto(); VOID exname(); STRING staknam(); VOID printnam(); VOID printflg(); VOID prs(); VOID prc(); VOID getenv(); STRING *setenv(); #define attrib(n,f) (n->namflg |= f) #define round(a,b) (((int)((ADR(a)+b)-1))&~((b)-1)) #define closepipe(x) (close(x[INPIPE]), close(x[OTPIPE])) #define eq(a,b) (cf(a,b)==0) #define max(a,b) ((a)>(b)?(a):(b)) #define assert(x) ; /* temp files and io */ UFD output; INT ioset; IOPTR iotemp; /* files to be deleted sometime */ IOPTR iopend; /* documents waiting to be read at NL */ /* substitution */ INT dolc; STRING *dolv; DOLPTR argfor; ARGPTR gchain; /* stack */ #define BLK(x) ((BLKPTR)(x)) #define BYT(x) ((BYTPTR)(x)) #define STK(x) ((STKPTR)(x)) #define ADR(x) ((char*)(x)) /* stak stuff */ #include "stak.h" /* string constants */ MSG atline; MSG readmsg; MSG colon; MSG minus; MSG nullstr; MSG sptbnl; MSG unexpected; MSG endoffile; MSG synmsg; /* name tree and words */ SYSTAB reserved; INT wdval; INT wdnum; ARGPTR wdarg; INT wdset; BOOL reserv; /* prompting */ MSG stdprompt; MSG supprompt; MSG profile; /* built in names */ NAMNOD fngnod; NAMNOD ifsnod; NAMNOD homenod; NAMNOD mailnod; NAMNOD pathnod; NAMNOD ps1nod; NAMNOD ps2nod; /* special names */ MSG flagadr; STRING cmdadr; STRING exitadr; STRING dolladr; STRING pcsadr; STRING pidadr; MSG defpath; /* names always present */ MSG mailname; MSG homename; MSG pathname; MSG fngname; MSG ifsname; MSG ps1name; MSG ps2name; /* transput */ CHAR tmpout[]; STRING tmpnam; INT serial; #define TMPNAM 7 FILE standin; #define input (standin->fdes) #define eof (standin->feof) INT peekc; STRING comdiv; MSG devnull; /* flags */ #define noexec 01 #define intflg 02 #define prompt 04 #define setflg 010 #define errflg 020 #define ttyflg 040 #define forked 0100 #define oneflg 0200 #define rshflg 0400 #define waiting 01000 #define stdflg 02000 #define execpr 04000 #define readpr 010000 #define keyflg 020000 INT flags; /* error exits from various parts of shell */ #include jmp_buf subshell; jmp_buf errshell; /* fault handling */ #include "brkincr.h" POS brkincr; #define MINTRAP 0 #define MAXTRAP 17 #define INTR 2 #define QUIT 3 #define MEMF 11 #define ALARM 14 #define KILL 15 #define TRAPSET 2 #define SIGSET 4 #define SIGMOD 8 VOID fault(); BOOL trapnote; STRING trapcom[]; BOOL trapflg[]; /* name tree and words */ STRING *environ; CHAR numbuf[]; MSG export; MSG readonly; /* execflgs */ INT exitval; BOOL execbrk; INT loopcnt; INT breakcnt; /* messages */ MSG mailmsg; MSG coredump; MSG badopt; MSG badparam; MSG badsub; MSG nospace; MSG notfound; MSG badtrap; MSG baddir; MSG badshift; MSG illegal; MSG restricted; MSG execpmsg; MSG notid; MSG wtfailed; MSG badcreate; MSG piperr; MSG badopen; MSG badnum; MSG arglist; MSG txtbsy; MSG toobig; MSG badexec; MSG notfound; MSG badfile; address end[]; #include "ctype.h" 'W kl #&Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ /* table 1 */ #define T_SUB 01 #define T_MET 02 #define T_SPC 04 #define T_DIP 010 #define T_EOF 020 #define T_EOR 040 #define T_QOT 0100 #define T_ESC 0200 /* table 2 */ #define T_BRC 01 #define T_DEF 02 #define T_AST 04 #define T_DIG 010 #define T_FNG 020 #define T_SHN 040 #define T_IDC 0100 #define T_SET 0200 /* for single chars */ #define _TAB (T_SPC) #define _SPC (T_SPC) #define _UPC (T_IDC) #define _LPC (T_IDC) #define _DIG (T_DIG) #define _EOF (T_EOF) #define _EOR (T_EOR) #define _BAR (T_DIP) #define _HAT (T_MET) #define _BRA (T_MET) #define _KET (T_MET) #define _SQB (T_FNG) #define _AMP (T_DIP) #define _SEM (T_DIP) #define _LT (T_DIP) #define _GT (T_DIP) #define _LQU (T_QOT|T_ESC) #define _BSL (T_ESC) #define _DQU (T_QOT) #define _DOL1 (T_SUB|T_ESC) #define _CBR T_BRC #define _CKT T_DEF #define _AST (T_AST|T_FNG) #define _EQ (T_DEF) #define _MIN (T_DEF|T_SHN) #define _PCS (T_SHN) #define _NUM (T_SHN) #define _DOL2 (T_SHN) #define _PLS (T_DEF|T_SET) #define _AT (T_AST) #define _QU (T_DEF|T_FNG|T_SHN) /* abbreviations for tests */ #define _IDCH (T_IDC|T_DIG) #define _META (T_SPC|T_DIP|T_MET|T_EOR) char _ctype1[]; /* nb these args are not call by value !!!! */ #define space(c) (((c)"E)==0 ANDF _ctype1[c]&(T_SPC)) #define eofmeta(c) (((c)"E)==0 ANDF _ctype1[c]&(_META|T_EOF)) #define qotchar(c) (((c)"E)==0 ANDF _ctype1[c]&(T_QOT)) #define eolchar(c) (((c)"E)==0 ANDF _ctype1[c]&(T_EOR|T_EOF)) #define dipchar(c) (((c)"E)==0 ANDF _ctype1[c]&(T_DIP)) #define subchar(c) (((c)"E)==0 ANDF _ctype1[c]&(T_SUB|T_QOT)) #define escchar(c) (((c)"E)==0 ANDF _ctype1[c]&(T_ESC)) char _ctype2[]; #define digit(c) (((c)"E)==0 ANDF _ctype2[c]&(T_DIG)) #define fngchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_FNG)) #define dolchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_AST|T_BRC|T_DIG|T_IDC|T_SHN)) #define defchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_DEF)) #define setchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_SET)) #define digchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_AST|T_DIG)) #define letter(c) (((c)"E)==0 ANDF _ctype2[c]&(T_IDC)) #define alphanum(c) (((c)"E)==0 ANDF _ctype2[c]&(_IDCH)) #define astchar(c) (((c)"E)==0 ANDF _ctype2[c]&(T_AST)) ']k+Y #define BRKINCR 01000 #define BRKMAX 04000 '_kң  Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "sym.h" LOCAL INT parent; SYSTAB commands; /* ======== command execution ========*/ execute(argt, execflg, pf1, pf2) TREPTR argt; INT *pf1, *pf2; { /* `stakbot' is preserved by this routine */ REG TREPTR t; STKPTR sav=savstak(); sigchk(); IF (t=argt) ANDF execbrk==0 THEN REG INT treeflgs; INT oldexit, type; REG STRING *com; treeflgs = t->tretyp; type = treeflgs&COMMSK; oldexit=exitval; exitval=0; SWITCH type IN case TCOM: BEGIN STRING a1; INT argn, internal; ARGPTR schain=gchain; IOPTR io=t->treio; gchain=0; argn = getarg(t); com=scan(argn); a1=com[1]; gchain=schain; IF (internal=syslook(com[0],commands)) ORF argn==0 THEN setlist(t->comset, 0); FI IF argn ANDF (flags&noexec)==0 THEN /* print command if execpr */ IF flags&execpr THEN argn=0; prs(execpmsg); WHILE com[argn]!=ENDARGS DO prs(com[argn++]); blank() OD newline(); FI SWITCH internal IN case SYSDOT: IF a1 THEN REG INT f; IF (f=pathopen(getpath(a1), a1)) < 0 THEN failed(a1,notfound); ELSE execexp(0,f); FI FI break; case SYSTIMES: { L_INT t[4]; times(t); prt(t[2]); blank(); prt(t[3]); newline(); } break; case SYSEXIT: exitsh(a1?stoi(a1):oldexit); case SYSNULL: io=0; break; case SYSCONT: execbrk = -loopcnt; break; case SYSBREAK: IF (execbrk=loopcnt) ANDF a1 THEN breakcnt=stoi(a1); FI break; case SYSTRAP: IF a1 THEN BOOL clear; IF (clear=digit(*a1))==0 THEN ++com; FI WHILE *++com DO INT i; IF (i=stoi(*com))>=MAXTRAP ORF i1 THEN setargs(com+argn-argc); FI ELIF t->comset==0 THEN /*scan name chain and print*/ namscan(printnam); FI break; case SYSRDONLY: exitval=N_RDONLY; case SYSXPORT: IF exitval==0 THEN exitval=N_EXPORT; FI IF a1 THEN WHILE *++com DO attrib(lookup(*com), exitval) OD ELSE namscan(printflg); FI exitval=0; break; case SYSEVAL: IF a1 THEN execexp(a1,&com[2]); FI break; case SYSUMASK: if (a1) { int c, i i = 0; while ((c = *a1++) >= '0' && c <= '7') i = (i << 3) + c - '0'; umask(i); } else { int i, j; umask(i = umask(0)); prc('0'); for (j = 6; j >= 0; j -= 3) prc(((i>>j)&07) + '0'); newline(); } break; default: internal=builtin(argn,com); ENDSW IF internal THEN IF io THEN error(illegal) FI chktrap(); break; FI ELIF t->treio==0 THEN break; FI END case TFORK: IF execflg ANDF (treeflgs&(FAMP|FPOU))==0 THEN parent=0; ELSE WHILE (parent=fork()) == -1 DO sigchk(); alarm(10); pause() OD FI IF parent THEN /* This is the parent branch of fork; */ /* it may or may not wait for the child. */ IF treeflgs&FPRS ANDF flags&ttyflg THEN prn(parent); newline(); FI IF treeflgs&FPCL THEN closepipe'jkf  Y(pf1) FI IF (treeflgs&(FAMP|FPOU))==0 THEN await(parent); ELIF (treeflgs&FAMP)==0 THEN post(parent); ELSE assnum(&pcsadr, parent); FI chktrap(); break; ELSE /* this is the forked branch (child) of execute */ flags |= forked; iotemp=0; postclr(); settmp(); /* Turn off INTR and QUIT if `FINT' */ /* Reset ramaining signals to parent */ /* except for those `lost' by trap */ oldsigs(); IF treeflgs&FINT THEN signal(INTR,1); signal(QUIT,1); FI /* pipe in or out */ IF treeflgs&FPIN THEN rename(pf1[INPIPE],0); close(pf1[OTPIPE]); FI IF treeflgs&FPOU THEN rename(pf2[OTPIPE],1); close(pf2[INPIPE]); FI /* default std input for & */ IF treeflgs&FINT ANDF ioset==0 THEN rename(chkopen(devnull),0); FI /* io redirection */ initio(t->treio); IF type!=TCOM THEN execute(t->forktre,1); ELIF com[0]!=ENDARGS THEN setlist(t->comset,N_EXPORT); execa(com); FI done(); FI case TPAR: rename(dup(2),output); execute(t->partre,execflg); done(); case TFIL: BEGIN INT pv[2]; chkpipe(pv); IF execute(t->lstlef, 0, pf1, pv)==0 THEN execute(t->lstrit, execflg, pv, pf2); ELSE closepipe(pv); FI END break; case TLST: execute(t->lstlef,0); execute(t->lstrit,execflg); break; case TAND: IF execute(t->lstlef,0)==0 THEN execute(t->lstrit,execflg); FI break; case TORF: IF execute(t->lstlef,0)!=0 THEN execute(t->lstrit,execflg); FI break; case TFOR: BEGIN NAMPTR n = lookup(t->fornam); STRING *args; DOLPTR argsav=0; IF t->forlst==0 THEN args=dolv+1; argsav=useargs(); ELSE ARGPTR schain=gchain; gchain=0; trim((args=scan(getarg(t->forlst)))[0]); gchain=schain; FI loopcnt++; WHILE *args!=ENDARGS ANDF execbrk==0 DO assign(n,*args++); execute(t->fortre,0); IF execbrk<0 THEN execbrk=0 FI OD IF breakcnt THEN breakcnt-- FI execbrk=breakcnt; loopcnt--; argfor=freeargs(argsav); END break; case TWH: case TUN: BEGIN INT i=0; loopcnt++; WHILE execbrk==0 ANDF (execute(t->whtre,0)==0)==(type==TWH) DO i=execute(t->dotre,0); IF execbrk<0 THEN execbrk=0 FI OD IF breakcnt THEN breakcnt-- FI execbrk=breakcnt; loopcnt--; exitval=i; END break; case TIF: IF execute(t->iftre,0)==0 THEN execute(t->thtre,execflg); ELSE execute(t->eltre,execflg); FI break; case TSW: BEGIN REG STRING r = mactrim(t->swarg); t=t->swlst; WHILE t DO ARGPTR rex=t->regptr; WHILE rex DO REG STRING s; IF gmatch(r,s=macro(rex->argval)) ORF (trim(s), eq(r,s)) THEN execute(t->regcom,0); t=0; break; ELSE rex=rex->argnxt; FI OD IF t THEN t=t->regnxt FI OD END break; ENDSW exitset(); FI sigchk(); tdystak(sav); return(exitval); } execexp(s,f) STRING s; UFD f; { FILEBLK fb; push(&fb); IF s THEN estabf(s); fb.feval=f; ELIF f>=0 THEN initf(f); FI execute(cmd(NL, NLFLG|MTFLG),0); pop(); } 'rkI  Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "sym.h" /* ======== character handling for command lines ========*/ word() { REG CHAR c, d; REG CHAR *argp=locstak()+BYTESPERWORD; INT alpha=1; wdnum=0; wdset=0; WHILE (c=nextc(0), space(c)) DONE IF !eofmeta(c) THEN REP IF c==LITERAL THEN *argp++=(DQUOTE); WHILE (c=readc()) ANDF c!=LITERAL DO *argp++=(c|QUOTE); chkpr(c) OD *argp++=(DQUOTE); ELSE *argp++=(c); IF c=='=' THEN wdset |= alpha FI IF !alphanum(c) THEN alpha=0 FI IF qotchar(c) THEN d=c; WHILE (*argp++=(c=nextc(d))) ANDF c!=d DO chkpr(c) OD FI FI PER (c=nextc(0), !eofmeta(c)) DONE argp=endstak(argp); IF !letter(argp->argval[0]) THEN wdset=0 FI peekc=c|MARK; IF argp->argval[1]==0 ANDF (d=argp->argval[0], digit(d)) ANDF (c=='>' ORF c=='<') THEN word(); wdnum=d-'0'; ELSE /*check for reserved words*/ IF reserv==FALSE ORF (wdval=syslook(argp->argval,reserved))==0 THEN wdarg=argp; wdval=0; FI FI ELIF dipchar(c) THEN IF (d=nextc(0))==c THEN wdval = c|SYMREP; ELSE peekc = d|MARK; wdval = c; FI ELSE IF (wdval=c)==EOF THEN wdval=EOFSYM; FI IF iopend ANDF eolchar(c) THEN copy(iopend); iopend=0; FI FI reserv=FALSE; return(wdval); } nextc(quote) CHAR quote; { REG CHAR c, d; IF (d=readc())==ESCAPE THEN IF (c=readc())==NL THEN chkpr(NL); d=nextc(quote); ELIF quote ANDF c!=quote ANDF !escchar(c) THEN peekc=c|MARK; ELSE d = c|QUOTE; FI FI return(d); } readc() { REG CHAR c; REG INT len; REG FILE f; retry: IF peekc THEN c=peekc; peekc=0; ELIF (f=standin, f->fnxt!=f->fend) THEN IF (c = *f->fnxt++)==0 THEN IF f->feval THEN IF estabf(*f->feval++) THEN c=EOF; ELSE c=SP; FI ELSE goto retry; /* = c=readc(); */ FI FI IF flags&readpr ANDF standin->fstak==0 THEN prc(c) FI IF c==NL THEN f->flin++ FI ELIF f->feof ORF f->fdes<0 THEN c=EOF; f->feof++; ELIF (len=readb())<=0 THEN close(f->fdes); f->fdes = -1; c=EOF; f->feof++; ELSE f->fend = (f->fnxt = f->fbuf)+len; goto retry; FI return(c); } LOCAL readb() { REG FILE f=standin; REG INT len; REP IF trapnote&SIGSET THEN newline(); sigchk() FI PER (len=read(f->fdes,f->fbuf,f->fsiz))<0 ANDF trapnote DONE return(len); } (('xk1J Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" /* ======== general purpose string handling ======== */ STRING movstr(a,b) REG STRING a, b; { WHILE *b++ = *a++ DONE return(--b); } INT any(c,s) REG CHAR c; STRING s; { REG CHAR d; WHILE d = *s++ DO IF d==c THEN return(TRUE); FI OD return(FALSE); } INT cf(s1, s2) REG STRING s1, s2; { WHILE *s1++ == *s2 DO IF *s2++==0 THEN return(0); FI OD return(*--s1 - *s2); } INT length(as) STRING as; { REG STRING s; IF s=as THEN WHILE *s++ DONE FI return(s-as); } '{kig Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" STKPTR stakbot=nullstr; /* ======== storage allocation ======== */ STKPTR getstak(asize) INT asize; { /* allocate requested stack */ REG STKPTR oldstak; REG INT size; size=round(asize,BYTESPERWORD); oldstak=stakbot; staktop = stakbot += size; return(oldstak); } STKPTR locstak() { /* set up stack for local use * should be followed by `endstak' */ IF brkend-stakbotADR(x) DO free(stakbsy); stakbsy = stakbsy->word; OD staktop=stakbot=max(ADR(x),ADR(stakbas)); rmtemp(x); } stakchk() { IF (brkend-stakbas)>BRKINCR+BRKINCR THEN setbrk(-BRKINCR); FI } STKPTR cpystak(x) STKPTR x; { return(endstak(movstr(x,locstak()))); } 'kYG Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" setbrk(incr) { REG BYTPTR a=sbrk(incr); brkend=a+incr; return(a); } 'kMthY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" PROC VOID gsort(); #define ARGMK 01 INT errno; STRING sysmsg[]; /* fault handling */ #define ENOMEM 12 #define ENOEXEC 8 #define E2BIG 7 #define ENOENT 2 #define ETXTBSY 26 /* service routines for `execute' */ VOID initio(iop) IOPTR iop; { REG STRING ion; REG INT iof, fd; IF iop THEN iof=iop->iofile; ion=mactrim(iop->ioname); IF *ion ANDF (flags&noexec)==0 THEN IF iof&IODOC THEN subst(chkopen(ion),(fd=tmpfil())); close(fd); fd=chkopen(tmpout); unlink(tmpout); ELIF iof&IOMOV THEN IF eq(minus,ion) THEN fd = -1; close(iof&IOUFD); ELIF (fd=stoi(ion))>=USERIO THEN failed(ion,badfile); ELSE fd=dup(fd); FI ELIF (iof&IOPUT)==0 THEN fd=chkopen(ion); ELIF flags&rshflg THEN failed(ion,restricted); ELIF iof&IOAPP ANDF (fd=open(ion,1))>=0 THEN lseek(fd, 0L, 2); ELSE fd=create(ion); FI IF fd>=0 THEN rename(fd,iof&IOUFD); FI FI initio(iop->ionxt); FI } STRING getpath(s) STRING s; { REG STRING path; IF any('/',s) THEN IF flags&rshflg THEN failed(s, restricted); ELSE return(nullstr); FI ELIF (path = pathnod.namval)==0 THEN return(defpath); ELSE return(cpystak(path)); FI } INT pathopen(path, name) REG STRING path, name; { REG UFD f; REP path=catpath(path,name); PER (f=open(curstak(),0))<0 ANDF path DONE return(f); } STRING catpath(path,name) REG STRING path; STRING name; { /* leaves result on top of stack */ REG STRING scanp = path, argp = locstak(); WHILE *scanp ANDF *scanp!=COLON DO *argp++ = *scanp++ OD IF scanp!=path THEN *argp++='/' FI IF *scanp==COLON THEN scanp++ FI path=(*scanp ? scanp : 0); scanp=name; WHILE (*argp++ = *scanp++) DONE return(path); } LOCAL STRING xecmsg; LOCAL STRING *xecenv; VOID execa(at) STRING at[]; { REG STRING path; REG STRING *t = at; IF (flags&noexec)==0 THEN xecmsg=notfound; path=getpath(*t); namscan(exname); xecenv=setenv(); WHILE path=execs(path,t) DONE failed(*t,xecmsg); FI } LOCAL STRING execs(ap,t) STRING ap; REG STRING t[]; { REG STRING p, prefix; prefix=catpath(ap,t[0]); trim(p=curstak()); sigchk(); execve(p, &t[0] ,xecenv); SWITCH errno IN case ENOEXEC: flags=0; comdiv=0; ioset=0; clearup(); /* remove open files and for loop junk */ IF input THEN close(input) FI close(output); output=2; input=chkopen(p); /* set up new args */ setargs(t); longjmp(subshell,1); case ENOMEM: failed(p,toobig); case E2BIG: failed(p,arglist); case ETXTBSY: failed(p,txtbsy); default: xecmsg=badexec; case ENOENT: return(prefix); ENDSW } /* for processes to be waited for */ #define MAXP 20 LOCAL INT pwlist[MAXP]; LOCAL INT pwc; postclr() { REG INT *pw = pwlist; WHILE pw <= &pwlist[pwc] DO *pw++ = 0 OD pwc=0; } VOID post(pcsid) INT pcsid; { REG INT *pw = pwlist; IF pcsid THEN WHILE *pw DO pw++ OD IF pwc >= MAXP-1 THEN pw--; ELSE pwc++; FI *pw = pcsid; FI } VOID await(i) INT i; { INT rc=0, wx=0; INT w; INT ipwc = pwc; post(i); WHILE pwc DO REG INT p; REG INT sig; INT w_hi; BEGIN REG INT *pw=pwlist; p=wait(&w); WHILE pw <= &pwlist[ipwc] DO IF *pw==p THEN *pw=0; pwc--; ELSE pw++; FI OD END IF p == -1 THEN continue FI w_hi = (w>>8)&LOBYTE; IF sig = w&0177 THEN IF sig == 0177 /* ptrace! return */ THEN prs("ptrace: "); sig = w_hi; FI IF sysmsg[sig] THEN IF i!=p ORF (flags&prompt)==0 THEN prp(); prn(p); blank() FI prs(sysmsg[sig]); IF w&0200 THEN prs(coredump) FI FI newline(); FI IF rc==0 THEN rc = (sig ? sig|SIGFLG : w_hi); FI wx |= w; OD IF wx ANDF flags&errflg THEN exitsh(rc); FI exitval=rc; exitset(); } BOOL nosubst; trim(at) STRING at; { REG STRING p; REG CHAR c; REG CHAR q=0; IF p=at THEN WHILE c = *p DO *p++=c&STRIP; q |= c OD FI nosubst=q"E; } STRING mactrim(s) STRING s; { REG STRING t=macro(s); trim(t); return(t); } STRING *scan(argn) INT argn; { REG ARGPTR argp = Rcheat(gchain)&~ARGMK; REG STRING *comargn, *comargm; comargn=getstak(BYTESPERWORD*argn+BYTESPERWORD); comargm = comargn += argn; *comargn = ENDARGS; WHILE argp DO *--comargn = argp->argval; IF argp = argp->argnxt THEN trim(*comargn); FI IF argp==0 ORF Rcheat(argp)&ARGMK THEN gsort(comargn,comargm); comargm = comargn; FI /* Lcheat(argp) &= ~ARGMK; */ argp = Rcheat(argp)&~ARGMK; OD return(comargn); } LOCAL VOID gsort(from,to) STRING from[], to[]; { INT k, m, n; REG INT i, j; IF (n=to-from)<=1 THEN return FI FOR j=1; j<=n; j*=2 DONE FOR m=2*j-1; m/=2; DO k=n-m; FOR j=0; j=0; i-=m DO REG STRING *fromi; fromi = &from[i]; IF cf(fromi[m],fromi[0])>0 THEN break; ELSE STRING s; s=fromi[m]; fromi[m]=fromi[0]; fromi[0]=s; FI OD OD OD } /* Argument list generation */ INT getarg(ac) COMPTR ac; { REG ARGPTR argp; REG INT count=0; REG COMPTR c; IF c=ac T(('kwhYHEN argp=c->comarg; WHILE argp DO count += split(macro(argp->argval)); argp=argp->argnxt; OD FI return(count); } LOCAL INT split(s) REG STRING s; { REG STRING argp; REG INT c; INT count=0; LOOP sigchk(); argp=locstak()+BYTESPERWORD; WHILE (c = *s++, !any(c,ifsnod.namval) && c) DO *argp++ = c OD IF argp==staktop+BYTESPERWORD THEN IF c THEN continue; ELSE return(count); FI ELIF c==0 THEN s--; FI IF c=expand((argp=endstak(argp))->argval,0) THEN count += c; ELSE /* assign(&fngnod, argp->argval); */ makearg(argp); count++; FI Lcheat(gchain) |= ARGMK; POOL } 'kpϴ4RY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" CHAR numbuf[6]; /* printing and io conversion */ newline() { prc(NL); } blank() { prc(SP); } prp() { IF (flags&prompt)==0 ANDF cmdadr THEN prs(cmdadr); prs(colon); FI } VOID prs(as) STRING as; { REG STRING s; IF s=as THEN write(output,s,length(s)-1); FI } VOID prc(c) CHAR c; { IF c THEN write(output,&c,1); FI } prt(t) L_INT t; { REG INT hr, min, sec; t += 30; t /= 60; sec=t%60; t /= 60; min=t%60; IF hr=t/60 THEN prn(hr); prc('h'); FI prn(min); prc('m'); prn(sec); prc('s'); } prn(n) INT n; { itos(n); prs(numbuf); } itos(n) { REG char *abuf; REG POS a, i; INT pr, d; abuf=numbuf; pr=FALSE; a=n; FOR i=10000; i!=1; i/=10 DO IF (pr |= (d=a/i)) THEN *abuf++=d+'0' FI a %= i; OD *abuf++=a+'0'; *abuf++=0; } stoi(icp) STRING icp; { REG CHAR *cp = icp; REG INT r = 0; REG CHAR c; WHILE (c = *cp, digit(c)) ANDF c ANDF r>=0 DO r = r*10 + c - '0'; cp++ OD IF r<0 ORF cp==icp THEN failed(icp,badnum); ELSE return(r); FI } 'k{~ Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" PROC BOOL chkid(); NAMNOD ps2nod = { NIL, NIL, ps2name}, fngnod = { NIL, NIL, fngname}, pathnod = { NIL, NIL, pathname}, ifsnod = { NIL, NIL, ifsname}, ps1nod = { &pathnod, &ps2nod, ps1name}, homenod = { &fngnod, &ifsnod, homename}, mailnod = { &homenod, &ps1nod, mailname}; NAMPTR namep = &mailnod; /* ======== variable and string handling ======== */ syslook(w,syswds) STRING w; SYSTAB syswds; { REG CHAR first; REG STRING s; REG SYSPTR syscan; syscan=syswds; first = *w; WHILE s=syscan->sysnam DO IF first == *s ANDF eq(w,s) THEN return(syscan->sysval); FI syscan++; OD return(0); } setlist(arg,xp) REG ARGPTR arg; INT xp; { WHILE arg DO REG STRING s=mactrim(arg->argval); setname(s, xp); arg=arg->argnxt; IF flags&execpr THEN prs(s); IF arg THEN blank(); ELSE newline(); FI FI OD } VOID setname(argi, xp) STRING argi; INT xp; { REG STRING argscan=argi; REG NAMPTR n; IF letter(*argscan) THEN WHILE alphanum(*argscan) DO argscan++ OD IF *argscan=='=' THEN *argscan = 0; n=lookup(argi); *argscan++ = '='; attrib(n, xp); IF xp&N_ENVNAM THEN n->namenv = n->namval = argscan; ELSE assign(n, argscan); FI return; FI FI failed(argi,notid); } replace(a, v) REG STRING *a; STRING v; { free(*a); *a=make(v); } dfault(n,v) NAMPTR n; STRING v; { IF n->namval==0 THEN assign(n,v) FI } assign(n,v) NAMPTR n; STRING v; { IF n->namflg&N_RDONLY THEN failed(n->namid,wtfailed); ELSE replace(&n->namval,v); FI } INT readvar(names) STRING *names; { FILEBLK fb; REG FILE f = &fb; REG CHAR c; REG INT rc=0; NAMPTR n=lookup(*names++); /* done now to avoid storage mess */ STKPTR rel=relstak(); push(f); initf(dup(0)); IF lseek(0,0L,1)==-1 THEN f->fsiz=1; FI LOOP c=nextc(0); IF (*names ANDF any(c, ifsnod.namval)) ORF eolchar(c) THEN zerostak(); assign(n,absstak(rel)); setstak(rel); IF *names THEN n=lookup(*names++); ELSE n=0; FI IF eolchar(c) THEN break; FI ELSE pushstak(c); FI POOL WHILE n DO assign(n, nullstr); IF *names THEN n=lookup(*names++); ELSE n=0; FI OD IF eof THEN rc=1 FI lseek(0, (long)(f->fnxt-f->fend), 1); pop(); return(rc); } assnum(p, i) STRING *p; INT i; { itos(i); replace(p,numbuf); } STRING make(v) STRING v; { REG STRING p; IF v THEN movstr(v,p=alloc(length(v))); return(p); ELSE return(0); FI } NAMPTR lookup(nam) REG STRING nam; { REG NAMPTR nscan=namep; REG NAMPTR *prev; INT LR; IF !chkid(nam) THEN failed(nam,notid); FI WHILE nscan DO IF (LR=cf(nam,nscan->namid))==0 THEN return(nscan); ELIF LR<0 THEN prev = &(nscan->namlft); ELSE prev = &(nscan->namrgt); FI nscan = *prev; OD /* add name node */ nscan=alloc(sizeof *nscan); nscan->namlft=nscan->namrgt=NIL; nscan->namid=make(nam); nscan->namval=0; nscan->namflg=N_DEFAULT; nscan->namenv=0; return(*prev = nscan); } LOCAL BOOL chkid(nam) STRING nam; { REG CHAR * cp=nam; IF !letter(*cp) THEN return(FALSE); ELSE WHILE *++cp DO IF !alphanum(*cp) THEN return(FALSE); FI OD FI return(TRUE); } LOCAL VOID (*namfn)(); namscan(fn) VOID (*fn)(); { namfn=fn; namwalk(namep); } LOCAL VOID namwalk(np) REG NAMPTR np; { IF np THEN namwalk(np->namlft); (*namfn)(np); namwalk(np->namrgt); FI } VOID printnam(n) NAMPTR n; { REG STRING s; sigchk(); IF s=n->namval THEN prs(n->namid); prc('='); prs(s); newline(); FI } LOCAL STRING staknam(n) REG NAMPTR n; { REG STRING p; p=movstr(n->namid,staktop); p=movstr("=",p); p=movstr(n->namval,p); return(getstak(p+1-ADR(stakbot))); } VOID exname(n) REG NAMPTR n; { IF n->namflg&N_EXPORT THEN free(n->namenv); n->namenv = make(n->namval); ELSE free(n->namval); n->namval = make(n->namenv); FI } VOID printflg(n) REG NAMPTR n; { IF n->namflg&N_EXPORT THEN prs(export); blank(); FI IF n->namflg&N_RDONLY THEN prs(readonly); blank(); FI IF n->namflg&(N_EXPORT|N_RDONLY) THEN prs(n->namid); newline(); FI } VOID getenv() { REG STRING *e=environ; WHILE *e DO setname(*e++, N_ENVNAM) OD } LOCAL INT namec; VOID countnam(n) NAMPTR n; { namec++; } LOCAL STRING *argnam; VOID pushnam(n) NAMPTR n; { IF n->namval THEN *argnam++ = staknam(n); FI } STRING *setenv() { REG STRING *er; namec=0; namscan(countnam); argnam = er = getstak(namec*BYTESPERWORD+BYTESPERWORD); namscan(pushnam); *argnam++ = 0; return(er); } 'k{p iloruxY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "sym.h" MSG version = "\nVERSION sys137 DATE 1978 Nov 6 14:29:22\n"; /* error messages */ MSG badopt = "bad option(s)"; MSG mailmsg = "you have mail\n"; MSG nospace = "no space"; MSG synmsg = "syntax error"; MSG badnum = "bad number"; MSG badparam = "parameter not set"; MSG badsub = "bad substitution"; MSG badcreate = "cannot create"; MSG illegal = "illegal io"; MSG restricted = "restricted"; MSG piperr = "cannot make pipe"; MSG badopen = "cannot open"; MSG coredump = " - core dumped"; MSG arglist = "arg list too long"; MSG txtbsy = "text busy"; MSG toobig = "too big"; MSG badexec = "cannot execute"; MSG notfound = "not found"; MSG badfile = "bad file number"; MSG badshift = "cannot shift"; MSG baddir = "bad directory"; MSG badtrap = "bad trap"; MSG wtfailed = "is read only"; MSG notid = "is not an identifier"; /* built in names */ MSG pathname = "PATH"; MSG homename = "HOME"; MSG mai((lname = "MAIL"; MSG fngname = "FILEMATCH"; MSG ifsname = "IFS"; MSG ps1name = "PS1"; MSG ps2name = "PS2"; /* string constants */ MSG nullstr = ""; MSG sptbnl = " \t\n"; MSG defpath = ":/bin:/usr/bin"; MSG colon = ": "; MSG minus = "-"; MSG endoffile = "end of file"; MSG unexpected = " unexpected"; MSG atline = " at line "; MSG devnull = "/dev/null"; MSG execpmsg = "+ "; MSG readmsg = "> "; MSG stdprompt = "$ "; MSG supprompt = "# "; MSG profile = ".profile"; /* tables */ SYSTAB reserved { {"in", INSYM}, {"esac", ESSYM}, {"case", CASYM}, {"for", FORSYM}, {"done", ODSYM}, {"if", IFSYM}, {"while", WHSYM}, {"do", DOSYM}, {"then", THSYM}, {"else", ELSYM}, {"elif", EFSYM}, {"fi", FISYM}, {"until", UNSYM}, { "{", BRSYM}, { "}", KTSYM}, {0, 0}, }; STRING sysmsg[] { 0, "Hangup", 0, /* Interrupt */ "Quit", "Illegal instruction", "Trace/BPT trap", "IOT trap", "EMT trap", "Floating exception", "Killed", "Bus error", "Memory fault", "Bad system call", 0, /* Broken pipe */ "Alarm call", "Terminated", "Signal 16", }; MSG export = "export"; MSG readonly = "readonly"; SYSTAB commands { {"cd", SYSCD}, {"read", SYSREAD}, /* {"[", SYSTST}, */ {"set", SYSSET}, {":", SYSNULL}, {"trap", SYSTRAP}, {"login", SYSLOGIN}, {"wait", SYSWAIT}, {"eval", SYSEVAL}, {".", SYSDOT}, {"newgrp", SYSLOGIN}, {readonly, SYSRDONLY}, {export, SYSXPORT}, {"chdir", SYSCD}, {"break", SYSBREAK}, {"continue", SYSCONT}, {"shift", SYSSHFT}, {"exit", SYSEXIT}, {"exec", SYSEXEC}, {"times", SYSTIMES}, {"umask", SYSUMASK}, {0, 0}, }; 'kS TWZ]`cf Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "dup.h" #include "sym.h" #include "timeout.h" #include #include #include UFD output = 2; LOCAL BOOL beenhere = FALSE; CHAR tmpout[20] = "/tmp/sh-"; FILEBLK stdfile; FILE standin = &stdfile; #include PROC VOID exfile(); main(c, v) INT c; STRING v[]; { REG INT rflag=ttyflg; /* initialise storage allocation */ stdsigs(); setbrk(BRKINCR); addblok((POS)0); /* set names from userenv */ getenv(); /* look for restricted */ /* IF c>0 ANDF any('r', *v) THEN rflag=0 FI */ /* look for options */ dolc=options(c,v); IF dolc<2 THEN flags |= stdflg FI IF (flags&stdflg)==0 THEN dolc--; FI dolv=v+c-dolc; dolc--; /* return here for shell file execution */ setjmp(subshell); /* number of positional parameters */ assnum(&dolladr,dolc); cmdadr=dolv[0]; /* set pidname */ assnum(&pidadr, getpid()); /* set up temp file names */ settmp(); /* default ifs */ dfault(&ifsnod, sptbnl); IF (beenhere++)==FALSE THEN /* ? profile */ IF *cmdadr=='-' ANDF (input=pathopen(nullstr, profile))>=0 THEN exfile(rflag); flags &= ~ttyflg; FI IF rflag==0 THEN flags |= rshflg FI /* open input file if specified */ IF comdiv THEN estabf(comdiv); input = -1; ELSE input=((flags&stdflg) ? 0 : chkopen(cmdadr)); comdiv--; FI ELSE *execargs=dolv; /* for `ps' cmd */ FI exfile(0); done(); } LOCAL VOID exfile(prof) BOOL prof; { REG L_INT mailtime = 0; REG INT userid; struct stat statb; /* move input */ IF input>0 THEN Ldup(input,INIO); input=INIO; FI /* move output to safe place */ IF output==2 THEN Ldup(dup(2),OTIO); output=OTIO; FI userid=getuid(); /* decide whether interactive */ IF (flags&intflg) ORF ((flags&oneflg)==0 ANDF gtty(output,&statb)==0 ANDF gtty(input,&statb)==0) THEN dfault(&ps1nod, (userid?stdprompt:supprompt)); dfault(&ps2nod, readmsg); flags |= ttyflg|prompt; ignsig(KILL); ELSE flags |= prof; flags &= ~prompt; FI IF setjmp(errshell) ANDF prof THEN close(input); return; FI /* error return here */ loopcnt=breakcnt=peekc=0; iopend=0; IF input>=0 THEN initf(input) FI /* command loop */ LOOP tdystak(0); stakchk(); /* may reduce sbrk */ exitset(); IF (flags&prompt) ANDF standin->fstak==0 ANDF !eof THEN IF mailnod.namval ANDF stat(mailnod.namval,&statb)>=0 ANDF statb.st_size ANDF (statb.st_mtime != mailtime) ANDF mailtime THEN prs(mailmsg) FI mailtime=statb.st_mtime; prs(ps1nod.namval); alarm(TIMEOUT); flags |= waiting; FI trapnote=0; peekc=readc(); IF eof THEN return; FI alarm(0); flags &= ~waiting; execute(cmd(NL,MTFLG),0); eof |= (flags&oneflg); POOL } chkpr(eor) char eor; { IF (flags&prompt) ANDF standin->fstak==0 ANDF eor==NL THEN prs(ps2nod.namval); FI } settmp() { itos(getpid()); serial=0; tmpnam=movstr(numbuf,&tmpout[TMPNAM]); } Ldup(fa, fb) REG INT fa, fb; { dup(fa|DUPFLG, fb); close(fa); ioctl(fb, FIOCLEX, 0); } 'k<?BEHKNQbY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "sym.h" LOCAL CHAR quote; /* used locally */ LOCAL CHAR quoted; /* used locally */ LOCAL STRING copyto(endch) REG CHAR endch; { REG CHAR c; WHILE (c=getch(endch))!=endch ANDF c DO pushstak(c|quote) OD zerostak(); IF c!=endch THEN error(badsub) FI } LOCAL skipto(endch) REG CHAR endch; { /* skip chars up to } */ REG CHAR c; WHILE (c=readc()) ANDF c!=endch DO SWITCH c IN case SQUOTE: skipto(SQUOTE); break; case DQUOTE: skipto(DQUOTE); break; case DOLLAR: IF readc()==BRACE THEN skipto('}'); FI ENDSW OD IF c!=endch THEN error(badsub) FI } LOCAL getch(endch) CHAR endch; { REG CHAR d; retry: d=readc(); IF !subchar(d) THEN return(d); FI IF d==DOLLAR THEN REG INT c; IF (c=readc(), dolchar(c)) THEN NAMPTR n=NIL; INT dolg=0; BOOL bra; REG STRING argp, v; CHAR idb[2]; STRING id=idb; IF bra=(c==BRACE) THEN c=readc() FI IF letter(c) THEN argp=relstak(); WHILE alphanum(c) DO pushstak(c); c=readc() OD zerostak(); n=lookup(absstak(argp)); setstak(argp); v = n->namval; id = n->namid; peekc = c|MARK;; ELIF digchar(c) THEN *id=c; idb[1]=0; IF astchar(c) THEN dolg=1; c='1'; FI c -= '0'; v=((c==0) ? cmdadr : (c<=dolc) ? dolv[c] : (dolg=0)); ELIF c=='$' THEN v=pidadr; ELIF c=='!' THEN v=pcsadr; ELIF c=='#' THEN v=dolladr; ELIF c=='?' THEN v=exitadr; ELIF c=='-' THEN v=flagadr; ELIF bra THEN error(badsub); ELSE goto retry; FI c = readc(); IF !defchar(c) ANDF bra THEN error(badsub); FI argp=0; IF bra THEN IF c!='}' THEN argp=relstak(); IF (v==0)NEQ(setchar(c)) THEN copyto('}'); ELSE skipto('}'); FI argp=absstak(argp); FI ELSE peekc = c|MARK; c = 0; FI IF v THEN IF c!='+' THEN LOOP WHILE c = *v++ DO pushstak(c|quote); OD IF dolg==0 ORF (++dolg>dolc) THEN break; ELSE v=dolv[dolg]; pushstak(SP|(*id=='*' ? quote : 0)); FI POOL FI ELIF argp THEN IF c=='?' THEN failed(id,*argp?argp:badparam); ELIF c=='=' THEN IF n THEN assign(n,argp); ELSE error(badsub); FI FI ELIF flags&setflg THEN failed(id,badparam); FI goto retry; ELSE peekc=c|MARK; FI ELIF d==endch THEN return(d); ELIF d==SQUOTE THEN comsubst(); goto retry; ELIF d==DQUOTE THEN quoted++; quote^=QUOTE; goto retry; FI return(d); } STRING macro(as) STRING as; { /* Strip "" and do $ substitution * Leaves result on top of stack */ REG BOOL savqu =quoted; REG CHAR savq = quote; FILEHDR fb; push(&fb); estabf(as); usestak(); quote=0; quoted=0; copyto(0); pop(); IF quoted ANDF (stakbot==staktop) THEN pushstak(QUOTE) FI quote=savq; quoted=savqu; return(fixstak()); } LOCAL comsubst() { /* command substn */ FILEBLK cb; REG CHAR d; REG STKPTR savptr = fixstak(); usestak(); WHILE (d=readc())!=SQUOTE ANDF d DO pushstak(d) OD BEGIN REG STRING argc; trim(argc=fixstak()); push(&cb); estabf(argc); END BEGIN REG TREPTR t = makefork(FPOU,cmd(EOFSYM,MTFLG|NLFLG)); INT pv[2]; /* this is done like this so that the pipe * is open only when needed */ chkpipe(pv); initf(pv[INPIPE]); execute(t, 0, 0, pv); close(pv[OTPIPE]); END tdystak(savptr); staktop=movstr(savptr,stakbot); WHILE d=readc() DO pushstak(d|quote) OD await(0); WHILE stakbot!=staktop DO IF (*--staktop&STRIP)!=NL ((THEN ++staktop; break; FI OD pop(); } #define CPYSIZ 512 subst(in,ot) INT in, ot; { REG CHAR c; FILEBLK fb; REG INT count=CPYSIZ; push(&fb); initf(in); /* DQUOTE used to stop it from quoting */ WHILE c=(getch(DQUOTE)&STRIP) DO pushstak(c); IF --count == 0 THEN flush(ot); count=CPYSIZ; FI OD flush(ot); pop(); } LOCAL flush(ot) { write(ot,stakbot,staktop-stakbot); IF flags&execpr THEN write(output,stakbot,staktop-stakbot) FI staktop=stakbot; } 'kyG0369BY # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "dup.h" /* ======== input output and file copying ======== */ initf(fd) UFD fd; { REG FILE f=standin; f->fdes=fd; f->fsiz=((flags&(oneflg|ttyflg))==0 ? BUFSIZ : 1); f->fnxt=f->fend=f->fbuf; f->feval=0; f->flin=1; f->feof=FALSE; } estabf(s) REG STRING s; { REG FILE f; (f=standin)->fdes = -1; f->fend=length(s)+(f->fnxt=s); f->flin=1; return(f->feof=(s==0)); } push(af) FILE af; { REG FILE f; (f=af)->fstak=standin; f->feof=0; f->feval=0; standin=f; } pop() { REG FILE f; IF (f=standin)->fstak THEN IF f->fdes>=0 THEN close(f->fdes) FI standin=f->fstak; return(TRUE); ELSE return(FALSE); FI } chkpipe(pv) INT *pv; { IF pipe(pv)<0 ORF pv[INPIPE]<0 ORF pv[OTPIPE]<0 THEN error(piperr); FI } chkopen(idf) STRING idf; { REG INT rc; IF (rc=open(idf,0))<0 THEN failed(idf,badopen); ELSE return(rc); FI } rename(f1,f2) REG INT f1, f2; { IF f1!=f2 THEN dup(f1|DUPFLG, f2); close(f1); IF f2==0 THEN ioset|=1 FI FI } create(s) STRING s; { REG INT rc; IF (rc=creat(s,0666))<0 THEN failed(s,badcreate); ELSE return(rc); FI } tmpfil() { itos(serial++); movstr(numbuf,tmpnam); return(create(tmpout)); } /* set by trim */ BOOL nosubst; copy(ioparg) IOPTR ioparg; { CHAR c, *ends; REG CHAR *cline, *clinep; INT fd; REG IOPTR iop; IF iop=ioparg THEN copy(iop->iolst); ends=mactrim(iop->ioname); IF nosubst THEN iop->iofile &= ~IODOC FI fd=tmpfil(); iop->ioname=cpystak(tmpout); iop->iolst=iotemp; iotemp=iop; cline=locstak(); LOOP clinep=cline; chkpr(NL); WHILE (c = (nosubst ? readc() : nextc(*ends)), !eolchar(c)) DO *clinep++ = c OD *clinep=0; IF eof ORF eq(cline,ends) THEN break FI *clinep++=NL; write(fd,cline,clinep-cline); POOL close(fd); FI } 'kfM'*- Y  # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" STRING trapcom[MAXTRAP]; BOOL trapflg[MAXTRAP]; /* ======== fault handling routines ======== */ VOID fault(sig) REG INT sig; { REG INT flag; signal(sig,fault); IF sig==MEMF THEN IF setbrk(brkincr) == -1 THEN error(nospace); FI ELIF sig==ALARM THEN IF flags&waiting THEN done(); FI ELSE flag = (trapcom[sig] ? TRAPSET : SIGSET); trapnote |= flag; trapflg[sig] |= flag; FI } stdsigs() { ignsig(QUIT); getsig(INTR); getsig(MEMF); getsig(ALARM); } ignsig(n) { REG INT s, i; IF (s=signal(i=n,1)&01)==0 THEN trapflg[i] |= SIGMOD; FI return(s); } getsig(n) { REG INT i; IF trapflg[i=n]&SIGMOD ORF ignsig(i)==0 THEN signal(i,fault); FI } oldsigs() { REG INT i; REG STRING t; i=MAXTRAP; WHILE i-- DO t=trapcom[i]; IF t==0 ORF *t THEN clrsig(i); FI trapflg[i]=0; OD trapnote=0; } clrsig(i) INT i; { free(trapcom[i]); trapcom[i]=0; IF trapflg[i]&SIGMOD THEN signal(i,fault); trapflg[i] &= ~SIGMOD; FI } chktrap() { /* check for traps */ REG INT i=MAXTRAP; REG STRING t; trapnote &= ~TRAPSET; WHILE --i DO IF trapflg[i]&TRAPSET THEN trapflg[i] &= ~TRAPSET; IF t=trapcom[i] THEN INT savxit=exitval; execexp(t,0); exitval=savxit; exitset(); FI FI OD } 'kv !$yY  # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include #define DIRSIZ 15 #include #include /* globals (file name generation) * * "*" in params matches r.e ".*" * "?" in params matches r.e. "." * "[...]" in params matches character class * "[...a-z...]" in params matches a through z. * */ PROC VOID addg(); INT expand(as,rflg) STRING as; { INT count, dirf; BOOL dir=0; STRING rescan = 0; REG STRING s, cs; ARGPTR schain = gchain; struct direct entry; STATBUF statb; IF trapnote&SIGSET THEN return(0); FI s=cs=as; entry.d_name[DIRSIZ-1]=0; /* to end the string */ /* check for meta chars */ BEGIN REG BOOL slash; slash=0; WHILE !fngchar(*cs) DO IF *cs++==0 THEN IF rflg ANDF slash THEN break; ELSE return(0) FI ELIF *cs=='/' THEN slash++; FI OD END LOOP IF cs==s THEN s=nullstr; break; ELIF *--cs == '/' THEN *cs=0; IF s==cs THEN s="/" FI break; FI POOL IF stat(s,&statb)>=0 ANDF (statb.st_mode&S_IFMT)==S_IFDIR ANDF (dirf=open(s,0))>0 THEN dir++; FI count=0; IF *cs==0 THEN *cs++=0200 FI IF dir THEN /* check for rescan */ REG STRING rs; rs=cs; REP IF *rs=='/' THEN rescan=rs; *rs=0; gchain=0 FI PER *rs++ DONE WHILE read(dirf, &entry, 16) == 16 ANDF (trapnote&SIGSET) == 0 DO IF entry.d_ino==0 ORF (*entry.d_name=='.' ANDF *cs!='.') THEN continue; FI IF gmatch(entry.d_name, cs) THEN addg(s,entry.d_name,rescan); count++; FI OD close(dirf); IF rescan THEN REG ARGPTR rchain; rchain=gchain; gchain=schain; IF count THEN count=0; WHILE rchain DO count += expand(rchain->argval,1); rchain=rchain->argnxt; OD FI *rescan='/'; FI FI BEGIN REG CHAR c; s=as; WHILE c = *s DO *s++=(c&STRIP?c:'/') OD END return(count); } gmatch(s, p) REG STRING s, p; { REG INT scc; CHAR c; IF scc = *s++ THEN IF (scc &= STRIP)==0 THEN scc=0200; FI FI SWITCH c = *p++ IN case '[': {BOOL ok; INT lc; ok=0; lc=077777; WHILE c = *p++ DO IF c==']' THEN return(ok?gmatch(s,p):0); ELIF c==MINUS THEN IF lc<=scc ANDF scc<=(*p++) THEN ok++ FI ELSE IF scc==(lc=(c&STRIP)) THEN ok++ FI FI OD return(0); } default: IF (c&STRIP)!=scc THEN return(0) FI case '?': return(scc?gmatch(s,p):0); case '*': IF *p==0 THEN return(1) FI --s; WHILE *s DO IF gmatch(s++,p) THEN return(1) FI OD return(0); case 0: return(scc==0); ENDSW } LOCAL VOID addg(as1,as2,as3) STRING as1, as2, as3; { REG STRING s1, s2; REG INT c; s2 = locstak()+BYTESPERWORD; s1=as1; WHILE c = *s1++ DO IF (c &= STRIP)==0 THEN *s2++='/'; break; FI *s2++=c; OD s1=as2; WHILE *s2 = *s1++ DO s2++ OD IF s1=as3 THEN *s2++='/'; WHILE *s2++ = *++s1 DONE FI makearg(endstak(s2)); } makearg(args) REG STRING args; { args->argnxt=gchain; gchain=args; } 'k㴁E 4Y  # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" /* ======== error handling ======== */ exitset() { assnum(&exitadr,exitval); } sigchk() { /* Find out if it is time to go away. * `trapnote' is set to SIGSET when fault is seen and * no trap has been set. */ IF trapnote&SIGSET THEN exitsh(SIGFAIL); FI } failed(s1,s2) STRING s1, s2; { prp(); prs(s1); IF s2 THEN prs(colon); prs(s2); FI newline(); exitsh(ERROR); } error(s) STRING s; { failed(s,NIL); } exitsh(xno) INT xno; { /* Arrive here from `FATAL' errors * a) exit command, * b) default trap, * c) fault with no trap set. * * Action is to return to command level or exit. */ exitval=xno; IF (flags & (forked|errflg|ttyflg)) != ttyflg THEN done(); ELSE clearup(); longjmp(errshell,1); FI } done() { REG STRING t; IF t=trapcom[0] THEN trapcom[0]=0; /*should free but not long */ execexp(t,0); FI rmtemp(0); exit(exitval); } rmtemp(base) IOPTR base; { WHILE iotem((p>base DO unlink(iotemp->ioname); iotemp=iotemp->iolst; OD } 'kMߴs Y  # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" char _ctype1[] { /* 000 001 002 003 004 005 006 007 */ _EOF, 0, 0, 0, 0, 0, 0, 0, /* bs ht nl vt np cr so si */ 0, _TAB, _EOR, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* sp ! " # $ % & ' */ _SPC, 0, _DQU, 0, _DOL1, 0, _AMP, 0, /* ( ) * + , - . / */ _BRA, _KET, 0, 0, 0, 0, 0, 0, /* 0 1 2 3 4 5 6 7 */ 0, 0, 0, 0, 0, 0, 0, 0, /* 8 9 : ; < = > ? */ 0, 0, 0, _SEM, _LT, 0, _GT, 0, /* @ A B C D E F G */ 0, 0, 0, 0, 0, 0, 0, 0, /* H I J K L M N O */ 0, 0, 0, 0, 0, 0, 0, 0, /* P Q R S T U V W */ 0, 0, 0, 0, 0, 0, 0, 0, /* X Y Z [ \ ] ^ _ */ 0, 0, 0, 0, _BSL, 0, _HAT, 0, /* ` a b c d e f g */ _LQU, 0, 0, 0, 0, 0, 0, 0, /* h i j k l m n o */ 0, 0, 0, 0, 0, 0, 0, 0, /* p q r s t u v w */ 0, 0, 0, 0, 0, 0, 0, 0, /* x y z { | } ~ del */ 0, 0, 0, 0, _BAR, 0, 0, 0 }; char _ctype2[] { /* 000 001 002 003 004 005 006 007 */ 0, 0, 0, 0, 0, 0, 0, 0, /* bs ht nl vt np cr so si */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* sp ! " # $ % & ' */ 0, _PCS, 0, _NUM, _DOL2, 0, 0, 0, /* ( ) * + , - . / */ 0, 0, _AST, _PLS, 0, _MIN, 0, 0, /* 0 1 2 3 4 5 6 7 */ _DIG, _DIG, _DIG, _DIG, _DIG, _DIG, _DIG, _DIG, /* 8 9 : ; < = > ? */ _DIG, _DIG, 0, 0, 0, _EQ, 0, _QU, /* @ A B C D E F G */ _AT, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, /* H I J K L M N O */ _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, /* P Q R S T U V W */ _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, _UPC, /* X Y Z [ \ ] ^ _ */ _UPC, _UPC, _UPC, _SQB, 0, 0, 0, _UPC, /* ` a b c d e f g */ 0, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, /* h i j k l m n o */ _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, /* p q r s t u v w */ _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, _LPC, /* x y z { | } ~ del */ _LPC, _LPC, _LPC, _CBR, 0, _CKT, 0, 0 }; 'k,v Y  # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" #include "sym.h" PROC IOPTR inout(); PROC VOID chkword(); PROC VOID chksym(); PROC TREPTR term(); PROC TREPTR makelist(); PROC TREPTR list(); PROC REGPTR syncase(); PROC TREPTR item(); PROC VOID skipnl(); PROC VOID prsym(); PROC VOID synbad(); /* ======== command line decoding ========*/ TREPTR makefork(flgs, i) INT flgs; TREPTR i; { REG TREPTR t; t=getstak(FORKTYPE); t->forktyp=flgs|TFORK; t->forktre=i; t->forkio=0; return(t); } LOCAL TREPTR makelist(type,i,r) INT type; TREPTR i, r; { REG TREPTR t; IF i==0 ORF r==0 THEN synbad(); ELSE t = getstak(LSTTYPE); t->lsttyp = type; t->lstlef = i; t->lstrit = r; FI return(t); } /* * cmd * empty * list * list & [ cmd ] * list [ ; cmd ] */ TREPTR cmd(sym,flg) REG INT sym; INT flg; { REG TREPTR i, e; i = list(flg); IF wdval==NL THEN IF flg&NLFLG THEN wdval=';'; chkpr(NL); FI ELIF i==0 ANDF (flg&MTFLG)==0 THEN synbad(); FI SWITCH wdval IN case '&': IF i THEN i = makefork(FINT|FPRS|FAMP, i); ELSE synbad(); FI case ';': IF e=cmd(sym,flg|MTFLG) THEN i=makelist(TLST, i, e); FI break; case EOFSYM: IF sym==NL THEN break; FI default: IF sym THEN chksym(sym); FI ENDSW return(i); } /* * list * term * list && term * list || term */ LOCAL TREPTR list(flg) { REG TREPTR r; REG INT b; r = term(flg); WHILE r ANDF ((b=(wdval==ANDFSYM)) ORF wdval==ORFSYM) DO r = makelist((b ? TAND : TORF), r, term(NLFLG)); OD return(r); } /* * term * item * item |^ term */ LOCAL TREPTR term(flg) { REG TREPTR t; reserv++; IF flg&NLFLG THEN skipnl(); ELSE word(); FI IF (t=item(TRUE)) ANDF (wdval=='^' ORF wdval=='|') THEN return(makelist(TFIL, makefork(FPOU,t), makefork(FPIN|FPCL,term(NLFLG)))); ELSE return(t); FI } LOCAL REGPTR syncase(esym) REG INT esym; { skipnl(); IF wdval==esym THEN return(0); ELSE REG REGPTR r=getstak(REGTYPE); r->regptr=0; LOOP wdarg->argnxt=r->regptr; r->regptr=wdarg; IF wdval ORF ( word()!=')' ANDF wdval!='|' ) THEN synbad(); FI IF wdval=='|' THEN word(); ELSE break; FI POOL r->regcom=cmd(0,NLFLG|MTFLG); IF wdval==ECSYM THEN r->regnxt=syncase(esym); ELSE chksym(esym); r->regnxt=0; FI return(r); FI } /* * item * * ( cmd ) [ < in ] [ > out ] * word word* [ < in ] [ > out ] * if ... then ... else ... fi * for ... while ... do ... done * case ... in ... esac * begin ... end */ LOCAL TREPTR item(flag) BOOL flag; { REG TREPTR t; REG IOPTR io; IF flag THEN io=inout((IOPTR)0); ELSE io=0; FI SWITCH wdval IN case CASYM: BEGIN t=getstak(SWTYPE); chkword(); t->swarg=wdarg->argval; skipnl(); chksym(INSYM|BRSYM); t->swlst=syncase(wdval==INSYM?ESSYM:KTSYM); t->swtyp=TSW; break; END case IFSYM: BEGIN REG INT w; t=getstak(IFTYPE); t->iftyp=TIF; t->iftre=cmd(THSYM,NLFLG); t->thtre=cmd(ELSYM|FISYM|EFSYM,NLFLG); t->eltre=((w=wdval)==ELSYM ? cmd(FISYM,NLFLG) : (w==EFSYM ? (wdval=IFSYM, item(0)) : 0)); IF w==EFSYM THEN return(t) FI break; END case FORSYM: BEGIN t=getstak(FORTYPE); t->fortyp=TFOR; t->forlst=0; chkword(); t->fornam=wdarg->argval; IF skipnl()==INSYM THEN chkword(); t->forlst=item(0); IF wdval!=NL ANDF wdval!=';' THEN synbad(); FI chkpr(wdval); skipnl(); FI chksym(DOSYM|BRSYM); t->fortre=cmd(wdval==DOSYM?ODSYM:KTSYM,NLFLG); break; END case WHSYM: case UNSYM: BEGIN t=getstak(WHTYPE); t->whtyp=(wdval==WHSYM ? TWH : TUN); t->whtre = cmd(DOSYM,NLFLG); t->dotre = cmd(ODSYM,NLFLG); break; END case BRSYM: t=cmd(KTSYM,NLFLG); break; case '(': BEGIN REG PARPTR p; p=getstak(PARTYPE); p->partre=cmd(')',NLFLG); p->partyp=TPAR; t=makefork(0,p); break; END default: IF io==0 THEN return(0); FI case 0: BEGIN REG ARGPTR argp; REG ARGPTR *argtail; REG ARGPTR *argset=0; INT keywd=1; t=getstak(COMTYPE); t->comio=io; /*initial io chain*/ argtail = &(t->comarg); WHILE wdval==0 DO argp = wdarg; IF wdset ANDF keywd THEN argp->argnxt=argset; argset=argp; ELSE *argtail=argp; argtail = &(argp->argnxt); keywd=flags&keyflg; FI word(); IF flag THEN t->comio=inout(t->comio); FI OD t->comtyp=TCOM; t->comset=argset; *argtail=0; return(t); END ENDSW reserv++; word(); IF io=inout(io) THEN t=makefork(0,t); t->treio=io; FI return(t); } LOCAL VOID skipnl() { WHILE (reserv++, word()==NL) DO chkpr(NL) OD return(wdval); } LOCAL IOPTR inout(lastio) IOPTR lastio; { REG INT iof; REG IOPTR iop; REG CHAR c; iof=wdnum; SWITCH wdval IN case DOCSYM: iof |= IODOC; break; case APPSYM: case '>': IF wdnum==0 THEN iof |= 1 FI iof |= IOPUT; IF wdval==APPSYM THEN iof |= IOAPP; break; FI case '<''k~0v Y : IF (c=nextc(0))=='&' THEN iof |= IOMOV; ELIF c=='>' THEN iof |= IORDW; ELSE peekc=c|MARK; FI break; default: return(lastio); ENDSW chkword(); iop=getstak(IOTYPE); iop->ioname=wdarg->argval; iop->iofile=iof; IF iof&IODOC THEN iop->iolst=iopend; iopend=iop; FI word(); iop->ionxt=inout(lastio); return(iop); } LOCAL VOID chkword() { IF word() THEN synbad(); FI } LOCAL VOID chksym(sym) { REG INT x = sym&wdval; IF ((x&SYMFLG) ? x : sym) != wdval THEN synbad(); FI } LOCAL VOID prsym(sym) { IF sym&SYMFLG THEN REG SYSPTR sp=reserved; WHILE sp->sysval ANDF sp->sysval!=sym DO sp++ OD prs(sp->sysnam); ELIF sym==EOFSYM THEN prs(endoffile); ELSE IF sym&SYMREP THEN prc(sym) FI IF sym==NL THEN prs("newline"); ELSE prc(sym); FI FI } LOCAL VOID synbad() { prp(); prs(synmsg); IF (flags&ttyflg)==0 THEN prs(atline); prn(standin->flin); FI prs(colon); prc(LQ); IF wdval THEN prsym(wdval); ELSE prs(wdarg->argval); FI prc(RQ); prs(unexpected); newline(); (( exitsh(SYNBAD); } ' kMQ Y  builtin() {return(0);} '!kRZ Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" /* * storage allocator * (circular first fit strategy) */ #define BUSY 01 #define busy(x) (Rcheat((x)->word)&BUSY) POS brkincr=BRKINCR; BLKPTR blokp; /*current search pointer*/ BLKPTR bloktop=BLK(end); /*top of arena (last blok)*/ ADDRESS alloc(nbytes) POS nbytes; { REG POS rbytes = round(nbytes+BYTESPERWORD,BYTESPERWORD); LOOP INT c=0; REG BLKPTR p = blokp; REG BLKPTR q; REP IF !busy(p) THEN WHILE !busy(q = p->word) DO p->word = q->word OD IF ADR(q)-ADR(p) >= rbytes THEN blokp = BLK(ADR(p)+rbytes); IF q > blokp THEN blokp->word = p->word; FI p->word=BLK(Rcheat(blokp)|BUSY); return(ADR(p+1)); FI FI q = p; p = BLK(Rcheat(p->word)&~BUSY); PER p>q ORF (c++)==0 DONE addblok(rbytes); POOL } VOID addblok(reqd) POS reqd; { IF stakbas!=staktop THEN REG STKPTR rndstak; REG BLKPTR blokstak; pushstak(0); rndstak=round(staktop,BYTESPERWORD); blokstak=BLK(stakbas)-1; blokstak->word=stakbsy; stakbsy=blokstak; bloktop->word=BLK(Rcheat(rndstak)|BUSY); bloktop=BLK(rndstak); FI reqd += brkincr; reqd &= ~(brkincr-1); blokp=bloktop; bloktop=bloktop->word=BLK(Rcheat(bloktop)+reqd); bloktop->word=BLK(ADR(end)+1); BEGIN REG STKPTR stakadr=STK(bloktop+2); staktop=movstr(stakbot,stakadr); stakbas=stakbot=stakadr; END } VOID free(ap) BLKPTR ap; { REG BLKPTR p; IF (p=ap) ANDF pword) &= ~BUSY; FI } #ifdef DEBUG chkbptr(ptr) BLKPTR ptr; { INT exf=0; REG BLKPTR p = end; REG BLKPTR q; INT us=0, un=0; LOOP q = Rcheat(p->word)&~BUSY; IF p==ptr THEN exf++ FI IF qbloktop THEN abort(3) FI IF p==bloktop THEN break FI IF busy(p) THEN us += q-p; ELSE un += q-p; FI IF p>=q THEN abort(4) FI p=q; POOL IF exf==0 THEN abort(1) FI prn(un); prc(SP); prn(us); prc(NL); } #endif '"k+ Y # /* * UNIX shell * * S. R. Bourne * Bell Telephone Laboratories * */ #include "defs.h" PROC STRING *copyargs(); LOCAL DOLPTR dolh; CHAR flagadr[10]; CHAR flagchar[] = { 'x', 'n', 'v', 't', 's', 'i', 'e', 'r', 'k', 'u', 0 }; INT flagval[] = { execpr, noexec, readpr, oneflg, stdflg, intflg, errflg, rshflg, keyflg, setflg, 0 }; /* ======== option handling ======== */ INT options(argc,argv) STRING *argv; INT argc; { REG STRING cp; REG STRING *argp=argv; REG STRING flagc; STRING flagp; IF argc>1 ANDF *argp[1]=='-' THEN cp=argp[1]; flags &= ~(execpr|readpr); WHILE *++cp DO flagc=flagchar; WHILE *flagc ANDF *flagc != *cp DO flagc++ OD IF *cp == *flagc THEN flags |= flagval[flagc-flagchar]; ELIF *cp=='c' ANDF argc>2 ANDF comdiv==0 THEN comdiv=argp[2]; argp[1]=argp[0]; argp++; argc--; ELSE failed(argv[1],badopt); FI OD argp[1]=argp[0]; argc--; FI /* set up $- */ flagc=flagchar; flagp=flagadr; WHILE *flagc DO IF flags&flagval[flagc-flagchar] THEN *flagp++ = *flagc; FI flagc++; OD *flagp++=0; return(argc); } VOID setargs(argi) STRING argi[]; { /* count args */ REG STRING *argp=argi; REG INT argn=0; WHILE Rcheat(*argp++)!=ENDARGS DO argn++ OD /* free old ones unless on for loop chain */ freeargs(dolh); dolh=copyargs(argi,argn); /* sets dolv */ assnum(&dolladr,dolc=argn-1); } freeargs(blk) DOLPTR blk; { REG STRING *argp; REG DOLPTR argr=0; REG DOLPTR argblk; IF argblk=blk THEN argr = argblk->dolnxt; IF (--argblk->doluse)==0 THEN FOR argp=argblk->dolarg; Rcheat(*argp)!=ENDARGS; argp++ DO free(*argp) OD free(argblk); FI FI return(argr); } LOCAL STRING * copyargs(from, n) STRING from[]; { REG STRING * np=alloc(sizeof(STRING*)*n+3*BYTESPERWORD); REG STRING * fp=from; REG STRING * pp=np; np->doluse=1; /* use count */ np=np->dolarg; dolv=np; WHILE n-- DO *np++ = make(*fp++) OD *np++ = ENDARGS; return(pp); } clearup() { /* force `for' $* lists to go away */ WHILE argfor=freeargs(argfor) DONE /* clean up io files */ WHILE pop() DONE } DOLPTR useargs() { IF dolh THEN dolh->doluse++; dolh->dolnxt=argfor; return(argfor=dolh); ELSE return(0); FI } '$k^ /* * Run programs submitted by at. */ #include #include #include #include #include # define DIR "/usr/spool/at" # define PDIR "past" # define LASTF "/usr/spool/at/lasttimedone" int nowtime; int nowdate; int nowyear; main(argc, argv) char **argv; { int tt, day, year, uniq; struct direct dirent; char file[DIRSIZ+1]; FILE *dirf; chdir(DIR); makenowtime(); if ((dirf = fopen(".", "r")) == NULL) { fprintf(stderr, "Cannot read at directory\n"); exit(1); } while (fread((char *)&dirent, sizeof(dirent), 1, dirf) == 1) { if (dirent.d_ino==0) continue; strncpy(file, dirent.d_name, DIRSIZ); file[DIRSIZ] = '\0'; if (sscanf(file, "%2d.%3d.%4d.%2d", &year, &day, &tt, &uniq) != 4) continue; if (nowyear < year) continue; if (nowyear==year && nowdate < day) continue; if (nowyear==year && nowdate==day && nowtime < tt) continue; run(file); } fclose(dirf); updatetime(nowtime); exit(0); } makenowtime() { long t; struct tm *localtime(); register struct tm *tp; time(&t); tp = localtime(&t); nowtime = tp->tm_hour*100 + tp->tm_min; nowdate = tp->tm_yday; nowyear = tp->tm_year; } updatetime(t) { FILE *tfile; tfile = fopen(LASTF, "w"); if (tfile == NULL) { fprintf(stderr, "can't write lastfile\n"); exit(1); } fprintf(tfile, "%04d\n", t); } run(file) char *file; { struct stat stbuf; register pid, i; char sbuf[64]; if (fork()!=0) return; for (i=0; i<15; i++) close(i); dup(dup(open("/dev/null", 0))); sprintf(sbuf, "/bin/mv %.14s %s", file, PDIR); system(sbuf); chdir(PDIR); if (stat(file, &stbuf) == -1) exit(1); setgid(stbuf.st_gid); setuid(stbuf.st_uid); if (pid = fork()) { if (pid == -1) exit(1); wait((int *)0); unlink(file); exit(0); } nice(3); execl("/bin/sh", "sh", file, 0); execl("/usr/bin/sh", "sh", file, 0); fprintf(stderr, "Can't execl shell\n"); exit(1); } '%k5{8j% ((/* * at time mon day * at time wday * at time wday 'week' * */ #include #include #include #include #define HOUR 100 #define HALFDAY (12*HOUR) #define DAY (24*HOUR) #define THISDAY "/usr/spool/at" char *days[] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", }; struct monstr { char *mname; int mlen; } months[] = { { "january", 31 }, { "february", 28 }, { "march", 31 }, { "april", 30 }, { "may", 31 }, { "june", 30 }, { "july", 31 }, { "august", 31 }, { "september", 30 }, { "october", 31 }, { "november", 30 }, { "december", 31 }, { 0, 0 }, }; char fname[100]; int utime; /* requested time in grains */ int now; /* when is it */ int uday; /* day of year to be done */ int uyear; /* year */ int today; /* day of year today */ FILE *file; FILE *ifile; char **environ; char *prefix(); FILE *popen(); main(argc, argv) char **argv; { extern onintr(); register c; char pwbuf[100]; FILE *pwfil; int larg; /* argv[1] is the user's time: e.g., 3AM */ /* argv[2] is a month name or day of week */ /* argv[3] is day of month or 'week' */ /* another argument might be an input file */ if (argc < 2) { fprintf(stderr, "at: arg count\n"); exit(1); } makeutime(argv[1]); larg = makeuday(argc,argv)+1; if (uday==today && larg<=2 && utime<=now) uday++; c = uyear%4==0? 366: 365; if (uday >= c) { uday -= c; uyear++; } filename(THISDAY, uyear, uday, utime); ifile = stdin; if (argc > larg) ifile = fopen(argv[larg], "r"); if (ifile == NULL) { fprintf(stderr, "at: cannot open input: %s\n", argv[larg]); exit(1); } if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, onintr); file = fopen(fname, "a"); chmod(fname, 0644); if (file == NULL) { fprintf(stderr, "at: cannot open memo file\n"); exit(1); } if ((pwfil = popen("pwd", "r")) == NULL) { fprintf(stderr, "at: can't execute pwd\n"); exit(1); } fgets(pwbuf, 100, pwfil); pclose(pwfil); fprintf(file, "cd %s", pwbuf); if (environ) { char **ep = environ; while(*ep) fprintf(file, "%s\n", *ep++); } while((c = getc(ifile)) != EOF) { putc(c, file); } exit(0); } makeutime(pp) char *pp; { register val; register char *p; /* p points to a user time */ p = pp; val = 0; while(isdigit(*p)) { val = val*10+(*p++ -'0'); } if (p-pp < 3) val *= HOUR; for (;;) { switch(*p) { case ':': ++p; if (isdigit(*p)) { if (isdigit(p[1])) { val +=(10* *p + p[1] - 11*'0'); p += 2; continue; } } fprintf(stderr, "at: bad time format:\n"); exit(1); case 'A': case 'a': if (val >= HALFDAY+HOUR) val = DAY+1; /* illegal */ if (val >= HALFDAY && val <(HALFDAY+HOUR)) val -= HALFDAY; break; case 'P': case 'p': if (val >= HALFDAY+HOUR) val = DAY+1; /* illegal */ if (val < HALFDAY) val += HALFDAY; break; case 'n': case 'N': val = HALFDAY; break; case 'M': case 'm': val = 0; break; case '\0': case ' ': /* 24 hour time */ if (val == DAY) val -= DAY; break; default: fprintf(stderr, "at: bad time format\n"); exit(1); } break; } if (val < 0 || val >= DAY) { fprintf(stderr, "at: time out of range\n"); exit(1); } if (val%HOUR >= 60) { fprintf(stderr, "at: illegal minute field\n"); exit(1); } utime = val; } makeuday(argc,argv) char **argv; { /* the presumption is that argv[2], argv[3] are either month day OR weekday [week]. Returns either 2 or 3 as last argument used */ /* first of all, what's today */ long tm; int found = -1; char **ps; struct tm *detail, *localtime(); struct monstr *pt; time(&tm); detail = localtime(&tm); uday = today = detail->tm_yday; uyear = detail->tm_year; now = detail->tm_hour*100+detail->tm_min; if (argc<=2) return(1); /* is the next argument a month name ? */ for (pt=months; pt->mname; pt++) { if (prefix(argv[2], pt->mname)) { if (found<0) found = pt-months; else { fprintf(stderr, "at: ambiguous month\n"); exit(1); } } } if (found>=0) { if (argc<=3) return(2); uday = atoi(argv[3]) - 1; if (uday<0) { fprintf(stderr, "at: illegal day\n"); exit(1); } while(--found>=0) uday += months[found].mlen; if (detail->tm_year%4==0 && uday>59) uday += 1; return(3); } /* not a month, try day of week */ found = -1; for (ps=days; pstm_wday; if (uday<=0) uday += 7; uday += today; if (argc>3 && strcmp("week", argv[3])==0) { uday += 7; return(3); } return(2); } char * prefix(begin, full) char *begin, *full; { int c; while (c = *begin++) { if (isupper(c)) c = tolower(c); if (*full != c) return(0); else full++; } return(full); } filename(dir, y, d, t) char *dir; { register i; for (i=0; ; i += 53) { sprintf(fname, "%s/%02d.%03d.%04d.%02d", d'%kx:{8j%ir, y, d, t, (getpid()+i)%100); if (access(fname, 0) == -1) return; } } onintr() { unlink(fname); exit(1); } '&k38j8j CFLAGS=-n -s -O all: tp rm *.o cp: tp cp tp /bin/tp rm *.o tp cmp: tp cmp tp /bin/tp rm *.o tp tp: tp0.o tp1.o tp2.o tp3.o cc $(CFLAGS) tp0.o tp1.o tp2.o tp3.o -o tp tp0.c tp1.c tp2.c tp3.c: tp.h ''ks`TX[^apsvy|27j9 #include "tp.h" gettape(how) int (*how)(); { register char *ptr0, *ptr1; register struct dent *d; int count; do { d = &dir[0]; count = 0; do { if (d->d_namep == 0) continue; decode(name,d); if (rnarg > 2) { ptr0 = name; ptr1 = *parg; while (*ptr1) if (*ptr0++ != *ptr1++) goto cont; if (*ptr0 && *ptr0 != '/') goto cont; } (*how)(d); /* delete, extract, or taboc */ ++count; cont: continue; } while (++d <= lastd); if (count == 0 && rnarg > 2) printf("%s not found\n", *parg); ++parg; } while (--narg > 2); } delete(dd) struct dent *dd; { if (verify('d') >= 0) clrent(dd); } update() { register struct dent *d; register b, last; int first, size; bitmap(); d = &dir[0]; do { if(d->d_namep == 0 || (d->d_mode&OK) == 0) continue; if (d->d_size == 0) continue; /* find a place on the tape for this file */ size = (d->d_size+BSIZE-1)/BSIZE; first = ndentb; toosmall: ++first; if ((last = first + size) >= tapsiz) maperr(); for (b = first; b < last; ++b) if (map[(b>>3) & MAPMASK] & (1<<(b&7))) { first = b; goto toosmall; }; d->d_tapea = first; setmap(d); } while (++d <= lastd); wrdir(); update1(); } update1() { register struct dent *d, *id; register index; int f; for (;;) { d = &dir[0]; index = MTSIZ; id = 0; do { /* find new dent with lowest tape address */ if(d->d_namep == 0 || (d->d_mode&OK) == 0) continue; if (d->d_tapea < index) { index = d->d_tapea; id = d; } } while (++d <= lastd); if ((d = id) == 0) return; d->d_mode &= ~OK; /* change from new to old */ if (d->d_size == 0) continue; decode(name,d); wseek(index); if ((f = open(name,0)) < 0) { printf("Can't open %s\n", name); continue; } for (index = d->d_size/BSIZE; index != 0; --index) { if (read(f,(char *)tapeb,BSIZE) != BSIZE) phserr(); twrite(); } if (index = d->d_size % BSIZE) { if (read(f,(char *)tapeb,index) != index) phserr(); twrite(); } if (read(f,(char *)tapeb,1) != 0) phserr(); close(f); } } phserr() { printf("%s -- Phase error \n", name); } bitmap() /* place old files in the map */ { register char *m; register count; register struct dent *d; for(m=map;m<&map[MAPSIZE];) *m++ = 0; count = ndirent; d = dir; do { if(d->d_namep != 0 && (d->d_mode&OK) == 0 && d->d_size != 0) setmap(d); d++; } while (--count); } setmap(d) register struct dent *d; { unsigned c, block; char bit; int i; c = d->d_size/BSIZE; if (d->d_size % BSIZE) c+((+; block = d->d_tapea; if ((c += block) >= tapsiz) maperr(); do { bit = 1 << (block & 7); i = (block>>3) & MAPMASK; if (bit & map[i]) maperr(); map[i] |= bit; } while (++block < c); } maperr() { printf("Tape overflow\n"); done(); } usage() { register reg,count; int nused, nentr, nfree; static lused; bitmap(); for(count=0,nentr=0;count= tapsiz) { printf("Tape overflow\n"); done(); } if (map[(reg>>3) & MAPMASK] & (1 << (reg&7))) { nused++; lused = reg; } else { if (flags & flm) break; nfree++; } reg++; } while (--count); printf("%4d entries\n%4d used\n", nentr, nused); if ((flags & flm)==0) printf("%4d free\n", nfree); printf("%4d last\n", lused); } taboc(dd) struct dent *dd; { register mode; register *m; register char *s; int count, *localtime(); char work[20]; if (flags & flv) { mode = dd->d_mode; s = &work[19]; *s = 0; for (count = 3; count; --count) { if (mode&1) *--s = 'x'; else *--s = '-'; if (mode&2) *--s = 'w'; else *--s = '-'; if (mode&4) *--s = 'r'; else *--s = '-'; mode >>= 3; } if (mode&4) s[2] = 's'; if (mode&2) s[5] = 's'; printf("%s%4d%4d%5d%9D ",s,dd->d_uid, dd->d_gid,dd->d_tapea,dd->d_size); m = localtime(&dd->d_time); printf("%2d/%2d/%2d %2d:%2d ",m[5],m[4]+1,m[3],m[2],m[1]); } printf("%s\n", name); } extract(d) register struct dent *d; { register count, id; if (d->d_size==0) return; if (verify('x') < 0) return; rseek(d->d_tapea); unlink(name); if ((id = creat(name,d->d_mode)) < 0) printf("%s -- create error\n", name); count = d->d_size/BSIZE; while (count--) { tread(); if (write(id, (char *)tapeb, BSIZE) != BSIZE) goto ng; } if (count = d->d_size % BSIZE) { tread(); if (write(id, (char *)tapeb, count) != count) { ng: printf("%s -- write error\n", name); close(id); return; } } close(id); chown(name,d->d_uid & 0377, d->d_gid&0377); } ' (k.147:=@CFIL5j8 #include "tp.h" #include #include #include #include struct direct direct; struct stat statb; clrdir() { register j, *p; j = ndirent * (DIRSZ/sizeof(int)); p = (int *)dir; do (*p++ = 0); while (--j); lastd = 0; } clrent(ptr) struct dent *ptr; { register *p, j; p = (int *)ptr; j = DIRSZ/sizeof(int); do *p++ = 0; while (--j); if (++ptr == lastd) do { if (--lastd < dir) { lastd = 0; return; } } while (lastd->d_namep == 0); } rddir() { register struct tent *tp; register struct dent *p1; struct dent *dptr; struct tent *tptr; int count, i, sum; short reg, *sp; sum = 0; clrdir(); rseek(0); tread(); /* Read the bootstrap block */ if ((tpentry[TPB-1].cksum != 0) && (flags & flm)) { ndirent = tpentry[TPB-1].cksum; if(flags & fls) swab((char *)&ndirent, (char *)&ndirent, sizeof(ndirent)); if(ndirent < 0 || ndirent > MDIRENT) ndirent = MDIRENT; ndentb = ndirent/TPB; } dptr = &dir[0]; count = ndirent; do { if ((count % TPB) == 0) { /* next block */ tread(); tptr = &tpentry[0]; } if(flags & fls) swab((char *)tptr, (char *)tptr, sizeof(*tptr)); sp = (short *)tptr; reg = 0; for(i=0;ipathnam[0] != '\0') { lastd = p1; encode(tp->pathnam,p1); p1->d_mode = tp->mode; p1->d_uid = tp->uid; p1->d_gid = tp->gid; p1->d_size = (((long)tp->size0&0377L)<<16)+(tp->size1&0177777L); p1->d_time = tp->time; p1->d_tapea = tp->tapea; } } ++tptr; /* bump to next tent */ (dptr++)->d_mode &= ~OK; } while (--count); if(sum != 0) if(flags & (fls|fli)) { printf("Directory checksum\n"); if ((flags & fli) == 0) done(); } else { flags |= fls; rddir(); printf("Warning: swabbing required\n"); return; } bitmap(); } wrdir() { register struct tent *tp; register struct dent *dp; struct dent *dptr; int count, i; short reg, *sp; wseek(0); if (flags & flm) reg = open(mheader,0); else reg = open(theader,0); if (reg >= 0) { read(reg,(char *)tapeb,BSIZE); close(reg); if(flags & fls) swab((char *)&ndirent, (char *)&tpentry[TPB-1].cksum, sizeof(ndirent)); else tpentry[TPB-1].cksum = ndirent; } dptr = &dir[0]; count = ndirent; for (;;) { twrite(); if (count == 0) return; tp = &tpentry[0]; do { dp = dptr++; /* dptr set to next entry */ if (dp->d_namep) { decode(tp->pathnam,dp); tp->mode = dp->d_mode; tp->uid = dp->d_uid; tp->gid = dp->d_gid; tp->time = dp->d_time; tp->size0 = dp->d_size >> 16; tp->size1 = dp->d_size; tp->tapea = dp->d_tapea; if(flags & fls) { swabdir(tp); swab((char *)tp, (char *)tp, sizeof(*tp)); } reg = 0; sp = (short *)tp; for(i=0;i 25 && b) { lseek(fio, (long)(b-1)*BSIZE, 0); /* seek previous block */ read(fio, (char *)&wseeka, 1); /* read next block */ } wseeka = b; if (lseek(fio, (long)b*BSIZE, 0) < 0) seekerr(); } seekerr() { printf("Tape seek error\n"); done(); } verify(key) { register c; if ((flags & (flw | flv)) == 0) return(0); repeat: printf("%c %s ", key, name); if ((flags & flw) == 0) { printf("\n"); return(0); } c = getchar(); if (c == 'n' && getchar() == '\n') done(); if (c == '\n') return(-1); if (c == 'y' && getchar() == '\n') return(0); while (getchar() != '\n'); goto repeat; } getfiles() { if ((narg -= 2) == 0) { strcpy(name, "."); callout(); } else while (--narg >= 0) { strcpy(name, *parg++); callout(); } } expand() { register char *p0, *save0; int n, fid; if ((fid = open(name,0)) < 0) fserr(); for (;;) { if ((n = read(fid, (char *)&direct, sizeof(direct))) != sizeof(direct)) { if (n == 0) { close(fid); return; } fserr(); } if (direct.d_ino == 0) /* null entry */ continue; p0 = name; if (direct.d_name[0] == '.') /* don't save .xxxx */ continue; while (*p0++); save0 = --p0; /* save loc of \0 */ if (p0[-1] != '/') *p0++ = '/'; strcpy(p0, direct.d_name); callout(); *save0 = 0; /* restore */ } } fserr() { printf("%s -'(kM.147:=@CFIL5j8- Cannot open file\n", name); done(); } callout() { register struct dent *d; register char *ptr1, *ptr0; struct dent *empty; int mode; if (stat(name,&statb) < 0) fserr(); mode = statb.st_mode; if ((mode &= S_IFMT) != 0) { if (mode == S_IFDIR) /* directory */ expand(); if(mode != S_IFREG) return; } /* when we reach here we have recursed until we found * an ordinary file. Now we look for it in "dir". */ empty = 0; d = &dir[0]; do { if (d->d_namep == 0) { /* empty directory slot */ if (empty == 0) /* remember the first one */ empty = d; continue; } decode(name1,d); ptr0 = name; ptr1 = name1; do if (*ptr0++ != *ptr1) goto cont; while (*ptr1++); /* veritably the same name */ if (flags & flu) { /* check the times */ if (d->d_time >= statb.st_mtime) return; } if (verify('r') < 0) return; goto copydir; cont: continue; } while (++d <= lastd); /* name not found in directory */ if ((d = empty) == 0) { d = lastd +1; if (d >= edir) { printf("Directory overflow\n"); done(); } } if (verify('a') < 0) return; if (d > lastd) lastd = d; encode(name,d); copydir: d->d_mode = statb.st_mode | OK; d->d_uid = statb.st_uid; d->d_gid = statb.st_gid; d->d_size = statb.st_size; d->d_time = statb.st_mtime; } swabdir(tp) register struct tent *tp; { swab((char *)tp, (char *)tp, sizeof(*tp)); swab(tp->pathnam, tp->pathnam, NAMELEN); swab((char *)&tp->uid, (char *)&tp->uid, 4); /* uid,gid,spare,size0 */ } ((')k.I "%(+3j7 #include "tp.h" main(argc,argv) char **argv; { register char c,*ptr; extern cmd(), cmr(),cmx(), cmt(); tname = tc; command = cmr; if ((narg = rnarg = argc) < 2) narg = 2; else { ptr = argv[1]; /* get first argument */ parg = &argv[2]; /* pointer to second argument */ while (c = *ptr++) switch(c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': tc[8] = c; mt[7] = c; continue; case 'f': tname = *parg++; narg--; rnarg--; continue; case 'c': flags |= flc; continue; case 'd': setcom(cmd); continue; case 'i': flags |= fli; continue; case 'm': tname = mt; flags |= flm; continue; case 'r': flags &= ~flu; setcom(cmr); continue; case 's': flags |= fls; continue; case 't': setcom(cmt); continue; case 'u': flags |= flu; setcom(cmr); continue; case 'v': flags |= flv; continue; case 'w': flags |= flw; continue; case 'x': setcom(cmx); continue; default: useerr(); } } optap(); top = nptr = nameblk = sbrk(0); (*command)(); } optap() { extern cmr(); if ((flags & flm) == 0) { /* DECTAPE */ tapsiz = TCSIZ; ndirent = TCDIRS; fio =open(tc,2); } else { /* MAGTAPE */ tapsiz = MTSIZ; ndirent = MDIRENT; if(command == cmr) fio = open(tname,1); else fio = open(tname,0); } if (fio < 0) { printf("Tape open error\n"); done(); } ndentb = ndirent/TPB; edir = &dir[ndirent]; } setcom(newcom) int (*newcom)(); { extern cmr(); if (command != cmr) useerr(); command = newcom; } useerr() { printf("Bad usage\n"); done(); } /* /* COMMANDS */ cmd() { extern delete(); if (flags & (flm|flc)) useerr(); if (narg <= 2) useerr(); rddir(); gettape(delete); wrdir(); check(); } cmr() { if (flags & (flc|flm)) clrdir(); else rddir(); getfiles(); update(); check(); } cmt() { extern taboc(); if (flags & (flc|flw)) useerr(); rddir(); if (flags & flv) printf(" mode uid gid tapa size date time name\n"); gettape(taboc); check(); } cmx() { extern extract(); if (flags & (flc)) useerr(); rddir(); gettape(extract); done(); } check() { usage(); done(); } done() { printf("End\n"); exit(0); } encode(pname,dptr) /* pname points to the pathname * nptr points to next location in nameblk * dptr points to the dir entry */ char *pname; struct dent *dptr; { register char *np; register n; dptr->d_namep = np = nptr; if (np > top - NAMELEN) { if(sbrk(BRKINCR) == (char *)-1) { printf("Out of core\n"); done(); } else top += BRKINCR; } if((n=strlen(pname)) > NAMELEN) { printf("Pathname too long - %s\nFile ignored\n",pname); clrent(dptr); } else { nptr += n+1; strcpy(np, pname); } } decode(pname,dptr) /* dptr points to the dir entry * name is placed in pname[] */ char *pname; struct dent *dptr; { strcpy(pname, dptr->d_namep); } '*k>%3j7 #include "tp.h" #include '!+kô12j6 /* c-version of tp?.s * * M. Ferentz * August 1976 * * revised July 1977 BTL */ #define MDIRENT 496 /* must be zero mod 8 */ #define DIRSZ sizeof(struct dent) #define MAPSIZE 4096 #define MAPMASK 07777 #define NAMELEN 32 #define BSIZE 512 #define TCSIZ 578 #define TCDIRS 192 #define MTSIZ 32767 #define TPB (BSIZE/sizeof(struct tent)) #define OK 0100000 #define BRKINCR 512 #define tapeblk &tpentry[0] #define tapeb &tpentry[0] struct tent { /* Structure of a tape directory block */ char pathnam[NAMELEN]; short mode; char uid; char gid; char spare; char size0; unsigned short size1; long time; unsigned short tapea; /* tape address */ short unused[8]; short cksum; } tpentry[TPB]; struct dent { /* in core version of tent with "unused" removed * and pathname replaced by pointer to same in a * packed area (nameblock). */ char *d_namep; int d_mode; int d_uid; int d_gid; long d_size; long d_time; int d_tapea; } dir[MDIRENT]; char map[MAPSIZE]; char name[NAMELEN]; char name1[NAMELEN]; extern char mt[]; extern char tc[]; char *tname; extern char mheader[]; extern char theader[]; int narg, rnarg; char **parg; int wseeka,rseeka; int tapsiz; int fio; short ndirent, ndentb; struct dent *edir; struct dent *lastd; /* for improvement */ char *sbrk(); char *strcpy(); long lseek(); int (*command)(); char *nameblk; char *top; char *nptr; extern int flags; #define flc 0001 #define fli 0004 #define flm 0010 #define flu 0020 #define flv 0040 #define flw 0100 #define fls 0200 '%-kq̴r`` #define MAXINO 3000 #define BITS 8 #define MAXXTR 60 #define NCACHE 3 #include #include #include #include #include #include #include #include #define MWORD(m,i) (m[(unsigned)(i-1)/MLEN]) #define MBIT(i) (1<<((unsigned)(i-1)%MLEN)) #define BIS(i,w) (MWORD(w,i) |= MBIT(i)) #define BIC(i,w) (MWORD(w,i) &= ~MBIT(i)) #define BIT(i,w) (MWORD(w,i) & MBIT(i)) int mt; char tapename[] = "/dev/rmt1"; char *magtape = tapename; daddr_t seekpt; int ofile; FILE *df; char dirfile[] = "rstXXXXXX"; struct { ino_t t_ino; daddr_t t_seekpt; } inotab[MAXINO]; int ipos; #define ONTAPE 1 #define XTRACTD 2 #define XINUSE 4 short dumpmap[MSIZ]; short clrimap[MSIZ]; int bct = NTREC+1; char tbf[NTREC*BSIZE]; char prebuf[512]; int volno; main(argc, argv) char *argv[]; { extern char *ctime(); mktemp(dirfile); argv++; if (argc>=3 && *argv[0] == 'f') magtape = *++argv; df = fopen(dirfile, "w"); if (df == NULL) { printf("dumpdir: %s - cannot create directory temporary\n", dirfile); exit(1); } if ((mt = open(magtape, 0)) < 0) { printf("%s: cannot open tape\n", magtape); exit(1); } if (readhdr(&spcl) == 0) { printf("Tape is not a dump tape\n"); exit(1); } printf("Dump date: %s", ctime(&spcl.c_date)); printf("Dumped from: %s", ctime(&spcl.c_ddate)); if (checkvol(&spcl, 1) == 0) { printf("Tape is not volume 1 of the dump\n"); exit(1); } pass1(); /* This sets the various maps on the way by */ freopen(dirfile, "r", df); strcpy(prebuf, "/"); printem(prebuf, (ino_t) 2); exit(0); } i = 0; /* * Read the tape, bulding up a directory structure for extraction * by name */ pass1() { register i; struct dinode *ip; int putdir(), null(); while (gethead(&spcl) == 0) { printf("Can't find directory header!\n"); } for (;;) { if (checktype(&spcl, TS_BITS) == 1) { readbits(dumpmap); continue; } if (checktype(&spcl, TS_CLRI) == 1) { readbits(clrimap); continue; } if (checktype(&spcl, TS_INODE) == 0) { finish: flsh(); close(mt); return; } ip = &spcl.c_dinode; i = ip->di_mode & IFMT; if (i != IFDIR) { goto finish; } inotab[ipos].t_ino = spcl.c_inumber; inotab[ipos++].t_seekpt = seekpt; getfile(spcl.c_inumber, putdir, null, spcl.c_dinode.di_size); putent("\000\000/"); } } printem(prefix, inum) char *prefix; ino_t inum; { struct direct dir; register int i; for (i = 0; i < MAXINO; i++) if (inotab[i].t_ino == inum) { goto found; } printf("PANIC - can't find directory %d\n", inum); return; found: mseek(inotab[i].t_seekpt); for (;;) { getent((char *) &dir); if (direq(dir.d_name, "/")) return; if (search(dir.d_ino) != 0 && direq(dir.d_name, ".") == 0 && direq(dir.d_name, "..") == 0) { int len; FILE *tdf; tdf = df; df = fopen(dirfile, "r"); len = strlen(prefix); strncat(prefix, dir.d_name, sizeof(dir.d_name)); strcat(prefix, "/"); printem(prefix, dir.d_ino); prefix[len] = '\0'; fclose(df); df = tdf; (( } else if (BIT(dir.d_ino, dumpmap)) printf("%5d %s%-.14s\n", dir.d_ino, prefix, dir.d_name); } } /* * Do the file extraction, calling the supplied functions * with the blocks */ getfile(n, f1, f2, size) ino_t n; int (*f2)(), (*f1)(); long size; { register i; struct spcl addrblock; char buf[BSIZE]; addrblock = spcl; goto start; for (;;) { if (gethead(&addrblock) == 0) { printf("Missing address (header) block\n"); goto eloop; } if (checktype(&addrblock, TS_ADDR) == 0) { spcl = addrblock; return; } start: for (i = 0; i < addrblock.c_count; i++) { if (addrblock.c_addr[i]) { readtape(buf); (*f1)(buf, size > BSIZE ? (long) BSIZE : size); } else { clearbuf(buf); (*f2)(buf, size > BSIZE ? (long) BSIZE : size); } if ((size -= BSIZE) <= 0) { eloop: while (gethead(&spcl) == 0) ; if (checktype(&spcl, TS_ADDR) == 1) goto eloop; return; } } } } /* * Do the tape i\/o, dealling with volume changes * etc.. */ readtape(b) char *b; { register i; struct spcl tmpbuf; if (bct >= NTREC) { for (i = 0; i < NTREC; i++) ((struct spcl *)&tbf[i*BSIZE])->c_magic = 0; bct = 0; if ((i = read(mt, tbf, NTREC*BSIZE)) < 0) { exit(1); } if (i == 0) { bct = NTREC + 1; volno++; loop: flsht(); close(mt); printf("Mount volume %d\n", volno); while (getchar() != '\n') ; if ((mt = open(magtape, 0)) == -1) { printf("Cannot open tape!\n"); } if (readhdr(&tmpbuf) == 0) { printf("Not a dump tape.Try again\n"); goto loop; } if (checkvol(&tmpbuf, volno) == 0) { printf("Wrong tape. Try again\n"); goto loop; } readtape(b); return; } } copy(&tbf[(bct++*BSIZE)], b, BSIZE); } flsht() { bct = NTREC+1; } copy(f, t, s) register char *f, *t; { register i; i = s; do *t++ = *f++; while (--i); } clearbuf(cp) register char *cp; { register i; i = BSIZE; do *cp++ = 0; while (--i); } /* * Put and get the directory entries from the compressed * directory file */ p'0-kδr``utent(cp) char *cp; { register i; for (i = 0; i < sizeof(ino_t); i++) writec(*cp++); for (i = 0; i < DIRSIZ; i++) { writec(*cp); if (*cp++ == 0) return; } return; } getent(bf) register char *bf; { register i; for (i = 0; i < sizeof(ino_t); i++) *bf++ = readc(); for (i = 0; i < DIRSIZ; i++) if ((*bf++ = readc()) == 0) return; return; } /* * read/write te directory file */ writec(c) char c; { seekpt++; fwrite(&c, 1, 1, df); } readc() { char c; fread(&c, 1, 1, df); return(c); } mseek(pt) daddr_t pt; { fseek(df, pt, 0); } flsh() { fflush(df); } /* * search the directory inode ino * looking for entry cp */ search(inum) ino_t inum; { register low, high, probe; low = 0; high = ipos-1; while (low != high) { probe = (high - low + 1)/2 + low; /* printf("low = %d, high = %d, probe = %d, ino = %d, inum = %d\n", low, high, probe, inum, inotab[probe].t_ino); */ if (inum >= inotab[probe].t_ino) low = probe; else high = probe - 1; } return(inum == inotab[low].t_ino); } direq(s1, s2) register char *s1, *s2; { register i; for (i = 0; i < DIRSIZ; i++) if (*s1++ == *s2) { if (*s2++ == 0) return(1); } else return(0); return(1); } /* * read the tape into buf, then return whether or * or not it is a header block. */ gethead(buf) struct spcl *buf; { readtape((char *)buf); if (buf->c_magic != MAGIC || checksum((int *) buf) == 0) return(0); return(1); } /* * return whether or not the buffer contains a header block */ checktype(b, t) struct spcl *b; int t; { return(b->c_type == t); } checksum(b) int *b; { register i, j; j = BSIZE/sizeof(int); i = 0; do i += *b++; while (--j); if (i != CHECKSUM) { printf("Checksum error %o\n", i); return(0); } return(1); } checkvol(b, t) struct spcl *b; int t; { if (b->c_volume == t) return(1); return(0); } readhdr(b) struct spcl *b; { if (gethead(b) == 0) return(0); if (checktype(b, TS_TAPE) == 0) return(0); return(1); } putdir(b) char *b; { register struct direct *dp; register i; for (dp = (struct direct *) b, i = 0; i < BSIZE; dp++, i += sizeof(*dp)) { if (dp->d_ino == 0) continue; putent((char *) dp); } } /* * read a bit mask from the tape into m. */ readbits(m) short *m; { register i; i = spcl.c_count; while (i--) { readtape((char *) m); m += (BSIZE/(MLEN/BITS)); } while (gethead(&spcl) == 0) ; } null() { ; } '6.k({H.j( #include #include FILE *dfile; char *filenam = "/usr/dict/words"; int fold; int dict; int tab; char entry[250]; char word[250]; char key[50]; main(argc,argv) char **argv; { register c; long top,bot,mid; while(argc>=2 && *argv[1]=='-') { for(;;) { switch(*++argv[1]) { case 'd': dict++; continue; case 'f': fold++; continue; case 't': tab = argv[1][1]; if(tab) ++argv[1]; continue; case 0: break; default: continue; } break; } argc --; argv++; } if(argc<=1) return; if(argc==2) { fold++; dict++; } else filenam = argv[2]; dfile = fopen(filenam,"r"); if(dfile==NULL) { fprintf(stderr,"look: can't open %s\n",filenam); exit(2); } canon(argv[1],key); bot = 0; fseek(dfile,0L,2); top = ftell(dfile); for(;;) { mid = (top+bot)/2; fseek(dfile,mid,0); do { c = getc(dfile); mid++; } while(c!=EOF && c!='\n'); if(!getword(entry)) break; canon(entry,word); switch(compare(key,word)) { case -2: case -1: case 0: if(top<=mid) break; top = mid; continue; case 1: case 2: bot = mid; continue; } break; } fseek(dfile,bot,0); while(ftell(dfile) #define INTR 2 #define QUIT 3 #define LINSIZ 1000 #define ARGSIZ 50 #define TRESIZ 100 #define QUOTE 0200 #define FAND 1 #define FCAT 2 #define FPIN 4 #define FPOU 8 #define FPAR 16 #define FINT 32 #define FPRS 64 #define TCOM 1 #define TPAR 2 #define TFIL 3 #define TLST 4 #define DTYP 0 #define DLEF 1 #define DRIT 2 #define DFLG 3 #define DSPR 4 #define DCOM 5 #define ENOMEM 12 #define ENOEXEC 8 int errval; char *dolp; char pidp[6]; char **dolv; jmp_buf jmpbuf; int dolc; char *promp; char *linep; char *elinep; char **argp; char **eargp; int *treep; int *treeend; char peekc; char gflg; char error; char uid; char setintr; char *arginp; int onelflg; int stoperr; #define NSIG 16 char *mesg[NSIG] { 0, "Hangup", 0, "Quit", "Illegal instruction", "Trace/BPT trap", "IOT trap", "EMT trap", "Floating exception", "Killed", "Bus error", "Memory fault", "Bad system call", 0, "Alarm clock", "Terminated", }; char line[LINSIZ]; char *args[ARGSIZ]; int trebuf[TRESIZ]; main(c, av) int c; char **av; { register f; register char *acname, **v; for(f=3; f<15; f++) close(f); dolc = getpid(); for(f=4; f>=0; f--) { dolc = dolc/10; pidp[f] = dolc%10 + '0'; } v = av; acname = ""; promp = "% "; if((uid = getuid()) == 0) promp = "# "; if(c>1 && v[1][0]=='-' && v[1][1]=='e') { ++stoperr; v[1] = v[0]; ++v; --c; } if(c > 1) { promp = 0; if (*v[1]=='-') { **v = '-'; if (v[1][1]=='c' && c>2) arginp = v[2]; else if (v[1][1]=='t') onelflg = 2((; } else { close(0); f = open(v[1], 0); if(f < 0) { prs(v[1]); err(": cannot open",255); } } } if(**v == '-') { signal(QUIT, 1); f = signal(INTR, 1); if ((arginp==0&&onelflg==0) || (f&01)==0) setintr++; } dolv = v+1; dolc = c-1; loop: if(promp != 0) prs(promp); peekc = getc(); main1(); goto loop; } main1() { register char *cp; register *t; argp = args; eargp = args+ARGSIZ-5; linep = line; elinep = line+LINSIZ-5; error = 0; gflg = 0; do { cp = linep; word(); } while(*cp != '\n'); treep = trebuf; treeend = &trebuf[TRESIZ]; if(gflg == 0) { if(error == 0) { setjmp(jmpbuf); if (error) return; t = syntax(args, argp); } if(error != 0) err("syntax error",255); else execute(t); } } word() { register char c, c1; *argp++ = linep; loop: switch(c = getc()) { case ' ': case '\t': goto loop; case '\'': case '"': c1 = c; while((c=readc()) != c1) { if(c == '\n') { error++; peekc = c; return; } *linep++ = c|QUOTE; } goto pack; case '&': case ';': case '<': case '>': case '(': case ')': case '|': case '^': case '\n': *linep++ = c; *linep++ = '\0'; return; } peekc = c; pack: for(;;) { c = getc(); if(any(c, " '\"\t;&<>()|^\n")) { peekc = c; if(any(c, "\"'")) goto loop; *linep++ = '\0'; return; } *linep++ = c; } } tree(n) int n; { register *t; t = treep; treep =+ n; if (treep>treeend) { prs("Command line overflow\n"); error++; longjmp(jmpbuf, 1); } return(t); } getc() { register char c; if(peekc) { c = peekc; peekc = 0; return(c); } if(argp > eargp) { argp =- 10; while((c=getc()) != '\n'); argp =+ 10; err("Too many args",255); gflg++; return(c); } if(linep > elinep) { linep =- 10; while((c=getc()) != '\n'); linep =+ 10; err("Too many characters",255); gflg++; return(c); } getd: if(dolp) { c = *dolp++; if(c != '\0') return(c); dolp = 0; } c = readc(); if(c == '\\') { c = readc(); if(c == '\n') return(' '); return(c|QUOTE); } if(c == '$') { c = readc(); if(c>='0' && c<='9') { if(c-'0' < dolc) dolp = dolv[c-'0']; goto getd; } if(c == '$') { dolp = pidp; goto getd; } } return(c&0177); } readc() { int rdstat; char cc; register c; if (arginp) { if (arginp == 1) exit(errval); if ((c = *arginp++) == 0) { arginp = 1; c = '\n'; } return(c); } if (onelflg==1) exit(255); if((rdstat = read(0, &cc, 1)) != 1) if(rdstat==0) exit(errval); /* end of file*/ else exit(255); /* error */ if (cc=='\n' && onelflg) onelflg--; return(cc); } /* * syntax * empty * syn1 */ syntax(p1, p2) char **p1, **p2; { while(p1 != p2) { if(any(**p1, ";&\n")) p1++; else return(syn1(p1, p2)); } return(0); } /* * syn1 * syn2 * syn2 & syntax * syn2 ; syntax */ syn1(p1, p2) char **p1, **p2; { register char **p; register *t, *t1; int l; l = 0; for(p=p1; p!=p2; p++) switch(**p) { case '(': l++; continue; case ')': l--; if(l < 0) error++; continue; case '&': case ';': case '\n': if(l == 0) { l = **p; t = tree(4); t[DTYP] = TLST; t[DLEF] = syn2(p1, p); t[DFLG] = 0; if(l == '&') { t1 = t[DLEF]; t1[DFLG] =| FAND|FPRS|FINT; } t[DRIT] = syntax(p+1, p2); return(t); } } if(l == 0) return(syn2(p1, p2)); error++; return(0); } /* * syn2 * syn3 * syn3 | syn2 */ syn2(p1, p2) char **p1, **p2; { register char **p; register int l, *t; l = 0; for(p=p1; p!=p2; p++) switch(**p) { ca'G/k*.j)se '(': l++; continue; case ')': l--; continue; case '|': case '^': if(l == 0) { t = tree(4); t[DTYP] = TFIL; t[DLEF] = syn3(p1, p); t[DRIT] = syn2(p+1, p2); t[DFLG] = 0; return(t); } } return(syn3(p1, p2)); } /* * syn3 * ( syn1 ) [ < in ] [ > out ] * word word* [ < in ] [ > out ] */ syn3(p1, p2) char **p1, **p2; { register char **p; char **lp, **rp; register *t; int n, l, i, o, c, flg; flg = 0; if(**p2 == ')') flg =| FPAR; lp = 0; rp = 0; i = 0; o = 0; n = 0; l = 0; for(p=p1; p!=p2; p++) switch(c = **p) { case '(': if(l == 0) { if(lp != 0) error++; lp = p+1; } l++; continue; case ')': l--; if(l == 0) rp = p; continue; case '>': p++; if(p!=p2 && **p=='>') flg =| FCAT; else p--; case '<': if(l == 0) { p++; if(p == p2) { error++; p--; } if(any(**p, "<>(")) error++; if(c == '<') { if(i != 0) error++; i = *p; continue; } if(o != 0) error++; o = *p; } continue; default: if(l == 0) p1[n++] = *p; } if(lp != 0) { if(n != 0) error++; t = tree(5); t[DTYP] = TPAR; t[DSPR] = syn1(lp, rp); goto out; } if(n == 0) error++; p1[n++] = 0; t = tree(n+5); t[DTYP] = TCOM; for(l=0; l= 0) { lseek(i, 0L, 2); goto f1; } } i = creat(t[DRIT], 0666); if(i < 0) { prs(t[DRIT]); err(": cannot create",255); exit(255); } f1: close(1); dup(i); close(i); } if((f&FPIN) != 0) { close(0); dup(pf1[0]); close(pf1[0]); close(pf1[1]); } if((f&FPOU) != 0) { close(1); dup(pf2[1]); close(pf2[0]); close(pf2[1]); } if((f&FINT)!=0 && t[DLEF]==0 && (f&FPIN)==0) { close(0); open("/dev/null", 0); } if((f&FINT) == 0 && setintr) { signal(INTR, 0); signal(QUIT, 0); } if(t[DTYP] == TPAR) { if(t1 = t[DSPR]) t1[DFLG] =| f&FINT; execute(t1); exit(255); } gflg = 0; scan(t, tglob); if(gflg) { t[DSPR] = "/etc/glob"; execv(t[DSPR], t+DSPR); prs("glob: cannot execute\n"); exit(255); } scan(t, trim); *linep = 0; texec(t[DCOM], t); cp1 = linep; cp2 = "/usr/bin/"; while(*cp1 = *cp2++) cp1++; cp2 = t[DCOM]; while(*cp1++ = *cp2++); texec(linep+4, t); texec(linep, t); prs(t[DCOM]); err(": not found",255); exit(255); case TFIL: f = t[DFLG]; pipe(pv); t1 = t[DLEF]; t1[DFLG] =| FPOU | (f&(FPIN|FINT|FPRS)); execute(t1, pf1, pv); t1 = t[DRIT]; t1[DFLG] =| FPIN | (f&(FPOU|FINT|FAND|FPRS)); execute(t1, pv, pf2); return; case TLST: f = t[DFLG]&FINT; if(t1 = t[DLEF]) t1[DFLG] =| f; execute(t1); if(t1 = t[DRIT]) t1[DFLG] =| f; execute(t1); return; } } texec(f, at) int *at; { extern errno; register int *t; t = at; execv(f, t+DCOM); if (errno==ENOEXEC) { if (*linep) t[DCOM] = linep; t[DSPR] = "/usr/bin/osh"; execv(t[DSPR], t+DSPR); prs("No shell!\n"); exit(255); } if (errno==ENOMEM) { prs(t[DCOM]); err(": too large",255); exit(255); } } err(s, exitno) char *s; int exitno; { prs(s); prs("\n"); if(promp == 0) { lseek(0, 0L, 2); exit(exitno); } } prs(as) char *as; { register char *s; s = as; while(*s) putc(*s++); } putc(c) { char cc; cc = c; write(2, &cc, 1); } prn(n) int n; { register a; if (a = n/10) prn(a); putc(n%10 + '0'); } any(c, as) int c; char *as; { register char *s; s = as; while(*s) if(*s++ == c) return(1); return(0); } equal(as1, as2) char *as1, *as2; { register char *s1, *s2; s1 = as1; s2 = as2; while(*s1++ == *s2) if(*s2++ == '\0') return(1); return(0); } pwait(i, t) int i, *t; { register p, e; int s; if(i != 0) for(;;) { p = wait(&s); if(p == -1) break; e = s&0177; if (e>=NSIG || mesg[e]) { if(p != i) { prn(p); prs(": "); } if (e < NSIG) prs(mesg[e]); else { prs("Signal "); prn(e); } if(s&0200) prs(" -- Core dumped"); } if (e || s&&stoperr) err("", (s>>8)|e ); errval =| (s>>8); } } (('T0kUjnqtwz}-j-j   0  6 >  67 % w ZD %.& > 5 VNa e%aN $ 5 AWpxCe@ s 5ue@tf&A@vf&  es 5u % % w w ~ $Nf < 1   fe 6% N % @e55 5 WpxBe @ e5`u`u eCtf&fe H eA@v efAEtP a e%a X   wp w ` DB  E  Ґ%  B- w* @w  DC 5 u E     u-@w w DC 5 B E; &E  ~  u-@wh w X D- wN e̥wf  '̥af n  %|f  &  F e f n  2 ̥rw Nfef %@ w w x DD@ ?e4  4 && %4 % 4 w E w wTDJB %w8 f& & e w 7 7  ׯ- ȷ ׯ00w7  .w~BwD J _ȷ  o x d u        ӕ- f&Ew 8ӕ0 S r@A r  f  e0 9e' E,* ҋ D~ ǀ  p7w,r l jff Fe w7 L BǷ >0   *Wp `e0eӕ?w xDCB &E  z f   #̥-%0  E: E:  &E   z f   ww Dw;%) uNfe& %4 *   & %S  @w DE%& %  w w  $ e-Lww rD@   4 4 w f x@w  8U76U78΀6xAe vBd7 f55 a  a!PE -,%6 w %e rt 7  `   %e U? `e 76U?Û a7 Ê?~U ew D^E ww D5 @ r5N !w|5A vBB-  }ee@ !ۃ `!ւ `@ r `w Nef  ww N tf " %ww Ntf " %wf@w fw`w\lwfwHwDw@rwf@w(w$w zw^fw ww@f@wwwfwmwwmfwww f@wwww ~C  5!@D  r@rr `  CKw<@  C 5  B A @ A- A C   Kw7FFw B A@ C@ppC`pww C  5!BAD  r@rr `  wbBA  C 5 B A @ A-  A    w @& BF')AEQkourispellin: cannot initialize hash table spellin: trouble writing hash table doxfergJc\slLurDOXU(null)j6B'^1kFxC;>ADGJMPSVYZ abator abeted abeter abeting abuted abuter abuting accessable acclimatize acquiter acquiting acter addendums adly admitable admited admiter admiting ahly allotable alloted alloter alloting amly ams animadvertion anly annulable annuled annuler annuling ans arguement arised asly ation ative atly ator ats audable auditer autosuggestable avered averer avering avertion aweful axises axly baned baning beared beated beator bedimed bedimer bediming befited befiter befiting befoged befoger befoging begeted begeter begeting begined beginer begining beholded bely bes besetable beseted beseter beseting besoting bespeaked bestired bestirer bestiring betted bidded bies binded bited blader bleeded blowed bootleged bootleger bootleging bootstraped bootstraping breaked breeded bringed bursted buyed byly Canadan carful Carolinan casted catched cheator checksumable checksumed checksuming choosed clinged collapsable collectable collecter colourate colourful combustable comed commitable commited commiter commiting compatable compeled compeler compeling compositer compositon comprehensable compressable condensable conducter coner confered conferer confering coning constricter constructable constructer contemptable contracter controlable controled controler controling controvertable convertable convertion corpuses correcter corrigendums corrodable corruptable credable crediter creeped currance currancy curriculas cutted datas datums dealed debared debarer debaring debator debter debuged debuger debuging decontroled decontroler decontroling deductable defensable defered deferer defering deflator deflecter degased degaser degasing degumed degumer deguming demitable demited demiter demiting demured demuring depositer depressable desolator destructer detecter detered deterer detering detracter diffusable digestable dimed dimest directer discernable discomfited discomfiter discomfiting disintered disinterer disintering dispelable dispeled dispeler dispeling dispence dispersable distributory divertion doged doger doging doly doned doner doning drawed drinked drived duely dus eated eator eavesdroped eavesdroper eavesdroping edable editer effluvias effluviums ehly ehs ejecter electer elly embedable embeded embeder embeding emitable emited emiter emiting emly emphasises enaction enbalm enbank enbark enbattle enbay enbed enbit enblaze enblazon enbody enbolden enboss enbow enbowel enbrace enbrittle enbroil encant encur endebted enend enflame enform enirate enit enly enpanel enpathetic enplace enplane enploy enpower enpress enpurple enroad entend entone entrapable entraped entraper entraping envoice equilibriums equipable equiped equiper equiping erodable erosable esophaguses estoped estoper estoping etly ets exasperator exceled exceler exceling exegesises exhaustable expansable expection expelable expeled expeler expeling expositer expressable extendable extensable extolable extoled extoler extoling extracter extremums extrovertion facter fadded fadding fallable falled feasable feeded feeled fighted finded flexable flinged flirtion Floridan fluter foable forbeared forbided forebade forebear forebid forebidden forebidding forebore forefend foregave foreget foregettable foregetting foregive foregiven foregot foremat foremate foresake foreswear forety foreward forgetable forgeted forsaked freezed frustrator fusable gayly genesises genuses getted giddaped giddaper giddaping gived glomed glumer glumest goly gos greator grimer grimest grinded growed gullable haly heared heator hely hes hesitator hily holded hopful horrable huggest huging hurted idly ifly iily iis impartion impelable impeled impeler impeling imperceptable implausable implementer importion impressable inaccessable inaudable incombustable incompatable incomprehensable incontrovertable incorruptable incredable incured incurer incuring indefensable indelable indestructable indigestable indiscernable inducter inexhaustable inexpressable infallable infeasable infered inferer infering inflator inflexable infusable ingestable inheriter inly insensable inspecter instructer intence intered interer intering interruptable intimator inventer invertable invertion invester irresistable irresponsable irreversable isly itly ivly ivs ixes ixly jitterbuged jitterbuger jitterbuging juter keeped kiloohm knowed lader laly lammest lapeled layed lended letted loaned loging loly losed mader madest mading maked maly maner maning manumitable manumited manumiter manumiting mared meaned meeted mely mies mily moter myly nely nes neurosises noding noly notory nuly objecter occured occurer occuring offsetable offseted offseter ((offseting ofly ofs ohly ons opuses ostensable outgaser ows oxes oxly padable paly paner paralysises parenthesises paster payed perceptable perfectable permitable permited permiter permiting pervertion phenomenas phenomenons photosynthesises pily pipper placator plausable plugable predicter preempter prefered preferer prefering preseter preseting presuably programable programed programer programing projecter pronounciation propeled propeler propeling prosecuter prospecter protecter quitable quiter quiting ra'i1kzC;>ADGJMPSVYZtter readed reah realter rean reas reat reax rebat rebe rebeled rebeler rebeling rebutable rebuted rebuter rebuting reby recapable recaped recaper recaping recloth recommitable recommited recommiter recommiting recured recurer recuring redacter redu reem reen reet refered referer refering refited refiter refiting reflecter rego regretable regreted regreter regreting reha rehe rehi reho reif reii reis reit reiv reix reknited rekniter rekniting rela relo rema remad remaned remaner remaning reme remi remitable remited remiter remiting remu remy rended rene renu reof reoh reon reor reow reox repa repelable repeled repeler repeling repi reprehensable rere rerout rerunable reruned reruner reruning resa reshiped reshiper reshiping resistable reso responsable reti reto retrofited retrofiting reup reus reversable revertion revi rewe rewok rexi reye rided risable rised rocketed rocketer rocketing ruber rubing runable runed runned saging saly sandbaged sandbager sandbaging saturator sayed sculpter secretory secter seeked selecter selled senation senative sended sensable setable setted shaked shedded shipable shooted shrinked shutted siner sining sinked siply sitted slank slayed sleeped slided slinged slinked smited soliciter soly speaked spended spinable spiner spining spinned spiting splitted spotable spreaded stagged stagging standed stealed sticked stinked stopable stratas strided striked subletable subleted subleter subleting submitable submited submiter submiting suggestable suntaned suntaning suppressable susceptable sweared sweeped swimable swinged synopsises synthesises taked teached telled terrable thesises thier thinked thrombosises throwed thrusted tily tiner tining toly tracter traiter tranquility transfered transferer transfering transmitable transmited transmiter transmiting transportion trivias triviums truely typeseter typeseting unactivate unadequacy unattention unboard unbreed uncant uncapacity uncompletion uncorporate uncrease uncredulity unculpable uncur uncurred uncurrer uncurring undebt undeed undefinite undelicate undent undenture undices undignity undiscriminate undisposition undoor unduct undwell unefficacy unequity unfamous unfelicity unfest unfield unfiltrate unfinity unflame unflammable unflow unfluence unflux unformant unformation unfuse unfusion ungather ungrate ungratitude unhabitant unhabitation unhale unhere unholding unhumane unhumanity unjure unjury unnumerable unoperable unput unquest unscribe unscription unsect unside unspire unstall unstance unstead untact untake untemperance untend untestate untill untolerant untuition unvade unvalidate unvent unverse unversion unvertebrate unviolate unvocate unward unwieldly uply upseter upseting usful usly usses vendable vily vis visable visiter waked warer weared weeped wely wetable whitter whitting winable winned wringed writed xily yiper zigzaged zigzager zigzaging 'p2kⴁ58+j+j #include "spell.h" main(argc, argv) char **argv; { register i, j; long h; register long *lp; char word[NW]; int dflag = 0; int indict; register char *wp; if (argc>1 && argv[1][0]=='-' && argv[1][1]=='d') { dflag = 1; argc--; argv++; } if(argc<=1) { fprintf(stderr,"spellout: arg count\n"); exit(1); } if(!prime(argc,argv)) { fprintf(stderr, "spellout: cannot initialize hash table\n"); exit(1); } while (fgets(word, sizeof(word), stdin)) { indict = 1; for (i=0; i #include #ifndef unix #define SHIFT 5 #define TABSIZE (int)(400000/(1< 1) { FILE *f; if ((f = fopen(argv[1], "ri")) == NULL) return(0); if (fread((char *)tab, sizeof(*tab), TABSIZE, f) != TABSIZE) return(0); fclose(f); } for (i=0; i>SHIFT]&(1<<((int)h&((1<>SHIFT] |= 1<<((int)h&((1<0 && argv[0][0]=='-'; argc--,argv++) switch(argv[0][1]) { case 'b': ise(); break; case 'v': vflag++; break; case 'x': xflag++; break; } for(;; fprintf(file,"%s%s\n",affix,original)) { affix[0] = 0; file = found; for(ep=word;(*ep=j=getchar())!='\n';ep++) if(j == EOF) exit(0); for(cp=word,dp=original; cpsuf;t++) { cp = ep; while(*sp) if(*--cp!=*sp++) goto next; for(sp=cp; --sp>=word&&!vowel(*sp); ) ; if(spp1)(ep-t->n1,t->d1,t->a1,lev+1)) return(1); if(t->p2!=0) { deriv[lev] = deriv[lev+1] = 0; return((*t->p2)(ep-t->n2,t->d2,t->a2,lev)); } return(0); next: ; } return(0); } nop() { return(0); } strip(ep,d,a,lev) char *ep,*d,*a; { return(putsuf(ep,a,lev)||suffix(ep,lev)); } s(ep,d,a,lev) char *ep,*d,*a; { if(lev>DLEV+1) return(0); if(*ep=='s'&&ep[-1]=='s') return(0); return(strip(ep,d,a,lev)); } an(ep,d,a,lev) char *ep,*d,*a; { if(!isupper(*word)) /*must be proper name*/ return(0); return(putsuf(ep,a,lev)); } ize(ep,d,a,lev) char *ep,*d,*a; { *ep++ = 'e'; return(strip(ep,"",d,lev)); } y_to_e(ep,d,a,lev) char *ep,*d,*a; { *ep++ = 'e'; return(strip(ep,"",d,lev)); } ily(ep,d,a,lev) char *ep,*d,*a; { if(ep[-1]=='i') return(i_to_y(ep,d,a,lev)); else return(strip(ep,d,a,lev)); } ncy(ep,d,a,lev) char *ep, *d, *a; { if(skipv(skipv(ep-1))DLEV) return(0); switch(ep[-1]) { default: return(0); case 'i': return(i_to_y(ep,d,a,lev)); case 's': case 'h': case 'z': case 'x': return(strip(ep,d,a,lev)); } } metry(ep,d,a,lev) char *ep, *d,*a; { ep[-2] = 'e'; ep[-1] = 'r'; return(strip(ep,d,a,lev)); } tion(ep,d,a,lev) char '5krh  x*ep,*d,*a; { switch(ep[-2]) { case 'c': case 'r': return(putsuf(ep,a,lev)); case 'a': return(y_to_e(ep,d,a,lev)); } return(0); } /* possible consonant-consonant-e ending*/ CCe(ep,d,a,lev) char *ep,*d,*a; { switch(ep[-1]) { case 'l': if(vowel(ep[-2])) break; switch(ep[-2]) { case 'l': case 'r': case 'w': break; default: return(y_to_e(ep,d,a,lev)); } break; case 's': if(ep[-2]=='s') break; case 'c': case 'g': if(*ep=='a') return(0); case 'v': case 'z': if(vowel(ep[-2])) break; case 'u': if(y_to_e(ep,d,a,lev)) return(1); if(!(ep[-2]=='n'&&ep[-1]=='g')) return(0); } return(VCe(ep,d,a,lev)); } /* possible consonant-vowel-consonant-e ending*/ VCe(ep,d,a,lev) char *ep,*d,*a; { char c; c = ep[-1]; if(c=='e') return(0); if(!vowel(c) && vowel(ep[-2])) { c = *ep; *ep++ = 'e'; if(putsuf(ep,d,lev)||suffix(ep,lev)) return(1); ep--; *ep = c; } return(strip(ep,d,a,lev)); } char *lookuppref(wp,ep) char **wp; char *ep; { register char **sp; register char *bp,*cp; for(sp=preftab;*sp;sp++) { bp = *wp; for(cp= *sp;*cp;cp++,bp++) if(Tolower(*bp)!=*cp) goto next; for(cp=bp;cp0); strcat(affix,"\t"); return(i); } monosyl(bp,ep) char *bp, *ep; { if(ep=bp) if(vowel(*ep)) return(0); return(1); } char * skipv(s) char *s; { if(s>=word&&vowel(*s)) s--; while(s>=word&&!vowel(*s)) s--; return(s); } vowel(c) { switch(Tolower(c)) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return(1); } return(0); } /* crummy way to Britishise */ ise() { register struct suftab *p; for(p = suftab;p->suf;p++) { ztos(p->suf); ztos(p->d1); ztos(p->a1); } } ztos(s) char *s; { for(;*s;s++) if(*s=='z') *s = 's'; } dict(bp,ep) char *bp, *ep; { register char *wp; long h; register long *lp; register i; if(xflag) printf("=%.*s\n",ep-bp,bp); for(i=0; ihlist hlista: american local hlist spellin (cat american local)|spellin hlist >hlista hlistb: british local hlist spellin (cat british local)|spellin hlist >hlistb hstop: stop spellin spellin hstop ';kN봁  all: roff cp: roff cp roff /bin rm roff roff.o cmp: roff cmp roff /bin/roff rm roff roff.o roff: *.s as -o roff.o /usr/include/sys.s *.s ld -s roff.o -lc -o roff '<kꘉ $j5 ((/ / / roff5 -- runoff slow: 1 pto: 9999. po: 0 ls: 1 ls1: 1 pn: 1 ma1: 2 ma2: 2 ma3: 1 ma4: 3 ll: 65. llh: 65. hx: 1 pl: 66. ad: 1 fi: 1 cc: '. ohc: 200 hyf: 1 hypedf: 0 obufp: obuf thresh: 240 tabc: ' tabtab: .byte 8.,16.,24.,32.,40.,48.,56.,64.,72.,80. .byte 88.,96.,104.,112.,120.,128.,136.,144.,152.,160. .byte 0,0,0,0,0,0,0,0,0,0 etabtab: 0 suffil: ones: fives: bfn: .even ofile: -1 nextb: 4 ilistp: ilist .bss old: .=.+2 stop: .=.+2 garb: .=.+2 bname: nextf: .=.+20. nx: .=.+2 ibf: .=.+2 ibf1: .=.+2 skp: .=.+2 ip: .=.+2 ilist: .=.+8. iliste: .=.+2 column: .=.+2 ocol: .=.+2 nspace: .=.+2 fac: .=.+2 fmq: .=.+2 nhl: .=.+2 nel: .=.+2 jfomod: .=.+2 wordp: .=.+2 nlflg: .=.+2 /tottext: .=.+2 /totcon: .=.+2 spaceflg: .=.+2 ch: .=.+2 linep: .=.+2 undflg: .=.+2 wordend: .=.+2 maxdig: .=.+2 maxloc: .=.+2 totout: .=.+2 hstart: .=.+2 nhstart: .=.+2 nhyph: .=.+2 argc: .=.+2 argp: .=.+2 ibufp: .=.+2 eibuf: .=.+2 wne: .=.+2 nl: .=.+2 bl: .=.+2 nc: .=.+2 ne: .=.+2 lnumber: .=.+2 numbmod: .=.+2 skip: .=.+2 nwd: .=.+2 ulstate: .=.+2 ulc: .=.+2 bsc: .=.+2 nsp: .=.+2 nn: .=.+2 ro: .=.+2 pfrom: .=.+2 ni: .=.+2 onesp: .=.+2 fivesp: .=.+2 ul: .=.+2 ce: .=.+2 in: .=.+2 un: .=.+2 wch: .=.+2 suff: .=.+2 sufb: .=.+20. sufbuf: .=.+512. suftab: .=.+[2*26.] ifile: .=.+2 char: .=.+2 nfile: .=.+2 ehead: .=.+2 ohead: .=.+2 efoot: .=.+2 ofoot: .=.+2 trtab: .=.+128. word: .=.+200. stbuf: linsiz = 500. line: .=.+linsiz end: '=kѥ  #j#j / / / hyp4 -- digram tables bxh: .byte 060,000,040,000,040,000,000,040,000,000,040,000,040 hxx: .byte 006,042,041,123,021,024,063,042,002,043,021,001,022 .byte 140,000,200,003,260,006,000,160,007,000,140,000,320 .byte 220,000,160,005,240,010,000,100,006,000,200,000,320 .byte 240,000,120,003,140,000,000,240,010,000,220,000,160 .byte 042,023,041,040,040,022,043,041,030,064,021,000,041 .byte 100,000,140,000,220,006,000,140,003,000,200,000,000 .byte 200,000,120,002,220,010,000,160,006,000,140,000,320 .byte 020,000,020,000,020,000,000,020,000,000,020,000,000 .byte 043,163,065,044,022,043,104,042,061,146,061,000,007 .byte 100,000,140,000,040,000,000,100,000,000,120,000,000 .byte 140,000,040,011,060,004,001,120,003,000,140,000,040 .byte 200,000,100,000,140,000,000,140,000,000,140,000,240 .byte 200,000,140,000,160,000,000,220,000,000,140,000,240 .byte 200,000,140,000,160,000,000,220,000,000,060,000,240 .byte 021,043,041,121,040,023,042,003,142,042,061,001,022 .byte 120,000,140,010,140,010,000,140,002,000,120,000,120 .byte 000,000,000,000,360,000,000,000,000,000,160,000,000 .byte 100,000,040,005,120,000,000,100,000,000,060,000,140 .byte 140,040,100,001,240,041,000,242,000,002,140,000,100 .byte 240,000,120,002,200,000,000,320,007,000,240,000,340 .byte 101,021,041,020,040,005,042,121,002,021,201,000,020 .byte 160,000,100,000,140,000,000,160,006,000,220,000,140 .byte 140,000,020,001,020,000,000,100,001,000,300,000,000 .byte 000,000,000,000,000,000,000,000,000,000,000,000,000 .byte 106,041,040,147,040,000,063,041,001,102,160,002,002 .byte 300,000,040,017,140,017,000,240,000,000,140,000,120 bxxh: .byte 005,150,153,062,062,246,152,127,146,203,310,017,206 .byte 100,000,120,000,140,000,000,100,000,000,120,000,060 .byte 100,000,040,000,060,000,000,060,000,000,220,000,040 .byte 100,000,120,000,200,000,000,100,000,000,140,000,060 .byte 043,142,046,140,062,147,210,131,046,106,246,017,111 .byte 060,000,020,000,060,000,000,040,000,000,100,000,000 .byte 060,000,040,000,040,000,000,040,000,000,100,000,040 .byte 100,000,100,000,100,000,000,040,000,000,100,000,140 .byte 066,045,145,140,000,070,377,030,130,103,003,017,006 .byte 040,000,040,000,020,000,000,040,000,000,100,000,000 .byte 200,000,020,000,140,000,000,120,000,000,120,000,040 .byte 120,000,040,000,060,000,000,060,000,000,160,000,040 .byte 120,000,040,000,120,000,000,040,000,000,160,000,040 .byte 120,000,020,000,140,000,000,120,000,000,140,000,040 .byte 051,126,150,140,060,210,146,006,006,165,003,017,244 .byte 120,000,040,000,160,000,000,140,000,000,060,000,140 .byte 000,000,000,000,000,000,000,000,000,000,000,000,000 .byte 140,000,140,000,060,000,000,100,000,000,140,000,020 .byte 120,000,020,000,060,000,000,060,000,000,060,000,040 .byte 140,000,020,000,100,000,000,140,000,000,140,000,020 .byte 070,125,051,162,120,105,126,104,006,044,000,017,052 .byte 140,000,020,000,140,000,000,060,000,000,060,000,040 .byte 020,000,000,000,020,000,000,000,000,000,000,000,060 .byte 140,000,160,000,200,000,000,140,000,000,000,000,240 .byte 065,042,060,200,000,210,222,146,006,204,220,012,003 .byte 240,000,020,000,120,000,000,200,000,000,200,000,240 xhx: .byte 032,146,042,107,076,102,042,146,202,050,006,000,051 .byte 036,377,057,013,057,366,377,057,001,377,057,000,040 .byte 037,377,020,000,100,022,377,057,362,116,100,000,017 .byte 057,377,057,031,137,363,377,037,362,270,077,000,117 .byte 074,142,012,236,076,125,063,165,341,046,047,000,024 .byte 020,017,075,377,040,001,377,017,001,204,020,000,040 .byte 057,017,057,340,140,362,314,117,003,302,100,000,057 .byte 057,357,077,017,100,366,314,057,342,346,037,000,060 .byte 252,145,072,157,377,165,063,066,164,050,363,000,362 .byte 000,000,020,000,020,000,000,017,000,000,020,000,000 .byte 117,017,237,377,200,354,125,110,004,257,000,000,300 .byte 057,367,054,357,157,216,314,114,217,353,053,000,057 .byte 077,213,077,077,177,317,377,114,377,352,077,000,076 .byte 077,213,077,077,157,177,377,054,377,352,117,000,075 .byte 125,230,065,216,057,066,063,047,345,126,011,000,033 .byte 057,377,051,360,120,361,273,056,001,256,057,000,060 .byte 000,000,000,000,000,000,000,000,000,000,000,000,000 .byte 076,310,056,310,137,174,273,055,335,266,033,000,155 .byte 077,157,057,360,057,063,042,024,077,206,020,000,040 .byte 057,037,077,360,100,365,377,037,362,176,050,000,026 .byte 167,146,042,112,077,110,062,254,366,052,377,000,163 .byte 060,000,040,000,120,000,377,060,012,000,037,000,257 .byte 037,232,157,361,040,003,125,010,001,256,000,000,340 .byte 377,377,377,377,377,377,377,377,377,377,377,017,277 .byte 253,315,257,216,377,206,146,306,371,126,232,000,004 .byte 057,012,100,360,160,360,000,040,000,017,157,000,176 xxh: .byte 045,150,154,162,042,246,210,147,152,103,230,017,206 .byte 100,000,040,000,140,000,000,100,000,021,120,017,060 .byte 100,000,040,002,140,320,000,060,000,001,220,017,040 .byte 100,001,120,001,241,000,000,100,000,020,140,017,060 .byte 023,162,046,142,022,207,210,131,052,106,250,017,110 .byte 060,000,042,000,160,000,000,040,000,212,100,017,000 .byte 140,000,040,002,140,000,000,120,000,040,120,017,040 .byte 100,000,100,000,140,001,021,140,000,046,100,017,140 .byte 066,045,'=kQ  #j#j025,201,020,130,146,030,130,103,025,017,006 .byte 100,000,040,000,020,000,000,040,000,000,200,017,000 .byte 200,000,020,001,140,000,000,140,000,000,120,017,040 .byte 120,026,042,020,140,161,042,143,000,022,162,017,040 .byte 121,042,060,020,140,200,000,123,000,021,220,017,041 .byte 121,042,060,120,140,200,000,123,000,021,160,017,041 .byte 051,126,150,141,060,210,146,066,026,165,026,017,247 .byte 120,000,040,003,160,000,000,140,000,021,100,017,140 .byte 000,000,000,000,200,000,000,000,000,000,000,017,000 .byte 141,023,122,040,160,143,042,142,000,047,143,017,020 .byte 120,000,040,006,140,060,000,141,000,026,100,017,040 .byte 140,000,020,007,100,000,000,140,000,001,140,017,020 .byte 110,125,051,162,120,125,127,104,006,104,000,017,052 .byte 140,000,040,000,160,000,000,140,000,000,060,017,000 .byte 040,005,020,000,040,313,231,030,000,140,000,017,056 .byte 140,000,160,000,200,000,000,140,000,000,000,017,240 .byte 065,042,060,040,000,206,231,146,006,224,220,017,004 .byte 240,000,020,000,140,000,000,220,000,000,200,017,141 .even '>k ux{~ "j"j / / / hyp1 -- driver hyphen: tst hypedf bne 3f tst hyf beq 3f inc hypedf mov wordp,r0 clr nhyph 1: jsr pc,punct bne 1f inc r0 br 1b 1: jsr pc,alph bne 3f 1: inc r0 jsr pc,alph beq 1b dec r0 mov r0,hstart 1: inc r0 tstb (r0) beq 2f jsr pc,punct bne 3f br 1b 2: jsr r5,suffix jsr r5,digram 3: rts pc punct: tst old bne 4f cmpb (r0),$010 beq 0f movb (r0),r2 jsr pc,alph2 beq 0f sez rts pc 0: clz rts pc 4: mov $3f,r2 1: cmpb (r0),(r2)+ beq 2f tstb (r2) bne 1b clz 2((: rts pc 3: < .,()"\'`\0> /should be more .even maplow: cmp r2,$'a bhis 1f add $'a-'A,r2 1: rts pc vowel: cmp r2,$'a beq 1f cmp r2,$'e beq 1f cmp r2,$'i beq 1f cmp r2,$'o beq 1f cmp r2,$'u beq 1f cmp r2,$'y 1: rts pc checkvow: mov r0,-(sp) 1: movb -(r0),r2 jsr pc,vowel beq 1f jsr pc,alph beq 1b mov (sp)+,r0 clz rts r5 1: mov (sp)+,r0 sez rts r5 / hyp2 -- suffix and digram digram: mov hstart,r0 1: jsr pc,alph bne 3f jsr pc,vowel beq 1f dec r0 br 1b 1: mov r0,hstart 1: movb -(r0),r2 jsr pc,alph2 bne 3f jsr pc,vowel bne 1b clr maxdig mov r0,nhstart 1: mov $1,r3 movb -1(r0),r2 jsr pc,alph2 beq 2f movb (r0),r2 mov $'a,r1 jsr r5,dilook; bxh br 4f 2: movb -2(r0),r2 mov $xxh,0f jsr pc,alph2 beq 2f mov $bxxh,0f 2: movb -1(r0),r1 movb (r0),r2 jsr r5,dilook; 0:xxh 4: movb (r0)+,r1 movb (r0),r2 jsr r5,dilook; xhx movb (r0),r1 movb 1(r0),r2 jsr r5,dilook; hxx cmp r3,maxdig blos 2f mov r3,maxdig mov r0,maxloc 2: cmp r0,hstart blo 1b mov nhstart,hstart cmp maxdig,thresh blo digram bisb $200,*maxloc inc nhyph / mov maxdig,*octbufp / inc octcnt / add $2,octbufp br digram 3: rts r5 dilook: mov r4,-(sp) bic $!177,r2 bic $!177,r1 jsr pc,maplow sub $'a,r2 cmp r2,$'z-'a bhi 3f mov r2,r4 mov r1,r2 jsr pc,maplow sub $'a,r2 cmp r2,$'z-'a bhi 3f mov r3,-(sp) mov r2,r3 mpy $13.,r3 clr r2 clc ror r4 adc r2 add r3,r4 add (r5)+,r4 movb (r4),r4 tst r2 bne 1f asr r4 asr r4 asr r4 asr r4 1: bic $!17,r4 mov r4,r3 mpy (sp)+,r3 br 4f 3: clr r3 tst (r5)+ 4: mov (sp)+,r4 rts r5 suffix: mov hstart,r0 jsr pc,alph bne 4f jsr pc,maplow sub $'a,r2 asl r2 mov suftab(r2),-(sp) bic $!37777,(sp) beq 3f 1: mov hstart,r0 mov (sp),r1 jsr pc,rdsuf movb (r1),r3 beq 3f bic $!17,r3 add r3,(sp) add r1,r3 2: movb -(r3),r2 cmp r3,r1 ble 2f bic $!177,r2 mov r2,-(sp) movb -(r0),r2 jsr pc,maplow cmp r2,(sp)+ bne 1b br 2b 2: mov hstart,r0 tst (sp)+ movb (r1),r3 bic $!17,r3 add r1,r3 bitb $200,(r1)+ bne 1f 2: dec r0 cmp r3,r1 ble 2f tstb -(r3) bpl 2b 1: mov r0,hstart dec hstart bitb $100,-1(r1) bne 2b jsr r5,checkvow bne 4f bisb $200,(r0) br 2b 2: bitb $40,-(r1) beq suffix br 4f 3: tst (sp)+ 4: rts r5 rdsuf: mov r0,-(sp) mov suff,nfile mov 4(sp),r1 jsr pc,rdsufb mov $sufb,r2 movb r0,(r2)+ mov r0,r3 bic $!17,r3 1: dec r3 blt 1f inc r1 jsr pc,rdsufb movb r0,(r2)+ br 1b 1: mov $sufb,r1 mov (sp)+,r0 rts pc '?k?WZ]`cfilor !j!j / / / roff4 -- runoff text: / inc tottext clr ulstate clr wch clr wne tst ce bne nofill tst fi beq nofill jsr pc,getchar 2: mov r0,ch cmp $' ,r0 bne 2f jsr pc,rbreak 1: jsr pc,getchar cmp $' ,r0 bne 2b inc un br 1b 2: cmp r0,$'\n bne 2f jsr pc,rbreak clr ch jsr pc,nline br 4f 2: tst wch bne 3f jsr pc,getword br 4f 3: jsr pc,movword bne 2b jsr pc,adjust br 2b 4: dec ul bge 1f clr ul 1: rts pc nofill: jsr pc,rbreak 1: jsr pc,gettchar cmp r0,$'\n beq 1f jsr pc,width add r1,ne jsr pc,storeline br 1b 1: tst ce ble 2f dec ce mov nel,r0 asr r0 bpl 1f clr r0 1: add r0,un tst numbmod beq 2f add $2,un 2: clr fac clr fmq mov $1000,nwd mov $' ,r0 jsr pc,storeline jsr pc,rbreak dec ul bpl 2f clr ul 2: rts pc adjust: mov r2,-(sp) mov r3,-(sp) clr r2 clr r3 tst ad beq 1f mov nwd,r0 dec r0 ble 1f mov nel,r3 ble 1f dvd r0,r2 1: mov r3,fac mov r2,fmq mov (sp)+,r3 mov (sp)+,r2 jsr pc,rbreak rts pc fill: mov fmq,r0 1: inc r0 dec nc cmpb (r2)+,$' beq 1b dec r2 bit $1,totout beq 2f inc fac cmp fac,nwd blt 1f inc r0 br 1f 2: dec fac bmi 1f inc r0 1: jsr pc,space movb (r2),r0 rts pc movword: mov wch,wordend mov wordp,r4 add r4,wordend tst nwd bne 2f 1: movb (r4)+,r0 cmp r0,$' bne 1f dec wch jsr pc,width sub r1,wne br 1b 1: dec r4 2: cmp wne,nel ble 1f cmp nel,$4 ble 1f mov ls,r0 add nl,r0 cmp r0,bl bgt 2f mov ls,r0 asl r0 add nl,r0 cmp r0,bl bgt 1f 2: jsr pc,hyphen 1: clr nhyph mov wch,-(sp) 1: movb (r4)+,r0 cmp r0,$'- bne 2f movb (r4),r2 jsr pc,alph2 bne 2f bisb $200,(r4) 2: tst r0 bpl 2f bic $!177,r0 mov r4,r3 sub $4,r3 cmp r3,$word blo 2f movb (r3),r2 bic $!177,r2 jsr pc,alph2 beq 3f cmp nel,$2 ble 2f 3: mov r0,-(sp) clr r0 jsr pc,storeline mov (sp)+,r0 inc nhyph 2: jsr pc,width sub r1,wne jsr pc,storeline dec wch bne 1b tst nel blt 1f inc nwd tst (sp)+ clz rts pc 1: mov linep,r3 1: tst nhyph bne 2f tst nwd beq 3f cmp wch,(sp) beq 4f 2: movb -(r3),r0 bne 2f dec nhyph bne 5f tst nwd beq 6f 5: tst nel ble 2f 6: cmpb -1(r3),$'- beq 3f movb $'-,(r3) dec nel inc ne br 3f 2: dec nc tstb (r3) beq 1b jsr pc,width sub r1,ne add r1,nel inc wch dec r4 add r1,wne br 1b 3: inc nwd 4: mov r4,wordp bicb $!177,(r4) cmp r4,$word bge 4f 4 4: tst (sp)+ sez rts pc topbot: mov pl,r0 bne 1f clr bl rts pc 1: sub ma3,r0 sub ma4,r0 sub hx,r0 mov r0,bl mov ma1,r0 add ma2,r0 add hx,r0 cmp r0,bl blt 1f mov $2,r0 mov r0,ma1 mov r0,ma2 mov r0,ma3 mov r0,ma4 mov $66.,pl br topbot 1: cmp nl,bl ble 1f mov bl,nl 1: rts pc width: cmp r0,ohc beq 2f tst r0 beq 2f cmp r0,$0177 beq 2f cmp r0,$010 bne 1f mov $-1,r1 rts pc 1: cmp $' ,r0 bgt 2f mov $1,r1 rts pc 2: clr r1 rts pc headin: jsr pc,skipcont mov nextb,r1 mov r1,*(r5)+ jsr pc,gettchar cmp r0,$'\n beq 2f mov r0,r2 1: jsr pc,gettchar cmp r0,$'\n beq 2f cmp r0,r2 bne 3f clr r0 3: jsr pc,wbf br 1b 2: clr r0 jsr pc,wbf mov r1,nextb mov ll,llh rts r5 headout: tst hx bne 0f tst (r5)+ rts r5 0: clr -(sp) mov *(r5),r2 mov ibf1,nfile jsr r5,headseg; width mov r0,-(sp) jsr r5,headseg; width mov r0,-(sp) jsr r5,headseg; width mov r0,-(sp) mov po,r0 jsr pc,space tst numbmod beq 1f mov $5,r0 add ni,r0 mov r0,6(sp) 1: mov *(r5)+,r2 jsr r5,headseg; putchar mov llh,r0 add 6(sp),r0 sub 2(sp),r0 asr r0 sub 4(sp),r0 bge 1f clr r0 1: mov r0,-(sp) jsr pc,space jsr r5,headseg; putchar mov llh,r0 sub (sp)+,r0 sub (sp)+,r0 sub (sp)+,r0 sub (sp)+,r0 add (sp)+,r0 jsr pc,space jsr r5,headseg; putchar jsr pc,newline rts r5 headseg: clr -(sp) 1: mov r1,-(sp) mov r2,r1 inc r2 jsr pc,rdsufb mov (sp)+,r1 tstb r0 beq 1f cmp r0,$'% beq 2f jsr pc,*(r5) add r1,(sp) br 1b 2: mov pn,r0 clr r1 tst ro beq 2f mov $ones,onesp mov $fives,fivesp jsr pc,roman add r1,(sp) br 1b 2: jsr pc,decml add r1,(sp) br 1b 1: mov (sp)+,r0 tst (r5)+ rts r5 space: jsr r5,nlines; putchar rts pc nlines: mov r0,-(sp) 1: dec (sp) blt 1f mov $' ,r0 jsr pc,*(r5) br 1b 1: cmp (r5)+,(sp)+ rts r5 decimal: jsr pc,decml tst (r5)+ rts r5 decml: mov r2,-(sp) mov r3,-(sp) jsr pc,decml1 mov (sp)+,r3 mov (sp)+,r2 rts pc decml1: mov r1,-(sp) clr r2 mov r0,r3 dvd $10.,r2 mov r3,-(sp) mov r2,r0 beq 1f jsr pc,decml mov r1,2(sp) 1: mov (sp)+,r0 add $'0,r0 jsr pc,*(r5) add (sp)+,r1 rts pc roman: mov r2,-(sp) mov r3,-(sp) jsr pc,roman1 mov (sp)+,r3 mov (sp)+,r2 rts pc roman1: clr r2 mov r0,r3 bne .+4 rts pc mov r1,-(sp) dvd $10.,r2 mov r3,-(sp) mov r2,r0 inc onesp inc fivesp jsr pc,roman mov r1,2(sp) dec onesp dec fivesp clr r2 mov (sp)+,r3 dvd $5.,r2 cmp r3,$4 bne 1f movb *onesp,r0 jsr pc,*(r5) add r1,(sp) tst r2 beq 2f inc onesp movb *onesp,r0 dec onesp br 3f 2: movb *fivesp,r0 3: jsr pc,*(r5) add (sp)+,r1 rts pc 1: tst r2 beq 2f movb *fivesp,r0 jsr pc,*(r5) add r1,(sp) 2: dec r3 blt 1f movb *onesp,r0 jsr pc,*(r5) add r1,(sp) br 2b 1: mov (sp)+,r1 rts pc '@kפ9<?BEHKNQT  j j / / /roff3 -- runoff skipcont: jsr pc,getchar mov r0,r2 jsr pc,alph2 beq skipcont 1: cmp $' ,r0 bne 1f jsr pc,getchar br 1b 1: mov r0,ch rts pc rbreak: tst nc ble 4f clrb *linep inc totout mov ls,r0 dec r0 jsr r5,nlines; nline tst pl beq 4f cmp nl,bl bne 1f 3: jsr pc,eject 1: tst nl bne 3f mov ma1,r0 jsr r5,nlines; newline bit $1,pn bne 1f jsr r5,headout; ehead br 2f 1: jsr r5,headout; ohead 2: mov ma2,r0 jsr r5,nlines; newline dec skip bge 3b 3: mov po,r0 jsr pc,space jsr pc,donum mov un,r0 jsr pc,space jsr pc,jfo mov $line,r2 1: movb (r2)+,r0 cmp $' ,r0 bne 2f jsr pc,fill tst nc bne 1b br 3f 2: jsr pc,putchar dec nc bgt 1b 3: jsr pc,newline clr nwd clr ne mov in,un 4: jsr pc,setnel rts pc jfo: tst jfomod beq 1f mov fac,r0 add fmq,r0 beq 1f clr fac clr fmq mov nel,r0 cmp jfomod,$1 bne 2f asr r0 2: jsr pc,space 1: rts pc donum: tst numbmod beq 2f dec nn blt 1f mov $5,r0 add ni,r0 jsr pc,space rts pc 1: clr r0 cmp lnumber,$100. bge 1f inc r0 cmp lnumber,$10. bge 1f inc r0 1: add ni,r0 jsr pc,space mov lnumber,r0 jsr r5,decimal; putchar mov $2,r0 jsr pc,space inc lnumber 2: rts pc newline: mov $'\n,r0 jsr pc,putchar inc nl rts pc nline: mov nl,r0 beq 1f cmp r0,bl beq 1f jsr pc,newline 1: rts pc number: jsr pc,skipcont number1: mov r1,-(sp) mov r3,-(sp) clr r3 clr -(sp) clr -(sp) 1: jsr pc,getchar cmp r0,$'+ beq 2f cmp r0,$'- beq 2f sub $'0,r0 cmp r0,$9. bhi 3f inc (sp) mpy $10.,r3 add ((r0,r3 br 1b 2: mov r0,2(sp) br 1b 3: add $'0,r0 mov r0,ch mov (sp)+,r0 bne 1f mov $1,r3 mov r3,r0 1: mov (r5)+,r0 beq 1f mov (r0),r0 1: mov (sp)+,r1 cmp r1,$'- bne 1f sub r3,r0 br 2f 1: cmp r1,$'+ bne 1f add r3,r0 br 2f 1: mov r3,r0 2: mov (sp)+,r3 mov (sp)+,r1 rts r5 eject: tst pl beq 1f tst nl beq 1f mov pl,r0 sub nl,r0 sub ma4,r0 sub hx,r0 jsr r5,nlines; newline bit $1,pn bne 2f jsr r5,headout; efoot br 3f 2: jsr r5,headout; ofoot 3: cmp numbmod,$1 bne 3f mov $1,lnumber 3: mov ma4,r0 jsr r5,nlines; newline clr nl inc pn 1: cmp pn,pto ble 1f jsr pc,flush jmp place 1: istop: tst stop beq 2f cmp pn,pfrom blo 2f jsr pc,flush / mov sp,r1 / sys signal; 2; 1f clr r0 sys read; garb; 1 1: / mov r1,sp / sys signal; 2; place 2: rts pc storeline: cmp linep,$line+linsiz bhis 1f movb r0,*linep inc linep jsr pc,width add r1,ne sub r1,nel inc nc 1: rts pc getword: mov $word,r2 clr wne clr wch clr nhyph clr hypedf mov $word,wordp clr -(sp) 1: jsr pc,gettchar cmp r0,$'\n beq 3f cmp r0,ohc bne 2f inc hypedf br 1b 2: cmp $' ,r0 bne 2f jsr pc,storeword br 1b 2: mov r0,-(sp) mov $' ,r0 jsr pc,storeword tst spaceflg beq 2f jsr pc,storeword clr spaceflg 2: mov (sp)+,r0 2: jsr pc,storeword bisb (sp),-1(r2) /add in hyphen clr (sp) jsr pc,gettchar cmp r0,ohc bne 1f inc hypedf jsr pc,gettchar mov $200,(sp) 1: cmp $' ,r0 beq 1f cmp $'\n,r0 bne 2b cmpb -1(r2),$'. bne 1f inc spaceflg 1: add $2,2(sp) 1: clrb (r2)+ 3: tst (sp)+ mov $word,wordp tst nc bne 1f jsr pc,setnel 1: rts pc setnel: mov $line,linep mov ll,nel sub un,nel clr ne clr fac clr fmq rts pc storeword: jsr pc,width add r1,wne inc wch movb r0,(r2)+ rts pc need: mov r0,r3 mpy ls,r3 mov r3,r0 need2: add nl,r0 cmp r0,bl ble 1f jsr pc,eject 1: rts pc min: tst r0 bge 1f clr r0 1: rts pc getname: mov r1,-(sp) mov r2,-(sp) mov (r5)+,r1 mov $18.,r2 1: jsr pc,getchar cmp r0,$041 blt 2f cmp r0,$0176 ble 4f 2: mov r0,ch 3: clrb (r1)+ mov (sp)+,r2 mov (sp)+,r1 rts r5 4: movb r0,(r1)+ dec r2 beq 3b br 1b copyb: mov (r1),r1 jsr pc,flushi clr nlflg mov $1,-(sp) 1: jsr pc,getchar cmp r0,$'\n bne 2f mov $1,(sp) clr nlflg br 4f 2: cmp r0,$'. bne 9f cmp (sp),$1 bgt 3f blt 9f inc (sp) br 4f 3: dec r1 clr r0 inc (sp) br 4f 9: clr (sp) 4: tst skp bne 5f jsr pc,wbf 5: cmp (sp),$3 bne 1b tst (sp)+ tst skp bne 6f mov r1,nextb 6: rts pc popi: cmp ilistp,$ilist beq 1f sub $2,ilistp mov *ilistp,ip 1: rts pc wbf: mov r0,char mov r1,offb mov ibf,r0 sys lseek;0; offb:..;0 /actually lseek mov ibf,r0 sys write; char;1 inc r1 cmp ibf1,ofile bne 1f mov $-1,ofile 1: rts pc rbf: mov ip,r1 mov ibf1,nfile jsr pc,rdsufb tstb r0 bne 2f jsr pc,popi rts pc 2: inc ip rts pc alph: movb (r0),r2 alph2: cmp r2,$'A blo 1f cmp r2,$'Z blos 2f cmp r2,$'a blo 1f cmp r2,$'z bhi 1f 2: sez rts pc 1: clz rts pc rdsufb: mov r1,-(sp) bic $77,r1 cmp r1,sufoff bne 1f cmp nfile,ofile beq 2f 1: mov r1,sufoff mov nfile,ofile mov nfile,r0 sys lseek;0; sufoff: -1; 0 /actually lseek mov nfile,r0 sys read; sufbuf; 512. 2: mov (sp),r0 bic $!77,r0 movb sufbuf(r0),r0 mov (sp)+,r1 rts pc 'Ak}!$'*-036  j4 / / / roff2 -- runoff casead: jsr pc,rbreak inc ad rts pc rts pc casebr: jsr pc,rbreak rts pc casecc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n beq 1f movb r0,cc 1: mov r0,ch rts pc casece: jsr pc,rbreak jsr r5,number; 0 jsr pc,min mov r0,ce jsr pc,need rts pc caseds: jsr pc,rbreak mov $2,ls rts pc casefi: jsr pc,rbreak inc fi rts pc casein: jsr pc,rbreak jsr r5,number; in jsr pc,min mov r0,in mov r0,un rts pc caseix: jsr r5,number; in jsr pc,min mov r0,in rts pc caseli: jsr r5,number; 0 mov r0,-(sp) 1: dec (sp) blt 1f jsr pc,flushi clr nlflg jsr pc,text br 1b 1: tst (sp)+ rts pc casell: jsr r5,number; ll jsr pc,min mov r0,ll rts pc casels: jsr pc,rbreak jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f mov ls1,ls rts pc 1: mov r0,ch jsr r5,number1; ls dec r0 jsr pc,min inc r0 mov r0,ls mov r0,ls1 rts pc casena: jsr pc,rbreak clr ad rts pc casene: jsr r5,number; 0 jsr pc,min jsr pc,need rts pc casenf: jsr pc,rbreak clr fi rts pc casepa: casebp: jsr pc,rbreak jsr pc,eject jsr pc,skipcont tst nlflg bne 1f jsr r5,number; pn jsr pc,min mov r0,pn 1: rts pc casebl: jsr pc,rbreak jsr r5,number; 0 jsr pc,min mov r0,-(sp) jsr pc,need2 1: dec (sp) blt 1f mov $' ,r0 jsr pc,storeline jsr pc,rbreak br 1b 1: tst (sp)+ rts pc casepl: jsr r5,number; pl mov r0,pl jsr pc,topbot rts pc casesk: jsr r5,number; 0 jsr pc,min mov r0,skip rts pc casesp: jsr pc,rbreak jsr r5,number; 0 jsr r5,nlines; nline rts pc casess: jsr pc,rbreak mov $1,ls rts pc casetr: jsr pc,skipcont 1: jsr pc,getchar cmp r0,$'\n beq 1f mov r0,r1 jsr pc,getchar cmp r0,$'\n bne 2f mov $' ,r0 2: movb r0,trtab(r1) br 1b 1: rts pc caseta: mov $tabtab,r1 1: cmp r1,$etabtab bhis 1f jsr r5,number; 0 jsr pc,min dec r0 ble 1f movb r0,(r1)+ br 1b 1: clrb (r1) rts pc caseti: jsr pc,rbreak jsr r5,number; in jsr pc,min mov r0,un rts pc caseul: jsr r5,number; 0 jsr pc,min mov r0,ul rts pc caseun: jsr r5,number; 0 sub in,r0 neg r0 jsr pc,min mov r0,un rts pc casehx: tst hx beq 1f clr hx br 2f 1: inc hx 2: jsr pc,topbot rts pc casehe: jsr r5,headin; ehead mov ehead,ohead rts pc casefo: jsr r5,headin; efoot mov efoot,ofoot rts pc caseeh: jsr r5,headin; ehead rts pc caseoh: jsr r5,headin; ohead rts pc caseef: jsr r5,headin; efoot rts pc caseof: jsr r5,headin; ofoot rts pc casem1: jsr r5,number; ma1 jsr pc,min mov r0,ma1 br 1f casem2: jsr r5,number; ma2 jsr pc,min mov r0,ma2 br 1f casem3: jsr r5,number; ma3 jsr pc,min mov r0,ma3 br 1f casem4: jsr r5,number; ma4 jsr pc,min mov r0,ma4 1: jsr pc,topbot rts pc casehc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f movb $200,r0 1: mov r0,ohc rts pc casetc: jsr pc,skipcont jsr pc,getchar cmp r0,$'\n bne 1f mov $' ,r0 1: mov r0,tabc rts pc casehy: jsr r5,number; 0 mov r0,hyf rts pc casen1: jsr pc,rbreak mov $1,numbmod br 1f casen2: jsr pc,rbreak mov $2,numbmod 1: clr nn jsr r5,number; 0 tst r0 ble 1f mov r0,lnumber rts pc 1: clr numbmod rts pc casenn: jsr r5,number; 0 jsr pc,min mov r0,nn rts pc caseni: jsr r5,number; ni jsr pc,min mov r0,ni rts pc casejo: jsr r5,number; 0 mov r0,jfomod rts pc casear: clr ro rts pc casero: inc ro rts pc casenx: jsr pc,skipcont jsr r5,getname; nextf inc nx jsr pc,nextfile inc nlflg clr ip mov $ilist,ilistp rts pc casepo: jsr pc,rbreak jsr r5,number; po jsr pc,min mov r0,po rts pc casede: tst ip bne 5f jsr pc,skipcont jsr r5,getname; bname clr skp mov $contab,r1 clr -(sp) 1: mov (r1)+,(sp) beq 2f bic $100000,(sp) cmp bname,(sp) bne 3f 2: bis $100000,bname mov nextb,(r1) mov bname,-(r1) br 4f 3: cmp (r1)+,$-1 bne 1b inc skp 4: tst (r1)+ jsr pc,copyb tst (sp)+ 5: rts pc caseig: inc skp jsr pc,copyb rts pc casemk: jsr pc,rbreak mov $002,r0 /stx jsr pc,putchar rts pc 'Bk   jj / / / roff1 -- text formatter .globl _ttyname nop = 000240 signal = 48. ibuf: /init code in ibuf+obuf cmp sp,$end bhi 1f jsr r5,string; emes1 sys exit 1: clr r0 jsr pc,mesg sys signal; 1; place sys signal; 2; place jsr pc,makebf sys open; suffil; 0 bes 1f mov r0,suff sys lseek; 0;20; 0 /actually lseek bes 1f mov suff,r0 sys read; suftab; 2*26. 1: clr r0 mov (sp)+,argc dec argc bne 1f jmp place 1: tst (sp)+ mov (sp),r4 cmpb (r4)+,$'+ bne 2f jsr r5,pnum; pfrom br 3f 2: cmpb -1(r4),$'- bne 2f cmpb (r4),$'s bne 0f inc stop br 3f 0: cmpb (r4),$'h bne 0f clr slow br 3f 0: jsr r5,pnum; pto 3: dec argc bgt 1b 2: mov $nop,get1a mov $ibuf,ibufp mov $ibuf,eibuf mov sp,argp jsr pc,topbot clr r0 1: movb r0,trtab(r0) inc r0 cmp r0,$128. bne 1b jsr pc,rbreak jsr pc,istop jmp loop makebf: sys stat; bfn; stbuf bec 2f sys creat; bfn; 400 bec 1f 2: incb bfn+8 cmpb bfn+8,$'z blos makebf jmp place 1: mov r0,ibf sys write; sufbuf;128. sys open; bfn;0 mov r0,ibf1 rts pc string: mov (r5)+,r1 mov r1,r2 mov r1,0f 1: tstb (r1)+ bne 1b sub r2,r1 mov r1,1f mov $1,r0 sys write; 0:..; 1:.. rts r5 emes1: xxx: .even obuf=ibuf+512. .=ibuf+1024. loop: clr nlflg jsr pc,getchar cmpb r0,cc beq 2f movb r0,ch jsr pc,text br loop 2: jsr pc,control jsr pc,flushi br loop mesg: tst r0 bne setsame clr -(sp) jsr pc,_ttyname tst (sp)+ mov r0,9f mov r0,8f mov r0,7f sys stat; 9:..; stbuf mov stbuf+4,0f mov 0f,1f bic $22,0f sys chmo((d; 8:..; 0:.. rts pc setsame: sys chmod; 7:..; 1:.. rts pc pnum: mov r4,ibufp mov $37777,eibuf jsr r5,number1; 0 mov r0,*(r5)+ clr ch rts r5 flushi: clr ch tst nlflg bne 1f jsr pc,getchar br flushi 1: rts pc gettchar: tst ul ble getchar tst ulstate beq 3f tst bsc bgt 1f tst ulc bgt 2f clr ulstate br 3f 1: dec bsc mov $010,r0 rts pc 2: dec ulc mov $'_,r0 rts pc 3: jsr pc,getchar cmp r0,$'0 blt 1f cmp r0,$'9 ble 2f cmp r0,$'A blt 1f cmp r0,$'Z ble 2f cmp r0,$'a blt 1f cmp r0,$'z ble 2f 1: tst ulc bgt 3f rts pc 3: mov $1,ulstate mov r0,ch br gettchar 2: inc bsc inc ulc rts pc getchar: mov ch,r0 beq 1f clr ch rts pc 1: tst nlflg beq 1f mov $'\n,r0 rts pc 1: jsr pc,get1 cmp r0,$'\\ bne 2f jsr pc,get1 jsr r5,switch; esctab br 3f 2: cmp r0,$033 /prefix bne 3f jsr pc,get1 jsr r5,switch; pfxtab 3: cmp r0,$'\n bne 3f inc nlflg clr column 3: mov r1,-(sp) jsr pc,width add r1,column mov (sp)+,r1 rts pc esctab: .byte 'd, 032 /hlf (down) .byte 'u, 035 /hlr (up) .byte 'r, 036 /flr (reverse) .byte 'x, 016 /SO (extra chars) .byte 'y, 017 /SI (normal characters) .byte 'l, 0177 /delete .byte 't, 011 /hor tab .byte 'a, 0100 /at sign .byte 'n, 043 /number sign .byte '\\, 134 /backslash .byte 0, 0 pfxtab: .byte '7, 036 /flr .byte '8, 035 /hlr .byte '9, 032 /hlf .byte '4, 030 /brs .byte '3, 031 /rrs .byte '1, 026 /set hor tabs .byte '2, 027 /clr hor tabs .byte 0,0 pfxtab1: switch: mov r1,-(sp) mov (r5)+,r1 1: cmpb (r1)+,r0 beq 1f tstb (r1)+ bne 1b cmp r1,$pfxtab ble 0f cmp r1,$pfxtab1 bgt 0f mov $037,r0 0: mov (sp)+,r1 rts r5 1: movb (r1)+,r0 mov (sp)+,r1 rts r5 get1: tst nspace ble 1f dec nspace mov tabc,r0 rts pc 1: mov r1,-(sp) 4: tst ip beq 5f jsr pc,rbf br 6f 5: tst nx bne 0f mov ibufp,r1 cmp r1,eibuf bne 3f 0: mov ifile,r0 bne 2f 1: jsr pc,nextfile 2: clr nx sys read; ibuf; 512. bes done tst r0 beq 1b mov $ibuf,r1 add r1,r0 mov r0,eibuf 3: movb (r1)+,r0 mov r1,ibufp 1: cmp r0,$011 /tab bne 6f mov (sp)+,r1 mov $tabtab,r0 inc nspace 1: tstb (r0) beq get1 cmpb column,(r0)+ bge 1b movb -(r0),nspace sub column,nspace br get1 6: get1a: br 7f tst r0 beq 4b 7: mov (sp)+,r1 rts pc nextfile: mov ifile,r0 beq 1f sys close 1: tst nx beq 2f mov $nextf,0f br 3f 2: dec argc blt done mov *argp,0f add $2,argp 3: sys open; 0:..; 0 bes done mov r0,ifile rts pc done: jsr pc,rbreak jsr pc,eject jsr pc,flush place: sys signal; 2; 1 mov $1,r0 jsr pc,mesg sys unlink; bfn sys exit rts pc putchar: cmp pn,pfrom blt 2f clr pfrom bic $!177,r0 beq 2f movb trtab(r0),r0 cmp r0,$' bne 1f inc nsp 2: rts pc 1: cmp r0,$'\n bne 1f clr nsp clr ocol br 2f 1: tst nsp beq 2f tst slow bne 4f jsr pc,dsp cmp nsp,r1 blt 4f mov $011,3f+2 cmp r1,$1 bgt 8f mov $040,3f+2 dec nsp br 9f 8: sub r1,nsp 9: mov r0,-(sp) 3: mov $011,r0 jsr pc,pchar1 mov (sp)+,r0 br 1b 4: mov r0,-(sp) mov $' ,r0 jsr pc,pchar1 mov (sp)+,r0 dec nsp bne 4b 2: cmp r0,$026 blt 2f cmp r0,$037 beq 3f bgt 2f mov r0,-(sp) jsr r5, switch; unpfx cmp (sp)+,r0 beq 2f mov r0,-(sp) mov $033,r0 /prefix jsr pc,pchar1 dec ocol mov (sp)+,r0 2: pchar1: cmp r0,$011 bne 1f jsr pc,dsp br 2f 1: jsr pc,width 2: add r1,ocol movb r0,*obufp inc obufp cmp obufp,$obuf+128. beq flush 3: rts pc dsp: clr r1 1: add $8.,r1 cmp ocol,r1 bgt 1b sub ocol,r1 bne 2f mov $8.,r1 2: rts pc unpfx: .byte 032, '9 .byte 035, '8 'Bk    jj .byte 036, '7 .byte 031, '3 .byte 030, '4 .byte 026, '1 .byte 027, '2 .byte 0,0 flush: mov obufp,r0 sub $obuf,r0 mov r0,0f mov $1,r0 sys write; obuf; 0:0 mov $obuf,obufp rts pc control: jsr pc,getchar mov r0,-(sp) jsr pc,getchar swab r0 bis (sp),r0 mov $contab,r1 1: mov (r1)+,(sp) bic $100000,(sp) cmp r0,(sp) bne 4f mov (r1),(sp) tst -(r1) bpl 3f jsr pc,flushi cmp ilistp,$iliste bgt 5f mov ip,*ilistp add $2,ilistp mov (sp),ip br 5f 3: jmp *(sp)+ 4: cmp (r1)+,$-1 bne 1b 5: tst (sp)+ rts pc contab: ; casead ; casebp
; casebr ; casecc ; casece ; caseds ; casefi ; casein ; caseix

  • ; caseli ; casell ; casels ; casena ; casene ; casenf ; casepa ; casebl ; casepl ; casesk ; casesp ; casess ; caseta ; caseti ; casetr