home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume19 / jetedit / part02 < prev    next >
Encoding:
Text File  |  1993-04-27  |  56.0 KB  |  1,555 lines

  1. Newsgroups: comp.sources.x
  2. From: duane@blacks.jpl.nasa.gov (Duane Clark)
  3. Subject: v19i081:  Jetedit - A Motif text editor, Part02/04
  4. Message-ID: <1993Apr8.144446.20169@sparky.imd.sterling.com>
  5. X-Md4-Signature: 74dc3efc8b15a9f29e37b177081fe62e
  6. Date: Thu, 8 Apr 1993 14:44:46 GMT
  7. Approved: chris@sparky.imd.sterling.com
  8.  
  9. Submitted-by: duane@blacks.jpl.nasa.gov (Duane Clark)
  10. Posting-number: Volume 19, Issue 81
  11. Archive-name: Jetedit/part02
  12. Environment: X11, OSF/Motif
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then unpack
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 2 (of 4)."
  21. # Contents:  jetedit.man.uu xmemenu.c xmespec.c
  22. # Wrapped by duane@blacks.jpl.nasa.gov on Sat Apr  3 20:04:06 1993
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f 'jetedit.man.uu' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'jetedit.man.uu'\"
  26. else
  27. echo shar: Extracting \"'jetedit.man.uu'\" \(14226 characters\)
  28. sed "s/^X//" >'jetedit.man.uu' <<'END_OF_FILE'
  29. Xbegin 755 jetedit.man
  30. XM+E1(($I%5$5$250@,5@*+E-(($Y!344*:F5T961I="!<*&5M(&$@8&!#)R<@
  31. XM<')O9W)A;6UE<B=S('!O:6YT(&%N9"!C;&EC:R!E9&ET;W(N(`HN4T@@4UE.
  32. XM5$%8"BY"(&IE=&5D:70*+E))(%L@9FEL96YA;64@70HN4T@@1$530U))4%1)
  33. XM3TX*+DD@2F5T961I=`II<R!I;G1E;F1E9"!T;R!B92!A('!R;V=R86UM97(G
  34. XM<R!E9&ET;W(L(&)U="!I<R!U<V%B;&4@9F]R(&=E;F5R86P@<'5R<&]S92!E
  35. XM9&ET:6YG+B!)="!H87,@82!-86,@;&EK92!I;G1E<F9A8V4@=VET:"!T:&4*
  36. XM+D(@(CQ%>'1E;F0@8VAA<CXB"FME>2!R97!L86-I;F<@=&AE($UA8PHN0B`\
  37. XM8V]M;6%N9#X*:V5Y+"!A;F0@9'5P;&EC871E<R!T:&4@8V]M;6]N($UA8R!E
  38. XM9&ET:6YG(&-O;6UA;F1S+B!/=&AE<B!F96%T=7)E<R!I="!H87,Z"BY)4"!<
  39. XM*&)U"D9I;F0@86YD(%)E<&QA8V4*+DE0(%PH8G4*1V]T;R!L:6YE(&YU;6)E
  40. XM<@HN25`@7"AB=0I486)B:6YG(&EN(&%N9"!O=70@82!B;&]C:R!O9B!T97AT
  41. XM"BY)4"!<*&)U"E5N9&\@961I=',*+DE0(%PH8G4*075T;VUA=&EC($,@<WEN
  42. XM=&%X('-E;G-I=&EV92!I;F1E;G1I;F<L"G=H:6-H(&-A;B!B92!E87-I;'D@
  43. XM8V]N9FEG=7)E9"!T;R!S=6ET('1H92!S='EL92!Y;W4@87)E('5S960@=&\N
  44. XM(`HN4T@@3U!424].4PHN22!*971E9&ET"G)E8V]G;FEZ97,@86QL('1H92!N
  45. XM;W)M86P@6"!7:6YD;W=S(&]P=&EO;G,@<W5C:"!A<R!F;VYT(&%N9"!G96]M
  46. XM971R>2X@5&AE(&]N;'D@861D:71I;VYA;"!O<'1I;VX@:70@<F5C;V=N:7IE
  47. XM<R!I<R!A(`HN25(@9FEL96YA;64@+@HN4T@@(DA/5R!)5"!73U)+4R(*+E!0
  48. XM"E1H92!M;W-T(&EM<&]R=&%N="!F96%T=7)E(&ES('1H870@961I=',@8V%N
  49. XM(&)E('5N9&]N92X@5&AI<R!I<R!H87)D(&-O9&5D('1O(')E;65M8F5R('1H
  50. XM92!P<F5V:6]U<R`R,"!E9&ET<RP@=7-I;F<@82!C:7)C=6QA<B!B=69F97(N
  51. XM"E-E;&5C=`HN22!5;F1O"F9R;VT@=&AE"BY)($5D:70*;65N=2!O<B!T>7!E
  52. XM"BY"4B`\17AT/EH@+@I.;W1E('1H870@<V]M92!E9&ET:6YG(&9U;F-T:6]N
  53. XM<RP@<W5C:"!A<R!T86)B:6YG(&$@8FQO8VL@;V8@=&5X="P@87)E(')E;65M
  54. XM8F5R960@87,@;75L=&EP;&4@961I=',L"G-O('EO=2!M87D@;F5E9"!T;R!U
  55. XM;F1O(&UU;'1I<&QE('1I;65S('1O(&-O;7!L971E;'D@=6YD;RX@"BY04`I7
  56. XM:71H('1H92!E>&-E<'1I;VX@;V8@=6YD;RP*86QL('1H92!E9&ET:6YG(&9U
  57. XM;F-T:6]N<R!W;W)K(&IU<W0@;&EK92!A($UA8RX@5&AI<R!I;F-L=61E<R!T
  58. XM:&4@97AI<W1E;F-E(&]F(&$@8VQI<&)O87)D+B!497AT(&-U="!O<B!C;W!I
  59. XM960@=&\@=&AE(&-L:7!B;V%R9`IC86X@;F]T(&]N;'D@8F4@<&%S=&5D(&)E
  60. XM='=E96X@961I=&]R<R!R=6YN:6YG(&]N('1H92!S86UE(&AO<W0L(&)U="!B
  61. XM96-A=7-E(&]F(%@@5VEN9&]W<R!C86X@86QS;R!B92!P87-T960@=&\@86X@
  62. XM961I=&]R(')U;FYI;F<@;VX@82!D:69F97)E;G0@:&]S="`H=&AE"BY"(%AM
  63. XM0VQI<&)O87)D"FES('5S960I+@HN4%`*1F]R(&YO;B!-86,@=7-E<G,L(&$@
  64. XM8G)I968@97AP;&%N871I;VXZ"BY)4"!<*&)U"DAO;&1I;F<@9&]W;B!T:&4*
  65. XM+DD@;&5F=`IM;W5S92!B=71T;VX@86YD(&1R86=G:6YG('1H92!M;W5S90IW
  66. XM:6QL('-E;&5C="!A(&)L;V-K(&]F('1E>'0N"D9O<B!L87)G92!B;&]C:W,@
  67. XM;V8@=&5X="P*8VQI8VL@=&AE(&UO=7-E(&%T('1H92!B96=I;FYI;F<@*&]R
  68. XM(&5N9"D@;V8@=&AE(&1E<VER960@8FQO8VL@;V8@=&5X="P@;6]V92!T;R!T
  69. XM:&4@;W1H97(@96YD(&]F('1H92!T97AT+`IA;F0@:&]L9"!D;W=N"BY"(#Q3
  70. XM:&EF=#X*=VAI;&4@8VQI8VMI;F<@=&AE(&UO=7-E+@I4:&4@96YD<R!O9B!T
  71. XM:&4@<V5L96-T960@8FQO8VL@8V%N(&)E(&%L=&5R960@8GD@"BY"(#Q3:&EF
  72. XM=#X*8VQI8VMI;F<@86=A:6X@;W(@9')A9V=I;F<@=&AE(&UO=7-E('=H:6QE
  73. XM(&AO;&1I;F<@9&]W;B!T:&4@8G5T=&]N+B`*+DE0(%PH8G4*+DD@0V]P>0HH
  74. XM9G)O;2!T:&4*+DD@161I=`IM96YU*2!W:6QL(&-O<'D@=&AE('-E;&5C=&5D
  75. XM(&)L;V-K(&]F('1E>'0@=&\@82!@8&-L:7!B;V%R9"<G(&EN(&UE;6]R>2X*
  76. XM3F]T92!T:&%T('1H90HN4D(@8&`@17AT*T,@)R<*;F5X="!T;PHN4D(@8&`@
  77. XM0V]P>2`G)PII;B!T:&4@;65N=2!M96%N<R!T:&%T(&-O<'EI;F<@8V%N(&%L
  78. XM<V\@8F4@9&]N92!B>2!H;VQD:6YG(&1O=VX@=&AE(`HN0B`\17AT/@IK97D@
  79. XM86YD('1Y<&EN9PHN0E(@/$,^("X*3VX@<V]M92!K97EB;V%R9',L"BY"(#Q%
  80. XM>'0^"FUA>2!B92!H879E('-O;64@;W1H97(@;&%B96P@<W5C:"!A<PHN0E(@
  81. XM/$%L=#X@+@HN25`@7"AB=0HN22!#=70*=VEL;"!C;W!Y('1H92!T97AT('1O
  82. XM('1H92!C;&EP8F]A<F0L"F%N9"!T:&5N(&1E;&5T92!I="!F<F]M('EO=7(@
  83. XM9&]C=6UE;G0N"BY)4"!<*&)U"BY)($-L96%R"BAO<B!T:&4*+D(@/$1E;#X*
  84. XM;W(*+D(@/$)A8VMS<&%C93X*:V5Y*2!W:6QL(&1E;&5T92!T:&4@=&5X="!F
  85. XM<F]M('1H92!D;V-U;65N="!W:71H;W5T(&%L=&5R:6YG('1H92!C;&EP8F]A
  86. XM<F0N"BY)4"!<*&)U"BY)(%!A<W1E"G=I;&P@:6YS97)T(&$@8V]P>2!O9B!T
  87. XM:&4@=&5X="!F<F]M('1H92!C;&EP8F]A<F0@=&\@=&AE(&-U<G)E;G0@:6YS
  88. XM97)T:6]N('!O:6YT+@HN25`@7"AB=0I)9B!A(&)L;V-K(&]F('1E>'0@:7,@
  89. XM<V5L96-T960L"F%N9"!T:&5N('EO=2!T>7!E(&$@8VAA<F%C=&5R(&]R('!A
  90. XM<W1E(&9R;VT@=&AE(&-L:7!B;V%R9"P@=&AE('-E;&5C=&5D(&)L;V-K(&ES
  91. XM(&]V97)W<FET=&5N+@I4:&4@8V]N=&5N=',@;V8@=&AE(&-L:7!B;V%R9"!A
  92. XM<F4@;F]T(&%L=&5R960N(`HN4%`*06YO=&AE<B!M971H;V0@879A:6QA8FQE
  93. XM(&9O<B!C;W!Y:6YG('1E>'0@:7,@=&\@8VQI8VL@=&AE(&UO=7-E(&%T('1H
  94. XM92!P;VEN="!W:&5R92!Y;W4@=V%N="!T:&4@=&5X="!T;R!B92!I;G-E<G1E
  95. XM9"P@=&\@<'5T('1H92!I;G-E<G1I;VX@<&]I;G0@=&AE<F4N"E1H96X@9V\@
  96. XM=&\@=&AE('1H92!T97AT('1O(&)E(&-O<&EE9"!A;F0@<')E<W,@=&AE(`HN
  97. XM22!C96YT97(*;6]U<V4@8G5T=&]N('=H:6QE(&1R86=G:6YG('1H92!M;W5S
  98. XM92X*07,@>6]U(&1R86<@=&AE(&UO=7-E+`IT:&4@<V5L96-T960@=&5X="!W
  99. XM:6QL(&)E('5N9&5R;&EN960N"E=H96X@=&AE(&UO=7-E(&)U='1O;B!I<R!R
  100. XM96QE87-E9"P*=&AE('-E;&5C=&5D('1E>'0@=VEL;"!B92!C;W!I960@=&\@
  101. XM=&AE('!R979I;W5S;'D@<V5T(&EN<V5R=&EO;B!P;VEN="X@2&]L9&EN9R!D
  102. XM;W=N"BY"(#Q#5%),/@IW:&EL92!D<F%G9VEN9R!W:6QL(')E<W5L="!I;B!T
  103. XM:&4@<V5L96-T960@=&5X="!B96EN9R!D96QE=&5D(&%F=&5R(&ET(&ES(&-O
  104. XM<&EE9"X*+E!0"D%N(&5N=&ER92!B;&]C:R!O9B!T97AT(&-A;B!B92!T86)B
  105. XM960@:6X@;W(@;W5T(&)Y('-E;&5C=&EN9R!T:&4@8FQO8VL@=VET:"!T:&4@
  106. XM;6]U<V4L"G1H96X@='EP:6YG"BY"(#Q486(^"F]R"BY"4B!S:&EF=#Q486(^
  107. XM("X*+E!0"BY"($5X=#Q(;VUE/@IW:6QL('1A:V4@>6]U('1O('1H92!B96=I
  108. XM;FYI;F<@;V8@=&AE(&9I;&4N(`HN0B!3:&EF=#Q(;VUE/@IW:6QL('1A:V4@
  109. XM>6]U('1O('1H92!E;F0@;V8@=&AE(&9I;&4N"BY04`I396QE8W1I;F<*+DD@
  110. XM3W!E;@IF<F]M('1H90HN22!&:6QE"FUE;G4@=VEL;"!P;W`@=7`@80HN22`B
  111. XM1FEL92!396QE8W1I;VXB"F1I86QO9R!B;W@N"E1H92!D:6%L;V<@86QL;W=S
  112. XM('1R879E<G-A;"!U<"!A;F0@9&]W;@IT:')O=6=H('1H92!D:7)E8W1O<GD@
  113. XM<W1R=6-T=7)E('5S:6YG('1H92!M;W5S92X@1&]U8FQE(&-L:6-K:6YG("AC
  114. XM;&EC:VEN9R!T:&4*+DD@;&5F=`IM;W5S92!B=71T;VX@='=I8V4@<F%P:61L
  115. XM>2D@;VX@82!D:7)E8W1O<GD@;F%M92!I;B!T:&4@"BY)($9I;&5S"F%R96$@
  116. XM=VEL;"!M;W9E('EO=2!D;W=N(&EN=&\@=&AA="!D:7)E8W1O<GDN($1O=6)L
  117. XM92!C;&EC:VEN9R!O;B!@8"XN)R<@=VEL;"!M;W9E('EO=2!U<"!O;F4@9&ER
  118. XM96-T;W)Y+B!$;W5B;&4@8VQI8VMI;F<@;VX@82!F:6QE;F%M92!W:6QL(&]P
  119. XM96X@=&AA="!F:6QE+B!!9&1I;F<@<V]M971H:6YG(&QI:V4@8&`J+F,G)R!I
  120. XM;B!T:&4*+DD@(D9I;&4@1FEL=&5R(@IW:6YD;W<@=VEL;"!C875S92!T:&4@
  121. XM9&EA;&]G('1O(&]N;'D@9&ES<&QA>2`J+F,@9FEL97,L(&9O<B!E>&%M<&QE
  122. XM+@HN4%`*02!N=6UB97(@;V8@9F5A='5R97,@:6YT96YD960@9F]R('!R;V=R
  123. XM86UM97)S(&%R92!I;F-L=61E9"P@86YD(&-A;B!B92!E87-I;'D@=F%R:65D
  124. XM('1O('-U:70@=&AE(&9O<FUA="!S='EL92!Y;W4@87)E('5S960@=&\N(%1H
  125. XM97D@87)E(&-O;G1R;VQL960@8GD@<F5S;W5R8V5S('1H870@8V%N(&)E('-E
  126. XM="!I;B!Y;W5R(`HN0B`N6&1E9F%U;'1S"F9I;&4@;W(@=VET:"!A(&1I86QO
  127. XM9RX*4V5L96-T:6YG"BY)(%!R969E<F5N8V5S"F9R;VT@=&AE"BY)($5D:70*
  128. XM;65N=2!W:6QL('!O<"!U<"!A(&1I86QO9R!T;R!A;&QO=R!Y;W4@=&\@<V5T
  129. XM('1H92!P<F5F97)E;F-E<RX@5&AE;B!C;&EC:VEN9R!T:&4*+DD@2&5L<`IB
  130. XM=71T;VX@=VEL;"!P;W`@=7`@86YO=&AE<B!D:6%L;V<*=VAI8V@@=VEL;"!T
  131. XM96QL('EO=2!E>&%C=&QY('=H870@<F5S;W5R8V5S('1O('5S92!F;W(@=&AE
  132. XM('-E;&5C=&5D('!R969E<F5N8V5S+@HN4%`*5&AR964@:6YD96YT:6YG(&UO
  133. XM9&5S(&%R92!A=F%I;&%B;&4N"E-M87)T(&EN9&5N=&EN9R!W:6QL(&EN9&5N
  134. XM="!A(&YE=R!L:6YE('1O('1H92!L979E;"!O9B!T:&4@<')E=FEO=7,@;&EN
  135. XM92X*4WEN=&%X('-E;G-I=&EV92!I;F1E;G1I;F<@871T96UP=',@=&\@;6%K
  136. XM92!I;G1E;&QI9V5N="!D96-I<VEO;G,@86)O=70@:6YD96YT:6YG(&%N9"!O
  137. XM=71D96YT:6YG(&%C8V]R9&EN9R!T;R!T:&4@<G5L97,@;V8@0R!S>6YT87@L
  138. XM(&%N9"!A8V-O<F1I;F<@=&\@82!N=6UB97(@;V8@<V5L96-T86)L92!P<F5F
  139. XM97)E;F-E<R!F;W(@:6YD96YT:6YG('-T>6QE+B!9;W4@8V%N(&%L<V\@8VAO
  140. XM;W-E(&YO(&%U=&]M871I8R!I;F1E;G1I;F<@:68@9&5S:7)E9"X@"BY32"`B
  141. XM6"!$149!54Q44R(*5&AE(&9O;&QO=VEN9R!R97-O=7)C97,@8V%N(&)E('!U
  142. XM="!I;B!Y;W5R(`HN0B!^+RY89&5F875L=',*;W(*+D(@=7-R+VQI8B]8,3$O
  143. XM87!P+61E9F%U;'1S+TIE=&5D:70*9FEL92X*4F5A<V]N86)L92!D969A=6QT
  144. XM<R!A<F4@<W5P<&QI960@:68@;F\@<F5S;W5R8V5S(&%R92!S<&5C:69I960N
  145. XM"BY44`HN0B!B86-K9W)O=6YD"DD@9FEN9"!T:&%T(&%N(&]V97)A;&P@8F%C
  146. XM:V=R;W5N9"!O9B!@8$=R87DY,"<G(&ES(&UU8V@@96%S:65R(&]N('1H92!E
  147. XM>65S('1H86X@8&!7:&ET92<G+B`*+E10"BY"(&)L:6YK4F%T90I-;W1I9B`Q
  148. XM+C`@=&5X="!W:61G971S(&AA=F4@<')O8FQE;7,@=VET:"!T:&4@8FQI;FMI
  149. XM;F<@8W5R<V]R+B!3971T:6YG('1H:7,@<F5S;W5R8V4@=&\@8&`P)R<@=VEL
  150. XM;"!S=&]P('1H92!B;&EN:VEN9R!A;F0@=&AE('!R;V)L96TN(`HN5%`*+D(@
  151. XM9FEN9%]C87-E+G-E=`I3971T:6YG('1H:7,@=&\*+DD@5')U90IW:6QL('-E
  152. XM="!T:&4@9&5F875L="!F;W(@=&5X="!S96%R8VAE<R!T;R!I9VYO<F4@=&5X
  153. XM="!C87-E+@HN5%`*+D(@9F]N=$QI<W0*270@:7,@8F5S="!T;R!S96QE8W0@
  154. XM82!F:7AE9"!W:61T:"!F;VYT+B!!;'-O+"!T:&4@36]T:68@,2XP('1E>'0@
  155. XM=VED9V5T(&AA<R!P<F]B;&5M<R!W:71H('-O;64@9F]N=',@=VAE;B!D<F%G
  156. XM9VEN9R!T:&4@;6]U<V4@=&\@<V5L96-T('1E>'0N"E1H92!D969A=6QT(&ES
  157. XM(&!@1FEX960G)RX*06YO=&AE<B!G;V]D(&]N92!I9B!Y;W4@:&%V92!I="!I
  158. XM<R!@8&QU=%)3,3(G)RX@"BY44`HN0B!I;F9O1FEL90I3<&5C:69Y:6YG(&$@
  159. XM9FEL96YA;64@=VET:"!A(&-O;7!L971E('!A=&@@=VEL;"!C875S92!T:&%T
  160. XM(&9I;&4@=&\@8F4@<F5A9"!I;G1O"BY)(&IE=&5D:70*:68@;F\*+DD@9FEL
  161. XM96YA;64*:7,@<W!E8VEF:65D(&]N('1H92!C;VUM86YD(&QI;F4N"E1H:7,@
  162. XM;6EG:'0@8F4@=7-E9G5L(&9O<B!I;F9O<FUI;F<@=7-E<G,@9VQO8F%L;'D@
  163. XM;V8@=7!D871E<RX@"BY44`HN0B!R96=U;&%R7V5X<"YS970*4V5T=&EN9R!T
  164. XM:&ES('1O"BY)(%1R=64*=VEL;"!S970@=&AE(&1E9F%U;'0@9F]R('1E>'0@
  165. XM<V5A<F-H97,@=&\@=7-E(')E9W5L87(@97AP<F5S<VEO;G,N"BY44`HN0B!S
  166. XM=&%R=%]A=%]T;W`N<V5T"E-E='1I;F<@=&AI<R!T;PHN22!4<G5E"G=I;&P@
  167. XM<V5T('1H92!D969A=6QT(&9O<B!T97AT('-E87)C:&5S('1O(&)E9VEN(&%T
  168. XM('1H92!T;W`@;V8@=&AE(&9I;&4N"BY44`HN0B!U;G-E;&5C=$-O;&]R"E1H
  169. XM:7,@9&5T97)M:6YE<R!T:&4@8V]L;W(@=7-E9"!T;R!I;F1I8V%T92!T:&4@
  170. XM=6YS96QE8W1E9"!S=&%T92!O9B!T:&4@8G)A8VME=',@:6X@=&AE('!R969E
  171. XM<F5N8V5S(&1I86QO9W,N($$@9V]O9"!C;VQO<B!I<R!@8$=R87DW,"<G+@I)
  172. XM="!D969A=6QT<R!T;R!@8%=H:71E)R<N"BY04`I4:&4@9F]L;&]W:6YG(')E
  173. XM<V]U<F-E<R!A<F4@96%S:65S="!T;R!D971E<FUI;F4@8GD@<V5L96-T:6YG
  174. XM"BY)(%!R969E<F5N8V5S"F9R;VT@=&AE"BY)($5D:70*;65N=2!A;F0@=7-I
  175. XM;F<@=&AE"BY)($AE;'`*9&EA;&]G('1O(&1E=&5R;6EN92!T:&4@8V]R<F5C
  176. XM="!V86QU97,@=&\@=7-E+B`*+E10"BY"(&EN9&5N=`I296=U;&%R+"!S;6%R
  177. XM="P@;W(@0R!S>6YT87@@<V5N<VET:79E(&EN9&5N=&EN9RX@"BY44`HN0B!L
  178. XM96%D:6YG5&%B<PI!(&)O;VQE86X@9&5T97)M:6YI;F<@=VAE=&AE<B!T;R!U
  179. XM<V4@<W!A8V5S(&]R('1A8G,@9F]R(&QE861I;F<@=&%B<RX@3&5A9&EN9R!T
  180. XM86)S(&%R92!T86)S('=H:6-H(&%R92!T>7!E9`IB969O<F4@86YY(&YO;BUW
  181. XM:&ET97-P86-E(&]N(&$@;&EN92X*+E10"BY"('1R86EL:6YG5&%B<PI!;&P@
  182. XM;W1H97(@=&%B<R!A<F4@=')A:6QI;F<@=&%B<RX*+E10"BY"('-P86-E<PI$
  183. XM971E<FUI;F5S(&AO=R!M86YY('-P86-E<R!T;R!I;G-E<G0@=VAE;B!A('1A
  184. XM8B!I<R!T>7!E9"!I9B!E:71H97(*+D(@;&5A9&EN9U1A8G,*;W(*+D(@=')A
  185. XM:6QI;F=486)S"FES($9A;'-E+@HN5%`*+D(@;W!E;D)R86-E"D1E=&5R;6EN
  186. XM97,@:&]W('1O(&EN9&5N="!O<&5N:6YG(&)R86-E<RX@"BY44`HN0B!C;&]S
  187. XM94)R86-E"D1E=&5R;6EN97,@:&]W('1O(&EN9&5N="!C;&]S:6YG(&)R86-E
  188. XM<RX@"BY44`HN0B!I;F1E;G1#87-E"D$@8F]O;&5A;B!W:&EC:"!D971E<FUI
  189. XM;F5S('=H971H97(@=&\@:6YD96YT(&-A<V4@<W1A=&5M96YT<R!F<F]M('1H
  190. XM92!L979E;"!O9B!T:&4@<W=I=&-H('-T871E;65N="X*+E-((%1204Y33$%4
  191. XM24].4PHN22!*971E9&ET"F1E9FEN97,@=&AE(&9O;&QO=VEN9R!T<F%N<VQA
  192. XM=&EO;G,@9F]R('1H92!M86EN(&5D:71I;F<@=VEN9&]W+B`*+EPB+2TM+2TM
  193. XM+2T*+EPB(%-T87)T(&]F(%1A8FQE"BY<(B!4:&4@7"8@87)E('1H97)E('-I
  194. XM;7!L>2!T;R!F:6QL('-P86-E(&EN('1H92!S;W5R8V4@9FEL92`*+EPB('-O
  195. XM('1H870@=&AE('1A8G,@;&]O:R!G;V]D(&AE<F4@87,@=V5L;"!A<R!I;B!T
  196. XM:&4@;W5T<'5T+B`*+EPB+2TM+2TM+2T*+E!0"BY24PHN=&$@7'<G.CQ+97D^
  197. XM8G)A8V5R:6=H=#I<,%PP7#!<,"=U"BYN9@HN9G0@0@H\2V5Y/E)E='5R;CI<
  198. XM)EPF"4YE=TQI;F4H7'PI"E-H:69T/$ME>3Y(;VUE.EPF"51O0F]T=&]M*%Q\
  199. XM*0I-971A/$ME>3Y(;VUE.EPF"51O5&]P*%Q\*0I3:&EF=#Q+97D^5&%B.EPF
  200. XM"4]U=&1E;G1497AT*%Q\*0H\2V5Y/E1A8CI<)EPF7"9<)@E);F1E;G1497AT
  201. XM*%Q\*0HZ/$ME>3YB<F%C97)I9VAT.@E2:6=H=$)R86-E*%Q\*0HZ/$ME>3YB
  202. XM<F%C96QE9G0Z"4QE9G1"<F%C92A<?"D*+F9T(%`*+D14"BYF:0HN4D4*+EPB
  203. XM+2TM+2TM+2T*+EPB($5N9"!O9B!486)L90HN7"(M+2TM+2TM+0HN4T@@04-4
  204. XM24].(%)/551)3D53"BY)($IE=&5D:70*9&5F:6YE<R!T:&4@9F]L;&]W:6YG
  205. XM(&%C=&EO;B!R;W5T:6YE<RX*+E10"BY"($YE=TQI;F4H7'PI"E=H96X@:6X@
  206. XM<VUA<G0@;W(@<WEN=&%X(&EN9&5N=&EN9R!M;V1E+`ID971E<FUI;F5S('1H
  207. XM92!N=6UB97(@;V8@=&%B<R!O<B!S<&%C97,@=&\@:6YS97)T(&%N9"!I;G-E
  208. XM<G1S('1H96TN(`HN5%`*+D(@5&]";W1T;VTH7'PI"DUO=F5S('1H92!C=7)S
  209. XM;W(@=&\@=&AE(&)O='1O;2!O9B!T:&4@9FEL92X@"BY44`HN0B!4;U1O<"A<
  210. XM?"D*36]V97,@=&AE(&-U<G-O<B!T;R!T:&4@=&]P(&]F('1H92!F:6QE+B`*
  211. XM+E10"BY"($EN9&5N=%1E>'0H7'PI"DEF(&$@8FQO8VL@;V8@=&5X="!I<R!S
  212. XM96QE8W1E9"P*:6YD96YT<R!E86-H(&QI;F4@:6X@=&AE(&)L;V-K(&]N92!T
  213. XM86(@<W1O<"X@16QS92!I;G-E<G1S(&]N92!T86(@<W1O<"!A="!C=7)R96YT
  214. XM(&-U<G-O<B!P;W-I=&EO;BX@"BY44`HN0B!/=71D96YT5&5X="A<?"D*268@
  215. XM82!B;&]C:R!O9B!T97AT(&ES('-E;&5C=&5D+`IO=71D96YT<R!E86-H(&QI
  216. XM;F4@:6X@=&AE(&)L;V-K(&]N92!T86(@<W1O<"X@16QS92!D96QE=&5S(&]N
  217. XM92!T86(@<W1O<"!A="!C=7)R96YT(&-U<G-O<B!P;W-I=&EO;BX@"BY44`HN
  218. XM0B!2:6=H=$)R86-E*%Q\*0I);G-E<G1S(&$@<FEG:'0@8G)A8V4L"F]U=&1E
  219. XM;G1I;F<@:68@87!P<F]P<FEA=&4@9F]R('1H92!S96QE8W1E9"!E9&ET:6YG
  220. XM('-T>6QE+B`*+E10"BY"($QE9G1"<F%C92A<?"D*26YS97)T<R!A(&QE9G0@
  221. XM8G)A8V4L"F]U=&1E;G1I;F<@:68@87!P<F]P<FEA=&4@9F]R('1H92!S96QE
  222. XM8W1E9"!E9&ET:6YG('-T>6QE+B`*+E10"BY"($-U=$ET96TH7'PI"D-O<&EE
  223. XM<R!T:&4@<V5L96-T960@8FQO8VL@;V8@=&5X="!T;R!T:&4@8VQI<&)O87)D
  224. XM+"!T:&5N(&1E;&5T97,@:70@9G)O;2!T:&4@=&5X="!W:6YD;W<N"BY44`HN
  225. XM0B!#;W!Y271E;2A<?"D*0V]P:65S('1H92!S96QE8W1E9"!B;&]C:R!O9B!T
  226. XM97AT('1O('1H92!C;&EP8F]A<F0N(`HN5%`*+D(@4&%S=&5)=&5M*%Q\*0I/
  227. XM=F5R=W)I=&5S('1H92!S96QE8W1E9"!B;&]C:R!O9B!T97AT"G=I=&@@=&AE
  228. XM(&-O;G1E;G1S(&]F('1H92!C;&EP8F]A<F0N"BY32"!"54=3"BY04`I4:&4@
  229. XM36]T:68@,2XP('1E>'0@=VED9V5T(&AA<R!A(&YU;6)E<B!O9B!M:6YO<B!B
  230. XM=6=S+"!M;W-T(&]F('=H:6-H(&AA=F4@8F5E;B!C;W)R96-T960@:6X@36]T
  231. XM:68@,2XQ+B`*+E!0"D)U9W,@=VAI8V@@:&%V92!B965N(&-O<G)E8W1E9"!I
  232. XM;B!-;W1I9B`Q+C$Z(`HN25`@7"AB=0I4:&4@8FQI;FMI;F<@8W5R<V]R('-O
  233. XM;65T:6UE<R!B96-O;65S(&5R<F%T:6,@;W(@9&ES87!P96%R<RX@5&AI<R!I
  234. XM<R!B97-T(&-O<G)E8W1E9"!B>2!D:7-A8FQI;F<@8FQI;FMI;F<N(%-E92!T
  235. XM:&4*+D(@(E@@1$5&055,5%,B"G-E8W1I;VX@86)O=F4N"BY)4"!<*&)U"DD@
  236. XM9&ED(&YO="!I;7!L96UE;G0@<&%G92!U<"!A;F0@9&]W;@IB>2!C;&EC:VEN
  237. XM9R!I;B!T:&4@<V-R;VQL(&)A<B!P86=I;F<@87)E82X@36]T:68@,2XQ(&AA
  238. XM<R!T:&ES('-U<'!O<G0@8G5I;'0@:6XN"BY)4"!<*&)U"D]N('-O;64@<V5R
  239. XM=F5R<RP@=VAE;B!D<F%G9VEN9R!T:&4@;6]U<V4@=&\@<V5L96-T(&$@8FQO
  240. XM8VL@;V8@=&5X="P@=&AE(&9I<G-T(&-A<F%C=&5R('EO=2!T:&]U9VAT('EO
  241. XM=2!W97)E('-E;&5C=&EN9R!G971S(&UI<W-E9"X@3F\L('EO=2!A<F5N)W0@
  242. XM;&]S:6YG(&5Y92!H86YD(&-O;W)D:6YA=&EO;BX@"BY)4"!<*&)U"E1Y<&EN
  243. XM9R!A(&UE;G4@86-C96QE<F%T;W(@=VAI;&4@:6X@;VYE(&]F('1H92!M96YU
  244. XM(&1I86QO9W,@8V%N(&-A=7-E(&9A=&%L(&-R87-H97,N"DEN(&]V97(@='=O
  245. XM('EE87)S('5S92!W:71H($UO=&EF(#$N,"P*=&AI<R!I<R!T:&4@;VYL>2!K
  246. XM;F]W;B!F871A;"!E<G)O<BP@86YD(&ES(&9I>&5D(&EN($UO=&EF,2XQ+@HN
  247. XM4%`*0G5G<R!W:&EC:"!E>&ES="!I;B!-;W1I9B`Q+C$Z"BY)4"!<*&)U"E=H
  248. XM96X@:6X@=V]R9'=R87`@;6]D92P@961I=&EN9R!B96-O;65S(')A=&AE<B!S
  249. XM;'5G9VES:"!W:71H(&9I;&5S(&]F(&5V96X@82!F97<@=&AO=7-A;F0@8GET
  250. XM97,N(`HN4%`*+E-(($-/4%E224=(5%,**&,I($-O<'ER:6=H="`Q.3DS(&)Y
  251. XM($1U86YE($-L87)K+@HN4%`*4V5E('1H90HN22!J971E9&ET"G-O=7)C92!F
  252. XM:6QE"BY"(&-O<'ER:6=H="YH"F9O<B!A(&9U;&P@8V]P>7)I9VAT(&YO=&EC
  253. XM92X*+E-(($%55$A/4E,*1'5A;F4@0VQA<FL@7"AE;2!D=6%N94!B;&%C:W,N
  254. XM:G!L+FYA<V$N9V]V(`HN4%`*2FEM($-A;7!B96QL(%PH96T@:F5C0&UI;&YE
  255. XM+F)O96EN9RYC;VT@7"AE;2!C;VYT<FEB=71E9"!R96=U;&%R(&5X<')E<W-I
  256. XM;VX@=&5X="!S96%R8VAE<RX@"BY04`I$879I9"!7+B!386YD97)S;VX@7"AE
  257. XM;2!D=W-`<W-E8RYW:7-C+F5D=2!<*&5M(&1I9"!S:6=N:69I8V%N="!W;W)K
  258. XM('1O(&EM<')O=F4@=&AE(&9O<FUA='1I;F<@;V8@=&AE(&UA;B!P86=E+B`*
  259. X`
  260. Xend
  261. END_OF_FILE
  262. if test 14226 -ne `wc -c <'jetedit.man.uu'`; then
  263.     echo shar: \"'jetedit.man.uu'\" unpacked with wrong size!
  264. fi
  265. # end of 'jetedit.man.uu'
  266. fi
  267. if test -f 'xmemenu.c' -a "${1}" != "-c" ; then 
  268.   echo shar: Will not clobber existing file \"'xmemenu.c'\"
  269. else
  270. echo shar: Extracting \"'xmemenu.c'\" \(16225 characters\)
  271. sed "s/^X//" >'xmemenu.c' <<'END_OF_FILE'
  272. X/**---------------------------------------------------------------------
  273. X***     
  274. X***    file:        xmemenu.c
  275. X***    main:        xme.c
  276. X***
  277. X***    project:    Motif Widgets text editor
  278. X***
  279. X***             (c) Copyright 1989 by Open Software Foundation, Inc.
  280. X***                 All Rights Reserved.
  281. X***
  282. X***             (c) Copyright 1989 by Hewlett-Packard Company.
  283. X***
  284. X***
  285. X***-------------------------------------------------------------------*/
  286. X
  287. X#define MENU_EXIT        201
  288. X#define MENU_OPEN        202
  289. X#define MENU_NEW        203
  290. X#define MENU_CLOSE        204
  291. X#define MENU_SAVE        205
  292. X#define MENU_SAVE_AS        206
  293. X#define MENU_PRINT        207
  294. X#define MENU_CUT        208
  295. X#define MENU_COPY        209
  296. X#define MENU_PASTE        210
  297. X#define MENU_CLEAR        211
  298. X#define MENU_GOTO        212
  299. X#define MENU_FINDA        213
  300. X#define MENU_FIND        214
  301. X#define MENU_UNDO        215
  302. X#define MENU_REPLACE        216
  303. X#define MENU_WRAP        217
  304. X#define MENU_PREF        218
  305. X
  306. X#define DISABLE_INDENT        300
  307. X#define SMART_INDENT        301
  308. X#define SYNTAX_INDENT        302
  309. X
  310. X#define REAL_TAB        303
  311. X#define FOUR_TAB        304
  312. X
  313. X#include "xme.h"
  314. X
  315. X
  316. Xvoid CutItem(w,event)
  317. XWidget      w;
  318. XXKeyEvent *event;
  319. X{
  320. X#ifdef Motif1.0
  321. X    CopyItemToClipboard(event->time);
  322. X    DeletePrimarySelection();
  323. X#else
  324. X    XmTextCut(w, event->time+1);
  325. X#endif
  326. X}
  327. X
  328. Xvoid CopyItem(w,event)
  329. XWidget      w;
  330. XXKeyEvent *event;
  331. X{
  332. X#ifdef Motif1.0
  333. X    CopyItemToClipboard(event->time);
  334. X#else
  335. X    XmTextCopy(w, event->time+1);
  336. X#endif
  337. X}
  338. X
  339. Xvoid PasteItem(w,event)
  340. XWidget      w;
  341. XXKeyEvent *event;
  342. X{
  343. X#ifdef Motif1.0
  344. X    PasteItemFromClipboard();
  345. X#else
  346. X    XmTextPaste (w);
  347. X#endif
  348. X}
  349. X
  350. X/* ClearItem will only be called if Clear is selected from the menu.
  351. XOtherwise, the text widgets already handle the delete key correctly. */
  352. Xvoid ClearItem(w,event)
  353. XWidget      w;
  354. XXKeyEvent *event;
  355. X{
  356. X#ifdef Motif1.0
  357. X    DeletePrimarySelection();
  358. X#else
  359. X    XmTextRemove(w);
  360. X#endif
  361. X}
  362. X
  363. X/*-------------------------------------------------------------
  364. X**    MenuCB
  365. X**        Process callback from PushButtons in PulldownMenus.
  366. X*/
  367. Xvoid MenuCB (w, client_data, call_data) 
  368. XWidget        w;        /*  widget id            */
  369. Xcaddr_t        client_data;    /*  data from application    */
  370. Xcaddr_t        call_data;    /*  data from widget class    */
  371. X{
  372. X    Cardinal    ac;        /* arg count                */
  373. X    Arg        al[10];        /* arg list                 */
  374. X    char    *command;    /* command used in printing */
  375. X    Boolean    Wrap;
  376. X
  377. X    XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
  378. X    
  379. X    switch ((int)client_data)
  380. X    {
  381. X    case MENU_OPEN:
  382. X        /* display the file selection dialog */
  383. X        XtManageChild (open_dialog);
  384. X        if (!file_saved) /* display the 'save' message dialog */
  385. X            XtManageChild (open_warning);
  386. X        break;
  387. X
  388. X    case MENU_NEW:
  389. X        /* display the prompt dialog */
  390. X        if (thefile) {
  391. X            XtSetArg(al[0], XmNtextString, XmStringCreateLtoR
  392. X                 (thefile, charset));
  393. X            XtSetValues (new_dialog, al, 1);
  394. X        }
  395. X        XtManageChild (new_dialog);
  396. X        if (!file_saved) /* display the 'save' message dialog */
  397. X            XtManageChild (new_warning);
  398. X        break;
  399. X
  400. X    case MENU_CLOSE:
  401. X        if (!file_saved) /* display the 'save' message dialog */
  402. X            XtManageChild (close_warning);
  403. X        else {
  404. X            CloseFile();
  405. X            sprintf (message_string, " Editing:");
  406. X            XtSetArg(al[0], XmNlabelString, 
  407. X                XmStringCreateLtoR(message_string, charset));
  408. X            XtSetValues(message, al, 1);
  409. X        }
  410. X        break;
  411. X
  412. X    case MENU_SAVE:
  413. X        SaveFile();
  414. X        break;
  415. X
  416. X    case MENU_SAVE_AS:
  417. X        /* Display the 'save as' dialog with the
  418. X        present thefile displayed in it. */
  419. X        ac = 0;
  420. X        XtSetArg(al[ac], XmNtextString,
  421. X             XmStringCreateLtoR (thefile, charset));  ac++;
  422. X        XtSetValues(save_as_dialog, al, ac);
  423. X        XtManageChild (save_as_dialog);
  424. X        break;
  425. X
  426. X    case MENU_PRINT:
  427. X/*        if (!file_saved)
  428. X            XtManageChild(print_warning);
  429. X        else if (thefile != NULL) {
  430. X            /* malloc space for the command name. 
  431. X                Note: command = size of the thefile +
  432. X                "lp " + null terminator */
  433. X/*            command = XtMalloc(sizeof(thefile) + 4);
  434. X            sprintf(command, "lp %s", thefile);
  435. X            if (system(command) != NULL)
  436. X                fprintf(stderr, "\7print failed");
  437. X        }
  438. X        break;
  439. X*/
  440. X    
  441. X    case MENU_EXIT:
  442. X        /* exit if there is no files open */
  443. X        if (!file_saved) /* display the 'save' message dialog */
  444. X            XtManageChild (exit_warning);
  445. X        else {
  446. X            /* close up file pointers and descriptors */
  447. X            CloseFile();
  448. X            CloseUndoBuffer();
  449. X
  450. X            /* exit this program */
  451. X            exit (0);
  452. X        }
  453. X        break;
  454. X
  455. X    case MENU_UNDO:
  456. X        {
  457. X        Undo(cb->event);
  458. X        }
  459. X        break;
  460. X
  461. X    case MENU_CUT:
  462. X        CutItem(text, cb->event);
  463. X        break;
  464. X
  465. X    case MENU_COPY:
  466. X        CopyItem(text, cb->event);
  467. X        break;
  468. X
  469. X    case MENU_PASTE:
  470. X        PasteItem(text, cb->event);
  471. X        break;
  472. X
  473. X    case MENU_CLEAR:
  474. X        ClearItem(text, cb->event);
  475. X        break;
  476. X
  477. X    case MENU_FIND:
  478. X        XtSetSensitive(findA_button, False);
  479. X        XtSetSensitive(replace_button, False);
  480. X        XtSetSensitive(replace_pb, False);
  481. X        XtSetSensitive(replaceAll_pb, False);
  482. X        XtManageChild(find_dialog);
  483. X        break;
  484. X
  485. X    case MENU_REPLACE:
  486. X        ReplaceString();        
  487. X    case MENU_FINDA:
  488. X        if (the_string)
  489. X            FindString(cb->event->xbutton.time+1);
  490. X        break;
  491. X
  492. X    case MENU_GOTO:
  493. X        XtManageChild(goto_dialog);
  494. X        break;
  495. X
  496. X    case MENU_PREF:
  497. X        XtManageChild (prefer_dialog);
  498. X        break;
  499. X
  500. X    default:
  501. X        /* unknown client_data was recieved and
  502. X            there is no setup to handle this */
  503. X        fprintf(stderr, "\7Warning: in menu callback\n");
  504. X        break;
  505. X    }
  506. X
  507. X}
  508. X
  509. X
  510. X
  511. X/*-------------------------------------------------------------
  512. X**      CreateMenuBar
  513. X**              Create MenuBar in MainWindow
  514. X*/
  515. XWidget CreateMenuBar (parent)
  516. XWidget          parent;
  517. X{
  518. X    Widget    menu_bar;        /*  RowColumn                   */
  519. X    Widget    cascade;        /*  CascadeButton               */
  520. X    Widget    menu_pane;    /*  RowColumn                   */
  521. X    Widget    button;        /*  PushButton                  */
  522. X    Widget    sub_menu;
  523. X    
  524. X    Arg        al[10];        /*  arg list                    */
  525. X    Cardinal    ac;        /*  arg count                   */
  526. X    
  527. X    /****   Create MenuArea.        ****/
  528. X    ac = 0;
  529. X    menu_bar = XmCreateMenuBar (parent, "menu_bar", al, ac);
  530. X    
  531. X    /****   Create "File" PulldownMenu.     ****/
  532. X    ac = 0;
  533. X    menu_pane = XmCreatePulldownMenu (menu_bar, "filemenu", al, ac);
  534. X    
  535. X    ac = 0;
  536. X    XtSetArg(al[ac], XmNlabelString,
  537. X        XmStringCreateLtoR("Open", charset)); ac++;
  538. X#ifdef HARDCODE
  539. X    XtSetArg(al[ac], XmNacceleratorText,
  540. X        XmStringCreateLtoR("Ext+O", charset)); ac++;
  541. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>O:"); ac++;
  542. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  543. X#endif
  544. X    button = XmCreatePushButtonGadget (menu_pane, "Open", al, ac);
  545. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_OPEN);
  546. X    XtManageChild (button);
  547. X    
  548. X    ac = 0;
  549. X    XtSetArg(al[ac], XmNlabelString,
  550. X        XmStringCreateLtoR("New", charset)); ac++;
  551. X#ifdef HARDCODE
  552. X    XtSetArg(al[ac], XmNacceleratorText,
  553. X        XmStringCreateLtoR("Ext+N", charset)); ac++;
  554. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>N:"); ac++;
  555. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  556. X#endif
  557. X    button = XmCreatePushButtonGadget (menu_pane, "New", al, ac);
  558. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_NEW);
  559. X    XtManageChild (button);
  560. X    
  561. X    ac = 0;
  562. X    XtSetArg(al[ac], XmNlabelString,
  563. X        XmStringCreateLtoR("Close", charset)); ac++;
  564. X#ifdef HARDCODE
  565. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  566. X#endif
  567. X    button = XmCreatePushButtonGadget (menu_pane, "Close", al, ac);
  568. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_CLOSE);
  569. X    XtManageChild (button);
  570. X    
  571. X    
  572. X    ac = 0;
  573. X    XtSetArg(al[ac], XmNlabelString,
  574. X        XmStringCreateLtoR("Save", charset)); ac++;
  575. X#ifdef HARDCODE
  576. X    XtSetArg(al[ac], XmNacceleratorText,
  577. X        XmStringCreateLtoR("Ext+S", charset)); ac++;
  578. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>S:"); ac++;
  579. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  580. X#endif
  581. X    save_button = XmCreatePushButtonGadget (menu_pane, "Save", al, ac);
  582. X    XtAddCallback (save_button, XmNactivateCallback, MenuCB, MENU_SAVE);
  583. X    XtManageChild (save_button);
  584. X    XtSetSensitive(save_button, False);
  585. X    
  586. X    
  587. X    ac = 0;
  588. X    XtSetArg(al[ac], XmNlabelString,
  589. X        XmStringCreateLtoR("Save As...", charset)); ac++;
  590. X#ifdef HARDCODE
  591. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  592. X#endif
  593. X    button = XmCreatePushButtonGadget (menu_pane, "Save As...", al, ac);
  594. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_SAVE_AS);
  595. X    XtManageChild (button);
  596. X    
  597. X    
  598. X    ac = 0;
  599. X    separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
  600. X    XtManageChild (separator);
  601. X    
  602. X    ac = 0;
  603. X    XtSetArg(al[ac], XmNlabelString,
  604. X        XmStringCreateLtoR("Quit", charset)); ac++;
  605. X#ifdef HARDCODE
  606. X    XtSetArg(al[ac], XmNacceleratorText,
  607. X        XmStringCreateLtoR("Ext+Q", charset)); ac++;
  608. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>Q:"); ac++;
  609. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  610. X#endif
  611. X    button = XmCreatePushButtonGadget (menu_pane, "Exit", al, ac);
  612. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_EXIT);
  613. X    XtManageChild (button);
  614. X    
  615. X    ac = 0;
  616. X    XtSetArg (al[ac], XmNsubMenuId, menu_pane);  ac++;
  617. X    XtSetArg(al[ac], XmNlabelString,
  618. X        XmStringCreateLtoR("File", charset)); ac++;
  619. X#ifdef HARDCODE
  620. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  621. X#endif
  622. X    cascade = XmCreateCascadeButton (menu_bar, "File", al, ac);
  623. X    XtManageChild (cascade);
  624. X    
  625. X    /****   Create "Edit" PulldownMenu.     ****/
  626. X    ac = 0;
  627. X    menu_pane = XmCreatePulldownMenu (menu_bar, "editmenu", al, ac);
  628. X
  629. X    ac = 0;
  630. X    XtSetArg(al[ac], XmNlabelString,
  631. X        XmStringCreateLtoR("Undo", charset)); ac++;
  632. X#ifdef HARDCODE
  633. X    XtSetArg(al[ac], XmNacceleratorText,
  634. X        XmStringCreateLtoR("Ext+Z", charset)); ac++;
  635. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>Z:"); ac++;
  636. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  637. X#endif
  638. X    undo_button = XmCreatePushButtonGadget (menu_pane, "Undo", al, ac);
  639. X    XtAddCallback (undo_button, XmNactivateCallback, MenuCB, MENU_UNDO);
  640. X    XtManageChild (undo_button);
  641. X    XtSetSensitive(undo_button, False);
  642. X    
  643. X    ac = 0;
  644. X    separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
  645. X    XtManageChild (separator);
  646. X    
  647. X    ac = 0;
  648. X    XtSetArg(al[ac], XmNlabelString,
  649. X        XmStringCreateLtoR("Cut", charset)); ac++;
  650. X#ifdef HARDCODE
  651. X    XtSetArg(al[ac], XmNacceleratorText,
  652. X        XmStringCreateLtoR("Ext+X", charset)); ac++;
  653. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>X:"); ac++;
  654. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  655. X#endif
  656. X    cut_button = XmCreatePushButtonGadget (menu_pane, "Cut", al, ac);
  657. X    XtAddCallback (cut_button, XmNactivateCallback, MenuCB, MENU_CUT);
  658. X    XtManageChild (cut_button);
  659. X    XtSetSensitive(cut_button, False);
  660. X    
  661. X    ac = 0;
  662. X    XtSetArg(al[ac], XmNlabelString,
  663. X        XmStringCreateLtoR("Copy", charset)); ac++;
  664. X#ifdef HARDCODE
  665. X    XtSetArg(al[ac], XmNacceleratorText,
  666. X        XmStringCreateLtoR("Ext+C", charset)); ac++;
  667. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>C:"); ac++;
  668. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  669. X#endif
  670. X    copy_button = XmCreatePushButtonGadget (menu_pane, "Copy", al, ac);
  671. X    XtAddCallback (copy_button, XmNactivateCallback, MenuCB, MENU_COPY);
  672. X    XtManageChild (copy_button);
  673. X    XtSetSensitive(copy_button, False);
  674. X    
  675. X    ac = 0;
  676. X    XtSetArg(al[ac], XmNlabelString,
  677. X        XmStringCreateLtoR("Paste", charset)); ac++;
  678. X#ifdef HARDCODE
  679. X    XtSetArg(al[ac], XmNacceleratorText,
  680. X        XmStringCreateLtoR("Ext+V", charset)); ac++;
  681. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>V:"); ac++;
  682. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  683. X#endif
  684. X    paste_button = XmCreatePushButtonGadget (menu_pane, "Paste", al, ac); ac++;
  685. X    XtAddCallback (paste_button, XmNactivateCallback, MenuCB, MENU_PASTE);
  686. X    XtManageChild (paste_button);
  687. X    XtSetSensitive(paste_button, False);
  688. X    
  689. X    ac = 0;
  690. X    XtSetArg(al[ac], XmNlabelString,
  691. X        XmStringCreateLtoR("Clear", charset)); ac++;
  692. X#ifdef HARDCODE
  693. X    XtSetArg(al[ac], XmNacceleratorText,
  694. X        XmStringCreateLtoR("Del", charset)); ac++;
  695. X    /* don't need an accelerator - Text already handles
  696. X    this action appropriately */
  697. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  698. X#endif
  699. X    clear_button = XmCreatePushButtonGadget (menu_pane, "Clear", al, ac);
  700. X    XtAddCallback (clear_button, XmNactivateCallback, MenuCB, MENU_CLEAR);
  701. X    XtManageChild (clear_button);
  702. X    XtSetSensitive(clear_button, False);
  703. X    
  704. X    ac = 0;
  705. X    separator = XmCreateSeparator (menu_pane, "Sep", al, ac);
  706. X    XtManageChild (separator);
  707. X    
  708. X    ac = 0;
  709. X    XtSetArg (al[ac], XmNvisibleWhenOff, True);  ac++;
  710. X#ifdef HARDCODE
  711. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  712. X#endif
  713. X    button = XmCreatePushButtonGadget (menu_pane, "Preferences", al, ac); ac++;
  714. X    XtAddCallback (button, XmNactivateCallback, MenuCB, MENU_PREF);
  715. X    XtManageChild (button);
  716. X    
  717. X    ac = 0;
  718. X    XtSetArg (al[ac], XmNsubMenuId, menu_pane);  ac++;
  719. X    XtSetArg(al[ac], XmNlabelString,
  720. X        XmStringCreateLtoR("Edit", charset)); ac++;
  721. X#ifdef HARDCODE
  722. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  723. X#endif
  724. X    cascade= XmCreateCascadeButton (menu_bar, "Edit", al, ac);
  725. X    XtManageChild (cascade);
  726. X    
  727. X    
  728. X    /****   Create "Search" PulldownMenu.   ****/
  729. X    ac = 0;
  730. X    menu_pane = XmCreatePulldownMenu (menu_bar, "searchmenu", al, ac);
  731. X    
  732. X    ac = 0;
  733. X    XtSetArg(al[ac], XmNlabelString,
  734. X        XmStringCreateLtoR("Find", charset)); ac++;
  735. X#ifdef HARDCODE
  736. X    XtSetArg(al[ac], XmNacceleratorText,
  737. X        XmStringCreateLtoR("Ext+F", charset)); ac++;
  738. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>F:"); ac++;
  739. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  740. X#endif
  741. X    find_button = XmCreatePushButtonGadget (menu_pane, "Find", al, ac);
  742. X    XtAddCallback (find_button, XmNactivateCallback, MenuCB, MENU_FIND);
  743. X    XtManageChild (find_button);
  744. X    XtSetSensitive(find_button, False);
  745. X    
  746. X    ac = 0;
  747. X    XtSetArg(al[ac], XmNlabelString,
  748. X        XmStringCreateLtoR("Find again", charset)); ac++;
  749. X#ifdef HARDCODE
  750. X    XtSetArg(al[ac], XmNacceleratorText,
  751. X        XmStringCreateLtoR("Ext+A", charset)); ac++;
  752. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>A:"); ac++;
  753. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  754. X#endif
  755. X    findA_button = XmCreatePushButtonGadget (menu_pane, "FindA", al, ac);
  756. X    XtAddCallback (findA_button, XmNactivateCallback, MenuCB, MENU_FINDA);
  757. X    XtManageChild (findA_button);
  758. X    XtSetSensitive(findA_button, False);
  759. X    
  760. X    ac = 0;
  761. X    XtSetArg(al[ac], XmNlabelString,
  762. X        XmStringCreateLtoR("Replace", charset)); ac++;
  763. X#ifdef HARDCODE
  764. X    XtSetArg(al[ac], XmNacceleratorText,
  765. X        XmStringCreateLtoR("Ext+R", charset)); ac++;
  766. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>R:"); ac++;
  767. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  768. X#endif
  769. X    replace_button = XmCreatePushButtonGadget (menu_pane, "Replace", al, ac);
  770. X    XtAddCallback (replace_button, XmNactivateCallback, MenuCB, MENU_REPLACE);
  771. X    XtManageChild (replace_button);
  772. X    XtSetSensitive(replace_button, False);
  773. X    
  774. X    ac = 0;
  775. X    XtSetArg(al[ac], XmNlabelString,
  776. X        XmStringCreateLtoR("Go to", charset)); ac++;
  777. X#ifdef HARDCODE
  778. X    XtSetArg(al[ac], XmNacceleratorText,
  779. X        XmStringCreateLtoR("Ext+G", charset)); ac++;
  780. X    XtSetArg(al[ac], XmNaccelerator, "Meta<Key>G:"); ac++;
  781. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  782. X#endif
  783. X    goto_button = XmCreatePushButtonGadget (menu_pane, "GoTo", al, ac);
  784. X    XtAddCallback (goto_button, XmNactivateCallback, MenuCB, MENU_GOTO);
  785. X    XtManageChild (goto_button);
  786. X    XtSetSensitive(goto_button, False);
  787. X    
  788. X    ac = 0;
  789. X    XtSetArg (al[ac], XmNsubMenuId, menu_pane);  ac++;
  790. X    XtSetArg(al[ac], XmNlabelString,
  791. X        XmStringCreateLtoR("Search", charset)); ac++;
  792. X#ifdef HARDCODE
  793. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  794. X#endif
  795. X    cascade= XmCreateCascadeButton (menu_bar, "Search", al, ac);
  796. X    XtManageChild (cascade);
  797. X    
  798. X    return (menu_bar);
  799. X}
  800. X
  801. END_OF_FILE
  802. if test 16225 -ne `wc -c <'xmemenu.c'`; then
  803.     echo shar: \"'xmemenu.c'\" unpacked with wrong size!
  804. fi
  805. chmod +x 'xmemenu.c'
  806. # end of 'xmemenu.c'
  807. fi
  808. if test -f 'xmespec.c' -a "${1}" != "-c" ; then 
  809.   echo shar: Will not clobber existing file \"'xmespec.c'\"
  810. else
  811. echo shar: Extracting \"'xmespec.c'\" \(22644 characters\)
  812. sed "s/^X//" >'xmespec.c' <<'END_OF_FILE'
  813. X/**---------------------------------------------------------------------
  814. X***     
  815. X***    file:        xmespec.c
  816. X***            Special dialogs and supporting routines.
  817. X***
  818. X***    project:    jetedit - Motif Widgets text editor
  819. X***
  820. X***-------------------------------------------------------------------*/
  821. X
  822. X#include "xme.h"
  823. X#define FIND 1
  824. X#define REPLACE 2
  825. X
  826. Xstatic Widget    Find_dialog;
  827. Xstatic Widget    find_entry;
  828. Xstatic Widget    replace_entry;
  829. Xstatic Widget    start_at_top;
  830. Xstatic Widget    find_case;
  831. Xstatic Widget    regular_exp;
  832. X
  833. Xchar    *seg_string;
  834. Xchar    *find_string;
  835. X#define EXPSIZE 4096
  836. X#define INIT register char *sp = find_string; 
  837. X#define GETC() (*sp++)
  838. X#define PEEKC() (*sp)
  839. X#define UNGETC(c) (--sp)
  840. X#define RETURN(c) return;
  841. X#define ERROR(c) fprintf (stderr, "\7")
  842. X#include <regexp.h>
  843. X
  844. X/* bits for exclamation point in dialog */
  845. Xchar warningBits[] = {
  846. X   0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  847. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  848. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  849. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  850. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  851. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
  852. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
  853. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00,
  854. X   0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00,
  855. X   0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x00,
  856. X   0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00};
  857. X
  858. X/************************************************************************
  859. X *
  860. X *  CreateDefaultImage - create a default image for warning symbol.
  861. X *
  862. X **********************************<->***********************************/
  863. XXImage *CreateDefaultImage (bits, width, height)
  864. Xchar *bits;
  865. Xint   width, height;
  866. X{
  867. X    XImage *image;
  868. X
  869. X    image = (XImage *) XtMalloc (sizeof (XImage));
  870. X    image->width = width;
  871. X    image->height = height;
  872. X    image->data = bits;
  873. X    image->depth = 1;
  874. X    image->xoffset = 0;
  875. X    image->format = XYBitmap;
  876. X    image->byte_order = LSBFirst;
  877. X    image->bitmap_unit = 8;
  878. X    image->bitmap_bit_order = LSBFirst;
  879. X    image->bitmap_pad = 8;
  880. X    image->bytes_per_line = (width+7)/8;
  881. X    return (image);
  882. X}
  883. X
  884. X
  885. X
  886. X/*-------------------------------------------------------------
  887. X**    CreateSpecialWarningDialog
  888. X**        Create special 3 button message box out of a
  889. X**     Selection box.
  890. X*/
  891. XWidget CreateSpecialWarningDialog (parent, name, image_string, message,
  892. X                    arglist, argcount)
  893. XWidget        parent;
  894. XString        name;
  895. XString        image_string;
  896. XString        message;
  897. XArg        arglist[];
  898. XCardinal    argcount;
  899. X{
  900. X    Widget    warning_dialog;    /*  special warning selection box */
  901. X    Widget    work_area;    /*  rowcolumn for pixmap and text */
  902. X    Widget    pixmap_label;
  903. X    Widget    text_label;
  904. X    Widget    apply_button;
  905. X    Widget    ok_button;
  906. X    Widget    kid[5];        /*  buttons        */
  907. X    XmFontList    font_list;
  908. X    Pixel    foreground;    /*  dialog foreground    */
  909. X    Pixel    background;    /*  dialog background    */
  910. X    Pixmap    pixmap;        /*  dialog pixmap    */
  911. X    register int    i;    /*  kid index        */
  912. X    Arg        al[10];
  913. X    Cardinal    ac;
  914. X
  915. X    warning_dialog = XmCreatePromptDialog(parent, name, arglist, argcount);
  916. X
  917. X    /* Create work area for insertion of prompt. */
  918. X    ac = 0;
  919. X    XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++;
  920. X    work_area = XmCreateRowColumn(warning_dialog, "workarea", al, ac);
  921. X    XtManageChild(work_area);
  922. X
  923. X    ac = 0;
  924. X    XtSetArg(al[ac], XmNforeground, &foreground); ac++;
  925. X    XtSetArg(al[ac], XmNbackground, &background); ac++;
  926. X    XtGetValues(warning_dialog, al, ac);
  927. X
  928. X    /* Create and insert prompt. */
  929. X    ac = 0;
  930. X    XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++;
  931. X    pixmap = XmGetPixmap(XtScreen(warning_dialog), image_string,
  932. X                     foreground, background);
  933. X    XtSetArg(al[ac], XmNlabelPixmap, pixmap); ac++;
  934. X    pixmap_label = XmCreateLabel(work_area, "pixmap_label", al, ac);
  935. X    XtManageChild(pixmap_label);
  936. X
  937. X    /* Label for the prompt. */
  938. X    ac = 0;
  939. X    XtSetArg(al[ac], XmNlabelString,
  940. X         XmStringCreateLtoR(message, charset)); ac++;
  941. X#ifdef HARDCODE
  942. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  943. X#endif
  944. X    text_label = XmCreateLabel(work_area, "text_label", al, ac);
  945. X    XtManageChild(text_label);
  946. X
  947. X    /* Create discard button. */
  948. X    ac = 0;
  949. X    apply_button = XmSelectionBoxGetChild (warning_dialog,
  950. X         XmDIALOG_APPLY_BUTTON);
  951. X    XtSetArg(al[ac], XmNlabelString,
  952. X         XmStringCreateLtoR("Discard", charset)); ac++;
  953. X    XtSetValues(apply_button, al, ac);
  954. X    XtManageChild(apply_button);
  955. X
  956. X    /* Change label on OK button. */
  957. X    ac = 0;
  958. X    ok_button = XmSelectionBoxGetChild (warning_dialog,
  959. X         XmDIALOG_OK_BUTTON);
  960. X    XtSetArg(al[ac], XmNlabelString,
  961. X         XmStringCreateLtoR("Save", charset)); ac++;
  962. X    XtSetValues(ok_button, al, ac);
  963. X
  964. X        
  965. X    /*        Unmanage unneeded children.
  966. X    */
  967. X    i = 0;
  968. X    kid[i++] = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_TEXT);
  969. X    kid[i++] = XmSelectionBoxGetChild (warning_dialog,
  970. X         XmDIALOG_SELECTION_LABEL);
  971. X    kid[i++] = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_HELP_BUTTON);
  972. X    XtUnmanageChildren (kid, i);
  973. X
  974. X    return(warning_dialog);
  975. X}
  976. X
  977. X
  978. X/*-------------------------------------------------------------
  979. X**    strlwr
  980. X**        Convert any upper case letters in string
  981. X**        to lower case.
  982. X*/
  983. Xvoid strlwr (theString)
  984. Xchar    *theString;
  985. X{
  986. X    int  i, j;
  987. X    
  988. X    j = strlen (theString);
  989. X    for (i=0; i<j; i++)
  990. X        if (theString[i] >= 'A' && theString[i] <= 'Z')
  991. X            theString[i] += 'a' - 'A';
  992. X}
  993. X
  994. X
  995. X
  996. X/*-------------------------------------------------------------
  997. X**      ReplaceString
  998. X**        The callback for the menu replace function.
  999. X*/
  1000. Xvoid ReplaceString()
  1001. X{
  1002. X    Arg        al[1];
  1003. X    char    replaceString[MAXLENGTH];
  1004. X    char    *aString;
  1005. X    char    *selString;
  1006. X    char    *file_string;        /* Contents of file.    */
  1007. X    XmTextPosition cursorPos;
  1008. X
  1009. X    /* Get the Replace string */
  1010. X    aString = &replaceString[0];
  1011. X    XtSetArg (al[0], XmNvalue, &aString);
  1012. X    XtGetValues (replace_entry, al, 1);
  1013. X    
  1014. X    if (selString = XmTextGetSelection(text)) {
  1015. X        file_string = XmTextGetString(text);
  1016. X        XtSetArg (al[0], XmNcursorPosition, &cursorPos);
  1017. X        XtGetValues (text, al, 1);
  1018. X        if (!strncmp (selString, file_string+cursorPos, strlen(selString))) {
  1019. X            XmTextReplace (text, cursorPos, cursorPos + strlen(selString), "");
  1020. X            XmTextReplace (text, cursorPos, cursorPos, aString);
  1021. X        }
  1022. X        else {
  1023. X            XmTextReplace (text, cursorPos, cursorPos, aString);
  1024. X            XmTextReplace (text, cursorPos - strlen(selString), cursorPos, "");
  1025. X        }
  1026. X        XtFree (selString);
  1027. X        XtFree (file_string);
  1028. X    }
  1029. X}
  1030. X
  1031. X
  1032. X/*-------------------------------------------------------------
  1033. X**      FindString
  1034. X**        The use of regular expressions was contributed by:
  1035. X**        jec@milne.boeing.com (Jim Campbell)
  1036. X*/
  1037. XBoolean FindString(thetime)
  1038. XTime thetime;
  1039. X{
  1040. X    char    *file_string;        /* Contents of file.    */
  1041. X    char    *found;
  1042. X    char    buffer[30];
  1043. X    XmTextPosition cursorPos;
  1044. X    XmTextPosition end_cursorPos;
  1045. X    Arg        al[1];
  1046. X    Boolean    ignore_case;
  1047. X    Boolean    reg_exp;
  1048. X    char expbuf [EXPSIZE];
  1049. X
  1050. X    if (!the_string) {
  1051. X        fprintf (stderr, "\7");    /* Beep */
  1052. X        XmTextClearSelection(text, thetime);
  1053. X        return (False);
  1054. X    }
  1055. X        
  1056. X    /* get the text string */
  1057. X    file_string = XmTextGetString(text);
  1058. X    XtSetArg (al[0], XmNcursorPosition, &cursorPos);
  1059. X    XtGetValues (text, al, 1);
  1060. X    seg_string = (char *)((long)file_string + (long)cursorPos);
  1061. X    find_string = XtMalloc (strlen(the_string) + 1);
  1062. X    strcpy (find_string, the_string);
  1063. X    
  1064. X    XtSetArg (al[0], XmNset, &ignore_case);
  1065. X    XtGetValues (find_case, al, 1);
  1066. X    if (ignore_case) {
  1067. X        strlwr (seg_string);
  1068. X        strlwr (find_string);
  1069. X    }
  1070. X        
  1071. X    XtSetArg (al[0], XmNset, ®_exp);
  1072. X    XtGetValues (regular_exp, al, 1);
  1073. X    if (reg_exp) {
  1074. X        compile (find_string, expbuf, &expbuf[EXPSIZE], '\0');     
  1075. X        if (step (seg_string, expbuf)) {
  1076. X            cursorPos = (XmTextPosition)((long)loc1 + (long)cursorPos - (long)seg_string); 
  1077. X            end_cursorPos = (XmTextPosition)((long)cursorPos + (long)loc2 - (long)loc1); 
  1078. X            XmTextSetSelection(text, cursorPos, end_cursorPos, thetime); 
  1079. X            MoveTo(end_cursorPos);
  1080. X            XtFree (file_string);
  1081. X            XtFree (find_string);
  1082. X            return (True);
  1083. X        }
  1084. X        else {
  1085. X            fprintf (stderr, "\7");    /* Beep */
  1086. X            XmTextClearSelection(text, thetime);
  1087. X            XtFree (file_string);
  1088. X            XtFree (find_string);
  1089. X            return (False);
  1090. X        }
  1091. X    }
  1092. X    else {
  1093. X        if ((found = strstr (seg_string, find_string)) != NULL) {
  1094. X            cursorPos = (XmTextPosition)((long)found + (long)cursorPos - (long)seg_string);
  1095. X            end_cursorPos = (XmTextPosition)((long)cursorPos + strlen(the_string));
  1096. X            XmTextSetSelection(text, cursorPos, end_cursorPos, thetime);
  1097. X            MoveTo(end_cursorPos);
  1098. X            XtFree (file_string);
  1099. X            XtFree (find_string);
  1100. X            return (True);
  1101. X        }
  1102. X        else {
  1103. X            fprintf (stderr, "\7");    /* Beep */
  1104. X            XmTextClearSelection(text, thetime);
  1105. X            XtFree (file_string);
  1106. X            XtFree (find_string);
  1107. X            return (False);
  1108. X        }
  1109. X    }
  1110. X}
  1111. X
  1112. X
  1113. X/*-------------------------------------------------------------
  1114. X**    FindCB
  1115. X*/
  1116. Xvoid FindCB (w, client_data, call_data) 
  1117. XWidget         w;        /*  widget id           */
  1118. Xcaddr_t        client_data;    /*  data from application   */
  1119. Xcaddr_t        call_data;    /*  data from widget class  */
  1120. X{
  1121. X    Arg        al[1];
  1122. X    Boolean    startAtTop;
  1123. X
  1124. X    XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
  1125. X    
  1126. X    XtSetArg (al[0], XmNvalue, &the_string);
  1127. X    XtGetValues (find_entry, al, 1);
  1128. X    
  1129. X    /* Get Start at beginning of file indicator */
  1130. X    XtSetArg (al[0], XmNset, &startAtTop);
  1131. X    XtGetValues (start_at_top, al, 1);
  1132. X    if (startAtTop) {
  1133. X        MoveTo((XmTextPosition)0);
  1134. X        XtSetArg (al[0], XmNset, False);
  1135. X        XtSetValues (start_at_top, al, 1);
  1136. X    }
  1137. X    
  1138. X    FindString (cb->event->xbutton.time);
  1139. X    XtSetSensitive (findA_button, True);
  1140. X    XtSetSensitive (replace_button, True);
  1141. X    XtSetSensitive (replace_pb, True);
  1142. X    XtSetSensitive (replaceAll_pb, True);
  1143. X}
  1144. X
  1145. X
  1146. X/*-------------------------------------------------------------
  1147. X**    ReplaceCB
  1148. X*/
  1149. Xvoid ReplaceCB (w, client_data, call_data) 
  1150. XWidget         w;        /*  widget id           */
  1151. Xcaddr_t        client_data;    /*  data from application   */
  1152. Xcaddr_t        call_data;    /*  data from widget class  */
  1153. X{
  1154. X    Arg        al[1];
  1155. X    char    replaceString[MAXLENGTH];
  1156. X    char    *aString;
  1157. X    XmTextPosition cursorPos;        /* text cursor position */
  1158. X    XmTextPosition cursorBack;
  1159. X    Boolean    startAtTop;
  1160. X    Time    thetime;
  1161. X    
  1162. X    XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
  1163. X    thetime = cb->event->xbutton.time;
  1164. X    
  1165. X    ReplaceString();
  1166. X    FindString(thetime+2);
  1167. X}
  1168. X
  1169. X/*-------------------------------------------------------------
  1170. X**    ReplaceAllCB
  1171. X*/
  1172. Xvoid ReplaceAllCB (w, client_data, call_data) 
  1173. XWidget         w;        /*  widget id           */
  1174. Xcaddr_t        client_data;    /*  data from application   */
  1175. Xcaddr_t        call_data;    /*  data from widget class  */
  1176. X{
  1177. X    Arg        al[1];
  1178. X    char    replaceString[MAXLENGTH];
  1179. X    char    *aString;
  1180. X    XmTextPosition cursorPos;        /* text cursor position */
  1181. X    XmTextPosition cursorBack;
  1182. X    Boolean    startAtTop;
  1183. X    Time    thetime;
  1184. X    
  1185. X    XmAnyCallbackStruct *cb = (XmAnyCallbackStruct *) call_data;
  1186. X    thetime = cb->event->xbutton.time;
  1187. X    
  1188. X    /* Get the Find string */
  1189. X    XtSetArg (al[0], XmNvalue, &the_string);
  1190. X    XtGetValues (find_entry, al, 1);
  1191. X    cursorBack = strlen (the_string);
  1192. X    /* Get the Replace string */
  1193. X    aString = &replaceString[0];
  1194. X    XtSetArg (al[0], XmNvalue, &aString);
  1195. X    XtGetValues (replace_entry, al, 1);
  1196. X    /* Get Start at beginning of file indicator */
  1197. X    XtSetArg (al[0], XmNset, &startAtTop);
  1198. X    XtGetValues (start_at_top, al, 1);
  1199. X    
  1200. X    XtSetSensitive (findA_button, True);
  1201. X    if (startAtTop) {
  1202. X        MoveTo((XmTextPosition)0);
  1203. X        XtSetArg (al[0], XmNset, False);
  1204. X        XtSetValues (start_at_top, al, 1);
  1205. X    }
  1206. X    
  1207. X    while (FindString(thetime++)) {
  1208. X        XtSetArg (al[0], XmNcursorPosition, &cursorPos);
  1209. X        XtGetValues (text, al, 1);
  1210. X        XmTextReplace (text, cursorPos-cursorBack, cursorPos, aString);
  1211. X    }
  1212. X}
  1213. X
  1214. X/*-------------------------------------------------------------
  1215. X**    ExitCB
  1216. X*/
  1217. Xvoid ExitCB (w, client_data, call_data) 
  1218. XWidget         w;        /*  widget id           */
  1219. Xcaddr_t        client_data;    /*  data from application   */
  1220. Xcaddr_t        call_data;    /*  data from widget class  */
  1221. X{
  1222. X    XtUnmanageChild (Find_dialog);
  1223. X}
  1224. X
  1225. X
  1226. X/*-------------------------------------------------------------
  1227. X**    FindHelpCB
  1228. X*/
  1229. Xvoid FindHelpCB (w, client_data, call_data) 
  1230. XWidget         w;        /*  widget id           */
  1231. Xcaddr_t        client_data;    /*  data from application   */
  1232. Xcaddr_t        call_data;    /*  data from widget class  */
  1233. X{
  1234. X    XtManageChild (find_help_dialog);
  1235. X}
  1236. X
  1237. X
  1238. X/*--------------------------------------------------------------
  1239. X**    Translation table for the find dialog's text widgets.
  1240. X*/
  1241. Xstatic char defaultTranslations[] =
  1242. X    "Meta<Key>X:    CutItem()    \n\
  1243. X    Meta<Key>C:        CopyItem()    \n\
  1244. X    Meta<Key>V:        PasteItem()";
  1245. X
  1246. X/*-------------------------------------------------------------
  1247. X**    CreateSpecialFindDialog
  1248. X**        Create find & replace message box out of a
  1249. X**     Dialog Shell.
  1250. X*/
  1251. XWidget CreateSpecialFindDialog (parent, dialog_name, arglist, argcount)
  1252. XWidget        parent;
  1253. XString        dialog_name;
  1254. XArg        arglist[];
  1255. XCardinal    argcount;
  1256. X{
  1257. X    Widget    work_area;
  1258. X    Widget    help_area;
  1259. X    Widget    button;
  1260. X    Widget    separator;
  1261. X    Widget    label;
  1262. X    Widget    kid[5];
  1263. X    int        i;
  1264. X    Arg        al[15];
  1265. X    Cardinal    ac;
  1266. X    XmFontList    font_list;
  1267. X    Dimension    button_width;
  1268. X    XtTranslations trans_table;
  1269. X    
  1270. X    trans_table = XtParseTranslationTable(defaultTranslations);
  1271. X    
  1272. X    Find_dialog = XmCreatePromptDialog(parent, dialog_name, arglist, argcount);
  1273. X    
  1274. X    ac = 0;
  1275. X    XtSetArg(al[ac], XmNtextFontList, &font_list); ac++;
  1276. X    XtGetValues(Find_dialog, al, ac);
  1277. X    
  1278. X    /* Create work area. */
  1279. X    ac=0;
  1280. X    work_area = XmCreateRowColumn(Find_dialog, "workarea", al, ac);
  1281. X    XtManageChild(work_area);
  1282. X    
  1283. X    /* Label for the "Find Text". */
  1284. X    ac = 0;
  1285. X    XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
  1286. X#ifdef HARDCODE
  1287. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1288. X#endif
  1289. X    label = XmCreateLabel(work_area, "Find Text:", al, ac);
  1290. X    XtManageChild(label);
  1291. X
  1292. X    /* Create "Find Text" box. */
  1293. X    ac = 0;
  1294. X    XtSetArg(al[ac], XmNmaxLength, MAXLENGTH); ac++;
  1295. X#ifdef HARDCODE
  1296. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1297. X#endif
  1298. X    find_entry = XmCreateText(work_area, "find_entry", al, ac);
  1299. X    XtManageChild(find_entry);
  1300. X    XtOverrideTranslations (find_entry, trans_table);
  1301. X
  1302. X    /* Label for the "Replace With". */
  1303. X    ac = 0;
  1304. X    XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
  1305. X    XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
  1306. X#ifdef HARDCODE
  1307. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1308. X#endif
  1309. X    label = XmCreateLabel(work_area, "Replace With:", al, ac);
  1310. X    XtManageChild(label);
  1311. X
  1312. X    /* Create "Replace With" box. */
  1313. X    ac = 0;
  1314. X    XtSetArg(al[ac], XmNmaxLength, MAXLENGTH); ac++;
  1315. X#ifdef HARDCODE
  1316. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1317. X#endif
  1318. X    replace_entry = XmCreateText(work_area, "replace_entry", al, ac);
  1319. X    XtManageChild(replace_entry);
  1320. X    XtOverrideTranslations (replace_entry, trans_table);
  1321. X
  1322. X    /* Create "Ignore Case" button. */
  1323. X    ac = 0;
  1324. X    XtSetArg(al[ac], XmNlabelString,
  1325. X         XmStringCreateLtoR("Ignore text case", charset)); ac++;
  1326. X#ifdef HARDCODE
  1327. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1328. X#endif
  1329. X    find_case = XmCreateToggleButtonGadget(work_area, "find_case", al, ac);
  1330. X    XtManageChild(find_case);
  1331. X
  1332. X    /* Create "Start at top of file" button. */
  1333. X    ac = 0;
  1334. X    XtSetArg(al[ac], XmNlabelString,
  1335. X         XmStringCreateLtoR("Start at top of file", charset)); ac++;
  1336. X#ifdef HARDCODE
  1337. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1338. X#endif
  1339. X    start_at_top = XmCreateToggleButtonGadget(work_area, "start_at_top", al, ac);
  1340. X    XtManageChild(start_at_top);
  1341. X
  1342. X    /* Create "Use Regular Expressions" button. */
  1343. X    ac = 0;
  1344. X    XtSetArg(al[ac], XmNlabelString,
  1345. X         XmStringCreateLtoR("Use regular expressions", charset)); ac++;
  1346. X#ifdef HARDCODE
  1347. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1348. X#endif
  1349. X    regular_exp = XmCreateToggleButtonGadget(work_area, "regular_exp", al, ac);
  1350. X    XtManageChild(regular_exp);
  1351. X
  1352. X    /*** Put a separator and help message below the work area ***/
  1353. X    ac = 0;
  1354. X    separator = XmCreateSeparator(work_area, "separator", al, ac);
  1355. X    XtManageChild(separator);
  1356. X    
  1357. X    ac = 0;
  1358. X    XtSetArg (al[ac], XmNorientation, XmHORIZONTAL);  ac++;
  1359. X    help_area = XmCreateRowColumn(work_area, "help_area", al, ac);
  1360. X    XtManageChild(help_area);
  1361. X    
  1362. X    ac = 0;
  1363. X    XtSetArg(al[ac], XmNlabelString,
  1364. X         XmStringCreateLtoR("Help", charset)); ac++;
  1365. X#ifdef HARDCODE
  1366. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1367. X#endif
  1368. X    button = XmCreatePushButtonGadget(help_area, "Help", al, ac);
  1369. X    XtManageChild(button);
  1370. X    
  1371. X    ac = 0;
  1372. X#ifdef HARDCODE
  1373. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1374. X#endif
  1375. X    label = XmCreateLabelGadget (help_area, 
  1376. X        "Press HELP for a quick reference to regular expressions.", al, ac);
  1377. X    XtManageChild (label);
  1378. X    
  1379. X    /* Relabel OK button */
  1380. X    ac = 0;
  1381. X    XtSetArg(al[ac], XmNokLabelString,
  1382. X         XmStringCreateLtoR("Find", charset)); ac++;
  1383. X    XtSetValues(Find_dialog, al, ac);
  1384. X
  1385. X    /* Create Replace button. */
  1386. X    ac = 0;
  1387. X    XtSetArg(al[ac], XmNapplyLabelString,
  1388. X         XmStringCreateLtoR("Replace", charset)); ac++;
  1389. X    XtSetValues(Find_dialog, al, ac);
  1390. X    replace_pb = XmSelectionBoxGetChild (Find_dialog, XmDIALOG_APPLY_BUTTON);
  1391. X    XtManageChild(replace_pb);
  1392. X    XtSetSensitive(replace_pb, False);
  1393. X
  1394. X    /* Relabel Cancel button */
  1395. X    ac = 0;
  1396. X    XtSetArg(al[ac], XmNcancelLabelString,
  1397. X         XmStringCreateLtoR("Replace All", charset)); ac++;
  1398. X    XtSetValues(Find_dialog, al, ac);
  1399. X    replaceAll_pb = XmSelectionBoxGetChild (Find_dialog, XmDIALOG_CANCEL_BUTTON);
  1400. X    XtSetSensitive(replaceAll_pb, False);
  1401. X
  1402. X    /* Relabel Help button */
  1403. X    ac = 0;
  1404. X    XtSetArg(al[ac], XmNhelpLabelString,
  1405. X         XmStringCreateLtoR("Done", charset)); ac++;
  1406. X    XtSetValues(Find_dialog, al, ac);
  1407. X
  1408. X    XtAddCallback (button, XmNactivateCallback, FindHelpCB, NULL);
  1409. X    XtAddCallback (Find_dialog, XmNokCallback, FindCB, NULL);
  1410. X    XtAddCallback (Find_dialog, XmNapplyCallback, ReplaceCB, NULL);
  1411. X    XtAddCallback (Find_dialog, XmNcancelCallback, ReplaceAllCB, NULL);
  1412. X    XtAddCallback (Find_dialog, XmNhelpCallback, ExitCB, NULL); 
  1413. X    
  1414. X    /*    Unmanage unneeded children. */
  1415. X    i = 0;
  1416. X    kid[i++] = XmSelectionBoxGetChild (Find_dialog, XmDIALOG_TEXT);
  1417. X    kid[i++] = XmSelectionBoxGetChild (Find_dialog, XmDIALOG_SELECTION_LABEL);
  1418. X    XtUnmanageChildren (kid, i);
  1419. X
  1420. X    XmAddTabGroup(find_entry);
  1421. X    XmAddTabGroup(replace_entry);
  1422. X    XmAddTabGroup(find_case);
  1423. X    XmAddTabGroup(start_at_top);
  1424. X    XmAddTabGroup(regular_exp);
  1425. X    XmAddTabGroup(button);
  1426. X    XmAddTabGroup(Find_dialog);
  1427. X    return(Find_dialog);
  1428. X}
  1429. X
  1430. X        
  1431. X
  1432. X/*-------------------------------------------------------------
  1433. X**    CreateSpecialHelpDialog
  1434. X*/
  1435. XWidget CreateSpecialHelpDialog (parent, help_txt, dialog_name, arglist, argcount)
  1436. XWidget        parent;
  1437. XWidget        *help_txt;
  1438. XString        dialog_name;
  1439. XArg        arglist[];
  1440. XCardinal    argcount;
  1441. X{
  1442. X    Widget    the_dialog;
  1443. X    Widget    text_window;
  1444. X    Widget    butt_sep;
  1445. X    Widget    button_area;
  1446. X    Widget    helpok_button;
  1447. X    Arg        al[15];
  1448. X    Cardinal    ac;
  1449. X    int        file_length;    /* Length of file.        */
  1450. X    char    *file_string;    /* Contents of file.      */
  1451. X    int        tfd;        /* Temporary file descriptor */
  1452. X    struct stat statbuf;    /* Information on a file. */
  1453. X    XmFontList    font_list;
  1454. X    
  1455. X    the_dialog = XmCreateFormDialog(parent, dialog_name, arglist, argcount);
  1456. X
  1457. X    ac = 0;
  1458. X    XtSetArg(al[ac], XmNtextFontList, &font_list); ac++;
  1459. X    XtGetValues(the_dialog, al, ac);
  1460. X
  1461. X    ac = 0;
  1462. X    XtSetArg(al[ac], XmNmarginWidth, 0); ac++;
  1463. X    XtSetArg(al[ac], XmNmarginHeight, 0); ac++;
  1464. X    XtSetArg(al[ac], XmNheight, 400); ac++;
  1465. X    XtSetArg(al[ac], XmNwidth, 400); ac++;
  1466. X    XtSetArg(al[ac], XmNresizePolicy, XmRESIZE_GROW); ac++;
  1467. X    XtSetArg(al[ac], XmNdialogTitle,
  1468. X         XmStringCreateLtoR(dialog_name, charset)); ac++;
  1469. X    XtSetValues (the_dialog, al, ac);
  1470. X
  1471. X    /* Create Help Ok button. */
  1472. X    ac = 0;
  1473. X    XtSetArg(al[ac], XmNbottomOffset, 10); ac++;
  1474. X    XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
  1475. X    XtSetArg(al[ac], XmNleftOffset, 15); ac++;
  1476. X    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
  1477. X    XtSetArg(al[ac], XmNshowAsDefault, 1); ac++;
  1478. X#ifdef HARDCODE
  1479. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1480. X#endif
  1481. X    helpok_button = XmCreatePushButtonGadget (the_dialog, "OK",al, ac);
  1482. X    XtManageChild(helpok_button);
  1483. X
  1484. X    /* Create seperator above button. */
  1485. X    ac = 0;
  1486. X    XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
  1487. X    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
  1488. X    XtSetArg(al[ac], XmNbottomWidget, (XtArgVal)helpok_button); ac++;
  1489. X    XtSetArg(al[ac], XmNbottomOffset, 10); ac++;
  1490. X    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
  1491. X    butt_sep = XmCreateSeparator(the_dialog, "butt_sep", al, ac);
  1492. X    XtManageChild(butt_sep);
  1493. X
  1494. X    /* Create "Help Text" box. */
  1495. X    ac = 0;
  1496. X    XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
  1497. X    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
  1498. X    XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
  1499. X    XtSetArg(al[ac], XmNbottomWidget, (XtArgVal)butt_sep); ac++;
  1500. X    XtSetArg(al[ac], XmNbottomOffset, 10); ac++;
  1501. X    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
  1502. X    XtSetArg(al[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++;
  1503. X    XtSetArg(al[ac], XmNeditable, False); ac++;
  1504. X    XtSetArg(al[ac], XmNscrollHorizontal, False); ac++;
  1505. X    XtSetArg(al[ac], XmNwordWrap, True); ac++;
  1506. X#ifdef HARDCODE
  1507. X    XtSetArg (al[ac], XmNfontList, fontlist);  ac++;
  1508. X#endif
  1509. X    *help_txt = XmCreateScrolledText(the_dialog, "help_text", al, ac);
  1510. X    XtManageChild(*help_txt);
  1511. X    
  1512. X    text_window = XtParent (*help_txt);
  1513. X    ac = 0;
  1514. X    XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
  1515. X    XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
  1516. X    XtSetArg(al[ac], XmNbottomWidget, (XtArgVal)butt_sep); ac++;
  1517. X    XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
  1518. X    XtSetValues (text_window, al, ac);
  1519. X    
  1520. X    return (the_dialog);
  1521. X}
  1522. X
  1523. X
  1524. END_OF_FILE
  1525. if test 22644 -ne `wc -c <'xmespec.c'`; then
  1526.     echo shar: \"'xmespec.c'\" unpacked with wrong size!
  1527. fi
  1528. chmod +x 'xmespec.c'
  1529. # end of 'xmespec.c'
  1530. fi
  1531. echo shar: End of archive 2 \(of 4\).
  1532. cp /dev/null ark2isdone
  1533. MISSING=""
  1534. for I in 1 2 3 4 ; do
  1535.     if test ! -f ark${I}isdone ; then
  1536.     MISSING="${MISSING} ${I}"
  1537.     fi
  1538. done
  1539. if test "${MISSING}" = "" ; then
  1540.     echo You have unpacked all 4 archives.
  1541.     rm -f ark[1-9]isdone
  1542. else
  1543.     echo You still need to unpack the following archives:
  1544.     echo "        " ${MISSING}
  1545. fi
  1546. ##  End of shell archive.
  1547. exit 0
  1548.  
  1549. exit 0 # Just in case...
  1550. -- 
  1551.   // chris@IMD.Sterling.COM            | Send comp.sources.x submissions to:
  1552. \X/  Amiga - The only way to fly!      |
  1553.  "It's intuitively obvious to the most |    sources-x@imd.sterling.com
  1554.   casual observer..."                  |
  1555.