unix_v4/0000755000175000017500000000000015125624651010545 5ustar aapaapunix_v4/lib/0000755000175000017500000000000001027164350011302 5ustar aapaapunix_v4/lib/c10000755000175000017500000004504001026347440011540 0ustar aapaap-P8 & 6 % w N-W-<@ ! :-X^@& , R\@& , F@ ! :-^`@& , @X@ !  :-R\ (,7aAe h@ ! :-X^ F,B #;aR\ (,R\ (,R\ (, 5,@R\ (,7D[ R\ (, &Da %  7 ,a f %  az@ h*^` , `  :-w+w +C_W-fblY@ 5,E55N& V 55@5Nf V 5u/ Ie@ʋ?E@-@#$ &  e@ 5,E E@-@W/$f   w*w *BC _4*@ye7^=_4  Te _4.#3. .@ !=vK 8% _4 5,E? N 8%*eN %  X &@ h*% MNhH %  vK4NvK 8%* 5 lY fb lY- &f@ h*e \^ Ff@ h*% A ! w>)w ,)Bu5%d45 5 5 . ] " @e 5` @e 5` er@ 5,EW-5W-6:W-F6NF; B;5& TeNf@ % ; ,! N `!Nf@ %: : `!@_N W-Z]W-F_N N& : :5& Te\Nf %5w\ : :5& ,! N `!Nf %5@-Nf  &A h*euN `!cW-#. ,(A !N  5 5Nf R % <9Nf %5_N @55  5,E@ 5&AyD"e  x!5 w[  "+"I @_N D5 W' N& 0 @5%' 5 N `  5,E D-b   f ,@,b @@A h* _ DvK@ e55lY5# #!8NhH& % hHF5  W-lY /UW-fbW-lYfb5u 5,E-uuNf& %55DA h* 5u_u-_W-vK_   95+57Nef  AAE 56Ne  AE u@ 5_Nf > &PA h*e_uW- uw-\6`A !NA h* _W(_B dXW-fb_- _) W+_ 4X_@  _A707 y _A h* _ & 0 _ mA h* _? _l A h* _A h* _ V % _ F % _NA h* _ _A h*_N _w$"w " D4N& V % j555Nf@e& 8%w!w !D-VB ! V   lY& % V   fb& % wt!w b!B _  _  ,E5_ 5 _ 5@  r_   2  253 & @ % r? ,. V% ,   &  5   &  5$ hBy ONf  2..(A p_J   ee..e& %u- @Nf  2ww C_ _"g  3X  3"$ ###F"3#47:Trbe   T(#%  xx| 4@ 4    3ww b5 5 B 5@ef T% )@ Ae@`u .. ef % W-(_@ _@ .   _..#. A1l W-(  @e @e  &  5W-*  5 u-7@ @ae54N @-@ W-*@ @a# "@54 "*   : &  2ww @ @me,55 @e,5!_/*_"h5 @e, O!J.*F"@A1,p(  N  AA 2r #AA 2r  e u-u5ue S@  @m5DC(@p@0@pAf r2p  5! N  _KN&  _ww D5! eww D@( I xH,<=a=ADp}7@ =@2=Q/=x@) B"W-+A r=A r}&@ t= @t=B !w"w BC"  `f T%f T%_  "  B"*".<.8.(4"-"* &eAA~p^ AADtp0(W-( 5 " @ `, 5!@ `5,@ `,BD  `,ww ^`fE , ww u-@@ww D  ##### 5,E - wFw 4C _  xPr r          0@B h* _B h* _B h*  4 x B h* _e B h* _B !C h*_ C ! C h* _ C h* _$ _:"($.# & 0   C h* O &&C h*%A"   +& 0C h*%-" & -8C h*%" , @C h* * _:FC !w^w LDN& V   - W-w w D _ _ x~ _ _-__ _"" S"$"(. ,. :"(.#., , " ", ", 5-ww BCE%E ! ! A @@?   ! A @@,55EU !" ,     ww  F 5#  ^C h* eNbC ! ww C"(!!#! ww D 5,E--\Hf wZw HDN  @vC7D) y Uw w W-@  xzww CB NC h* _@z% v%5 D _@t55 FAWp @ C h* NC h* NC h* C h*C h*,_8, C h* eNC h* W-c$ $5$ $5NC h* NC h* t$C h* f$ b$D h* NfD h*%N,D h* 8D h* eN>p:&E h* Nff f fff h*e  ^` ,7<>wP addsubincdecjeqjnejlejgtjltjgejlosjhijlojhis/nopjbrNGNGVGVG?cG?cGfGfGpGpG?G?GTGTGGG?TG?TG?G?GGG?G?G?G??H??H!H+H?:H?FH??SH??dH??dH?H?H?H?H?H?H?H?H?H?H?H?HHHHHHHHH?HHHTITIIT,IT,IT?@IQIQI?gIzI?IITIT?ITIII?IJ?J0JT?AJXJ?oJJJJ?JJTJJ?JT?K?K?#K?JKKKSK?`KaKiK? L?L?L ?L?L?%L?%L?0L?0L???L???L?ML?TL?\L?fL?pL?{L?{L?{L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?M?M?M??@M?eM?eM?oM?oM?M?M?M?M?M?M?M?M??M??M?? N??N??)N??)N??3N?X?ZX?ZX?{XT?X?X?X?X?Y?7Y?BY??RY??_Y?Y?Y?Y?Y?Y?Y?Y?Y?Y?Z?Z?!Z?6Z?6Z?OZ ?lZ?zZ?Z?Z?Z?Z?Z?[?,[??:[??U[??q[??[?[?[?[??[?[??[?[? \??\w w 8De8  7 % w7 77 7ׯ7- 7 7"|b7 7 .zb*B J*dN+oH+x~+f+e&+c4+s+l ӕ- C r f e0 1 /B7 ҋ D~'0\4\ f v Le0 9e7 z6 p&  m6 6 ~    ~ w7 6 6 60  6Wp `e0[eӕ?fw&08\7A 7 X6fA & UfA  @e7/1@>\  1 @ wfw/AD\F  Df@A&  6f@A @+ 9 & fA @e&7?DEBC=EDCBvKhHFlY'Arg countMissing temp fileCan't create %sTree space botch.globl fltused Illegal initializationmov%c r%d,r0 @@@$47$34T:jTmov%c r%d,%c(sp) tst%c r%d No match for op %dmov%c r%d,r%d Illegal use of register0%oadd r5,r%d mov%c r%d,r%d Register overflow: simplify expressionr%d%d.%d.#r $0%o0%otst r%d *$AAAAAAB BB        B d, B   B @  B : PB h B *B  J B Illegal structurepBxBBB!  | f 2 f | f ( 2 F p p Divide checkC error: const$0%oL%d%d.+%d.(r5)_%.8sIllegal structure reference$0Bad reg. referencer%dL%d(r%d)%d.(r%d)(r%d)%c%c(r%d)(r%d)pname called illegally%sNo match' for op %d*+,HIJHFFHFFPjbr L%d sub $0%o,r0 cmp r0,$0%o jhi L%d asl r0 jmp *.+4(r0) L%d L%d mov $L%d,r1 mov r0,L%d L%d:cmp r0,(r1)+ jne L%d jmp *L%d-L%d(r1) .data L%d:%o L%d:.. L%d L%d .text jsr r2,hsw; %o; L%d jmp *L%d-L%d(r1) .data L%d:L%d L%d:.. %o L%d:L%d L%d .text /esw Duplicate case (%d) "56z X ~ cfcc jbr L%d L%d:tst (sp)+ cmp (sp)+,(sp)+ add $0%o,sp %d: <<888888888>"B"?F"J"@J"F"AB">"BN"S"CW"["D["W"ES"N"6":":"6">"B"F"J"J"F" B">" 6":" `"e" e"`" :"6"j0#0#0#0#0#0#"0##0#$0#%0#(0#)0#*0#+0#-0#.0#/#00#<l"=l">l"?l"@l"Al"Bl"Cl"Dl"El"F0#G0#H0#I0#K0#L0#M0#N0#O0#P0#tstC A GBtstC #(I) GEcmpL A,B GBcmpL #(I),B GAVcmpD B,I GBKJcmpL #(I),"(J) GBKIcmpC #(I),J GAKJVcmpD "(J),I GAKIcmpP I,J GDKBcmpL *(sp)+,"(I) GDKAcmpC *(sp)+,I GCKBcmp (sp)+,"(I) KCGAVcmpP (sp)+,I bitL B,A GBbitL B,#(I) GAbitD B,I GAKIbit J,I GCKAbit (sp)+,I HA@#@# @#!@#P#Fb$Gb$M<$N$K$L$MC A M' $^,A GBMC #(I) GBM' $^,#(I) clrC A GBclrC #(I) movL B,A KBmovL "(I),A KAmovC I,A GBmovL B,#(I) GBKJmovL "(J),#(I) GBKImovL J,#(I) KBGJmovL "(I),#(J) KAGJmovC I,#(J) GDKBmovL "(I),*(sp)+ GDKAmovL I,*(sp)+ bisL B,A KAbisC I,A GBbisL B,#(I) KBGJbisL "(I),#(J) KAGJbisL I,#(J) GBKJbisL "(J),#(I) GBKIbisL J,#(I) GDKBbisL "(I),*(sp)+ GDKAbisL I,*(sp)+ bicC $!F,A KAcom I bicC I,A GBbicC $!F,#(I) KAGJcom I bicC I,#(J) GBKIcom J bicC J,#(I) GDKAcom I bicC I,*(sp)+ M'C A M B,A KBM "(I),A KAM I,A GBM'C #(I) KBGJM "(I),#(J) KBmovC A',J M "(I),J movC J,A KAmovC A',J M I,J movC J,A KAGJM I,#(J) KCGBM (sp)+,#(I) KCGBmovC #(I),J M (sp)+,J movC J,#(I) asrC A GBasrC #(I) aslC A GBaslC #(I) j%8%8% %!%"%#%%$%%:&&H&e$PP&(.').'*x'+','-&.'/&0&1&F)G)H'I&(Jd(K(L(M(N~(O(f$3\)4p)h$E A jmp A GBjmp #(I) jsr pc,`A GBjsr pc,#(I) GAjsr pc,(I) clr I clrf I movC A,I movf A,I movof A,I MC A' movC A,I M' $^,A' mov A,I GBMC #(I) movC #(I),I GBM' $^,#(I) mov #(I),I movC A',I MC A mov A',I M' $^,A GBmovC #(I),-(sp) MC #(I) movC (sp)+,I GBmov #(I),-(sp) M' $^,#(I) mov (sp)+,I GEbeq 1f clr I br 2f 1: mov $1,I 2: mov $A,I mov r5,I add Z,I GBmovb *#(I),I GBmovf *#(I),I GBmovof *#(I),I GBmov *#(I),I movb *A,I movf *A,I movof *A,I mov *A,I HBmovb ~(I),I HBmovf ~(I),I HBmovof ~(I),I HBmov ~(I),I GAnegP I GAcom I KAmovC I,A KAmovfo I,A GBKAmovf I,#(I) GBmovC B,#(I) movC #(I),I GBKAmovfo I,#(I) GBKImovC J,#(I) movC J,I KAGJmovf I,#(J) KAGJmovfo I,#(J) GDKAmovC I,*(sp)+ GDKAmovfo I,*(sp)+ KAmovfi I,I movC I,A KAGJmovfi I,I movC I,#(J) GDKAmovfi I,I movC I,*(sp)+ GAKIxor J,I GCKAxor I,(sp) mov (sp)+,I GAbisD B,I GAKJbisD "(J),I GAKIbis J,I GCKAbis (sp)+,I GAbic $!F,I GAKIcom J bic J,I GCKAcom (sp) bic (sp)+,I GAGAasr I GAash $-F,I GAKIneg J ash J,I KCneg (sp) GAash (sp)+,I GAGAasl I GAash B,I GAKJash #(J),I GAKIash J,I KCGAash (sp)+,I GAGAM' I GAMP B,I GAKJMP "(J),I GAKIMP J,I KDGAMP *(sp)+,I KCGAMP (sp)+,I GAmulP B,I GAKJmulP "(J),I GAKImulP J,I KCGAmulP (sp)+,I GATsxt I- div B,I- GATsxt I- KJdiv "(J),I- GATsxt I- KIdiv J,I- KCGATsxt I- div (sp)+,I- GAdivf B,I GAKJdivf "(J),I GAKIdivf J,I KCGAdivf (sp)+,I movC A',I mulP B,I movC I,A KCmovof A',I mulf (sp)+,I movfo I,A movC A',I KJmulP "(J),I movC I,A KAmulP A',I movP I,A KCmovC A',I mulP (sp)+,I movC I,A GDKAmulP *(sp),I movC I,*(sp)+ GDKCmovC *2(sp),I mul (sp)+,I movC I,*(sp)+ GDmovof *(sp),I movf I,-(sp) KAmulf (sp)+,I movfo I,*(sp)+ movC A',I sxt I- divP B,I- movC I-,A KCmovC A',I sxt I- div (sp)+,I- movC I-,A KCGJmovC #(J),I sxt I- div (sp)+,I- movC I-,#(J) GDKCmovC *2(sp),I sxt I- div (sp)+,I- movC I-,*(sp)+ movf A',I divf B,I movf I,A movf A',I KIdivf J,I movf I,A KCmovf A',I divf (sp)+,I movf I,A KCmovof A',I divf (sp)+,I movfo I,A GDKCmovf *8(sp),I divf (sp)+,I movf I,*(sp)+ GDKCmovof *8(sp),I divf (sp)+,I movfo I,*(sp)+ movC A',I sxt I- div B,I- movC I,A KCmovC A',I sxt I- div (sp)+,I- movC I,A KCGJmovC #(J),I sxt I- div (sp)+,I- movC I,#(J) GDKCmovC *2(sp),I sxt I- div (sp)+,I mov I,*(sp)+ bisL B,A' movC A,I KAbisC I,A' movC A,I GBbisL B,#(I) movC #(I),I KBGJbisL #(J),"(I) movC "(I),I KAGJbisL I,#(J) movC #(J),I GBKJbisL "(J),#(I) movC #(I),I GBKIbisL J,#(I) movD #(I),I GDKBbisL "(I),*(sp) movD *(sp)+,I GDKAbisL I,*(sp) mov *(sp)+,I KAxor I,A' mov A,I KCmovb A',I xor I,(sp) mov (sp)+,I movb I,A GDmovC *(sp),-(sp) KAxor I,(sp) movC (sp)+,I movC I,*(sp)+ bicC $!F,A' movD A,I KAcom I bicC I,A' movC A,I KAGJcom I bicC I,#(J) movC #(J),I GBKIcom J bicC J,#(I) movC #(I),I GDKAcom I bicC I,*(sp) movC *(sp)+,I movC A',I ash $-F,I movC I,A KCmovC A',I neg (sp) ash (sp)+,I movC I,A KCGJmovC #(J),I neg (sp) ash (sp)+,I movC I,#(J) movC A',I ash B,I movC I,A KCmovC A',I ash (sp)+,I movC I,A KCGJmovC #(J),I ash (sp)+,I movC I,#(J) M B,A' mov A,I KBM "(I),A' mov A,I KAM I,A' mov A,I KBGJM "(I),#(J) mov #(J),I KCmovC A',I MP (sp)+,I movC I,A KCmovof A,I MP (sp)+,I movfo I,A KAGJM I,#(J) mov #(J),I KCGBM (sp)+,#(I) mov #(I),I KCGBmovC #(I),J MP (sp)+,J movC J,#(I) movP J,I KCGBmovof #(I),J MP (sp)+,J movfo J,#(I) movf J,I movif A,I GBmovif #(I),I GAmovif I,I GAmovfi I,I jz))) )!)#)$)(,*),*/F*0T*clrC -(sp) movC A,-(sp) M A mov A,-(sp) M' $^,A mov A,-(sp) GBM #(I) mov #(I),-(sp) GBmov #(I),-(sp) M' $^,#(I) mov A,-(sp) M A mov A,-(sp) M' $^,A GBmov #(I),-(sp) M #(I) GBmov #(I),-(sp) M' $^,#(I) mov $A,-(sp) GBmovb *#(I),I mov I,-(sp) GBmovf *#(I),I movf I,-(sp) GBmovof *#(I),I movf I,-(sp) GBmov *#(I),-(sp) movb *A,I mov I,-(sp) movf *A,I movf I,-(sp) movof *A,I movf I,-(sp) mov *A,-(sp) HBmovb ~(I),I mov I,-(sp) HBmovf ~(I),I movf I,-(sp) HBmovof ~(I),I movf I,-(sp) HBmov ~(I),-(sp) GCM' (sp) GCM B,(sp) GCKBM "(I),(sp) GCKAM I,(sp) GCbic $!F,(sp) GCKAcom I bic I,(sp) GCbisD B,(sp) GCKBbisD "(I),(sp) GCKAbis I,(sp) unix_v4/lib/crt0.o0000644000175000017500000000014001026347440012327 0ustar aapaap$ & 6 % savr5$_main startunix_v4/lib/liba.a0000644000175000017500000003064601026347440012366 0ustar aapaapmget.oo,H^,$fA7X^ fA @e7R1@  1 @ www &w Ugetc" getw#dfopen"put.oo,|(<fA7v|  fA & 9 &fA @e&7Bw>8@w w&w w putc""putw#flush"Bfcreat"flRatan.o,AX7d@w h&w `!7J& @ Aew 875775VVfW@H77 wf@@w 7`7PwLw 7RXCX   B (08@HP8@@!hI@!hAy1?ϑy"?D{Av#OP#C!+C|]2CU*j 4xBJh{CW*RsCL~Szatan"atan2"savehsatanvret\pi2sq2m1arctansq2p1onepi4p4pp4p3 p2(p10p08q3@q2Hq1Phypot.o,.$f@@&@V@w Vhypot"sqrt one@mesg.o,0t& &@w Ջ@@ 7& Emesg"nlist.o,@ <&fwA@ e  T K-m- e7v-v-n) n"  @ 7"D7,>7,8 7,2.* e nlist"donebufcdonecountsin.oo,& Wf&&7rW?WA@mW@ @ V@hZL>0BhZL>VV "@NnDOLX2xة3I䔶TX]1 D!L%dIgN5&GbqhDK-?sin"cos"frpi2fourth?fourAone@p4p3p2p1p0q3q2q1q0switch.o,՗L fA  AEswitch"sqrt.o,ȗJ@&E@f& e@ B@~VVsqrt"half@qsort.oJY`xf&55   w E ` s qDD`fD @ `   pD D  `D&`@ f f@Df@D@ qsort"compare exch1exchangewidthexchwexchbqs1@loopZloop1jttyn.oD(u4b*T x h"Pb@h h$$ttyЋ7:@ 0/devttyn"_ttyn"namebufher1ZdevberVrand.o,|"$7fWp3e @7Erand"srand"ranx"compar.o,pd$ &   compare"crypt.o,.lf&f"ЕЕ bP "Cx ""  rB`E \ \ " !" "E R"S" B 0 & s>e0W!9eW!ZeT!ᇅ @ @  crypt"word$key"wheelcod"cagecode"wheeldivshiftcagewheelecvt.oYE  ,7 2*W&f  7 @% @A&@47@L> Be0# @ є 4    BA   W 4e B@e0 mZ ` eȐ9 ȕ0 ȕ1 P" J`0  VV> _ndigit# ecvt"fcvt"eflag6buf sign4zerrone@lssvgtr:buftop4tenthepsilonL>ten Bpaddigit1digitoutoutoutpow.o,rHT@AfW@Vw fW@Vw w V)pow"log exp badDone@bad1Bhalf@exp.o,PWf@@67f@f @AdVHB`R@7^&e# 7V # VVE=sMBԝ`=B.pF:|+eiD(/zC@;\)@3dexp"ldexp stexpone@outlog2ehalf@P2P1P0Q1Q0sqrt2biglog.o,#8@Wf&7V @W@@`RD6B^PBVwVV5@3e1@rzlB#"3h@?ØGe@lB,k$aXUlog"ldexp stexpbignegsqrt2o2xone@p3p2p1p0q2q1q0log2ctime.o> @xXESTEDTw N " &ww @eL@4 &  F, J, J  , Uow  5/  5   ,  , &  F ww DC @mem e rfww p@&f % r<R r< r<R r< rWtC` re rwF !  7 %nP  ,@ @ 2 7 ww bAA Wpe|CԔԔԔ @eWpeCԔԔԔ&  ed&  ed&  ed&  e@ &  w.w *A r nmw w D W- C r  r e0Tԕ A r e0TwPFDay Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDec_cbuf _dmsize#@_timezon#X_tzname#ZL1L2_dayligh#^_nixonfl#`_ctime"rsave _localti""_asctime"&L3rretrn _dpadd _gmtime"FL5L10000L10001L6_sunday"L7L10002L10003L4_dysize"L8BL10_ldiv _ldivr L11L12L13L14L15L16 L17L9"L21bL194L20<L22|L23_numb"L18L25L24L27$L28(L26<ldiv.oax"$6rw6r@_ldiv"_ldivr$"_lrem"dpadd.oP f@  P`Hm` _dpadd"fp.o.oS( fptrap"atof.o?`Wff&  } - } 0    } 0  f 5ww 0B`W@ &  W B~  e0VV \ B@eatof"atoi digitone@outhugeten Bbig\atoi.o?4  } &  - } 0 Wp `e0  atoi"gamma.oEU7W7 f@3Bw w VVVV&w W@7W@V&fA&  7pw | hb7Tw `&@w XHA A&@&@w @ @&Aw &  BX  d\TLD<l|tǹ-q'k@?%CIA!h99I9gamma"signgam$_signgam$log sin half@one@twoAeightBlargenegativexasymptot:regularlretret&erret.goobiep5ppip4p p6dp5\p4Tp3Lp2Dp1<p0lq6q5q4q3q2|q1tq0s5s4s3s2s1s0unix_v4/lib/c00000755000175000017500000003425001026347440011540 0ustar aapaap@/X , & 6 % intcharfloatdoublestructautoexternstaticregistergotoreturnifwhileelseswitchcasebreakcontinuedodefaultforsizeofw t.W-f@  . @& (. 7] @p@   .^\@& F. XZ@& F. ~@  .W- 0X *X @XI!`IԔ  de7 W@e&7WXZW d. W  #^\ .XZ . W  .wj-w X-5 XI `IE5`A rWtebIDeȋXI `I6E e%UbI ,G(G%@  . 4 4 4 XI WՀe `IҔw,w , v= p=j=!7 V_ VV7 V  V _V +H&,Ay. V =7 V rV _(& %_2)> je&& %_&  % P_ .!(%!1" U z*7UUH%~!)!/!*@  Ue_!P<_7J<P_& & % ._>?= %_& & % -_@A= %_="= %_ * % +_ U@  _ &U ;7 U p)@7b< y U R)!/_7T!0 +%<; 8;7T\ Y TVXI Tӕ.7 TH{H| `I ( `I7HT 7NT/JT,'4T70T5/& %60| %@ _Hw)w ) S J(7S-S@7 S@wv)w d)ShAnA.: *:7S StA D,%" n A D, pS rSA D, w)w (7 De8D , $ DD",^C CeCu@E%N '5f %#  &  eCeC ( @E%_n$ _nW-52 5 _N T&&  Wp eADHu@E5 @5W-P!W- 5 _W-YEUW-!5!KW-?5!W-<C 7W-5 55 *W-)u5  5=W-5 5 (ff re5W-= !W-e5 f % E  (ff re&ff e AeA  AA (f&  re~AexA ww @ 8 x*+N & &  ef& f& e 34N& f& eC @w*w DCB  % x8R|||||R`|||nn 8 &  \ && %ww DE%&  &# ewnw \CE%",?e?&  & %# ??ww @%!C ww D!E%h E!Ee ww  B^\ .ĝEEL)D D, Nff f fff D,e  +^\ .7dEw2w @ee>@   0ww >e>H @B D  .ww D##$ D ww D#] W/U@@% H x&.J>6`>e=-BpC r rC@ @Px @ t t ww  2A #0D  Aww  _"!_"5 @!*-@ @5%_5   @e& r& 5 7'%   !_7&7 ^@t@N& fE e:@_"e5(@ՀNBD D, 7 @@E% 7&% N &JE%E 5Y '2 (, upurfff e % ! PD  v% w w 7 V?%NlD D,  %D% %7? "7%%zD  >D D, 7|%ww B 7`%%  ABpN EfD D,%d ND D, %ff e % !7$ 7$ ff e  ABpND D, W-@E% @E%D @A @@5D D,ww  7\$%W-H$  =fD D,%= Eb-$@ [ = <7 =@ J x"4rE D,# v#  E D, @ * && & h e & (7=5&E7<&E e ## ww t,E wtw b F7B) y RE _!  <bEE e& D, V< l%_!7" E _!6<  _ xRj H <Pd V  (_t! _t! 8 _t! p5 %l;  e xzzzzz*0 2 *" &"&f '% ~  (+ 4 %;Z; ! !&f '%  ( ,;$; R*f '% 4%_! $%- ;_!_!! |! x!&f '%  %-:L! H! ( (  (_!7(! (_!p:n:! !7`: (  7N:& & '% 4: (.: ($:":_!: R*: (_t!: R*9 (_t!99 79 79x t 5 ( 9 (9 %_!-9 _!f d& '%~9 (v9_t! d %_! T9E _-B9VYE _,9(9e"9  (_9 79 5 , f& & n e & ( 8_! 8E  %iN J78 (_880 ,78$ 7v8 Jj8 (`8^8JE < %:'7 N8X8 E _  3 ( 07%_7 & ( % "F  v%_w w 4 %_" %D n& ( %_"t7 ( % & X7 .&g e & ( ^%f N7%   7S7 76 5 %Ad3^36 % 4F 6e,7>3@e67!.3 w3@e67! 3x6 (f ( N ( w0 w   x%   f%JF  v% w w 65 66V75 5 (57 5 5 (N (# +5 ( 5 Z V75 (5XZ & d. XZ5 d. XZ d. XZ d. !XZ&Z5wL5w" w  H5 % Z5&V50 L57D5,3E% )`bI U@:"E%E Y3EU3" E Ye\F  " evF  e4^40 R9i e& ( 44w w bI!U eF  4 #ew w D! 7pw w  5 B5 5%R3 M x%F&F&F&F&&%%%% F 3   N& $ eV3  @e& r& 5w.3 F 3 w ww  3 %2  l b ^ 0 Y"  4w2 7 2    G" F E Y0\27 v2 %5 w>2 R% E YeF  E 0Yww -dF  .ww D5G  tEE@Pwlw Z@tEAE@PUwHw 6fffg e & ( ww  /# +-21 *1XZ& d. XZf d. XZf d. XZ d.  XZww NG D, ww ~N$G D, wxw fB5  '2 (2w@w .BE%  'E YE% 6! 0E & xT)`)f)j)r)z)) ttE AYCp@ *G  8G ww xN (5 wlw Z 70%' P%;"/     4 # - ww ./H%~ 7//ww  PG ww  l+ef+ $ V+R+ , && & f Ne & ( wpw ^ b%; ^&& & n e & ( d. (w0w ^\f . w 7 P57 P57 J57 F.<5w @ ,5 (57 5 .5 5$ e!& 7 .57 - 4 d + - 7-w t 7 --47- 4' 44 ~ vY   r-n-R-7 L- 0 J4D-wp<4`w:- e0w w,4De"4  4 % +w7 47 3ׯ3- 3 3"z`7 3 .x`,B J,d*-o$-xZ-fd-e-c-s,l ӕ- C r f e0 1 /d3 ҋ D~'>IBI f v Le0 9e"3 z3 p&  m2 2 +~  +  +~ w7 2 2 20  2Wp `e0[eӕ?f z0l^t0l0l^  7\0 X0 T07d2 7 D0fwwFIwwfwALIF  Df@A&  6f@A @+ 9 & fA @e&7w@RIw&7 1f@ r dA! 7l1F @&HF &.6<DLV \ d h nt|Arg countCan't find %sCan't create tempSymbol table overflowWarning: assignment understoodNonterminated comment *RdrUnknown character AA$A,A:A   d4 6Px.text.data%s L%d:.byte 0%o,0 .even %s Long character constantNonterminated stringAAAA& $&. .. \..data L%d:0%o;0%o;0%o;0%o .text Expression overflow !dp p . . p 4 expression overflowde Expression syntaxBad function.bss L%d:.=.+%d. .text Bad register %o* Declaration syntax%.8s redeclaredIllegal conditionalCall of non-functionIllegal indirectionIllegal lvalueIllegal structure ref~CCCCC    xJxxxIllegal conversionC error-- convertInteger operand required%d: Expression overflowLvalue requiredConstant required.globl _%.8s External definition syntax.text _%.8s: Compound statement requiredL%d:jmp rretrn .comm _%.8s,0%o .data _%.8s=. .=.+%d. Too many initializers.even .text _%.8s=L%d .byte %d. 0%o;0%o 0%o;0%o;0%o;0%o Inconsistent external initializationUnexpected EOFjsr r5,mrsave;0f;%o .bss;0:.=.+2 .text jsr r5,rsave; %o Missing '}'Case not in switchSwitch table overflowDefault not in switchUnknown keywordRedefinition!!:!`!Statement syntaxExpression too largeStatement syntaxUndefined structure: %.8sNot an argument: %.8s%.8s undefinedConflict in storage classType clashBad structure name%.8s redeclaredDimension/struct table overflowIllegal indirectionjbr L%d L%d:Bad structureCompiler error (length)Break/continue error<<88888888880    Y@  www8899)amax0."max0."retrn temp amax1.oH<    Y@  wwwHHHII9amax1."dmax1." max1."retrn temp amin0.o>0    Y@  www8899)amin0."min0."retrn temp amin1.o H<    Y@  wwwHHHII9amin1."dmin1." min1."retrn temp amod.o+Jq8H  /;{@7ww HHI)Yamod."dmod."retrn one@temp rerr atan.o-<  ;w 7wHH)I9atan."datan."atan retrn temp atan2.o70H  / ;{w 7ww HHYI)9atan2."datan2."retrn rerr temp atan2 cabs.oM*H  Qw 7ww XX)Y9Icabs."dcabs."hypot retrn rerr temp cexp.o_<`w 7w 77w 77ww 8Y9i99y99)Icexp."rval8p retrn temp rerr exp sin cos cmplx.ok0<  /  YQww 888)Icmplx."dcmplx."retrn temp rerr conjg.owx077w899)conjg."rval8p retrn temp cos.oo<  ;w 7wHH)I9cos."dcos."cos retrn temp dble.oTh(h8HXdble."rval4p lval r4r8 gas8 retrn temp dim.o*0/ ;;7ww ()9dim."retrn temp rerr dimag.ol0 V7w89)dimag."rval16p retrn temp exp.oo(H  ;w 7ww XX)Y9Iexp."dexp."exp retrn rerr temp float.oTh(hH8Xfloat."rval4p lval gas4 i4r4 retrn temp iabs.o`$ ;7w()iabs."retrn temp idim.o.0 / ;{7ww 89)idim."retrn rerr temp idint.o%\$ ;7w()idint."retrn temp ierr.o7pl(ltz7 d -^w xeNH ePwz"e7 "e&&pwwz)99ierror."erret#lrerr retrn zeroterrbufzcerrpxeerbufonepifix.oU`x(xX8Hhifix."int."lval r4i4 gas4 rval4p retrn temp isign.og.0 / ;{7ww 89)isign."retrn rerr temp mod.oo+Bq2< /;{@7ww ()Imod."retrn temp one@rerr real.ot0  ;7w889)real."dreal."retrn temp sign.o4<  / ;{7ww 889)Isign."dsign."retrn temp rerr sin.o<  ;w 7wHH)I9sin."dsin."sin retrn temp sngl.oTh(h8HXsngl."rval8p lval r8r4 gas4 retrn temp sqrt.o&H  ;w 7ww XX)Y9Isqrt."dsqrt."sqrt retrn rerr temp ctime.o ,$ 7 7 7Hww7w())))))ctime."retrn temp setfil.o<TAw w pw  ѥ !wX)HiH9setfil."getbuf chkunit retrn utable temp rerr nice.oo&l$ "w(nice."retrn temp getarg.oT r,p</ AH  `A T  ԕ 5  wb7 w8I)89I9)getarg."iargc."^retrn temp argp unix_v4/lib/as20000755000175000017500000001167201026347440011726 0ustar aapaap$0 0w ^"e  R N J FE   e *   w7   e  w,  ~-xwD7 4,,7 pw 7t7 r   E  Ew  E C6.`.& e  C   ew z w | w r@w   7 <w w 77 L w . #w < w 0 w $ w @w @w   w *        Ew4X@E   mmfew ev !7  ԋ! w w^- M5 Be ;& C N *b UE    m    Uw ez w en w To w Fx-r  w 0r6w f5P  w Je  8 hf&\wX@70  r e0H~f xxxx  @% 4!!< T$&# :7Z !=[!:7 tT v -r }j w!!*w x E   w mE]$ 7n h - w p vȝ 78 2  J W E       ( w `. w RrEE б! ! w! !;!e tveD t AE@`e@eww fBJ b &w  B$w4E`wU ( w  7  $!!ee  7   7    w 7   e w 6!D!<wP     w && 0 H7 x. & > Z |  |  \  ѕ    r h  #w xUU HE BCwb &      R #e`e z8 x X_ L D l  P X#B w h}e  6 w H5    EU w b   Fw  :   @  U  :!,  8E  "5 -x   h l ! !,  &6 20w Zw Tew ew 7  7 !& L H 5U  & !(>!-X!$k!*w !(   U0U  UE UXW!H 7U > !+  U8   U zUU n!(7 - Z h >UU B 8 U w ~* ww la W     w Fe!)w 8) W  & Jw n fEtWt1ЬdW fE NWtAVt 7 df+  Pw   w u 7( VS!a I` D$  y+ - * / &    % [ ^   ! +   (!]w ] # Z}+J -T *t / j &^ , " %6 ^ ! >   w vt4w l r*w X:B`%w N^B w DA B@w 8BPw .BpBw " rw A B`+wX &PEEE & W%^   Uf7  (Wp @e@` w r E7 x7r    ? a.out//      "0  0 @ P `  @ @ @ @ @ @ @    @    @ tvpprtvrx ~#w8% r w 7hw 7Xw 7V7Lw 7Pw unix_v4/lib/libc.a0000644000175000017500000004371601027164256012375 0ustar aapaapmgetpw.oEB ,w  @e w N &  %5 5 B@e %  2ҐB %: %: 0 9Wp `eD5! w(/etc/passwd)X_getpw"L2rsave L3&L4_fopen L5,L68L1_seek L7NL9R_getc L10tL11pL12~L13L14L15L16L17L18L19L8rretrn mon.ooEBw   & & & e  & % T %5 w }@p@p wA Wp@5`A Wp@5 '@@ ED-  & f % f@ &f ew mon.out9XxX _monitor"L2L3rsave L4H_profil L5_creat _write _close L1_nargs L6VL7_ldiv L8rretrn perror.oTVLw L- 5NZ Nf^ %wUnknown error%s%s: %s I  (_errno _sys_ner _sys_err _perror"rsave L2LL3 L46L5Z_printf L6HL7^L1Hrretrn rin.o.oEC(Pxw   -  0  9Wp `eDBp@w9Y_rin"rsave L2 _getchar L3_exit L4(L5DL1Lrretrn alloc.oECDw D OeE%"m"e5a2  e%!5N %    % bJe wNw J@e!a b`! c33wOut of space 9 999_freelis#_slop# _alloc"rsave L2L1L3L5fL6dL7DL10000rL10001t_sbrk L8L9 _write _exit _free"L4rretrn L11L12L13L14L15L16L10fltpr.oYMH  ӕ- ӕ0B~ӕ.  ӕ0~ B~  ӕ-ӕ.B~ӕe ӕ- ӕ+ r e0e0S9Y99I9pfloat"pscien"Jfltused"_ndigit ecvt fcvt printf.oY Mp w wDe   % w7 r7 ׯh- ` ^"7 V .lB Jdoxf ecsl ӕ- C r f e0 1 /0 ҋ D~' f v Le0 9e  &  md b ~    ~ w7 6 , (0  Wp `e0[YHi)9HHH_printf"_ndigit pfloat pscien _putchar rsave rretrn formplooprjustgnumlwidthndfndswtabldecimaloctalhexfloatscien characstringlogicalprbuf*prstr.ffltpr.oED< eӕ?pfloat"pscien"putchr.oED,p0fr ,hP ^ X @f < |7,* p| - |_putchar"_flush"._fout$vfl:getchr.oEDB0f   7 7 7 )())())))_getchar"_errno _fin badret4atan.ooEDp0fw5w 7 w99)_atan"atan retrn savr5 atan2.oEEx0fw5u w 7 w99)_atan2"atan2 retrn savr5 atof.oEE"Hfww 7 w  I9atof _atof"a_tof"retrn savr5 ptr"chdir.oEEp$fww w )_chdir"retrn cerror chmod.oEE $fww w w)_chmod"retrn cerror chown.oEE $fww w w)_chown"retrn cerror close.oEE`$f@w w)_close"retrn cerror cos.ooEFp0fw5w 7 w99)_cos"cos retrn savr5 crand.oEF<f@ wf wI)9)_srand"_rand"retrn rand srand creat.oEF|$fwwww)_creat"retrn cerror crypt.oEFp0fw@ 7 w99)_crypt"crypt retrn savr5 dup.ooEFh0f@)ww9)dup)_dup"retrn cerror ecvt.oG6`w " w  7 }w6 M)9YYiYI_ecvt"_fcvt" ecvt fcvt _ndigit savr5 retrn setup&execl.oEFlfw@e7 w _execl"cerror execv.oEGdfww w _execv"cerror exp.ooEGp0fw5w 7 w99)_exp"exp retrn savr5 floor.oEG.<6@@W@@@6 _floor"_ceil" floor"ceil"$one@fork.oEG\$fw w)_fork"retrn cerror fstat.oEGx$f@ww w)_fstat"retrn cerror gamma.oE_p0fw5w 7 w99)_gamma"gamma retrn savr5 getc.oEH `fwz7A 7 fA & UfA  @e7.1@  1 @ w~YIindir_getc"<_getw"_fopen"cerror _errno badret~getc1Lgetcsw.oEH< f&w_getcsw"retrn getgid.oEHP$f/Ew)getgid/_getgid"retrn getuid.oEHDfEw_getuid"retrn gtty.ooEHx$f@ww w )_gtty"retrn cerror kill.ooEH<fw w%)_kill"retrn cerror kill%indirlink.ooEI $fww w w )_link"retrn cerror log.ooEIp0fw5w 7 w99)_log"log retrn savr5 makdir.oEIp$fww w)_makdir"retrn cerror mdate.oEI"$fwA@A"w w)_mdate"retrn cerror mknod.oEI&0fwww&w w)_mknod"retrn cerror mknodmount.oEI&$f&w w)_mount"retrn cerror nice.oEI`$f"w w)_nice"retrn cerror nlist.oEJp$f w )_nlist#savr5 nlist open.oEJ|$fwwww)_open"retrn cerror pipe.oEJt0f*wBJ w)_pipe"retrn cerror pipe*pow.oEJx0fw5u w 7 w9)_pow"savr5 retrn pow prof.oEJ$ fwwww $w,_profil"retrn putc.oEK xfwAF  Df@A&  6f@A @+ 9 & fA @e&72w.(@wZ7 VIY_putc":_putw"_fflush"j_fcreat"cerror _errno badretgoodretputc1Pflxqsort.oEK\w w wAupNNmf . ww @@5 _ fA rBpu@@m55D@5!f& r%5 @&   ` 3f <%5 `@&   5!`@&& %`@&  `5!$@@AA Nf` . u Nf . @`5_8@& %@_~wlw hbDCԒ wHw D>DCB5ҒS w9 i9  i9i9i_qscmp _qses _qsort"rsave _qs1".L1*rretrn L38L2L4~L6L7_qsexc"L8L9L10 L11L12L13 _qstexc"L14nL15RL16jL5L20L18L19L17L24L22L23L21read.oEK"$f@ww"ww)_read"retrn cerror sbrk.oEKHHfD@wm:Hw.wm(wfwHww w9)9)_sbrk"_end retrn cerror ndL_brk"(seek.oEL$$f@ww$w w)_seek"retrn cerror setgid.oELl0f@.w w9)setgid._setgid"retrn cerror setuid.oEM`$f@w w)_setuid"retrn cerror signal.oEMbNTfAww5Wpe\W b W zwtwwf& 77777777777709Irtisignal0_signal"retrn cerror vectbevectsin.o.oENp0fw5w 7 w99)_sin"sin retrn savr5 sleep.oENP$f@#w_sleep"retrn sleep#sqrt.ooENp0fw5w 7 w99)_sqrt"sqrt retrn savr5 stat.ooEO $fww w w)_stat"retrn cerror stime.oEOh$f@Aw w)_stime"retrn cerror stty.oEOx$f@ww w)_stty"retrn cerror sync.oEPH $f$w_sync"retrn sync$time.oEQTf BRw_time"retrn times.oEQ`$fw w+_times"retrn times+umount.oEQt $f 7w)_umount#retrn _errno unlink.oERp$fww w )_unlink"retrn cerror wait.ooER 0f & w }w9)_wait"_nargs retrn cerror write.oER"$f@ww"ww)_write"retrn cerror abort.oER( f_abort"errlst.oES0 @Error 0Not super-userNo such file or directoryNo such processError 4I/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedError 14Block 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 system2BJTn 2BRbt_sys_ner# _sys_err# L1L2L3L42L5BL6JL7TL8nL9L10L11L12L13L14L15L16L17L18L19 L202L21BL22RL23bL24tL25L26L27L28L29L30L31exit.ooES0 f@_exit"hmul.ooES0 6p_hmul"hsw.oo\dD  r dA! hsw"locv.ooESj $f&jCB  ԕ- j e0fv   vA W  ~_locv"bufjdividNnargs.oETJ<Af w,.w"(e w"ew"@l  %e_nargs"jsrsd>tstiBcmpiDaddiFreset.oET<w _setexit"_reset"sspsr5spc retrn.oETP$7 Fretrn"cerror"_errno$rsave.oETt $ @&HFrsave"mrsave"rretrn"ltod.ooNk< f =_ltod"unix_v4/lib/fr0.o0000644000175000017500000000052401026347440012154 0ustar aapaapxT0W \A  hw ҕ ZZ r fw e0Runtime error 8YIImain temp"hrerr"fptrap erret argp mesgZunix_v4/lib/mcrt0.o0000644000175000017500000000111401026347440012506 0ustar aapaap & 6eWtEef f  &e7 e % f& @ANeHQ}  @&HFNo space for monitor buffer X)X9cbufs_monitor _sbrk _main _exit"h_etext savr5 starteprolcountbasmrsave"zrsave"rretrn"unix_v4/lib/liby.a0000644000175000017500000000672601026347440012420 0ustar aapaapmmain.o.,$Tw Nf  w(9Yi_main"rsave _yyinit _yyparse L1 _yyaccpt rretrn parser.oHvP x w 87 pl7 j5 @e5 L J@ ee@&e  e5@e5E5@t_^    V7  :7@-ew   xN @  5@  77N @   e5}/ e@7_( _t@^  @Ae .@  e5@t%W/e @f %3@E7\_( RP B:_b   xT"   xjwstate %d, value %d, char %d character %d read reduce %d syntax errorerror recovery pops state %d, uncovers %d error recovery discards char %d H) )) YY )) (8) _yyval _yylval _yypv _yydebug#x_yyv ,_yystate#z_yychar#|_yynerrs#~_yyparse"rsave L2(L3FL4_printf L5b_yypact _yyact L6vL8^L9L10_yylex L11L10000L10001L12L13L14L15L16L17_yyr2 _yyactr _yyr1 _yypgo _yygo L18\L19rL20jL21L1tL22L24HL25L26_yyerror L27L28L29L30L31L32L34L33L35L36L37L38"L396L40L23\L41\L7tL42trretrn zacc.oo9,T 0w w9_yyaccpt"rsave L1rretrn zerr.oo=08w N   -   %      xhT ^ rwd %s, line %d, on input: %s \t \n \0 %c )H HHHHHHH_yyline _yyerror"rsave L2_printf L3(L4L5_yychar L6NL7_yysterm L8L10L11TL12L1L13^L14L15hL16L17rL18L9sswitch rretrn zinit.oM,T 0w w9_yyinit"rsave L1rretrn unix_v4/lib/filib.a0000644000175000017500000003241201026347440012535 0ustar aapaapmio.ot x  7  e  7  err iill7     w 7 h  w zT 7 x 7 T 7 7 7 b  V T w X H  (w 0j7 | w 6% % w w ia\ftegdziblfhHxRp-l0t1t2t3t4t5t6t7t8t9t,/( )"> w r  w f7    \ w w \w `   7 F w V w (kw  . (  h w \  P7 } w l8 6 7  & " w  $0   + && w t7 w T7lw  .6w B7^ e @e w ` 7 &~   wLvww mww @ @ . @#w ef r @Pe007w $ q 5w fw w.  . Ћ     . HeB>@ . >W w :  4.$w ee*ed w ~emw -w 0` w  0w @ w ~.w  0w ~@w ~w -w  +w r e0w @e0w x & 7 <& w ze   m\cm ` 7 -w  0w @w ~ .w    0w ~@w ~7 p ׭rr׭i ׭_?X R ׭I?B?<&w F w Z |w ojw &  "w 4 TL w |  w hww  w @fҋ tw y& w  w   ѕ  JJ w  t  T 1 ,7 ? 7  7 w 8׭r׭׭ ??׭?   & w %    + - w %  00 @ e0 .    d  + - ew J 4 `  &    ,% w n&  +  -w 0 + - w 0 q p `e0  ,w " w "w |w D~w \ w x!7 vw | OLw D~\ w 1 @. 1 .  \\fortxx             Xrerr endio"rio4"Brio8"<iio2"Niio4"Hlio2"Tlio1"Zcio8"cio16" ecvt fcvt _ndigit slcnt ilval itype iowf"viowp"liorf"formpX setiordflg binflg itmfnd^ scale\ itmflg pbuf ppar llpcnt fmtchrllp crackngflg` repZ itemswitchmswitchafmt\ffmttefmtgfmtdfmtzifmtblfmtfhfmtHxfmtRscalminuslnumbtslashlpar rparquote>gnumelist_nocr$d eorec1xeorec`getitm"crack1width err1ndig cvswgflg iocviicvlocvLlicvfocvficvdocvdicvgocvgicveocveicvaocvaicvvxocvxicvhocvhicvqocvqicvgetbuf"vchkunit"creatf"openf"unit utable$ btable$. filnam buffer bufp fputc&flush1XfflushJfgetcnlflgb fputcc4nspace spacesgetarg~nflg ilen twidth fgetcnR storin gcflg gatof> atoi iowu"h ioru" rewi" enfl" ftable$V _end r1.od\\ \&\e&&&&\&&\H`" \ p`B `$"% \%\  a  \   \ \w P)gas1" gas2"gas4"gas8"stop"lval" rval4"4rval8"$do1"Zdo12"Bdo14"Zdo2"Tdo22">do24"Tgoto"~cgoto"cagoto"agoto"rerr gotoer2.o d N!#! B 6 *      \ \%H#pU\  \ %%%%%%ilt4"ile4" ieq4"ine4"$ige4"0igt4"<lan2"hlor2"dlnt2"pieq2"vile2"igt2"ige2"leq2"vine2"ilt2"|lne2"leq1"lne1"comparRoneHzeroNr3.o 0H \ \ V    \lif2"lif1"rif4"iif2""iif4"rif8" r4.o4e\\Vpf\ r\ \ \ \&\&\iad2"isb2"imp2"idv2"i2i4" i1i4" i4i2"i4i1"ing2"&rval2"*rval1".l2l1"2r5.oL8` @  @ @ @f\ VH 6  \iad4"isb4"imp4"idv4"ing4".rerr load"storer6.oa|     V&\ \ &\  &\  &\rad4"rad8"rsb4"rsb8" rmp4"rmp8"rdv4"*rdv8"&rng4":rng8"6r4r8"Dr8r4"@i4r4"Zi2r4"Vr4i4"rr8i2"di2r8"Lr4i2"ni4r8"Pr8i4"hrerr store2r7.owe&\e&\e&\e$&&\ e&\w 2&N`\w &ew ` f\bf~\  ePp~ f Pp~N w fMw e&N`\lvalp"rval1p"rval2p"rval4p"rval8p"&alval"2alvalp"arval"Larvalp">rerr getsubhr8.ol(  \  pApf\ipi2"r9.oR{X< 66w f\ w f\%W@  @@ W@ @ Mw Ione@ipi4"rpi4"rpi8"rerr ra.oR0H V fw w &\Aw )9Irpr4"rpr8"log exp rerr error*rb.o<0`&&\  E`f\\call"callp"retrn"stsp"8rc.o: \e \  C  C   rCCf&\  T@E@DD@CDD@ED@BD \VEH    &&\ Vf&\    Ef\c8c16"c16c8"i4c8"r4c8"r8c8"i4c16"r4c16"r8c16"cad8",csb8"<cmp8"Pcdv8"ncng8"cad16"(csb16"8cmp16"Lcdv16"jcng16"rval16"rval16p"gas16"ceq8"cne8"ceq16" cne16"abcdefgargsargdrd.o.0Pp~R \ \d b\898slist1"slist2"slist3"$temp re.oFl 6 . &      \& \ Hrle8"rlt8"req8"rne8"rge8" rgt8"(compar:one0zero6rf.oFl 6 . &      \& \Hrlt4"rle4"req4"rne4"rge4" rgt4"(compar:one0zero6rg.o T`\\\ \ \`\`\`\ `\ `\gmv1"gmv2"gmv4"gmv8"gmv16"stst"gmv1p"&gmv2p".gmv4p"6gmv8p"Bgmv16p"Nrh.or     #e\w  #e&\ #e\   e$&&\ #؆e&\   ʆePf&\gal1"gal2"gal4"gal8"gal16"$gar1"@gar2"Pgar4"`gar8"xgar16"rerr rx.o ecore$unix_v4/mnt/0000755000175000017500000000000001026347440011334 5ustar aapaapunix_v4/bin/0000755000175000017500000000000001027163231011301 5ustar aapaapunix_v4/bin/if0000755000175000017500000000302001026347440011625 0ustar aapaap|  & 6 % w D@ @m wwW- Z  R  | %& & %ww -~~ r n mlww  05 &   @] 0@ww  45 &   AA @@ @wTw B R&       ww 5 _&   $5 &  _@_&   &  _&   &  _&   ~ _&  % J @e  RD @ &    < 5 (f   &  $f   &      % ww Nf v 5 N 4 w^w LwNw < @aAa   @mȋww j 5  f   @ap  f   _0 @a0 @8@e&f J% @` @m @`0 @e&fe J%@e&f J%w8f@w  w fwwwfw wfwpwlwwf@wTwPw wf D& w }w~f@wwwXw\f@Af w,.w"(e w"ew"@l  %e7F @&HFno command -o-a!()-r-w-c{}=!=if error }}/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx unix_v4/bin/sh0000755000175000017500000001270401026347440011652 0ustar aapaap0 & 6 % HangupQuitIllegal instructionTrace/BPT trapIOT trapEMT trapFloating exceptionKilledBus errorMemory faultBad system callw  & Z% &B , ! 7!50 !4   7!W-7 ! &     l F 6 -! &  & e7V!@e7L! J!D! l t7D! w w @e7$!@e7!@e7 !@e7!7 !7! Jע @eJ7   @e& &  T 6  ww r e  &    7x Ah d UHT P J F ,b y 7: b & 7  &   ww @ 7`ww ĝ7_- % e 6 _-xx n % e Z 6 Z? > 8 4ċ37 & b\  V  "U$ 409e- m7Eww @e&& %% @Ewrw `u- @& eNf n  w*w 5 D5!C5 : .2 & f & 33 &U!N&e & 3 7 y e Nf & wr w ` 5 uu-C@2 7 4 ( 5Nf  A1Nfe & A1@0 @ 7N yeNf  w w 5 "@%)U"5 5 5 (5 &5 ,5 *D5!_5$` *  e5 *X * *5Pe5!>U" *)e5!B!& $W-$< (5( &5& *@, , @a0.!7, ye  , Nf n 3* ,@, , @a0 .N,e 5 *u-*,@* `A* Aap. *s"s(s&w w e @e &  w w &!f _@w w @Ew w x _2 @_ @ *!  _z@ _n@  _l0! 6 F! 6 _2 X!  _-&_^! l _2  e _2 n!  _ _ &Ne t! n ! l _2 !  _(   H _2 !  _2 @55 5 05W-! 6 _2 )5 N &@ &5 N ! l _2 5Nf H _2 @  & @&  5 @ l ! 6 @ A5@&  5 & f %@& < 5 @ l ! 6  &N ZN &5 &N ZN &@ &5 &@ ZN &@ &5 @  5  & !  5    &   & W/@@E4P  ` &7Rf  @@!Ne@& n ! l \f  Ne @& n ! @ Ne e n Ne  n  @!@ Ne@& n @ l " 6 @5@e @@EU4P@ef& %@@EU4PN@e&& %,@E5@t] @t]     x* &< j wbw PN l " l j_h & & % w,w  @  w w @e& %ww  f& %  f& %e0 ww  @ @- ww n@ = @ ȋ wPw > G" " @e !5@E 5! " l   l 5" l (" 6 D-N  ww  *" "_W/0" "_@ "wvw d"@e @e @5@5@|5CW/ @ ȋ ! @aˋ (& & %@e&& %ww R@e   5I` wfw 4"wZ w\f@wD wFfww8"w$w(f@)wwfww>"wfw wfEwfwwD"wwf*wBJ wf@w^wZJ"w|wf@wBw>P"wZ w\fAwnwj5bWpeP"W V" W " HwB"wwf& fww"w wf BRwfw"wf X& w }wf@ww"wlwpf@ r dA! Af w,.w"(e w"ew"@l  %e7bF @&HF6rw*6r@$8HR\px/usr/adm/sh_acct% # /usr/adm/su_acct: cannot opensyntax errorj r ~   ) 02dd2ddd0dddd '" ;&<>()|^ "'Too many argsToo many characters;& &();()^|HNTT<>(()<>&FtV[?*chdirchdir: bad directorychdir: arg countshiftshift: no args login/bin/loginlogin: cannot execute wait:try again : cannot open: cannot create/dev/null/etc/globglob: cannot execute /usr/bin//bin/sh: not found : -- Core dumped**gok()  777 7777777770+unix_v4/bin/login0000755000175000017500000000467001026347440012353 0ustar aapaap@h & 6 % w      @! 7(!%x   % B!!h!W-@!p!ˋԔ5   % 5h%  h !p!Th!p!ԕ @ezh!  _@ez Dע:Zx!& @ f lE^ x!& P    %@ep 25h%  h JAex Thwl x!& P &  %@ep _ר:_ D5 fע: AfWp ”`euf 5 dע: AdWp ”`eud  D D   (  %_nr! n6 ^ 5j%5nW-na'n @net&fj %h!fj %Nj @ ^ 5j& fj %h!fj %Nj  N ^ 5j@en&fj |% @en& %Nj  X ^ 5j `  %Nj Nf"  Nd Nf ˋp  x  $% z  %   %_nww   ^ 7%DC 5%  SC @e!ר:5 V 7 N7 L7 J@ww xD:ԋ   % 8wTf !!  7  7 7 fw w wfww w wf@w wfwr@ $7 fwfw@e7 wpf@wz wX wZfwdw` w8w<f@wHwD wwf@w,w( w wf@.w wf@w wfAw,w(5 Wpe W W $! w$!wwvf& f@w*!wH wJf BRw4f@ww.!wwf@7F @&HF x #"4!@# #$$ttyЋ7~@ tf&f%ЕЕ %P %Cx 4&$# ^! rB`E \:! d!\>! h! !% %T&T'E R#S$ 4&4&'T& 0 T'& s>e0W!9eW!ZeT!<&ᇅ4&/dev/ttyxSorry. Name: Password: No directory /tmp/utmp/usr/adm/wtmp/etc/motdmailboxYou have mail. /bin/sh-No shell. Login incorrect. /etc/passwdBad /etc/passwd  7Z7T7N7H7B7<76707*7$770/dev @ @  unix_v4/bin/kill0000755000175000017500000000030001026347440012160 0ustar aapaap 1 W- 7 0@ 0 p `   % ܆   r f  e07(: not found non-numeric arg unix_v4/bin/tp0000755000175000017500000001057401026347440011666 0ustar aapaapl/@@@y@ -@@@ R  T  BA L>@6@ Bh@X@T@D@-@7$@$@Wtw@@Wpew@w *Tape open error w-? w?@ȋw Bad usage wn0H1H2H3H4H5H6H7HcRd^fXifmlr~turvwxw|w1?,?w h???w P7 ?w Dw <>>w (Lw .@@@->w& lw  Jw >> J $  R7w @@@ *>w mode uid gid tapa size date time name w  w @@ w   w tEND  B ҋfABR&e E7 7w Out of core w@ @  E7=@ @z== ~fe N 7 ^=  4@/@=7j=b=5 0f & d~S=   e fe N e@Ee~ <w "Directory checksum <w  < 0@<0  6<w NTape read error ;0  2w;0  ;w Tape write error wz7;7 ;|!&;  p  j ;;@;V ~;w Tape seek error w w4 );";+  f@ X ;w X t x jw  y V  L w  -:.: -: ::e:@R |@%&@  :@@W.Ћ &/Е/P 0@ zw -- Cannot open file w@A:E @&  New :w ,Directory overflow ww aw @w @@@Ӌ 9 w, (:'w, :#w Lr9U99Z9797 9999 9 & w &@-L9@B9ˋ ʋ/f  ew &9߇ -9  9 $w , not found 8e8-8 w d >f& f&@@ @W#00 @7~ r f e0 T )5% T8 BCeB v8 8 t 0~ 8 ew 8Ї 0&  5N,Nvew 7 Ew7B 7w @@  @- 7 0!   x7\ 7 N  `0 w@f@ Xw ` -- Phase error 1 0  @ 5  ew 6퇇BCeB vB 0Ն0 ~ 6E&t6tEw Tape overflow w* \  H6e j6b6 d6 V6 0 "6"6 66 ~6w Rw H entries 5w :w 0 used 5 5w w  free 5w w last 5_@&t5 t5 5 @w  @w @w @w fe  w /  w r/ vw ^w R: Vw > B@ w $ s5x-5w-5r-   w4 Gw @xC@ @wt< x4  (0( % V4F  7 4w.w*@ fA  f @ w -- create error ESTEDTw pN  whw V @eL@4 & 4  , J, J  , Uow 5/ 5   ,  , & 4   ww rDC @mem e rfwDw 2p@&f %3.A r<R r< r<R r< rWtC` re rw2F !  272 %n2  ,   7 P2.Awdw RlAA Wpe0ClԔԔԔ @eWpeFCԔԔԔ&  ed&  ed&  ed&  e@ &  lww A r nmww D W- C r  r e0Tԕ A r e0TwJ6rw16r@f@  P`Hm` @&HFw w w Lx 0@0@@@/dev/tapx/dev/mt0/usr/mdec/tboot/usr/mdec/mbootPF Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/dsw0000755000175000017500000000040601026347440012031 0ustar aapaap% ZiFE @b[7]@R P : ׬/ӕ/Z95`ҋ  ׭  ׭  ׭ ׭x׭y .? unix_v4/bin/restor0000755000175000017500000001160401026347440012554 0ustar aapaap  & 6 % t/dev/mt0w H W-@   eu3@  @5  i  xpppppppp|p|pp| <   777777~t&  5@t  7\X@  &  e@_L5   5 t@-(  u-N Nf %5  @ 5  N z W- f @7|t 7~ z ` 2 N v F 65 w-*Lfe F  25 *w- !    ne @eNe  e fe  v  X W- @ e V5 Lt@-_F Z5 @  @ A , 55 b    N <7 @   ?@ &   ,N 2 %,rl R    2 _* r  x\jHjjjw w D5 5 1 a )5@e a& F   @a  @a  a ww ~D5 _  a0  W-    a1 ES W-"   1   a1 a&   '  0    6 1  Z a1 a&  Uww  *   &  whw V  @  N  w6w $f0  %f %% N" ww f  %f 2 %% N2 ww Nf   B d 3B @wdw RH D-b _bR B R 7"%   7      %f %%` ww  @  0 9Wp `eDww ffE H%  wrw ` t 7^ Z ` l w@w .f  :,~ h!x_x ! !y B!  6%    h ww  f& H%N&  5 f& Z%e0A  =@w`w N T P   d  |    & F   d   p| ww - d  !d   p| 7 f   p|ww w|Der  l % v wf7 X7 NׯN- F Dn7 < .lT B Jt d o f e c s l ӕ- ; r f e0 ) ' ҋ D~ fWtE Ee0 z| p&  m^ \ v ~  v   v ~ w7 0 & "0  Wp `e0[eӕ?f@ ww v@w v-w "v@7 wfww v7 wf h~h  7n j f7t 7 Vfwww2 w4fwpwlw wf@w wfw@w<wwfw(w$wwf@w wwwfwmw~wmwxfww\w wXf@www2 w4f@wwwwf@7F @&HFfA7B  fA & 9 &fA @e&7w @ESTEDTw ZN * .wRw @ @eL@4 & j  N, J, J  , Uow  5/  5V   ,  , & j  N wnw \DC @mem e rfw.w p@&f H% ~  r<R r< r<R r< rWtC` re rwF !  7 %n  ,   7 j~ wNw <AA Wpe8CԔԔԔ @eWpeNCԔԔԔ&  ed&  ed&  ed&  e@ &  ww A r nmw~w lD W- C r  r e0Tԕ A r e0Tw46rw86r@f@  P`Hm` :bad characteer in key %l %l-%l %l- no filesystem name can not open %s last chance before scribbling on %s isize too small the epoch read error %l write error %l checksum error change tapes read error can not open %s %s bad freeblock out of freelist  w w&w w PF Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/cat0000755000175000017500000000023001026347440011776 0ustar aapaap W! $-7 j77XT  & 4 unix_v4/bin/who0000755000175000017500000000354201026347440012035 0ustar aapaap8 & 6 % w N W-@5 f  5  ,  7"  f %5     ]W-R5 W-@@mȋ@@mȕ @@m h 5 W- @  h @ hNe 5W- @@m h  hewf@ z!r!wl!w $"@w "-X!w *"@7 D!wfw8!w "7 .!wf@w wf@)wpwtfw,w( wRwVf@ww & w0w4f@ww, wwf@7"F @&HFfA72   fA & 9 &fA @e&7rwnh@T ESTEDTw ZN $ (wRw @ @eL@4. & d  H, J, J  , Uow  5/  5   ,  , & d  H wnw \DC @mem e rfw.w p@&f B% $ r<R r< r<R r< rWtC` re rwB F !  " 7"  %nh  ,Z  Z J 7 $wNw <"| AA Wpe C"ԔԔԔ @eWpe CԔԔԔ&  ed&  ed&  ed&  e@ &  "ww A r nmw~w lD W- C r  r e0Tԕ A r e0Tw46rw6r@f@  P`Hm` /tmp/utmpcannot open wtmp ttyw w&w bw XPFDay Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/ln0000755000175000017500000000074001026347440011646 0ustar aapaapP& & 6 % w :W-   2% W-@/@, @0R @&  E%@   2% @@&  2  2%  wzf@fwDw@> wf whfw*w&D wF wHf@w wJ w"w&@&HF7FUsage: ln target [ newname ] No directory link Can't link unix_v4/bin/cp0000755000175000017500000000226001026347440011636 0ustar aapaap & 6 % w 5 W-@-@t eW-   %  @& t 5   % @ef  uN@&  5p@e@& T @E%@Q@5@5@e5@ A AH@@/u@ = @ /uN@e&  5 4  %  L  % @e&f 2%5/@ d  % N@e&f %@-  p  %  @@ef t% @e& % wNw <u@ @@mȕ A r 5 N ff t% @@mC r e0Ȑ @wfww~ wwf@f@wd w wf@wJwF wwfw2w. wd wffww wDwHf@ww w"w&@&HF7FUsage: cp oldfile newfile Cannot open old file. Cannot creat new file. Cannot creat new file. Read error Write error. unix_v4/bin/chmod0000755000175000017500000000301201026347440012322 0ustar aapaapv & 6 % w >W-v  >@  ʋ07  >te@P 5! @m&    @m N >ww -F> 5N  Nf %wdw RwDe   % w67 7 ׯ-  "7  .nB Jdoxf"ecsl ӕ- C r f e0 1 /* ҋ D~' f v Le0 9e z p&  m  ~    ~ w7   0  zWp `e0[eӕ?f^ ,TP J D @f (  7   -fwww wError 0Not super-userNo such file or directoryNo such processError 4I/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedError 14Block 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 systemf@7F @&HFarg count bad mode Unknown error%s%s: %s  4<Lfv~ 6HTfv(unix_v4/bin/dc0000755000175000017500000001460001026347440011623 0ustar aapaap\% R\  Input file. 70 07 , .w  w    wZ wX wP  tw  `w w :   yw-ZxR VFB F6w0L&,7 4 X7 w| 7  *       /etc/msh! W!_ @ .  C  rd 8 w _ X W!sw_  , pw w F _  f  "  ,  wL : _    w0  v   C   w F tw r l  f X H J   > vw _B  Z_C N   wn \_f   B_@@ _  _7    ^  Fw _C _B ,  V Pw _BD C 0 _0  _5WpdD `    LBe  r v f C f  C f   d   B    V P  D 8 n * w F V w& 0 @ 0 ]   [  wP wH 6_f  q, e-   7Nesting depth. eX-T? L7  | ! j7 Z ^ V  w 2 l      wP :   w4  w   J N   xw  w rJv^w f X ~׭06׭9%0 4  w: N  `N  *7׭~A ׭vFn7d` XR7 N  @ 4f 7" 7 r vfwW!_ w W!   A LfW! xW!  & 7R wLf&&  c U  7wVu > B a  e ` f N V       p- (     Y   0  S N )~ B   \ n r 7J    @ D  r e0 xe0 l   d  r &  P   C " B v $  1  *_@^    -1fv m &&  Z0 ( ^ b     v   z e0 4  P6 0   -     . f & Re0 9e   _@ zb  l d7 \w6UW!P Out of pushdown. W! A 0? v!%*+r-~ ./Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9D<v=>?ZAZBZCZDZEZFPIrK2LboPQSVvXZD[^h_cd0fPirk2lbopqsvvxz&&f  f t l7 f !  @amJ7 F dd6ed(     q   c  qf& 7   eddd7   J * . * cq *  qf& 7 :      Hv  Jw      v  w l  v7    . m 6  pc ` rd@  `  c  F  t-  *-   f& "vwd7   w  d p t w w 7   w  6 B F w w w   l_7p   \ 7 b N  W!  J Wqd ` < Dqd `D D s  pd `pd `B @ v  r     &  p c rd    x | & r h  edL H  @ l  . $ q,w   <  0  :f   7 Em 7  dd    8 <q  |  q p ^ T FF & Pf   <f  *f  7    3 v    \v  B " 8v z t ! Pw  X J v  @  2 $ @@@@ ,7 " 7   q,@W W f&@l1 11 1   r bqq,Æ @f&q,@ @ J q,  f1N1N1N1f&q,@ @  2 q, q,q f&CC  n H 8I 9 Blqqq&@1 7 &  P    e &e  p@11      r  Out of space. p`Z pr@@ @l12& $  1 p f&7   `C? <<\L\\\e ),  B,4l\4  02 A  p Z&Out of headers. 8&N ~  @ @W W W,W,-@@& ,\e  &f7e0 ~0   zwv1 1  p\e1A  w\ J_fn fj    d h &  6 @ De B  e & 6 e?E?w eE C`    .)w! W- @ 5 ` E`'e 7a .)w! G  +W- ' $7.  $ 5 7 ~ "j 7 #V W-# W-'$` 5a u` e wF D 7a@  | m  .)  7  w 6@ eT w (F w R w X w L  w 4Z  7  7 @  w @@w @  7 v 7 t 7 r ? Z ^T w Bw w @w F T w Rw X.)w $ W,  @7 w Zn " e @w dL w ~L b h b 7 V w Xs  h b  h      7 f ^w 0 w F8-  e w 0, - "  -  7, w :- w @     x W!^4-  m  w ZZ m<  ^w > w(  W p xPU 7w m7mv7fw 0 ^ыw W/ы$ P , B .w xw 1w , - w  w rG -r  w @7,X7, Rw  W!^!w 6 ww w 0 w 8  w X  w Rw @w 0 w 8 7ww   \w Xw Fw w 0 G w 8w  EE . w 6- .)mVf s uQm !E m  Pn 5$ @w L  ABU efe!"7w w w7 w  wLAB wdew@e 7w @qAB b7E@`e@efBJ b &w eB$wE`wU ( w $ @@d@d@d rD e^! $ P$P$P$P$ !.)^!e 7 e7.) $ P 7 f& @ &} w    | fAw  w $ w 0    e@*  7p w Pw wPF    _ Nw m*  e 2  wW-w 7 n7 7 w  "K a D7#, > . E74 7~e7%* e``BdBd7 77 w . w "8 w@u5lxe&rsnBdB v ~7 h raA@7p   w 7F e~$      w w  `E  7n N^7!&% w ,G w7 77w ' 7 mvmrmnfM$ u$u$u$ a.outl.outun: Can't move output fileNo relocation bits: Too many routines loaded at: Multiply defined: Too many symbols in: Relocation error in: Premature EOF on: ld: can't create l.out File not found: Format error: Symbol not found: Multiple entry point:/lib/liba.a ;_etext_edata_end^.) munix_v4/bin/cmp0000755000175000017500000000064201026347440012015 0ustar aapaap%w Usage: cmp arg1 arg2   w Can't open arg1. 7H w Can't open arg2. 7& w w (  w T:  w F  w : ew H w &EOF on arg1. w EOF on arg2. w EAW,@E @we1qe@e& w#we07  unix_v4/bin/cdb0000755000175000017500000001070601026347440011770 0ustar aapaap  & 6 % w  W- @5W- @5 f 7 N D _r f 7h N" D _r!H %-  $ - N0 D P m 7   -  e!  e7$! %%h$%f$ @ D 7 ! ?%  ȋ! w w  5 j/ N5ׯZ  m`#D @7Pׯ6  0 ##   m #wR w @ h# $D D _~#H D _l# $E J GJ# $5N $E5N J ,# $  ` z 5 W- @!L D    P 7 y wb w P ׯ , " w" "w"@w w  N 5  @ww W- W-}Nl D Np D ww 7 "5 +7 t5 ׯNaׯFzׯ>_H5 @ @a_ ׯaׯz ׯ0ׯ9ׯ_W-@ @a W-@ @a0@e <   ׯ0-ׯ9) 7 ׯ0 ׯx0ׯp9upw~\ Xe7`l_DT @mR J @J 5 +  x_ _  j 7 z v Nm 7  wV ׯ] _t 7  y ww   m 5 m 5 < _n 5u >]Nf t 55 W- @! D  D _Ne  D @e5 e@  D  D Ne 5N 5ww Ne 5Ne 5% @E?% 5  2 :Ne W- @ ` N 5W- @ W-%@eW-e Ne  @m@ww  B ^ N t  | ww DCe!% ww  -J @E%_  w`w N5 w- fe %@e& %% @-/bm\XeE5 fe %@e&| %% t@ww bb TN %ww  B   & %%  w^w L !W-!@ 5 u-@ HW- !@ ww wXDeN  H % w7 47 *ׯ*- " "'7  .' B J d* o$ xZ fd e c s l ӕ- C r f e0 1 / ҋ D~'   f v Le0 9eN zD p&  m& $ ~    ~ w7   0  Wp `e0[eӕ?f@ ww n'@w b'-w t'@7 |wfwpw Z'7 fwf V%PH%  78 4 07B 7 f@w w wfww wfwjf@ww wDwHf@ww w" w$w7F @&HFfA7n   fA & 9 &fA @e&7:w60@ /corea.out%s not found %s not found Bad format: %s ? %o %o %c"$&'/=J(\%o%c +-[savr5%c(%o,%o) w w&w w crt0.ocdb.oprintf.oD ffltpr.o putchr.o getchr.o@ fstat.o open.o read.o seek.o reset.o retrn.o rsave.o. put.oN savr5$'_main"_fcore$ _fsym$ _symoff$ _lp$ _errflg$ _symlen$ _symct$ _symbol$ _symflg$!_symval$!_ssymbol$!_ssymflg$ !_ssymval$!_line$!_regbuf$!_uuusp$%_usize$%_uregs$%_textsiz$%_pc# _r5# _dot$%_tdot$%_dotinc# _lastcom# rsave"0 _open" _printf"D _read" _fstat" _setexit" _getchar"@ _command"vrretrn"> _expr"_getcnt"_scomman"_cget"$_printc"J_putchar" _vallook"_reset" _printtr"j_get"_symlook"<_findrou"t_symset"_symget"_eqstr"t_savsym"_seek" ndigit$'pfloat" pscien" _fout$'_flush"* putc"p flush" retrn"( _errno$)_fin$%cerror" mrsave". putw# fcreat"N unix_v4/bin/tty0000755000175000017500000000022601026347440012054 0ustar aapaap*  7ttyx  x "P@ $$ttyЋ7:@ 0/devunix_v4/bin/as0000755000175000017500000001313001026347440011635 0ustar aapaapH. w < w i h R R @ pbw 0p? S ^ i t pS ^ i t y/lib/as2-g&D7 ԋ 7w &D7<7$  z7w ? A&f@N ? F&w v (7,J r e0H~Df xxxx  @% ! ?. e( -$ < < < a w t 7 f 8t ! | r& 8!=9!:7d vT!!w x̵w mݎ  , z H r n 7d N   W w xW E . E бw \. !;!  ! w 2xw *x  Bw w f ! !;!ef2& `ҐE  r@ eZ Z*2 $$$$B&e7! ev   7& R R  re  re    7\ f  dw b09 0Wq `Wt` b f  .A 7@@ ea be e7  EH 7H7 w @iw 7 7l w ? wt7LV&f fPD Z P87 2  6 " !yJlL$prp bыD//<>%7W 0W 9wv N  | v& pU7     w g< v7 f $ U ` P R< 8    \  Rҋ  > w <wn t e0r apw  <w te" w & r x444@Vbnx"xx   e !,  e !,  ef  \!, mH >E8 ~ w pU  ! z!, p N7( 7! U @!, 6 w x!('!-6!$G!*M !(   e  en r!+  !(7- v ^ : be r * @7`w :*w 2a    w e!)w ) f+7 N  w @[!a!k   Ow fK  Hb D$    | y+ - * / &    % [ ^  ! + 0 T 2!]w "] r # Y}+B -L *l /x b &V &  %0 ! ^ =   w tt3w jf rB*w XB`%w NB w DA B@w 8BPw .BpBw "f rw A B`+wd&PEEE &     U.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz/tmp/atm1a/tmp/atm2a/tmp/atm3a/tmp/atm4Z~<R ...r0r1r2r3r4r5sppcexitforkreadwriteopenclosewaitcreatlink unlink exec chdir time makdirchmodchownbreakstatseektellmountumountsetuidgetuidstimefstatmdatesttygtty nice"signal0mov 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 0P@W- 7 H7 w w S 7 w v^ 7 w 2 fDa~ Ke W 퇇 r eZ Z* unix_v4/bin/ls0000755000175000017500000001142001026347440011650 0ustar aapaap@ & 6 % .w " 7P$ a@-Ze @ȋO@, h# h# r# Z# V# b#   7zp 8# @# 0# ,# (#a  xZjp`  "  "7 "7 "7 "7 "   5 u-e@& t LU & r&& : e&!G5 :" @"7W-  V  "> r& : e !!    e e Fw w D-_V !&  !d D,  @e&E Z @e2  E:  5`E&E@ %& H  e eL   &  X  5^  b  w w Z & R h %7 J5 5 5 ! 5% ) 0W-: 0 @ @mHW- AWp Ameuu-@ @m w. w  ff %5 !et`ww w !  fww C =\  ww #CˋԔԕ/C Ԕ  #wrw `!f _N  _p7 `$ !   N ׭D.-: b$f R%& t , `Ȝb$ T p ww &e- epjed4 4   (_@ef N  55 5   _tE@E%`E @E%@E`Utttttt5` ^ttt LttN@&  7`2ww tDC E}% E}%P E}%E  , , , , wp@%55 @5up@  ww wDe   %  w~7 7 ׯ-  r$7  .p$B JddofeBcPs l ӕ- ; r f e0 ) ' ҋ D~ fWtE Ee0 z p&  m   ~      ~ w7   0  |Wp `e0[eӕ?f@ XPww 4z$@w (z$-6w :z$@7 wfww z$7 wf@w wf@)wwfwZ 7A 7 fA & UfA  @e71@!  1 @ wfww!www w wAupNNmf h ww  l@@5 _  fA rBpu@@m55D@5!f& %5 @&  ` 3f %5 `@&  5!`@&& %`@& `5!$@@AA Nf` h u Nf h @`5_r @& %@_ wfw TDCԒ wBw 0DCB5ҒS wfwm!wwmwfw!ww wf@ww!w wfww!wp wrf&&CB  ԕ- & e0fv   vA W  ~7rF @&HFfA7 !  fA & 9 &fA @e&7w@B!ESTEDTw ZN  wRw @ @eL@4^ & "  J, J, J  , Uow  5/  5   ,  , & "   wnw \DC @mem e rfw.w p@&f %x& r<R r< r<R r< rWtC` re rwF !  7 %n  ,H! H! z 7 &wNw <#j!AA Wpe!C#ԔԔԔ @eWpe!CԔԔԔ&  ed&  ed&  ed&  e@ &  #ww A r nmw~w lD W- C r  r e0Tԕ A r e0Tw46rw6r@f@  P`Hm` &&/etc/passwd %s: total %d %5d %2d %-6.6s%-6d%3d,%3d%7s %-12.12s %4d %s %.14s d@b c-r-w-s@x- r-w-sx-r-w-x-j z %s unreadable %s not found &w w&w 2w (PF Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/ed0000755000175000017500000001030401026347440011622 0ustar aapaap@t - $w w l 0 000 < 07 *7 T*7 j$ @$\$7   ע-  Z**Ғє$$$ $w@w,w P0 7 $w P$w W # p$ 7 j$#j$#f$w X$# 7!# 5 7#*d w  #,7 ($w  $ $ $$$w XD;N,\-#X##R#w X##w *racdefgi6klmnbpboqrsvw=V!t w pw W DCw p s  v87 ww w N&w w Dw N 2#2#w w 0w : #"-""z"z"w w #-"`" "\"w 2f wfw6w w w "w w r Z%e"-""""w w w V w w  W 8% 7 dw 6 w  w w Z*7p"`"!7 l"7 f"w  w w 4w W W fw  Z)w W \w W USW N #w t W g !7 !ww !!w w ! ׯ! w w Z'!w *w !e!-!!؃ w ww w nw Z*7|!7 |!Z'z!`!w HZ%w  7a`!D?^! Z!-V!Z) F!Z'ӇZ'@!! e!-!!ك(!Z'7! ! *w Dw w  B w &w &0  0w L    /etc/mshww * | -eb ^ Z w~w w Xw :F w .w e8 -4 4 . wZ%Z'7 , ( -$ 2ԕ\ԕ w Z'   "ԕԕ^ ы ԕ\ $eTԕԕ-ԕ w L Z'  r  e0\ > <OIww& w w > Fw W W w 0 7!E7!ew     *% w \ W  W \  T!B+T w:w w fw w w -- ~w`  fd\    @7 6*b ^?Zw w W Cw w 2 :e4-0$z$&JZEw w z$Z%Pы w jZ%w w (W ww *ы w <* w 7 7 w  B p  +/T?-.($00123456789'0 ^8w $w $rw j ww pP%wDw Re#H@#<w #0w $##w #w P%m~wx , ~w w w W 0W 9p0C`wf 6. :7 4 `wwlww w ,hE 7!\ 7w ^P%w\& z$ J  $ $@$W $ &f Z%w ӕ w :Z% r fw e0 x  p7! 7RN R7<7:27!0w &w 7!7!~ - r w|wLw fW pw \ W Z%w HTW !Z'-. - J܆]  7w f e#7!Z%w 5w 6` w W rz" 5: 2z" -e * 4TMPZ%EEz E7!7!z" 7 z w  5ewZ*w W W w W W T!*!Z* 7 Z**Ԕ*Z*Z%w TW !Z' >: 6 $Z'7`7Z' (w Bwjw F`76 w ab Z%b ׭z#7b 7~B+777w <>7 .z$7  $w <8 b eE# ww$w d w w V& w P, w w bS 4% 3%ӕ w w :W S 4%݇7 &ww pw ww  w Zӕ$ 4%Ƈw Hw @ w W ^zerw W S 3%͆w W ]LFS 4%Ջ׭Z%Z' פ e7w Z%7 7$yXnv7 &w   Ԥ&  & w Tw J7 z&wn  &w d 7!X6e! W Sˋ   Ӌww`Z%Z'Z)w R & D7! Z)E Z)@  Z)w D T  w| ~   8% X7 w@w 7jwd\   ! tmp file ? Editing System *Z'z w^l ^> * ^ \r . * $ [ w  w/tmp/etma*z$unix_v4/bin/chown0000755000175000017500000000074401026347440012357 0ustar aapaap2D! w nchown uid f1 ... eCע0ע9w 7w w 2Can't open /etc/uids w w Who?  : w  ʋw :w F>w w77 Ћ w ?  }  0 Wp ` /etc/passwdfA7~ fA @e7x1@  1 @ &@wLՋ@@ 7B Ewww &w ~Uunix_v4/bin/mail0000755000175000017500000001051401026347440012157 0ustar aapaapt"  & 6 % w W-_W- @%-_<t  p  5;  0 52Bf N % '@ N l 5 W-@B% @ApBn @0n= < 5n z $ z  z  z  z  z  z  p  @- l W-@55 W- 5<  z Y z S z M z G z A z ; z 5u @@-*@ @m& | nf e@ @m @@- u @@-&@ @mȋ7@ @m&  @ @m&nf e   0 5 p <f N %5 N< %W- p<5&& N %@ 5Wy  D%  p lww ~5 fNm< H 5W:W @@m  w<w *5 @ @m ȋN   7   f       &  f f De N p @ @mww |5 @@m5AAmA   wNw <5 5 @@mȋAWp B Bm`eu@ww 5 @@mȋ 5 @ @mA AmHww  *@a@%zf p @6 p Rf 5 5  f 0 5N l N NL p  5 @ @m ȋNef f %f N %5 Nf %  ^f % N l f p - f 0 5 N l N ff N %5 Nf %N l N l  f 0 5N _f 5 N l N %f N %5 Nf %N l N l N ww wDe   %  wl7 r7 hׯh- ` ^"7 V .B JdVoPxfe.c<s l ӕ- C r f e0 1 / ҋ D~'`d f v Le0 9e z p&  md b  ~      ~ w7 6 , (0  Wp `e0[eӕ?f@ wB w @w -w @7  wfw w 7  wf@wp wrfwwhwPwTfwn7A 7 \fA & UfA  @e7z1@t  1 @ wfEwfwBw>zwwf@w&w"wwfww wb wdf BRwNfww2 w4f@wwwwf@7.F @&HFfA7v  fA & 9 &fA @e&7Bw>8@ x  "r@   $$ttyЋ7\@ RESTEDTw N   ww @eL@4 & Z  > , J, J  , U`ow 5/ 5.   ,  , & Z  >  w w DC @mem e rfww p@&f 8%J r<R r< r<R r< rWtC` re rwF !  7 %n  ,   7 FJww RAA WpeCRԔԔԔ @eWpeCԔԔԔ&  ed&  ed&  ed&  e@ &  Rw@w .A r nmww D W- C r  r e0Tԕ A r e0Tw6rw 6r@f@  P`Hm` /etc/passwdCan't open password file /tmp/utmpWho are you? /etc/passwdmailboxNo mail Save? mailboxmboxOld mail in `mbox' mailbox/mailbox From Can't send to `%s' /tmp/mtmcan't creat tmp file can't open `%s'  w w&w w /devPF Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/rmdir0000755000175000017500000000044401026347440012353 0ustar aapaapP w R 7 [<WE%@P. I/E. >/:6@<  ׭. ׭. F@@ҕ/ҕ.ҕ. " 2   -- directory not empty ? unix_v4/bin/time0000755000175000017500000000105401026347440012172 0ustar aapaap6# wL H B+Z@p<74w2w  realZw w userw w sys w + w Try again. 0 5w vCommand terminated abnormally.   jҔ   j`x/usr/bin/ e aw Command not found. Tw w w w 0ԕ !SPr& r<wYw z w t:w h w b:w X w R w L 0:ԕ !XP w 8.N re07>w  f re0dw Eunix_v4/bin/pr0000755000175000017500000000675601026347440011673 0ustar aapaap ^ & 6 % w V 5 J75 4  54  5 W-Ze@%-7 @ 7 yW-<e@7 2 N5/ N X7>& N X7*N X7@%+  N X74N      wJw 844   Vw,w &4 41@e4 ^ @E74x4  ww &-d BZ THL-DH-<>  & R4 4% x" 7r74j 7   f | 7P _*@e< ^ 7 0@e  w@e 237  h!wpj5 ~  Hr j5h ,j5h! Z Veh!pj57 2 H34 fe f8 f f< f3 D f 2 3 -b2  2F 474wPw > e-"2_L     1 7j51 z:  ph5j5 w-d  %    - m*2 "    e-`11   -6 e-(1 w.w  eh!! %˕ ateh! h!˕ww B ej5E  E   eh!"h! w~w l 007 0N H 7& y ,5& 0 7 !   ww CĔ ww C r   r Ne0 ww C\ 7 y .0 =7 7 0 / 0,-0!h0U-ZTe7/  <7 6 /7 / /    w&w B %0  9Wp `eDww -j/f/N wf~/ ,t/P j/ d/ @f H/ ,676/ p ,6,/$/-//fwZwVv w2 w4f@w wf@)ww f@w| w wfww wwf@ww wwfAww 5Wpe W W w whwXf& f BRw4f@ww wwf@7/F @&HF x/ .8"/ @.8 .8$$ttyЋ7r/@ h/ESTEDTw tN    wlw Z @eL@4 & R  6 , J, J  , Uow 5/ 5X   ,  , & R  6  ww vDC @mem e rfwHw 6p@&f 0 %.X8 r<R r< r<R r< rWtC` re rw-F !  -7- %n  ,    7 \-X8whw V 6!AA Wpe"!C 6ԔԔԔ @eWpe8!CԔԔԔ& ed& ed& ed& e@ &  6ww A r nmww D W- C r  r e0Tԕ A r e0TwN6rw*,6r@f@  P`Hm` HB/dev/ttyxhltwVery funny. Page  \2J\N   ,67x7r7l7f7`7Z7T7N7H7B7<760/devPFDay Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/exit0000755000175000017500000000022601026347440012205 0ustar aapaap & 6 % w 8& & .%w2f@ww w$ w&@&HF7Funix_v4/bin/rew0000755000175000017500000000016201026347440012030 0ustar aapaapb%  W mw@ȋN w5ȋ XbL? /dev/tap0/dev/mt0unix_v4/bin/goto0000755000175000017500000000165601026347440012214 0ustar aapaap@^4 & 6 % w *BW- %x   "%& & %1 & & % 7@e   "%@@e& X  T& %ww 5 5AW-: W- @ 5 5% W- W- @ @ @mH h5W-  V5@@m ww 5 @@mAAm  @ @m ww  ` wf@)wwfw   f  Ew `   7 dwlf@ww wF wHf@ww& w"w&@&HF7 FfA7,  fA @e71@R   1 @  x h""X @h" h"$$ttyЋ7l@ bgoto error label not found www R&w FU/devunix_v4/bin/rm0000755000175000017500000000310201026347440011646 0ustar aapaap & 6 % w &5 5 @'e@5W-@f @r Nff %ww 0@ef | N L _@E%@]@R r5@ N L _@ @-_N  N" L 5  @R f@L P H D > 4 e NT L Nb L B@2 @u="Nfr L% l55uW- @ L5W-y N  N L wPw >@e& %w0w @e&& Z%% @ww w`DeV  P % w7 <7 2ׯ2- * (, 7  .  B Jd oFfPecsl ӕ- 6 r f e0 $C~ fWtE Ee0r h    B`wB 6  2*Ο&       w7   0  Wp `e0[eӕ?fw wR wTfw|@e7t w0f@fw wfEw f@w6w2 wwfww w wfw w wf w }wDf 7-.7#(e 7#e7#m  %ef@ww~ w"w&@&HF7`F%s: non existent %s: try again %s: cannot chdir /etc/globglobrm-r-f**%s: no glob %s: directory %s: %o mode %s: not removed  unix_v4/bin/dump0000755000175000017500000000770201026347440012207 0ustar aapaapd  & 6 (% i/dev/rp0/etc/ddate/dev/mt0w ) W- @    eu@_@ g   d 5@ )f %N 2@ Wp w&e  ( 7(7(`T((((@ t5e @ w-v( n(wj(  0d hisu_|W-$  @>   @& 7!! @D  nT )  !  t& $ t  & 7!!5 5 5 w-;#fe  # %*# & $ 5,H',@',:' um@ ee  Nfl % # .&&&&&# Lt& $ 5 @  |e 5 w-#fe  # %e  ee  R&  F&~ 5@)f % ) ww @ @ N ~  ww %C .@e % L5 @ W@e@e!835 '&  ' ) @$%  % |e @%&  % |e@% . @% | $ww f N %f %% N  ww C  ww ~ B d 3 N |w`w Nd& `&-~ &$ 2 @7B&% 8& 7 ,& f# %%  bww  @  0 9Wp `eDww ffE %' ww x 7X#T#   wVw Dw^%DeT%  N% % Rw(7 :%7 0%ׯ0%- (% &%,+7 % .+ B JdZofeBcLs l ӕ- 6 r f e0 $$C~ fWtE Ee0p$ f$    @$`w@$ 4$ R 0$($Ο$$ $ R $  $ R $w7 # # #0  #Wp `e0[eӕ?f@w wf@f@ ##w~#w +@w +-z#w +@7 V#w^fwJ#w +7 @#wHf@w<w8 w"w&f BRwf )  )  7 ߼ 7$ 7 fwm wwmwf@ww!w wB@$Yfwzwv!wNwRf@w^wZ !w,w0f$w&@&HF7$FfA7!  fA & 9 &fA @e&7w@4!ESTEDTw LN  wDw 2 @eL@4 &  , J, J  , UXow | 5/ | 5&   ,  , &   w`w NDC H @mem e rfw w p@&f %6". r<R r< r<R r< rWtC` re rw!F H ! H  !7! H %n  ,:! :!  7 !.w@w .+\!AA Wpev!C+ԔԔԔ @eWpe!CԔԔԔ& l ed& l ed& l ed& l e@ & l +ww A r nmwpw ^D W- C r  r e0Tԕ A r e0Tw&6rwN 6r@f@  P`Hm` ".:bad character in key no file system specified %s: cannot open %s incremental dump from %l files %l blocks %l phase errors date updated the epoch special read error %l change tapes write error can not open %s .w w&w w PFv z Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/date0000755000175000017500000000411001026347440012145 0ustar aapaapX & 6 % w W-a@7    % l  R    R  |\  f   % $ 5 }, & f B%  f %     %  Z & %  %ww  p _h _h V5W-_hW-_h 65W-5 5 \W-;X  @e @e  ׯpe ;W-77 7 el!  r   > rNe rN  N<   <  wnw \>@m7!4 ,7*wLw :upw  rN rww ʋ$eWp @ !dʋe `wfww. wwf@ww4 wb wdf@AwH wJf BRw4f@ww: wwf@74F @&HFESTEDTw N  ww @eL@4& & R  6, J, J  , Uow  5/  5   ,  , & R  6 ww DC @mem e rfww p@&f 0%  r<R r< r<R r< rWtC` re rwZF !  :7: %n`  ,@  @ B 7  ww  b AA Wpe| C ԔԔԔ @eWpe CԔԔԔ&  ed&  ed&  ed&  e@ &   ww A r nmww D W- C r  r e0Tԕ A r e0Tw6rw6r@f@  P`Hm` bad conversion no permission /usr/adm/wtmpPFDay Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/check0000755000175000017500000001571001026347440012315 0ustar aapaap  & 6 $% /dev/rk2/dev/rp0/tmp/ktmpw @ @m W-@  W-^@%-W euL@ =   @ >  1 e@ >  1 e@ >7 e7 y  7  7` eN  N  8 .W-N  ww  f  7  N$  _6  N ?   7  _6*  7 ~ 5: ~ ^ 7:740  _6 7^t 7z  _6  _6 7!*@e&e N   t@e`    1t-%v& %nawt@0 R  D4  6_67 , t_>n  *  7ZP r& e w-F@ W/6N8 z D/l  D -@e&  f   < z e * _6  N fQ f  7  N@  _67 <7 777  ee!7  R& l%   r  _6   V& l%  X VP\ z e76 ! aE7`tE7`  n z  :t!aE  & z z%  z  z  z | z l z b z V z J z , ww *  ww @@5 @ @A@ww 5_h $& %7t a  @mep@@&e@~mvep5  R_h @E%@6@&@& % v! r d^ 7  7 F0 e  (i 5H  !A @m 8   @m& l% _,@e @m& N   @a  @a& l%   ! @m   @m& l% w w D  , N& e  7! N& e  7!7e!7!Nz& e_ && % %7t` 6 2 _ N"&, e_ ` _ @e& N  _ _  @a5_ c @a%. @aU @a%. @aG d^ 7rn  7 ^P @a?LH   `@a  f  &@e`R %`Je D 5, @e`ff> e W-t@- N&X e_ ~@me_ w@ w .  @% . . . .@,(,7!*A1"  N&  e? ? ? /  @& Z%@e& %@ej z wv w d fe& %7!7N& N t@mEp z e @ e @ w w N /& /&  & :&  & ww A r e0 A r Ne0 N wxw f   dv  _J     @e& N w d   Aap ww f Z%f %% N  ww -*d!"5 W-d @ @aA p 7 @ef  pwVw DfT Z%fB %% N  ww 5 @ 5W-0W-9AWp Ameu@ww N f fff ze ww W- _ wvw dC W-  ,7! #  N  %  N  e  N ww CB7!-eww wDe   % w7 7 ׯ-  "7  .B J d`oZxfe8cFsl ӕ- C r f e0 1 /R ҋ D~' f v Le0 9e z p&  m  ~    ~ w7   0  Wp `e0[eӕ?f ,|P r l @f P 7^ > 4,-&f@w wfw w wtwxf@)w`wdfwwwDfwww*w.w 2w f wb AupNNmf 8 ww  < @@5 _ fA rBpu@@m55D@5!f& %5 @&   ` 3f %5 `@&   5!`@&& %`@&  `5!$@@AA Nf` 8 u Nf 8 @`5_B@& %@_ww  DCԒ ww z DCB5ҒS w^f@www"w&fwmwwmwfwww wf@w|wxw wfAww5WpeW  W 0 w|0wvwff& f$wNfwD6w2 w4f@w*w&:wwf@7x F @&HFESTEDTw N  ww @eL@4 &   , J, J  , Uvow d 5/ d 5D   ,  , &    ww DC 0@mem e rfww p@&f % ! r<R r< r<R r< rWtC` re rw F 0! 0 ~ 7~  0%n  ,@ @  7 D !ww bAA Wpe|CԔԔԔ @eWpeCԔԔԔ& T ed& T ed& T ed& T e@ & T ww A r nmww D W- C r  r e0Tԕ A r e0Tw6rw 6r@f@  P`Hm`  dbgilsu.%s: /bin/checkcannot open %s %l %4l/.cannot write %s URKfree%l dups in free %l missing %6l %3o spcl %6l files %6l large %6l direc %6l indir %6l used %6l last %6l free %6l idirldirsdir%l blk; i=%l(%s) %l geq; i=%l(%s) %l bad; i=%l(%s) %l dup; i=%l(%s) %l ino; i=%l(%s) "%.16s" %l din; i=%l(%s) %.14s%4o bad freeblock read error %d write error %d out of memory  !7777777777770 PF^bDay Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecunix_v4/bin/su0000755000175000017500000000363001026347440011665 0ustar aapaap  & 6 % w & I7 (:ԋ@ :>P&  EP&    8 % Ӌ4 UP&    Ԥ:    %  wLw : d @e & wJ D > N & . %5 5 B@e b%  2ҐB %: %: 0 9Wp `eD5! wtw bwDe   % VwF7 l7 bׯb- Z Xb 7 P .` 4B JTdofecs`l ӕ- ; r f e0 ) ' ҋ D~ fWtE Ee0 z p&  mr p V~  V  V~ w7 D : 60  ,Wp `e0[eӕ?f@ ww j @w j -w j @7 wfww j 7 wvf \\  7 ~ z7 7 jfwb@ 7 Vwfw@e7wfw7A 7 (fA & UfA  @e71@  1 @ wvf@wp$w^ w`f@wVwR(w: w<f@w$ w&f@w".w w7NF @&HFfA72  fA & 9 &fA @e&7w@Tf&frЕЕ P rCx r r  ~ rB`E \Z \^  !r rE Rr Sr   0 & s>e0W!9eW!ZeT!ᇅpassword: bad password file /bin/sh-cannot execute shell sorry /etc/passwd  w w&w (w  @ @  unix_v4/bin/nm0000755000175000017500000000472601026347440011657 0ustar aapaap@ 8 & 6 % w  D@%-=e @ȋ2@c  xZ6666666666666     b      e@&  7     %- -  x %pf %-lTL %D: % 6& %5 (  &AWp N <7AWp N %   f 4e 7 5 u-_ 5 _ ~ׯ_b5 W- n@mfAmH T0LE5  *   , " 6  |5 B J @m>  R  e   ww 5 @A1, Awp@.@A1, 5 W-@@mAAm @@mAAm  wTw B 10X  5 W-@tEe0\  @t5 ww wDe   % |w7 7 ׯ-  " 7  . FB Jjdoxfecsvl ӕ- C r f e0 1 / ҋ D~'` d  f v Le0 9e z p&  m  |~  |  |~ w7 h ^ Z0  PWp `e0[eӕ?f4 ,*P   @f   7 h  -f@w wf@)wwfwPwLn www w dw`AupNNmf b wnw \ :@@5 _ fA rBpu@@m55D@5!f& %5 @&   ` 3f %5 `@&   5!`@&& %`@&  `5!$@@AA Nf` b u Nf b @`5_l@& %@_ww DCԒ ww DCB5ҒS wf@wNwJt wzw~f:6wm0z w\$wmwVfwz w:w w6f@ww w wf@7F @&HF6rw6r@a.outcannot open input bad format no name list %c UATDBCuatdbc%.8s %c%c "unix_v4/bin/strip0000755000175000017500000000076001026347440012400 0ustar aapaap   7 w ropen error: 7aw W zw :can't create temp file for 7b7 bX-RF-J@ w improper format: ,m*e7 && w unexpected EOF: 7 w rcan't rewrite: w7w Ncan't read temp file for: 7tp7 bTPwpwJ Ew0/tmp/stma unix_v4/bin/du0000755000175000017500000000121601026347440011644 0ustar aapaapV( nw  -a s  7 ($(V( ΀w Ef5 ` (P   w e%@$ w ~ &f # ! -.-.. ѕ/W/   De  w  L p d ZfpĝkeD wW!feweD&f  s f e0 w ( .fA7vV  fA & 9 &fA @e&7Bw>8@xw w&w w unix_v4/bin/df0000755000175000017500000000307001026347440011625 0ustar aapaap & 6 % /dev/rk2/dev/rp0w W-@   u-W- @ @m  @ @m w0w  f 6 7! !N      5 $  N  ! ww  5 W-d  D@ 5  9\e@-w-N N0  % 8@ef  w5 W-d @ A Aap @ww f v%f T%5%NF  "fV % ww w De  ~  % w7 j 7 ` ׯ` - X V ,"7 N  ." B Jdofecsl ӕ- 6 r f e0 $C~ fWtE Ee0     p`wp d  `XΟT N  F  :  2w7 $  0  Wp `e0[eӕ?f@ ww "@w "-w ""@7 wfww "7 wf@w~ wfw0w,n w^wbf@wwt w<w@f@wwz w wf$wf@7 F @&HFfA7   fA & 9 &fA @e&7jwf`@  %s cannot open %s %l bad free count bad free block (%l) read error %d count = %d; errno = %d w w&w jw `unix_v4/bin/stty0000755000175000017500000000300601026347440012236 0ustar aapaap@  & 6 % w |  x @_e@7p    .   >  @ .  @ >   .     >(   .,   >0   .6   ><   .B   >J   .P   >V   .^   >d   >l   .t T _*  Z ww  5 @mAAm  @ m7 wvw dw]wfw T@@ @ 7@lwPw >wdDeZ  T % w"7 @7 6ׯ6- . ,, 7 $ .  B Jd(oNfXecsl ӕ- 6 r f e0 $C~ fWtE Ee0v l    F`wF :  6.Ο* $      w7   0  Wp `e0[eӕ?f@ ww @w -w @7 ~wxfwrw 7 hwbf@w  wB wDf@w w$ w&@&HF7FfA7   fA & 9 &fA @e&7w@ even-evenodd-oddraw-rawcooked-nlnlecho-echolcase-lcase-tabstabs-delaydelaytdelay-tdelayunknown mode: %s  w w&w Bw 8unix_v4/bin/size0000755000175000017500000000230201026347440012203 0ustar aapaap@r & 6 % w JuW-   @`e f F 5N  @e&f $%W-W- N  N W-N$  Nff* e@@m@m5Nf4 %N wjw XwdDeZ  T % w<7 @7 6ׯ6- . ,,v 7 $ .t  vB Jdof ecsl ӕ- 6 r f e0 $C~ fWtE Ee0v l    F`wF :  6.Ο* $      w7   0  Wp `e0[eӕ?f@w wf@ ww @w -w @7 hw|fw\w 7 Rwff@ww > w@wDfwwD w"w&@&HF7FfA7J   fA & 9 &fA @e&7w|v@l a.out%s not found Bad format: %s %s: %l+%l+%l=%l (%o) w w&w Tw Junix_v4/bin/ar0000755000175000017500000000275201026347440011644 0ustar aapaap-  ɋ Wv  B   J  yru0drx<tpw (bad usage 7w@w Aw H ^ 7(- :w w -- not in archive format ׭z0 06 77w ^cannot open temp file  w  ~zvr E7Nȋ/@ w  Ћa%wwHD7@w  7  5~w nw w  -- cannot open Pw w -- phase error 4J"wW 7 5 47wW 7 5x&fw w  -- cannot create w  w f@:w  w w  w - - w w lw w >cw vw &w w w w dw w cw w no archive file w cannot create archive file w" W, w w a0؇77 w Tw `w  w Rw w Lxw w .w ,w  w w w w  W w w  -- not found /tmp/vtmamunix_v4/bin/db0000755000175000017500000001156401026347440011630 0ustar aapaapzD ! ww$w,!w"wX7J7 H7<4"-P-F(m- e7@ ]]7`"7@"e"7@w ,7 7 0 0r!!!dr7tjdE7h7 N p BT,:: .:,$   0rw ? w File not found.  ׭ ԝ A  y +7 7 ~7 7  0  9Y a zw A Zfw 0 @fZ+Z-Z ._^*P .  7 ] w t 7 -+m+     0 p P` 0 9 . w  "f   fԋ.09AZ _az   2;wԋw7$ww `n /\?,P^=:!d'"$&%`A Aw A !%)6=G^nrvb`^ZLNPXRhjrzz~llllllD  D   6D   w   j  D  @ 7w JD7  w H   t 7 h w F7 V w 87 Dw r w 4.  8 4mR 4N w  5 w <  7  w &   - E     w \ v e0 ve0 ve0 w  XV R7t DBL ,E@w   E  m2  W&  @-   @e0 . @e0 E f -  r f e0 -*.L@ ,d  7 : f$ $ $$ w Q$B 쇷 7 f" w! A  C W  CBe @w <7 zx & 6-H? mTm6 6 !0  w@ L Ew w w *w (w )w bw ,@w `7  w  䇅EE @ Ex. 6 L f  ` I \F  B F w )+9  (w -( j (,   ~ L 5  5 w $ L  e@` 8 E 7 r0r1r2r3r4r5sppcff # @  , w ,-w $+ Aew, w t4  & @D@$f &^emov cmp0bit@bicPbis`addsu? clr?@ com? inc? dec? neg?@ adc? sbc? tst? ror?@ rol? asr? asl?@jmp?swab?@ldfps?stfps?stst?clrf?@tstf?absf?negf? sxt? mtpi?mtpd?@ mfpi?@mfpdpmulrdivtashvashcLbrLbneLbeqLbgeLbltLbgtLbleLbplLbmiLbhiLblosLbvcLbvsLbhisLblonhaltnwaitnrtiniotnresetmulfmodfaddfmovfsubfcmpfmovfdivfmoveimovfimovfomoviemovifmovofncfccnsetfnseti nsetd nsetlrjsrxrxorrtscflgsflgemtsys? mark~0sobsploctE  E8& E  tw 7`m7 w 7`  lw 7`~ Zt tE  >E5U m( t d 2w 7`  H 5 5@  nzvcEE E d E 0 2  w ^;ezew   !',16<CJQW\agkrw|  jcorea.out?0HangupInterruptQuitIllegal instructionTrace/BPTIOTEMTFP exceptionKilledBus errorSegmentation violationBad system call?15?16?17sp ps pc r0 r1 r2 r3 r4 r5 fr0 fr1 fr2 fr3 fr4 fr5 fpsr releexitforkreadwriteopenclosewaitcreatlinkunlinkexecchdirtimemakdirchmodchownbreakstatseektellmountumountsetuidgetuidstimequitintrfstatemtsmdatesttygttyilginshogsleepsynckillswitchesboot"/sppspcr0r1r2r3r4r5fr0fr1fr2fr3fr4fr5unix_v4/bin/sum0000755000175000017500000000030601026347440012037 0ustar aapaap  "oprd  @  zaE ~| &P ~@? &fA  r f e0 unix_v4/bin/clri0000744000175000017500000000027601026347440012170 0ustar aapaap%F2^   Wq 0W 3E`e@t7 &&@tEe B &error /dev/junkunix_v4/bin/bas0000755000175000017500000001332601026347440012006 0ustar aapaap8#0 @7 0 07 jaw W z 7 d Tmp file? 7 #$ 7 Cannot open file 0 w Fw ready "7   V5w R /2@  e 6 w too many lines r@ " 7`\7`& & ȋ  4 -"[   ? 7 w,7    J @@ :w r7 jC _w w @w W w7 27 0 9e a zeb 1 W f  - - eeW :j --eW 6 w out of symbol space ~|1 1   7& 2 -6 "Newwfde2  ew 4label not found j:W@PPW ^ 7 <R " \ 1  !.w out of code space ,7 . J-  < !2 w zout of code space 7.ww  w H R \ T p    V y$0J<TpzT  _e        H   [ W  Qt   <  _ " D F ̔" &eE 0 &   `     .L & & =  7%T@ 8 >   0 7  J w jfor/next imbalance @7:  $ > 4 . @ n  *  J  6 " = & &  w  . & |   w    w ~  ,& &       > <  = ע=  ע>   ע=   ע=  Pe . + -  4 w $  $ w   . * /   w  w   ^ w    _   (  p )'  .  w zR   w &reserved name D T7 X B L (  >w RB  ) [ * w 2z 7  ] T 2 ( & ע)  ,T: \S \ \#  @w & F D\ l  *R\ $ 7 & 7 r -  b     \   v   \ 7 \w \w 2\Sw \ ` X\ w \ "w  E\ 6 w @out of space 7 \S$K!SK ~ v n  f  ^ V1@.@*eU" !\  S S w w Bad exponentiation #\ \  @#\  w Tbad return    eWpC`& D#B w subscript out of range E  j e 6 w out of symbol space Q$&0 BE E P  \SKe5 w vused before set &e 5 =w 4w > w \ 7 7 b &\e E  [w 6@ w ]w   @   x  ( 0 F \ t  H%c Zw Vw Rw nBad log w Gw XBad sine w   > * e\%  @@ewJw arg count  @ e1w bad arg % GB7w&f J 77| 7r 7r@@@@F& 7PJ7: } &  - } 0 Wp `e0  Wff&  } - } 0    } 0  f 5ww l0B`W@ &  W B~  e0VV \ B@e 7 -}     e}  wmmB W0  .} 0}   .} }  Wf ;}   V7N 7F7B@e0}  f -}  r f e0} b.out/tmp/btma/dev/vt0listdonerunprindispifgotoretufornextoctadraweraspromsavedumpargexplogsincosatnrndexprint7d@w h&w `!7J& @ Aew 875775VVfW@H77 wf@@w 7`7PwLw 7R<XCX   Bv~@@!hI@!hAy1?ϑy"?D{Av#OP#C!+C|]2CU*j 4xBJh{CW*RsCL~Sz& Wf&&7rW?WA@mW@ @ V@hZL>0BhZL>VV "@NnDOLX2xة3I䔶TX]1 D!L%dIgN5&GbqhDK-?7 fWp3e @7 E7 '&W&f: 7&@%&@A&@:7@L> Be0# @:є :    BA   W :e B@e0:m\ P&` :eȐ9 ȕ0 :ȕ1 &$`0::VV@AfW@Vw fW@Vw w VWf@@67f@f @AdVHB`R@7^&e# 7V # VVE=sMBԝ`=B.pF:|+eiD(/zC@;\)@3d@Wf&7V @W@@`RD6B^PBVwVV5@3e1@rzlB#"3h@?ØGe@lB,k$aXU> unix_v4/bin/fc0000755000175000017500000001104201026347440011622 0ustar aapaap@J & 6 % w  5555 @@-[ @m%-@ @m 7 y@ @m5N %f@ p &of $ & 5N& @ p&N %o  % % _  5  5 u-_W- @  & v 7  h$@  & 7X$ %U %R M7 D$% , 5 @ : Z 7( $, $. $7 $%6 , o@ & & 5 Z N> L D Z NJ v $  $[ X5 \ #` #d #u-@ A p&%@ p %@ t %@  %@ 0 %% , W-W- oT#  Z wH w 6  | w2 w 7 #@e7#7#@e7##f @_# %## @_# # @e7#@e7#5 RW-RARWp Aa1ARWp Aa1 R l 7L#0 l 78#0@eT7,#@eT7#7 #if  & 7" l  v t (-"""  WT#""" ""&  ""  t" l" `" :w w z -H"H" L"F"B"?>"5 5%#W- _ _W-aW-zW-AW-ZW-__!N " Z5%a zW-AW-ZW-0W-9W-_ " !Nf l 5W-#7 z!w-l! W- _ _ 5W-@,! 5%   h h_@5%' "RN " R5@-   "W-\ , "7 W-*? 5%  -l n  ` f N  _< 6 N " 5_ "W- @w< w *   v Nf v    w w e-!  He-e7ww  Hww  _v7 p_7 h v5@!7` y + V5%/ H5%/  47%*/-  @ww  5-   5  @ww  u5 @ 55`A 7rfuWp mVu6uu@ =@ ȋ@e@- 4Nf \ ,Wp mBe B ˆ 5 W- @@mH   @ww w@5 "@  "ww z5 u@ 5 W/5  W-W- @ %.@ w(w u@ ȋ@p@ww  5Nf N! v  @e @- W-.! v _ @E5   N:! v (@tEw`w N.( $A H@w6w $N %o%u@e5u@ 5@ 5@ ȋ ww   N |ww wDe  | %  w7 h7 ^ׯ^- V T" '7 L . ' B J d\ oV x f e4 cB s l ӕ- C r f e0 1 / ҋ D~'N!R! f v Le0 9e zx p&  mZ X  ~      ~ w7 , " 0  Wp `e0[eӕ?f ,P   @f  '7 V!'-f@wr wtfww\!wTfwF wHfwb!7A 7 .fA & UfA  @e7D1@h!  1 @ wfwwn!w wfwAt!F  Df@A&  6f@A @+ 9 & fA @e&7w@z!w7 fAww5Wpez!W ! W ! ~wx!wwf& fwJ!wz w|f "& w` }w\f@Af w,.w"(e w"ew"@l  %e7 F @&HF!cpl%s: fc1/usr/fort/fc1as-f.tmp1/bin/asa.outa.outmove failed: %s ld-x/lib/fr0.o-lf/lib/filib.a-l/bin/ldf.tmp1defineincludeCan't creat %s Undefined controlNested 'include'Missing file %sControl syntax%d: Line overflow *Can't find %s Try again Fatal error in %s '  7777777777770 unix_v4/bin/sort0000755000175000017500000001034201026347440012223 0ustar aapaap2 & 6 % w Vw& _e@%-Ju @6@%- % % m% - $ $ $ $ e@7%X N T 7H  7N y@%+  N T 7B$ @% <% m8%H ,% &% "% m%&  !4%  # a!z4%% 7r$   ! %@4%  #' !0! ! ! % @: `[ {   a$ x% xD&,#D&e E7## r7##t7"" m"7"( """ׯ"X "a"""  "   ׯ"z"%t8 "D t" h"  5  Z#B" L"& X 6" 4#e-"  e& V e7!! J!& V w6 w $ 5 5 !!! m! ?!m!!9! v % '  | w-"N 57 Z !f : N    0! &(! j e  !  ` ! #&  # &  w( w   5 B , 5  & 4ef : N @ 0!   e B ! j e 4 !#& פ  !    e!%!e  3B  e     # &  w w @eD v    w w #H " & X &w~ w l w-, @ m" %- @ m  !@ mA rea?C reaw w  # l 2hww  N  ww  > 8J7!0    Nwrw `Bu   N 5   N 5 _@ @e  @ef  5u- upu@  u@  uu B-u- @ AA@B- @%0  @ @ _ u- @%0  @@_  up@_ @%. @5%.  @ @ @  upA@_  0  @ @ L@ @ %0  @@3% @% !  Bu   @@wpf@ww CLע ע  ע ע ע   ע ע  ww rC,ע  wbw PD   -  w*w C  Wp @@`eww W-9W-0 ww  f  4%ww D5!% wf@w^ w`fww| w>wBf@)w*w.fwT 7A 7 fA & UfA  @e71@  1 @ wfwA F  Df@A&  6f@A @+ 9 & fA @e&7jwf`@ w7 w w wAupNNmf ww  @@5 _  fA rBpu@@m55D@5!f& D%5 @&  ` 3f %5 `@&  5!`@&& "%`@& `5!$@@AA Nf` u Nf @`5_ @& "%@_ ww n6DCԒ w\w JDCB5ҒS w.fZVwmP wDwm>wfw. ww  wfAwZwV5NWpe W W 4w. ww|f& fww!wL wNfw!w2 w4f@ww !wwf@7F @&HF-admnorRtz-/usr/tmp/stmXaa/tmp/stmXaaCannot locate temp Can't create temp Can't create output Can't open D&7,7&7 7777777770 unix_v4/bin/cc0000755000175000017500000001176001026347440011626 0ustar aapaap Z & 6 "% /lib/c0/lib/c1/lib/crt0.ow \ 55555 @@-_ @m%-T@ @mF 7 y & & & & ^ & &@ @m :$ 2@ @m%02 @ @m%1< @ @m5N > %c@ px&of & z 5N& T _N@ p&N > %o_N _N _j %%f 2 7f  `  5 J <  .   56   2 71 2 72 2 73 $  2 75 $  2 745 u-_jW- @ x&r x b# $i@ &x& h & z 7P@ x& 7,# T$_b b$_b _^ ## 4$| "7 "7 "& _^ """ #s@ &x&  & z 7" #"7 "&r _ # h"zd"p`"7 ^"& \  n#E 6" 2">."7 ,"0 * & & o@ &x& z 5 N   N " _ "_ \5  ! !~!u-@ A p&& @  &@  &@  &@ 0 && W-W- oV! z  wj w X  "  !    w w  7 !@e7!7!@e7!!f $ @_! `%#! @_p! h! @e7^!@e7^! !Wp Aa1Wp Aa1  ^ 7*!0 ^ 7!0@eT7 !@eT7 7     n %-     WT#  Ĕ &     r Nj ^ 0w w -F F  J D @ ?<  f%#! _ _!a!z !A!Z!_g . %a!z!A!Z!0!9!_ . f ^ 5 7 w- ! _ _  @` |%   n  n f%' "K .   8 !   . !\  . 7  (? %  - ! f $ N!   . _* . ,! ww V %oC@e”ԋ w w   N ww wDe   % Tw7 7 ׯ- x v"j'7 n .h' B JB d o x f ep c~ sN l ӕ- C r f e0 1 / ҋ D~'!! f v Le0 9e z p&  m| z T~  T  T~ w7 N D @0  6Wp `e0[eӕ?f ,P   @f  x'7 !x'-f@w wfww!wwfww!wrfwd wffw~!7A 7 2fA & UfA  @e721@!  1 @ wfww!w wfww!wwfwA!F  Df@A&  6f@A @+ 9 & fA @e&7bw^X@!w7 fAwzwv5nWpe!W ! W " TwN"wwf& fw "wz w|f "& w` }w\f@Af w,.w"(e w"ew"@l  %e7F @&HF,"&/lib/mcrt0.o/lib/crt2.o/lib/crt20.o/usr/c/c0/usr/c/c12OPScpt/tmp/ctm0a%s: c0-Pc1c2/lib/c2as-/bin/asa.outa.outmove failed: %s ld-x-l2-lc-l/bin/lddefineincludeCan't creat %s Undefined controlNested 'include'Missing file %sControl syntax%d: Line overflow * Can't find %s Try again Fatal error in %s x'  7 777777777770 unix_v4/bin/lpr0000755000175000017500000000605001027163232012026 0ustar aapaap X8 & 6 % w d 5  7   7   `  W-  _eu@5W-+W-- u uuW-+5W/W-- NF  2  5 Nf n NF  NU   f  5 N ` N N rW--N ( 5 N ` _p ! 5 Nf n . `R (  T J %: ( ww  X 5 f  5 h `C5 5 " f %5N" f B %umW- W- `N rNF  NU  l ww "u5 @ H@ 5 @ H @ ȕ Ne" B %wpw ^ "" 0&  _F 5 @ 5@ p5  @ @m:@ @m5%:@ p@ ,5 @ @m5%:@ p@ 0L  w~w l >A1 2A1 &A1 f  @w6w $  @e  N   5AWt r e0@ww  l @e  wR L F D & : %5 5 B@e %  *ҐB %: %: 0 9Wp `eD5! w,w w De   % w7 7 ׯ| - t r "7 j  . B JdFo@xvfec,sl ӕ- C r f e0 1 / ҋ D~'   f v Le0 9e z p&  mx  v  ~    ~ w7 J  @ < 0  2 Wp `e0[eӕ?f  , P   @f  "7  "  -  f@w wf@ wf wfw w wwfw@e7 wfw 7A 7 " fA & UfA  @e71@  1 @ wfEwfwnwj w wfwTwP wwf@w8w4 wwf@ww w wfww wb wdf BRwNfw w2 w4f@ww wwf@7 F @&HF7lfdWp3e @7VE7  W&f$ 7 l @% ` @A&@L7 @L> Be0# @$є L    BA   W Le B@e0$m ` $eȐ9 ȕ0 $ȕ1 p `0$$VV/usr/lpd/tfxxxCannot create in /usr/lpd /usr/lpd/lfxxxCannot open %s Cannot remove %s /usr/lpd/dfxxxCannot rename in /usr/lpd /etc/lpdlpd/usr/lpd/cfxxxCannot create in /usr/lpd Copy file is too large pdp::::gok:$ ident /etc/passwd"   > unix_v4/bin/dd0000755000175000017500000001022601026347440011624 0ustar aapaap < & 6 % w 6 v _ @m7#" v  d7_ " v  L7_" v  47#_" v  7#_" v d#d#_" v N#P#_"" v  70#_(" v  7#\0" v M6" v "M8" v  @" v F" v U"L" v U"R" v U"X" v U"`" v Un"p"f" L _$!v5H"2 H"  @" 7R" 7F" B"  "t" L 8 " "  7" 7 " " !" L ! !77!v !  " L  ` 7! !!!t ` 7!-z!-t!" L 7 f!7 d!7 b!T!l! 5 !  !4! > % !! ! _7 ! !m - 5  m #  > %7 - " 5  &7  x  `ȋ   x  -j L  j 5F :T  T B F E5"  5S     7  _ Ԧ _w4w " -   %7!"  67 ww =@ ȋ  7jww V 0 9 Wp @@`et  t 7 CpC"7 y " L w,w D5!a!ze5!A!Ze  vww   -p zww  @ P b 2"!  f  ` v R 2 40-& v7 7 ,wTw BD5!a!ze5!A!Ze !E  v"W- - v 7 -  - vww   ww d^# L%VP# L% F_<&# L wbw P@e& %wBw 0-D#  #f<# L%ww wDe   % w7 7 ׯ-  "8$7  .6$B Jd2o,xbfle csl ӕ- C r f e0 1 / ҋ D~'R#V# f v Le0 9e z p&  m  ~    ~ w7  x t0  jWp `e0[eӕ?fwdw`Z#w8w<f@)w$w(fw8w4`#ww f@wwf#wwfwml#wwmwfwl#ww wfAww5Wpel#W r# W # w#w\wLf& f@ww#wwError 0Not super-userNo such file or directoryNo such processError 4I/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedError 14Block 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 systemf@7F @&HF    [.<(+!&]$*);^-/|,%_>?`:#@'="abcdefghijklmnopqr~stuvwxyz{ABCDEFGHI}JKLMNOPQR\STUVWXYZ01234567897-./% <=2&?'@O{[lP}M]\Nk`Kaz^L~no|JZ_myjС !"#$()*+, 01345689:;>ABCDEFGHIQRSTUVWXYbcdefghipqrstuvwxibs=obs=cbs=bs=if=of=skip=count=conv=,ebcdicasciilcaseucaseswabnoerrorsyncbad arg: %s cannot open: %s cannot create: %s counts: cannot be zero not enough memory readwrite*bkwxnot a number: %s %l+%l records in %l+%l records out %l truncated records %s: %s Unknown errorB$7~7x7r7l7f7`7Z7T7N7H7B7<0, 4 D ^ n v   . @ L ^ n ~  unix_v4/bin/uniq0000755000175000017500000000366001026347440012215 0ustar aapaap@`  & 6 % w BW-Y@- @9 @ L7@7 e@+@ L7p e @& $ 5 @  tw 7W-@&  5 @  (w,) 7)  n"  V&  n"  $ V&n" p n" 7  n"  V&   V&n" p V& 7 ww  5%   @ H= wjw XX T7 N* F%:&   D"cd uF7 @ 5N @ @ww N 5N 5@ 5 @ 5   ww  55@ -W W  W W @ @ - @ @ww 5 @ e5 W- AWp @@m5@ww w&De&  & % @w7 ~&7 t&ׯt&- l& j&,@*7 b& .>* B J"dhofePcZs.l ӕ- 6 r f e0 $%C~ fWtE Ee0% %    %`w% x% @ t%l%Οh% b% @ Z%  N% @ F%w7 8% .% *%0  %Wp `e0[eӕ?f@ %$ww RL*@w FL*-$w XL*@7 wfww >L*7 wf l l   7 ߤ 7& 7 f@w` wbfw2w., w@wDf@)w,w0fww2 wwf@7&F @&HFB@$YfA78   fA & 9 &fA @e&7rwnh@Z cannot open %s cannot create %s %4d w w&w bw Xunix_v4/bin/od0000755000175000017500000001114601026347440011641 0ustar aapaapR & 6 % w  7$eW-buW-[@ 5N@+U$<U$5U|$.Un$'U`$ U R$a  xvhZw-$w $ e###W-@+ f  7## N _,e W-N ##5 w-  5v#@ p"@  u- @ 5@u @)@2#8#w-.#  Rw"#w#w#wm#  4N"@e& %"% Z w w | " 7 " %% %wh w V f n%@& n% w. w  @A=H"9@N Z5 5 W- 5 u-N@ @m& 2 @e@-  umw w ~ @j f n%l  f n%^ N U f n%G N  @t 3 fE n% @t&E n% H >Zv 2w w z  <5W-  "5W-5 @t@]wF w 4 -v v "` %7^ Z 7 L P L -F @ 7 > 2 . "Ew w EW-W- W-\  N ,\ @0 n \ t ?   > * 4\HwT w B @-Nefff& e& n%Nf& n%5% NeW Ne0 ww uw- ww u@ @@e55 @ @b @@.  5 5 @@%@@m5W-0W-9 AwpXAmeu 5 @@@@m5W-0W-9 AwpAmeu @ AwpAmu5 5 @ ew- 5  @-e-  ft :%w-tw-n %ww N 55 @ 5N W- ww @E_ @E  _  _ _6 4~6@E _ " _ & _ * _ . _ 2 _ 6 _ _ @HPX`hp@E?J: _ > _ D _ H _ L _ P _ T _ X _ \ _ ` _ d _ h _ l _ p _ t _ z _  _  _ _R .H R @E _ _t \ t @E  _  _ _ ~ @E _  _  _  _  _ !_ !_ _    x _  !_ !_ !_ !_ !_ "!_ @E&!_ *!_ .!_ 2!_ 8!_ _ B pJ rR tZ vb x _ @E*"_ D"_ J"_ @E      N"`"n"|"""_ ww w De   % w7 7 ׯ-  ,%7  .% l B J d o f e c s l ӕ- 6 r f e0 $HC~ fWtE Ee0     `w  Ο      w7   0  Wp `e0[eӕ?f@)wwf@ TLw8w (%@w %-2w .%@7 wfww %7 wf@wxwt"wwf@w\wX"wz w|B@$Y r Cd$Yfw w"w"w&@&HF7NFfA7"  fA & 9 &fA @e&7w@"6rw6r@cannot open %s jsrsobbrbnebeqbgebltbgtblejmpswabclrcomincdecnegadcsbctstrorrolasraslmarkmfpimtpisxt @ 2   @ *   " @    @@   flagrtssplhaltwaitrtibptiotrsetrttmov cmpbitbicbisaddmuldivashashcxorbplbmibhiblosbvcbvsbhisbloemtsys clrbcombincbdecbnegbadcbsbcbtstbrorbrolbasrbaslbmfpdmfpd " : R @ @* B Z j @ 2 @J b r movbcmpbbitbbicbbisbsub ( P  0 `  8 p  0 @???w w&w @w 6unix_v4/bin/sync0000755000175000017500000000022001026347440012202 0ustar aapaap & 6 % w  wf$w&@&HF7Funix_v4/bin/ps0000755000175000017500000000435601026347440011666 0ustar aapaap & 6 % w W-'@5@      7 y           &  2 , _0:b P DV  P 0 5N _0 2 0 7"  V 0 7 u f p% 55 W-2_0Nf N%r^r 45%? Ru- K E<&5t&*` e fNj  n  <etr  v  z    w~w lA r5 W- W-@e02@eY-A r5 W-@e8Al r5 W-@ef?ww @ A Hww 5 5  e5`@t5`@Et5ff p%ff p%0 f N%% G0 W-0 >@"5@e5 uW-0 @5  W- W-~? N   ww wDe   % wf7 7 ׯ-  "8 7  .6 B Jdox4f>ecsl ӕ- C r f e0 1 /H ҋ D~' f v Le0 9e z p&  m  ~    ~ w7   0  Wp `e0[eӕ?f| ,rP h b @f F F 74 F *"-fww~wJwNf@wfwbw(w,f@wJwFw w7F @&HF&fwA@ e  TH KV`N-FFL:m8-> e7--) "H  @ 7"7,7, 7, e  x Z"@Z Z$$ttyЋ7@ akltx@XRFLp_proc_dc11_kl11_dh11/unixNo namelist /dev/mem/dev/rk0No mem /dev/rf0%3o%5d%5d%2c%6d%4d%8o %.32s F f w /devunix_v4/bin/mkdir0000755000175000017500000000036001026347440012341 0ustar aapaap7 @D /ѕ/ѕ.  D E#6'F$Ct www ѕ.  @77 Ћ . ? unix_v4/bin/mv0000755000175000017500000000443201026347440011661 0ustar aapaapJ & 6 % f|uW-   |% @5@5J!@&    |%  E%@_J!@&  2  |% @5@5} @ L  |% F@@ / R  |% @@ / j  |%  @. %  |% _  N!f  _E%@=!@ A AH@@/@5@5@ @ /u@ A AH@!N!f  `- -   |%    $w=#Ef r% 55W- @ x5W-y lN    |% JNf t _ :5W-    |% @ @e @-?@e5u@ A AH@u@ A AH@ ff  ,e! |% H5 ! |% V@ LN   ! |% *w f @e& |%wf)@e&& %% @FfwnDe`  Z % && " e7 <7 2ׯ2- * (.!7  .!B J dPovfe8cBsl ӕ- 6 r f e0 $C~ fWtE Ee0t j   & D`wD 8 " 4,Ο( " "    "  w7   0  Wp `e0[eӕ?fw@e7(!wf@fw wfEwfww.!w wf@ww4!wrwvf@w^ w`fwfwb:!w> w@fwL@!w$ w&f $w }w7FDf 7-.7#(e 7#e7#m  %ef@wwD!wwf/EwUsage: mv name1 name2 Source file non-existent Directory target exists. ??? Directory rename only Directory rename only values of B will give rise to dom! Files are identical. %s: %o mode Cannot remove target file. Try again. /bin/cpcpno cp ? Cannot unlink source file.  unix_v4/bin/write0000755000175000017500000000125201026347440012366 0ustar aapaaph%   7    w D    , 57v t7Z r  c N Х   ew" 0 T  5  -(! 67 -   T wT  ??~ /etc/mshArg count Cannot open utmp ! ... /tmp/utmpEOT not logged in. Message from Permission denied.  xZ X "( @X  X $$ttyЋ7@   /dev/ttyx/devunix_v4/bin/echo0000755000175000017500000000157601026347440012163 0ustar aapaap@. & 6 % w L u-u-  @ @m& `% ww wDe   % w7 7 ׯ-  ,2 7  .0  B Jd4oZfdec&sl ӕ- 6 r f e0 $C~ fWtE Ee0     `w   Ο     t  lw7 ^ T P0  FWp `e0[eӕ?f@ &w w > @w > -w > @7 w<fww x> 7 w&@&HF7FfA7n   fA & 9 &fA @e&7:w60@( %s%cw w&w w unix_v4/usr/0000755000175000017500000000000001027163042011342 5ustar aapaapunix_v4/usr/games/0000755000175000017500000000000001026347440012443 5ustar aapaapunix_v4/usr/games/bj0000755000175000017500000000303201026347440012762 0ustar aapaap w w x@ r E  y    w@  @Ջ E 7vf  r f  e0 t f2 w*Wp3e @7EA pw0w w Black Jack  0  4w new game 7 m7  w  jvfr (7dVm`  Tw up 6N2J+ 7 :-4w (*  mm wm  w Insurance? w 7` 7` 7 7 - Y- w You have black jack! Z7`j 7`d D6-2J Jw dSplit pair? w B , - #- w 4Double down? w cm v m-$  -  w You bust w~ w Hit? w w  w You have t ( hw: Kw Dealer has D@ m0<m,8 0 w ^ = blackjack (-  w 6 = bust 7  -+ w  =  n - e w-hw Shuffle 4L$ $Z T -F  t l:-  w  p 7  r7w7      7 x w w Action $ h & w You break even w You win $ w You lose $   A23456789TJQKHSDC wunix_v4/usr/games/moo0000755000175000017500000000116001026347440013161 0ustar aapaap`w w x@ r E  y    w@  @Ջ E 7vf  r f  e0 t f2 w*Wp3e @7EA pw0w MOO w new game PѕW TPw P TW T7 w$w bad guess TW W Y H7 7 w ? TѕW YT 0 ԆT XP TW X ` TPR l fW X^ w bulls; F w cows -4 .wF& ^w guesses wunix_v4/usr/games/chess0000755000175000017500000003374601026347440013513 0ustar aapaap5V  & 6 % w F5FC5@$ C! C-C      &  .%5N@'-zC# tC  pC lC      &  .% buw-B%@e5N ?  @eH@eHe w$ B! B-B< b = b > b & < %5>'-DB# >B  :B 6B: b ; b < b & < % &uw-@%@e5N -2> b @eH@eHe n,w@w2w 2@ p=xC NNmf  wp2w ^2@ C$P@eJ@P@B C @H0@e*@AWtA]H@ C w 2 xC5 ,CZ5,CT5, DN5,DH5,DB50,D<50,C65 ,C0w f w ^w V w Nw w w zw r5 xC,C5xC,C BC0xC `DC !7!4!10xC `DC!&!#BC0xC `DC !!!0xC `DC!!  xC5 ,CZ5,CT5, DN5,DH5,DB50,D<50,C65 ,C0w f w ^w V w Nw w w zw r5 xC,D5xC, D BC0xC `DC !7!4!10xC `DC!&!#BC0xC `DC !!!0xC `DC!! CvD,=?d xFT8Z5  w z@e7 V:w f5 w R@e 7 .:w > 0w 05) &w  !w  w w w "w w 0 w 0w #) R<w w w w w w w w w w w w w w ~ w vw nw > w 6w . w &w w  w w L5@c  @|;@ @`R &L5CcDc  T;C R  @:;C R w - @" w-w -5 -:U:5W-W-e -\; -V; @`Wp u`-2; -(; @`t5`-; "; -; ; @wN,w <,5 57-: -:-:e5p7-: -:-:eW-(-B7-|:-p:-x: -b:-j:e(- 7-L:-F:-N: -8:-@:e(@wv+w d+ d9, AT95@ ,C 3N !  +(9u r5 w-9e@e -N !5 $ w8@ w*w * H" w*886 6 C 7@8C3C2 C5 x d ~   3 CD7L8 e5^ P[e48 `Ue2(8 pOeq8C78 EV5= ;EJ57 F5E<5    7b87 b877   7@87 6877 77 77 ~7 77r7l774747b77T7 CCsC x& 2 8 : L ^ j 477 7477 7n4C3 DCw ( 6* 66 5%5 @e&6 4%N 5  5w6 w(w (w63@ R2 t6@ R2N  $ V6N N - *6/ "66 5%@e&6 4%N 5@- w5 5  $ 7 5w'w 'uu@w'w ' -5555H7 5 5e-5w~5wz5 )uw-j5eN N P05 u-w:5uew(5@w('w ' -5n25f  D 5455 4f  Hw-4% 4"eN 2  N P055 5 (u-e 4w~4@w~&w l& -t41@_D\4555 w-F4?@e 57 84/5 ,@eCt C @ rdtCE C @ rdPH@eHeu-w33H 3Nf  w3u3w-3+eN 0  Nf 0 5Hu-u u-e 43w&3@w&% VBw  w w "w w 0 w 0w w w w w tw bw P w >w , p5xCAe N Jefp5xCAe 2q5xCAe C &    %eq%CTw #@ R2  4xD11e1 @ 4 7z1 \Cj1 4%5 @ C@ C@ C@ C@ C@ C@ C@ C@ @ D@ XD@ A AC phD@@ @ C r @Bt @tPpxC wh"w V" 5 5 @ M B0 D0Ne18N $ $ @ %  $@ 5C@@ $5* $- $ $ / /AA R2>A R2w!w |! @t5@E5 r/ N N _J P/N N - 55(/ 2 xNZZ &6@ C N/ $N z. x $. N/- $N z ( $q $) $ e $p $  + $ x.( 'o $- $o $- $o $p $p $ w w   @ 5@@A5 $ww @t5A ru%q $ k $@5@HA5  $ -Ne18N $wzw hA rNea $8@t $wJw 8@   x>BZ $(- r 7 - -@e& $5%ww A r NA r  rfA r<&fNA R2eww )  ) b  ww n p, 1`VC f, )\, 7N,wLw :@, 72,  |)w(w - ,, -,j+7 +W-3@ 5@ 2e2 A rd A rd5 @ AWpd+p@ 5@@ @ C @ ^(5W->+W-.+ -(+7 +w w l(5 N  *W-  w*ww  *B*u * ` w-*-e *N N -N *5 z*  8 wZ*wV*ewB* wDw 2  G&*u * j - *0 $w-))e )N -N N 5 )  N w) ew)ww   7 |) )@ 5VC v  J  T7b) J)   N)   4)\A R2 D") @ 5VC@@5dA R2 A 7rJ&%-B&-8&W--(&W-< -(W-<-& %ww  R5 55w-~(e@e5"w`(N pA R2wH(wJw 8 7 0( 70( M 5%   ,@ H@ M'~A   -4%  ' A   A   .' 1`VC'A ~ 'A ~ A   r'  ,5f'  D57 V'A R2w@w . &5 5 ' @t@]ww '5 a h &5 1 8 e&8@t@me5ww &@ 5 @ @- wx&wvw d v%A R2 nN& N&  w-6&  .&AAA R2 *@ww 7 % % < 85ww  % 7 %@e 4   64N L4 R  64N L4N 64 AAA `4e  BBA `4e >wb C 4 EC`fC K"e  "@@ b(C C @@ b(Ce 05005000w&0, |$ &fV1 N1@J1D1w ZZ$T$, N$  N -.$-$$#$t5 $E5Pff % #N 8!7 #ww  #$-!  ! r e0 $ r Ne0 $. $ $ -# $N  j# $w^w L $  $w<w *@7,*#5 W-@@ A Am ,C @ ww 5 tW-t@ @t @aAt pCv t"5 @ev2  @ww "55 h " . @e-l"2@e - X= w-F"@e5 8"@e Z= "f  @ww  55@ 5@ 55`@ ww  55@ 5@ 55`@ ww ~ @ 5Cr!u l! t "w-T!3e@eE55 @t5N ^(&@ &C  %w A A@ r<w ww  f .#%f .#% f .#% f .#%f .#% f .#%f .#%f .#% & f .#%w@w .@ p=xC  AAm 1`Bww "55555555B  B  5 bB   B  L@e@e&@e&@e& %eN J5 * x@e@e&@e&@e& %eW--@e@e&@e& &%  5 +  5  _%55  F 5 w-je@t 5C jN N -L5Nfff2&f 'e .Nffff& 'e  Pf 6(   $B R2ue  B | w @ww  5 q= N fff %e_&W-kN fff %eYW-p  1 -W-nW-b W-r ׯpAe r}      @e=ׯ/  N ff &%ww np l5 q= W-kNff &% ,(W-r= W-nW-bW-0 W-9@e= w w A ru@t5 @5W- @55 Nf 6( Nf 6( Nf 6( Nf 6(  w8 w &   N ^(@- w w  @ @w CvD?d x()))b))(5  w z@ 7 w f5 w R@7 w > 0w 05) &w !w  w w w "w w 0 w 0w #) w w w w w w w w w w w w w w ~ w vw nw > w 6w . w &w w  w w L5@c  4@@ @`R &L5CcDc  C R  @C R w  w zw@@ 5 @w w 5 -z?-x -r @`Wp u`-N -D @`t5`-  -  @w w 5 5B- --e5- --eW-(-:-x-l-T -^-Fe(->-H-B-* -4-e(@w" w  , @5@ ,C 2N !  *u x5 w-e@e N !5 & w@ww v@@ @ 0 B-T@@ @ A 1l @B 05 5tr "@5 @ 3A ABWpduN H5 @ 5VB@ 5@ A B r5A 5r5`@ w~ C 7@^C3C2 C x8.. /.,/,/:.  3 CC7 \_ 0\ V2 PqC7 ~E> p;E 7 E x >  7 7z :  xp7 f7\ ReX 7H > F72,77|7"7 CCsC xf/r/x/z//// T7 <B7 <0C3 CCw - 7  5e-w|wx -uw-h!@e5N -N F5 u-w0uew@ww  -df 0 D 55 f   w-% "eN - b N F55 5 ^u-e wt@wtw b -j@_N2R555 Vw-<?@e5w-00u-,@eCt C @ rdtCE C @ rdPH@eHeu-wH Nf  wuw-~+eN - b Nf  5 u-u u-e *w@ww wDe   % $w7 7 ׯ-  "JP7  .HP2B J2d83o23xh3fr3e3c3s2l ӕ- C r f e0 1 /& ҋ D~'0B4B f v Le0 9e z p&  m  $~  $  $~ w7   0  vWp `e0[eӕ?f BBN<4BN  7$  7& 7 f@w  w f@)wwfw @e7 8Bwfw wf"w wfw w >Bwwf*wBJ wzf@wZ wV DBwTwXf@w> w: JBw2 w4f@w w PBwwf@7F @&HF%d. ...       **t+L,,JZ H| d,, @< Chess /usr/lib/bookkqrbnp PNBRQK a b c d e f g h q q q q k k k k r n b b n r ppnbrqkrnb%s: %d:%d%d Resign time = %d Illegal move resignfirstclockwhiteblackscoreeh? Draw by repetition White wins Black wins Stale mate /bin/mailmailchess/usr/bin/mailmailchesso-o-ooooo-oooambiguous unix_v4/usr/games/wump0000755000175000017500000001241201026347440013361 0ustar aapaap: & 6 %  Welcome to 'Hunt the Wumpus.' The Wumpus lives in a cave of %d rooms. Each room has %d tunnels leading to other rooms. Hazards: Bottomless Pits - Some rooms have Bottomless Pits in them. If you go there, you fall into the pit and lose! Super Bats - Some other rooms have super bats. If you go there, a bat will grab you and take you to somewhere else in the cave where you could fall into a pit or run into the . . . Wumpus: The Wumpus is not bothered by the hazards since he has sucker feet and is too big for a bat to lift. Usually he is asleep. Two things wake him up: your entering his room your shooting an arrow anywhere in the cave. If the wumpus wakes, he either decides to move one room or stay where he was. But if he ends up where you are, he eats you up and you lose! You: Each turn you may either move or shoot a crooked arrow. Moving - You can move to one of the adjoining rooms; that is, to one that has a tunnel connecting it with the room you are in. Shooting - You have 5 arrows. You lose when you run out. Each arrow can go from 1 to 5 rooms. You aim by telling the computer The arrow's path is a list of room numbers telling the arrow which room to go to next. The list is terminated with a 0. The first room in the path must be connected to the room you are in. Each succeeding room must be connected to the previous room. If there is no tunnel between two of the rooms in the arrow's path, the arrow chooses one of the three tunnels from the room it's in and goes its own way. If the arrow hits the wumpus, you win! If the arrow hits you, you lose! Warnings: When you are one or two rooms away from the wumpus, the computer says: 'I smell a Wumpus' When you are one room away from some other hazard, it says: Bat - 'Bats nearby' Pit - 'I feel a draft' w H ~ %y  5 & :" !  ` e 5 !  te:"   r@t:" :" !: ' `  &`&   `"5 C-  &`@ `'    ee :" !2 e  ! te:"5U  ! te:"5U  7tU@" t5@"7`X  Hte:"5 _ 5 _ 5   7 ! `t&e:" P   P   P  !  P ! (!  !  ` >! B! D! _~ -D Z! De  `" h! 77!c_ - z!  !8 e 05 W- @ `"   te:" ! _ 5! _  n! _ m   x _ 8te:"E ! `7 tU@"_ ! ~%y ! l%y__ww    te:"  a" aH ww n .%   ċ $ 7<w@w . :$ ,wp&@"@x @  &  ww   "  0 9     | Wp @`e `ww DC  at0@"  wbw P@@wNw <wLDeB  < % Jw 7 (7 ׯ-  ,$7  .$  B J,drofeZcds8l ӕ- 6 r f e0 $C~ fWtE Ee0^ T    .`w. " J Ο  J    J w7   0  Wp `e0[eӕ?f@ ww %@w %-w %@7 bwHfwVw %7 Lw2f 8"2*"  7  7* 7 f@ wf ww w wAupNNmf 0 ww  @@5-_`A 7r5 Awpu@@m5@l5um^@@- ff D% u-!2@@-ff % u-uNf d u-&@@AA Nfm 0 u Nf 0 @m5_6Nf d uww v|@ @5@ AH@ HwHf BRwf@6p74F @&HFfA7"  fA & 9 &fA @e&7w@2"7fWp3e @7E8:dD|HJb|8VX^` "$`*`NZ\XrInstructions? (y-n) You are in room %d You fell into a pit You were eaten by the wumpus Theres a bat in your room I smell a wumpus Bats nearby I feel a draft There are tunnels to %d Move or shoot (m-s) which room? You hit the wall Give list of rooms terminated by 0 You shot yourself You slew the wumpus That was your last shot Another game? (y-n) Same room setup? (y-n) w w&w w unix_v4/usr/games/cubic0000755000175000017500000000464401026347440013466 0ustar aapaap%$-  *@)@   @)@ w Type y to move first: w  2 Iw z 1111 2222 3333 4444 1234 1234 1234 1234 1 ---- ---- ---- ---- 2 ---- ---- ---- ---- 3 ---- ---- ---- ---- 4 ---- ---- ---- ----? ׭ yw .L@@f@f@f  x w You win  JZ X "w jw  D w I have a force win: "7 e w 2 W  &@  W   w  xW   #@ w o # w QED        9y # * W w  fw  @1  &@1 U &@1  U W   w LIllegal move &  w of w  e1e1e1@  &w |vxw rjhfdZ``mRmP w $Dw  w. f  w&  U%&tE7 E7E7f @@   @  A Ze 7  Ef `C  r CpDD`@ "`  "w &D D w D&`w f @  f mWp/w@Ef L  @@f@f@fxe?e CD  7 ;L@@f@f@fx @ & &w tw `  ; <     L@@f@f@fx D  +  &w ( ( + , ((.((((((((((((((w ~ &  Lffflp w ,`1 @  p eW   w  W   B   "w  2 w  w  w x/dev/ttyc/usr/bin/dds                                  unix_v4/usr/games/ttt0000755000175000017500000000422001026347440013202 0ustar aapaapw w x@ r E  y    w@  @Ջ E 7vf  r f  e0 t f2 w*Wp3e @7EA pw0w Tic-Tac-Toe w Accumulated knowledge? w b@  72 2w 'bits' of knowledge w rw new game ~s |s@ XO@C W vW yW | W | w "? D 1 OsL ( Fsw 4L 7 L7 Js̋̕w Y w <  7 77  !|߇ (-~7ȕww hIllegal move ww NYou win w >I concede ~ www I win w  f Wqs`G~@  JsЋ  |w Draw w4J  ` ` W b @s b @B   w, @ w 0 'bits' returned bw/usr/games/ttt.kunix_v4/usr/games/ttt.k0000666000175000017500000000041401026347440013435 0ustar aapaapCH?b=+<2.30L,b+t+%/H>C66/C63HIAHIjH@H!0VHHBG?@IG/H?cHIH0E??>Ev/0$HHhH?EuE>?=>[EEE>EQG3?EkE+>?>G!E0+D;62(!1 -:".?:H5&  * $ <6:(E    -3$ =8 K  8-  G55K.'E IF%  ) >'  $# #4 .%&O@-9'   8'10%$ 1)1&' @,'00>(-B    ,I 0,"/ *$475L 5 4'U;3 *;)G3K.S /( "-+7    K     ;,      .      %  2          1        -2            -   !          &B      7  -  8                       @  >           #           5                ;    '           1  %                      #                        ' -     %6   '                  unix_v4/usr/lib/w20060000644000175000017500000005257101026347440012630 0ustar aapaapability able about above absence abstract academic accept acceptable accepted accepts access accessed accessible accomplished accordance according accordingly account accuracy accurately achieve achieved achievement across act acting action actions activated activates activation active activities activity actual actually actuated adapted add added adding addition additional additions additive address addressed adequate adjacent administration adopted advance advantage advantageously affairs affect affected affects aforementioned after afternoon again against age agencies agency ago agreed agreement ahead aid air algebraic algol algorithm algorithms all allow allowed allows almost alone along already also alter altered alternate alternative alternatively alternatives although always america american among amount amplifier amplitude an analog analogous analyses analysis analyze and angle animal announced annual anode anodes another answer answered answers any anyone anything apart apparatus apparent apparently appeal appear appearance appeared appearing appears application applications applied applies apply applying approach appropriate appropriately approximate approximated approximately approximation april arbitrary are area areas argued argument arguments arise arises arithmetic around arrangement arrangements array arrays arrive arriving art article arts as aside ask asked asking aspect aspects assign assigned assignment assistance associated association assume assumed assumes assuming assumption asymmetric at atmosphere atom attack attempt attempts attention attitude attorney attractive audio august author authority automatic available average avoid aware away axes axis back background bad balance ball bandwidth bank bar base based basic basis be bear became because become becomes becoming been before began begin beginning begins behavior behind being belief believe believed bell below beneath benefit bent besides best better between beyond bill binary biometrika bit bits black block blocks blue board body book books both bottom bought bound boundaries boundary bounds box branch branches break breakdown brief bring broad broken brought brown bubble budget build building buildings built burning bus buses business busy but buy by cable calculation california call called calling calls came can cannot capabilities capability capable capacity capital card care career careful carefully carried carries carroll carry carrying case cases cathode cathodes catholic caught cause caused causes causing cell cells center centered central century certain certainly chain chairman chance chang change changed changes channel channels chapter character characteristic characteristics characters charge charged charging chart check checked chemical chief children choice choices choose chosen circle circuit circuitry circuits circumstances citizens city civil claim claims class classes classified clean clear clearly clock close closed closely closer closest closure cluster clustering clusterings clusters cm code coding coefficient coefficients coffee cold collection college color column columns combination combinations combined combining come comes coming command comment comments commerce commercial committee common communicates communication communications communist community compact companies company comparable compared comparison compensate compensation competent competition compilers compiling complement complete completed completely completion complex complexity complicated component components composite composition comprise comprises comprising computation computational computations compute computed computer computing conceived concentrated concentration concept concepts concern concerned concerning conclude conclusion conclusions condition conditional conditions conductivity conductor conductors conference confidence configuration configurations congruent connected connecting connection connections connects consequently consider considerable consideration considerations considered considering consistent consisting consists constant constants constrained constraint constraints construct constructed constructing construction contact contacts contain contained containing contains contents continue continued continues continuing continuity continuous contract contrast control controllable controlled controlling controls convenient convention conventional conventions conversely conversion convert converted converter converting cooperation coordinate coordinates core corporation correct correctly correlation correspond corresponding corresponds cosines cost costs could council count counted counter counting countries country counts couple coupled coupling course courses court cover covered create created credit crisis criterion critical crop cross crossovers cubic culture current currently curve curves cut cutoff cutting cycle cycles daily dallas damage danger dark data date day days dead deal debugging december decide decided decision decisions declared decoded decoder decoding decomposition decrease decreases decreasing deep defect defects define defined defines defining definite definition definitions degree delay delayed delays delete demand density department departures depend dependent depending depends depicted depth derived deriving descendant descendants describe described describing description design designated designed designs desirable desire desired despite destination detail detailed details detected detection detects determine determined determines determining develop developed developing development deviation deviations device devices diagonal diagram diagrams dial diameter dictates dictionary did die dielectric difference differences different differential difficult difficulties difficulty diffusion digit digital digits dimension dimensions direct directed direction directions directly director discharge discharges disclosed discloses disclosure disconnected discovered discrepancy discrete discuss discussed discussion display displays disposed dissimilarities dissimilarity distance distances distinct distinction distinguish distortions distribution divided division do document documented does doing dollars domain dominant done doped dotted double doubt down dr draw drawing drawn drew drink drive driving drop dropped due duration during dust duty dynamic each earlier early earth ease easier easily east easy economic economically economy edge edges editing editor education educational effect effective effectively effects efficiency efficient efficiently effort efforts eight either electric electrical electrode electrodes electronic electrons element elements eliminate eliminated else embedded embodiment embodiments emotional emphasis employed employees empty enable enabled enclosed encoding encountered encourage end ends energy engineering english enough enter entered entire entirely entities entitled entries envelope environment epitaxial equal equally equals equation equations equilibrium equipment equipped equivalent equivalently error errors escape especially essential essentially establish established establishing estimated et etc evaluated even evening event events ever every everybody everyone everything evidence evidenced evident evil exact exactly examine examined example examples exceeds excellent except exception exchange exclusive executed executing execution exercise exhibit exist existence existing exists exit expect expected expects expense expensive experience experiment experimental experiments experts explain explained explanation explicit explicitly exponential exposed express expressed expression extend extended extensive extent external extinguished extra extreme extremely fabricated face faces facilities fact factor factors facts faculty failed failure fair fairly faith fall falls false familiar families family far fashion fast faster favor fear feasible feature features february feed feedback feel feeling feet felt few fewer field fields fifteen fifth fig figs figure figures file filed files filled filling film filter filtering final finally financial find finding finds fine finished finite fire firm first fiscal fit fitting five fixed flexibility flip floor flop flops flow follow followed following follows food foot for force forced forces foregoing foreign forest form formal format formed former forming forms formula formulation forth fortran forward found four fourth fraction frame frames free freedom french frequencies frequency frequently fresh friend friendly from front full fully function functional functions fund fundamental funds furnish furnishes further furthermore future gain gap gas gaseous gate gates gating gave general generality generalization generalized generally generate generated generates generating generation generator geometries geometry german germany get gets getting give given gives giving glass global glow go goal goes going gone good goods government governments grant granted graph graphic great greater greatest greatly green gross ground grounded grounds group grouped grouping groups grow growing growth guaranteed guarantees guard guess guests had hair half hall hand handle handling hands happen happened hard hardly hardware has have having he head health heard heat heavily heavy held help helped hence here herein hereinafter hidden hierarchical high higher highest highly hill him himself his historical history hold holding hole home hook hope horizontal hospital hot hour hours house housing how however human hundred idea ideal ideas identical identification identified identify identity idle if illustrate illustrated illustrating illustration illustrative image immediate immediately impact implement implementation implemented implicitly implied implies imply importance important impossible improve improved improvement impurities impurity in inches include included includes including incoming incorporated increase increased increases increasing increment indeed independence independent index india indicate indicated indicates indicating indicative individual individuals industrial industry inequality influence information informed initial initialize initially initiate initiated input inputs inserted inside instability install instance instances instantaneously instead instruction instructions insurance integer integers integral integrated intellectual intended intensity intent inter interaction interactions interchange interconnected interconnection interest interested interesting interests interface interior intermediate internal international interpreted interstage interval intervals into introduced introduction invention inverse inverted inverter investigation invites involve involved involves involving ion ions is issue issued issues it items its itself james january jersey job jobs john joined jointly jr judge judged judgment judicious july jump june just justice justification justify keep keeping kennedy kept key kill kind kinds knew know knowledge known knows labeled labelled labels laboratories laboratory lack lag laid land language languages large larger largest last late later latter law laws lay layer layers layout lead leader leaders leadership leading leads learn learned learning least leave leaving led left leftmost legal length less let letter letters level levels liability liable liberal library lie lies life light like likely limit limitations limited limiting limits line linear linearly lines link links list listing lists literature little live lived load loaded loading local locally located location locations log logic logical long longer longest look looked looking looks loop loops lose loss losses lost lot low lower lowest machine machinery machines made magnetic magnitude main maintain maintained maintenance major majority make makes making man management manager manner manual manufacturer manufacturers manufacturing many mapping march margins mark marked market mask masking mass master match matched matches matching material materials mathematical mathematically matrices matrix matter matters maximum may me mean meaning meaningful means meant measure measured measurement measurements measures measuring mechanical mechanism medical meet meeting meetings member members membership memory men mentioned merely merged merging message met metal metallization method methods metric middle might miles military million mind minds minimal minimize minimizes minimizing minimum minister minor minutes missing mistakes mixture mode model models modern modes modification modifications modified modular moment money monotone monotonic monotonically month months moon moral more moreover morgan morning most motor mounted move moved moves moving much multi multidimensional multiple multiplication multiplier multipliers multistage multivariate murder murray must mutually my name named names narrow nation national nations natural naturally nature near nearer nearest nearly necessarily necessary need needed needs negative neighboring neither net network neutral never nevertheless new news next nice night nine no nobody node nodes noise non none nonlinear nor normal normalized normally north not notation note noted notes nothing notice noting novel november now nuclear number numbered numbers numeric numerical object objective objects observation observe observed obtain obtained obvious obviously occasion occupied occupy occur occurred occurrence occurrences occurring occurs october odd of off offer offered office officer officers official officials often oil old omitted on once one ones only onto open opened opening operate operated operates operating operation operations opinion opportunities opportunity opposite optimal optimization optimum options or order ordered ordering orders ordinary organization organizations organized orientation oriented origin original originally orthogonal other others otherwise ought our ourselves out outline outlined output outputs outside over overall overlap own page pain pair pairs paper paragraph parallel parameter parameters part partial particular particularly parties partitioning parts party pass passed passes passing past patent path paths patient pattern patterns pay peak people per perfect perform performance performed performing performs perhaps period periodically peripheral permanent permit permits permitted person personal personnel persons pertinent phase phases phenomena philosophy physical pick picked pickup picture piece pieces place placed places placing plan planar plane planned planning plans plant plants plausible play played playing plays please plotted plurality plus point pointed pointer points polarity police policies policy political polynomial pool poor popular population portion position positive possibility possible possibly post potential power powerful practical practice preceding precise precision predetermined predicted prepared presence present presented presents press pressure presumably pretty prevent prevents previous previously price prices primarily primary prime priming principal principle principles print printed prints prior priority privacy private probability probably problem problems proc procedure procedures process processed processes processing processor produce produced produces producing product production products professional professor program programmer programmers programming programs progress project projections projects proof propagate propagated propagating propagation proper properly properties property proportional proposal proposals proposed protect protection proved provide provided provides providing provision public publication published pulse pulses pure purely purpose purposes put puts quality quantization question questions quick quickly quiet quite radio raised random randomly range rank rapid rapidly rare rate rated rates rather ratio rational reach reached reaction read readable reader readers readily reading ready real reality realize realized realizing really rear reason reasonable reasonably reasons receive received receives receiving recent recently recognize recognized record records recover rectangular recursive recursively red reduce reduced reduces reduction refer reference references referred refers reflect refused regard regarded regarding regardless region regions register registers regression regular rejected relate related relates relating relation relations relationship relative relatively relay release released relevant reliability relief remain remainder remained remaining remains remembered remote remove removed removes repeat repeated repeatedly replaced replaces report reported reports represent representation representations representative represented representing represents request require required requirement requirements requires requiring requisite research reserved reset resetting resistance resistivity resistor resistors resolution resources respect respective respectively response responsibility responsible responsive rest restored restrict restricted result resulting results return returned returns reverse review reviewed rich right rights rise risk roads role roles room root roots rose rotation roughly round rounded route routed routine routines routing routings row rows rule rules run running runs safe said sales same sample samples sampling san satisfied satisfies satisfy save say saying says scalar scale scaled scaling scan schematically school schools science sciences scientific scope sea search second secondary seconds secret section sections security see seeing seek seeking seem seemed seems seen segment segments seldom select selected selection selectively self semiconductor send sense sensitive sensitivity sent separate separation september sequence sequences sequentially serial series serious serve served serves service serviced services serving set sets setting seven several severe shall shape share sharp sheet shift shifting shifts ship shop short shot should show showed showing shown shows side sides sign signal signals significance significant significantly similar similarly simple simpler simplest simplicity simply simultaneously since single sit site situation situations six size sizes skilled slightly slot slots slow slowly small smaller smallest snow so social society soft software solid solution solutions solved some someone something sometimes somewhat somewhere son soon sophisticated sort sought sound source sources space spaced spaces spacing spatial speaking special specific specifically specifications specified specify specifying speech speed spent spirit spite splitting spoke spot spread spring square squares stable staff stage stages stand standard standards standing stands start started starting state stated statement statements states static station stations statistical statistically status stay steady step steps still stimuli stimulus stop stopped storage store stored stores straight straightforward strange strategy stream street streets strength stress strict strong strongly structure structures struggle student students studied studies study style subject subjected subjects submitted subroutines subsequent subsequently subset subsets substantial substantially substituting substitution substrate succeeding success successful successive successively such suddenly sufficient sufficiently suggest suggested suggests suitable suitably sum summarize summary summing supervision supervisory supplied supplies supply support supporting suppose supposed sure surface surprised surrounds survey switch switched switches switching symmetric symmetry system systematic systems table tables take taken takes taking talk talked talking tapes target task tax teacher teachers teaching teachings team technical technique techniques technology teeth telephone temp temperature temporary ten tend tends term terminal terminals terminated terminating termination terms test tested testing tests texas text than that the their them themselves then theorem theoretical theory there thereby therefore thereof these they thick thickness thin thing things think thinking third thirty this those though thought three threshold through throughout thus time times timing tip tips title to today together toggled told tolerances tone too took top total touch toward towards track trade traditional traffic train training transaction transfer transformation transformations transistor transistors transition translated translation transmission transmit transmitted travel traverse treated treatment tree trees trial triangle tried triggered trip trivial trouble truck true truly try trying tube turn turned turning turns twenty twice two type types typical typically ultimate unaltered unchanged undefined under underlying understand understanding understood unequal unfortunately unidirectionality unidirectionally uniform union unique unit united units unity universe university unless unrelated unstable until unusual up update upon upper us usage use used useful useless user users uses using usual usually utility utilization utilized utilizing valid validity value values van variable variables variance variation varied variety various vary vast vector vectors verification verified version versions vertical very via view viewed vis visible vision visit vital vocational voice voids voltage voltages volume wait waiting wall walls want wanted wants war was washington water wavelength way ways we week weeks weight weighting weights well went were western what whatever when whenever where whereby wherein wherever whether which while white who whole whom whose why wide width will william willing wind wise wish with within without women word words work worked workers working works world worst worth would write writer writers writing written wrong wrote year years yes yet yield yields york you young your zero zone zones unix_v4/usr/lib/atab0000644000175000017500000000140001026347440012742 0ustar aapaap    unix_v4/usr/lib/cign0000644000175000017500000000023001026347440012753 0ustar aapaapauto break case char 4 continue default define do double 4 else extern 2 float 4 for goto if include int 4 register return static struct 3 switch while unix_v4/usr/lib/ctab0000644000175000017500000000140001026347440012744 0ustar aapaap        unix_v4/usr/sys/0000755000175000017500000000000001027200652012157 5ustar aapaapunix_v4/usr/sys/lib10000644000175000017500000013277201026347440012753 0ustar aapaapmmain.oX 0w 7 e   % Wp WtN  7 %   %MNTP<7l M& "   7 760  >H &  %e ww  j `z  5wXw TN &f  &f  ee% @@m@me- Cg jzW- e  @teUDmW- e  @teUDm z  DmW- #  @tU"e# w4w 0@etwf`  /etc/initmem = %l no clockI((8Xh)988iiiih  II  8 Hy   _u _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _proc _text _inode _lksp#_icode#_main"L5L10rsave L2_fubyte L3J_clearse _mfree L4D_printf _min L6L9_panic _fuword L11H_sureg"V_cinit _binit _iinit _iget _newproc L12N_expand _copyout L1RL8H_sched rretrn L14lL15zL16L17L18L13_estabur"_nseg"L10000L21L20L22L23L24<L25@L26ZL27xL28xL29L30L31L32alloc.oXX J6w   J & % 744477ww N ` e   `5  NP o 3 !Nf de % 2e Nf  ww N ` &e -d#Nf d&e %4  4e   apw2w . N `&e _"d    a5Nf  ee ӆ 5 5 5#NNef 5 W-2 @ ` &5 W-d@t5,@t5,  ap-de -d  l 4e _ww N `-d  apww !  5#ez wfw b \P V 0 *#  4 & % e! ̵  e 7  wiinitNo space on dev %d busy i out of inodesno fsYY99H9xx99999YYHxx989_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _buf J_bfreeli _inode _u _iinit"L3Jrsave _bread _getblk L2._panic _bcopy _brelse L1lrretrn _alloc"pL8P_getfs"`L5L6_sleep L7_printf L42L9_wakeup _clrbuf _free"6L11LL12dL13_bwrite L10_ialloc"L22dL34lL15L16L21L14"L19_iput L17L18T_iget L20FL23`L24L26L27L28L29L30L10000L32L31L25L33_ifree"&L35\L41zL37jL38L40L36L39_update"L42FL43L44L46L45L47L48:L504_iupdat _prele L494_bflush iget.oX H\w  ! :5--5-)̵ & ̵  ,eH S e P 7!j7dtt̕fe f fe tl5ee @e ww D  4 &  t 4  ww BʵJ Ce5f  5f tA@lee ʵeʵN ww D5 Fe5e@-2 +5N& e & e N& = eE4 4 wBw > @U4L G  ww @7HZH VԔX 0 ( wno imtno inodeshhx8HX88HXYYYYH88YxYYYXXXYYXYYY_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _inode _bdevsw _nblkdev _cdevsw _nchrdev _buf J_bfreeli _maxip _iget"L13HL16Prsave L2L3 L4L6tL7:_sleep L8jL9DL10bL12\L11\_panic L20000L14L5L15L17_ldiv _bread _lrem L18L19_brelse rretrn _iput" L21fL22T_itrunc"_ifree _iupdat"t_prele L20pL24_getfs L23L25L26L27L28L29_bwrite L30L318L32L34L35L36fL37L39_free L38L33_maknode"_ialloc _wdir"L42L43"_writei L41Dprf.o5uV$w @e@ %% 5 @ V7  y -   o  e  wnw jNf N& Nf e0 w.w *D x!5t t tv!     tww w Nn wcdlosxHZZrpanic: %s 9999 )Y_panicst _kisa6 _printf"rsave L2L3L4,L1_putchar"L10003VL10004`L10005@L11xL7HL9ZL10ZL12L15rL8ZL10000fL10001j_printn"L5rL13rretrn _ldiv L17_lrem L16L18$L19L20L21_panic"(_update L23nL24L_idle L25RL22Rrdwri.oY_ X,w B 2_4E% Wp A _4B 55E5N  E%`#  & e H  N 59@ 7* @- f& %N& 5rff eN  ww BE% Wp A _r _rB E5N  5E%`  WW-& & 5 fff e/N 5*N N    & e 5    ww u-@@wnw ju-@@wRw NC@@ml*Q]j5# &V J& % j/%`0B "      wh(Xhh(hXY_inode _u _buf J_bfreeli _bdevsw _nblkdev _cdevsw _nchrdev _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _readi"rsave L14L2>L5>_lshift _min"L6_dpcmp _bmap L7L8_breada L20000_bread _iomove"_brelse L3(L100004L44rretrn _writei"8L11lL10rL14vL15L16L17_getblk L20002L19L20.L21&_bawrite L22._bdwrite L23bL12fL10001rL13r_max"vL25L24L27L26L29 L30_copyin L20004_copyout L32 L28T_dpadd L33:L34&L36T_cpass L37:L38T_passc slp.ooXw 7* " t̕t 7 | .  t̕t ww B !-d7V 4 ̕He w2w . & ! 5e  D m H ! E%)e !E% 5e D , & %_@ && e ,m D&& e  et& % 4_ ww   v p7 l !2e E%4  ("   ww !̋e 5̕ 4 4 @  D7C  5 ˕t   & & %˕2 t  N f ww 5t u- NmfN %@ N   N& %  5 u-  Nm f % wswap errorno procs hiHiXHXXh  H HH  HHHHHX_u _proc _text _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _file _inode _buf J_bfreeli _sleep"rsave L2\_issig L3R_spl0 L4F_wakeup"|_swtch"xL6t_aretu L1xrretrn L8L9L10L12L13L11L14L7_sched"L37L16L17L20001_spl6 L18L19L21L20L220L23LL24L_malloc L25L26dL27L10000~L29L28~L30L31L33L10001L32_xswap L34 L35_swap L36l_mfree _panic L15tL39L40_savu _retu L41L42L43L45L46L47L44L48_idle _sureg L49_newproc" L55L51*L52:L54BL534L56~L57L59L60L63L504L62_copyseg _expand"8L65tL64L66L67L68L69subr.oXxw @55 _@535FN  _5 W-@ @m@ @m0  @0 @U@t5 @mCN 0 l@ @m N  @ @mW- @ @m7@7 =@ @mf @E5 `N 5@ `N   @ `7fw`w \  z x@d jM w w  @.ğ0 . . & E  jww ww ww DCB wY8888(9YYYYYYYYY9YYYYYYYY(Y9Y999_bdevsw _nblkdev _cdevsw _nchrdev _inode _u _buf J_bfreeli _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _bmap"rsave L2$L1L3L4_alloc L5JL6RL7|L8v_bdwrite L134L14 L10L11L20000L15B_bread L16L17_brelse rretrn _passc"L19L21L22L10000L18_subyte _cpass"L24L20001:L25(L27L28L23>_fubyte _nodev"BL29N_nulldev"RL30X_bcopy"\L34nL32pL33tL31ttext.ooXtX<<w D 5et  X  * f&  e j   f % 4l7f wZw V0  *et& %  ww  _& ! e 5- 0`v 4 tTe?tEet   e  & %7 N x  e& e3C    . %$ ww D  & %wout of swap spaceswap errorout of textout of swap space((XxY(XYxxYY(YYYYY(XYYX_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _proc _text _inode _xswap"L4XL6jrsave L2_malloc L3<_panic _xccdec"*_swap L5jL7_mfree L8_wakeup L1rretrn _xfree"L10L11_iput L9_xalloc"L22vL24L12&L13L146L16 L18L19L15L20L21BL23_expand _estabur _readi L25"_savu _swtch L27TL28TL26Ttrap.oo5x "w  @e 7W- @E%__W-Ne %  j_@E%_dW- A4 t@-9@e  1e  % $eze j b@l 7!_ e 73@  x(8D88  @ed7eENe E5 !N e E5e C@t 5` @t,   1e h@t ׭5d .  U5 edp%%7  @e x'x n w`w \ wJw Fduw:w 6w0ka6 = %o aps = %o trapIIIIHIIIhIIIIIIIIIxxHIIxIIIIIIIIII ((iHI_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _u _proc _text _sysent _regloc#_trap"rsave _savfp L2@_psignal L3L1L10000d_fuword L4dL5_backup L6_estabur L7_expand L8_copyseg L10L208L13(L15L16L17L18L11DL19L14,L22L23L24L25L26_trap1"L27_issig L28 _psig L294_swtch L31_printf L32L33L34_idle L35_panic rretrn _savu L36_nosys"L37_nullsys"L38sig.ooXp`w ! 5-N& . eww Dt 4 ̕7 ww  5 wxw t2 +7 0 2&1@& 1@& "  x       ,     etQ7n ww 7   C  , 7 7  e && %7 pt7h7Z  K wcorehh 8 YX YXYXYYYYYYY YYY8YYXYYYHYXYYYHhY _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _proc _inode _signal"rsave L2 L3*L5$_psignal".L4$L1*rretrn L7^L8^_wakeup L6^_issig"bL10L11L9_psig"L13_suword L12>L26,L16 L17 L18 L19 L20 L21 L22 L23 L24 _core"BL14,_exit L28_schar _namei L29zL30pL27_maknode _access L31_itrunc _writei _estabur _iput L10001sysent.o5;x(8HXhx(8HXhxXXXX(XX8HXhXxXXXXXXXXXXXXXXX_sysent#_nullsys _rexit _fork _read _write _open _close _wait _creat _link _unlink _exec _chdir _gtime _mknod _chmod _chown _sbreak _stat _seek _nosys _smount _sumount _setuid _getuid _stime _fstat _stty _gtty _nice _sslep _sync _kill _getswit _dup _pipe _times _profil _setgid _getgid _ssig sys1.ooX8.lw    _ 5@ _@5 5 Z 5%  _e<N !_ W-_ 5 7 7 |j 7`]_-m7 ˵ ׬+_-_e?tE5rmpe?tE5ff % _7  @e$  % a  f& %7 e7~t ww %@@ A @e5pNf @ @ e@& & ҋfe 5 5  5 e  m 0  6  N w w t7 ww !!   e    %  & % ̕ 2-     2-  e e- .  ww   [1, Q M   % 2 2 22 2lj  lD  , e (b  Oww F ˋe ' ?7 7 7 7 7 7 1`ww X t&@e?tE  0,e`"` % A`  ` & N  H `  &    wno init proc(YXYYXYYYYYYYYYYYYYYYYYYY ((YXYYYYYYYYYYYYhhhYYYXXYYXXYYXXXXHY (h XxYhhhhh9hhhYY (YXXYXXYY8YYhhYYYYYYYYYYYYYYYYYYYYYH((YYHX_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _proc _text _buf J_bfreeli _inode _regloc _exec"rsave _uchar _namei L1_getblk _access L2L3L_fuword L4L5n_fubyte L7L8_readi L9L11L12"_estabur _xfree _xalloc _expand L13L14_clearse _suword L154L16hL19T_subyte L17bL18fL20L21L22L23L24L26L25L27L28L29L30_iput _brelse rretrn _rexit"_exit"L31 L49.L33L34&L35*L36BL38<_closef L37<_malloc _bcopy _bwrite _mfree L39L40L41L43_wakeup L44L45L47L46_swtch L42L48_panic L32_wait"L51L52L53L55L56_bread _dpadd L50L54L57_sleep _fork"L59L60 L62L61L63@_newproc L64:L58L_sbreak"P_nseg L66~L65*L67L68L69_copyseg L70L71L72L73*sys2.ooX[H ,w  $ww  $ww C  >̰ 8\X7̵    77   &e ?.wDw @     & 2%ww   /E & 2%ww CBW-5 5 E%@   E  PE  w4w 0   0  w w   T̵#M t 5xtE5f5     xlvv5m  5` @e& ttwLw H   :E%@ " ,j  1 'R4,    ww      2 * wrw n hd`>@e& HBff e ),&$ e Nf e wwZ  wYYYYYYYHhYYYYYYYYYYYHYYY (YYXXYYYYYYIYYY(YY(Y(IYYYHY(YYYYYYYiiiiiihXi_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _file _inode _read"rsave _rdwr"$L1rretrn _write"L2 _getf L3L4HL5tL6l_readp L8_writep L9_readi L10_writei _dpadd _open"_uchar _namei L11_open1"2_creat"L13L12._maknode L20003"L16L17Z_access L18L19L20L21_itrunc _prele _openi _falloc L15_iput _close"L22_closef _seek"L23L24L25>L26^L27^L32L28L30vL31vL20008_link"L35@L10001_suser L36:L37 L38,_wdir _mknod"DL40nL41nL42L39_sslep"_spl7 L20009_dpcmp L45$L10002 L46_sleep _spl0 L43(sys3.ooXDZ`w xww ww  7 ww ğĭ 77ww b^wnw jğJĭ Z 77wJw F{$ ow0w , &w"w !    7ww   4 ,  Z E%@ X7    wrw n   E%@} @& p 7h ww     EE4P ww     Z E ww p  $&  wnw j   &   w@w <N @&e @& @&e tle@e5 !@ef e  ! f e  ww f   r w^w Z b5_   ^T5 P   "C e ;f  /2J 2& %22DE2   wnw j d n1  "eo  ,Qe  2  ww    E%`- wunlink -- igetyYyyYYyYyYhxyyYyyyyyyyyYyyyyyyiyYyy(HYyxyyyxyyyyyyyxyy((xyxxyyyyxyxyiyyyxyy_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _buf J_bfreeli _u _inode _file _bdevsw _nblkdev _cdevsw _nchrdev _getswit"rsave L1 rretrn _gtime"L2&_stime"*_suser L4P_wakeup L3P_setuid"TL10000lL6tL5t_getuid"xL7_setgid"L10001L9L8_getgid"L10_sync"_update L11_nice"L13L14L12_unlink"L17Z_uchar _namei L15_prele _iget L16D_panic L10002ZL18~_writei _iput _chdir"L19L20L21_access _chmod"L22&_owner L23 _chown"*L24hL25bL26^_fstat"l_getf L27_stat1"_stat"L28_iupdat _ldiv _bread _lrem L30(L31N_suword L32JL33PL34lL35h_brelse L29r_dup"vL36_ufalloc _smount"_getmdev"L37L38L39L40L42L43L44L41L45*L46_getblk _bcopy _sumount"L47 L48L49L10003L51L50L52L53L55L54L56VL57:L58Nsys4.oo5 x,w  !  ? |7 0ww !?-e1, ~ & wjw f!  ewBw >E7 E7w9   9  9 X 9 _u _proc _ssig"rsave L10000L2L1FL3Frretrn _kill"JL5TL6hL8pL7bL4L9_suser _psignal _times"L11L12_suword L10_profil"L13nami.ooX0lHw < %/& /  _*E%@ _(@& H /   VҐ  V / 7 7 r5 & 7f5 ^* N W- & 7V @e7 _(_(5 N  & & 5X@&E` %e  H V ZH`   N W- & _Z5 Df  _6 ww  Eww   !jwYHh(h((hHH_inode _u _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _buf J_bfreeli _namei"rsave L2_iget L3(L46L56L6ZL7FL1*L8d_iput L20000(_access L9xL10L11L12L13L14L15_ldiv L16L178L18_brelse L190L20(L20001(L22vL23N_bmap _bread _bcopy L24L26L27L28L29L30rretrn _schar"._uchar"F_fubyte L34ffio.ooXt"`w C      ww D̵Ee e  E& ~ ww ~D E7 yfWp A ft % ww DE7 y fWp A   ft %ww DC    t t0  wFw BtAA   w"w PA ww  !  ? ww  #!  04 4 7!7 e  wv ` ` &Hno file  H(YH9 (   x _u _file _bdevsw _nblkdev _cdevsw _nchrdev _inode _getf"rsave L2 L3(rretrn _closef".L5\_wakeup L6v_closei"~L4zL10001L10002L11L12L13L8L10003L20000_iput L7_openi"L10005L10006L17 L19&L21HL10007L18,L20001FL204L14H_access"LL23x_getfs L20002L24L22L25L26L27_owner"L29L28_suser"L31L30_ufalloc"L33L34 L36L32*L35_maxfp _falloc".L44L38>L20003L39BL40vL42pL43lL37L41p_printf clock.o5tw M 2  e 5#    &  e3  3ee@E%  N ^ f  6 VR%<W5S<> < 4 0-.,-$" 5   e7 @E%@e 7  i ww B #e e  tt_w.yyxyxxIIHHIIIIYYYiYihYHXXII)Iiyyx_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _u _proc _clock"rsave _display L2zL3L4*_spl5 L5zL6BL7\L8`L9zL10L12_incupc L13bL1bL14_spl1 L15_wakeup L16L17L18L20L19L21&L22b_issig L23N_psig L24Z_savfp _swtch rretrn _timeout"f_spl7 L26~L27L28L29L30L31L25unix_v4/usr/sys/ld0000644000175000017500000000004301026347440012504 0ustar aapaapld -x low.o mch.o conf.o lib1 lib2 unix_v4/usr/sys/file.h0000644000175000017500000000023501026347440013255 0ustar aapaapstruct file { char f_flag; char f_count; int f_inode; char *f_offset[2]; } file[NFILE]; /* flags */ #define FREAD 01 #define FWRITE 02 #define FPIPE 04 unix_v4/usr/sys/buf.h0000644000175000017500000000116401026347440013114 0ustar aapaapstruct buf { int b_flags; struct buf *b_forw; struct buf *b_back; struct buf *av_forw; struct buf *av_back; int b_dev; int b_wcount; char *b_addr; char *b_blkno; char b_error; char *b_resid; } buf[NBUF]; /* * forw and back are shared with "buf" struct. */ struct devtab { char d_active; char d_errcnt; struct buf *b_forw; struct buf *b_back; struct buf *d_actf; struct buf *d_actl; }; struct buf bfreelist; #define B_WRITE 0 #define B_READ 01 #define B_DONE 02 #define B_ERROR 04 #define B_BUSY 010 #define B_XMEM 060 #define B_WANTED 0100 #define B_RELOC 0200 #define B_ASYNC 0400 #define B_DELWRI 01000 unix_v4/usr/sys/reg.h0000644000175000017500000000021601026347440013112 0ustar aapaap#define R0 (0) #define R1 (-2) #define R2 (-9) #define R3 (-8) #define R4 (-7) #define R5 (-6) #define R6 (-3) #define R7 (1) #define RPS (2) unix_v4/usr/sys/conf.h0000644000175000017500000000044301026347440013264 0ustar aapaapstruct { char d_minor; char d_major; }; struct bdevsw { int (*d_open)(); int (*d_close)(); int (*d_strategy)(); int *d_tab; } bdevsw[]; int nblkdev; struct cdevsw { int (*d_open)(); int (*d_close)(); int (*d_read)(); int (*d_write)(); int (*d_sgtty)(); } cdevsw[]; int nchrdev; unix_v4/usr/sys/inode.h0000644000175000017500000000106101026347440013432 0ustar aapaapstruct inode { char i_flag; char i_count; int i_dev; int i_number; int i_mode; char i_nlink; char i_uid; char i_gid; char i_size0; char *i_size1; int i_addr[8]; int i_lastr; } inode[NINODE]; /* flags */ #define ILOCK 01 #define IUPD 02 #define IACC 04 #define IMOUNT 010 #define IWANT 020 #define ITEXT 040 /* modes */ #define IALLOC 0100000 #define IFMT 060000 #define IFDIR 040000 #define IFCHR 020000 #define IFBLK 060000 #define ILARG 010000 #define ISUID 04000 #define ISGID 02000 #define IREAD 0400 #define IWRITE 0200 #define IEXEC 0100 unix_v4/usr/sys/filsys.h0000644000175000017500000000027401026347440013652 0ustar aapaapstruct filsys { int s_isize; int s_fsize; int s_nfree; int s_free[100]; int s_ninode; int s_inode[100]; char s_flock; char s_ilock; char s_fmod; char s_ronly; int s_time[2]; }; unix_v4/usr/sys/ken/0000755000175000017500000000000001026347440012742 5ustar aapaapunix_v4/usr/sys/ken/trap.c0000644000175000017500000000415201026347440014056 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../proc.h" #include "../reg.h" #include "../text.h" #include "../seg.h" #define CSW 0177570 #define EBIT 1 #define UMODE 0170000 #define SETD 0170011 struct { int count; int (*call)(); } sysent[64]; char regloc[8] { R0, R1, R2, R3, R4, R5, R6, R7 }; trap(dev, sp, r1, nps, r0, pc, ps) char *sp; { register i, a; savfp(); u.u_ar0 = &r0; if(dev == 8) { psignal(u.u_procp, SIGFPT); if((ps&UMODE) == UMODE) goto err; return; } if(dev==1 && fuword(pc-2)==SETD && u.u_signal[SIGINS]==0) return; if((ps&UMODE) != UMODE) goto bad; if(dev==9 && sp<-u.u_ssize*64) { if(backup(&r0) == 0) if(!estabur(u.u_tsize, u.u_dsize, u.u_ssize+SINCR)) { u.u_ssize =+ SINCR; expand(u.u_procp->p_size+SINCR); a = u.u_procp->p_addr + u.u_procp->p_size; for(i=0; i= 100) psignal(u.u_procp, SIGSYS); err: if(issig()) psig(); if(u.u_error != 0) { ps =| EBIT; r0 = u.u_error; } u.u_procp->p_pri = PUSER + u.u_nice; if(u.u_dsleep++ > 15) { u.u_dsleep = 0; u.u_procp->p_pri++; swtch(); } return; bad: printf("ka6 = %o\n", KISA->r[6]); printf("aps = %o\n", &ps); for(a = CSW->r[0]; a == CSW->r[0]; ) idle(); panic("trap"); } trap1(f) int (*f)(); { savu(u.u_qsav); (*f)(); } nosys() { u.u_error = 100; } nullsys() { } unix_v4/usr/sys/ken/subr.c0000644000175000017500000000406201026347440014063 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../conf.h" #include "../inode.h" #include "../user.h" #include "../buf.h" #include "../systm.h" bmap(ip, bn) struct inode *ip; int bn; { register *bp, *bap, nb; int *nbp, d, i; d = ip->i_dev; if (bn & ~03777) { u.u_error = EFBIG; return(0); } if((ip->i_mode&ILARG) == 0) { /* * small file algorithm */ if((bn & ~7) != 0) { /* * bad part: * convert small to large */ if ((bp = alloc(d)) == NULL) return(0); bap = bp->b_addr; for(i=0; i<8; i++) { *bap++ = ip->i_addr[i]; ip->i_addr[i] = 0; } ip->i_addr[0] = bp->b_blkno; bdwrite(bp); ip->i_mode =| ILARG; goto large; } nb = ip->i_addr[bn]; if(nb == 0 && (bp = alloc(d)) != NULL) { bdwrite(bp); nb = bp->b_blkno; ip->i_addr[bn] = nb; ip->i_flag =| IUPD; } if (bn<7) rablock = ip->i_addr[bn+1]; else rablock = 0; return(nb); } /* * large file algorithm */ large: i = bn>>8; if((nb=ip->i_addr[i]) == 0) { ip->i_flag =| IUPD; if ((bp = alloc(d)) == NULL) return(0); nb = bp->b_blkno; ip->i_addr[i] = nb; } else bp = bread(d, nb); bap = bp->b_addr; i = bn & 0377; if((nb=bap[i]) == 0 && (nbp = alloc(d)) != NULL) { nb = nbp->b_blkno; bap[i] = nb; bdwrite(nbp); bdwrite(bp); } else brelse(bp); rablock = bap[i+1]; return(nb); } passc(c) char c; { if(u.u_segflg) *u.u_base = c; else if(subyte(u.u_base, c) < 0) { u.u_error = EFAULT; return(-1); } u.u_count--; if(++u.u_offset[1] == 0) u.u_offset[0]++; u.u_base++; return(u.u_count == 0? -1: 0); } cpass() { register c; if(u.u_count == 0) return(-1); if(u.u_segflg) c = *u.u_base; else if((c=fubyte(u.u_base)) < 0) { u.u_error = EFAULT; return(-1); } u.u_count--; if(++u.u_offset[1] == 0) u.u_offset[0]++; u.u_base++; return(c&0377); } nodev() { u.u_error = ENODEV; } nulldev() { } bcopy(from, to, count) int *from, *to; { register *a, *b, c; a = from; b = to; c = count; do *b++ = *a++; while(--c); } unix_v4/usr/sys/ken/sys1.c0000644000175000017500000001254001026347440014007 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../proc.h" #include "../text.h" #include "../buf.h" #include "../reg.h" #include "../inode.h" char regloc[8]; exec() { int ap, na, nc, *bp; int ts, ds; register c, *ip; register char *cp; extern uchar; /* * pick up file names * and check various modes * for execute permission */ ip = namei(&uchar, 0); if(ip == NULL) return; bp = getblk(NODEV); if(access(ip, IEXEC)) goto bad; /* * pack up arguments into * allocated disk buffer */ cp = bp->b_addr; na = 0; nc = 0; while(ap = fuword(u.u_arg[1])) { na++; if(ap == -1) goto bad; u.u_arg[1] =+ 2; for(;;) { c = fubyte(ap++); if(c == -1) goto bad; *cp++ = c; nc++; if(nc > 510) { u.u_error = E2BIG; goto bad; } if(c == 0) break; } } if((nc&1) != 0) { *cp++ = 0; nc++; } /* * read in first 8 bytes * of file for segment * sizes: * w0 = 407/410 (410 implies RO text) * w1 = text size * w2 = data size * w3 = bss size */ u.u_base = &u.u_arg[0]; u.u_count = 8; u.u_offset[1] = 0; u.u_offset[0] = 0; u.u_segflg = 1; readi(ip); u.u_segflg = 0; if(u.u_error) goto bad; if(u.u_arg[0] == 0407) { u.u_arg[2] =+ u.u_arg[1]; u.u_arg[1] = 0; } else if(u.u_arg[0] != 0410) { u.u_error = ENOEXEC; goto bad; } if(u.u_arg[1]!=0 && (ip->i_flag&ITEXT)==0 && ip->i_count!=1) { u.u_error = ETXTBSY; goto bad; } /* * find text and data sizes * try them out for possible * exceed of max sizes */ ts = ((u.u_arg[1]+63)>>6) & 01777; ds = ((u.u_arg[2]+u.u_arg[3]+63)>>6) & 01777; if(estabur(ts, ds, SSIZE)) goto bad; /* * allocate and clear core * at this point, committed * to the new image */ u.u_prof[3] = 0; xfree(); xalloc(ip); c = USIZE+ds+SSIZE; expand(USIZE); expand(c); while(--c >= USIZE) clearseg(u.u_procp->p_addr+c); /* * read in data segment */ estabur(0, ds, 0); u.u_base = 0; u.u_offset[1] = 020+u.u_arg[1]; u.u_count = u.u_arg[2]; readi(ip); /* * initialize stack segment */ u.u_tsize = ts; u.u_dsize = ds; u.u_ssize = SSIZE; estabur(u.u_tsize, u.u_dsize, u.u_ssize); cp = bp->b_addr; ap = -nc - na*2 - 4; u.u_ar0[R6] = ap; suword(ap, na); c = -nc; while(na--) { suword(ap=+2, c); do subyte(c++, *cp); while(*cp++); } suword(ap+2, -1); /* * set SUID/SGID protections */ if(ip->i_mode&ISUID) if(u.u_uid != 0) u.u_uid = ip->i_uid; if(ip->i_mode&ISGID) u.u_gid = ip->i_gid; /* * clear sigs, regs and return */ c = ip; for(ip = &u.u_signal[0]; ip < &u.u_signal[NSIG]; ip++) if((*ip & 1) == 0) *ip = 0; for(cp = ®loc[0]; cp < ®loc[6];) u.u_ar0[*cp++] = 0; u.u_ar0[R7] = 0; for(ip = &u.u_fsav[0]; ip < &u.u_fsav[25];) *ip++ = 0; ip = c; bad: iput(ip); brelse(bp); } rexit() { u.u_arg[0] = u.u_ar0[R0] << 8; exit(); } exit() { register int *q, a; register struct proc *p; for(q = &u.u_signal[0]; q < &u.u_signal[NSIG];) *q++ = 1; for(q = &u.u_ofile[0]; q < &u.u_ofile[NOFILE]; q++) if(a = *q) { *q = NULL; closef(a); } iput(u.u_cdir); xfree(); a = malloc(swapmap, 8); p = getblk(swapdev, a); bcopy(&u, p->b_addr, 256); bwrite(p); q = u.u_procp; mfree(coremap, q->p_size, q->p_addr); q->p_addr = a; q->p_stat = SZOMB; loop: for(p = &proc[0]; p < &proc[NPROC]; p++) if(q->p_ppid == p->p_pid) { wakeup(&proc[1]); wakeup(p); for(p = &proc[0]; p < &proc[NPROC]; p++) if(q->p_pid == p->p_ppid) p->p_ppid = 1; swtch(); /* no return */ } if(q->p_ppid == 1) panic("no init proc"); q->p_ppid = 1; goto loop; } wait() { register f, *bp; register struct proc *p; f = 0; loop: for(p = &proc[0]; p < &proc[NPROC]; p++) if(p->p_ppid == u.u_procp->p_pid) { f++; if(p->p_stat == SZOMB) { u.u_ar0[R0] = p->p_pid; bp = bread(swapdev, f=p->p_addr); mfree(swapmap, 8, f); p->p_stat = NULL; p->p_pid = 0; p->p_ppid = 0; p->p_sig = 0; p->p_ttyp = 0; p->p_flag = 0; p = bp->b_addr; u.u_cstime[0] =+ p->u_cstime[0]; dpadd(u.u_cstime, p->u_cstime[1]); dpadd(u.u_cstime, p->u_stime); u.u_cutime[0] =+ p->u_cutime[0]; dpadd(u.u_cutime, p->u_cutime[1]); dpadd(u.u_cutime, p->u_utime); u.u_ar0[R1] = p->u_arg[0]; brelse(bp); return; } } if(f) { sleep(u.u_procp, PWAIT); goto loop; } u.u_error = ECHILD; } fork() { register struct proc *p1, *p2; p1 = u.u_procp; for(p2 = &proc[0]; p2 < &proc[NPROC]; p2++) if(p2->p_stat == NULL) goto found; u.u_error = EAGAIN; goto out; found: if(newproc()) { u.u_ar0[R0] = p1->p_pid; u.u_cstime[0] = 0; u.u_cstime[1] = 0; u.u_stime = 0; u.u_cutime[0] = 0; u.u_cutime[1] = 0; u.u_utime = 0; return; } u.u_ar0[R0] = p2->p_pid; out: u.u_ar0[R7] =+ 2; } sbreak() { register a, n, d; int i; /* * set n to new data size * set d to new-old * set n to new total size */ n = (((u.u_arg[0]+63)>>6) & 01777) - nseg(u.u_tsize)*128; if(n < 0) n = 0; d = n - u.u_dsize; n =+ USIZE+u.u_ssize; if(estabur(u.u_tsize, u.u_dsize+d, u.u_ssize)) return; u.u_dsize =+ d; if(d > 0) goto bigger; a = u.u_procp->p_addr + n - u.u_ssize; i = n; n = u.u_ssize; while(n--) { copyseg(a-d, a); a++; } expand(i); return; bigger: expand(n); a = u.u_procp->p_addr + n; n = u.u_ssize; while(n--) { a--; copyseg(a-d, a); } while(d--) clearseg(--a); } unix_v4/usr/sys/ken/sys2.c0000644000175000017500000000656201026347440014017 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../reg.h" #include "../file.h" #include "../inode.h" read() { rdwr(FREAD); } write() { rdwr(FWRITE); } rdwr(mode) { register *fp, m; m = mode; fp = getf(u.u_ar0[R0]); if(fp == NULL) return; if((fp->f_flag&m) == 0) { u.u_error = EBADF; return; } u.u_base = u.u_arg[0]; u.u_count = u.u_arg[1]; u.u_segflg = 0; if(fp->f_flag&FPIPE) { if(m==FREAD) readp(fp); else writep(fp); } else { u.u_offset[1] = fp->f_offset[1]; u.u_offset[0] = fp->f_offset[0]; if(m==FREAD) readi(fp->f_inode); else writei(fp->f_inode); dpadd(fp->f_offset, u.u_arg[1]-u.u_count); } u.u_ar0[R0] = u.u_arg[1]-u.u_count; } open() { register *ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; u.u_arg[1]++; open1(ip, u.u_arg[1], 0); } creat() { register *ip; extern uchar; ip = namei(&uchar, 1); if(ip == NULL) { if(u.u_error) return; ip = maknode(u.u_arg[1]&07777); open1(ip, FWRITE, 2); } else open1(ip, FWRITE, 1); } open1(ip, mode, trf) int *ip; { register struct file *fp; register *rip, m; rip = ip; m = mode; if(trf != 2) { if(m&FREAD) access(rip, IREAD); if(m&FWRITE) { access(rip, IWRITE); if((rip->i_mode&IFMT) == IFDIR) u.u_error = EISDIR; } } if(u.u_error) goto out; if(trf) itrunc(rip); prele(rip); openi(rip, m&FWRITE); if(u.u_error) goto out; if ((fp = falloc()) == NULL) goto out; fp->f_flag = m&(FREAD|FWRITE); fp->f_inode = rip; return; out: iput(rip); } close() { register *fp; fp = getf(u.u_ar0[R0]); if(fp == NULL) return; u.u_ofile[u.u_ar0[R0]] = NULL; closef(fp); } seek() { int n[2]; register *fp, t; fp = getf(u.u_ar0[R0]); if(fp == NULL) return; if(fp->f_flag&FPIPE) { u.u_error = ESPIPE; return; } t = u.u_arg[1]; if(t > 2) { n[1] = u.u_arg[0]<<9; n[0] = (u.u_arg[0]>>7) & 0777; } else { n[1] = u.u_arg[0]; n[0] = 0; if(t!=0 && t!=3 && n[1]<0) n[0] = -1; } switch(t) { case 1: case 4: n[0] =+ fp->f_offset[0]; dpadd(n, fp->f_offset[1]); break; default: n[0] =+ fp->f_inode->i_size0; dpadd(n, fp->f_inode->i_size1); case 0: case 3: ; } fp->f_offset[1] = n[1]; fp->f_offset[0] = n[0]; } link() { register *ip, *xp; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; if((ip->i_mode&IFMT)==IFDIR && !suser()) goto out; /* * NOTE: * the ip should not be unlocked here, BUT * if its not, the following namei may hang */ ip->i_flag =& ~ILOCK; u.u_dirp = u.u_arg[1]; xp = namei(&uchar, 1); if(xp != NULL) { u.u_error = EEXIST; iput(xp); } if(u.u_error) goto out; if(u.u_pdir->i_dev != ip->i_dev) { iput(u.u_pdir); u.u_error = EXDEV; goto out; } wdir(ip); ip->i_nlink++; ip->i_flag =| IUPD; out: iput(ip); } mknod() { register *ip; extern uchar; if(suser()) { ip = namei(&uchar, 1); if(ip != NULL) { u.u_error = EEXIST; goto out; } } if(u.u_error) return; ip = maknode(u.u_arg[1]); ip->i_addr[0] = u.u_arg[2]; out: iput(ip); } sslep() { char *d[2]; spl7(); d[0] = time[0]; d[1] = time[1]; dpadd(d, u.u_ar0[R0]); while(dpcmp(d[0], d[1], time[0], time[1]) > 0) { if(dpcmp(tout[0], tout[1], time[0], time[1]) <= 0 || dpcmp(tout[0], tout[1], d[0], d[1]) > 0) { tout[0] = d[0]; tout[1] = d[1]; } sleep(tout, PSLEP); } spl0(); } unix_v4/usr/sys/ken/nami.c0000644000175000017500000000511101026347440014030 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../inode.h" #include "../user.h" #include "../systm.h" #include "../buf.h" namei(func, flag) int (*func)(); int flag; /* * func = function called to get name * &uchar if name is in user space * &schar if name is in system space * flag = 0 if name is saught * 1 if name is to be created * 2 if name is to be deleted * return is incremented locked inode. * NULL if name not found */ { register struct inode *dp; register c; register char *cp; int eo, *bp; /* * start from indicated * directory */ dp = u.u_cdir; if((c=(*func)()) == '/') dp = rootdir; iget(dp->i_dev, dp->i_number); while(c == '/') c = (*func)(); cloop: /* * here dp contains pointer * to last component matched. */ if(u.u_error) goto out; if(c == '\0') return(dp); /* * if there is another component, * dp must be a directory and * must have x permission */ if((dp->i_mode&IFMT) != IFDIR) { u.u_error = ENOTDIR; goto out; } if(access(dp, IEXEC)) goto out; /* * gather up name into * users' dir buffer */ cp = &u.u_dbuf[0]; while(c!='/' && c!='\0' && u.u_error==0) { if(cp < &u.u_dbuf[DIRSIZ]) *cp++ = c; c = (*func)(); } while(cp < &u.u_dbuf[DIRSIZ]) *cp++ = '\0'; while(c == '/') c = (*func)(); if(u.u_error) goto out; /* * search the directory */ u.u_offset[1] = 0; u.u_offset[0] = 0; u.u_segflg = 1; eo = 0; u.u_count = ldiv(dp->i_size1, DIRSIZ+2); bp = NULL; eloop: if(u.u_count == 0) { if(bp != NULL) brelse(bp); if(flag==1 && c=='\0') { if(access(dp, IWRITE)) goto out; u.u_pdir = dp; if(eo) u.u_offset[1] = eo-DIRSIZ-2; else dp->i_flag =| IUPD; return(NULL); } u.u_error = ENOENT; goto out; } if((u.u_offset[1]&0777) == 0) { if(bp != NULL) brelse(bp); bp = bread(dp->i_dev, bmap(dp, ldiv(u.u_offset[1], 512))); } bcopy(bp->b_addr+(u.u_offset[1]&0777), &u.u_dent, (DIRSIZ+2)/2); u.u_offset[1] =+ DIRSIZ+2; u.u_count--; if(u.u_dent.u_ino == 0) { if(eo == 0) eo = u.u_offset[1]; goto eloop; } for(cp = &u.u_dbuf[0]; cp < &u.u_dbuf[DIRSIZ]; cp++) if(*cp != cp[u.u_dent.u_name - u.u_dbuf]) goto eloop; if(bp != NULL) brelse(bp); if(flag==2 && c=='\0') { if(access(dp, IWRITE)) goto out; return(dp); } bp = dp->i_dev; iput(dp); dp = iget(bp, u.u_dent.u_ino); if(dp == NULL) return(NULL); goto cloop; out: iput(dp); return(NULL); } schar() { return(*u.u_dirp++ & 0377); } uchar() { register c; c = fubyte(u.u_dirp++); if(c == -1) u.u_error = EFAULT; return(c); } unix_v4/usr/sys/ken/slp.c0000644000175000017500000001161001026347440013703 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../user.h" #include "../proc.h" #include "../text.h" #include "../systm.h" #include "../file.h" #include "../inode.h" #include "../buf.h" #define PS 0177776 struct { int integ; }; sleep(chan, pri) { register *rp, s; u.u_dsleep = 0; s = PS->integ; rp = u.u_procp; if(pri >= 0) { if(issig()) goto psig; rp->p_wchan = chan; rp->p_stat = SWAIT; rp->p_pri = pri; spl0(); if(runin != 0) { runin = 0; wakeup(&runin); } swtch(); if(issig()) { psig: aretu(u.u_qsav); return; } } else { rp->p_wchan = chan; rp->p_stat = SSLEEP; rp->p_pri = pri; spl0(); swtch(); } PS->integ = s; } wakeup(chan) { register struct proc *p; register n, c; loop: c = chan; n = 0; for(p = &proc[0]; p < &proc[NPROC]; p++) if(p->p_wchan == c) { if(runout!=0 && (p->p_flag&SLOAD)==0) { runout = 0; n++; } p->p_wchan = 0; p->p_stat = SRUN; runrun++; } if(n) { chan = &runout; goto loop; } } sched() { struct proc *p1; register struct proc *rp; register a, n; /* * find user to swap in * of users ready, select one out longest */ goto loop; sloop: runin++; sleep(&runin, PSWP); loop: spl6(); n = -1; for(rp = &proc[0]; rp < &proc[NPROC]; rp++) if(rp->p_stat==SRUN && (rp->p_flag&SLOAD)==0 && rp->p_time > n) { p1 = rp; n = rp->p_time; } if(n == -1) { runout++; sleep(&runout, PSWP); goto loop; } /* * see if there is core for that process */ spl0(); rp = p1; a = rp->p_size; if((rp=rp->p_textp) != NULL) if(rp->x_ccount == 0) a =+ rp->x_size; if((a=malloc(coremap, a)) != NULL) goto found2; /* * none found, * look around for easy core */ spl6(); for(rp = &proc[0]; rp < &proc[NPROC]; rp++) if((rp->p_flag&(SSYS|SLOCK|SLOAD))==SLOAD && rp->p_stat == SWAIT) goto found1; /* * no easy core, * if this process is deserving, * look around for * oldest process in core */ if(n < 3) goto sloop; n = -1; for(rp = &proc[0]; rp < &proc[NPROC]; rp++) if((rp->p_flag&(SSYS|SLOCK|SLOAD))==SLOAD && (rp->p_stat==SRUN || rp->p_stat==SSLEEP) && rp->p_time > n) { p1 = rp; n = rp->p_time; } if(n < 2) goto sloop; rp = p1; /* * swap user out */ found1: spl0(); rp->p_flag =& ~SLOAD; xswap(rp, 1, 0); goto loop; /* * swap user in */ found2: if((rp=p1->p_textp) != NULL) { if(rp->x_ccount == 0) { if(swap(rp->x_daddr, a, rp->x_size, B_READ)) goto swaper; rp->x_caddr = a; a =+ rp->x_size; } rp->x_ccount++; } rp = p1; if(swap(rp->p_addr, a, rp->p_size, B_READ)) goto swaper; mfree(swapmap, (rp->p_size+7)/8, rp->p_addr); rp->p_addr = a; rp->p_flag =| SLOAD; rp->p_time = 0; goto loop; swaper: panic("swap error"); } swtch() { static int *p; register i, n; register struct proc *rp; if(p == NULL) p = &proc[0]; savu(u.u_rsav); retu(proc[0].p_addr); loop: rp = p; p = NULL; n = 127; for(i=0; i= &proc[NPROC]) rp = &proc[0]; if(rp->p_stat==SRUN && (rp->p_flag&SLOAD)==SLOAD) { if(rp->p_pri < n) { p = rp; n = rp->p_pri; } } } if(p == NULL) { p = rp; idle(); goto loop; } rp = p; retu(rp->p_addr); sureg(); if(rp->p_flag&SSWAP) { rp->p_flag =& ~SSWAP; aretu(u.u_ssav); } return(1); } newproc() { int a1, a2; struct proc *p, *up; register struct proc *rpp; register *rip, n; for(rpp = &proc[0]; rpp < &proc[NPROC]; rpp++) if(rpp->p_stat == NULL) goto found; panic("no procs"); found: /* * make proc entry for new proc */ p = rpp; rip = u.u_procp; up = rip; rpp->p_stat = SRUN; rpp->p_flag = SLOAD; rpp->p_ttyp = rip->p_ttyp; rpp->p_textp = rip->p_textp; rpp->p_pid = ++mpid; rpp->p_ppid = rip->p_pid; rpp->p_time = 0; /* * make duplicate entries * where needed */ for(rip = &u.u_ofile[0]; rip < &u.u_ofile[NOFILE];) if((rpp = *rip++) != NULL) rpp->f_count++; if((rpp=up->p_textp) != NULL) { rpp->x_count++; rpp->x_ccount++; } u.u_cdir->i_count++; /* * swap out old process * to make image of new proc */ savu(u.u_rsav); rpp = p; u.u_procp = rpp; rip = up; n = rip->p_size; a1 = rip->p_addr; rpp->p_size = n; a2 = malloc(coremap, n); if(a2 == NULL) { rip->p_stat = SIDL; rpp->p_addr = a1; savu(u.u_ssav); xswap(rpp, 0, 0); rpp->p_flag =| SSWAP; rip->p_stat = SRUN; } else { rpp->p_addr = a2; while(n--) copyseg(a1++, a2++); } u.u_procp = rip; return(0); } expand(newsize) { int i, n; register *p, a1, a2; p = u.u_procp; n = p->p_size; p->p_size = newsize; a1 = p->p_addr; if(n >= newsize) { mfree(coremap, n-newsize, a1+newsize); return; } savu(u.u_rsav); a2 = malloc(coremap, newsize); if(a2 == NULL) { savu(u.u_ssav); xswap(p, 1, n); p->p_flag =| SSWAP; swtch(); /* no return */ } p->p_addr = a2; for(i=0; ip_addr); sureg(); } unix_v4/usr/sys/ken/rdwri.c0000644000175000017500000000515401026347440014242 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../inode.h" #include "../user.h" #include "../buf.h" #include "../conf.h" #include "../systm.h" readi(aip) struct inode *aip; { int *bp; int lbn, bn, on; register dn, n; register struct inode *ip; ip = aip; if(u.u_count == 0) return; ip->i_flag =| IACC; if((ip->i_mode&IFMT) == IFCHR) { (*cdevsw[ip->i_addr[0].d_major].d_read)(ip->i_addr[0]); return; } do { lbn = bn = lshift(u.u_offset, -9); on = u.u_offset[1] & 0777; n = min(512-on, u.u_count); if((ip->i_mode&IFMT) != IFBLK) { dn = dpcmp(ip->i_size0, ip->i_size1, u.u_offset[0], u.u_offset[1]); if(dn <= 0) return; n = min(n, dn); if ((bn = bmap(ip, lbn)) == 0) return; dn = ip->i_dev; } else { dn = ip->i_addr[0]; rablock = bn+1; } if (ip->i_lastr+1 == lbn) bp = breada(dn, bn, rablock); else bp = bread(dn, bn); ip->i_lastr = lbn; iomove(bp, on, n, B_READ); brelse(bp); } while(u.u_error==0 && u.u_count!=0); } writei(aip) struct inode *aip; { int *bp; int n, on; register dn, bn; register struct inode *ip; ip = aip; ip->i_flag =| IACC|IUPD; if((ip->i_mode&IFMT) == IFCHR) { (*cdevsw[ip->i_addr[0].d_major].d_write)(ip->i_addr[0]); return; } if (u.u_count == 0) return; do { bn = lshift(u.u_offset, -9); on = u.u_offset[1] & 0777; n = min(512-on, u.u_count); if((ip->i_mode&IFMT) != IFBLK) { if ((bn = bmap(ip, bn)) == 0) return; dn = ip->i_dev; } else dn = ip->i_addr[0]; if(n == 512) bp = getblk(dn, bn); else bp = bread(dn, bn); iomove(bp, on, n, B_WRITE); if(u.u_error != 0) brelse(bp); else if ((u.u_offset[1]&0777)==0) bawrite(bp); else bdwrite(bp); if(dpcmp(ip->i_size0, ip->i_size1, u.u_offset[0], u.u_offset[1]) < 0 && (ip->i_mode&(IFBLK&IFCHR)) == 0) { ip->i_size0 = u.u_offset[0]; ip->i_size1 = u.u_offset[1]; } ip->i_flag =| IUPD; } while(u.u_error==0 && u.u_count!=0); } max(a, b) char *a, *b; { if(a > b) return(a); return(b); } min(a, b) char *a, *b; { if(a < b) return(a); return(b); } iomove(bp, o, an, flag) struct buf *bp; { register char *cp; register int n, t; n = an; cp = bp->b_addr + o; if(u.u_segflg==0 && ((n | cp | u.u_base)&01)==0) { if (flag==B_WRITE) cp = copyin(u.u_base, cp, n); else cp = copyout(cp, u.u_base, n); if (cp) { u.u_error = EFAULT; return; } u.u_base =+ n; dpadd(u.u_offset, n); u.u_count =- n; return; } if (flag==B_WRITE) { while(n--) { if ((t = cpass()) < 0) return; *cp++ = t; } } else while (n--) if(passc(*cp++) < 0) return; } unix_v4/usr/sys/ken/prf.c0000644000175000017500000000215601026347440013701 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../seg.h" #define KL 0177560 struct { int rsr; int rbr; int xsr; int xbr; int csw; }; char *panicstr; int kisa6; printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc) char fmt[]; { register char *s; register *adx, c; adx = &x1; loop: while((c = *fmt++) != '%') { if(c == '\0') return; putchar(c); } switch(c = *fmt++) { case 'd': if(*adx < 0) { putchar('-'); *adx = -*adx; } case 'l': case 'o': printn(*adx, c=='o'? 8: 10); break; case 'c': putchar(*adx); break; case 's': s = *adx; while(c = *s++) putchar(c); } adx++; goto loop; } printn(n, b) { register a; if(a = ldiv(n, b)) printn(a, b); putchar(lrem(n, b) + '0'); } putchar(c) { register rc, s; rc = c; if(KL->csw == 0) return; while((KL->xsr&0200) == 0); if(rc == 0) return; s = KL->xsr; KL->xsr = 0; KL->xbr = rc; if(rc == '\n') { putchar('\r'); putchar(0177); putchar(0177); } putchar(0); KL->xsr = s; } panic(s) char *s; { panicstr = s; kisa6 = KISA->r[6]; update(); printf("panic: %s\n", s); for(;;) idle(); } unix_v4/usr/sys/ken/fio.c0000644000175000017500000000447201026347440013672 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../user.h" #include "../filsys.h" #include "../file.h" #include "../conf.h" #include "../inode.h" #include "../reg.h" getf(f) { register *fp, rf; rf = f; if(rf<0 || rf>=NOFILE) goto bad; fp = u.u_ofile[rf]; if(fp == NULL) { bad: u.u_error = EBADF; fp = NULL; } return(fp); } closef(fp) int *fp; { register *rfp, *ip; rfp = fp; if(rfp->f_flag&FPIPE) { ip = rfp->f_inode; ip->i_mode =& ~(IREAD|IWRITE); wakeup(ip+1); wakeup(ip+2); } if(rfp->f_count <= 1) closei(rfp->f_inode, rfp->f_flag&FWRITE); rfp->f_count--; } closei(ip, rw) int *ip; { register *rip; register dev, maj; rip = ip; dev = rip->i_addr[0]; maj = rip->i_addr[0].d_major; if(rip->i_count <= 1) switch(rip->i_mode&IFMT) { case IFCHR: (*cdevsw[maj].d_close)(dev, rw); break; case IFBLK: (*bdevsw[maj].d_close)(dev, rw); } iput(rip); } openi(ip, rw) int *ip; { register *rip; register dev, maj; rip = ip; dev = rip->i_addr[0]; maj = rip->i_addr[0].d_major; switch(rip->i_mode&IFMT) { case IFCHR: if(maj >= nchrdev) goto bad; (*cdevsw[maj].d_open)(dev, rw); break; case IFBLK: if(maj >= nblkdev) { bad: u.u_error = ENXIO; return; } (*bdevsw[maj].d_open)(dev, rw); } } access(ip, mode) int *ip; { register *rip, m; rip = ip; m = mode; if(m == IWRITE && getfs(ip->i_dev)->s_ronly != 0) { u.u_error = EROFS; return(1); } if(u.u_uid == 0) return(0); if(u.u_uid != rip->i_uid) { m =>> 3; if(u.u_gid != rip->i_gid) m =>> 3; } if((rip->i_mode&m) != 0) return(0); u.u_error = EACCES; return(1); } owner(ip) int *ip; { if(u.u_uid == ip->i_uid) return(1); return(suser()); } suser() { if(u.u_uid == 0) return(1); u.u_error = EPERM; return(0); } ufalloc() { register i; for (i=0; if_count==0) { u.u_ofile[i] = fp; fp->f_count++; fp->f_offset[0] = 0; fp->f_offset[1] = 0; if (fp>maxfp) maxfp = fp; return(fp); } printf("no file\n"); u.u_error = ENFILE; return(NULL); } unix_v4/usr/sys/ken/sys3.c0000644000175000017500000001060201026347440014006 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../reg.h" #include "../buf.h" #include "../filsys.h" #include "../user.h" #include "../inode.h" #include "../file.h" #include "../conf.h" #define CSW 0177570 struct { int csw; }; getswit() { u.u_ar0[R0] = CSW->csw; } gtime() { u.u_ar0[R0] = time[0]; u.u_ar0[R1] = time[1]; } stime() { if(suser()) { time[0] = u.u_ar0[R0]; time[1] = u.u_ar0[R1]; wakeup(tout); } } setuid() { register uid; uid = u.u_ar0[R0].lobyte; if(u.u_ruid == uid.lobyte || suser()) { u.u_uid = uid; u.u_ruid = uid; } } getuid() { u.u_ar0[R0].lobyte = u.u_ruid; u.u_ar0[R0].hibyte = u.u_uid; } setgid() { register gid; gid = u.u_ar0[R0].lobyte; if(u.u_rgid == gid.lobyte || suser()) { u.u_gid = gid; u.u_rgid = gid; } } getgid() { u.u_ar0[R0].lobyte = u.u_rgid; u.u_ar0[R0].hibyte = u.u_gid; } sync() { update(); } nice() { register n; n = u.u_ar0[R0]; if(n > 20) n = 20; if(n < 0 && !suser()) n = 0; u.u_nice = n; } unlink() { register *ip, *pp; extern uchar; pp = namei(&uchar, 2); if(pp == NULL) return; prele(pp); ip = iget(pp->i_dev, u.u_dent.u_ino); if(ip == NULL) panic("unlink -- iget"); if((ip->i_mode&IFMT)==IFDIR && !suser()) goto out; u.u_offset[1] =- DIRSIZ+2; u.u_base = &u.u_dent; u.u_count = DIRSIZ+2; u.u_dent.u_ino = 0; writei(pp); ip->i_nlink--; ip->i_flag =| IUPD; out: iput(pp); iput(ip); } chdir() { register *ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; if((ip->i_mode&IFMT) != IFDIR) { u.u_error = ENOTDIR; bad: iput(ip); return; } if(access(ip, IEXEC)) goto bad; iput(u.u_cdir); u.u_cdir = ip; prele(ip); } chmod() { register *ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; if(owner(ip)) { ip->i_mode =& ~07777; ip->i_mode =| u.u_arg[1]&07777; ip->i_flag =| IUPD; } iput(ip); } chown() { register *ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; if(owner(ip)) { ip->i_uid = u.u_arg[1]; if(u.u_uid != 0) ip->i_mode =& ~ISUID; ip->i_flag =| IUPD; } iput(ip); } fstat() { register *fp; fp = getf(u.u_ar0[R0]); if(fp == NULL) return; stat1(fp->f_inode, u.u_arg[0]); } stat() { register ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; stat1(ip, u.u_arg[1]); iput(ip); } stat1(ip, ub) int *ip; { register i, *bp, *cp; iupdat(ip); bp = bread(ip->i_dev, ldiv(ip->i_number+31, 16)); cp = bp->b_addr + 32*lrem(ip->i_number+31, 16) + 24; ip = &(ip->i_dev); for(i=0; i<14; i++) { suword(ub, *ip++); ub =+ 2; } for(i=0; i<4; i++) { suword(ub, *cp++); ub =+ 2; } brelse(bp); } dup() { register i, *fp; fp = getf(u.u_ar0[R0]); if(fp == NULL) return; if ((i = ufalloc()) < 0) return; u.u_ofile[i] = fp; fp->f_count++; } smount() { int d; register *ip; register struct mount *mp, *smp; extern uchar; d = getmdev(); if(u.u_error) return; u.u_dirp = u.u_arg[1]; ip = namei(&uchar, 0); if(ip == NULL) return; if(ip->i_count!=1 || (ip->i_mode&(IFBLK&IFCHR))!=0) goto out; smp = NULL; for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) { if(mp->m_bufp != NULL) { if(d == mp->m_dev) goto out; } else if(smp == NULL) smp = mp; } if(smp == NULL) goto out; mp = bread(d, 1); if(u.u_error) { brelse(mp); goto out1; } smp->m_inodp = ip; smp->m_dev = d; smp->m_bufp = getblk(NODEV); bcopy(mp->b_addr, smp->m_bufp->b_addr, 256); smp = smp->m_bufp->b_addr; smp->s_ilock = 0; smp->s_flock = 0; smp->s_ronly = u.u_arg[2] & 1; brelse(mp); ip->i_flag =| IMOUNT; prele(ip); return; out: u.u_error = EBUSY; out1: iput(ip); } sumount() { register d; register struct inode *ip; register struct mount *mp; update(); d = getmdev(); if(u.u_error) return; for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) if(mp->m_bufp!=NULL && d==mp->m_dev) goto found; u.u_error = EINVAL; return; found: for(ip = &inode[0]; ip < &inode[NINODE]; ip++) if(ip->i_number!=0 && d==ip->i_dev) { u.u_error = EBUSY; return; } ip = mp->m_inodp; ip->i_flag =& ~IMOUNT; iput(ip); ip = mp->m_bufp; mp->m_bufp = NULL; brelse(ip); } getmdev() { register d, *ip; extern uchar; ip = namei(&uchar, 0); if(ip == NULL) return; if((ip->i_mode&IFMT) != IFBLK) u.u_error = ENOTBLK; d = ip->i_addr[0]; if(ip->i_addr[0].d_major >= nblkdev) u.u_error = ENXIO; iput(ip); return(d); } unix_v4/usr/sys/ken/clock.c0000644000175000017500000000415701026347440014210 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../proc.h" #define UMODE 0170000 #define CSW 0177570 #define PS 0177776 struct { int integ; }; clock(dev, sp, r1, nps, r0, pc, ps) { register struct callo *p1, *p2; register struct proc *pp; /* * restart clock */ *lks = 0115; /* * display register */ display(); /* * callouts * if none, just return * else update first non-zero time */ if(callout[0].c_func == 0) goto out; p2 = &callout[0]; while(p2->c_time<=0 && p2->c_func!=0) p2++; p2->c_time--; /* * if ps is high, just return */ if((ps&0340) != 0) goto out; /* * callout */ spl5(); if(callout[0].c_time <= 0) { p1 = &callout[0]; while(p1->c_func != 0 && p1->c_time <= 0) { (*p1->c_func)(p1->c_arg); p1++; } p2 = &callout[0]; while(p2->c_func = p1->c_func) { p2->c_time = p1->c_time; p2->c_arg = p1->c_arg; p1++; p2++; } } /* * lightning bolt time-out * and time of day */ out: if((ps&UMODE) == UMODE) { u.u_utime++; if(u.u_prof[3]) incupc(pc, u.u_prof); } else u.u_stime++; if(++lbolt >= 60) { if((ps&0340) != 0) return; lbolt =- 60; if(++time[1] == 0) ++time[0]; spl1(); if(time[1]==tout[1] && time[0]==tout[0]) wakeup(tout); if((time[1]&03) == 0) wakeup(&lbolt); for(pp = &proc[0]; pp < &proc[NPROC]; pp++) if(pp->p_time != 127) pp->p_time++; if(runin!=0) { runin = 0; wakeup(&runin); } if((ps&UMODE) == UMODE) { u.u_ar0 = &r0; pp = u.u_procp; if(issig()) psig(); if(pp->p_pri < 105) pp->p_pri++; savfp(); swtch(); } } } timeout(fun, arg, tim) { register struct callo *p1, *p2; register t; int s; t = tim; s = PS->integ; p1 = &callout[0]; spl7(); while(p1->c_func != 0 && p1->c_time <= t) { t =- p1->c_time; p1++; } p1->c_time =- t; p2 = p1; while(p2->c_func != 0) p2++; while(p2 >= p1) { (p2+1)->c_time = p2->c_time; (p2+1)->c_func = p2->c_func; (p2+1)->c_arg = p2->c_arg; p2--; } p1->c_time = t; p1->c_func = fun; p1->c_arg = arg; PS->integ = s; } unix_v4/usr/sys/ken/sysent.c0000644000175000017500000000364501026347440014443 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ int sysent[] { 0, &nullsys, /* 0 = indir */ 0, &rexit, /* 1 = exit */ 0, &fork, /* 2 = fork */ 2, &read, /* 3 = read */ 2, &write, /* 4 = write */ 2, &open, /* 5 = open */ 0, &close, /* 6 = close */ 0, &wait, /* 7 = wait */ 2, &creat, /* 8 = creat */ 2, &link, /* 9 = link */ 1, &unlink, /* 10 = unlink */ 2, &exec, /* 11 = exec */ 1, &chdir, /* 12 = chdir */ 0, >ime, /* 13 = time */ 3, &mknod, /* 14 = mknod */ 2, &chmod, /* 15 = chmod */ 2, &chown, /* 16 = chown */ 1, &sbreak, /* 17 = break */ 2, &stat, /* 18 = stat */ 2, &seek, /* 19 = seek */ 0, &nosys, /* 20 = x */ 3, &smount, /* 21 = mount */ 1, &sumount, /* 22 = umount */ 0, &setuid, /* 23 = setuid */ 0, &getuid, /* 24 = getuid */ 0, &stime, /* 25 = stime */ 0, &nosys, /* 26 = x */ 0, &nosys, /* 27 = x */ 1, &fstat, /* 28 = fstat */ 0, &nosys, /* 29 = x */ 1, &nullsys, /* 30 = smdate */ 1, &stty, /* 31 = stty */ 1, >ty, /* 32 = gtty */ 0, &nosys, /* 33 = x */ 0, &nice, /* 34 = nice */ 0, &sslep, /* 35 = sleep */ 0, &sync, /* 36 = sync */ 1, &kill, /* 37 = kill */ 0, &getswit, /* 38 = switch */ 0, &nosys, /* 39 = x */ 0, &nosys, /* 40 = x */ 0, &dup, /* 41 = dup */ 0, &pipe, /* 42 = pipe */ 1, ×, /* 43 = times */ 4, &profil, /* 44 = prof */ 0, &nosys, /* 45 = tiu */ 0, &setgid, /* 46 = setgid */ 0, &getgid, /* 47 = getgid */ 2, &ssig, /* 48 = sig */ 0, &nosys, /* 49 = x */ 0, &nosys, /* 50 = x */ 0, &nosys, /* 51 = x */ 0, &nosys, /* 52 = x */ 0, &nosys, /* 53 = x */ 0, &nosys, /* 54 = x */ 0, &nosys, /* 55 = x */ 0, &nosys, /* 56 = x */ 0, &nosys, /* 57 = x */ 0, &nosys, /* 58 = x */ 0, &nosys, /* 59 = x */ 0, &nosys, /* 60 = x */ 0, &nosys, /* 61 = x */ 0, &nosys, /* 62 = x */ 0, &nosys /* 63 = x */ }; unix_v4/usr/sys/ken/sig.c0000644000175000017500000000310201026347440013664 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../proc.h" #include "../inode.h" #include "../reg.h" signal(tp, sig) { register struct proc *p; for(p = &proc[0]; p < &proc[NPROC]; p++) if(p->p_ttyp==tp) psignal(p, sig); } psignal(p, sig) int *p; { register *rp; rp = p; rp->p_sig = sig; if(rp->p_stat == SWAIT) { rp->p_wchan = 0; rp->p_stat = SRUN; if(runout) { runout = 0; wakeup(&runout); } } } issig() { register n; if(n = u.u_procp->p_sig) if((u.u_signal[n]&1) == 0) return(n); return(0); } psig() { register n, p; register *rp; rp = u.u_procp; n = rp->p_sig; rp->p_sig = 0; if((p=u.u_signal[n]) != 0) { u.u_error = 0; u.u_signal[n] = 0; suword(u.u_ar0[R6]=-2, u.u_ar0[RPS]); suword(u.u_ar0[R6]=-2, u.u_ar0[R7]); u.u_ar0[R7] = p; return; } switch(n) { case SIGQIT: case SIGINS: case SIGTRC: case SIGIOT: case SIGEMT: case SIGFPT: case SIGBUS: case SIGSEG: case SIGSYS: if(core()) n =+ 0200; } u.u_arg[0] = (u.u_ar0[R0]<<8) | n; exit(); } core() { register s, *ip; extern schar; u.u_error = 0; u.u_dirp = "core"; ip = namei(&schar, 1); if(ip == NULL) { if(u.u_error) return(0); ip = maknode(0666); } if(!access(ip, IWRITE)) { itrunc(ip); u.u_offset[0] = 0; u.u_offset[1] = 0; u.u_base = &u; u.u_count = USIZE*64; u.u_segflg = 1; writei(ip); s = u.u_procp->p_size - USIZE; estabur(0, s, 0); u.u_base = 0; u.u_count = s*64; u.u_segflg = 0; writei(ip); } iput(ip); return(u.u_error==0); } unix_v4/usr/sys/ken/text.c0000644000175000017500000000376401026347440014104 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../proc.h" #include "../text.h" #include "../inode.h" xswap(p, ff, os) int *p; { register *rp, a; rp = p; if(os == 0) os = rp->p_size; a = malloc(swapmap, (rp->p_size+7)/8); if(a == NULL) panic("out of swap space"); xccdec(rp->p_textp); rp->p_flag =| SLOCK; if(swap(a, rp->p_addr, os, 0)) panic("swap error"); if(ff) mfree(coremap, os, rp->p_addr); rp->p_addr = a; rp->p_flag =& ~(SLOAD|SLOCK); rp->p_time = 0; if(runout) { runout = 0; wakeup(&runout); } } xfree() { register *xp; if((xp=u.u_procp->p_textp) != NULL) { u.u_procp->p_textp = NULL; xccdec(xp); if(--xp->x_count == 0) { mfree(swapmap, (xp->x_size+7)/8, xp->x_daddr); xp = xp->x_iptr; xp->i_flag =& ~ITEXT; iput(xp); } } } xalloc(ip) int *ip; { register struct text *xp; register *rp, ts; if(u.u_arg[1] == 0) return; rp = NULL; for(xp = &text[0]; xp < &text[NTEXT]; xp++) if(xp->x_count == 0) { if(rp == NULL) rp = xp; } else if(xp->x_iptr == ip) { xp->x_count++; u.u_procp->p_textp = xp; goto out; } if((xp=rp) == NULL) panic("out of text"); xp->x_count = 1; xp->x_ccount = 0; xp->x_iptr = ip; ts = ((u.u_arg[1]+63)>>6) & 01777; xp->x_size = ts; if((xp->x_daddr = malloc(swapmap, (ts+7)/8)) == NULL) panic("out of swap space"); expand(USIZE); expand(USIZE+ts); estabur(0, ts, 0); u.u_count = u.u_arg[1]; u.u_offset[1] = 020; u.u_base = 0; readi(ip); rp = u.u_procp; rp->p_flag =| SLOCK; swap(xp->x_daddr, rp->p_addr+USIZE, ts, 0); rp->p_flag =& ~SLOCK; rp->p_textp = xp; rp = ip; rp->i_flag =| ITEXT; rp->i_count++; out: if(xp->x_ccount == 0) { savu(u.u_ssav); xswap(u.u_procp, 1, 0); u.u_procp->p_flag =| SSWAP; swtch(); /* no return */ } xp->x_ccount++; } xccdec(xp) int *xp; { register *rp; if((rp=xp)!=NULL && rp->x_ccount!=0) if(--rp->x_ccount == 0) mfree(coremap, rp->x_size, rp->x_caddr); } unix_v4/usr/sys/ken/alloc.c0000644000175000017500000000645001026347440014205 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../filsys.h" #include "../buf.h" #include "../inode.h" #include "../user.h" iinit() { register *cp, *bp; bp = bread(rootdev, 1); cp = getblk(NODEV); if(u.u_error) panic("iinit"); bcopy(bp->b_addr, cp->b_addr, 256); brelse(bp); mount[0].m_bufp = cp; mount[0].m_dev = rootdev; cp = cp->b_addr; cp->s_flock = 0; cp->s_ilock = 0; cp->s_ronly = 0; time[0] = cp->s_time[0]; time[1] = cp->s_time[1]; } alloc(dev) { int bno; register *bp, *ip, *fp; fp = getfs(dev); while(fp->s_flock) sleep(&fp->s_flock, PINOD); bno = fp->s_free[--fp->s_nfree]; if(bno == 0) { fp->s_nfree++; printf("No space on dev %d\n", dev); u.u_error = ENOSPC; return(NULL); } if(fp->s_nfree <= 0) { fp->s_flock++; bp = bread(dev, bno); ip = bp->b_addr; fp->s_nfree = *ip++; bcopy(ip, fp->s_free, 100); brelse(bp); fp->s_flock = 0; wakeup(&fp->s_flock); } bp = getblk(dev, bno); clrbuf(bp); fp->s_fmod = 1; return(bp); } free(dev, bno) { register *fp, *bp, *ip; fp = getfs(dev); fp->s_fmod = 1; while(fp->s_flock) sleep(&fp->s_flock, PINOD); if(fp->s_nfree >= 100) { fp->s_flock++; bp = getblk(dev, bno); ip = bp->b_addr; *ip++ = fp->s_nfree; bcopy(fp->s_free, ip, 100); fp->s_nfree = 0; bwrite(bp); fp->s_flock = 0; wakeup(&fp->s_flock); } fp->s_free[fp->s_nfree++] = bno; fp->s_fmod = 1; } ialloc(dev) { register *fp, *bp, *ip; int i, j, k, ino; fp = getfs(dev); while(fp->s_ilock) sleep(&fp->s_ilock, PINOD); loop: if(fp->s_ninode > 0) { ino = fp->s_inode[--fp->s_ninode]; ip = iget(dev, ino); if(ip->i_mode == 0) { for(bp = &ip->i_mode; bp < &ip->i_addr[8];) *bp++ = 0; fp->s_fmod = 1; return(ip); } printf("busy i\n"); iput(ip); goto loop; } fp->s_ilock++; ino = 0; for(i=0; is_isize; i++) { bp = bread(dev, i+2); ip = bp->b_addr; for(j=0; j<256; j=+16) { ino++; if(ip[j] != 0) continue; for(k=0; ks_inode[fp->s_ninode++] = ino; if(fp->s_ninode >= 100) break; cont:; } brelse(bp); if(fp->s_ninode >= 100) break; } if(fp->s_ninode <= 0) panic("out of inodes"); fp->s_ilock = 0; wakeup(&fp->s_ilock); goto loop; } ifree(dev, ino) { register *fp; fp = getfs(dev); if(fp->s_ilock) return; if(fp->s_ninode >= 100) return; fp->s_inode[fp->s_ninode++] = ino; fp->s_fmod = 1; } getfs(dev) { register struct mount *p; for(p = &mount[0]; p < &mount[NMOUNT]; p++) if(p->m_bufp != NULL && p->m_dev == dev) { p = p->m_bufp->b_addr; return(p); } panic("no fs"); } update() { register struct inode *ip; register struct mount *mp; register *bp; if(updlock) return; updlock++; for(mp = &mount[0]; mp < &mount[NMOUNT]; mp++) if(mp->m_bufp != NULL) { ip = mp->m_bufp->b_addr; if(ip->s_fmod==0 || ip->s_ilock!=0 || ip->s_flock!=0 || ip->s_ronly!=0) continue; bp = getblk(mp->m_dev, 1); ip->s_fmod = 0; ip->s_time[0] = time[0]; ip->s_time[1] = time[1]; bcopy(ip, bp->b_addr, 256); bwrite(bp); } for(ip = &inode[0]; ip < &inode[NINODE]; ip++) if((ip->i_flag&ILOCK) == 0) { ip->i_flag =| ILOCK; iupdat(ip); prele(ip); } updlock = 0; bflush(NODEV); } unix_v4/usr/sys/ken/iget.c0000644000175000017500000000556001026347440014044 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../inode.h" #include "../filsys.h" #include "../conf.h" #include "../buf.h" struct inode *maxip; iget(dev, ino) int dev; int ino; { register struct inode *p; register *ip2; int *ip1; register struct mount *ip; loop: ip = NULL; for(p = &inode[0]; p < &inode[NINODE]; p++) { if(dev==p->i_dev && ino==p->i_number) { if((p->i_flag&ILOCK) != 0) { p->i_flag =| IWANT; sleep(p, PINOD); goto loop; } if((p->i_flag&IMOUNT) != 0) { for(ip = &mount[0]; ip < &mount[NMOUNT]; ip++) if(ip->m_inodp == p) { dev = ip->m_dev; ino = ROOTINO; goto loop; } panic("no imt"); } p->i_count++; p->i_flag =| ILOCK; return(p); } if(ip==NULL && p->i_count==0) ip = p; } if((p=ip) == NULL) panic("no inodes"); if (p>maxip) maxip = p; p->i_dev = dev; p->i_number = ino; p->i_flag = ILOCK; p->i_count++; p->i_lastr = -1; ip = bread(dev, ldiv(ino+31,16)); ip1 = ip->b_addr + 32*lrem(ino+31, 16); ip2 = &p->i_mode; while(ip2 < &p->i_addr[8]) *ip2++ = *ip1++; brelse(ip); return(p); } iput(p) struct inode *p; { register *rp; rp = p; if(rp->i_count == 1) { rp->i_flag =| ILOCK; if(rp->i_nlink <= 0) { itrunc(rp); rp->i_mode = 0; ifree(rp->i_dev, rp->i_number); } iupdat(rp); prele(rp); rp->i_flag = 0; rp->i_number = 0; } rp->i_count--; prele(rp); } iupdat(p) int *p; { register *ip1, *ip2, *rp; int *bp, i; rp = p; if((rp->i_flag&(IUPD|IACC)) != 0) { if(getfs(rp->i_dev)->s_ronly) return; i = rp->i_number+31; bp = bread(rp->i_dev, ldiv(i,16)); ip1 = bp->b_addr + 32*lrem(i, 16); ip2 = &rp->i_mode; while(ip2 < &rp->i_addr[8]) *ip1++ = *ip2++; if(rp->i_flag&IACC) { *ip1++ = time[0]; *ip1++ = time[1]; } else ip1 =+ 2; if(rp->i_flag&IUPD) { *ip1++ = time[0]; *ip1++ = time[1]; } bwrite(bp); } } itrunc(ip) int *ip; { register *rp, *bp, *cp; rp = ip; if((rp->i_mode&(IFCHR&IFBLK)) != 0) return; for(ip = &rp->i_addr[0]; ip < &rp->i_addr[8]; ip++) if(*ip) { if((rp->i_mode&ILARG) != 0) { bp = bread(rp->i_dev, *ip); for(cp = bp->b_addr; cp < bp->b_addr+512; cp++) if(*cp) free(rp->i_dev, *cp); brelse(bp); } free(rp->i_dev, *ip); *ip = 0; } rp->i_mode =& ~ILARG; rp->i_size0 = 0; rp->i_size1 = 0; rp->i_flag =| IUPD; } maknode(mode) { register *ip; ip = ialloc(u.u_pdir->i_dev); ip->i_flag =| IACC|IUPD; ip->i_mode = mode|IALLOC; ip->i_nlink = 1; ip->i_uid = u.u_uid; ip->i_gid = u.u_gid; wdir(ip); return(ip); } wdir(ip) int *ip; { register char *cp1, *cp2; u.u_dent.u_ino = ip->i_number; cp1 = &u.u_dent.u_name[0]; for(cp2 = &u.u_dbuf[0]; cp2 < &u.u_dbuf[DIRSIZ];) *cp1++ = *cp2++; u.u_count = DIRSIZ+2; u.u_segflg = 1; u.u_base = &u.u_dent; writei(u.u_pdir); iput(u.u_pdir); } unix_v4/usr/sys/ken/sys4.c0000644000175000017500000000173401026347440014015 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../user.h" #include "../reg.h" #include "../proc.h" ssig() { register a; a = u.u_arg[0]; if(a<=0 || a>=NSIG) { u.u_error = EINVAL; return; } u.u_ar0[R0] = u.u_signal[a]; u.u_signal[a] = u.u_arg[1]; u.u_signal[9] = 0; /* kill not allowed */ if(u.u_procp->p_sig == a) u.u_procp->p_sig = 0; } kill() { register struct proc *p; for(p = &proc[0]; p < &proc[NPROC]; p++) if(p->p_pid == u.u_ar0[R0]) goto found; u.u_error = ESRCH; return; found: if(p->p_ttyp != u.u_procp->p_ttyp) if(!suser()) return; psignal(p, u.u_arg[0]); } times() { register *p; for(p = &u.u_utime; p < &u.u_utime+6;) { suword(u.u_arg[0], *p++); u.u_arg[0] =+ 2; } } profil() { u.u_prof[0] = u.u_arg[0] & ~1; /* base of sample buf */ u.u_prof[1] = u.u_arg[1]; /* size of same */ u.u_prof[2] = u.u_arg[2]; /* pc offset */ u.u_prof[3] = (u.u_arg[3]>>1) & 077777; /* pc scale */ } unix_v4/usr/sys/ken/main.c0000644000175000017500000000516101026347440014035 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../user.h" #include "../systm.h" #include "../proc.h" #include "../text.h" #include "../inode.h" #include "../seg.h" int lksp[] { 0177546, 0172540, 0 }; int icode[] { 0104413, 0000014, 0000010, 0000777, 0000014, 0000000, 0062457, 0061564, 0064457, 0064556, 0000164, }; main() { extern schar; register i1, *p; /* * zero and free all of core */ updlock = 0; UISA->r[0] = KISA->r[6] + USIZE; UISD->r[0] = 077406; for(; fubyte(0) >= 0; UISA->r[0]++) { clearseg(UISA->r[0]); maxmem++; mfree(coremap, 1, UISA->r[0]); } printf("mem = %l\n", maxmem*10/32); maxmem = min(maxmem, MAXMEM); mfree(swapmap, nswap, swplo); /* * determine clock */ UISA->r[7] = KISA->r[7]; UISD->r[7] = 077406; for(p=lksp;; p++) { if(*p == 0) panic("no clock"); if(fuword(*p) != -1) { lks = *p; break; } } /* * set up system process */ proc[0].p_addr = KISA->r[6]; proc[0].p_size = USIZE; proc[0].p_stat = SRUN; proc[0].p_flag =| SLOAD|SSYS; u.u_procp = &proc[0]; /* * set up 'known' i-nodes */ sureg(); *lks = 0115; cinit(); binit(); iinit(); rootdir = iget(rootdev, ROOTINO); rootdir->i_flag =& ~ILOCK; u.u_cdir = iget(rootdev, ROOTINO); u.u_cdir->i_flag =& ~ILOCK; /* * make init process * enter scheduling loop * with system process */ if(newproc()) { expand(USIZE+1); u.u_uisa[0] = USIZE; u.u_uisd[0] = 6; sureg(); copyout(icode, 0, 30); return; } sched(); } sureg() { register *up, *rp, a; a = u.u_procp->p_addr; up = &u.u_uisa[0]; rp = &UISA->r[0]; while(rp < &UISA->r[8]) *rp++ = *up++ + a; if((up=u.u_procp->p_textp) != NULL) a =- up->x_caddr; up = &u.u_uisd[0]; rp = &UISD->r[0]; while(rp < &UISD->r[8]) { *rp = *up++; if((*rp++ & WO) == 0) rp[(UISA-UISD)/2-1] =- a; } } estabur(nt, nd, ns) { register a, *ap, *dp; if(nseg(nt)+nseg(nd)+nseg(ns) > 8 || nt+nd+ns+USIZE > maxmem) { u.u_error = ENOMEM; return(-1); } a = 0; ap = &u.u_uisa[0]; dp = &u.u_uisd[0]; while(nt >= 128) { *dp++ = (127<<8) | RO; *ap++ = a; a =+ 128; nt =- 128; } if(nt) { *dp++ = ((nt-1)<<8) | RO; *ap++ = a; a =+ nt; } a = USIZE; while(nd >= 128) { *dp++ = (127<<8) | RW; *ap++ = a; a =+ 128; nd =- 128; } if(nd) { *dp++ = ((nd-1)<<8) | RW; *ap++ = a; a =+ nd; } while(ap < &u.u_uisa[8]) { *dp++ = 0; *ap++ = 0; } a =+ ns; while(ns >= 128) { a =- 128; ns =- 128; *--dp = (127<<8) | RW; *--ap = a; } if(ns) { *--dp = ((128-ns)<<8) | RW | ED; *--ap = a-128; } sureg(); return(0); } nseg(n) { return((n+127)>>7); } unix_v4/usr/sys/systm.h0000644000175000017500000000063201026347440013516 0ustar aapaapchar canonb[CANBSIZ]; int coremap[CMAPSIZ]; int swapmap[SMAPSIZ]; int *rootdir; int lbolt; int time[2]; int tout[2]; struct callo { int c_time; int c_arg; int (*c_func)(); } callout[NCALL]; struct mount { int m_dev; int *m_bufp; int *m_inodp; } mount[NMOUNT]; int mpid; char runin; char runout; char runrun; int maxmem; int *lks; int rootdev; int swapdev; int swplo; int nswap; int updlock; int rablock; unix_v4/usr/sys/seg.h0000644000175000017500000000034401026347440013115 0ustar aapaap/* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * KT-11 registers */ #define KISA 0172340 #define UISD 0177600 #define UISA 0177640 #define RO 02 #define RW 06 #define WO 04 #define ED 010 struct { int r[8]; }; unix_v4/usr/sys/param.h0000644000175000017500000000165501026347440013445 0ustar aapaap/* * variables */ #define NBUF 15 #define NINODE 100 #define NFILE 100 #define NMOUNT 5 #define MAXMEM (32*32) #define SSIZE 20 #define SINCR 20 #define NOFILE 15 #define CANBSIZ 256 #define CMAPSIZ 100 #define SMAPSIZ 100 #define NCALL 20 #define NPROC 50 #define NTEXT 20 #define NCLIST 100 /* * priorities * probably should not be * altered too much */ #define PSWP -100 #define PINOD -90 #define PRIBIO -50 #define PPIPE 1 #define PWAIT 40 #define PSLEP 90 #define PUSER 100 /* * signals * dont change */ #define NSIG 13 #define SIGHUP 1 #define SIGINT 2 #define SIGQIT 3 #define SIGINS 4 #define SIGTRC 5 #define SIGIOT 6 #define SIGEMT 7 #define SIGFPT 8 #define SIGKIL 9 #define SIGBUS 10 #define SIGSEG 11 #define SIGSYS 12 /* * fundamental constants * cannot be changed */ #define USIZE 16 #define NULL 0 #define NODEV (-1) #define ROOTINO 1 #define DIRSIZ 14 struct { char lobyte; char hibyte; }; unix_v4/usr/sys/low.o0000644000175000017500000000153401027200721013140 0ustar aapaapDw747.7(7"7777 77HHHHHHHYHHH  ( 8 H X h x   br4br5br6br7trap start klinkloupcinpcoukwlptciorkiotmiodhindhoucall _klrint _klxint _pcrint _pcpint _clock _tcintr _rkintr _tmintr _dhrint _dhxint unix_v4/usr/sys/conf/0000755000175000017500000000000001027200731013102 5ustar aapaapunix_v4/usr/sys/conf/mch.s0000644000175000017500000002544601027177623014065 0ustar aapaap/ Copyright 1973 Bell Telephone Laboratories Inc / machine language assist .45 = 1 / 0 = 11/40 1 = 11/45 .fpp = 1 / non-UNIX instructions mfpi = 6500^tst mtpi = 6600^tst .if .45 spl = 230 .if .fpp ldfps = 170100^tst stfps = 170200^tst .endif .endif wait = 1 rti = 2 reset = 5 .globl trap, call .globl _trap trap: mov PS,-4(sp) tst nofault bne 1f mov SSR0,ssr .if .45 mov SSR1,ssr+2 .endif mov SSR2,ssr+4 mov $1,SSR0 jsr r0,call1; _trap 1: mov $1,SSR0 mov nofault,(sp) rti .globl _runrun, _swtch call1: tst -(sp) .if .45 spl 0 .endif .if .45-1 bic $340,PS .endif br 1f call: mov PS,-(sp) 1: mov r1,-(sp) mfpi sp mov 4(sp),-(sp) bic $!37,(sp) bit $30000,PS beq 1f clrb _runrun .if .45 .if .fpp mov $20,_u+4 / FP maint mode .endif .endif 1: jsr pc,*(r0)+ bit $30000,PS beq 1f tstb _runrun beq 2f jsr pc,_savfp jsr pc,_swtch 2: .if .45 .if .fpp mov $_u+4,r1 bit $20,(r1) bne 1f mov (r1)+,r0 ldfps r0 movf (r1)+,fr0 movf (r1)+,fr1 movf fr1,fr4 movf (r1)+,fr1 movf fr1,fr5 movf (r1)+,fr1 movf (r1)+,fr2 movf (r1)+,fr3 ldfps r0 .endif .endif 1: tst (sp)+ mtpi sp mov (sp)+,r1 tst (sp)+ mov (sp)+,r0 rti .globl _savfp _savfp: .if .fpp mov $_u+4,r1 bit $20,(r1) beq 1f stfps (r1)+ movf fr0,(r1)+ movf fr4,fr0 movf fr0,(r1)+ movf fr5,fr0 movf fr0,(r1)+ movf fr1,(r1)+ movf fr2,(r1)+ movf fr3,(r1)+ 1: .endif rts pc .globl _incupc _incupc: mov r2,-(sp) mov 6(sp),r2 / base of prof with base,leng,off,scale mov 4(sp),r0 / pc sub 4(r2),r0 / offset clc ror r0 mul 6(r2),r0 / scale ashc $-14.,r0 inc r1 bic $1,r1 cmp r1,2(r2) / length bhis 1f add (r2),r1 / base mov nofault,-(sp) mov $2f,nofault mfpi (r1) inc (sp) mtpi (r1) br 3f 2: clr 6(r2) 3: mov (sp)+,nofault 1: mov (sp)+,r2 rts pc .globl _display _display: .if .45 mov PS,-(sp) mov $340,PS mov CSW,r1 bit $1,r1 beq 1f bis $30000,PS dec r1 1: jsr pc,fuword mov r0,CSW mov (sp)+,PS .endif rts pc / Character list get/put .globl _getc, _putc .globl _cfreelist _getc: mov 2(sp),r1 mov PS,-(sp) mov r2,-(sp) .if .45 spl 5 .endif .if .45-1 jsr pc,_spl5 .endif mov 2(r1),r2 / first ptr beq 9f / empty movb (r2)+,r0 / character bic $!377,r0 mov r2,2(r1) dec (r1)+ / count bne 1f clr (r1)+ clr (r1)+ / last block br 2f 1: bit $7,r2 bne 3f mov -10(r2),(r1) / next block add $2,(r1) 2: dec r2 bic $7,r2 mov _cfreelist,(r2) mov r2,_cfreelist 3: mov (sp)+,r2 mov (sp)+,PS rts pc 9: clr 4(r1) mov $-1,r0 mov (sp)+,r2 mov (sp)+,PS rts pc _putc: mov 2(sp),r0 mov 4(sp),r1 mov PS,-(sp) mov r2,-(sp) mov r3,-(sp) .if .45 spl 5 .endif .if .45-1 jsr pc,_spl5 .endif mov 4(r1),r2 / last ptr bne 1f mov _cfreelist,r2 beq 9f mov (r2),_cfreelist clr (r2)+ mov r2,2(r1) / first ptr br 2f 1: bit $7,r2 bne 2f mov _cfreelist,r3 beq 9f mov (r3),_cfreelist mov r3,-10(r2) mov r3,r2 clr (r2)+ 2: movb r0,(r2)+ mov r2,4(r1) inc (r1) / count clr r0 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,PS rts pc 9: mov pc,r0 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,PS rts pc .globl _backup .globl _regloc _backup: .if .45-1 mov 2(sp),ssr+2 mov r2,-(sp) jsr pc,backup mov r2,ssr+2 mov (sp)+,r2 movb jflg,r0 bne 2f .endif mov 2(sp),r0 movb ssr+2,r1 jsr pc,1f movb ssr+3,r1 jsr pc,1f movb _regloc+7,r1 asl r1 add r0,r1 mov ssr+4,(r1) clr r0 2: rts pc 1: mov r1,-(sp) asr (sp) asr (sp) asr (sp) bic $!7,r1 movb _regloc(r1),r1 asl r1 add r0,r1 sub (sp)+,(r1) rts pc .if .45-1 backup: clr r2 / backup register ssr1 mov $1,bflg / clrs jflg mov ssr+4,r0 jsr pc,fetch mov r0,r1 ash $-11.,r0 bic $!36,r0 jmp *0f(r0) 0: t00; t01; t02; t03; t04; t05; t06; t07 t10; t11; t12; t13; t14; t15; t16; t17 t00: clrb bflg t10: mov r1,r0 swab r0 bic $!16,r0 jmp *0f(r0) 0: u0; u1; u2; u3; u4; u5; u6; u7 u6: / single op, m[tf]pi, sxt, illegal bit $400,r1 beq u5 / all but m[tf], sxt bit $200,r1 beq 1f / mfpi bit $100,r1 bne u5 / sxt / simulate mtpi with double (sp)+,dd bic $4000,r1 / turn instr into (sp)+ br t01 / simulate mfpi with double ss,-(sp) 1: ash $6,r1 bis $46,r1 / -(sp) br t01 u4: / jsr mov r1,r0 jsr pc,setreg / assume no fault bis $173000,r2 / -2 from sp rts pc t07: / EIS clrb bflg u0: / jmp, swab u5: / single op mov r1,r0 br setreg t01: / mov t02: / cmp t03: / bit t04: / bic t05: / bis t06: / add t16: / sub clrb bflg t11: / movb t12: / cmpb t13: / bitb t14: / bicb t15: / bisb mov r1,r0 ash $-6,r0 jsr pc,setreg swab r2 mov r1,r0 jsr pc,setreg / if delta(dest) is zero, / no need to fetch source bit $370,r2 beq 1f / if mode(source) is R, / no fault is possible bit $7000,r1 beq 1f / if reg(source) is reg(dest), / too bad. mov r2,-(sp) bic $174370,(sp) cmpb 1(sp),(sp)+ beq t17 / start source cycle / pick up value of reg mov r1,r0 ash $-6,r0 bic $!7,r0 movb _regloc(r0),r0 asl r0 add ssr+2,r0 mov (r0),r0 / if reg has been incremented, / must decrement it before fetch bit $174000,r2 ble 2f dec r0 bit $10000,r2 beq 2f dec r0 2: / if mode is 6,7 fetch and add X(R) to R bit $4000,r1 beq 2f bit $2000,r1 beq 2f mov r0,-(sp) mov ssr+4,r0 add $2,r0 jsr pc,fetch add (sp)+,r0 2: / fetch operand / if mode is 3,5,7 fetch * jsr pc,fetch bit $1000,r1 beq 1f bit $6000,r1 bne fetch 1: rts pc t17: / illegal u1: / br u2: / br u3: / br u7: / illegal incb jflg rts pc setreg: mov r0,-(sp) bic $!7,r0 bis r0,r2 mov (sp)+,r0 ash $-3,r0 bic $!7,r0 movb 0f(r0),r0 tstb bflg beq 1f bit $2,r2 beq 2f bit $4,r2 beq 2f 1: cmp r0,$20 beq 2f cmp r0,$-20 beq 2f asl r0 2: bisb r0,r2 rts pc 0: .byte 0,0,10,20,-10,-20,0,0 fetch: bic $1,r0 mov nofault,-(sp) mov $1f,nofault mfpi (r0) mov (sp)+,r0 mov (sp)+,nofault rts pc 1: mov (sp)+,nofault clrb r2 / clear out dest on fault mov $-1,r0 rts pc .bss bflg: .=.+1 jflg: .=.+1 .text .endif .globl _fubyte, _subyte .globl _fuword, _suword _fubyte: mov 2(sp),r1 bic $1,r1 jsr pc,gword cmp r1,2(sp) beq 1f swab r0 1: bic $!377,r0 rts pc _subyte: mov 2(sp),r1 bic $1,r1 jsr pc,gword mov r0,-(sp) cmp r1,4(sp) beq 1f movb 6(sp),1(sp) br 2f 1: movb 6(sp),(sp) 2: mov (sp)+,r0 jsr pc,pword clr r0 rts pc _fuword: mov 2(sp),r1 fuword: jsr pc,gword rts pc gword: mov PS,-(sp) .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif mov nofault,-(sp) mov $err,nofault mfpi (r1) mov (sp)+,r0 br 1f _suword: mov 2(sp),r1 mov 4(sp),r0 suword: jsr pc,pword rts pc pword: mov PS,-(sp) .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif mov nofault,-(sp) mov $err,nofault mov r0,-(sp) mtpi (r1) 1: mov (sp)+,nofault mov (sp)+,PS rts pc err: mov (sp)+,nofault mov (sp)+,PS tst (sp)+ mov $-1,r0 rts pc .globl _copyin, _copyout _copyin: jsr pc,copsu 1: mfpi (r0)+ mov (sp)+,(r1)+ sob r2,1b br 2f _copyout: jsr pc,copsu 1: mov (r0)+,-(sp) mtpi (r1)+ sob r2,1b 2: mov (sp)+,nofault mov (sp)+,r2 clr r0 rts pc copsu: mov (sp)+,r0 mov r2,-(sp) mov nofault,-(sp) mov r0,-(sp) mov 10(sp),r0 mov 12(sp),r1 mov 14(sp),r2 asr r2 mov $1f,nofault rts pc 1: mov (sp)+,nofault mov (sp)+,r2 mov $-1,r0 rts pc .globl _idle _idle: mov PS,-(sp) .if .45 spl 0 .endif .if .45-1 bic $340,PS .endif wait mov (sp)+,PS rts pc .globl _savu, _retu, _aretu _savu: .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif mov (sp)+,r1 mov (sp),r0 mov sp,(r0)+ mov r5,(r0)+ .if .45 spl 0 .endif .if .45-1 bic $340,PS .endif jmp (r1) _aretu: .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif mov (sp)+,r1 mov (sp),r0 br 1f _retu: .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif mov (sp)+,r1 mov (sp),KISA6 mov $_u,r0 1: mov (r0)+,sp mov (r0)+,r5 .if .45 spl 0 .endif .if .45-1 bic $340,PS .endif jmp (r1) .globl _spl0, _spl1, _spl4, _spl5, _spl6, _spl7 _spl0: .if .45 spl 0 .endif .if .45-1 bic $340,PS .endif rts pc _spl1: .if .45 spl 1 .endif .if .45-1 bis $40,PS bic $300,PS .endif rts pc _spl4: .if .45 spl 4 rts pc .endif _spl5: .if .45 spl 5 .endif .if .45-1 bis $340,PS bic $100,PS .endif rts pc _spl6: .if .45 spl 6 .endif .if .45-1 bis $340,PS bic $40,PS .endif rts pc _spl7: .if .45 spl 7 .endif .if .45-1 bis $340,PS .endif rts pc .globl _copyseg _copyseg: mov PS,-(sp) .if .45 mov 4(sp),SISA0 mov 6(sp),SISA1 mov $10340,PS .endif .if .45-1 mov UISA0,-(sp) mov UISA1,-(sp) mov $30340,PS mov 10(sp),UISA0 mov 12(sp),UISA1 mov UISD0,-(sp) mov UISD1,-(sp) mov $6,UISD0 mov $6,UISD1 .endif mov r2,-(sp) clr r0 mov $8192.,r1 mov $32.,r2 1: mfpi (r0)+ mtpi (r1)+ sob r2,1b mov (sp)+,r2 .if .45-1 mov (sp)+,UISD1 mov (sp)+,UISD0 mov (sp)+,UISA1 mov (sp)+,UISA0 .endif mov (sp)+,PS rts pc .globl _clearseg _clearseg: mov PS,-(sp) .if .45 mov 4(sp),SISA0 mov $10340,PS .endif .if .45-1 mov UISA0,-(sp) mov $30340,PS mov 6(sp),UISA0 mov UISD0,-(sp) mov $6,UISD0 .endif clr r0 mov $32.,r1 1: clr -(sp) mtpi (r0)+ sob r1,1b .if .45-1 mov (sp)+,UISD0 mov (sp)+,UISA0 .endif mov (sp)+,PS rts pc .globl _dpadd _dpadd: mov 2(sp),r0 add 4(sp),2(r0) adc (r0) rts pc .globl _dpcmp _dpcmp: mov 2(sp),r0 mov 4(sp),r1 sub 6(sp),r0 sub 8(sp),r1 sbc r0 bge 1f cmp r0,$-1 bne 2f cmp r1,$-512. bhi 3f 2: mov $-512.,r0 rts pc 1: bne 2f cmp r1,$512. blo 3f 2: mov $512.,r1 3: mov r1,r0 rts pc .globl start, _end, _edata, _main start: bit $1,SSR0 bne start / loop if restart reset / initialize systems segments mov $KISA0,r0 mov $KISD0,r1 mov $200,r4 clr r2 mov $6,r3 1: mov r2,(r0)+ mov $77406,(r1)+ / 4k rw add r4,r2 sob r3,1b / initialize user segment mov $_end+63.,r2 ash $-6,r2 bic $!1777,r2 mov r2,(r0)+ / ksr6 = sysu mov $usize-1\<8|6,(r1)+ / initialize io segment / set up counts on supervisor segments mov $7600,(r0)+ / ksr7 = IO mov $77406,(r1)+ / rw 4k .if .45 mov $6,SISD0 mov $6,SISD1 .endif / get a sp and start segmentation mov $_u+[usize*64.],sp inc SSR0 / clear bss mov $_edata,r0 1: clr (r0)+ cmp r0,$_end blo 1b / clear user block mov $_u,r0 1: clr (r0)+ cmp r0,$_u+[usize*64.] blo 1b / set up previous mode and call main / on return, enter user mode at 0R mov $30000,PS jsr pc,_main mov $170000,-(sp) clr -(sp) rti .globl _ldiv _ldiv: clr r0 mov 2(sp),r1 div 4(sp),r0 rts pc .globl _lrem _lrem: clr r0 mov 2(sp),r1 div 4(sp),r0 mov r1,r0 rts pc .globl _lshift _lshift: mov 2(sp),r1 mov (r1)+,r0 mov (r1),r1 ashc 4(sp),r0 mov r1,r0 rts pc .globl rsave rsave: mov r5,r0 mov sp,r5 mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) sub (r0)+,sp jmp (r0) .globl rretrn rretrn: sub $6,r5 mov r5,sp mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc .globl _u _u = 140000 usize = 16. CSW = 177570 PS = 177776 SSR0 = 177572 SSR2 = 177576 KISA0 = 172340 KISA6 = 172354 KISD0 = 172300 .if .45 SSR1 = 177574 SISA0 = 172240 SISA1 = 172242 SISD0 = 172200 SISD1 = 172202 .endif .if .45-1 UISA0 = 177640 UISA1 = 177642 UISD0 = 177600 UISD1 = 177602 .endif .bss .globl nofault, ssr, badtrap nofault:.=.+2 ssr: .=.+6 badtrap:.=.+2 unix_v4/usr/sys/conf/mkconf0000777000175000017500000001266401027165365014337 0ustar aapaapn6n & 6 h % console klin; br4 klou; br4 .globl _klrint klin: jsr r0,call; _klrint .globl _klxint klou: jsr r0,call; _klxint &klopen, &klclose, &klread, &klwrite, &klsgtty,pc pcin; br4 pcou; br4 .globl _pcrint pcin: jsr r0,call; _pcrint .globl _pcpint pcou: jsr r0,call; _pcpint &pcopen, &pcclose, &pcread, &pcwrite, &nodev,clock kwlp; br6 .globl _clock kwlp: jsr r0,call; _clock lp lpou; br4 .globl _lpint lpou: jsr r0,call; _lpint &lpopen, &lpclose, &nodev, &lpwrite, &nodev,rf rfio; br5 .globl _rfintr rfio: jsr r0,call; _rfintr &nulldev, &nulldev, &rfstrategy, &rftab, &nulldev, &nulldev, &rfread, &rfwrite, &nodev,tc tcio; br6 .globl _tcintr tcio: jsr r0,call; _tcintr &nulldev, &tcclose, &tcstrategy, &tctab,rk rkio; br5 .globl _rkintr rkio: jsr r0,call; _rkintr &nulldev, &nulldev, &rkstrategy, &rktab, &nulldev, &nulldev, &rkread, &rkwrite, &nodev,tm tmio; br5 .globl _tmintr tmio: jsr r0,call; _tmintr &tmopen, &tmclose, &tmstrategy, &tmtab, &tmopen, &tmclose, &tmread, &tmwrite, &nodev,cr crin; br6 .globl _crint crin: jsr r0,call; _crint &cropen, &crclose, &crread, &nodev, &nodev,rp rpio; br5 .globl _rpintr rpio: jsr r0,call; _rpintr &nulldev, &nulldev, &rpstrategy, &rptab, &nulldev, &nulldev, &rpread, &rpwrite, &nodev,dc dcin; br5+%d. dcou; br5+%d. .globl _dcrint dcin: jsr r0,call; _dcrint .globl _dcxint dcou: jsr r0,call; _dcxint &dcopen, &dcclose, &dcread, &dcwrite, &dcsgtty,kl klin; br4+1+%d. klou; br4+1+%d. dp dpin; br6+%d. dpou; br6+%d. .globl _dprint dpin: jsr r0,call; _dprint .globl _dpxint dpou: jsr r0,call; _dpxint &dpopen, &dpclose, &dpread, &dpwrite, &nodev,dn dnou; br5+%d. .globl _dnint dnou: jsr r0,call; _dnint &dnopen, &dnclose, &nodev, &dnwrite, &nodev,dhdm dmin; br4+%d. .globl _dmint dmin: jsr r0,call; _dmint dh dhin; br5+%d. dhou; br5+%d. .globl _dhrint dhin: jsr r0,call; _dhrint .globl _dhxint dhou: jsr r0,call; _dhxint &dhopen, &dhclose, &dhread, &dhwrite, &dhsgtty,mem &nulldev, &nulldev, &mmread, &mmwrite, &nodev,/ Copyright 1974 Bell Telephone Laboratories Inc/ low corebr4 = 200br5 = 240br6 = 300br7 = 340. = 0^. br 1f 4/ trap vectors trap; br7+0. / bus error trap; br7+1. / illegal instruction trap; br7+2. / bpt-trace trap trap; br7+3. / iot trap trap; br7+4. / power fail trap; br7+5. / emulator trap trap; br7+6. / system entry. = 40^..globl start1: jmp start. = 240^. trap; br7+7. / programmed interrupt trap; br7+8. / floating point trap; br7+9. / segmentation violation/ floating vectors. = 300^./////////////////////////////////////////////////////// interface code to C//////////////////////////////////////////////////////.globl call, trap/* * Copyright 1974 Bell Telephone Laboratories Inc */int (*bdevsw[])(){ 0};int (*cdevsw[])(){ 0};int rootdev {(0<<8)|0};int swapdev {(0<<8)|0};int swplo 4000;int nswap 872;w  J F n  55"  7(  hn ` Z5V-  5  h-,! 5 5  h5 5& ee5`.  5 @ 55 u- Nf& % e  h hn   5  & : %e  @  7  h5 @ 5D   h5 @ 5H   h *~ ww @e5NL  ww f@e $%   _   @e0 9 Wp Be` ̋@n 3  )  P  )`,, , f  r n  et  ww @ = @ ȋ ww wDe    % Xwx7 7 ׯ-  "7  ."B JFdoxfetcsRl ӕ- C r f e0 1 / ҋ D~' f v Le0 9e  z p&  m  X~  X  X~ w7   0  Wp `e0[eӕ?f ,xP n h @f L 7: 0(-"f   7  7 7 f@w$ w&fwlwhww7F @&HF7 W&f 7 @% t@A&@7@L> Be0# @є     BA   W e B@e0m ` eȐ9 ȕ0 ȕ1 N `0VV<6bF>@xd~04@Pl 8:>JZv@x|*V4  F4Jnprtv4z,00@Bln04 <hj, & ( 2 < F P R Z b f h x  0 N P Z h v x z    L d     " & ( @ X h l.s .=.+4 . = %d^. %s%sc.c%s %s %s %s: no more, no less %s: only one %s: cannot find > unix_v4/usr/sys/conf/low.s0000644000175000017500000000243001027200720014064 0ustar aapaap/ Copyright 1974 Bell Telephone Laboratories Inc / low core br4 = 200 br5 = 240 br6 = 300 br7 = 340 . = 0^. br 1f 4 / trap vectors trap; br7+0. / bus error trap; br7+1. / illegal instruction trap; br7+2. / bpt-trace trap trap; br7+3. / iot trap trap; br7+4. / power fail trap; br7+5. / emulator trap trap; br7+6. / system entry . = 40^. .globl start 1: jmp start . = 60^. klin; br4 klou; br4 . = 70^. pcin; br4 pcou; br4 . = 100^. kwlp; br6 kwlp; br6 . = 214^. tcio; br6 . = 220^. rkio; br5 . = 224^. tmio; br5 . = 240^. trap; br7+7. / programmed interrupt trap; br7+8. / floating point trap; br7+9. / segmentation violation / floating vectors . = 300^. dhin; br5+0. dhou; br5+0. ////////////////////////////////////////////////////// / interface code to C ////////////////////////////////////////////////////// .globl call, trap .globl _klrint klin: jsr r0,call; _klrint .globl _klxint klou: jsr r0,call; _klxint .globl _pcrint pcin: jsr r0,call; _pcrint .globl _pcpint pcou: jsr r0,call; _pcpint .globl _clock kwlp: jsr r0,call; _clock .globl _tcintr tcio: jsr r0,call; _tcintr .globl _rkintr rkio: jsr r0,call; _rkintr .globl _tmintr tmio: jsr r0,call; _tmintr .globl _dhrint dhin: jsr r0,call; _dhrint .globl _dhxint dhou: jsr r0,call; _dhxint unix_v4/usr/sys/conf/rc0000666000175000017500000000053401027166242013447 0ustar aapaapif ! -r l.s -o ! -r c.c goto bad as l.s mv a.out ../low.o as mch.s mv a.out ../mch.o cc -c c.c mv c.o ../conf.o mv l.s low.s mv c.c conf.c ld -x ../low.o ../mch.o ../conf.o ../lib1 ../lib2 mv a.out ../../../unix chmod 644 low.s conf.c ../low.o ../mch.o ../conf.o ../../../unix echo rm mkconf.c and rc when done exit : bad echo l.s or c.c not found unix_v4/usr/sys/conf/mkconf.c0000644000175000017500000001556701026347440014551 0ustar aapaap#define CHAR 01 #define BLOCK 02 #define INTR 04 #define EVEN 010 int tabp[20]; int tabpp; struct tab { char *name; int count; int address; int key; char *codea; char *codeb; char *codec; char *coded; char *codee; } table[] { "console", -1, 60, CHAR+INTR, "\tklin; br4\n\tklou; br4\n", ".globl\t_klrint\nklin:\tjsr\tr0,call; _klrint\n", ".globl\t_klxint\nklou:\tjsr\tr0,call; _klxint\n", "", "\t&klopen, &klclose, &klread, &klwrite, &klsgtty,", "pc", 0, 70, CHAR+INTR, "\tpcin; br4\n\tpcou; br4\n", ".globl\t_pcrint\npcin:\tjsr\tr0,call; _pcrint\n", ".globl\t_pcpint\npcou:\tjsr\tr0,call; _pcpint\n", "", "\t&pcopen, &pcclose, &pcread, &pcwrite, &nodev,", "clock", -2, 100, INTR, "\tkwlp; br6\n", ".globl\t_clock\n", "kwlp:\tjsr\tr0,call; _clock\n", "", "", /* * 110 unused * 114 memory parity * 120 XY plotter * 124 DR11-B * 130 AD01 * 134 AFC11 * 140 AA11 * 144 AA11 * 150-174 unused */ "lp", 0, 200, CHAR+INTR, "\tlpou; br4\n", "", ".globl\t_lpint\nlpou:\tjsr\tr0,call; _lpint\n", "", "\t&lpopen, &lpclose, &nodev, &lpwrite, &nodev,", "rf", 0, 204, BLOCK+CHAR+INTR, "\trfio; br5\n", ".globl\t_rfintr\n", "rfio:\tjsr\tr0,call; _rfintr\n", "\t&nulldev,\t&nulldev,\t&rfstrategy, \t&rftab,", "\t&nulldev, &nulldev, &rfread, &rfwrite, &nodev,", /* * 210 RC */ "tc", 0, 214, BLOCK+INTR, "\ttcio; br6\n", ".globl\t_tcintr\n", "tcio:\tjsr\tr0,call; _tcintr\n", "\t&nulldev,\t&tcclose,\t&tcstrategy, \t&tctab,", "", "rk", 0, 220, BLOCK+CHAR+INTR, "\trkio; br5\n", ".globl\t_rkintr\n", "rkio:\tjsr\tr0,call; _rkintr\n", "\t&nulldev,\t&nulldev,\t&rkstrategy, \t&rktab,", "\t&nulldev, &nulldev, &rkread, &rkwrite, &nodev,", "tm", 0, 224, BLOCK+CHAR+INTR, "\ttmio; br5\n", ".globl\t_tmintr\n", "tmio:\tjsr\tr0,call; _tmintr\n", "\t&tmopen,\t&tmclose,\t&tmstrategy, \t&tmtab,", "\t&tmopen, &tmclose, &tmread, &tmwrite, &nodev,", "cr", 0, 230, CHAR+INTR, "\tcrin; br6\n", "", ".globl\t_crint\ncrin:\tjsr\tr0,call; _crint\n", "", "\t&cropen, &crclose, &crread, &nodev, &nodev,", /* * 234 UDC11 */ "rp", 0, 254, BLOCK+CHAR+INTR, "\trpio; br5\n", ".globl\t_rpintr\n", "rpio:\tjsr\tr0,call; _rpintr\n", "\t&nulldev,\t&nulldev,\t&rpstrategy, \t&rptab,", "\t&nulldev, &nulldev, &rpread, &rpwrite, &nodev,", /* * 260 TA11 * 264-274 unused */ "dc", 0, 308, CHAR+INTR, "\tdcin; br5+%d.\n\tdcou; br5+%d.\n", ".globl\t_dcrint\ndcin:\tjsr\tr0,call; _dcrint\n", ".globl\t_dcxint\ndcou:\tjsr\tr0,call; _dcxint\n", "", "\t&dcopen, &dcclose, &dcread, &dcwrite, &dcsgtty,", "kl", 0, 308, INTR, "\tklin; br4+1+%d.\n\tklou; br4+1+%d.\n", "", "", "", "", "dp", 0, 308, CHAR+INTR, "\tdpin; br6+%d.\n\tdpou; br6+%d.\n", ".globl\t_dprint\ndpin:\tjsr\tr0,call; _dprint\n", ".globl\t_dpxint\ndpou:\tjsr\tr0,call; _dpxint\n", "", "\t&dpopen, &dpclose, &dpread, &dpwrite, &nodev,", /* * DM11-A */ "dn", 0, 304, CHAR+INTR, "\tdnou; br5+%d.\n", "", ".globl\t_dnint\ndnou:\tjsr\tr0,call; _dnint\n", "", "\t&dnopen, &dnclose, &nodev, &dnwrite, &nodev,", "dhdm", 0, 304, INTR, "\tdmin; br4+%d.\n", "", ".globl\t_dmint\ndmin:\tjsr\tr0,call; _dmint\n", "", "", /* * DR11-A+ * DR11-C+ * PA611+ * PA611+ * DT11+ * DX11+ * DL11 * DJ11 */ "dh", 0, 308, CHAR+INTR+EVEN, "\tdhin; br5+%d.\n\tdhou; br5+%d.\n", ".globl\t_dhrint\ndhin:\tjsr\tr0,call; _dhrint\n", ".globl\t_dhxint\ndhou:\tjsr\tr0,call; _dhxint\n", "", "\t&dhopen, &dhclose, &dhread, &dhwrite, &dhsgtty,", /* * GT40 * LPS+ * VT20 */ "mem", 0, 300, CHAR, "", "", "", "", "\t&nulldev, &nulldev, &mmread, &mmwrite, &nodev,", 0 }; char *stra[] { "/ Copyright 1974 Bell Telephone Laboratories Inc", "/ low core", "", "br4 = 200", "br5 = 240", "br6 = 300", "br7 = 340", "", ". = 0^.", "\tbr\t1f", "\t4", "", "/ trap vectors", "\ttrap; br7+0.\t\t/ bus error", "\ttrap; br7+1.\t\t/ illegal instruction", "\ttrap; br7+2.\t\t/ bpt-trace trap", "\ttrap; br7+3.\t\t/ iot trap", "\ttrap; br7+4.\t\t/ power fail", "\ttrap; br7+5.\t\t/ emulator trap", "\ttrap; br7+6.\t\t/ system entry", "", ". = 40^.", ".globl\tstart", "1:\tjmp\tstart", "", 0, }; char *strb[] { "", ". = 240^.", "\ttrap; br7+7.\t\t/ programmed interrupt", "\ttrap; br7+8.\t\t/ floating point", "\ttrap; br7+9.\t\t/ segmentation violation", 0 }; char *strc[] { "", "/ floating vectors", ". = 300^.", 0, }; char *strd[] { "", "//////////////////////////////////////////////////////", "/\t\tinterface code to C", "//////////////////////////////////////////////////////", "", ".globl\tcall, trap", 0 }; char *stre[] { "/*", " *\tCopyright 1974 Bell Telephone Laboratories Inc", " */", "", "int\t(*bdevsw[])()", "{", 0, }; char *strf[] { "\t0", "};", "", "int\t(*cdevsw[])()", "{", 0, }; char *strg[] { "\t0", "};", "", "int\trootdev\t{(0<<8)|0};", "int\tswapdev\t{(0<<8)|0};", "int\tswplo\t4000;", "int\tnswap\t872;", 0, }; int fout; main() { register struct tab *p; int i, n, ev; int flagf, flagb; tabp[tabpp++] = table; while(input()); /* * pass1 -- create interrupt vectors */ flagf = flagb = 1; fout = creat("l.s", 0666); puke(stra); for(p=table; p->name; p++) if(p->count != 0 && p->key & INTR) { if(p->address>240 && flagb) { flagb = 0; puke(strb); } if(p->address >= 300) { if(flagf) { ev = 0; flagf = 0; puke(strc); } if(p->key & EVEN && ev & 07) { printf("\t.=.+4\n"); ev =+ 4; } ev =+ p->address - 300; } else printf("\n. = %d^.\n", p->address); n = p->count; if(n < 0) n = -n; for(i=0; icodea, i, i); } if(flagb) puke(strb); puke(strd); for(p=table; p->name; p++) if(p->count != 0 && p->key & INTR) printf("\n%s%s", p->codeb, p->codec); flush(); close(fout); /* * pass 2 -- create configuration table */ fout = creat("c.c", 0666); puke(stre); for(i=0; p=tabp[i]; i++) if(p->key & BLOCK) printf("%s\n", p->coded); puke(strf); for(i=0; p=tabp[i]; i++) if(p->key & CHAR) printf("%s\n", p->codee); puke(strg); flush(); close(fout); } puke(s) char **s; { char *c; while(c = *s++) printf("%s\n", c); } input() { char line[100]; register char *p; register struct tab *q; register n; p = line; while((n=getchar()) != '\n') { if(n == 0) return(0); if(n == ' ' || n == '\t') continue; *p++ = n; } *p++ = 0; n = 0; p = line; while(*p>='0' && *p<='9') { n =* 10; n =+ *p++ - '0'; } if(n == 0) n = 1; if(*p == 0) return(1); for(q=table; q->name; q++) if(equal(q->name, p)) { if(q->count < 0) { printf("%s: no more, no less\n", p); return(1); } q->count =+ n; if(q->address < 300 && q->count > 1) { q->count = 1; printf("%s: only one\n", p); } tabp[tabpp++] = q; return(1); } printf("%s: cannot find\n", p); return(1); } equal(a, b) char *a, *b; { while(*a++ == *b) if(*b++ == 0) return(1); return(0); } unix_v4/usr/sys/conf/tmrc0000644000175000017500000000057001026347440014004 0ustar aapaapchdir /usr/source/s3 cc -c ctime.c ar r /lib/liba.a ctime.o rm ctime.o chdir /usr/source/s1 cc -s -n date.c cp a.out /bin/date cc -s -n dump.c cp a.out /bin/dump cc -s -n ls.c cp a.out /bin/ls rm a.out chdir /usr/source/s2 cc -s -n mail.c cp a.out /bin/mail cc -s -n pr.c cp a.out /bin/pr as tp?.s ld -s a.out -l -lc cp a.out /bin/tp cc -s -n who.c cp a.out /bin/who rm a.out unix_v4/usr/sys/conf/conf.c0000644000175000017500000000112601027200720014171 0ustar aapaap/* * Copyright 1974 Bell Telephone Laboratories Inc */ int (*bdevsw[])() { &nulldev, &nulldev, &rkstrategy, &rktab, &nulldev, &tcclose, &tcstrategy, &tctab, &tmopen, &tmclose, &tmstrategy, &tmtab, 0 }; int (*cdevsw[])() { &klopen, &klclose, &klread, &klwrite, &klsgtty, &nulldev, &nulldev, &rkread, &rkwrite, &nodev, &tmopen, &tmclose, &tmread, &tmwrite, &nodev, &dhopen, &dhclose, &dhread, &dhwrite, &dhsgtty, &pcopen, &pcclose, &pcread, &pcwrite, &nodev, 0 }; int rootdev {(0<<8)|0}; int swapdev {(0<<8)|0}; int swplo 4000; int nswap 872; unix_v4/usr/sys/conf/flrc0000644000175000017500000000072501026347440013767 0ustar aapaapchdir /usr/c ed c0t.s /fpp/g/1/s//0/ w q as c0t.s mv a.out c0t.o cc -s -n c0?.o cp a.out /lib/c0 rm a.out c0t.o chdir /usr/source/s1 ed db1.s /fpp/g/1/s//0/ w q as db?.s strip a.out cp a.out /bin/db rm a.out chdir /usr/source/s3 as fp?.s mv a.out fp.o ar r /lib/liba.a fp.o rm fp.o chdir /usr/fort ld -s -u pass1 -u pass2 -u pass3 -u pass4\ f1o.a f2o.a f3o.a f4o.a fxo.a -l cp a.out fc1 rm a.out chdir /usr/source/s1 as bas?.s ld -s a.out -l cp a.out /bin/bas rm a.out unix_v4/usr/sys/lib20000644000175000017500000011542601027164701012747 0ustar aapaapmbio.oW lP w Nf > 5U &@t  Dww B N  N > 5U &@t 'N   N > 5 U @t N  Dww DE & t 5 D 5 .ww D t, U wzw vDU wbw ^D5@ 5@FE@> 5  EH0 ww D@t ,,  ww @-R ,@t!"5-5-  v5 U@& \ V tF B-D U@4 "  t5U 0003t tww D 5&   .ww D z00UwZw VDU5 E@ w0w ,@ ww 7777 #WpeD Wpet07    @ ew|w xDCL @ tE@PUA5UUw6w 2 (5 U@& @tE@] U @t 7w@t7tt 5& 5@ EHEww  z|!5W-5-  U t  >w:w 6Dj5_$5\_$mP _$eE5tE _$mtEAm v p 5 U@& @ U t E4t E@`tE PB 4t4` 4 4p&  "5& F5@ EH 7$ .j ww D57wblkdev)8y)88y)8y)8y)y)))(()(y)8y)I(8)8II))()(8II)y))8Iy))y)y)y)())))()))8Iy)y))8yy8)8Iy)))(Iy)     )8h )8 I  y) y_u _buf J_bfreeli _bdevsw _nblkdev _cdevsw _nchrdev _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _proc _buffers _swbuf _tmtab _raflag#P_bread"rsave _getblk">L2 L1F_iowait"Drretrn _breada"J_incore"L4L5L6L7_brelse"L8L9L3_bwrite" L11FL12RL13R_geterro".L10R_bdwrite"VL15x_bawrite"L16L14L17L19_wakeup L20L21_spl6 L18L23L246L260L22:L250L28VL29R_panic L30VL31bL32L33rL34L35L36_sleep _spl0 _notavai"tL27@L37L38L40RL41fL39pL42_iodone"L44L45L43_clrbuf"L49L47L48L46_binit"L51L52TL53PL54\L55|L56tL50_devstar"L58L59L57_swap"L61L62L63HL64\L65hL60x_bflush"|L67L68L69L71L10000L70L66_physio"L73$L10001DL74HL75`_lshift L76L77L78L72*L80LL81LL79Ltty.oX(hw @e & e& e& ww V 7Le 7@e 74 w~w zZ E%  fWp A %w6w 2D ( &e  B ww eE e   e 7ww De e  e  | 4wdw `C V  X   2  5e5!6 & 5 $\ #!ԃ  @ 5\ !ww BCE% 5 5   B8" B15 A Ze  5      5 >  ww C@E!5 _! 5  > _5%@7 y ( )!^'\ > !a!ze! 5 > e & Qe5 E 4 x*8<Db(ʋ&ʊ$ʋ!t&e 5U@ 5 e &U wRw ND w8w 4B &5"e  EP4 E %ww D     e  ww D  z- 2  &e  V >  w@|#`{}@~ABCDEFGHIJKLMNOPQRSTUVWXYZ`{|}~)YYXXXi)YYYYi)YYi)9i)  i)((i)9i)(i)hXi)i)hi)X i) 9i_canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _partab _proc _inode _file _bdevsw _nblkdev _cdevsw _nchrdev _maptab#_cfree _cfreeli _gtty"rsave _sgtty"L1D_suword rretrn _stty"H_fuword L2~_getf L3L4_wflusht"_spl5 L6L7_sleep _flushtt"B_spl0 L5_cinit"L9L10(L11"L12.L13:L144L8>L16L_getc L17\L18\L19l_wakeup L20L21L15_canon"L23L24L25L22lL26L27L28L29L37L38h_putc L30^L31<L32.L34^L35^L10000PL36\_ttyinpu"pL40L41L10001L10002L10003_signal L39:L42L43L10004 L44$L45$L46:_ttyoutp">_ttstart"L10007@L10008JL60L55L58L57L59L61L10005dL47L48L51rL49~L50L52L10009L56L62L63L76L668L64L68<L70DL72bL74L75L20000_max L73xL77_ttrstrt"L78L80L792L812L82L832_timeout _ttread"6L10011PL85lL86PL87l_passc L84l_ttwrite"pL89z_cpass L90L91L92L88malloc.o57x8w C "smKee ww BD- e5!m tm@m-*4c &e44@m- tLm  Lew"_malloc"rsave L2 L3>L58L64L9$L7.L84L1@L48rretrn _mfree"DL11RL12bL13\L14L18L16L19L20L21L24L22L23L10pipe.ooX+w   0   '  2 0  ʕ2˕3̕ww D 3- & 4 3 5Ee  ׬Ue 7 ^7Z P ww D. ׬  6, U e 7   7  5Ee w`w \D̵ & w6w 2D̵ wYYYX xYYY YYYYY(Y8x  x _canonb _coremap _swapmap _rootdir _lbolt _time _tout _callout x_mount _mpid _runin _runout _runrun _maxmem _lks _rootdev _swapdev _swplo _nswap _updlock _rablock _u _inode _file _pipe"rsave _ialloc L1t_falloc L2&_iput L3Trretrn _readp"xL5_plock"L6L7L8_wakeup _prele"L4_sleep _readi _writep"L10L10000$L110L9L12V_min _writei L15L16L14L18L17cat.oo5uw   U@ww 7 ww  # -<  &    ~wxw t5   X-R w@I)) I)I)(((Hh(I())(_u _partab _cat _ctopen"rsave L2L3L1rretrn _ctclose""L4,_ctwrite"0L66_cpass L7_spl5 L8BL9Z_sleep L10Z_putc L11z_lbolt _catintr"_spl0 L5L13_getc L10000L14_wakeup L12dc.o.o5/vb@w W#GAWpeD@te4UAII5 &  0wXw TAWpeD1 w6w 2AWpeD5 ww AWpeD5 ww AWpeDN - e ww AWpeD5E&  (55 E 5@ 5 ww AWpeDB   ~|E bE wAIQYAIQYIx(IIIxhIxIxIxHIxH8IxhIII_bdevsw _nblkdev _cdevsw _nchrdev _u _partab _proc _dc11 _dcrstab#b_dctstab#_dcopen"rsave L2L1L3jL4vL5vL6_sleep L7rretrn _dcclose"_wflusht L8_dcread"L10_ttread L9_dcwrite"L12_ttwrite L11_dcxint"_ttstart L10000>L14H_wakeup L13H_dcrint"LL16L17L18_signal _flushtt L15L10001L19L20L10003L10002L21_ttyinpu _dcsgtty"L23 L22^L24FL25^dn.o.o5v4Pw C e̕Eww @ ww @ e̵ ŀ(̵ % ̵ d -  e4w(w $ wiIiiIIYxxi_bdevsw _nblkdev _cdevsw _nchrdev _u _dnopen"rsave L2$L3.L1.rretrn _dnclose"2L4D_dnwrite"HL6ZL8ZL9p_sleep L10tL11L5_cpass L12_lbolt L7_dnint"_wakeup L13dp.o.o5;ww  -*'7  77<<&  %ߕBaww   77 xr 7 jwfw b\ &" D׭G 8 $V %&&  eww  2# F 7- &  e Vww 5  5 p  ZwTw PO H@ <E@ EQ77ww   <&  %ww E5Ue- ww E5  5׭| wjw feE׭Z7RH7D w6yyIIIyyyyyyy yyyy8y yxyxIy IyyyIIIyIy yIyx yyyyyyy yyy yyyyy y yyyyyx _bdevsw _nblkdev _cdevsw _nchrdev _u _buf J_bfreeli _dp11 _dpopen"rsave L2L1jL3X_getblk _dptimeo"_timeout rretrn _dpclose"nL5_brelse L4_dpread"L7_dpwait"ZL6L8_spl6 L9_spl0 _sleep _min _iomove _dpwrite"L10VL118_dpstart"L13`L10000nL15zL12L16L14L18_partab L19L17L20L21_dpturna"_dprint""L23`L24DL25`L22`_dpxint"dL27L28L29L26L31_wakeup L30kl.oo5wpw W#/AWpeC p@te83UCU@ww AWpNe wlw hAWpNe wPw LAWpNe w4w 0AWpeD - e ww AWpeBU53& ww AWpeD @0 BwIxIIxx8xhxxxI_bdevsw _nblkdev _cdevsw _nchrdev _u _partab _proc _kl11 x_klopen"rsave L2L1tL3BL4Zrretrn _klclose"x_wflusht L5_klread"_ttread L6_klwrite"_ttwrite L7_klxint"_ttstart L10000L9_wakeup L8_klrint"L11,_ttyinpu L106_klsgtty":L13`L14lL12lmem.o5exPw W7B "E WtE E@` _  ww |W 7 7aB 8B E :'i$ &WtE E@` _ wi )i X  )_u _bdevsw _nblkdev _cdevsw _nchrdev _mmread"rsave L1|L4_lshift _spl7 L5Z_fubyte _spl0 L2lL10000|_passc L3|rretrn _mmwrite"L7_dpadd L6L8_cpass L9L10_subyte pc.o5x w   -Ah U@l ww     h7  Vww | v -f5hUAh   6w2w . ( ww 5l nww -5h!-5hj -UAh ww  n-2 wpw l5l-^d( f w.w *d  wyYIYY y9XXYy y9XXYXy yi yXX yYYYYX8YXX yXXYXX yIYXX8 y _bdevsw _nblkdev _cdevsw _nchrdev _u _pc11 _pcopen"rsave L2>L3L1HL4 L6H_lbolt _sleep _pcleade"rretrn _pcclose"LL8x_spl4 L9\_getc L10j_spl0 L11|L7|_pcread"L15L16L17L18L19L13_passc L14L12_pcwrite"L21_cpass L22_pcoutpu"L20_pcstart"L24L23_pcrint" L26&L25bL27bL28>L29Z_putc L30Z_wakeup _pcpint"fL32|L33L31L35L34L36L40L38L39L37rf.o5 yw D Wt ,U 4  707  ww 8 t&6& ewpw lff7\ 0 SO%  U7?7> w*w &f eww  f ewyyyyy9IyyhIyyyyyyyIII_buf J_bfreeli _bdevsw _nblkdev _cdevsw _nchrdev _u _rftab _rrfbuf _rfstrat"rsave L2(_iodone L1V_spl5 L3<L4DL5R_rfstart"Z_spl0 rretrn L6_devstar _rfintr"L7L8L9L20000_rfread"_physio L10_rfwrite"L11rk.o5-yw D e5 AWp-U C4 E  N& 5 @ e  5 @,3-,3-22 >w:w 6 5  I |  U# (Uww D e5  5N 5N  r t& r U@AWt @Pwzw v 5 c_%   ~5 tE e7. ( : &  e ww  @U P?7  7 ww A |!5  E?%M |ww _5wjw ff ewHw D f ew(8Ixxx8xxxx_buf J_bfreeli _bdevsw _nblkdev _cdevsw _nchrdev _u _rk_q _rk_ap _rktab _rrkbuf _rkstrat"rsave L2"L3<_iodone L1L4RL20000`_lrem _spl5 L6L8_rkstart"L11L10L10001L10000_spl0 rretrn L13L14_rkaddr"_rkcomma"|L16 _rkerror"2L12L19@L20^_ldiv _rkintr"L22L10002L23_rkpost"L24_devstar L25L21L27.L26.L29DL30xL32^L33nL28xL35L36L34_rkread"_physio L37_rkwrite"L38tc.o5gyw N ww D-BU 4  707  ww #E  ˕un tUC5UNwHw D@5!E- U7"7"# x#5EU˕C: 1 x&:tߕ $"߂"և"" E5 @PUA e-wzyyyyyiyyyyyyyyyyyy_bdevsw _nblkdev _cdevsw _nchrdev _buf J_bfreeli _u _tctab _tcclose"rsave _bflush L1rretrn _tcstrat"L30_iodone L2^_spl6 L4DL5LL6Z_tcstart"b_spl0 L7L8L9_tcintr"L11L12L20L21,L222L14L15L16L17L10L25L23:L24tL10000`L10001dtm.o5y *xw D!  0  ww D4 & b & b ww 5R @t@]U`Rwbw ^D e""U (5  5 4  707  ww ` 5@ @5R U7 @tE@PU@`-|-U   UU TRF TV5' PRww  L R*5Z5P׭%  7*!5@PU׭7 77 T 0 whw dN f eR 7xw4w 0N  f e7 Lww DB   pwiy(IyyyyyyyyyyyyyyyyyyyyHiHih_buf J_bfreeli _bdevsw _nblkdev _cdevsw _nchrdev _u _tmtab _rtmbuf _t_openf _t_blkno _t_nxrec _tmopen"rsave L2L3.L1.rretrn _tmclose"2L5R_tcomman"bL4^L7hL10000vL8_lbolt _sleep L6_tmstrat"L10L11_iodone L9L12_clrbuf L13_spl5 L14L15 L16_tmstart" _spl0 L18&L17L10001PL19bL20L21L20000L23L24L10002L10003L10004L10005_tmintr"L25L26ZL27L28L29<L31PL20001L32PL33L34_tmread"_tmphys"_physio L35_tmwrite"L36_lshift L37&vs.o5RzT?0*#?546?213?879?w YhXl |ww E@h ww    < | | |ww 5x@ n-p<  *  f  pcrcsr = IENABLE|RDRENB; sleep(&lbolt, PCIPRI); } } else { PCADDR->pcpcsr =| IENABLE; pcleader(); } } pcclose(dev, flag) { if (flag==0) { spl4(); while (getc(&pc11.pcin) >= 0); PCADDR->pcrcsr = 0; pc11.pcstate = CLOSED; spl0(); } else pcleader(); } pcread() { register int c; spl4(); do { while ((c = getc(&pc11.pcin)) < 0) { if (pc11.pcstate==EOF) goto out; if ((PCADDR->pcrcsr&(ERROR|BUSY|DONE))==0) PCADDR->pcrcsr =| IENABLE|RDRENB; sleep(&pc11.pcin, PCIPRI); } } while (passc(c)>=0); out: spl0(); } pcwrite() { register int c; while ((c=cpass())>=0) pcoutput(c); } pcstart() { register int c; if (PCADDR->pcpcsr&DONE && (c = getc(&pc11.pcout)) >= 0) PCADDR->pcpbuf = c; } pcrint() { if (pc11.pcstate==WAITING) { if (PCADDR->pcrcsr&ERROR) return; pc11.pcstate = READING; } if (pc11.pcstate==READING) { if (PCADDR->pcrcsr&ERROR) pc11.pcstate = EOF; else { putc(PCADDR->pcrbuf, &pc11.pcin); if (pc11.pcin.cc < PCIHWAT) PCADDR->pcrcsr =| IENABLE|RDRENB; } wakeup(&pc11.pcin); } } pcpint() { register int c; if ((c=getc(&pc11.pcout)) >= 0) PCADDR->pcpbuf = c; if (pc11.pcout.cc <= PCOLWAT) wakeup(&pc11.pcout); } pcoutput(c) { if (PCADDR->pcpcsr&ERROR) { u.u_error = EIO; return; } if (pc11.pcout.cc >= PCOHWAT) sleep(&pc11.pcout, PCOPRI); putc(c, &pc11.pcout); pcstart(); } pcleader() { register int i; i = 100; do pcoutput(0); while (--i); } unix_v4/usr/sys/dmr/dc.c0000644000175000017500000000670601026347440013512 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DC-11 driver */ #include "../param.h" #include "../conf.h" #include "../user.h" #include "../tty.h" #include "../proc.h" /* base address */ #define DCADDR 0174000 #define NDC11 14 /* Control bits */ #define CDLEAD 01 #define CARRIER 04 #define SPEED1 010 #define STOP1 0400 #define RQSEND 01 #define PARITY 040 #define ERROR 0100000 #define CTRANS 040000 #define RINGIND 020000 struct tty dc11[NDC11]; struct dcregs { int dcrcsr; int dcrbuf; int dctcsr; int dctbuf; }; int dcrstab[] { 0, /* 0 baud */ 0, /* 50 baud */ 0, /* 75 baud */ 0, /* 110 baud */ 01101, /* 134.5 baud: 7b/ch, speed 0 */ 0111, /* 150 baud: 8b/ch, speed 1 */ 0, /* 200 baud */ 0121, /* 300 baud: 8b/ch, speed 2 */ 0, /* 600 baud */ 0131, /* 1200 baud */ 0, /* 1800 baud */ 0, /* 2400 baud */ 0, /* 4800 baud */ 0, /* 9600 baud */ 0, /* X0 */ 0, /* X1 */ }; int dctstab[] { 0, /* 0 baud */ 0, /* 50 baud */ 0, /* 75 baud */ 0, /* 110 baud */ 0501, /* 134.5 baud: stop 1 */ 0511, /* 150 baud */ 0, /* 200 baud */ 0521, /* 300 baud */ 0, /* 600 baud */ 0531, /* 1200 baud */ 0, /* 1800 baud */ 0, /* 2400 baud */ 0, /* 4800 baud */ 0, /* 9600 baud */ 0, /* X0 */ 0, /* X1 */ }; dcopen(dev, flag) { register struct tty *rtp; register *addr; if (dev.d_minor >= NDC11) { u.u_error = ENXIO; return; } rtp = &dc11[dev.d_minor]; rtp->t_addr = addr = DCADDR + dev.d_minor*8; rtp->t_state =| WOPEN; addr->dcrcsr =| IENABLE|CDLEAD; if ((rtp->t_state&ISOPEN) == 0) { rtp->t_quit = 034; /* FS */ rtp->t_intrup = 0177; /* DEL */ addr->dcrcsr = IENABLE|CDLEAD|SPEED1; addr->dctcsr = IENABLE|SPEED1|STOP1|RQSEND; rtp->t_state = ISOPEN | WOPEN; rtp->t_flags = ODDP|EVENP|ECHO; } if (addr->dcrcsr & CARRIER) rtp->t_state =| CARR_ON; while ((rtp->t_state & CARR_ON) == 0) sleep(&rtp->t_rawq, TTIPRI); rtp->t_state =& ~WOPEN; if (u.u_procp->p_ttyp == 0) u.u_procp->p_ttyp = rtp; } dcclose(dev) { register struct tty *tp; (tp = &dc11[dev.d_minor])->t_state = 0; wflushtty(tp); } dcread(dev) { register struct tty *tp; tp = &dc11[dev.d_minor]; if ((tp->t_addr->dcrcsr&CARRIER) != 0) ttread(tp); } dcwrite(dev) { register struct tty *tp; tp = &dc11[dev.d_minor]; if ((tp->t_addr->dcrcsr & CARRIER) != 0) ttwrite(tp); } dcxint(dev) { register struct tty *tp; ttstart(tp = &dc11[dev.d_minor]); if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT) wakeup(&tp->t_outq); } dcrint(dev) { register struct tty *tp; register int c, csr; tp = &dc11[dev.d_minor]; c = tp->t_addr->dcrbuf; if (((csr = tp->t_addr->dcrcsr) & CARRIER) == 0) { if ((tp->t_state&WOPEN) == 0) { tp->t_addr->dcrcsr =& ~CDLEAD; if (tp->t_state & CARR_ON) signal(tp, SIGHUP); flushtty(tp); } tp->t_state =& ~CARR_ON; return; } if (csr&ERROR || (tp->t_state&ISOPEN)==0) { if (tp->t_state&WOPEN && csr&CARRIER) tp->t_state =| CARR_ON; wakeup(tp); return; } csr =& PARITY; if (csr&&(tp->t_flags&ODDP) || !csr&&(tp->t_flags&EVENP)) ttyinput(c, tp); } dcsgtty(dev, av) int *av; { register struct tty *tp; register r; register int *v; tp = &dc11[dev.d_minor]; v = av; if (v) { *v++ = tp->t_speeds; *v++ = 0; *v++ = tp->t_flags; return; } wflushtty(tp); tp->t_speeds = u.u_arg[0]; tp->t_flags = u.u_arg[2]; if (r = dcrstab[tp->t_speeds.lobyte&017]) tp->t_addr->dcrcsr = r; if (r = dctstab[tp->t_speeds.hibyte&017]) tp->t_addr->dctcsr = r; } unix_v4/usr/sys/dmr/partab.c0000644000175000017500000000135401026347440014367 0ustar aapaap/* * Copyright 1973 Bell Telephone Laboratories Inc */ 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 }; unix_v4/usr/sys/dmr/rp.c0000644000175000017500000000573101026347440013542 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * RP disk driver */ #include "../param.h" #include "../buf.h" #include "../conf.h" #include "../user.h" struct { int rpds; int rper; int rpcs; int rpwc; int rpba; int rpca; int rpda; }; struct { char lbyte, hbyte; }; #define RPADDR 0176710 #define NRP 8 struct { char *nblocks; int cyloff; } rp_sizes[] { 40600, 0, /* cyl 0 thru 202 */ 40600, 203, /* cyl 203 thru 405 */ 9200, 0, /* cyl 0 thru 45 */ 9200, 360, /* cyl 360 thru 405 */ -1, 0, /* cyl 0 thru 327 */ -1, 78, /* cyl 78 thru 405 */ 0, 0, /* cyl X thru Y */ 0, 0, /* cyl X thru Y */ }; struct devtab rptab; struct buf rrpbuf; #define GO 01 #define RESET 0 #define RCOM 02 #define WCOM 04 #define HSEEK 014 #define IENABLE 0100 #define READY 0200 #define SUFU 01000 #define SUSU 02000 #define SUSI 04000 #define HNF 010000 /* * Use av_back to save track+sector, * b_resid for cylinder. */ #define trksec av_back #define cylin b_resid rpstrategy(abp) struct buf *abp; { register struct buf *bp; register char *p1, *p2; bp = abp; p1 = &rp_sizes[bp->b_dev.d_minor&07]; if (bp->b_dev.d_minor >= (NRP<<3) || bp->b_blkno >= p1->nblocks) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; bp->cylin = p1->cyloff; p1 = bp->b_blkno; p2 = lrem(p1, 10); p1 = ldiv(p1, 10); bp->trksec = (p1%20)<<8 | p2; bp->cylin =+ p1/20; spl5(); if ((p1 = rptab.d_actf)==0) rptab.d_actf = bp; else { for (; p2 = p1->av_forw; p1 = p2) { if (p1->cylin <= bp->cylin && bp->cylin < p2->cylin || p1->cylin >= bp->cylin && bp->cylin > p2->cylin) break; } bp->av_forw = p2; p1->av_forw = bp; } if (rptab.d_active==0) rpstart(); spl0(); } rpstart() { register struct buf *bp; if ((bp = rptab.d_actf) == 0) return; rptab.d_active++; RPADDR->rpda = bp->trksec; devstart(bp, &RPADDR->rpca, bp->cylin, bp->b_dev.d_minor>>3); } rpintr() { register struct buf *bp; register int ctr; if (rptab.d_active == 0) return; bp = rptab.d_actf; rptab.d_active = 0; if (RPADDR->rpcs < 0) { /* error bit */ /* printf("rpcs %o\nrpds %o\n", RPADDR->rpcs, RPADDR->rpds); printf("rper %o\n", RPADDR->rper); printf("flags %o\nblk %o\n", bp->b_flags, bp->b_blkno); */ if(RPADDR->rpds & (SUFU|SUSI|HNF)) { RPADDR->rpcs.lbyte = HSEEK|GO; ctr = 0; while ((RPADDR->rpds&SUSU) && --ctr); } RPADDR->rpcs = RESET|GO; ctr = 0; while ((RPADDR->rpcs&READY) == 0 && --ctr); if (++rptab.d_errcnt <= 10) { rpstart(); return; } bp->b_flags =| B_ERROR; } rptab.d_errcnt = 0; rptab.d_actf = bp->av_forw; bp->b_resid = RPADDR->rpwc; iodone(bp); rpstart(); } rpread(dev) { if(rpphys(dev)) physio(rpstrategy, &rrpbuf, dev, B_READ); } rpwrite(dev) { if(rpphys(dev)) physio(rpstrategy, &rrpbuf, dev, B_WRITE); } rpphys(dev) { register c; c = lshift(u.u_offset, -9); c =+ ldiv(u.u_count+511, 512); if(c > rp_sizes[dev.d_minor & 07].nblocks) { u.u_error = ENXIO; return(0); } return(1); } unix_v4/usr/sys/dmr/malloc.c0000644000175000017500000000213701026347440014365 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ struct map { char *m_size; char *m_addr; }; malloc(mp, size) struct map *mp; { register int a; register struct map *bp; for (bp = mp; bp->m_size; bp++) { if (bp->m_size >= size) { a = bp->m_addr; bp->m_addr =+ size; if ((bp->m_size =- size) == 0) do { bp++; (bp-1)->m_addr = bp->m_addr; } while ((bp-1)->m_size = bp->m_size); return(a); } } return(0); } mfree(mp, size, aa) struct map *mp; { register struct map *bp; register int t; register int a; a = aa; for (bp = mp; bp->m_addr<=a && bp->m_size!=0; bp++); if (bp>mp && (bp-1)->m_addr+(bp-1)->m_size == a) { (bp-1)->m_size =+ size; if (a+size == bp->m_addr) { (bp-1)->m_size =+ bp->m_size; while (bp->m_size) { bp++; (bp-1)->m_addr = bp->m_addr; (bp-1)->m_size = bp->m_size; } } } else { if (a+size == bp->m_addr && bp->m_size) { bp->m_addr =- size; bp->m_size =+ size; } else if (size) do { t = bp->m_addr; bp->m_addr = a; a = t; t = bp->m_size; bp->m_size = size; bp++; } while (size = t); } } unix_v4/usr/sys/dmr/tc.c0000644000175000017500000000445501026347440013531 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * TC-11 DECtape driver */ #include "../param.h" #include "../conf.h" #include "../buf.h" #include "../user.h" struct { int tccsr; int tccm; int tcwc; int tcba; int tcdt; }; struct devtab tctab; #define TCADDR 0177340 #define NTCBLK 578 #define TAPERR 0100000 #define TREV 04000 #define READY 0200 #define IENABLE 0100 #define UPS 0200 #define SAT 0 #define RNUM 02 #define RDATA 04 #define SST 010 #define WDATA 014 #define GO 01 #define SFORW 1 #define SREV 2 #define SIO 3 tcclose(dev) { bflush(dev); } tcstrategy(abp) struct buf *abp; { register struct buf *bp; bp = abp; if(bp->b_blkno >= NTCBLK) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; spl6(); if (tctab.d_actf==0) tctab.d_actf = bp; else tctab.d_actl->av_forw = bp; tctab.d_actl = bp; if (tctab.d_active==0) tcstart(); spl0(); } tcstart() { register struct buf *bp; register int *tccmp, com; if ((bp = tctab.d_actf) == 0) return; tccmp = &TCADDR->tccm; if (((*tccmp).hibyte&07) != bp->b_dev.d_minor) (*tccmp).lobyte = SAT|GO; tctab.d_errcnt = 20; tctab.d_active = SFORW; com = (bp->b_dev.d_minor<<8) | IENABLE|RNUM|GO; if ((TCADDR->tccsr & UPS) == 0) { com =| TREV; tctab.d_active = SREV; } *tccmp = com; } tcintr() { register struct buf *bp; register int *tccmp; register int *tcdtp; tccmp = &TCADDR->tccm; bp = tctab.d_actf; if (*tccmp&TAPERR) { *tccmp =& ~TAPERR; if (--tctab.d_errcnt <= 0) { bp->b_flags =| B_ERROR; goto done; } if (*tccmp&TREV) { setforw: tctab.d_active = SFORW; *tccmp =& ~TREV; } else { setback: tctab.d_active = SREV; *tccmp =| TREV; } (*tccmp).lobyte = IENABLE|RNUM|GO; return; } tcdtp = &TCADDR->tcdt; switch (tctab.d_active) { case SIO: done: tctab.d_active = 0; if (tctab.d_actf = bp->av_forw) tcstart(); else TCADDR->tccm.lobyte = SAT|GO; iodone(bp); return; case SFORW: if (*tcdtp > bp->b_blkno) goto setback; if (*tcdtp < bp->b_blkno) goto setforw; *--tcdtp = bp->b_addr; /* core address */ *--tcdtp = bp->b_wcount; tccmp->lobyte = (bp->b_flags&B_XMEM) | IENABLE|GO | (bp->b_flags&B_READ?RDATA:WDATA); tctab.d_active = SIO; return; case SREV: if (*tcdtp+3 > bp->b_blkno) goto setback; goto setforw; } } unix_v4/usr/sys/dmr/dv.c0000444000175000017500000001224001027175030013514 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DV disk driver */ #include "../param.h" #include "../buf.h" #include "../conf.h" #include "../user.h" struct { int dvcsr; int dvdbr; int dvmar; int dvwcr; int dvcbr; int dvssr; int dvair; int dvusr; }; struct { char lbyte, hbyte; }; #define DVADDR 0164000 #define NDV 1 struct { char *nblocks; int cyloff; } dv_sizes[] { 48720, 0, /* cyl 0 thru 202 */ 48720, 203, /* cyl 203 thru 405 */ 5040, 0, /* cyl 0 thru 20 */ 21840, 21, /* cyl 21 thru 111 */ 21840, 112, /* cyl 112 thru 202 */ 21840, 203, /* cyl 203 thru 293 */ 21840, 294, /* cyl 294 thru 384 */ 5040, 385, /* cyl 385 thru 405 */ }; struct { int hd1; int hd2; int cksum; char *chadr; } dvhdr; int dv_unit -1, dv_cyl, dv_head, dv_sctr, dv_count, dv_addr[2]; int dvhist; struct devtab dvtab; struct buf rdvbuf; #define HTBCOM 000000 #define CTBCOM 020000 #define CNBCOM 030000 #define INCHD 01 #define RECAL 02 #define RESET 020 #define SEEK 040 #define CLRDA 0100 #define CHRCOM 070000 #define CHWCOM 0130000 #define LDSCOM 0140000 #define CTLRST 0170000 #define DRVRDY 04000 #define ATTN 0400 #define DONE 0200 #define IENABLE 0100 #define GO 01 /* * Use av_back to save sector, * b_resid for cylinder+track. */ #define dvsec av_back #define cylhd b_resid dvstrategy(abp) struct buf *abp; { register struct buf *bp; register char *p1, *p2; bp = abp; p1 = &dv_sizes[bp->b_dev.d_minor&07]; if (bp->b_dev.d_minor >= (NDV<<3) || bp->b_blkno >= p1->nblocks) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; p2 = ldiv(bp->b_blkno,12); bp->cylhd = ((p1->cyloff+p2/20)<<5)|(p2%20); bp->dvsec = lrem(bp->b_blkno,12); spl5(); if ((p1 = dvtab.d_actf)==0) dvtab.d_actf = bp; else { for (; p2 = p1->av_forw; p1 = p2) { if (p1->cylhd <= bp->cylhd && bp->cylhd < p2->cylhd || p1->cylhd >= bp->cylhd && bp->cylhd > p2->cylhd) break; } bp->av_forw = p2; p1->av_forw = bp; } if (dvtab.d_active==0) dvstart(); spl0(); } dvstart() { register struct buf *bp; if ((bp = dvtab.d_actf) == 0) return; dv_cyl = bp->cylhd>>5; dv_head = bp->cylhd&037; dv_sctr = bp->dvsec; dv_count = bp->b_wcount<<1; dv_addr[0] = (bp->b_flags&B_XMEM)>>4; dv_addr[1] = bp->b_addr; dvexec(); } dvexec() { register struct buf *bp; bp = dvtab.d_actf; dvtab.d_active++; if (dv_unit!=(bp->b_dev.d_minor>>3)) { /* select unit */ dv_unit = bp->b_dev.d_minor>>3; DVADDR->dvcbr = LDSCOM | dv_unit; } DVADDR->dvcbr = CNBCOM | RESET | CLRDA; /* reset and clear */ if (dv_cyl != (~(DVADDR->dvssr|0177000))) { /* seek */ DVADDR->dvcbr = CTBCOM | dv_cyl; if(dvrdy()) return; DVADDR->dvcbr = CNBCOM | SEEK | RESET; DVADDR->dvair = 1<dvcsr = DONE | IENABLE; return; } DVADDR->dvcbr = HTBCOM | dv_head; /* select head */ if(dv_count <= -512) DVADDR->dvwcr = -512; else DVADDR->dvwcr = dv_count; dvhdr.hd1 = (dv_head<<8)+dv_cyl; /* set up header */ dvhdr.hd2 = 0170000|dv_sctr; dvhdr.cksum = -dvhdr.hd1-dvhdr.hd2; dvhdr.chadr = dv_addr[1]; if(dvrdy()) return; DVADDR->dvmar = &dvhdr; DVADDR->dvcbr = ((bp->b_flags&B_READ)? CHRCOM : CHWCOM ) | (dv_sctr<<1); DVADDR->dvcsr = IENABLE | GO | (dv_addr[0]<<4); } dvintr() { register struct buf *bp; register int csr; if (dvtab.d_active == 0) return; bp = dvtab.d_actf; dvtab.d_active = 0; csr = DVADDR->dvcsr; DVADDR->dvcsr = DONE; if (csr&ATTN) { /* seek complete */ DVADDR->dvair.lbyte = 0; if(DVADDR->dvssr>0) { /* error */ printf("ssr %o\n",DVADDR->dvssr); DVADDR->dvcbr = CNBCOM | RECAL | RESET; dv_unit = -1; if(dvrdy()) return; DVADDR->dvcbr = CTLRST; if (++dvtab.d_errcnt<=10) { dvexec(); return; } dvherr(0); return; } else { dvexec(); return; } } else { /* r/w complete */ if (csr<0) { /* error */ dvhist++; dv_unit = -1; if((dvtab.d_errcnt&03)==03) { DVADDR->dvcbr = CNBCOM | RECAL | RESET; printf("csr %o\n",csr); if(dvrdy()) return; } DVADDR->dvcbr = CTLRST; if(++dvtab.d_errcnt<=12) { dvexec(); return; } dvherr(0); return; } else { if ((dv_count =+ 512)<0) { /* more to do */ dpadd(dv_addr,512); if (++dv_sctr>=12) { dv_sctr = 0; if (++dv_head>=20) { dv_head = 0; dv_cyl++; } } dvexec(); return; } } } dvtab.d_errcnt = 0; dvtab.d_actf = bp->av_forw; bp->b_resid = DVADDR->dvwcr+0160000; iodone(bp); dvstart(); } dvrdy() { register int cnt; cnt = 0; while(--cnt && (DVADDR->dvssr&DRVRDY)); if (cnt==0) { printf("diva not ready\n"); dvherr(1); return(1); } else return(0); } dvherr(n) { register struct buf *bp; bp = dvtab.d_actf; printf("dev %o,blk %o,flg %o\n",bp->b_dev,bp->b_blkno,bp->b_flags); bp->b_flags =| B_ERROR; dvtab.d_errcnt = 0; dvtab.d_active = 0; dvtab.d_actf = bp->av_forw; iodone(bp); if(n==0) dvstart(); } dvread(dev) { if(dvphys(dev)) physio(dvstrategy, &rdvbuf, dev, B_READ); } dvwrite(dev) { if(dvphys(dev)) physio(dvstrategy, &rdvbuf, dev, B_WRITE); } dvphys(dev) { register c; c = lshift(u.u_offset, -9); c =+ ldiv(u.u_count+511, 512); if(c > dv_sizes[dev.d_minor & 07].nblocks) { u.u_error = ENXIO; return(0); } return(1); } unix_v4/usr/sys/dmr/dn.c0000644000175000017500000000244101026347440013515 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DN-11 ACU interface */ #include "../param.h" #include "../conf.h" #include "../user.h" struct dn { struct { char dn_stat; char dn_reg; } dn11[3]; } #define DNADDR 0175200 #define PWI 00200 #define ACR 00100 #define DLO 0020 #define DONE 0200 #define IENABLE 0100 #define DSS 040 #define PND 020 #define MENABLE 04 #define DPR 02 #define CRQ 01 #define DNPRI 5 dnopen(dev, flag) { register struct dn *dp; register int rdev; rdev = dev.d_minor; dp = &DNADDR->dn11[rdev]; if (dp->dn_reg&(PWI|DLO)) u.u_error = ENXIO; else { DNADDR->dn11[0].dn_stat =| MENABLE; dp->dn_stat = IENABLE|MENABLE|CRQ; } } dnclose(dev) { DNADDR->dn11[dev.d_minor].dn_stat =& MENABLE; } dnwrite(dev) { register struct dn *dp; register c; extern lbolt; dp = &DNADDR->dn11[dev.d_minor]; for(;;) { while ((dp->dn_stat&DONE)==0) sleep(DNADDR, DNPRI); dp->dn_stat =& ~DONE; contin: if (dp->dn_reg&(PWI|ACR)) { u.u_error = EIO; return; } if (dp->dn_stat&DSS) return; c = 0; if (u.u_count==0 || (dp->dn_stat&PND)==0 || (c=cpass())<0) continue; if (c=='-') { sleep(&lbolt, DNPRI); sleep(&lbolt, DNPRI); goto contin; } dp->dn_reg = c-'0'; dp->dn_stat =| DPR; } } dnint(dev) { wakeup(DNADDR); } unix_v4/usr/sys/dmr/cat.c0000644000175000017500000000162201026347440013663 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * GP DR11C driver used for C/A/T */ #include "../param.h" #include "../user.h" #include "../tty.h" #define CATADDR 0167750 #define PCAT 9 #define CATHIWAT 60 #define CATLOWAT 15 struct { int catlock; struct clist oq; } cat; struct { int catcsr; int catbuf; }; ctopen(dev) { if (cat.catlock==0) { cat.catlock++; CATADDR->catcsr =| IENABLE; } else u.u_error = ENXIO; } ctclose() { /* CATADDR->catcsr = 0; */ cat.catlock = 0; } ctwrite(dev) { register c; extern lbolt; while ((c=cpass()) >= 0) { spl5(); while (cat.oq.c_cc > CATHIWAT) sleep(&cat.oq, PCAT); while (putc(c, &cat.oq) < 0) sleep(&lbolt, PCAT); catintr(); spl0(); } } catintr() { register int c; if (CATADDR->catcsr&DONE && (c=getc(&cat.oq))>=0) { CATADDR->catbuf = c; if (cat.oq.c_cc==0 || cat.oq.c_cc==CATLOWAT) wakeup(&cat.oq); } } unix_v4/usr/sys/dmr/dhfdm.c0000644000175000017500000000036401026347440014200 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DM-BB fake driver */ #include "../tty.h" #include "../conf.h" struct tty dh11[]; dmopen(dev) { register struct tty *tp; tp = &dh11[dev.d_minor]; tp->t_state =| CARR_ON; } unix_v4/usr/sys/dmr/rf.c0000644000175000017500000000254601026347440013531 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * RF disk driver */ #include "../param.h" #include "../buf.h" #include "../conf.h" #include "../user.h" struct { int rfcs; int rfwc; int rfba; int rfda; int rfdae; }; struct devtab rftab; struct buf rrfbuf; #define NRFBLK 1024 #define RFADDR 0177460 #define GO 01 #define RCOM 02 #define WCOM 04 #define IENABLE 0100 rfstrategy(abp) struct buf *abp; { register struct buf *bp; bp = abp; if (bp->b_blkno >= NRFBLK*(bp->b_dev.d_minor+1)) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; spl5(); if (rftab.d_actf==0) rftab.d_actf = bp; else rftab.d_actl->av_forw = bp; rftab.d_actl = bp; if (rftab.d_active==0) rfstart(); spl0(); } rfstart() { register struct buf *bp; if ((bp = rftab.d_actf) == 0) return; rftab.d_active++; RFADDR->rfdae = bp->b_blkno.hibyte; devstart(bp, &RFADDR->rfda, bp->b_blkno<<8, 0); } rfintr() { register struct buf *bp; if (rftab.d_active == 0) return; bp = rftab.d_actf; rftab.d_active = 0; if (RFADDR->rfcs < 0) { /* error bit */ if (++rftab.d_errcnt <= 10) { rfstart(); return; } bp->b_flags =| B_ERROR; } rftab.d_errcnt = 0; rftab.d_actf = bp->av_forw; iodone(bp); rfstart(); } rfread(dev) { physio(rfstrategy, &rrfbuf, dev, B_READ); } rfwrite(dev) { physio(rfstrategy, &rrfbuf, dev, B_WRITE); } unix_v4/usr/sys/dmr/tm.c0000644000175000017500000000720301026347440013535 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * TM tape driver */ #include "../param.h" #include "../buf.h" #include "../conf.h" #include "../user.h" struct { int tmer; int tmcs; int tmbc; int tmba; int tmdb; int tmrd; }; struct devtab tmtab; struct buf rtmbuf; char t_openf[8]; char *t_blkno[8]; char *t_nxrec[8]; #define TMADDR 0172520 #define GO 01 #define RCOM 02 #define WCOM 04 #define WEOF 06 #define SFORW 010 #define SREV 012 #define WIRG 014 #define REW 016 #define DENS 060000 /* 9-channel */ #define IENABLE 0100 #define CRDY 0200 #define GAPSD 010000 #define TUR 1 #define HARD 0102200 /* ILC, EOT, NXM */ #define EOF 0040000 #define SSEEK 1 #define SIO 2 tmopen(dev, flag) { register dminor; dminor = dev.d_minor; if (t_openf[dminor]) u.u_error = ENXIO; else { t_openf[dminor]++; t_blkno[dminor] = 0; t_nxrec[dminor] = 65535; } } tmclose(dev, flag) { register int dminor; dminor = dev.d_minor; t_openf[dminor] = 0; if (flag) tcommand(dminor, WEOF); tcommand(dminor, REW); } tcommand(unit, com) { extern lbolt; while (tmtab.d_active || (TMADDR->tmcs & CRDY)==0) sleep(&lbolt, 1); TMADDR->tmcs = DENS|com|GO | (unit<<8); } tmstrategy(abp) struct buf *abp; { register struct buf *bp; register char **p; bp = abp; p = &t_nxrec[bp->b_dev.d_minor]; if (*p <= bp->b_blkno) { if (*p < bp->b_blkno) { bp->b_flags =| B_ERROR; iodone(bp); return; } if (bp->b_flags&B_READ) { clrbuf(bp); iodone(bp); return; } } if ((bp->b_flags&B_READ)==0) *p = bp->b_blkno + 1; bp->av_forw = 0; spl5(); if (tmtab.d_actf==0) tmtab.d_actf = bp; else tmtab.d_actl->av_forw = bp; tmtab.d_actl = bp; if (tmtab.d_active==0) tmstart(); spl0(); } tmstart() { register struct buf *bp; register int com; int unit; register char *blkno; loop: if ((bp = tmtab.d_actf) == 0) return; unit = bp->b_dev.d_minor; blkno = t_blkno[unit]; if (t_openf[unit] < 0 || (TMADDR->tmcs & CRDY)==0) { bp->b_flags =| B_ERROR; tmtab.d_actf = bp->av_forw; iodone(bp); goto loop; } com = (unit<<8) | (bp->b_flags&B_XMEM) | IENABLE|DENS; if (blkno != bp->b_blkno) { tmtab.d_active = SSEEK; if (blkno < bp->b_blkno) { com =| SFORW|GO; TMADDR->tmbc = blkno - bp->b_blkno; } else { if (blkno==0) com =| REW|GO; else { com =| SREV|GO; TMADDR->tmbc = bp->b_blkno - blkno; } } TMADDR->tmcs = com; return; } tmtab.d_active = SIO; TMADDR->tmbc = bp->b_wcount << 1; TMADDR->tmba = bp->b_addr; /* core address */ TMADDR->tmcs = com | ((bp->b_flags&B_READ)? RCOM|GO: ((tmtab.d_errcnt)? WIRG|GO: WCOM|GO)); } tmintr() { register struct buf *bp; register int unit; if ((bp = tmtab.d_actf)==0) return; unit = bp->b_dev.d_minor; if (TMADDR->tmcs < 0) { /* error bit */ while(TMADDR->tmrd & GAPSD) ; /* wait for gap shutdown */ if ((TMADDR->tmer&(HARD|EOF))==0 && tmtab.d_active==SIO) { if (++tmtab.d_errcnt < 10) { t_blkno[unit]++; tmtab.d_active = 0; tmstart(); return; } } else if(bp != &rtmbuf && (TMADDR->tmer&EOF)==0) t_openf[unit] = -1; bp->b_flags =| B_ERROR; tmtab.d_active = SIO; } if (tmtab.d_active == SIO) { tmtab.d_errcnt = 0; t_blkno[unit]++; tmtab.d_actf = bp->av_forw; tmtab.d_active = 0; iodone(bp); bp->b_resid = TMADDR->tmbc; } else t_blkno[unit] = bp->b_blkno; tmstart(); } tmread(dev) { tmphys(dev); physio(tmstrategy, &rtmbuf, dev, B_READ); u.u_count = -rtmbuf.b_resid; } tmwrite(dev) { tmphys(dev); physio(tmstrategy, &rtmbuf, dev, B_WRITE); u.u_count = 0; } tmphys(dev) { register unit, a; unit = dev.d_minor; a = lshift(u.u_offset, -9); t_blkno[unit] = a; t_nxrec[unit] = ++a; } unix_v4/usr/sys/dmr/lp.c0000644000175000017500000000416601026347440013535 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * LP-11 Line printer driver */ #include "../param.h" #include "../conf.h" #include "../user.h" #define LPADDR 0177514 #define IENABLE 0100 #define DONE 0200 #define LPPRI 10 #define LPLWAT 50 #define LPHWAT 100 #define EJLINE 60 #define MAXCOL 80 struct { int lpsr; int lpbuf; }; struct { int cc; int cf; int cl; int flag; int mcc; int ccc; int mlc; } lp11; #define CAP 01 #define EJECT 02 #define OPEN 04 #define FORM 014 lpopen(dev, flag) { if(lp11.flag & OPEN || LPADDR->lpsr < 0) { u.u_error = EIO; return; } lp11.flag =| (CAP|EJECT|OPEN); LPADDR->lpsr =| IENABLE; lpcanon(FORM); } lpclose(dev, flag) { lpcanon(FORM); lp11.flag = 0; } lpwrite() { register int c; while ((c=cpass())>=0) lpcanon(c); } lpcanon(c) { register c1, c2; c1 = c; if(lp11.flag&CAP) { if(c1>='a' && c1<='z') c1 =+ 'A'-'a'; else switch(c1) { case '{': c2 = '('; goto esc; case '}': c2 = ')'; goto esc; case '`': c2 = '\''; goto esc; case '|': c2 = '!'; goto esc; case '~': c2 = '^'; esc: lpcanon(c2); lp11.ccc--; c1 = '-'; } } switch(c1) { case '\t': lp11.ccc = (lp11.ccc+8) & ~7; return; case FORM: case '\n': if((lp11.flag&EJECT) == 0 || lp11.mcc!=0 || lp11.mlc!=0) { lp11.mcc = 0; lp11.mlc++; if(lp11.mlc >= EJLINE && lp11.flag&EJECT) c1 = FORM; lpoutput(c1); if(c1 == FORM) lp11.mlc = 0; } case '\r': lp11.ccc = 0; return; case 010: if(lp11.ccc > 0) lp11.ccc--; return; case ' ': lp11.ccc++; return; default: if(lp11.ccc < lp11.mcc) { lpoutput('\r'); lp11.mcc = 0; } if(lp11.ccc < MAXCOL) { while(lp11.ccc > lp11.mcc) { lpoutput(' '); lp11.mcc++; } lpoutput(c1); lp11.mcc++; } lp11.ccc++; } } lpstart() { register int c; while (LPADDR->lpsr&DONE && (c = getc(&lp11)) >= 0) LPADDR->lpbuf = c; } lpint() { register int c; lpstart(); if (lp11.cc == LPLWAT || lp11.cc == 0) wakeup(&lp11); } lpoutput(c) { if (lp11.cc >= LPHWAT) sleep(&lp11, LPPRI); putc(c, &lp11); spl4(); lpstart(); spl0(); } unix_v4/usr/sys/dmr/kl.c0000644000175000017500000000311101026347440013515 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * KL-11 driver */ #include "../param.h" #include "../conf.h" #include "../user.h" #include "../tty.h" #include "../proc.h" /* base address */ #define KLADDR 0177560 #define KLBASE 0176500 #define NKL11 4 #define DSRDY 02 #define RDRENB 01 struct tty kl11[NKL11]; struct klregs { int klrcsr; int klrbuf; int kltcsr; int kltbuf; } klopen(dev, flag) { register *addr; register struct tty *tp; if(dev.d_minor >= NKL11) { u.u_error = ENXIO; return; } tp = &kl11[dev.d_minor]; tp->t_quit = 034; /* ctl shf l */ tp->t_intrup = 0177; /* DEL */ if (u.u_procp->p_ttyp == 0) u.u_procp->p_ttyp = tp; addr = KLADDR; if(dev.d_minor) addr = KLBASE-8 + 8*dev.d_minor; tp->t_addr = addr; tp->t_flags = XTABS|LCASE|ECHO|CRMOD; tp->t_state = CARR_ON; addr->klrcsr =| IENABLE|DSRDY|RDRENB; addr->kltcsr =| IENABLE; } klclose(dev) { wflushtty(&kl11[dev.d_minor]); } klread(dev) { ttread(&kl11[dev.d_minor]); } klwrite(dev) { ttwrite(&kl11[dev.d_minor]); } klxint(dev) { register struct tty *tp; tp = &kl11[dev.d_minor]; ttstart(tp); if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT) wakeup(&tp->t_outq); } klrint(dev) { register int c, *addr; register struct tty *tp; tp = &kl11[dev.d_minor]; addr = tp->t_addr; c = addr->klrbuf; addr->klrcsr =| RDRENB; if ((c&0177)==0) addr->kltbuf = c; /* hardware botch */ ttyinput(c, tp); } klsgtty(dev, v) int *v; { register struct tty *tp; tp = &kl11[dev.d_minor]; if (v) v[2] = tp->t_flags; else { wflushtty(tp); tp->t_flags = u.u_arg[2]; } } unix_v4/usr/sys/dmr/mem.c0000644000175000017500000000206401026347440013673 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * Memory special file * minor device 0 is physical memory * minor device 1 is kernel memory * minor device 2 is EOF/RATHOLE */ #include "../param.h" #include "../user.h" #include "../conf.h" #include "../seg.h" mmread(dev) { register c, bn, on; int a; if(dev.d_minor == 2) return; do { bn = lshift(u.u_offset, -6); on = u.u_offset[1] & 077; a = UISA->r[0]; spl7(); UISA->r[0] = bn; if(dev.d_minor == 1) UISA->r[0] = KISA->r[(bn>>7)&07] + (bn & 0177); c = fubyte(on); UISA->r[0] = a; spl0(); } while(u.u_error==0 && passc(c)>=0); } mmwrite(dev) { register c, bn, on; int a; if(dev.d_minor == 2) { c = u.u_count; u.u_count = 0; u.u_base =+ c; dpadd(u.u_offset, c); return; } for(;;) { bn = lshift(u.u_offset, -6); on = u.u_offset[1] & 077; if ((c=cpass())<0 || u.u_error!=0) break; a = UISA->r[0]; spl7(); UISA->r[0] = bn; if(dev.d_minor == 1) UISA->r[0] = KISA->r[(bn>>7)&07] + (bn & 0177); subyte(on, c); UISA->r[0] = a; spl0(); } } unix_v4/usr/sys/dmr/tty.c0000644000175000017500000001451201026347440013736 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * general TTY subroutines */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../tty.h" #include "../proc.h" #include "../inode.h" #include "../file.h" #include "../reg.h" #include "../conf.h" struct { int int; }; #define PS 0177776 char maptab[] { 000,000,000,000,004,000,000,000, 000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000, 000,'|',000,'#',000,000,000,'`', '{','}',000,000,000,000,000,000, 000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000, '@',000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000, 000,000,000,000,000,000,000,000, 000,000,000,000,000,000,'~',000, 000,'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',000,000,000,000,000, }; struct cblock { struct cblock *c_next; char info[6]; }; struct cblock cfree[NCLIST]; struct cblock *cfreelist; struct { int ttrcsr; int ttrbuf; int tttcsr; int tttbuf; }; gtty() { int v[3]; register *up, *vp; vp = v; sgtty(vp); if (u.u_error) return; up = u.u_arg[0]; suword(up, *vp++); suword(++up, *vp++); suword(++up, *vp++); } stty() { register int *up; up = u.u_arg[0]; u.u_arg[0] = fuword(up); u.u_arg[1] = fuword(++up); u.u_arg[2] = fuword(++up); sgtty(0); } sgtty(v) { register struct file *fp; register struct inode *ip; if ((fp = getf(u.u_ar0[R0])) == NULL) return; ip = fp->f_inode; if ((ip->i_mode&IFMT) != IFCHR) { u.u_error = ENOTTY; return; } (*cdevsw[ip->i_addr[0].d_major].d_sgtty)(ip->i_addr[0], v); } wflushtty(atp) struct tty *atp; { register struct tty *tp; tp = atp; spl5(); while (tp->t_outq.c_cc) sleep(&tp->t_outq, TTOPRI); flushtty(tp); spl0(); } cinit() { register int ccp; register struct cblock *cp; register struct cdevsw *cdp; ccp = cfree; for (cp=(ccp+07)&~07; cp <= &cfree[NCLIST-1]; cp++) { cp->c_next = cfreelist; cfreelist = cp; } ccp = 0; for(cdp = cdevsw; cdp->d_open; cdp++) ccp++; nchrdev = ccp; } /* * flush all TTY queues */ flushtty(atp) struct tty *atp; { register struct tty *tp; register int sps; tp = atp; while (getc(&tp->t_canq) >= 0); while (getc(&tp->t_outq) >= 0); wakeup(&tp->t_rawq); wakeup(&tp->t_outq); sps = PS->int; spl5(); while (getc(&tp->t_rawq) >= 0); tp->t_delct = 0; PS->int = sps; } /* * transfer raw list to canonical list, * doing code conversion. */ canon(atp) struct tty *atp; { register char *bp; char *bp1; register struct tty *tp; register int c; tp = atp; spl5(); while (tp->t_delct==0) { if ((tp->t_state&CARR_ON)==0) return(0); sleep(&tp->t_rawq, TTIPRI); } spl0(); loop: bp = &canonb[2]; while ((c=getc(&tp->t_rawq)) >= 0) { if (c==0377) { tp->t_delct--; break; } if ((tp->t_flags&RAW)==0) { if (bp[-1]!='\\') { if (c==CERASE) { if (bp > &canonb[2]) bp--; continue; } if (c==CKILL) goto loop; if (c==CEOT) continue; } else if (maptab[c] && (maptab[c]==c || (tp->t_flags&LCASE))) { if (bp[-2] != '\\') c = maptab[c]; bp--; } } *bp++ = c; if (bp>=canonb+CANBSIZ) break; } bp1 = bp; bp = &canonb[2]; c = &tp->t_canq; while (bpt_flags; if ((c =& 0177) == '\r' && t_flags&CRMOD) c = '\n'; if ((t_flags&RAW)==0 && (c==tp->t_quit || c==tp->t_intrup)) { signal(tp, c==tp->t_intrup? SIGINT:SIGQIT); flushtty(tp); return; } if (tp->t_rawq.c_cc>=TTYHOG) { flushtty(tp); return; } if (t_flags&LCASE && c>='A' && c<='Z') c =+ 'a'-'A'; putc(c, &tp->t_rawq); if (t_flags&RAW || c=='\n' || c==004) { wakeup(&tp->t_rawq); if (putc(0377, &tp->t_rawq)==0) tp->t_delct++; } if (t_flags&ECHO) { ttyoutput(c, tp); ttstart(tp); } } /* * put character on TTY output queue, adding delays, * expanding tabs, and handling the CR/NL bit. */ ttyoutput(ac, tp) struct tty *tp; { register int c; register struct tty *rtp; register char *colp; int ctype; rtp = tp; c = ac&0177; if (c==004 && (rtp->t_flags&RAW)==0) return; if (c=='\t' && rtp->t_flags&XTABS) { do ttyoutput(' ', rtp); while (rtp->t_col&07); return; } if (rtp->t_flags&LCASE) { switch (c) { case '{': c = '('; goto esc; case '}': c = ')'; goto esc; case '|': c = '!'; goto esc; case '~': c = '^'; goto esc; case '`': c = '\''; esc: ttyoutput('\\', rtp); } if ('a'<=c && c<='z') c =+ 'A' - 'a'; } if (c=='\n' && rtp->t_flags&CRMOD) ttyoutput('\r', rtp); if (putc(c, &rtp->t_outq)) return; colp = &rtp->t_col; ctype = partab[c]; c = 0; switch (ctype&077) { /* ordinary */ case 0: (*colp)++; /* non-printing */ case 1: break; /* backspace */ case 2: if (*colp) (*colp)--; break; /* newline */ case 3: if (*colp) c = max((*colp>>4) + 3, 6); *colp = 0; break; /* tab */ case 4: if ((rtp->t_flags&NTDELAY)==0) c = 1 - (*colp | ~07); *colp =| 07; (*colp)++; break; /* vertical motion */ case 5: c = 0177; break; /* carriage return */ case 6: c = 6; *colp = 0; } if (c && (rtp->t_flags&NODELAY)==0) putc(c|0200, &rtp->t_outq); } ttrstrt(atp) { register struct tty *tp; tp = atp; tp->t_state =& ~TIMEOUT; ttstart(tp); } ttstart(atp) struct tty *atp; { register int *addr, c; register struct tty *tp; struct { int (*func)(); }; tp = atp; addr = tp->t_addr; if (tp->t_state&SSTART) { (*addr.func)(tp); return; } if ((addr->tttcsr&DONE)==0 || tp->t_state&TIMEOUT) return; if ((c=getc(&tp->t_outq)) >= 0) { if (c<=0177) addr->tttbuf = c | (partab[c]&0200); else { timeout(ttrstrt, tp, c&0177); tp->t_state =| TIMEOUT; } } } ttread(atp) struct tty *atp; { register struct tty *tp; tp = atp; if (tp->t_canq.c_cc || canon(tp)) while (tp->t_canq.c_cc && passc(getc(&tp->t_canq))>=0); } ttwrite(atp) struct tty *atp; { register struct tty *tp; register int c; tp = atp; while ((c=cpass())>=0) { spl5(); while (tp->t_outq.c_cc > TTHIWAT) { ttstart(tp); sleep(&tp->t_outq, TTOPRI); } spl0(); ttyoutput(c, tp); } ttstart(tp); } unix_v4/usr/sys/dmr/dhdm.c0000644000175000017500000000207101026347440014027 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DM-BB driver */ #include "../param.h" #include "../tty.h" #include "../conf.h" #define DMADDR 0170500 struct tty dh11[]; int ndh11; #define DONE 0200 #define SCENABL 040 #define CLSCAN 01000 #define TURNON 07 /* RQ send, CD lead, line enable */ #define CARRIER 0100 struct dmregs { int dmcsr; int dmlstat; }; dmopen(dev) { register struct tty *tp; tp = &dh11[dev.d_minor]; DMADDR->dmcsr = dev.d_minor; DMADDR->dmlstat = TURNON; if (DMADDR->dmlstat&CARRIER) tp->t_state =| CARR_ON; DMADDR->dmcsr = IENABLE|SCENABL; spl5(); while ((tp->t_state&CARR_ON)==0) sleep(&tp->t_rawq, TTIPRI); spl0(); } dmint() { register struct tty *tp; if (DMADDR->dmcsr&DONE) { tp = &dh11[DMADDR->dmcsr&017]; if (tp < &dh11[ndh11]) { wakeup(tp); if ((DMADDR->dmlstat&CARRIER)==0) { if ((tp->t_state&WOPEN)==0) { signal(tp, SIGHUP); DMADDR->dmlstat = 0; flushtty(tp); } tp->t_state =& ~CARR_ON; } else tp->t_state =| CARR_ON; } DMADDR->dmcsr = IENABLE|SCENABL; } } unix_v4/usr/sys/dmr/dp.c0000644000175000017500000000621701026347440013524 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DP-11 Synchronous interface driver */ #include "../param.h" #include "../conf.h" #include "../user.h" #include "../buf.h" /* control info */ struct { char *dp_buf; char *dp_bufp; int dp_nxmit; char dp_state; char dp_timer; int dp_proc; } dp11; /* device registers */ struct { int dprcsr; char dprbuf; char dpsyn0; int dptcsr; char dptbuf; char dpsyn1; }; /* bits */ #define ODDPAR 010000 #define IENABLE 0100 #define HDUPLX 02 #define CTRANS 0100000 #define RORUN 040000 #define RING 020000 #define DSRDY 010000 #define CARRIER 04000 #define DONE 0200 #define IENABLE 0100 #define SIENABL 040 #define WRITE 1 #define READ 0 #define DTRDY 01 #define RCVACT 04000 #define DPADDR 0174770 #define DPPRI 5 dpopen(dev, flag) { int dptimeout(); if (dp11.dp_proc!=0 && dp11.dp_proc!=u.u_procp) { u.u_error = ENXIO; return; } dp11.dp_proc = u.u_procp; dp11.dp_state = READ; if (dp11.dp_buf==0) { dp11.dp_buf = getblk(NODEV); dp11.dp_bufp = dp11.dp_buf->b_addr; dp11.dp_timer = 60; timeout(dptimeout, 0, 60); } DPADDR->dpsyn0 = 026; DPADDR->dprcsr = HDUPLX|IENABLE; DPADDR->dptcsr = IENABLE|SIENABL|DTRDY; } dpclose() { DPADDR->dprcsr = 0; DPADDR->dptcsr = 0; dp11.dp_timer = 0; dp11.dp_proc = 0; if (dp11.dp_buf != 0) { brelse(dp11.dp_buf); dp11.dp_buf = 0; } } dpread() { register char *bp, **epp; bp = dp11.dp_buf->b_addr; epp = &dp11.dp_bufp; for(;;) { if(dpwait()) return; if (*epp > bp) break; spl6(); if (dp11.dp_timer <= 1) { spl0(); return; } sleep(&dp11, DPPRI); spl0(); } iomove(dp11.dp_buf, 0, min(u.u_count, *epp-bp), B_READ); } dpwrite() { register char *bp; if (u.u_count==0 ||dpwait()) return; dp11.dp_state = WRITE; bp = dp11.dp_buf->b_addr; dp11.dp_bufp = bp; if (u.u_count>512) u.u_count = 512; dp11.dp_nxmit = u.u_count; iomove(dp11.dp_buf, 0, u.u_count, B_WRITE); dpstart(); } dpwait() { for(;;) { if ((DPADDR->dptcsr&DSRDY)==0 || dp11.dp_buf==0) { u.u_error = EIO; return(1); } spl6(); if (dp11.dp_state==READ && (DPADDR->dptcsr&CARRIER)==0) { spl0(); return(0); } sleep(&dp11, DPPRI); spl0(); } } dpstart() { register int c; extern char partab[]; dp11.dp_timer = 5; if (--dp11.dp_nxmit >= 0) { c = (*dp11.dp_bufp++) & 0177; DPADDR->dptbuf = c | ~partab[c]&0200; } else { dp11.dp_bufp = dp11.dp_buf->b_addr; dp11.dp_state = READ; } } dptimeout() { if (dp11.dp_timer==0) return; if (--dp11.dp_timer==0) { dpturnaround(); dp11.dp_timer = 1; } timeout(dptimeout, 0, 60); } dprint() { register int c; c = DPADDR->dprbuf & 0177; if (dp11.dp_state==READ) { if ((DPADDR->dprcsr&ODDPAR) == 0) c =| 0200; if (dp11.dp_bufp < dp11.dp_buf->b_addr+512) *dp11.dp_bufp++ = c; } } dpxint() { register int dpstat; dpstat = DPADDR->dptcsr; DPADDR->dptcsr =& ~(CTRANS|RORUN|RING|DONE); if (dpstat & (CTRANS|RORUN)) dpturnaround(); else if (dpstat&DONE && dp11.dp_state==WRITE) dpstart(); } dpturnaround() { dp11.dp_timer = 5; DPADDR->dprcsr =& ~RCVACT; if (dp11.dp_state==WRITE) { dp11.dp_state = READ; dp11.dp_bufp = dp11.dp_buf->b_addr; } wakeup(&dp11); } unix_v4/usr/sys/dmr/vt.c0000644000175000017500000000156401026347440013552 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * VT01 driver via DR11C to 11/20 */ #include "../param.h" #include "../user.h" int vtflag; struct vtreg { int csr; int buf; }; #define VTADDR 0167770 #define RQINT 01 #define BIENABL 040 #define SEOF 0100000 #define VTPRI 8 vtopen(dev, flag) { if (!flag) u.u_error = ENXIO; else VTADDR->csr = BIENABL; } vtclose() { VTADDR->buf = SEOF; VTADDR->csr =| RQINT; } vtwrite() { register int c; int register count; while ((c=cpass()) >= 0) { retry: for (count=0; count<10; count++) if ((VTADDR->csr&RQINT)==0) { VTADDR->buf = c&0377; VTADDR->csr =| RQINT; goto contin; } spl5(); if (VTADDR->csr&RQINT) { vtflag++; sleep(VTADDR, VTPRI); } spl0(); goto retry; contin:; } } vtintr() { VTADDR->csr =& ~RQINT; if (vtflag) { vtflag = 0; wakeup(VTADDR); } } unix_v4/usr/sys/dmr/dh.c0000644000175000017500000000736401026347440013520 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * DH-11 driver * This driver calls on the DHDM driver. * If the DH has no DM11-BB, then this driver will * be fake. To insure loading of the correct DM code, * lib2 should have dhdm.o dh.o and dhfdm.o in that order. */ #include "../param.h" #include "../conf.h" #include "../user.h" #include "../tty.h" #include "../proc.h" #define DHADDR 0160020 #define NDH11 16 struct tty dh11[NDH11]; int ndh11 NDH11; #define BITS6 01 #define BITS7 02 #define BITS8 03 #define PENABLE 020 #define OPAR 040 /* beware DEC manuals */ #define HDUPLX 040000 #define IENABLE 030100 #define PERROR 010000 #define FRERROR 020000 #define SSPEED 7 /* standard speed: 300 baud */ #define PS 0177776 int dhsar; struct dhregs { int dhcsr; int dhnxch; int dhlpr; int dhcar; int dhbcr; int dhbar; int dhbreak; int dhsilo; }; dhopen(dev, flag) { register struct tty *tp; extern dhstart(); if (dev.d_minor >= NDH11) { u.u_error = ENXIO; return; } tp = &dh11[dev.d_minor]; tp->t_addr = dhstart; DHADDR->dhcsr =| IENABLE; tp->t_state =| WOPEN|SSTART; if ((tp->t_state&ISOPEN) == 0) { tp->t_quit = 034; /* FS */ tp->t_intrup = 0177; /* DEL */ tp->t_speeds = SSPEED | (SSPEED<<8); tp->t_flags = ODDP|EVENP|ECHO; dhparam(tp); } dmopen(dev); tp->t_state =& ~WOPEN; tp->t_state =| ISOPEN; if (u.u_procp->p_ttyp == 0) u.u_procp->p_ttyp = tp; } dhclose(dev) { register struct tty *tp; (tp = &dh11[dev.d_minor])->t_state =& (CARR_ON|SSTART); wflushtty(tp); } dhread(dev) { register struct tty *tp; tp = &dh11[dev.d_minor]; if ((tp->t_state&CARR_ON) != 0) ttread(tp); } dhwrite(dev) { register struct tty *tp; tp = &dh11[dev.d_minor]; if ((tp->t_state&CARR_ON) != 0) ttwrite(tp); } dhrint() { register struct tty *tp; register int c; while ((c = DHADDR->dhnxch) < 0) { /* char. present */ tp = &dh11[(c>>8)&017]; if (tp >= &dh11[NDH11]) continue; if((tp->t_state&ISOPEN)==0 || (c&PERROR)) { wakeup(tp); continue; } if (c&FRERROR) /* break, return null */ c = 0; ttyinput(c, tp); } } dhsgtty(dev, av) int *av; { register struct tty *tp; register r; register int *v; tp = &dh11[dev.d_minor]; v = av; if (v) { *v++ = tp->t_speeds; *v++ = 0; *v++ = tp->t_flags; return; } wflushtty(tp); tp->t_speeds = u.u_arg[0]; tp->t_flags = u.u_arg[2]; dhparam(tp); } dhparam(atp) struct tty *atp; { register struct tty *tp; register int lpr; tp = atp; spl5(); DHADDR->dhcsr.lobyte = (tp - dh11) | IENABLE; lpr = (tp->t_speeds.hibyte<<10) | (tp->t_speeds.lobyte<<6); if (tp->t_speeds.lobyte == 4) /* 134.5 baud */ lpr =| BITS6|PENABLE|HDUPLX; else if (tp->t_flags&EVENP) if (tp->t_flags&ODDP) lpr =| BITS8; else lpr =| BITS7|PENABLE; else lpr =| BITS7|OPAR|PENABLE; DHADDR->dhlpr = lpr; spl0(); } dhxint() { register struct tty *tp; register ttybit, bar; bar = DHADDR->dhbar; DHADDR->dhcsr =& ~0101060; bar = (bar|dhsar)^bar; ttybit = 1; for (tp = dh11; tp < &dh11[NDH11]; tp++) { if(bar&ttybit) { dhsar =& ~ttybit; tp->t_state =& ~BUSY; dhstart(tp); } ttybit =<< 1; } } dhstart(atp) struct tty *atp; { extern ttrstrt(); register lineno, c; register struct tty *tp; int sps; struct { int int; }; sps = PS->int; spl5(); tp = atp; if (tp->t_state&(TIMEOUT|BUSY) || (tp->t_outq.c_cc==0)) return; if ((c = getc(&tp->t_outq))<=0177) { tp->t_char = c; lineno = tp-dh11; DHADDR->dhcsr.lobyte = lineno | IENABLE; DHADDR->dhcar = &tp->t_char; DHADDR->dhbcr = -1; lineno = 1<dhbar =| lineno; dhsar =| lineno; tp->t_state =| BUSY; } else { timeout(ttrstrt, tp, (c&0177)+6); tp->t_state =| TIMEOUT; } if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT) wakeup(&tp->t_outq); PS->int = sps; } unix_v4/usr/sys/dmr/vs.c0000644000175000017500000000306101026347440013543 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * Screw Works interface via DC-11 */ #include "../tty.h" #define VSADDR 0174150 #define CDLEAD 01 #define B1200 030 #define STOP1 0400 #define CLSEND 02 #define RQSEND 01 struct { int vsrcsr; int vsrbuf; int vsxcsr; int vsxbuf; }; struct { struct clist iq; struct clist oq; } vs; char vsmap[] "?0*#?546?213?879?"; vsopen(dev) { VSADDR->vsrcsr = IENABLE|B1200|CDLEAD; VSADDR->vsxcsr = STOP1|IENABLE|B1200; vschar(0); } vsclose(dev) { VSADDR->vsrcsr =& ~IENABLE; while (getc(&vs.iq) >= 0); } vswrite(dev) { register int count, c; count = 0; while ((c=cpass()) >= 0) { if (--count <= 0) { count = 60; vschar(0); } vschar(c); } vschar(0); } vschar(c) { c =^ 0277; /* magic map */ spl5(); while (vs.oq.c_cc > 60) { vsxintr(); sleep(&vs.oq, TTIPRI); } putc(c, &vs.oq); vsxintr(); spl0(); } vsxintr() { static lchar; register c; register int *xcsr; xcsr = &VSADDR->vsxcsr; if (*xcsr&DONE) { if (lchar==0277) { *xcsr =& ~RQSEND; lchar = 0; if (vs.oq.c_cc==0) goto wake; } if ((*xcsr&CLSEND) == 0) { *xcsr =& ~RQSEND; *xcsr =| RQSEND; if ((*xcsr&CLSEND) == 0) goto wake; } if ((c = getc(&vs.oq)) >= 0) VSADDR->vsxbuf = lchar = c; if (vs.oq.c_cc <= 15) wake: wakeup(&vs.oq); } } vsread(dev) { register int c; spl5(); while ((c = getc(&vs.iq)) < 0) sleep(&vs.iq, TTIPRI); spl0(); passc(vsmap[c&017]); } vsrintr() { register int c; c = VSADDR->vsrbuf; if (vs.iq.c_cc<=10) putc(c, &vs.iq); wakeup(&vs.iq); } unix_v4/usr/sys/dmr/rk.c0000644000175000017500000000564401026347440013540 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ /* * RK disk driver */ #include "../param.h" #include "../buf.h" #include "../conf.h" #include "../user.h" #define RKADDR 0177400 #define NRK 4 #define NRKBLK 4872 #define RESET 0 #define GO 01 #define SEEK 010 #define DRESET 014 #define IENABLE 0100 #define DRY 0200 #define ARDY 0100 #define WLO 020000 #define CTLRDY 0200 #define SEEKCMP 020000 #define B_SEEK 02000 struct buf *rk_q[NRK]; int *rk_ap; struct { int rkds; int rker; int rkcs; int rkwc; int rkba; int rkda; }; struct devtab rktab; struct buf rrkbuf; rkstrategy(abp) struct buf *abp; { register struct buf *bp; register *qc, *ql; int d; bp = abp; d = bp->b_dev.d_minor-7; if(d <= 0) d = 1; if (bp->b_blkno >= NRKBLK*d) { bp->b_flags =| B_ERROR; iodone(bp); return; } bp->av_forw = 0; bp->b_flags =& ~B_SEEK; if(bp->b_dev.d_minor < 8) d = bp->b_dev.d_minor; else d = lrem(bp->b_blkno, d); spl5(); if ((ql = *(qc = &rk_q[d])) == NULL) { *qc = bp; if (RKADDR->rkcs&CTLRDY) rkstart(); goto ret; } while ((qc = ql->av_forw) != NULL) { if (ql->b_blknob_blkno && bp->b_blknob_blkno || ql->b_blkno>bp->b_blkno && bp->b_blkno>qc->b_blkno) { ql->av_forw = bp; bp->av_forw = qc; goto ret; } ql = qc; } ql->av_forw = bp; ret: spl0(); } rkstart() { register struct buf *bp; register int *qp; for (qp = rk_q; qp < &rk_q[NRK];) { if ((bp = *qp++) && (bp->b_flags&B_SEEK)==0) { RKADDR->rkda = rkaddr(bp); rkcommand(IENABLE|SEEK|GO); if (RKADDR->rkcs<0) { /* error bit */ bp->b_flags =| B_ERROR; *--qp = bp->av_forw; iodone(bp); rkerror(); } else bp->b_flags =| B_SEEK; } } } rkaddr(bp) struct buf *bp; { register struct buf *p; register int b; int d, m; p = bp; b = p->b_blkno; m = p->b_dev.d_minor - 7; if(m <= 0) d = p->b_dev.d_minor; else { d = lrem(b, m); b = ldiv(b, m); } return(d<<13 | (b/12)<<4 | b%12); } rkintr() { register struct buf *bp; if (RKADDR->rkcs < 0) { /* error bit */ if (RKADDR->rker&WLO || ++rktab.d_errcnt>10) rkpost(B_ERROR); rkerror(); } if (RKADDR->rkcs&SEEKCMP) { rk_ap = &rk_q[(RKADDR->rkds>>13) & 07]; devstart(*rk_ap, &RKADDR->rkda, rkaddr(*rk_ap), 0); } else rkpost(0); } rkpost(errbit) { register struct buf *bp; if (rk_ap) { bp = *rk_ap; bp->b_flags =| B_DONE | errbit; *rk_ap = bp->av_forw; rk_ap = NULL; iodone(bp); rktab.d_errcnt = 0; rkstart(); } } rkerror() { register int *qp; register struct buf *bp; rkcommand(IENABLE|RESET|GO); for (qp = rk_q; qp < &rk_q[NRK];) if ((bp = *qp++) != NULL && bp->b_flags&B_SEEK) { RKADDR->rkda = rkaddr(bp); while ((RKADDR->rkds&(DRY|ARDY)) == DRY); rkcommand(IENABLE|DRESET|GO); } } rkcommand(com) { RKADDR->rkcs = com; while((RKADDR->rkcs&CTLRDY)==0); } rkread(dev) { physio(rkstrategy, &rrkbuf, dev, B_READ); } rkwrite(dev) { physio(rkstrategy, &rrkbuf, dev, B_WRITE); } unix_v4/usr/sys/dmr/pipe.c0000644000175000017500000000361401026347440014054 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../systm.h" #include "../user.h" #include "../inode.h" #include "../file.h" #include "../reg.h" #define PIPSIZ 4096 pipe() { register *ip, *rf, *wf; ip = ialloc(rootdev); if(ip == NULL) return; wf = falloc(); if(wf == NULL) { iput(ip); return; } u.u_ar0[R1] = u.u_ar0[R0]; rf = falloc(); if(rf == NULL) { wf->f_count = 0; u.u_ofile[u.u_ar0[R1]] = NULL; iput(ip); return; } wf->f_flag = FWRITE|FPIPE; wf->f_inode = ip; rf->f_flag = FREAD|FPIPE; rf->f_inode = ip; ip->i_count = 2; ip->i_flag = IACC|IUPD; ip->i_mode = IALLOC; } readp(fp) int *fp; { register *rp, *ip; rp = fp; ip = rp->f_inode; loop: plock(ip); if(rp->f_offset[1] == ip->i_size1) { if(rp->f_offset[1] != 0) { rp->f_offset[1] = 0; ip->i_size1 = 0; if(ip->i_mode&IWRITE) { ip->i_mode =& ~IWRITE; wakeup(ip+1); } } prele(ip); if(ip->i_count < 2) return; ip->i_mode =| IREAD; sleep(ip+2, PPIPE); goto loop; } u.u_offset[0] = 0; u.u_offset[1] = rp->f_offset[1]; readi(ip); rp->f_offset[1] = u.u_offset[1]; prele(ip); } writep(fp) { register *rp, *ip, c; rp = fp; ip = rp->f_inode; c = u.u_count; loop: plock(ip); if(ip->i_count<2 || c==0) { prele(ip); u.u_count = c; return; } if(ip->i_size1 == PIPSIZ) { ip->i_mode =| IWRITE; prele(ip); sleep(ip+1, PPIPE); goto loop; } u.u_offset[0] = 0; u.u_offset[1] = ip->i_size1; u.u_count = min(c, PIPSIZ-u.u_offset[1]); c =- u.u_count; writei(ip); prele(ip); if(ip->i_mode&IREAD) { ip->i_mode =& ~IREAD; wakeup(ip+2); } goto loop; } plock(ip) int *ip; { register *rp; rp = ip; while(rp->i_flag&ILOCK) { rp->i_flag =| IWANT; sleep(rp, PPIPE); } rp->i_flag =| ILOCK; } prele(ip) int *ip; { register *rp; rp = ip; rp->i_flag =& ~ILOCK; if(rp->i_flag&IWANT) { rp->i_flag =& ~IWANT; wakeup(rp); } } unix_v4/usr/sys/dmr/bio.c0000644000175000017500000001670601026347440013676 0ustar aapaap# /* * Copyright 1973 Bell Telephone Laboratories Inc */ #include "../param.h" #include "../user.h" #include "../buf.h" #include "../conf.h" #include "../systm.h" #include "../proc.h" #include "../seg.h" char buffers[NBUF][514]; struct buf swbuf; struct { int int;}; #define PS 0177776 int tmtab; int raflag 1; bread(dev, blkno) { register struct buf *rbp; rbp = getblk(dev, blkno); if (rbp->b_flags&B_DONE) return(rbp); rbp->b_flags =| B_READ; rbp->b_wcount = -256; (*bdevsw[dev.d_major].d_strategy)(rbp); iowait(rbp); return(rbp); } breada(adev, blkno, rablkno) { register struct buf *rbp, *rabp; register int dev; dev = adev; rbp = 0; if (!incore(dev, blkno)) { rbp = getblk(dev, blkno); if ((rbp->b_flags&B_DONE) == 0) { rbp->b_flags =| B_READ; rbp->b_wcount = -256; (*bdevsw[adev.d_major].d_strategy)(rbp); } } if (rablkno && !incore(dev, rablkno) && raflag) { rabp = getblk(dev, rablkno); if (rabp->b_flags & B_DONE) brelse(rabp); else { rabp->b_flags =| B_READ|B_ASYNC; rabp->b_wcount = -256; (*bdevsw[adev.d_major].d_strategy)(rabp); } } if (rbp==0) return(bread(dev, blkno)); iowait(rbp); return(rbp); } bwrite(bp) struct buf *bp; { register struct buf *rbp; register flag; rbp = bp; flag = rbp->b_flags; rbp->b_flags =& ~(B_READ | B_DONE | B_ERROR | B_DELWRI); rbp->b_wcount = -256; (*bdevsw[rbp->b_dev.d_major].d_strategy)(rbp); if ((flag&B_ASYNC) == 0) { iowait(rbp); brelse(rbp); } else if ((flag&B_DELWRI)==0) geterror(rbp); } bdwrite(bp) struct buf *bp; { register struct buf *rbp; rbp = bp; if (bdevsw[rbp->b_dev.d_major].d_tab == &tmtab) bawrite(rbp); else { rbp->b_flags =| B_DELWRI | B_DONE; brelse(rbp); } } bawrite(bp) struct buf *bp; { register struct buf *rbp; rbp = bp; rbp->b_flags =| B_ASYNC; bwrite(rbp); } brelse(bp) struct buf *bp; { register struct buf *rbp, **backp; register int sps; rbp = bp; if (rbp->b_flags&B_WANTED) wakeup(rbp); if (bfreelist.b_flags&B_WANTED) { bfreelist.b_flags =& ~B_WANTED; wakeup(&bfreelist); } if (rbp->b_flags&B_ERROR) rbp->b_dev.d_minor = -1; /* no assoc. on error */ backp = &bfreelist.av_back; sps = PS->int; spl6(); rbp->b_flags =& ~(B_WANTED|B_BUSY|B_ASYNC); (*backp)->av_forw = rbp; rbp->av_back = *backp; *backp = rbp; rbp->av_forw = &bfreelist; PS->int = sps; } incore(adev, blkno) { register int dev; register struct buf *bp; register struct devtab *dp; dev = adev; dp = bdevsw[adev.d_major].d_tab; for (bp=dp->b_forw; bp != dp; bp = bp->b_forw) if (bp->b_blkno==blkno && bp->b_dev==dev) return(bp); return(0); } getblk(dev, blkno) { register struct buf *bp; register struct devtab *dp; extern lbolt; if(dev.d_major >= nblkdev) panic("blkdev"); loop: if (dev < 0) dp = &bfreelist; else { dp = bdevsw[dev.d_major].d_tab; for (bp=dp->b_forw; bp != dp; bp = bp->b_forw) { if (bp->b_blkno!=blkno || bp->b_dev!=dev) continue; spl6(); if (bp->b_flags&B_BUSY) { bp->b_flags =| B_WANTED; sleep(bp, PRIBIO); spl0(); goto loop; } spl0(); notavail(bp); return(bp); } } spl6(); if (bfreelist.av_forw == &bfreelist) { bfreelist.b_flags =| B_WANTED; sleep(&bfreelist, PRIBIO); spl0(); goto loop; } spl0(); notavail(bp = bfreelist.av_forw); if (bp->b_flags & B_DELWRI) { bp->b_flags =| B_ASYNC; bwrite(bp); goto loop; } bp->b_flags = B_BUSY | B_RELOC; bp->b_back->b_forw = bp->b_forw; bp->b_forw->b_back = bp->b_back; bp->b_forw = dp->b_forw; bp->b_back = dp; dp->b_forw->b_back = bp; dp->b_forw = bp; bp->b_dev = dev; bp->b_blkno = blkno; return(bp); } iowait(bp) struct buf *bp; { register struct buf *rbp; rbp = bp; spl6(); while ((rbp->b_flags&B_DONE)==0) sleep(rbp, PRIBIO); spl0(); geterror(rbp); } notavail(bp) struct buf *bp; { register struct buf *rbp; register int sps; rbp = bp; sps = PS->int; spl6(); rbp->av_back->av_forw = rbp->av_forw; rbp->av_forw->av_back = rbp->av_back; rbp->b_flags =| B_BUSY; PS->int = sps; } iodone(bp) struct buf *bp; { register struct buf *rbp; rbp = bp; rbp->b_flags =| B_DONE; if (rbp->b_flags&B_ASYNC) brelse(rbp); else { rbp->b_flags =& ~B_WANTED; wakeup(rbp); } } clrbuf(bp) int *bp; { register *p; register c; p = bp->b_addr; c = 256; do *p++ = 0; while (--c); } binit() { register struct buf *bp; register struct devtab *dp; register int i; struct bdevsw *bdp; bfreelist.b_forw = bfreelist.b_back = bfreelist.av_forw = bfreelist.av_back = &bfreelist; for (i=0; ib_dev = -1; bp->b_addr = buffers[i]; bp->b_back = &bfreelist; bp->b_forw = bfreelist.b_forw; bfreelist.b_forw->b_back = bp; bfreelist.b_forw = bp; bp->b_flags = B_BUSY; brelse(bp); } i = 0; for (bdp = bdevsw; bdp->d_open; bdp++) { dp = bdp->d_tab; dp->b_forw = dp; dp->b_back = dp; i++; } nblkdev = i; } /* * Device start routine for disks */ #define IENABLE 0100 #define WCOM 02 #define RCOM 04 #define GO 01 devstart(bp, devloc, devblk, hbcom) struct buf *bp; int *devloc; { register int *dp; register struct buf *rbp; register int com; dp = devloc; rbp = bp; *dp = devblk; /* block address */ *--dp = rbp->b_addr; /* buffer address */ *--dp = rbp->b_wcount; /* word count */ com = (hbcom<<8) | IENABLE | GO | rbp->b_flags&B_XMEM; if (rbp->b_flags&B_READ) /* command + x-mem */ com =| RCOM; else com =| WCOM; *--dp = com; } /* * swap I/O */ swap(blkno, coreaddr, count, rdflg) { register int *fp; fp = &swbuf.b_flags; spl6(); while (*fp&B_BUSY) { *fp =| B_WANTED; sleep(fp, PSWP); } *fp = B_BUSY | rdflg | (coreaddr>>6)&B_XMEM; swbuf.b_dev = swapdev; swbuf.b_wcount = - (count<<5); /* 32 w/block */ swbuf.b_blkno = blkno; swbuf.b_addr = coreaddr<<6; /* 64 b/block */ (*bdevsw[swapdev>>8].d_strategy)(&swbuf); spl6(); while((*fp&B_DONE)==0) sleep(fp, PSWP); if (*fp&B_WANTED) wakeup(fp); spl0(); *fp =& ~(B_BUSY|B_WANTED); return(*fp&B_ERROR); } /* * make sure all write-behind blocks * on dev (or NODEV for all) * are flushed out. */ bflush(dev) { register struct buf *bp; loop: spl6(); for (bp = bfreelist.av_forw; bp != &bfreelist; bp = bp->av_forw) { if (bp->b_flags&B_DELWRI && (dev == NODEV||dev==bp->b_dev)) { bp->b_flags =| B_ASYNC; notavail(bp); bwrite(bp); goto loop; } } spl0(); } physio(strat, abp, dev, rw) struct buf *abp; int (*strat)(); { register struct buf *bp; register char *base; register int nb; int ts; bp = abp; base = u.u_base; if (base&01 || u.u_count&01 || base>=base+u.u_count) goto bad; ts = (u.u_tsize+127) & ~0177; nb = (base>>6) & 01777; if (nb < ts) goto bad; if ((((base+u.u_count)>>6)&01777) >= ts+u.u_dsize && nb < 1024-u.u_ssize) goto bad; spl6(); while (bp->b_flags&B_BUSY) { bp->b_flags =| B_WANTED; sleep(bp, PRIBIO); } bp->b_flags = B_BUSY | rw; bp->b_dev = dev; bp->b_addr = base&077; base = UISA->r[nb>>7] + (nb&0177); bp->b_flags =| (base>>6) & B_XMEM; bp->b_blkno = lshift(u.u_offset, -9); bp->b_addr =+ base<<6; bp->b_wcount = -(u.u_count>>1); bp->b_error = 0; u.u_procp->p_flag =| SLOCK; (*strat)(bp); spl6(); while ((bp->b_flags&B_DONE) == 0) sleep(bp, PRIBIO); u.u_procp->p_flag =& ~SLOCK; if (bp->b_flags&B_WANTED) wakeup(bp); spl0(); bp->b_flags =& ~(B_BUSY|B_WANTED); u.u_count = (-bp->b_resid)<<1; geterror(bp); return; bad: u.u_error = EFAULT; } geterror(abp) struct buf *abp; { register struct buf *bp; bp = abp; if (bp->b_flags&B_ERROR) if ((u.u_error = bp->b_error)==0) u.u_error = EIO; } unix_v4/usr/sys/proc.h0000644000175000017500000000060301026347440013300 0ustar aapaapstruct proc { char p_stat; char p_flag; char p_pri; char p_sig; char p_null; char p_time; int p_ttyp; int p_pid; int p_ppid; int p_addr; int p_size; int p_wchan; int *p_textp; } proc[NPROC]; /* stat codes */ #define SSLEEP 1 #define SWAIT 2 #define SRUN 3 #define SIDL 4 #define SZOMB 5 /* flag codes */ #define SLOAD 01 #define SSYS 02 #define SLOCK 04 #define SSWAP 010 unix_v4/usr/sys/text.h0000644000175000017500000000016301026347440013322 0ustar aapaapstruct text { int x_daddr; int x_caddr; int x_size; int *x_iptr; char x_count; char x_ccount; } text[NTEXT]; unix_v4/usr/sys/mch.o0000644000175000017500000000721001027200721013103 0ustar aapaap  jfbV7J fF E507 50 0 5 @@QDQEQ@  5 Q 2pv Er bI 2 d5U0 J7NBE   5 e E1 vhB ZT  5 B<      ` f EA `E Bv EE (&v  2  @:I  `& H>  P ~ & ~ &  PII2.   P ~lfZ  & C~JmH   W W @5z a~?tE@<ķ ,    0 &  6r 6r@@A6v@@&HF).45.fppmfpi @ mtpi splrtiresettrap"call"<_trap PSnofault$SSR0zssr$SSR1|SSR2~call16_runrun _swtch _u!_savfp"_incupc"_display"CSWxfuwordp_getc"0_putc"_cfreeli _spl5"X_backup"_regloc backupjflgbflgfetcht00t01t02t03t04t05t06t07t10t11t12t13t14t15t16t17u0u1u2u3u4u5u6u7setreg_fubyte"(_subyte"B_fuword"l_suword"gwordvpworderrsuword_copyin"_copyout"copsu_idle"_savu""_retu"8_aretu"0KISA6_spl0"L_spl1"P_spl4"T_spl6"\_spl7"`_copyseg"dSISA0SISA1UISA0UISA1UISD0UISD1_clearse"_dpadd"_dpcmp"start"_end _edata _main KISA0KISD0usizeSISD0SISD1_ldiv"x_lrem"_lshift"rsave"rretrn"badtrap$unix_v4/usr/sys/conf.o0000644000175000017500000000114001027200721013255 0ustar aapaapVh(8HXhx(8xHX8hx8_bdevsw#_nulldev _rkstrat _rktab _tcclose _tcstrat _tctab _tmopen _tmclose _tmstrat _tmtab _cdevsw#_klopen _klclose _klread _klwrite _klsgtty _rkread _rkwrite _nodev _tmread _tmwrite _dhopen _dhclose _dhread _dhwrite _dhsgtty _pcopen _pcclose _pcread _pcwrite _rootdev#N_swapdev#P_swplo#R_nswap#Tunix_v4/usr/sys/user.h0000644000175000017500000000225701026347440013322 0ustar aapaapstruct user { int u_rsav[2]; /* must be first */ int u_fsav[25]; /* must be second */ char u_segflg; char u_error; char u_uid; char u_gid; char u_ruid; char u_rgid; int u_procp; char *u_base; char *u_count; char *u_offset[2]; int *u_cdir; char u_dbuf[DIRSIZ]; char *u_dirp; struct { int u_ino; char u_name[DIRSIZ]; } u_dent; int *u_pdir; int u_uisa[8]; int u_uisd[8]; int u_ofile[NOFILE]; int u_arg[5]; int u_tsize; int u_dsize; int u_ssize; int u_qsav[2]; int u_ssav[2]; int u_signal[NSIG]; int u_utime; int u_stime; int u_cutime[2]; int u_cstime[2]; int *u_ar0; int u_prof[4]; char u_nice; char u_dsleep; } u; /* u = 140000 */ /* u_error codes */ #define EFAULT 106 #define EPERM 1 #define ENOENT 2 #define ESRCH 3 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 #define ENOMEM 12 #define EACCES 13 #define ENOTBLK 15 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOTDIR 20 #define EISDIR 21 #define EINVAL 22 #define ENFILE 23 #define EMFILE 24 #define ENOTTY 25 #define ETXTBSY 26 #define EFBIG 27 #define ENOSPC 28 #define ESPIPE 29 #define EROFS 30 unix_v4/usr/lpd/0000777000175000017500000000000001027162766012141 5ustar aapaapunix_v4/usr/mdec/0000755000175000017500000000000001026347440012257 5ustar aapaapunix_v4/usr/mdec/list.s0000644000175000017500000000031501026347440013415 0ustar aapaap/ list on kl-11 followon ascii file mov $ascii,r1 1: movb (r1)+,r0 beq 1f jsr pc,(r5) br 1b 1: rts pc ascii: <\0> unix_v4/usr/mdec/tboot.s0000644000175000017500000000512601026347440013576 0ustar aapaap/ tape boot program to load and transfer / to a 'tp' entry / entry is made by jsr pc,*$0 / so return can be rts pc / jsr pc,(r5) is putc / jsr pc,2(r5) is getc / jsr pc,4(r5) is mesg core = 24. .mt. = 0 .. = [core*2048.]-512. start: mov $..,sp mov $name,r4 mov sp,r1 cmp pc,r1 bhis 2f clr r0 cmp (r0),$407 bne 1f mov $20,r0 1: mov (r0)+,(r1)+ cmp r1,$end blo 1b jmp (sp) 2: jsr pc,rew mov $tvec,r5 mov $'=,r0 jsr pc,(r5) 2: mov r4,r1 1: jsr pc,2(r5) cmp r0,$'\n beq 1f cmp r0,$'@ beq 2b movb r0,(r1)+ cmp r0,$'# bne 1b sub $2,r1 cmp r1,r4 blo 2b br 1b 1: clrb (r1) cmp r1,r4 blos start mov $1,tapa mov $-6144.,wc jsr pc,taper clr r1 1: mov r1,r2 mov r4,r0 2: cmpb (r0)+,(r1) bne 2f tstb (r1)+ bne 2b br 1f 2: mov r2,r1 add $64.,r1 cmp r1,$12288. blo 1b jsr pc,rew br start 1: mov 44.(r2),tapa mov 38.(r2),r0 inc r0 clc ror r0 neg r0 mov r0,wc clr r0 1: clr (r0)+ cmp r0,sp blo 1b jsr pc,taper jsr pc,rew clr r0 cmp (r0),$407 / unix a.out? bne 2f 1: mov 20(r0),(r0)+ cmp r0,sp blo 1b 2: jsr pc,*$0 br start .if .mt. mts = 172520 mtc = 172522 mtbrc = 172524 mtcma = 172526 taper: clr mtma cmp mtapa,tapa beq 1f bhi 2f jsr pc,rrec br taper 2: jsr pc,rew br taper 1: mov wc,r1 1: jsr pc,rrec add $256.,r1 bmi 1b rts pc rrec: bit $2,*$mts bne rrec tstb *$mtc bge rrec mov $-512.,*$mtbrc mov mtma,*$mtcma mov $60003,*$mtc 1: tstb *$mtc bge 1b tst *$mtc bge 1f mov $-1,*$mtbrc mov $60013,*$mtc br rrec 1: add $512.,mtma inc mtapa rts pc rew: mov $60017,*$mtc clr mtapa rts pc .endif .if .mt.-1 tcdt = 177350 tccm = 177342 taper: mov $tcdt,r0 mov $tccm,r1 for: mov $3,(r1) / rbn for 1: tstb (r1) bge 1b tst (r1) blt rev cmp tapa,(r0) beq rd bgt for rev: mov $4003,(r1) / rbn bac 1: tstb (r1) bge 1b tst (r1) blt for mov (r0),r2 add $5,r2 cmp tapa,r2 blt rev br for rd: clr -(r0) / bus addr mov wc,-(r0) / wc mov $5,-(r0) / read 1: tstb (r1) bge 1b tst (r1) blt taper rts pc rew: mov $4003,tccm rts pc .endif tvec: br putc br getc br mesg tks = 177560 tkb = 177562 getc: mov $tks,r0 inc (r0) 1: tstb (r0) bge 1b mov tkb,r0 bic $!177,r0 cmp r0,$'A blo 1f cmp r0,$'Z bhi 1f add $40,r0 1: cmp r0,$'\r bne putc mov $'\n,r0 tps = 177564 tpb = 177566 putc: tstb tps bge putc cmp r0,$'\n bne 1f mov $'\r,r0 jsr pc,(r5) mov $'\n+200,r0 jsr pc,(r5) clr r0 jsr pc,(r5) mov $'\n,r0 rts pc 1: mov r0,tpb rts pc mesg: movb *(sp),r0 beq 1f jsr pc,(r5) inc (sp) br mesg 1: add $2,(sp) bic $1,(sp) rts pc end: tapa: .=.+2 mtapa: .=.+2 mtma: .=.+2 wc: .=.+2 name: .=.+32. unix_v4/usr/mdec/mboot0000644000175000017500000000075401026347440013330 0ustar aapaap! "W N D=    @ #D  D ҃RR \ B ы e@W 0 , & 7    " 7 -  X e5PߋRTV`RߋR RT `Re `R7 t*p ȋ@E A Ze   ?    7? eEunix_v4/usr/mdec/rkf.s0000644000175000017500000000045201026347440013226 0ustar aapaap/ format RK03/05 disk packs rkda = 177412 5 mov $203.*2,r4 clr r3 1: mov $rkda+2,r0 mov r3,-(r0) mov $buf,-(r0) mov $-12.*256.,-(r0) mov $6003,-(r0) 2: tstb (r0) bge 2b tst (r0) blt 1f add $20,r3 dec r4 bne 1b rts pc 1: jsr pc,4(r5) ; .even rts pc buf: .=.+2 unix_v4/usr/mdec/uboot.s0000644000175000017500000000461701026347440013603 0ustar aapaap/ disk boot program to load and transfer / to a unix entry / entry is made by jsr pc,*$0 / so return can be rts pc core = 24. .. = [core*2048.]-512. start: mov $..,sp mov sp,r1 cmp pc,r1 bhis 2f reset clr r0 cmp (r0),$407 bne 1f mov $20,r0 1: mov (r0)+,(r1)+ cmp r1,$end blo 1b jmp (sp) 2: mov $inod,r0 1: clr (r0)+ cmp r0,sp blo 1b jsr pc,getc cmp r0,$'k bne 3f mov $rkblk,r0 br 1f 3: cmp r0,$'p bne 2b mov $rpblk,r0 1: mov r0,rxblk mov $'\n,r0 jsr pc,putc mov $names,r1 1: mov r1,r2 2: jsr pc,getc cmp r0,$'\n beq 1f cmp r0,$'/ beq 3f movb r0,(r2)+ br 2b 3: cmp r1,r2 beq 2b add $14.,r1 br 1b 1: mov $names,r1 mov $1,r0 1: clr bno jsr pc,iget tst (r1) beq 1f 2: jsr pc,rmblk br start mov $buf,r2 3: mov r1,r3 mov r2,r4 add $16.,r2 tst (r4)+ beq 5f 4: cmpb (r3)+,(r4)+ bne 5f cmp r4,r2 blo 4b mov -16.(r2),r0 add $14.,r1 br 1b 5: cmp r2,$buf+512. blo 3b br 2b 1: clr r1 1: jsr pc,rmblk br 1f mov $buf,r2 2: mov (r2)+,(r1)+ cmp r2,$buf+512. blo 2b br 1b 1: clr r0 cmp (r0),$407 bne 2f 1: mov 20(r0),(r0)+ cmp r0,sp blo 1b 2: jsr pc,*$0 br start iget: add $31.,r0 mov r0,r5 ash $-4.,r0 jsr pc,rblk bic $!17,r5 ash $5.,r5 add $buf,r5 mov $inod,r4 1: mov (r5)+,(r4)+ cmp r4,$addr+16. blo 1b rts pc rmblk: add $2,(sp) mov bno,r0 inc bno bit $LRG,mode bne 1f asl r0 mov addr(r0),r0 bne rblk 2: sub $2,(sp) rts pc 1: clr -(sp) movb r0,(sp) clrb r0 swab r0 asl r0 mov addr(r0),r0 beq 2b jsr pc,rblk mov (sp)+,r0 asl r0 mov buf(r0),r0 beq 2b rblk: mov r1,-(sp) mov r0,r1 clr r0 jmp *rxblk rpda = 176724 rpblk: div $10.,r0 mov r1,-(sp) mov r0,r1 clr r0 div $20.,r0 bisb r1,1(sp) mov $rpda,r1 mov (sp)+,(r1) br 1f rkda = 177412 rkblk: div $12.,r0 ash $4.,r0 bis r1,r0 mov $rkda+2,r1 1: mov r0,-(r1) mov $buf,-(r1) mov $-256.,-(r1) mov $5,-(r1) 1: tstb (r1) bge 1b mov (sp)+,r1 rts pc tks = 177560 tkb = 177562 getc: mov $tks,r0 inc (r0) 1: tstb (r0) bge 1b mov tkb,r0 bic $!177,r0 cmp r0,$'A blo 1f cmp r0,$'Z bhi 1f add $40,r0 1: cmp r0,$'\r bne putc mov $'\n,r0 tps = 177564 tpb = 177566 putc: tstb tps bge putc cmp r0,$'\n bne 1f mov $'\r,r0 jsr pc,putc mov $'\n+200,r0 jsr pc,putc clr r0 jsr pc,putc mov $'\n,r0 rts pc 1: mov r0,tpb rts pc end: inod = ..-1024. mode = inod addr = inod+8. buf = inod+32. bno = buf+514. rxblk = bno+2 names = rxblk+2 LRG = 10000 reset = 5 unix_v4/usr/mdec/mcopy.s0000644000175000017500000000311201026347440013567 0ustar aapaap/ copy mag tape to disk jsr pc,rew 2: jsr pc,4(r5) <'p' for rp; 'k' for rk\n\0> .even jsr pc,2(r5) cmp r0,$'k bne 3f mov $rkblk,r0 br 1f 3: cmp r0,$'p bne 2b mov $rpblk,r0 1: mov r0,rxblk mov $'\n,r0 jsr pc,(r5) jsr pc,4(r5) .even jsr pc,numb mov r0,bno jsr pc,4(r5) .even jsr pc,numb mov r0,r1 beq 2f 1: jsr pc,rblk dec r1 bne 1b 2: jsr pc,4(r5) .even jsr pc,numb mov r0,r1 1: jsr pc,rblk jsr pc,wblk dec r1 bne 1b jsr pc,rew rts pc numb: clr r1 1: jsr pc,2(r5) cmp r0,$'\n beq 1f sub $'0,r0 cmp r0,$9 bhi 2f mul $10.,r1 add r0,r1 br 1b 1: mov r1,r0 rts pc 2: jsr pc,4(r5) .even tst (sp)+ rts pc mts = 172520 mtc = 172522 mtbrc = 172524 mtcma = 172526 rblk: bit $2,*$mts bne rblk tstb *$mtc bge rblk mov $-512.,*$mtbrc mov $buf,*$mtcma mov $60003,*$mtc 1: tstb *$mtc bge 1b tst *$mtc bge 1f jsr pc,4(r5) .even mov $-1,*$mtbrc mov $60013,*$mtc br rblk 1: rts pc rew: mov $60017,*$mtc rts pc wblk: mov bno,r0 inc bno mov r1,-(sp) mov r0,r1 clr r0 jmp *rxblk rpda = 176724 rpblk: div $10.,r0 mov r1,-(sp) mov r0,r1 clr r0 div $20.,r0 bisb r1,1(sp) mov $rpda,r1 mov (sp)+,(r1) mov r0,-(r1) br 1f rkda = 177412 rkblk: div $12.,r0 ash $4.,r0 bis r1,r0 mov $rkda,r1 mov r0,(r1) 1: mov $buf,-(r1) mov $-256.,-(r1) mov $3,-(r1) 1: tstb (r1) bge 1b tst (r1) blt 1f mov (sp)+,r1 rts pc 1: jsr pc,4(r5) .even mov (sp)+,r1 dec bno br wblk .bss buf: .=.+512. rxblk: .=.+2 bno: .=.+2 unix_v4/usr/mdec/tboot0000644000175000017500000000070401026347440013332 0ustar aapaap! "W N =    @ #D  D ҃** ^ B ы e@W 0 ,& 7    ` " ɋ -ɋ e- ɋ ?*p ȋB@E A Ze   "@    7@ eEunix_v4/usr/mdec/dli.s0000644000175000017500000000237001026347440013215 0ustar aapaap/ dli -- DEC format tape interpreter .globl fopen, fcreat, getc, putc, flush, mesg mov (sp)+,r5 cmp r5,$1 bne 1f jsr r5,mesg; ; .even sys exit 1: tst (sp)+ mov (sp)+,r0 jsr r5,fcreat; obuf bec 1f jsr r5,mesg; ; .even 1: mov $ppt,r0 cmp r5,$3 blt 1f mov (sp)+,r0 1: jsr r5,fopen; ibuf bec 1f jsr r5,mesg; ; .even sys exit 1: jsr pc,get tst r0 beq 1b cmp r0,$1 bne err jsr pc,get jsr pc,get mov r0,-(sp) jsr pc,get swab r0 bis r0,(sp) jsr pc,get mov r0,r1 jsr pc,get swab r0 bis r0,r1 sub $6,(sp) ble 2f cmp r1,origin beq 3f mov r1,origin jsr r5,flush; obuf mov obuf,r0 sys seek; origin: 0; 0 3: jsr pc,get jsr pc,put dec (sp) bgt 3b tst (sp)+ jsr pc,get br 1b 2: jsr r5,flush; obuf sys exit put: jsr r5,putc; obuf inc origin rts pc get: jsr r5,getc; ibuf bec 1f err: jsr r5,flush; obuf mov icount,r0 jsr pc,decml jsr r5,mesg; < Input error\n\0>; .even sys exit 1: inc icount rts pc decml: mov r0,r1 clr r0 div $10.,r0 mov r1,-(sp) tst r0 beq 1f jsr pc,decml 1: mov (sp)+,r0 add $'0,r0 mov r0,icount mov $1,r0 sys write; icount; 1 rts pc ppt: .even .bss count: .=.+2 ch: .=.+2 icount: .=.+2 ibuf: .=.+520. obuf: .=.+520. unix_v4/usr/mdec/dtf.s0000644000175000017500000000732201026347440013224 0ustar aapaap/ unix DEC-tape time/mtrack track formatter nword = 256. nblock = 578. endz = 7200. ps = 177776 tcst = 177340 tccm = 177342 tcwc = 177344 tcba = 177346 tcdt = 177350 mov r5,savr5 mov sp,savsp start: mov savr5,r5 mov savsp,sp jsr pc,4(r5) .even clr r0 mov $cobtab,r1 1: jsr pc,bcomobv mov r2,(r1)+ inc r0 cmp r0,$512. bne 1b mov $buffer,r0 1: mov $-1,(r0)+ cmp r0,$buffer+nword+nword blo 1b mov savr5,r5 jsr pc,2(r5) mov $340,ps mov $tcdt,r5 mov $13,tccm jsr pc,flag / 8Kch for end zone mov $endz,r4 1: jsr r0,mtrack; 101101 dec r4 bne 1b / foreward guard mov $199.,r4 1: jsr r0,mtrack; 10101 dec r4 bne 1b / blocks mov $nblock,r3 1: jsr r0,mtrack; 10101 jsr r0,mtrack; 10110 jsr r0,mtrack; 11010 jsr r0,mtrack; 01000 jsr r0,mtrack; 01000 jsr r0,mtrack; 01000 jsr r0,mtrack; 01000 mov $nword-4,r4 2: jsr r0,mtrack; 111000 dec r4 bne 2b jsr r0,mtrack; 111011 jsr r0,mtrack; 111011 jsr r0,mtrack; 111011 jsr r0,mtrack; 111011 jsr r0,mtrack; 101001 jsr r0,mtrack; 100101 jsr r0,mtrack; 10101 dec r3 bne 1b / rear guard mov $199.,r4 1: jsr r0,mtrack; 10101 dec r4 bne 1b / rear end zone mov $endz,r4 1: jsr r0,mtrack; 10010 dec r4 bne 1b clr tccm / end of mtrack pass / go back 12 blocks mov $12.,r0 mov $4002,tccm 1: incb tccm jsr pc,flag dec r0 bne 1b / put comobv(nblock-1) in everything / up to end zone mov $nblock-1,r0 mov r0,bn jsr pc,comobv mov $17,tccm jsr pc,flag 1: movb r1,tcst mov r0,(r5) jsr pc,flag1 br 1b / reverse pass put in / foreward and reverse / block numbers mov $4017,tccm jsr pc,flag 1: mov $nword+3.,r4 2: clrb tcst clr (r5) jsr pc,flag dec r4 bne 2b clrb tcst clr (r5) mov bn,r0 jsr pc,comobv jsr pc,flag movb r1,tcst mov r0,(r5) jsr pc,flag dec bn blt check clrb tcst clr (r5) jsr pc,flag clrb tcst clr (r5) jsr pc,flag clrb tcst mov bn,(r5) jsr pc,flag clrb tcst clr (r5) jsr pc,flag clrb tcst clr (r5) jsr pc,flag br 1b / foreward pass / confirm block numbers / write all 1's in data check: clrb tcst clr (r5) jsr pc,flag1 br check clr r4 1: mov $3,tccm jsr pc,flag cmp (r5),r4 bne error1 mov $-nword,tcwc mov $buffer,tcba mov $15,tccm jsr pc,flag inc r4 cmp r4,$nblock bne 1b mov $3,tccm jsr pc,flag1 br error2 / reverse pass / confirm block numbers / read data and compare / to all 1's 1: mov $4003,tccm jsr pc,flag dec r4 cmp r4,(r5) bne error3 mov $-nword,tcwc mov $buffer,tcba mov $4005,tccm jsr pc,compare jsr pc,flag tst r4 bne 1b mov $4003,tccm jsr pc,flag1 br error4 jsr pc,compare jmp start error1: mov $1,r0 br 1f error2: mov $1,r0 br 1f error3: mov $3,r0 br 1f error4: mov $4,r0 br 1f error5: mov $5,r0 br 1f error6: mov $6,r0 br 1f error7: mov $7,r0 1: add $'0,r0 movb r0,0f mov tcst,-(sp) mov tccm,-(sp) mov $1,tccm mov savr5,r5 jsr pc,4(r5) 0: .even mov (sp)+,r1 mov (sp)+,r0 0 rts pc compare: mov r0,-(sp) mov $buffer,r0 1: cmp (r0)+,$-1 bne error5 cmp r0,$buffer+nword+nword blo 1b mov (sp)+,r0 rts pc mtrack: mov (r0)+,(r5) jsr pc,flag rts r0 flag: bit $100200,tccm beq flag blt error6 rts pc flag1: bit $100200,tccm beq flag1 bge 1f tst tcst bge error7 add $2,(sp) 1: rts pc comobv: mov r0,r4 bic $!777,r0 asl r0 mov cobtab(r0),r0 swab r0 clr r1 ror r0 rol r1 asl r0 asl r0 rol r1 swab r4 bic $177401,r4 bis cobtab(r4),r0 rts pc bcomobv: mov r0,r2 bic $!70,r2 mov r0,r3 mov $6.,r4 1: asr r3 dec r4 bne 1b bic $!7,r3 bis r3,r2 mov r0,r3 mov $6.,r4 1: asl r3 dec r4 bne 1b bic $!700,r3 bis r3,r2 com r2 bic $!777,r2 rts pc bn: .=.+2 savr5: .=.+2 savsp: .=.+2 cobtab: .=.+1024. buffer: .=.+nword+nword unix_v4/usr/mdec/dldr.s0000644000175000017500000000134401026347440013372 0ustar aapaap/ copy and execute DEC loaders core = 24. prs = 177550 mov $dldr,r0 mov $[core*2048.]-300,r1 mov r1,r2 1: mov (r0)+,(r1)+ cmp r0,$end blo 1b jmp (r2) dldr: 10706 24646 10705 62705 114 5001 13716 177570 6016 103402 5016 404 241 6116 1001 10116 5000 4715 105303 1374 4715 4767 74 10402 162702 4 22702 2 1441 4767 54 61604 10401 4715 2004 105700 1753 0 751 110321 770 16703 150 105213 105713 100376 116303 2 60300 42703 177400 5302 207 12667 44 4715 10304 4715 303 50304 16707 26 4767 177752 4715 105700 1342 6204 103002 0 677 6304 114 0 . = dldr-500+744 16701 26 12702 352 5211 105711 100376 116162 2 [core*2048.]-400 5267 177756 765 prs end: unix_v4/usr/bin/0000755000175000017500000000000001027162710012113 5ustar aapaapunix_v4/usr/bin/split0000755000175000017500000000207201026347440013201 0ustar aapaap|z & 6 % w v5!: @m-  @mP$ @m 7L pt " @m7 @m7  -,   .%   7!Y, :  2  J = `ȋ`28  rea 18 rea@ 1828 28   .%  2   2  ww  Cˋע0 ע9Wp ’`eD wf@w wfw 7A 7 fA & UfA  @e71@  1 @ wfwAF  Df@A&  6f@A @+ 9 & fA @e&7w@wZ7 xf@ww$w4w8f@ r Cd$Y7F @&HFFN0N2N4N6N8N1N3N5N7N9cannot open input xCannot create output unix_v4/usr/bin/tee0000755000175000017500000000130201026347440012616 0ustar aapaap2 & 6 % w &@e  @E%  7@ %*@& z   1 @e@&  @E%  re  ! T 2 & %     p2 2" w6w $  @55 u-'5 w-@@@-NNNfe2"@ & % umwfww wwf@wx wj wlf@w^wZ wFwJfwFwB& w( w*f@w(w$, ww7"F @&HFunix_v4/usr/bin/pwd0000755000175000017500000000143201027162736012643 0ustar aapaap@ & 6 % .../w   r   2 7 4 P%5% - -   wFw 4 6 r 5 T 5 v  2 7. `4 P%5% @ . 6 r 5 "-E-@ 4 ww     % Jwnw \ @6^@me% H 5 @@mAp   @m 7@>  @Ap6  wfww wf@w wfwwwrwvf@wwwPwTfwww2 w4f@wfwbwwf@7F @&HF unix_v4/usr/bin/passwd0000755000175000017500000000227601026347440013355 0ustar aapaap%w Usage: passwd uid password  ȋ 07~w w cannot open password file w ttemp file busy -- try again 7 B : 4 ы  :@ :   :Wp 0`  w permission denied   w ~p ~6 z3 tw w cannot reopen temp file w w jcannot reopen password file  @ w w xw (format error on password file w Hw   w uid not valid fA7& fA @e71@L  1 @ fA7R  fA & 9 &fA @e&7w@t&@w~Ջ@@ 7tz Ef&f ЕЕ  P  Cx F    rB`E \ \  !  f f E RS  F F  f  0 f & s>e0W!9eW!ZeT!N ᇅF /etc/passwd/tmp/ptmpwww &w Uw w&w 6w , @ @  unix_v4/usr/bin/cref0000755000175000017500000002205201026347440012765 0ustar aapaap$:T & 6 ^% /tmp/crt0a/tmp/crt1a/tmp/crt2a/tmp/crt3a/tmp/crt4a/usr/lib/aign/usr/lib/atabw W-  >@%-N 5@ 5`u 5 @@-e_L! G! D!8!L@ @m& F @ @m&  LL !  A Amf p&"-   &"%/  &"-   & 5 W- f R @   K 6@FJ5 5 W-@ 55@ef  K  N^5 dt| @% @ @aA p 6K @ @a0 @ef  ww xX TPe!J  7@%7-2 $ & %  :4 :" t@` 5@  -^J^JXJTJww  IDJK@J6:7 l"f&7  F  5  @%@t&ef %% N    5 @e&f %%)W-%Nf %@- Nf %@- N N  T    HS *  7  p p p p   7J  7:  7*  7: `:".L"#׭>׭ ׭  7t  y w w - L"N׭* x!%/M `L" r:"=׭H  .׭</0!%*')T7L"׭\  @<L"2 r:" 7  y w w - 7   7 w w - 7    _v qh7 w~ w l  Wpu-fD X ? 9(e!@7"-7  @- @A p"-  " " 7 ww Wc Wh Wrww ww x7 w|w j LDwfw T@7,C_ @7CwC@7 C@7C@7C@7C@@muu@ A AupuW- A 7rRCC rFCu  @ m*Cm,C5-$C$@e5u @ A @RAAm 7rBu C BB-B @ mBB B@m-B @  |B xBm~BA HdB `BmfBH @PB@LB ww u@ @@mȕ A r 5 N ff % @@mC r e0Ȑ @w0w    @ A  ww -  7 &  7 L9 J9 7  _  7 .97 ww  @ M@me5+u@ A @lMe5   @ AH@ MN Ru@ A @lMe5@A 1`M   @ AH ww @ M@ M;@ &M M%  ,8 N   &@@ M@ &@ & %A @,M@ 0 M wNw <w?De?  ? % w 7 ?7 ?ׯ?- ? ?"U7 ? .UVB Jzdoxf ecsl ӕ- C r f e0 1 /? ҋ D~' f v Le0 9e> z> p&  m> > ~    ~ w7 > |> x>0  n>Wp `e0[eӕ?f@ J>B>w&>w U@w U-(>w U@7 =wRfw=w U7 =w<f@w$ w&fww"wwfww(wfw wfw.7A 7 ?fA & UfA  @e71@4  1 @ wRfwjwf:w8w<f@wNwJ@wwfAw|wx5pWpe@W F W  VwPwwf& fw"w wf D& w }w~f@wwwXw\f@Af w,.w"(e w"ew"@l  %e7=F @&HF r dA! fA7<  fA & 9 &fA @e&7w@ 2  `rHv@".:FR`Usage: cref [-aceilosux] file1 ... Can't open %s /bin/sortsort-a-o/usr/bin/upostupost/usr/bin/crpostcrpost-3Illegal character: %o line %d Can't create user's temp file.Error %d Can't find %s Try again Fatal error in %s t = %d Unrecognized flag: %c /usr/lib/ctab/usr/lib/cign/usr/lib/etab/usr/lib/eign/usr/lib/ctab/usr/lib/cignx  h0D n "'/<\r8Fd"'*\&:MOQSWraparound temp file %d  7 777777777770 w w&w w crt0.odr.oacts.o put.oprintf.offltpr.oputchr.oclose.ocreat.oexecv.ofork.o2getc.oFopen.oread.osignal.ounlink.ojwait.owrite.oexit.onargs.oretrn.orsave.o(nhsw.oHput.o\savr5$U_main"n_temp$_t1$z_level$|_hlevel$~_dlevel$_xtrn$_tp$_tab$_coll" _save"2 _out" _asym" _asw"`_csym"_csw"r_incl"H_decl"v_sk2"_sk"_tabs"_semi"@_line$!_l$"_lno$"_c$"_cursl$"_curs$"_curfl$$"_curf$&"_usw$0"_xsw$2"_only$4"_cross#_file$6"_cs$8"_flag$:"_fl$J"_gch$L"_itab$T"_xtab$`"_ipsp$l"_issp$f&_xpsp$6_xssp$:_ib1$I_ib2$K_ibuf$M_ibuf1$M_ibuf2$M_mone#_order#_ssw$M_type$M_utmp$M_acts#_tmp#_ignonl#_gtab#rsave"*_printf"_exit"_flags"_init"^_fopen"F_dexit"_driver"_close"_flsh"R_callsys"rretrn"8_getc"_error"_open"_read"_compile"_signal"_creat"_unlink"j_fork"2_execv"_wait"hsw"H_search"_comp"_dfile"f_put"_conf"_bct$M_optr$M_bsp$M_obuf#_nflush$U_write"ndigit$Upfloat"pscien"_putchar"_fout$U_flush"putc"~flush"retrn""cerror"_getw"d_errno$W_nargs"mrsave"(putw#fcreat"\unix_v4/usr/bin/pfe0000755000175000017500000000036001026347440012616 0ustar aapaapW  EA&w6AYpNo error. Floating op code error Floating divide check Integer conversion error Floating overflow Floating underflow Floating undefined Floating maintennace trap unix_v4/usr/bin/cal0000755000175000017500000000372601026347440012614 0ustar aapaap & 6 L%  S M Tu W Th F SJanFebMarAprMayJunJulAugSepOctNovDecw W- H ~W-S@ L5W-_@W- _@@ L!_@!'_@@ &2 H%@ H  &f e e  e @ L!_@!'_@D HH H P H e 0   R H   X H   ^ H l HeH & eH &e eH &e e  He  eHez H ~ Hww  B 0 9 Wp `eDww CD  @  ר 3N H ww ~BN N e r@ zy    x6"  `  rDWpB`@ >  AW  @0 e  @ ep  r e0  r e0R % @@m  wvw dDetae!e[ rde r`!e r@ww w(De   % w7 7 ׯ-  ,z"7  .x" B JdoBfLecsl ӕ- 6 r f e0 $fC~ fWtE Ee0: 0     `w    Ο       w7   0  Wp `e0[eӕ?f@f@ |tw`w "@w "-Zw "@7 8w<fw,w x"7 "w&@&HF7FfA7   fA & 9 &fA @e&7w@ ,048<@DHLPTXusage: cal [month] year %s %l %s %l %s %s %s %s %s %s Bad argument %s w w&w w unix_v4/usr/bin/sleep0000755000175000017500000000172401026347440013161 0ustar aapaapD & 6 % w 5 W- @5@ 5W-0W-9 AWp AmeuN w,w wDe   % Bw7 7 ׯ- | z,H 7 r .F  B Jd`ofeHcRs&l ӕ- 6 r f e0 $C~ fWtE Ee0     `w  B |Οx r B j  ^ B Vw7 H > :0  0Wp `e0[eӕ?f@f@ ww T @w T -w T @7 wJfww T 7 w4f@#w&@&HF7FfA7@   fA & 9 &fA @e&7 w@> arg count bad character w w&w w unix_v4/usr/bin/wc0000755000175000017500000000355001026347440012461 0ustar aapaap> & 6 % -lww  @% eAAW- @0!@@m !r  ~wx e5 7H  @ @m&  @ @m  M @mȋ1@m #     a"clpwJ   @ @m  @@-wXw F  l l l l l RE $ 0 . '         55    5  5 5wpw ^@=wTw B  @ w8w &N@& T   ww w De    % xw7 7 ׯ-  ,"7  ." :B JZdofecsfl ӕ- 6 r f e0 $^C~ fWtE Ee02 (    `w  x Ο  x    x w7   0  Wp `e0[eӕ?f@ ~vwbw #@w #-\w #@7 :w fw.w x#7 $wfw 7A 7 fA & UfA  @e7~1@  1 @ wjf&%CB  ԕ- % e0fv   vA W  ~7RF @&HFB@$YfA7   fA & 9 &fA @e&7xwtn@ %s: cannot open %s %7s w w&w \w Runix_v4/usr/bin/upost0000755000175000017500000000422601026347440013223 0ustar aapaap & 6 % fW-  P@-@e5W-W- (  e 5 @@- @ @m&  5Nf N l7 : F w:f fe$f  % @$@$_ @$5% @0$$$   K(  N$& r%$$  5$$  @Ap$7  fe$f B % @$@ $@$_N 7"% "_*  N$& r% Ff)  ff W W u=@ Ff)  @5 @ AAH@@@Ff   @ A @ Ff 2._ l" h"_l f %7  >":" 6" <  Ff @ "@me5.u@ J A @l"e5 @  @ AAH@ "N Fu@ J A @l"e5@A 1`" @  @ AAH Ff @ "@ "$ & @ "@ &J @ &H 4%A @,"@ 0 " Ffw De   % &&  e7 7 ׯ - .%7 ~  .%*B JJdofexcsVl ӕ- 6 r f e0 $C~ fWtE Ee0    & `w   Ο   x  l  d w7 R H D0  :Wp `e0[eӕ?f@w wf@f@ ww %@w %-w %@7 w@fww %7 w*f@wZwVL ww7 Ffw4w0R wwf@wwX wwfA7^   fA & 9 &fA @e&7w@ Usage: cpost [-d] file1 file2 ... -d: 0 < d < 10 read error "w w&w w unix_v4/usr/bin/grep0000755000175000017500000000253201026347440013004 0ustar aapaap 050z42  W-Wv Wc Wb Wn        7 7 7   " : w d ^]   d Q zMd @ B wf7`eTw Nw  8 0 ,  *(  w d   t   w d ^@w d  @w d w d  f 2w  R J7 7 7  xten ^A2W ^w  W*(AW \W .%W *VW $#W [,w Sw  ^ w AS w n͋w b$w Vze 7w >(AW ^:A  mh AW ]ZTS^^[ &[ %ԋ S [ &6ԋ[&ԋ-L ld [d Zd [L& Dc  d& ,c  ̋[ &[ e! fEtWtE w d  @w jd :w ^d r f e0w @d fwfA7  fA & 9 &fA @e&7w@>&@wՋ@@ 7D E: cannot open arg count regular expression too long regular expression syntax j w w&w w unix_v4/usr/bin/nice0000755000175000017500000000214201026347440012762 0ustar aapaapR) & 6 % w  W-  eR !5 W- @ AA H 5 u-@eH@e5@ A AH@ =  "R #!  R !  R !  #! wLw :w*GDe G  G % w7 G7 FׯF- F F,.H7 F .,H hB Jdofecsl ӕ- 6 r f e0 $hFC~ fWtE Ee0unix_v4/usr/bin/diff0000755000175000017500000001123401026347440012756 0ustar aapaap , & 6 % w W- @- eW-   %  j7(N > &" e5N j7 W-N j77T e j75 w-: @ m $ e me7N (  %N ww   j7:5 W-c@  m p@ @m&  & %  %  r  j m 2 8 e ~@  m~B  p  w w \@&  L@&   55 ?2?,5 7!_ m  %   m AHo m" %   m AH  5& 5% W  W   mv \ 5  mN AHW   m< $ 5  m AH _r t  %   m AH  ~ ~@wB w 0  & ff< ef fD e $ !@A1,e@N mNeA: H   ( %@ @mA Am "@ A @` m A B `H _f _f ? ? @ 5 f fff je  f @ &NmefN@ &Nme je 5 5 5 u- @ m6 A A m( @b5@-uu @e@e& ffff He@e@e& f N@ &NmefN@ &Nme HeNfff eN@ &Nm@ f@ &Nm@  ew w Nf fL eNf  fR e  @m  u u-6u Aup Amuu e @ "B @ 5`@5"! D   ww  *Nf: fX eNf  f` ef f f h eC  @m  Am 1" up AmuA up AmBD @ 5" =w w @- 5 7t  @& * ?>  @& * ?, ? 4 @ m*  p cu-[u-@ m A m A " @ m  5@e5u- @ m  @ m e5@ m HNffff * e@ 5juW-cW-@ m4 A m* Ae" @ m  @ m e5@ 5W- @ m  @ m 5@ mHNffff * e@e5 Bww u-u- jNf  u-a u- dc $ N f   $ pff d eu-_ u- _ t _ z_ ~f f d e u-  ww u-N u-N u-N ww uu-H @ @m&f %@ @m@ @mf ef H%N 5 @ @mA Am@@- @ @m $  ww N u- Aup N@@ `  u- Aup AmN  ww xwDe   % $w\7 7 ׯ-  7  . B J" dr o f eP c^ s. l ӕ- ; r f e0 ) 'D ҋ D~ fWtE Ee0 z p&  m  $~  $  $~ w7   0  Wp `e0[eӕ?f@ xwhw p@w d-^w v@7 @wfw4w \7 *wf@wt wvf@)w^wbfw^7A 7 fA & UfA  @e71@  1 @ wfwwwwf@ww wwfwm&w~wmwxfw&w\w~ wXf@wnwj,w2 w4f@wPwL2wwf@7F @&HFfA78 fA @e71@^  1 @ fA7d  fA & 9 &fA @e&7w@arg count jackpot can't open input xxpart apart binn ainn bstrip astrip bstrip x* --- . . %d%d,%d%s %7o %7o f6 6 w &E v6v6`v v`v e- -%www &w Uw w&w 8w .unix_v4/usr/bin/crpost0000755000175000017500000000431201026347440013357 0ustar aapaap:0 & 6 % w  W-P x @%-.@%E^@e5W-W- t x te 5 @@- @ @m&  5Nf N   w:w (8@eZ55 u-_ ff  _ u=@eZ5@ <f   P  55_ @@a _E@ <f p N@e`f p 5` @@apW-    @@a u @@-@ <f Xu=@eZ5@ <f  _3@ <f p N@e`f p 5` @@a u @@-@ <6Q _2 x422222222:( _  f@e`f % @@a TW & J% 8 N@e&& J%_ ww   @5 @ AH@@ww n   @ A  wHw 6  & f %7x  r  X N x ww  @  @me5+u@ A @l e5   @ AH@  N u@ A @l e5@A 1`   @ AH ww @ @  $ @  @ &@ & %A @, @ 0 ww wXDeN  H % w7 47 *ׯ*- " " 7  . B Jd^oXxfe6cDsl ӕ- C r f e0 1 / ҋ D~' f v Le0 9eN zD p&  m& $ ~    ~ w7   0  Wp `e0[eӕ?f ,P   @f   7D|  rj-d\f@wr wtfwwwRwVf@www0w4f@wwwwf@7F @&HF 4 R p Usage: crpost [-d] file1 file2 ... -d: 0 < d < 10  read error   unix_v4/usr/bin/tr0000755000175000017500000000346001026347440012475 0ustar aapaap`  & 6 % w  7F#7:# 7>#72# 76#7*# 7,#7 # -e@%-# @ȋ@    | 7~ y e w"W-@7"5 W-@A`"A`"p`  .`# 5@E`"5 W-@`"@ p`" @0`"`"5 W-@0`!  @ 5`# 5 h# 5 u@Ep` @E`!h# 5@E`!v5 W-@` @p`  @0` 7 L! 27H# p# 5$ @E` E5  w-@E`!@7  tw|w j @ @_ @A1" @_ @%[_N N 5=@0 N _N 5u-[@& %]P@p@e@%0 55 @5%0@e0@-AupAmeu@ @& %] @p@   %  *  x@N ww @& 5W-\8 55W-@5%0W-7@t@me5 @  u @& 5 @ @EwPf@  w w fx%@w Zx%- w lx%@7 t wfwh w Rx%7 ^ wf@w wf@)wwfw& 7A 7 "fA & UfA  @e71@,  1 @ w,f@w^wZ2 wwf@7!F @&HFfA78   fA & 9 &fA @e&7w@Z cdsv|Bad string w w&w w unix_v4/usr/bin/comm0000755000175000017500000000354201026347440013004 0ustar aapaapd& & 6 %  w W-Y@%-R@ ȋB@1 @ mȕ?t*  @ m\@ "  1  xZ~e W- N " X@& 4 @ " ^ @& 4 @" " f@eX  @eX^   6@eX&^ %@eX^  @e&X % _@eX@e&  _@e& D @eX  @eX^   @eX&^ %@eX^  @e&X %@e& D @eX  @eX&^ %@eX& D @eX^  @e&X %_   xl_ww  N p A W = ww @        xxPX`N@ &2 "%wDw 2Nf D Nf   . ww  @ @   ̋  ww   ww w<De2  , % w7 7 ׯ-  "h 7  .f B Jdox8fBecsl ӕ- C r f e0 1 /t ҋ D~'8< f v Le0 9e2 z( p&  m   ~    ~ w7   0  Wp `e0[eӕ?f ,P   @f r v 78` @v VN-H@fw F7A 7 fA & UfA  @e71@L  1 @ w f@7F @&HFIllegal flag: %c Argc = %d Can't open %s Can't open %s %s%s v unix_v4/usr/bin/form0000755000175000017500000001002601026347440013007 0ustar aapaap D 0jz f`` z0*Hcannot open output file formaletter77 h S  S  vrh& \  R  r N e0 6 e0 , w08AGMQV[blt}JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember ( w w  w w{  } 7  w 6 w w  p j   2 &f VV\[{]V}Q  A  Hw  f 80 9 ] }  NN6         f rt  rlw T @N z F@w@. X$ `&n p7  ,  <7    @ [w  ]w  B 7   t   wf n0  Nf \ 7 J T &D ~7 *7 ,&[w  e0w ]w  Lp &:w w w    w    B 6  &f   "&   z e q,  78  w :   H wfBBb2 W"f&@w  w        v$p t  \V z PJ l :  :4 T     q,   &J   7   7 eJ&J " q,  n7q,  Z7eJ &fCC  j @q o  &F  6`( &   w`&  Bl~error on copy f1N1N1N1&0tC  BZqqq&qq, qf& @l1 11 1  D ( & qf7 q,@ @  b@  ȝv q,q >q,@      f7 q,@ @  T 8 @  \ȝ   x f   Wv Ee&    2 2 2  7 4 f& Wv Ee&  @E7 2 we2 @` & w2 f  2 2 Wv E@`e& & ! , e e6 f r   ,e7 &      &e " LLeJpL@11     L  wOut of space. x LeJpLeJ@BlR s3 BJJ& F 1L1 JpL f&7 L`CKeJ GBxe, 2eJ BeJ, 2 J 4lB4 4NJ0NAeJ  J ,Out of headers.      @ @W nW J0W,W,@@& ,Be "LeJ  r &r J7 d & L 7B 74  * J@  eJ UnJ7 e e B02 L  leJ2   JLJA eJJ  bwpwJcannot open output file form.munix_v4/usr/bin/yacc0000755000175000017500000004744201026347440012777 0ustar aapaapd8f TYH  & 6 % w (7 5 Nf  0:et7E N F   N \ N l% N X* N  2w6w 6@e 6@ AAmp~:w6w p69wr6w `69wb6w P6 9~9f / wD6w 26@e55 @ @m5_|W-%N _x@e5@ @m5_R @ 5- N N u@ 5N u 6; 0<; w-8!@t @mAE t  @0N@;  D; _ N _ N _ F;78 y % N _ w4w 4A r 5N A r Ne0 w4w 4 7b;  7r;  5;  ; w-l7@t,>xN;  ;  ; 5 w-07 Ne;  7e;  X6666; e4444< e66$< %4 5E`76H< %444@,O &b< e(7"7< %6J4 <  l6<  b6\6< %H6=  <6=  <= @ ~:@ ~:@ |:J=  @ |:5R=  w-5%Nh=  @ 5 Nn=  @ 5tr=  5 w-X5'Net=  @ 5 Nz=  @ 5t~=   05 ,5)4=  55=  5 4=  44=  = w1w n14= Nf f fff e  5=  `4 .5N  R-w1w 1N=  w0w 0N=  tp r  w0w 0= w0w 04@ @ A Hw0w p0H4e@-@A    w>0w ,0P1@ 7`B1>1,O -21= @w0w /5 u- @ @mH w/w /  7!F> @m Am@R @m" @m w/w |/ w= 0 77 W-@%-@%v w= 0 7u- r@ @m& 0 742 =  >  2 >  > ,O/5 5 25m@b 5@ pJ5  @tU5 @tU5 @tU5> :> .  @t,>x2L>  % f> 1N>  .>y.l.e..e..e..e. .l5 5_ @_ -.ll>  ?  ?v./r.? eZ. ?L./H. F. :. pJv8e,. D? . Uv8 N? .h?  @r?  -e-- H -- -x_ ׭Z} G׭S}\CM}@F}4-t >x4-t >x,-t0 >x%-t'>x-t">xx-t\>x @ @73 y JL-tH- D-p>x-<-<׭| 5@5!W-aW-zW-AW-Z W-_W-0W-9 ,e@ %, 0 J,w)w |) 5 Z- T-mJ-F-7 , .5W- W- W- W-  -\, .5W-/6F, .%*@ 0, .5 W-  ,W-*  , .5%/+ .5  _5 @_Z"'@ + .5@- w-J,@ p@%\ w-$,@ p_j^+ .5 _______(@y@:@_W-0;W-97@e7W-0 5* .5W-0W-9xupAmewh* .5w0+ _@:w-+@ p +**@* .5 A w*"A70 yw-*@ 0 X6A  __xe T 0N TW-@ TW- TNe Te  ##e0 T T@ A p L@ 7`#wf w T NB  @ 5E@ 5Eu- NB  e@ L@  L B  _ w-"=@ 5b}3NB  _W-_B _W-B _NB  @ B   " "B  _B  w@w .u e@ 58  L, (w w  $  z@e&LC % 5E 5Eu- u/dC e}N A1 eApEu@,O -C wbw P~ 7t p h L%w-T@ vA @W- @ H@m j @ H@mm4 Jww u5 u- @ @m  u- _*u5 w-_*5 u-%@@m @m @@m @mAAm 1"j @@m j_*  z  NfhD %5 u-2@@m @m &@@m-@zD @@m-,@@m7@@m AAm Ampj  '5 w- !D 5 W- @@m jD  D e @@ _)D wj w X  D 6w-l_(,N ^,@ p5 5 w-. 5@ L,@ 5, L%5 @ 5 Luw- @ 5, L u-uu @e 7` (5 w- !@ L@ 5, LN T@  L Tee e TN Te _+ ZD 6w-6 @  T  ,w w    b} L%@ b} 65 5 w- -@ f)@-5  f 5 52f 5 5%f 5 5NRE 0   1>1$11a1r81wR1@Nf 1 @Fw *AWp eRu@AApfe   d J ed=@A p N 8%x@@ef 5 W-(  @@W/c&fe2  =@2W/@A eʜp@=@ww AWp eRu@ @ 2@ "& f 6%@ff 6%@ &f 6%   xD3332@AAp@0  pN 5wf)5 W- N 2 N 6ww w*iDe i  i % R5wr7 i7 hׯh- h h"7 h .✃4B J@4d4o4x4f4en4c|4sL4l ӕ- C r f e0 1 /bh ҋ D~'hElE f v Le0 9e h zh p&  mg g R5~  R5  R5~ w7 g g g0  gWp `e0[eӕ?f@ ggwtgw :@w .-lgw @@7 Lgwfw@gw &7 6gwf@wv wxfwwpEwVwZf@wvEw: w<fwtwpzEwwf@wXwTEwwfD@wm:Ew.wm(wfwEww  wf@wwEw wfwEw~f@wwEwXw\f@Af w,.w"(e w"ew"@l  %e7gF @&HFB@$Y r dA! fA7E  fA & 9 &fA @e&7 w  @E x g "fE@ $$ttyЋ7f@ f ,O_d }} NULL { %v }cdilsvp8Db int nterms %d; int nnonter %d; int nstate %d; char *yysterm[] { "%v", 0 }; char *yysnter[] { "%v", "%v" }; %d/%d terminals, %d/%d nonterminals %d/%d productions, %d/%d states %d S/R, %d R/R conflicts reported %d/%d working sets used memory: states,etc. %d/%d, parser %d/%d %d/%d distinct lookahead sets %d extra closures %d action entries %d action entries saved through merging %d states %d goto entries %d entries saved by goto default times(sec): %d/60 total time: %d/60 %v: %d %v: %d conflicts: %d S/R, %d R/R fatal error: , line %d int %s[] {0,%d,-1}; memory overflowy.tab.cy.output# $$error$accept int yyval 0; int *yypv; int yylval 0; yyactr(__np__){ %size not yet implemented%size must be followed by a numberbad precedence syntax, input %d>>>>VWXYVWYUVXP  . P  P & switch(__np__){ previous rule not terminatedterminal illegal on lhs of productionmissing :semicolon preceeds action case %d: break;rule not terminated before \\ } } \= must appear inside ruleillegal \= syntaxnonterminal %v illegal after \=\{ appears within a rulesyntax error, input %d&@,@4@<@VX)XUW l P   } } too many nonterminals, limit %dtoo many terminals, limit %dinvalid escape"'0\nt # define %s %d illegal /@@@@) ^&.V^FN^6>Fillegal character"%'\rtermleftbinaryrightprecsize simpleinvalid use of '\' or '%', or bad reserved wordeof before \}yyvalyypv[%d]$EOF inside commentEOF in string or character constantaction does not terminate BB"B=>@$,@bHstate %d, pre-nonterminal %v states %d and %d have equal positions state %d %i same as %d %v accepterrorshift %dreduce %d . reduce %d . error %v -> %vtoo many lookahead setsnonterminal %v not defined! %v: %l %d too many statesputitem(%i), state %d yacc error--duplicate itemout of state space%d: %v %d, %v %d, working set overflow State %d, nolook = %d flag set! %i %l yyact %d: R/R conflict ( red'ns %d and %d ) on %v %d: S/R conflict(shift %d, red'n %d) on %vyypactyyr1yyr2off = %d, k = %d action table overflow %d no space in action tableyygoyypgo%v: gotos on %v nonterminal %v %d %d cgetc: %d not open to readcgetc: error on %dcputc: %d not opencputc: writing %dERROR copen: bad file %s+w w&w w /devcrt0.oy0.oy1.oy2.oy3.oy4.o%getc.o.ferror.o/fopen.o0,12exit.o3printf.o3ffltpr.oH5putchr.oR5close.o5creat.o5fstat.o5open.o5read.o6sbrk.o>6seek.o6times.o6write.o6exit.o6nargs.o6retrn.o27rsave.o@7ssw.o`7nhsw.or7put.o7ttyn.o8savr5$ޜ_main"_tbitset$E_nolook#d8_nstate#f8_pstate$E_apstate$H_tystate$ L_stsize#h8_memsiz#j8_mem0$,O_mem#l8_amem$j_actsiz#n8_memact#p8_nprod#r8_prdptr$6_ttyn"8_fstat"5_IEHfbak$ʜ_cclose"2_close"5_exit"6ndigit$pfloat"H5pscien"H5_putchar"R5_fout$_flush"5putc"7flush"7cerror"27_end$_brk"f6_errno$mrsave"@7putw#Efcreat"7ttyn"8unix_v4/usr/bin/find0000755000175000017500000001344401026347440012773 0ustar aapaap, & 6 % w x twTwPF@7,@& ,   @77 @ @m W-. B  J5B B -N B NxfB ^ ew<w * @5d Z& ,   f4 % \@ww  @5h & ,   f % @ww  n B   & ,  &x %  wRw @ |5f ,  & 5 V5f , _@_ 05uW+ 5`f ,  f %_f , @f  5& %_f , @f  5& %_f , "N Z 5% N B  @fH %__f ,  < &  %__f , @f  5&p %_f , @f  5& %_f , @f  5& %_f , &W-@t5@@me5 @fE %UGf ,  e5 & ,  f> %1#f , e5 & ,  fV % Nf B% ww `WpqRWpqDWpq6 2Wpe@ww -""   mww w  B  @aȋ@a%/@a 7 f@  D    B Bw,w @&@ @&@  w w @&@ @&@  w w @&@  wx w f @ h wZ w H  B w< w * @@&~WpWtf %w w @@&JlWpWtf %w w @@&'& %w w @ , w w x @@&& %wb w P ttEP@@&& %w& w  @,-@5hAA @@A@, w w @  w w 5 @ m& B% 5%yW  5 @   w\ w J W+ u- W- AWpA-  u- w w r 55@  mL5+*f , _ ,f , _| @ @a_ @ @ap@ @a0  W 0 @e DN@e&f %5 0@@m5 @ @mp @@m0 N@e&fe %N@e&f %   w w  X  70 5KW F@e5 =%:@ ȋ5=N@e& , & ~5%:@e5 ^=%: =@e 5 7@ww DC ԋ   ww f T Nd B _d  E%@WfWbff %_d WdWbff % 5 u-_^ @@%@@5 f  5 Nv B _d  ff 0%N@e&f % N B _d N  @t!`t@a Wt@a%.Nt@a,H @aA`pr @aq%/ @a/r  @aWt`Aapr  @a0rN f@&@er& ^ e N B e_ ww W.W. Nf ww tC@5b @7&  N f X V@  C- A @@P7 y5   /  N f !  Nf   78 yC- ww xNf   wL  7 ӕ0B~ ӕ.  ӕ0~ B~   :ӕ.| B~ӕe ӕ- ӕ+ r e0e0S @'- @A&@7@L> Be0# @є     BA   W e B@e0m `  eȐ9 ȕ0 ȕ1 >w wf De\  V  % w7 B 7 8 ׯ8 - 0 . "7 &  .B Jd(o"xXfbecsl ӕ- C r f e0 1 /  ҋ D~' f v Le0 9e\ pR &  m4  2  ~    ~ w7   0  Wp `e0[f  , P  @f  7    -| t f VPH  78 4 07@ 7 fw* w 7 wb  f@w@ wBfw*w&w"fw wfwwwwf@wwwwf@www wfwww wf BRw|f "& w` }w\f@Af w,.w"(e w"ew"@l  %e7 F @&HFWff&  } - } 0    } 0  f 5ww l0B`W@ &  W B~  e0VV \ B@e } &  - } 0 Wp `e0  +Insufficient args Odd usage Missing conjunction -or-andoperand follows operand. !()-name-mtime-atime-userCannot find user <%s> -print-group-size-links-perm-exec;-ok;Error <%s / %s> %s. %s !%s! for <%s>? ;{}/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/etc/passwd--bad status %s --cannot open %s --cannot read %s --%s -] *?[dP0  unix_v4/usr/bin/mesg0000755000175000017500000000042401026347440013000 0ustar aapaap* 7jlv&% n 5Pll56yXwas n j? /dev/tty0 x !N@ $$tty7:@ 0/devunix_v4/usr/bin/prof0000755000175000017500000001054001026347440013013 0ustar aapaap`1 & 6 % w  2 7@e`W-.@%- @%l >@@%a &@@%v @u e f d 5 Nf * 0@f h%-^? -V? Nv * D??8?m6?7?-8? ? ?ef %  d 5 * ^0@f F X@f h%V@f h%@f h%> ? Wp@7>?WpN;f h%> E7>> E7>P>7 > >6 0@f h%D>]>%""8> E7.>>&>7 8>-4> p>m(>$>H0@ >eX> > X> > N * <0>e$>;*>Wpe;A-)P>->>@e=A  =Ap=Ape=ez=P e^=\=w^=W7p=@=Z@f h%%_6 (=_.7=7$= =H&7=7=7 =&7 =7=7<7=7<7<7<      && eF&& ne  && VeF&& Fe7 j;-f; #  FwR;WE&& eFw4;WE&& e ;7H;F7H;F;eA7$; H; Wpff %Z@f h%%Q7:7: :H&7:7:  7:&7:& je7:E7:7:7:&7:& De  7:&7:& (e7t:&7~:7x:7t:&7f:& eF$:":A7>:HC7>:PH:-D:D:_8:7,9_(:7,9_:0 7979F:A9Aw979  79&& pe79&HC& \e  79&79HC& <e79&79& (e  7|9pC&7j9 B& e    7 9-9L9m9%_<9m8  8  D&7 97979EHC78e8_L  * 8 8P eP88e-8K80 787x8C7p8&8 (e 8e P5u"r8j8&   * P80 uw&  e  * e$8 (ww u-@@ww u-@@ww x@A@wnw \@0 Aq 55 5 w.w NE ww 5& e5 & eww 57755555@  @  ww  H w 67 6 ӕ0B~6ӕ.  ӕ0~ B~ 66 :ӕ.6B~ӕe ӕ- ӕ+ r e0e0S&e@7^6e(X6 @&- @A&@067@L> Be0# @є 6    BA   w 5e B@e0m5 5`  eȐ9 ȕ0 ȕ1 >w w5Dev5  p5 % w7 \57 R5ׯR5- J5 H5"@7 @5 .@ B J d o x@ fJ e c s l ӕ- C r f e0 1 /4 ҋ D~',0 f v Le0 9ev4 hl4 &  mN4 L4 ~    ~ w7 4 4 40  4Wp `e0[f3 ,3P 3 3 @f 3 @7.3 4@33-33f@)wwf@w:w wfww>www w 3w3AupNNmf ww ~ 2@@5 _ fA rBpu@@m55D@5!f& 2%5 @&   ` 3f b2%5 `@&   5!`@&& :%`@&  `5!$@@AA Nf` u Nf @`5_ @& :%@_w*w 1DCԒ ww f1DCB5ҒS wf@wwDwwf@wwJwz w|f@f&BCB  ԕ- B e0fv   vA W  ~72F @&HFf =a.outCan't find %s Bad format: %s mon.outNo mon.out No symbols: %s No time accumulated /dev/vt0Cannot open vt name %%time #call ms/call %8.8s%6.1f%6s %7.2f u>(\ EE@unix_v4/usr/bin/nohup0000755000175000017500000000246001026347440013200 0ustar aapaap) & 6 % w  W-   e h!5 W- @ AA H 5 u-@eH@e5@ A AH@ =  D  D  D  q!   l!   h!  q!  ww wVGDeLG  FG % wj7 2G7 (Gׯ(G- G G,|H7 G .zH B Jdof ecsl ӕ- 6 r f e0 $FC~ fWtE Ee0hF ^F    8F`w8F ,F  (F FΟF F  F  F  Ew7 E E E0  EWp `e0[eӕ?fwTwP$ wf@f@ EEwvEw H@w H-pEw H@7 NEwfwBEw H7 8EwfAw$w 5Wpe$ W * W r wr wDw4f& @&HF7FFfA7x   fA & 9 &fA @e&7lwhb@ arg count /usr/bin/%s not found 7b7\7V7P7J7D7>78727,7&7 0w w&w hw ^unix_v4/usr/bin/sno0000755000175000017500000002231601026347440012650 0ustar aapaap@!~2 & 6 J% w N 0 Jww N 0 r sww W- @&  7,E(E@  X 7C @ . 7B @ . 7B @ . 7B @ . 7B $@ . 7B ,@ . 7B 4@ . 7B<@ . D@ . RB  BB 4B(B 0 ww  5%  5 BW- " 2 s@C C 7 C 5A n5A  w*w B !  ww  @ 5  p 2ww @")&#     L@b@t@ wRw @@% @@% %  2@@ % e`@@8D@B@555u-u-!   wVw DB5  @ l%! *e5 W-    @P@ AWp Amu!Aup@ww u Z T@@ 5A r e0rA r 5@@ - w2w N f ` jw w N f  jww N &f x VpN jww N &f N  r jww |@N @N N N  <w<w *Nf  N N ww @D@! < <ww N N ww &< vww @>D j@ 05N     J _@ 0   J @5w$w N 0@  &  l; < &   J H;_X         rww ; 7;; :@  ::7 :7 : ::,: < :?:wHw 6: 7:7 :: 0_v : l_ t:j:_v b:X:_v P: ,7H:D:4_v 4: l% : <:_v :9_v 9 9_v 9 799 l% 9_v 9 799 l% ~9_v l9 b9_v Z9 0F9 <9 < _v  7 99@ 9993888b88Z88R  x 2 D ( : 8  j788 l   f8 @0 Z8V8 27N83J8 r  l ww  Z <ww v ,pwnw \C@  <wFw 4 @ t5 u@B5  5@_`  < @@@@ 5 _ @_ @ _@_ @WA @_ @K "5 25@ 4 5 Nf %5@5%}uN& %5W-"A = N <%5    xr 2 b b F T x x @4A 5 5u- W-t_ 5 3!W- W-TA _ W- 5ssKCww  5 @0C  |5 D_ < j  % < B5 ׬  < $ 55 W-  W- @P W-  @P W- @P= N  %@=׬@0   <N& %@ ׬T < v5 W-  W-  @0<t@p < 0@ _T  xjxxxx4bA ww  555555    <  A  <w-3_ V5 & %_0 <  $5N ( _0 $ A  < 5& %_0 A  <        @Po    <7!2-7!2EA  < T5 L5N& %׬@Ap &7@ ׬ 5& %׬@ ׬ 5& %׬_@@B @@s@ }u@ e}u B5 @ @=N <@0 @ @ApN <}s0_ 5@_u@B @B@ D5uJ@=@G 5@=r@0B 5@N <@N < (5N < F52 }@0 @.B w2 w C5/ 5D5!!  l5W- W- 3@ w w B  2 w w v @ $55 55*= -. _*u@ 55u@5_  5A1}5@pW-  Z A1u h5 `5 XA1Jr@=  f Z =@@0 f Z 5N A1N _D-_*5@5@@ Nf   Nf l @5!5 5D) L@ 4 _*C@@4_* u-_*C5@5@@5W-!@_D3_ 5!_}@0 @52Nf  5@_@_du@_d@_Nf  5@_@ W-   @0@p_d_|@ Nf l __duN <CN <I@5@@     @0@N <5 N f B @N <N < <wBw 0C." , j$ : j   x0>>JB  ww  -,* _ uu@_W-  ׬lB  B _  r  3B B  55@2 @5    @0 5!B $ r5=u A1@& Z & B u 0u@2uN <u_x@& B    5f %5 N K_x@ @5   s_x _ xdNwlw ZDC@& j )& @ #&  &  &    x ww  @@7L'@_5& Z  _5u& Z f   _ <_5u & Z @& Z  B _5uu & Z f  5@f@& Z @N <   B  @@1,  B N <. LAAH4   B N < <     xVr%C7 %@@  Z  x%  p%l% ׬B ww CB-<% ,B   J    xntffwjf@wj wlf@)wTwXf@f@ $$w$w C@w C-$w C@7 j$w fw^$w C7 T$wfwH$ R&  E D&Ew E  7 $wf##wm#Cwt#wmn#w r Cd$Yfw>#w:#CwDwHf@w"#w#$Cw"w&@&HF7t'FfA7"*C fA @e7"1@PC  1 @ fA7"VC  fA & 9 &fA @e&7z"wv"p"@xCGcannot open inputfsendstartdefinereturnfreturnsyspitsyspot $'*-"~(+= x),/Out of free space bad integer string eof on inputillegal literal stringpopno operand preceding operatorillegal juxtaposition of operandserror in functionno operand at end of expressiontoo many ('sunrecognized component in matchno space beginning statementunrecognized component in matchunrecognized component in assignmentunrecognized component in gotoname doubly definedname doubly definedillegal component in defineattempt to take an illegal valueattempt to store in a valuephase errorillegal functionillegal functionparameters do not matchattempt to transfer to non-labelattempt to make an illegal assignmentGwww (&w Uw w&w Zw Punix_v4/usr/bin/ac0000755000175000017500000000562601026347440012441 0ustar aapaap d & 6 6% JanFebMarAprMayJunJulAugSepOctNovDecw P * ,e@-# @ t* e@7Z* V*  vdp|wwR*wN* +&* Z *^ | V  !  + 5<S 5  !/ 5W-0W-9W-aW-zW-AW-Z  W-   4   7R~T  Dww 7_ 2_ pC7׭|7 7()_׭}w)_6* * 77(&33e7(`7(w@ @77(w@7(w( 77( (77(  j  6*2e ׭L~7< 8%a(0 !Wpe6*C   wRw @ 55 W->N  5AWp q u55&55 'AWp q AWp q WpCfAWp fe f $e 5  5pC&t e ww 6*!* N&  ewrw ` 7:'575  5Aq5u@7 5 5&@pVp@@50 >= 8 W-6*5 W- @@mA1  W-e 5 W- @@mAH }w|w j Z&" 7!L& mD& AWp `J ҋ   w"w w%pD7%7%w@ 7&7%7%ww  %]57275 r _x7&55557t%  5&557X%54E7TT r  D  ,    r C  &8  |%w  '7 ' ӕ0B~&ӕ.  ӕ0~ B~ && :ӕ.&B~ӕe ӕ- ӕ+ r e0e0S&e@7r&e(l& @&- @A&@D&7@L> Be0# @є &    BA   w %e B@e0m% %`  eȐ9 ȕ0 ȕ1 >w w%De%  % % wv7 p%7 f%ׯf%- ^% \%-7 T% .-B JdXo~fe6cDsl ӕ- ; r f e0 ) '$ ҋ D~ fWtE Ee0$ |$ &  mv$ t$ ~    ~ w7 H$ >$ :$0  0$Wp `e0[f@ $$w#w H"-@w <"--#w N"-@7 #wfw#w 4"-7 #wfw0 7A 7 %fA & UfA  @e71@  1 @ w&f BRwf =7"%F @&HFB@$YfA7V   fA & 9 &fA @e&7"w@ E"&*.26:>B/usr/adm/wtmpNo %s %-8.8s%6.2f total%9.2f D%s %2dw w&w w unix_v4/usr/bin/typo0000755000175000017500000001433401026347440013045 0ustar aapaap pa & 6 % w b @% \  rq tq vq7 q7 qq@ @m%-7@ @m@ @m \ v X  T<7 y @%L \ < X X  5f 8%5W-f 4f 8%5W-4p :f 8%5W-z Lf 8%5W-L N N Z ZpVpRpNp@p  7*p &p" p N @%@ r p %z @ @ &r  A 1q@  _ @ @m&  7o o  6 5{N q4o&  & %5 @  78@ @-;A m,AWpB m`u@ :  A 1:AWpB m`u@E  A1AmAWpBm`u@ :  A 1:_pn N_H@  f @ q N@ 4 5  @ &r@ &r e   5u-  @%1 5 @ r@ &r e  <5u-  Jm  74m 0m&  0  7m m@  m fe  % @%_ @ &r  7l lL l fm Z % @mȋ_p5 @@-7`@mA1 NJ& %<@mA1 fe  % @ N& % Am @m% N& %k N@ r _  & `k NVk NTk Rk  7>k :kV 4k  7k k`  6 5_7 j7 5 @ @-E7 jA mAWpB m`uN J AmAWpN@m` J xjAWpB m`uN $ -PjPjHjHj Bj7 j7 4j ӕ0B~ jӕ.  ӕ0~ B~ ii :ӕ.iB~ӕe ӕ- ӕ+ r e0e0S&e@7ie(i @&- @A&@vi7@L> Be0# @є Ni    BA   w &ie B@e0mi i`  eȐ9 ȕ0 ȕ1 >w whDeh  h % w7 h7 hׯh- h h",x7 h .*xB JdBo<xrf|ec(sl ӕ- C r f e0 1 /g ҋ D~'*. f v Le0 9eg hg &  mg g ~    ~ w7 fg \g Xg0  NgWp `e0[f@ 4g,gwfw 4x@w 4x-gw 4x@7 fw<fwfw 4x7 fw&f@w wf@ wf wfww2wwfw@e78wfwHf5w 7 wTwXfwe5u w 7 ew<f@wwDwwfAw.w*5"WpeDW J W  wwwf& fww wf D& w }w~f@wwwXw\f@Af w,.w"(e w"ew"@l  %e7fF @&HFfA7  fA & 9 &fA @e&7w@7fWp3e @7E@AfW@Vw fW@Vw w VWf@@67f@f @AdVHB`R@7^&e# 7V # VVE=sMBԝ`=B.pF:|+eiD(/zC@;\)@3d@Wf&7V @W@@`RD6B^PBVwVV5@3e1@rzlB#"3h@?ØGe@lB,k$aXUarg count Unrecognizable argument: %c 1narg count /usr/lib/saltread saltread saltread saltread salt/tmp/ttmpa1/tmp/ttmpa2/tmp/ttmpa3/tmp/ttmpa4creat tmp fileopen input file/bin/sortsort-osortforkprobs/bin/uniquniquniqforkprobcreat tmp/usr/lib/w2006open w2006open tmpopen tmp create tmp/bin/sortsort-r-osortforkprob/bin/catcat/bin/prpr-3-hPossible typo's and spelling errorsprforkprobcannot %s read error write error on t.%d B"`@,Czlx 7X7R7L7F7@7:747.7(7"770 w w&w w unix_v4/usr/bin/fed0000755000175000017500000001133201026347440012603 0ustar aapaapBn"0 z 7 x    /       &e  & !eRɋʋe7 7 xnpedmfinqc? ^ B 77zawM p >  8ҕ d "    "    wLNf0q e7   w x www ʋ @ n | @ \  ~/bin/ed/tmp/ftmpaCannot open temp. file t f w< 2 jN   F       xw p w ww|< = f  B L v .  "  8  " @ F wP  ww< , ҕ  w 6"(  z  ҕ  d P ҕ zww` / "ҕ   D ҕ:  .ҕ wZ      ҕ w& H z  > p WpUWfU| 7  \,    H |c  h e 45 $ \)  ~8w -5 (   Ve   w  w vw f w8w  `-X P J @ vҕ lB-*w > w header not accounted for part of asmem released free headers free blocks size  &@     ʋeʋB   & T P D D* 7 0 ʋ.| &'ʋ%f ?  J % <  xeʋBf    w  wɋR b `  ҕ | ey q  Z   H   . wN hCB C B8  7 :  e8 f rfe0 w f r fe0 w f    q,   &8   7X  7K Be8&8 " q,  n7q,  Z7e8 &fCC  j @q o  &  6`( d  Vw`  Bl error on copy f1N1N1N1&0C  Bqqq&qq, qf& H@l1 11 1  D ( & qf7 q,@ @  b@  ȝ q,q q,@   h \   f7d Hq,@ @  T 8 @  \ȝ(  x f   Wv Ee    2 2 2  7 f& Wv Ee  @E7 2bwe2 @` .&&w2 f  2 2 Wv E@`e & ! ,   e e$ fhr    ,  e7 & 2 ,    &e " ::e8p:@11     : bwOut of space.  :e8p:e8Bl s3 B88& F V 1:1 8p: f&7 H 0 :`CKe8 Gxe, 2e8 Be8, 2 8 4l4 4<80<Ae8   ,Out of headers.      @ @W \W 85W,W,@@& ,e ":e8  & 87 & 7 7  v 8 d e8^ U\87R e e 052 :  Z. e8& 2   8:8A e8 8  bw w 8  not in memory. Cannot open file cannot open output file form.munix_v4/usr/bin/sa0000755000175000017500000001247601026347440012462 0ustar aapaap@:Z & 6 % w j W-R@-Ke @@mȋ=@@m. !1 !. !+ ~!( z!% v!" r! n! n! `!@@me7V  L!  H! y4  7HyW-x    e@   _>  _5 W-_AWp"i5 W- AWpAmW"?  AWpW, "N- 7vAWpjpsl " "AWpq"fNWp""AWpq"f,Wp""AWpq"f Wp""AWp1"  55W-SAWp"I5 W-AWpAmCpCm"" AWpCp " "AWpq"Cps"AWpq"Cps"AWpq"Cps"  *B    5 D dAWpN"f H%N x tt  5 D N x    |f" e  D 7^t&7Tt&7Jt&7Rt& e 5 u-:AWp"0AWpq "uAWpNe" D AWpq"fAWpq"fAWpq"f5& e  wPw >5& e 5ws@  D C5wxs& e 7Vs&5 &5& e 67:s&5&5& re7$s&5&5& Xe7sws&55&5& 2e 5 uu& e  wP w >  5 uWpC& e 5 aF& e j5 5  D C5 5& e w w 4  .r! D wr f  5 N! D _@e&f %%_@eAe E   ̕?   @e@&*! D %@&7tq7nq@e 5AWp "555H&55pC&555&AWp""5&7p7p555H&555&AWp""5&7p7p555H&555&AWp""5&7dp7^p_N xw w @A1,Nf |   @A@ @A@w w ~ N Aq5N Aq55u@  5u@   w w  N 5N 55u@  L5u@  , w w  @0Aqw w v  4!  5_ @e&f %%H@e 55&7n7nAWpq "5&7zn7tnAWpuq"5&7^n7XnAWpuq"5&7Bn7 Be0# @є Rm    BA   w *me B@e0mm m`  eȐ9 ȕ0 ȕ1 >w <wlDel  l % w 7 l7 lׯl- l l"z7 l .z B J d*o$xZfdecs l ӕ- C r f e0 1 /l ҋ D~'X!\! f v Le0 9ek hk &  mk k ~    ~ w7 jk `k \k0  RkWp `e0[f@ 8k0kwkw  z@w  z-kw  z@7 jw\fwjw  z7 jwFf h xhh x  7h ߨh h7l 7 hf@w wfww`!wwf@)wwfwwf!www w "jwjAupNNmf  ww t i@@5 _n fA rBpu@@m55D@5!f& i%5 @& r  ` 3f ji%5 `@& r  5!`@&& %`@& r `5!$@@AA Nf`  u Nf  @`5_@& %@_\w w hDCԒ ww nhDCB5ҒS wf@wwl!wwfAww5Wpel!W r! W ! w!wRwBf& f@wlwh!wwf@7iF @&HF r dA! fA7 !  fA & 9 &fA @e&7w@!  $ . : D     vp|^dj/usr/adm/sh_acct***other/usr/adm/sht_acctCan't save Can't truncate %8s%-8.8s%6.0f%7s%6.2f%%%6.1f%9.2f%9.2f%7s%6.2f%%Only 1 file with -s Can't open %s %3d %.8s /usr/adm/sht_acct**junk**%.8s--777777777777z0w w&w w unix_v4/usr/bin/roff0000755000175000017500000001766201026347440013015 0ustar aapaapJ!%w  0h0h  7 F"4  w +w  -s , h7 Vw  j`\T  0"   ^ w<1#1a׭]zw7F 17ABwыwToo many files. 7  77  | N  7'# E''7?w 7 x7 r j | 9   ~7 v  t h_ B 0 9 A  Z a z  6*7 $ 7    \ w VR  nw Dh  7 f hw`durxylt a@n#\\7894312fA@ ыW hW x@ 0 *Xf  0 6w 4 P7 = @`7@w  ȋЭ7 P    e7   t 0 1-` 7 E"  z 7 n7 ") d&  -T W   <w6& @& 2   !&w bj%&     v w`? - e-tn98734127j \& VSNE N  -~ ten^W$ ad bp$ br( cc. ceF ds^ fij int ix li ll ls na ne nf pa$ blF plp sk sp ss ta ti tr ul un he> hx( foL ehZ ohb efj ofr m1z m2 m3 m4 hc hy n1 n2 nn* ni: joJ arV ro\ nxb po de ig tc mk      77 w  7  v   w * 77w * 7w &  7 0  w  7$ L * " 7w  ~ 77 7 w \ ^ B 7     w 0 27 w  &     w 7x w  7 w w d X t2 J B  6  1"w    (w t* v7,w d f7w T P7 7    w "88w "..w "w x "w p "w h "w  7\w  7Nw  7@w  72  : 2 7& "   7w x7  7 w R 77 w < >7w , .7w 77   w  J h7 F w  7F &" Zw 7 & NE-UtW$     (  b%  7 T?  w X G-  w J5w "w "vw J \ v r j :#%  , ^ R 7 R7 Fdd ^ m 7 7 -  $ m  -d -  m w ~   , 7  f & & | +  - 0  p `6e07:@W -W +` ) & w J5w "w "-w J7  - >w( ^ - ( -% ?~ z Bw`wb #7 z7 7 h7 l#F&  97 R P%  &  z7  p 7   % % . e #  #7 7 7  dw` p~m7  h  fA p ! ~7L A 7 . > 7  . #    *# w<-8.*7^w|" -  vn, 2 ^ A Z a zfE?w - w  F EF 7 F7 ^7 , P0  - 7 %  ( %  ,  7 D   ^  t 7 >  fw`   v  7` e 7 V 7 T   7   H ^  r   L ,  5  -       7a    w  - -  m 7  m 7  z7   - Հ E #’E -2 &  < w> d   :    & )-> (    ׬-˕-  ˋ w w` w`  7 ŀ!#  7 ~ 7 l mj mp 7 7V 7T 7R 7P BR -\ \ V R 7 D     %  X ]       w*   & B L w v&w n&w f& m 6Bw B~~ m  & rw ~\ e Zw ~ & f  % N`  F  D $@ jN` .N` w ~&  V%   f r  ve0 e  fr  v  r  N`  x t p l e \ N` L N` #   7  2  ^ V 7 ȋ w w   . , (  ) " ' ` ae a e  i o u y&  @ S  7, H 7 7 aw l b w Hw >3w 2 77 ̇-Հ &EE a B a p   B `De  Ep 0 C a F"E8 jC1E`C`˜ E ^  CEC`ѵ 7 @w VՀ  &&  (2 E  2 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@H/usr/lib/suftabixcmvld/dev/tty0/tmp/rtma %vE q  b7 . R7 x801234567abcd unix_v4/usr/pub/0000755000175000017500000000000001026347440012135 5ustar aapaapunix_v4/usr/pub/ascii0000644000175000017500000000204001026347440013144 0ustar aapaap|000 nul|001 soh|002 stx|003 etx|004 eot|005 enq|006 ack|007 bel| |010 bs |011 ht |012 nl |013 vt |014 np |015 cr |016 so |017 si | |020 dle|021 dc1|022 dc2|023 dc3|024 dc4|025 nak|026 syn|027 etb| |030 can|031 em |032 sub|033 esc|034 fs |035 gs |036 rs |037 us | |040 sp |041 ! |042 " |043 # |044 $ |045 % |046 & |047 ' | |050 ( |051 ) |052 * |053 + |054 , |055 - |056 . |057 / | |060 0 |061 1 |062 2 |063 3 |064 4 |065 5 |066 6 |067 7 | |070 8 |071 9 |072 : |073 ; |074 < |075 = |076 > |077 ? | |100 @ |101 A |102 B |103 C |104 D |105 E |106 F |107 G | |110 H |111 I |112 J |113 K |114 L |115 M |116 N |117 O | |120 P |121 Q |122 R |123 S |124 T |125 U |126 V |127 W | |130 X |131 Y |132 Z |133 [ |134 \ |135 ] |136 ^ |137 _ | |140 ` |141 a |142 b |143 c |144 d |145 e |146 f |147 g | |150 h |151 i |152 j |153 k |154 l |155 m |156 n |157 o | |160 p |161 q |162 r |163 s |164 t |165 u |166 v |167 w | |170 x |171 y |172 z |173 { |174 | |175 } |176 ~ |177 del| unix_v4/usr/pub/greek0000644000175000017500000000073501026347440013162 0ustar aapaapalpha A A | beta B B | gamma \ \ GAMMA G G | delta D D | DELTA W W epsilon S S | zeta Q Q | eta N N THETA T T | theta O O | lambda L L LAMBDA E E | mu M M | nu @ @ xi X X | pi J J | PI P P rho K K | sigma Y Y | SIGMA R R tau I I | phi U U | PHI F F psi V V | PSI H H | omega C C OMEGA Z Z | nabla [ [ | not _ _ partial ] ] | integral ^ ^ unix_v4/usr/pub/kbd0000644000175000017500000000036401026347440012623 0ustar aapaap <[1234567890-_]^\ >qwertyuiop@ asdfghjkl;: zxcvbnm,./ <[1234567890-_]^\ > @ ;: ,./ <{!"#$%&'() =_}~| >QWERTYUIOP` ASDFGHJKL+* ZXCVBNM,.? <{ !"#$%&'() =_} ~ | >QWERTYUIOP` ASDFGHJKL+* ZXCVBNM,.? unix_v4/usr/pub/tabs0000644000175000017500000000035001026347440013007 0ustar aapaap 2 1 1 1 1 1 1 1 1 1 1 012345670123456701234567012345670123456701234567012345670123456701234567 x x x x x x x x x unix_v4/usr/c/0000755000175000017500000000000001026347440011571 5ustar aapaapunix_v4/usr/c/c20.c0000644000175000017500000004013201026347440012321 0ustar aapaap# #define JBR 1 #define CBR 2 #define JMP 3 #define LABEL 4 #define DLABEL 5 #define ESW 6 #define EROU 7 #define FOR 8 #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 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 struct node { char op; char subop; struct node *forw; struct node *back; struct node *ref; int labno; char *code; int refc; }; struct { int combop; }; struct optab { char *opstring; int opcode; } 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, "/esw", ESW, "/for", FOR, ".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, 0, 0 }; char line[512]; struct node first; char *curlp; int nbrbr; int nsaddr; int redunm; int iaftbr; int njp1; int nrlab; int nxjump; int ncmot; int nrevbr; int nchange; int isn 20000; int debug; char *lasta; char *lastr; char *firstr; char revbr[] { JNE, JEQ, JGT, JLT, JGE, JLE, JHIS, JLOS, JHI, JLO }; char regs[12][20]; #define RT1 10 #define RT2 11 #define FREG 5 #define NREG 5 #define LABHS 127 #define OPHS 57 struct optab *ophash[OPHS]; struct { int int;}; struct { char lbyte; }; main(argc, argv) char **argv; { register int niter, maxiter, isend; extern end; extern fin, fout; int nflag; if (argc>1 && argv[1][0]=='+') { argc--; argv++; debug++; } if (argc>1 && argv[1][0]=='-') { argc--; argv++; nflag++; } if (argc>1) { if ((fin = open(argv[1], 0)) < 0) { printf("C2: can't find %s\n", argv[1]); exit(1); } } else fin = dup(0); if (argc>2) { if ((fout = creat(argv[2], 0666)) < 0) { fout = 1; printf("C2: can't create %s\n", argv[2]); exit(1); } } else fout = dup(1); lasta = firstr = lastr = sbrk(2); maxiter = 0; opsetup(); do { isend = input(); movedat(); niter = 0; do { refcount(); do { iterate(); clearreg(); niter++; } while (nchange); rmove(); } while (jumpsw()); output(); if (niter > maxiter) maxiter = niter; lasta = firstr; } while (isend); flush(); fout = 2; if (nflag) { printf("%d iterations\n", maxiter); printf("%d jumps to jumps\n", nbrbr); printf("%d inst. after jumps\n", iaftbr); printf("%d jumps to .+2\n", njp1); printf("%d redundant labels\n", nrlab); printf("%d cross-jumps\n", nxjump); printf("%d code motions\n", ncmot); printf("%d branches reversed\n", nrevbr); printf("%d redundant moves\n", redunm); printf("%d simplified addresses\n", nsaddr); printf("%dK core\n", ((lastr+01777)>>10)&077); flush(); } } input() { register struct node *p, *lastp; register int op; lastp = &first; while ((op = getline()) >= 0) { switch (op.op) { case LABEL: p = alloc(sizeof first); if (line[0] == 'L') { p->combop = LABEL; p->labno = getnum(line+1); p->code = 0; } else { p->combop = DLABEL; p->labno = 0; p->code = copy(line); } break; case JBR: case CBR: case JMP: case JSW: p = alloc(sizeof first); p->combop = op; if (*curlp=='L' && (p->labno = getnum(curlp+1))) p->code = 0; else { p->labno = 0; p->code = copy(curlp); } break; default: p = alloc(sizeof first); p->combop = op; p->labno = 0; p->code = copy(curlp); break; } p->forw = 0; p->back = lastp; lastp->forw = p; lastp = p; p->ref = 0; if (op==EROU) return(1); } lastp->forw = 0; return(0); } getline() { register char *lp; register c; lp = line; while (c = getchar()) { if (c==':') { *lp++ = 0; return(LABEL); } if (c=='\n') { *lp++ = 0; return(oplook()); } *lp++ = c; } return(-1); } 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 *op; register int byte; t = &first; while (t = t->forw) switch (t->op) { case LABEL: printf("L%d:", t->labno); continue; case DLABEL: printf("%s:", t->code); continue; default: if ((byte = t->subop) == BYTE) t->subop = 0; for (op = optab; op->opstring!=0; op++) if (op->opcode == t->combop) { printf("%s", op->opstring); if (byte==BYTE) printf("b"); break; } if (t->code) printf("\t%s\n", t->code); else if (t->op==JBR || t->op==CBR) printf("\tL%d\n", t->labno); else printf("\n"); continue; case JSW: printf("L%d\n", t->labno); continue; case 0: if (t->code) printf("%s", t->code); printf("\n"); continue; } } copy(ap) char *ap; { register char *p, *np; char *onp; register n; int na; na = nargs(); 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 int *p; for (optp = optab; p = optp->opstring; optp++) { ophp = &ophash[((p[0]+p[1].lbyte)&077777) % OPHS]; while (*ophp++) if (ophp > &ophash[OPHS]) ophp = ophash; *--ophp = optp; } } oplook() { register struct optab *optp; register char *lp, *op; static char tmpop[32]; struct optab **ophp; op = tmpop; for (lp = line; *lp && *lp!=' ' && *lp!='\t';) *op++ = *lp++; *op++ = 0; while (*lp=='\t' || *lp==' ') lp++; curlp = lp; ophp = &ophash[((tmpop[0].int+tmpop[2])&077777) % OPHS]; while (optp = *ophp) { op = optp->opstring; lp = tmpop; while (*lp == *op++) if (*lp++ == 0) return(optp->opcode); if (*lp++=='b' && *lp++==0 && *--op==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; 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 && p->labno == lp->labno) { p->ref = lp; lp->refc++; continue; } for (lp=first.forw; lp; lp = lp->forw) { if (lp->op==LABEL && p->labno==lp->labno) { p->ref = lp; lp->refc++; break; } } } } for (p = first.forw; p!=0; p = p->forw) if (p->refc==0) p->refc++; } iterate() { register struct node *p, *rp; 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) { nbrbr++; p->labno = rp->labno; decref(p->ref); rp->ref->refc++; p->ref = rp->ref; nchange++; } } if (p->op==JBR) { while (p->forw && p->forw->op!=LABEL) { 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; } xjump(p); p = codemove(p); } } } xjump(ap) { register int *p1, *p2, *p3; int nxj; nxj = 0; p1 = ap; if ((p2 = p1->ref) == 0) return(0); for (;;) { while ((p1 = p1->back) && p1->op==LABEL); while ((p2 = p2->back) && p2->op==LABEL); if (!equop(p1, p2)) return(nxj); p3 = alloc(sizeof first); p3->combop = LABEL; p3->labno = isn; p3->ref = 0; p3->code = 0; p3->refc = 1; p3->back = p2->back; p3->forw = p2; p2->back->forw = p3; p2->back = p3; p1->combop = JBR; p1->ref = p3; p1->labno = isn++; p1->code = 0; nxj++; nxjump++; nchange++; } } codemove(ap) struct node *ap; { register struct node *p1, *p2, *p3; p1 = ap; 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!=ESW && p2->op!=FOR) return(p1); p2 = p2->forw; p3 = p1->ref; while (p3) { if (p3->op==JBR || p3->op==ESW) { if (p1 == p3) return(p1); ncmot++; nchange++; if (p2->back->op==FOR) { p2->back->op = JBR; p2->back->labno = p2->labno; p2->back->ref = p2; p2->refc++; p2->back->code = 0; } 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); } rmove() { register struct node *p; register char *cp; register int r; int r1, flt; for (p=first.forw; p!=0; p = p->forw) { if (debug) { for (r=0; r<2*NREG; r++) if (regs[r][0]) printf("%d: %s\n", r, regs[r]); printf("-\n"); } flt = 0; switch (p->op) { case MOVF: case MOVFO: case MOVOF: flt = NREG; case MOV: dualop(p); if ((r = findrand(regs[RT1], flt)) >= 0) { if (r == flt+isreg(regs[RT2]) && p->forw->op!=CBR) { p->forw->back = p->back; p->back->forw = p->forw; redunm++; continue; } } 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]); source(regs[RT1]); continue; case ADDF: case SUBF: case DIVF: case MULF: flt = NREG; case ADD: case SUB: case BIC: case BIS: case MUL: case DIV: case ASH: dualop(p); 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; 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); dest(regs[RT1], flt); continue; case TSTF: flt = NREG; case TST: singop(p); repladdr(p, 0, flt); source(regs[RT1]); continue; case CMPF: flt = NREG; case CMP: case BIT: dualop(p); source(regs[RT1]); source(regs[RT2]); repladdr(p, 1, flt); continue; case CBR: case CFCC: continue; default: clearreg(); } } } jumpsw() { register struct node *p, *p1; register t; 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)) { p->subop = revbr[p->subop]; t = p1->ref; p1->ref = p->ref; p->ref = t; t = p1->labno; p1->labno = p->labno; p->labno = t; nrevbr++; nj++; } } return(nj); } 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->combop != p2->combop) 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(ap) { register struct node *p; p = ap; if (--p->refc <= 0) { nrlab++; p->back->forw = p->forw; p->forw->back = p->back; } } nonlab(ap) struct node *ap; { register struct node *p; p = ap; while (p && p->op==LABEL) p = p->forw; return(p); } alloc(an) { register int n; register char *p; n = an; n++; n =& ~01; if (lasta+n >= lastr) { if (sbrk(2000) == -1) { write(2, "Out of space\n", 14); 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'; } savereg(ai, as) char *as; { register char *p, *s; p = regs[ai]; s = as; if (source(s)) return; while (*p++ = *s) if (*s++ == ',') break; *--p = '\0'; } dest(as, flt) char *as; { register char *s; register int i; s = as; if ((i = isreg(s)) >= 0) regs[i+flt][0] = 0; while ((i = findrand(s, flt)) >= 0) regs[i][0] = 0; while (*s) { if ((*s=='(' && (*(s+1)!='r' || *(s+2)!='5')) || *s++=='*') { for (i=flt; 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 char *s; register int i; register char *p; 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(rt1, rt2); } } movedat() { register struct node *p1, *p2; struct node *p3; register seg; struct node data; struct node *datp; if (first.forw == 0) return; 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 = -1; for (p1 = first.forw; p1!=0; p1 = p1->forw) { if (p1->op==TEXT|p1->op==DATA||p1->op==BSS) { 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; } } } unix_v4/usr/c/c01.o0000644000175000017500000001735001026347440012342 0ustar aapaapr 2 w W-( $@ 55  vW- 3 3 3e|_dW-#  W-d v5 @F y$:e4_d& & f e _X"r u_E% & &d e _X"#" e_dE% & &$ e_X"$ 1HeB_d",&  &f e_X 5 T5 "5  "5_n f v% _d&f e_X T &f e _Xde^ " $ B>", "eu@E%N 5f %#  &  ee ( @E%_d$ _dW-52 5 _N J&&  Wp eAu@E5 @5W-P!W- 5 _W-YEUW-!5!KW-?5!W-<( 7W-5 55 *W-)u5  5=W-5 5 ff he5W-= !W-e5 f v% E  ff he&ff e e   f&  hee ww @ 8 x*+N & &  ef& f& e 34N& f& e< @ww DCB  % x.HrrrrrHVrrrdd &  && %ww DE%& d &# ewHw DCE%",e&  & %# ww @%!N ww D!E%h E!Ee wrw n h ĝ\VRh Nff f fff e   7w w @ee@   &ww eH n  ww D##$ ww D#] W/U@@% H x $ @ 4 ,    `&e -BpC r rC@ @Px @ t t ww  #  wIllegal conditionalCall of non-functionIllegal indirectionIllegal lvalueIllegal structure ref      n@nnnIllegal conversionC error-- convertInteger operand required%d: Expression overflowLvalue requiredConstant requiredyyyyyy9yyyyyyyyyyyyyyyyyyyyyyyy  Y  iiiI yyi i_cvtab _opdope _ctab _symbuf _hshused _hshtab _space _cp _cmst P_isn _swtab _swp _contlab _brklab _retlab _deflab _nauto _autolen _peeksym _peekc _eof _line _treebas _debug _defsym _funcsym _xdflg _proflg _csym _cval _fcval _nchstr _nerror _paraml _parame _strflg _osleft _mosflg _initflg _inhdr _dimtab _binbuf _ascbuf _dimp _regvar _build"L15r L19 L23 L28 L36 L10003 L10004 L10005 L10006 L10007 L10008 L39L9L31nL20@L17L10L32nL11L29nL33L12L13L30nL24L34L51( rsave L2L3N_disarra"_chkfun"vL4_length L1dL5L6hsw _block"L20002XL14_error"L16L18_decref L20005XL10000LL21^L22rL20008XL25_incref L26L27L20011XL40_chklval"TL41"_chkw""L420L43n_fold"vL20014X_plength L20017XL10001L35L37 _setype"L45_lintyp"JL10009L10010L46L47L10011 L482L10012(L50(L52`L53LL54L55_convert"hL59L60L61L10013L10014L10015L62drretrn L73< L72L66L68L69L71L67L63L70L75L83rL78HL79HL80VL81dL82dL20020hL20023hL85L84L10018L87L86L90N L88FL92^L91L93pL94L96h _fflush _printf _putchar L95L98 L99 _pblock"&L102n L101P_exit L100PL105 L104rL103rL20024@ L107L122@ L118 L119$ L110L111L112L113L114L1214 L120, L115 L116 L117 L108L106B _conexp"F L126 _tree L124f L125f unix_v4/usr/c/c04.c0000644000175000017500000001405201026347440012325 0ustar aapaap# #include "c0h.c" /* * 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, /* EOF */ 000000, /* ; */ 000000, /* { */ 000000, /* } */ 036000, /* [ */ 002000, /* ] */ 036000, /* ( */ 002000, /* ) */ 014201, /* : */ 007001, /* , */ 000000, /* 10 */ 000000, /* 11 */ 000000, /* 12 */ 000000, /* 13 */ 000000, /* 14 */ 000000, /* 15 */ 000000, /* 16 */ 000000, /* 17 */ 000000, /* 18 */ 000000, /* 19 */ 000400, /* name */ 000400, /* short constant */ 000400, /* string */ 000400, /* float */ 000400, /* double */ 000000, /* 25 */ 000000, /* 26 */ 000000, /* 27 */ 000000, /* 28 */ 034200, /* sizeof */ 034202, /* ++pre */ 034202, /* --pre */ 034202, /* ++post */ 034202, /* --post */ 034220, /* !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, /* || */ 000000, /* 55 */ 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, /* ? */ 000000, /* 91 */ 000000, /* 92 */ 000000, /* 93 */ 000000, /* 94 */ 000000, /* 95 */ 000000, /* 96 */ 000000, /* 97 */ 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, /* 109 */ 000000 /* force r0 */ }; /* * conversion table: * 0100-- convert left operand * 0*0XX-- XX is conversion number, to wit: * 000: none * 001: int -> ptr * 002: ptr -> int * 003: int -> double * 004: double -> int * 077: generally illegal */ char cvtab[] { 0000, /* i : i */ 0000, /* i : c */ 0103, /* i : f */ 0103, /* i : d */ 0077, /* i : s */ 0101, /* i : *i */ 0000, /* i : *c */ 0101, /* i : *f */ 0101, /* i : *d */ 0101, /* i : *s */ 0101, /* i : ** */ 0000, /* c : i */ 0000, /* c : c */ 0103, /* c : f */ 0103, /* c : d */ 0077, /* c : s */ 0101, /* c : *i */ 0000, /* c : *c */ 0101, /* c : *f */ 0101, /* c : *d */ 0101, /* c : *s */ 0101, /* c : ** */ 0003, /* f : i */ 0003, /* f : c */ 0000, /* f : f */ 0000, /* f : d */ 0077, /* f : s */ 0077, /* f : *i */ 0077, /* f : *c */ 0077, /* f : *f */ 0077, /* f : *d */ 0077, /* f : *s */ 0077, /* f : ** */ 0003, /* d : i */ 0003, /* d : c */ 0000, /* d : f */ 0000, /* d : d */ 0077, /* d : s */ 0077, /* d : *i */ 0077, /* d : *c */ 0077, /* d : *f */ 0077, /* d : *d */ 0077, /* d : *s */ 0077, /* d : ** */ 0077, /* s : i */ 0077, /* s : c */ 0077, /* s : f */ 0077, /* s : d */ 0077, /* s : s */ 0077, /* s : *i */ 0077, /* s : *c */ 0077, /* s : *f */ 0077, /* s : *d */ 0077, /* s : *s */ 0077, /* s : ** */ 0001, /* *i : i */ 0001, /* *i : c */ 0077, /* *i : f */ 0077, /* *i : d */ 0077, /* *i : s */ 0002, /* *i : *i */ 0077, /* *i : *c */ 0077, /* *i : *f */ 0077, /* *i : *d */ 0077, /* *i : *s */ 0002, /* *i : ** */ 0000, /* *c : i */ 0000, /* *c : c */ 0077, /* *c : f */ 0077, /* *c : d */ 0077, /* *c : s */ 0077, /* *c : *i */ 0000, /* *c : *c */ 0077, /* *c : *f */ 0077, /* *c : *d */ 0077, /* *c : *s */ 0077, /* *c : ** */ 0001, /* *f : i */ 0001, /* *f : c */ 0077, /* *f : f */ 0077, /* *f : d */ 0077, /* *f : s */ 0077, /* *f : *i */ 0077, /* *f : *c */ 0002, /* *f : *f */ 0077, /* *f : *d */ 0077, /* *f : *s */ 0077, /* *f : ** */ 0001, /* *d : i */ 0001, /* *d : c */ 0077, /* *d : f */ 0077, /* *d : d */ 0077, /* *d : s */ 0077, /* *d : *i */ 0077, /* *d : *c */ 0077, /* *d : *f */ 0002, /* *d : *d */ 0077, /* *d : *s */ 0077, /* *d : ** */ 0001, /* *s : i */ 0001, /* *s : c */ 0077, /* *s : f */ 0077, /* *s : d */ 0077, /* *s : s */ 0077, /* *s : *i */ 0077, /* *s : *c */ 0077, /* *s : *f */ 0077, /* *s : *d */ 0002, /* *s : *s */ 0077, /* *s : ** */ 0001, /* ** : i */ 0001, /* ** : c */ 0077, /* ** : f */ 0077, /* ** : d */ 0077, /* ** : s */ 0002, /* ** : *i */ 0077, /* ** : *c */ 0077, /* ** : *f */ 0077, /* ** : *d */ 0077, /* ** : *s */ 0002 /* ** : ** */ }; /* * character type table */ char ctab[] { EOF, INSERT, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, SPACE, NEWLN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, SPACE, EXCLA, DQUOTE, UNKN, 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, UNKN, 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 }; unix_v4/usr/c/regtab.s0000644000175000017500000001477701026347440013241 0ustar aapaap/ c code tables-- compile to register .globl _regtab .data _regtab=. 106.; cr106 30.; cr30 31.; cr30 32.; cr32 33.; cr32 34.; cr34 35.; cr35 29.; cr29 36.; cr36 37.; cr37 38.; cr38 101.; cr100 80.; cr80 40.; cr40 41.; cr40 / - like + 42.; cr42 43.; cr43 44.; cr43 45.; cr45 46.; cr46 47.; cr47 48.; cr48 49.; cr49 70.; cr70 71.; cr70 72.; cr72 73.; cr73 74.; cr74 75.; cr75 76.; cr76 77.; cr77 78.; cr78 79.; cr79 102.; cr102 51.; cr51 52.; cr52 104.; cr104 0 .text / init expression cr104: %c,n C1 %a,n %af,n A1 / goto cr102: %i,n jmp A1 %n*,n F* jmp #1(R) / call cr100: %a,n %a,nf jsr pc,`A1 %n*,n %n*,nf F* jsr pc,#1(R) %n,n %n,nf F jsr pc,(R) / addressible cr106: %z,n clr R %zf,n clrf R %a,n movB1 A1,R %ad,n movf A1,R %af,n movof A1,R /++,-- prefix cr30: %ai,n %abp,n %ab,n IB1 A1' movB1 A1,R %adp,n %afp,n %a,n I' $^,A1' mov A1,R %nbp*,n %ni*,n %nb*,n F* IB1 #1(R) movB1 #1(R),R %ndp*,n %nfp*,n %n*,n F* I' $^,#1(R) mov #1(R),R / ++,-- postfix cr32: %ai,n %abp,n %ab,n movB1 A1',R IB1 A1 %adp,n %afp,n %a,n mov A1',R I' $^,A1 %nbp*,n %nb*,n %ni*,n F* movB1 #1(R),-(sp) IB1 #1(R) movB1 (sp)+,R %ndp*,n %nfp*,n %n*,n F* mov #1(R),-(sp) I' $^,#1(R) mov (sp)+,R / ! cr34: %n,n FC beq 1f clr R br 2f 1: mov $1,R 2: / &unary cr35: %a,n %af,n mov $A1,R / & unary of auto cr29: %e,n %ef,n mov r5,R add Z,R / *unary cr36: %nbp*,n F* movb *#1(R),R %ndp*,n F* movf *#1(R),R %nfp*,n F* movof *#1(R),R %n*,n F* mov *#1(R),R %abp,n movb *A1,R %adp,n movf *A1,R %afp,n movof *A1,R %a,n mov *A1,R %nbp,n H* movb ~(R),R %ndp,n H* movf ~(R),R %nfp,n H* movof ~(R),R %n,n H* mov ~(R),R / - unary cr37: %n,n %nf,n F negBF R / ~ cr38: %n,n F com 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*,a 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)+ %a,nf S movfi R,R movB1 R,A1 %e*,nf S F1* movfi R,R movB1 R,#1(R1) %n*,nf FS* S movfi R,R movB1 R,*(sp)+ / ^ -- xor cr49: %n,e F S1 xor R1,R %n,n FS S xor R,(sp) mov (sp)+,R / | cr48: %n,a F bisB2 A2,R %n,e* F S1* bisB2 #2(R1),R %n,e F S1 bis R1,R %n,n FS S bis (sp)+,R / & cr47: %n,c F bic $!C2,R %n,e F S1 com R1 bic R1,R %n,n FS S com (sp) bic (sp)+,R / >> cr45: %n,z F %n,1 F asr R %n,c F ash $-C2,R %n,e F S1 neg R1 ash R1,R %n,n SS neg (sp) F ash (sp)+,R / << cr46: %n,z F %n,1 F asl R %n,aw F ash A2,R %n,ew* F S1* ash #1(R1),R %n,e F S1 ash R1,R %n,n SS F ash (sp)+,R / +, - cr40: %n,z F %n,1 F I' R %n,aw %nf,ad F IBF A2,R %n,ew* %nf,ed* F S1* IBF #2(R1),R %n,e %nf,ef F S1 IBF R1,R %n,nw* %nf,nd* SS* F IBF *(sp)+,R %n,n %nf,nf SS F IBF (sp)+,R / * -- R must be odd on integers cr42: %n,aw %nf,ad F mulBF A2,R %n,ew* %nf,ed* F S1* mulBF #2(R1),R %n,e %nf,ef F S1 mulBF R1,R %n,n %nf,nf SS F mulBF (sp)+,R / / R must be odd on integers cr43: %n,aw F T sxt R- div A2,R- %n,ew* F T sxt R- S1* div #2(R1),R- %n,e F T sxt R- S1 div R1,R- %n,n SS F T sxt R- div (sp)+,R- %nf,ad F divf A2,R %nf,ed* F S1* divf #2(R1),R %nf,ef F S1 divf R1,R %nf,nf SS F divf (sp)+,R / =* cr72: %a,aw %ad,ad movB1 A1',R mulBF A2,R movB1 R,A1 %af,nf SS movof A1',R mulf (sp)+,R movfo R,A1 %a,ew* %ad,ed* movB1 A1',R S1* mulBF #2(R1),R movB1 R,A1 %aw,n %ad,n S mulBF A1',R movBF R,A1 %a,n SS movB1 A1',R mulBF (sp)+,R movB1 R,A1 %nw*,n %nd*,nf FS* S mulBF *(sp),R movB1 R,*(sp)+ %n*,n FS* SS movB1 *2(sp),R mul (sp)+,R movB1 R,*(sp)+ %nf*,nf FS* movof *(sp),R movf R,-(sp) S mulf (sp)+,R movfo R,*(sp)+ / =/ ; R must be odd on integers cr73: %a,aw movB1 A1',R sxt R- divBF A2,R- movB1 R-,A1 %a,n SS movB1 A1',R sxt R- div (sp)+,R- movB1 R-,A1 %e*,n SS F1* movB1 #1(R1),R sxt R- div (sp)+,R- movB1 R-,#1(R1) %n*,n FS* SS movB1 *2(sp),R sxt R- div (sp)+,R- movB1 R-,*(sp)+ %ad,ad movf A1',R divf A2,R movf R,A1 %ad,ef movf A1',R S1 divf R1,R movf R,A1 %ad,nf SS movf A1',R divf (sp)+,R movf R,A1 %af,nf SS movof A1',R divf (sp)+,R movfo R,A1 %nd*,nf FS* SS movf *8(sp),R divf (sp)+,R movf R,*(sp)+ %nf*,nf FS* SS movof *8(sp),R divf (sp)+,R movfo R,*(sp)+ / =mod; R must be odd on integers cr74: %a,aw movB1 A1',R sxt R- div A2,R- movB1 R,A1 %a,n SS movB1 A1',R sxt R- div (sp)+,R- movB1 R,A1 %e*,n SS F1* movB1 #1(R1),R sxt R- div (sp)+,R- movB1 R,#1(R1) %n*,n FS* SS movB1 *2(sp),R sxt R- div (sp)+,R mov R,*(sp)+ / =| cr78: %a,a bisBE A2,A1' movB1 A1,R %a,n S bisB1 R,A1' movB1 A1,R %n*,a F* bisBE A2,#1(R) movB1 #1(R),R %e*,n* S* F1* bisBE #1(R1),#2(R) movB1 #2(R),R %e*,n S F1* bisBE R,#1(R1) movB1 #1(R1),R %n*,e* F* S1* bisBE #2(R1),#1(R) movB1 #1(R),R %n*,e F* S1 bisBE R1,#1(R) movB2 #1(R),R %n*,n* FS* S* bisBE #2(R),*(sp) movB2 *(sp)+,R %n*,n FS* S bisBE R,*(sp) mov *(sp)+,R / =^ -- =xor cr79: %aw,n S xor R,A1' mov A1,R %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)+ / =& cr77: %a,c bicB1 $!C2,A1' movB2 A1,R %a,n S com R bicB1 R,A1' movB1 A1,R %e*,n S F1* com R bicB1 R,#1(R1) movB1 #1(R1),R %n*,e F* S1 com R1 bicB1 R1,#1(R) movB1 #1(R),R %n*,n FS* S com R bicB1 R,*(sp) movB1 *(sp)+,R / =>> cr75: %a,c movB1 A1',R ash $-C2,R movB1 R,A1 %a,n SS movB1 A1',R neg (sp) ash (sp)+,R movB1 R,A1 %n*,n SS F1* movB1 #1(R1),R neg (sp) ash (sp)+,R movB1 R,#1(R1) / =<< cr76: %a,aw movB1 A1',R ash A2,R movB1 R,A1 %a,n SS movB1 A1',R ash (sp)+,R movB1 R,A1 %n*,n SS F1* movB1 #1(R1),R ash (sp)+,R movB1 R,#1(R1) / =+ cr70: %aw,aw I A2,A1' mov A1,R %aw,nw* S* I #2(R),A1' mov A1,R %aw,n S I R,A1' mov A1,R %ew*,nw* S* F1* I #2(R),#1(R1) mov #1(R1),R %a,n %ad,nf SS movB1 A1',R IBF (sp)+,R movB1 R,A1 %af,nf SS movof A1,R IBF (sp)+,R movfo R,A1 %ew*,n S F1* I R,#1(R1) mov #1(R1),R %nw*,n SS F* I (sp)+,#1(R) mov #1(R),R %n*,n %nd*,nf SS F* movB1 #1(R),R1 IBF (sp)+,R1 movB1 R1,#1(R) movBF R1,R %nf*,nf SS F* movof #1(R),R1 IBF (sp)+,R1 movfo R1,#1(R) movf R1,R / 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 .data .even .text unix_v4/usr/c/c1t.s0000644000175000017500000000141001026347440012440 0ustar aapaap/ C operator tables .globl fltused; fltused=. .globl _instab .data _instab: 40.; 1f; 3f; .text; 1:; .data 70.; 1b; 3f 41.; 2f; 4f; .text; 2:; .data 71.; 2b; 4f 30.; 3f; 1b; .text; 3:; .data 31.; 4f; 2b; .text; 4:; .data 32.; 3b; 1b 33.; 4b; 2b 60.; 0f; 1f; .text; 0:; 1:; .data 61.; 1b; 0b 62.; 2f; 5f; .text; 2:; 5:; .data 63.; 3f; 4f; .text; 3:; 4:; .data 64.; 4b; 3b 65.; 5b; 2b 66.; 6f; 9f; .text; 6:; 9:; .data 67.; 7f; 8f; .text; 7:; 8:; .data 68.; 8b; 7b 69.; 9b; 6b 260.; 0b; 1b 261.; 1b; 0b 262.; 2b; 5b 263.; 3b; 4b 264.; 4b; 3b 265.; 5b; 2b 266.; 0b; 1b 267.; 7f; 8f; .text; 7:; 8:; .data 268.; 8b; 7b 269.; 1b; 0b 0 unix_v4/usr/c/c02.o0000644000175000017500000003056401026347440012345 0ustar aapaap w _!_5 !*- 5%_5   @e& 5 7%   !_7t7 pjN& fE eL_e58ՀN 7 @E% 7% N JE%E 5 2 , upurfff e |% ! $   @wVw R7 LHN@   ,( $7 7%N  @j 7ww B 7%  ABpN Efz %d N %ff e z% !7h 7b ff e  ABpN W-@E% @E% @A @@5 ww  7%W-  f % Eb-@ [ 7 ~@ J x$$$$ # v#  @ * && & h e & 75&7& e ## ww  ww  7  y & _  6^ e& l f%_ 7V @p _ >  _ xhlH  _ _ _ p5 %l  e x:Lx 2  &f %  + %;z r n&f % \ NH f % .%_ %-_F_   &f % @ %-    @ _ 7 _  7  x t7p& & % @X P HD_ < 4 _(  _ 7 7 5  @  %_ - _ f & % _  %_ z| _F-h  _FTRNeH@ < _F0, (7$ 5  f& & n e & _  %i 7 _F 7 7 J J < p%:'7 fb  _F > :3 *7&%_F7 & %   _Fww 4 %_ % & %_  %& z v&g he & X%f H7D% 8 @.S(" 7 5 %A %  e,7@e7! @w@e7! f N w|w x r%  f `%  w@w <65 ,7" 5  7  @ N #   7  &    !&xwrwnw jb   T&N0 F7>,3E% ` @:"E%E 3EU3" E e0 " eJ evrp ji ^e& NwJw F!  e` 4 eww D! 7ww  5 B5 5%R M xP b b b b p    N& e^  @e& 5w6  " w w w  %    0 "  w 7   G"  E t0n7 h  5 wP L% E e E 0w w -d  w.globl _%.8s External definition syntax.text _%.8s: Compound statement requiredL%d:jmp rretrn .comm _%.8s,0%o .data _%.8s=. .=.+%d. Too many initializers.even .text _%.8s=L%d .byte %d. 0%o;0%o 0%o;0%o;0%o;0%o Inconsistent external initializationUnexpected EOFjsr r5,mrsave;0f;%o .bss;0:.=.+2 .text jsr r5,rsave; %o Missing '}'Case not in switchSwitch table overflowDefault not in switchUnknown keywordRedefinition\ h Statement syntaxExpression too largeStatement syntaxUndefined structure: %.8sNot an argument: %.8s%.8s undefinedConflict in storage classType clashBad structure name%.8s redeclaredDimension/struct table overflow ))9)(8 9) ))) )))ii  I)) H i y )  i  9  y  X  )) H   )   H  X H X H          9 9 )) ) )))iiiiiiiiii H   H H  h      Y  )(XXIii XXI ) ) Y9YYx)Y _cvtab _opdope _ctab _symbuf _hshused _hshtab _space _cp _cmst P_isn _swtab _swp _contlab _brklab _retlab _deflab _nauto _autolen _peeksym _peekc _eof _line _treebas _debug _defsym _funcsym _xdflg _proflg _csym _cval _fcval _nchstr _nerror _paraml _parame _strflg _osleft _mosflg _initflg _inhdr _dimtab _binbuf _ascbuf _dimp _regvar _extdef"L12L17$rsave _symbol L1L2$L3~L4:L5L8_strdec" _blkhed" L11_decl1 _printf L13L10000_cfunc"L14L15D_decref _length L16d_cinit"L9L10_error _errflus" _stateme"@rretrn L19@L21NL22j_declist" L20L18L25zL26L34L37L39L100012L24PL23L27L30l_cinit1"L28L29L32L33L35L36L38L43L48L52L54L57L41fL42H_bxdec".L40*L44t_tree L58$L47L50L53L56L49L51L20000L45_block _rcexpr L20002L60L59<L66&L726L74^L77pL107|L109L114L117L121L10007L10008L65\L61 L69hL78L118L123L124L62FL10009TL70L71zL73~L75L76L116L81L85L86L100hL111L105lL101L102L103L112L115H_simpleg L82_branch L84_dogoto _doret _pexpr" L87L98L90LL93xL95L96L91_cbranch _label L92_nextcha L94_chconbr L97 L10003L99Z_conexp L106L108_chkw _pswitch" L113&_forstmt" L63L120L122L134L1262 L125 L127d L128d L129 L130 L131 L20004z L132 L133( L1354 L136> L137V L138` L141L140 L139 L143 _putchar L1448 _putw L20006r L146 L142 L1570L159JL148 L149 L150 L151 _rlength L152 L153 L154~ L155B L156h L158~ _blkend" L166`L161 L162 L164 L165 L167 L163 L160 L169 L170 L168 L182pL190L172" L1732 L174 L192 L185 L186 L187 L188 L184 L177b L179b L178b L180b L181n L193z L183z L194 L195 _declare L10010 L10011 L189 L204L210L197JL1984_chkdim"L199>_redec L200L201bL202X_decsyn L196L203pL205L206L207L208L209L213L212_exit L211fltused unix_v4/usr/c/c00.o0000644000175000017500000003331401026347440012337 0ustar aapaapintcharfloatdoublestructautoexternstaticregistergotoreturnifwhileelseswitchcasebreakcontinuedodefaultforsizeofw hW-Z   @& 7: @d  @& @& r  W- !Ԕ  de7 @e&7  | x  b  wPw L5  E5`A rWteDeȋ 6E e%  %  4 4 4  Հe Ҕww  z t !7 t_r jd7 `  Z _rL H>y. 2 $ 7 ( " _r(& v%_r2)> je&& v%_r&  v% P_r .!(%!1"  7%~!)!/!* ze_r!P<_r7T P_r& & v% ._r>?= v%_r& & v% -_r@A= v%_r="= v%_r * v% +_r  _r  7 7l  y  !/_7r!0 %F B 7J\ Y TV 2ӕ.7 ({|   7 7/,'75/& v%60| v% _ww   z7v-r@7 d@w\w XP\b8 4 7< 6h %" X v  | ww 7  ' X %  ww C _ 7 _7  y 7j? `Zy  3 0- @!0!7 te` 7    7 !ww ^@e5@e5  -_ xr |      " j j .   %(    2  e e "e5 IN @e5=  6 7z&t le d& &  e@& &  e  e -P0  _ _X ReO M_ H B7%77_X- 777x_X%& # /#$   eZd  _ R _   tE5   $uu- u-4 5.D7> y %@Ae \  e@e@H_X@5p7 y j hd5 *N _X & & & e:e4 dN   _X  _X  ww CN ff l e5`   *% !! @ ww C5  7t 7b%  _t 5_p  tAE@P@t55D]  "  ",  ",2    _p  E%E%    p 5  5 5   , rE% "" "  7` 4"   %""E%5 E%- 2@ ww  7J y tU_  % _B7< 2  f x , 7   & &   e  V%ItU <%)7 7E7!  fe~p^   % n j tU7J wBw > N w(w $e w   &.6@ F N R X^flr|Arg countCan't find %sCan't create tempSymbol table overflowWarning: assignment understoodNonterminated comment *<tNz\Unknown character .   nNnn n :b.text.data%s L%d:.byte 0%o,0 .even %s Long character constantNonterminated string& $& \.data L%d:0%o;0%o;0%o;0%o .text Expression overflow !dZ Z   Z  expression overflowde Expression syntaxBad function.bss L%d:.=.+%d. .text Bad register %o* Declaration syntax%.8s redeclared88iiI )88X88XXII88)Y999Iy ( yyI9 99( Iyy y 9 8YY((8 89()9 999)9X X 9X ))9  yy )Iiiyi(yyhhiY ((yyyYiyy(yy())Y))YxX )Y)())_cvtab _opdope _ctab _symbuf _hshused _hshtab _space _cp _cmst P_isn#_swtab _swp _contlab _brklab _retlab _deflab _nauto _autolen _peeksym#_peekc _eof _line#_treebas _debug#_defsym _funcsym _xdflg _proflg _csym _cval _fcval _nchstr _nerror _paraml _parame _strflg _osleft _mosflg _initflg _inhdr _dimtab _binbuf _ascbuf _dimp#_regvar _kwtab#L1L2L3 L4L5L6 L7&L8.L96L10@L11FL12NL13RL14XL15^L16fL17lL18rL19|L20L21L22_main"L25ZL27dL29rrsave L24_error _exit _open _fin L26_fcreat L10000L28L30*L312L32^L34:L35H_lookup"L33X_putw L37zL38_extdef _blkend _fflush L10001L10002L23rretrn L49L40L41L42L43L44L20000fL46L488L50TL51\L52f_symbol"lL74L88L10005L10006L87<L91tL89NL93zL83\L111L10012L10013L10014L10015L10016 L10017.L112nL66L67L109NL69L94L95L68L78L98L63L80 L97L20004L81 L108:L76L62L99L110bL54L55L53rL56L57L58L20006L20008_getchar hsw L64_subseq"vL70:L71L72ZL73L10003zL75L77L79L82\L90XL84bL10007lL10008L10009_getnum L96_getstr"_getcc"L100L101L10010L102L103L104L105L1064L107$L114L115L113L117\L118bL119hL122vL123|L10018L10019_printf L120_mapch"XL121L10020L10021L129L125(L126BL128PL140L10023L10024L10025L10026L10027L136L147L150L153L157L158L148L151L154L149L152L146L145L144L10029L10030L139L138L141L161L131L132L133L135xL10031L130L155L156L159_tree"L181L1860L10038DL10039NL222Z L221Z L219 L220 L223Z L224 L226\L10042pL10043zL234 L233 L230 L231 L229 L235 L236L163XL213 L209 L205 L210 L166L182L184L179|L183L194 L188 L189 L193 L192 L211 L195" L200j L199j L212 L167_nextcha L168L169L170L171L172_block L173rL174PL178_pblock L176nL180L10032L10033L20013L185 L187 L191 L20014 L197B L198d L201p L20015 L203| L207 L20016 L10035 L214 L215 L10036 L216b L10040 L217 L225< L10044 _build L162 _errflus _declare" L240 _decl1"l L10045> L237h L238> L239J L10046\ L241b _decsyn"L261L265L269L10047 L10048 L10049 L243 L242t _getype"x L244p L247 L245 L246 L248 L10050 L10051 L2498 L251& L252L L253@ L254H _redec"L255 L10052j _chkdim L256 _length L257 L258 L259 L260 L262 _rlength L20017l L264, L266p L267p L10054D L10053X L268d L10057L10058L274 L277 L273 L290L10059 L270L276 L275L289L283,L280 L281L282L284_conexp L285NL286lL287hL288L292L291L294L293fltused unix_v4/usr/c/cvopt.c0000644000175000017500000000713101026347440013072 0ustar aapaap int nofloat; int peekc; 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 */ auto c,snlflg,nlflg,t,smode,m,ssmode; extern fin, fout; smode = nlflg = snlflg = ssmode = 0; if (argc>1) if ((fin = open(argv[1], 0)) < 0) { putchar('?\n'); return; } if (argc>2) if ((fout = creat(argv[2], 0666)) < 0) { putchar('?\n'); return; } loop: c = getc(); if (c!='\n' && c!='\t') nlflg = 0; if (ssmode!=0 && c!='%') { ssmode = 0; printf(".data\n1:<"); } switch(c) { case '\0': printf(".text; 0\n"); flush(); return; case ':': if (!smode) printf("=.+2; 0"); else putchar(':'); goto loop; case 'A': if ((c=getc())=='1' || c=='2') { putchar(c+'A'-'1'); goto loop; } putchar('O'); peekc = c; goto loop; case 'B': switch (getc()) { case '1': putchar('C'); goto loop; case '2': putchar('D'); goto loop; case 'E': putchar('L'); goto loop; case 'F': putchar('P'); goto loop; } putchar('?'); goto loop; case 'C': putchar(getc()+'E'-'1'); goto loop; case 'F': putchar('G'); goto subtre; case 'R': if ((c=getc()) == '1') putchar('J'); else { putchar('I'); peekc = c; } goto loop; case 'H': putchar('H'); goto subtre; case 'I': putchar('M'); goto loop; case 'V': putchar('V'); snlflg++; goto loop; case 'S': putchar('K'); subtre: snlflg = 1; t = 'A'; l1: switch (c=getc()) { 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; } peekc = c; putchar(t); goto loop; case '#': if(getc()=='1') putchar('#'); else putchar('"'); goto loop; case '%': if (smode) printf(".text;"); loop1: switch (c=getc()) { case 'a': m = 16; t = flag(); goto pf; case ',': putchar(';'); goto loop1; case 'i': m = 12; t = flag(); goto pf; case 'z': m = 4; 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=getc())=='*') m =+ 0100; else peekc = c; printf(".byte %o,%o", m, t); goto loop1; case '\n': printf(";1f\n"); ssmode = 1; nlflg = 1; smode = 1; goto loop; } putchar(c); goto loop1; case '\t': if (nlflg) { nlflg = 0; goto loop; } putchar('\t'); goto loop; case '\n': if (!smode) { putchar('\n'); goto loop; } if (nlflg) { nlflg = 0; printf("\\0>\n.text\n"); smode = 0; goto loop; } if (!snlflg) printf("\\n"); snlflg = 0; printf(">\n<"); nlflg = 1; goto loop; case 'X': case 'Y': case 'T': snlflg++; } putchar(c); goto loop; } getc() { auto t, ifcnt; ifcnt = 0; gc: if (peekc) { t = peekc; peekc = 0; } else t = getchar(); if (t==0) return(0); if (t=='{') { ifcnt++; t = getchar(); } if (t=='}') { t = getc(); if (--ifcnt==0) if (t=='\n') t = getc(); } if (ifcnt && nofloat) goto gc; return(t); } flag() { register c, f; f = 0; l1: switch(c=getc()) { 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 's': f = 6; goto l1; case 'p': f =+ 16; goto l1; } peekc = c; return(f); } unix_v4/usr/c/trc0000644000175000017500000000013301026347440012301 0ustar aapaapcvopt $1.s $1.i rm a.out as $1.i if -r a.out rm $1.i mv a.out $1.o ar r tab.a $1.o rm $1.o unix_v4/usr/c/tab.a0000644000175000017500000003677601026347440012524 0ustar aapaapmcctab.o5b P0nnvv????TT?T?T???????.??.AK?Z?f??s????j"#$%()*+-./0<=>?@ABCDEFGHIKLMNOPtstC A GBtstC #(I) GEcmpL A,B GBcmpL #(I),B GAVcmpD B,I GBKJcmpL #(I),"(J) GBKIcmpC #(I),J GAKJVcmpD "(J),I GAKIcmpP I,J GDKBcmpL *(sp)+,"(I) GDKAcmpC *(sp)+,I GCKBcmp (sp)+,"(I) KCGAVcmpP (sp)+,I bitL B,A GBbitL B,#(I) GAbitD B,I GAKIbit J,I GCKAbit (sp)+,I HA_cctab#restcc47cc60efftab.oxZ `?????????????  T/T/CTTTTT?hyy??TT?T?':?FXT?i??T?T?+?9?K?rs{? !PLF$G$MNKhL|MC A M' $^,A GBMC #(I) GBM' $^,#(I) clrC A GBclrC #(I) movL B,A KBmovL "(I),A KAmovC I,A GBmovL B,#(I) GBKJmovL "(J),#(I) GBKImovL J,#(I) KBGJmovL "(I),#(J) KAGJmovC I,#(J) GDKBmovL "(I),*(sp)+ GDKAmovL I,*(sp)+ bisL B,A KAbisC I,A GBbisL B,#(I) KBGJbisL "(I),#(J) KAGJbisL I,#(J) GBKJbisL "(J),#(I) GBKIbisL J,#(I) GDKBbisL "(I),*(sp)+ GDKAbisL I,*(sp)+ bicC $!F,A KAcom I bicC I,A GBbicC $!F,#(I) KAGJcom I bicC I,#(J) GBKIcom J bicC J,#(I) GDKAcom I bicC I,*(sp)+ M'C A M B,A KBM "(I),A KAM I,A GBM'C #(I) KBGJM "(I),#(J) KBmovC A',J M "(I),J movC J,A KAmovC A',J M I,J movC J,A KAGJM I,#(J) KCGBM (sp)+,#(I) KCGBmovC #(I),J M (sp)+,J movC J,#(I) asrC A GBasrC #(I) aslC A GBaslC #(I) _efftab#ci30ci80Lci70$ci77ci78ci75hci76|regtab.o'L & ?@?C?C ?F?M?Y?Y?d?d??s??s????????????????????????#?#?#?K?K?K??t??????????? ???!??0?????O??]??]??g?p?p?|T?T?????+T?A?\?y????T???????? ? ?# ?0 ??C ?] ?` ?i ?Tt ? ?? ? ? ? ? ?T ?T ? ? ? ? ?? ?? ? ? ?T ?T ? ? ?? ?? ?0 ?TD ?] ??s ? ?T ? ??   ? T T ?. ?. ?D ?g ?g ? ?  ? T?A ?s   ? ? ?- ?[  ? T? ? =?QgTT?T??>?R??T??3Y?w???;K?`Tr???T?????8?k?v????jJjj !"#$"%l&ze$P(`)`*+,-.:/01FDGDHIXJKL0MNOf34hE A jmp A GBjmp #(I) jsr pc,`A GBjsr pc,#(I) GAjsr pc,(I) clr I clrf I movC A,I movf A,I movof A,I MC A' movC A,I M' $^,A' mov A,I GBMC #(I) movC #(I),I GBM' $^,#(I) mov #(I),I movC A',I MC A mov A',I M' $^,A GBmovC #(I),-(sp) MC #(I) movC (sp)+,I GBmov #(I),-(sp) M' $^,#(I) mov (sp)+,I GEbeq 1f clr I br 2f 1: mov $1,I 2: mov $A,I mov r5,I add Z,I GBmovb *#(I),I GBmovf *#(I),I GBmovof *#(I),I GBmov *#(I),I movb *A,I movf *A,I movof *A,I mov *A,I HBmovb ~(I),I HBmovf ~(I),I HBmovof ~(I),I HBmov ~(I),I GAnegP I GAcom I KAmovC I,A KAmovfo I,A GBKAmovf I,#(I) GBmovC B,#(I) movC #(I),I GBKAmovfo I,#(I) GBKImovC J,#(I) movC J,I KAGJmovf I,#(J) KAGJmovfo I,#(J) GDKAmovC I,*(sp)+ GDKAmovfo I,*(sp)+ KAmovfi I,I movC I,A KAGJmovfi I,I movC I,#(J) GDKAmovfi I,I movC I,*(sp)+ GAKIxor J,I GCKAxor I,(sp) mov (sp)+,I GAbisD B,I GAKJbisD "(J),I GAKIbis J,I GCKAbis (sp)+,I GAbic $!F,I GAKIcom J bic J,I GCKAcom (sp) bic (sp)+,I GAGAasr I GAash $-F,I GAKIneg J ash J,I KCneg (sp) GAash (sp)+,I GAGAasl I GAash B,I GAKJash #(J),I GAKIash J,I KCGAash (sp)+,I GAGAM' I GAMP B,I GAKJMP "(J),I GAKIMP J,I KDGAMP *(sp)+,I KCGAMP (sp)+,I GAmulP B,I GAKJmulP "(J),I GAKImulP J,I KCGAmulP (sp)+,I GATsxt I- div B,I- GATsxt I- KJdiv "(J),I- GATsxt I- KIdiv J,I- KCGATsxt I- div (sp)+,I- GAdivf B,I GAKJdivf "(J),I GAKIdivf J,I KCGAdivf (sp)+,I movC A',I mulP B,I movC I,A KCmovof A',I mulf (sp)+,I movfo I,A movC A',I KJmulP "(J),I movC I,A KAmulP A',I movP I,A KCmovC A',I mulP (sp)+,I movC I,A GDKAmulP *(sp),I movC I,*(sp)+ GDKCmovC *2(sp),I mul (sp)+,I movC I,*(sp)+ GDmovof *(sp),I movf I,-(sp) KAmulf (sp)+,I movfo I,*(sp)+ movC A',I sxt I- divP B,I- movC I-,A KCmovC A',I sxt I- div (sp)+,I- movC I-,A KCGJmovC #(J),I sxt I- div (sp)+,I- movC I-,#(J) GDKCmovC *2(sp),I sxt I- div (sp)+,I- movC I-,*(sp)+ movf A',I divf B,I movf I,A movf A',I KIdivf J,I movf I,A KCmovf A',I divf (sp)+,I movf I,A KCmovof A',I divf (sp)+,I movfo I,A GDKCmovf *8(sp),I divf (sp)+,I movf I,*(sp)+ GDKCmovof *8(sp),I divf (sp)+,I movfo I,*(sp)+ movC A',I sxt I- div B,I- movC I,A KCmovC A',I sxt I- div (sp)+,I- movC I,A KCGJmovC #(J),I sxt I- div (sp)+,I- movC I,#(J) GDKCmovC *2(sp),I sxt I- div (sp)+,I mov I,*(sp)+ bisL B,A' movC A,I KAbisC I,A' movC A,I GBbisL B,#(I) movC #(I),I KBGJbisL #(J),"(I) movC "(I),I KAGJbisL I,#(J) movC #(J),I GBKJbisL "(J),#(I) movC #(I),I GBKIbisL J,#(I) movD #(I),I GDKBbisL "(I),*(sp) movD *(sp)+,I GDKAbisL I,*(sp) mov *(sp)+,I KAxor I,A' mov A,I KCmovb A',I xor I,(sp) mov (sp)+,I movb I,A GDmovC *(sp),-(sp) KAxor I,(sp) movC (sp)+,I movC I,*(sp)+ bicC $!F,A' movD A,I KAcom I bicC I,A' movC A,I KAGJcom I bicC I,#(J) movC #(J),I GBKIcom J bicC J,#(I) movC #(I),I GDKAcom I bicC I,*(sp) movC *(sp)+,I movC A',I ash $-F,I movC I,A KCmovC A',I neg (sp) ash (sp)+,I movC I,A KCGJmovC #(J),I neg (sp) ash (sp)+,I movC I,#(J) movC A',I ash B,I movC I,A KCmovC A',I ash (sp)+,I movC I,A KCGJmovC #(J),I ash (sp)+,I movC I,#(J) M B,A' mov A,I KBM "(I),A' mov A,I KAM I,A' mov A,I KBGJM "(I),#(J) mov #(J),I KCmovC A',I MP (sp)+,I movC I,A KCmovof A,I MP (sp)+,I movfo I,A KAGJM I,#(J) mov #(J),I KCGBM (sp)+,#(I) mov #(I),I KCGBmovC #(I),J MP (sp)+,J movC J,#(I) movP J,I KCGBmovof #(I),J MP (sp)+,J movfo J,#(I) movf J,I movif A,I GBmovif #(I),I GAmovif I,I GAmovfi I,I _regtab#cr106Jcr30jcr32cr34cr35cr29cr36"cr37lcr38zcr100$cr80cr40`cr42cr43cr45cr46:cr47cr48cr49cr70Dcr72cr73Xcr74cr75cr760cr77cr78cr79cr102cr51cr52cr104sptab.o l???*?8?8?I?^?^?w?????? ????7?U?h????????????$?/?;??L?Z??j????j <!<#b$j()/0clrC -(sp) movC A,-(sp) M A mov A,-(sp) M' $^,A mov A,-(sp) GBM #(I) mov #(I),-(sp) GBmov #(I),-(sp) M' $^,#(I) mov A,-(sp) M A mov A,-(sp) M' $^,A GBmov #(I),-(sp) M #(I) GBmov #(I),-(sp) M' $^,#(I) mov $A,-(sp) GBmovb *#(I),I mov I,-(sp) GBmovf *#(I),I movf I,-(sp) GBmovof *#(I),I movf I,-(sp) GBmov *#(I),-(sp) movb *A,I mov I,-(sp) movf *A,I movf I,-(sp) movof *A,I movf I,-(sp) mov *A,-(sp) HBmovb ~(I),I mov I,-(sp) HBmovf ~(I),I movf I,-(sp) HBmovof ~(I),I movf I,-(sp) HBmov ~(I),-(sp) GCM' (sp) GCM B,(sp) GCKBM "(I),(sp) GCKAM I,(sp) GCbic $!F,(sp) GCKAcom I bic I,(sp) GCbisD B,(sp) GCKBbisD "(I),(sp) GCKAbis I,(sp) _sptab#cs106cs30cs32<cs35bcs36jcs40cs47cs48unix_v4/usr/c/c03.c0000644000175000017500000000446101026347440012327 0ustar aapaap# /* C compiler Copyright 1972 Bell Telephone Laboratories, Inc. */ #include "c0h.c" decref(at) { register t; t = at; if ((t & ~07) == 0) { error("Illegal indirection"); return(t); } return((t>>2) & ~07 | t&07); } incref(t) { return((t<<2)&~034 | (t&07) | PTR); } cbranch(tree, lbl, cond) struct tnode *tree; { rcexpr(block(1,CBRANCH,tree,lbl,cond),cctab); } rcexpr(tree, table) int table; struct tnode *tree; { register c, *sp; if (tree == 0) return; putchar('#'); c = space-treebase; sp = treebase; putw(c, binbuf); putw(tree, binbuf); putw(table, binbuf); putw(line, binbuf); while(c--) putw(*sp++, binbuf); } branch(lab) { printf("jbr\tL%d\n", lab); } label(l) { printf("L%d:", l); } plength(ap) struct tname *ap; { register t, l; register struct tname *p; p = ap; if (((t=p->ntype)&~07) == 0) /* not a reference */ return(1); p->ntype = decref(t); l = length(p); p->ntype = t; return(l); } length(acs) struct tnode *acs; { register t, n; register struct tnode *cs; cs = acs; t = cs->type; n = 1; while ((t&030) == ARRAY) { t = decref(t); n = dimtab[cs->ssp&0377]; } if ((t&~07)==FUNC) return(0); if (t>=PTR) return(2*n); switch(t&07) { case INT: return(2*n); case CHAR: return(n); case FLOAT: return(4*n); case DOUBLE: return(8*n); case STRUCT: return(n * dimtab[cs->lenp&0377]); case RSTRUCT: error("Bad structure"); return(0); } error("Compiler error (length)"); } rlength(cs) struct tnode *cs; { register int l; if (((l=length(cs))&01) != 0) l++; return(l); } simplegoto() { register struct hshtab *csp; if ((peeksym=symbol())==NAME && nextchar()==';') { csp = csym; if (csp->hclass==0 && csp->htype==0) { csp->htype = ARRAY; if (csp->hoffset==0) csp->hoffset = isn++; } if ((csp->hclass==0||csp->hclass==STATIC) && csp->htype==ARRAY) { peeksym = -1; return(csp->hoffset); } } return(0); } nextchar() { while (ctab[peekc]==SPACE) peekc = getchar(); return(peekc); } chconbrk(l) { if (l==0) error("Break/continue error"); } dogoto() { register struct tnode *np; *cp++ = tree(); build(STAR); chkw(np = *--cp); rcexpr(block(1,JUMP,0,0,np), regtab); } doret() { if (nextchar() != ';') rcexpr(block(1, RFORCE, 0, 0, tree()), regtab); branch(retlab); } putchar(c) { putc(c, ascbuf); } unix_v4/usr/c/c0t.s0000644000175000017500000000325001026347440012443 0ustar aapaap/ assure fake printf (no floating) .globl fltused; fltused = 0 / convert stream to number; result is type. / value in cval or fcval fpp = 1 .globl _getnum .globl _peekc .globl _getchar .globl _cval .globl _fcval .globl _error _getnum: .if fpp movif $10.,fr3 clrf fr0 .endif clr nfract clr totdig clr decpt clr _cval mov 2(sp),base mov r2,-(sp) 1: jsr r5,getdig br 2f .if fpp mulf fr3,fr0 movif r0,fr1 addf fr1,fr0 .endif inc nfract br 1b 2: tst decpt bne 1f clr nfract cmp r0,$'. bne 1f mov pc,decpt br 1b 1: tst totdig beq 1f cmp r0,$'e bne 1f clr -(sp) clr _cval mov pc,decpt clr _cval mov $10.,base jsr pc,_getchar cmp r0,$'+ beq 2f cmp r0,$'- bne 3f inc (sp) br 2f 3: mov r0,_peekc 2: jsr r5,getdig br 2f br 2b 2: tst (sp)+ beq 2f neg _cval 2: sub _cval,nfract 1: mov r0,_peekc tst totdig bne 1f mov $39.,r0 / "." operator 9: mov (sp)+,r2 rts pc 1: tst decpt bne 1f mov $21.,r0 / fixed constant br 9b 1: .if fpp movif $1,fr2 mov nfract,r2 mov r2,-(sp) beq 2f bgt 1f neg r2 1: mulf fr3,fr2 sob r2,1b 2: tst (sp)+ ble 1f divf fr2,fr0 br 2f 1: mulf fr2,fr0 2: mov $_fcval,r0 movf fr0,(r0) tst (r0)+ tst (r0)+ bne 1f tst (r0)+ bne 1f tst (r0)+ bne 1f mov $24.,r0 mov _fcval,_cval br 9b 1: mov $23.,r0 br 9b .endif .if 1-fpp mov $fperr,-(sp) jsr pc,_error tst (sp)+ mov $21.,r0 br 9b fperr: ; .even .endif getdig: mov _peekc,r0 beq 1f clr _peekc br 2f 1: jsr pc,_getchar 2: sub $'0,r0 cmp r0,$9. bhi 1f inc totdig mov _cval,r1 mul base,r1 add r0,r1 mov r1,_cval tst (r5)+ rts r5 1: add $'0,r0 rts r5 .bss base: .=.+2 nfract: .=.+2 decpt: .=.+2 totdig: .=.+2 unix_v4/usr/c/c12.c0000644000175000017500000000411601026347440012324 0ustar aapaapint opdope[] { 000000, /* EOF */ 000000, /* ; */ 000000, /* { */ 000000, /* } */ 036000, /* [ */ 002000, /* ] */ 036000, /* ( */ 002000, /* ) */ 014201, /* : */ 007001, /* , */ 000000, /* 10 */ 000000, /* 11 */ 000000, /* 12 */ 000000, /* 13 */ 000000, /* 14 */ 000000, /* 15 */ 000000, /* 16 */ 000000, /* 17 */ 000000, /* 18 */ 000000, /* 19 */ 000400, /* name */ 000400, /* short constant */ 000400, /* string */ 000400, /* float */ 000400, /* double */ 000000, /* 25 */ 000000, /* 26 */ 000000, /* 27 */ 000000, /* 28 */ 000000, /* 29 */ 034202, /* ++pre */ 034202, /* --pre */ 034202, /* ++post */ 034202, /* --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, /* -> */ 000000, /* int -> double */ 000000, /* double -> int */ 000001, /* && */ 000001, /* || */ 000000, /* 55 */ 000000, /* 56 */ 000000, /* 57 */ 000000, /* 58 */ 000000, /* 59 */ 022005, /* == */ 022005, /* != */ 024005, /* <= */ 024005, /* < */ 024005, /* >= */ 024005, /* > */ 024005, /*

  • ; caseli ; casell ; casels ; casena ; casene ; casenf ; casepa ; casebl ; casepl ; casesk ; casesp ; casess ; caseta ; caseti ; casetr
  • 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, /* ? */ 000000, /* 91 */ 000000, /* 92 */ 000000, /* 93 */ 000000, /* 94 */ 000000, /* 95 */ 000000, /* 96 */ 000000, /* 97 */ 000000, /* 98 */ 000000, /* 99 */ 036001, /* call */ 036001, /* mcall */ 000000, /* goto */ 000000, /* jump cond */ 000000, /* branch cond */ 000400, /* set nregs */ 000000, /* 106 */ 000000, /* 107 */ 000000, /* 108 */ 000000, /* 109 */ 000000 /* force r0 */ }; unix_v4/usr/c/cvopt0000755000175000017500000000460601026347440012660 0ustar aapaap" & 6 % w  5555W- @& ` 7 ? _W-@& B 7"? _ n5W- W- 5 W-%5  @_  _  :  5%1W-2Ne O w C D L P   ~&102:EDFh?  e G , f5%1J I wF_H M _V  _K A 5 eeee *12CS>wN _ %1# " _   t5b 52;  5% 5 55  5 5? 5%*e@wNf$ %0 _ .VZ6 H N  5 _ _  _ 5 ^ 5 _ j 5 n _  r N _ww 5 7  5  &W-{ 5W-} 5 W-  5  @wNw < veb  x7ww wDe   % w7 7 ׯ-  ,#7  .# hB Jdofecsl ӕ- 6 r f e0 $>C~ fWtE Ee0     `w   Ο       w7   0  ~Wp `e0[eӕ?f@ ^VwBw D#@w 8#-<w J#@7 wfww 0#7 wf !!  7  7 7 fwxwt wHwLfw`w\ w*w. r Cd$Y7nF @&HFB@$YfA7   fA & 9 &fA @e&7w@ .data 1:<.text; 0 =.+2; 0.text;.byte %o,%o;1f , ,nz1acei\0> .text \n> <HTXd p%AIY~ : BFRVP#rCSw w&w $w unix_v4/usr/c/c00.c0000644000175000017500000002654001026347440012326 0ustar aapaap# /* C compiler Copyright 1972 Bell Telephone Laboratories, Inc. */ #include "c0h.c" int isn 1; int peeksym -1; int line 1; int debug 0; int dimp 0; struct kwtab { char *kwname; int kwval; } kwtab[] { "int", INT, "char", CHAR, "float", FLOAT, "double", DOUBLE, "struct", STRUCT, "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, 0, 0, }; main(argc, argv) char *argv[]; { extern fin; int treespace[ossiz]; register char *sp, *np; register struct kwtab *ip; if(argc<4) { error("Arg count"); exit(1); } if((fin=open(argv[1],0))<0) { error("Can't find %s", argv[1]); exit(1); } if (fcreat(argv[2], ascbuf)<0 || fcreat(argv[3], binbuf)<0) { error("Can't create temp"); exit(1); } if (argc>4) proflg++; xdflg++; for (ip=kwtab; (np = ip->kwname); ip++) { for (sp = symbuf; sphclass = KEYWC; np->htype = ip->kwval; } xdflg = 0; treebase = treespace+10; putw(treebase, binbuf); while(!eof) { extdef(); blkend(); } fflush(ascbuf); fflush(binbuf); exit(nerror!=0); } struct hshtab *lookup() { int ihash; register struct hshtab *rp; register char *sp, *np; ihash = 0; for (sp=symbuf; spname)) { for (sp=symbuf; sp= &hshtab[hshsiz]) rp = hshtab; } if(++hshused >= hshsiz) { error("Symbol table overflow"); exit(1); } rp->hclass = 0; rp->htype = 0; rp->hoffset = 0; rp->dimp = 0; sp = symbuf; if (xdflg) *sp =| 0200; for (np=rp->name; sp=0) { c = peeksym; peeksym = -1; if (c==NAME) mosflg = 0; return(c); } if (peekc) { c = peekc; peekc = 0; } else if (eof) return(EOF); else c = getchar(); loop: switch(ctab[c]) { case INSERT: /* ignore newlines */ inhdr = 1; c = getchar(); goto loop; case NEWLN: if (!inhdr) line++; inhdr = 0; case SPACE: c = getchar(); goto loop; case EOF: eof++; return(0); case PLUS: return(subseq(c,PLUS,INCBEF)); case MINUS: return(subseq(c,subseq('>',MINUS,ARROW),DECBEF)); case ASSIGN: if (subseq(' ',0,1)) return(ASSIGN); c = symbol(); if (c>=PLUS && c<=EXOR) { if (peekc==0) peekc = getchar(); if (ctab[peekc] != SPACE && (c==MINUS || c==AND || c==TIMES)) { error("Warning: assignment understood"); nerror--; } return(c+30); } if (c==ASSIGN) return(EQUAL); peeksym = 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); return(subseq('=',GREAT,GREATEQ)); case EXCLA: return(subseq('=',EXCLA,NEQUAL)); case DIVIDE: if (subseq('*',1,0)) return(DIVIDE); com: c = getchar(); com1: switch(c) { case '\0': eof++; error("Nonterminated comment"); return(0); case '\n': if (!inhdr) line++; inhdr = 0; goto com; case 001: /* SOH, insert marker */ inhdr++; default: goto com; case '*': c = getchar(); if (c!='/') goto com1; } c = getchar(); goto loop; case PERIOD: case DIGIT: peekc = c; if ((c=getnum(c=='0'?8:10)) == FCON) cval = isn++; return(c); case DQUOTE: return(getstr()); case SQUOTE: return(getcc()); case LETTER: sp = symbuf; if (mosflg) { *sp++ = '.'; mosflg = 0; } while(ctab[c]==LETTER || ctab[c]==DIGIT) { if (sphclass==KEYWC) { if (csym->htype==SIZEOF) return(SIZEOF); cval = csym->htype; return(KEYW); } return(NAME); case AND: return(subseq('&', AND, LOGAND)); case OR: return(subseq('|', OR, LOGOR)); case UNKN: error("Unknown character"); c = getchar(); goto loop; } return(ctab[c]); } subseq(c,a,b) { if (!peekc) peekc = getchar(); if (peekc != c) return(a); peekc = 0; return(b); } getstr() { register int c; register char *t, *d; nchstr = 1; t = ".text"; d = ".data"; printf("%s\nL%d:.byte ", (strflg?t:d), cval=isn++); while((c=mapch('"')) >= 0) { printf("0%o,", c); nchstr++; } printf("0\n.even\n%s\n", (strflg?d:t)); return(STRING); } getcc() { register int c, cc; register char *ccp; cval = 0; ccp = &cval; cc = 0; while((c=mapch('\'')) >= 0) if(cc++ < ncpw) *ccp++ = c; if(cc>ncpw) error("Long character constant"); return(CON); } mapch(ac) { register int a, c, n; static mpeek; c = ac; if (mpeek) { 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 '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': n = 0; while (n<0100 && '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); } tree() { #define SEOF 200 #define SSIZE 20 int *op, opst[SSIZE], *pp, prst[SSIZE]; register int andflg, o; register struct hshtab *cs; int p, ps, os, *np; osleft = ossiz; space = treebase; op = opst; pp = prst; cp = cmst; *op = SEOF; *pp = 06; andflg = 0; advanc: switch (o=symbol()) { case NAME: cs = csym; if (cs->hclass==0 && cs->htype==0) if(nextchar()=='(') { /* set function */ cs->hclass = EXTERN; cs->htype = FUNC; } else if (initflg) cs->hclass = EXTERN; else { /* set label */ cs->htype = ARRAY; if (cs->hoffset==0) cs->hoffset = isn++; } *cp++ = block(2,NAME,cs->htype,cs->hdimp, cs->hclass,0); if (cs->hclass==EXTERN) { np = cs->name; for (o=0; o<4; o++) { pblock(*np); if (((*np++)&~0177) == 0) break; } } else pblock(cs->hoffset); goto tand; case FCON: if (!initflg) printf(".data\nL%d:0%o;0%o;0%o;0%o\n.text\n",cval,fcval); case CON: case SFCON: *cp++ = block(1,o,(o==CON?INT:DOUBLE),0,cval); goto tand; /* fake a static char array */ case STRING: *cp++ = block(3, NAME, ARRAY+CHAR,0,STATIC,0,cval); tand: if(cp>=cmst+cmsiz) { error("Expression overflow"); exit(1); } if (andflg) goto syntax; andflg = 1; goto advanc; 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) { if ((peeksym=symbol())==FCON) { fcval = - fcval; goto advanc; } if (peeksym==SFCON) { fcval = - fcval; cval =^ 0100000; goto advanc; } 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; } /* binaries */ if (!andflg) goto syntax; andflg = 0; oponst: p = (opdope[o]>>9) & 077; if ((o==COMMA || o==COLON) && initflg) p = 05; 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(op>=opst+SSIZE) { 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 CALL: if (o!=RPARN) goto syntax; build(os); goto advanc; case MCALL: *cp++ = block(0,0,0,0); /* 0 arg call */ os = CALL; goto fbuild; case LPARN: if (o!=RPARN) goto syntax; goto advanc; case LBRACK: if (o!=RBRACK) goto syntax; build(LBRACK); goto advanc; } fbuild: build(os); goto opon1; syntax: error("Expression syntax"); errflush(o); return(0); } declare(askw, tkw, offset, elsize) { register int o; register int skw; skw = askw; do { offset =+ decl1(skw, tkw, offset, elsize); if (xdflg && skw!=MOS) return; } while ((o=symbol()) == COMMA); if (o==SEMI || o==RPARN && skw==ARG1) return(offset); decsyn(o); } decl1(askw, tkw, offset, elsize) { int t1, chkoff; register int type, skw; register struct hshtab *dsym; skw = askw; chkoff = 0; mosflg = skw==MOS; if ((peeksym=symbol())==SEMI || peeksym==RPARN) return(0); if ((t1=getype()) < 0) goto syntax; type = 0; do type = type<<2 | (t1 & 030); while (((t1=>>2) & 030)!=0); type =| tkw; dsym = defsym; if (!(dsym->hclass==0 || (skw==ARG && 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; } dsym->htype = type; if (skw) dsym->hclass = skw; if (skw==ARG1) { if (paraml==0) paraml = dsym; else parame->hoffset = dsym; parame = dsym; } if (elsize && ((type&07)==RSTRUCT || (type&07)==STRUCT)) { dsym->lenp = dimp; chkdim(); dimtab[dimp++] = elsize; } elsize = 0; if (skw==MOS) { elsize = length(dsym); if ((offset&1)!=0 && elsize!=1) { offset++; elsize++; } if (chkoff && dsym->hoffset != offset) redec(); dsym->hoffset = offset; } if ((dsym->htype&030)==FUNC) { if (dsym->hclass!=EXTERN && dsym->hclass!=AUTO) error("Bad function"); dsym->hclass = EXTERN; } if (dsym->hclass==AUTO) { autolen =+ rlength(dsym); dsym->hoffset = -autolen; } else if (dsym->hclass==STATIC) { dsym->hoffset = isn; printf(".bss\nL%d:.=.+%d.\n.text\n", isn++, rlength(dsym)); } else if (dsym->hclass==REG) { if ((type&07)>CHAR && (type&030)==0 || (type&030)>PTR || regvar<3) error("Bad register %o", type); dsym->hoffset = --regvar; } syntax: return(elsize); } getype() { register int o, type; register struct hshtab *ds; switch(o=symbol()) { case TIMES: return(getype()<<2 | PTR); case LPARN: type = getype(); if ((o=symbol()) != RPARN) goto syntax; goto getf; case NAME: defsym = ds = csym; type = 0; ds->ssp = dimp; getf: switch(o=symbol()) { case LPARN: if (xdflg) { xdflg = 0; ds = defsym; declare(ARG1, 0, 0, 0); defsym = ds; xdflg++; } else if ((o=symbol()) != RPARN) goto syntax; type = type<<2 | FUNC; goto getf; case LBRACK: if ((o=symbol()) != RBRACK) { peeksym = o; cval = conexp(); for (o=ds->ssp&0377; oname); } unix_v4/usr/c/c1h.c0000644000175000017500000000527301026347440012417 0ustar aapaap/* * C pass 2 header */ struct tnode { int op; int type; int degree; struct tnode *tr1, *tr2; }; struct bnode { int bop; struct tnode *btree; int lbl; int cond; }; struct tname { int nop; int ntype; int elsize; int class; int offset; int nloc; }; struct tconst { int cop; int ctype; int cdeg; int value; }; 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; char binbuf[518]; char ascbuf[518]; char outbuf[518]; int nerror; struct table cctab[]; struct table efftab[]; struct table regtab[]; struct table sptab[]; struct table lsptab[]; struct instab instab[]; int opdope[]; int nstack; int nfloat; struct tconst czero, cone, fczero; #define swsiz 200 #define ossiz 500 /* operators */ #define EOF 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 KEYW 19 #define NAME 20 #define CON 21 #define STRING 22 #define FCON 23 #define SFCON 24 #define INCBEF 30 #define DECBEF 31 #define INCAFT 32 #define DECAFT 33 #define EXCLA 34 #define AMPERA 29 #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 EQUAL 60 #define NEQUAL 61 #define LESSEQ 62 #define LESS 63 #define GREATEQ 64 #define GREAT 65 #define LESSP 66 #define LESSEQP 67 #define GREATP 68 #define GREATQP 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 CALL 100 #define MCALL 101 #define JUMP 102 #define CBRANCH 103 #define INIT 104 #define SETREG 105 #define LOAD 106 #define RFORCE 110 #define BRANCH 111 #define LABEL 112 /* types */ #define INT 0 #define CHAR 1 #define FLOAT 2 #define DOUBLE 3 #define STRUCT 4 #define RSTRUCT 5 #define PTR 010 #define FUNC 020 #define ARRAY 030 /* storage classes */ #define KEYWC 1 #define MOS 4 #define AUTO 5 #define EXTERN 6 #define STATIC 7 #define REG 8 #define STRTAG 9 #define ARG 10 /* 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 unix_v4/usr/c/cctab.s0000644000175000017500000000230101026347440013025 0ustar aapaap/ c code tables-- set condition codes .globl _cctab .data _cctab=. 106.; rest 28.; rest 21.; rest 22.; rest 30.; rest 31.; rest 34.; rest 35.; rest 36.; rest 37.; rest 40.; rest 41.; rest 42.; rest 43.; rest 45.; rest 46.; rest 47.; cc47 48.; rest 60.; cc60 61.; cc60 62.; cc60 63.; cc60 64.; cc60 65.; cc60 66.; cc60 67.; cc60 68.; cc60 69.; cc60 70.; rest 71.; rest 72.; rest 73.; rest 75.; rest 76.; rest 77.; rest 78.; rest 79.; rest 80.; rest 0 .text / relationals cc60: %a,z %ad,zf tstB1 A1 %n*,z %nd*,zf F* tstB1 #1(R) %n,z %nf,zf FC %aw,aw %ab,ab cmpBE A1,A2 %nw*,aw %nb*,ab F* cmpBE #1(R),A2 %n,aw %nf,ad F V cmpB2 A2,R %nw*,ew* %nb*,eb* F* S1* cmpBE #1(R),#2(R1) %nw*,e %nd*,ef F* S1 cmpB1 #1(R),R1 %n,ew* %nf,ed* F S1* V cmpB2 #2(R1),R %n,e %nf,ef F S1 cmpBF R,R1 %nw*,nw* %nb*,nb* FS* S* cmpBE *(sp)+,#2(R) %nw*,n %nd*,nf FS* S cmpB1 *(sp)+,R %n,nw* FS S* cmp (sp)+,#2(R) %n,n %nf,nf SS F V cmpBF (sp)+,R / & as in "if ((a&b) ==0)" cc47: %a,a bitBE A2,A1 %n*,a F* bitBE A2,#1(R) %n,a F bitB2 A2,R %n,e F S1 bit R1,R %n,n FS S bit (sp)+,R / set codes right rest: %n,n %nf,nf H .data .even .text unix_v4/usr/c/c11.c0000644000175000017500000002164401026347440012330 0ustar aapaap# /* * C compiler */ #include "c1h.c" max(a, b) { if (a>b) return(a); return(b); } degree(at) struct tnode *at; { register struct tnode *t; if ((t=at)==0 || t->op==0) return(0); if (t->op == CON) return(-3); if (t->op == AMPER) return(-2); if (t->op == AMPERA) return(-1); if ((opdope[t->op] & LEAF) != 0) { if (t->type==CHAR) return(1); return(0); } return(t->degree); } pname(ap, flag) struct tnode *ap; { register i; register struct tnode *p; p = ap; loop: switch(p->op) { case SFCON: case CON: printf("$0%o", p->value); return; case FCON: printf("L%d", p->value); return; casename: case NAME: if (i = p->offset) printf("%d.+", i); switch(p->class) { case AUTO: printf("%d.(r5)", p->nloc); return; case EXTERN: printf("_%.8s", &(p->nloc)); return; case STRUCT: error("Illegal structure reference"); printf("$0"); return; case REG: if (i) error("Bad reg. reference"); printf("r%d", p->nloc); return; } /* presumably, it's static */ printf("L%d", p->nloc); return; case AMPER: putchar('$'); p = p->tr1; goto loop; case STAR: p = p->tr1; /* reg[const] or statchar[reg] */ if (p->op==PLUS) { if (p->tr2->op==AMPER) { pname(p->tr2->tr1, 0); printf("(r%d)", p->tr1->nloc); return; } printf("%d.(r%d)", p->tr2->value, p->tr1->nloc); return; } else if (p->op==INCAFT) { printf("(r%d)%c", p->tr1->nloc, flag?0:'+'); return; } else if (p->op==DECBEF) { printf("%c(r%d)", flag?0:'-', p->tr1->nloc); return; } else if (p->op==NAME && p->class==REG) { printf("(r%d)", p->nloc); return; } putchar('*'); goto loop; } error("pname called illegally"); } 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: case AMPER: return(12); case CON: case SFCON: return(p->value==0? 4:(p->value==1?5:8)); case FCON: return(12); case STAR: p1 = p->tr1; if (p1->op==NAME || p1->op==CON) return(12); if (p1->op==STAR) p1 = p1->tr1; if (p1->op==PLUS && p1->tr1->op==NAME && p1->tr1->class==REG && p1->tr2->op==CON) return(12); if (p1->op==PLUS && p1->tr2->op==AMPER && p1->tr1->op==NAME && p1->tr2->type==(PTR+CHAR) && p1->tr1->class==REG) return(12); if ((p1->op==INCAFT || p1->op==DECBEF) && p1->tr1->type!=(STRUCT+PTR)) p1 = p1->tr1; if (p1->op==NAME && p1->class==REG) return(12); } return(p->degree<=nrleft? 20: 24); } notcompat(ap, ast) struct tnode *ap; { register at, st; register struct tnode *p; p = ap; at = p->type; st = ast; if ((at&07)==STRUCT) at =& 077770; /* map to int */ if (st==0) /* word, byte */ return(at>1 & at<=07); if (st==1) /* word */ return(at>0 & at<=07); st =- 2; if ((at&077740) != 0) at = 020; if ((at&077770) != 0) at = at&07 | 020; if (st==2 && at==3) at = 2; if (p->op==NAME && p->class==REG && at==INT && st==CHAR) return(0); return(st != at); } prins(op, c) { register struct instab *insp; register char *ip; for (insp=instab; 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==PLUS) { op = p->tr2->op; if (op==CON || op==AMPER || op==AMPERA) 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)) switch(t->op) { case DIVIDE: case MOD: case ASDIV: case ASMOD: reg++; case TIMES: case ASTIMES: return(reg|1); } return(reg); } arlength(t) { if (t>=PTR) return(2); switch(t) { case INT: case CHAR: return(2); case FLOAT: case DOUBLE: return(8); } return(1024); } pswitch(afp, alp, deflab) struct swtab *afp, *alp; { int tlab, ncase, i, j, tabs, worst, best, range; register struct swtab *swp, *fp, *lp; int poctab[swsiz]; fp = afp; lp = alp; if (fp==lp) { printf("jbr L%d\n", deflab); return; } tlab = 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 $0%o,r0\n", fp->swval); printf("cmp r0,$0%o\n", range); printf("jhi L%d\n", deflab); printf("asl r0\n"); printf("jmp *.+4(r0)\n"); for (i=fp->swval; i<=lp->swval; i++) { if (i==fp->swval) { printf("L%d\n", fp->swlab); fp++; } else printf("L%d\n", deflab); } goto esw; } /* simple switch */ if (ncase<8) { i = isn++; j = isn++; printf("mov $L%d,r1\n", i); printf("mov r0,L%d\n", j); printf("L%d:cmp r0,(r1)+\n", isn); printf("jne L%d\n", isn++); printf("jmp *L%d-L%d(r1)\n", j, i); printf(".data\nL%d:", i); for (; fp<=lp; fp++) printf("%o\n", fp->swval); printf("L%d:..\n", j); for (fp = afp; fp<=lp; fp++) printf("L%d\n", fp->swlab); printf("L%d\n.text\n", deflab); goto esw; } /* hash switch */ best = 077777; for (i=ncase/4; i<=ncase/2; i++) { for (j=0; jswval, i)]++; worst = 0; for (j=0; jworst) worst = poctab[j]; if (i*worst < best) { tabs = i; best = i*worst; } } printf("jsr r2,hsw; %o; L%d\n", tabs, isn); printf("jmp *L%d-L%d(r1)\n", isn+tabs+1, isn+1); printf(".data\nL%d:", isn++); for (i=0; i<=tabs; i++) printf("L%d\n", isn+i); for (i=0; iswval, tabs) == i) printf("%o\n", ldiv(0, swp->swval, tabs)); } printf("L%d:", isn++); for (i=0; iswval, tabs) == i) printf("L%d\n", swp->swlab); } printf(".text\n"); esw: printf("/esw\n"); } 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>0 && (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; d = tree->op; tree->op = d==TIMES? LSHIFT: (d==DIVIDE? RSHIFT: (d==ASTIMES? ASLSH: ASRSH)); } } cbranch(atree, albl, cond, areg) struct tnode *atree; { int l1, opfix; register lbl, reg; register struct tnode *tree; struct tnode lbuf; lbl = albl; reg = areg; if ((tree=atree)==0) return; switch(tree->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 COMMA: rcexpr(tree->tr1, efftab, reg); tree = tree->tr2; break; } opfix = 0; if ((opdope[tree->op]&RELAT)==0) { lbuf.op = NEQUAL; lbuf.type = tree->type; lbuf.degree = tree->degree; lbuf.tr1 = tree; lbuf.tr2 = &czero; if (isfloat(tree)) lbuf.tr2 = &fczero; tree = &lbuf; } if (tree->tr2->op==CON && tree->tr2->value==0) opfix = 200; rcexpr(tree, cctab, reg); if (isfloat(tree)) printf("cfcc\n"); branch(lbl, tree->op+opfix, !cond); } branch(lbl, aop, c) { register op; if(op=aop) prins(op,c); else printf("jbr"); printf("\tL%d\n", lbl); } 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 $0%o,sp\n", a); } error(s, p1, p2, p3, p4, p5, p6) { register f; nerror++; fflush(outbuf); f = outbuf[0]; outbuf[0] = 1; printf("%d: ", line); printf(s, p1, p2, p3, p4, p5, p6); putchar('\n'); fflush(outbuf); outbuf[0] = f; } unix_v4/usr/c/c01.c0000644000175000017500000001472701026347440012333 0ustar aapaap# /* C compiler Copyright 1972 Bell Telephone Laboratories, Inc. */ #include "c0h.c" build(op) { register int t1; int t2, t3, t; struct tnode *p3, *disarray(); register struct tnode *p1, *p2; int d, dope, leftc, cvn, pcvn; if (op==LBRACK) { build(PLUS); op = STAR; } dope = opdope[op]; if ((dope&BINARY)!=0) { p2 = chkfun(disarray(*--cp)); t2 = p2->type; } p1 = *--cp; if (op==SIZEOF) { t1 = length(p1); p1->op = CON; p1->type = INT; p1->dimp = 0; p1->value = t1; *cp++ = p1; return; } if (op!=AMPER) { p1 = disarray(p1); if (op!=CALL) p1 = chkfun(p1); } t1 = p1->type; pcvn = 0; switch (op) { /* end of expression */ case 0: *cp++ = p1; return; /* no-conversion operators */ case COMMA: case LOGAND: case LOGOR: *cp++ = block(2, op, 0, 0, p1, p2); return; case QUEST: if (p2->op!=COLON) error("Illegal conditional"); t = t2; goto nocv; case CALL: if ((t1&030) != FUNC) error("Call of non-function"); *cp++ = block(2,CALL,decref(t1),p1->dimp,p1,p2); return; case STAR: if (p1->op==AMPER || p1->op==AMPERA) { *cp++ = p1->tr1; return; } if ((t1&030) == FUNC) error("Illegal indirection"); *cp++ = block(1,STAR,decref(t1),p1->dimp,p1); return; case AMPER: if (p1->op==STAR) { p1->tr1->dimp = p1->dimp; p1->tr1->type = incref(t1); *cp++ = p1->tr1; return; } if (p1->op==NAME) { if (p1->class==AUTO) op = AMPERA; *cp++ = block(1,op,incref(t1),p1->dimp,p1); return; } error("Illegal lvalue"); break; case INCBEF: case DECBEF: case INCAFT: case DECAFT: chklval(p1); *cp++ = block(2,op,t1,p1->dimp,p1,plength(p1)); return; case ARROW: *cp++ = p1; chkw(p1); p1->type = PTR+STRUCT; build(STAR); p1 = *--cp; case DOT: if (p2->op!=NAME || p2->class!=MOS) error("Illegal structure ref"); *cp++ = p1; t = t2; if ((t&030) == ARRAY) { t = decref(t); p2->ssp++; } setype(p1, t, p2->dimp); build(AMPER); *cp++ = block(1,CON,7,0,p2->nloc); build(PLUS); if ((t2&030) != ARRAY) build(STAR); return; } if ((dope&LVALUE)!=0) chklval(p1); if ((dope&LWORD)!=0) chkw(p1); if ((dope&RWORD)!=0) chkw(p2); if ((dope&BINARY)==0) { if (!fold(op, p1, 0)) *cp++ = block(1,op,t1,p1->dimp,p1); return; } if (t2==7) { t = t1; p2->type = 0; /* no int cv for struct */ t2 = 0; goto nocv; } cvn = cvtab[11*lintyp(t1)+lintyp(t2)]; leftc = cvn&0100; t = leftc? t2:t1; if (op==ASSIGN && t1!=STRUCT && t2!=STRUCT) { t = t1; if (leftc || cvn!=3) /* int -> float */ goto nocv; } if (cvn =& 077) { if (op==COLON && t1>=PTR && t1==t2) goto nocv; if (cvn==077) { if ((dope&RELAT)==0 || t1float */ leftc = 0; cvn = 4; t = t1; goto rcvt; } else goto illcv; } p1 = convert(p1, t, cvn, plength(p2)); } else { rcvt: p2 = convert(p2, t, cvn, plength(p1)); } nocv:; } if ((dope&RELAT)!=0) { if (op>NEQUAL && (t1>=PTR || t2>=PTR)) op =+ 4; /* ptr relation */ t = 0; /* relational is integer */ } if (fold(op, p1, p2)) return; *cp++ = block(2,op,t,(p1->dimp==0? p2:p1)->dimp,p1,p2); if (pcvn) { p1 = *--cp; *cp++ = convert(p1, 0, pcvn, plength(p1->tr1)); } } convert(p, t, cvn, len) struct tnode *p; { register int n; switch(cvn) { /* int -> ptr */ case 1: n = TIMES; goto md; /* ptr -> int */ case 2: n = DIVIDE; md: return(block(2, n, t, 0, p, block(1, CON, 0, 0, len))); /* int -> double */ case 3: n = ITOF; goto di; /* double -> int */ case 4: n = FTOI; di: return(block(1, n, t, 0, p)); } error("C error-- convert"); return(p); } setype(ap, at, adimptr) struct tnode *ap; { register struct tnode *p; register t, dimptr; p = ap; t = at; dimptr = adimptr; p->type = t; if (dimptr != -1) p->dimp = dimptr; switch(p->op) { case AMPERA: case AMPER: setype(p->tr1, decref(t), dimptr); return; case STAR: setype(p->tr1, incref(t), dimptr); return; case PLUS: case MINUS: setype(p->tr1, t, dimptr); } } chkfun(ap) struct tnode *ap; { register struct tnode *p; register int t; p = ap; if (((t = p->type)&030)==FUNC) return(block(1,AMPER,incref(t),p->dimp,p)); return(p); } struct tnode *disarray(ap) struct tnode *ap; { register int t; register struct tnode *p; p = ap; /* check array & not MOS */ if (((t = p->type)&030)!=ARRAY || p->op==NAME&&p->class==MOS) return(p); p->ssp++; *cp++ = p; setype(p, decref(t), -1); build(AMPER); return(*--cp); } chkw(p) struct tnode *p; { register int t; if ((t=p->type)>CHAR && top!=NAME && p->op!=STAR) error("Lvalue required"); } fold(op, ap1, ap2) struct tnode *ap1, *ap2; { register struct tnode *p1; register int v1, v2; p1 = ap1; if (p1->op!=CON || (ap2!=0 && ap2->op!=CON)) return(0); v1 = p1->value; v2 = ap2->value; switch (op) { case PLUS: v1 =+ v2; break; case MINUS: v1 =- v2; break; case TIMES: v1 =* v2; break; case DIVIDE: v1 =/ v2; break; case MOD: 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: v1 =>> v2; break; default: return(0); } p1->value = v1; *cp++ = p1; return(1); } conexp() { register struct tnode *t; initflg++; if (t = tree()) if (t->op != CON) error("Constant required"); initflg--; return(t->value); } unix_v4/usr/c/c03.o0000644000175000017500000000650001026347440012337 0ustar aapaap`dw D5  tEE@Pww @tEAE@PUww fffg e & wxw t /# n`\ T& f f $  w w N ww N ww B5  2 ^2ww BE%  E E% 6! 0E & x ttE ACp@   ww N ^5 ww  7%' P%;"     4 # -r wfw b\%~ N7JDw@w <  w(w $ e $   && & f e & ww  b%; && & n e &  ww f wzIllegal indirectionjbr L%d L%d:Bad structureCompiler error (length)Break/continue error99i9iiiY999999))99(I9999yyyyi9i99_cvtab _opdope _ctab _symbuf _hshused _hshtab _space _cp _cmst P_isn _swtab _swp _contlab _brklab _retlab _deflab _nauto _autolen _peeksym _peekc _eof _line _treebas _debug _defsym _funcsym _xdflg _proflg _csym _cval _fcval _nchstr _nerror _paraml _parame _strflg _osleft _mosflg _initflg _inhdr _dimtab _binbuf _ascbuf _dimp _regvar _decref"L3rsave L2_error L1.rretrn _incref"2_cbranch"V_block _rcexpr"L5L6_putchar"n_putw L20001L8_branch"L10_printf L9 _label"L12L11"_plength"&L14BL13Z_length"^L28L30L16pL17L18L15L19L29L22L23L24L25L26L27_rlength"L32,_simpleg"2_symbol L34_nextcha"L35vL36vL10001L37L33L39L40_getchar _chconbr"L43L42L41_dogoto"_tree _build _chkw L44*_doret".L46bL45j_putc L47unix_v4/usr/c/efftab.s0000644000175000017500000000336001026347440013206 0ustar aapaap/ c code tables .globl _efftab .data _efftab=. 30.; ci30 31.; ci30 32.; ci30 / same as 30 33.; ci30 / same as 31 80.; ci80 70.; ci70 71.; ci70 / - like + 77.; ci77 78.; ci78 75.; ci75 76.; ci76 0 .text / ++,-- prefix, postfix ci30: %ai,n %abp,n %ab,n IB1 A1 %aip,n %adp,n %afp,n I' $^,A1 %nbp*,n %ni*,n %nb*,n F* IB1 #1(R) %nip*,n %ndp*,n %nfp*,n F* I' $^,#1(R) / = ci80: %a,z %ad,zf clrB1 A1 %n*,z %nd*,zf F* clrB1 #1(R) %a,aw %ab,a movBE A2,A1 %ab,n* %a,nw* S* movBE #2(R),A1 %a,n S movB1 R,A1 %n*,aw %nb*,a F* movBE A2,#1(R) %n*,ew* %nb*,e* F* S1* movBE #2(R1),#1(R) %n*,e F* S1 movBE R1,#1(R) %e*,nw* %eb*,n* S* F1* movBE #2(R),#1(R1) %e*,n S F1* movB1 R,#1(R1) %n*,nw* %nb*,n* FS* S* movBE #2(R),*(sp)+ %n*,n FS* S movBE R,*(sp)+ / =| i ci78: %a,a bisBE A2,A1 %a,n S bisB1 R,A1 %n*,a F* bisBE A2,#1(R) %e*,n* S* F1* bisBE #2(R),#1(R1) %e*,n S F1* bisBE R,#1(R1) %n*,e* F* S1* bisBE #2(R1),#1(R) %n*,e F* S1 bisBE R1,#1(R) %n*,n* FS* S* bisBE #2(R),*(sp)+ %n*,n FS* S bisBE R,*(sp)+ / =& i ci77: %a,c bicB1 $!C2,A1 %a,n S com R bicB1 R,A1 %n*,c F* bicB1 $!C2,#1(R) %e*,n S F1* com R bicB1 R,#1(R1) %n*,e F* S1 com R1 bicB1 R1,#1(R) %n*,n FS* S com R bicB1 R,*(sp)+ / =+ ci70: %a,1 I'B1 A1 %aw,aw I A2,A1 %aw,nw* S* I #2(R),A1 %aw,n S I R,A1 %n*,1 F* I'B1 #1(R) %ew*,nw* S* F1* I #2(R),#1(R1) %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 S F1* I R,#1(R1) %nw*,n SS F* I (sp)+,#1(R) %n*,n SS F* movB1 #1(R),R1 I (sp)+,R1 movB1 R1,#1(R) / =>> ci75: %n,z %a,1 asrB1 A1 %n*,1 F* asrB1 #1(R) / =<< ci76: %n,z %a,1 aslB1 A1 %n*,1 F* aslB1 #1(R) .data .even unix_v4/usr/c/c10.c0000644000175000017500000004041101026347440012320 0ustar aapaap# /* C compiler, part 2 Copyright 1972 Bell Telephone Laboratories, Inc. */ #include "c1h.c" char maprel[] { EQUAL, NEQUAL, GREATEQ, GREAT, LESSEQ, LESS, GREATP, GREATQP, LESSP, LESSEQP }; char notrel[] { NEQUAL, EQUAL, GREAT, GREATEQ, LESS, LESSEQ, GREATQP, GREATP, LESSEQP, LESSP }; struct tconst czero { CON, INT, 0, 0}; struct tconst cone { CON, INT, 0, 1}; struct tconst fczero { SFCON, DOUBLE, 0, 0 }; struct table *tabtab[] { regtab, efftab, cctab, sptab, 0 }; int nreg 3; int isn 10000; int namsiz 8; int *treebase; main(argc, argv) char *argv[]; { int treespace[ossiz]; struct table *table; register *sp, c, *tree; if (argc<4) { error("Arg count"); exit(1); } if(fopen(argv[1], ascbuf)<0 || fopen(argv[2], binbuf)<0){ error("Missing temp file"); exit(1); } if (fcreat(argv[3], outbuf) < 0) { error("Can't create %s", argv[3]); exit(1); } treebase = getw(binbuf); if (treebase < treespace) { error("Tree space botch"); exit(1); } while ((c=getc(ascbuf)) > 0) { if(c=='#') { sp = treebase; c = getw(binbuf); tree = getw(binbuf); table = tabtab[getw(binbuf)]; line = getw(binbuf); while(--c >= 0) *sp++ = getw(binbuf); if (table==0) /* is switch */ pswitch(treebase, sp, tree); else { tree = optim(tree); nstack = 0; rcexpr(tree, table, 0); } } else putchar(c); } if (nfloat) printf(".globl fltused\n"); fflush(outbuf); exit(nerror!=0); } char *match(atree, table, nrleft) struct tnode *atree; struct table *table; { int op, d1, d2, t1, t2, dope; struct tnode *p2; register struct tnode *p1, *tree; register struct optab *opt; if ((tree=atree)==0) return(0); if (table==lsptab) table = sptab; op = tree->op; dope = opdope[op]; if ((dope&LEAF) == 0) p1 = tree->tr1; else p1 = tree; t1 = p1->type; d1 = dcalc(p1, nrleft); if ((dope&BINARY)!=0) { p2 = tree->tr2; t2 = p2->type; 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)) { 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)) continue; } return(opt); } return(0); } rcexpr(atree, atable, reg) struct tnode *atree; struct table *atable; { register r; int modf; register struct tnode *tree; register struct table *table; table = atable; if((tree=atree)==0) return(0); switch (tree->op) { case SETREG: nreg = tree->type-1; return; case CBRANCH: cbranch(tree->btree, tree->lbl, tree->cond, 0); return(0); case INIT: if (tree->tr1->op == AMPER) tree->tr1 = tree->tr1->tr1; if (tree->tr1->op!=NAME && tree->tr1->op!=CON) error("Illegal initialization"); else cexpr(tree, regtab, nreg); return(0); case EXCLA: if ((opdope[tree->tr1->op] & RELAT) != 0) { tree = tree->tr1; tree->op = notrel[tree->op - EQUAL]; } break; case RFORCE: if((r=rcexpr(tree->tr1, table, reg)) != 0) printf("mov%c r%d,r0\n", isfloat(tree->tr1), r); return(0); case COMMA: rcexpr(tree->tr1, efftab, reg); tree = tree->tr2; break; case TIMES: case DIVIDE: case ASTIMES: case ASDIV: pow2(tree); } if ((r=cexpr(tree, table, reg))>=0) { return(r); } if (table!=regtab) if((r=cexpr(tree, regtab, reg))>=0) { modf = isfloat(tree); if (table==sptab || table==lsptab) { 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(0); } error("No match for op %d", tree->op); } 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, nargs, fflag; char *opt; tree = atree; reg = areg; p1 = tree->tr2; if ((c = tree->op)==CALL) { r = 0; nargs = 0; fflag = 0; if (tree->tr1->op!=NAME) { /* get nargs right */ nargs++; nstack++; } if(p1->op) { while (p1->op==COMMA) { r =+ comarg(p1->tr2, &fflag); p1 = p1->tr1; nargs++; } r =+ comarg(p1, &fflag); nargs++; } tree->op = CALL+1; tree->degree = r; /* save arg length */ } if ((opdope[c]&RELAT||c==LOGAND||c==LOGOR) && 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) printf("mov%c r%d,r%d\n", isfloat(tree),reg,rreg); reg = rreg; label(r); goto retrn; } if (c==AMPER && tree->tr1->op==NAME && tree->tr1->class==REG) error("Illegal use of register"); reg = oddreg(tree, reg); reg1 = reg+1; if (chkleaf(tree, table, reg) >= 0) goto retrn; if ((opt=match(tree, table, nreg-reg))==0) return(-1); string = opt->tabstring; p1 = tree->tr1; p2 = 0; if (opdope[tree->op] & BINARY) p2 = tree->tr2; loop: switch(c = *string++) { case '\0': if (tree->op==CALL+1) { popstk(tree->degree); reg = 0; nstack =- nargs; } retrn: if (!isfloat(tree)) if (tree->op==DIVIDE || tree->op==ASDIV) reg--; return(reg); /* A1 */ case 'A': p = p1; goto adr; /* A2 */ case 'B': p = p2; goto adr; /* A */ case 'O': p = tree; adr: c = 0; if (*string=='\'') { c++; string++; } pname(p, c); goto loop; /* I */ case 'M': if ((c = *string)=='\'') string++; else c = 0; prins(tree->op, c); goto loop; /* B1 */ case 'C': if ((opdope[tree->op]&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; /* C1 */ case 'E': p = p1->tr1; goto const; /* C2 */ case 'F': p = p2->tr1; const: printf("0%o", p); goto loop; /* 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; c = *string++ - 'A'; if ((c&02)!=0) ctable = sptab; if ((c&04)!=0) if (p->op!=INCAFT && p->op!=DECAFT && match(p, efftab, nreg-reg)) ctable = efftab; else ctable = cctab; if ((c&01)!=0) { p = p->tr1; if(collcon(p) && ctable!=sptab) { if (p->tr2->op==AMPERA) flag =| 010; 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 (flag&010) printf("add r5,r%d\n", rreg); if (c&010) reg1 = rreg; else if (rreg!=reg && ctable==regtab) if (oddreg(tree, 0)==0 && (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 printf("mov%c\tr%d,r%d\n", isfloat(tree), rreg, reg); goto loop; /* R */ case 'I': r = reg; if (*string=='-') { string++; r--; } goto preg; /* R1 */ case 'J': r = reg1; preg: if (r>nreg) 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; case '#': p = p1->tr1; goto nmbr; case '"': p = p2->tr1; goto nmbr; case '~': p = p1; nmbr: if(collcon(p)) { switch((p = p->tr2)->op) { case CON: if (p->value) printf("%d.", p->value); break; case AMPER: pname(p->tr1, 0); break; case AMPERA: p = p->tr1; printf("%d.", p->nloc+p->offset); break; } } goto loop; /* V */ case 'V': tree->op = maprel[tree->op - EQUAL]; goto loop; /* Z */ case 'Z': printf("$0%o", p1->offset+p1->nloc); goto loop; case '^': /* for ++ --, tr2 is length */ printf("0%o", tree->tr2); goto loop; case 'T': /* "tst R" if 1st op not in cctab */ if (dcalc(p1, 5)>12 && !match(p1, cctab, 10)) printf("tst r%d\n", reg); goto loop; case '`': /* for jsr pc,*$F on compression */ if (fflag) printf("*$"); goto loop; } putchar(c); goto loop; } chkleaf(atree, table, reg) struct tnode *atree; { struct tnode lbuf; register struct tnode *tree; tree = atree; if (dcalc(tree, nreg-reg) > 12) return(-1); lbuf.op = LOAD; lbuf.type = tree->type; lbuf.degree = tree->degree; lbuf.tr1 = tree; return(cexpr(&lbuf, table, reg)); } comarg(atree, flagp) int *flagp; { register struct tnode *tree; tree = atree; if (tree->type==STRUCT) error("Illegal structure"); if (nstack || isfloat(tree)) { rcexpr(tree, sptab, 0); return(arlength(tree->type)); } (*flagp)++; rcexpr(tree, lsptab, 0); return(0); } optim(atree) struct tnode *atree; { register op, dope; int d1, d2; struct tnode *t; register struct tnode *tree; if ((tree=atree)==0) return(0); op = tree->op; if (op==0) return(tree); dope = opdope[op]; if ((dope&LEAF) != 0) return(tree); if ((dope&BINARY) == 0) return(unoptim(tree)); /* is known to be binary */ if ((dope&COMMUTE)!=0) { acomm: d1 = tree->type; tree = acommute(tree); tree->type = d1; return(tree); } tree->tr1 = optim(tree->tr1); tree->tr2 = optim(tree->tr2); if ((dope&RELAT) != 0) { if (degree(tree->tr1) < degree(tree->tr2)) { 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) <= 12 && tree->tr2->value <= 127 && tree->tr2->value >= 0) tree->tr2->type = CHAR; } d1 = max(degree(tree->tr1), 1); d2 = max(degree(tree->tr2), 0); switch (op) { case CALL: tree->degree = 10; break; case QUEST: case COLON: tree->degree = max(d1, d2); break; case MINUS: if (tree->tr2->op==CON) { /* const */ tree->op = PLUS; tree->tr2->value = -tree->tr2->value; goto acomm; } goto def; case DIVIDE: case ASDIV: case ASTIMES: if (ispow2(tree) == 0) { case MOD: case ASMOD: d1 =+ 2; d2 =+ 2; } case LSHIFT: case RSHIFT: if (tree->tr1->op==CON && tree->tr2->op==CON) { const(op, &tree->tr1->value, tree->tr2->value); return(tree->tr1); } def: default: tree->degree = d1==d2? ++d1: max(d1, d2); break; } return(tree); } unoptim(atree) struct tnode *atree; { register struct tnode *subtre, *tree; register int *p; double static fv; struct { int integer; }; if ((tree=atree)==0) return(0); if (tree->op==CBRANCH) { tree->btree = optim(tree->btree); return(tree); } subtre = tree->tr1 = optim(tree->tr1); /* try to reduce * & */ if (tree->op==STAR && (subtre->op==AMPER || subtre->op==AMPERA)) return(subtre->tr1); if (tree->op == ITOF && subtre->op == CON) { fv = subtre->value; p = &fv; p++; if (*p++==0 && *p++==0 && *p++==0) { subtre->type = DOUBLE; subtre->value = fv.integer; subtre->op = SFCON; return(subtre); } } if (subtre->op == CON) switch(tree->op) { case NEG: subtre->value = -subtre->value; return(subtre); case COMPL: subtre->value = ~subtre->value; return(subtre); } tree->degree = max(1, degree(subtre)); return(tree); } struct acl { int nextl; int nextn; struct tnode *nlist[20]; struct tnode *llist[21]; }; acommute(atree) { struct acl acl; int d, i, op, flt; 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--; if (!flt) { /* put constants together */ t2 = &acl.llist[acl.nextl]; for (i=acl.nextl;i>0&&t2[0]->op==CON&&t2[-1]->op==CON;i--) { acl.nextl--; t2--; const(op, &t2[0]->value, t2[1]->value); } } if (op==PLUS && !flt) { /* toss out "+0" */ if (acl.nextl>0 && (*t2)->op==CON && (*t2)->value==0) { acl.nextl--; t2--; } if (acl.nextl <= 0) return(*t2); /* subsume constant in "&x+c" */ if (t2[0]->op==CON && (t2[-1]->op==AMPER || t2[-1]->op==AMPERA)) { t2--; t2[0]->tr1->offset =+ t2[1]->value; acl.nextl--; } } else if (op==TIMES) { t1 = acl.llist[acl.nextl]; if (t1->op==CON && t1->value==0) return(t1); } if (op==PLUS && !flt) distrib(&acl); tree = *(t2 = &acl.llist[0]); d = max(degree(tree), 1); if (op==TIMES && !flt) d++; for (i=0; itr2 = t = *++t2; t1->degree = d = degree(t)>=d? d+1:d; t1->tr1 = tree; tree = t1; } if (tree->op==TIMES && ispow2(tree)) tree->degree = max(degree(tree->tr1), 1); 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); list->nextl--; goto loop; } *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; v = av; switch (op) { 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; } error("C error: const"); } 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; if (tree->op == op) { ins: list->nlist[list->nextn++] = tree; insert(op, tree->tr1, list); insert(op, tree->tr2, list); return; } tree = optim(tree); if (tree->op == op) goto ins; if (!isfloat(tree)) { /* c1*(x+c2) -> c1*x+c1*c2 */ if ((tree->op==TIMES||tree->op==LSHIFT) && tree->tr2->op==CON && 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; 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; } putchar(c) { putc(c&0177, outbuf); } unix_v4/usr/c/c0h.c0000644000175000017500000000706301026347440012415 0ustar aapaap# /* C compiler-- pass 1 header Copyright 1973 Bell Telephone Laboratories, Inc. */ /* parameters */ #define ncps 8 #define hshsiz 200 #define cmsiz 40 #define swsiz 200 #define ncpw 2 #define ossiz 500 #define dimsiz 100 #define regtab 0 #define efftab 1 #define cctab 2 #define sptab 3 struct tnode { int op; int type; int dimp; struct tnode *tr1, *tr2; }; struct { int fop; int ftype; char ssp; /* subscript list */ char lenp; /* structure length */ }; struct tname { int nop; int ntype; int ndimp; int class; int offset; int nloc; }; struct tconst { int cop; int ctype; int cdimp; int value; }; struct hshtab { int hclass; int htype; int hdimp; int hoffset; char name[ncps]; }; struct swtab { int swlab; int swval; }; char cvtab[]; int opdope[]; char ctab[]; char symbuf[ncps]; int hshused; struct hshtab hshtab[hshsiz]; int *space; int *cp; int cmst[cmsiz]; int isn; struct swtab swtab[swsiz]; struct swtab *swp; int contlab; int brklab; int retlab; int deflab; int nauto; int autolen; int peeksym; int peekc; int eof; int line; int *treebase; int debug; struct hshtab *defsym; struct hshtab *funcsym; int xdflg; int proflg; struct hshtab *csym; int cval; double fcval; int nchstr; int nerror; struct hshtab *paraml; struct hshtab *parame; int strflg; int osleft; int mosflg; int initflg; int inhdr; int dimtab[dimsiz]; char binbuf[518]; char ascbuf[518]; int dimp; int regvar; /* operators */ #define EOF 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 KEYW 19 #define NAME 20 #define CON 21 #define STRING 22 #define FCON 23 #define SFCON 24 #define SIZEOF 29 #define INCBEF 30 #define DECBEF 31 #define INCAFT 32 #define DECAFT 33 #define EXCLA 34 #define AMPERA 29 #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 EQUAL 60 #define NEQUAL 61 #define LESSEQ 62 #define LESS 63 #define GREATEQ 64 #define GREAT 65 #define LESSP 66 #define LESSEQP 67 #define GREATP 68 #define GREATQP 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 CALL 100 #define MCALL 101 #define JUMP 102 #define CBRANCH 103 #define INIT 104 #define SETREG 105 #define RFORCE 110 #define BRANCH 111 #define LABEL 112 /* types */ #define INT 0 #define CHAR 1 #define FLOAT 2 #define DOUBLE 3 #define STRUCT 4 #define RSTRUCT 5 #define PTR 010 #define FUNC 020 #define ARRAY 030 /* storage classes */ #define KEYWC 1 #define MOS 4 #define AUTO 5 #define EXTERN 6 #define STATIC 7 #define REG 8 #define STRTAG 9 #define ARG 10 #define ARG1 11 /* keywords */ #define GOTO 10 #define RETURN 11 #define IF 12 #define WHILE 13 #define ELSE 14 #define SWITCH 15 #define CASE 16 #define BREAK 17 #define CONTIN 18 #define DO 19 #define DEFAULT 20 #define FOR 21 /* characters */ #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 /* 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 unix_v4/usr/c/sptab.s0000644000175000017500000000253501026347440013073 0ustar aapaap/ c code tables-- expression to -(sp) .globl _sptab .data _sptab=. 106.; cs106 30.; cs30 31.; cs30 32.; cs32 33.; cs32 35.; cs35 36.; cs36 40.; cs40 41.; cs40 47.; cs47 48.; cs48 0 .text / name cs106: %z,n %zf,n clrB1 -(sp) %aw,n movB1 A1,-(sp) / ++,-- prefix cs30: %ai,n %abp,n I A1 mov A1,-(sp) %aw,n I' $^,A1 mov A1,-(sp) %nbp*,n %ni*,n F* I #1(R) mov #1(R),-(sp) %nip*,n F* mov #1(R),-(sp) I' $^,#1(R) / ++,-- postfix cs32: %ai,n %abp,n mov A1,-(sp) I A1 %aip,n mov A1,-(sp) I' $^,A1 %nbp*,n %ni*,n F* mov #1(R),-(sp) I #1(R) %nip*,n F* mov #1(R),-(sp) I' $^,#1(R) / & unary cs35: %i,n mov $A1,-(sp) / * unary cs36: %nbp*,n F* movb *#1(R),R mov R,-(sp) %ndp*,n F* movf *#1(R),R movf R,-(sp) %nfp*,n F* movof *#1(R),R movf R,-(sp) %n*,n F* mov *#1(R),-(sp) %abp,n movb *A1,R mov R,-(sp) %adp,n movf *A1,R movf R,-(sp) %afp,n movof *A1,R movf R,-(sp) %a,n mov *A1,-(sp) %nbp,n H* movb ~(R),R mov R,-(sp) %ndp,n H* movf ~(R),R movf R,-(sp) %nfp,n H* movof ~(R),R movf R,-(sp) %n,n H* mov ~(R),-(sp) / + cs40: %n,1 FS I' (sp) %n,aw FS I A2,(sp) %n,nw* FS S* I #2(R),(sp) %n,n FS S I R,(sp) / & cs47: %n,c FS bic $!C2,(sp) %n,n FS S com R bic R,(sp) / | cs48: %n,a FS bisB2 A2,(sp) %n,n* FS S* bisB2 #2(R),(sp) %n,n FS S bis R,(sp) .data .even .text unix_v4/usr/c/c04.o0000644000175000017500000000273401026347440012345 0ustar aapaap<<8888888888STRUCT) goto syntax; /* not type */ elsize = 0; if (type==STRUCT) { elsize = strdec(&type, 0); if ((peeksym=symbol())!=KEYW) blkhed(); } } else { if (o!=NAME) goto syntax; peeksym = o; } do { defsym = 0; strflg = 1; decl1(EXTERN, type&07, 0, elsize); if ((ds=defsym)==0) return; cs = ds->name; funcsym = ds; *cs =| 0200; /* non-deletable */ printf(".globl _%.8s\n", cs); xdflg = 0; type = ds->type; if ((type&030)==FUNC && ((peeksym=symbol())==LBRACE || peeksym==KEYW)) { cfunc(cs); return; } nel = 1; while ((ds->type&030)==ARRAY) { nel = dimtab[ds->ssp&0377]; ds->type = decref(ds->type); } width = length(ds); if (ds->type==STRUCT) { nel =* width/2; width = 2; } ds->type = type; cinit(cs, type, nel, width); } while ((o=symbol())==COMMA); if (o==SEMI) return; syntax: error("External definition syntax"); errflush(o); statement(0); } cfunc(cs) char *cs; { register savdimp; strflg = 0; savdimp = dimp; printf(".text\n_%.8s:\n", cs); declist(ARG); regvar = 5; retlab = isn++; if ((peeksym = symbol()) != LBRACE) error("Compound statement required"); statement(1); printf("L%d:jmp rretrn\n", retlab); dimp = savdimp; } cinit(cs, type, nel, awidth) char *cs; { register o, ninit, width; width = awidth; if ((peeksym=symbol())==COMMA || peeksym==SEMI) { printf(".comm _%.8s,0%o\n", cs, (nel*width+1)&~01); return; } ninit = 0; printf(".data\n_%.8s=.\n", cs); if ((o=symbol())==LBRACE) { do ninit = cinit1(cs, type, width, ninit); while ((o=symbol())==COMMA); if (o!=RBRACE) peeksym = o; } else { peeksym = o; ninit = cinit1(cs, type, width, 0); } if (ninit1 && (type&030)!=ARRAY && (type&07)!=STRUCT) error("Too many initializers"); if (((nel&width)&01) != 0) printf(".even\n"); } cinit1(cs, type, width, ninit) char *cs; { float sf; register struct tnode *s; if ((peeksym=symbol())==STRING && type==ARRAY+CHAR) { peeksym = -1; if (ninit) bxdec(); printf(".text\n_%.8s=L%d\n", cs, cval); return((nchstr+1) & ~01); } if (peeksym==RBRACE) return(ninit); initflg++; s = tree(); initflg = 0; switch(width) { case 1: printf(".byte "); if (s->op != CON) bxdec(); case 2: if (s->op==CON) { printf("%d.\n", s->value); break; } rcexpr(block(1,INIT,0,0,s), regtab); break; case 4: sf = fcval; printf("0%o;0%o\n", sf); goto flt; case 8: printf("0%o;0%o;0%o;0%o\n", fcval); flt: if (s->op==FCON || s->op==SFCON) break; default: bxdec(); } return(++ninit); } bxdec() { error("Inconsistent external initialization"); } statement(d) { register o, o1, o2; int o3, o4; struct tnode *np; stmt: switch(o=symbol()) { case EOF: error("Unexpected EOF"); case SEMI: case RBRACE: return; case LBRACE: if(d) { if (proflg) { o = "jsr\tr5,mrsave;0f;%o\n.bss;0:.=.+2\n.text\n"; } else o = "jsr r5,rsave; %o\n"; printf(o, blkhed()-4); } while (!eof) { if ((o=symbol())==RBRACE) return; peeksym = o; statement(0); } 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(0); if ((o=symbol())==KEYW && cval==ELSE) { o2 = isn++; branch(o2); label(o1); statement(0); label(o2); return; } peeksym = o; label(o1); return; case WHILE: o1 = contlab; o2 = brklab; label(contlab = isn++); cbranch(pexpr(), brklab=isn++, 0); statement(0); 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(0); 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); rcexpr(block(1,RFORCE,0,0,np), regtab); pswitch(); brklab = o1; return; case DEFAULT: if (swp==0) error("Default not in switch"); 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; } error("Unknown keyword"); goto syntax; case NAME: if (nextchar()==':') { peekc = 0; o1 = csym; if (o1->hclass>0) { error("Redefinition"); goto stmt; } o1->hclass = STATIC; o1->htype = ARRAY; if (o1->hoffset==0) o1->hoffset = isn++; label(o1->hoffset); if ((peeksym=symbol())==RBRACE) return; goto stmt; } } peeksym = o; rcexpr(tree(), efftab); semi: if ((o=symbol())==SEMI) return; syntax: error("Statement syntax"); errflush(o); goto stmt; } #define forsps 150 forstmt() { int l, savxpr[forsps]; int *st, *ss; register int *sp1, *sp2, o; if ((o=symbol()) != LPARN) return(o); if ((o=symbol()) != SEMI) { /* init part */ peeksym = o; rcexpr(tree(), efftab); if ((o=symbol()) != SEMI) return(o); } label(contlab); if ((o=symbol()) != SEMI) { /* test part */ peeksym = o; rcexpr(block(1,CBRANCH,tree(),brklab,0), cctab); if ((o=symbol()) != SEMI) return(o); } if ((peeksym=symbol()) == RPARN) { /* incr part */ peeksym = -1; statement(0); branch(contlab); return(0); } l = contlab; contlab = isn++; st = tree(); if ((o=symbol()) != RPARN) return(o); ss = space; if (space-treebase > forsps) { error("Expression too large"); space = &treebase[forsps]; } sp2 = savxpr; for (sp1=treebase; sp1hoffset = 0; cs = paraml; paraml = paraml->hoffset; if (cs->htype==FLOAT) cs->htype = DOUBLE; cs->hoffset = pl; cs->hclass = AUTO; if ((cs->htype&030) == ARRAY) { cs->htype =- 020; /* set ptr */ cs->ssp++; /* pop dims */ } pl =+ rlength(cs); } for (cs=hshtab; csname[0] == '\0') continue; /* check tagged structure */ if (cs->hclass>KEYWC && (cs->htype&07)==RSTRUCT) { cs->lenp = dimtab[cs->lenp&0377]->lenp; cs->htype = cs->htype&~07 | STRUCT; } if (cs->hclass == STRTAG && dimtab[cs->lenp&0377]==0) error("Undefined structure: %.8s", cs->name); if (cs->hclass == ARG) error("Not an argument: %.8s", cs->name); } osleft = ossiz; space = treebase; rcexpr(block(1, SETREG, regvar), regtab); return(autolen); } blkend() { register struct hshtab *cs; for (cs=hshtab; csname[0]) { if (cs->hclass==0) error("%.8s undefined", cs->name); if((cs->name[0]&0200)==0) { /* not top-level */ cs->name[0] = '\0'; hshused--; } } } } errflush(ao) { register o; o = ao; while(o>RBRACE) /* ; { } */ o = symbol(); peeksym = o; } declist(skwd) { int o, elsize, ndec; register offset, tkw, skw; offset = 0; loop: ndec = 0; tkw = -1; skw = skwd; elsize = 0; while ((o=symbol())==KEYW) switch (cval) { case AUTO: case STATIC: case EXTERN: case REG: if (skw) error("Conflict in storage class"); skw = cval; ndec++; if (tkw<0) continue; goto list; case STRUCT: o = cval; elsize = strdec(&o, skw==MOS); cval = o; case INT: case CHAR: case FLOAT: case DOUBLE: ndec++; if (tkw>=0) error("Type clash"); tkw = cval; if (skw==0) continue; goto list; default: goto brk1; } brk1: peeksym = o; if (ndec==0) return(offset); list: if (tkw<0) tkw = INT; if (skw==0) skw = AUTO; offset = declare(skw, tkw, offset, elsize); goto loop; } strdec(tkwp, mosf) int *tkwp; { register elsize, o; register struct hshtab *ssym; struct hshtab *ds; mosflg = 1; ssym = 0; if ((o=symbol())==NAME) { ssym = csym; if (ssym->hclass==0) { ssym->hclass = STRTAG; ssym->lenp = dimp; chkdim(); dimtab[dimp++] = 0; } if (ssym->hclass != STRTAG) redec(); mosflg = mosf; o = symbol(); } mosflg = 0; if (o != LBRACE) { if (ssym==0) { syntax: decsyn(o); return(0); } if (ssym->hclass!=STRTAG) error("Bad structure name"); if ((elsize = dimtab[ssym->lenp&0377])==0) { *tkwp = RSTRUCT; elsize = ssym; } peeksym = o; } else { ds = defsym; mosflg = 0; elsize = declist(MOS); if (elsize&01) elsize++; defsym = ds; if ((o = symbol()) != RBRACE) goto syntax; if (ssym) { if (dimtab[ssym->lenp&0377]) error("%.8s redeclared", ssym->name); dimtab[ssym->lenp&0377] = elsize; } } return(elsize); } chkdim() { if (dimp >= dimsiz) { error("Dimension/struct table overflow"); exit(1); } } unix_v4/usr/fort/0000755000175000017500000000000001026347440012321 5ustar aapaapunix_v4/usr/fort/errors0000644000175000017500000000261401026347440013563 0ustar aapaapstatement too long syntax error in type statement redeclaration missing ( in array declarator syntax error in dimension statement inappropriate or gratuitous array declarator syntax error in subscript bound illegal character common variable is a parameter or already in common common syntax error subroutine/blockdata/function not first statement subroutine/function syntax error block data syntax error redeclaration in external external syntax error implicit syntax error subscript on non-array incorrect subscript count subscript out of range subscript syntax error DATA syntax error DATA semantics error equivalence inconsistency equivalence syntax error separate common blocks equivalenced common block illegally extended by equivalence common inconsistency created by equivalence DATA table overflow () imbalance in expression expression syntax error illegal variable in equivalence Storage initialized twice by DATA non array/function used with subscripts/arguments goto syntax error illegal return continue, return, stop, call, end, or pause syntax error assign syntax error if syntax error I/O syntax error do or I/O iteration error do end missing illegal statement in block data multiply defined labels undefined label dimension mismatch expression syntax error end of statement in hollerith constant array too large B table overflow unrecognized statement unix_v4/usr/fort/f3o.a0000644000175000017500000003475601026347440013171 0ustar aapaapmf31.o}w w Bw t &w x   w sw .%d: w Bw x w w e-w 2w |xw rjw f Bw ^ xwJw Fe > w 6 0w *-$w w w doif(endfileendassigncallcontinuereturngotopausestopreadprintwriterewindbackspaceformatdata x98)9)9I9Yx)9Y) )Ih(8HXhxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize pass3"ifstmt"isagn signon signoff getline lookup sasgn error perror doend sform sdata sdo sassi scall scont sretu sgoto sif spaus sstop sread sprin swrit srewi sback sendf blocks blockp code ptemp dotabp scan3fmttabtfmtlststmtabsublststmtab1sublst1sendf33.opw w  ( w * w , 2ew  &w E w  $w w w gas%d goto; 2f jw bt%d: &w Nw J&w Dw <%$w 2&w ,w $w  do2w  do1w %d; o%d 2:    e2  &2 w +w goto; t%d o%d: yiiy ) 9YIyI) 9Y 9YIIIyyyIsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sdo"dobeg"doend"getlab e2 error lvalue rvalue code convrt dou dotabp edotab dotab gen6f34.oew w 7 "4w ifw E  w ; 1f w w 1: w w ; .%d w  $  w w  (w (I Y)i)symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sif"e2 error rvalue code ifstmt iserror getsym geti genop getlab newline f35.o0w  &Tw  (M w w Umvw w w w w Uasw w w &WtWow v (w lw d lval; .%d  w J' x)i )iyYsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sasgn"sassi"rerror e2 lvalue rvalue code convrt geti getsym getlab genop newline name f36.o  w w lval9" w v alw alvalw  `w ; d%dw 6Uw w w ~; %d.w w j; 5@w V%n+œE w >%n. w 0%n_ w  œw  rval%d" w  arw arval""w 8w %d. "w rval%d; c%d "= w FGw @w /E w w ' w w w ")w w w w  e w w "w 6w pw stsp; ft+%d. ej&  "$ w Xw Lw 2 callw w $; %n.; ft+%d.; %d.; - -" +"*'" w lval; c%d w w w stsp; ft+%d. e w w ~ stst; ft+%d. ef& "$ w *w &w w ; w 5EE w   w Ew %c%d" "" ""w w w   EE PngpiprdvmpsbadltleeqnegtgentanorI9x9x9xY99xx9x99xIx9x9x9x9Yyx9999x999x99h9xsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize lvalue"rvalue"convrt"type"2funcappl"pname"error lookup code iserror genop typ newline functn size aryapplsimparyjarydopeBpbitbmaxtypoptabfapp1 f37.oT@ w ?w goto; .%d 3W(w  $w agoto $w cagoto W( <D@ )W,w Vfw cgoto ы ɋw n#w fw ` .%d @ , )w F 0 w <#w 4&w .w &H  )9symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sgoto"intexp"e2 code getsym error getlab rvalue convrt chrtab stmlistf38.o+@ ɋ w  3 0w w stop; %d !w   w w paus; %d  w %w retrn ɋw &-~ w r 58Uw \w X"""*w Hw D0 I9)I9))Y)YIXIxxiy)symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sstop"scall"spaus".sretu"Vscont"piserror"~ptemp code geti getsym error declimpl e11 funcappl f39.o:0Bw 5 $ (, & W(#w  "  $w fe "w %s ɋw  (w )w endio iowuioruiowfiorfiowp@ w Jw F&w >8w 27,w (iw  lval; .%d w & w  $W(Bw w && E  ew slist1; d%d 2:w w slist3 iow w ~ slist2; 2bw l w b=w Vw Fw R@ !,&fȕ) w 4w fw "w  w ޕ,w  "w )27<w w %s  (w ) bksprewienfl)IyY9y)xIyxxY9 ))symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sread"swrit" sprin"sback"srewi"sendf" getsym error geticon e2 lvalue rvalue iserror convrt code chrtab blocks blockp doend genop levzer dobeg intexp ptemp newline nelem getfmtiotypelistlstitmchkelbksp2rewi7enfl<f32.o;PHw  $_w w  Vw $w  Mw 6w   w Jw w  8 5w |fw    w bw   w Jw dw   w .w Hw  w w 2 B w 4w  "w w w w  w w &w E w ^* e2 e  |w xcw n7 h58Uw Vw PE    w 8!E8 "e] )x    y99IxYxxi)xx  symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize e1"e2"e11"error getsym blockp blocks declimpl conu ptemp functn funimpl blocke3$e46e5Ne5aJe6je6afe7ae7e8e8ae9e9ae10applunix_v4/usr/fort/f4o.a0000644000175000017500000002155601026347440013164 0ustar aapaapmf41.o7$L| w w w w w w w w w 9 Hisymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize pass4"signon flush dope formts globls constn fopen bsss tfil2 f42.oydw -w .bss  w ft: .=.+%d. !w .data w base:  ]58w E ( % 5 w r%n. = %d.   w R.comm %n,%d. e5 w .%n_ = %d.  w 7`w %n_ = base+%d. w )xxxxxxIxI symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize bsss"code size declimpl cdata dodata dattab pass2f43.oQk@Xx$$8w .globl main w .globl %n.  EG KHD C"ew .bss .globl %n %n: .=.+%d. .text (w f.data .globl %n %n: Cw BBw 6w 0w ,.=.+%d. .text e9 symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize globls"code dattab onedata error perror f44.olpw 7 w 1 s fw .%d: <w   2  2 e w 3w 3ew .even w |w x r if ^ 2 ew F4w @@ > \&\w "w w \0> 999988 8998 ))symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize formts"strout"setln getln code error perror putc xbuf f45.oV"w w  cw N w cw  D B(@ w c%d: w %o w 4f  S$   `# ׭VO.w F B6EWW 7w  777S 5)H9H  HIIYIsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize constn"evalcon"error perror code getcon setln getln xbuf negflg packconjf46.oJ(& W & W- @0        5 4 & W- W+ @0 p `  `Be&    W,& w @V-4 (7E -*B `w d%d: %d.  w ..; w %d.; w %d. e)xxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize getcon"dope"code f47.oP$fw w  &  d7 Bw  (ww f!ww 58w 7y5E  5@-V-H 8w 27`. W(  w E8U  E7l  ÝT2fw    g w  `W*  Zw V7 fTCw 7 @x-t  ׭f e5T)׭N%W/ W, :,w/ʋ,  wFw w w w w-# w .=.+%d. .text w  w .=.+%d. .text  @" w .=.+%d. `` &w h%o  e "7 Hw D w > "4,y 99III99YYYIII  I99i IIIIIIII  )))9Y Y   )symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize cdata"dodata"onedata"fcompare"code getcon error getsym consub size geti setln getln declimpl evalcon dattab contab perror qsort negflg repfact holround dloopunix_v4/usr/fort/sum.s0000644000175000017500000000225601026347440013316 0ustar aapaap/ example of UNIX fortran / calling interface to machine code / this example is a function that / returns the single precision / sum of all of its single precision arguments. / for example: / f = sum(1.,2.,3.) / sets f to 6. .globl sum. / defination of entry .globl retrn / reference of return sum.: / entry point value / location of return value .+2 / pointer to execution code setf / no d/f i/l modes guaranteed mov *2(sp),r0 / arg count mov r3,r1 / r3 points to arg list tst (r1)+ / zeroth arg is old r3 clrf fr0 / start of actual function 1: addf *(r1)+,fr0 / add in each argument sob r0,1b / for each argument movf fr0,value / make returned value available jmp retrn / actual return .bss value: .=.+4 / space for return value / synopsis: / 1. save registers r3, sp / 2. arg list (pointers to values) / begins at 2(r3) / 3. entry name is name of function / followed by "." / 4. first word after entry point is / location of return value. this is / true for both functions and subroutines / 5. second word after entry point is / pointer to pdp-11 code body / 6. return is expedited by a jump to / the globl routine "retrn" unix_v4/usr/fort/f1o.a0000644000175000017500000001646201026347440013161 0ustar aapaapmf11.o)l0% \  w w w w_w hU   34 4w bw ZBw Rx Dw @w :w 2w .*w $lw w subroutinefunctionblockdataexternaldimensioncommonequivalencedataformatimplicitInput file? _ )X9h9yYhYIhhhh  )  H8HXhxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize pass1"fptrap getline flush perror lookup getype ssubr sfunc sbloc sextr sdime scomm sequi sdata sform simpl stype isagn ptemp funok signoff fopen fcreat lookid tfil1 tfil2 tfildiag mes2\emes2hblankchscan1stmtabsublstf12.o\0&Bw hww !E w ESw  w w  $ (w  functionBw  logical*1logicalinteger*1integer*2integerdoublecomplexdoubleprecisioncomplexreal*8real )9) symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize stype"getype"rtyptab"sfunc1 lookup getsym error sdime1 funtabhtvaltabf13.ojLw w  w w w  $ (w 58w E8U& w    w &   w l $ "w \V P L  7>3xxxxx  xsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sdime"sdime1":getsym error geti dimu f14.o1Xfw   K W/ w w >w U w  2w .w  w w 5w &@ U@ $  (w V  xxxxxxxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize scomm"getsym sdime1 error getid lookid ncomf15.ojd  w e&w  w w   (& ew  Uw  $  "w | (nw j w `  (w T 999))9))symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize ssubr"sfunc"sbloc"sfunc1"funok#getsym error f16.o@Lw 58w Uw  $ (w w exx 8symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sextr"sequi"4getsym putc error ptemp f17.oɪ8z4w 6&W/0@+aB- B a   ~e @ ,  /ɋ w Xsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize simpl"getype chrtab error unix_v4/usr/fort/fxo.a0000644000175000017500000004310201026347440013257 0ustar aapaapmfx1.o'x,f Aɋ ɋ V%ы symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize lookup"fx2.oA8| &@    J -ifw  w @w R  & @ w jw f/,w \&B 8 ׭v 8 ^ w W  w  ** _Unknown diagnostic/usr/fort/errorsyhYxYYh9hYhYXhYsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize error"perror"2tput tdecml mes2mes1errfil&ich8mes3fx3.o4X@f 0W p C`&f@w @w w A@w ы9symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize geti"ptemp"&putc putw fx4.o8$ `Bw >  e07 7 'f@ w W,w  W) J)" 7 W w@xR(w D w w . w W. Bw 9R0Wh1^+ w   & Rw 7 3ҕ  Uw w w $ @ w  WeWd W+W-w WeRRw &@ @   &Bw   e7 e7 T Symbol table overflow W+W- w  ` .false..true.**/*-+.lt..le..eq..ne..gt..ge..not..and..or.(),=  )9 symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize getsym"getid"lookid"chrtab"lookup error geti holround bastabsrconstjlstchr`eosletnumperRnumst|isnumnexponovflTeovfljfx5.o T5 w & a 3\~58U  ЋexXxxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize declimpl"getname"2fx6.o2(fw  r f w e07 symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize tput""tdecml"td fx7.oL @ xsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize signon"signoff"pass2 pass3 pass4 passtabfx8.o.5tZ7  7  0 p `e07& d s ' ".7ef D 7 UW Ufh r e0c r e0ce0#7 T h5 fW @$ N @0p `7ѕh  7 UW hW w ww :=-&w .,'w &( %f w )=@&  ( ) Ћ X7R B  8 &78 0% %  L7 w E  B < 7 6 c     EOF on input II99II(II(I()I)) symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize getline"isagn"<levzer"zerror getc chrtab getlino\err1&get1mesLemesZnlflgZfx9.oGTp&f&DՋ EW %w N s c  d0 o( nw  ~Cw  n@ w  X@w ~@w p < 2  rf e0w <AW  eaAsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize code"putc getname cstrbcchrxcdeccoctcnamRcgetfxa.oU:4fE2w %c%c%dw ?irlc??gsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize genop"newline"*code typ"2fxb.o0@w   w w 7w r yxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize geticon"getlab"getsym geti ptemp fxc.o6(w  EfE &Pp  @xxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize size"nelem"error fxd.o.l0Xpw ww &w 7w 7w  E  88)8I)8989symsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize setln"getln"tfil2 tfildiag fopen getc getw xbuf fxe.o2@ Temp file? f.tmp1f.tmp2symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize tfildiag"tfil1"#tfil2"*mes1emes1#fxf.o&4-w 2w fw d)88symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize sform"sdata"ptemp error fxg.olLL5 w w T  &E3\J E3Jabsiabsdabsaintintidintamodmodamax0amax1max0max1dmax1amin0amin1min0min1dmin1floatifixsignisigndsigndimidimsnglrealdrealaimagdimagdblecmplxdcmplxconjgdconjgexpdexpcexpdcexpalogdlogclogdclogalog10dlog10sindsincsindcsincosdcosccosdccostanhsqrtdsqrtcsqrtdcsqrtatandatanatan2datan2dmodcabsdcabs"D" @"" D" D "D"Bbb$&Hf"Df"Df"D"Df"Df""Df"D"DDbxxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize funimpl"getname lookup funtabTfuntabttyptabJfxh.ol@E w  f& w   w  f@qDaRqw  $ w  "w  %w ŜDq@xxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize consub"getsym geti error geticon fxx.oAuHsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint1conint2condblcondcplxconcplxcondata$ibuf$obuf$ tbuf$ line$eline$ifno$efno$errp$ errb$"eerrb$.symtab$.esymtab$nesymp$nsymtp$pnamebuf$renamebuf$"namep$"symbuf$Eesymbuf$ch$ch1$progt$holquo$nxtaloc$imptab$nerror$Dtemp$Ffunctm$Hedata$Jdsize!dholround#dimu$eqvtab$Tconu$dou$blockp$dotabp$ dotab$ edotab$Hfunctn$Hblocks$Nnegflg$Jrepfact$Lcontab$dattab$Txbuf$Nunix_v4/usr/fort/f2o.a0000644000175000017500000001046201026347440013154 0ustar aapaapmf21.o"Xw w w w w w XI symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize pass2"signon signoff calloc salloc equiv entry f22.og" #E  w w `3 exX`nn w main: w %n.: %n_  zLF `f eC 9 &w Rw F rval%dp; %n_ E  EÜw  %c%di2 w  stst; d%d+%d.  exxxxxxx)))xx)x8))symsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize calloc"entry"Pdeclimpl size getc getw xbuf code typ main`subrnfunctnblocd f23.o4|w w  e fW(Qw Mw B ,  (Bw W,<w 8w z W( w   @l2 s5 w d@ , ) @w L ,w >w 8w 05E  w  )9 xsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize equiv"getsym consub eqvtab error declimpl perror setln getln equsetf24.oƵ8Lf e w 58w E  5 5@w 7`  ,5@  h Bw V`  7B 5@3-w @l3 w U@3@lw  3&w e,2 w xxxxIxIxIxIxxxxxxxxxxxxsymsize@linsize namsizesmblsizeintconrealconlogconlog1conint2condblcondcplxconcplxcondata ibuf obuf tbuf line eline ifno efno errp errb eerrb symtab esymtab esymp symtp namebuf enamebuf namep symbuf esymbuf ch ch1 progt holquo nxtaloc imptab nerror temp functm edata dsize salloc"eqvtab error declimpl size perror unix_v4/usr/fort/fc10000755000175000017500000002741201026347440012726 0ustar aapaap.ZR0.% \  w ,75*w -9<*w -;w)M A@lGGpGK_Kw f#hU ,AM M M34 Nw 8%=w l&Bw px -w w w w -w lA=w ,;w $lf0^*D*subroutinefunctionblockdataexternaldimensioncommonequivalencedataformatimplicitInput file? _ &Bw wrw V !,AE w E,AS,Aw .  w w   $ (w | functionBw : logical*1logicalinteger*1integer*2integerdoublecomplexdoubleprecisioncomplexreal*8realw p w f w w w N $ (w 58,Aw E8,AU,A& w    w  & ,A  ,Aw  $ "w @\D + +  7DD3.Afw   K W/ w w F >w v BLU ,Aw n 2w d .w Z w w J5,Aw  &@0A0A0A .A.AU@,A $  (w p II I *w H e&w  w 2 ,Aw   (& ew   U,A2Aw  $  "w v (bIw d &*w   (w  w F 58,Aw U,Aw * $ (w w eA=w 6&W/0@h$+aB- Bh$ a   XMe @ ,  /ɋ w w r  A;w w 0w (w Vw Z  A#,AE .A w 0A0A2Aw #`3 .A2AeHxw `"main: w R"%n.: %n_  |AL.AF `f eC 9 &w ,Aw " rval%dp; %n_ ,AE  EÜL)w ! %c%di2 w ! stst; d%d+%d.  ew (#w 6# e>fW(Qw , Mw B ,  (Bw %W,<w  8w z W( w r%T1  @V1lV12V1T1 T1sT1T15T1 w @ , ) @w : ,w w &w ,A5E  w  T1T1f e ?=w 58,Aw  R1,AE  5,A T15@,AE2Aw !7`E R1 ,V1V15@,AT1  E R1V1B2Aw P!` T1 7E2AV1 R15@,A3-0A0Aw @lV13 2Aw U@,A30A0A@lV1w  32A&w e0A,2A22AT1 ww w L/2&=Bw @6 &w *x  $8 w sA=w (.%d: w  Bw  x w w e-Dw 2w 67w L/%w  Bw   x ww e % w  BDw  -6Dw L w w D h & x^~b\D*^*doif(endfileendassigncallcontinuereturngotopausestopreadprintwriterewindbackspaceformatdataw $w  ( w *$ F/w ,$ / $2 /e$w &  &w VE w  $w w w n gas%d goto; 2f .$/w Nt%d: &w w &w w %$w &w w w  do2w  do1w %d; o%d 2:    #e2 / &#2 /w +/r#w  goto; t%d o%d: w w ^7 "4w ifw JE  w R; 1f w jw D1: w r w 0; .%d w  $  w $w  (w (w z  &Tw n  (M w z,Aw nUmvw w w jw Bw @Uasw zw w &WtWow  (w &w ` lval; .%d  w `'w ( w 0 lval9" w v ,Aalw  alvalw .A `w ; d%dw 6,AUw w w ; %d.w w ; 5@,A0Aw %n+œ,AE w %n. w r%n_ ,Aw H œ-Aw J rval%d" w  ,Aarw  arval""w 8-Aw %d. ,A"w  rval%d; c%d "= w FGw @w /E w w ' w w w ")w w w w  e w w "w 6,Aw pw  stsp; ft+%d. e&  "$ w Xw Lw t callw w f; %n.; ft+%d.; %d.; -\Z>TR>N.A -" +"*'" w  lval; c%d w w w  stsp; ft+%d. e w w  stst; ft+%d. e& "$ w *w &w w ; .Aw |5EE w J  w : EL)w %c%d" "" ,A""w w w   EE Pngpiprdvmpsbadltleeqnegtgentanor@h$ w ?w ^ goto; .%d 3W(w  $w : agoto $w , cagoto W( <D@ )W,w Vfw  cgoto ы ɋw #w w  .%d @ , )w  0 w #w (&w >w : ɋ w 4 3 0w w v stop; %d !w   w w N paus; %d  :w N %w , retrn ɋw 4 &-. A w  58,AU,Aw w `"""*w w 0 w 5 $ (, & W(#w L/v "  $w fe "w z %s ɋw  (w z )w Z endio iowuioruiowfiorfiowp@h$ w w &w L/w (7:w r iDN=w  lval; .%d w & w  $L/W(Bw <w && ,AE .A ew  slist1; d%d 2:w 0 w j slist3 iow B w P slist2; 2bw R w T=w Vw Fw @ !,&fȕ) w 8w fw "w  w ޕ,w  "w )w w  %s  (w ) bksprewienflw  $_w w  Vw w  Mw w   w w w  8 5w |w    w b8w   w J8w w   w .Tw w  w jw l  B w 4w  "w w D w w 0  w w &w v,AE w ^*  e2  e *7 w cDNCLw 7 58,AU,Aw w ,AE    w !E8,A "e~]  w < w 9w ;w w .w w "w 6w 9 <* h6w b-5w 6.bss B6 w &ft: .=.+%d. !R1w .data w base:  0/]58,Aw ,A2AE ( % 5,A w %n. = %d.  2A w .comm %n,%d. e5,A w v%n_ = %d.  w 52A7`4w L%n_ = base+%d. w f4x$$8w .globl main w .globl %n.  0.,AEG K2AHR1D C"ew .bss .globl %n %n: .=.+%d. .text (w .data .globl %n %n: Cw Bw w w \.=.+%d. .text ew 7 Zw 1 s f'w .%d: <=w & & 2 R1 2 R1e w 3w &3R1ew .even w Jw X r i& & 2 R1ew 4w @ > \&\w 9w 9w V \0> w R19w   cw N w Bcw nR1 9D B(@9 w c%d: w %o =w 4f R1 S$   `# ׭%%.w h p%EWW 7|0HLDLwj0 7h07^07T0DLS 5& W & W- @0        5 4 & W- W+ @0 p `  `Be&    W,& w @V-1 *7,AE -.A*B `w 0 d%d: %d.  w  ..; w  %d.; ,Aw %d. efw f R17w l  &R1 V d=7 Bw L (ww f!ww & 58,Aw v,A7 0005E  5@,A-/0A-/ 2A/2Aw h 7`/ W(  w 4E8/U/ -A E7Zl2A  Ý"T2fw n   g w Z `W*  Zw  V7 fr"TCCLw 7 S" /@/-.  ׭4" e5.)׭"%W/ W, 6,w/ʋ,  wFw w w R17w w-l.#R1 `.w .=.+%d. .text w @. w .=.+%d. .text  @" w l.=.+%d. `` &w J%o  e "7 w @ w l "4,f Aɋ ɋ V%ы  -&@ A    ,AJ  - Aif w  w =@w "AR \! b  AX!p! @ w w : /,w &B . ׭ .   w ^!W A w d A ** _Unknown diagnostic/usr/fort/errorsf CL0W p C`&f@w ;@w  ;Zw  ;A@w ;ыBw <$>  e07K* F*7C* 'f@h$ w W,w  W) CLJ)" 7 W =w CL@h$x"""",#(w  w w .CL w W. Bw Z$9R0Wh1 h$+ w CL  & Rw J7 3ҕ  Uw w w $ @h$ w  WeWd W+W-w WeRRw &@h$ CL@h$   &Bw @pG  ,(et#7( Lb#e,A7 X#.$ Symbol table overflow W+W- w  ` .false..true.**/*-+.lt..le..eq..ne..gt..ge..not..and..or.(),=5,A w && a 3\XM,A58,AU,A pG ЋeCLfw  r f w e07(M @ x%J7 ' 7 = 0 p `e07'   d s ' ".7'ef D 7 'UW A Ufh r e0c r e0ce0#7 T' h5 fW = @h$h$$ N @0p `7'ѕh  7& UW A &hW Aw Jww :=-&w .,'w &( %f w )=@&  ( ) Ћ T&7N& B  8 &75& 0&% %  "(&7% w 47E    7  c     EOF on input &f&DՋ EW %w 9N s c  d0 o( nw 9 ~Cw CL n@ w 9 X@w 9@w 9 < 2  rf e0w |9AW  eaAfEL)w %c%c%dw ?irlc??gw   w  w 7$w .rDN= -Aw  Ef,AE .A&Pp  @<*w .L/wHw @L/&w L/7<w L/70=w L/ E >** Temp file? f.tmp1f.tmp2-#w 2w RfA=w FdA=5,A w CLw *  !,&E3\*,A E3*.Aabsiabsdabsaintintidintamodmodamax0amax1max0max1dmax1amin0amin1min0min1dmin1floatifixsignisigndsigndimidimsnglrealdrealaimagdimagdblecmplxdcmplxconjgdconjgexpdexpcexpdcexpalogdlogclogdclogalog10dlog10sindsincsindcsincosdcosccosdccostanhsqrtdsqrtcsqrtdcsqrtatandatanatan2datan2dmodcabsdcabs"D" @"" D" D "D"Bbb$&Hf"Df"Df"D"Df"Df""Df"D"DDb,AE w  f& .Aw   w  f@qDaRqw ( $ w  "w | %w nŜ-ADq@fA7. fA @e71@.  1 @ fA7~.  fA & 9 &fA @e&7JwF@@.f&55 .b  wX .P l.H E ` s qDD`fD @ `    D D  D&` f@Df@D@ www X&w LUw w&w w unix_v4/usr/adm/0000755000175000017500000000000001026347440012110 5ustar aapaapunix_v4/usr/tmp/0000777000175000017500000000000001026347440012153 5ustar aapaapunix_v4/usr/sno/0000755000175000017500000000000001026347440012146 5ustar aapaapunix_v4/usr/sno/sno.h0000644000175000017500000000052201026347440013115 0ustar aapaapstruct node ( struct node *p1; struct node *p2; char typ; char ch; ); int freesize; struct node *lookf; struct node *looks; struct node *lookend; struct node *lookstart; struct node *lookdef; struct node *lookret; struct node *lookfret; int cfail; int rfail; struct node *freelist; struct node *namelist; int lc; struct node *schar; unix_v4/usr/sno/sno2.c0000644000175000017500000001705301026347440013201 0ustar aapaap#include "sno.h" compon() { register struct node *a, *b; register int c; static next; if (next == 0) schar = getc(); else next = 0; if (schar == 0) { (a=alloc())->typ = 0; return(a); } switch (class(schar->ch)) { case 1: schar->typ = 5; return(schar); case 2: schar->typ = 16; return(schar); case 3: a = schar; for(;;) { schar = getc(); if (schar == 0) { a->typ = 0; return(a); } if (class(schar->ch) != 3) break; free(schar); } next = 1; a->typ = 7; return(a); case 4: schar->typ = 8; return(schar); case 5: schar->typ = 9; return(schar); case 6: a = schar; schar = getc(); if (class(schar->ch) == 3) a->typ = 10; else a->typ = 1; next = 1; return(a); case 7: a = schar; schar = getc(); if (class(schar->ch) == 3) a->typ = 11; else a->typ = 2; next = 1; return(a); case 8: schar->typ = 12; return(schar); case 9: c = schar->ch; a = getc(); if(a == 0) goto lerr; b = schar; if(a->ch == c) { free(schar); a->typ = 15; a->p1 = 0; return(a); } b->p1 = a; for(;;) { schar = getc(); if (schar == 0) lerr: writes("illegal literal string"); if(schar->ch == c) break; a->p1 = schar; a = schar; } b->p2 = a; schar->typ = 15; schar->p1 = b; return(schar); case 10: schar->typ = 3; return(schar); case 11: schar->typ = 4; return(schar); } b = alloc(); b->p1 = a = schar; schar = getc(); while(schar!=0 & !class(schar->ch)) { a->p1 = schar; a = schar; schar = getc(); } b->p2 = a; next = 1; a = look(b); delete(b); b = alloc(); b->typ = 14; b->p1 = a; return(b); } nscomp() { register struct node *c; while((c=compon())->typ == 7) free(c); return(c); } push(stack) { register struct node *a; (a=alloc())->p2 = stack; return(a); } pop(stack) struct node *stack; { register struct node *a, *s; s = stack; if (s == 0) writes("pop"); a = s->p2; free(s); return(a); } expr(start, eof, e) struct node *e; { register struct node *stack, *list, *comp; int operand, op, space, op1; struct node *a, *b, *c; int d; list = alloc(); e->p2 = list; stack = push(0); stack->typ = eof; operand = 0; space = start; l1: if (space) { comp = space; space = 0; } else comp = compon(); l3: op = comp->typ; switch (op) { case 7: space = 1; free(comp); comp = compon(); goto l3; case 10: if (space == 0) { comp->typ = 1; goto l3; } case 11: if (space == 0) { comp->typ = 2; goto l3; } case 8: case 9: if (operand == 0) writes("no operand preceding operator"); operand = 0; goto l5; case 14: case 15: if (operand == 0) { operand = 1; goto l5; } if (space == 0) goto l7; goto l4; case 12: if (operand == 0) goto l5; if (space) goto l4; l7: writes("illegal juxtaposition of operands"); case 16: if (operand == 0) goto l5; if (space) goto l4; b = compon(); op = comp->typ = 13; if (b->typ == 5) { comp->p1 = 0; goto l10; } comp->p1 = a = alloc(); b = expr(b, 6, a); while((d=b->typ) == 4) { a->p1 = b; a = b; b = expr(0, 6, a); } if (d != 5) writes("error in function"); a->p1 = 0; l10: free(b); goto l6; l4: space = comp; op = 7; operand = 0; goto l6; } if (operand==0) writes("no operand at end of expression"); l5: space = 0; l6: op1 = stack->typ; if (op > op1) { stack = push(stack); if (op == 16) op = 6; stack->typ = op; stack->p1 = comp; goto l1; } c = stack->p1; stack = pop(stack); if (stack == 0) { list->typ = 0; return(comp); } if (op1 == 6) { if (op != 5) writes("too many ('s"); goto l1; } if (op1 == 7) c = alloc(); list->typ = op1; list->p2 = c->p1; list->p1 = c; list = c; goto l6; } match(start, m) struct node *m; { register struct node *list, *comp, *term; struct node *a; int b, bal; term = bal = 0; list = alloc(); m->p2 = list; comp = start; if (!comp) comp = compon(); goto l2; l3: list->p1 = a = alloc(); list = a; l2: switch (comp->typ) { case 7: free(comp); comp = compon(); goto l2; case 12: case 14: case 15: case 16: term = 0; comp = expr(comp, 6, list); list->typ = 1; goto l3; case 1: free(comp); comp = compon(); bal = 0; if (comp->typ == 16) { bal = 1; free(comp); comp = compon(); } a = alloc(); b = comp->typ; if (b == 2 | b == 5 | b == 10 | b == 1) a->p1 = 0; else { comp = expr(comp, 11, a); a->p1 = a->p2; } if (comp->typ != 2) { a->p2 = 0; } else { free(comp); comp = expr(0, 6, a); } if (bal) { if (comp->typ != 5) goto merr; free(comp); comp = compon(); } b = comp->typ; if (b != 1 & b != 10) goto merr; list->p2 = a; list->typ = 2; a->typ = bal; free(comp); comp = compon(); if(bal) term = 0; else term = list; goto l3; } if(term) term->typ = 3; list->typ = 0; return(comp); merr: writes("unrecognized component in match"); } compile() { register struct node *b, *comp; struct node *r, *l, *xs, *xf, *g; register int a; int m, t, as; m = l = as = xs = xf = t = 0; comp = compon(); a = comp->typ; if (a == 14) { l = comp->p1; free(comp); comp = compon(); a = comp->typ; } if (a != 7) writes("no space beginning statement"); free(comp); if (l == lookdef) goto def; comp = expr(0, 11, r=alloc()); a = comp->typ; if (a == 0) goto asmble; if (a == 2) goto xfer; if (a == 3) goto assig; m = alloc(); comp = match(comp, m); a = comp->typ; if (a == 0) goto asmble; if (a == 2) goto xfer; if (a == 3) goto assig; writes("unrecognized component in match"); assig: free(comp); comp = expr(0, 6, as=alloc()); a = comp->typ; if (a == 0) goto asmble; if (a == 2) goto xfer; writes("unrecognized component in assignment"); xfer: free(comp); comp = compon(); a = comp->typ; if (a == 16) goto xboth; if (a == 0) { if (xs!=0 | xf!=0) goto asmble; goto xerr; } if (a != 14) goto xerr; b = comp->p1; free(comp); if (b == looks) goto xsuc; if (b == lookf) goto xfail; xerr: writes("unrecognized component in goto"); xboth: free(comp); xs = alloc(); xf = alloc(); comp = expr(0, 6, xs); if (comp->typ != 5) goto xerr; xf->p2 = xs->p2; comp = compon(); if (comp->typ != 0) goto xerr; goto asmble; xsuc: if(xs) goto xerr; comp = compon(); if (comp->typ != 16) goto xerr; comp = expr(0, 6, xs=alloc()); if (comp->typ != 5) goto xerr; goto xfer; xfail: if (xf) goto xerr; comp = compon(); if (comp->typ != 16) goto xerr; comp = expr(0, 6, xf=alloc()); if (comp->typ != 5) goto xerr; goto xfer; asmble: if(l) { if (l->typ) writes("name doubly defined"); l->p2 = comp; l->typ = 2; /* type label;*/ } comp->p2 = r; if (m) { t++; r->p1 = m; r = m; } if (as) { t =+ 2; r->p1 = as; r = as; } (g=alloc())->p1 = 0; if (xs) { g->p1 = xs->p2; free(xs); } g->p2 = 0; if (xf) { g->p2 = xf->p2; free(xf); } r->p1 = g; comp->typ = t; comp->ch = lc; return(comp); def: r = nscomp(); if (r->typ != 14) goto derr; l = r->p1; if (l->typ) writes("name doubly defined"); l->typ = 5; /*type function;*/ a = r; l->p2 = a; r = nscomp(); l = r; a->p1 = l; if (r->typ == 0) goto d4; if (r->typ != 16) goto derr; d2: r = nscomp(); if (r->typ != 14) goto derr; a->p2 = r; r->typ = 0; a = r; r = nscomp(); if (r->typ == 4) { free(r); goto d2; } if (r->typ != 5) goto derr; free(r); if ((r=compon())->typ != 0) goto derr; free(r); d4: r = compile(); a->p2 = 0; l->p1 = r; l->p2 = 0; return(r); derr: writes("illegal component in define"); } unix_v4/usr/sno/sno3.c0000644000175000017500000000707401026347440013204 0ustar aapaap#include "sno.h" /* * sno3 */ bextend(str, last) struct node *str, *last; { register struct node *a, *s; register int b; int c, d; s = str; if ((c = s->p1) == 0) goto bad; b = d = 0; a = s->p2; if(a == 0) { a = c; goto eb2; } eb1: if (a == last) goto bad; a = a->p1; eb2: d++; c = class(a->ch); if (c == 1) { /* rp */ if (b == 0) goto bad; b--; goto eb3; } if (c == 2) { /* lp */ b++; goto eb1; } eb3: if (b == 0) { s->p2= a; return(d); } goto eb1; bad: return(0); } ubextend(str, last) struct node *str, *last; { register struct node *a, *b, *s; s = str; a = s->p1; if(a == 0) goto bad; b = s->p2; if(b == 0) goto good; if (b == last) goto bad; a = b->p1; good: s->p2 = a; return(1); bad: return(0); } search(arg, r) struct node *arg, *r; { struct node *list, *back, *str, *etc, *next, *last, *base, *e; register struct node *a, *b, *var; int c, d; a = arg->p2; list = base = alloc(); last = next = 0; goto badv1; badvanc: a = a->p1; if (a->typ == 0) { list->p1 = 0; if (rfail == 1) { a = 0; goto fail; } list = base; if (r == 0) next = last = 0; else { next = r->p1; last = r->p2; } goto adv1; } b = alloc(); list->p1 = b; list = b; badv1: list->p2 = back = alloc(); back->p1 = last; b = a->p2; c = a->typ; list->typ = c; if (c < 2) { back->p2 = eval(b, 1); goto badvanc; } last = list; str = alloc(); etc = alloc(); back->p2 = var = alloc(); var->typ = b->typ; var->p1 = str; var->p2 = etc; e = b->p1; if (e == 0) etc->p1 = 0; else etc->p1 = eval(e, 0); e = b->p2; if (e == 0) etc->p2 = 0; else { e = eval(e, 1); etc->p2 = strbin(e); delete(e); } goto badvanc; retard: a = back->p1; if (a == 0) { rfail = 1; goto fail; } list = a; back = list->p2; var = back->p2; str = var->p1; etc = var->p2; if (etc->p2) goto retard; if (var->typ == 1) { if (bextend(str, last) == 0) goto retard; goto adv0; } if (ubextend(str, last) == 0) goto retard; adv0: a = str->p2; adv01: if (a == last) next = 0; else next = a->p1; advanc: a = list->p1; if (a == 0) { a = alloc(); if (r == 0) { a->p1 = a->p2 = 0; goto fail; } b = r->p1; a->p1 = b; if (next == 0) { a->p2 = r->p2; goto fail; } while(1) { e = b->p1; if (e == next) { a->p2 = b; goto fail; } b = e; } } list = a; adv1: back = list->p2; var = back->p2; d = list->typ; if(d < 2) { if (var == 0) goto advanc; if (next == 0) goto retard; a = next; b = var->p1; e = var->p2; while(1) { if (a->ch != b->ch) goto retard; if (b == e) goto adv01; if (a == last) goto retard; a = a->p1; b = b->p1; } } str = var->p1; etc = var->p2; str->p1 = next; str->p2 = 0; c = etc->p2; if (var->typ == 1) { d = bextend(str, last); if (d == 0) goto retard; if (c == 0) goto adv0; while(1) { c =- d; if (c == 0) goto adv0; if (c < 0) goto retard; d = bextend(str, last); if (d == 0) goto retard; } } if (c == 0) { if(d==3 & next!=0) { str->p2 = last; goto adv0; } goto advanc; } while(c--) if (ubextend(str, last) == 0) goto retard; goto adv0; fail: list = base; goto f1; fadv: free(back); b = list->p1; free(list); if (b == 0) return(a); list = b; f1: back = list->p2; var = back->p2; if (list->typ < 2) { delete(var); goto fadv; } str = var->p1; etc = var->p2; if (a != 0 & etc->p1 != 0) { if (str->p2 == 0) { free(str); str = 0; } assign(etc->p1, copy(str)); } if (str) free(str); free(etc); free(var); goto fadv; } unix_v4/usr/sno/sno1.c0000644000175000017500000001421001026347440013170 0ustar aapaap#include "sno.h" /* * Snobol III */ int freesize; struct node *freespace &end; int *fault -1; mes(s) { sysput(strstr(s)); } init(s, t) { register struct node *a, *b; a = strstr(s); b = look(a); delete(a); b->typ = t; return(b); } main(argc, argv) char *argv[]; { extern fin, fout; register struct node *a, *b, *c; if(argc > 1) { fin = open(argv[1], 0); if(fin < 0) { mes("cannot open input"); exit(); } } fout = dup(1); lookf = init("f", 0); looks = init("s", 0); lookend = init("end", 0); lookstart = init("start", 0); lookdef = init("define", 0); lookret = init("return", 0); lookfret = init("freturn", 0); init("syspit", 3); init("syspot", 4); a = c = compile(); while (lookend->typ != 2) { a->p1 = b = compile(); a = b; } cfail = 1; a->p1 = 0; if (lookstart->typ == 2) c = lookstart->p2; while (c=execute(c)); flush(); } syspit() { extern fin; register struct node *b, *c, *d; int a; if ((a=getchar())=='\n') return(0); b = c = alloc(); while(a != '\n') { c->p1 = d = alloc(); c = d; l: c->ch = a; if(a == '\0') { if(fin) { close(fin); fin = 0; a = getchar(); goto l; } rfail = 1; break; } a = getchar(); } b->p2 = c; if(rfail) { delete(b); b = 0; } return(b); } syspot(string) struct node *string; { register struct node *a, *b, *s; s = string; if (s!=0) { a = s; b = s->p2; while(a != b) { a = a->p1; putchar(a->ch); } } putchar('\n'); } strstr(s) char s[]; { int c; register struct node *e, *f, *d; d = f = alloc(); while ((c = *s++)!='\0') { (e=alloc())->ch = c; f->p1 = e; f = e; } d->p2 = e; return(d); } class(c) { switch (c) { case ')': return(1); case '(': return(2); case '\t': case ' ': return(3); case '+': return(4); case '-': return(5); case '*': return(6); case '/': return(7); case '$': return(8); case '"': case '\'': return(9); case '=': return(10); case ',': return(11); } return(0); } alloc() { register struct node *f; register int i; extern fout; if (freelist==0) { if (--freesize < 20) { if ((i=sbrk(1200)) == -1) { flush(); write (fout, "Out of free space\n", 18); exit(); } freesize =+ 200; } return(freespace++); } f = freelist; freelist = freelist->p1; return(f); } free(pointer) struct node *pointer; { pointer->p1 = freelist; freelist = pointer; } nfree() { register int i; register struct node *a; i = freesize; a = freelist; while(a) { a = a->p1; i++; } return(i); } look(string) struct node *string; { register struct node *i, *j, *k; k = 0; i = namelist; while (i) { j = i->p1; if (equal(j->p1, string) == 0) return(j); i = (k=i)->p2; } i = alloc(); i->p2 = 0; if (k) k->p2 = i; else namelist = i; j = alloc(); i->p1 = j; j->p1 = copy(string); j->p2 = 0; j->typ = 0; return(j); } copy(string) struct node *string; { register struct node *j, *l, *m; struct node *i, *k; if (string == 0) return(0); i = l = alloc(); j = string; k = string->p2; while(j != k) { m = alloc(); m->ch = (j=j->p1)->ch; l->p1 = m; l = m; } i->p2 = l; return(i); } equal(string1, string2) struct node *string1, *string2; { register struct node *i, *j, *k; struct node *l; int n, m; if (string1==0) { if (string2==0) return(0); return(-1); } if (string2==0) return(1); i = string1; j = string1->p2; k = string2; l = string2->p2; for(;;) { m = (i=i->p1)->ch; n = (k=k->p1)->ch; if (m>n) return(1); if (mp1; q = s->p2; sign = 1; if (class(p->ch)==5) { /* minus */ sign = -1; if (p==q) return(0); p = p->p1; } loop: m = p->ch - '0'; if (m>9 | m<0) writes("bad integer string"); n = n * 10 + m; if (p==q) return(n*sign); p = p->p1; goto loop; } binstr(binary) { int n, sign; register struct node *m, *p, *q; n = binary; p = alloc(); q = alloc(); sign = 1; if (binary<0) { sign = -1; n = -binary; } p->p2 = q; loop: q->ch = n%10+'0'; n = n / 10; if (n==0) { if (sign<0) { m = alloc(); m->p1 = q; q = m; q->ch = '-'; } p->p1 = q; return(p); } m = alloc(); m->p1 = q; q = m; goto loop; } add(string1, string2) { return(binstr(strbin(string1) + strbin(string2))); } sub(string1, string2) { return(binstr(strbin(string1) - strbin(string2))); } mult(string1, string2) { return(binstr(strbin(string1) * strbin(string2))); } div(string1, string2) { return(binstr(strbin(string1) / strbin(string2))); } cat(string1, string2) struct node *string1, *string2; { register struct node *a, *b; if (string1==0) return(copy(string2)); if (string2==0) return(copy(string1)); a = copy(string1); b = copy(string2); a->p2->p1 = b->p1; a->p2 = b->p2; free(b); return(a); } dcat(a,b) struct node *a, *b; { register struct node *c; c = cat(a,b); delete(a); delete(b); return(c); } delete(string) struct node *string; { register struct node *a, *b, *c; if (string==0) return; a = string; b = string->p2; while(a != b) { c = a->p1; free(a); a = c; } free(a); } sysput(string) { syspot(string); delete(string); } dump() { dump1(namelist); } dump1(base) struct node *base; { register struct node *b, *c, *e; struct node *d; while (base) { b = base->p1; c = binstr(b->typ); d = strstr(" "); e = dcat(c, d); sysput(cat(e, b->p1)); delete(e); if (b->typ==1) { c = strstr(" "); sysput(cat(c, b->p2)); delete(c); } base = base->p2; } } writes(s) { sysput(dcat(binstr(lc),dcat(strstr("\t"),strstr(s)))); flush(); if (cfail) { dump(); flush(); exit(); } while(getc()); while (compile()); flush(); exit(); } getc() { register struct node *a; static struct node *line; static linflg; while (line==0) { line = syspit(); if(rfail) { cfail++; writes("eof on input"); } lc++; } if (linflg) { line = 0; linflg = 0; return(0); } a = line->p1; if (a==line->p2) { free(line); linflg++; } else line->p1 = a->p1; return(a); } unix_v4/usr/sno/sno4.c0000644000175000017500000001012001026347440013167 0ustar aapaap#include "sno.h" /* * sno4 */ and(ptr) struct node *ptr; { register struct node *a, *p; p = ptr; a = p->p1; if (p->typ == 0) { switch (a->typ) { case0: case 0: a->typ = 1; case 1: goto l1; case 3: flush(); return(syspit()); case 5: a = a->p2->p1; goto l1; case 6: return(binstr(nfree())); } writes("attempt to take an illegal value"); goto case0; l1: a = copy(a->p2); } return(a); } eval(e, t) struct node *e; { struct node *list, *a2, *a3, *a4, *a3base; register struct node *a1, *stack, *op; if (rfail == 1) return(0); stack = 0; list = e; goto l1; advanc: list = list->p1; l1: op = list->typ; switch (op) { default: case 0: if (t == 1) { a1 = and(stack); goto e1; } if (stack->typ == 1) writes("attempt to store in a value"); a1 = stack->p1; e1: stack = pop(stack); if (stack) writes("phase error"); return(a1); case 12: a1 = and(stack); stack->p1 = look(a1); delete(a1); stack->typ = 0; goto advanc; case 13: if (stack->typ) writes("illegal function"); a1 = stack->p1; if (a1->typ!=5) writes("illegal function"); a1 = a1->p2; op = a1->p1; a3base = a3 = alloc(); a3->p2 = op->p2; op->p2 = 0; a1 = a1->p2; a2 = list->p2; f1: if (a1!=0 & a2!=0) goto f2; if (a1!=a2) writes("parameters do not match"); op = op->p1; goto f3; f2: a3->p1 = a4 = alloc(); a3 = a4; a3->p2 = and(a1); assign(a1->p1, eval(a2->p2, 1));/* recursive */ a1 = a1->p2; a2 = a2->p1; goto f1; f3: op = execute(op); /* recursive */ if (op) goto f3; a1 = stack->p1->p2; op = a1->p1; a3 = a3base; stack->p1 = op->p2; stack->typ = 1; op->p2 = a3->p2; f4: a4 = a3->p1; free(a3); a3 = a4; a1 = a1->p2; if (a1 == 0) goto advanc; assign(a1->p1, a3->p2); goto f4; case 11: case 10: case 9: case 8: case 7: a1 = and(stack); stack = pop(stack); a2 = and(stack); a3 = doop(op, a2, a1); delete(a1); delete(a2); stack->p1 = a3; stack->typ = 1; goto advanc; case 15: a1 = copy(list->p2); a2 = 1; goto l3; case 14: a1 = list->p2; a2 = 0; l3: stack = push(stack); stack->p1 = a1; stack->typ = a2; goto advanc; } } doop(op, arg1, arg2) { register int a1, a2; a1 = arg1; a2 = arg2; switch (op) { case 11: return(div(a1, a2)); case 10: return(mult(a1, a2)); case 8: return(add(a1, a2)); case 9: return(sub(a1, a2)); case 7: return(cat(a1, a2)); } return(0); } execute(e) struct node *e; { register struct node *r, *b, *c; struct node *m, *ca, *d, *a; r = e->p2; lc = e->ch; switch (e->typ) { case 0: /* r g */ a = r->p1; delete(eval(r->p2, 1)); goto xsuc; case 1: /* r m g */ m = r->p1; a = m->p1; b = eval(r->p2, 1); c = search(m, b); delete(b); if (c == 0) goto xfail; free(c); goto xsuc; case 2: /* r a g */ ca = r->p1; a = ca->p1; b = eval(r->p2, 0); assign(b, eval(ca->p2, 1)); goto xsuc; case 3: /* r m a g */ m = r->p1; ca = m->p1; a = ca->p1; b = eval(r->p2, 0); d = search(m, b->p2); if (d == 0) goto xfail; c = eval(ca->p2, 1); if (d->p1 == 0) { free(d); assign(b, cat(c, b->p2)); delete(c); goto xsuc; } if (d->p2 == b->p2->p2) { assign(b, c); free(d); goto xsuc; } (r=alloc())->p1 = d->p2->p1; r->p2 = b->p2->p2; assign(b, cat(c, r)); free(d); free(r); delete(c); goto xsuc; } xsuc: if (rfail) goto xfail; b = a->p1; goto xboth; xfail: rfail = 0; b = a->p2; xboth: if (b == 0) { return(e->p1); } b = eval(b, 0); if (b == lookret) return(0); if (b == lookfret) { rfail = 1; return(0); } if (b->typ!=2) writes("attempt to transfer to non-label"); return(b->p2); } assign(adr, val) struct node *adr, *val; { register struct node *a, *addr, *value; addr = adr; value = val; if (rfail == 1) { delete(value); return; } switch (addr->typ) { default: writes("attempt to make an illegal assignment"); case 0: addr->typ = 1; case 1: delete(addr->p2); addr->p2 = value; return; case 4: sysput(value); return; case 5: a = addr->p2->p1; delete(a->p2); a->p2 = value; return; } } unix_v4/usr/source/0000755000175000017500000000000001026347440012647 5ustar aapaapunix_v4/usr/source/s2/0000755000175000017500000000000001026347440013173 5ustar aapaapunix_v4/usr/source/s2/sa.c0000644000175000017500000001333301026347440013745 0ustar aapaap#define size 1000 /* interpret command time accounting */ int lflg; int cflg; int jflg; int nflg; int aflg; int rflg; int tflg; int vflg; int uflg; int thres 1; int sflg; int bflg; int fout; struct tab { char name[8]; int count; float realt; float cput; float syst; } tab[size]; struct ftab { char fname[8]; char fill1[4]; char fill2; char uid; int frealt; int fcput; int fsyst; }; float treal; float tcpu; float tsys; int junkp -1; char *sname; float ncom; main(argc, argv) char **argv; { int i, j, k; extern tcmp(), ncmp(), bcmp(); extern float sum(); float ft; init(); if (argc>1) if (argv[1][0]=='-') { argv++; argc--; for(i=1; argv[0][i]; i++) switch(argv[0][i]) { 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; } } fout = dup(1); if (argc<2) acct("/usr/adm/sh_acct"); else while (--argc) acct(*++argv); if (uflg) { flush(); return; } /* * cleanup pass * put junk together */ if (vflg) strip(); if(!aflg) for (i=0; i= 0200)) *cp = '?'; } if (uflg) { printf("%3d %.8s\n", fbuf.uid, fbuf.name); continue; } ncom =+ 1.0; i = enter(&fbuf); tab[i].count++; x = fbuf.frealt; if (x<0.) x =+ 65536.; x =* 60.; tab[i].realt =+ x; treal =+ x; x = fbuf.fcput; if (x<0.) x =+ 65536.; tab[i].cput =+ x; tcpu =+ x; x = fbuf.fsyst; if (x<0.) x =+ 65536.; tab[i].syst =+ x; tsys =+ x; } close(ff); } ncmp(p1, p2) struct tab *p1, *p2; { if(p1->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, j, f; if ((f=open("/usr/adm/sht_acct", 0))<0) return; while (read(f, &tbuf, 22) == 22) { i = enter(&tbuf); 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; } close(f); } enter(fbuf) struct ftab *fbuf; { int i, j; i = 0; for (j=0; j<8; j++) { i = i*7 + fbuf->fname[j]; } if(i < 0) i = -i; for (i=%size; tab[i].name[0]; i = (i+1)%size) { for (j=0; j<8; j++) if (tab[i].name[j]!=fbuf->fname[j]) goto no; goto yes; no:; } for (j=0; j<8; j++) tab[i].name[j] = fbuf->fname[j]; yes: return(i); } strip() { int i, j, k, c; j = enter("**junk**"); for (i = 0; i argm: eargm: film: efilm: .data < > / is ltty -1 ltty: .=.+1 .text excl: qnl: <...\n> .data ttyx: ttyno = .-2 .text utmp: endmsg: eendmsg: errmsg: < not logged in.\n> eerrmsg: mesg: <\nMessage from > emesg: dnymes: ednymes: .even .bss ttyf: .=.+2 ubuf: .=.+16. statbuf:.=.+40. ch: .=.+2 ufil: .=.+2 signal = 48. unix_v4/usr/source/s2/update.s0000644000175000017500000000013701026347440014642 0ustar aapaap sys fork br 1f sys exit 1: sys sync mov $30.,r0 sys sleep br 1b sleep = 35. sync = 36. unix_v4/usr/source/s2/ps.c0000644000175000017500000000530301026347440013762 0ustar aapaap# #include "/usr/sys/param.h" #include "/usr/sys/proc.h" #include "/usr/sys/tty.h" #include "/usr/sys/user.h" #define NDC11 10 #define NKL11 4 #define NDH11 16 struct { char name[8]; int type; char *value; } nl[5]; struct proc proc[1]; struct user u; int lflg; int kflg; int xflg; int tflg; int aflg; int mem; int swap; int stbuf[257]; char *coref; main(argc, argv) char **argv; { struct proc *p; int n, b; int i, c, mtty; char *ap; int hmem; if (argc>1) { ap = argv[1]; while (*ap) switch (*ap++) { case 'a': aflg++; break; case 't': tflg++; break; case 'x': xflg++; break; case 'l': lflg++; break; case 'k': kflg++; break; } } setup(&nl[0], "_proc"); setup(&nl[1], "_dc11"); setup(&nl[2], "_kl11"); setup(&nl[3], "_dh11"); nlist("/unix", nl); if (nl[0].type==0) { printf("No namelist\n"); return; } coref = "/dev/mem"; if(kflg) coref = "/dev/rk0"; if ((hmem = open(coref, 0)) < 0) { printf("No mem\n"); return; } mem = open(coref, 0); swap = open("/dev/rf0", 0); n = &proc[1]; b = &proc; n =- b; seek(hmem, nl[0].value, 0); mtty = ttyn(0); for (i=0; i>3); if (proc[0].p_wchan) printf("%8o", proc[0].p_wchan); else printf(" "); } prcom(); printf("\n"); } } ttyc(p) struct tty *p; { int n; struct { struct tty xdc11[]; }; n = p - nl[1].value->xdc11; if (n>=0 && nxdc11; if(n>=0 && nxdc11; if(n>=0 && n>3; laddr = (laddr&07)<<6; seek(mf, baddr, 3); seek(mf, laddr, 1); if (read(mf, stbuf, 512) != 512) return(0); for (ip = &stbuf[256]; ip > &stbuf[0];) { if (*--ip == -1) { cp = ip+1; if (*cp==0) cp++; for (cp1 = cp; cp1 < &stbuf[256]; cp1++) { c = *cp1; if (c==0) *cp1 = ' '; else if (c < ' ' || c > 0176) *cp1 = '?'; } printf(" %.32s ", cp); return(1); } } return(0); } unix_v4/usr/source/s2/stty.c0000644000175000017500000000175601026347440014353 0ustar aapaapchar *arg; int mode[3]; main(argc, argv) char *argv[]; { int i; gtty(1,mode); while(--argc > 0) { arg = *++argv; if(eq("even")) set(0200); if(eq("-even")) reset(0200); if(eq("odd")) set(0100); if(eq("-odd")) reset(0100); if(eq("raw")) set(040); if(eq("-raw") || eq("cooked")) reset(040); if(eq("-nl")) set(020); if(eq("nl")) reset(020); if(eq("echo")) set(010); if(eq("-echo")) reset(010); if(eq("lcase")) set(04); if(eq("-lcase")) reset(04); if(eq("-tabs")) set(02); if(eq("tabs")) reset(02); if(eq("-delay")) set(01); if(eq("delay")) reset(01); if(eq("tdelay")) reset(010000); if(eq("-tdelay")) set(010000); if(arg) printf("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); } set(b) { mode[2] =| b; } reset(b) { mode[2] =& ~b; } unix_v4/usr/source/s2/rew.s0000644000175000017500000000070301026347440014154 0ustar aapaap/ rew -- rewind dec/mag tape cmp (sp)+,$2 blt 1f tst (sp)+ mov (sp)+,r0 movb (r0)+,r1 cmp r1,$'m beq rewm movb r1,tapx+8 tstb (r0) bne error 1: sys open; tapx; 0 br rew rewm: movb (r0)+,r1 beq 1f movb r1,mtx+7 tstb (r0) bne error 1: sys open; mtx; 0 rew: bes error sys read; word; 2 bes error sys exit error: mov $1,r0 sys write; 0f; 2 sys exit 0: tapx: mtx: .even .bss word: .=.+2 unix_v4/usr/source/s2/sync.c0000644000175000017500000000002501026347440014310 0ustar aapaapmain() { sync(); } unix_v4/usr/source/s2/od.c0000644000175000017500000001576501026347440013757 0ustar aapaapint word[16]; char gbuf[512]; int fi; int conv; int base 010; int basem 01000; int max; int gidx; int gcnt; int eof; int addr[2]; int from[2]; int key; int flag; int nword 8; main(argc, argv) char **argv; { extern fout; int f, k, w, i, a[2]; char *p; fout = dup(1); argv++; if(argc > 1) { p = *argv; if(*p == '-') { while((i = *p++) != '\0') { switch(i) { case 'o': conv =| 001; f = 6; break; case 'd': conv =| 002; f = 5; break; case 'a': conv =| 004; f = 4; break; case 'h': conv =| 010; f = 4; break; case 'c': conv =| 020; f = 5; 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 != '+') { fi = open(*argv, 0); if(fi < 0) { printf("cannot open %s\n", *argv); goto done; } argv++; argc--; } if(argc > 1) offset(*argv); loop: f = 1; a[0] = addr[0]; a[1] = addr[1]; for(i=0; i>8); break; case 040: pre(7); putn(n&0377, 8, 3); putchar(' '); putn((n>>8)&0377, 8, 3); break; } } getw() { int b1, b2; b1 = getc(); if(b1 == -1) { eof = 1; return(0); } b2 = getc(); if(b2 == -1) b2 = 0; return(b1|(b2<<8)); } getc() { if(gidx >= gcnt) { gcnt = read(fi, gbuf, 512); if(gcnt <= 0) return(-1); gidx = 0; } if(++addr[1] >= basem) { addr[0]++; addr[1] = 0; } return(gbuf[gidx++]&0377); } putc(c) { c =& 0377; if(c>037 && c<0177 && c!='\\') { putchar(' '); putchar(c); return; } putchar('\\'); switch(c) { case '\0': putchar('0'); break; case '\n': putchar('n'); break; case '\\': putchar('\\'); break; case '\t': putchar('t'); break; default: putchar('?'); } } putn(n, b, c) { if(!c) return; putn(ldiv(0,n,b),b,c-1); if((n=lrem(0,n,b)) > 9) putchar(n-10+'a'); else putchar(n+'0'); } pre(n) { int i; for(i=n; i 0) if(p[-2] == 'b') { i--; b++; p--; } if(i > 0) if(p[-2] == '.') { i--; base = 10; basem = 1000; } a[0] = 0; for(j=0; i-j>3; j++) { d = s[j]; if(d>='0' && d<='9') a[0] = a[0]*base + d-'0'; } a[1] = 0; for(; i-j>0; j++) { d = s[j]; if(d>='0' && d<='9') a[1] = a[1]*base + d-'0'; } if(b) { i = a[0]*basem+a[1]; a[0] = 0; a[1] = 0; while(i--) { a[1] =+ 512; while(a[1] >= basem) { a[1] =- basem; a[0]++; } } } i = 0; while(a[0] > addr[0]+1) { addr[1] =+ 512; while(addr[1] >= basem) { addr[1] =- basem; addr[0]++; } i++; } seek(fi, i, 3); while(a[0]!=addr[0] || a[1]!=addr[1]) if(getc() == -1) break; } putop(n) { char *p; int i, c; p = getop(n); for(i=0; (c = *p++) != '\0'; i++) putchar(c); for(; i<4; i++) putchar(' '); } getop(n) { switch(n&0170000) { case 0000000: switch(n&0177000) { case 0004000: return("jsr"); case 0077000: return("sob"); } switch(n&0177400) { case 0000400: return("br"); case 0001000: return("bne"); case 0001400: return("beq"); case 0002000: return("bge"); case 0002400: return("blt"); case 0003000: return("bgt"); case 0003400: return("ble"); } switch(n&0177700) { case 0000100: return("jmp"); case 0000300: return("swab"); case 0005000: return("clr"); case 0005100: return("com"); case 0005200: return("inc"); case 0005300: return("dec"); case 0005400: return("neg"); case 0005500: return("adc"); case 0005600: return("sbc"); case 0005700: return("tst"); case 0006000: return("ror"); case 0006100: return("rol"); case 0006200: return("asr"); case 0006300: return("asl"); case 0006400: return("mark"); case 0006500: return("mfpi"); case 0006600: return("mtpi"); case 0006700: return("sxt"); } switch(n&0177740) { case 0000240: return("flag"); } switch(n&0177770) { case 0000200: return("rts"); case 0000230: return("spl"); } switch(n&0177777) { case 0000000: return("halt"); case 0000001: return("wait"); case 0000002: return("rti"); case 0000003: return("bpt"); case 0000004: return("iot"); case 0000005: return("rset"); case 0000006: return("rtt"); } break; case 0010000: return("mov "); case 0020000: return("cmp"); case 0030000: return("bit"); case 0040000: return("bic"); case 0050000: return("bis"); case 0060000: return("add"); case 0070000: switch(n&0177000) { case 0070000: return("mul"); case 0071000: return("div"); case 0072000: return("ash"); case 0073000: return("ashc"); case 0074000: return("xor"); } break; case 0100000: switch(n&0177400) { case 0100000: return("bpl"); case 0100400: return("bmi"); case 0101000: return("bhi"); case 0101400: return("blos"); case 0102000: return("bvc"); case 0102400: return("bvs"); case 0103000: return("bhis"); case 0103400: return("blo"); case 0104000: return("emt"); case 0104400: return("sys"); } switch(n&0177700) { case 0105000: return("clrb"); case 0105100: return("comb"); case 0105200: return("incb"); case 0105300: return("decb"); case 0105400: return("negb"); case 0105500: return("adcb"); case 0105600: return("sbcb"); case 0105700: return("tstb"); case 0106000: return("rorb"); case 0106100: return("rolb"); case 0106200: return("asrb"); case 0106300: return("aslb"); case 0106500: return("mfpd"); case 0106600: return("mfpd"); } break; case 0110000: return("movb"); case 0120000: return("cmpb"); case 0130000: return("bitb"); case 0140000: return("bicb"); case 0150000: return("bisb"); case 0160000: return("sub"); case 0170000: switch(n&01777000) { case 0:0; } break; } return("???"); } unix_v4/usr/source/s2/size.c0000644000175000017500000000106401026347440014312 0ustar aapaap/* size -- determine object size */ main(argc, argv) char **argv; { int buf[010], f, ac, sum; ac = argc; if (ac==1) { *argv = "a.out"; ac++; --argv; } while(--ac) { ++argv; if((f=open(*argv, 0))<0) { printf("%s not found\n", *argv); continue; } read(f, buf, 0020); if(buf[0]!=0410 && buf[0]!=0407) { printf("Bad format: %s\n", *argv); close(f); continue; } if (argc>2) printf("%s: ", *argv); printf("%l+%l+%l=", buf[1],buf[2],buf[3]); sum = buf[1]+buf[2]+buf[3]; printf("%l (%o)\n", sum, sum); close(f); } } unix_v4/usr/source/s2/mv.c0000644000175000017500000000564601026347440013774 0ustar aapaap/* mv [-d] file1 file2 unlink file2 link file1 file2 unlink file1 */ int stbuf[42]; struct sbuf { int dev; int inum; int imode; char nlink; char uid; char gid; char siz0; char siz1; int addr[8]; int adate[2]; int mdate[2]; }; char strbuf[70]; main(argc,argv) int argc; char *argv[]; { char **argp; char *argp1, *argp2, *argp3, *argp4; char *p, *p1, *p2; char place[100]; int i; int status; int b; argp = argv; /* check for correct number of arguments */ if(argc != 3){ write(1,"Usage: mv name1 name2\n",22); exit(); } /* is there anything to do? */ argp3 = argp[1]; argp4 = argp[2]; if(stat(argp[1], stbuf) < 0){ write(1,"Source file non-existent\n",25); exit(); } /* yes, there is a source. check whether file or directory */ if((stbuf[0].imode & 060000) == 040000){ /* The source is a directory, so we do lots of checking and messing around so as not to get into trouble. This patch of code contains administrative policies rather than system restrictions. */ if(stat(argp[2], stbuf) >= 0){ write(1,"Directory target exists.\n",25); exit(); } argp1 = argp[1]; argp2 = argp[2]; while(*argp1 == *argp2){ argp1++; if(*argp2++ == 0){ write(1,"???\n",4); exit(); } } while(*argp1)if(*argp1++ == '/'){ write(1,"Directory rename only\n",22); exit(); } while(*argp2)if(*argp2++ == '/'){ write(1,"Directory rename only\n",22); exit(); } if(*--argp1 == '.'){ write(1,"values of B will give rise to dom!\n",37); exit(); } }else{ /* the source is a file. */ setuid(getuid()); if(stat(argp4, &stbuf[2]) >= 0){ if((stbuf[2].imode & 060000) == 040000){ argp2 = strbuf; while(*argp2++ = *argp4++); argp2[-1] = '/'; argp4 = argp[1]; argp1 = argp[1]; while(*argp4) if(*argp4++ == '/') argp1 = argp4; while(*argp2++ = *argp1++); argp4 = strbuf; } if(stat(argp4, &stbuf[2]) >= 0){ if((stbuf[0]==stbuf[2]) && (stbuf[1]==stbuf[3])){ write(1,"Files are identical.\n",21); exit(); } if(getuid() == stbuf[2].uid) b = 0200; else if(getgid() == stbuf[2].gid) b = 020; else b = 02; if((stbuf[2].imode & b) == 0) { printf("%s: %o mode ", argp4, stbuf[2].imode & 07777); i = b = getchar(); while(b != '\n' && b != '\0') b = getchar(); if(i != 'y') exit(); } if(unlink(argp4) < 0){ write(1,"Cannot remove target file.\n",27); exit(); } } } } if(link(argp3, argp4) < 0){ i = fork(); if(i == -1){ write(1,"Try again.\n",11); exit(); } if(i){ while(wait(&status) != i); }else{ p = place; p1 = p; while(*p++ = *argp3++); p2 = p; while(*p++ = *argp4++); execl("/bin/cp","cp", p1, p2, 0); write(1, "no cp\n", 6); exit(1); } if((status & 0377) != 0){ write(1,"?\n", 2); exit(); } if(status != 0) exit(); } if(unlink(argp3) < 0){ write(1,"Cannot unlink source file.\n",26); exit(); } } putchar(c) { write(1, &c, 1); } getchar() { char c; if(read(0, &c, 1) != 1) return(0); return(c); } unix_v4/usr/source/s2/tp3.s0000644000175000017500000001340201026347440014065 0ustar aapaap/ tap3 -- dec-tape lod/dmp gettape: mov $dir,r1 clr -(sp) 1: tst (r1) beq 2f jsr r5,decode; name cmp rnarg,$2 ble 4f mov $name,r2 mov *parg,r3 3: tstb (r3) beq 3f cmpb (r2)+,(r3)+ beq 3b br 2f 3: tstb (r2) beq 4f cmpb (r2),$'/ bne 2f 4: mov r1,-(sp) jsr pc,*(r5) mov (sp)+,r1 inc (sp) 2: add $dirsiz,r1 cmp r1,edir blo 1b tst (sp)+ bne 2f cmp rnarg,$2 ble 2f mov *parg,r1 jsr pc,pstr jsr r5,mesg < not found\n\0>; .even 2: dec narg add $2,parg cmp narg,$2 bgt gettape tst (r5)+ rts r5 delete: jsr r5,verify; 'd rts pc jsr pc,clrent rts pc numb: mov r1,-(sp) mov r0,-(sp) clr r0 br 1f numbx: mov r1,-(sp) mov r0,-(sp) movb size0(r1),r0 1: mov $catlb,r2 1: mov $" ,(r2)+ cmp r2,$catlb+12. blo 1b cmp (r5),$2 bne 1f mov $"00,-2(r2) 1: mov (sp)+,r1 jsr pc,numb2 mov (r5)+,r0 sub r0,r2 mov r2,0f mov r0,0f+2 mov $1,r0 sys 0; 9f .data 9: sys write; 0:..; .. .text mov (sp)+,r1 rts r5 numb1: clr r0 numb2: div $10.,r0 mov r1,-(sp) mov r0,r1 beq 1f jsr pc,numb1 1: mov (sp)+,r0 add $'0,r0 movb r0,(r2)+ rts pc update: jsr pc,bitmap mov $dir,r1 1: tst (r1) beq 2f bit $100000,mode(r1) beq 2f tstb size0(r1) bne 9f tst size1(r1) beq 2f 9: mov ndentd8,-(sp) inc (sp) movb size0(r1),r2 mov size1(r1),r3 add $511.,r3 adc r2 ashc $-9,r2 mov r3,size 3: mov (sp),r2 mov size,r3 4: jsr pc,bitcalc inc r2 bitb (sp)+,map(r0) bne 4f sob r3,4b mov (sp)+,tapea(r1) jsr pc,setmap br 2f 4: inc (sp) br 3b 2: add $dirsiz,r1 cmp r1,edir blo 1b jsr pc,wrdir update1: mov $dir,r1 clr -(sp) mov $-1,-(sp) 1: tst (r1) beq 2f bit $100000,mode(r1) beq 2f cmp tapea(r1),(sp) bhis 2f mov tapea(r1),(sp) mov r1,2(sp) 2: add $dirsiz,r1 cmp r1,edir blo 1b tst (sp)+ mov (sp)+,r1 bne 1f rts pc 1: bic $100000,mode(r1) movb size0(r1),mss mov size1(r1),r2 bne 4f tst mss beq update1 4: jsr r5,decode; name mov tapea(r1),r0 jsr pc,wseek clr r3 sys open; name; 0 bes phserr mov r0,r3 3: tst mss bne 4f cmp r2,$512. blo 3f 4: mov r3,r0 sys read; tapeb; 512. bes phserr cmp r0,$512. bne phserr jsr pc,twrite sub $512.,r2 sbc mss br 3b 3: mov r2,0f beq 3f mov r3,r0 sys 0; 9f .data 9: sys read; tapeb; 0:.. .text bes phserr cmp r0,0b bne phserr jsr pc,twrite 3: mov r3,r0 sys read; tapeb; 512. bes phserr tst r0 bne phserr mov r3,r0 sys close 2: jmp update1 phserr: mov r1,-(sp) mov $name,r1 jsr pc,pstr jsr r5,mesg < -- Phase error\n\0>; .even mov (sp)+,r1 clr time0(r1) / time beq 2b sys close br 2b bitmap: mov $map,r0 1: clr (r0)+ cmp r0,$emap blo 1b mov $dir,r1 1: tst (r1) beq 2f bit $100000,mode(r1) bne 2f tst size1(r1) bne 3f tstb size0(r1) beq 2f 3: jsr pc,setmap 2: add $dirsiz,r1 cmp r1,edir blo 1b rts pc setmap: movb size0(r1),r2 mov size1(r1),r3 add $511.,r3 adc r2 ashc $-9.,r2 mov tapea(r1),r2 1: jsr pc,bitcalc bitb (sp),map(r0) bne maperr bisb (sp)+,map(r0) inc r2 sob r3,1b rts pc bitcalc: mov (sp),-(sp) cmp r2,tapsiz bhis maperr mov r2,r0 bic $!7,r0 mov r0,-(sp) mov $1,r0 als (sp)+,r0 mov r0,2(sp) mov r2,r0 ash $-3,r0 bic $160000,r0 rts pc maperr: jsr r5,mesg ; .even jmp done usage: jsr pc,bitmap mov $dir,r2 1: tst (r2) beq 2f inc nentr 2: add $dirsiz,r2 cmp r2,edir blo 1b mov ndentd8,r2 inc r2 mov tapsiz,r3 dec r3 sub ndentd8,r3 1: jsr pc,bitcalc bitb (sp)+,map(r0) beq 2f inc nused mov r2,lused br 3f 2: inc nfree tstb flm bne 1f 3: inc r2 sob r3,1b 1: mov nentr,r0 jsr r5,numb; 4 jsr r5,mesg < entries\n\0>; .even mov nused,r0 jsr r5,numb; 4 jsr r5,mesg < used\n\0>; .even tstb flm bne 1f mov nfree,r0 jsr r5,numb; 4 jsr r5,mesg < free\n\0>; .even 1: mov lused,r0 jsr r5,numb; 4 jsr r5,mesg < last\n\0>; .even rts pc taboc: tstb flv beq 4f mov mode(r1),r0 mov r0,-(sp) ash $-6,r0 bit $40,r0 jsr pc,pmod mov (sp),r0 ash $-3,r0 bit $200,r0 jsr pc,pmod mov (sp)+,r0 bit $1000,r0 jsr pc,pmod clr r0 bisb uid(r1),r0 jsr r5,numb; 4 clr r0 bisb gid(r1),r0 jsr r5,numb; 4 mov tapea(r1),r0 jsr r5,numb; 5 mov size1(r1),r0 jsr r5,numbx; 9. mov r1,-(sp) add $time0,(sp) jsr pc,_localtime mov r0,(sp) mov 10.(r0),r0 jsr r5,numb; 3 mov $'/,r0 jsr pc,putc mov (sp),r0 mov 8.(r0),r0 inc r0 jsr r5,numb; 2 mov $'/,r0 jsr pc,putc mov (sp),r0 mov 6(r0),r0 jsr r5,numb; 2 mov (sp),r0 mov 4(r0),r0 jsr r5,numb; 3 mov $':,r0 jsr pc,putc mov (sp)+,r0 mov 2(r0),r0 jsr r5,numb; 2 mov $' ,r0 jsr pc,putc 4: mov $name,r1 jsr pc,pstr jsr r5,mesg <\n\0> rts pc pmod: beq 1f mov $'s,-(sp) br 2f 1: bit $1,r0 beq 1f mov $'x,-(sp) br 2f 1: mov $'-,-(sp) 2: bit $2,r0 beq 1f mov $'w,-(sp) br 2f 1: mov $'-,-(sp) 2: bit $4,r0 beq 1f mov $'r,r0 br 2f 1: mov $'-,r0 2: jsr pc,putc mov (sp)+,r0 jsr pc,putc mov (sp)+,r0 jsr pc,putc rts pc xtract: movb size0(r1),mss bne 2f tst size1(r1) beq 1f 2: jsr r5,verify; 'x rts pc mov size1(r1),r3 mov tapea(r1),r0 jsr pc,rseek sys unlink; name mov mode(r1),0f sys 0; 9f .data 9: sys creat; name; 0:.. .text bes crterr mov r0,r2 2: tst mss bne 3f cmp r3,$512. blo 2f 3: jsr pc,tread mov r2,r0 sys write; tapeb; 512. bes crterr1 cmp r0,$512. bne crterr1 sub r0,r3 sbc mss br 2b 2: mov r3,0f beq 2f jsr pc,tread mov r2,r0 sys 0; 9f .data 9: sys write; tapeb; 0:.. .text bes crterr1 cmp r0,0b bne crterr1 2: mov r2,r0 sys close movb gid(r1),0f sys 0; 9f .data 9: sys chgrp; name; 0:.. .text movb uid(r1),0f sys 0; 9f .data 9: sys chown; name; 0:.. .text mov time0(r1),r0 mov r1,-(sp) mov time1(r1),r1 sys 0; 9f .data 9: sys smdate; name .text mov (sp)+,r1 1: rts pc crterr1: clr r0 mov r1,-(sp) clr r1 / sys smdate; name mov (sp)+,r1 mov r2,r0 sys close crterr: mov $name,r1 jsr pc,pstr jsr r5,mesg < -- create error\n\0>; .even rts pc unix_v4/usr/source/s2/pr.c0000644000175000017500000001110101026347440013752 0ustar aapaap/* * print file with headings * 2+head+2+page[56]+5 */ int ncol 1; char *header; int col; int icol; int file; char *bufp; int bufs 5120; char buffer[5120]; int line; char *colp[72]; int peekc; int fpage; int page; int colw; int nspace; int width 72; int length 66; int ntflg; char *tty; int mode; struct inode { int dev; int inum; int flags; char nlink; char uid; char gid; char siz0; int size; int ptr[8]; int atime[2]; int mtime[2]; }; main(argc, argv) char **argv; { int nfdone; int onintr(); extern fout; tty = "/dev/ttyx"; fout = dup(1); close(1); if ((signal(2, 1) & 01) == 0) signal(2, onintr); 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 = getn(++*argv); continue; case 'w': width = getn(++*argv); continue; default: ncol = getn(*argv); continue; } } else if (**argv == '+') { fpage = getn(++*argv); } else { print(*argv); nfdone++; } } if (nfdone==0) print(0); flush(); onintr(); } onintr() { chmod(tty, mode); exit(0); } fixtty() { struct inode sbuf; extern fout; tty[8] = ttyn(fout); fstat(fout, &sbuf); mode = sbuf.flags&0777; chmod(tty, 0600); } print(fp) char *fp; { struct inode sbuf; register int sncol, sheader; register char *cbuf; extern fout; if (length <= 10) length = 66; if (width <= 0) width = 72; if (ncol>72 || ncol>width) { write(fout, "Very funny.\n", 12); exit(); } colw = width/ncol; sncol = ncol; sheader = header; if (--ncol<0) ncol = 0; if (fp) { file = open(fp, 0); if (file<0) return; fstat(file, &sbuf); } else { file = 0; time(sbuf.mtime); } if (header == 0) header = fp; cbuf = ctime(sbuf.mtime); cbuf[16] = '\0'; page = 1; icol = 0; colp[ncol] = bufp = buffer; nexbuf(); while (tgetc(ncol)) { colp[ncol]--; if (colp[ncol] < buffer) colp[ncol] = &buffer[bufs]; line = 0; if (ntflg==0) { puts("\n\n"); puts(cbuf+4); puts(" "); puts(header); puts(" Page "); putd(page); puts("\n\n\n"); } putpage(); if (ntflg==0) while(line512) n = 512; if ((n = read(file, rbufp, n)) <= 0) *rbufp = 0376; else { rbufp =+ n; if (rbufp >= &buffer[bufs]) rbufp = buffer; *rbufp = 0375; } bufp = rbufp; } tgetc(ai) { register char **p; register int c, i; i = ai; 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); } getc(i) { register int c; if (peekc) { c = peekc; peekc = 0; } else c = tgetc(i); 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); } puts(as) char *as; { register int c; register char *s; if ((s=as)==0) return; while (c = *s++) put(c); } putd(an) { register int a, n; n = an; if (a = n/10) putd(a); put(n%10 + '0'); } put(ac) { register int ns, c; c = ac; 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); } getn(ap) char *ap; { register int n, c; register char *p; p = ap; n = 0; while ((c = *p++) >= '0' && c <= '9') n = n*10 + c - '0'; return(n); } putcp(c) { if (page >= fpage) putchar(c); } unix_v4/usr/source/s2/sum.s0000644000175000017500000000147101026347440014166 0ustar aapaap/ sum -- check sum file mov (sp)+,r3 tst (sp)+ loop: dec r3 bgt 1f sys exit 1: mov (sp)+,0f sys open; 0:..; 0 bec 3f mov $1,r0 sys write; 1f; 2f-1f br loop 1: 2: .even 3: mov r0,r1 clr r5 1: mov r1,r0 sys read; buf; 512. bes err tst r0 beq print inc bcnt mov $buf,r2 2: movb (r2)+,r4 add r4,r5 adc r5 sob r0,2b br 1b err: mov $1,r0 sys write; 1f; 2 print: jsr pc,decml mov $1,r0 sys write; bl; 1 mov bcnt,r5 jsr pc,decml mov $1,r0 sys write; nl; 1 mov r1,r0 sys close br loop 1: nl: <\n> bl: < > .even decml: mov r0,-(sp) mov r1,-(sp) mov r5,r1 jsr pc,1f mov (sp)+,r1 mov (sp)+,r0 rts pc 1: clr r0 dvd $10.,r0 mov r1,-(sp) mov r0,r1 beq 1f jsr pc,1b 1: mov (sp)+,ch add $'0,ch mov $1,r0 sys write; ch; 1 rts pc .bss ch: .=.+2 bcnt: .=.+2 buf: .=.+512. unix_v4/usr/source/s2/sleep.c0000644000175000017500000000037701026347440014456 0ustar aapaapmain(argc, argv) char **argv; { int c, n; char *s; n = 0; if(argc < 2) { printf("arg count\n"); exit(); } s = argv[1]; while(c = *s++) { if(c<'0' || c>'9') { printf("bad character\n"); exit(); } n = n*10 + c - '0'; } sleep(n); } unix_v4/usr/source/s2/mesg.s0000644000175000017500000000111401026347440014307 0ustar aapaap/ mesg -- set current tty to accept or forbid messages .globl ttyn clr r0 jsr pc,ttyn movb r0,ttyno sys stat; ttyx; stbuf bes error cmp (sp)+,$1 beq flip tst (sp)+ mov (sp)+,r0 cmpb (r0),$'n beq setno br setyes flip: bit $2,stbuf+4 beq setyes setno: sys chmod; ttyx; 600 bes error br say setyes: sys chmod; ttyx; 622 bes error say: bit $2,stbuf+4 beq wasno wasyes: movb $'y,nmes+4 wasno: mov $1,r0 sys write; nmes; 6 sys exit nmes: error: mov $1,r0 sys write; 1f; 2 sys exit 1: ttyx: ttyno = .-2 .even stbuf: .=.+40. unix_v4/usr/source/s2/passwd.s0000644000175000017500000000370701026347440014667 0ustar aapaap/ passwd -- change user's password .globl mesg .globl crypt .globl getc .globl flush .globl fcreat .globl putc .globl fopen cmp (sp)+,$3 bge 1f jsr r5,mesg ; .even sys exit 1: tst (sp)+ mov (sp)+,uidp mov (sp)+,r0 tstb (r0) beq 1f jsr pc,crypt clrb 8(r0) 1: mov r0,cryptp mov $passwf,r0 jsr r5,fopen; ibuf bec 1f jsr r5,mesg ; .even sys exit 1: sys stat; tempf; obuf+20. bec 2f sys creat; tempf; 222 bec 1f 2: jsr r5,mesg ; .even sys exit 1: mov r0,obuf / search for uid comp: mov uidp,r1 1: jsr pc,pcop cmp r0,$': beq 1f cmpb r0,(r1)+ beq 1b 2: jsr pc,pcop cmp r0,$'\n bne 2b br comp 1: tstb (r1)+ bne 2b / skip over old password 1: jsr pc,pget cmp r0,$': bne 1b / copy in new password mov cryptp,r1 1: movb (r1)+,r0 beq 1f jsr pc,pput br 1b 1: mov $':,r0 jsr pc,pput / validate permission clr r1 1: jsr pc,pcop cmp r0,$': beq 1f mpy $10.,r1 sub $'0,r0 add r0,r1 br 1b 1: sys getuid tst r0 beq 1f cmp r0,r1 beq 1f jsr r5,mesg ; .even br done 1: inc sflg 1: jsr pc,pcop br 1b done: jsr r5,flush; obuf mov obuf,r0 sys close mov ibuf,r0 sys close tst sflg beq 1f tst dflg bne 1f inc dflg mov $tempf,r0 jsr r5,fopen; ibuf bec 2f jsr r5,mesg ; .even br 1f 2: mov $passwf,r0 jsr r5,fcreat; obuf bec 2f jsr r5,mesg ; .even br 1f 2: jsr pc,pcop br 2b 1: sys unlink; tempf sys exit pput: jsr r5,putc; obuf rts pc pget: jsr r5,getc; ibuf bes 1f rts pc 1: jsr r5,mesg ; .even br done pcop: jsr r5,getc; ibuf bes 1f jsr r5,putc; obuf rts pc 1: tst sflg bne 1f jsr r5,mesg ; .even 1: br done .data passwf: tempf: .even .bss ibuf: .=.+520. obuf: .=.+520. cryptp: .=.+2 uidp: .=.+2 sflg: .=.+2 dflg: .=.+2 unix_v4/usr/source/s2/sort.c0000644000175000017500000001532301026347440014332 0ustar aapaap#define L 512 #define N 7 #define C 20 #define MEM (16*2048) int ibuf[259]; int obuf[259]; char *file; char *filep; int nfiles; int nlines; int ntext; int *lspace; char *tspace; int aflg; int dflg; int mflg; int nflg; int rflg 1; int sfield -1; int schar; int cmp(); char map[256]; int term(); char *outfil; int eargc; char **eargv; main(argc, argv) char **argv; { extern char end; register a; char *arg; eargv = argv; while (--argc > 0) { if(**++argv == '-') for(arg = *argv;;) { switch(*++arg) { case '\0': if(arg[-1] == '-') eargv[eargc++] = "-"; break; case 'a': aflg++; continue; case 'd': dflg++; continue; case 'm': mflg++; continue; case 'n': nflg++; continue; case 'o': if(--argc > 0) outfil = *++argv; continue; case 'r': rflg = -1; continue; default: sfield = number(++*argv); break; } break; } else if (**argv == '+') schar = number(++*argv); else eargv[eargc++] = *argv; } if(eargc == 0) eargv[eargc++] = "-"; for(a=0; a<128; a++) (map+128)[a] = a; if(!aflg) for(a='a'; a<='z'; a++) (map+128)[a] = (map+128)[a-'a'+'A']; (map+128)['\n'] = 0; if(rflg < 0) for(a=0; a<128; a++) (map+128)[a] = 127-(map+128)[a]; if(dflg) { for(a=0; a<'0'; a++) if(a!='\n' && a!=' ' && a!='\t') (map+128)[a] = -1; ignore('9'+1,'A'-1); ignore('Z'+1,'a'-1); ignore('z'+1,127); } ignore(-128,0); (map+128)[127] = -1; a = MEM; while(brk(a) == -1); a =- 512; brk(a =- 512); /* for recursion */ lspace = &end; a =- &end; nlines = ((a-L)>>1) & 077777; nlines =/ 5; ntext = nlines*8; tspace = lspace+nlines; file = "/usr/tmp/stmXaa"; loop: filep = file; while(*filep != 'X') filep++; for(*filep = 'a';;(*filep)++) { if(stat(file, lspace) < 0) { a = creat(file, 0600); if(a >= 0) break; } if(*filep == 'z') { if(file[1] != 't') { file = "/tmp/stmXaa"; goto loop; } mess("Cannot locate temp\n"); exit(); } } close(a); filep++; if ((signal(2, 1) & 01) == 0) signal(2, term); nfiles = eargc; if(!mflg) { ibuf[0] = -1; sort(); close(0); } for(a = mflg?0:eargc; a+N < nfiles; a=+N) { newfile(); merge(a, a+N); } if(a != nfiles) { oldfile(); merge(a, nfiles); } term(); } sort() { register char *cp; register *lp, c; int done; int i; int f; done = 0; i = 0; do { cp = tspace; lp = lspace; while(lp < lspace+nlines && cp < tspace+ntext) { *lp++ = cp; while((*cp++ = c = getc(ibuf)) != '\n') { if(c >= 0) continue; cp--; close(ibuf[0]); if(i < eargc) { if((f = setfil(i++)) == 0) ibuf[0] = 0; else if(fopen(f, ibuf) < 0) cant(f); } else break; } if(c < 0) { done++; lp--; break; } } qsort(lspace, lp-lspace, 2, cmp); if(done == 0 || nfiles != 0) newfile(); else oldfile(); while(lp > lspace) { cp = *--lp; do putc(*cp, obuf); while(*cp++ != '\n'); } fflush(obuf); close(obuf[0]); } while(done == 0); } struct merg { char l[L]; int b[259]; }; merge(a, b) { register struct merg *p; register char *cp; register i; struct { int *ip;}; int f; int j; p = lspace; j = 0; for(i=a; ib[0] = dup(0); else if(fopen(f, p->b) < 0) cant(f); ibuf[j] = p; if(!rline(p)) j++; p++; } i = j; qsort(ibuf, i, 2, cmp); if(i > 0) for(;;) { cp = ibuf[i-1]; do putc(*cp, obuf); while(*cp++ != '\n'); if(rline(ibuf[i-1])) { i--; if(i == 0) break; } cp = &ibuf[i]; while (--cp.ip > ibuf && cmp(cp.ip, cp.ip-1) < 0) { p = *cp.ip; *cp.ip = *(cp.ip-1); *(cp.ip-1) = p; } } p = lspace; for(i=a; ib[0]); p++; if(i >= eargc) close(creat(setfil(i))); } fflush(obuf); close(obuf[0]); } rline(mp) struct merg *mp; { register char *cp; register *bp, c; bp = mp->b; cp = mp->l; do { c = getc(bp); if(c < 0) return(1); *cp++ = c; } while(c != '\n'); return(0); } newfile() { if(fcreat(setfil(nfiles), obuf) < 0) { mess("Can't create temp\n"); 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(fcreat(outfil, obuf) < 0) { mess("Can't create output\n"); term(); } } else obuf[0] = 1; } cant(f) { mess("Can't open "); mess(f); mess("\n"); term(); } term() { register i; if(nfiles == 0) nfiles++; for(i=eargc; i= 0) { pa = skip(pa); pb = skip(pb); } if(schar) { pa = slip(pa); pb = slip(pb); } if(nflg) { pa = snip(pa, &sa); pb = snip(pb, &sb); sign = sa*(sa==sb); for(ipa = pa; digit(*ipa); ipa++); for(ipb = pb; digit(*ipb); ipb++); jpa = ipa; jpb = ipb; a = 0; if(sign) while(ipa > pa && ipb > pb) if(b = *--ipb - *--ipa) a = b; while(ipa > pa) if(*--ipa != '0') return(sign ? -sign : -sa); while(ipb > pb) if(*--ipb != '0') return(sign ? sign : sb); if(a) return(a*sign); if(*(pa=jpa) == '.') pa++; if(*(pb=jpb) == '.') pb++; while(digit(*pa) && digit(*pb)) if(a = *pb++ - *pa++) return(sign ? a*sign : sb); while(digit(*pa)) if(*pa++ != '0') return(sign ? -sign : -sa); while(digit(*pb)) if(*pb++ != '0') return(sign ? sign : sb); } loop : while((a = (map+128)[*pa]) < 0) pa++; while((b = (map+128)[*pb]) < 0) pb++; if(a == b) { if(*pa++ != '\n') { pb++; goto loop; } pa = *i; pb = *j; while(*pa == *pb) { if(*pa++ == '\n') return(0); pb++; } return((*pb - *pa) * rflg); } return(b - a); } skip(pp) char *pp; { register i; register char *p; p = pp; if(i = sfield) do { while(*p == ' ' || *p == '\t') p++; while(*p != ' ' && *p != '\t' && *p != '\n') p++; } while(--i); while(*p == ' ' || *p == '\t') p++; return(p); } slip(pp) char *pp; { register i; register char *p; p = pp; i = schar; do { if(*p != '\n') p++; } while(--i); return(p); } snip(pp,ls) char *pp; int *ls; { register char *p; register int s; p = pp; while(*p == ' ' || *p == '\t') p++; s = rflg; if(*p == '-') { s = -s; p++; } *ls = s; return(p); } number(ap) char *ap; { register int n; register char *p; p = ap; n = 0; while(digit(*p)) n = n*10 + *p++ - '0'; return(n); } digit(c) { if(c <= '9' && c >= '0') return(1); return(0); } mess(s) char *s; { while(*s) write(2, s++, 1); } ignore(a,b) { register c; for(c = a; c <= b; c++) (map+128)[c] = -1; } unix_v4/usr/source/s2/nice.c0000644000175000017500000000075701026347440014266 0ustar aapaap/* nice */ char *args[100]; char string[10000]; main(argc, argv) int argc; char *argv[]; { int i; char **argp, *strp, *p; if(argc < 2) { printf("arg count\n"); exit(); } argc--; argv++; argp = args; strp = string; for (i=0; i<9; i++) *strp++ = "/usr/bin/"[i]; for(i=0; i emes1: mes2: < ?\n> emes2: .even .bss name: .=.+40. stbuf: .=.+40. unix_v4/usr/source/s2/rm.c0000644000175000017500000000266001026347440013761 0ustar aapaapmain(argc, argv) char *argv[]; { char *arg; int fflg, rflg; fflg = 0; rflg = 0; while(--argc > 0) { arg = *++argv; if(arg[0] == '-') { if(arg[1] == 'f') { fflg++; continue; } if(arg[1] == 'r') { rflg++; continue; } } rm(arg, fflg, rflg); } } struct stbuf { int dev; int inum; int mode; char nlink; char uid; char gid; char siz0; char siz1; int addr[8]; int adate[2]; int mdate[2]; }; rm(arg, fflg, rflg) char arg[]; { char *p; int buf[20]; int i, b; if(stat(arg, buf)) { printf("%s: non existent\n", arg); return; } if((buf->mode & 060000) == 040000) { if(rflg) { i = fork(); if(i < 0) { printf("%s: try again\n", arg); return; } if(i) { while(wait() != i); return; } if(chdir(arg)) { printf("%s: cannot chdir\n", arg); exit(); } p = 0; execl("/etc/glob", "glob", "rm", "-r", fflg? "-f": "*", fflg? "*": p, 0); printf("%s: no glob\n", arg); exit(); } printf("%s: directory\n", arg); return; } if(!fflg) { if(getuid() == buf->uid) b = 0200; else b = 2; if((buf->mode & b) == 0) { printf("%s: %o mode ", arg, buf->mode); i = b = getchar(); i = b; while(b != '\n' && b != '\0') b = getchar(); if(i != 'y') return; } } if(unlink(arg)) printf("%s: not removed\n", arg); } putchar(c) { write(1, &c, 1); } getchar() { char c; if(read(0, &c, 1) != 1) return(0); return(c); } unix_v4/usr/source/s2/pfe.s0000644000175000017500000000075401026347440014137 0ustar aapaap/ print last floating error stst = 170300^tst stst r1 cmp r1,$14 blos 1f clr r1 1: bic $1,r1 mov mesg(r1),r1 1: movb (r1)+,ch beq 1f mov $1,r0 sys write; ch; 1 br 1b 1: sys exit mesg: 1f 2f 3f 4f 5f 6f 7f 8f 1: 2: 3: 4: 5: 6: 7: 8: .even .bss ch: .=.+2 unix_v4/usr/source/s2/pwd.c0000644000175000017500000000205301026347440014131 0ustar aapaapchar dot[] "."; char dotdot[] ".."; char root[] "/"; char name[512]; int file, off -1; struct statb {int devn, inum, i[18];}x; struct entry { int jnum; char name[16];}y; main() { int n; loop0: stat(dot, &x); if((file = open(dotdot,0)) < 0) prname(); loop1: if((n = read(file,&y,16)) < 16) prname(); if(y.jnum != x.inum)goto loop1; close(file); if(y.jnum == 1) ckroot(); cat(); chdir(dotdot); goto loop0; } ckroot() { int i, n; if((n = stat(y.name,&x)) < 0) prname(); i = x.devn; if((n = chdir(root)) < 0) prname(); if((file = open(root,0)) < 0) prname(); loop: if((n = read(file,&y,16)) < 16) prname(); if(y.jnum == 0) goto loop; if((n = stat(y.name,&x)) < 0) prname(); if(x.devn != i) goto loop; x.i[0] =& 060000; if(x.i[0] != 040000) goto loop; cat(); prname(); } prname() { name[off] = '\n'; write(1,name,off+1); exit(); } cat() { int i, j; i = -1; while(y.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] = root[0]; for(--i; i>=0; --i) name[i] = y.name[i]; } unix_v4/usr/source/s2/split.c0000644000175000017500000000233201026347440014472 0ustar aapaapint count 1000; int fnumber; int ibuf[259]; int obuf[259]; char fname[100]; char *ifil; char *ofil; main(argc, argv) char *argv[]; { register i, c, f; for(i=1; i='0' && *s<='9') n = n*10 + *s-'0'; return(n); } unix_v4/usr/source/s2/mkdir.s0000644000175000017500000000210001026347440014456 0ustar aapaap/ makdir -- make a directory sys getuid mov r0,uid mov sp,r5 tst (r5)+ loop: tst (r5)+ dec (sp) bgt 1f sys exit 1: mov (r5),r0 mov $buf1,r1 mov $buf2,r2 clr r3 1: movb (r0)+,r4 beq 2f movb r4,(r1)+ movb r4,(r2)+ cmpb r4,$'/ bne 1b mov r2,r3 br 1b 2: movb $'/,(r1)+ movb $'.,(r1)+ clrb (r1) mov $dot,dir tst r3 beq 1f mov $buf2,dir clrb (r3) cmp r3,$buf2+1 beq 1f clrb -(r3) / ??? 1: tstb uid beq 2f sys stat; dir:..; stbuf / status of parent dir bes error mov stbuf+4,r0 cmpb uid,stbuf+7 bne 1f ash $-6,r0 1: ror r0 ror r0 bcc error / no write permission in parent 2: mov (r5),0f sys makdir; 0:..; 140777; 0 bes error / prob already exists mov (r5),0f sys chown; 0:..; uid:.. mov (r5),0f sys link; 0:..; buf1 bes error movb $'.,(r1)+ clrb (r1) mov dir,0f sys link; 0:..; buf1 bec loop error: mov (r5),r0 mov r0,0f clr 0f+2 1: tstb (r0)+ beq 1f inc 0f+2 br 1b 1: mov $1,r0 sys write; 0:..; .. mov $1,r0 sys write; ques; 3 br loop dot: <.\0> ques: < ?\n> .even .bss buf1: .=.+100. buf2: .=.+100. stbuf: .=.+40. unix_v4/usr/source/s2/tp2.s0000644000175000017500000001133401026347440014066 0ustar aapaap/ tap2 -- dec-tape lod/dmp pstr: movb (r1)+,r0 beq 1f jsr pc,putc br pstr 1: rts pc mesg: movb (r5)+,r0 beq 1f jsr pc,putc br mesg 1: inc r5 bic $1,r5 rts r5 putc: movb r0,ch mov $1,r0 sys write; ch; 1 rts pc getc: clr r0 sys read; ch; 1 movb ch,r0 rts pc clrdir: mov $dir,r1 mov ndirent,r2 1: jsr pc,clrent sob r2,1b rts pc clrent: mov r1,-(sp) add $dirsiz,(sp) 1: clr (r1)+ cmp r1,(sp) blo 1b tst (sp)+ rts pc rddir: clr sum jsr pc,clrdir clr r0 jsr pc,rseek jsr pc,tread mov tapeb+510.,r0 beq 1f tstb flm beq 1f mov r0,ndirent 1: mov $dir,r1 mov ndirent,r2 1: bit $7,r2 bne 2f jsr pc,tread mov $tapeb,r3 2: mov r1,-(sp) mov r3,-(sp) mov $32.,r0 clr -(sp) 2: add (r3)+,(sp) sob r0,2b bis (sp),sum tst (sp)+ bne 2f mov (sp),r3 tst (r3) beq 2f mov r3,0f jsr pc,9f .data 9: jsr r5,encode; 0:.. rts pc .text add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+ / namep 9: mov (r3)+,(r1)+ cmp r1,(sp) blo 9b tst (sp)+ 2: mov (sp)+,r3 add $64.,r3 mov (sp)+,r1 bic $100000,mode(r1) add $dirsiz,r1 sob r2,1b tst sum beq 1f jsr r5,mesg ; .even tstb fli bne 1f jmp done 1: jsr pc,bitmap rts pc wrdir: clr r0 jsr pc,wseek tstb flm bne 1f sys open; tboot; 0 bes 3f br 2f 1: sys open; mboot; 0 bes 3f 2: mov r0,r1 sys read; tapeb; 512. mov r1,r0 sys close mov ndirent,tapeb+510. 3: jsr pc,twrite mov $dir,r1 mov ndirent,r2 1: bit $7,r2 bne 2f mov $256.,r0 mov $tapeb,r3 3: clr (r3)+ sob r0,3b mov $tapeb,r3 2: mov r3,-(sp) tst (r1) beq 2f mov r3,0f jsr pc,9f .data 9: jsr r5,decode; 0:.. rts pc .text 2: add $32.,r3 mov r1,-(sp) add $dirsiz,(sp) tst (r1)+ 9: mov (r1)+,(r3)+ cmp r1,(sp) blo 9b tst (sp)+ mov (sp)+,r3 clr -(sp) mov $31.,r0 2: sub (r3)+,(sp) sob r0,2b mov (sp)+,(r3)+ dec r2 bit $7,r2 bne 1b jsr pc,twrite tst r2 bne 1b rts pc tread: mov fio,r0 sys read; tapeb; 512. bes trderr cmp r0,$512. bne trderr 1: inc rseeka rts pc trderr: jsr r5,mesg ; .even tstb fli beq 1f mov $tapeb,r0 2: clr (r0)+ cmp r0,$tapeb+512. blo 2b br 1b 1: jmp done twrite: mov fio,r0 sys write; tapeb; 512. bes twrerr cmp r0,$512. bne twrerr inc wseeka rts pc twrerr: jsr r5,mesg ; .even jmp done rseek: mov r0,rseeka mov r0,0f mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text bes seekerr rts pc wseek: mov r0,-(sp) sub wseeka,r0 bge 1f neg r0 1: cmp r0,$25. / longest write seek ble 1f mov (sp),0f beq 2f dec 0f 2: mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text mov fio,r0 sys read; wseeka; 1 1: mov (sp),wseeka mov (sp)+,0f mov fio,r0 sys 0; 9f .data 9: sys seek; 0:..; 3 .text bes seekerr rts pc seekerr: jsr r5,mesg ; .even jmp done verify: movb (r5)+,0f inc r5 tstb flw bne 1f tstb flv beq 2f 1: jsr pc,9f .data 9: jsr r5,mesg 0:; .even rts pc .text mov r1,-(sp) mov $name,r1 jsr pc,pstr mov (sp)+,r1 tstb flw beq 1f jsr r5,mesg < \0> jsr pc,getc cmp r0,$'x bne 3f jsr pc,getc jmp done 3: cmp r0,$'\n beq 3f cmp r0,$'y bne 4f jsr pc,getc cmp r0,$'\n beq 2f 4: jsr pc,getc cmp r0,$'\n bne 4b br 1b 1: jsr r5,mesg <\n\0> 2: tst (r5)+ 3: rts r5 getfiles: cmp narg,$2 bne 1f mov $".\0,name jsr pc,callout 1: cmp narg,$2 ble 1f dec narg mov *parg,r1 add $2,parg mov $name,r2 2: movb (r1)+,(r2)+ bne 2b jsr pc,callout br 1b 1: rts pc expand: sys open; name; 0 bes fserr mov r0,-(sp) 1: mov (sp),r0 sys read; catlb; 16. bes fserr tst r0 beq 1f tst catlb beq 1b mov $name,r0 mov $catlb+2,r1 cmpb (r1),$'. beq 1b 2: tstb (r0)+ bne 2b dec r0 mov r0,-(sp) cmpb -1(r0),$'/ beq 2f movb $'/,(r0)+ 2: movb (r1)+,(r0)+ bne 2b jsr pc,callout clrb *(sp)+ br 1b 1: mov (sp)+,r0 sys close rts pc fserr: mov $name,r1 jsr pc,pstr jsr r5,mesg < -- Cannot open file\n\0>; .even jmp done callout: sys stat; name; statb bes fserr mov statb+4,r0 bic $!60000,r0 beq 1f cmp r0,$40000 beq expand rts pc 1: mov $dir,r1 clr -(sp) 1: tst (r1) bne 3f tst (sp) bne 2f mov r1,(sp) 2: add $dirsiz,r1 cmp r1,edir blo 1b mov (sp)+,r1 bne 4f jsr r5,mesg ; .even jmp done 4: jsr r5,verify; 'a rts pc jsr r5,encode; name br 2f 3: jsr r5,decode; name1 mov $name,r2 mov $name1,r3 3: cmpb (r2)+,(r3) bne 2b tstb (r3)+ bne 3b tst (sp)+ tstb flu beq 3f cmp time0(r1),statb+32. blo 3f bhi 1f cmp time1(r1),statb+34. bhis 1f 3: jsr r5,verify; 'r rts pc 2: mov statb+4,mode(r1) bis $100000,mode(r1) movb statb+7,uid(r1) movb statb+8,gid(r1) tstb flf beq 2f clrb statb+9. clr statb+10. 2: movb statb+9.,size0(r1) mov statb+10.,size1(r1) mov statb+32.,time0(r1) mov statb+34.,time1(r1) 1: rts pc unix_v4/usr/source/s2/strip.s0000644000175000017500000000317101026347440014522 0ustar aapaap/ strip -- strip relocation and symbols mov (sp)+,argc tst (sp)+ br loop unloop: sys unlink; s.tmp loop: dec argc bgt 1f sys exit 1: mov (sp)+,r4 mov r4,0f sys open; 0:..; 0 bec 1f jsr r5,mesg; ; .even br loop 1: mov r0,fi mov $'a,r1 1: movb r1,s.tmp+8 sys stat; s.tmp; buf bec 2f sys creat; s.tmp; 400 bec 1f 2: inc r1 cmp r1,$'z blos 1b jsr r5,mesg; ; .even sys exit 1: mov r0,fo clr buf mov fi,r0 sys read; buf; 512. mov r0,r3 cmp buf,magic beq 1f cmp buf,magic1 beq 1f jsr r5,mesg; ; .even br unloop 1: mov buf+2,r2 add buf+4,r2 add $20,r2 clr buf+10 mov $1,buf+16 / no reloc bits flag 1: cmp r2,r3 bge 2f mov r2,r3 2: mov r3,0f mov fo,r0 sys write; buf; 0:.. sub r3,r2 ble 1f mov fi,r0 sys read; buf; 512. mov r0,r3 bne 1b jsr r5,mesg; ; .even 1: mov fo,r0 sys close mov fi,r0 sys close mov r4,0f sys creat; 0:..; 0 / same mode as before bec 1f jsr r5,mesg; ; .even jmp unloop 1: mov r0,fo sys open; s.tmp; 0 bec 1f jsr r5,mesg; ; .even sys exit 1: mov r0,fi 1: mov fi,r0 sys read; buf; 512. mov r0,0f beq 1f mov fo,r0 sys write; buf; 0:.. br 1b 1: mov fi,r0 sys close mov fo,r0 sys close jmp unloop mesg: movb (r5)+,ch beq 1f mov $1,r0 sys write; ch; 1 br mesg 1: inc r5 bic $1,r5 mov r4,r1 1: movb (r1)+,ch beq 1f mov $1,r0 sys write; ch; 1 br 1b 1: mov $1,r0 sys write; qnl; 1 rts r5 s.tmp: qnl: <\n> .even magic: 407 magic1: 410 .bss fi: .=.+2 fo: .=.+2 argc: .=.+2 buf: .=.+512. ch: .=.+2 unix_v4/usr/source/s2/su.c0000644000175000017500000000134501026347440013771 0ustar aapaap/* su -- become super-user */ char password[100]; char pwbuf[100]; int ttybuf[3]; main() { register char *p, *q; extern fin; if(getpw(0, pwbuf)) goto badpw; (&fin)[1] = 0; p = pwbuf; while(*p != ':') if(*p++ == '\0') goto badpw; if(*++p == ':') goto ok; gtty(0, ttybuf); ttybuf[2] =& ~010; stty(0, ttybuf); printf("password: "); q = password; while((*q = getchar()) != '\n') if(*q++ == '\0') return; *q = '\0'; ttybuf[2] =| 010; stty(0, ttybuf); printf("\n"); q = crypt(password); while(*q++ == *p++); if(*--q == '\0' && *--p == ':') goto ok; goto error; badpw: printf("bad password file\n"); ok: setuid(0); execl("/bin/sh", "-", 0); printf("cannot execute shell\n"); error: printf("sorry\n"); } unix_v4/usr/source/s2/wc.c0000644000175000017500000000436601026347440013761 0ustar aapaap#define NUL 1 #define SPC 2 #define PUN 4 #define ALP 8 #define NEW 16 int linect[2]; int alphct[2]; int punct[2]; int wordct[2]; int ctlct[2]; int roffflg 0; int codeflg 0; char *code "-lw"; char class[128] { NUL,NUL,NUL,NUL,NUL,NUL,NUL,NUL, NUL,SPC,NEW,NUL,NUL,NUL,NUL,NUL, NUL,NUL,NUL,NUL,NUL,NUL,NUL,NUL, NUL,NUL,NUL,NUL,NUL,NUL,NUL,NUL, SPC,PUN,PUN,PUN,PUN,PUN,PUN,PUN, PUN,PUN,PUN,PUN,PUN,PUN,PUN,PUN, ALP,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,PUN,PUN,PUN,PUN,PUN,PUN, PUN,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,PUN,PUN,PUN,PUN,ALP, PUN,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,ALP,ALP,ALP,ALP,ALP, ALP,ALP,ALP,PUN,PUN,PUN,PUN,NUL }; char buf[518]; main(argc,argv) char **argv; { int i, j; register int c; if(--argc>=1 & **++argv=='-') { /* `&' is intentional */ for(i=1;c=argv[0][i];i++) if(c=='r') roffflg = 1; else codeflg = 1; if(codeflg) code = argv[0]; argc--; argv++; } i = 0; do { if(argc<=0) buf[0] = 0; else if(fopen(argv[i],buf)<0) { printf("%s: cannot open\n", argv[i]); continue; } count(); for(j=1;code[j];j++) { switch(code[j]) { case 'l': putd(linect); break; case 'a': putd(alphct); break; case 'p': putd(punct); break; case 'w': putd(wordct); break; case 'c': putd(ctlct); break; } } printf("%s\n", argc<=0?"":argv[i]); } while(++i=0) { c =& 0177; if(newline) { if(roffflg&&(c=='.'||c=='\'')) { inc(ctlct); while(((c=getc(buf)>=0))&&c!='\n'); continue; } else { newline = 0; inc(linect); } } if(c<0) continue; c = class[c]; if(c&NUL) continue; if(c&(ALP|PUN)) { if(token==c) continue; if(token==0) inc(wordct); token = c; if(c&ALP) inc(alphct); else inc(punct); continue; } if(c&(SPC|NEW)) { token = 0; if(c&NEW) newline = 1; } } } clear(ct) int ct[2]; { ct[0] = ct[1] = 0; } inc(ct) int ct[2]; { ct[0]++; if(ct[0]==0) ct[1]++; } putd(ct) int ct[2]; { printf("%7s ",locv(ct[1],ct[0])); } unix_v4/usr/source/s2/umount.c0000644000175000017500000000164301026347440014672 0ustar aapaap#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; mf = open("/etc/mtab", 0); read(mf, mtab, NMOUNT*2*NAMSIZ); if(argc != 2) { printf("arg count\n"); return; } if (umount(argv[1]) < 0) { perror("umount"); return; } 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, mtab, (mp-mtab+1)*2*NAMSIZ); return; } } printf("%s not in mount table\n", argv[1]); } unix_v4/usr/source/s2/uniq.c0000644000175000017500000000364301026347440014321 0ustar aapaapfields 0; letters 0; linec; mode; uniq; main(argc, argv) int argc; char *argv[]; { extern fin, fout; int f; static char b1[1000], b2[1000]; loop: if(argc > 1) { if(*argv[1] == '-') { if(argv[1][1] <= '9') fields = conv(&argv[1][1]); else mode = argv[1][1]; argc--; argv++; goto loop; } if(*argv[1] == '+') { letters = conv(&argv[1][1]); argc--; argv++; goto loop; } f = open(argv[1], 0); if(f < 0) { printf("cannot open %s\n", argv[1]); exit(); } fin = f; } else fin = dup(0); if(argc > 2) { f = creat(argv[2], 0666); if(f < 0) { printf("cannot create %s\n", argv[2]); exit(); } fout = f; } else fout = dup(1); close(0); close(1); gline(b1); l1: linec++; if(gline(b2)) { pline(b1); flush(); exit(); } if(equal(b1, b2)) goto l1; pline(b1); linec = 0; l2: linec++; if(gline(b1)) { pline(b2); flush(); exit(); } if(equal(b1, b2)) goto l2; pline(b2); linec = 0; goto l1; } gline(buf) char buf[]; { int c; while((c = getchar()) != '\n') { if(c == '\0') return(1); *buf++ = c; } *buf = 0; return(0); } pline(buf) char buf[]; { int c; switch(mode) { case 'u': if(uniq) {; uniq = 0; return; } break; case 'd': if(uniq) break; return; case 'c': printf("%4d ", linec); } uniq = 0; while((c = *buf++) != 0) putchar(c); putchar('\n'); } equal(b1, b2) char b1[], b2[]; { int 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) char *s; { int nf, nl; nf = nl = 0; while(nf++ < fields) { while(*s==' ' || *s=='\t') s++; while( !(*s==' ' || *s=='\t') ) if(*s == 0) return(s); else s++; } while(nl++ < letters) if(*s == 0) return(s); else s++; return(s); } conv(s) char *s; { int d, n; n = 0; for(;;) { d = *s++ - '0'; if(0>d || d>9) break; n = n*10 + d; } return(n); } unix_v4/usr/source/s2/sh.c0000644000175000017500000002374101026347440013760 0ustar aapaap# /* * copyright 1973 bell telephone laboratories inc. */ #define intr 2 #define quit 3 #define linesiz 1000 #define argsiz 50 #define tresiz 50 #define quote 0200 #define fand 1 #define fcat 2 #define fpin 4 #define fpou 8 #define fpar 16 #define fint 32 #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 char *dolp; char **dolv; int dolc; char *promp; char *linep; char *elinep; char **argp; char **eargp; int *treep; char peekc; char gflg; char error; char acctf; char uid; char setintr; char *mesg[] { 0, "Hangup", 0, "Quit", "Illegal instruction", "Trace/BPT trap", "IOT trap", "EMT trap", "Floating exception", "Killed", "Bus error", "Memory fault", "Bad system call" }; struct stime { int proct[2]; int cputim[2]; int systim[2]; } timeb; main(c, av) int c; char **av; { register f; register char *acname, **v; close(2); if((f=dup(1)) != 2) close(f); v = av; acname = "/usr/adm/sh_acct"; promp = "% "; if(((uid = getuid())&0377) == 0) { promp = "# "; acname = "/usr/adm/su_acct"; } acctf = open(acname, 1); if(c > 1) { promp = 0; close(0); f = open(v[1], 0); if(f < 0) { prs(v[1]); err(": cannot open"); } } if(**v == '-') { setintr++; signal(quit, 1); signal(intr, 1); } dolv = v+1; dolc = c-1; loop: if(promp != 0) prs(promp); peekc = getc(); main1(); goto loop; } main1() { char line[linesiz]; char *args[argsiz]; int trebuf[tresiz]; register char c, *cp; register *t; argp = args; eargp = args+argsiz-5; linep = line; elinep = line+linesiz-5; error = 0; gflg = 0; do { cp = linep; word(); } while(*cp != '\n'); treep = trebuf; if(gflg == 0) { if(error == 0) t = syntax(args, argp); if(error != 0) err("syntax error"); 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; 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"); gflg++; return(c); } if(linep > elinep) { linep =- 10; while((c=getc()) != '\n'); linep =+ 10; err("Too many characters"); 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 = getc(); if(c>='0' && c<='9') { if(c-'0' < dolc) dolp = dolv[c-'0']; goto getd; } } return(c&0177); } readc() { int c; if(read(0, &c, 1) != 1) exit(); return(c&0377); } /* * 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) { t = tree(4); t[dtyp] = tlst; t[dlef] = syn2(p1, p); t[dflg] = 0; if(**p == '&') { t1 = t[dlef]; t1[dflg] =| fand|fint; } t[drit] = syntax(p+1, p2); return(t); } } if(l == 0) return(syn2(p1, p2)); error++; } /* * syn2 * syn3 * syn3 | syn2 */ syn2(p1, p2) char **p1, **p2; { char **p; int l, *t; l = 0; for(p=p1; p!=p2; p++) switch(**p) { case '(': 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 b[100], 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) b[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++; b[n++] = 0; t = tree(n+5); t[dtyp] = tcom; for(l=0; l= 0) { seek(i, 0, 2); goto f1; } } i = creat(t[drit], 0666); if(i < 0) { prs(t[drit]); err(": cannot create"); exit(); } 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(); } close(acctf); gflg = 0; scan(t, &tglob); if(gflg) { t[dspr] = "/etc/glob"; execv(t[dspr], t+dspr); prs("glob: cannot execute\n"); exit(); } scan(t, &trim); execv(t[dcom], t+dcom); cp1 = linep; cp2 = "/usr/bin/"; while(*cp1 = *cp2++) cp1++; cp2 = t[dcom]; while(*cp1++ = *cp2++); execv(linep+4, t+dcom); execv(linep, t+dcom); if(runcom()) { t[dspr] = "/bin/sh"; t[dcom] = linep; execv(t[dspr], t+dspr); } prs(t[dcom]); err(": not found"); exit(); case tfil: f = t[dflg]; pipe(pv); t1 = t[dlef]; t1[dflg] =| fpou | (f&(fpin|fint)); execute(t1, pf1, pv); t1 = t[drit]; t1[dflg] =| fpin | (f&(fpou|fint|fand)); 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; } } err(s) char *s; { prs(s); prs("\n"); if(promp == 0) { seek(0, 0, 2); exit(); } } prs(s) char *s; { while(*s) putc(*s++); } putc(c) { write(2, &c, 1); } prn(n) int n; { register a; if(a=ldiv(0,n,10)) prn(a); putc(lrem(0,n,10)+'0'); } any(c, s) int c; char *s; { while(*s) if(*s++ == c) return(1); return(0); } equal(s1, s2) char *s1, *s2; { 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(;;) { times(&timeb); time(timeb.proct); p = wait(&s); if(p == -1) break; e = s&0177; if(mesg[e] != 0) { if(p != i) { prn(p); prs(": "); } prs(mesg[e]); if(s&0200) prs(" -- Core dumped"); } if(e != 0) err(""); if(i == p) { acct(t); break; } else acct(0); } } acct(t) int *t; { if(t == 0) enacct("**gok"); else if(*t == tpar) enacct("()"); else enacct(t[dcom]); } enacct(s) char *s; { struct stime timbuf; struct { char cname[14]; int realt; int bcput; int bsyst; } tbuf; register i; register char *np; times(&timbuf); time(timbuf.proct); tbuf.realt = timbuf.proct[1] - timeb.proct[1]; tbuf.bcput = timbuf.cputim[1] - timeb.cputim[1]; tbuf.bsyst = timbuf.systim[1] - timeb.systim[1]; do { np = s; while (*s != '\0' && *s != '/') s++; } while (*s++ != '\0'); for (i=0; i<13; i++) { tbuf.cname[i] = *np; if (*np) np++; } tbuf.cname[13] = uid; seek(acctf, 0, 2); write(acctf, &tbuf, 20); } runcom() { int buf[40]; if(stat(linep, buf) < 0) return(0); if((buf[2]&060111) != 0) return(0); return(1); } unix_v4/usr/source/s2/mail.c0000644000175000017500000001021101026347440014254 0ustar aapaap/* mail command usage mail prints your mail mail file people sends file to people by login name mail person sends following tty input to him */ char iobuf[518]; char ubuf[16]; main(argc, argv) char *argv[]; { char *buf; static char myname[20], junk[40], number[20]; static char hisname[40], hisdir[40]; auto j, j0, k, n, mail, file, mynumber; if(argc==1 || (argc==2 && argv[1][0]=='-')) goto printm; if(fopen("/etc/passwd", iobuf) < 0) { printf("Can't open password file\n"); exit(); } if(mynumber = ttyn(0)) { if((file = open("/tmp/utmp",0)) < 0) goto otherway; while(read(file,ubuf,16)) { if(mynumber == ubuf[8]) { close(file); file = 0; while(file < 8 && ubuf[file] != ' ') { myname[file] = ubuf[file]; file++; } myname[file] = 0; goto namefound; } } } otherway: mynumber = getuid(); for(;;) { if(!(getfield(myname) && getfield(junk) && getfield(number) && getfield(junk) && getfield(junk) && getfield(junk) && getfield(junk))) { printf("Who are you?\n"); exit(); } if(atoi(number) == mynumber) break; } namefound: close(iobuf[0]); if(argc > 2) file = argv[1]; else file = 0; j0 = argc>2? 1: 0; fopen("/etc/passwd", iobuf); k = 2; for(;;) { if(!(getfield(hisname) && getfield(junk) && getfield(junk) && getfield(junk) && getfield(junk) && getfield(hisdir) && getfield(junk))) break; j = j0; while(++j < argc) if(comp(argv[j], hisname)) { send(file, myname, hisname, hisdir); argv[j][0] = 0; if(++k >= argc) exit(); } } j = j0; while(++j < argc) if(argv[j][0] != 0) { junk[0] = 0; append(argv[j], junk); send(file, myname, argv[j], junk); } exit(); printm: if((mail=open("mailbox", 0)) < 0) { printf("No mail\n"); exit(); } while(n = read(mail, iobuf, 512)) write(1, iobuf, n); if(argc != 2) { printf("Save? "); read(0, buf=iobuf, 512); } else buf = &argv[1][1]; if(buf[0] == 'y') { if(concat("mailbox","mbox",0)) printf("Old mail in `mbox'\n"); } unlink("mailbox"); exit(); } getfield(buf) char buf[]; { int j; char c; j = 0; while((c = buf[j] = getc(iobuf)) >= 0) if(c==':' || c=='\n') { buf[j] =0; return(1); } else j++; return(0); } /* send overwrites hisdir */ send(file, myname, hisname, hisdir) char hisname[], myname[], hisdir[]; { static char buf[512]; int n; for(n = 0 ; hisdir[n++];); append("/mailbox", hisdir); buf[0] = 0; append("\nFrom ",buf); append(myname,buf); append(" ",buf); time(buf+256); append(ctime(buf+256),buf); if(!concat(file,hisdir,1,buf)) printf("Can't send to `%s'\n",hisname); hisdir[n] = 0; } comp(n1, n2) char n1[], n2[]; { int i; char c; i = 0; while((c=n1[i]) == n2[i]) if(c == 0) return(1); else i++; return(0); } atoi(a) char a[]; { int i, j; i = 0; j = 0; while(a[j]) i = i*10 + a[j++] - '0'; return(i); } append(tail, head) char head[], tail[]; { int i, j; i = 0; while(head[i]) i++; j = 0; while(head[i++] = tail[j++]); } concat(fn1,fn2,flg,header) char *fn1,*fn2; int flg; char *header; { char *flname; int fn; int tmp,n; static buf[512]; flname = "/tmp/mtm\0\0"; for(flname[8] = 'a' ; flname[8] <= 'z' ; flname[8]++) if(stat(flname,buf) < 0) goto found; notmp: printf("can't creat tmp file\n"); exit(); found: if((tmp = creat(flname,0400)) < 0) goto notmp; if(!fn1) /*standard input file*/ fn = 0; else if((fn = open(fn1,0)) < 0) { close(tmp); unlink(flname); printf("can't open `%s'\n", fn1); exit(); } if(flg) { for(n = 0 ; header[n++] ;); write(tmp,header,n-1); } while(n = read(fn,buf,512)) write(tmp,buf,n); if(flg) write(tmp,"\n",1); if(fn) close(fn); if(stat(fn2,buf) >= 0) { if((fn = open(fn2,0)) < 0) { close(tmp); unlink(flname); return(0); } while(n = read(fn,buf,512)) write(tmp,buf,n); close(fn); } close(tmp); if((tmp = open(flname,0)) < 0) { unlink(flname); goto notmp; } if((fn = creat(fn2,0666)) < 0) { close(tmp); unlink(flname); return(0); } while(n = read(tmp,buf,512)) write(fn,buf,n); close(fn); close(tmp); unlink(flname); return(1); } unix_v4/usr/source/s2/nohup.c0000644000175000017500000000102201026347440014463 0ustar aapaap/* nohup */ char *args[100]; char string[10000]; main(argc, argv) int argc; char *argv[]; { int i; char **argp, *strp, *p; if(argc < 2) { printf("arg count\n"); exit(); } argc--; argv++; argp = args; strp = string; for (i=0; i<9; i++) *strp++ = "/usr/bin/"[i]; for(i=0; i 0 && *argv[1] == '-') { argv++; while (*++*argv) switch (**argv) { case 'n': nflg++; continue; case 'c': cflg++; continue; case 'g': gflg++; continue; case 'u': uflg++; continue; case 'r': rflg = -1; continue; case 'p': pflg ++; continue; default: continue; } argc--; } if (argc==0) fi = open("a.out", 0); else fi = open(*++argv, 0); if(fi < 0) { printf("cannot open input\n"); exit(); } read(fi, buf, 020); if(buf[0]!=0407 && buf[0]!=0410) { printf("bad format\n"); exit(); } seek(fi, buf[1], 1); /* text */ seek(fi, buf[2], 1); /* data */ if(buf[7] != 1) { seek(fi, buf[1], 1); seek(fi, buf[2], 1); /* reloc */ } n = ldiv(0, buf[4], 12); if(n == 0) { printf("no name list\n"); exit(); } nlp = sbrk(12*n); read(fi, nlp, n*12); if (pflg==0) qsort(nlp, n, 12, compare); fout = dup(1); close(1); for(i=0; ityp&040)==0) goto out; if(cflg) { if(nlp->name[0] != '_') goto out; for(j=0; j<7; j++) nlp->name[j] = nlp->name[j+1]; nlp->name[7] = '\0'; } j = nlp->typ&037; if(j > 4) j = 1; if(j==0 && nlp->val) j = 5; if(uflg && j!=0) goto out; if(!uflg) { if(j==0) printf(" "); else printo(nlp->val); printf("%c ", (nlp->typ&040? "UATDBC":"uatdbc")[j]); } printf("%.8s\n", nlp); out: nlp++; } flush(); } compare(p1, p2) struct nl *p1, *p2; { int a, i; a = 0; if(nflg) { if(p1->val > p2->val) { a = 1; goto out; } if(p1->val < p2->val) { a = -1; goto out; } } for(i=0; i<8; i++) if(p1->name[i] != p2->name[i]) { if(p1->name[i] > p2->name[i]) a = 1; else a = -1; goto out; } out: return(a*rflg); } printo(v) { int i; printf("%c", v<0?'1':'0'); for(i=0; i<5; i++) { printf("%c", ((v>>12)&7)+'0'); v =<<3; } } unix_v4/usr/source/s2/tty.s0000644000175000017500000000023101026347440014173 0ustar aapaap/ tty -- get tty number .globl ttyn clr r0 jsr pc,ttyn tst r0 movb r0,nam mov $1,r0 sys write; name; 5 sys exit name: nam: .even unix_v4/usr/source/s2/msh.s0000644000175000017500000000172301026347440014151 0ustar aapaap/ ms -- mini-shell mov $sbuf,r1 mov $cbuf,r2 clr r3 jsr pc,nonblank cmp r0,$'\n bne loop sys exit loop: mov r1,(r2)+ 1: movb r0,(r1)+ jsr pc,getc cmp r0,$' / beq 1f cmp r0,$'\n beq go br 1b 1: clrb (r1)+ jsr pc,nonblank cmp r0,$'\n beq go br loop go: clr (r2)+ tst r3 / to call glob bne 1f sys exec; sbuf; cbuf mov $bn,r0 mov $"/b,(r0)+ mov $"in,(r0)+ movb $'/,(r0)+ sys exec; bn; cbuf mov $usr,r0 mov $"/u,(r0)+ mov $"sr,(r0)+ sys exec; usr; cbuf br error 1: mov $gl,cbuf-2 sys exec; gl; cbuf-2 error: mov $1,r0 sys write; 1f; 2 sys exit 1: nonblank: jsr pc,getc cmp r0,$' / beq nonblank rts pc getc: clr r0 sys read; ch; 1 bes 1f tst r0 beq 1f movb ch,r0 cmp r0,$'? beq 3f cmp r0,$'* beq 3f cmp r0,$'[ bne 2f 3: inc r3 2: rts pc 1: sys exit ch: .=.+1 gl: .even .bss usr: .=.+4 / room for /usr bn: .=.+5 / room for /bin/ sbuf: .=.+1000. .even .=.+2 / slot for ptr to glob cbuf: .=.+20. unix_v4/usr/source/s2/mount.c0000644000175000017500000000220301026347440014476 0ustar aapaap#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 n, mf; mf = open("/etc/mtab", 0); read(mf, 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); return; } if(argc < 3) { printf("arg count\n"); return; } ro = 0; if(argc > 3) ro++; if(mount(argv[1], argv[2], ro) < 0) { perror("mount"); return; } 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, mtab, (mp-mtab+1)*2*NAMSIZ); return; } } } unix_v4/usr/source/s2/time.s0000644000175000017500000000411601026347440014317 0ustar aapaap/ time -- prints out system times times = 43. cmp (sp),$1 bgt 1f sys exit 1: sys time mov r1,ltbuf jsr pc,execarg sys time sub ltbuf,r1 sys times; ltbuf mov r1,r0 mul $60.,r0 mov r0,ltbuf mov r1,ltbuf+2 jsr r5,mesg; <\nreal\0>; .even mov $ltbuf,r2 jsr r5,ptime jsr r5,mesg; ; .even jsr r5,ptime jsr r5,mesg; ; .even jsr r5,ptime sys exit execarg: sys fork br newproc bec 2f jsr r5,mesg; ; .even sys exit 2: mov r0,r2 sys signal; 2; 1 2: sys wait cmp r0,r2 bne 2b bit $377,r1 beq 1f jsr r5,mesg; ; .even clr r0 sys seek; 0; 2 1: rts pc newproc: tst (sp)+ mov (sp)+,r0 tst (sp)+ mov $ibuf,r1 mov $end,r2 1: mov (sp)+,r3 mov r2,(r1)+ 2: movb (r3)+,(r2)+ bne 2b dec r0 cmp r0,$1 bgt 1b clr (r1)+ sys exec; end; ibuf mov $end-10.,r0 mov $"x/,(r0)+ mov $"us,(r0)+ mov $"r/,(r0)+ mov $"bi,(r0)+ mov $"n/,(r0)+ sys exec; end-5; ibuf sys exec; end-9.; ibuf jsr r5,mesg; ; .even clr r0 sys seek; 0; 2 sys exit printd: mov $tbuf+4,r4 jsr r5,tdiv; 10. jsr r5,tdiv; 10. jsr r5,tdiv; 10. jsr r5,tdiv; 10. 1: cmpb (r4),$'0 bne 1f movb $' ,(r4)+ cmp r4,$tbuf+3 bne 1b 1: mov $2,r0 sys write; tbuf; 4 rts pc ptime: mov (r2)+,r0 mov (r2)+,r1 div $3600.,r0 mov r0,-(sp) clr r0 div $60.,r0 mov r1,clicks mov $tbuf+9.,r4 jsr r5,tdiv; 10. jsr r5,tdiv; 6. movb $':,-(r4) mov (sp)+,r0 jsr r5,tdiv; 10. jsr r5,tdiv; 6. movb $':,-(r4) jsr r5,tdiv; 10. jsr r5,tdiv; 10. jsr r5,tdiv; 10. 1: cmpb (r4),$'0 beq 2f cmpb (r4),$': bne 1f 2: movb $' ,(r4)+ cmp r4,$tbuf+8. bne 1b 1: mov $2,r0 sys write; tbuf; 9. jsr r5,mesg; <.\0>; .even mov clicks,r1 clr r0 div $6,r0 add $'0,r0 mov r0,ch mov $2,r0 sys write; ch; 1 jsr r5,mesg; <\n\0>; .even rts r5 tdiv: mov r1,-(sp) mov r0,r1 clr r0 div (r5)+,r0 add $'0,r1 movb r1,-(r4) mov (sp)+,r1 rts r5 mesg: movb (r5)+,ch beq 2f mov $2,r0 sys write; ch; 1 br mesg 2: inc r5 bic $1,r5 rts r5 ch: .=.+1 .even .bss clicks: .=.+2 ibuf: .=.+50. tbuf: .=.+10. ltbuf: .=.+16. end: .=.+1000. unix_v4/usr/source/s2/restor.c0000644000175000017500000001455301026347440014665 0ustar aapaap# /* * restore from incremental dumps */ char *dargv[] { 0, "t", 0 }; char *ifile "/dev/mt0"; char *ofile; struct inode { int i_mode; char i_nlink; char i_uid; char i_gid; char i_size0; char *i_size1; int i_addr[8]; int i_atime[2]; int i_mtime[2]; }; /* modes */ #define IALLOC 0100000 #define IFMT 060000 #define IFDIR 040000 #define IFCHR 020000 #define IFBLK 060000 #define ILARG 010000 struct { char *s_isize; char *s_fsize; int s_nfree; int s_free[100]; int s_ninode; int s_inode[100]; char s_flock; char s_ilock; char s_fmod; int time[2]; int pad[50]; } sblock; int isize; int *talist; int fi; int buf[256]; int dbuf[256]; int cbuf[256]; char *date[2]; char *ddate[2]; int fo; int pher; char *tsize 15000; int iflg; int wflg; char file[10]; int ilist[100]; main(argc, argv) char **argv; { char *key; register *tap, *p; register struct inode *ip; int i, com, sz, *q; if(argc == 1) { argv = dargv; for(argc = 1; dargv[argc]; argc++); } argc--; argv++; key = *argv; while(*key) switch(*key++) { default: printf("bad characteer in key\n"); exit(); case 't': case 'r': case 'x': com = key[-1]; continue; case 'i': iflg++; continue; case 'w': wflg++; continue; } otape(); sread(buf, 0); tap = buf; isize = *tap++; *tap++; /* fsize */ date[0] = *tap++; date[1] = *tap++; ddate[0] = *tap++; ddate[1] = *tap++; tsize = *tap++; i = size(0, isize*32); talist = sbrk(i*512); tap = talist; while(i--) { tread(tap, 0); tap =+ 256; } switch(com) { case 't': com = 0; pdate(ddate); pdate(date); tap = talist; for(i=0; i sblock.s_isize) { printf("isize too small\n"); continue; } sread(dbuf, 0); dealoc(ip); q = dbuf; for(p = ip; p < &ip->i_mtime[2]; ) *p++ = *q++; restor(ip, sz-1); } dwrite(i+2, buf); } dwrite(1, &sblock); exit(); case 'x': tap = ilist; while(argc > 1) { *tap++ = number(argv[1]); argv++; argc--; } tap = talist; for(i=0; ii_size0 == 0 && ip->i_size1 < 512) com = ip->i_size1; write(fo, dbuf, com); if(com > ip->i_size1) ip->i_size0--; ip->i_size1 =- com; } close(fo); chmod(file, ip->i_mode); chown(file, ip->i_uid); } exit(); } } dealoc(p) struct inode *p; { register struct inode *ip; register i, j; int xbuf[256]; ip = p; if(ip->i_mode & (IFCHR&IFBLK)) return; for(i=0; i<8; i++) if(ip->i_addr[i]) { if(ip->i_mode&ILARG) { dread(ip->i_addr[i], xbuf); for(j=0; j<256; j++) if(xbuf[j]) free(xbuf[j]); } free(ip->i_addr[i]); } } restor(p, sz) struct inode *p; { register struct inode *ip; register i, j; ip = p; if(ip->i_mode & (IFCHR&IFBLK)) return; for(i=0; i<8; i++) ip->i_addr[i] = 0; if(sz <= 8) { for(i=0; ii_addr[i] = rcop(); ip->i_mode =& ~ILARG; return; } j = 0; while(sz >= 256) { for(i=0; i<256; i++) dbuf[i] = rcop(); ip->i_addr[j] = alloc(); dwrite(ip->i_addr[j++], dbuf); sz =- 256; } if(sz) { for(i=0; i<256; i++) dbuf[i] = 0; for(i=0; ii_addr[j] = alloc(); dwrite(ip->i_addr[j], dbuf); } ip->i_mode =| ILARG; } rcop() { register b; b = alloc(); tread(cbuf, 0); dwrite(b, cbuf); return(b); } pdate(d) int *d; { if(d[0] == 0 && d[1] == 0) printf("the epoch\n"); else printf(ctime(d)); } dread(bno, b) { seek(fo, bno, 3); if(read(fo, b, 512) != 512) { printf("read error %l\n", bno); exit(); } } dwrite(bno, b) { seek(fo, bno, 3); if(write(fo, b, 512) != 512) { printf("write error %l\n", bno); exit(); } } sread(b, flag) int *b; { register i, s, *p; tread(b, flag); if(flag) return; i = 256; s = 0; p = b; while(i--) s =+ *p++; if(s != 031415) { printf("checksum error\n"); exit(); } } tread(b, flag) { static char *ta; if(ta++ > tsize) { printf("change tapes\n"); close(fi); while((ta = getchar()) != '\n') if(ta == 0) exit(); ta = 0; otape(); } if(flag) seek(fi, 1, 4); else if(read(fi, b, 512) != 512) { printf("read error\n"); exit(); } } number(s) char *s; { register n, c; n = 0; while(c = *s++) { if(c<'0' || c>'9') continue; n = n*10+c-'0'; } return(n); } size(s0, s1) { register s; extern ldivr; s = ldiv(s0&0377, s1, 512); if(ldivr) s++; return(s); } otape() { fi = open(ifile, 0); if(fi < 0) { printf("can not open %s\n", ifile); exit(); } } dwait(ino) { register i; dconv(ino, file); loop: if(wflg) { printf("%s ", file); i = getchar(); if(i == 'x') exit(); if(i == '\n') return(-1); if(i != 'y') goto flush; i = getchar(); if(i != '\n') { flush: while((i=getchar()) != '\n') if(i == '\0') exit(); goto loop; } } i = creat(file, 0666); return(i); } dconv(n, p) char *p; { register i; if(i = ldiv(0, n, 10)) p = dconv(i, p); *p++ = lrem(0, n, 10) + '0'; *p = '\0'; return(p); } alloc() { register b, i; i = --sblock.s_nfree; if(i<0 || i>=100) { printf("bad freeblock\n"); exit(); } b = sblock.s_free[i]; if(b == 0) { printf("out of freelist\n"); exit(); } if(sblock.s_nfree <= 0) { dread(b, cbuf); sblock.s_nfree = cbuf[0]; for(i=0; i<100; i++) sblock.s_free[i] = cbuf[i+1]; } return(b); } free(in) { register i; if(sblock.s_nfree >= 100) { cbuf[0] = sblock.s_nfree; for(i=0; i<100; i++) cbuf[i+1] = sblock.s_free[i]; sblock.s_nfree = 0; dwrite(in, cbuf); } sblock.s_free[sblock.s_nfree++] = in; } unix_v4/usr/source/s2/mkfs.c0000644000175000017500000001541201026347440014302 0ustar aapaap# struct { char *s_isize; char *s_fsize; int s_nfree; int s_free[100]; int s_ninode; int s_inode[100]; char s_flock; char s_ilock; char s_fmod; int s_time[2]; } filsys; struct inode { int i_number; int i_mode; char i_nlink; char i_uid; char i_gid; char i_size0; char *i_size1; int i_addr[8]; int i_time[4]; }; /* modes */ #define IALLOC 0100000 #define IFMT 060000 #define IFDIR 040000 #define IFCHR 020000 #define IFBLK 060000 #define ILARG 010000 #define ISUID 04000 #define ISGID 02000 #define IREAD 0400 #define IWRITE 0200 #define IEXEC 0100 int utime[2]; int fin; int fsi; int fso; char *charp; int buf[256]; char string[50]; char *fsys; char *proto; main(argc, argv) char **argv; { int f, n; /* * open relevent files */ time(utime); if(argc != 3) { printf("arg count\n"); exit(); } fsys = argv[1]; proto = argv[2]; fso = creat(fsys, 0666); if(fso < 0) { printf("%s: cannot create\n", fsys); exit(); } fsi = open(fsys, 0); if(fsi < 0) { printf("%s: cannot open\n", fsys); exit(); } fin = open(proto, 0); if(fin < 0) { n = 0; for(f=0; proto[f]; f++) { if(proto[f]<'0' || proto[f]>'9') { printf("%s: cannot open\n", proto); exit(); } n = n*10 + proto[f]-'0'; } filsys.s_fsize = n; filsys.s_isize = ldiv(0, n, 43+ldiv(0, n, 1000)); printf("isize = %d\n", filsys.s_isize); charp = "d--777 0 0 $ "; goto f3; } /* * 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, buf, 020); if(buf[0] != 0407) { printf("%s: bad format\n", string); goto f1; } n = buf[1]+buf[2]; if(n > 512) { printf("%s: too big\n", string); goto f1; } read(f, buf, n); wtfs(0, buf); f1: close(f); /* * get total disk size * and inode block size */ f2: filsys.s_fsize = getnum(); filsys.s_isize = getnum(); f3: if(filsys.s_isize > filsys.s_fsize || filsys.s_fsize-filsys.s_isize-2 < filsys.s_isize) { printf("%l/%l: bad ratio\n", filsys.s_fsize, filsys.s_isize); exit(); } free(0); for(n=filsys.s_fsize-1; n!=filsys.s_isize+1; n--) free(n); /* * initialize files */ for(n=0; n<256; n++) buf[n] = 0; for(n=0; n!=filsys.s_isize; n++) wtfs(n+2, buf); cfile(0); /* * write out super block */ for(n=0; n<256; n++) buf[n] = 0; filsys.s_time[0] = utime[0]; filsys.s_time[1] = utime[1]; wtfs(1, &filsys); } cfile(par) struct inode *par; { struct inode in; int db[256], ib[256]; int dbc, ibc; static ino; int i, f, *p1, *p2; /* * get mode, uid and gid */ getstr(); in.i_mode = IALLOC; in.i_mode =| gmode(string[0], "bcd", IFBLK, IFCHR, IFDIR); in.i_mode =| gmode(string[1], "u", ISUID); in.i_mode =| gmode(string[2], "g", ISGID); for(i=3; i<6; i++) { if(string[i]<'0' || string[i]>'7') { printf("%c/%s: bad digit\n", string[i], string); exit(); } in.i_mode =| (string[i]-'0')<<(15-3*i); } in.i_uid = getnum(); in.i_gid = getnum(); /* * general initialization prior to * switching on format */ ino++; in.i_number = ino; if(ldiv(0, ino, 16) > filsys.s_isize) { printf("too many inodes\n"); exit(); } in.i_nlink = 1; in.i_size0 = 0; in.i_size1 = 0; for(i=0; i<8; i++) in.i_addr[i] = 0; for(i=0; i<256; i++) { db[i] = 0; ib[i] = 0; } if(par == 0) { par = ∈ in.i_nlink--; } dbc = 0; ibc = 0; switch(in.i_mode&IFMT) { case 0: /* * regular file * contents is a file name */ getstr(); f = open(string, 0); if(f < 0) { printf("%s: cannot open\n", string); break; } while((i=read(f, db, 512)) > 0) { in.i_size1 =+ i; newblk(&dbc, db, &ibc, ib); } close(f); break; case IFBLK: case IFCHR: /* * special file * content is maj/min types */ in.i_addr[0] = getnum()<<8; in.i_addr[0] =| getnum(); break; case IFDIR: /* * directory * put in extra links * call recursively until * name of "$" found */ par->i_nlink++; entry(par->i_number, "..", &dbc, db, &ibc, ib); in.i_nlink++; entry(in.i_number, ".", &dbc, db, &ibc, ib); in.i_size1 = 32; for(;;) { getstr(); if(string[0]=='$' && string[1]=='\0') break; entry(ino+1, string, &dbc, db, &ibc, ib); in.i_size1 =+ 16; cfile(&in); } break; } if(dbc != 0) newblk(&dbc, db, &ibc, ib); if(ibc > 8) { in.i_mode =| ILARG; dbc = alloc(); wtfs(dbc, ib); in.i_addr[0] = dbc; } else for(i=0; i'9') { printf("%s: bad number\n", string); exit(); } n = n*10 + string[i] - '0'; } return(n); } getstr() { int i, c; loop: switch(c=getch()) { case ' ': case '\t': case '\n': goto loop; case '\0': printf("EOF\n"); exit(); 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) { int n; seek(fsi, bno, 3); n = read(fsi, bf, 512); if(n != 512) { printf("read error: %l\n", bno); exit(); } } wtfs(bno, bf) { int n; seek(fso, bno, 3); n = write(fso, bf, 512); if(n != 512) { printf("write error: %l\n", bno); exit(); } } alloc() { int bno, i; filsys.s_nfree--; bno = filsys.s_free[filsys.s_nfree]; filsys.s_free[filsys.s_nfree] = 0; if(bno == 0) { printf("out of free space\n"); exit(); } if(filsys.s_nfree <= 0) { rdfs(bno, buf); filsys.s_nfree = buf[0]; for(i=0; i<100; i++) filsys.s_free[i] = buf[i+1]; } return(bno); } free(bno) { int i; if(filsys.s_nfree >= 100) { buf[0] = filsys.s_nfree; for(i=0; i<100; i++) buf[i+1] = filsys.s_free[i]; wtfs(bno, buf); filsys.s_nfree = 0; } filsys.s_free[filsys.s_nfree] = bno; filsys.s_nfree++; } entry(ino, str, adbc, db, aibc, ib) char *str; int *adbc, *db, *aibc, *ib; { char *s; int i; db[*adbc] = ino; (*adbc)++; s = &db[*adbc]; for(i=0; i<14; i++) { *s++ = *str; if(*str != '\0') str++; } *adbc =+ 7; if(*adbc >= 256) newblk(adbc, db, aibc, ib); } newblk(adbc, db, aibc, ib) int *adbc, *db, *aibc, *ib; { int bno, i; bno = alloc(); wtfs(bno, db); for(i=0; i<256; i++) db[i] = 0; *adbc = 0; ib[*aibc] = bno; (*aibc)++; if(*aibc >= 256) { printf("indirect block full\n"); exit(); } } getch() { if(charp) return(*charp++); return(getchar()); } unix_v4/usr/source/s2/tr.c0000644000175000017500000000451401026347440013770 0ustar aapaapint 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, rep; char *p; } string1, string2; int inbuf[259]; main(argc,argv) char **argv; { int i, j; int c, d; char *compl; extern fout; string1.last = string2.last = 0; string1.max = string2.max = 0; string1.rep = string2.rep = 0; string1.p = string2.p = ""; if(--argc>0) { argv++; if(*argv[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; for(;;){ if(cflag) c = *compl++; else c = next(&string1); if(c==0) break; d = next(&string2); if(d==0) d = c; code[c&0377] = d; squeez[d&0377] = 1; } 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; } inbuf[0] = 0; fout = dup(1); close(1); while((c=getc(inbuf)) >=0 ) { if(c == 0) continue; if(c = code[c&0377]&0377) if(!sflag || c!=save || !squeez[c&0377]) putchar(save = c); } flush(); } next(s) struct string *s; { int a, b, c, n; int base; if(--s->rep > 0) return(s->last); if(s->last < s->max) return(++s->last); if(*s->p=='[') { nextc(s); s->last = a = nextc(s); s->max = 0; switch(nextc(s)) { case '-': b = nextc(s); if(bp++!=']') goto error; s->max = b; return(a); case '*': base = (*s->p=='0')?8:10; n = 0; while((c = *s->p)>='0' && c<'0'+base) { n = base*n + c - '0'; s->p++; } if(*s->p++!=']') goto error; if(n==0) n = 1000; s->rep = n; return(a); default: error: write(1,"Bad string\n",11); exit(); } } return(nextc(s)); } nextc(s) struct string *s; { int 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); } unix_v4/usr/source/s2/tee.c0000644000175000017500000000127001026347440014114 0ustar aapaapint open[9] { 1 }; int n 1; int t 0; char in[512]; char out[512]; main(argc,argv) char **argv; { int register r,w,p; struct { int x1[2], type, x2[15]; } buf; fstat(1,&buf); t = (buf.type&060000)==020000; while(argc-->1) { open[n++] = creat(argv[1],0666); if(stat(argv[1],&buf)>=0) if((buf.type&060000)==020000) t++; 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 ? 10 : p; for(i=0; i'9') return(-1); n = n*10 + c-'0'; } return(n); } unix_v4/usr/source/s2/typo.c0000644000175000017500000001463201026347440014340 0ustar aapaapchar w2006[24]; flg 0; char realwd[26]; char *wd {&realwd[1]}; /* int etext; int rathole[1000]; */ int neng; int npr; int table[2]; int tab1[26]; int tab2[730]; char tab3[19684]; int logtab[256]; float inctab[256]; char nwd[26]; mask 0377; int tot; int wtot; char *buf[3]; file[3]; ptr[3]; char *name[4]; bsp[768]; main(argc,argv) int argc; char *argv[]; { char let,lt; auto arg,num,t,sw,i,j,k,l,m,salt,er,c; int unl(); int junk; /* monitor(&main, &etext, rathole, 1000); */ if(--argc < 1){printf("arg count\n"); exit(); } buf[0] = bsp; buf[1] = bsp + 0400; buf[2] = bsp + 01000; ptr[0] = 0; ptr[1] = 0; ptr[2] = 1; arg = 1; while(argv[arg][0] == '-') { switch(argv[arg][1]) { default: printf("Unrecognizable argument: %c\n",argv[arg][1]); exit(); case 0: case 'n': neng++; break; case '1': npr++; } arg++; if(--argc < 1) { printf("arg count\n"); exit(); } } if(!neng) { salt = open("/usr/lib/salt",0); er = read(salt,table,4); if(er != 4)err("read salt"); er = read(salt,tab1,52); if(er != 52) err("read salt"); er = read(salt,tab2,1460); if(er != 1460) err("read salt"); er = read(salt,tab3,19684); if(er != 19684)err("read salt"); close(salt); } signal(2,unl); name[0] = "/tmp/ttmpa1"; name[1] = "/tmp/ttmpa2"; name[2] = "/tmp/ttmpa3"; name[3] = "/tmp/ttmpa4"; topen: file[0] = open(name[0],1); if(file[0] > 0){ close(file[0]); j = -1; while(++j < 4)name[j][9]++; if(name[0][9] == 'z')err("creat tmp file"); goto topen; } j = 2; while(j--)file[j] = creat(name[j],0666); while(argc--){ file[2] = open(argv[arg++],0); if(file[2] < 0)err("open input file"); while((j = wdval(2)) != 0){ put(dfile(nwd[0]),nwd,j+1); k = -1; l = 0; m = 1; table[0] = incr(table[0]); while(m <= j+1){ c = 27*wd[k++] + wd[l++]; tab2[c] = incr(tab2[c]); c = 27*c + wd[m++]; tab3[c] = incr(tab3[c] & 0377); } c = 27*wd[k] + wd[l]; tab2[c] = incr(tab2[c]); } done1: close(file[2]); } /* junk = creat("junk\0",0666); write(junk,table,4+52+1460+19684); close(junk); */ j = 2; while(j--){flsh(j,0); close(file[j]); } j = 2; while(j--){ sw = fork(); if(sw == 0){execl("/bin/sort","sort","-o",name[j],name[j],0); err("sort"); } if(sw < 0)err("fork"); er = wait(); if(er != sw)err("probs"); } j = -1; while(++j < 2){ sw = fork(); if(sw == 0){execl("/bin/uniq","uniq",name[j],name[j+2]); err("uniq"); } if(sw < 0)err("fork"); er = wait(); if(er != sw)err("prob"); } file[0] = creat(name[0],0666); if(file[0] < 0)err("creat tmp"); file[1] = open("/usr/lib/w2006",0); if(file[1] < 0)err("open w2006"); ptr[1] = 1; j = -1; while((w2006[++j] = get(1)) != '\n'); lt = 1; while(++lt < 4){ file[2] = open(name[lt],0); if(file[2] < 0)err("open tmp"); ptr[2] = 1; getw: k = -1; while((wd[++k] = get(2)) != '\n')if(wd[k] == 0)goto done; scan: i = -1; l = 0; while(++i <= k){ if(wd[i] < w2006[l]){ put(0,wd,k); goto getw; } if(wd[i] > w2006[l]){ l = -1; while((w2006[++l] = get(1)) != '\n') if(w2006[l] == 0)goto fin; goto scan; } l++; } goto getw; fin: put(0,wd,k); k = -1; while((wd[++k] = get(2)) != 0){ if(wd[k] == '\n'){ put(0,wd,k); k = -1; }} done: close(file[2]); unlink(name[lt]); } flsh(0,0); close(file[1]); close(file[0]); ptr[1] = 1; file[1] = open(name[0],0); if(file[1] < 0)err("open tmp "); file[0] = creat(name[1],0666); if(file[0] < 0)err("create tmp"); while((j = wdval(1)) != 0){ wtot = 0; flg = 0; k = -1; l = 0; m = 1; while(m <= j+1){ tot = 0; c = wd[k++]*27 + wd[l++]; digram(c); digram(wd[k]*27 + wd[l]); tot =>> 1; c = c*27 + wd[m++]; trigram(c); if(tot > wtot) wtot = tot; } if(wtot < 0) wtot = 0; t = conf(wtot,3,wd); wd[3] = ' '; put(0,wd,3); put(0,nwd,j+1); } flsh(0,0); close(file[1]); close(file[0]); /* monitor(0); goto unl; */ sw = fork(); if(sw == 0){execl("/bin/sort","sort","-r","-o",name[1],name[1] ,0); err("sort"); } if(sw < 0)err("fork"); er = wait(); if(er != sw)err("prob"); sw = fork(); if(sw == 0){ if(npr) { execl("/bin/cat","cat",name[1],0); } else { execl("/bin/pr","pr","-3", "-h", "Possible typo's and spelling errors",name[1],0); err("pr"); } } if(sw < 0)err("fork"); er = wait(); if(er != sw)err("prob"); unl(); } unl() { int j; j = 2; while(j--)unlink(name[j]); exit(); } trigram(c) int c; { int t; t = logtab[tab3[c]&0377]; tot =- t; return; } digram(c) int c; { int t; t = logtab[tab2[c]]; tot =+ t; return; } dfile(c) char c; { if(c >= 'a' && c <= 'k')return(0); return(1); } err(c) char c[];{ auto j; printf("cannot %s\n",c); j = 4; while(j--)unlink(name[j]); exit(); } get(ifile) int ifile;{ static char *ibuf[10]; if(--ptr[ifile]){ return(*ibuf[ifile]++);} if(ptr[ifile] = read(file[ifile],buf[ifile],512)){ if(ptr[ifile] < 0)goto prob; ibuf[ifile] = buf[ifile]; return(*ibuf[ifile]++); } ptr[ifile] = 1; return(0); prob: ptr[ifile] = 1; printf("read error\n"); return(0); } put(ofile,s,optr) char s[]; {auto i; while(optr-- >= 0) buf[ofile][(ptr[ofile] < 512)?ptr[ofile]++:flsh(ofile,1)] = *s++; return; } flsh(ofile,i){auto error; error = write(file[ofile],buf[ofile],ptr[ofile]); if(error < 0)goto prob; ptr[ofile] = i; return(0); prob: printf("write error on t.%d\n",file); exit(); } wdval(wfile) int wfile; { static let,wflg; auto j; beg: j = -1; if(wflg == 1){wflg = 0; goto st; } while((let = get(wfile)) != '\n'){ if(let == 0)return(0); st: if(let == '%' && j != -1)goto cont; if(let == '-'){ if((let = get(wfile)) == '\n'){ while((let = get(wfile)) == '\n'); goto st; } wflg = 1; goto ret; } if(let == 047){if(j < 1)goto ret; goto cont; } if(let < 'A')goto ret; if(let <= 'Z'){ wd[++j] = let - 0100; nwd[j] = let + ' '; goto cont; } if(let < 'a' || let > 'z')goto ret; wd[++j] = let - 0140; nwd[j] = let; cont: ; } while(((let = get(wfile)) == '.') || (let == 047)){ while((let = get(wfile)) != '\n'); } wflg = 1; ret: if(j < 1)goto beg; nwd[j+1] = '\n'; wd[j+1] = 0; return(j); } conf(n,width,cbuf) char cbuf[]; { auto i,a; i = width; while(i--)cbuf[i] = ' '; cbuf[(a = n/10)?conf(a,--width,cbuf):--width] = n%10 + '0'; return(++width); } incr(gork) int gork; { float log(), exp(), pow(); int static first; int ii; if(first == 0){ inctab[0] = 1; logtab[0] = -10; for(ii=1; ii<256; ii++){ inctab[ii] = exp(-ii/30.497); logtab[ii] = log(30.*pow(1.0333,ii+0.) - 30.) + .5; } logtab[1] = -10; first = 1; } if(inctab[gork] > rand()/32768.) gork++; if(gork > 255) gork = 255; return(gork); } unix_v4/usr/source/s2/tp1.s0000644000175000017500000000531301026347440014065 0ustar aapaap/ tap1 -- dec-disk lod/dmp .globl _localtime, _end namep = 0 mode = 2 uid = 4; gid = 5 size0 = 7 size1 = 8 time0 = 10. time1 = 12. tapea = 14. dirsiz = 16. mdirent = 496. mov (sp),rnarg mov (sp)+,narg mov $cmr,command incb flu tst (sp)+ cmp narg,$2 bge 1f mov $2,narg br 3f 1: mov (sp)+,r0 mov sp,parg 1: movb (r0)+,r1 beq 3f mov $swtab,r2 2: cmp r1,(r2)+ beq 2f tst (r2)+ bne 2b br useerr 2: jsr pc,*(r2)+ br 1b 3: jsr pc,optap mov $_end,r4 / string pointer jsr pc,setb jmp *command optap: tstb flm bne 2f mov $578.,tapsiz mov $192.,ndirent sys open; tc; 2 br 3f 2: mov $-1,tapsiz mov $mdirent,ndirent cmp command,$cmr beq 2f sys open; mt; 0 br 3f 2: sys open; mt; 1 3: bes 1f mov r0,fio mov ndirent,r1 ash $-3,r1 mov r1,ndentd8 mov ndirent,r1 mul $dirsiz,r1 add $dir,r1 mov r1,edir rts pc 1: jsr r5,mesg ; .even jmp done setcom: cmp command,$cmr bne useerr mov (r5)+,command rts r5 noflag: mov (r5)+,r0 beq 1f tstb (r0) beq noflag br useerr 1: rts r5 useerr: jsr r5,mesg ; .even jmp done swtab: '0; dcof '1; dcof '2; dcof '3; dcof '4; dcof '5; dcof '6; dcof '7; dcof 'c; dcc 'd; dcd 'f; dcf 'i; dci 'm; dcm 'r; dcr 't; dct 'u; dcu 'v; dcv 'w; dcw 'x; dcx 0; 0 dcof: movb r1,tcx movb r1,mtx rts pc dcc: incb flc rts pc dcf: incb flf rts pc dcd: jsr r5,setcom; cmd rts pc dci: incb fli rts pc dcm: incb flm rts pc dcu: incb flu jsr r5,setcom; cmr rts pc dcr: clrb flu jsr r5,setcom; cmr rts pc dct: jsr r5,setcom; cmt rts pc dcv: incb flv rts pc dcw: incb flw rts pc dcx: jsr r5,setcom; cmx rts pc cmd: jsr r5,noflag; flm; flc; flf; 0 cmp narg,$2 bgt 1f jmp useerr 1: jsr pc,rddir jsr r5,gettape; delete jsr pc,wrdir br check cmr: jsr r5,noflag; 0 tstb flc bne 1f tstb flm bne 1f jsr pc,rddir br 2f 1: jsr pc,clrdir 2: jsr pc,getfiles jsr pc,update br check cmt: jsr r5,noflag; flc; flf; flw; 0 jsr pc,rddir tstb flv beq 1f jsr r5,mesg < mode uid gid tapa size date time name\n\0>; .even 1: jsr r5,gettape; taboc br check1 cmx: jsr r5,noflag; flc; flf; 0 jsr pc,rddir jsr r5,gettape; xtract br done check: check1: jsr pc,usage done: jsr r5,mesg ; .even sys exit encode: mov r2,-(sp) mov r4,(r1) mov (r5)+,r2 1: movb (r2),(r4)+ jsr pc,setb tstb (r2)+ bne 1b mov (sp)+,r2 rts r5 decode: mov r2,-(sp) mov r1,-(sp) mov (r1),r1 mov (r5)+,r2 1: movb (r1)+,(r2)+ bne 1b mov (sp)+,r1 mov (sp)+,r2 rts r5 setb: mov r0,-(sp) mov r4,r0 add $513.,r0 cmp r0,sp bhis 2f bic $777,r0 cmp r0,0f beq 1f mov r0,0f sys break; 0:.. bes 2f 1: mov (sp)+,r0 rts pc 2: jsr r5,mesg ; .even jmp done unix_v4/usr/source/s2/prof.c0000644000175000017500000001170401026347440014310 0ustar aapaap/* * Print execution profile */ struct nl { char name[8]; int value; float time; int ncall[2]; }; struct nl nl[600]; struct fnl { char fname[8]; int flag; int fvalue; }; struct cnt { int cvalue; int cncall[2]; } cbuf[200]; struct inode { int idev; int inum; int flags; char nlink; char uid; char gid; char size0; int size; int ptr[8]; int ctime[2]; int mtime[2]; int fill; }; int buf[17]; int i; int j; int highpc; int lowpc; int ccnt; int pcl; int pch; int bufs; int nname; double time; double totime; double maxtime; double scale; double lastx; double lasty; struct nl *np; struct nl *npe; int aflg; int vflg; int lflg; int symoff; int symsiz; int vf; int etext; int fout; int ncount; main(argc, argv) char **argv; { char *namfil; int timcmp(), valcmp(); int nf, pf, overlap; double fnc, ltod(); struct cnt *cp; fout = dup(1); argv++; namfil = "a.out"; while (argc>1) { if (**argv == '-') { if (*++*argv == 'l') lflg++; if (**argv == 'a') aflg = 040; if(**argv == 'v') vflg++; } else namfil = *argv; argc--; argv++; } if ((nf = open(namfil, 0)) < 0) { printf("Can't find %s\n", namfil); done(); } read(nf, buf, 020); if (buf[0] != 0407 && buf[0] != 0410) { /* a.out magic */ printf("Bad format: %s\n", namfil); done(); } symsiz = buf[4]; symoff = buf[1] + buf[2]; if (buf[7] != 1) symoff =<< 1; seek(nf, symoff+020, 0); if ((pf = open("mon.out", 0)) < 0) { printf("No mon.out\n"); done(); } fstat(pf, buf); read(pf, &lowpc, 2); read(pf, &highpc, 2); read(pf, &ncount, 2); bufs = buf->size/2 - 3*(ncount+1); read(pf, cbuf, ncount*6); lowpc = (lowpc>>1) & 077777; highpc = (highpc>>1) & 077777; npe = nl; for (nname = 0; symsiz > 0; symsiz =- 12) { read(nf, buf, 12); if ((buf->flag | aflg) != 042) continue; buf->fvalue = (buf->fvalue>>1) & 077777; npe->value = buf->fvalue; for (i=0; i<8; i++) npe->name[i] = buf->fname[i]; npe++; nname++; } if (nname == 0) { printf("No symbols: %s\n", namfil); done(); } npe->value = 077777; npe++; for (cp = cbuf; cp < &cbuf[ncount]; cp++) for (np = nl; np < npe; np++) if (cp->cvalue-6 == np->value<<1) { np->ncall[0] = cp->cncall[0]; np->ncall[1] = cp->cncall[1]; break; } qsort(nl, nname, 18, &valcmp); scale = (highpc-lowpc)/(bufs+0.0); for (i = -1; read(pf, &ccnt, 2)==2; i++) { if (ccnt == 0) continue; time = ccnt; if (ccnt<0) time =+ 65536.; totime =+ time; if(time > maxtime) maxtime = time; pcl = lowpc + scale*i; pch = lowpc + scale*(i+1); 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*time/scale; } } if (totime==0.0) { printf("No time accumulated\n"); done(); } if(!vflg) goto print; vf = open("/dev/vt0", 1); if(vf < 0) { printf("Cannot open vt\n"); done(); } fout = vf; vtch(1); vtch(1); vtch(3); point(-2048., -2048.); point(-2048., 2048.); vtch(3); point(0., -2048.); point(0., 2048.); for(j=0; j<9; j++) { vtch(3); point(-2048., 2048. - j*512.); point(0., 2048. - j*512.); } lastx = 0.; lasty = 2048.; scale = 4096./(i-1); seek(pf, 6*(ncount+1), 0); while(read(pf, &ccnt, 2)==2) { time = ccnt; if(ccnt < 0) time =+ 65536.; vtch(3); point(lastx, lasty); lastx = -time*2000./maxtime; point(lastx, lasty); vtch(3); point(lastx, lasty); lasty =- scale; point(lastx, lasty); } scale = 4096./(highpc-lowpc); lastx = 50.; for(np = nl; npvalue < lowpc) continue; if(np->value >= highpc) continue; time = np->time/totime; lasty = 2048. - (np->value - lowpc)*scale; vtch(3); point(0., lasty); point(50., lasty); vtch(3); point(lastx-50., lasty); point(lastx, lasty); vtch(9); point(lastx+10., lasty+60.); vtch(1); vtch(3); for(j=0; j<8; j++) if(np->name[j] != '_') vtch(np->name[j]); vtch(0); lastx =+ 500.; if(lastx > 2000.) lastx = 50.; } done(); print: printf(" name %%time #call ms/call\n"); if (!lflg) qsort(nl, nname, 18, &timcmp); for (np = nl; nptime/totime; printf("%8.8s%6.1f", np->name, 100*time); fnc = ltod(np->ncall); if (fnc != 0.0) { printf("%6s", locv(np->ncall[0], np->ncall[1])); printf(" %7.2f\n", np->time/(fnc*.06)); } else printf("\n"); } done(); } min(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); } vtch(c) int c; { putchar(c&0377); } point(x, y) float x, y; { point1(x); point1(y); } point1(xy) float xy; { int ixy; struct { char b1; char b2;}; if(xy > 2047.) xy = 2047.; if(xy < -2048.) xy = -2048.; ixy = xy; vtch(ixy.b1); vtch(ixy.b2); } done() { flush(); exit(); } unix_v4/usr/source/s2/tp4.s0000644000175000017500000000115501026347440014070 0ustar aapaap/ tap4 -- dec-tape lod/dmp .data tc: tcx: mt: mtx: <0\0> tboot: mboot: .even .bss dir: . = .+[mdirent*dirsiz] tapeb: map: .=.+4096. emap: ch: .=.+1 flc: .=.+1 flf: .=.+1 fli: .=.+1 flm: .=.+1 flu: .=.+1 flv: .=.+1 flw: .=.+1 .even command:.=.+2 sum: .=.+2 size: .=.+2 nentr: .=.+2 nused: .=.+2 nfree: .=.+2 lused: .=.+2 catlb: .=.+20. narg: .=.+2 rnarg: .=.+2 parg: .=.+2 fio: .=.+2 mss: .=.+2 ndirent:.=.+2 ndentd8:.=.+2 edir: .=.+2 rseeka: .=.+2 wseeka: .=.+2 tapsiz: .=.+2 name: .=.+32. name1: .=.+32. statb: .=.+40. chgrp = 0. / fake smdate = 30. unix_v4/usr/source/s2/who.c0000644000175000017500000000141001026347440014130 0ustar aapaap/* * who */ int fout; int buf[256]; main(argc, argv) char **argv; { char *s, *cbuf; int n, fi, i; struct { char name[8]; char tty; char pad1; int time[2]; char pad2[2]; } *p; s = "/tmp/utmp"; if(argc > 1) s = argv[1]; fi = open(s, 0); if(fi < 0) { write("cannot open wtmp\n", 17); exit(); } fout = dup(1); close(1); loop: n = read(fi, buf, 512); if(n == 0) { flush(); exit(); } p = &buf; for(p = &buf; (n=-16)>=0; p++) { if(p->name[0] == '\0' && argc==1) continue; for(i=0; i<8; i++) { if(p->name[i] == '\0') p->name[i] = ' '; putchar(p->name[i]); } for(i=0; i<3; i++) putchar("tty"[i]); putchar(p->tty); cbuf = ctime(p->time); for(i=3; i<16; i++) putchar(cbuf[i]); putchar('\n'); } goto loop; } unix_v4/usr/source/s3/0000755000175000017500000000000001026347440013174 5ustar aapaapunix_v4/usr/source/s3/ecvt.s0000644000175000017500000000320301026347440014317 0ustar aapaapldfps = 170100^tst stfps = 170200^tst / ftoa -- basic g fp conversion .globl _ndigit .globl ecvt .globl fcvt / ecvt converts fr0 into decimal / the string of converted digits is pointed to by r0. / the number of digits are specified by _ndigit / r2 contains the decimal point / r1 contains the sign fcvt: clr eflag br 1f ecvt: mov $1,eflag 1: stfps -(sp) ldfps $200 movf fr0,-(sp) movf fr1,-(sp) mov r3,-(sp) mov $buf,r1 clr r2 clr sign tstf fr0 cfcc beq zer bgt 1f inc sign negf fr0 1: modf $one,fr0 tstf fr1 cfcc beq lss gtr: movf fr0,-(sp) movf fr1,fr0 1: mov $buftop,r3 1: modf tenth,fr0 movf fr0,fr2 movf fr1,fr0 addf $epsilon,fr2 modf $ten,fr2 movfi fr3,r0 add $'0,r0 movb r0,-(r3) inc r2 tstf fr0 cfcc bne 1b / mov $buf,r1 1: movb (r3)+,(r1)+ cmp r3,$buftop blo 1b / movf (sp)+,fr0 br pad zer: inc r2 br pad lss: dec r2 modf $ten,fr0 tstf fr1 cfcc beq lss inc r2 jsr pc,digit1 pad: jsr pc,digit br out br pad digit: cmp r1,$buftop bhis 1f add $2,(sp) modf $ten,fr0 digit1: movfi fr1,r0 add $'0,r0 movb r0,(r1)+ 1: rts pc / out: mov $buf,r0 add _ndigit,r0 tst eflag bne 1f add r2,r0 1: cmp r0,$buf blo outout movb (r0),r3 add $5,r3 movb r3,(r0) 1: cmpb (r0),$'9 ble 1f movb $'0,(r0) cmp r0,$buf blos 2f incb -(r0) br 1b 2: movb $'1,(r0) inc r2 1: outout: mov sign,r1 mov _ndigit,r0 tst eflag bne 1f add r2,r0 1: clrb buf(r0) mov $buf,r0 mov (sp)+,r3 movf (sp)+,fr1 movf (sp)+,fr0 ldfps (sp)+ rts pc epsilon = 037114 one = 40200 ten = 41040 .data tenth: 037314; 146314; 146314; 146315 _ndigit:10. .bss buf: .=.+40. buftop: sign: .=.+2 eflag: .=.+2 .text unix_v4/usr/source/s3/fpx.s0000644000175000017500000000050601026347440014156 0ustar aapaap/ fpx -- floating point simulation reenter: 1 .bss asign: .=.+2 areg: .=.+8 aexp: .=.+2 bsign: .=.+2 breg: .=.+8 bexp: .=.+2 fpsr: .=.+2 trapins: .=.+2 ac0: .=.+8. ac1: .=.+8. ac2: .=.+8. ac3: .=.+8. ac4: .=.+8. ac5: .=.+8. sr0: .=.+2 sr1: .=.+2 .=.+2 .=.+2 .=.+2 .=.+2 ssp: .=.+2 spc: .=.+2 sps: .=.+2 pctmp: .=.+8 unix_v4/usr/source/s3/qsort.s0000644000175000017500000000274601026347440014541 0ustar aapaap/ / copyright 1972 bell telephone laboratories inc. / / quicker sort / mov $base,r1 / mov $base+[n*width],r2 / mov $width,r3 / jsr pc,qsort / r0,r1,r2,r3,r4 are used .globl qsort .globl compare qsort: mov r5,-(sp) mov r4,-(sp) bit $1,r3 bne 1f bit $1,r1 bne 1f cmp r3,$2 bne 2f mov $exch1,exchange br 3f 2: mov r3,r5 clc ror r5 mov r5,width mov $exchw,exchange br 3f 1: mov $exchb,exchange 3: jsr pc,qs1 mov (sp)+,r4 mov (sp)+,r5 rts pc qs1: mov r1,r5 neg r5 add r2,r5 bgt 1f rts pc 1: clr r4 dvd r3,r4 asr r4 mpy r3,r4 mov r5,r4 add r1,r4 mov r1,-(sp) mov r2,-(sp) loop: cmp r1,r4 bhis loop1 mov r1,r0 jsr pc,compare bgt loop1 add r3,r1 br loop loop1: cmp r2,r4 blos 1f sub r3,r2 mov r2,r0 jsr pc,compare bge loop1 jsr pc,*exchange cmp r1,r4 bne loop mov r2,r4 br loop 1: cmp r1,r4 beq 1f jsr pc,*exchange mov r1,r4 br loop1 1: mov (sp)+,r2 mov r4,-(sp) mov r4,r1 add r3,r1 mov r2,r0 sub r1,r0 sub 2(sp),r4 cmp r0,r4 blo 1f mov (sp)+,r0 mov (sp)+,r4 mov r1,-(sp) mov r2,-(sp) mov r0,r2 mov r4,r1 1: jsr pc,qs1 mov (sp)+,r2 mov (sp)+,r1 br qs1 exchb: mov r1,-(sp) mov r2,-(sp) mov r3,r5 1: movb (r1),r0 movb (r2),(r1)+ movb r0,(r2)+ sob r5,1b mov (sp)+,r2 mov (sp)+,r1 rts pc exchw: mov r1,-(sp) mov r2,-(sp) mov width,r5 1: mov (r1),r0 mov (r2),(r1)+ mov r0,(r2)+ sob r5,1b mov (sp)+,r2 mov (sp)+,r1 rts pc exch1: mov (r1),r0 mov (r2),(r1) mov r0,(r2) rts pc .bss exchange: .=.+2 width: .=.+2 unix_v4/usr/source/s3/sin.s0000644000175000017500000000346201026347440014156 0ustar aapaapldfps = 170100^tst stfps = 170200^tst / .globl sin .globl cos / / floating point sin/cos / replaces the value in fr0 by its sin/cos / there are no error exits / coefficients are #3370 from Hart & Cheney / cos: absf fr0 mov $1,-(sp) br 1f sin: clr -(sp) 1: stfps -(sp) ldfps $200 movf fr1,-(sp) movf fr2,-(sp) mov r0,-(sp) / / quadrant reduction - arg = (2/J)x / -1 < arg < 1 / movf fr0,-(sp) absf fr0 modf frpi2,fr0 modf $fourth,fr1 mulf $four,fr1 movfi fr1,r0 add 34(sp),r0 movf $one,fr1 inc r0 ror r0 bcs 1f subf $one,fr0 1: ror r0 bcc 1f negf fr0 1: tstf (sp)+ cfcc bpl 1f negf fr0 1: movf fr0,fr1 mulf fr0,fr1 /arg^2 / movf p4,fr2 mulf fr1,fr2 addf p3,fr2 mulf fr1,fr2 addf p2,fr2 mulf fr1,fr2 addf p1,fr2 mulf fr1,fr2 addf p0,fr2 mulf fr2,fr0 / zP(z^2) / movf fr1,fr2 addf q3,fr2 mulf fr1,fr2 addf q2,fr2 mulf fr1,fr2 addf q1,fr2 mulf fr1,fr2 addf q0,fr2 / Q(z^2) / divf fr2,fr0 / zP(z^2)/Q(z^2) / mov (sp)+,r0 movf (sp)+,fr2 movf (sp)+,fr1 ldfps (sp)+ tst (sp)+ / clc /tst clears carry rts r5 / fourth = 37600 one = 40200 four = 40600 / frpi2: 40042;174603; 67116; 42025 / p0: 046117;031130;175220;165273 p1: 145626;154170;031651;104637 p2: 044726;162341;133224;052302 p3: 143530;056427;005061;125021 p4: 042021;174005;170441;175607 q0: 046003;163716;123445;167144 q1: 044707;047147;032436;120046 q2: 043423;156142;064161;007314 q3: 042004;123513;026637;160477 / /p0 = .13578 84097 87737 56690 92680 d8 /p1 = -.49429 08100 90284 41611 58627 d7 /p2 = .44010 30535 37526 65019 44918 d6 /p3 = -.13847 27249 98245 28730 54457 d5 /p4 = .14596 88406 66576 87222 26959 d3 /q0 = .86445 58652 92253 44299 15149 d7 /q1 = .40817 92252 34329 97493 95779 d6 /q2 = .94630 96101 53820 81805 71257 d4 /q3 = .13265 34908 78613 63589 11494 d3 /q4 = .1 d1 unix_v4/usr/source/s3/atan.s0000644000175000017500000000452601026347440014312 0ustar aapaapldfps = 170100^tst stfps = 170200^tst / .globl atan .globl atan2 / / floating-point arctangent / / atan replaces the value in fr0 by its arctangent / in the range [-pi/2,pi/2]. / / atan2 places in fr0 the arctangent of fr0/fr1 / in the range [-pi,pi]. / / there are no error exits / / coefficients are #5076 from Hart & Cheney. / / atan: jsr r0,save tstf fr0 cfcc blt 1f jsr r5,satan br ret 1: negf fr0 jsr r5,satan negf fr0 br ret / atan2: jsr r0,save clr -(sp) tstf fr0 cfcc bge 1f inc (sp) negf fr0 1: tstf fr1 cfcc beq 2f bgt 1f add $2,(sp) negf fr1 1: divf fr1,fr0 jsr r5,satan br 1f 2: movf pi2,fr0 1: bit $2,(sp) beq 1f negf fr0 addf pi2,fr0 addf pi2,fr0 1: bit $1,(sp)+ beq 1f negf fr0 1: ret: ldfps (sp)+ movf (sp)+,fr3 movf (sp)+,fr2 movf (sp)+,fr1 mov (sp)+,r0 rts r5 save: movf fr1,-(sp) movf fr2,-(sp) movf fr3,-(sp) stfps -(sp) ldfps $40200 / DP, no interrupt jmp (r0) satan: cmpf sq2m1,fr0 cfcc bge arctan cmpf sq2p1,fr0 cfcc bgt 1f movf one,fr1 divf fr0,fr1 movf fr1,fr0 jsr r5,arctan negf fr0 addf pi2,fr0 rts r5 1: movf fr0,fr1 subf one,fr0 addf one,fr1 divf fr1,fr0 jsr r5,arctan addf pi4,fr0 rts r5 arctan: mov $p4p,r0 mov $4,-(sp) movf fr0,fr3 mulf fr3,fr3 movf *(r0)+,fr1 1: mulf fr3,fr1 addf *(r0)+,fr1 dec (sp) bne 1b mov $4,(sp) movf fr3,fr2 br 2f 1: mulf fr3,fr2 2: addf *(r0)+,fr2 dec (sp) bne 1b tst (sp)+ divf fr2,fr1 mulf fr1,fr0 rts r5 / p4p: p4;p3;p2;p1;p0 q3;q2;q1;p0 one: 40200;0;0;0 pi2: 40311;7732;121041;64302 pi4: 40111;7732;121041;64302 sq2p1: 40432 101171 114774 167461 sq2m1: 37724 11714 147747 74621 p4: 37442 145026 75504 15621 p3: 40725 21566 115517 50305 p2: 41443 160206 172714 25441 p1: 41632 172223 76027 56645 p0: 41462 25125 6152 126064 q3: 41170 10112 141724 64324 q2: 41573 53776 25372 71522 q1: 41670 123114 51576 75020 / one = 1.00000 00000 00000 00000 d0 / sq2p1=2.41421 35623 73095 04880 d0 / sq2m1= .41421 35623 73095 04880 d0 / pi2 = 1.57079 63267 94896 61923 d0 / p4 = .15897 40288 48230 7048 d0 / p3 = .66605 79017 00926 2658 d1 / p2 = .40969 26483 21022 5637 d2 / p1 = .77477 68771 92042 0862 d2 / p0 = .44541 34005 92906 8032 d2 / q4 = .10000 00000 00000 0000 d1 / q3 = .15503 97755 14219 8753 d2 / q2 = .62835 93051 10323 7683 d2 / q1 = .92324 80107 23009 7484 d2 / q0 = .44541 34005 92906 8044 d2 unix_v4/usr/source/s3/log.s0000644000175000017500000000325401026347440014145 0ustar aapaap.globl log ldfps = 170100^tst stfps = 170200^tst ldexp = 176400^movif stexp = 175000^movfi / / log accepts its argument and returns its result / in fr0. The carry bit is set if the argument is / zero or negative. / The coefficients are #2705 from Hart & Cheney. / / movf arg,fr0 / jsr r5,log / movf fr0,... / log: tstf fr0 cfcc bgt 1f movf $bigneg,fr0 /return -(big) on error sec rts r5 1: stfps -(sp) ldfps $200 /di mode movf fr2,-(sp) movf fr1,-(sp) / stexp fr0,-(sp) /scale ldexp $0,fr0 cmpf sqrt2o2,fr0 cfcc blt 1f ldexp $1,fr0 dec (sp) 1: movf fr0,fr1 /(1/2)^(1/2) < x < 2^(1/2) subf $one,fr0 addf $one,fr1 divf fr1,fr0 /z = (x-1)/(x+1) movf fr0,fr1 mulf fr0,fr1 /z^2 / movf p3,fr2 mulf fr1,fr2 addf p2,fr2 mulf fr1,fr2 addf p1,fr2 mulf fr1,fr2 addf p0,fr2 mulf fr2,fr0 /zP(z) / movf fr1,fr2 addf q2,fr2 mulf fr1,fr2 addf q1,fr2 mulf fr1,fr2 addf q0,fr2 /Q(z) / divf fr2,fr0 /zP(z)/Q(z) movif (sp)+,fr1 mulf log2,fr1 addf fr1,fr0 / movf (sp)+,fr1 movf (sp)+,fr2 ldfps (sp)+ rts r5 / / one = 40200 bigneg = 177777 / sqrt2o2: 40065; 02363; 31771; 157145 log2: 40061; 71027;173721;147572 / p0: 141300; 16201; 02154; 10216 p1: 41367;124211; 21611;114442 p2: 141032; 31773; 64222; 40261 p3: 37727;114303;110107;114145 / q0: 141100; 16201; 02154; 10216 q1: 41233;154404;136454; 22153 q2: 141016;111747; 07541; 52530 / / /p0 = -.24013 91795 59210 50986 8484 d2 /p1 = .30957 29282 15376 50062 264 d2 /p2 = -.96376 90933 68686 59324 d1 /p3 = .42108 73712 17979 7145 d0 / /q0 = -.12006 95897 79605 25471 7525 d2 /q1 = .19480 96607 00889 73051 623 d2 /q2 = -.89111 09027 93783 12337 d1 /q3 = .1 d1 / unix_v4/usr/source/s3/mon.s0000644000175000017500000000161201026347440014151 0ustar aapaap/ monitor-- create mon.out for prof / jsr r5,monitor; lowpc; highpc; buf; bufsize / / jsr r5,monexit .globl monitor .globl monexit profil = 44. monitor: mov r0,-(sp) mov r1,-(sp) mov r2,-(sp) mov (r5)+,r1 / lo pc mov (r5)+,r2 / hi pc mov (r5)+,r0 / buff mov r1,(r0)+ mov r2,(r0)+ mov r0,buff sub r1,r2 ble botch mov (r5)+,r0 / size sub $4,r0 ble botch cmp r0,r2 blt 1f mov r2,r0 1: mov r0,bufs clr r1 div r2,r0 bvc 1f mov $77777,r0 1: asl r0 mov r0,scale sys 0; 9f .data 9: sys profil; buff:.. ; bufs:..; lowpc:..; scale:.. .text mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts r5 monexit: mov r0,-(sp) sys creat; monout; 017 bes botch mov buff,0f sub $4,0f mov bufs,0f+2 add $4,0f+2 sys 0; 9f .data 9: sys write; 0:..; .. .text mov (sp)+,r0 rts r5 botch: mov $1,r0 sys write; mesg; emesg-mesg 4 mesg: emesg: monout: .even unix_v4/usr/source/s3/rand.s0000644000175000017500000000034501026347440014306 0ustar aapaap/ random fixed point number generator .globl rand, srand srand: mov r0,ranx rts pc rand: mov r1,-(sp) mov ranx,r1 mpy $13077.,r1 add $6925.,r1 mov r1,r0 mov r0,ranx bic $100000,r0 mov (sp)+,r1 rts pc .data ranx: 1 unix_v4/usr/source/s3/compar.s0000644000175000017500000000043201026347440014640 0ustar aapaap/ default comparison routine for qsort / set codes for / / cmp (r0),(r4) / .globl compare compare: mov r3,-(sp) mov r4,-(sp) 1: cmpb (r0)+,(r4)+ bne 1f dec r3 bne 1b clr r0 br 2f 1: blo 1f mov $1,r0 br 2f 1: mov $-1,r0 2: mov (sp)+,r4 mov (sp)+,r3 tst r0 rts pc unix_v4/usr/source/s3/atoi.s0000644000175000017500000000044601026347440014320 0ustar aapaap/ atoi / ascii to integer input conversion / jsr r5,atoi; getc .globl atoi atoi: clr r1 jsr r5,*(r5) clr -(sp) cmp r0,$'- bne 2f inc (sp) 1: jsr r5,*(r5) 2: sub $'0,r0 cmp r0,$9 bhi 1f mpy $10.,r1 add r0,r1 br 1b 1: add $'0,r0 tst (sp)+ beq 1f neg r1 1: tst (r5)+ rts r5 unix_v4/usr/source/s3/nlist.s0000644000175000017500000000230701026347440014513 0ustar aapaap/ nlist -- extract values from name list / / jsr r5,nlist; file; list / ... / / /list: ; type; value / ; type; value / ... / 0 .globl nlist nlist: mov r0,-(sp) mov r1,-(sp) mov r2,-(sp) mov (r5)+,0f mov (r5)+,r1 mov r1,r0 1: tst (r0) beq 1f add $8.,r0 clr (r0)+ clr (r0)+ / initialize to undefined br 1b 1: sys 0; 9f .data 9: sys open; 0:..; 0 .text bes done mov r0,r2 sys read; buf; 20 cmp r0,$20 bne cdone mov buf+4,count / assume older a.out mov buf+2,0f cmp buf,$405 beq 1f mov buf+8.,count / now assume newer mov buf+2,r0 / txt add buf+4,r0 / data cmp buf+16,$1 / relocation? beq 4f asl r0 / txt+data reloc 4: add $20,r0 / header mov r0,0f cmp buf,$410 beq 1f cmp buf,$407 bne cdone 1: mov r2,r0 sys 0; 9f .data 9: sys seek; 0:..; 0 .text 1: sub $12.,count blt cdone mov r2,r0 sys read; buf; 12. cmp r0,$12. bne cdone mov r1,r0 2: tst (r0) beq 1b cmp (r0),buf bne 1f cmp 2(r0),buf+2 bne 1f cmp 4(r0),buf+4 bne 1f cmp 6(r0),buf+6 bne 1f mov buf+8.,8.(r0) mov buf+10.,10.(r0) 1: add $12.,r0 br 2b cdone: mov r2,r0 sys close done: mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rts r5 .bss buf: .=.+20 count: .=.+2 unix_v4/usr/source/s3/fp3.s0000644000175000017500000000647101026347440014060 0ustar aapaap/ fp3 -- floating simulation i.addx: jsr pc,setab br 1f i.subx: jsr pc,setab neg bsign 1: tst bsign beq reta tst asign beq retb mov areg+8,r1 sub breg+8,r1 blt 1f beq 2f cmp r1,$56. bge reta mov $breg,r0 br 4f 1: neg r1 cmp r1,$56. bge retb mov $areg,r0 4: mov r1,-(sp) mov (r0)+,r1 mov (r0)+,r2 mov (r0)+,r3 mov (r0)+,r4 add (sp),(r0) 1: clc ror r1 ror r2 ror r3 ror r4 dec (sp) bgt 1b mov r4,-(r0) mov r3,-(r0) mov r2,-(r0) mov r1,-(r0) tst (sp)+ 2: mov $areg+8,r1 mov $breg+8,r2 mov $4,r0 cmp asign,bsign bne 4f clc 1: adc -(r1) bcs 3f add -(r2),(r1) 2: dec r0 bne 1b br 5f 3: add -(r2),(r1) sec br 2b br 5f 4: clc 1: sbc -(r1) bcs 3f sub -(r2),(r1) 2: dec r0 bne 1b br 5f 3: sub -(r2),(r1) sec br 2b saret: mov $areg,r1 5: tst (r1) bge 3f mov $areg+8,r1 mov $4,r0 clc 1: adc -(r1) bcs 2f neg (r1) 2: dec r0 bne 1b neg -(r1) 3: jsr pc,norm br reta retb: mov $bsign,r1 mov $asign,r2 mov $6,r0 1: mov (r1)+,(r2)+ dec r0 bne 1b reta: mov r5,r2 mov $asign,r0 tst (r0) beq unflo mov aexp,r1 cmp r1,$177 bgt ovflo cmp r1,$-177 blt unflo add $200,r1 swab r1 clc ror r1 tst (r0)+ bge 1f bis $100000,r1 1: bic $!177,(r0) bis (r0)+,r1 mov r1,(r2)+ mov (r0)+,(r2)+ bit $m.ext,fpsr beq 1f mov (r0)+,(r2)+ mov (r0)+,(r2)+ 1: rts pc unflo: clr (r2)+ clr (r2)+ bit $m.ext,fpsr beq 1f clr (r2)+ clr (r2)+ 1: rts pc ovflo: bis $2,fpsr / set v-bit (overflow) jmp ret i.mulx: jsr pc,i.mul br saret i.modx: jsr pc,i.mul jsr pc,norm mov $asign,r0 mov $bsign,r1 mov $6,r2 1: mov (r0)+,(r1)+ dec r2 bne 1b clr r0 / count mov $200,r1 / bit clr r2 / reg offset 1: cmp r0,aexp bge 2f / in fraction bic r1,areg(r2) br 3f 2: bic r1,breg(r2) 3: inc r0 clc ror r1 bne 1b mov $100000,r1 add $2,r2 cmp r2,$8 blt 1b jsr pc,norm jsr pc,reta cmp r5,$ac1 beq 1f cmp r5,$ac3 beq 1f bit $200,breg bne 2f clr bsign 2: add $8,r5 jsr pc,retb sub $8,r5 1: rts pc i.divx: jsr pc,setab tst bsign beq ovflo sub bexp,aexp jsr pc,xorsign mov r5,-(sp) mov $areg,r0 mov (r0),r1 clr (r0)+ mov (r0),r2 clr (r0)+ mov (r0),r3 clr (r0)+ mov (r0),r4 clr (r0)+ mov $areg,r5 mov $400,-(sp) 1: mov $breg,r0 cmp (r0)+,r1 blt 2f bgt 3f cmp (r0)+,r2 blo 2f bhi 3f cmp (r0)+,r3 blo 2f bhi 3f cmp (r0)+,r4 bhi 3f 2: mov $breg,r0 sub (r0)+,r1 clr -(sp) sub (r0)+,r2 adc (sp) clr -(sp) sub (r0)+,r3 adc (sp) sub (r0)+,r4 sbc r3 adc (sp) sub (sp)+,r2 adc (sp) sub (sp)+,r1 bis (sp),(r5) 3: asl r4 rol r3 rol r2 rol r1 clc ror (sp) bne 1b mov $100000,(sp) add $2,r5 cmp r5,$areg+8 blo 1b tst (sp)+ mov (sp)+,r5 jmp saret i.mul: jsr pc,setab add bexp,aexp dec aexp jsr pc,xorsign mov r5,-(sp) mov $breg+4,r5 bit $m.ext,fpsr beq 1f add $4,r5 1: clr r0 clr r1 clr r2 clr r3 clr r4 1: asl r0 bne 2f inc r0 tst -(r5) 2: cmp r0,$400 bne 2f cmp r5,$breg bhi 2f mov $areg,r0 mov r1,(r0)+ mov r2,(r0)+ mov r3,(r0)+ mov r4,(r0)+ mov (sp)+,r5 rts pc 2: clc ror r1 ror r2 ror r3 ror r4 bit r0,(r5) beq 1b mov r0,-(sp) mov $areg,r0 add (r0)+,r1 clr -(sp) add (r0)+,r2 adc (sp) clr -(sp) add (r0)+,r3 adc (sp) add (r0)+,r4 adc r3 adc (sp) add (sp)+,r2 adc (sp) add (sp)+,r1 mov (sp)+,r0 br 1b xorsign: cmp asign,bsign beq 1f mov $-1,asign rts pc 1: mov $1,asign rts pc unix_v4/usr/source/s3/mesg.s0000644000175000017500000000047601026347440014322 0ustar aapaap.globl mesg / usage: / jsr r5,mesg / / .even / ... / / string is output onto $1 / mesg: mov r0,-(sp) mov r5,r0 mov r5,0f 1: tstb (r5)+ bne 1b sub r5,r0 com r0 mov r0,0f+2 mov $1,r0 sys 0; 9f .data 9: sys write; 0:..; .. .text inc r5 bic $1,r5 mov (sp)+,r0 rts r5 unix_v4/usr/source/s3/switch.s0000644000175000017500000000077401026347440014671 0ustar aapaap/ switch -- switch on contents of r0 / / / calling sequence -- / / jsr r5,switch; swtab / / r0 is looked up in swtab and if found / control is returned to the corresponding place / if r0 is not found, the next inline instruction is / executed / / swtab format -- / / swtab: / val1; ret1 / val2; ret2 / ... / valn; retn / ..; 0 / .globl switch switch: mov r1,-(sp) mov (r5)+,r1 1: cmp r0,(r1)+ beq 1f tst (r1)+ bne 1b 2: mov (sp)+,r1 rts r5 1: mov (r1)+,r1 beq 2b mov r1,r5 br 2b unix_v4/usr/source/s3/atof.s0000644000175000017500000000221201026347440014306 0ustar aapaapldfps = 170100^tst stfps = 170200^tst / .globl atof .globl atoi / / atof - ascii to floating (input) conversion / uses klt's ghastly calling convention / result is returned in fr0 / / atof: stfps -(sp) ldfps $200 movf fr1,-(sp) mov r1,-(sp) mov r2,-(sp) / clr -(sp) clrf fr0 clr r2 jsr r5,*(r5) cmpb r0,$'- bne 2f inc (sp) 1: jsr r5,*(r5) 2: sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,digit br 1b inc r2 br 1b 2: cmpb r0,$'.-'0 bne 2f 1: jsr r5,*(r5) sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,digit dec r2 br 1b 2: cmpb r0,$'e-'0 bne 1f mov (r5),0f jsr r5,atoi; 0:.. sub $'0,r0 add r1,r2 1: movf $one,fr1 mov r2,-(sp) beq 2f bgt 1f neg r2 1: cmp r2,$38. blos 1f clrf fr0 tst (sp)+ bmi out movf $huge,fr0 br out 1: mulf $ten,fr1 sob r2,1b 2: tst (sp)+ bge 1f divf fr1,fr0 br 2f 1: mulf fr1,fr0 cfcc bvc 2f movf $huge,fr0 2: out: tst (sp)+ beq 1f negf fr0 1: add $'0,r0 mov (sp)+,r2 mov (sp)+,r1 movf (sp)+,fr1 ldfps (sp)+ tst (r5)+ rts r5 / / digit: cmpf $big,fr0 cfcc blt 1f mulf $ten,fr0 movif r0,fr1 addf fr1,fr0 rts pc 1: add $2,(sp) rts pc / / one = 40200 ten = 41040 big = 56200 huge = 77777 unix_v4/usr/source/s3/pow.s0000644000175000017500000000067001026347440014170 0ustar aapaap.globl pow, log, exp pow: / 0^0~ is 0 tstf fr0 cfcc bne 1f tstf fr1 cfcc beq bad rts r5 1: / -^i is +^i fixed sign bpl 1f movf fr1,-(sp) modf $one,fr1 cfcc bne bad1 movf (sp)+,fr1 absf fr0 jsr r5,1f bes bad movf fr1,-(sp) modf $half,fr1 cfcc beq 2f negf fr0 2: movf (sp)+,fr1 rts r5 1: jsr r5,log bes 1f mulf fr1,fr0 jsr r5,exp 1: rts r5 bad1: movf (sp)+,fr1 bad: sec rts r5 one = 40200 half = 40000 unix_v4/usr/source/s3/ctime.c0000644000175000017500000000763001026347440014447 0ustar aapaap# /* * 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 corrects for daylight saving * time and will work in any time zone provided * "timezone" is adjusted to the difference between * Greenwich and local standard time (measured in seconds). * In places like Michigan "daylight" must * be initialized to 0 to prevent the conversion * to daylight time. * * "nixonflg,", if set to 1, will * cause daylight savings time all year around * independently of "daylight". * * 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. */ char cbuf[26]; int dmsize[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int timezone 5*60*60; int tzname[] { "EST", "EDT", }; int daylight 1; /* Allow daylight conversion */ int nixonflg 1; /* Daylight time all year around */ #define SEC 0 #define MIN 1 #define HOUR 2 #define MDAY 3 #define MON 4 #define YEAR 5 #define WDAY 6 #define YDAY 7 #define ISDAY 8 ctime(at) int *at; { return(asctime(localtime(at))); } localtime(tim) int tim[]; { register int *t, *ct, dayno; int daylbegin, daylend; int copyt[2]; t = copyt; t[0] = tim[0]; t[1] = tim[1]; dpadd(t, -timezone); ct = gmtime(t); dayno = ct[YDAY]; if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 || dayno==5 && ct[HOUR]>=2))) { daylight =| 1; daylbegin = -1; daylend = 367; } else { daylbegin = sunday(ct, 119); /* last Sun in Apr */ daylend = sunday(ct, 303); /* last Sun in Oct */ } if (daylight && (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) && (dayno= dysize(d1); d1++) d0 =- dysize(d1); xtime[YEAR] = d1; xtime[YDAY] = d0; /* * 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[ISDAY] = 0; return(xtime); } asctime(t) int *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[6]]; cp = cbuf; *cp++ = *ncp++; *cp++ = *ncp++; *cp++ = *ncp++; cp++; tp = &t[4]; ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3]; *cp++ = *ncp++; *cp++ = *ncp++; *cp++ = *ncp++; cp = numb(cp, *--tp); cp = numb(cp, *--tp+100); cp = numb(cp, *--tp+100); cp = numb(cp, *--tp+100); cp =+ 2; cp = numb(cp, t[YEAR]); return(cbuf); } dysize(y) { if((y%4) == 0) return(366); return(365); } numb(acp, n) { register char *cp; cp = acp; cp++; if (n>=10) *cp++ = (n/10)%10 + '0'; else *cp++ = ' '; *cp++ = n%10 + '0'; return(cp); } unix_v4/usr/source/s3/sqrt.s0000644000175000017500000000116401026347440014353 0ustar aapaapldfps = 170100^tst stfps = 170200^tst / / sqrt replaces the f.p. number in fr0 by its / square root. newton's method / .globl sqrt / / sqrt: tstf fr0 cfcc bne 1f clc rts r5 /sqrt(0) 1: bgt 1f clrf fr0 sec rts r5 / 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 r5 / half = 40000 unix_v4/usr/source/s3/exp.s0000644000175000017500000000343701026347440014163 0ustar aapaap.globl exp / ldfps = 170100^tst stfps = 170200^tst ldexp = 176400^movif stexp = 175000^movfi / / exp accepts its argument and returns its result / in fr0. The carry bit is set if the result overflows. / The coefficients are #1067 from Hart & Cheney. / / movf arg,fr0 / jsr r5,exp / movf fr0,result / exp: stfps -(sp) ldfps $200 /di mode movf fr2,-(sp) movf fr1,-(sp) tstf fr0 cfcc bne 1f movf $one,fr0 /exp(0) clc br out 1: modf log2e,fr0 /exp(x) = 2^(x*log2(e)) cfcc bmi 2f movfi fr1,-(sp) /save integer part subf $half,fr0 br 3f 2: movfi fr1,-(sp) dec (sp) addf $half,fr0 3: movf fr0,fr1 / -.5 < x < +.5 mulf fr1,fr1 /arg**2 / movf P2,fr2 mulf fr1,fr2 addf P1,fr2 mulf fr1,fr2 addf P0,fr2 mulf fr2,fr0 /xP(x**2) / movf fr1,fr2 addf Q1,fr2 mulf fr1,fr2 addf Q0,fr2 /Q(x**2) / movf fr2,fr1 subf fr0,fr1 addf fr2,fr0 divf fr1,fr0 /(Q+xP)/(Q-xP) mulf sqrt2,fr0 / stexp fr0,-(sp) add (sp)+,(sp) / cmp (sp),$177 ble 2f tst (sp)+ movf big,fr0 /overflow sec br 1f 2: cmp (sp),$-177 bge 2f tst (sp)+ clrf fr0 /underflow clc br 1f 2: ldexp (sp)+,fr0 clc 1: out: movf (sp)+,fr1 movf (sp)+,fr2 ldfps (sp)+ rts r5 / / P0: 42675; 36404; 77563; 46675 P1: 41241; 116724; 114237; 60333 P2: 36675; 27102; 125560; 136652 Q0: 43210; 100661; 76072; 62453 Q1: 42151; 27450; 75350; 112503 log2e: 40270; 125073; 24534; 13761 sqrt2: 40265; 02363; 31771; 157144 half = 40000 one = 40200 / big: 77777; 177777; 177777; 177777 / / P0 = .15139 06799 05433 89158 94328 d4 / P1 = .20202 06565 12869 27227 886 d2 / P2 = .23093 34775 37502 33624 d-1 / / Q0 = .43682 11662 72755 84984 96814 d4 / Q1 = .23318 42114 27481 62379 0295 d3 / Q2 = .1 d1 / / log2e = 1.44269 50408 88963 40735 99246 / sqrt2 = 1.41421 35623 73095 04880 16887 unix_v4/usr/source/s3/fp2.s0000644000175000017500000000363101026347440014052 0ustar aapaap/ fp2 -- floating point simulation i.ldx: mov (r3)+,(r2)+ mov (r3)+,(r2)+ bit $m.ext,fpsr beq 1f mov (r3)+,(r2)+ mov (r3)+,(r2)+ rts pc 1: clr (r2)+ clr (r2)+ rts pc i.stx: mov (r2)+,(r3)+ mov (r2)+,(r3)+ bit $m.ext,fpsr beq 1f mov (r2)+,(r3)+ mov (r2)+,(r3)+ 1: rts pc i.clrx: clr (r3)+ clr (r3)+ bit $m.ext,fpsr beq 1f clr (r3)+ clr (r3)+ 1: rts pc i.negx: tst (r3) beq 1f add $100000,(r3) 1: rts pc i.absx: bic $!77777,(r3) rts pc i.tstx: rts pc i.cmpx: mov $areg,r5 tst (r2) bge 1f tst (r3) bge 1f cmp (r2),(r3) bgt 4f blt 3f 1: cmp (r2)+,(r3)+ bgt 3f blt 4f cmp (r2)+,(r3)+ bne 1f bit $m.ext,fpsr beq 2f cmp (r2)+,(r3)+ bne 1f cmp (r2)+,(r3)+ beq 2f 1: bhi 3f 4: mov $1,(r5) rts pc 3: mov $-1,(r5) rts pc 2: clr (r5) rts pc i.ldcyx: mov (r3)+,(r2)+ mov (r3)+,(r2)+ bit $m.ext,fpsr bne 1f mov (r3)+,(r2)+ mov (r3)+,(r2)+ rts pc 1: clr (r2)+ clr (r2)+ rts pc i.stcxy: mov (r2)+,(r3)+ mov (r2)+,(r3)+ bit $m.ext,fpsr bne 1f clr (r3)+ clr (r3)+ 1: rts pc i.ldcjx: mov $asign,r0 mov $1,(r0)+ mov (r3)+,(r0)+ bit $m.lngi,fpsr beq 1f mov (r3)+,(r0)+ clr (r0)+ clr (r0)+ mov $32.-8,(r0)+ jmp saret 1: clr (r0)+ clr (r0)+ clr (r0)+ mov $16.-8,(r0) jmp saret i.stcxj: mov r3,r5 mov $asign,r0 jsr pc,seta mov $areg,r0 mov (r0)+,r1 mov (r0)+,r2 mov (r0)+,r3 mov aexp,r0 1: cmp r0,$48.-8 bge 1f clc ror r1 ror r2 ror r3 inc r0 br 1b 1: bgt xoflo tst r1 bne xoflo 1: bit $m.lngi,fpsr beq 1f tst asign bge 2f neg r3 adc r2 bcs 2f neg r2 2: mov r2,(r5) mov r3,2(r5) rts pc 1: tst r2 bne xoflo tst asign bge 2f neg r3 2: mov r3,(r5) rts pc xoflo: bis $1,fpsr / set fixed overflow (carry) jmp ret i.ldexp: mov $asign,r0 jsr pc,seta mov (r3),aexp jsr pc,reta jmp sret i.stexp: mov $asign,r0 jsr pc,seta mov aexp,(r3) mov r3,r5 jmp sret i.ldfps: mov (r3),fpsr jmp ret i.stfps: mov fpsr,(r3) jmp ret unix_v4/usr/source/s3/ldiv.s0000644000175000017500000000035101026347440014315 0ustar aapaap/ C library-- long divide/remainder .globl _ldiv, _ldivr .globl _lrem _ldiv: mov 2(sp),r0 mov 4(sp),r1 div 6(sp),r0 mov r1,_ldivr rts pc _lrem: mov 2(sp),r0 mov 4(sp),r1 div 6(sp),r0 mov r1,r0 rts pc .bss _ldivr: .=.+2 unix_v4/usr/source/s3/gamma.s0000644000175000017500000001004201026347440014437 0ustar aapaap.globl gamma, signgam, _signgam .globl log, sin half = 040000 one = 40200 two = 40400 eight = 41000 large = 77777 ldfps = 170100^tst stfps = 170200^tst / / gamma computes the log of the abs of the gamma function. / gamma accepts its argument and returns its result / in fr0. The carry bit is set if the result is / too large to represent. / The sign of the gamma function is / returned in the globl cell signgam. / / The coefficients for expansion around zero / are #5243 from Hart & Cheney; for expansion / around infinity they are #5404. / / movf arg,fr0 / jsr r5,gamma / movf fr0,... / gamma: stfps -(sp) ldfps $200 clr signgam movf fr1,-(sp) tstf fr0 cfcc ble negative cmpf $eight,fr0 cfcc blt asymptotic jsr r5,regular / lret: jsr r5,log bec ret 4 ret: movf (sp)+,fr1 ldfps (sp)+ clc rts r5 / erret: movf $large,fr0 movf (sp)+,fr1 ldfps (sp)+ sec rts r5 / / here for positive x > 8 / the log of the gamma function is / approximated directly by the asymptotic series. / asymptotic: movf fr0,-(sp) movf fr0,fr1 jsr r5,log subf $half,fr1 mulf fr1,fr0 subf (sp),fr0 addf goobie,fr0 / movf $one,fr1 divf (sp)+,fr1 movf fr0,-(sp) movf fr1,-(sp) mulf fr1,fr1 / mov r0,-(sp) mov $p5p,r0 mov $5,-(sp) movf *(r0)+,fr0 1: mulf fr1,fr0 addf *(r0)+,fr0 dec (sp) bne 1b tst (sp)+ mov (sp)+,r0 mulf (sp)+,fr0 addf (sp)+,fr0 br ret / / here on negative / the negative gamma is computed / in terms of the pos gamma. / negative: absf fr0 movf fr0,fr1 mulf pi,fr0 jsr r5,sin negf fr0 cfcc beq erret bgt 1f inc signgam absf fr0 1: mov signgam,-(sp) mulf fr1,fr0 divf pi,fr0 jsr r5,log movf fr0,-(sp) movf fr1,fr0 jsr r5,gamma addf (sp)+,fr0 negf fr0 mov (sp)+,signgam br ret / / control comes here for arguments less than 8. / if the argument is 23 then the argument / is reduced in range by the formula / gamma(x+1) = x*gamma(x) / regular: subf $two,fr0 cfcc bge 1f addf $two,fr0 movf fr0,-(sp) addf $one,fr0 movf fr0,-(sp) addf $one,fr0 jsr r5,regular divf (sp)+,fr0 divf (sp)+,fr0 rts r5 1: cmpf $one,fr0 cfcc bgt 1f addf $one,fr0 movf fr0,-(sp) subf $two,fr0 jsr r5,1b mulf (sp)+,fr0 rts r5 1: movf fr2,-(sp) mov r0,-(sp) mov $p4p,r0 mov $6,-(sp) movf fr0,fr2 movf *(r0)+,fr0 1: mulf fr2,fr0 addf *(r0)+,fr0 dec (sp) bne 1b mov $7,(sp) movf fr2,fr1 br 2f 1: mulf fr2,fr1 2: addf *(r0)+,fr1 dec (sp) bne 1b tst (sp)+ mov (sp)+,r0 divf fr1,fr0 movf (sp)+,fr2 rts r5 / p4p: p6;p5;p4;p3;p2;p1;p0 q6;q5;q4;q3;q2;q1;q0 / p6 = -.67449 50724 59252 89918 d1 / p5 = -.50108 69375 29709 53015 d2 / p4 = -.43933 04440 60025 67613 d3 / p3 = -.20085 27401 30727 91214 d4 / p2 = -.87627 10297 85214 89560 d4 / p1 = -.20886 86178 92698 87364 d5 / p0 = -.42353 68950 97440 89647 d5 / q7 = 1.0 d0 / q6 = -.23081 55152 45801 24562 d2 / q5 = +.18949 82341 57028 01641 d3 / q4 = -.49902 85266 21439 04834 d3 / q3 = -.15286 07273 77952 20248 d4 / q2 = +.99403 07415 08277 09015 d4 / q1 = -.29803 85330 92566 49932 d4 / q0 = -.42353 68950 97440 90010 d5 p1: 143643 26671 36161 72154 p2: 143410 165327 54121 172630 p3: 142773 10340 74264 152066 p4: 142333 125113 176657 75740 p5: 141510 67515 65111 24263 p6: 140727 153242 163350 32217 p0: 144045 70660 101665 164444 q1: 143072 43052 50302 136745 q2: 43433 50472 145404 175462 q3: 142677 11556 144553 154177 q4: 142371 101646 141245 11264 q5: 42075 77614 43022 27573 q6: 141270 123404 76130 12650 q0: 144045 70660 101665 164444 p5p: s5;s4;s3;s2;s1;s0 / / s5 = -.16334 36431 d-2 / s4 = +.83645 87892 2 d-3 / s3 = -.59518 96861 197 d-3 / s2 = +.79365 05764 93454 d-3 / s1 = -.27777 77777 35865 004 d-2 / s0 = +.83333 33333 33331 01837 d-1 / goobie = 0.91893 85332 04672 74178 d0 s5: 135726 14410 15074 17706 s4: 35533 42714 111634 76770 s3: 135434 3200 171173 156141 s2: 35520 6375 12373 111437 s1: 136066 5540 132625 63540 s0: 37252 125252 125252 125047 goobie: 40153 37616 41445 172645 pi: 40511 7732 121041 64302 .bss _signgam: signgam:.=.+2 unix_v4/usr/source/s3/dpadd.s0000644000175000017500000000025601026347440014437 0ustar aapaap/ C library -- signed dp add .globl _dpadd _dpadd: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 tst 6(r5) sxt r1 add r1,(r0)+ add 6(r5),(r0) adc -(r0) mov (sp)+,r5 rts pc unix_v4/usr/source/s3/fakfp.s0000644000175000017500000000013001026347440014441 0ustar aapaap/ fakefp -- fake floating point simulator .globl fptrap fptrap: sub $2,(sp) 2 / rti unix_v4/usr/source/s3/fp1.s0000644000175000017500000001057101026347440014052 0ustar aapaap/ fp1 -- floating point simulator rti = 2 bpt = 3 m.ext = 200 / long mode bit m.lngi = 100 / long integer mode .globl fptrap .globl ac0, ac1, ac2, ac3 fptrap: dec reenter bge 1f 4 / reentered! 1: mov (sp)+,spc mov (sp)+,sps mov r0,sr0 sys signal; 4; fptrap mov $sr1,r0 mov r1,(r0)+ mov r2,(r0)+ mov r3,(r0)+ mov r4,(r0)+ mov r5,(r0)+ mov sp,(r0)+ sub $8,sp / room for double push mov (r0),r5 / pc clr trapins mov -(r5),r5 / trapped instruction mov r5,r4 bic $7777,r4 cmp r4,$170000 beq 1f jmp badins 1: bic $100000,fpsr / clear fp error bic $170000,r5 mov r5,r4 bit $7000,r4 bne class3 bit $700,r4 bne class2 cmp r4,$12 blos 1f jmp badins 1: asl r4 jmp *1f(r4) 1: i.cfcc / 170000 i.setf / 170001 i.seti / 170002 badins badins badins badins badins badins i.setd / 170011 i.setl / 170012 class2: cmp r5,$400 bge 1f jsr r1,fsrc; mod0rx; mod242 br 2f 1: jsr r1,fsrc; mod0f; mod24f 2: mov r3,r5 asl r4 asl r4 clrb r4 swab r4 asl r4 jsr pc,*1f(r4) jmp sret 1: badins / 1700xx i.ldfps / 1701xx i.stfps / 1702xx badins / 1703xx - stst i.clrx / 1704xx i.tstx / 1705xx i.absx / 1706xx i.negx / 1707xx class3: cmp r5,$5000 blt 1f mov r5,r2 clrb r2 cmp r2,$6400 blt 2f sub $1400,r2 2: cmp r2,$5000 bne 2f jsr r1,fsrc; mod0rx; mod242 br 3f 2: cmp r2,$5400 bne 2f jsr r1,fsrc; mod0ra; mod24i br 3f 2: jsr r1,fsrc; mod0f; mod24d br 3f 1: jsr r1,fsrc; mod0f; mod24f 3: jsr pc,freg mov r2,r5 clrb r4 swab r4 asl r4 jsr pc,*1f(r4) br sret 1: badins / 1700xx badins / 1704xx i.mulx / 1710xx i.modx / 1714xx i.addx / 1720xx i.ldx / 1724xx i.subx / 1730xx i.cmpx / 1734xx i.stx / 1740xx i.divx / 1744xx i.stexp / 1750xx i.stcxj / 1754xx i.stcxy / 1760xx i.ldexp / 1764xx i.ldcjx / 1770xx i.ldcyx / 1774xx i.cfcc: mov fpsr,r0 bic $!17,r0 mov r0,sps br ret i.setf: bic $m.ext,fpsr br ret i.setd: bis $m.ext,fpsr br ret i.seti: bic $m.lngi,fpsr br ret i.setl: bis $m.lngi,fpsr br ret badins: inc trapins br ret sret: mov $fpsr,r0 bic $17,(r0) tst (r5) bpl 1f bis $10,(r0) br ret 1: bne ret bis $4,(r0) ret: mov $sr1,r0 mov (r0)+,r1 mov (r0)+,r2 mov (r0)+,r3 mov (r0)+,r4 mov (r0)+,r5 mov (r0)+,sp mov sr0,r0 mov sps,-(sp) mov spc,-(sp) tst trapins bne 1f inc reenter rti 1: bpt freg: mov r5,r2 bic $!300,r2 asr r2 asr r2 asr r2 add $ac0,r2 rts pc fsrc: mov r5,r3 bic $!7,r3 / register asl r3 add $sr0,r3 mov r5,r0 bic $!70,r0 / mode asr r0 asr r0 jmp *1f(r0) 1: mod0 mod1 mod2 mod3 mod4 mod5 mod6 mod7 mod24f: mov $4,r0 bit $m.ext,fpsr beq 1f add $4,r0 1: rts pc mod24d: mov $8,r0 bit $m.ext,fpsr beq 1f sub $4,r0 1: rts pc mod242: mov $2,r0 rts pc mod24i: mov $2,r0 bit $m.lngi,fpsr beq 1f add $2,r0 1: rts pc mod0: jmp *(r1)+ mod0f: sub $sr0,r3 / get fp ac cmp r3,$6*2 bhis badi1 asl r3 asl r3 add $ac0,r3 tst (r1)+ rts r1 mod0ra: bit $m.lngi,fpsr bne badi1 mod0r: cmp r3,$ssp bhis badi1 mod0rx: tst (r1)+ rts r1 mod1: cmp r3,$spc beq badi1 mov (r3),r3 br check mod2: mov (r3),-(sp) jsr pc,*2(r1) cmp r3,$spc bne 1f mov $2,r0 mov *(r3),pctmp mov $pctmp,(sp) 1: add r0,(r3) mov (sp)+,r3 br check mod3: mov *(r3),-(sp) add $2,(r3) mov (sp)+,r3 br check mod4: cmp r3,$spc / test pc beq badi1 jsr pc,*2(r1) sub r0,(r3) mov (r3),r3 br check mod5: cmp r3,$spc beq badi1 sub $2,(r3) mov *(r3),r3 br check mod6: mov *spc,-(sp) add $2,spc add (r3),(sp) mov (sp)+,r3 br check mod7: jsr r1,mod6; ..; .. mov (r3),r3 br check badi1: jmp badins check: bit $1,r3 bne badi1 cmp (r1)+,(r1)+ rts r1 setab: mov $asign,r0 jsr pc,seta mov r3,r2 mov $bsign,r0 seta: clr (r0) mov (r2)+,r1 mov r1,-(sp) beq 1f blt 2f inc (r0)+ br 3f 2: dec (r0)+ 3: bic $!177,r1 bis $200,r1 br 2f 1: clr (r0)+ 2: mov r1,(r0)+ mov (r2)+,(r0)+ bit $m.ext,fpsr beq 2f mov (r2)+,(r0)+ mov (r2)+,(r0)+ br 3f 2: clr (r0)+ clr (r0)+ 3: mov (sp)+,r1 asl r1 clrb r1 swab r1 sub $200,r1 mov r1,(r0)+ / exp rts pc norm: mov $areg,r0 mov (r0)+,r1 mov r1,-(sp) mov (r0)+,r2 bis r2,(sp) mov (r0)+,r3 bis r3,(sp) mov (r0)+,r4 bis r4,(sp)+ bne 1f clr asign rts pc 1: bit $!377,r1 beq 1f clc ror r1 ror r2 ror r3 ror r4 inc (r0) br 1b 1: bit $200,r1 bne 1f asl r4 rol r3 rol r2 rol r1 dec (r0) br 1b 1: mov r4,-(r0) mov r3,-(r0) mov r2,-(r0) mov r1,-(r0) rts pc unix_v4/usr/source/s3/put.s0000644000175000017500000000233601026347440014174 0ustar aapaap/ putw/putc -- write words/characters on output file / / fcreat -- create an output file for use by put(w|c) / / calling sequences -- / / mov $filename,r0 / jsr r5,fcreat; ioptr / / on return ioptr is set up for use by put or error / bit is set if file could not be created. / / mov(b) thing,r0 / jsr r5,put(w|c)1; ioptr / / the character or word is written out. / / jsr r5,flush; ioptr / / the buffer is fled. / .globl putc, putw, flush, fcreat fcreat: mov r1,-(sp) mov (r5)+,r1 mov r0,0f sys 0; 9f .data 9: sys creat; 0:..; 666 .text bes 1f mov r0,(r1)+ 2: clr (r1)+ clr (r1)+ mov (sp)+,r1 rts r5 1: mov $-1,(r1)+ mov (sp)+,r1 sec rts r5 .data putw: mov (r5),8f mov (r5)+,9f mov r0,-(sp) jsr r5,putc; 8:.. mov (sp)+,r0 swab r0 jsr r5,putc; 9:.. rts r5 .text putc: mov r1,-(sp) mov (r5)+,r1 1: dec 2(r1) bge 1f mov r0,-(sp) jsr pc,fl mov (sp)+,r0 br 1b 1: movb r0,*4(r1) inc 4(r1) mov (sp)+,r1 rts r5 flush: mov r0,-(sp) mov r1,-(sp) mov (r5)+,r1 jsr pc,fl mov (sp)+,r1 mov (sp)+,r0 rts r5 fl: mov r1,r0 add $6,r0 mov r0,-(sp) mov r0,0f mov 4(r1),0f+2 beq 1f sub (sp),0f+2 mov (r1),r0 sys 0; 9f .data 9: sys write; 0:..; .. .text 1: mov (sp)+,4(r1) mov $512.,2(r1) rts pc unix_v4/usr/source/s3/get.s0000644000175000017500000000236301026347440014143 0ustar aapaap/ getw/getc -- get words/characters from input file / fopen -- open a file for use by get(c|w) / / calling sequences -- / / mov $filename,r0 / jsr r5,fopen; ioptr / / on return ioptr buffer is set up or error bit is set if / file could not be opened. / / jsr r5,get(c|w)1; ioptr / / on return char/word is in r0; error bit is / set on error or end of file. / / ioptr is the address of a 518-byte buffer / whose layout is as follows: / / ioptr: .=.+2 / file descriptor / .=.+2 / charact+2 / pointer to next character (reset if no. chars=0) / .=.+512. / the buffer .globl getc,getw,fopen fopen: mov r1,-(sp) mov (r5)+,r1 mov r0,0f sys 0; 9f .data 9: sys open; 0:..; 0 .text bes 1f mov r0,(r1)+ clr (r1)+ mov (sp)+,r1 rts r5 1: mov $-1,(r1) mov (sp)+,r1 sec rts r5 .data getw: mov (r5),9f mov (r5)+,8f jsr r5,getc; 8:.. bec 1f rts r5 1: mov r0,-(sp) jsr r5,getc; 9:.. swab r0 bis (sp)+,r0 rts r5 .text getc: mov r1,-(sp) mov (r5)+,r1 dec 2(r1) bge 1f mov r1,r0 add $6,r0 mov r0,0f mov r0,4(r1) mov (r1),r0 sys 0; 9f .data 9: sys read; 0:..; 512. .text bes 2f tst r0 bne 3f 2: mov (sp)+,r1 sec rts r5 3: dec r0 mov r0,2(r1) 1: clr r0 bisb *4(r1),r0 inc 4(r1) mov (sp)+,r1 rts r5 unix_v4/usr/source/s3/crypt.s0000644000175000017500000000365201026347440014527 0ustar aapaap/ crypt -- password incoding / mov $key,r0 / jsr pc,crypt .globl crypt, word crypt: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov r5,-(sp) mov r0,r1 mov $key,r0 movb $004,(r0)+ movb $034,(r0)+ 1: cmp r0,$key+64. bhis 1f movb (r1)+,(r0)+ bne 1b 1: dec r0 / / / fill out key space with clever junk / mov $key,r1 1: movb -1(r0),r2 movb (r1)+,r3 xor r3,r2 movb r2,(r0)+ cmp r0,$key+128. blo 1b / / / establish wheel codes and cage codes / mov $wheelcode,r4 mov $cagecode,r5 mov $256.,-(sp) 2: clr r2 clr (r4) mov $wheeldiv,r3 3: clr r0 mov (sp),r1 div (r3)+,r0 add r1,r2 bic $40,r2 bis shift(r2),(r4) cmp r3,$wheeldiv+6. bhis 4f bis shift+4(r2),(r5) 4: cmp r3,$wheeldiv+10. blo 3b sub $2,(sp) tst (r4)+ tst (r5)+ cmp r4,$wheelcode+256. blo 2b tst (sp)+ / .data shift: 1;2;4;10;20;40;100;200;400;1000;2000;4000;10000;20000;40000;100000 1;2 wheeldiv: 32.; 18.; 10.; 6.; 4. .bss cagecode: .=.+256. wheelcode: .=.+256. .text / / / make the internal settings of the machine / both the lugs on the 128 cage bars and the lugs / on the 16 wheels are set from the expanded key / mov $key,r0 mov $cage,r2 mov $wheel,r3 1: movb (r0)+,r1 bic $!177,r1 asl r1 mov cagecode(r1),(r2)+ mov wheelcode(r1),(r3)+ cmp r0,$key+128. blo 1b / / / now spin the cage against the wheel to produce output. / mov $word,r4 mov $wheel+128.,r3 3: mov -(r3),r2 mov $cage,r0 clr r5 1: bit r2,(r0)+ beq 2f incb r5 2: cmp r0,$cage+256. blo 1b / / we have a piece of output from current wheel / it needs to be folded to remove lingering hopes of / inverting the function / mov r4,-(sp) clr r4 div $26.+26.+10.,r4 add $'0,r5 cmp r5,$'9 blos 1f add $'A-'9-1,r5 cmp r5,$'Z blos 1f add $'a-'Z-1,r5 1: mov (sp)+,r4 movb r5,(r4)+ cmp r4,$word+8. blo 3b / mov (sp)+,r5 mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov $word,r0 rts pc .bss key: .=.+128. word: .=.+32. cage: .=.+256. wheel: .=.+256. unix_v4/usr/source/s3/ttyn.s0000644000175000017500000000102301026347440014352 0ustar aapaap/ return name of current tty .globl ttyn, _ttyn _ttyn: mov 2(sp),r0 br 1f ttyn: clr r0 1: mov $'x,name tst -(sp) sys fstat; buf bes er1 mov buf+2,(sp) sys open; dev; 0 bes er1 mov r0,r1 1: mov r1,r0 sys read; buf; 16. bes er cmp r0,$16. bne er mov $buf,r0 cmp (r0)+,(sp) bne 1b cmp (r0)+,$"tt bne 1b cmpb (r0)+,$'y bne 1b tstb (r0)+ beq 1b cmpb (r0),$'\0 bne 1b movb -(r0),name er: mov r1,r0 sys close er1: tst (sp)+ movb name,r0 rts pc .data dev: .even .bss buf: .=.+40. name: .=.+2 unix_v4/usr/source/s3/hypot.s0000644000175000017500000000061401026347440014524 0ustar aapaap/ hypot -- sqrt(fr0**2 + fr1**2) -> fr0; no overflow unless / necessary. / c-bit is set on overflow .globl hypot .globl sqrt hypot: movf fr1,-(sp) absf fr0 absf fr1 cmpf fr0,fr1 cfcc bne 1f movf $one,fr0 br 3f 1: blt 2f movf fr0,-(sp) movf fr1,fr0 movf (sp)+,fr1 2: divf fr1,fr0 mulf fr0,fr0 3: addf $one,fr0 jsr r5,sqrt mulf fr1,fr0 cfcc movf (sp)+,fr1 rts r5 one = 40200 unix_v4/usr/source/s4/0000755000175000017500000000000001026347440013175 5ustar aapaapunix_v4/usr/source/s4/ecvt.s0000644000175000017500000000047201026347440014325 0ustar aapaap/ C interface to ecvt & fcvt .globl _ecvt, _fcvt .globl ecvt, fcvt, _ndigit .globl savr5, retrn _ecvt: jsr r5,setup jsr pc,ecvt br 1f _fcvt: jsr r5,setup jsr pc,fcvt 1: mov savr5,r5 clr savr5 mov r2,*16(r5) mov r1,*20(r5) jmp retrn setup: mov sp,savr5 movf 4(sp),fr0 mov 14(sp),_ndigit jmp (r5) unix_v4/usr/source/s4/getcsw.s0000644000175000017500000000012301026347440014651 0ustar aapaap/ C library - getcsw / csw = getcsw(); .globl _getcsw _getcsw: sys 38. rts pc unix_v4/usr/source/s4/mon.c0000644000175000017500000000110301026347440014125 0ustar aapaapmonitor(lowpc, highpc, buf, bufsiz, cntsiz) char *lowpc, *highpc; int *buf, bufsiz; { register char *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; } if (nargs() <= 4) cntsiz = 0; ssiz = bufsiz; buf[0] = lowpc; buf[1] = 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 = ldiv(bufsiz, 0, o<<1); else o = 077777; profil(buf, bufsiz<<1, lowpc, o<<1); } unix_v4/usr/source/s4/atan2.s0000644000175000017500000000022501026347440014365 0ustar aapaap.globl _atan2,atan2,retrn,savr5 _atan2: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 movf 12.(r5),fr1 jsr r5,atan2 clr savr5 jmp retrn unix_v4/usr/source/s4/close.s0000644000175000017500000000026101026347440014465 0ustar aapaap/ C library -- close / error = close(file); .globl _close, retrn, cerror _close: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys close bec 1f jmp cerror 1: clr r0 jmp retrn unix_v4/usr/source/s4/link.s0000644000175000017500000000035101026347440014315 0ustar aapaap/ C library -- link / error = link(old-file, new-file); / .globl _link, retrn, cerror _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 jmp retrn .data 9: sys link; 0:..; .. unix_v4/usr/source/s4/write.s0000644000175000017500000000042501026347440014514 0ustar aapaap/ C library -- write / nwritten = write(file, buffer, count); / / nwritten == -1 means error .globl _write, retrn, cerror _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: jmp retrn .data 9: sys write; 0:..; .. unix_v4/usr/source/s4/sin.s0000644000175000017500000000017301026347440014153 0ustar aapaap.globl _sin,sin,retrn,savr5 _sin: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,sin clr savr5 jmp retrn unix_v4/usr/source/s4/atan.s0000644000175000017500000000017701026347440014311 0ustar aapaap.globl _atan,atan,retrn,savr5 _atan: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,atan clr savr5 jmp retrn unix_v4/usr/source/s4/umount.s0000644000175000017500000000031101026347440014703 0ustar aapaap/ C library -- umount/ .globl _umount, retrn .comm _errno,2 .data _umount: mov r5,-(sp) mov sp,r5 mov 4(sp),0f sys umount; 0:.. bes 1f clr r0 br 2f 1: mov r0,_errno mov $-1,r0 2: jmp retrn unix_v4/usr/source/s4/log.s0000644000175000017500000000017301026347440014143 0ustar aapaap.globl _log,log,retrn,savr5 _log: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,log clr savr5 jmp retrn unix_v4/usr/source/s4/putc.s0000644000175000017500000000200301026347440014327 0ustar aapaap/ putw/putc -- write words/characters on output file .globl _putc, _putw, _fflush, _fcreat .globl cerror .comm _errno,2 _fcreat: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),r1 mov pc,(r1) / a putatively illegal file desc. sys 0; 9f .data 9: sys creat; 0:..; 666 .text bes badret mov r0,(r1)+ clr (r1)+ clr (r1)+ br goodret _putw: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),r1 mov r0,-(sp) jsr pc,putc1 mov (sp)+,r0 swab r0 jsr pc,putc1 br goodret _putc: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),r1 jsr pc,putc1 mov 4(r5),r0 br goodret putc1: dec 2(r1) blt 1f movb r0,*4(r1) inc 4(r1) rts pc 1: mov r0,-(sp) jsr pc,fl mov (sp)+,r0 br putc1 _fflush: mov r5,-(sp) mov sp,r5 mov 4(r5),r1 jsr pc,fl br goodret fl: mov r1,r0 add $6,r0 mov r0,-(sp) mov r0,0f mov 4(r1),0f+2 beq 1f sub (sp),0f+2 mov (r1),r0 sys 0; 9f .data 9: sys write; 0:..; .. .text 1: mov (sp)+,4(r1) mov $512.,2(r1) rts pc badret: jmp cerror goodret: clr _errno mov (sp)+,r5 rts pc unix_v4/usr/source/s4/crand.s0000644000175000017500000000026201026347440014450 0ustar aapaap.globl _srand, _rand, retrn .globl rand, srand _srand: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 jsr pc,srand jmp retrn _rand: mov r5,-(sp) mov sp,r5 jsr pc,rand jmp retrn unix_v4/usr/source/s4/unlink.s0000644000175000017500000000032301026347440014657 0ustar aapaap/ C library -- unlink / error = unlink(string); / .globl _unlink, retrn, cerror _unlink: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys unlink; 0:.. unix_v4/usr/source/s4/kill.s0000644000175000017500000000033401026347440014314 0ustar aapaap/ C library -- kill .globl _kill, retrn, cerror kill = 37. indir = 0 _kill: mov r5,-(sp) mov sp,r5 mov 4(sp),r0 mov 6(sp),8f sys indir; 9f .data 9: sys kill; 8:.. .text bec 1f jmp cerror 1: clr r0 jmp retrn unix_v4/usr/source/s4/wait.s0000644000175000017500000000052701026347440014331 0ustar aapaap/ C library -- wait / pid = wait(); / or, / pid = wait(&status); / / pid == -1 if error / status indicates fate of process, if given .globl _wait, _nargs, retrn, cerror _wait: mov r5,-(sp) mov sp,r5 jsr pc,_nargs mov r0,-(sp) sys wait bec 1f tst (sp)+ jmp cerror 1: tst (sp)+ beq 2f mov r1,*4(r5) / status return 2: jmp retrn unix_v4/usr/source/s4/chown.s0000644000175000017500000000034701026347440014503 0ustar aapaap/ C library -- chown / error = chown(string, owner); .globl _chown, retrn, cerror _chown: 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 jmp retrn .data 9: sys chown; 0:..; .. unix_v4/usr/source/s4/hsw.s0000644000175000017500000000054501026347440014166 0ustar aapaap/ C library-- hash switch .globl hswitch / jsr pc,hswitch; size; table; default / p0 / 0 / ... /p0: L; V / ... / 0 hswitch: mov (sp)+,r1 mov r2,-(sp) mov r3,-(sp) mov r0,r3 clr r2 div (r1)+,r2 asl r3 add (r1)+,r3 mov (r3),r3 beq 1f 2: mov (r3)+,r2 beq 1f cmp (r3)+,r0 bne 2b mov (sp)+,r3 rts r2 1: mov (sp)+,r3 mov (sp)+,r2 jmp *(r1)+ unix_v4/usr/source/s4/execl.s0000644000175000017500000000033201026347440014457 0ustar aapaap/ C library -- execl / execl(file, arg1, arg2, ... , 0); / .globl _execl, cerror _execl: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov r5,r0 add $6,r0 mov r0,0f+2 sys 0; 9f jmp cerror .data 9: sys exec; 0:..; .. unix_v4/usr/source/s4/open.s0000644000175000017500000000036201026347440014323 0ustar aapaap/ C library -- open / file = open(string, mode) / / file == -1 means error .globl _open, retrn, cerror _open: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: jmp retrn .data 9: sys open; 0:..; .. unix_v4/usr/source/s4/chdir.s0000644000175000017500000000031401026347440014450 0ustar aapaap/ C library -- chdir / error = chdir(string); .globl _chdir, retrn, cerror _chdir: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys chdir; 0:.. unix_v4/usr/source/s4/retrn.s0000644000175000017500000000022201026347440014507 0ustar aapaap/ C return sequence .globl retrn, cerror, _errno cerror: mov r0,_errno mov $-1,r0 retrn: mov r5,sp mov (sp)+,r5 rts pc .bss _errno: .=.+2 unix_v4/usr/source/s4/qsort.c0000644000175000017500000000245201026347440014514 0ustar aapaap int (*qscmp)(); int qses; qsort(a, n, es, fc) char *a; int n, es; int (*fc)(); { qscmp = fc; qses = es; qs1(a, a+n*es); } qs1(a, l) char *a, *l; { register char *i, *j; register es; char *lp, *hp; int n, c; es = qses; start: if((n=l-a) <= es) return; n = (n/(2*es))*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; } } 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); } qstexc(i, j, k) char *i, *j, *k; { register char *ri, *rj, *rk; char c; int n; n = qses; ri = i; rj = j; rk = k; do { c = *ri; *ri++ = *rk; *rk++ = *rj; *rj++ = c; } while(--n); } unix_v4/usr/source/s4/getgid.s0000644000175000017500000000022701026347440014625 0ustar aapaap/ C library -- getgid / gid = getgid(); / getgid = 47. .globl _getgid, retrn _getgid: mov r5,-(sp) mov sp,r5 sys getgid bic $!377,r0 jmp retrn unix_v4/usr/source/s4/getchr.s0000644000175000017500000000061301026347440014635 0ustar aapaap/ getchar() -- get a character from input file fin .globl _getchar .comm _errno,2 .comm _fin,518. _getchar: mov r5,-(sp) mov sp,r5 dec _fin+2 bge 1f mov $_fin+6,_fin+4 mov _fin,r0 sys read; _fin+6; 512. bes badret tst r0 beq badret dec r0 mov r0,_fin+2 1: clr r0 bisb *_fin+4,r0 inc _fin+4 mov (sp)+,r5 rts pc badret: mov r0,_errno clr r0 clr _fin+2 mov (sp)+,r5 rts pc unix_v4/usr/source/s4/nlist.s0000644000175000017500000000043501026347440014514 0ustar aapaap/ C library -- nlist / struct { / char name[8]; / int type; / int value; / } list[]; / terminated by a null name. / nlist(file, list); .globl _nlist, savr5, nlist .data _nlist: mov r5,-(sp) mov sp,savr5 mov 4(sp),0f mov 6(sp),0f+2 jsr r5,nlist; 0:..; .. mov (sp)+,r5 rts pc unix_v4/usr/source/s4/mcrt0.s0000644000175000017500000000217401026347440014412 0ustar aapaap/ C runtime startoff including monitoring cbufs = 150. .globl _monitor .globl _sbrk .globl _main .globl _exit .globl _etext .comm savr5,2 start: setd mov sp,r0 mov (r0),-(sp) tst (r0)+ mov r0,2(sp) 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)+ jsr pc,_exit 9: mov $1,r0 sys write; 8f; 9f-8f .data; 8: ; 9:.even; .text _exit: mov r5,-(sp) mov sp,r5 clr -(sp) jsr pc,_monitor tst (sp)+ mov 4(r5),r0 sys exit .globl mrsave .globl rsave .globl rretrn mrsave: mov *(r5)+,r1 bne 1f mov countbase,r1 add $6,countbase mov r5,(r1)+ mov r1,*-2(r5) 1: inc 2(r1) bne rsave inc (r1) rsave: mov r5,r0 mov sp,r5 mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) sub (r0)+,sp jmp (r0) rretrn: sub $6,r5 mov r5,sp mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc .bss countbase: .=.+2 .text eprol: unix_v4/usr/source/s4/ffltpr.s0000644000175000017500000000016501026347440014660 0ustar aapaap/ C library-- fake floating output .globl pfloat .globl pscien pfloat: pscien: add $8,r4 movb $'?,(r3)+ rts pc unix_v4/usr/source/s4/hmul.s0000644000175000017500000000007101026347440014324 0ustar aapaap.globl _hmul _hmul: mov 2(sp),r0 mul 4(sp),r0 rts pc unix_v4/usr/source/s4/dup.s0000644000175000017500000000026601026347440014155 0ustar aapaap/ C library -- dup / f = dup(of) / f == -1 for error dup = 41. .globl _dup, retrn, cerror _dup: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys dup bec 1f jmp cerror 1: jmp retrn unix_v4/usr/source/s4/fork.s0000644000175000017500000000033701026347440014325 0ustar aapaap/ C library -- fork / pid = fork(); / / pid == 0 in child process; pid == -1 means error return .globl _fork, retrn, cerror _fork: mov r5,-(sp) mov sp,r5 sys fork br 1f bec 2f jmp cerror 1: clr r0 2: jmp retrn unix_v4/usr/source/s4/getc.s0000644000175000017500000000146701026347440014313 0ustar aapaap/ getw/getc -- get words/characters from input file / fopen -- open a file for use by get(c|w) indir = 0 .globl _getc, _getw, _fopen .globl cerror .comm _errno,2 _fopen: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f .data 9: sys open; 0:..; 0 .text bes badret mov 6(r5),r1 mov r0,(r1)+ clr (r1)+ clr r0 mov (sp)+,r5 rts pc _getw: clr _errno mov r5,-(sp) mov sp,r5 mov 4(r5),r1 jsr pc,getc1 mov r0,-(sp) jsr pc,getc1 swab r0 bis (sp)+,r0 mov (sp)+,r5 rts pc _getc: mov r5,-(sp) mov sp,r5 mov 4(r5),r1 jsr pc,getc1 mov (sp)+,r5 rts pc getc1: dec 2(r1) bge 1f mov r1,r0 add $6,r0 mov r0,0f mov r0,4(r1) mov (r1),r0 sys 0; 9f .data 9: sys read; 0:..; 512. .text bes badret tst r0 beq badret dec r0 mov r0,2(r1) 1: clr r0 bisb *4(r1),r0 inc 4(r1) rts pc badret: jmp cerror unix_v4/usr/source/s4/chmod.s0000644000175000017500000000034601026347440014456 0ustar aapaap/ C library -- chmod / error = chmod(string, mode); .globl _chmod, retrn, cerror _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 jmp retrn .data 9: sys chmod; 0:..; .. unix_v4/usr/source/s4/ssw.s0000644000175000017500000000032201026347440014172 0ustar aapaap/ C library-- simple switch .globl sswitch / jsr pc,sswitch / L; V / ... / 0; default sswitch: mov (sp)+,r1 mov r2,-(sp) 1: mov (r1)+,r2 beq 1f cmp (r1)+,r0 bne 1b rts r2 1: mov (sp)+,r2 jmp *(r1)+ unix_v4/usr/source/s4/stat.s0000644000175000017500000000043601026347440014337 0ustar aapaap/ C library -- stat / error = stat(string, statbuf); / int statbuf[18] or / char statbuf[36] / as appropriate .globl _stat, retrn, cerror _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 jmp retrn .data 9: sys stat; 0:..; .. unix_v4/usr/source/s4/switch.s0000644000175000017500000000024201026347440014660 0ustar aapaap/ C library -- switch .globl bswitch bswitch: mov *(sp)+,r1 1: cmp (r1)+,r0 beq 1f tst (r1)+ bne 1b 2: mov -4(r1),pc 1: mov (r1)+,r0 beq 2b mov r0,pc unix_v4/usr/source/s4/locv.s0000644000175000017500000000105701026347440014327 0ustar aapaap/ C library -- long output conversion .globl _locv _locv: mov r5,-(sp) mov sp,r5 mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) mov $buf,r4 mov 6(r5),r3 mov 4(r5),r2 bpl 1f neg r2 neg r3 sbc r2 movb $'-,(r4)+ 1: jsr pc,1f clrb (r4)+ mov $buf,r0 mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc 1: jsr pc,divid add $'0,r1 mov r1,-(sp) ashc $0,r2 beq 1f jsr pc,1b 1: movb (sp)+,(r4)+ rts pc divid: clr r1 mov $32.,r0 1: ashc $1,r2 rol r1 cmp r1,$10. blo 2f sub $10.,r1 inc r3 2: sob r0,1b rts pc .bss buf: .=.+12. unix_v4/usr/source/s4/atof.s0000644000175000017500000000051301026347440014311 0ustar aapaap/ C library -- atof / a = atof(string); / returns a floating-point number in a_ corresponding to / the ascii string______. See ATOF(III). .globl atof,_atof,a_tof,retrn,savr5 _atof: mov r5,-(sp) mov sp,r5 mov 4(r5),ptr jsr r5,atof; a_tof clr savr5 jmp retrn a_tof: movb *ptr,r0 inc ptr rts r5 .bss ptr: .=.+2 unix_v4/usr/source/s4/reset.s0000644000175000017500000000065001026347440014504 0ustar aapaap/ C library -- reset, setexit / reset() / will generate a "return" from / the last call to / setexit() / by restoring sp, r5 / and doing a return. / / useful for going back to the main loop / after a horrible error in a lowlevel / routine. .globl _setexit .globl _reset _setexit: mov sp,ssp mov r5,sr5 mov (sp),spc rts pc _reset: mov ssp,sp mov sr5,r5 mov spc,(sp) rts pc .bss ssp: .=.+2 sr5: .=.+2 spc: .=.+2 unix_v4/usr/source/s4/getpw.c0000644000175000017500000000115401026347440014470 0ustar aapaapgetpw(uid, buf) int uid; char buf[]; { auto pbuf[259]; static pwf; register n, c; register char *bp; if(pwf == 0) { fopen("/etc/passwd", pbuf); pwf = pbuf[0]; } else pbuf[0] = pwf; if(pwf < 0) return(1); seek(pwf, 0, 0); pbuf[1] = 0; pbuf[2] = 0; for (;;) { bp = buf; while((c=getc(pbuf)) != '\n') { if(c == '\0') 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); } return(1); } unix_v4/usr/source/s4/prof.s0000644000175000017500000000030201026347440014322 0ustar aapaap/ profil .globl _profil .globl retrn _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 jmp retrn .data 9: sys 44.; 0:..; ..; ..; .. unix_v4/usr/source/s4/nice.s0000644000175000017500000000025401026347440014300 0ustar aapaap/ C library-- nice / error = nice(hownice) .globl _nice, retrn, cerror _nice: mov r5,-(sp) mov sp,r5 mov 4(sp),r0 sys nice bec 1f jmp cerror 1: clr r0 jmp retrn unix_v4/usr/source/s4/getuid.s0000644000175000017500000000021201026347440014635 0ustar aapaap/ C library -- getuid / uid = getuid(); / .globl _getuid, retrn _getuid: mov r5,-(sp) mov sp,r5 sys getuid bic $!377,r0 jmp retrn unix_v4/usr/source/s4/execv.s0000644000175000017500000000041201026347440014470 0ustar aapaap/ C library -- execv / execv(file, argv); / / where argv is a vector argv[0] ... argv[x], 0 / last vector element must be 0 / .globl _execv, cerror _execv: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f jmp cerror .data 9: sys exec; 0:..; .. unix_v4/usr/source/s4/pow.s0000644000175000017500000000030001026347440014157 0ustar aapaap/ C library -- pow (power) .globl _pow .globl savr5 .globl retrn .globl pow _pow: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 movf 12.(r5),fr1 jsr r5,pow clr savr5 jmp retrn unix_v4/usr/source/s4/exit.s0000644000175000017500000000021301026347440014326 0ustar aapaap/ C library -- exit / exit(code) / code is return in r0 to system .globl _exit _exit: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys exit unix_v4/usr/source/s4/signal.s0000644000175000017500000000155201026347440014641 0ustar aapaap/ 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) */ rti = 2 signal = 48. .globl _signal, retrn, cerror _signal: mov r5,-(sp) mov sp,r5 mov 4(r5),r1 mov r1,0f mov 6(r5),0f+2 beq 1f bit $1,0f+2 bne 1f mul $6.,r1 add $vect-6.,r1 cmp r1,$vect blo 2f cmp r1,$evect bhis 2f mov 0f+2,4(r1) mov r1,0f+2 1: sys 0; 9f bes 3f jmp retrn 2: mov $22.,r0 / EINVAL 3: jmp cerror 1: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) jsr pc,*(r0)+ mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov (sp)+,r0 rti .data vect: jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. jsr r0,1b; .. evect: 9: sys signal; 0:..; .. unix_v4/usr/source/s4/perror.c0000644000175000017500000000033201026347440014650 0ustar aapaapint errno; int sys_nerr; char *sys_errlist[]; perror(s) char *s; { char *c; c = "Unknown error"; if(errno < sys_nerr) c = sys_errlist[errno]; if(*s == '\0') printf("%s", c); else printf("%s: %s\n", s, c); } unix_v4/usr/source/s4/pipe.s0000644000175000017500000000032201026347440014313 0ustar aapaap/ pipe -- C library / pipe(f) / int f[2]; .globl _pipe, retrn, cerror pipe = 42. _pipe: mov r5,-(sp) mov sp,r5 sys pipe bec 1f jmp cerror 1: mov 4(r5),r2 mov r0,(r2)+ mov r1,(r2) clr r0 jmp retrn unix_v4/usr/source/s4/nargs.s0000644000175000017500000000060601026347440014475 0ustar aapaap/ C library -- nargs .globl _nargs _nargs: mov 2(r5),r1 / pc of caller of caller mov r5,-(sp) mov sp,r5 clr r0 cmp -4(r1),jsrsd bne 1f mov $2,r0 1: cmp (r1),tsti bne 1f add $2,r0 br 2f 1: cmp (r1),cmpi bne 1f add $4,r0 br 2f 1: cmp (r1),addi bne 2f add 2(r1),r0 2: asr r0 mov (sp)+,r5 rts pc jsrsd: jsr pc,*$0 tsti: tst (sp)+ cmpi: cmp (sp)+,(sp)+ addi: add $0,sp unix_v4/usr/source/s4/sbrk.s0000644000175000017500000000100301026347440014314 0ustar aapaap/old = sbrk(increment); / /sbrk gets increment more core, and returns a pointer / to the beginning of the new core area / .globl _sbrk,_end, retrn, cerror _sbrk: mov r5,-(sp) mov sp,r5 mov nd,0f add 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: mov nd,r0 add 4(r5),nd jmp retrn .globl _brk / 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 jmp retrn .data 9: sys break; 0:.. nd: _end unix_v4/usr/source/s4/putchr.s0000644000175000017500000000111101026347440014660 0ustar aapaap/ C library -- putchar .globl _putchar,_flush .globl _fout _putchar: mov r5,-(sp) mov sp,r5 mov _fout+4,r0 bne 1f jsr pc,fl mov _fout+4,r0 1: movb 4(r5),(r0)+ beq 1f inc _fout+4 dec _fout+2 bgt 1f jsr pc,fl 1: mov 4(r5),r0 mov (sp)+,r5 rts pc _flush: mov r5,-(sp) mov sp,r5 jsr pc,fl mov (sp)+,r5 rts pc fl: mov _fout+4,r0 beq 1f sub $_fout+6,r0 mov r0,0f mov _fout,r0 bne 2f inc r0 2: sys 0; 9f .data 9: sys write; _fout+6; 0:.. .text 1: mov $_fout+6,_fout+4 mov $512.,_fout+2 cmp _fout,$2 bhi 1f mov $1,_fout+2 1: rts pc .bss _fout: .=.+518. unix_v4/usr/source/s4/floor.s0000644000175000017500000000042401026347440014502 0ustar aapaap.globl _floor, _ceil .globl floor, ceil one = 40200 _floor: movf 2(sp),fr0 floor: tstf fr0 cfcc bge 1f modf $one,fr0 cfcc beq 2f subf $one,fr1 br 2f 1: modf $one,fr0 2: movf fr1,fr0 rts pc _ceil: movf 2(sp),fr0 ceil: negf fr0 jsr pc,floor negf fr0 rts pc unix_v4/usr/source/s4/makdir.s0000644000175000017500000000032101026347440014624 0ustar aapaap/ C library -- makdir / error = makdir(string); .globl _makdir, retrn, cerror _makdir: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys makdir; 0:.. unix_v4/usr/source/s4/mount.s0000644000175000017500000000037401026347440014527 0ustar aapaap/ C library -- mount / error = mount(dev, file, flag) .globl _mount, retrn, cerror _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 jmp retrn .data 9: sys mount; 0:..; ..; .. unix_v4/usr/source/s4/sync.s0000644000175000017500000000012501026347440014333 0ustar aapaap.globl _sync, retrn sync = 36. _sync: mov r5,-(sp) mov sp,r5 sys sync jmp retrn unix_v4/usr/source/s4/sqrt.s0000644000175000017500000000017701026347440014357 0ustar aapaap.globl _sqrt,sqrt,retrn,savr5 _sqrt: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,sqrt clr savr5 jmp retrn unix_v4/usr/source/s4/errlst.c0000644000175000017500000000124701026347440014660 0ustar aapaapint sys_nerr 30; char *sys_errlist[] { "Error 0", "Not super-user", "No such file or directory", "No such process", "Error 4", "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", "Error 14", "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", }; unix_v4/usr/source/s4/exp.s0000644000175000017500000000017301026347440014156 0ustar aapaap.globl _exp,exp,retrn,savr5 _exp: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,exp clr savr5 jmp retrn unix_v4/usr/source/s4/read.s0000644000175000017500000000043701026347440014300 0ustar aapaap/ C library -- read / nread = read(file, buffer, count); / / nread ==0 means eof; nread == -1 means error .globl _read, retrn, cerror _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: jmp retrn .data 9: sys read; 0:..; .. unix_v4/usr/source/s4/ltod.s0000644000175000017500000000023101026347440014317 0ustar aapaap/ C library -- return floating-point from long integer .globl _ltod _ltod: mov r5,-(sp) mov sp,r5 setl movif *4(r5),fr0 seti mov (sp)+,r5 rts pc unix_v4/usr/source/s4/times.s0000644000175000017500000000022701026347440014503 0ustar aapaap/ C library -- times .globl _times, retrn times = 43. _times: mov r5,-(sp) mov sp,r5 mov 4(r5),0f sys 0; 9f jmp retrn .data 9: sys times; 0:.. unix_v4/usr/source/s4/gamma.s0000644000175000017500000000020301026347440014436 0ustar aapaap.globl _gamma,gamma,retrn,savr5 _gamma: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,gamma clr savr5 jmp retrn unix_v4/usr/source/s4/mknod.s0000644000175000017500000000042301026347440014470 0ustar aapaap/ C library -- mknod / error = mknod(string, mode, major.minor); .globl _mknod, retrn, 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 jmp retrn .data 9: sys mknod; 0:..; ..; .. unix_v4/usr/source/s4/stty.s0000644000175000017500000000045401026347440014367 0ustar aapaap/ C library -- stty / error = stty(filep, ttyvec); / filep is descriptor of open tty / ttyvec[0, 1, 2] correspond to args of stty .globl _stty, retrn, cerror _stty: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys stty; 0:.. unix_v4/usr/source/s4/printf.s0000644000175000017500000000403501026347440014665 0ustar aapaap/ C library -- printf .globl _printf .globl _ndigit .globl pfloat .globl pscien .globl _putchar .globl rsave .globl rretrn _printf: jsr r5,rsave; 128. mov 4(r5),formp / format mov r5,r4 add $6,r4 / arglist loop: movb *formp,r0 beq 1f inc formp cmp r0,$'% beq 2f 3: mov r0,(sp) jsr pc,*$_putchar br loop 1: jmp rretrn 2: clr rjust clr _ndigit cmpb *formp,$'- bne 2f inc formp inc rjust 2: jsr r3,gnum; width clr ndfnd cmp r0,$'. bne 1f jsr r3,gnum; _ndigit 1: mov sp,r3 mov $swtab,r1 1: mov (r1)+,r2 beq 3b cmp r0,(r1)+ bne 1b jmp (r2) swtab: decimal; 'd octal; 'o hex; 'x float; 'f scien; 'e charac; 'c string; 's logical; 'l 0; 0 decimal: mov (r4)+,r1 bge 1f neg r1 movb $'-,(r3)+ br 1f logical: mov (r4)+,r1 1: jsr pc,1f br prbuf 1: clr r0 div $10.,r0 mov r1,-(sp) mov r0,r1 beq 1f jsr pc,1b 1: mov (sp)+,r0 add $'0,r0 movb r0,(r3)+ rts pc charac: movb (r4)+,(r3)+ bne 1f dec r3 1: movb (r4)+,(r3)+ bne prbuf dec r3 br prbuf string: mov _ndigit,r1 clr r3 mov (r4),r2 1: tstb (r2)+ beq 1f inc r3 sob r1,1b 1: mov (r4)+,r2 br prstr hex: mov $1f,r2 .data 1: -4; !17 .text br 2f octal: mov $1f,r2 .data 1: -3; !7 .text 2: mov (r4)+,r1 clr r0 jsr pc,1f br prbuf 1: mov r1,-(sp) ashc (r2),r0 beq 1f jsr pc,1b 1: mov (sp)+,r0 bic 2(r2),r0 add $'0,r0 cmp r0,$'9 ble 1f add $'A-'0-10.,r0 1: movb r0,(r3)+ rts pc float: mov ndfnd,r2 jsr pc,pfloat br prbuf scien: mov ndfnd,r2 jsr pc,pscien br prbuf prbuf: mov sp,r2 sub r2,r3 prstr: mov r4,-(sp) mov $' ,-(sp) mov r3,r4 neg r3 add width,r3 ble 1f tst rjust bne 1f 2: jsr pc,*$_putchar sob r3,2b 1: tst r4 beq 2f 1: movb (r2)+,(sp) jsr pc,*$_putchar sob r4,1b 2: tst r3 ble 1f mov $' ,(sp) 2: jsr pc,*$_putchar sob r3,2b 1: tst (sp)+ mov (sp)+,r4 jmp loop gnum: clr ndfnd clr r1 1: movb *formp,r0 inc formp sub $'0,r0 cmp r0,$9. bhi 1f inc ndfnd mul $10.,r1 add r0,r1 br 1b 1: add $'0,r0 mov r1,*(r3)+ rts r3 .bss width: .=.+2 formp: .=.+2 rjust: .=.+2 ndfnd: .=.+2 unix_v4/usr/source/s4/creat.s0000644000175000017500000000036501026347440014463 0ustar aapaap/ C library -- creat / file = creat(string, mode); / / file == -1 if error .globl _creat, retrn, cerror _creat: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror 1: jmp retrn .data 9: sys creat; 0:..; .. unix_v4/usr/source/s4/time.s0000644000175000017500000000034101026347440014315 0ustar aapaap/ C library -- time / tvec = time(tvec); / / tvec[0], tvec[1] contain the time .globl _time, retrn _time: mov r5,-(sp) mov sp,r5 sys time mov r2,-(sp) mov 4(r5),r2 mov r0,(r2)+ mov r1,(r2)+ mov (sp)+,r2 jmp retrn unix_v4/usr/source/s4/rin.c0000644000175000017500000000031701026347440014132 0ustar aapaaprin() { register n, c, f; f = 1; n = 0; loop: c = getchar(); if(c == '\0') exit(); if(c == '-') { f = -f; goto loop; } if(c>='0' && c<='9') { n = n*10+c-'0'; goto loop; } return(n*f); } unix_v4/usr/source/s4/mdate.s0000644000175000017500000000033201026347440014451 0ustar aapaap/ C library-- mdate .globl _mdate, retrn, cerror _mdate: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),r1 mov (r1)+,r0 mov (r1),r1 sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys mdate; 0:.. unix_v4/usr/source/s4/setuid.s0000644000175000017500000000026401026347440014660 0ustar aapaap/ C library -- setuid / error = setuid(uid); .globl _setuid, retrn, cerror _setuid: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys setuid bec 1f jmp cerror 1: clr r0 jmp retrn unix_v4/usr/source/s4/gtty.s0000644000175000017500000000045401026347440014353 0ustar aapaap/ C library -- gtty / error = gtty(filep, ttyvec); / filep is descriptor of open tty / ttyvec[0, 1, 2] correspond to args of gtty .globl _gtty, retrn, cerror _gtty: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 mov 6(r5),0f sys 0; 9f bec 1f jmp cerror 1: clr r0 jmp retrn .data 9: sys gtty; 0:.. unix_v4/usr/source/s4/seek.s0000644000175000017500000000036401026347440014313 0ustar aapaap/ C library -- seek / error = seek(file, offset, ptr); .globl _seek, retrn, cerror _seek: 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: clr r0 jmp retrn .data 9: sys seek; 0:..; .. unix_v4/usr/source/s4/fltpr.s0000644000175000017500000000156401026347440014516 0ustar aapaap/ C library-- floating output .globl pfloat .globl pscien .globl fltused .globl _ndigit .globl ecvt .globl fcvt fltused: / force loading pfloat: tst r2 bne 1f mov $6,_ndigit 1: movf (r4)+,fr0 jsr pc,fcvt tst r1 beq 1f movb $'-,(r3)+ 1: tst 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: tst r2 bne 1f mov $6,_ndigit 1: movf (r4)+,fr0 jsr pc,ecvt tst r1 beq 1f movb $'-,(r3)+ 1: movb (r0)+,(r3)+ movb $'.,(r3)+ mov _ndigit,r1 ble 1f 2: movb (r0)+,(r3)+ sob r1,2b 1: movb $'e,(r3)+ 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 unix_v4/usr/source/s4/sleep.s0000644000175000017500000000014701026347440014473 0ustar aapaap.globl _sleep, retrn sleep = 35. _sleep: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys sleep jmp retrn unix_v4/usr/source/s4/rsave.s0000644000175000017500000000043301026347440014501 0ustar aapaap/ C register save and restore .globl rsave .globl mrsave .globl rretrn mrsave: tst (r5)+ rsave: mov r5,r0 mov sp,r5 mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) sub (r0)+,sp jmp (r0) rretrn: sub $6,r5 mov r5,sp mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc unix_v4/usr/source/s4/abort.s0000644000175000017500000000011101026347440014461 0ustar aapaap/ C library -- abort .globl _abort _abort: mov r5,-(sp) mov sp,r5 4 unix_v4/usr/source/s4/fmod.s0000644000175000017500000000025401026347440014307 0ustar aapaap.globl _fmod, retrn _fmod: mov r5,-(sp) mov sp,r5 movf 4(r5),fr0 divf 12.(r5),fr0 modf $one,fr0 mulf 12.(r5),fr1 movf 4(r5),fr0 subf fr1,fr0 jmp retrn one = 40200 unix_v4/usr/source/s4/crypt.s0000644000175000017500000000027201026347440014523 0ustar aapaap/ C library -- crypt / cstring = crypt(key); .globl _crypt .globl crypt, retrn, savr5 _crypt: mov r5,-(sp) mov sp,r5 mov r5,savr5 mov 4(r5),r0 jsr pc,crypt clr savr5 jmp retrn unix_v4/usr/source/s4/fstat.s0000644000175000017500000000043301026347440014502 0ustar aapaap/ C library -- fstat / error = fstat(file, statbuf); / int statbuf[17] or / char statbuf[34] / as appropriate .globl _fstat, retrn, cerror _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 jmp retrn .data 9: sys fstat; 0:.. unix_v4/usr/source/s4/cos.s0000644000175000017500000000017301026347440014146 0ustar aapaap.globl _cos,cos,retrn,savr5 _cos: mov r5,-(sp) mov sp,r5 mov r5,savr5 movf 4(r5),fr0 jsr r5,cos clr savr5 jmp retrn unix_v4/usr/source/s4/crt0.s0000644000175000017500000000026701026347440014236 0ustar aapaap/ C runtime startoff .globl savr5 .globl _main start: setd mov sp,r0 mov (r0),-(sp) tst (r0)+ mov r0,2(sp) jsr pc,_main cmp (sp)+,(sp)+ clr r0 sys exit .bss savr5: .=.+2 unix_v4/usr/source/s4/stime.s0000644000175000017500000000023501026347440014502 0ustar aapaap.globl _stime, retrn, cerror _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 jmp retrn unix_v4/usr/source/s4/setgid.s0000644000175000017500000000030101026347440014632 0ustar aapaap/ C library -- setgid / error = setgid(uid); setgid = 46. .globl _setgid, retrn, cerror _setgid: mov r5,-(sp) mov sp,r5 mov 4(r5),r0 sys setgid bec 1f jmp cerror 1: clr r0 jmp retrn unix_v4/usr/source/s7/0000755000175000017500000000000001026347440013200 5ustar aapaapunix_v4/usr/source/s7/roff1.s0000644000175000017500000001456601026347440014415 0ustar aapaap/ / copyright 1972 bell telephone laboratories inc. / / roff1 -- text formatter .globl ttyn 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 seek; 20; 0 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 jsr pc,ttyn movb r0,ttyx+8. sys stat; ttyx; stbuf mov stbuf+4,0f mov 0f,1f bic $22,0f sys chmod; ttyx; 0:.. rts pc setsame: sys chmod; ttyx; 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 .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