[comp.sources.misc] v16i055: ECU async comm package rev 3.0, Part31/35

wht@n4hgf.uucp (Warren Tucker) (01/06/91)

Submitted-by: wht@n4hgf.uucp (Warren Tucker)
Posting-number: Volume 16, Issue 55
Archive-name: ecu3/part31

---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is part 31 of ecu3
if touch 2>&1 | fgrep 'amc' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= ckermit/ckermit.03 ==============
if test ! -d 'ckermit'; then
    echo 'x - creating directory ckermit'
    mkdir 'ckermit'
fi
echo 'x - extracting ckermit/ckermit.03 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ckermit/ckermit.03' &&
X#!/bin/sh
X# this is ckermit.03 (part 3 of ckermit-4E-X286)
X# do not concatenate these parts, unpack them in order with /bin/sh
X# file ckermit continued
X#
Xif test ! -r _shar_seq_.tmp; then
X	echo 'Please unpack part 1 first!'
X	exit 1
Xfi
X(read Scheck
X if test "$Scheck" != 3; then
X	echo Please unpack part "$Scheck" next!
X	exit 1
X else
X	exit 0
X fi
X) < _shar_seq_.tmp || exit 1
Xif test ! -f _shar_wnt_.tmp; then
X	echo 'x - still skipping ckermit'
Xelse
Xecho 'x - continuing file ckermit'
Xsed 's/^X//' << 'SHAR_EOF' >> '_shar_tmp_.tmp' &&
XXMFS/FB7%\+=DL@4G[G"R?]5K#0=OM8=)*PUO\6CR_W27>U=&E1FP,EBP=8B]M
XXM<-'$C0*\I=STVZOK^1<VK=WMP1\:YQ`00=_Y==.Y2YB>7#Y.4`1I7+Y]W!ZK
XXMZBA#!-]G(-\L"SDN"SD9ZP2NY*<+1Q&I31$_ZZ<2#9,["=R0,Z4BTLEKF],,
XXMOJX9G0<($09X,#ICD#;9S+:O#0!,0+_L(M4D'1E6_2$+H2]:;;WHW16]^<CW
XXM;<C"RRXJ!.-TH!;G:V/86Q/%,R-=0HT+X1^Y+`=LT$X@4`=U,`9<(P),X`+S
XXM)`+L&RYI,!&0'`3L=KP*\>++DA!U:CRQ_&'E"<]N/<5<UY@H^ZI;H.<=VUA=
XXM``)6.^@SOAQ:,:M^3@>]%N>272'[LQ6[8BDH:C^-M!%S\$+E=<HI2F-5K39`
XXM(:,`@-:!L>C#$=@5KDI5LHO\^EICT-MLU+AN8-=48,BO&C.$FJFU"Y]J\9D0
XXM"@)%\`1>#*U6=A'A@A0M0`9(N16#41A+X.JO6F]B<!-K8-=,\%HAE#-J4>NZ
XXMW$BL^QAX4$YB`!)^(.P7WL0`DL?7+NO3A,3*5`:-Z@=)B\X/!+@@X`>>/>]`
XXMX0>S>P(_<`+YKC-"FQ7KZP=;H:*.F^]U9KI+#@!A0!E6-M7]>?`?7>]OL`45
XXM_P9P^C!;,3-W`A%+66_HKA5V'03#H:\*X2&1H19<[N7_3&/\JD:#61]^:DOQ
XXMW(R4(^Y;`2*U5>K3!!)69O)^,`;[#`#CF>7FJ<X),1HAOUQA/1/OF.B0'1E$
XXM.4T'TQYJWBW?8DKZ:2(LH!936[7U#@/$#)O5J09BEA'+8RT309=+2]\M#%^7
XXMD8VYK,_M8=B/G>AJD:<C_1=S[M7^<09HD!"X:*)>\>DE;Q>SM?)P0)<%46U#
XXMY&XM]$(?)H^V7KN-R5A_41,W;LBZC><)@*K'TP*)#J:-)?I;3P=;@#!P6NA)
XXM?2_Q0_5R+OF5$O7GJ2"2-AQAH2_Q@]Y$>YM:[Y@7(C$8;02H?44GL+U1M@5S
XXMO3Y=4-?M05]*D\-C*]6$;YD>8IX'DM0*P-UKM!P_.UL]^T2-9#E>H3/U)NJ\
XXM9N"%G1LP:JD%`2#+7V<;H1;D#Q@S;,@H8*$4P<Y&Y"&[.R7G6!4Z'FDUP3M8
XXMHO>MM"M("9]R4!=_H0!*<XY5H>.15A.\@R6FOBL:@2#5?_AW05#$7QL=`=>Y
XXM"ADQ``+*#QDRT/QV+9$Q0)(@0>Q.H3/GND)`)M[7;M`JT&N6H0#\[OP@8-BQ
XXM=*[)>/]@_3HR0)(@T4CX"JU-;`::WDJ[<D@QD-@*`/.\HQ4[H!&Y\3HRD-A<
XXML=CK^SHQD-C&DQ&\@R5V<2D>34H)DVTKB["5&6[F"<R:3`=&_Q=0\9@@_2XC
XXMG_5'#9];4<2^>(Y5,<>4"];L8FJZ[1C^W/[PN17<'^33W08),^NS^C9K;8F:
XXM/QSX:C\BP3P;,5N[F3:^S[,^"[238]20H1:@O2OI7N2S"E]WL-:66!-%5+OX
XXMNKP;4<J:#@*[.3$3D29J@=:*;MU=LBOIWAY(P,N)+2&[^12BR<)./UL',2+N
XXM8RX``MJ[$D([D/<%?0(0G6O]+NSFJDV*[J>[^10.B=$IK)0;<]TGP5[/!5Z4
XXM'AGXJO&>UB$=)\<B"Q0Q`!0RD.P@,`.0G,*1$0.)?2B!D:Z?OG`V:5SLB,B>
XXMUB'+)>LC.APR,/$SH&MC0),@`1<RH19I<P:6X?ONA2[`\<N(7)Y!#/AGDF/3
XXM1!-V/:&8"A'<'^33O=[9/AF5$?<T/!PR,/$S@-&YMD.M%.D$K1Y`<0?*A!%G
XXMT-,;4<KZ/.,GT-F]UNX%@MKY;-`7D6,GXN]T$<3ON"M!-+:=3?L7D6,GDO?-
XXM<0(\.SFZW6OF`N`@/@?^8=,[8-`L$T(/T6N[$D1;CL2<7>%JP3(AE"`@$:M_
XXML6-5\5H+`M8L4[D[SJI#WQ<C2NH%@MKY;-!LZ^]A[?WO>!$YUM^)76;D>258
XXMZ4,Z,XAJL4I":^$U,01K;`371I[9PC()C5\[8-!@JTQYT&N[$D3+VQRQ=!$Y
XXMUM^0;%FS"K;*E`=%O16&ELIW(CS2W27K3<Q@JTQNVQ%A,/0G<`?*A!%G0.H&
XXM71"]!LTGL"5FX.\%@MKYG"9F8-=`#-9;8@9`@;[^KR\=21>GJ!9=H16H2XVG
XXMI.'ZTI%U3NOP2DIV#<1@K;D%4@:LU-ET<8K51?_SIC/%@[[^KR\=21?,@<2=
XXM3?LPRA&[4D%:_[KZ0MC0>`*X;,JD7B"HG<\&71#^SDFV]O]SW+M8(MV83^GW
XXMLA&EG`=1H1:3HVY;D>0^I#.&KC/L8G`):]=HG1"XK,M;8@:DON5_L6-,81EJ
XXM(3-UH2_.`^(:@U_V(]F-4DZ;#W"?Q1(6.?3[8<C'S^D2L=:6J/G#@:_D7A/.
XXMPSHH^F8!(CY=7F*E7BIJ<=D@P/U]K>Z'KA#315Z8NA,@T4CUQOTV`2(881](
XXMKA46^Q*5&6[8#Y];867OZ<W!C!!&_Q=0\9@@_2ZR7M#'S^G4V._/D^T^U,)(
XXM]O&[^12B>=D&?M'W7=`G`-&7C;D-'6>OI19'#9]*K=NI/3G!@R;U-D.^Y2W*
XXME.,&;M!X4-<$,P2XA8A7`#'H,D#>1&12RZ>[J2E1W1QJ>P)CD/YL#<?<W,*;
XXM329&C8\`,$``DHNICB6VABX):QM+>ROR"Q46@TRE3*A)YDU$5IZ;C8\`@$RE
XXMK.EL],+LC\J66!.^;,@AY!_ZW?6RNF,0P2[#3-CCYKH;XL\PROU!/MV$:S@9
XXM@RXE"6WT>]'[@=>6S>E[[:5]#:T;G1#D31>(CR;"B]L#)1#JPZUCN6_2`P7*
XXMY$HA!`!)8"DOU,+#7#PPJK9JG_6K.N]LM*F2IK)8<@(A<`)!@TRE#!+`K,D)
XXML9L3,Q'EB=:*;MU=LBO7O@,&#5^LE&/]W6OG"!&X;,H*(-U=8ALYUM^Y7?S8
XXMR,)./UOO:<C0[:6'#&%H#@#(5,INNQ$18VN3SB[`K,D)D2WNTR@]K61#!DX`
XXM@$RE#!(8SA8:/@8<CB9D3:R+[#P@KC$I3064&QG<;^"/XL^F[J&'9-?<;^`F
XXM:>L*`)_K34U>,1S$[A0ZTQ>46P9K;8E&O.765"H,Z48.(3S98B&SM90!H^&;
XXMDC`3*B&[^12BF0>XRXV`A@)/D`(BH`*MH`*NH`+;H`)%L`*?L`)-P`)%T`+N
XXMT`+OT`(%X`)*X`*%X`*QX`+48+4OD`8O$`LO0`\O8`,PX`<P<`PP\``Q4`4Q
XXMP`DQP`LQ\`TQ8`(R<`(RL`NQ,0,Y,`,30`.70`/=0`,C4`-H4`.44`.54`/=
XXM4`,G8`-S8`.+8`.,L%,V\`\V0`0W\`8W0`LWP`\W,`,XT`<X4`PXH``Y<`4Y
XXMP`DY0`TY4`TYT`$Z@`8Z,`LZH`\Z8`,[X`2I?B:Y\1?45NIFYA0GH5:6H>,G
XXMI"_ZGQ"F%@8JBR7HO]:6>#``0`2ZJR\G<+(F<@)PO6/?TFN[$D0Y?F6(;$IF
XXML_9"_1!FT&N[$D2WA9;2W25%H2X3H1'!+Q8ZLS[,41\)`\=C\!8`$@3)G`1)
XXM``*[.3'QN17+V?")1L]Z_-_H<@(G:R+^7B"HG<^A@0,*@`).7>QLT`)<L*Y4
XXMF<)*F1M@(18MAA`=`A'%TTCX:M=#P!Q%._.SFKEN\`*9BQ6]%F\G8"`!4]<`
XXM8""UD2`@D;EN\`*9BQ4)`\=C\!8`$@3)G`1)``*[.3'QN15+;S^RJO&1V[FY
XXM.V.-P;B3J4P6"0"X54?:A%QV[3NUD2!Z&[FEHTWT@;S*N)`>-[4``,?NX]6D
XXM5)X\Z[-`.SF,VQRR:M>^4QL)`A*B",EV3VNY!J.,JTOPB5FXQ9Z-#0+<KQ;G
XXM6!61P2XG$&V]EK`[8-"YIM9T<8ILE&O<;S^7?<C9`LF&#:-/JTU^>LC90K@3
XXM3Y/FF;!M<.Q.C"5HF6O%(V1K=):C:(DU(22R6O).(;,:W\(%E#98DBT2T;'5
XXM2[56.SGUIDUY,!&.?,C9T@8ID#"SCI9%5+OX:C]WX!2UH]2*1L0)<M'[T1RR
XXM:IX)^Z+-(;\>+Q=`H?]5EA`)VP;'[L184KU4ZP*NKDUY,!&/")\KDFM"JTI`
XXM;NDO9)[R^\26B.P3#[$)`A(G:R()D\)*F1L):QLL++\Y:Q^7W6)/O4Z2:M=.
XXML&OE5#P',2(V*?65:1M%!`"-5,3E5#SR"Q'ZBB8G4$!I@R79(A$F@L/^G+!M
XXM8-=-4))W3`=9_A)[<14D1C$UD;#KO>5(?`+:E`<3T6N2O6!((>L%C=8)D;"V
XXMT>_";J[:5!$T?"FYD;#K3?N73AF6`6?A?EMH*=U=T@8)`P7*E+?V(ZO_C2XA
XXMY!_ZW6)/O4[8&&_.`^(:HQ6#HBWVSQ76"12TO`9N@^_$;"`!8]>^4QL)`A(&
XXM$C`)HVF.'O/Z4ME!/!S2W26$6R"HG<\&#=U>Z@-U[2MB09*MXQ:1;C^1J3DG
XXM76\SY%O>HDS6C5TGH5:6$1GDCRZ3D1<NYK-`.SE/*Y/EQ,+6JQ7Z'10@\;0R
XXM.08T>>::KS-D3:R"&NJYIM;J;_6M4^>H[&*=L[0\$=HSK1H_<;4Q\!-76P,_
XXM`0(SH+5`80-:"Q18J[5`$0,XH+5`(0,TH+69@0-:"Q0Y8`-:FS!3T,1F`!*@
XXMO2O7KO$!TN$+Y]V#DFUDT`)/8`8M``77G1`H$`3)G`1)``*[.3%E\(A0<-UT
XXMT`+5OBDO@P(QH+5B#\T[;V$```4T@4&PBDFVLT8Y@#70O/./"`4TT0)#0,]Z
XXM#*M!D,Q)D`0@L)L34P86EM%W<ADM\`1FT`)0<-T)@0)!D,Q)D`0@L)L34P:/
XXM&&]4$%!H@@(Y@#5_06V74G".8F$,G_4R.08T>>8UL?O9,@9O`2"ZB%\),P5-
XXM;`8@`=J[<NT:+](=OG#>/2C91@8M\`1FT`)0<-T)@0)!D,Q)D`0@L)L34P:/
XXM"`7730<M4.V;\C(HD+5:2\P[;V$```4T@4&PBDFVLT8Y@#70O/./"`4TT0)#
XXM0,]Z#*M!D,Q)D`0@L)L34P86EM%W<ADM\`1FT`)0<-T)@0)!D,Q)D`0@L)L3
XXM4P:/&&]4$%!H@@(Y@#5_06V74G".8F$,G_4R.08T>>8UL?O9,@9O`2"ZB%\)
XXM,Z$2LIM/(9IY@+O<2)4D'S&7#0+<W]?FA%N(:!<E#S$HI&1#!DX)0_(1<]D@
XXMP/U]O;R$W,T3Z4HUX:VLFC`D'S&7#0+<W]?V(]GN`VY"QDXN++-U;LB"?4C?
XXMFC`D'S&7#0+<W]?V(Q%9_]C+`1PX5K08DA"2[3[9<M$9_?`&;C^6S>E4OF()
XXMQRYV<2D>3=%>4@<HJ@!W(2Z`G]><OM=>VM<)0_("9\B7#0+<W]?V(Q%9_]C!
XXMLR[!GT(1HS)BEC`D+W"&?-D@P/U];3\T;)Z"?4C?&FX@H&Y;D>0^%.L`0/("
XXM9\B7#0+<W]?V@V1GAFMK_B6:[]_07#SUG]O%/T0*$#QH`J,R.08T>>8U(:MR
XXMD#"ZDY7TH2]Y@+O<2)4^S>``0.&[4IZQC2ZM_6CO+;P`0.&[4I[=2[]2QM\+
XXM+KP`0.&[4I[\';3T*V4@OCD,#@`4OBMUGM-!2[]2MI@D`_SE%-+9LA`-T1'0
XXM[(KSDCDM2[XU?D;'9-O-"P(U;A_B@9@L((I`D1<NYK-`^S1?J4RN=.V*P@3O
XXM$B&BZ#;J$141\B9`D;`1`@#11AN<+A%'><C9T@;'[L1:$2&'"0)"8!<S[28!
XXML=/*E+<1`@#:4C</%A"T[$<J(V8`8"`?%Q_/R9E'F;LSUN*ZP;EF`!0`L&/?
XXM`A0``!9B$2$`D+EN\`*9BQ4`8"`?AS*;*[G:A%P1XGCS8B`!HQ;X[1_Z;4H]
XXMF\LE%B'W.2T7`HV:MF"=!@7*Y$K7'B'M<4&FJC[%6DK4^T&7VQ7\,N1!0\54
XXM$%`]$B'"6@(Q$`-D4`(Y$!`JD!9?21,8%"'"6@(Q$`-D4`(YL);+*@3L%3%#
XXM`%X14@(V$)Y0\(]#0,]ZK`,E$`,Q0`8ED`-KN:QP//<1,JPE8`/A"077G1!3
XXM<">7$2$E$`,Q0`8ED`-KN:Q-P.(@H#YF/A$14@(V$)Y0<-T)D6V%TQXE$`,Q
XXM0`8ED`-KN:PX<!<M(`1*DV!JY1IP70)C<`)I\977G1#5OBEWH0,E$`,Q$!`J
XXMH!J.AP-KB0(Y0`-!(ZSLJC[J`1P)IE:N$2$&70)C<`)I`0+5OBDOPP1O(3IN
XXM$@,Q0`8ED`/SPL]D`MJ[<NTT+9$@0.&1'B'M01)ND&,GXG@M@+5[PC(AE&PE
XXMT`)8RSWM`<>WC2XU?D:F*I4`8"`?1\42&:(C&B&/"@!@JTQ%5@(M@+5[PK:.
XXMUP)8RSWM`077G1`U?D;+"@`&\G%4+)$@0%^.*RBZ\48ET`)8NR=;DITET`)8
XXMRSWMH37U7>-G-*P`8"`?1\42*4`;4<JN"4=8X7@M@+5[\D8ET`)8RSWWG=/8
XXM6.-GU!X`8"`?]]H2"0)"D`?4.`5IH`?N[B8!`10NJ6AE&1D2*4`;41D+46(1
XXM`@#(M37&04#I"BH(?3I'"0(N&?U+Q)9IX6!VK,@9`>)"-#FCNIX=&2$E0%[K
XXM>2L=/[9+G]T14@+DM9X\Z[-`.SE/RRX@$"$E0%[KR;,^"[23\[1H$B$E0%[K
XXM24T-G_ENL2NT&R'W^1=CL)YJE15-$V4HP;0V$=JF&B$E0%[KJ58U>>9&!!*T
XXM'2$E0%YN4@+KV;VD.;T$&R'WF>"!\8CWN5B*/&]RVUW/!5Z.O.69WQX1\HJ+
XXM0Y:8CXVT&R$`D`<3`0);4`)C$*<`8"#KB0,O,RT)T>VN@2["&B$`D`<3`0);
XXM4`)C$*<`8"`S3C#L6Q-+Z64/2T7TK,?9/:SL47$^"[23\[3LXAP:ZV(^"[23
XXM\[1H,FX+]YXY/40V@H_L<2L=/[9+G]W.47$^"[23\[3LTAZFZ6(^"[23\[1H
XXMXARFE,MPD/ENL2NP^A?4AJW.84I8L4[/BA),:Q.A+:SLH58U>>9&!!+NK15F
XXM30>MVA[BH3+*-)P=$0;LH3(+H0?.X1;^@1#L(2#_Z!S6C8RSQ1Y_T6G.83AT
XXMP`:SZQRF)`:SVQ[L8=MQ8)<[:B+!RAXR1`>SZQPV82%VR1[ZV/!UD"EPX,QU
XXMP!YS<`?.7`?L<0<+H0>OI#+*-)P=$0;L(4,+H0?.81-L`1?.`3-<1A.*`S-<
XXM1A-W9$J=UAZF20=L,+O.H1"S^ZCL8=NSVQ[L8=MQ8)<[:B+!RAXR1`>SZQPV
XXM82%V:9H-O_L[:A?9S1[ZV/!UD"EPX,QUP!YS<`?.7`?L<0<+H0>OI!HRM!!Z
XXM4+TE<SS9"P`Q``"]HEL[]BT`P+G9B<NF#`"=;10C"@!WH$P849BAOR5T>]T5
XXMP5N=2IJ=`C)DL##TK,>[01,8-#UW<ADML"5T>]T5P1:[TB,`8"`?E[EN\`*9
XXMBQ4`<"7?,A`6LYP`T+D`8"`?E[E8`0"9NR(7D6,G`@`L$T+)!K;*5&1L"P#:
XXM4C>T[$<&\G$/%A`J(V9PA!5PM"(IM$(`@%Q;`P#A+A$+H0=@@C"6-:NYUEB]
XXM!LUH7=;.ZA6+#CD201.0G,(US,O&4V6C3LPG`-&YAOQE4-20;AF1<=J0G$(K
XXM1&E=/9&NE-&PIK<>1B30QFRY]K0`$`,"40,`X`2I?B:Y\1?4-AQ7\K$Z?B>7
XXM@2ZXFE@`@`590`16'`014F0[]BW'-),U$\W)G`1)\)_QN17+V?")1L]Z+!`2
XXM:=U=LBLA1!)ND&,G`@#,P4K@'3+-`QF=;136:Q0%O93^DQK.$^Y4G@9Z$!DH
XXM,!K0C`-!\Y.HS!Q%._.1,1KQA@-J\0,@DNCEY#R@O2LAI!:9ZP8OD+E8(1`&
XXM\G'&H60F8A0%O90)2[A)YDTP,Q,2;B`?9R`?5V#<[P,`H&G3W0:X9N!![N@`
XXM$`,P``!-P.)O426OGC83`9#6C5T5$>X2L1!Z`"8`D!KA+A$+H0?QB5E)H]\M
XXM]M3K-$3SB,K,4;0S'QFC$6\XH!90H$RNM+(L?!`=OG#>#0!0H$RNM+(LW",=
XXMOG#>+1`QH%MP/`9O`2!!D,Q)D`3_&9];86HAY!_TBBLY``,`T`0L_A954B:[
XXM6)Y+[]SUQEOC5C+'$Q6=2IHOX]UL%,L(-R\Q``!P/`9O`2!!D,Q)D`3_&9];
XXMP5NH>B=QO_0```.^(A8DV3K6;9WSK$SU_"C0?!`=OG#>#0`P``!P/`9O`2!!
XXMD,Q)D`3_&9]*W>$+!S(UL?0`4`,`X)(A9&ILL2OKHFV[F10*,`7J<6/63L1V
XXMZ@9&WT@>Q](*I_7S"B!"JQ990&OAGQ!H#5OOTFM7\K&18>EU@"YG.1Q%K!9"
XXML+0\$=H:CY-ALAB73AF6`6=/*Y,8.B^B&"'WB1),JQ83RLBUC"YY@+O<"`#"
XXM(`5))Q#$(`5+)Q#&(`5')Q#((`7CT0Q2D'0"(0U2<'0"H0U2,![@(`5))Q#E
XXM(`5+)Q!"UPY20'0"L0]2P(`"D0!3,(0"<0%3$(0"\0%3\(,"\0)30'<"$1XW
XXM,`7CP0-3D'0"L73(#'0"H013X(`"T013<'<"$053<*54,`7G<'0`D`53,(0"
XXMX053\(,"`71B,`5))Q!L,`7C00=3D'0"L0=3,!Z`H#7B40A34!0"H0A3,!Z/
XXM\&KB,0E34%H`0'29,`7CT0E3D'0"`0I3,!ZH,`5))Q"M,`7C\48I\UIZ1(RO
XXM)D)ZZR::S_-2S^)O424(.:%A'03)G`1)T&((T2$0\3B(Z(J=J3[<>B]*-F1B
XXM2TH`@`5:,`170`018A24VY1D<CS#P;KM2#%&SR['S^G4.`:]<0(^.@>]X1C^
XXM?">5FT!0$#]S`*$1$B9?&3]ST.M+>=E)YDU$1L50$#]S`*$1PAX@8RD0*AX4
XXMOBOE>=F']*W+2\A@0MK<>B]*-F1B:]1D(I-C0),_F]IO5!Z5N&\+Q\*7W?)%
XXM0=K<VI37"AK%,VPF$6XYCMXFD=)YT:(=FNPYGF3>1&2ME$GBH3[<VI1D(I-C
XXM0),_F]IO1-K<&AFRNA7V2LP%E#:3;O"*`P"ZDY7TH2]Y@+O<F)!CU,0UF=J3
XXMLZ=UH&3S(@=2DA[DT0,^X!Q`,05IH`?N[B;HR!Y;\`1+H"2JL04IY$QDH"2J
XXML04FP2\D%!5*DM%EA"X`X$%M+A.`L9E"@D3YBOA*BR)W(IG#X4%2&2$E@([E
XXM(8H14@+HZ$%M+A.`L9E"@D3YBOA*6Q-O(`9J@+(>-!XIO#;_!JNB"*XO;?/A
XXM/BB?;`3FU$G4=$A`X<EJS,928#^2M7#`K,D)P5MYH<9L+`3FU$G4I+0?B<9J
XXMS,9JSL(8+IG#(1.5<1D1HAH641"%0A9JGC5W(IG#(1.5<1F*XCPT'"$``+;*
XXM5&1LBT>YD^HI#63B?>U>V5W/!5Z+0Y:8/T2J@0-W`:K=+1/>_CY>(`3PF#^>
XXMA"Y"H(^S119&`(_YXTGH(I&ZX052`(_JTUCHHAI;D`0-81E1$>@`0`1%(`15
XXM<`0Q[^.JPVZ;,J-N.09JT0.O"`!$4`1"4`5'$/,^KCKLMBEJL06B&*>45@1"
XXM4`5'$/,^KCKLMBEJL06BJ".O"`!$4`1"4`5'$/,^KCKLMBDSV@.O"`!$4`1"
XXM4`5'$/,^KCKLMBDSN@6B&*<`0`1%(`15<`0Q[^.JPVZ;,J-;((HZ\HK$^)V]
XXMJ?'MJ/'(W;R;Z8KS(I(M4./V(3[H(ESLMBDSZB;D!9%N0EYJ(9(M4./V(3[H
XXM(ESLMBEJL06B&*<"(9(M4./V(3[H(ESLMBEJL06B&.@E0%YJ(9(M4./V(3[H
XXM(ESLMBDS&B$E0%YJ(9(M4./V(3[H(ESLMBDS"I$BV0(U;A_B@R["Q6Z;,J/Q
XXM&"$E0%X(^9V]J?'MJ/$1(;R;Z8KDI1@=YI(AU!1>+6%3DP./*`,Y0!JF06`"
XXM@0=C:@<"$>$*XZD+!ZILM*D,XJYT@?AH@JK_ZJ_$7*T``"(BHF2/Z8S/9:=N
XXM8/2-A*]A;7`)*Q`B\`46T:(LTS2Z+[*CV*(LTS2Z+[*E91$MRC)-H_LB.XHM
XXMRC)-H_LB.XHMRC)-H_LBNR?Q\9R0?0:!FA%6$1@Y:Q]AH+)8@JH*\Q*6_O^`
XXM`:\LC*H*,]//4X^M8ZM[$A_/"3.NT;A*F1N<7>$33ZN+KC.H.CTGI"^Z&D+^
XXMH=\%LI`RTXP6T:(LTS2Z+[)[$A_/"=EG$*@9816!D;/V$08JBR75^A*6_O^`
XXM`:\L7*T`$!_/"=EG$*@9816!D;/V$08JBR7N^A*6CBZD%-;N"@#Q\9R0?0:!
XXMFA%6$1@Y:Q]AH+)8TJDDL6@^"[23\[39XCY>34HP8^GO@RW:\@);+1#1!@#Q
XXM\9R0?0:!FA%6$1@Y6YC^<8WZ@A),"P`@<NF481EPAA),:Q.A#0#Q\9R0?0:!
XXMFA%6$1@Y6YC^<8TQ39J=LAB73AF6`6?=2YJ=XM,,#@#Q\9R0?0:!FA%6$1@Y
XXM6YC^<8WZ@K<?`0#Q\9S6/8U%%A_/"=EG$*@(0=#,<M!\O=!%O14VC!C\W!$/
XXM$2%&.3\=/RB)D9'<6`2?QHL`L'LZ%^Z(-*0K31)/O4X#T1O&X<3&H61#!DX`
XXML#[,`0"G!&RA8RUV\UH`8,,`(+P`P*<583'(7S&<+A'3,SUN;B'3DU@<-SVO
XXM)5YCH3)B-CUWPA8:/@9[<B?(!0`HP;0`T%UKL##@91S49,K&,1F@"P"AOR5T
XXM>]T5L9P-7P8+0\]Z#`#^`Q9BL3`%4>Q)@5MUI$W(!0#HN\UR#`!"^Q*5V0;'
XXM[L0IS5N=2IJ=`C)DL##TK,>[01,8M!O*E+?--MFTH<CS1ANO!4[3DU@RR2`8
XXM?ADML"5T>]T5$4+^H=]&$5`],A"]81R$#"9"QDX`8,,`P!P444-B9A0C"@!G
XXM9ARVW;RRO1O7?2'3H^!O!.)"]#2[H4RN=.T`D&/]O2?0[:4^$"V@@M"GPR*A
XXMLR&/Y@((?3HL$CH;\F@`$$NALR&/!@"K(`:2)Q"M(`8J`'RO(`;C,0MB('BU
XXM(`9+)Q"[(`9')Q##(`9$)Q#'(`8H(![,(`85*!#6(`97N@UB,($"`0YB`($"
XXM<0YBX(`"L0YBP(`"`0]B\(,"00]BX(0"D0]B<())MP]B<((",0!CD(<"H0!C
XXMH'=)QP!C0%E".`9Z)Q`8,`9T)Q`?,`:;"``C4&?B@0)CL'L"X0)CT'P"D0-C
XXMP'X"H7<^,`9WEW1#,`9))Q!/,`9')Q!5,`9")Q!<,`9$EW1J,`;A(1![,`9`
XXM)Q"`,`9A(Q"-,`97>@EC,($"(0ICT&H"<0ICL(D`0`MCP(!))PQC,(1)!PUC
XXM$(1)APUC<(0"\0UCH(0"80YU)A[N,`9Y*!#T,`:2)Q#Y,`9W)Q#_,`8_F'0/
XXM0`:[)Q`80`9TEW1.F$Y))Q`D0`9+)Q`K0`9')Q`U0`9")Q`Z0`9$)Q`_0`:M
XXM)A!%0`8_*!!*0`9!*!`5Z`0N(1!80`9))Q!@0`9+)Q!H0`9')Q!"Q[3C`0AD
XXMD'0"(8HLH)(I'!DK#,TV3#`AY!_Z[;XB1$+]1C!T$-#4E!>6".6JPV[ZPL(F
XXMH17Z33E2FM)Y88E2D1Z=JBW49#C3V9H`P/T&[FD=HM1*JQ(L`;F&ELH]QOT&
XXM[FD=(@>A6;G.$T+^0:^/3&FVW;P@4./V,031Y!*9T[+D6^/V,031%!!O(V>(
XXMH1990&O:%&7%@]:P]2XX3"(4<:4"$9C[DQL\N\K,1N&[4IX&)V3LE.PEFC:3
XXM;O"*`\3?O^;F%$UAD@6T%OY1C=?>_X[/&R9P?-OH$M)W$#\_QC]J\0-0<-VP
XXM1;]T$3\_QC]J\0-:4]\A?0?Q\V/\HQ8BF=-!2[]T$3\_QC\(F9_`7TXAG2T+
XXMT1`=`<VN2%X$XP2ICB7%TTCR^TD),T#>1&0O$)--7).I_489^99-$-II`R#%
XXMTTCKPQP,HA990&O:%&7%@]:P]2XX3"(4<:5ID06TIDU15CQH#5OO@L,D0A$$
XXM0^&[4IZ7?4C?FNPEFC:3;O`K<B>5ZSS',QRLVXX48_3L$M>O=0)&0;EE4*VX
XXM*P,+)[1&0;E-22;',QRLVXX48_3L$M>O=0*JH3[<VI1D(I-C0),_F]H%$2$"
XXM0>&[4IZ7?4C?"CYZJ5A%Y$G9NYXU+B0004K0&FD:D1"\HQ41(A`U+B1,D3NN
XXMI%A%Y$G9JQ8V7&#<;^`"`<3`43S"&R990&OA[Q=-;`8@L1S`@9;%TTC"^R6=
XXM&9C[DQM'KC-)_N;B0>&[LN78NQ7>_XZX&FE)#!G)[LE2`)=;4B?Y,::]H@!9
XXM0&O:%&7%@]:P]2XX3"(403#JPZV1P?U];>!AD@6T%OY^T<1F0*@&KO%YS>E4
XXMKA46^TO7"AJXFE@_H.8QV<0UF=J3@Y9[6@=*UID7%"'G*A`4OBODKOD)H:\9
XXM?4+I"3\S+1!0H$RN%$)AD@6T%OY^T<1F0*C6W26[LK*X^EH$H[9JG_7#7#R&
XXMELH2$2U@6RUXT0*?LC"[H4RN=.T"H0#WM5R22M,J"9$0>9`0&8\:;Y3QJ/%&
XXM"9$'>9#0.*%![./0PQQW@#!J(9*4VY0[&3`(!^6JDXU;D^4$`]U>:N!2]@-J
XXM'I--7).I/3EHN:=UH&3S4HS'F(P%LI`R8_/L,LQYY$IJ83'`5#]1;B03*B&[
XXM^12BR8U.#=6>;(DUP<*#"!16(&$P$`.?<;58HS5<@P->\WIM\&HBI+<@\-CA
XXMGQ!H#5OO@L,D0A%J\6HBI+<@\-CAGQ!H[1?J$14X3"(4H1990'"F]&]`)MXK
XXMBY:Z$P3)G`1)P)EJ\6HBI+<>1B2;1)5.#=7H<A<CQ)Y06Q-OX@*)L1^&O)P-
XXMGVCTK,>)'8^P^B8IX`*)L1\%#:/+V?")1L]Z7/MB`>X@H<S%HZT!QP*)`4<Z
XXM]M(V'^X@@(FXZD-<`9\;;ZA/XP*)H5A:4]_"^R50WARBZ`(ID!@9#6MZZV%$
XXM0FUV@8T7X493$D+^H=]J\6HBI+>>?&G49A?8R+,^"[23([1J,6TW08V?*='I
XXMJO%^M`5"$-S`4>-"`A%3L&(T%J>(H0!D]JI+#P!;(`3!#1PU+B00,04K1F-Q
XXMBA@*4(F+YK-`^S1)ID(%`=6ZD1ADIJU+CQ@*H,S#-&B_7!!0S=MD.RB)T1YB
XXMCP)ZH!5O`!JX^O!4\BV(0=Q"0.XU46_+;AB(0=Q(8#^X=0:3,?'$A,0G*[*(
XXM0=Q3H/&'(IE[DACML<+0;,.(0<7+V?")1L]Z'!%UX=6X"MB&O)P-GVCTK,<N
XXMD!B)43262`8^(!!?\`:`\`:<\`:R\`;7\`;H\`;W\`8S``>?7`(,<P(E,`8G
XXMH!:)@1AJD1A.#=7E=!<CI!MNHQ[EA#)`<9_3<B%'J1O:4C</%A`J(V8OH4Q^
XXM9-W36&1`(;RX73S'Y,2>;(G(GH@RX`(PT%\Y`!HR@#622&!"(`90``=4,!>K
XXMD04.(`4.*!X.D&\G((HGX(`>$P!+)QY4Z3%))QZBR'T]<`4`L'3B(8J[IW,-
XXMX(#L1P0.."A4((H.R`(`$`14X(#B$014($#QZ("(X8`^``!KX("#(HH.N`1^
XXM5``.J`(`0`0.^`-2Z8#D(8H.R`(`$`14,`4RX!,QX(!/L`0.*!!!0`540`2B
XXMZ(`ZUP`-X(#L)Q`\L`2BV``^<)2(X8!#0`13``(^(!X\D&]-((H-X`/E(8H.
XXM."$W,`-:.Q#](<=^=!$$H97'T1GNRC#'$0-:"_II`SO'D;4P`/II`SM"5A%R
XXMMCQWPK,`H$UY`#L/DC:HE1(/L9LCPC`@(FIBL2*VEMX'LN$M(`-8&P8`4/X2
XXMD12A-FHK0@4!U2,`X)(A-$(6`@`.EBU%X9)VX<1IH`=@@@MP<(3:T*/A``?(
XXM``#I``?J``?K``?L``?(``!W5P]PT&KWT*/Z``?[``?\``?]T*.;&`>M)@!Q
XXM(!`$$`<%$`<&$`<'$`<"T7@+$`>MY@!Q(!`0$`<1$`<2$`<3$`?LL81Q<'09
XXM$`?T$``<$`<>$`<A$`<C$`<"P7VPO'0J$`<"X0)Q\`)Q``-Q$`-Q(!"]H@-Q
XXM(!`[$`<L$``^$`=`$`=#$`=%$`<"P7U)$`=$QP1QT"M/$`=1$`=4$`=6$`<"
XXMT7A:$`<"L05Q(!!<$`==$`=>$`=?$`<"T7AC$`=+UT("X09V%0=S$`=T$`<"
XXM<81\$`=$I^\L$`""$`>$$`>%$`>&$`<"P7V-$`=+]PAQ<(22$`>8$`>9$`>:
XXM$`<"T7BC$`<"00IQ(!"E$`>F$`>G$`>H$`<"X04B)`>&(`>:(`>N(`?"(`?6
XXM(`?J(`?^(`<2,`<F,--SX`1SP`IQX(`"00MQD'0"T0MQ`($"40QQL'0"T0QQ
XXM<'0"H0UQ('0"<0YQ,![N$`=$)Q#Z$`?A$4-`)Q`'(`<5*!`2(`=A(Q`:(`=7
XXMJ@)R,($"P8`Q(`<Y(`=!(`=+(`=10$.O)D)Z"P*/'?X)@=8)D;!M@,,D0A%J
XXM\6HBI+<@\-CAGQ!H#5OO@L,D0A%J\6HBI+<@\-CAGQ!H[1?J$14X3"(4H1:O
XXM)D)ZZV%$LDE4.4"\Z>-H,$+L";4U\2:HOD?QZ`*)L1^&S!:[@B8LK&AEB2Z_
XXMG"")[28H4MJEXP*)L1\%#:,FP2\D!&3BO;+#U$G49)[RF[-5FQ@9#6MZZ\F7
XXMAEOV,1E!`1)"JQ:O)D)ZZ\F71FUV@8T\Z[-`.SE".Z,24S_>/R6X108YFT'T
XXM(Q,ND!@`H(XG2[XQ`V[ZNOGT9C/7#.4!Y0*)`0`#Q)O(JVTC9"&/G!CC!!DU
XXM@0+-)P(IX`*)X6.Z$SILP9MZ(/65V08ND!@`H(Y.#=5#!``.$`0`X`!5<+4.
XXM:,UW8EP!$:7O!`#-5!!0S2!%\&GC4RJ0LR#CTQSR"Q&W\G%3H!Y1,2CE`P),
XXMD`0##@#D$^!.,.!IG!<"3N!4``#DX\E!(`52D`1%(`5$?QA"4`53D`4`0#X@
XXM(`5)X`1'0/1.``),D`0#'CM!D`1,4`3Y-@1!P`1,0/1.P`1),."[)P15,`59
XXM``!$4!CY!@6_,N``D`1.D`14D`1!0`5)X`1'``!"4`53D`5Y$01,P`0@8`1!
XXMD`1,4`25IA=9KVAE^<@'D!@1Y.;97(G[%AA`H8@N``/]]1D@,`/1W+P;!@"V
XXM8`>MENCHPO>R#R9VLY!*@P)8O]^1#QB-$C3(?V.1#QB-$B&=%?$881\F?P8'
XXMT@)*0Q#9,CTGQ&V1#QA>/6[`#@![\.M4T`<`L.R&`0![L.R&T0<1!&MZ"P*/
XXM'?X)@=:P]2XX3"(4H1:O)D)Z"P*/'?X)@=9^H1Y1@<,D0A%J\6HBI+<>1B2;
XXM1)5%\.VI++-MKN2W-4+L";4U\28ND!@9[>;9+#Z"$H^)D=%NGLWB(RBZ\6HB
XXMI+>>?&G49A?8R+,^"[23([1J,05NGLV7_BJ6LF-LX`*)$4%NGLV7_BJ6LF-L
XXMD#"O)D)ZV^9*+DN)$4%NGLW!1A8EP#`E<$=3<"?>]00Y!A9B<:6(2[TH@`(H
XXM@`+V;:I(``$0``$0``$0``$0``$0``$0``$0``&$0`B$0`B$0`B$0`B$0`@0
XXM``$0``$0``$0$`B!$`B!$`B!$``!$``!$``!$``!$``!$``!$``!$``!$``!
XXM$``!``$0``$0``$0(`B"(`B"(`B"(``"(``"(``"(``"(``"(``"(``"(``"
XXM(``"(``"``$0``$0X!R!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$S@`0`NM
XXM8`JS4!Y)5QX"$`#.$`L"X0RQ8`!+%SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!
XXM$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!
XXM$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB!$SB"L`?C80VQ$#B!$SB!$SB!
XXM$SB!$SB!$SB!$SB!$SB!4Q[8HBTOL-4"(7EZ)WF-)WF-)WF2UWB2UWB2%S@`
XXM<`1-0`6!\ZB!<P1-0`7L"@`JP`<TP`>!$SB!`P##<``/T&MZ!P!@(!X@H'?1
XXMDG0`@`L'(`P'``)Z!P!CP1YZ%RU)!P"W<`"W<``@H'<`P$&JH7?1DG0`8`L'
XXM8`L'``)Z!P!$%W(@H'<`T`1)!P"O<`"U<``@H'<`,!;LH7?1DG0`0`2Z[&`Z
XXMH[4@H+4ZH+4ZH+57FP-:JQ93`"(.Y@94\$)7$!6S7@?]G`93T!$``&!&8-M-
XXMH$Q!,&Q-8,I*`")*X"U!T+Q:`P=/8"*^8P=PC#J!%CCD83&\`6-N(&IBH3-L
XXM8S$1LB2!$SB!$SB!$SCBL3#2%2U@6RW7DBW;$CBJ(1"&M0*J`0`P@+4S0`,Z
XXM=0,XD`-&-01$4`1&```P@+4S0`,Z=0,XD`/!,P;$"0`PP)4P\&<H@/5L0%GV
XXM/:P"H;5:J[5:J[5:J[5:J[5:VUG1PNHO`#*6TAOD83%!,`54``!!0`14,&Y3
XXM0`7C1@14D!=30`5Y0014``!-,`54``!-0`14``!0,`54``!00`14``!*,`54
XXM``!'T`14```KH#``<`1-0`5N*2DE``,RX!+P```"X`<&X`<L$``*X`<.X`=H
XXM$``2X`<6X`>D$``:X`<>X`?@$``BX`<FX`?DT`\JX`?CX0)^(!`A-QX+(UW1
XXM`K;5@A=%\&E;`0,`,*%<06HIK8Z7_H[.`\U"QDX`H(Z7_HZ272E[XI(A-$(6
XXM<F,KEG!"\BT`D`0O\`2>UB'C`SU=/EO9XCY>#<TT00:8#P!!<*8N'-6JPVZ;
XXM,F[?7F>Z#1QL8S%"\(]YE.HIK8YS<HR:#`#J"!>1W2&50M\`,*'L&Q>`WV+0
XXM`@76V-_96)`!(03_2!-D@/D`(`3L%3'9XCY>O:=UH&0!`<?NX]56\4ZX,R6G
XXM1!%[,@0=8BG'WM71>Q!^I(Z7_H[9XCZ-`@`3VL)"QDX`D`1^FF3>Q&3?V9N0
XXM?0:!BA"X,R5W(CQ=\14*LA^J0Y*M@VD="0`3VL)+GXWNTRC[`>3.8Q7OA#M3
XXM(ERT-:9@HHXJ(V:CJ;+AEHWNTR@`D`1(E(K[[4-^Y(]DT`(%8?0QN6(TMA^J
XXM0Y*M<VUNL`9[(@0=@EREMBQ@$@1G&J@9(5RT-:9@HCZ7;BO/TQQ7_B49'2Y=
XXMWK@3N6O#@3$S@1&%>07QE8TTP5Y^-*$M3$I2-J$2LIM/X9``D`1^VDJ[(F7J
XXMPZV1D08O4",N:1=.G`9ZD-IOI#[<.K3NTR@`H(Z1SA&(N)39LA`BXL@`D`0$
XXMR1;A7/"<[A7(PVZ_)2&[^10."0""X`>*X`>4X`>NX`>^X`?6X`?@X`?ZX`<,
XXM\`<>\`<N\`<Z\`=,\`=<\`=N\`=Z\`>0\`><\`>H\`>Z\`?)\`?9\`?H\`?Y
XXM\`<-``@A``@X``A'``A6``AN``A[``B1``B@``BL``B_``C0``CI``CX``@(
XX9$`@6$`@E$`@P$`@_$`A-$`AH$`A[$`@)`PB@
XX`
XXend
XSHAR_EOF
Xecho 'File ckermit is complete' &&
Xecho 'uudecoding file ckermit' &&
Xuudecode < _shar_tmp_.tmp && rm -f _shar_tmp_.tmp &&
Xecho 'uncompressing file ckermit' &&
Xcompress -d < _shar_cmp_.tmp > 'ckermit' && rm -f _shar_cmp_.tmp &&
Xchmod 0755 ckermit ||
Xecho 'restore of ckermit failed'
XWc_c="`wc -c < 'ckermit'`"
Xtest 91761 -eq "$Wc_c" ||
X	echo 'ckermit: original size 91761, current size' "$Wc_c"
Xrm -f _shar_wnt_.tmp
Xfi
Xrm -f _shar_seq_.tmp
Xecho You have unpacked the last part
Xexit 0
SHAR_EOF
$TOUCH -am 1222012790 'ckermit/ckermit.03' &&
chmod 0644 ckermit/ckermit.03 ||
echo 'restore of ckermit/ckermit.03 failed'
Wc_c="`wc -c < 'ckermit/ckermit.03'`"
test 19216 -eq "$Wc_c" ||
	echo 'ckermit/ckermit.03: original size 19216, current size' "$Wc_c"
# ============= doc/_basic.txt ==============
if test ! -d 'doc'; then
    echo 'x - creating directory doc'
    mkdir 'doc'
fi
echo 'x - extracting doc/_basic.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'doc/_basic.txt' &&
X.*s 1 "Basic Organization"
X
XECU forks to run as two separate
Xprocesses, a transmitter (XMTR) and a receiver (RCVR).
XThe two processes
Xcommunicate via signals and a System V shared memory segment.
XXMTR controls RCVR and terminates it under certain circumstances,
Xcalled here auxiliary operations.  After an auxiliary operation
Xcompletes, XMTR forks again to recreate RCVR.
X
X.*s 2 "Transmitter Process (XMTR)"
X
XXMTR
Xaccepts user input from the computer keyboard; input is recognized
Xas belonging to one of two types: 1) transmit data and 2)
XECU commands.  Keyboard input
Xis passed to the serial line driver until an ECU command
Xis detected.  Commands are prefixed with a 
X.B HOME
Xkey which causes ECU to accept keyboard data up to the next ENTER
Xkey as command text.  After a command has been processed,
Xkeyed data is again routed to the serial line.
X
X.*s 3 "Keyboard Interface"
X
XThe keyboard driver is set into the raw mode.
XXMTR reads characters one at a time from the driver.
XNormally, characters read from the keyboard are passed directly to
Xthe serial line driver.  The
XASCII ESC ("escape") character is handled as a special case.
XWhen a function key is pressed, the keyboard generates
Xto XMTR an ESC character,
Xfollowed by more characters describing which function key has
Xbeen pressed.
XPressing the ESC key also causes XMTR to see an ESC character,
Xbut with no subsequent function key "suffix".
X
XWhen an ESC character is read, XMTR delays transmission of the
Xcharacter to the line for a short period to determine whether
Xthe ESC key has been pressed or a function key has been pressed.
XIf no "suffix" is detected, the ESC is passed to the line, having
Xsuffered an insignificant delay given human typing speeds.
X
XIf a function key "suffix" is detected, the function key type
Xis decoded.  The
X.B HOME
Xkey indicates an ECU command follows.  Any
Xother function key is passed to the function key mapping feature
X(described later).
X
X.*s 3 "ECU Command Assembly"
X
XAfter 
X.B HOME
Xhas been pressed, XMTR presents a reverse video prompt on the
Xdisplay, indicating its readiness to accept a command.  During
Xinput, the command may be edited using the same control keys
Xspecified with stty(C).  Additonal editing
Xusing the left and right arrow keys and the
XIns(ert) key are usually available.
XCommand input may be aborted by pressing ESC.
XWhen a command string has been assembled, it is passed to the
Xcommand processor, which breaks the command arguments into a token
Xarray similar to the argc/argv array.  When the command handler
Xreturns, XMTR returns to its normal mode of copying keyboard data to
Xthe serial line.
X
XFurther information on XMTR command line processing may be found in 
Xlater sections titled Line Editing and Interactive Command History.
X
X.*s 3 "Function Key Mapping"
X
XWhile in tty-to-line mode, function keys other than 
X.B HOME
Xare available to be mapped
Xto transmit short keystroke sequences on a connection by
Xconnection basis.  Under control of the dialing command ("Dial"
Xdescribed below)  or the function key control command ("FK"),
Xpredefined function key maps may be loaded.
X
XFunction keys which may be mapped are
X.B F1
Xthrough
X.B F12 ,
X.B PgUp ,
X.B PgDn ,
X.B End ,
X.B Ins ,
X.B Del ,
Xand
Xthe cursor control keys.
X
XThe unshifted keypad '5' key is permanently mapped to
Xproduce a screen snapshot when it is pressed and XMTR is
Xreading from the keyboard.
X
XThhe BackTab (shift Tab) key is mpermanently mapped to a screen
Xredisplay feature.
X
X.*s 3 "Auxiliary Operation Control"
X
XCertain commands cause ECU to perform what is called an
Xauxiliary operation, requiring temporary termination of the
XRCVR process.  Such operations are not as useful
Xwith
X.B cu(C) ,
Xbecause cu does NOT kill its receiver process at any time.
XAs a result, it impossible to run a modern file transfer
Xprotocol since the cu receiver process eats some of the
Xcharacters sent by the remote protocol program.
X
XThere are two types of auxiliary operations:
X1) internal interactive command or procedure
Xexecution and 2) external program execution.
XCertain
X.B internal
X.B commands
Xrequire tight control over the serial line.
XFor instance, the
X.B dial
Xcommand requires transmitting modem command
Xstrings and receiving modem response codes.  Such functions
Xare best accomplished by single-process control of the line.
X.B External
X.B program
Xexecution is of two kinds, file transfer invocation
Xand local shell/command execution.
X
XThe RCVR process is terminated in any of these cases either to
Xavoid the RCVR swallowing characters intended for other
Xtargets (the modem handler in XMTR or the file transfer protocol)
Xor to avoid having remote data interspersed with the output of
Xlocal programs.
X
X.*s 2 "Receiver Process (RCVR)"
X
XThe receiver process reads the incoming serial data stream and
Xpasses it to the user terminal driver through a filter which
Xscans for events such as the occurrence of ASCII BEL (bell)
Xcharacters or terminal control sequences.  RCVR also handles
Xthe session logging and ANSI filter functions.
X
X.*s 3 "ANSI Filter"
X
XSince the term "ANSI" is used to describe
X.B many
Xvariations on the ANSI X3.64 recommendations for terminal control (read
X"IBM pseudo-ANSI"), the ECU receiver process has an "ANSI filter" which
Xattempts to translate incompatible (read "MSDOS") ANSI-like control
Xsequences to sequences acceptable to the UNIX/XENIX display driver.
XThis includes support for the MS-DOS "save cursor" and "restore cursor"
Xsequences.
XMore information may be found later in "Terminal Model."
X
X.*s 3 "Session Logging"
X
XWhen directed by the user, the RCVR process logs incoming serial
Xdata to a file named on the log command line.  The default operation
Xis to filter unprintable characters (other than TAB and NL) from the
Xlog, but raw logging is available with a command option.  In a like
Xmanner, the default is for appending to an existing file, but a
Xcommand option may specify scratching any previous contents.
X
XLog files receive header lines each time the file is
Xopened, stating the logical system name, the telephone number
Xand the date/time.
X
SHAR_EOF
$TOUCH -am 1221210990 'doc/_basic.txt' &&
chmod 0644 doc/_basic.txt ||
echo 'restore of doc/_basic.txt failed'
Wc_c="`wc -c < 'doc/_basic.txt'`"
test 6049 -eq "$Wc_c" ||
	echo 'doc/_basic.txt: original size 6049, current size' "$Wc_c"
# ============= doc/_end.txt ==============
echo 'x - extracting doc/_end.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'doc/_end.txt' &&
X
X.br
X.nr si 0n
X.af % i
X.ls 1
X.TC 1 1 3
SHAR_EOF
$TOUCH -am 0711174289 'doc/_end.txt' &&
chmod 0644 doc/_end.txt ||
echo 'restore of doc/_end.txt failed'
Wc_c="`wc -c < 'doc/_end.txt'`"
test 39 -eq "$Wc_c" ||
	echo 'doc/_end.txt: original size 39, current size' "$Wc_c"
# ============= doc/_exit.txt ==============
echo 'x - extracting doc/_exit.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'doc/_exit.txt' &&
X.*s 1 "Exit Codes"
X
XWhen ECU exits (terminates execution),
Xit uses a code from the following table:
X.DS L
XOK                   0    no error
XSIG1                 1    SIGHUP (signal 1)
XSIGN                 64   signal 64 - see below
XLINE_READ_ERROR      129  could not read from attached line
XXMTR_WRITE_ERROR     130  could not write to attached line
XXMTR_LOGIC_ERROR     131  software logic error
XBSD4_IOCTL           132  not currently used
XSHM_ABL              133  not currently used
XSHM_RTL              134  not currently used
XNO_FORK_FOR_RCVR     135  could not fork receiver process
XTTYIN_READ_ERROR     136  could not read from console
XLINE_OPEN_ERROR      137  could not attach (open) requested line
XPWENT_ERROR          138  error in /etc/passwd processing
XUSAGE                139  command line syntax error
XCONFIG_ERROR         140  missing or erroroenous configuration file
XINIT_PROC_ERROR      192  initial procedure terminated in error
XUSER1                193  'exit' procedure command called with 1
XUSERN                223  'exit' procedure command called with 31
X.DE
X
XThe logical names 'SIG1' and 'SIGN' refer to a range of error codes
Xsignifying ecu termination due to a signal.  A larger range (64) is
Xreserved than is necessary to handle reasonable expansion of
XSIG values in the OS. Not all signals will be reported
Xin this manner. ECU will never report status 10 (signal 9, SIGKILL),
Xfor instance.
X
XThe logical names 'USER1' and 'USERN' refer to a range of error
Xexits codes reserved for use by the 'exit' procedure command.
XSee the description of this command for more information.
X
XFor ecu friend code,
Xformal C #define identifiers for exit codes may be found in
Xecuhangup.h and consist of the above logical names prefixed with 'HANGUP_'.
SHAR_EOF
$TOUCH -am 1203150290 'doc/_exit.txt' &&
chmod 0644 doc/_exit.txt ||
echo 'restore of doc/_exit.txt failed'
Wc_c="`wc -c < 'doc/_exit.txt'`"
test 1767 -eq "$Wc_c" ||
	echo 'doc/_exit.txt: original size 1767, current size' "$Wc_c"
# ============= doc/_features.txt ==============
echo 'x - extracting doc/_features.txt (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'doc/_features.txt' &&
X.*s 2 "Supported Terminals"
X
XECU does not attempt to support terminal emulation in the classic
Xsense of the word.  It presents to the remote host an "ANSI-like"
Xterminal type as described earlier in the introduction and in 
Xthe section titled "ANSI Filter."
XHowever, it does support, with limitations, any LOCAL terminal
X(console) for which a valid termcap description exists. You MAY
Xbe able to use ECU with a remote terminal (calling into UNIX/XENIX
Xover a network or modem), but you may get unfavorable results with
Xfunction key usage if your modem is a "packetizing" type, such as
Xa Telebit or if ethernet or other networking chops up your keystroke
Xsequences.  ECU allows approximately 60 milliseconds after receiving
Xan ASCII ESC character for later characters of a function key sequence
Xto arrive.  If at least one character of the sequence has not been
Xreceived in that time, ECU treats the key as an ESCape, not a function key.
XThis typical problem of detecting ESC vs. function key is unfortunate, but
Xwe must live with it until paradigms change (say, in about 2010?).
X
XThe termcap entry for a console
XMUST contain a valid entry for the following database entries:
X
X.DS L
Xcl      clear screen
Xkl      cursor left
Xkr      cursor right
Xdc      delete character
Xdl      delete line
Xcd      clear to end of display
Xce      clear to end of line
Xic      insert character
Xal      insert line ("add" a "line")
Xcm      cursor motion
Xso      stand out (terminal specific attention getter)
Xse      stand end
X.DE
X
XThe above sequences MUST be present, valid and reasonably efficient.
XECU does not use curses during most of it's operation, and unlike
Xcurses, makes no attempt to emulate missing terminal functionality.
XFailure to provide valid entries will result in
Xstrange behavior with no warning.
X
XNote that the formal termcap description of "kl" and "kr" 
Xstate these are sequences generated by the terminal
X.B keyboard ,
Xbut ECU expects that these sequences also causes the desired
Xeffect when
X.B sent
Xto the
X.B screen .
X
XAdditionally, the following, optional, sequences will be used if
Xthey are detected.
X
X.DS L
Xmb      bold on ("XENIX" extension)
Xme      bold off ("XENIX" extension)
Xus      underscrore on
Xue      underscrore off
Xvb      visual bell
X.DE
X
XA future version of ECU may use terminfo instead of termcap.
XProblems with terminfo prevent its use at the present time.
XIn addition, early versions of XENIX do not support terminfo.
X
X.*s 2 "Function Key Recognition"
X
XECU recognizes 23 function keys as having special significance
Xto its operation.  They are (with their AT/"ANSI" character sequences):
X.DS I
XInternal  Description    AT/"ANSI" Char-
XName      or Key Label   acter Sequence
X--------  ------------   ---------------
XF1        F1                ESC [ M
XF2        F2                ESC [ N
XF3        F3                ESC [ O
XF4        F4                ESC [ P
XF5        F5                ESC [ Q
XF6        F6                ESC [ R
XF7        F7                ESC [ S
XF8        F8                ESC [ T
XF9        F9                ESC [ U
XF10       F10               ESC [ V
XF11       F11               ESC [ W
XF12       F12               ESC [ X
XHome      Home              ESC [ H
XEnd       End               ESC [ F
XPgUp      Page up           ESC [ I
XPgDn      Page down         ESC [ G
XCUU       Up arrow          ESC [ A
XCUD       Down arrow        ESC [ B
XCUL       Left arrow        ESC [ D
XCUR       Right arrow       ESC [ C
XCU5       "Cursor 5"        ESC [ E
XIns       Insert            ESC [ L
XBkTab     Back Tab          ESC [ Z
X.DE
X
XECU recognizes function keys entered by the user in
Xone of two ways, depending upon whether the terminal is
Xrecognized as an "ANSI" or "non-ANSI" terminal (see "Supported Terminals"
Xabove).
X
XIf an AT/"ANSI" terminal is in use, ECU expects the standard AT/"ANSI" sequences
Xto be generated by the keyboard according to the above table.
XThis means that no use of the setkey(C) program (or similar functionality)
Xmay be active.
X
XIf an "non-ANSI" terminal is in use, ECU matches a function key sequence
Xto an internal function key representation
Xby testing all keystroke sequences again an internal table loaded
Xat the beginning of execution from the file ~/.ecu/nonansikeys.
XNOTE that supported terminals MUST employ function keys which generate
Xsequences beginning with an ASCII ESC (escape, 0x1B, decimal 27, octal 33).
X
XThe format of an file entry is shown below in the 'ansilike' example (used
Xto test ECU from the console by defining an 'ansi' terminal type
Xnevertheless equivalent to 'ansi').
X
XLines beginning with '#' are comments.
X
X.DS I
X#+------------------------------
X# ECU 3.0 nonansikeys
X#-------------------------------
Xansilike
Xansi
Xmsdos
Xdos
Xdosansi
Xtest
X    F1:F1:          esc [ M 
X    F2:F2:          esc [ N 
X    F3:F3:          esc [ O 
X    F4:F4:          esc [ P 
X    F5:F5:          esc [ Q 
X    F6:F6:          esc [ R 
X    F7:F7:          esc [ S 
X    F8:F8:          esc [ T 
X    F9:F9:          esc [ U 
X    F10:F10:        esc [ V 
X    F11:F11:        esc [ W 
X    F12:F12:        esc [ X 
X    Home:Home:      esc [ H 
X    End:End:        esc [ F 
X    PgUp:PgUp:      esc [ I 
X    PgDn:PgDn:      esc [ G 
X    CUU:CUU:        esc [ A 
X    CUL:CUL:        esc [ D 
X    CU5:CU5:        esc [ E 
X    CUR:CUR:        esc [ C 
X    CUD:CUD:        esc [ B 
X    Ins:Ins:        esc [ L
X    BkTab:BackTab:  esc [ Z
X.DE
X
XThe first line(s) in a terminal keyboard description begin in
Xcolumn 1 and contain the terminal types (a la $TERM) for which
Xthe keyboard description are valid.  The example entry contains
Xseveral references to terminal types containing the substring
X'ansi'.  These are included only as an example of one keyboard
Xdescription servicing multiple terminal types.
X
XECU determines whether a terminal meets the ansi vs.  ANSI
Xdistinction by searching for 'ansi' in the $TERM environment
Xvariable (without regard to case: 'AnSi' will match as well as
X'ansi').  If your keyboard matches the ANSI specification even
Xthough your $TERM environment variable does not contain 'ansi'
X(such as 'sun'), then you may add the terminal type to the 'ansilike'
Xentry rather than create a separate entry.
X
XFollowing the "first lines" are key definition entries, each
Xpreceded by at least one tab or space.  Each entry is composed of
Xthree fields delimited by commas.  The first field of an entry is
Xthe internal ECU function key name and must be chosen from the
Xfollowing strings (with no regard to case): "F1", "F2", "F3",
X"F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "Home",
X"End", "PgUp", "PgDn", "CUU" (cursor up), "CUL" (cursor left),
X"CU5" (unshifted cursor pad 5), "CUR" (cursor right) and "CUD"
X(cursor down). The
Xsecond field contains the name of the key as it appears on the
Xnon-ANSI keyboard (such as "F16" for End on the Wyse 60).  The
Xthird field is a description of the character sequence generated
Xby the non-ANSI keyboard when the chosen key is pressed; it is a
Xstring of one or more tokens separated by spaces or tabs.
X
XNote that while ECU requires a function key sequence to begin with
Xan ASCII ESC (escape), each table entry must contain
Xan 'esc' as it's first sequence token.  This seemingly
Xsuperfluous requirement ensures compatibility
Xwith possible future support for function keys which do not
Xbegin with ESC.
X
XIn addition, function key sequences may not contain the NUL (0)
Xcharacter, nor may they exceed 10 characters, including the leading ESC.
X
XThe tokens are described in full in the following  sections titled
X"Function Key Recognition" and "Function Key Mapping."
X
XPLEASE NOTE: ECU does not have a reasonable way for you to terminate
Xit if there are no Home and End keys defined, so it refuses to proceed
Xif no definitions are found.  Even so, if you have incorrect definitions,
Xyou may not be able to get out of ECU without a kill -1 <pid> from
Xanother terminal or hanging up your connection with UNIX/XENIX
Xif using ECU from remote.
X
X.*s 2 "Function Key Mapping"
X
XECU recognizes function keys in a manner described in the above
Xsection titled "Function Key Recognition."
XThis section deals with how ECU behaves
Xonce a function key has been recognized as having been entered
Xat the keyboard. 
X
XAll function keys with the exception of the 
X.B Home ,
X.B BkTab
X(shift TAB),
Xand keypad unshifted 5 key can be programmed to emit selected strings.
XFor instance, when communicating with a Stratus computer,
Xdoing your best to emulate a VT100, a function key
Xmap might be constructed as follows:
X.DS L
X F1  F1     F2  F2         Home ecu cmd     PgUp  dispform
X F3  F3     F4  F4         End  enter       PgDn  cancel
X F5  F5     F6  F6         Ins  local shell CUR5  Screen dump
X F7  status F8  no status  BkTab restore receiver display
X F9         F10 redisp     CUR^ ^           CUR>  >
X F11        F12            CUR< <           CURv  v
X.DE
X
XFunction key mapping is placed in ~/.ecu/keys.  The Stratus example:
X.DS L
Xstratus
X    F1:F1:esc O q
X    F2:F2:esc O r
X    F3:F3:esc O s
X    F4:F4:esc O t
X    F5:F5:esc O u
X    F6:F6:esc O v
X    F7:F7:esc O w
X    F8:status:dc4
X    F9:no status:nl
X    F10:redisp:esc O y
X    F11:redisp:syn
X    PGDN:cancel:esc O Q
X    END:enter:esc O M
X    PGUP:dispform:esc O R
X    CUU:^:dle
X    CUD:v:so
X    CUL:<:stx
X    CUR:>:ack
X.DE
X
XIf you have installed the mapkey file (as described in the release directory
Xin mapkeys/README), then ALT-a through ALT-z causes the "silent"
Xexecution of procedures 'alt_a.ep' for ALT-a, 'alt_b.ep' for ALT-b, etc.
XThe models subdirectory contains an example alt_h.ep which will home
Xthe cursor when ALT-h is pressed.  This facility allows the execution
Xof 26 procedures without ECU itself changing the video display at all.
XAny changes to the display (short of procedure errors) will result
Xsolely from the action of the invoked procedure.
XIf the procedure matching the ALT-[a-z] key pressed cannot be found,
Xa short error message is printed and the terminal bell is rung.
X(Using back tab may be used to refresh the display in this event.)
X
XThe strings used to represent "non-printable" characters are identical
Xto the formal ASCII names given them (without regard to case), viz:
X.DS I
X0x00 nul      NUL may not appear in a non-ANSI
X0x01 soh      function key definition
X0x02 stx 
X0x03 etx 
X0x04 eot 
X0x05 enq 
X0x06 ack 
X0x07 bel 
X0x08 bs  
X0x09 ht  
X0x0A nl  
X0x0B vt  
X0x0C np  
X0x0D cr  
X0x0E so  
X0x0F si  
X0x10 dle 
X0x11 dc1 
X0x12 dc2 
X0x13 dc3 
X0x14 dc4 
X0x15 nak 
X0x16 syn 
X0x17 etb 
X0x18 can 
X0x19 em  
X0x1A sub 
X0x1B esc 
X0x1C fs  
X0x1D gs  
X0x1E rs  
X0x1F us  
X0x20 sp  
X0x7F del 
X.DE
X
X.*s 2 "Host Video Control Sequences"
X
X.*s 3 "All Local Terminals"
X
XThe following sequences are recieved over the line
Xby ECU and properly interpreted for all local terminal types
X(multiscreen, rlogin/xterm pseudotty, serial).
X
X.DS L
XSequence  | Description
X----------+-------------------------------
XESC [ @   | ICH
XESC [ A   | CUU
XESC [ B   | CUD
XESC [ C   | CUF
XESC [ D   | CUB
XESC [ E   | CNL       See ANSI X3.64,
XESC [ F   | CPL       screen(HW) and/or
XESC [ H   | CUP       MS-DOS Technical
XESC [ J   | ED        Reference Manual
XESC [ K   | EL
XESC [ L   | IL
XESC [ M   | DL
XESC [ P   | DCH
XESC [ S   | SU
XESC [ T   | SD
XESC [ X   | ECH
XESC [ `   | HPA
XESC [ a   | HPR
XESC [ d   | VPA
XESC [ e   | VPR
XESC [ f   | HVP
XESC [ ? m | SGR
XESC [ n   | DSR (see below)
XESC [ s   | save cursor MS-DOSism
XESC [ u   | restore cursor MS-DOSism
X.DE
X.DS L
XSGR Sequences for ALL TERMINALS
XSequence  | Description   |  Maps to termcap
X----------+---------------+-------------------------------
XESC [ 0 m | normal        |  "se"+"me"+"ue"
XESC [ 1 m | bold          |  "so"
XESC [ 4 m | underscore    |  "us"
XESC [ 5 m | blink         |  "mb" (XENIX extension)
XESC [ 7 m | reverse video |  "so"
X.DE
X
X.*s 3 "Multiscreen Local Terminals"
X
XIn addition to the above, if you are operating from a color
Xmultiscreen, additional (SCO and MS-DOS/ANSI.SYS) sequences
Xare supported (see screen(HW)):
X
X.DS L
XAdditional Multiscreen SGR Sequences
XSequence    | Description  (no termcap mapping)
X------------+-----------------------------------------------
XESC [ 8 m   | non-display
XESC [ 1 0 m | select primary font
XESC [ 1 1 m | select first alternate font (0x00-0x1F)
XESC [ 1 2 m | select second alternate font (0x80-0xFF)
XESC [ 3 0 m | black foreground
XESC [ 3 1 m | red foreground
XESC [ 3 2 m | green foreground
XESC [ 3 3 m | brown foreground
XESC [ 3 4 m | blue foreground
XESC [ 3 5 m | magenta foreground
XESC [ 3 6 m | cyan foreground
XESC [ 3 7 m | white foreground
XESC [ 3 8 m | enables underline option
XESC [ 3 9 m | disables underline option
XESC [ 4 0 m | black background
XESC [ 4 1 m | red background
XESC [ 4 2 m | green background
XESC [ 4 3 m | brown background
XESC [ 4 4 m | blue background
XESC [ 4 5 m | magenta background
XESC [ 4 6 m | cyan background
XESC [ 4 7 m | white background
X.DE
X
X.s 3 "MS-DOS 'SGR Gaggles'"
X
XECU also does it's best to interpret MS-DOS "SGR gaggles" such as
X.DS I
XESC [ 5 ; 3 4 ; 4 7 m
X.DE
Xwhich means "set the terminal to white background with
Xblue blinking foreground."
X
X.*s 3 "Character Mapping"
X
XThe MS-DOS ROM signal ruling
Xcharacters from the following table are mapped after the fashion of:
X
X.DS L
X       .-----+--------.
X       |     |        |
X       |     +--------+
X       |     |        |
X       +-----+        |
X       |     |        |
X       `-----+--------'
X.DE
X.DS L
XMapped Characters (see pc_scr.h):
XHex  | Description
X-----+---------------------------
X0xDA | top left single rule
X0xBF | top right single rule
X0xC0 | bottom left single rule
X0xD9 | bottom right single rule
X0xC3 | left hand T
X0xB4 | right hand T
X0xB3 | vertical rule
X0xC4 | horizontal rule
X.DE
X
X(Due to momentary laziness on the part of the author, double
Xruling characters will appear as random druk, unless your terminal
Xis smart enough to have joined the Church of the True-Blue ROM.
XOne day an X version of this program will appear and you can choose
Xto no longer accomplish real work, but may spend your days editing
X42Kb resource files which will give you TAC, Total Anal Control,
Xover all this.)
X
X.*s 2 "Line Editing"
X
XWhen you are entering a line of text for an ecu command or in
Xa field on a screen, you may edit it in a number of ways at any
Xtime prior to pressing Enter.  Cursor Left moves the cursofr left
Xby one character position, nondestructively.  Cursor Right moves
Xto the right.  Insert toggles insert mode.  Backspace (your
Xerase key as specified to stty in commands, the actual backspace key
Xin screens) deletes the character to the left of the cursor.
XYour line kill key (as specified to stty) in command mode or
Xthe ^U character in screen mode erases the entire line.  Esc
Xin command mode cancels the command.  Esc in screen mode usually
Xcancels the screen or subfunction in a screen.  ^L or ^R in
Xinteractive command mode shows the current state of Insert mode and
Xredisplays the edited string.
X
X.*s 2 "Screen Dump"
X
XWhen the "cursor 5" key is pressed, the screen contents are
Xdumped to a file.  By default, this file is named '~/.ecu/screen.dump'.
XThe
X.B sdname
Xinteractive command either displays or changes the current screen
Xdump file name, depending upon whether or not a argument
Xis supplied.
XThe
X.B scrdump
Xprocedure command can initiate a dump.
X
X.*s 3 "Multiscreen and Non-Multiscreen"
XNote that from multiscreens, screen dump produces a dump of the
Xactual screen contents, including ECU-generated output.  When
Xusing a non-multiscreen terminal, screen dump dumps only the 
Xshared memory virtual screen as received from the host.
XIf standard input is not a serial line (xterm o or /dev/null),
Xscreen dumps will be of the non-multiscreen type.
X
XIf, at a multiscreen, you wish a screen dump free of ECU output
X"pollution," use Shift-Tab (BkTab) to redraw the screen, then
Xperform the screen dump.
X
X.*s 3 "Multiscreen Bug"
XThere has been a bug in the multiscreen driver for some time
Xwherein a MEDIA COPY (screen dump) sequence ("ESC [ 2 i") leaves
Xthe "ESC [ 2" part "active".  When a screen dump (Cursor 5)
Xcommand is given, I do the sacreen dump, then send a "l" to the
Xscreen to work around the bug ("ESC 2 [ l" unlocks the keyboard,
Xessentially a no-op).  If and when it gets fixed, you'll see an
X"l" show up on your screen after a screen dump sequence.  To fix
Xthis, comment out the
X.DS I
X#define MULTISCREEN_DUMP_BUG
X.DE
Xat the top of ecuscrdump.c.
X
X.*s 2 "Interactive Command History"
X
XAfter pressing the Home key, pressing it again invokes the
Xinteractive command history function.  After the second
XHome key is pressed, the last interactive command is
Xredisplayed. Line editing may be performed on the command as described
Xin the previous section.
X
XAdditionally, using the Cursor Up key accesses less recent commands.
XThe Cursor Down key accesses more recent commands.  Pressing Enter causes
Xthe command to be executed.  Pressing Esc aborts command entry.
X
X.*s 2 "Dialing Directory"
X
XECU provides an on-line editable dialing directory.  Remote
Xsystems are defined as records using alphanumeric identifiers
Xas keys.  Other record fields include telephone number, baud
Xrate, parity and textual description.
X
XOther features include changing to alternate dialing directory
Xand a multi-number redial cycle function. Refer below to the description
Xof the interactive
X.B dial
Xcommand.
X
X.*s 2 "Online Command Dictionary"
X
XThe ECU help command presents a display of interactive commands.  The user
Xis then prompted to enter a command name for further, Unix-style
X"usage" information.
X
X.*s 2 "Multiscreen Event Alarm"
X
XBy using the 
X.B BN
X(bell notify) interactive command, an audible alert is sent to all
Xmultiscreens when an ASCII BEL (bell) is received or when a file
Xtransfer completes.  An additional option causes an alert when ANY
Xdata is received from the line.  This makes it simple to do work on
Xother multiscreen consoles and be alerted when attention to the
Xcommunications session is required.
X
XFor instance, the Berkeley 4.x Unix utility "talk" rings the bell when
Xanother user wishes an interactive chat mode.  BSD "biff" rings the bell
Xwhen incoming mail is received.  Scripts or commands at remote sites can
Xbe configured to ring the bell as in:
X.DS I
Xmake foo bar; bell; make more_stuff; bell;
X.DE
Xto call attention to the ECU user when work is being done
Xon other multiscreen consoles.
X
XThis feature is only available when you are running ECU from a multiscreen.
X
X.*s 2 "Built-in Modem Dialer"
X
XThe built-in ECU dialer supports modems which use the 
X.B
XHayes-style AT command set or most variants
X.R
X.B thereof .
XIt is used when HoneyDanBer UUCP is not installed or when there is no
Xentry in the /usr/lib/uucp/Devices file for the selected outgoing line.
X(For more information, see the later section titled "HoneyDanBer UUCP
XInterface".)
X
XThe built-in dialer uses files in the /usr/lib/ecu directory which
Xcontains modem initialization information.  Modem initialization
Xfilenames are made from concatenating the tty name with ".mi".  For
Xinstance, tty1a's initialization file is named "tty1a.mi".
X
XCommands for initializing the modem and for dialing may be specified in
Xa very flexible manner.  Separate init and dial strings for each legal
Xbaud rate, a single pair of strings for all baud rates or a combination
Xmay be specified.
X.DF L
X.hl
X.ce 1
XSample Modem Initialization Files
X
X#+-----------------------------------------------------------
X#  tty1a.mi - Microcom AX/9624c
X#------------------------------------------------------------
Xinit_>2400:ATS11=47X4S0=0S7=30\Q1\X1\N3   # baud rates > 2400
Xinit_default:ATS11=47X4S0=0S7=30\Q0\X0\N0 # other baud rates
Xdial_default:ATDT
X
X
X#+-----------------------------------------------------------
X#  tty2d.mi - USR Courier 2400
X#------------------------------------------------------------
Xinit_default:ATS11=47 X4 S0=0 S7=32
Xdial_default:ATDT
X
X.DE
X
X.*s 2 "File Transfer"
X
XECU supports numerous file transfer protocols: as of this writing,
XXMODEM, XMODEM/CRC, XMODEM-1K, YMODEM/CRC Batch, ZMODEM/CRC-16,
XZMODEM/CRC-32, and Kermit are supported.  Although a seamless interface
X(there's some yuppie marketing newspeak) is provided to the user,
Xtransfer is facilitated by executing external programs.
X
XAs of this writing SEAlink is not in the best of health (no one
Xhas complained :-).
X
XKermit support required you to obtain and patch C-Kermit 4E.
XThe patch information is available in the ckermit subdirectory
Xof the release.  As soon as C-Kermit 5 is stable and released by
XColumbia, a suitable patch will be developed for it.  It
Xis quite possible no patching will be necessary.
X
XXMODEM, YMODEM and ZMODEM transfers (thanks to modified public domain
Xprograms by Chuck Forsberg) present dynamic status displays similar to
Xthe following:
X.DS L
X    .-[ ecusz 2.37 ]-- /tmp -----------------------------------.
X    |  ZMODEM/CRC32  Data xfer rate ~=    896 chars/sec        |
X    |  File   1 of   1: ckermit-5a-130                         |
X    |  File position:     34053 length:    34053  -rw-r--r--   |
X    |  Sending 34053 bytes  total time ~=  0:40                |
X    |  tx: hdr ZFIN  0             rx: hdr ZFIN  0             |
X    |  Comm I/O: rx      175  tx    34393 bytes                |
X    |  Baud rate:  9600 BINARY blklen:  1024 comm mode: NORMAL |
X    |  Time:         started: 17:31:50  this file: 17:31:51    |
X    |  17:32:29      elapsed: 00:00:39             00:00:38    |
X    |  Errors: this file:   0 total:    0 files skipped:   0   |
X    |  Total file bytes transferred: 34053                     |
X    |  End of file                                             |
X    |  Remote: CRC32 y  duplex y  continuous stream y          |
X    `- Connected to ki4xo - procedure put_ck5a ----------------'
X.DE
X
X.*s 2 "Procedures (Scripts)"
X
XA powerful, language-style procedure language is incorporated
Xinto ECU.  The language is described in later sections.
X
X.*s 2 "Initial (Startup) Procedure"
X
XAn
X.B
Xinitial procedure
X.R
Xmay be be specified to ECU either to initialize an interactive
Xsession or to execute an entirely unattended or "batch"
Xcommunication session.
X
X
X.*s 2 "Home Directory Files"
X
XECU control files reside in the .ecu subdirectory of
Xeach user's home directory.  For example, in home directory /usr/wht:
X.DS I
X/usr/wht/.ecu/dir            CD interactive command history file
X/usr/wht/.ecu/keys           function key mapping
X/usr/wht/.ecu/nonansikeys    function key mapping
X/usr/wht/.ecu/log            connect, file transfer history
X/usr/wht/.ecu/phone          default dialing directory
X/usr/wht/.ecu/colors         colors used by ECU
X.DE
X
XThe .ecu directory is also searched for ECU procedure files
X(having the '.ep' extension) in the procedure cannot be found in
Xthe current working directory.
X
X.*s 2 "Lock Files"
X
XECU maintains lock files in /usr/spool/uucp in accordance with the
XHoneyDanBer UUCP conventions (ASCII pids as 10-character strings
Xfollowed by a newline).  Lock files are created for the lower-case
Xdevice names of
Xa line and checked for in both cases.  
XFor example, both LCK..tty1a is created when
X/dev/tty1a OR /dev/tty1A is selected and neither LCK..tty1a nor
XLCK..tty1A are active.  See the later section titled
X"HoneyDanBer UUCP Interface".
X
X.*s 2 "Dial-In/Dial-Out Line Support"
X
XECU works with the SCO getty to support dialing out on a line
Xenabled for login.  After use of the line is complete,
XECU signals the system to restore incoming call status to
Xthe line.
XSee the later section titled "HoneyDanBer UUCP Interface".
X
X.*s 2 "Tools"
X
XCommands are provided for conversion of hexadecimal or decimal numbers
Xto and from ASCII equivalents.  For example, 26(10) == 0x1a == ^Z == SUB.
XFor details, refer to the description of the
X.B XA
Xand
X.B AX
Xinteractive commands.
X
X.*s 2 "Shared Memory 'Friend' Interface"
X
XECU maintains a copy of the received screen image (80 x 43
Xmaximum) and other
Xinformation in its shared memory segment.  Normally, this
Xinformation is used only by the transmitter and receiver
Xprocess.  However,  ECU supports the concept of a
X.B friend
Xprocess which may access the shared memory segment, perform
Xarbitrary auxiliary operations, read from and write to the
Xattached communications line and communicate resulting information
Xor status to an ECU procedure via a 1024-byte "friend"
Xdata area in the shared memory segment.
X
XThe procedure language supports the friend
Xprocess concept through commands and functions which allow
X.BL
X.LI
Xpassing the ECU shared memory segment id (%shmid) to a called
Xprogram,
X.LI
Xreading a single character or string of characters from
Xscreen memory,
X.LI
Xreading cursor position information and
X.LI
Xreading and writing of characters, short or long integers and
Xstrings in the 1024-byte "friend" shared memory data area.
X.LE
X
XThe algorithm for obtaining the shared memory segment key is
X.DS L
X0xEC000000L + transmitter process id
X.DE
XThus a "friend" process may either use a %shmid 
X.B
Xshared memory key
X.R
Xpassed as an argument or obtain the 
X.B
Xshared memory key
X.R
Xby using:
X.DS L
Xkey_t shmkey = 0xEC000000L | getppid();
X.DE
X
XThis facility allows batch and interactive applications
Xto be developed with C programs which would be
Xtedious or impractical to implement with procedure language alone.
X
XFor more information, refer to the shared memory header file
X.B ecushm.h ,
Xthe
X.B ecufriend
Xsubdirectory of the software release
Xand to the description of the
X.B %shmid ,
X.B %cury
Xand
X.B %curx
Xprocedure functions
Xand the
X.B getf
Xand
X.B putf
Xprocedure commands.
SHAR_EOF
$TOUCH -am 1221234090 'doc/_features.txt' &&
chmod 0644 doc/_features.txt ||
echo 'restore of doc/_features.txt failed'
Wc_c="`wc -c < 'doc/_features.txt'`"
test 25444 -eq "$Wc_c" ||
	echo 'doc/_features.txt: original size 25444, current size' "$Wc_c"
true || echo 'restore of doc/_hdb.txt failed'
echo End of part 31, continue with part 32
exit 0
--------------------------------------------------------------------
Warren Tucker, TuckerWare emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
Hacker Extraordinaire  d' async PADs,  pods,  proteins and protocols

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.