home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume12 / kterm / part16 < 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: v12i097: kterm  - kanji xterm, Part16/18
  5. Message-ID: <13149@exodus.Eng.Sun.COM>
  6. Date: 11 May 91 00:52:07 GMT
  7. References: <csx-12i082:kterm@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1612
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: mleisher@NMSU.Edu
  13. Posting-number: Volume 12, Issue 97
  14. Archive-name: kterm/part16
  15.  
  16. #!/bin/sh
  17. # this is kt412.16 (part 16 of kterm-4.1.2)
  18. # do not concatenate these parts, unpack them in order with /bin/sh
  19. # file kterm-4.1.2/n2ks 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" != 16; 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/n2ks'
  35. else
  36. echo 'x - continuing file kterm-4.1.2/n2ks'
  37. sed 's/^X//' << 'SHAR_EOF' >> 'kterm-4.1.2/n2ks' &&
  38. IXBOSNr;.ss]bY`%a]?O2uA@p2cDK<A;;/UHednt!p]@70bDIL0-;/UKfekp<q]@TnhA@pMlD0*>D;
  39. /KpWgehos]A3fkD/m2E;/C9bi)+<3]AZV'B"R&"Cgjs9;/C6ajAB`8]B'AsCh10?FDGp/k]CT=]BOE
  40. QF1^^ZCLt-DFDGL#lu[#5]BorICJDG/FDG<smrW>b]C9oXFM%'bCK.q:FDGF!o5nbm]CZGPDfWJ`FD
  41. l64pN1=c]D-Jd@Cu>WDfNDcFDl95qfHaU]DN"XDe-KYFD5d.Tlb!i]V9L^B"Xm\BjnZMFD5a-V0$En
  42. ]VZ$XBk4lSFAHtjWH:pJ]W-'L@D&X_:Lq,>FD>j/Y&nDV]WVZaC/_dLFD>m0Z#j_l]WuWoB"YHlC/)
  43. @JFD=+S[<-.l]XA/hC2pnqFD>p1\9)Ib]X`-!AA#KqC3I8%FDu95]l\47]Y4_pE+ZbtFDt[$^iXO8]
  44. YS]/FM,J4E)aKfFDtd'`,p-B]Z(;#F`Y49FEM3.aE2Q5]ZG8<EP0G9F`b:>FELQqb]Iu<]Zge*:ij:
  45. qFAQS^cu`)p][:h7EkKkCBMuLmFD,a.eT>J:][dF3BMH.kFD,*qfQ:eH]\.C?FM-=LBOnd1FD,p3gi
  46. Q20]\X!;967c'FA$5Yi,hV&]]!s'F1gOT87oNqF@]iQj`F%8]]KQC86!7bFA-bgl#]U2]]sT4@D(oJ
  47. 9Q@`3FA-ehm<!Vo]^H2LH#pXfFEqK2nT9%b]^g/iEP1mbH$$^kFEqE0olP(l]_;bTDKEJcFDb[&q/g
  48. Ld]_Z_f@D)JZDK3>eFDc35rH)pf]`&7[DI^ARFDc?:U3(9r]q][A<5#,M:3+%GFA?njW,tdH]r;?\:
  49. 1:i9FA?A[X)p[K]rcBCF1n_u6>!p7F@'ELY]N3O]s.od6?KoHF@'NOZZKYs]sVrkB"bWp@UZsZFCK@
  50. *\9)1j]t"JlD0!>%FDZ*4]QA"&]tJN)8%lWYD.1,mFDZ$2^iXF8]tk%tD.L>sFDQ!2`,og:]u>)0A\
  51. H**ChCB$FDOF[aE26,]u^V'CiR/2FDQ'4bB.Q2^!(S7G.l."CN@,7<,5FGcr=e%^!R0dCM(9.<,5pU
  52. do:+&^!p"s<5$g]CLk-0<,6-[f2Q[/^"E`lDf`VG<,ZB^gJi*"^"cS*EP:1-DcFF,<,Z<\hc+<#^#0
  53. 5sC3%#I<,-Kfj&Bc*^#W.-9tfXfC14g<<,-Edk>Z1q^$#f&C1P$B<,collVqh8^$J]pF1ps?BQCfT<
  54. +p?dn5O(4^$uG/BP+sK<+o">o2KC3^%>9;EP;$EBOngM<(h8Fpf'n-^%i"792rV$<(L!%r)?@2^&Cu
  55. )B"js<9OYZ0<(q;GUJu,O^8;6:DKEOi<,Q<^W)RYC^8Y(LEPAGPDIgJ^<(^-(X].W.^9@rD@V!3X<,
  56. HZiZW(d_^9gjVB"kZPD,%aQ<,G+=[o@3Q^:4MLD/m;#<)%GJ]2VL:^:[E>@D9ESCi[8)<,?Wi^f5,^
  57. ^;1.UCgk&p<,?Qg_c1Go^;NueAA6#nCN@/0A8?8#aCK'Y^<$^mCIl1^A8>ekb@GBY^<C,'9tnk_CIZ
  58. %`A8>VfcX^g2^<d3tCNR;<A8>/YdU[-(^=-V.GeV[<CNdGBA8cM&f48f@^=Wd'De?`:A8bnjg15,A^
  59. >!1:FM?O@DcFI,A8c"mhIL>@^>K?/Blh#IA8,Yiiacah^>ia<@D:f5BlUlKA8-/"k%&1:^?5i6Bm@A
  60. UA8,\jl"!S2^?]<*B"mVB:N=,9A86/!mpp0S^@2J?C.c51A85\inmlKI^@PlM8&"V+C/)G8A85Pep1
  61. .oX^@qtFC.#`1A865#q.+5>^A;ATAA7qOC3RDiA86G)rFBYd^A\IME,r^fA8lV)UL\=U^SGCZ@DAXL
  62. E,iXiA8lY*VdsaW^ShKMF`P6sA9CebX(6?o^T:sgB"tHYF\TWRA9C2QY@Mca^T\&UF`G1$A9C8SZ=J
  63. *"^U%Hn<55eNF_&7pA9E.3[UaN(^UFP\F_AJ!A5I?^\n"WL^Un#Q@DBHc:iX7`A5IB_^1:&>^V:+dB
  64. QCl(A8$&!_IR=l^VaSq8&)uQBMH7\A8"`Q`aiaP^W-[lBOSZsA8#tta^f(,^WL)#AA?;uBOeg$A4ps
  65. XXc=BRh^X!6t94krcA4p@Gd:>mi^X?XcFMH:892r[UA4pIJeRV3k^Xig'89;PuA4U.DfjmWq^Y33hAA
  66. ?l09QIo(A5%'ZhIK;l^Y]B/9OY]oA5%!XiFGW(^Z&ctAA@/8H#g[]A9i72k%&aL^ZPr7H""JOA9i10
  67. l"#']^Zo?TAA@G@DK<MZA8ZJ'mUU3I^[DM?DF_J2A8Y,VnRQNG^[boQEPM*UDKNYcA8Yqmojg[8^\8
  68. (G8oqcBA4gIKq.**+^\VJ5EPMB]8lWS'A4gCIrFAZD^nD*G:344FA56aPUL[,.^nbL9EPSD]:1V/;A
  69. 3t=PW+859^o7ZO6>"$5A3s_?X(4P:^oV'5FMP"h6=dm7A7BSpY[h3a^p+5W@V3E]A7Au_ZXdNb^pIW
  70. ]FMP:p@V!9_A7B&a[q'>r^pse_D0*M(A8Pqo]4>bZ^q=2p@DKQeD/mA*A8QG(^LV1l^q^:fD0Ne3A8
  71. Phl_IRM0^r']"Geh7.D0E_6A8Ptp`aheb^rQjn9kM2_A5-LJb%+4g^rp8)Ekoq1CidD;A8GkncX^i^
  72. ^sEF!Ce_^mA8F`NdU[0&^sch1EPU(7CimJCA8G5\emrT-^t/p(Cj3\IA8HG)flq4P^tX'KF26RTCIl
  73. 7sGACd*hKNaI^u#KCCJDV&GACX&iHK'W^uBQRFMQp\CK/+1GACa)j`bKa^ubuJDfWYWGAhQ<l$%&X_
  74. !6,^@DM2QDfNSZGAhT=m<<JJ_!VPRDe-ZPGA2*5nTS\g_")\`8AOh@BkG0QGA1L$olk+\_"J+Z:NO>
  75. HG>Dhdq0-Ro_#&=jF27]tC1b9[GA9jfrc`*c_4_3[C2q(aGA;69UN^H`_5)9iGJU,"E,rdmGAqW>W-
  76. <2m_5RccE+-S_GAqQ<X*8N)_5qj"AAPBlF`YC&GBIN6Y]k4u_6F>kF`G7'GBHm$ZZgP&_6eE"El#5/
  77. BQM#"GA(U)\T_^]_7BttBOS`hGA)!4]Q\%2_7b&+AAQ!(BQq;-GA(L&^isI)_8-J&96.kdG=uPa`-4
  78. jo_8UUkFMYt@94YlZG=Y]La`g9d_9*+/9QS%oG>)Vbc$)ii_9R6uEP]tF9Q\+tG>)P`d<BkV_:&a8H
  79. #pgOGBm`8eTYnO_:NmKF2?LQDJ$`<GA]peg37F/_:o<@DILB:GA_E:h03aY_;9BRAAR/I8lWXcG=$>
  80. djEEq3_;u#J6>"'rG=#`SkBB74_<?)0FM[3c@WTBOG@G1#luuoI_<hSRD0!J]GAVE;n98_]_=;_d@D
  81. VMYD/mD`GAVH<oQP.__=\.ZCi[AdGAM?:pigOc_>/:kB#4=fCe_bCGAL^(r-)ss_>O^bCimMmGALg,
  82. Tm(<s_P26jGf$5"Cj*[k=)2inVH7PS_P[`BCIl=@=)2EbWE3k$_Q$[Q@D]'HCN74m=)2opX]K:;_QF
  83. 5ICLk;c=)W,rYubjb_Qm6]B#:lUDdgMi=)W)q[9%9g_R9eQDcFT_=)VWd\6!Bc_R`f_AAYr[C3%2)=
  84. ))fn^/o&]_S6FZC14up=))`l_,kAn_STAh<5QOSC1P3"=)_]e``I:^_T3'cBQCu4=(lZlb?&@h_TZ(
  85. p@D^8jBQ:o7=(l]mcW=dj_U&WkBOep,=%dSNdoT1S_UMX[<5R0e86!IX=%m\PfiLjZ_V,>u9OYfm=%
  86. mVNgfJc3_VJ:2El-^8DKE\Q=)MWeiE'o*_Vto(DK3PR=)MQcjB"rQ_WFolAA[M2D.1<I=)E&rlrS%7
  87. _X.\3Ci[D]=);rpn5jF<_XU]D@D_S:CiR>`=);EaoN,jQ_Y"7;ChLWY@r$,%pg\)\_YI\W8Ab45CM(
  88. H\@r#Mir*sM^_YjgOCNRGm@r#&]TjqkK_kLXVGJg1cDfWal@rHG+VIOOV_l!iODdgP^@rHA)WFKjg_
  89. l@3b<5YbHDe-be@qg#%Y%)0:_ljDWBkG8e@qfAhZ"%KY_m3ceEl57oC3.;#@qoVn[UX&\_m]t_C2q/
  90. $@qp,'\RTAR_n'>mAAc#hE,rk0@rQM,^12+o_nQOgE+-Z"@rQG*_..G+_noo&AAc;pF`YI>@s(bg`a
  91. _hd_oN0p:h7Jc@q]o#b@>4,_ouV(B#Dl'BOSg(@q]l"cXUX1_pAa#BOo$.@nUm\dpl$__pi0hAAcr-
  92. 9QS,'@n^LPfOIT`_q>B,9Q@u(@n_!^gLEof_q\aI@Dgr3DK<YQ@r?A*iF?b;_r;#5DILHC@r?;(jC<
  93. (L_rYBGAAdP>8lW^l@nq*_l=3/%_s@_?6>".&@mXVAmUJS'_s_)%FMmTX6=e"(@q'Mso4)6A_t4:G@
  94. U[1I@q&udp1%r[_t[_YF2Rf`D.^]^@r5YlqdXJ__u'jOD03\o@r5boraTbb`1gaXF2Xh`Ch:P\@r,b
  95. qV.4=3`23lOCgk8[@r-/'W+0Xc`2R6_AAkKoCN@@pH>@T?Xa4bp`3'GnCLP/bH>@N=Y^1),`3FW(AA
  96. kd"DfWe'H>dlC[<cb'`3p#!DdgSnH>dfA\9`(8`4:24<5c@oDe-euH>.E<]m=C'`4cS)C3%8.H>7N>
  97. _0Tj-`56h8B#MT5C15'!H>7H<`Hl9@`5W.1C/i-lH>7!/aEhfG`6*CFF2Z7JE+[&4H>m<2c$F>K`6J
  98. ^9E-0%EH>mE5d!BhU`6rsSB#N/EF^`5<H?F5GeTu@[`7>9AF]?<2H?Ec:fQq4O`7oTOF2Zj[BP,3=H
  99. >$a*hKijT`8:oJBQV2NH>$j-iHe.;`8c/:F2[-c94l-(H:q\bk'B[2`9.JR87]['H;%qhl[!Gh`9qq
  100. hF2[NnDJ$iVH>[00nTo(m`:=7]DKNhgH>[93oQj,N`:eLLB#OFi8n>m8H;8"hqKbJK`;Bsg6?C*DH9
  101. u5^rd$n>`M%TEEQ+Yu6?L2AH9u/]Uj?Kk`MNug@V3TWH=C=%W-W<$`N"6$F2b2+D.^bgH>R*0Xa4i(
  102. `NBPoD.LVhH>IW@Z$L5-`Njf+B#V*&Cgk;iH>IT?[<cY2`O6,"Ch1MoG\_?=\Thn2`O^;0B#VB,CIc
  103. @VG\^a,]m+=4`P)\(CNRP1G\^9t^j'X*`PHe;ElGq@Df`n9G].35`HZ<0`Pr70DfNb:G].]CaEVW&`
  104. Q<@CAAu]9Bk53,G\V9<c?O)F`Qnm9C1bH3G\Tsld<KD7`R9!GEQ-COC37GEG\U3seTbh>`RYB@E,rq
  105. MG]7`Cfm%IJ`S,QU@E$uGE,ikPG]7cDh0<mL`SLrHF`YO[G]d!)iHS1?`T)2VElI-bBQM/TG\C^.kB
  106. LZK`TRYRBQ;#UG\D3<l?HuQ`Tqb^G/`fm968)?GYE1tnT[`L`UX@\9Ou-6G]%Q@p3:Ir`V4UpB#XOi
  107. DILN[G]%N?qKQn"`VU!eDIg`aGY1rSrcgbM`hRcFF2k##6>"66GX>iYVKbFI`hs/g6=e*7G[ba6Wd%
  108. ub`iF>n@E,Bn@V!K\G\qK@YBXo*`ioepD.U_lG\q'4Z?U4\`j9o,@E,[!D/mS'G\qQB[WkMf`jcA#9
  109. kMDUGYMVd\p-qh`k-J3ElPe;CidV1G\h!3^NaR'`kVq+CiRJ2G\hKA_K]m-`kut8ElQ(ACJr0lG&)0
  110. =a*)61`lJL1CJDgjG&(O+b'%Q?`liO@FN2OJCK/<uG&(X.c?<uJ`m5!8DfWkFG&MHAdWTP@`m]*L@E
  111. -f?DfNeIG&MKBeokt2`n(Q@De-l?G%l!:g3.4O`nY`PF2m$ZC1bKBG%tI*hf`aS`o%2IC37JSG%t!r
  112. ic]'I`oD5]ElR3aE-'%]G&V'5kB:fQ`ombQE,in^G&VQCl?7,W`p7ejF2mTjF_8Y]G'.65mrihn`pa
  113. =YF]?BNG'.?8nodiA`q4FNEQ7Zp:is_NG%bp9pi^=l`q]sbBP,9\G%b=(qfZXm`r(!nFN49&BOo-^G
  114. "ZAdU394Oa.s&cH#q$'G'R]?Vfm?*a/F0,FN:A(DK<duG&DBAXEJJma/o\lDJ$qlG&C$pYBFela09`
  115. )EQ>>-DKNq)G&Cj2ZZ\rOa0c7t6?C2VG!]f]\9:2Ia16@[FN:t9@WTT&G%,((]lmjna1_n(@W]Z*G%
  116. ,"&^ijR9a23":B#hf4D.1K'G&;6>`HH*?a2SI0Ci[S;G&26?a`_K4a3&RA@E6Q7CiRM>G&29@c$!o6
  117. a3G$)CN@JBB5;S/d:[6,a3nU96H@PfCLP95B5;M-eRrZ>a4:T1CLkK;B5_h2fk55Ea4b0EB#iY=Ddg
  118. ]AB5_e1h.LYJa5./9DcFd7B5_>$i+Hb7a5U`HEl[6RC3.GWB52&!k%AF'a6*eBC150HB52G,l"=aQa
  119. 6I;PAB4"KE,s"dB5hq4mUpKNa6s@JE+-fVB5hk2nRlf_a7<k^AB4:SF`POqB6A:9p1JM[a7fpRF^`>
  120. cB6A47q.Fhla80Fk<6+lKF_&PjB2EZirb#&>aIrrR:iXRNB4u>,Uh=@^aJEN_B#pi^BL9e<B4t_pW+
  121. Td`aJfMZBQV=qB4thsX(Q*jaK0#IElbCr9681XB1ljXY\-UNaKZ(b94Z,LB1R'aZtDpNaL,YOFNCn'
  122. 87]fNB2!?e\S"TWaLV^k9P2AXB2!<d]Oso[aLu4[AB;JtH#q'BB6e+1_.S%5aMJ9sH$%-FB5Vb2`Fj
  123. (0aMqk1B#r#*DF2FcB5V/!a_,L5aN=j&DIgi3B1d6dc"BX\aNeEj@E?c-8n?#iB23KgdUu<raO:K/:
  124. 1hSsB23!YeRq3haOb&kF3*!H6>"<lB0p%Jg1N`laP.&76?L<(B0p.Mh.L2;aPUW>F3*9P@V3^?B4>;
  125. jib)_BaQ!V?@V!R@B5M\1k%AOPaQI2Q8BC"-D.UfQB5M8%l=Xs(aQj1GD.1NPB5MY0m:U9XaR3\XAB
  126. =4PD0X.kB2*Hgnn1[/aR]aO9ju-8B2*Beok.!0aS'7_Ele#gCid\nB5D2$qIaVQaSQ<WCiRPoB5D\2
  127. rF]qWaSl/>
  128. xbtoa End N 11862 2e56 E 24 S 193cbe R c50565ec
  129. SHAR_EOF
  130. echo 'File kterm-4.1.2/n2ks is complete' &&
  131. chmod 0664 kterm-4.1.2/n2ks ||
  132. echo 'restore of kterm-4.1.2/n2ks failed'
  133. Wc_c="`wc -c < 'kterm-4.1.2/n2ks'`"
  134. test 15081 -eq "$Wc_c" ||
  135.     echo 'kterm-4.1.2/n2ks: original size 15081, current size' "$Wc_c"
  136. rm -f _shar_wnt_.tmp
  137. fi
  138. # ============= kterm-4.1.2/patchlevel.h ==============
  139. if test -f 'kterm-4.1.2/patchlevel.h' -a X"$1" != X"-c"; then
  140.     echo 'x - skipping kterm-4.1.2/patchlevel.h (File already exists)'
  141.     rm -f _shar_wnt_.tmp
  142. else
  143. > _shar_wnt_.tmp
  144. echo 'x - extracting kterm-4.1.2/patchlevel.h (Text)'
  145. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/patchlevel.h' &&
  146. #define patchlevel 6
  147. SHAR_EOF
  148. chmod 0664 kterm-4.1.2/patchlevel.h ||
  149. echo 'restore of kterm-4.1.2/patchlevel.h failed'
  150. Wc_c="`wc -c < 'kterm-4.1.2/patchlevel.h'`"
  151. test 21 -eq "$Wc_c" ||
  152.     echo 'kterm-4.1.2/patchlevel.h: original size 21, current size' "$Wc_c"
  153. rm -f _shar_wnt_.tmp
  154. fi
  155. # ============= kterm-4.1.2/ptyx.h ==============
  156. if test -f 'kterm-4.1.2/ptyx.h' -a X"$1" != X"-c"; then
  157.     echo 'x - skipping kterm-4.1.2/ptyx.h (File already exists)'
  158.     rm -f _shar_wnt_.tmp
  159. else
  160. > _shar_wnt_.tmp
  161. echo 'x - extracting kterm-4.1.2/ptyx.h (Text)'
  162. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/ptyx.h' &&
  163. /*
  164. X *    $XConsortium: ptyx.h,v 1.40 89/12/14 18:49:38 jim Exp $
  165. X *    $Kagotani: /usr/src.yoshi/X/KTerm/4.1.0/RCS/ptyx.h,v 1.1 90/06/27 09:39:38 kagotani Rel $
  166. X *
  167. X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/ptyx.h,v 1.6 1991/03/17 23:48:41 mleisher Exp $
  168. X */
  169. X
  170. /*
  171. X * Modified for Hanzi support:
  172. X * Mark Leisher mleisher@nmsu.edu Fri Nov  9 09:22:33 1990
  173. X */
  174. X
  175. #include "kterm.h"
  176. X
  177. #include <X11/copyright.h>
  178. X
  179. /*
  180. X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
  181. X *
  182. X *                         All Rights Reserved
  183. X *
  184. X * Permission to use, copy, modify, and distribute this software and its
  185. X * documentation for any purpose and without fee is hereby granted,
  186. X * provided that the above copyright notice appear in all copies and that
  187. X * both that copyright notice and this permission notice appear in
  188. X * supporting documentation, and that the name of Digital Equipment
  189. X * Corporation not be used in advertising or publicity pertaining to
  190. X * distribution of the software without specific, written prior permission.
  191. X *
  192. X *
  193. X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  194. X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  195. X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  196. X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  197. X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  198. X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  199. X * SOFTWARE.
  200. X */
  201. X
  202. /* ptyx.h */
  203. /* @(#)ptyx.h    X10/6.6    11/10/86 */
  204. X
  205. #include <X11/IntrinsicP.h>
  206. #include <X11/Xmu/Misc.h>    /* For Max() and Min(). */
  207. #include <signal.h>        /* for SIGTSTP */
  208. X
  209. /* Extra Xlib definitions */
  210. #define AllButtonsUp(detail, ignore)  (\
  211. X        ((ignore) == Button1) ? \
  212. X                (((detail)&(Button2Mask|Button3Mask)) == 0) \
  213. X                : \
  214. X         (((ignore) == Button2) ? \
  215. X                  (((detail)&(Button1Mask|Button3Mask)) == 0) \
  216. X                : \
  217. X                  (((detail)&(Button1Mask|Button2Mask)) == 0)) \
  218. X        )
  219. X
  220. #define MAX_COLS    200
  221. #define MAX_ROWS    128
  222. X
  223. /*
  224. ** System V definitions
  225. */
  226. X
  227. #ifdef SYSV
  228. X
  229. #define    killpg(x,sig)    kill(-x,sig)
  230. X
  231. #ifndef CRAY
  232. #define    dup2(fd1,fd2)    ((fd1 == fd2) ? fd1 : \
  233. X                (close(fd2), fcntl(fd1, F_DUPFD, fd2)))
  234. #endif
  235. X
  236. #endif    /* !SYSV */
  237. X
  238. /*
  239. ** allow for mobility of the pty master/slave directories
  240. */
  241. #ifndef PTYDEV
  242. #ifdef hpux
  243. #define    PTYDEV        "/dev/ptym/ptyxx"
  244. #else    /* !hpux */
  245. #define    PTYDEV        "/dev/ptyxx"
  246. #endif    /* !hpux */
  247. #endif    /* !PTYDEV */
  248. X
  249. #ifndef TTYDEV
  250. #ifdef hpux
  251. #define TTYDEV        "/dev/pty/ttyxx"
  252. #else    /* !hpux */
  253. #define    TTYDEV        "/dev/ttyxx"
  254. #endif    /* !hpux */
  255. #endif    /* !TTYDEV */
  256. X
  257. #ifndef PTYCHAR1
  258. #ifdef hpux
  259. #define PTYCHAR1    "zyxwvutsrqp"
  260. #else    /* !hpux */
  261. #define    PTYCHAR1    "pqrstuvwxyz"
  262. #endif    /* !hpux */
  263. #endif    /* !PTYCHAR1 */
  264. X
  265. #ifndef PTYCHAR2
  266. #ifdef hpux
  267. #define    PTYCHAR2    "fedcba9876543210"
  268. #else    /* !hpux */
  269. #define    PTYCHAR2    "0123456789abcdef"
  270. #endif    /* !hpux */
  271. #endif    /* !PTYCHAR2 */
  272. X
  273. #ifdef KTERM_KANJI
  274. # ifndef WCHAR_T
  275. #  define WCHAR_T
  276. typedef unsigned short wchar_t;
  277. # endif /* WCHAR_T */
  278. #endif /* KTERM_KANJI */
  279. X
  280. /* Until the translation manager comes along, I have to do my own translation of
  281. X * mouse events into the proper routines. */
  282. X
  283. typedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode;
  284. X
  285. /*
  286. X * The origin of a screen is 0, 0.  Therefore, the number of rows
  287. X * on a screen is screen->max_row + 1, and similarly for columns.
  288. X */
  289. X
  290. typedef unsigned char Char;        /* to support 8 bit chars */
  291. X
  292. #ifdef KTERM
  293. typedef struct {
  294. X    Char gset;
  295. X    Char code;
  296. X    Char attr;
  297. } Bchr;
  298. typedef Bchr **ScrnBuf;
  299. #else /* !KTERM */
  300. typedef Char **ScrnBuf;
  301. #endif /* !KTERM */
  302. X
  303. /*
  304. X * ANSI emulation.
  305. X */
  306. #define INQ    0x05
  307. #define    FF    0x0C            /* C0, C1 control names        */
  308. #define    LS1    0x0E
  309. #define    LS0    0x0F
  310. #define    CAN    0x18
  311. #define    SUB    0x1A
  312. #define    ESC    0x1B
  313. #define US    0x1F
  314. #define    DEL    0x7F
  315. #define HTS     ('H'+0x40)
  316. #define    SS2    0x8E
  317. #define    SS3    0x8F
  318. #define    DCS    0x90
  319. #define    OLDID    0x9A            /* ESC Z            */
  320. #define    CSI    0x9B
  321. #define    ST    0x9C
  322. #define    OSC    0x9D
  323. #define    PM    0x9E
  324. #define    APC    0x9F
  325. #define    RDEL    0xFF
  326. X
  327. #define NMENUFONTS 7            /* entries in fontMenu */
  328. X
  329. #define    NBOX    5            /* Number of Points in box    */
  330. #define    NPARAM    10            /* Max. parameters        */
  331. X
  332. #define    MINHILITE    32
  333. X
  334. typedef struct {
  335. X    unsigned char    a_type;
  336. X    unsigned char    a_pintro;
  337. X    unsigned char    a_final;
  338. X    unsigned char    a_inters;
  339. X    char    a_nparam;        /* # of parameters        */
  340. X    char    a_dflt[NPARAM];        /* Default value flags        */
  341. X    short    a_param[NPARAM];    /* Parameters            */
  342. X    char    a_nastyf;        /* Error flag            */
  343. } ANSI;
  344. X
  345. typedef struct {
  346. X    int        row;
  347. X    int        col;
  348. X    unsigned    flags;    /* Vt100 saves graphics rendition. Ugh! */
  349. X    char        curgl;
  350. X    char        curgr;
  351. #ifdef KTERM
  352. X    Char        gsets[4];
  353. #else /* !KTERM */
  354. X    char        gsets[4];
  355. #endif /* !KTERM */
  356. } SavedCursor;
  357. X
  358. #define TEK_FONT_LARGE 0
  359. #define TEK_FONT_2 1
  360. #define TEK_FONT_3 2
  361. #define TEK_FONT_SMALL 3
  362. #define    TEKNUMFONTS 4
  363. X
  364. /* Actually there are 5 types of lines, but four are non-solid lines */
  365. #define    TEKNUMLINES    4
  366. X
  367. typedef struct {
  368. X    int    x;
  369. X    int    y;
  370. X    int    fontsize;
  371. X    int    linetype;
  372. } Tmodes;
  373. X
  374. typedef struct {
  375. X    int Twidth;
  376. X    int Theight;
  377. } T_fontsize;
  378. X
  379. typedef struct {
  380. X    short *bits;
  381. X    int x;
  382. X    int y;
  383. X    int width;
  384. X    int height;
  385. } BitmapBits;
  386. X
  387. #define    SAVELINES        64      /* default # lines to save      */
  388. #define SCROLLLINES 1            /* default # lines to scroll    */
  389. X
  390. #ifdef KTERM
  391. # define LINESPACE    0        /* default space between lines    */
  392. # define F_ISO8859_1    0
  393. # define F_JISX0201_0    (F_ISO8859_1 + 1)
  394. # ifdef KTERM_KANJI
  395. #  define F_JISX0208_0    (F_JISX0201_0 + 1)
  396. #  define FCNT        (F_JISX0208_0 + 1)
  397. # else
  398. #  define FCNT        (F_JISX0201_0 + 1)
  399. # endif
  400. X
  401. #ifdef KTERM_HANZI
  402. #define F_GB2312_0   (F_JISX0208_0 + 1)
  403. # ifdef FCNT
  404. #  undef FCNT
  405. # endif
  406. #define FCNT        (F_GB2312_0 + 1)
  407. #endif /* KTERM_HANZI */
  408. X
  409. #ifdef KTERM_HANGUL
  410. # ifdef KTERM_HANZI
  411. #  define F_KSC5601_0  (F_GB2312_0 + 1)
  412. # else
  413. #  define F_KSC5601_0  (F_JISX0208 + 1)
  414. # endif
  415. # ifdef FCNT
  416. #  undef FCNT
  417. # endif
  418. #define FCNT (F_KSC5601_0 + 1)
  419. #endif /* KTERM_HANGUL */
  420. X
  421. /*
  422. X * Changing FNUM to int fontno() to simplify adding other charsets
  423. X * later.  The fontno() function located in charproc.c.
  424. X * M. Leisher
  425. X */
  426. X
  427. int fontno(/* int gs */);
  428. X
  429. #define FNUM(gs) fontno(gs)
  430. X
  431. int FontType(/* TScreen *screen, int fnum, bold */);
  432. X
  433. #endif /* KTERM */
  434. X
  435. typedef struct {
  436. /* These parameters apply to both windows */
  437. X    Display        *display;    /* X display for screen        */
  438. X    int        respond;    /* socket for responses
  439. X                       (position report, etc.)    */
  440. X    long        pid;        /* pid of process on far side   */
  441. X    int        uid;        /* user id of actual person    */
  442. X    int        gid;        /* group id of actual person    */
  443. #ifdef KTERM
  444. X    GC        _normalGC[FCNT];
  445. X    GC        _reverseGC[FCNT];
  446. X    GC        _normalboldGC[FCNT];
  447. X    GC        _reverseboldGC[FCNT];
  448. X    GC        _cursorGC[FCNT];
  449. X    GC        _reversecursorGC[FCNT];
  450. # define normalGC        _normalGC[fnum]
  451. # define reverseGC        _reverseGC[fnum]
  452. # define normalboldGC        _normalboldGC[fnum]
  453. # define reverseboldGC        _reverseboldGC[fnum]
  454. # define cursorGC        _cursorGC[fnum]
  455. # define reversecursorGC    _reversecursorGC[fnum]
  456. #else /* !KTERM */
  457. X    GC        normalGC;    /* normal painting        */
  458. X    GC        reverseGC;    /* reverse painting        */
  459. X    GC        normalboldGC;    /* normal painting, bold font    */
  460. X    GC        reverseboldGC;    /* reverse painting, bold font    */
  461. X    GC        cursorGC;    /* normal cursor painting    */
  462. X    GC        reversecursorGC;/* reverse cursor painting    */
  463. #endif /* !KTERM */
  464. X    GC        cursoroutlineGC;/* for painting lines around    */
  465. X    Pixel        foreground;    /* foreground color        */
  466. X    Pixel        cursorcolor;    /* Cursor color            */
  467. X    Pixel        mousecolor;    /* Mouse color            */
  468. X    Pixel        mousecolorback;    /* Mouse color background    */
  469. #ifdef    COLOR_TEXT    /* mukawa */
  470. X    Pixel        textcolor[8];    /* text color            */
  471. #endif    COLOR_TEXT
  472. X    int        border;        /* inner border            */
  473. X    Cursor        arrow;        /* arrow cursor            */
  474. X    unsigned short    send_mouse_pos;    /* user wants mouse transition  */
  475. X                    /* and position information    */
  476. X    int        select;        /* xterm selected        */
  477. X    Boolean        visualbell;    /* visual bell mode        */
  478. X    int        logging;    /* logging mode            */
  479. X    Boolean        allowSendEvents;/* SendEvent mode        */
  480. X    Boolean        grabbedKbd;    /* keyboard is grabbed        */
  481. X    int        logfd;        /* file descriptor of log    */
  482. X    char        *logfile;    /* log file name        */
  483. X    unsigned char    *logstart;    /* current start of log buffer    */
  484. X    int        inhibit;    /* flags for inhibiting changes    */
  485. X
  486. /* VT window parameters */
  487. X    struct {
  488. X        Window    window;        /* X window id            */
  489. X        int    width;        /* width of columns        */
  490. X        int    height;        /* height of rows        */
  491. X        int    fullwidth;    /* full width of window        */
  492. X        int    fullheight;    /* full height of window    */
  493. X        int    f_width;    /* width of fonts in pixels    */
  494. X        int    f_height;    /* height of fonts in pixels    */
  495. X    } fullVwin;
  496. X    Cursor pointer_cursor;        /* pointer cursor in window    */
  497. X
  498. X    /* Terminal fonts must be of the same size and of fixed width */
  499. #ifdef KTERM
  500. X    XFontStruct    *_fnt_norm[FCNT];
  501. X    XFontStruct    *_fnt_bold[FCNT];
  502. X    int        _enbolden[FCNT];
  503. X    XPoint        *_box[FCNT];
  504. # define fnt_norm        _fnt_norm[fnum]
  505. # define fnt_bold        _fnt_bold[fnum]
  506. # define enbolden        _enbolden[fnum]
  507. # define box            _box[fnum]
  508. X    int        linespace;    /* space between lines        */
  509. X    int        max_ascent;
  510. X    int        max_descent;
  511. #else /* !KTERM */
  512. X    XFontStruct    *fnt_norm;    /* normal font of terminal    */
  513. X    XFontStruct    *fnt_bold;    /* bold font of terminal    */
  514. X    int        enbolden;    /* overstrike for bold font    */
  515. X    XPoint        *box;        /* draw unselected cursor    */
  516. #endif /* !KTERM */
  517. X
  518. X    int        cursor_state;    /* ON or OFF            */
  519. X    int        cursor_set;    /* requested state        */
  520. X    int        cursor_col;    /* previous cursor column    */
  521. X    int        cursor_row;    /* previous cursor row        */
  522. X    int        cur_col;    /* current cursor column    */
  523. X    int        cur_row;    /* current cursor row        */
  524. X    int        max_col;    /* rightmost column        */
  525. X    int        max_row;    /* bottom row            */
  526. X    int        top_marg;    /* top line of scrolling region */
  527. X    int        bot_marg;    /* bottom line of  "        "    */
  528. X    Widget        scrollWidget;    /* pointer to scrollbar struct    */
  529. X    int        scrollbar;    /* if > 0, width of scrollbar, and
  530. X                        scrollbar is showing    */
  531. X    int        topline;    /* line number of top, <= 0    */
  532. X    int        savedlines;     /* number of lines that've been saved */
  533. X    int        savelines;    /* number of lines off top to save */
  534. X    int        scrolllines;    /* number of lines to button scroll */
  535. X    Boolean        scrollttyoutput; /* scroll to bottom on tty output */
  536. X    Boolean        scrollkey;    /* scroll to bottom on key    */
  537. X    
  538. X    ScrnBuf        buf;        /* screen buffer (main)        */
  539. X    ScrnBuf        allbuf;        /* screen buffer (may include
  540. X                       lines scrolled off top    */
  541. X    char        *sbuf_address;    /* main screen memory address   */
  542. X    ScrnBuf        altbuf;        /* alternate screen buffer    */
  543. X    char        *abuf_address;    /* alternate screen memory address */
  544. X    Boolean        alternate;    /* true if using alternate buf    */
  545. X    unsigned short    do_wrap;    /* true if cursor in last column
  546. X                       and character just output    */
  547. X    int        incopy;        /* 0 if no RasterCopy exposure
  548. X                       event processed since last
  549. X                       RasterCopy            */
  550. X    Boolean        c132;        /* allow change to 132 columns    */
  551. X    Boolean        curses;        /* cludge-ups for more and vi    */
  552. X    Boolean        marginbell;    /* true if margin bell on    */
  553. X    int        nmarginbell;    /* columns from right margin    */
  554. X    int        bellarmed;    /* cursor below bell margin    */
  555. X    Boolean     multiscroll;    /* true if multi-scroll        */
  556. X    int        scrolls;    /* outstanding scroll count    */
  557. X    SavedCursor    sc;        /* data for restore cursor    */
  558. X    int        save_modes[19];    /* save dec private modes    */
  559. #ifdef STATUSLINE
  560. X    Boolean     statusline;    /* status line showing        */
  561. X    Boolean     reversestatus;    /* status line reversed        */
  562. X    Boolean     instatus;    /* cursor in status line    */
  563. X    int         statusheight;    /* status line height        */
  564. X    SavedCursor     statussc;    /* status line restore cursor    */
  565. #endif /* STATUSLINE */
  566. X
  567. X    /* Improved VT100 emulation stuff.                */
  568. #ifdef KTERM
  569. X    Char        gsets[4];    /* G0 through G3.        */
  570. #else /* !KTERM */
  571. X    char        gsets[4];    /* G0 through G3.        */
  572. #endif /* !KTERM */
  573. X    char        curgl;        /* Current GL setting.        */
  574. X    char        curgr;        /* Current GR setting.        */
  575. X    char        curss;        /* Current single shift.    */
  576. X    int        scroll_amt;    /* amount to scroll        */
  577. X    int        refresh_amt;    /* amount to refresh        */
  578. X    Boolean        jumpscroll;    /* whether we should jumpscroll */
  579. X    Boolean         always_highlight; /* whether to highlight cursor */
  580. X
  581. /* Tektronix window parameters */
  582. X    GC        TnormalGC;    /* normal painting        */
  583. X    GC        TcursorGC;    /* normal cursor painting    */
  584. X    Pixel        Tforeground;    /* foreground color        */
  585. X    Pixel        Tbackground;    /* Background color        */
  586. X    Pixel        Tcursorcolor;    /* Cursor color            */
  587. X    int        Tcolor;        /* colors used            */
  588. X    Boolean        Vshow;        /* VT window showing        */
  589. X    Boolean        Tshow;        /* Tek window showing        */
  590. X    Boolean        waitrefresh;    /* postpone refresh        */
  591. X    struct {
  592. X        Window    window;        /* X window id            */
  593. X        int    width;        /* width of columns        */
  594. X        int    height;        /* height of rows        */
  595. X        int    fullwidth;    /* full width of window        */
  596. X        int    fullheight;    /* full height of window    */
  597. X        double    tekscale;    /* scale factor Tek -> vs100    */
  598. X    } fullTwin;
  599. X    XPoint        **Tbox;        /* draw unselected cursor    */
  600. X    int        xorplane;    /* z plane for inverts        */
  601. X    GC        linepat[TEKNUMLINES]; /* line patterns        */
  602. X    Boolean        TekEmu;        /* true if Tektronix emulation    */
  603. X    int        cur_X;        /* current x            */
  604. X    int        cur_Y;        /* current y            */
  605. X    Tmodes        cur;        /* current tek modes        */
  606. X    Tmodes        page;        /* starting tek modes on page    */
  607. X    int        margin;        /* 0 -> margin 1, 1 -> margin 2    */
  608. X    int        pen;        /* current Tektronix pen 0=up, 1=dn */
  609. X    char        *TekGIN;    /* nonzero if Tektronix GIN mode*/
  610. X    int        multiClickTime;     /* time between multiclick selects */
  611. X    char        *charClass;    /* for overriding word selection */
  612. X    Boolean        cutNewline;    /* whether or not line cut has \n */
  613. X    Boolean        cutToBeginningOfLine;  /* line cuts to BOL? */
  614. #ifdef KTERM
  615. X    Ichr        *selection;    /* the current selection */
  616. #else /* !KTERM */
  617. X    char        *selection;    /* the current selection */
  618. #endif /* !KTERM */
  619. X    int        selection_size; /* size of allocated buffer */
  620. X    int        selection_length; /* number of significant bytes */
  621. X    int        selection_time;    /* latest event timestamp */
  622. X    int        startHRow, startHCol, /* highlighted text */
  623. X            endHRow, endHCol,
  624. X            startHCoord, endHCoord;
  625. X    Atom*        selection_atoms; /* which selections we own */
  626. X    Cardinal    sel_atoms_size;    /*  how many atoms allocated */
  627. X    Cardinal    selection_count; /* how many atoms in use */
  628. X    Boolean        eight_bits;    /* use 8th bit instead of ESC prefix */
  629. X    Pixmap        menu_item_bitmap;    /* mask for checking items */
  630. X    Widget        mainMenu, vtMenu, tekMenu, fontMenu;
  631. #ifdef KTERM
  632. X    char*        menu_font_list[NMENUFONTS];
  633. X    char*        menu_bfont_list[NMENUFONTS];
  634. X    char*        _menu_font_names[FCNT][NMENUFONTS];
  635. X    char*        _menu_bfont_names[FCNT][NMENUFONTS];
  636. # define menu_font_names    _menu_font_names[fnum]
  637. # define menu_bfont_names    _menu_bfont_names[fnum]
  638. #else /* !KTERM */
  639. X    char*        menu_font_names[NMENUFONTS];
  640. #endif /* !KTERM */
  641. X    int        menu_font_number;
  642. } TScreen;
  643. X
  644. typedef struct _TekPart {
  645. X    XFontStruct *Tfont[TEKNUMFONTS];
  646. X    int        tobaseline[TEKNUMFONTS]; /* top to baseline for each font */
  647. X    char    *initial_font;        /* large, 2, 3, small */
  648. } TekPart;
  649. X
  650. X
  651. X
  652. /* meaning of bits in screen.select flag */
  653. #define    INWINDOW    01    /* the mouse is in one of the windows */
  654. #define    FOCUS        02    /* one of the windows is the focus window */
  655. X
  656. #define MULTICLICKTIME 250    /* milliseconds */
  657. X
  658. typedef struct
  659. {
  660. X    unsigned    flags;
  661. } TKeyboard;
  662. X
  663. typedef struct _Misc {
  664. X    char *geo_metry;
  665. X    char *T_geometry;
  666. #ifdef KTERM
  667. X    char *fontlist;
  668. X    char *bfontlist;
  669. X    char *_f_n[FCNT];
  670. X    char *_f_b[FCNT];
  671. # define f_n    _f_n[fnum]
  672. # define f_b    _f_b[fnum]
  673. #ifdef KTERM_KANJI
  674. X    char *k_m;
  675. #endif /* KTERM_KANJI */
  676. #ifdef KTERM_HANZI
  677. X    char   *hz_m;
  678. X    char   *hz_gb2big_tbl;
  679. X    char   *hz_big2gb_tbl;
  680. #endif /* KTERM_HANZI */
  681. #ifdef KTERM_HANGUL
  682. X    char   *hg_m;
  683. X    char   *hg_n2ks_tbl;
  684. #endif /* KTERM_HANGUL */
  685. X
  686. #ifdef KTERM_KANJI
  687. X    char *lang;             /* This will be the language being displayed. */
  688. #endif
  689. X
  690. #else /* !KTERM */
  691. X    char *f_n;
  692. X    char *f_b;
  693. #endif /* !KTERM */
  694. X    Boolean log_on;
  695. X    Boolean login_shell;
  696. X    Boolean re_verse;
  697. X    Boolean reverseWrap;
  698. X    Boolean logInhibit;
  699. X    Boolean signalInhibit;
  700. X    Boolean tekInhibit;
  701. X    Boolean scrollbar;
  702. X    Boolean titeInhibit;
  703. X    Boolean tekSmall;    /* start tek window in small size */
  704. #ifdef STATUSLINE
  705. X    Boolean statusnormal;
  706. #endif /* STATUSLINE */
  707. } Misc;
  708. X
  709. typedef struct {int foo;} XtermClassPart, TekClassPart;
  710. X
  711. typedef struct _XtermClassRec {
  712. X    CoreClassPart  core_class;
  713. X    XtermClassPart xterm_class;
  714. } XtermClassRec;
  715. X
  716. typedef struct _TekClassRec {
  717. X    CoreClassPart core_class;
  718. X    TekClassPart tek_class;
  719. } TekClassRec;
  720. X
  721. /* define masks for flags */
  722. #define CAPS_LOCK    0x01
  723. #define KYPD_APL    0x02
  724. #define CURSOR_APL    0x04
  725. X
  726. #define N_MARGINBELL    10
  727. #define MAX_TABS    320
  728. #define TAB_ARRAY_SIZE    10    /* number of ints to provide MAX_TABS bits */
  729. X
  730. typedef unsigned Tabs [TAB_ARRAY_SIZE];
  731. X
  732. typedef struct _XtermWidgetRec {
  733. X    CorePart    core;
  734. X    TKeyboard    keyboard;    /* terminal keyboard        */
  735. X    TScreen    screen;        /* terminal screen        */
  736. X    unsigned    flags;        /* mode flags            */
  737. X    unsigned    initflags;    /* initial mode flags        */
  738. X    Tabs    tabs;        /* tabstops of the terminal    */
  739. X    Misc    misc;        /* miscelaneous parameters    */
  740. } XtermWidgetRec, *XtermWidget;
  741. X
  742. typedef struct _TekWidgetRec {
  743. X    CorePart core;
  744. X    TekPart tek;
  745. } TekWidgetRec, *TekWidget;
  746. X
  747. #define BUF_SIZE 4096
  748. X
  749. /* masks for terminal flags */
  750. X
  751. #define INVERSE        0x01    /* invert the characters to be output */
  752. #define UNDERLINE    0x02    /* true if underlining */
  753. #define BOLD        0x04
  754. #define NL_TAG        0x08
  755. #define TAB_TAG        0x10
  756. #ifdef    COLOR_TEXT    /* mukawa */
  757. #define    COLOR_TEXT_MASK        0x78    /* text color RGB attribute. */
  758. #define    COLOR_TEXT_MASK2    0xf
  759. #define    COLOR_TEXT_SHIFT    3
  760. #define COLOR_TEXT_ADJUST    3
  761. #define    COLOR_TEXT0        0x18
  762. #define    COLOR_TEXT1        0x20
  763. #define    COLOR_TEXT2        0x28
  764. #define    COLOR_TEXT3        0x30
  765. #define    COLOR_TEXT4        0x38
  766. #define    COLOR_TEXT5        0x40
  767. #define    COLOR_TEXT6        0x48
  768. #define    COLOR_TEXT7        0x50
  769. #define WRAPAROUND    0x80
  770. #define REVERSE_VIDEO    0x100    /* true if screen white on black */
  771. #define ORIGIN        0x200    /* true if in origin mode */
  772. #define INSERT        0x400    /* true if in insert mode */
  773. #define SMOOTHSCROLL    0x800    /* true if in smooth scroll mode */
  774. #define IN132COLUMNS    0x1000    /* true if in 132 column mode */
  775. #define LINEFEED    0x2000
  776. #define    REVERSEWRAP    0x4000    /* true if reverse wraparound mode */
  777. #ifdef KTERM_KANJI
  778. #define    JIS_KANJI    0x8000    /* true if in JIS mode */
  779. #define    EUC_KANJI    0x10000    /* true if in EUC mode */
  780. #define    SJIS_KANJI    0x20000    /* true if in SJIS mode */
  781. #endif /* KTERM_KANJI */
  782. #ifdef KTERM_HANZI
  783. #define GUOBIAO_HANZI   0x40000 /* true if in GuoBiao mode */
  784. #define SGB_HANZI       0x80000 /* true if in Shift-GuoBiao mode */
  785. #define BIG5_HANZI      0x100000 /* true if in Big5 mode */
  786. #endif /* KTERM_HANZI */
  787. #ifdef KTERM_HANGUL
  788. #define KS_HANGUL       0x200000 /* true if in KS Hangul mode */
  789. #define NBYTE_HANGUL    0x400000 /* true if in N-byte Hangul mode */
  790. #endif /* KTERM_HANGUL */
  791. X
  792. #else    /* COLOR_TEXT */
  793. X
  794. #define WRAPAROUND    0x20
  795. #define REVERSE_VIDEO    0x40    /* true if screen white on black */
  796. #define ORIGIN        0x80    /* true if in origin mode */
  797. #define INSERT        0x100    /* true if in insert mode */
  798. #define SMOOTHSCROLL    0x200    /* true if in smooth scroll mode */
  799. #define IN132COLUMNS    0x400    /* true if in 132 column mode */
  800. #define LINEFEED    0x800
  801. #define    REVERSEWRAP    0x1000    /* true if reverse wraparound mode */
  802. #ifdef KTERM_KANJI
  803. #define    JIS_KANJI    0x2000     /* true if in JIS mode */
  804. #define    EUC_KANJI    0x4000     /* true if in EUC mode */
  805. #define    SJIS_KANJI    0x8000     /* true if in SJIS mode */
  806. #endif /* KTERM_KANJI */
  807. #ifdef KTERM_HANZI
  808. #define GUOBIAO_HANZI   0x10000  /* true if in GuoBiao mode */
  809. #define SGB_HANZI       0x20000  /* true if in Shift-GuoBiao mode */
  810. #define BIG5_HANZI      0x40000  /* true if in Big5 mode */
  811. #endif /* KTERM_HANZI */
  812. #ifdef KTERM_HANGUL
  813. #define KS_HANGUL       0x80000  /* true if in KS Hangul mode */
  814. #define NBYTE_HANGUL    0x100000 /* true if in N-byte Hangul mode */
  815. #endif /* KTERM_HANGUL */
  816. X
  817. #endif    /* COLOR_TEXT */
  818. X
  819. #define    ATTRIBUTES    0x07    /* attributes mask */
  820. #define CHAR        0177
  821. X
  822. #define VWindow(screen)        (screen->fullVwin.window)
  823. #define VShellWindow        term->core.parent->core.window
  824. #define TextWindow(screen)      (screen->fullVwin.window)
  825. #define TWindow(screen)        (screen->fullTwin.window)
  826. #define TShellWindow        tekWidget->core.parent->core.window
  827. #define Width(screen)        (screen->fullVwin.width)
  828. #define Height(screen)        (screen->fullVwin.height)
  829. #define FullWidth(screen)    (screen->fullVwin.fullwidth)
  830. #define FullHeight(screen)    (screen->fullVwin.fullheight)
  831. #define FontWidth(screen)    (screen->fullVwin.f_width)
  832. #ifdef KTERM
  833. #ifdef KTERM_KANJI
  834. /*
  835. X * These are the three types returned by the FontType() function
  836. X * in charproc.c
  837. X */
  838. #define NONE -1    /* Font doesn't exist. */
  839. #define HIGH  0    /* Font encoded 0xa1a1. */
  840. #define LOW   1    /* Font encoded 0x2121. */
  841. #define MIXED 2    /* Font encoded 0xa140 (Big5 special). */
  842. #endif /* KTERM_KANJI */
  843. X
  844. #define FontHeight(screen)    (screen->fullVwin.f_height + screen->linespace)
  845. /*
  846. #define FontHeight(screen)    (screen->fullVwin.f_height + term->misc.linespace)
  847. */
  848. #else /* !KTERM */
  849. #define FontHeight(screen)    (screen->fullVwin.f_height)
  850. #endif /* !KTERM */
  851. #define TWidth(screen)        (screen->fullTwin.width)
  852. #define THeight(screen)        (screen->fullTwin.height)
  853. #define TFullWidth(screen)    (screen->fullTwin.fullwidth)
  854. #define TFullHeight(screen)    (screen->fullTwin.fullheight)
  855. #define TekScale(screen)    (screen->fullTwin.tekscale)
  856. X
  857. #define CursorX(screen,col) ((col) * FontWidth(screen) + screen->border \
  858. X            + screen->scrollbar)
  859. #define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
  860. X            + screen->border)
  861. X
  862. #define    TWINDOWEVENTS    (KeyPressMask | ExposureMask | ButtonPressMask |\
  863. X             ButtonReleaseMask | StructureNotifyMask |\
  864. X             EnterWindowMask | LeaveWindowMask | FocusChangeMask)
  865. X
  866. #define    WINDOWEVENTS    (TWINDOWEVENTS | PointerMotionMask)
  867. X
  868. X
  869. #define TEK_LINK_BLOCK_SIZE 1024
  870. X
  871. typedef struct Tek_Link
  872. {
  873. X    struct Tek_Link    *next;    /* pointer to next TekLink in list
  874. X                   NULL <=> this is last TekLink */
  875. X    short count;
  876. X    char *ptr;
  877. X    char data [TEK_LINK_BLOCK_SIZE];
  878. } TekLink;
  879. X
  880. /* flags for cursors */
  881. #define    OFF        0
  882. #define    ON        1
  883. #define    CLEAR        0
  884. #define    TOGGLE        1
  885. X
  886. /* flags for inhibit */
  887. #define    I_LOG        0x01
  888. #define    I_SIGNAL    0x02
  889. #define    I_TEK        0x04
  890. X
  891. extern Cursor make_colored_cursor();
  892. SHAR_EOF
  893. chmod 0664 kterm-4.1.2/ptyx.h ||
  894. echo 'restore of kterm-4.1.2/ptyx.h failed'
  895. Wc_c="`wc -c < 'kterm-4.1.2/ptyx.h'`"
  896. test 21948 -eq "$Wc_c" ||
  897.     echo 'kterm-4.1.2/ptyx.h: original size 21948, current size' "$Wc_c"
  898. rm -f _shar_wnt_.tmp
  899. fi
  900. # ============= kterm-4.1.2/screen.c ==============
  901. if test -f 'kterm-4.1.2/screen.c' -a X"$1" != X"-c"; then
  902.     echo 'x - skipping kterm-4.1.2/screen.c (File already exists)'
  903.     rm -f _shar_wnt_.tmp
  904. else
  905. > _shar_wnt_.tmp
  906. echo 'x - extracting kterm-4.1.2/screen.c (Text)'
  907. sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/screen.c' &&
  908. /*
  909. X *    $XConsortium: screen.c,v 1.16 89/12/10 20:44:52 jim Exp $
  910. X *    $Kagotani: /usr/src.yoshi/X/KTerm/4.1.0/RCS/screen.c,v 1.1 90/06/27 09:39:50 kagotani Rel $
  911. X *
  912. X * $Id: screen.c,v 1.2 1991/03/17 23:54:57 mleisher Exp $
  913. X */
  914. X
  915. /*
  916. X * Modified for Hanzi support:
  917. X * Mark Leisher mleisher@nmsu.edu Fri Nov  9 09:22:33 1990
  918. X */
  919. X
  920. #include <X11/copyright.h>
  921. X
  922. /*
  923. X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
  924. X *
  925. X *                         All Rights Reserved
  926. X *
  927. X * Permission to use, copy, modify, and distribute this software and its
  928. X * documentation for any purpose and without fee is hereby granted,
  929. X * provided that the above copyright notice appear in all copies and that
  930. X * both that copyright notice and this permission notice appear in
  931. X * supporting documentation, and that the name of Digital Equipment
  932. X * Corporation not be used in advertising or publicity pertaining to
  933. X * distribution of the software without specific, written prior permission.
  934. X *
  935. X *
  936. X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  937. X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  938. X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  939. X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  940. X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  941. X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  942. X * SOFTWARE.
  943. X */
  944. X
  945. /* screen.c */
  946. X
  947. #ifndef lint
  948. static char rcs_id[] = "$XConsortium: screen.c,v 1.16 89/12/10 20:44:52 jim Exp $";
  949. #endif    /* lint */
  950. X
  951. #include <X11/Xlib.h>
  952. #include <stdio.h>
  953. #include <sys/ioctl.h>
  954. #include "ptyx.h"
  955. #include "error.h"
  956. X
  957. extern Char *calloc(), *malloc(), *realloc();
  958. extern void bcopy();
  959. extern void free();
  960. X
  961. ScrnBuf Allocate (nrow, ncol, addr)
  962. /*
  963. X   allocates memory for a 2-dimensional array of chars and returns a pointer
  964. X   thereto
  965. X   each line is formed from a pair of char arrays.  The first (even) one is
  966. X   the actual character array and the second (odd) one is the attributes.
  967. X */
  968. register int nrow, ncol;
  969. #ifdef KTERM
  970. Bchr **addr;
  971. #else /* !KTERM */
  972. Char **addr;
  973. #endif /* !KTERM */
  974. {
  975. X    register ScrnBuf base;
  976. #ifdef KTERM
  977. X    register Bchr *tmp;
  978. #else /* !KTERM */
  979. X    register Char *tmp;
  980. #endif /* !KTERM */
  981. X    register int i;
  982. X
  983. #ifdef STATUSLINE
  984. X    nrow++;
  985. #endif /* STATUSLINE */
  986. #ifdef KTERM
  987. X    if ((base = (ScrnBuf) calloc ((unsigned)nrow, sizeof (Bchr *))) == 0)
  988. #else /* !KTERM */
  989. X    if ((base = (ScrnBuf) calloc ((unsigned)(nrow *= 2), sizeof (char *))) == 0)
  990. #endif /* !KTERM */
  991. X        SysError (ERROR_SCALLOC);
  992. X
  993. #ifdef KTERM
  994. X    if ((tmp = (Bchr *)calloc ((unsigned) (nrow * ncol), sizeof(Bchr))) == 0)
  995. #else /* !KTERM */
  996. X    if ((tmp = calloc ((unsigned) (nrow * ncol), sizeof(char))) == 0)
  997. #endif /* !KTERM */
  998. X        SysError (ERROR_SCALLOC2);
  999. X
  1000. X    *addr = tmp;
  1001. X    for (i = 0; i < nrow; i++, tmp += ncol)
  1002. X        base[i] = tmp;
  1003. X
  1004. X    return (base);
  1005. }
  1006. X
  1007. /*
  1008. X *  This is called when the screen is resized. Not complex if you do
  1009. X *  things in the right order...
  1010. X */
  1011. static void
  1012. Reallocate(sbuf, sbufaddr, nrow, ncol, oldrow, oldcol)
  1013. ScrnBuf *sbuf;
  1014. #ifdef KTERM
  1015. Bchr **sbufaddr;
  1016. #else /* !KTERM */
  1017. Char **sbufaddr;
  1018. #endif /* !KTERM */
  1019. int nrow, ncol, oldrow, oldcol;
  1020. {
  1021. X    register ScrnBuf base;
  1022. #ifdef KTERM
  1023. X    register Bchr *tmp;
  1024. X    register int i, minrows, mincols;
  1025. X    Bchr *oldbuf;
  1026. #else /* !KTERM */
  1027. X    register Char *tmp;
  1028. X    register int i, minrows, mincols;
  1029. X    Char *oldbuf;
  1030. #endif /* !KTERM */
  1031. #ifdef STATUSLINE
  1032. # ifdef KTERM
  1033. X    Bchr *oldstat;
  1034. # else /* !KTERM */
  1035. X    char *oldstat;
  1036. # endif /* !KTERM */
  1037. #endif /* STATUSLINE */
  1038. X    
  1039. X    if (sbuf == NULL || *sbuf == NULL)
  1040. X        return;
  1041. X
  1042. #ifdef STATUSLINE
  1043. X    nrow++;
  1044. X    oldrow++;
  1045. X    /* save pointers for the statusline (the last row) */
  1046. X    oldstat = (*sbuf)[oldrow-1];
  1047. #endif /* STATUSLINE */
  1048. #ifndef KTERM
  1049. X    oldrow *= 2;
  1050. #endif /* !KTERM */
  1051. X    oldbuf = *sbufaddr;
  1052. X
  1053. X    /*
  1054. X     * Special case if oldcol == ncol - straight forward realloc and
  1055. X     * update of the additional lines in sbuf
  1056. X     */
  1057. X
  1058. X    /* 
  1059. X     *  realloc sbuf; we don't care about losing the lower lines if the
  1060. X     *  screen shrinks. It might be cleaner to readjust the screen so
  1061. X     *  that the UPPER lines vanish when the screen shrinks but that's
  1062. X     *  more work...
  1063. X     */
  1064. #ifdef KTERM
  1065. X    *sbuf = (ScrnBuf) realloc((char *) (*sbuf),
  1066. X     (unsigned) (nrow * sizeof(Bchr *)));
  1067. #else /* !KTERM */
  1068. X    nrow *= 2;
  1069. X    *sbuf = (ScrnBuf) realloc((char *) (*sbuf),
  1070. X     (unsigned) (nrow * sizeof(char *)));
  1071. #endif /* !KTERM */
  1072. X    if (*sbuf == 0)
  1073. X        SysError(ERROR_RESIZE);
  1074. X    base = *sbuf;
  1075. X
  1076. X    /* 
  1077. X     *  create the new buffer space and copy old buffer contents there
  1078. X     *  line by line, updating the pointers in sbuf as we go; then free
  1079. X     *  the old buffer
  1080. X     */
  1081. #ifdef KTERM
  1082. X    if ((tmp = (Bchr *)calloc((unsigned) (nrow * ncol), sizeof(Bchr))) == 0)
  1083. #else /* !KTERM */
  1084. X    if ((tmp = calloc((unsigned) (nrow * ncol), sizeof(char))) == 0)
  1085. #endif /* !KTERM */
  1086. X        SysError(ERROR_SREALLOC);
  1087. #ifdef STATUSLINE
  1088. X    nrow--;
  1089. X    oldrow--;
  1090. #endif /* STATUSLINE */
  1091. X    *sbufaddr = tmp;
  1092. X    minrows = (oldrow < nrow) ? oldrow : nrow;
  1093. X    mincols = (oldcol < ncol) ? oldcol : ncol;
  1094. #ifdef KTERM
  1095. X    mincols *= sizeof(Bchr);
  1096. #endif /* KTERM */
  1097. X    for(i = 0; i < minrows; i++, tmp += ncol) {
  1098. X        bcopy(base[i], tmp, mincols);
  1099. X        base[i] = tmp;
  1100. X    }
  1101. X    if (oldrow < nrow) {
  1102. X        for (i = minrows; i < nrow; i++, tmp += ncol)
  1103. X            base[i] = tmp;
  1104. X    }
  1105. #ifdef STATUSLINE
  1106. X    bcopy(oldstat, tmp, mincols);
  1107. X    base[nrow] = tmp;
  1108. #ifndef KTERM
  1109. X    tmp += ncol;
  1110. X    oldstat += oldcol;
  1111. X    bcopy(oldstat, tmp, mincols);
  1112. X    base[nrow+1] = tmp;
  1113. #endif /* !KTERM */
  1114. #endif /* STATUSLINE */
  1115. X    /* Now free the old buffer - simple, see... */
  1116. X    free(oldbuf);
  1117. }
  1118. X
  1119. #ifdef KTERM
  1120. ScreenWrite (screen, str, flags, gset, length)
  1121. #else /* !KTERM */
  1122. ScreenWrite (screen, str, flags, length)
  1123. #endif /* !KTERM */
  1124. /*
  1125. X   Writes str into buf at row row and column col.  Characters are set to match
  1126. X   flags.
  1127. X */
  1128. TScreen *screen;
  1129. char *str;
  1130. register unsigned flags;
  1131. #ifdef KTERM
  1132. register Char gset;
  1133. #endif /* KTERM */
  1134. register int length;        /* length of string */
  1135. {
  1136. #ifdef KTERM
  1137. X    register int avail  = screen->max_col - screen->cur_col + 1;
  1138. X    register Bchr *col;
  1139. #else /* !KTERM */
  1140. X    register Char *attrs;
  1141. X    register int avail  = screen->max_col - screen->cur_col + 1;
  1142. X    register Char *col;
  1143. #endif /* !KTERM */
  1144. X
  1145. X    if (length > avail)
  1146. X        length = avail;
  1147. X    if (length <= 0)
  1148. X        return;
  1149. X
  1150. #ifdef KTERM
  1151. X    col = screen->buf[avail = screen->cur_row] + screen->cur_col;
  1152. X    flags &= (ATTRIBUTES|COLOR_TEXT_MASK);
  1153. #else /* !KTERM */
  1154. X    col = screen->buf[avail = 2 * screen->cur_row] + screen->cur_col;
  1155. X    attrs = screen->buf[avail + 1] + screen->cur_col;
  1156. X    flags &= ATTRIBUTES;
  1157. #endif /* !KTERM */
  1158. #ifdef KTERM
  1159. X    if (gset & MBCS) {
  1160. X        while(length > 0) {
  1161. X            col->code = *str++;
  1162. X            col->gset = gset;
  1163. X            col->attr = flags;
  1164. X            col++;
  1165. X            col->code = *str++;
  1166. X            col->gset = MBC2;
  1167. X            col->attr = flags;
  1168. X            col++;
  1169. X            length -= 2;
  1170. X        }
  1171. X    } else {
  1172. X        while(length-- > 0) {
  1173. X            col->code = *str++;
  1174. X            col->gset = gset;
  1175. X            col->attr = flags;
  1176. X            col++;
  1177. X        }
  1178. X    }
  1179. #else /* KTERM */
  1180. X    bcopy(str, col, length);
  1181. X    while(length-- > 0)
  1182. X        *attrs++ = flags;
  1183. #endif /* !KTERM */
  1184. }
  1185. X
  1186. ScrnInsertLine (sb, last, where, n, size)
  1187. /*
  1188. X   Inserts n blank lines at sb + where, treating last as a bottom margin.
  1189. X   Size is the size of each entry in sb.
  1190. X   Requires: 0 <= where < where + n <= last
  1191. X            n <= MAX_ROWS
  1192. X */
  1193. register ScrnBuf sb;
  1194. int last;
  1195. register int where, n, size;
  1196. {
  1197. X    register int i;
  1198. #ifdef KTERM
  1199. X    Bchr *save [MAX_ROWS];
  1200. #else /* !KTERM */
  1201. X    char *save [2 * MAX_ROWS];
  1202. #endif /* !KTERM */
  1203. X
  1204. X
  1205. X    /* save n lines at bottom */
  1206. #ifdef KTERM
  1207. X    bcopy ((char *) &sb [last -= n - 1], (char *) save,
  1208. X        sizeof (Bchr *) * n);
  1209. #else /* !KTERM */
  1210. X    bcopy ((char *) &sb [2 * (last -= n - 1)], (char *) save,
  1211. X        2 * sizeof (char *) * n);
  1212. #endif /* !KTERM */
  1213. X    
  1214. X    /* clear contents of old rows */
  1215. #ifdef KTERM
  1216. X    for (i = n - 1; i >= 0; i--)
  1217. X        bzero ((char *) save [i], size *sizeof(Bchr));
  1218. #else /* !KTERM */
  1219. X    for (i = 2 * n - 1; i >= 0; i--)
  1220. X        bzero ((char *) save [i], size);
  1221. #endif /* !KTERM */
  1222. X
  1223. X    /*
  1224. X     * WARNING, overlapping copy operation.  Move down lines (pointers).
  1225. X     *
  1226. X     *   +----|---------|--------+
  1227. X     *
  1228. X     * is copied in the array to:
  1229. X     *
  1230. X     *   +--------|---------|----+
  1231. X     */
  1232. #ifdef KTERM
  1233. X    bcopy ((char *) &sb [where], (char *) &sb [where + n],
  1234. X        sizeof (Bchr *) * (last - where));
  1235. #else /* !KTERM */
  1236. X    bcopy ((char *) &sb [2 * where], (char *) &sb [2 * (where + n)],
  1237. X        2 * sizeof (char *) * (last - where));
  1238. #endif /* !KTERM */
  1239. X
  1240. X    /* reuse storage for new lines at where */
  1241. #ifdef KTERM
  1242. X    bcopy ((char *)save, (char *) &sb[where], sizeof(Bchr *) * n);
  1243. #else /* !KTERM */
  1244. X    bcopy ((char *)save, (char *) &sb[2 * where], 2 * sizeof(char *) * n);
  1245. #endif /* !KTERM */
  1246. }
  1247. X
  1248. X
  1249. ScrnDeleteLine (sb, last, where, n, size)
  1250. /*
  1251. X   Deletes n lines at sb + where, treating last as a bottom margin.
  1252. X   Size is the size of each entry in sb.
  1253. X   Requires 0 <= where < where + n < = last
  1254. X           n <= MAX_ROWS
  1255. X */
  1256. register ScrnBuf sb;
  1257. register int n, last, size;
  1258. int where;
  1259. {
  1260. X    register int i;
  1261. #ifdef KTERM
  1262. X    Bchr *save [MAX_ROWS];
  1263. #else /* !KTERM */
  1264. X    char *save [2 * MAX_ROWS];
  1265. #endif /* !KTERM */
  1266. X
  1267. X    /* save n lines at where */
  1268. #ifdef KTERM
  1269. X    bcopy ((char *) &sb[where], (char *)save, sizeof(Bchr *) * n);
  1270. #else /* !KTERM */
  1271. X    bcopy ((char *) &sb[2 * where], (char *)save, 2 * sizeof(char *) * n);
  1272. #endif /* !KTERM */
  1273. X
  1274. X    /* clear contents of old rows */
  1275. #ifdef KTERM
  1276. X    for (i = n - 1 ; i >= 0 ; i--)
  1277. X        bzero ((char *) save [i], size * sizeof(Bchr));
  1278. #else /* !KTERM */
  1279. X    for (i = 2 * n - 1 ; i >= 0 ; i--)
  1280. X        bzero ((char *) save [i], size);
  1281. #endif /* !KTERM */
  1282. X
  1283. X    /* move up lines */
  1284. #ifdef KTERM
  1285. X    bcopy ((char *) &sb[where + n], (char *) &sb[where],
  1286. X        sizeof (Bchr *) * ((last -= n - 1) - where));
  1287. #else /* !KTERM */
  1288. X    bcopy ((char *) &sb[2 * (where + n)], (char *) &sb[2 * where],
  1289. X        2 * sizeof (char *) * ((last -= n - 1) - where));
  1290. #endif /* !KTERM */
  1291. X
  1292. X    /* reuse storage for new bottom lines */
  1293. #ifdef KTERM
  1294. X    bcopy ((char *)save, (char *) &sb[last], sizeof(Bchr *) * n);
  1295. #else /* !KTERM */
  1296. X    bcopy ((char *)save, (char *) &sb[2 * last],
  1297. X        2 * sizeof(char *) * n);
  1298. #endif /* !KTERM */
  1299. }
  1300. X
  1301. X
  1302. ScrnInsertChar (sb, row, col, n, size)
  1303. /*
  1304. X   Inserts n blanks in sb at row, col.  Size is the size of each row.
  1305. X */
  1306. ScrnBuf sb;
  1307. int row, size;
  1308. register int col, n;
  1309. {
  1310. X    register int i, j;
  1311. #ifdef KTERM
  1312. X    register Bchr *ptr = sb [row];
  1313. #else /* !KTERM */
  1314. X    register Char *ptr = sb [2 * row];
  1315. X    register Char *attrs = sb [2 * row + 1];
  1316. #endif /* !KTERM */
  1317. X
  1318. X    for (i = size - 1; i >= col + n; i--) {
  1319. X        ptr[i] = ptr[j = i - n];
  1320. #ifndef KTERM
  1321. X        attrs[i] = attrs[j];
  1322. #endif /* !KTERM */
  1323. X    }
  1324. X
  1325. #ifdef KTERM
  1326. X    bzero (ptr + col, n * sizeof(Bchr));
  1327. #else /* !KTERM */
  1328. X    bzero (ptr + col, n);
  1329. X    bzero (attrs + col, n);
  1330. #endif /* !KTERM */
  1331. }
  1332. X
  1333. X
  1334. ScrnDeleteChar (sb, row, col, n, size)
  1335. /*
  1336. X   Deletes n characters in sb at row, col. Size is the size of each row.
  1337. X */
  1338. ScrnBuf sb;
  1339. register int row, size;
  1340. register int n, col;
  1341. {
  1342. #ifdef KTERM
  1343. X    register Bchr *ptr = sb[row];
  1344. #else /* !KTERM */
  1345. X    register Char *ptr = sb[2 * row];
  1346. X    register Char *attrs = sb[2 * row + 1];
  1347. #endif /* !KTERM */
  1348. X    register nbytes = (size - n - col);
  1349. X
  1350. #ifdef KTERM
  1351. X    bcopy (ptr + col + n, ptr + col, nbytes * sizeof(Bchr));
  1352. X    bzero (ptr + size - n, n * sizeof(Bchr));
  1353. #else /* !KTERM */
  1354. X    bcopy (ptr + col + n, ptr + col, nbytes);
  1355. X    bcopy (attrs + col + n, attrs + col, nbytes);
  1356. X    bzero (ptr + size - n, n);
  1357. X    bzero (attrs + size - n, n);
  1358. #endif /* !KTERM */
  1359. }
  1360. X
  1361. X
  1362. ScrnRefresh (screen, toprow, leftcol, nrows, ncols, force)
  1363. /*
  1364. X   Repaints the area enclosed by the parameters.
  1365. X   Requires: (toprow, leftcol), (toprow + nrows, leftcol + ncols) are
  1366. X            coordinates of characters in screen;
  1367. X         nrows and ncols positive.
  1368. X */
  1369. register TScreen *screen;
  1370. int toprow, leftcol, nrows, ncols;
  1371. Boolean force;            /* ... leading/trailing spaces */
  1372. {
  1373. #ifdef KTERM
  1374. X    XChar2b drawbuf[256], *dbuf;
  1375. X    int y = toprow * FontHeight(screen) + screen->border;
  1376. #else /* !KTERM */
  1377. X    int y = toprow * FontHeight(screen) + screen->border +
  1378. X        screen->fnt_norm->ascent;
  1379. #endif /* !KTERM */
  1380. X    register int row;
  1381. X    register int topline = screen->topline;
  1382. X    int maxrow = toprow + nrows - 1;
  1383. X    int scrollamt = screen->scroll_amt;
  1384. X    int max = screen->max_row;
  1385. #ifdef STATUSLINE
  1386. X    int dostatus = 0, left, width;
  1387. X    int fnum = F_ISO8859_1;
  1388. #endif /* STATUSLINE */
  1389. X
  1390. #ifdef KTERM
  1391. X    dbuf = (ncols > 256) ? (XChar2b *)XtMalloc(ncols * sizeof(XChar2b))
  1392. X                 : drawbuf;
  1393. #endif /* KTERM */
  1394. #ifdef STATUSLINE
  1395. X    if (screen->statusline && maxrow == screen->max_row + 1) {
  1396. X        dostatus++;
  1397. X        maxrow--;
  1398. X    }
  1399. #endif /* STATUSLINE */
  1400. X    if(screen->cursor_col >= leftcol && screen->cursor_col <=
  1401. X     (leftcol + ncols - 1) && screen->cursor_row >= toprow + topline &&
  1402. X     screen->cursor_row <= maxrow + topline)
  1403. X        screen->cursor_state = OFF;
  1404. #ifdef STATUSLINE
  1405. X    for (;;) {
  1406. #endif /* STATUSLINE */
  1407. X    for (row = toprow; row <= maxrow; y += FontHeight(screen), row++) {
  1408. #ifdef KTERM
  1409. X       register Bchr *chars;
  1410. X       Char gset;
  1411. #else /* !KTERM */
  1412. X       register Char *chars;
  1413. X       register Char *attrs;
  1414. #endif /* !KTERM */
  1415. X       register int col = leftcol;
  1416. X       int maxcol = leftcol + ncols - 1;
  1417. X       int lastind;
  1418. X       int flags;
  1419. X       int x, n;
  1420. X       GC gc;
  1421. X       Boolean hilite;    
  1422. X
  1423. X       if (row < screen->top_marg || row > screen->bot_marg)
  1424. X        lastind = row;
  1425. X       else
  1426. X        lastind = row - scrollamt;
  1427. X
  1428. X       if (lastind < 0 || lastind > max)
  1429. X           continue;
  1430. X
  1431. #ifdef KTERM
  1432. X       n = 0;
  1433. X       chars = screen->buf [lastind + topline];
  1434. #else /* !KTERM */
  1435. X       chars = screen->buf [2 * (lastind + topline)];
  1436. X       attrs = screen->buf [2 * (lastind + topline) + 1];
  1437. #endif /* !KTERM */
  1438. X
  1439. X       if (row < screen->startHRow || row > screen->endHRow ||
  1440. X           (row == screen->startHRow && maxcol < screen->startHCol) ||
  1441. X           (row == screen->endHRow && col >= screen->endHCol))
  1442. X           {
  1443. X           /* row does not intersect selection; don't hilite */
  1444. X           if (!force) {
  1445. #ifdef KTERM
  1446. X           while (col <= maxcol && (chars[col].attr & ~BOLD) == 0 &&
  1447. X                  !(chars[col].gset & CS96) &&
  1448. X              (chars[col].code & ~040) == 0)
  1449. #else /* !KTERM */
  1450. X           while (col <= maxcol && (attrs[col] & ~BOLD) == 0 &&
  1451. X              (chars[col] & ~040) == 0)
  1452. #endif /* !KTERM */
  1453. X               col++;
  1454. X
  1455. #ifdef KTERM
  1456. X           while (col <= maxcol && (chars[maxcol].attr & ~BOLD) == 0 &&
  1457. X                  !(chars[maxcol].gset & CS96) &&
  1458. X              (chars[maxcol].code & ~040) == 0)
  1459. #else /* !KTERM */
  1460. X           while (col <= maxcol && (attrs[maxcol] & ~BOLD) == 0 &&
  1461. X              (chars[maxcol] & ~040) == 0)
  1462. #endif /* !KTERM */
  1463. X               maxcol--;
  1464. X           }
  1465. X           hilite = False;
  1466. X       }
  1467. X       else {
  1468. X           /* row intersects selection; split into pieces of single type */
  1469. X           if (row == screen->startHRow && col < screen->startHCol) {
  1470. X           ScrnRefresh(screen, row, col, 1, screen->startHCol - col,
  1471. X                   force);
  1472. X           col = screen->startHCol;
  1473. X           }
  1474. X           if (row == screen->endHRow && maxcol >= screen->endHCol) {
  1475. X           ScrnRefresh(screen, row, screen->endHCol, 1,
  1476. X                   maxcol - screen->endHCol + 1, force);
  1477. X           maxcol = screen->endHCol - 1;
  1478. X           }
  1479. X           /* remaining piece should be hilited */
  1480. X           hilite = True;
  1481. X       }
  1482. #ifdef KTERM_KANJI
  1483. X       if (chars[col].gset == MBC2 && col != 0)
  1484. X        col--;
  1485. X       if (chars[maxcol].gset & MBCS && chars[maxcol].gset != MBC2)
  1486. X        maxcol++;
  1487. #endif /* KTERM_KANJI */
  1488. X
  1489. X       if (col > maxcol) continue;
  1490. X
  1491. #ifdef KTERM
  1492. X       flags = chars[col].attr;
  1493. X       gset = chars[col].gset;
  1494. #else /* !KTERM */
  1495. X       flags = attrs[col];
  1496. X
  1497. #ifdef STATUSLINE
  1498. X       if (((!hilite && (flags & INVERSE) != 0) ||
  1499. X            (hilite && (flags & INVERSE) == 0))
  1500. X        ^ (dostatus < 0 && screen->reversestatus))
  1501. #else /* !STATUSLINE */
  1502. X       if ( (!hilite && (flags & INVERSE) != 0) ||
  1503. X            (hilite && (flags & INVERSE) == 0) )
  1504. #endif /* !STATUSLINE */
  1505. X           if (flags & BOLD) gc = screen->reverseboldGC;
  1506. X           else gc = screen->reverseGC;
  1507. X       else 
  1508. X           if (flags & BOLD) gc = screen->normalboldGC;
  1509. X           else gc = screen->normalGC;
  1510. #endif /* !KTERM */
  1511. X
  1512. X       x = CursorX(screen, col);
  1513. X       lastind = col;
  1514. X
  1515. X       for (; col <= maxcol; col++) {
  1516. #ifdef KTERM
  1517. X        if (chars[col].attr != flags || chars[col].gset != gset) {
  1518. #ifdef    COLOR_TEXT    /* mukawa */
  1519. X           ScreenDraw(screen, x, y, dbuf, n, gset, flags,
  1520. #else    /* COLOR_TEXT */
  1521. X           ScreenDraw(screen, x, y, dbuf, n, gset,
  1522. #endif    /* COLOR_TEXT */
  1523. X            flags & BOLD,
  1524. #ifdef STATUSLINE
  1525. X            (dostatus < 0 && screen->reversestatus) ^
  1526. #endif /* STATUSLINE */
  1527. X            (hilite != 0) ^ ((flags & INVERSE) != 0),
  1528. X            flags & UNDERLINE,
  1529. X            False);
  1530. X           n = 0;
  1531. #else /* !KTERM */
  1532. X        if (attrs[col] != flags) {
  1533. X           XDrawImageString(screen->display, TextWindow(screen), 
  1534. X                    gc, x, y, (char *) &chars[lastind], n = col - lastind);
  1535. X           if((flags & BOLD) && screen->enbolden)
  1536. X             XDrawString(screen->display, TextWindow(screen), 
  1537. X             gc, x + 1, y, (char *) &chars[lastind], n);
  1538. X           if(flags & UNDERLINE) 
  1539. X            XDrawLine(screen->display, TextWindow(screen), 
  1540. X             gc, x, y+1, x+n*FontWidth(screen), y+1);
  1541. #endif /* !KTERM */
  1542. X
  1543. X           x += (col - lastind) * FontWidth(screen);
  1544. X
  1545. X           lastind = col;
  1546. X
  1547. #ifdef KTERM
  1548. X           flags = chars[col].attr;
  1549. X           gset = chars[col].gset;
  1550. X        }
  1551. #else /* !KTERM */
  1552. X           flags = attrs[col];
  1553. X
  1554. #ifdef STATUSLINE
  1555. X              if (((!hilite && (flags & INVERSE) != 0) ||
  1556. X                (hilite && (flags & INVERSE) == 0))
  1557. X            ^ (dostatus < 0 && screen->reversestatus))
  1558. #else /* !STATUSLINE */
  1559. X              if ((!hilite && (flags & INVERSE) != 0) ||
  1560. X               (hilite && (flags & INVERSE) == 0) )
  1561. #endif /* !STATUSLINE */
  1562. X                   if (flags & BOLD) gc = screen->reverseboldGC;
  1563. X                   else gc = screen->reverseGC;
  1564. X              else 
  1565. X                   if (flags & BOLD) gc = screen->normalboldGC;
  1566. X                   else gc = screen->normalGC;
  1567. X        }
  1568. #endif /* !KTERM */
  1569. X
  1570. #ifdef KTERM
  1571. X        /*
  1572. X         * subeteno moji wo, XChar2b string ni copy suru.
  1573. X         * konotoki MSB ga tattetara, gset wo shirabete
  1574. X         * tekitouna code ni henkansuru.
  1575. X         */
  1576. #ifdef KTERM_KANJI
  1577. X        if (gset & MBCS) {
  1578. X                    dbuf[n].byte1 = chars[col++].code;
  1579. X                    dbuf[n].byte2 = chars[col].code;
  1580. X        } else
  1581. #endif /* KTERM_KANJI */
  1582. X        {
  1583. X            dbuf[n].byte1 = 0;
  1584. X                        dbuf[n].byte2 = MapOnFont(gset, chars[col].code);
  1585. X        }
  1586. X        n++;
  1587. #else /* !KTERM */
  1588. X        if(chars[col] == 0)
  1589. X            chars[col] = ' ';
  1590. #endif /* !KTERM */
  1591. X       }
  1592. X
  1593. X
  1594. #ifdef KTERM
  1595. #ifdef    COLOR_TEXT    /* mukawa */
  1596. X       ScreenDraw(screen, x, y, dbuf, n, gset, flags,
  1597. #else    /* COLOR_TEXT */
  1598. X       ScreenDraw(screen, x, y, dbuf, n, gset,
  1599. #endif    /* COLOR_TEXT */
  1600. X            flags & BOLD,
  1601. #ifdef STATUSLINE
  1602. X            (dostatus < 0 && screen->reversestatus) ^
  1603. SHAR_EOF
  1604. true || echo 'restore of kterm-4.1.2/screen.c failed'
  1605. fi
  1606. echo 'End of kterm-4.1.2 part 16'
  1607. echo 'File kterm-4.1.2/screen.c is continued in part 17'
  1608. echo 17 > _shar_seq_.tmp
  1609. exit 0
  1610.  
  1611.  
  1612. -----------------------------------------------------------------------------
  1613. mleisher@nmsu.edu                      "I laughed.
  1614. Mark Leisher                                I cried.
  1615. Computing Research Lab                          I fell down.
  1616. New Mexico State University                        It changed my life."
  1617. Las Cruces, NM                     - Rich [Cowboy Feng's Space Bar and Grille]
  1618.  
  1619. --
  1620. Dan Heller
  1621. O'Reilly && Associates       Z-Code Software    Comp-sources-x:
  1622. Senior Writer                President          comp-sources.x@uunet.uu.net
  1623. argv@ora.com                 argv@zipcode.com
  1624.