home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume12 / kterm / part11 < prev    next >
Internet Message Format  |  1991-05-11  |  52KB

  1. Path: uunet!cs.utexas.edu!sun-barr!newstop!jethro!exodus!NMSU.Edu!mleisher
  2. From: mleisher@NMSU.Edu
  3. Newsgroups: comp.sources.x
  4. Subject: v12i092: kterm  - kanji xterm, Part11/18
  5. Message-ID: <13144@exodus.Eng.Sun.COM>
  6. Date: 11 May 91 00:51:04 GMT
  7. References: <csx-12i082:kterm@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1431
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: mleisher@NMSU.Edu
  13. Posting-number: Volume 12, Issue 92
  14. Archive-name: kterm/part11
  15.  
  16. #!/bin/sh
  17. # this is kt412.11 (part 11 of kterm-4.1.2)
  18. # do not concatenate these parts, unpack them in order with /bin/sh
  19. # file kterm-4.1.2/g2b continued
  20. #
  21. if test ! -r _shar_seq_.tmp; then
  22.     echo 'Please unpack part 1 first!'
  23.     exit 1
  24. fi
  25. (read Scheck
  26.  if test "$Scheck" != 11; then
  27.     echo Please unpack part "$Scheck" next!
  28.     exit 1
  29.  else
  30.     exit 0
  31.  fi
  32. ) < _shar_seq_.tmp || exit 1
  33. if test ! -f _shar_wnt_.tmp; then
  34.     echo 'x - still skipping kterm-4.1.2/g2b'
  35. else
  36. echo 'x - continuing file kterm-4.1.2/g2b'
  37. sed 's/^X//' << 'SHAR_EOF' >> 'kterm-4.1.2/g2b' &&
  38. lI>a[<9=OXDu*a$GCVen#&acUq,s,>J@SagU+2qH)GqrGHBZ3:t9X47gc,,\_PJ3\GE)3\G!5oW:.*
  39. /]NVh[Y&D3]X'!8+ZX4'B>-qe8bbsL39=AWMC9FG2e#;3%e[i9&kH'',7g]Si2aK/@68qA&$FWX9Dn
  40. A9BXekK_7_@6OCUI6]^SZCdB#;6oeAQD8Z`CoPUft7SUsH(1X])Q9V8p$UWd(FgWnO94Wn")q$E1\:
  41. XX/5'e=KfB:n[7>V7'P=G\>miVlFkoLE2q0qD[NL][SNp_fCYtSWa;L:YK=FZ[7R;uYIhNeV>$t*]W2
  42. CU<2?@kb."I^_6.ak=08sC`j0EeHa^Z)?bb6m?G#_7VXgWlUscop]r/F&Vr+K+^ZVt'XE:beV=CTaW
  43. ^-t!69%7c+@8%W71-4bZ=UVu[J$H%W+ruZ]<\QTY^*5=ZK&@4WNs-+$E\HT`kp*9iP!7;`MH/+qP<k
  44. qTriFD8Zd$5ril=8UC*tm^;%5!\C7AE\#6ZV]3Ma/UjAl]Vu<]*XRW66]<DXO:pkVVZ,T,0UTNapql
  45. K[nHFidS?F8dkrkEQYDm65K]1K3M^O3M$_X>*@VeN:*\oGO%Uu9*ZYMQ:hZd,\Y$Fm:Bk-a]je[]G,
  46. bcT?k<OKB?g:6^WdAQT8Yf"*\$:6a=0d&eC7R[Ze8$CIJn>(3)n>0BmV8^KRdBI#S]rkk@ID06j71-
  47. *oY[41l\R2/N\%\tUWirJ,\mrS!YkPS:gS:`7j&?A_oVuN&FK&raWhjILgT[ZUVQ/%F8&\K-<4TE8m
  48. A7r4e82\ZZ+dhgW5P[rWQ2B`_tL'SX's"P]&(5.`V@#4$H228AYo79F0g;+^p@+>A(J6.CVY&(e#do
  49. "Xgm5hd0d&2cTo#7[Sa\*^-K8P[*leRZ_F\hW^j[@\P0&u$49*c5qsKK5t49M^h'RbY5GHoV<G'i^g
  50. a`jl$(D&_>:'OZ<O\,W94MogSf80X1m8i_Pct=dB9OUCSneVI`ZT06a,^hU;2'^];W##Y]6OXYLC"l
  51. Y=5DhZeVkagKgu5V;8+FVXpZe$F6nGke#9CA[5=JY._fn@^]+G9=D^CWiOpV]rUJ$o*VA\^@&bTX6m
  52. kqX.c^kX_GX@XE^YTV6I&oZgXqe[8dR3EN=&\e>?EK8YnqV^UN:1rOAr29"hd8Ye=hZnd5^j6:!=K6
  53. :+.1$E:M7lEK?g5btKmXeapUiOhmmfXKkL`jKBT7ARp1\D4Z0X5:a-Z=1XZ`HT,iY1^YE]m$iaZ$3P
  54. >]#_DD$FeZq6*&#$gTU%S=15o\7(pCQY,p*V`3aNnf<3?,71-*[_8)qg[&:V3^p:$-[I0nu\$W<>]R
  55. $DaZt?T&\EjR>WOI8jmC(W]d(?'j\@AH9r38T#m^2qu<l)bVTr%&^V"MOoWQqk[^eV4J]%=a0Vk^Ke
  56. ^A#,)]j8Bj]&*i%6:4$n+@8Fb71,pFYc##$^I?&j_Y^K:_-4NmVG=Us[)TlE`-Jeq$DbtJk-&?p<i9
  57. */qQIlR]qe?*iM:Y5Wi+^fXJp?aWsZ/G^9=fA^tGt`Yt;':YYV>mVp`32Vm=6iXS03DcUA2=W2S"E@
  58. AR26o>"A9l_W%?>HkEH>J'^4>J>-dq8DJ(]#q8EVKoc2[\:1UXkg#+_0r1s]l:ls^rrf_`_aZO$FG,
  59. nhnl\2r34/Im]Z2uA];!hm_.VYUVZ$)@\rZ'$:7-H0d&eN7R[Zg\&>,U6bm$>V8@5bm]5!PpoCp0:;
  60. #J]^Vcq^YmS.o]_]IZVG"egXg#RQ[+)o^[7\-0V<4nV]]I,D]OD5d>/eaua2(*QY./n]^8Rj>jhn[;
  61. Z*qu`d(@35ijejmV/s&=[&1+9XO>\=[I^i'\k/f!\6uJpW_Th-\,3bl$G>H-ZFJ;]C8]b%a/\1$afW
  62. [\[]IcdI&Wg8H*s`Lk6e6`Up[:M_p#^_^d5EM_UQ#.i7b?V\5]Ku_KE$Y$49*g5qsKK77K]Q]#h!hY
  63. OK*4ZLkX&[(4+GW63*@]'Hk;\7_V<`3frZ]"h@^;Rt5bEPq"CI'm_"FL/QsG-YSYZaG7hWi0tGWlV,
  64. PXgFm.W+)PkY]I0VZ-U;(VVSbXWDg0!Wk#tA$E<?kY-2T>I_Km2ihsJh6a(aNI&_1u7B,"Tg81aHis
  65. N4u^%K/7XjNtj`8@Z%]KiX5_ca-@XhqBLW;!f8jfo03bbsC(\?4)mn&2K09s\$2[&9V*hmR^1Gc,2W
  66. D$gV:7R8aO6:OF5$EI.6Up!.iE5FlHfVq-4A?2K6IC+@1U9i+ODP^MDZh1KDVkU9SXPL-l\jF52VQ-
  67. QLUop_kVUDOEY>2f?$E7(.<ifZ8b.UlmqlK.khlD%!BsdW48uUsSaM$$%edAY7^;7UmVgPCIWl;-9U
  68. t)`TiS^MDVQ$giXB_n(\6THD=1cGSGJD1qC9+VbfXUOVj0nTi?b?35f">S$g87IL[A^$:Y1U[4ZF.S
  69. eWc5eTZENrC^N6obX1#Y-ZcEI\6SLe\+@@hP71/]i[p6T4WEZ@sY.:HTX?j^*\bO#0WE#qIZf8q"$H
  70. 'Ti[]n;igo/]:i53I;rP[j:AAi`/n\k+=C&#Qao*WG7_eI,,`9P.oZ?Nd+Y>hl3Xer8NY4fN8ZdPd^
  71. VU5aLd&Xmk<3K*Zr345Sf"#b=9#778<O12kGJ[:mh58g3_u?rHfs/#eVbYM4Z2(\E^8/bNY?/U8\ot
  72. B*VtI"%$H#l\Vm?0&n"rm`ho&F*7_j;fFM@UL;5(Y$d]6FV$:?O60d&h<7R[ZlB;OLkahr>=oqYBrr
  73. iQ!ua2)`.XKuue8[h4&V@'o4WN!\O_0Nrb`QG[<]ktWmZ:(t\\7DOdW8bMc[W)Y]]rOZ:be1NmiOQ5
  74. /pqK_;l+cc$j.o0'k4J,Qq6%^EVF.caY>D)e_KiOlW_C5r^eMXl^.-*.Z;8+3\F-8!$E<Nr_R8(-F2
  75. ZY?@AcN!go]SU7^K85Xh3ShFJVdBa9o+T\nJCZ_aptA]L';$XEgm\Uq=E``MCFQ`M11A$49-U5qsKL
  76. 1.F\>[]./R_ed6b][O+]\kg.:\pUW_`2^R^`aH\r`,#dpgU"Z)\A!@/;n,N?;n2J0n$Bgon@2E3rNi
  77. `@Y/Y2`Ve3YBX&6%@]P4qG_-FX"[,S.DZ?F*'](*a[`QQ5>$H?YT>.2>RYd1(0_7fcKgSii3?b6*If
  78. >ZI[Zbs>mh?q8C``^8b]5kE[XJN^C[CE[DZbj;g]i`%dYc,6_\\JQ\goa5W;R=3Qk/#cThnNdA6cN<
  79. @TtRY6d^hfWW<ru"1I3`<6Sh2#$Lm)SI]r.=]W,87UU'R-hlTkoj.u7BfstalB!#5DX'`56];i;=Ug
  80. 0q,W`67sTtJ*I\'_-QXPC0M_;_C\$EX0,::*ZnB!ak(q6X_8bdH<>=MeRWq7l^1Ek0o'EsfTUm`!*@
  81. _,IRN_7[RgVTc6OZW=)9]4J6?^9+cnYBC8apoqZ69<2g1=hSgWZ)q<=H+M29`iSR7q7L^FY._%H\%n
  82. iVWRmuuZ.$@`]@<hV^VRPN]?7!PWD^U`\kWS>6Sq(`+@@tT71-]4`2L>s]qiDW]W]:[WS+,]ZM)#/^
  83. i?Ah\pCpL$E^MHdAG!d=fLP^A?TF@Br/VUe%E`3osW;]IAH5+fF#+cWiEgQY-Y80Vf0"dW4K-0YK*N
  84. PUdV&TX[&jnX)89CCW#qdDS3KhUU4sRGh)8^:VLV?]"-b&i2LA):T`:WWaqs(^qcj6Yg1"fY\(A_k?
  85. 4eBVLH3Z_HX:eWPGZ6$H>H>^8J`K]#)5#?LPYKBYs,>8[3TYB#*rNY.<^&$:?[:0d&h@7R[["^;/?r
  86. qkrD]F0EKtGJ?DR6)Vo&USh.nj.pJ"GRCQd]#:bd^p_1-^X]JP]\:?B]\^QC\\kY]icq]WX`k,PVQ$
  87. YraL,<QkHW%7:pG&JqlHR1CV9,L9YFT1hlgDpVbjF6V;oI)Y/fhhX[K/GWCWpcXL>H7[U#nWWBmXU$
  88. F'69E4t/8XfuoGfVhHU;68?PH)]c.BtW`<?G3_Qf*]#__,%hNW^=X#Z+%57bOX!G`DWVqWSG-P[9Te
  89. S$49-Y5qsKL2F^+BYi)q3Y@sc`UrTlZ]D&5;`3d3jYeHq/`(%\b\pXq#?*_,S9##&?pV9k:BWHTlFf
  90. ")s=2_/Ie"s1\bd)[)[JR#KWEHmn]A^"^YC4-2XeN,EXl[4%^/:]3ZTu%+$FS6m>-:Dn[B;s*[]]JE
  91. d)0b<EjWZigU,;3Xf5j,6OL,%\tc?Db>>.u[*bj[W`ud*YuJTU]C`[:XQZ\$_bCKB?a*_0?D[G%d]9
  92. aVjM&1-n>N_!o;GWg?a*V^F:&@B2aK/@6T7J'$ENHnU9\^ZkFoQ!?)2#F7DlC,@DT[^Y/#(mqRK]8X
  93. (As,]=P:A`;[<tZqmLb\o>5q[cY!9Wli-H_54DO$Faldotfq)<j&C8oYEf!m('L"WPDKG^r!aeCTC4
  94. IX9tc>X]VDdWPld'[+q]R^WWge[9g;kWo1VL\5p0,W(.2q6bB_26FP"<l`s7#]!T!#k-:Vd]Y2\)H,
  95. HDj@BAl(V*h9TZ?`B:V1#JFWcQ#$Yg9XIVQn"qWI;`f[-J&+6T@@d+@A+X71-!iYkc:<^$MS/Yj(te
  96. `HL[iXECB=ZE146V#71U$H,rJb0<bt@B4=b::b#M<3s$CaLH<!9ts])<30->HO@\q`+-_e`Vm`q_HO
  97. gb[o9s5UsPp@Ue%E5[^;n']6am\@]-Q6pSG9n[%ur`V6BF$<4ZMQ`4E7`]<5_QZ_Y;B[!\rWVUr$H`
  98. 36nQ^o=2MY[j]OVS&]s^W<a!W5$*U$Ff34<OR:fmB'NoHG$l9F2Gl*I)O==lbU]=<2<J#$:?g>0d&h
  99. D7R[Zjb-\IWiO7IHi4!L?bd"jj6+?!RikXHYbIO^[mg?/UZ2Ue5W(*u([`m6r\(SNBY0F&`cuZ,_Ui
  100. WG3]!MgHD6SAkU;#0r]"bGV]r&ZLYemfA]XH"fe%O\BcD4MKWI2<qZ0AEu[<]M^W1p(t]ATL9Xm`:\
  101. ZI#iN]</D-$Du[[fs>G3iN?h3i3,GH^p@=MI\kMm7&KdYXg2?;<sl7_YH+Tm]Oo#[XN%Zg[oU)D_/?
  102. *o[:?;KUrgN`$49-d5qsKL5t49MXP'naZdH,.\9+lsV4tHWX@^4f\CRHrWp?HXV:u?Y6E\G+YcYIJC
  103. Ur`JdA;#_g8N>ubJ%qpCo3o&gn\TjV*M+^W5bn5]7%#.[ahHT[b\[2^-SSgW6N8r\Y>nk$Djf(m]4C
  104. 9ppekOXJFjX\u'V\fWi;tii)dg8&KehXU;_eY26>KVrthZW;F!JZ;Ip+Y0k4hYsl=t_5=TO^r?_kE4
  105. EWj_7?Vbh5.]bHG8mHoVSP"h7;+AB"Z-pU^@Gr6:!=K6UF72$Eg2'lE*@`9X%*bc`>NtlE!@hpVQa3
  106. DS=VsoX`<T[="lh_#CdN[ElIY]$mh1_gAbu]Xb[QX5p3uV/`oP$DtDEG,BMmi2(gupnmu"IAD+f;8I
  107. 7bUUbcVAZ*,G?4+;g[q`[b_Hj^h`2pCdX&Z@=ZZNUYi:OJE\%/b9[R:J1_Rmau>Irh1p9pj68@WHSk
  108. dX0mZb]8E7DMEsWNKM6[qrIQ]4/&;XnKS6]"YAa_Wn,K[dp7gV5C,.[dXV26UO-o+@ALc71-r+^=^9
  109. J^%&3uX^S3tV0K09TtI2M\j<8jVgcU-$F=Baou23j_SF7%n@[o$e%O#*>.!4o;S(;][(4,VZjO26[d
  110. CP8Yk,6@]q__!^O<67^%Sa'^$EF3Z,aZ8\&o&fCpiB-kHJa-?F-uB;6EWs;o?MkbHG]t_m/F-kIp?l
  111. ^/),2_aM8uZeEC_[(sJNZ)=c!X(/D2UsZJ@[dg3@$F6D,n%2H)afIn8poSqL\%)+>9>sQ'X2\/YV:J
  112. <I$:@3I0d&hO7R[Z\`M^k_Z)^?sGcn]hV6b0EjP[,Tqkd3%af!CkUC+9ndC-H^ZHfjkYe?t#^fe!iV
  113. -0a;XRNdHY'[L(dTd-a:S_X#;Q/K[ppn\T^qa-c9XqmQ`is-S?)6/iG,ag8VQ7#b^h]tI\YQrV^@J2
  114. /WSOoEX7`N>[HtKYX1b@Q$H2hCDP_fqgr4?S=/rO9GbeKn8uK509!5n5hmIF.HO?a!Yktq1[DSq:V#
  115. @)sW_g;!WO]##Z0%t3VJE6L$49-h5qsKL77K]Q`87ssVG42!\O`mfZgt?XZ)Oh/^u`0)\?!$uWFZF@
  116. []m!6^qFW^]Y1AErN+)B8$h'i;5W]eoY9"_9Y@),]u.NP\&GR;Uuf3VYJ-oM_l^,WYhcbKYKkJH^>c
  117. i>$FKK;gS`c:=/slZUo7:k`O=gDl`X0__n15qcF$?\^'_.6Vd?93V!tBfUogf0Ur^/GV=(Bb[e6K'_
  118. tpXrWiHK&`N[FdWOmVYot%K0;Pr[/[&UmJ\%G80CqondlO!td7R8aO6UjO6$FP;bVl.P>GeKrLBsFJ
  119. F[^'bZbGN+`;S^GoVlk.LZJW,VZerCBXF@*i]@ap/ZI?K]]tC7F_>(jp[s"oj$EHk(<MWX(8?PY%I^
  120. -tf]VYS':r5N;euO#.jh&gDljC1MZ9tV"[en&(^e(hY`,38b\>$cH\8o=,Za?j:]la[`gU(2)?ELiQ
  121. A&5[^n@!2A^9YA\e@/;o<2dpI[B%[^^@SnAVH1,r^V.$u^0RdMXo62m^/2!-Y%4hJ^?#\/6ngn]+@I
  122. nQ71,i0VmW\XW-5gPYI^mT\"otC\$Eom^14,5Y-l4-$E1J>f<<lBe%B=unYl6#ahH6(DSg8,_QIRgI
  123. ]DJC:(""(W3<[Ob2];TX%;ljXAHER[8sYK^U'e*X/r5EW4*,2k.gPfYG_)nb,K6S;l%13h53cFUpdJ
  124. <[AEApf<X-<VR3en`5ANnZW"`N]N1o,]A9m[]M>oEY'mW]]2u>7$F/*XYc#OF@]T(-[^8B4r5A01@C
  125. +Xf`Pc2igSMsu$:HU70d&k=7R[[!n&9aZFLA]jFhsuia/.Y!\#/8neDe9N@&C-;h[6_b\YZ74Y3r1*
  126. YZ@u-]=FlH^n[mh^4*k8VfJS8Wnn)YqQNMq<k-,S:q!O2f;Qcs=gDeCI-aG6ca$Ni;8cTEXQ/@*WMQ
  127. T%W27C!^db>uWcb:LZ+I<KX_bRj`^-s*$GTEJ]sW*nXf_,ogU0\W@_^4-kH&TuTtkNKZ+$[=XU;#M]
  128. #CPmXEM%MY48@]epY8H]Z[m3_;)PGVm!\F$490V5qsKM1.F\>[r/PD]=Yaa_831fX)bE+_o/Zp`1sf
  129. =]MGXs\(qCtV5I%`?*1Q?ZaYCnXerD3`Mm.K8#/DVr5.R&V;ue,W6D+)VWYa!VJ3g9ZG*sEYLpG(W*
  130. ZHKX1Z;L[)g/)$E_IHGGIO'Dl$"B^o-S!p8GEsHFrjJd(sb2BXi8fbR130\Au'R]\U<K\8e]l\%&s%
  131. `3[/#`3utL_/-F5_mToUoY%E)?*<Xu[Bm-=_l%XhaKf*V8%-(+W2/:doEkpn1I3`<6o.;$$DpM!?Gt
  132. s@VT)BHZc1J-r4g.bkIS.?a/\UH\ZF<g]QV&.[<J]HZg#3TVZ+DQpZf"p\ST%@\@T*EWaW)#$DkYFG
  133. ,o>RcE#L2Fg65)I\bSldC*l%>d[M1Dm\W)]*bFAUs5`OVY7Q$];26$V66c%Z:^p"Wk5aC\@8qA_:As
  134. k7B9\(:U@aAEjYbUY-t:)WNK4$6G$(0XK:]aFLuf*VU20]YjA<^Xf&$p\Os3oY&:Lc[oK^3]"=ng`B
  135. ah<6o71a+@J%U71-4dZq@jR\TbgE[_KUsZ<+0bUq!J.YY2+b[&Lml$F]3$qmPe!iO?M6FM##a@_+h*
  136. kcfH1lE'fi<lIJH?OEd2\7VQ&Y-,KDYL')Fi2EHh\SJ"O\O+6:_;D_G_u0q=V57S'Hc#Q\ii@7$@BN
  137. tIr2)cW@]Q@!j1NINfu68b`MU/J^-oe<`co@u[)]&G^Ab?)`4WgoZ[&KdW*d@*$F=9WgoG,'6+H0[k
  138. Iam/W3j=WfVIQ6jg=EO^8gT.$:Ha;0d&kA7R[[Pe@B7rGH>)]?E$eu7BEo*6Foh,:8W3<[^O/clO(M
  139. )^t-$Tf&*K?\+m5]_:,sbY%bl.[*5@X^=9?r[-n@5m(CQK\[hXLF0TGdGe0cMqP7/s@_Lfu9sr'W@(
  140. Y)!WS=LJVrXjk]<A]m\8J/@]1/W5^-\a^XnD*q_VqN=$L?`cWO$NGrN*oGEj'Vs_QS:#ZE82PGHe]Z
  141. 7B^O971-b9Y-u47Y^O,hZ,=(=WOfBXWi)i6^>l:[V8'*$$490Z5qsKM2F^+BZrXAC^.5U0WnXOHUu\
  142. Fp]5"@[Wm@m#V8T1-_R'Ze^8elRe$Ru9orZ<Y];L(Xr1rbeCSc0NY-5pEe%Dml_HEbkX\cNE]PX^qW
  143. :%%*YI(fA^$)JmZDkF0Wck\_$DaK!fVuU'_6?P;f=KVEI]]ZIo!5U!i2KPMH`VGZU^FN6[UQ1\WN)p
  144. f]h>>NZ/3JmY?e<p[I:!$^#$HM\D7LuG,EHula9Kef#D=@nYJX]gT4JS<O5-&9#\'CXpPM(2aK/@6o
  145. RS($E!3j@'?ZGDPuisp8e(q9ttG[i4QM7aLu2ucEd3P\BCeL]X"H5WiWSX^d,,?_UuM(](<V\XlHRr
  146. WTC)N$Ei<p>-2/9Fg0H)gSeMp6Eg-aFL^V:]!VIBA>clD[0ia&XRip4Uhlp_\pL;p_b[YX_VD,6]'d
  147. CB_-slOW2g9+[BtCdZDak'o!-oPWjY3nrNatnE5\H_9YO0+bd_QuZqS7%XAPgoVY.$'YdLAoVkgJ@T
  148. tI)3TtI)3TtC^>6o[Ie+@J1Y71..-a[W(7UnX[?UroN"V<+Q3YcQ5`^9sZIXQuRm$D^M?8#4Y1pn_W
  149. "_TBj#:=rCP[^\Vs]V3!=7Hj?b5mjILa\f(]Vms1liCp&Vc1nF.naEg8TtJA(`N70KV/cpmDn3Nbd.
  150. $Y*p<%EL]VNEA7a:GGdcC#+c`:[)l-SQ"XleZa[aDXtiBj6N^9F<DWl^sIUp8$?a\p5la_7B\$DgVT
  151. \u#,B\&r("Y-$!Uaee:"m\]Kr@AiXn8>eoa$:Hm?0d&kE7R[[,A#A^g]VbGH\BDF]h93C.e>V0$gSi
  152. f>X37i]q?kEc^8](e`7N8jX'3d.c/l!#X&H.=Xi7NOXk(kJYeLO=]WKhgg<eHR^9,;Td,=N"Z`q$j<
  153. Ns$Bc.otNCqcnVot]@t\Zb)Z\Zk#gi:+:ZjQkmpa_Allb%9AFX'>&$$DG-,5bu'";oWA:<VG(`gnDB
  154. ]D:#PlbM_cbB;jd_]F(]GXhD&:f>,52q*V[<\6H\eo%h3sTtJL[W92:K$490e5qsKM5t49MTtI)3[d
  155. U?UTtIU+YYq](nD2jMZWjj:[RR\m[Qk1n]\D?%7c6tu8%@0\g#,T7iOIgZf^#6h8@tb2U:[6/jA"ge
  156. kLdJs^"_`*^!saK^Y?NLl__GJl_hMN^YHTX$GXj#eEa0Pe&H7mU@,8%`5:+"<q?.*f>H,6WPl<d5RO
  157. 3tcEEqSb#YD(W5,@Jc.U@qX$Enbd)+:%gnD'^[]9bAZJ9o;Wo2Cpou^1T<:NW(;;eFsW6Ni:euJDXo
  158. *Pgm6:!=K6pa@3$EE^Bf@0K@]?n4Vf:fk(^"cH'Ycr/sr6tPlqUb0CfBBY\gf!3K]>EWB^.INf_;4b
  159. Bp0+ZdX1.0^VcV#Z$E3I@pn>@MD7i<>m_J&YGG2[C]V3!f8tinoYHMH_<sm*OYjS3t\^BY;^;Ia^VI
  160. l]9TtI71_G\LsVIdYTVksfp]W##,]Z^!<p8M<?qoh=KoZR$Qr7&R.;pJ@tjj^jKTtI)3X0Se.d7h"B
  161. ZhiJ<d7r"de?Yd\e@2[PTtC^>6pj6p+@JRd71.PSeB?@Le?m`3fV7#lTtI`/h!LfJiEP8ATtJ$<$H1
  162. '*B>ntd]ZNsk:<Rt,U!:?qUW\&.IHse2gs*4+jU/$OWos#gTtIL-c*jY:c+:5I[HH^rc,%Z=c+p$cW
  163. o"/W]WG)V_pEV0>G8^VU%GkADQR<nFfeoB][1uOH`^fckAm9/X_5*:hK$u;cuIN_ds(*VkAJbFZM2h
  164. FYP#*s$J0+[9[g)Hp=$1JrpEUdqlfk5ajY@YEmo*@]&IN5$:I9J0d&kP7R[ZX][NYFYbA_A?Jj2)]V
  165. 3!Do&ITsZ*O8YD6iu2]F)8RZMpQ1f4W]KlVFhbZLP6if3?4&TtIebgMP\`gMdML]:lmFf%Y)Mi7iCJ
  166. ]X?eSHeWqUkdB[0H*u&-dbA(8gSM=.gL.dj[GBSXTtK9fhmhRShn/2?TtK:"lU9XK$Fm=M[^`^%XQO
  167. NZe[VTg[H"dW\`:BB>+rU@?b9g[<=7cjp[I4Gj0n!Wj/eremQfr?^L*\IkB6Irk>]C!$490i5qsKM7
  168. 7K]QlM0O:]sd*7^ULtf^U`Ys^VB2)l?g:XoY9ejmJI=-WPPP#p$P_q_82o7;8UKF\AH>*p7].ieF^<
  169. Eq"2B0p&(Mrp[b2-X4bV<\_YV4X0\s)Y"l4FUiFN,VnBgF$DG,;^Z"%n^!+$dl)F'NqW595hpK$_]@
  170. ".=D:r7#\dG^deT&/teTnF=eS)51eU$3<fjLMdfj28.fk7"kfi8BdXL*E/AFIt&Y2-PB\D;Sm?JV[<
  171. ]&DiE9Y+3bY6kV)7R8aO6q0X7$G''N?LQLY_=c'H]]l<XV!RH`_X^.ih>$H7I*1"ITtIj+TtI4G]Mt
  172. _FV/N2WVHfh-VH]b,j[R4+b'EOJ$E%C-][6JJ]V3!3]Z]3+]W"?!9?Ze':;D4U7]B))k6doqTtJYJX
  173. *^PQkl%Q\X*E_$\]rDoTtKVUX/;qsTtC`s7%q9[_5jK7IA+<f]$:6":>npooXm\s6`p.1p"\%(TtIN
  174. rd/:%4e9AIFfPfD]TtJ=tYii7ITtJltTtC^>75."^+@RtR71-0fYh[`Je8h7qYiaG_YiE(Mgt&gmZg
  175. FI!fP]>]$FAp%mbHRLB!^*tfX]#o6*oOVnY*V+aL:<Cb-p3Gfa=FcgsWXcgsFj*[c4aYgtf]Wgs"R1
  176. [b7@e[c,3/TtC`CbMc%O:;g8.]Xbbe^Yq\V]]B()8\@m]7%q9-^:pl[_GK=gTtKa0^:(bf^9aNGTtJ
  177. 0hm(f=-q!OigVI.Hb$Il/THHYiZWieh@X0CpS8$l@ADp3*uY3ap%ZFTZ9$:Q[80d&n>7R[ZhA(^@_p
  178. UTmh]Y&-[`6$WR^o,#Zo#ehPF.p7E_@!YHTtJTUb[mK\b[IKJWMdsMTtIA!l!^X>j_<"gYu_:oA(:C
  179. \?.Af&7'U"HoW_?"<PYf3]X1Pgk1rqfj0qD`iMbD`f\P@Z[mQk%iM5LD]P>:'m+TEua\8VYb]TuE$E
  180. N0eiN[L0E3XPm@GPJ,Gj0@ir1Ucs]ZI%n6c+)A]F)hlb@R]UTtJWYcbSgSXM!Dkd\X-Ld]1`ol<r&9
  181. $493W5qsKN1.F\>d](f+Z?4'3en*EHemS,fg2Nau[8`j4TtK*!]"AC0bIm`7H0S`'AbFlVhmqFK\@L
  182. @f]V3",:U[n*XgYbIgoe*!\UM0SkeXuL^gEeJ_b'I)o<6)#TtL&"TtJKm$KZEQc)J(q\uXE48[2p5B
  183. [obhl/B;6[cMSpEp7MYF:+_Saa9n\`+$B]b1kn(b2(4s[p$&3[p,c_b1W]Eb^9bs`QW\.c)JS(WN"(
  184. ?bflgGIAt?"7I90DCq!csb6eSF1I3`<75ID%$EN^M5d%;nWo;"GVpVHjV66rJWjHEDU=ET#>d:.5Z)
  185. Fq.Z$a#`jefD"ZtQg`Zu`Tnh.YVW\k'K5]WAcB$DG,HcbjLs^%$$CXOotXo!Y=%He`r@CVF$:Vtn9p
  186. V@)Z\lq=%blqHb@lpgF5_=5>5_Y(e>ogPReTtIANTtC`SrQ4oXr:SO;8uPL`>c:Jt;5(Y$=K#E%=kW
  187. /cprr@;bk:O4_g/8(WcFfGWd^srn+Oupbjh]BWbe\^Y5&D375R:b+@S+V71-,oXJi4IY=R@Gc_o*5c
  188. ZlOnXKLg_XK/G(c[*HL$K?'<n]uC,:sr.il/l7!<Nc>)9;0#H=41:#7^?4':(":/Z;\VZZ=h_T^Ib_
  189. Eeap(9_J[o_ea]qCg$uH@[6b5S8)@CV8)gN%9=3igkd9]a7/>3d9Xhn3eDd=nn$g+?\'3]*TtK5]k$
  190. PUBhH8W(\%LQgk!S]G_fVTb\u=V`$G*7sTu:a8ot%6aFh2h[60:Gp6G2OE9YB;rlbdiP$:Qg<0d&nB
  191. 7R[[L6,,e%7__I-r4q:,jIs6%g;)R_G4K.\F7a&9>RL80`Uok:a`G[.bZCjeY%HCh`6,Yi\a@%?lZ0
  192. _\m_9+sWhI)McHXb=IaGL)UVc#mHa@puUp+^bn(6U=h:L]pZZ*6ufB9SS[VFSlgeZk%\PD(2\OjM&]
  193. =>Jd]>))B$GZ#FfYQ=ZjMKrpje9>lCX0WGoZ;6VUonI^o<_$HU'e]:`:MB%WOT"_f3#CcpSX^tVK&J
  194. MVm*gB\`'Hg$493[5qsKN2F^+Bb-e3dfX7WYVm34@bXe^OWGAJCeCD3Ac=ck+X1J_>\Y6[=>HV5<7D
  195. *!1:p*p'<NuJPdBQ*hd'5j@6+gS4TtIi5Zp_8dfXSBfiGuCoku>Hrh"TcM\`E!Q\`10W$G#3UCV4!<
  196. ;<_3Ld(lTu>fkKh]Vi6_<jY>lD5;'n<=7s4^2L`-oj>]#^2`A^`Okkn^gkB1nZVJgn[A.=oj\?I7J;
  197. 0&@J+*K=n[4:I)]stZ_>%5qQ0=jps;\,k6_Pb2aK/@75m\)$EqIQ`7%c<k-EXFftXJkdB_2o]V3!lq
  198. mF)o=PmKnhcIDY](Y0%TtKE%]m.-fj)O*j]'[*-]m8c']mIG=$Li)ulfRQrmHW?dkeF%1VWuOCV<uX
  199. EI_VSpIDKL2B*uI\_-=`bp$'?&_RZAQoW@\io!J3XTtJ'*TtJWjY\slk7DE!^Zd!6bZ`:=WaM_tt^T
  200. >DU`1aiiajR<>XLWWaZ?Xg'd]fo^_kOX)k+f=d\*LG1[9L%Jg3hV#g3X/676!Rf+@S7Z71-G1g7c">
  201. \*Vt[\)k*a_"G:T]g0>7`9k6(k,.:8$G?>P>ep'KoBg8/HH"8'Dt0XpV8N5S6E!/Iqo_@d=UOe$W_0
  202. 9mW^t@eTtIC(fsA?CZ21IgW_'3kcW.d*cU/'3;lj<,C%PH-C<oMRA'[iMCpE`\@B=%AC[tBKqs=%ad
  203. G3.*fs8?edHJ'=dHTXcZ1?<.TtJ,+Y3`sJY3#E:$DG,[gTKA;ld`f$^=C')lIEhkkHrmpaMVuYhR(N
  204. 7$:Qs@0d&nF7R[[Yin`JEb.Q!Te?mTU\_YQed^Q"-e$lO#<k#*&]F(@Fh;@&H\no;u_f=[%p!MU;\$
  205. 3?D\n'el\n8Nd\n_Z4;W7Pb@,b/&@_,q;9]A\+e%j8Af]C?=kjha8g:m(al,:Bcl-\b:^@ppm_fEKV
  206. l,pa/nlY9I^sVNA^sJdf$Feod]W,5_A\?gEB&[F<eCE@=j5'ULD!Br`@^BpF]F))Upda+)[U\)`TtL
  207. ,2g]"_]\GkE3i-;l?^&,MB$493f5qsKN5t49M^%oA?^Zt>Y_r7<%bd$-YZ*(HV[pcaRh0%OsiRS@J:
  208. ;:,`^>?ZmEp[i88YNf=m`Fk=po48,kc.b/b,P=HWVaq<XAmL<cM">;cKidDYKtVG^?;ZGY04:seZ,=
  209. U$FIOVH/69Oa1>O?[-ubd@)QZqjL.h<lJ(O2:%7ebm0^Amp/8N(kNq8.TtKRV_9CZ]_7SbrpJ\iNmW
  210. uato(*47]qN*9ae?AK]%1-;?aWbbCu2"^]XkYVZINR?<!it$6:!=K77'I4$K:Eg]WD++]\2DU\)mA@
  211. 5ed-d>NtAFkK/1ppWH,8b=^)s[,\=]e_drYTtIY\TtJ9j\)+dmXLRGBVFR>m$Hm[mGG2[nd\4=Rd&P
  212. O=Yc?3H]YnHV]V3!VUod;:>7.E=csP.4ct1N!X\[P>YL]o3YM-g=TtI)3YMu_6TtC`=@c*p39\2qh7
  213. A7Af]X>qjbdG]h]V3!JGi*T"G+lPUj//N_TtK1Ch"eQS]1p/Y]^Y(^TtKdX_I;itmH=la770?q+@SX
  214. e71,a$lKQ0#e_&R/h=oau^A6j7]Apa*`'X0>TtI)3$Jf1-eF%al[.o*gj/MXtcdC.fd';B2h:[7g=g
  215. ur<D$n$OTtI)3TtJ^SXKTsTl:nHUekt!u^Jrojg0LDb\'tbogS)::F.p8'FJ6@@]]O7sBtX3&B#*j"
  216. :Vc,]qt8YM`d+8j_KNE>^JUuXbd,OCZ*1NXTtIDAXQHVIdc]'C$I\4CY4(GTXfn\7e^hFD;Sbraq<#
  217. l:8B%:Ff?2_Q$:R?K0d&nQ7R[[QaO,C_IF3MkTrrjIU#Enu?FO4QI(mkiG/1T(<XSZ6TtI8RbjOjog
  218. #p1@c$JC;cgf`8TtJ_;X@TOhTtC`9I%e3kEqSFqUnPH)U!hZCg!\lc]%Y9[`pKYS\^nA"TtJsdTtJ-
  219. V\5;&DhW3t"hX%i'ip3;Niq)<PTtKO1$GUBDWpQk'7IXFOIIa3)U%cjfYj\gfp!%^,ih=#dg'Xq>cf
  220. !7&daupteuGFVf!;Ti\,F1?g:O&khVG\1$493j5qsKN77K]Q\43tr]$9BM]$00s]hc=<^Lt;m_#<YH
  221. _P54jc#F)lb,ie4gX<plY27*j][0C%>d)?*i88;?]V3!QWQ"Z?mGkBj^L[*6TtJagd(ll3Y^"YafKl
  222. jCfDOt"Z_l@Q$DG,fB=VQ]HFA(R@bbqXDqnmYC>cATZFO&pZ_>%B=phfCi3hLTi4?I2`Sf[Y\ROL"\
  223. RXR,\Ri`S^/F$=jE_0oIH7?jBZ.c]]Z!R<]]>dV>._uADreD"o=N9.V@!Z!7R8aO77Ka8$M/#nU;-]
  224. gUYrTQkI]($VtBfNjQL<qoV&q3=m0f3k]4C<k\d*,TtI)3k[Wgkk]Z:Ulf"PMlfOnRlfl2P$G]'']V
  225. 3"(hs9497D\-SddG]&mdAHl>f#d#]Yj?Ynd;)'TtKu1_XPN?TtKo%_XI"npLhD5_sPA0_t!>+_s7[$
  226. @Dh@%m%M)aoqB%jkkS0LlCkl^B(YWfBuNj@?D5"=`S\Mrcfj*$\SfahddaNFdd<a@Zr5W1g=Ec=\69
  227. 4H7PI+_+@\%S71/2*]jARS_FVR<p@t`=ZECTThUV"<d_)l6W+if?$G5fkl+VS]D"I/l\*U*\Y/ThtH
  228. hYAFIda#NIIY\[cO.Qon_*\Vn^#-JTtJ<>oBjIiomHG1TtI)3TtJ?Sp9Y1HGf@Po](fe1C\V`@Atcl
  229. W:W@dU]ZY6_9>Z.X\"UGAXO+.bTtIRHTtI)3d_hckYAKuGZE:NK_"ZQgg9p<l$JM]?ag^lubd[9%ca
  230. WB1G2h<>Yi=R&YG&Vgh<(sL$:Za90d&q?7R[[M@-V^E8\IKb]]s=uF8#7kEU@keIHkaE]Ys63]F+.#
  231. _L9DsTtJtMg>'rLWlEBade9lRZG=D$\6e2hj%9[DZKB]2][3h1e?DZrf<@s#[DU2BbM11ocgGi2o^_
  232. JYnCcjr]6303]6**0j?UK&kK(?X_7@8%`3@"u_7/iT$M;O;9;U.?7H3:6Eie5seBh1DB!U?g]V3!3]
  233. Y1',k6gM:^TO9C[D:%ef0ck'oWkm@n9i&h[J/IXi8EPM$496X5qsKO1.F\>^1G#kTtKU!^f\KC_aaI
  234. )ohY1X`E&\F`^ul:YWrQ?aRI@Cj/m+DW3'g`]$n=@_RRM4bgXY;8$G=a6a/udZUV8kZUi%/f;7)pZV
  235. .VuZVC#If;mZ=hr_f"[I*9q$FTE6]=%5%`O5$dZ.m%'_RR;:lF=L:`8C%@m,Q[/Ad[SQ]4g6Yj7;6i
  236. _6gggj6O<o]55)i]st[eTtL$;kI_/8]:lmN_<8>%]Y22FU;=.uUV4G*]'E\jB;)uSY6kV+1I3`<7Pd
  237. M&$Git4@-_In>3fJ/^qm;F_<tUs?brn][ID6)DS`F^_6!'=n@nD-_U"pgoZ?aH_ohQ5p-Q^n`V]GEV
  238. U!,S$GgKEiNMFEa/nj\7)*rp5e(=Q7Fp)>6e9K4gXal[`X9#mf%..Cf$;jof$a?jZH(\\mDIZ?]&DB
  239. &]&gG1\7,f=]V3!q9A`M);XM0[f=L,,ft-5;qr:eqYiANQ]Y^cX]k,'c]kG)olFQ8olFalYlG:;5_+
  240. p]:mCW/'mD92;7PmCc+@\1W71/Nq_QWHB_m%+T_m?Aqdr;VXgK1T?e'QHUX\nZ,$DG,]ENeZ2l.8l.
  241. 7b:Vk<h[1`V;J)\;s-X;naN:F[L1L;\BV?V\B;>$_p6j*heh7g]mf,8^T+!?Y/Sj^TtC`+]\;T'kMK
  242. 8!@(PX>=J<CiiM!pHi9&q^amIEOiOW5#XSoH][D1aM]0bZU]qN3C_/#pmmG?lGj*'hCq*D`h$H,oGG
  243. 2)EBADgeiDmO/klI4Ur@BHQYrmX3_6/5cR$:Zm=0d&qC7R[[>@,,%]]X_&#Xi>;TETD2Q`oM68]]`S
  244. cg$@DYg'[8f_;=][o3]DunPSr>`4s8^W2TF3`4OrJjC#jXnO*`5jk&2;f!B2\^>&;7qR0Z'@('4mp9
  245. n>:@,Pb:hnn4Wi,89r`C7<3jB(DHkWliM^%94GkP+03`N>iHlbK4,$GY`h`4t<JcKiHajMkHAg;222
  246. ?,PL9g@J7\i5E=KD@6,EpL3l:pqt:N[Rn!li*,X?m^KIRf>b\UgXP.K$496\5qsKO2F^+Bhu2V,o(B
  247. NRnE9#>Zae"D[^*VR`O+j3^ehg>_taYZ8&WBc[I:NAeFgQK]>\I&BuS'1`l:s8n*dOWAZJ*(e47&di
  248. 75Hp_P?lljJg.=k]F`8mb[POmbFMKpr^<t$L$7>>G8^']Z,'.EU8%l:$d8$]^KUP6gnje>f&i!cjKP
  249. Mn]1IN`P;/Mp9"(p_cXfUn\`7F`(KXAo>pOSo?.KZ8YNfgc1B6!9;0#ic_8#ECW:G6ch22KG+lRB]F
  250. #!82aK/@7Q3e*$MUpH?hUYA@.peuYJn<OX2VoK]V3!WmD\Dd=8:AS]AC0W`O;JQlrM,?nU/4PTtI)3
  251. jP%63^30.^TtI)3$G^8k:@Ym6>k>eO@eeHllFqQ-fu?_';X\>;;oN(^<slq-_b7tZpNG%X\Yd"*^3A
  252. ej^h:Grlu;L,TtJB<pf.[@A%V<GU[?mJW9geUYJNfJ;8_kAA]=,T9YsE=9>b!An_g+R`c^s_osFL;`
  253. FeSG_d::1`PhOum'so,TtC^4
  254. xbtoa End N 16679 4127 E 21 S 29ce27 R 49ff31ab
  255. SHAR_EOF
  256. echo 'File kterm-4.1.2/g2b is complete' &&
  257. chmod 0664 kterm-4.1.2/g2b ||
  258. echo 'restore of kterm-4.1.2/g2b failed'
  259. Wc_c="`wc -c < 'kterm-4.1.2/g2b'`"
  260. test 21178 -eq "$Wc_c" ||
  261.     echo 'kterm-4.1.2/g2b: original size 21178, current size' "$Wc_c"
  262. rm -f _shar_wnt_.tmp
  263. fi
  264. # ============= kterm-4.1.2/hgutil.c ==============
  265. if test -f 'kterm-4.1.2/hgutil.c' -a X"$1" != X"-c"; then
  266.     echo 'x - skipping kterm-4.1.2/hgutil.c (File already exists)'
  267.     rm -f _shar_wnt_.tmp
  268. else
  269. > _shar_wnt_.tmp
  270. echo 'x - extracting kterm-4.1.2/hgutil.c (Text)'
  271. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/hgutil.c' &&
  272. /*
  273. X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/hgutil.c,v 1.0 1991/01/30 00:20:28 mleisher Exp $
  274. X */
  275. X
  276. /*
  277. X *
  278. X * File:         hgutil.c
  279. X * Description:  Convert from N-byte code to KS code.
  280. X * Author:       mleisher@nmsu.edu (Mark Leisher)
  281. X * Created:      Mon Jan 28 13:18:21 1991
  282. X * Modified:     
  283. X *
  284. X */
  285. X
  286. /*
  287. X * Copyright (C) 1990 Mark Leisher.
  288. X *
  289. X * Author: Mark Leisher (mleisher@nmsu.edu)
  290. X *
  291. X * This program is free software; you can redistribute it and/or modify
  292. X * it under the terms of the GNU General Public License as published by
  293. X * the Free Software Foundation; either version 1, or (at your option)
  294. X * any later version.
  295. X *
  296. X * This program is distributed in the hope that it will be useful,
  297. X * but WITHOUT ANY WARRANTY; without even the implied warranty of
  298. X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  299. X * GNU General Public License for more details.
  300. X *
  301. X * A copy of the GNU General Public License can be obtained from this
  302. X * program's author (send electronic mail to mleisher@nmsu.edu) or from
  303. X * the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
  304. X * 02139, USA.
  305. X *
  306. X */
  307. X
  308. #include <stdio.h>
  309. #include "hgutil.h"
  310. X
  311. #define INITIAL  0          /* Initial(starting) state for N-byte parse.   */
  312. #define MIDDLE   1          /* Middle state for N-byte parse.              */
  313. #define FINAL    2          /* Final(ending) state for N-byte parse.       */
  314. X
  315. static int doing_ks = 1;    /* Working on a KS string.                     */
  316. X
  317. /*
  318. X * Hash table stuff.  Make a table of 4000 slots for 2390 items.
  319. X */
  320. X
  321. #define M       4000
  322. X
  323. typedef struct {
  324. X    unsigned char *key;
  325. X    unsigned char *data;
  326. } hashnode;
  327. X
  328. static hashnode table[M];
  329. X
  330. /*
  331. X * Use Horner's method for evaluating a polynomial at a point.
  332. X */
  333. static int
  334. hash(key)
  335. unsigned char *key;
  336. {
  337. X    int h;
  338. X
  339. X    for (h = 0; *key != '\0'; key++)
  340. X      h = (64*h + *key) % M;
  341. X
  342. X    return(h);
  343. }
  344. X
  345. /*
  346. X * A second hash function for double hashing with linear probing.
  347. X * Uses the last 5 bits of the previously generated hash code.
  348. X */
  349. static int
  350. hash2(h)
  351. int h;
  352. {
  353. X    return(32 - (h % 32));
  354. }
  355. X
  356. void
  357. hashinit()
  358. {
  359. X    int i;
  360. X
  361. X    for (i = 0; i < M; i++)
  362. X      table[i].key = table[i].data = NULL;
  363. }
  364. X
  365. /*
  366. X * Insert with double hashing and linear probing.
  367. X */
  368. static void
  369. hashinsert(key, data, keylength)
  370. unsigned char *key, *data;
  371. int keylength;
  372. {
  373. X    int h = hash(key);
  374. X    int nh = hash2(h);
  375. X
  376. X    while(table[h].key != NULL &&
  377. X          strncmp((char *)table[h].key, (char *)key, keylength))
  378. X      h = (h + nh) % M;
  379. X    table[h].key = key;
  380. X    table[h].data = data;
  381. }
  382. X
  383. /*
  384. X * Search for key.
  385. X */
  386. static unsigned char *
  387. hashlookup(key, keylength)
  388. unsigned char *key;
  389. int keylength;
  390. {
  391. X    int h = hash(key);
  392. X    int nh = hash2(h);
  393. X    unsigned char *data = NULL;
  394. X
  395. X    while(table[h].key != NULL &&
  396. X          strncmp((char *)table[h].key, (char *)key, keylength))
  397. X      h = (h + nh) % M;
  398. X    data = table[h].data;
  399. X    return(data);
  400. }
  401. X
  402. void
  403. load_hgconv_table(filename)
  404. char *filename;
  405. {
  406. X    FILE *f;
  407. X    unsigned char buf[5], *l, *k;
  408. X    int c, i = 0, nsize = 0, kssize = 2;
  409. X
  410. X    if (!(f = fopen(filename, "r"))) {
  411. X        fprintf(stderr, "Problem with hgconv table file %s.\n", filename);
  412. X        exit(-1);
  413. X    }
  414. X
  415. X    hashinit();
  416. X    while(!feof(f)) {
  417. X
  418. X        if ((i >= 0 && i < 40) && nsize != 1)
  419. X          nsize = 1;
  420. X        else if ((i >= 40 && i < 389) && nsize != 2)
  421. X          nsize = 2;
  422. X        else if (i >= 389 && nsize != 3)
  423. X          nsize = 3;
  424. X
  425. X        if (fread(buf, 1, nsize+kssize, f) < (nsize+kssize)) {
  426. X            fclose(f);
  427. X            fprintf(stderr, "Problem reading table %s\n", filename);
  428. X            exit(-1);
  429. X        }
  430. X
  431. X        l = (unsigned char *)malloc((nsize+1) * sizeof(unsigned char));
  432. X        k = (unsigned char *)malloc(3 * sizeof(unsigned char));
  433. X        l[nsize] = k[2] = '\0';
  434. X        strncpy(l, buf, nsize);
  435. X        strncpy(k, (buf+nsize), 2);
  436. X
  437. X        /*
  438. X         * Insert by hashing on N-byte sequence.
  439. X         */
  440. X        hashinsert(l, k, nsize);
  441. X
  442. X        c = getc(f);
  443. X        if (!feof(f) && c != EOL)
  444. X          ungetc(c, f);
  445. X
  446. X        i++;
  447. X    }
  448. X    fclose(f);
  449. }
  450. X
  451. static int
  452. vowelcombine(c1, c2)
  453. int c1, c2;
  454. {
  455. X    switch(c1) {
  456. X      case 'l':
  457. X        switch(c2) {
  458. X          case 'b': return('K'); break;
  459. X          case 'c': return('H'); break;
  460. X          case '|': return('L'); break;
  461. X        }
  462. X        break;
  463. X      case 's':
  464. X        switch(c2) {
  465. X          case 'f': return('J'); break;
  466. X          case 'g': return('N'); break;
  467. X          case '|': return('B'); break;
  468. X        }
  469. X        break;
  470. X      case 'z':
  471. X        if (c2 == '|') return('M');
  472. X        break;
  473. X    }
  474. X    return(0);
  475. }
  476. X
  477. static int
  478. conscombine(c1, c2)
  479. int c1, c2;
  480. {
  481. X    switch(c1) {
  482. X      case 'A':
  483. X        if (c2 == 'U') return('S'); break;
  484. X      case 'D':
  485. X        switch(c2) {
  486. X          case 'X': return('J'); break;
  487. X          case '^': return('H'); break;
  488. X        }
  489. X        break;
  490. X      case 'I':
  491. X        switch(c2) {
  492. X          case 'A': return('G'); break;
  493. X          case 'Q': return('M'); break;
  494. X          case 'R': return('N'); break;
  495. X          case 'U': return('A'); break;
  496. X          case '\\': return('B'); break;
  497. X          case ']': return('V'); break;
  498. X          case '^': return('F'); break;
  499. X        }
  500. X        break;
  501. X      case 'R':
  502. X        if (c2 == 'U') return('C');
  503. X        break;
  504. X    }
  505. X    return(0);
  506. }
  507. X
  508. static int
  509. initcons(c)
  510. int c;
  511. {
  512. X    switch(c) {
  513. X      case 'A': return('r'); break;
  514. X      case 'B': return('R'); break;
  515. X      case 'D': return('s'); break;
  516. X      case 'G': return('e'); break;
  517. X      case 'H': return('E'); break;
  518. X      case 'I': return('f'); break;
  519. X      case 'Q': return('a'); break;
  520. X      case 'R': return('q'); break;
  521. X      case 'S': return('Q'); break;
  522. X      case 'U': return('t'); break;
  523. X      case 'V': return('T'); break;
  524. X      case 'W': return('d'); break;
  525. X      case 'X': return('w'); break;
  526. X      case 'Y': return('W'); break;
  527. X      case 'Z': return('c'); break;
  528. X      case '[': return('z'); break;
  529. X      case '\\': return('x'); break;
  530. X      case ']': return('v'); break;
  531. X      case '^': return('g'); break;
  532. X    }
  533. X    return(0);
  534. }
  535. X
  536. static int
  537. vowel(c)
  538. int c;
  539. {
  540. X    switch (c) {
  541. X      case 'b': return('k'); break;
  542. X      case 'c': return('o'); break;
  543. X      case 'd': return('i'); break;
  544. X      case 'e': return('O'); break;
  545. X      case 'f': return('j'); break;
  546. X      case 'g': return('p'); break;
  547. X      case 'j': return('u'); break;
  548. X      case 'k': return('P'); break;
  549. X      case 'l': return('h'); break;
  550. X      case 'm': return('k'); break;
  551. X      case 'n': return('o'); break;
  552. X      case 'o': return('l'); break;
  553. X      case 'r': return('y'); break;
  554. X      case 's': return('n'); break;
  555. X      case 't': return('j'); break;
  556. X      case 'u': return('p'); break;
  557. X      case 'v': return('l'); break;
  558. X      case 'w': return('b'); break;
  559. X      case 'z': return('m'); break;
  560. X      case '{': return('M'); break;
  561. X      case '|': return('l'); break;
  562. X    }
  563. X    return(0);
  564. }
  565. X
  566. static int
  567. finalcons(c)
  568. int c;
  569. {
  570. X    switch(c) {
  571. X      case 'A': return('r'); break;
  572. X      case 'B': return('R'); break;
  573. X      case 'C': return('S'); break;
  574. X      case 'D': return('s'); break;
  575. X      case 'E': return('J'); break;
  576. X      case 'F': return('H'); break;
  577. X      case 'G': return('e'); break;
  578. X      case 'I': return('f'); break;
  579. X      case 'J': return('G'); break;
  580. X      case 'K': return('M'); break;
  581. X      case 'L': return('N'); break;
  582. X      case 'M': return('A'); break;
  583. X      case 'N': return('B'); break;
  584. X      case 'O': return('V'); break;
  585. X      case 'P': return('F'); break;
  586. X      case 'Q': return('a'); break;
  587. X      case 'R': return('q'); break;
  588. X      case 'S': return('t'); break;
  589. X      case 'U': return('t'); break;
  590. X      case 'V': return('T'); break;
  591. X      case 'W': return('d'); break;
  592. X      case 'X': return('w'); break;
  593. X      case 'Z': return('c'); break;
  594. X      case '[': return('z'); break;
  595. X      case '\\': return('x'); break;
  596. X      case ']': return('v'); break;
  597. X      case '^': return('g'); break;
  598. X    }
  599. X    return(0);
  600. }
  601. X
  602. static int
  603. mapn2ks(c1, c2, c3, oc1, oc2)
  604. char c1, c2, c3;
  605. unsigned char *oc1, *oc2;
  606. {
  607. X    unsigned char key[4];
  608. X    unsigned char *kscode;
  609. X    int i = 0;
  610. X
  611. X    if (!c1 && !c2 && !c3) {
  612. X        *oc1 = *oc2 = '\0';
  613. X        return(0);
  614. X    }
  615. X    if (c1) key[i++] = c1;
  616. X    if (c2) key[i++] = c2;
  617. X    if (c3) key[i++] = c3;
  618. X
  619. X    key[i] = '\0';
  620. X    /*
  621. X     * Map unknown sequences to the space character because they probably
  622. X     * don't have equivalents in the KSC5601 code set.
  623. X     * The code position for a space in KS code is 0xa4a0.
  624. X     */
  625. X    if (!(kscode = hashlookup(key, i))) {
  626. X        *oc1 = 0xa4;
  627. X        *oc2 = 0xa0;
  628. X    } else {
  629. X        *oc1 = kscode[0];
  630. X        *oc2 = kscode[1];
  631. X    }
  632. X
  633. X    /*
  634. X     * All N-byte sequences map to a two byte KS code.
  635. X     */
  636. X    return(2);
  637. }
  638. X
  639. int
  640. hgconvert(nb, ks, nblength)
  641. char *nb;
  642. unsigned char **ks;
  643. int *nblength;
  644. {
  645. X    register char c, res;
  646. X    register char cho_sung = 0, jung_sung = 0, jong_sung = 0;
  647. X    register char *ptr = nb;
  648. X    register unsigned char *ptr1;
  649. X    register int length = 0;
  650. X    char state = INITIAL;
  651. X    unsigned char c1, c2;
  652. X
  653. X    c = *ptr++;
  654. X    if (ks)
  655. X      ptr1 = *ks;
  656. X    while(c && c != CTL_O) {
  657. X        switch(state) {
  658. X          case INITIAL:
  659. X            if ((cho_sung = initcons(c)))
  660. X              state = MIDDLE;
  661. X            else if ((jung_sung = vowel(c))) {
  662. X                cho_sung = jong_sung = 0;
  663. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  664. X                if (ks && c1 && c2) {
  665. X                    *ptr1++ = c1;
  666. X                    *ptr1++ = c2;
  667. X                }
  668. X            } else if ((jong_sung = finalcons(c))) {
  669. X                cho_sung = jung_sung = 0;
  670. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  671. X                if (ks && c1 && c2) {
  672. X                    *ptr1++ = c1;
  673. X                    *ptr1++ = c2;
  674. X                }
  675. X            }
  676. X            break;
  677. X          case MIDDLE:
  678. X            if ((jung_sung = vowelcombine(c, *ptr))) {
  679. X                state = FINAL;
  680. X                ptr++;
  681. X            } else if ((jung_sung = vowel(c)))
  682. X              state = FINAL;
  683. X            else if ((res = initcons(c))) {
  684. X                jung_sung = jong_sung = 0;
  685. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  686. X                if (ks && c1 && c2) {
  687. X                    *ptr1++ = c1;
  688. X                    *ptr1++ = c2;
  689. X                }
  690. X                cho_sung = res;
  691. X            } else if ((res = finalcons(c))) {
  692. X                jung_sung = jong_sung = 0;
  693. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  694. X                if (ks && c1 && c2) {
  695. X                    *ptr1++ = c1;
  696. X                    *ptr1++ = c2;
  697. X                }
  698. X                cho_sung = 0;
  699. X                jong_sung = res;
  700. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  701. X                if (ks && c1 && c2) {
  702. X                    *ptr1++ = c1;
  703. X                    *ptr1++ = c2;
  704. X                }
  705. X                jong_sung = 0;
  706. X                state = INITIAL;
  707. X            }
  708. X            break;
  709. X          case FINAL:
  710. X            if ((res = initcons(c)) && vowel(*ptr)) {
  711. X                jong_sung = 0;
  712. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  713. X                if (ks && c1 && c2) {
  714. X                    *ptr1++ = c1;
  715. X                    *ptr1++ = c2;
  716. X                }
  717. X                cho_sung = res;
  718. X                state = MIDDLE;
  719. X            } else if ((jong_sung = conscombine(c, *ptr)) && !vowel(ptr[1])) {
  720. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  721. X                state = INITIAL;
  722. X                cho_sung = jung_sung = jong_sung = 0;
  723. X            } else if ((jong_sung = finalcons(c))) {
  724. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  725. X                if (ks && c1 && c2) {
  726. X                    *ptr1++ = c1;
  727. X                    *ptr1++ = c2;
  728. X                }
  729. X                cho_sung = jung_sung = jong_sung = 0;
  730. X                state = INITIAL;
  731. X            } else if ((res = initcons(c))) {
  732. X                jong_sung = 0;
  733. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  734. X                if (ks && c1 && c2) {
  735. X                    *ptr1++ = c1;
  736. X                    *ptr1++ = c2;
  737. X                }
  738. X                cho_sung = res;
  739. X                state = MIDDLE;
  740. X            } else if ((res = vowel(c))) {
  741. X                jong_sung = 0;
  742. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  743. X                if (ks && c1 && c2) {
  744. X                    *ptr1++ = c1;
  745. X                    *ptr1++ = c2;
  746. X                }
  747. X                cho_sung = 0;
  748. X                jung_sung = res;
  749. X                length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  750. X                if (ks && c1 && c2) {
  751. X                    *ptr1++ = c1;
  752. X                    *ptr1++ = c2;
  753. X                }
  754. X                jung_sung = 0;
  755. X                state = INITIAL;
  756. X            }
  757. X        }
  758. X        c = *ptr++;
  759. X    }
  760. X    length += mapn2ks(cho_sung, jung_sung, jong_sung, &c1, &c2);
  761. X    if (ks && c1 && c2) {
  762. X        *ptr1++ = c1;
  763. X        *ptr1++ = c2;
  764. X        *ptr1 = '\0';
  765. X    }
  766. X    if (nblength)
  767. X      *nblength = ptr - nb;
  768. X    return(length);
  769. }
  770. SHAR_EOF
  771. chmod 0664 kterm-4.1.2/hgutil.c ||
  772. echo 'restore of kterm-4.1.2/hgutil.c failed'
  773. Wc_c="`wc -c < 'kterm-4.1.2/hgutil.c'`"
  774. test 13217 -eq "$Wc_c" ||
  775.     echo 'kterm-4.1.2/hgutil.c: original size 13217, current size' "$Wc_c"
  776. rm -f _shar_wnt_.tmp
  777. fi
  778. # ============= kterm-4.1.2/hgutil.h ==============
  779. if test -f 'kterm-4.1.2/hgutil.h' -a X"$1" != X"-c"; then
  780.     echo 'x - skipping kterm-4.1.2/hgutil.h (File already exists)'
  781.     rm -f _shar_wnt_.tmp
  782. else
  783. > _shar_wnt_.tmp
  784. echo 'x - extracting kterm-4.1.2/hgutil.h (Text)'
  785. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/hgutil.h' &&
  786. /*
  787. X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/hgutil.h,v 1.0 1991/01/30 00:21:51 mleisher Exp $
  788. X */
  789. X
  790. /*
  791. X *
  792. X * File:         hgutil.h
  793. X * Description:  Convert from N-byte code to KS code.
  794. X * Author:       mleisher@nmsu.edu (Mark Leisher)
  795. X * Created:      Mon Jan 28 13:18:21 1991
  796. X * Modified:     
  797. X *
  798. X */
  799. X
  800. #ifndef _hgutil_h
  801. #define _hgutil_h
  802. X
  803. #define CTL_N        0x0e   /* N-byte string start indicator.              */
  804. #define CTL_O        0x0f   /* N-byte string end indicator.                */
  805. #define EOL          0x0a   /* Unix style ^J line feed.                    */
  806. X
  807. /*
  808. X * The hgconvert function takes the original n-byte string and
  809. X * converts it to a KS code string.  If a NULL is passed for ks,
  810. X * hgconvert will return the length of the KS code string.
  811. X * If a non-NULL pointer is passed for nblength, the length of the
  812. X * N-byte string is returned.
  813. X */
  814. int hgconvert();
  815. /*
  816. X   char *nb;                        The N-byte string.
  817. X   unsigned char **ks;    RETURNED: The KS string.
  818. X   int *nblength;         RETURNED: The length of the N-byte string.
  819. */
  820. X
  821. #endif /* _hgutil_h */
  822. SHAR_EOF
  823. chmod 0664 kterm-4.1.2/hgutil.h ||
  824. echo 'restore of kterm-4.1.2/hgutil.h failed'
  825. Wc_c="`wc -c < 'kterm-4.1.2/hgutil.h'`"
  826. test 1110 -eq "$Wc_c" ||
  827.     echo 'kterm-4.1.2/hgutil.h: original size 1110, current size' "$Wc_c"
  828. rm -f _shar_wnt_.tmp
  829. fi
  830. # ============= kterm-4.1.2/hzutil.c ==============
  831. if test -f 'kterm-4.1.2/hzutil.c' -a X"$1" != X"-c"; then
  832.     echo 'x - skipping kterm-4.1.2/hzutil.c (File already exists)'
  833.     rm -f _shar_wnt_.tmp
  834. else
  835. > _shar_wnt_.tmp
  836. echo 'x - extracting kterm-4.1.2/hzutil.c (Text)'
  837. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/hzutil.c' &&
  838. /*
  839. X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/hzutil.c,v 1.2 1991/01/30 00:16:20 mleisher Exp $
  840. X */
  841. X
  842. /*
  843. X * FILE NAME: hzutil.c
  844. X *    See MODIFICATIONS entry below.
  845. X *
  846. X * NAME:
  847. X *    HC - Hanzi Converter Version 1.2u
  848. X *    Copyright @ 1988,1989,1990 by Fung F. Lee & Ricky Yeung
  849. X *
  850. X * SYNOPSIS:
  851. X *    HC -m mode [-tabs t1 t2 ...]
  852. X *        mode: can be BIGtoGB or GBtoBIG
  853. X *        ti: conversion table filenames
  854. X *
  855. X * DESCRIPTION:
  856. X *    `HC' converts BIG-5 codes into GB codes (with high bit set),
  857. X *    and vice versa. BIG-5 is a popular hanzi code used in Taiwan,
  858. X *    whereas GB (GuoBiao) is Mainland China's national standard.
  859. X *    GB code (with high bit set) is adopted widely in many systems,
  860. X *    such as CCDOS and Macintosh Chinese Operating System 6.0.3.
  861. X *    
  862. X * FILES:
  863. X *    GB0toBIG, GB1toBIG, GB2toBIG, BIG0toGB, BIG1toGB, YiTiZi
  864. X *    are HC mapping table files. They are either GB or BIG-5 files.
  865. X *    The format is simple and allows easy modification with a Chinese
  866. X *    editor. 
  867. X *
  868. X * AUTHORS:
  869. X *    Ricky Yeung (yeung@june.cs.washington.edu)
  870. X *    Fung F. Lee (lee@milo.stanford.edu)
  871. X *
  872. X * ACKNOWLEDGEMENT:
  873. X *    Thanks to Edmund Lai for providing most of the data in `GB2toBIG'.
  874. X *
  875. X * DISTRIBUTION:
  876. X *    This program and the data files are NOT in public domain.  
  877. X *    The source file and the related table files as listed
  878. X *    in FILES can be freely distributed for non-commercial purposes only.
  879. X *
  880. X *    Contact the authors before making any modification to the software
  881. X *    and/or the table files.
  882. X *
  883. X *    This software is provided "as is" and the authors disclaim all
  884. X *    warranties with regard to this software and the correctness of the
  885. X *    mapping table files.  
  886. X *
  887. X * MODIFICATIONS:
  888. X *    Modified Tue Sep 11 23:20:21 MDT 1990 by Mark Leisher
  889. X *    mleisher@nmsu.edu with permission from Ricky Yeung.
  890. X *    Modified file for use with kterm 4.3.0.
  891. X *
  892. X *    1. Consolidated GB[012]toBIG files into 'g2b.table' and
  893. X *       BIG[01]toGB into 'b2g.table'.
  894. X *    2. Changed file name to 'hzutil.c'.
  895. X *    3. Moved defines and table variables into 'hzutil.h'.
  896. X *    4. Removed unneeded functions, modified converter
  897. X *       function, modified function return types.
  898. X *    5. Made most functions static to avoid conflict with
  899. X *       outside functions.
  900. X *      6. Added SGB<->GB,BIG5 abilities to converter().
  901. X */
  902. X
  903. /*
  904. X  Copyright (C) 1989      Fung F. Lee
  905. X
  906. X  sgb2hz: convert a Macintosh/CCDOS SGB file into a HZ file.
  907. X  hz2sgb: convert a HZ file into a Macintosh/CCDOS SGB file.
  908. X
  909. X  This program is free for general distribution.  
  910. X
  911. X  This program runs on UNIX. You are welcome to port it to other operating
  912. X  systems.
  913. X
  914. X  MODIFICATIONS:
  915. X     Modified Fri Nov  9 02:35:22 1990 by Mark Leisher
  916. X     mleisher@nmsu.edu for use with kterm 4.3.0
  917. X
  918. X     1. Extracted functions mac2gb and gb2mac from files sgb2hz.c
  919. X        and hz2sgb.c.
  920. X     2. Modified mac2gb and gb2mac function names to
  921. X        sgb2gb and gb2sbg respectively.
  922. X     3. Slightly modified functions.
  923. */
  924. X
  925. #include <stdio.h>
  926. #include <ctype.h>
  927. #include "hzutil.h"
  928. X
  929. static char tables_initialized = 0;
  930. X
  931. static int
  932. SkipSpaces(fp)
  933. FILE *fp;
  934. {
  935. X    int c;
  936. X
  937. X    for(;;)
  938. X    {
  939. X        c=fgetc(fp);
  940. X        if ((c&0x80) || !isspace(c)) break;
  941. X    }
  942. X    return (c);
  943. }
  944. X
  945. static void
  946. fatal(s)
  947. char *s;
  948. {
  949. X    fprintf(stderr, "%s\n", s);
  950. X    exit(1);
  951. }
  952. X
  953. static FILE *
  954. openfile(fn)
  955. char *fn;
  956. {
  957. X    FILE *fp = fopen(fn, "r");
  958. X    
  959. X    if (!fp)
  960. X      fprintf(stderr, "Unable to open file: %s\n", fn);
  961. X    return(fp);
  962. }
  963. X
  964. static unsigned short int
  965. makeYiTi(fp)
  966. FILE *fp;
  967. {
  968. X    unsigned int code1, code2, value;
  969. X    int        c1, c2;
  970. X    unsigned short int    total=0;
  971. X    
  972. X    for (;;)
  973. X    {
  974. X    if ((c1=SkipSpaces(fp))==EOF) break;
  975. X    c2 = fgetc(fp);
  976. X    code1 = DB(c1, c2);
  977. X    value = BtoG[code1 - BIGstart];
  978. X    for (;;)
  979. X    {
  980. X        if ((c1=SkipSpaces(fp))==EOF) break;
  981. X        c2 = fgetc(fp);
  982. X        code2 = DB(c1, c2);
  983. X        BtoG[code2 - BIGstart] = value;
  984. X        total++;        
  985. X        if ((c1=fgetc(fp))=='\n')
  986. X        break;
  987. X        ungetc(c1, fp);
  988. X    }
  989. X    }
  990. X    return total;
  991. }
  992. X
  993. static void
  994. init_tables()
  995. {
  996. X    int i;
  997. X
  998. X    if (tables_initialized) return;
  999. X    GtoB = (unsigned short int *) malloc(sizeof(short int) * GBsize);
  1000. X    BtoG = (unsigned short int *) malloc(sizeof(short int) * BIGsize);
  1001. X    
  1002. X    for (i=0; i<GBsize; i++)
  1003. X      GtoB[i] = BIGbox;
  1004. X    for (i=0; i<BIGsize; i++)
  1005. X      BtoG[i] = GBbox;
  1006. X    tables_initialized = 1;
  1007. }
  1008. X
  1009. int
  1010. load_hzconv_table(fn)
  1011. char *fn;
  1012. {
  1013. X    unsigned int codeS, codeT, cfirst, clast;
  1014. X    int c1, c2, mode = GBtoBIG;
  1015. X    unsigned short int total = 0;
  1016. X    FILE *fp;
  1017. X    char buf[255];
  1018. X
  1019. X    init_tables();
  1020. X    if (!(fp = openfile(fn)))
  1021. X      return(0);
  1022. X    
  1023. X    for (;;)
  1024. X    {
  1025. X    fgets(buf, 255, fp); /* no check for EOF */
  1026. X    if (buf[0]!='\n' && (buf[0]!='#') && (buf[0]!=' ')) break;
  1027. X    }
  1028. X
  1029. X    /* header in new HCF format: e.g. '%GB->BIG', '%BIG->GB', '%YITIZI' */
  1030. X    if (buf[0] == '%')
  1031. X    {
  1032. X    switch(buf[1])
  1033. X    {
  1034. X      case 'G': mode = GBtoBIG; break;
  1035. X      case 'B': mode = BIGtoGB; break;
  1036. X      case 'Y': mode = YITIZI; break;
  1037. X      default: fatal("unknown HCF format\n"); break;
  1038. X    }
  1039. X    }
  1040. X    
  1041. X    if (mode == YITIZI) {
  1042. X    total = makeYiTi(fp);
  1043. X        fclose(fp);
  1044. X    return total;
  1045. X    }
  1046. X    
  1047. X    for (;;)
  1048. X    {
  1049. X    if (fscanf(fp, "%x %x", &cfirst, &clast) != 2)
  1050. X        break;
  1051. X    for (codeS = cfirst; codeS <= clast; codeS++)
  1052. X    {
  1053. X        if ((c1=SkipSpaces(fp))==EOF) break;
  1054. X        c2 = fgetc(fp);
  1055. X        codeT = DB(c1, c2);
  1056. X        if (mode == GBtoBIG)
  1057. X        {
  1058. X        if (!inBIGrange(codeT))
  1059. X            fatal("error: invalid code mapping table entry\n");
  1060. X        if (codeT != BIGbox)
  1061. X        {
  1062. X            GtoB[codeS - GBstart] = codeT;
  1063. X            BtoG[codeT - BIGstart] = codeS;
  1064. X            total++;
  1065. X        }
  1066. X        }
  1067. X        else if (mode == BIGtoGB)
  1068. X        {
  1069. X        if (!inGBrange(codeT))
  1070. X            fatal("error: invalid code mapping table entry\n");
  1071. X        if (codeT != GBbox)
  1072. X        {
  1073. X            BtoG[codeS - BIGstart] = codeT;
  1074. X            GtoB[codeT - GBstart] = codeS;
  1075. X            total++;
  1076. X        }
  1077. X        }
  1078. X    }
  1079. X    }
  1080. X    fclose(fp);
  1081. X    return total;
  1082. }
  1083. X
  1084. static void
  1085. gb2sgb(hi, lo, hi1, lo1)
  1086. unsigned char hi, lo, *hi1, *lo1;
  1087. {
  1088. X    hi &= 0x7f;
  1089. X    lo &= 0x7f;
  1090. X    *hi1 = 0x81 + (hi - 0x21)/2;
  1091. X    if (hi%2 != 0) {
  1092. X        *lo1 = 0x40 + (lo - 0x21);
  1093. X        *lo1 += ((*lo1 >= 0x7f) ? 1 : 0);
  1094. X    } else
  1095. X      *lo1 = 0x9f + (lo - 0x21);
  1096. }
  1097. X
  1098. static void
  1099. sgb2gb(hi, lo, hi1, lo1)
  1100. unsigned char hi, lo, *hi1, *lo1;
  1101. {
  1102. X    if (lo >= 0x9f) {
  1103. X        *hi1 = 0x21 + (hi - 0x81) * 2 + 1;
  1104. X        *lo1 = 0x21 + (lo - 0x9f);
  1105. X    } else {
  1106. X        *hi1 = 0x21 + (hi - 0x81) * 2;
  1107. X        lo -= ((lo > 0x7f) ? 1 : 0);
  1108. X        *lo1 = 0x21 + (lo - 0x40);
  1109. X    }
  1110. X    *hi1 |= 0x80;
  1111. X    *lo1 |= 0x80;
  1112. }
  1113. X
  1114. void
  1115. hzconvert(mode, c1, c2, oc1, oc2)
  1116. int mode;
  1117. unsigned char c1, c2, *oc1, *oc2;
  1118. {
  1119. X    unsigned short int codeS, codeT;
  1120. X    unsigned char ch1, ch2;
  1121. X    
  1122. X    codeS = DB(c1, c2);
  1123. X    codeT = codeS;
  1124. X    switch(mode) {
  1125. X      case GBtoBIG:
  1126. X        if (inGBrange(codeS)) 
  1127. X          codeT = GtoB[codeS - GBstart];
  1128. X        else
  1129. X          codeT = BIGbox;
  1130. X        break;
  1131. X      case BIGtoGB:
  1132. X        if (inBIGrange(codeS))
  1133. X          codeT = BtoG[codeS - BIGstart];
  1134. X        else
  1135. X          codeT = GBbox;
  1136. X        break;
  1137. X      case GBtoSGB:
  1138. X        if (inGBrange(codeS)) {
  1139. X            gb2sgb(c1, c2, &ch1, &ch2);
  1140. X            codeT = DB(ch1, ch2);
  1141. X        }
  1142. X        break;
  1143. X      case SGBtoGB:
  1144. X        if (inSGBrange(codeS)) {
  1145. X            sgb2gb(c1, c2, &ch1, &ch2);
  1146. X            codeT = DB(ch1, ch2);
  1147. X        }
  1148. X        break;
  1149. X      case BIGtoSGB:
  1150. X        if (inBIGrange(codeS))
  1151. X          codeT = BtoG[codeS - BIGstart];
  1152. X        else
  1153. X          codeT = GBbox;
  1154. X        c1 = HB(codeT);
  1155. X        c2 = LB(codeT);
  1156. X        gb2sgb(c1, c2, &ch1, &ch2);
  1157. X        codeT = DB(ch1, ch2);
  1158. X        break;
  1159. X      case SGBtoBIG:
  1160. X        if (inSGBrange(codeS)) {
  1161. X            sgb2gb(c1, c2, &ch1, &ch2);
  1162. X            ch1 |= 0x80;
  1163. X            ch2 |= 0x80;
  1164. X            codeS = DB(ch1, ch2);
  1165. X        } else
  1166. X          codeS = BIGbox;
  1167. X        codeT = codeS;
  1168. X        if (inGBrange(codeS)) 
  1169. X          codeT = GtoB[codeS - GBstart];
  1170. X        else
  1171. X          codeT = BIGbox;
  1172. X        break;
  1173. X    }
  1174. X
  1175. X    *oc1 = HB(codeT);
  1176. X    *oc2 = LB(codeT);
  1177. }
  1178. SHAR_EOF
  1179. chmod 0664 kterm-4.1.2/hzutil.c ||
  1180. echo 'restore of kterm-4.1.2/hzutil.c failed'
  1181. Wc_c="`wc -c < 'kterm-4.1.2/hzutil.c'`"
  1182. test 7921 -eq "$Wc_c" ||
  1183.     echo 'kterm-4.1.2/hzutil.c: original size 7921, current size' "$Wc_c"
  1184. rm -f _shar_wnt_.tmp
  1185. fi
  1186. # ============= kterm-4.1.2/hzutil.h ==============
  1187. if test -f 'kterm-4.1.2/hzutil.h' -a X"$1" != X"-c"; then
  1188.     echo 'x - skipping kterm-4.1.2/hzutil.h (File already exists)'
  1189.     rm -f _shar_wnt_.tmp
  1190. else
  1191. > _shar_wnt_.tmp
  1192. echo 'x - extracting kterm-4.1.2/hzutil.h (Text)'
  1193. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/hzutil.h' &&
  1194. /*
  1195. X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/hzutil.h,v 1.2 1991/01/30 00:15:29 mleisher Exp $
  1196. X */
  1197. X
  1198. /*
  1199. X * FILE NAME: hzutil.h
  1200. X *    See MODIFICATIONS entry below.
  1201. X *
  1202. X * NAME:
  1203. X *    HC - Hanzi Converter Version 1.2u
  1204. X *    Copyright @ 1988,1989,1990 by Fung F. Lee & Ricky Yeung
  1205. X *
  1206. X * SYNOPSIS:
  1207. X *    HC -m mode [-tabs t1 t2 ...]
  1208. X *        mode: can be BIGtoGB or GBtoBIG
  1209. X *        ti: conversion table filenames
  1210. X *
  1211. X * DESCRIPTION:
  1212. X *    `HC' converts BIG-5 codes into GB codes (with high bit set),
  1213. X *    and vice versa. BIG-5 is a popular hanzi code used in Taiwan,
  1214. X *    whereas GB (GuoBiao) is Mainland China's national standard.
  1215. X *    GB code (with high bit set) is adopted widely in many systems,
  1216. X *    such as CCDOS and Macintosh Chinese Operating System 6.0.3.
  1217. X *    
  1218. X * FILES:
  1219. X *    GB0toBIG, GB1toBIG, GB2toBIG, BIG0toGB, BIG1toGB, YiTiZi
  1220. X *    are HC mapping table files. They are either GB or BIG-5 files.
  1221. X *    The format is simple and allows easy modification with a Chinese
  1222. X *    editor. 
  1223. X *
  1224. X * AUTHORS:
  1225. X *    Ricky Yeung (yeung@june.cs.washington.edu)
  1226. X *    Fung F. Lee (lee@milo.stanford.edu)
  1227. X *
  1228. X * ACKNOWLEDGEMENT:
  1229. X *    Thanks to Edmund Lai for providing most of the data in `GB2toBIG'.
  1230. X *
  1231. X * DISTRIBUTION:
  1232. X *    This program and the data files are NOT in public domain.  
  1233. X *    The source file and the related table files as listed
  1234. X *    in FILES can be freely distributed for non-commercial purposes only.
  1235. X *
  1236. X *    Contact the authors before making any modification to the software
  1237. X *    and/or the table files.
  1238. X *
  1239. X *    This software is provided "as is" and the authors disclaim all
  1240. X *    warranties with regard to this software and the correctness of the
  1241. X *    mapping table files.  
  1242. X *
  1243. X * MODIFICATIONS:
  1244. X *    Modified Tue Sep 11 23:20:21 MDT 1990 by Mark Leisher
  1245. X *    mleisher@nmsu.edu with permission from Ricky Yeung.
  1246. X *    Modified file for use with kterm 4.1.0.
  1247. X *
  1248. X *    1. Consolidated GB[012]toBIG files into 'g2b.table' and
  1249. X *       BIG[01]toGB into 'b2g.table'.
  1250. X *    2. Changed file name to 'hzutil.h'.
  1251. X *    3. Moved defines and table variables into 'hzutil.h'.
  1252. X *    4. Added converter function prototype.
  1253. X *    5. Added load_hzconv_table initialization function prototype.
  1254. X *      6. Added SGB<->GB, BIG conversion(see note in hzutil.c).
  1255. X */
  1256. X
  1257. #ifndef _hzutil_h
  1258. #define _hzutil_h
  1259. X
  1260. #define    GBtoBIG      1
  1261. #define BIGtoGB      2
  1262. #define GBtoSGB   3
  1263. #define SGBtoGB   4
  1264. #define BIGtoSGB  5
  1265. #define SGBtoBIG  6
  1266. #define YITIZI    7
  1267. X
  1268. #define GBstart  0xA1A1    /* first address of GtoB table */
  1269. #define GBend     0xFEFE    /* last address of GtoB table */
  1270. #define GBsize     0x5E5E    /* size of GtoB table */
  1271. #define SGBstart 0x8140 /* first address of Shift-GuoBiao code */
  1272. #define SGBend   0xAFFC /* last address of Shift-GuoBiao code */
  1273. #define BIGstart 0xA140    /* first address of BtoG table */
  1274. #define BIGend     0xF9FE    /* last address of BtoG table */
  1275. #define    BIGsize     0x58BF    /* size of BtoG table */
  1276. X
  1277. #define GBbox    0xA1F5    /* GB code of blank box, default value of BtoG table */
  1278. #define BIGbox    0xA1BC    /* BIG code of blank box,default value of GtoB table */
  1279. X
  1280. #define HB(x)        ((x>>8) & 0xFF)
  1281. #define LB(x)        (x & 0xFF)
  1282. #define DB(hi,lo)    ((((hi)&0xFF) << 8) | ((lo)&0xFF))
  1283. #define isFirstByte(c)    ((c)>=0xA1)
  1284. #define inGBrange(x)    (((x)>=GBstart) && ((x)<=GBend))
  1285. #define inSGBrange(x)   (((x)>=SGBstart) && ((x)<=SGBend))
  1286. #define inBIGrange(x)    (((x)>=BIGstart) && ((x)<=BIGend))
  1287. X
  1288. unsigned short int *BtoG, *GtoB;    /* Hanzi code mapping tables */
  1289. X
  1290. int load_hzconv_table();
  1291. /*  char *tbl_name; */
  1292. X
  1293. void hzconvert();
  1294. /*  int mode,            See above
  1295. X    unsigned char  c1,        input HB char
  1296. X    unsigned char  c2,        input LB char
  1297. X    unsigned char *oc1,        output HB char
  1298. X    unsigned char *oc2        output LB char */
  1299. X
  1300. #endif /* _hzutil_h */
  1301. SHAR_EOF
  1302. chmod 0664 kterm-4.1.2/hzutil.h ||
  1303. echo 'restore of kterm-4.1.2/hzutil.h failed'
  1304. Wc_c="`wc -c < 'kterm-4.1.2/hzutil.h'`"
  1305. test 3632 -eq "$Wc_c" ||
  1306.     echo 'kterm-4.1.2/hzutil.h: original size 3632, current size' "$Wc_c"
  1307. rm -f _shar_wnt_.tmp
  1308. fi
  1309. # ============= kterm-4.1.2/input.c ==============
  1310. if test -f 'kterm-4.1.2/input.c' -a X"$1" != X"-c"; then
  1311.     echo 'x - skipping kterm-4.1.2/input.c (File already exists)'
  1312.     rm -f _shar_wnt_.tmp
  1313. else
  1314. > _shar_wnt_.tmp
  1315. echo 'x - extracting kterm-4.1.2/input.c (Text)'
  1316. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/input.c' &&
  1317. /*
  1318. X *    $XConsortium: input.c,v 1.8 89/12/10 20:44:48 jim Exp $
  1319. X *    $Header: /usr/src.yoshi/X/KTerm/4.1.0/RCS/input.c,v 1.1 90/06/27 09:39:05 kagotani Rel $
  1320. X */
  1321. X
  1322. #ifndef lint
  1323. static char *rcsid_input_c = "$XConsortium: input.c,v 1.8 89/12/10 20:44:48 jim Exp $";
  1324. #endif    /* lint */
  1325. X
  1326. #include <X11/copyright.h>
  1327. X
  1328. /*
  1329. X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
  1330. X *
  1331. X *                         All Rights Reserved
  1332. X *
  1333. X * Permission to use, copy, modify, and distribute this software and its
  1334. X * documentation for any purpose and without fee is hereby granted,
  1335. X * provided that the above copyright notice appear in all copies and that
  1336. X * both that copyright notice and this permission notice appear in
  1337. X * supporting documentation, and that the name of Digital Equipment
  1338. X * Corporation not be used in advertising or publicity pertaining to
  1339. X * distribution of the software without specific, written prior permission.
  1340. X *
  1341. X *
  1342. X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  1343. X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  1344. X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  1345. X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  1346. X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  1347. X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  1348. X * SOFTWARE.
  1349. X */
  1350. X
  1351. /* input.c */
  1352. X
  1353. #ifndef lint
  1354. static char rcs_id[] = "$XConsortium: input.c,v 1.8 89/12/10 20:44:48 jim Exp $";
  1355. #endif    /* lint */
  1356. X
  1357. #include <X11/Xlib.h>
  1358. #include <X11/keysym.h>
  1359. #include <X11/DECkeysym.h>
  1360. #include <X11/Intrinsic.h>
  1361. #include <X11/Xutil.h>
  1362. #include <stdio.h>
  1363. #include "ptyx.h"
  1364. X
  1365. static XComposeStatus compose_status = {NULL, 0};
  1366. #ifdef ENBUG /* kagotani */
  1367. static char *kypd_num = " XXXXXXXX\tXXX\rXXXxxxxXXXXXXXXXXXXXXXXXXXXX*+,-.\\0123456789XXX=";
  1368. #else
  1369. static char *kypd_num = " XXXXXXXX\tXXX\rXXXxxxxXXXXXXXXXXXXXXXXXXXXX*+,-./0123456789XXX=";
  1370. #endif
  1371. static char *kypd_apl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ??????abcdefghijklmnopqrstuvwxyzXXX";
  1372. static char *cur = "DACB";
  1373. X
  1374. static int funcvalue(), sunfuncvalue();
  1375. extern Boolean sunFunctionKeys;
  1376. X
  1377. void
  1378. AdjustAfterInput (screen)
  1379. register TScreen *screen;
  1380. {
  1381. X    if(screen->scrollkey && screen->topline != 0)
  1382. X        WindowScroll(screen, 0);
  1383. X    if(screen->marginbell) {
  1384. X        int col = screen->max_col - screen->nmarginbell;
  1385. X        if(screen->bellarmed >= 0) {
  1386. X            if(screen->bellarmed == screen->cur_row) {
  1387. X                if(screen->cur_col >= col) {
  1388. X                    if(screen->cur_col == col)
  1389. X                        Bell();
  1390. X                    screen->bellarmed = -1;
  1391. X                }
  1392. X            } else
  1393. X                screen->bellarmed = screen->cur_col <
  1394. X                 col ? screen->cur_row : -1;
  1395. X        } else if(screen->cur_col < col)
  1396. X            screen->bellarmed = screen->cur_row;
  1397. X    }
  1398. }
  1399. X
  1400. Input (keyboard, screen, event, eightbit)
  1401. register TKeyboard    *keyboard;
  1402. register TScreen        *screen;
  1403. register XKeyPressedEvent *event;
  1404. Bool eightbit;
  1405. {
  1406. X
  1407. #define STRBUFSIZE 100
  1408. X
  1409. X     char strbuf[STRBUFSIZE];
  1410. X    register char *string;
  1411. X    register int key = FALSE;
  1412. X    int    pty    = screen->respond;
  1413. X    int    nbytes;
  1414. X    KeySym  keysym;
  1415. X    ANSI    reply;
  1416. X
  1417. #ifdef KTERM
  1418. X    extern XtermWidget term;
  1419. X    nbytes = XmuLookupKana ((XKeyEvent *)event, strbuf, STRBUFSIZE, 
  1420. X        &keysym, &compose_status);
  1421. # ifdef KTERM_KANJI
  1422. SHAR_EOF
  1423. true || echo 'restore of kterm-4.1.2/input.c failed'
  1424. fi
  1425. echo 'End of kterm-4.1.2 part 11'
  1426. echo 'File kterm-4.1.2/input.c is continued in part 12'
  1427. echo 12 > _shar_seq_.tmp
  1428. exit 0
  1429.  
  1430.  
  1431. -----------------------------------------------------------------------------
  1432. mleisher@nmsu.edu                      "I laughed.
  1433. Mark Leisher                                I cried.
  1434. Computing Research Lab                          I fell down.
  1435. New Mexico State University                        It changed my life."
  1436. Las Cruces, NM                     - Rich [Cowboy Feng's Space Bar and Grille]
  1437.  
  1438. --
  1439. Dan Heller
  1440. O'Reilly && Associates       Z-Code Software    Comp-sources-x:
  1441. Senior Writer                President          comp-sources.x@uunet.uu.net
  1442. argv@ora.com                 argv@zipcode.com
  1443.