home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume39 / remind / patch09c < prev    next >
Encoding:
Text File  |  1993-10-04  |  56.1 KB  |  1,470 lines

  1. Newsgroups: comp.sources.misc
  2. From: dfs@doe.carleton.ca (David F. Skoll)
  3. Subject: v39i117:  remind - A replacement for calendar, Patch09c/4
  4. Message-ID: <1993Oct4.203951.8096@sparky.sterling.com>
  5. X-Md4-Signature: 1d433b1fc40db3530e16ead0a828c986
  6. Sender: kent@sparky.sterling.com (Kent Landfield)
  7. Organization: Dept. of Electronics, Carleton University
  8. Date: Mon, 4 Oct 1993 20:39:51 GMT
  9. Approved: kent@sparky.sterling.com
  10.  
  11. Submitted-by: dfs@doe.carleton.ca (David F. Skoll)
  12. Posting-number: Volume 39, Issue 117
  13. Archive-name: remind/patch09c
  14. Environment: UNIX, MS-DOS, OS/2
  15. Patch-To: remind: Volume 33, Issue 58-69
  16.  
  17. #! /bin/sh
  18. # This is a shell archive.  Remove anything before this line, then feed it
  19. # into a shell via "sh file" or similar.  To overwrite existing files,
  20. # type "sh file -c".
  21. # Contents:  patch.09.A.UU patch.09.D
  22. # Wrapped by kent@sparky on Mon Oct  4 15:03:31 1993
  23. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 3 (of 4)."'
  26. if test -f 'patch.09.A.UU' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'patch.09.A.UU'\"
  28. else
  29.   echo shar: Extracting \"'patch.09.A.UU'\" \(10581 characters\)
  30.   sed "s/^X//" >'patch.09.A.UU' <<'END_OF_FILE'
  31. Xbegin 664 patch.09.A
  32. XM4')E<F5Q.B B,#,N,# N,#@B"BHJ*B N+B]P<F5V+W9E<G-I;VXN: E-;VX@
  33. XM2G5L(#$Y(#$R.C(Q.C4S(#$Y.3,*+2TM("XO=F5R<VEO;BYH"51U92!!=6<@
  34. XM,S$@,3,Z,C(Z,C4@,3DY,PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#DL,3(@*BHJ
  35. XM*@H@("\J(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
  36. XM(" @(" @(" @(" @(" @(" @(" @("HO"B @+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ
  37. XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
  38. XM*B\*(" *(2 C9&5F:6YE(%9%4E-)3TX@(C S+C P+C X(@HM+2T@.2PQ,B M
  39. XM+2TM"B @+RH@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
  40. XM(" @(" @(" @(" @(" @(" @(" @(" @*B\*(" O*BHJ*BHJ*BHJ*BHJ*BHJ
  41. XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
  42. XM*BHJ+PH@( HA("-D969I;F4@5D524TE/3B B,#,N,# N,#DB"BHJ*B N+B]P
  43. XM<F5V+TU!3DE&15-4+D1/4PE7960@075G(#$X(#$Q.C$P.C0Y(#$Y.3,*+2TM
  44. XM("XO34%.249%4U0N1$]3"4UO;B!397 @,C @,30Z-3@Z,3<@,3DY,PHJ*BHJ
  45. XM*BHJ*BHJ*BHJ*BH**BHJ(#,P+#,U("HJ*BH*+2TM(#,P+#,V("TM+2T*("!M
  46. XM86ME9FEL92YT8PH@(&UA;FEF97-T+F1O<PH@(&UA;FEF97-T+G5N> HK(&UO
  47. XM;VXN8PH@(&YO<G=G:6%N+F@*("!O;6ET+F,*("!P<F]T;W,N: HJ*BH@+BXO
  48. XM<')E=B]-04Y)1D535"Y53E@)5V5D($%U9R Q." Q,3HQ,3HP,R Q.3DS"BTM
  49. XM+2 N+TU!3DE&15-4+E5.6 E-;VX@4V5P(#(P(#$T.C4X.C X(#$Y.3,**BHJ
  50. XM*BHJ*BHJ*BHJ*BHJ"BHJ*B S-"PS.2 J*BHJ"BTM+2 S-"PT," M+2TM"B @
  51. XM;6%K969I;&4N;7-C"B @;6%K969I;&4N;W,R"B @;6%K969I;&4N=&,**R!M
  52. XM;V]N+F,*("!N;W)W9VEA;BYH"B @;VUI="YC"B @<')O=&]S+F@**BHJ("XN
  53. XM+W!R978O36%K969I;&4)5'5E($%U9R S,2 Q,CHS-3HU.2 Q.3DS"BTM+2 N
  54. XM+TUA:V5F:6QE"51U92!397 @,C@@,38Z-#@Z-3<@,3DY,PHJ*BHJ*BHJ*BHJ
  55. XM*BHJ*BH**BHJ(#0T+#4W("HJ*BH*(" C($U!3DU/1$4Z("!7:&%T(&9I;&4@
  56. XM<')O=&5C=&EO;B!M;V1E('-H;W5L9"!B92!U<V5D(&9O<B!T:&4@;6%N('!A
  57. XM9V5S/PH@($U!3DU/1$4](#8T- H@( HA(",@3U=.15(Z("!7:&%T(&]W;F5R
  58. XM(&%N9"!G<F]U<"!T;R!U<V4@9F]R(&5X96-U=&%B;&5S+"!S8W)I<'1S(&%N
  59. XM9"!M86X@<&%G97,_"B$@3U=.15(]8FEN+F)I;@H@( H@(",M+2TM+2TM+2TM
  60. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
  61. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0H@(",@64]5(%-(3U5,1$XG5"!%1$E4
  62. XM($%.651(24Y'($)%3$]7($A%4D4N("!9;W4@;6%Y('=A;G0@=&\@8VAA;F=E
  63. XM('-O;64@=&AI;F=S"B @(R!I;B!C;VYF:6<N:#L@=&AE;BP@>6]U('-H;W5L
  64. XM9"!B92!A8FQE('1O('1Y<&4@)VUA:V4G+@H@(",M+2TM+2TM+2TM+2TM+2TM
  65. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
  66. XM+2TM+2TM+2TM+2TM+2TM+0HA(%9%4E-)3TX](# S+C P+C X"B @34%42$Q)
  67. XM0CT@+6QM"B @"B @2$124ST@8V]N9FEG+F@@97)R+F@@97AP<BYH(&=L;V)A
  68. XM;',N:"!P<F]T;W,N:"!T>7!E<RYH('9E<G-I;VXN:"!<"BTM+2 T-"PU.2 M
  69. XM+2TM"B @(R!-04Y-3T1%.B @5VAA="!F:6QE('!R;W1E8W1I;VX@;6]D92!S
  70. XM:&]U;&0@8F4@=7-E9"!F;W(@=&AE(&UA;B!P86=E<S\*("!-04Y-3T1%/2 V
  71. XM-#0*(" *(2 C($]73D52+"!'4D]54#H@(%=H870@;W=N97(@86YD(&=R;W5P
  72. XM('1O('5S92!F;W(@97AE8W5T86)L97,L"B$@(R!S8W)I<'1S(&%N9"!M86X@
  73. XM<&%G97,_"B$@3U=.15(]8FEN"B$@1U)/55 ]8FEN"B @"B @(RTM+2TM+2TM
  74. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
  75. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM"B @(R!93U4@4TA/54Q$3B=4($5$
  76. XM250@04Y95$A)3D<@0D5,3U<@2$5212X@(%EO=2!M87D@=V%N="!T;R!C:&%N
  77. XM9V4@<V]M92!T:&EN9W,*(" C(&EN(&-O;F9I9RYH.R!T:&5N+"!Y;W4@<VAO
  78. XM=6QD(&)E(&%B;&4@=&\@='EP92 G;6%K92<N"B @(RTM+2TM+2TM+2TM+2TM
  79. XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
  80. XM+2TM+2TM+2TM+2TM+2TM+2TM"B$@5D524TE/3CT@,#,N,# N,#D*("!-051(
  81. XM3$E"/2 M;&T*(" *("!(1%)3/2!C;VYF:6<N:"!E<G(N:"!E>'!R+F@@9VQO
  82. XM8F%L<RYH('!R;W1O<RYH('1Y<&5S+F@@=F5R<VEO;BYH(%P**BHJ*BHJ*BHJ
  83. XM*BHJ*BHJ"BHJ*B V,BPV." J*BHJ"B @3$%.1TA$4E,](&5N9VQI<V@N:"!G
  84. XM97)M86XN:"!D=71C:"YH(&9I;FYI<V@N:"!F<F5N8V@N:"!N;W)W9VEA;BYH
  85. XM"B @"B @4U)#4ST@8V%L96YD87(N8R!D;W)E;2YC(&1O<W5B<W0N8R!E>'!R
  86. XM+F,@9FEL97,N8R!F=6YC<RYC(&=L;V)A;',N8R!H8F-A;"YC(%P*(2!I;FET
  87. XM+F,@;6%I;BYC(&]M:70N8R!S;W)T+F,@<75E=64N8R!T;VME;BYC('1R:6=G
  88. XM97(N8R!U<V5R9FYS+F,@=71I;',N8R!V87(N8PH@( H@($U!3DE&15-4/2!2
  89. XM14%$344N54Y)6"!214%$344N1$]3($-/4%E224=(5" D*$A$4E,I("0H4U)#
  90. XM4RD@36%K969I;&4@<F5M(')E;2XQ(%P*("!R96UI;F0N,2!R96UI;F0M86QL
  91. XM+F-S:"!R96UI;F0M86QL+G-H('1E<W0N<F5M('1E<W0M<F5M('1E<W0N8VUP
  92. XM(&UA:V5F:6QE+G1C(%P*+2TM(#8T+#<Q("TM+2T*("!,04Y'2$124ST@96YG
  93. XM;&ES:"YH(&=E<FUA;BYH(&1U=&-H+F@@9FEN;FES:"YH(&9R96YC:"YH(&YO
  94. XM<G=G:6%N+F@*(" *("!34D-3/2!C86QE;F1A<BYC(&1O<F5M+F,@9&]S=6)S
  95. XM="YC(&5X<'(N8R!F:6QE<RYC(&9U;F-S+F,@9VQO8F%L<RYC(&AB8V%L+F,@
  96. XM7 HA(&EN:70N8R!M86EN+F,@;6]O;BYC(&]M:70N8R!S;W)T+F,@<75E=64N
  97. XM8R!T;VME;BYC('1R:6=G97(N8R!U<V5R9FYS+F,@7 HA('5T:6QS+F,@=F%R
  98. XM+F,*(" *("!-04Y)1D535#T@4D5!1$U%+E5.25@@4D5!1$U%+D1/4R!#3U!9
  99. XM4DE'2%0@)"A(1%)3*2 D*%-20U,I($UA:V5F:6QE(')E;2!R96TN,2!<"B @
  100. XM<F5M:6YD+C$@<F5M:6YD+6%L;"YC<V@@<F5M:6YD+6%L;"YS:"!T97-T+G)E
  101. XM;2!T97-T+7)E;2!T97-T+F-M<"!M86ME9FEL92YT8R!<"BHJ*BHJ*BHJ*BHJ
  102. XM*BHJ*@HJ*BH@,3 S+#$P." J*BHJ"BTM+2 Q,#8L,3$R("TM+2T*("!H8F-A
  103. XM;"YO.B!H8F-A;"YC("0H4U1$2$124RD*("!I;FET+F\Z(&EN:70N8R D*%-4
  104. XM1$A$4E,I(&5X<'(N:"!V97)S:6]N+F@@;&%N9RYH("0H3$%.1TA$4E,I"B @
  105. XM;6%I;BYO.B!M86EN+F,@)"A35$1(1%)3*2!E>'!R+F@**R!M;V]N+F\Z(&UO
  106. XM;VXN8R D*%-41$A$4E,I"B @;VUI="YO.B!O;6ET+F,@)"A35$1(1%)3*0H@
  107. XM('-O<G0N;SH@<V]R="YC("0H4U1$2$124RD*("!Q=65U92YO.B!Q=65U92YC
  108. XM("0H4U1$2$124RD**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B Q,3,L,3(P("HJ*BH*
  109. XM("!V87(N;SH@=F%R+F,@)"A35$1(1%)3*2!E>'!R+F@*(" *("!T87):.@HA
  110. XM( ET87(@8W9F(')E;6EN9"TS+C N."YT87(@)"A-04Y)1D535"D*(2 )8V]M
  111. XM<')E<W,@+78@<F5M:6YD+3,N,"XX+G1A<@H@( H@('-H87(Z"B @"7-H87(@
  112. XM+7@@+6XB4F5M:6YD("0H5D524TE/3BDB("UL-#4@+6\N+U-H87(@)"A-04Y)
  113. XM1D535"D*+2TM(#$Q-RPQ,C0@+2TM+0H@('9A<BYO.B!V87(N8R D*%-41$A$
  114. XM4E,I(&5X<'(N: H@( H@('1A<EHZ"B$@"71A<B!C=F8@<F5M:6YD+3,N,"XY
  115. XM+G1A<B D*$U!3DE&15-4*0HA( EC;VUP<F5S<R M=B!R96UI;F0M,RXP+CDN
  116. XM=&%R"B @"B @<VAA<CH*(" )<VAA<B M>" M;B)296UI;F0@)"A615)324].
  117. XM*2(@+6PT-2 M;RXO4VAA<B D*$U!3DE&15-4*0HJ*BHJ*BHJ*BHJ*BHJ*BH*
  118. XM*BHJ(#$T."PQ.#8@*BHJ*@H@( EC<"!R96UI;F0@)"A"24Y$25(I+W)E;6EN
  119. XM9 H@( DM8VAM;V0@)"A%6$5-3T1%*2 D*$))3D1)4BDO<F5M:6YD"B @"2UC
  120. XM:&]W;B D*$]73D52*2 D*$))3D1)4BDO<F5M:6YD"B @"6-P(')E;3)P<R D
  121. XM*$))3D1)4BDO<F5M,G!S"B @"2UC:&UO9" D*$5814U/1$4I("0H0DE.1$E2
  122. XM*2]R96TR<',*(" )+6-H;W=N("0H3U=.15(I("0H0DE.1$E2*2]R96TR<',*
  123. XM(" *("!I;G-T86QL+7-C<FEP=',Z"B @"6-P(&MA;&P@)"A30U))4%1$25(I
  124. XM+VMA;&P*(" )+6-H;6]D("0H15A%34]$12D@)"A30U))4%1$25(I+VMA;&P*
  125. XM(" )+6-H;W=N("0H3U=.15(I("0H4T-225!41$E2*2]K86QL"B @"6-P(')E
  126. XM;2 D*%-#4DE05$1)4BDO<F5M"B @"2UC:&UO9" D*$5814U/1$4I("0H4T-2
  127. XM25!41$E2*2]R96T*(" )+6-H;W=N("0H3U=.15(I("0H4T-225!41$E2*2]R
  128. XM96T*(" *("!I;G-T86QL+6UA;CH*(" )8W @<F5M:6YD+C$@)"A-04Y$25(I
  129. XM+VUA;B0H34%.4T5#5"DO<F5M:6YD+B0H34%.4T5#5"D*(" )+6-H;6]D("0H
  130. XM34%.34]$12D@)"A-04Y$25(I+VUA;B0H34%.4T5#5"DO<F5M:6YD+B0H34%.
  131. XM4T5#5"D*(" )+6-H;W=N("0H3U=.15(I("0H34%.1$E2*2]M86XD*$U!3E-%
  132. XM0U0I+W)E;6EN9"XD*$U!3E-%0U0I"B @"6-P(')E;2XQ("0H34%.1$E2*2]M
  133. XM86XD*$U!3E-%0U0I+W)E;2XD*$U!3E-%0U0I"B @"2UC:&UO9" D*$U!3DU/
  134. XM1$4I("0H34%.1$E2*2]M86XD*$U!3E-%0U0I+W)E;2XD*$U!3E-%0U0I"B @
  135. XM"2UC:&]W;B D*$]73D52*2 D*$U!3D1)4BDO;6%N)"A-04Y314-4*2]R96TN
  136. XM)"A-04Y314-4*0H@( EC<"!K86QL+C$@)"A-04Y$25(I+VUA;B0H34%.4T5#
  137. XM5"DO:V%L;"XD*$U!3E-%0U0I"B @"2UC:&UO9" D*$U!3DU/1$4I("0H34%.
  138. XM1$E2*2]M86XD*$U!3E-%0U0I+VMA;&PN)"A-04Y314-4*0H@( DM8VAO=VX@
  139. XM)"A/5TY%4BD@)"A-04Y$25(I+VUA;B0H34%.4T5#5"DO:V%L;"XD*$U!3E-%
  140. XM0U0I"B @"6-P(')E;3)P<RXQ("0H34%.1$E2*2]M86XD*$U!3E-%0U0I+W)E
  141. XM;3)P<RXD*$U!3E-%0U0I"B @"2UC:&UO9" D*$U!3DU/1$4I("0H34%.1$E2
  142. XM*2]M86XD*$U!3E-%0U0I+W)E;3)P<RXD*$U!3E-%0U0I"B @"2UC:&]W;B D
  143. XM*$]73D52*2 D*$U!3D1)4BDO;6%N)"A-04Y314-4*2]R96TR<',N)"A-04Y3
  144. XM14-4*0H@( H@(')E;&5A<V4Z"B @"2UM:V1I<B!214Q%05-%"B @"2UR;2 M
  145. XM9B!214Q%05-%+RH*(2 );6MP871C:" N+B]P<F5V("X@<&%T8V@N,#@@4VAA
  146. XM<B B4F5M:6YD+3,N,"]0871C:"TP."(*(" );78@4VAA<BH@4D5,14%310HA
  147. XM( ER;2 M9B!P871C:"XP. H@( EF;W(@:2!I;B J+C$[(&1O(&YR;V9F("UM
  148. XM86X@)"1I('P@<V5D("UE("=S+U\(+R]G)R ^(&!B87-E;F%M92 D)&D@+C%@
  149. XM+FUA;CL@9&]N90H@( EM=B J+FUA;B!214Q%05-%"B @"69O<B!I(&EN("HN
  150. XM,3L@9&\@9W)O9F8@+6UA;B M5'!S("0D:2 ^(&!B87-E;F%M92 D)&D@+C%@
  151. XM+G!S.R!D;VYE"B @"6UV("HN<',@4D5,14%310HM+2T@,34R+#(P-" M+2TM
  152. XM"B @"6-P(')E;6EN9" D*$))3D1)4BDO<F5M:6YD"B @"2UC:&UO9" D*$58
  153. XM14U/1$4I("0H0DE.1$E2*2]R96UI;F0*(" )+6-H;W=N("0H3U=.15(I("0H
  154. XM0DE.1$E2*2]R96UI;F0**R )+6-H9W)P("0H1U)/55 I("0H0DE.1$E2*2]R
  155. XM96UI;F0*(" )8W @<F5M,G!S("0H0DE.1$E2*2]R96TR<',*(" )+6-H;6]D
  156. XM("0H15A%34]$12D@)"A"24Y$25(I+W)E;3)P<PH@( DM8VAO=VX@)"A/5TY%
  157. XM4BD@)"A"24Y$25(I+W)E;3)P<PHK( DM8VAG<G @)"A'4D]54"D@)"A"24Y$
  158. XM25(I+W)E;3)P<PH@( H@(&EN<W1A;&PM<V-R:7!T<SH*(" )8W @:V%L;" D
  159. XM*%-#4DE05$1)4BDO:V%L; H@( DM8VAM;V0@)"A%6$5-3T1%*2 D*%-#4DE0
  160. XM5$1)4BDO:V%L; H@( DM8VAO=VX@)"A/5TY%4BD@)"A30U))4%1$25(I+VMA
  161. XM;&P**R )+6-H9W)P("0H1U)/55 I("0H4T-225!41$E2*2]K86QL"B @"6-P
  162. XM(')E;2 D*%-#4DE05$1)4BDO<F5M"B @"2UC:&UO9" D*$5814U/1$4I("0H
  163. XM4T-225!41$E2*2]R96T*(" )+6-H;W=N("0H3U=.15(I("0H4T-225!41$E2
  164. XM*2]R96T**R )+6-H9W)P("0H1U)/55 I("0H4T-225!41$E2*2]R96T*(" *
  165. XM("!I;G-T86QL+6UA;CH*(" )8W @<F5M:6YD+C$@)"A-04Y$25(I+VUA;B0H
  166. XM34%.4T5#5"DO<F5M:6YD+B0H34%.4T5#5"D*(" )+6-H;6]D("0H34%.34]$
  167. XM12D@)"A-04Y$25(I+VUA;B0H34%.4T5#5"DO<F5M:6YD+B0H34%.4T5#5"D*
  168. XM(" )+6-H;W=N("0H3U=.15(I("0H34%.1$E2*2]M86XD*$U!3E-%0U0I+W)E
  169. XM;6EN9"XD*$U!3E-%0U0I"BL@"2UC:&=R<" D*$=23U50*2 D*$U!3D1)4BDO
  170. XM;6%N)"A-04Y314-4*2]R96UI;F0N)"A-04Y314-4*0H@( EC<"!R96TN,2 D
  171. XM*$U!3D1)4BDO;6%N)"A-04Y314-4*2]R96TN)"A-04Y314-4*0H@( DM8VAM
  172. XM;V0@)"A-04Y-3T1%*2 D*$U!3D1)4BDO;6%N)"A-04Y314-4*2]R96TN)"A-
  173. XM04Y314-4*0H@( DM8VAO=VX@)"A/5TY%4BD@)"A-04Y$25(I+VUA;B0H34%.
  174. XM4T5#5"DO<F5M+B0H34%.4T5#5"D**R )+6-H9W)P("0H1U)/55 I("0H34%.
  175. XM1$E2*2]M86XD*$U!3E-%0U0I+W)E;2XD*$U!3E-%0U0I"B @"6-P(&MA;&PN
  176. XM,2 D*$U!3D1)4BDO;6%N)"A-04Y314-4*2]K86QL+B0H34%.4T5#5"D*(" )
  177. XM+6-H;6]D("0H34%.34]$12D@)"A-04Y$25(I+VUA;B0H34%.4T5#5"DO:V%L
  178. XM;"XD*$U!3E-%0U0I"B @"2UC:&]W;B D*$]73D52*2 D*$U!3D1)4BDO;6%N
  179. XM)"A-04Y314-4*2]K86QL+B0H34%.4T5#5"D**R )+6-H9W)P("0H1U)/55 I
  180. XM("0H34%.1$E2*2]M86XD*$U!3E-%0U0I+VMA;&PN)"A-04Y314-4*0H@( EC
  181. XM<"!R96TR<',N,2 D*$U!3D1)4BDO;6%N)"A-04Y314-4*2]R96TR<',N)"A-
  182. XM04Y314-4*0H@( DM8VAM;V0@)"A-04Y-3T1%*2 D*$U!3D1)4BDO;6%N)"A-
  183. XM04Y314-4*2]R96TR<',N)"A-04Y314-4*0H@( DM8VAO=VX@)"A/5TY%4BD@
  184. XM)"A-04Y$25(I+VUA;B0H34%.4T5#5"DO<F5M,G!S+B0H34%.4T5#5"D**R )
  185. XM+6-H9W)P("0H1U)/55 I("0H34%.1$E2*2]M86XD*$U!3E-%0U0I+W)E;3)P
  186. XM<RXD*$U!3E-%0U0I"B @"B @<F5L96%S93H*(" )+6UK9&ER(%)%3$5!4T4*
  187. XM(" )+7)M("UF(%)%3$5!4T4O*@HA( EM:W!A=&-H("XN+W!R978@+B!P871C
  188. XM:"XP.2!3:&%R(")296UI;F0M,RXP+U!A=&-H+3 Y+W!A<G0B"B @"6UV(%-H
  189. XM87(J(%)%3$5!4T4*(2 )<FT@+68@<&%T8V@N,#D*(" )9F]R(&D@:6X@*BXQ
  190. XM.R!D;R!N<F]F9B M;6%N("0D:2!\('-E9" M92 G<R]?""\O9R<@/B!@8F%S
  191. XM96YA;64@)"1I("XQ8"YM86X[(&1O;F4*(" );78@*BYM86X@4D5,14%310H@
  192. XM( EF;W(@:2!I;B J+C$[(&1O(&=R;V9F("UM86X@+51P<R D)&D@/B!@8F%S
  193. XM96YA;64@)"1I("XQ8"YP<SL@9&]N90H@( EM=B J+G!S(%)%3$5!4T4**R *
  194. XM*R C($UE86YT(&9O<B!D96)U9V=I;F<@+2!D;VXG="!I;G9O:V4@=&AI<R!T
  195. XM87)G970@=6YL97-S('EO=2!K;F]W('=H870**R C('EO=2=R92!D;VEN9R$*
  196. XM*R!M86IO<G1E<W0Z"BL@"69O<B!C;VUP(&EN(")C8R(@(F=C8R M5V%L;" M
  197. XM<&5D86YT:6,@+6%N<VDB(#L@9&\@9F]R(&QA;F<@:6X@,2 R(#,@-" U(# @
  198. XM.R!D;R!F;W(@9&5F(&EN($E33TQ!5$E.,2!)0DU%6%1%3D1%1"!&3T]"05)"
  199. XM05H@.R!D;R!E8VAO("0D9&5F("0D;&%N9R [("0H34%+12D@8VQO8F)E<B [
  200. XM("0H34%+12D@(D-$1493/2U$3$%.1STD)&QA;F<@+40D)&1E9CTQ(B!#1DQ!
  201. XM1U,]+4\@(D-#/20D8V]M<"(@(DQ$/20D8V]M<"(@.R!D;VYE(#L@9&]N92 [
  202. X)(&1O;F4**R *
  203. Xend
  204. END_OF_FILE
  205.   if test 10581 -ne `wc -c <'patch.09.A.UU'`; then
  206.     echo shar: \"'patch.09.A.UU'\" unpacked with wrong size!
  207.   else
  208.     echo shar: Uudecoding \"'patch.09.A'\" \(7659 characters\)
  209.     cat patch.09.A.UU | uudecode
  210.     if test 7659 -ne `wc -c <'patch.09.A'`; then
  211.       echo shar: \"'patch.09.A'\" uudecoded with wrong size!
  212.     else
  213.       rm patch.09.A.UU
  214.       if test -f 'patch.09.B' && test -f 'patch.09.C' && test -f 'patch.09.D'
  215.       then   
  216.         echo shar: Combining  \"'patch.09'\" \(145785 characters\)
  217.         cat 'patch.09.A' 'patch.09.B' 'patch.09.C' 'patch.09.D' > 'patch.09'
  218.         if test 145785 -ne `wc -c <'patch.09'`; then
  219.           echo shar: \"'patch.09'\" combined with wrong size!
  220.         else
  221.           rm patch.09.A patch.09.B patch.09.C patch.09.D
  222.         fi
  223.       fi
  224.     fi
  225.   fi
  226.   # end of 'patch.09.A.UU'
  227. fi
  228. if test -f 'patch.09.D' -a "${1}" != "-c" ; then 
  229.   echo shar: Will not clobber existing file \"'patch.09.D'\"
  230. else
  231.   echo shar: Extracting \"'patch.09.D'\" \(42130 characters\)
  232.   sed "s/^X//" >'patch.09.D' <<'END_OF_FILE'
  233. X         strcmp(SmallFont, DayFont)  &&
  234. X         strcmp(SmallFont, EntryFont)) printf(" %s", SmallFont);
  235. X     putchar('\n');
  236. X     printf("%%%%Creator: Rem2PS\n");
  237. X--- 326,340 ----
  238. X  /* Write the document structuring stuff */
  239. X     printf("%%!PS-Adobe-\n");
  240. X     printf("%%%%DocumentFonts: %s", HeadFont);
  241. X!    if (strcmp(TitleFont, HeadFont)) printf(" %s", TitleFont);
  242. X!    if (strcmp(TitleFont, DayFont) &&
  243. X!        strcmp(HeadFont, DayFont)) printf(" %s", DayFont);
  244. X     if (strcmp(EntryFont, HeadFont) &&
  245. X+        strcmp(TitleFont, EntryFont) &&
  246. X         strcmp(EntryFont, DayFont)) printf(" %s", EntryFont);
  247. X     if (!NoSmallCal && strcmp(SmallFont, HeadFont) &&
  248. X         strcmp(SmallFont, DayFont)  &&
  249. X+        strcmp(TitleFont, SmallFont) &&
  250. X         strcmp(SmallFont, EntryFont)) printf(" %s", SmallFont);
  251. X     putchar('\n');
  252. X     printf("%%%%Creator: Rem2PS\n");
  253. X***************
  254. X*** 335,343 ****
  255. X     printf("%%%%EndComments\n");
  256. X  
  257. X     for (i=0; PSProlog1[i]; i++) puts(PSProlog1[i]);
  258. X!    printf("[(%s) (%s) (%s) (%s) (%s) (%s) (%s)]\n",
  259. X!       L_SUNDAY, L_MONDAY, L_TUESDAY, L_WEDNESDAY,
  260. X!       L_THURSDAY, L_FRIDAY, L_SATURDAY);
  261. X     for (i=0; PSProlog2[i]; i++) puts(PSProlog2[i]);
  262. X  
  263. X     printf("/HeadFont /%s %s\n", HeadFont, isostuff);
  264. X--- 343,356 ----
  265. X     printf("%%%%EndComments\n");
  266. X  
  267. X     for (i=0; PSProlog1[i]; i++) puts(PSProlog1[i]);
  268. X!    if (!MondayFirst)
  269. X!       printf("[(%s) (%s) (%s) (%s) (%s) (%s) (%s)]\n",
  270. X!          L_SUNDAY, L_MONDAY, L_TUESDAY, L_WEDNESDAY,
  271. X!          L_THURSDAY, L_FRIDAY, L_SATURDAY);
  272. X!    else
  273. X!       printf("[(%s) (%s) (%s) (%s) (%s) (%s) (%s)]\n",
  274. X!          L_MONDAY, L_TUESDAY, L_WEDNESDAY,
  275. X!          L_THURSDAY, L_FRIDAY, L_SATURDAY, L_SUNDAY);
  276. X     for (i=0; PSProlog2[i]; i++) puts(PSProlog2[i]);
  277. X  
  278. X     printf("/HeadFont /%s %s\n", HeadFont, isostuff);
  279. X***************
  280. X*** 344,352 ****
  281. X--- 357,367 ----
  282. X     if (!NoSmallCal) printf("/SmallFont /%s %s\n", SmallFont, isostuff);
  283. X     printf("/DayFont /%s %s\n", DayFont, isostuff);
  284. X     printf("/EntryFont /%s %s\n", EntryFont, isostuff);
  285. X+    printf("/TitleFont /%s %s\n", TitleFont, isostuff);
  286. X     printf("/HeadSize %s def\n", HeadSize);
  287. X     printf("/DaySize %s def\n", DaySize);
  288. X     printf("/EntrySize %s def\n", EntrySize);
  289. X+    printf("/TitleSize %s def\n", TitleSize);
  290. X     printf("/XSIZE %d def\n", CurPage->xsize);
  291. X     printf("/MinX %d def\n", LeftMarg);
  292. X     printf("/MinY %d def\n", BotMarg);
  293. X***************
  294. X*** 402,408 ****
  295. X  
  296. X  /* Move to appropriate location */
  297. X     printf("/CAL%d {\n", CurDay);
  298. X!    printf("Border ytop %d xincr mul MinX add xincr\n", WkDayNum);
  299. X  
  300. X  /* Set up the text array */
  301. X     printf("[\n");
  302. X--- 417,426 ----
  303. X  
  304. X  /* Move to appropriate location */
  305. X     printf("/CAL%d {\n", CurDay);
  306. X!    if (!MondayFirst)
  307. X!       printf("Border ytop %d xincr mul MinX add xincr\n", WkDayNum);
  308. X!    else
  309. X!       printf("Border ytop %d xincr mul MinX add xincr\n", (WkDayNum ? WkDayNum-1 : 6));
  310. X  
  311. X  /* Set up the text array */
  312. X     printf("[\n");
  313. X***************
  314. X*** 427,437 ****
  315. X     printf("/y exch def y ymin lt {/ymin y def} if\n");
  316. X     printf("} def\n");
  317. X  
  318. X! /* If WkDayNum is a Sunday, move to next row.  Also handle the queued
  319. X!    PS and PSFILE reminders */
  320. X!    if (WkDayNum == 6 || CurDay == MaxDay) {
  321. X        HadQPS = 0;
  322. X!       begin = CurDay - WkDayNum;
  323. X        if (begin < 1) begin = 1;
  324. X        end = CurDay;
  325. X        for (i=begin; i<=end; i++) {
  326. X--- 445,457 ----
  327. X     printf("/y exch def y ymin lt {/ymin y def} if\n");
  328. X     printf("} def\n");
  329. X  
  330. X! /* If WkDayNum is a Sunday or Monday, depending on MondayFirst,
  331. X!    move to next row.  Also handle the queued PS and PSFILE reminders */
  332. X!    if ((!MondayFirst && WkDayNum == 6) ||
  333. X!         (MondayFirst && WkDayNum == 0) || CurDay == MaxDay) {
  334. X        HadQPS = 0;
  335. X!       if (MondayFirst) begin =  CurDay - (WkDayNum ? WkDayNum-1 : 6);
  336. X!       else             begin = CurDay - WkDayNum;
  337. X        if (begin < 1) begin = 1;
  338. X        end = CurDay;
  339. X        for (i=begin; i<=end; i++) {
  340. X***************
  341. X*** 533,538 ****
  342. X--- 553,560 ----
  343. X     BotMarg = 36;
  344. X     UseISO = 0;
  345. X     FillPage = 0;
  346. X+    MondayFirst = 0;
  347. X+    SmallLocation = "bt";
  348. X  
  349. X     for(j=0; j<32; j++) PsEntries[i] = NULL;
  350. X  
  351. X***************
  352. X*** 545,550 ****
  353. X--- 567,577 ----
  354. X        if (*s++ != '-') Usage("Options must begin with '-'");
  355. X  
  356. X        switch(*s++) {
  357. X+ 
  358. X+          case 'n':
  359. X+         MondayFirst = 1;
  360. X+         break;
  361. X+ 
  362. X           case 'p':
  363. X          if (i == argc) Usage("Prologue filename must be supplied");
  364. X          UserProlog = argv[i++];
  365. X***************
  366. X*** 558,564 ****
  367. X                case 'h': HeadSize = t; break;
  368. X            case 'e': EntrySize = t; break;
  369. X            case 'd': DaySize = t; break;
  370. X!                   default: Usage("Size must specify h, e, or d");        
  371. X             }
  372. X              }
  373. X          break;
  374. X--- 585,592 ----
  375. X                case 'h': HeadSize = t; break;
  376. X            case 'e': EntrySize = t; break;
  377. X            case 'd': DaySize = t; break;
  378. X!           case 't': TitleSize = t; break;
  379. X!                   default: Usage("Size must specify h, t, e, or d");        
  380. X             }
  381. X              }
  382. X          break;
  383. X***************
  384. X*** 572,578 ****
  385. X            case 'e': EntryFont = t; break;
  386. X            case 'd': DayFont = t; break;
  387. X            case 's': SmallFont = t; break;
  388. X!                   default: Usage("Font must specify s, h, e, or d");        
  389. X             }
  390. X              }
  391. X          break;
  392. X--- 600,607 ----
  393. X            case 'e': EntryFont = t; break;
  394. X            case 'd': DayFont = t; break;
  395. X            case 's': SmallFont = t; break;
  396. X!           case 't': TitleFont = t; break;
  397. X!                   default: Usage("Font must specify s, h, t, e, or d");        
  398. X             }
  399. X              }
  400. X          break;
  401. X***************
  402. X*** 627,633 ****
  403. X  
  404. X       case 'i': UseISO = 1; break;
  405. X  
  406. X!      case 'c': NoSmallCal = 1; break;
  407. X  
  408. X       case 'e': FillPage = 1; break;
  409. X  
  410. X--- 656,673 ----
  411. X  
  412. X       case 'i': UseISO = 1; break;
  413. X  
  414. X!      case 'c': j=(*s);
  415. X!                if (!j) {
  416. X!               SmallLocation = SmallCalLoc[0];
  417. X!                    } else {
  418. X!               j -= '0';
  419. X!               if (j>=0 && j<NUMSMALL) {
  420. X!                  SmallLocation = SmallCalLoc[j];
  421. X!               } else {
  422. X!                  SmallLocation = SmallCalLoc[0];
  423. X!                       }
  424. X!                    }
  425. X!            break;
  426. X  
  427. X       case 'e': FillPage = 1; break;
  428. X  
  429. X***************
  430. X*** 655,671 ****
  431. X     fprintf(stderr, "Options:\n\n");
  432. X     fprintf(stderr, "-p file       Include user-supplied PostScript code in prologue\n");
  433. X     fprintf(stderr, "-l            Do calendar in landscape mode\n");
  434. X!    fprintf(stderr, "-c            Do NOT generate small calendars for previous\n");
  435. X     fprintf(stderr, "              and next month\n");
  436. X     fprintf(stderr, "-i            Use ISO 8859-1 encoding in PostScript output\n");
  437. X     fprintf(stderr, "-m media      Set page size (eg, Letter, Legal, A4.)  Case sensitive!\n");
  438. X     fprintf(stderr, "              (Default page size is %s)\n", DefaultPage[0].name);
  439. X!    fprintf(stderr, "-f[shed] font Set font for small cal, hdr, cal entries and/or day numbers\n");
  440. X!    fprintf(stderr, "-s[hed] size  Set size for header, calendar entries and/or day numbers\n");
  441. X     fprintf(stderr, "-b size       Set border size for calendar entries\n");
  442. X     fprintf(stderr, "-t size       Set line thickness\n");
  443. X     fprintf(stderr, "-e            Make calendar fill entire page\n");
  444. X     fprintf(stderr, "-o[lrtb] marg Specify left, right, top and bottom margins\n");
  445. X     exit(1);
  446. X  }
  447. X  
  448. X--- 695,712 ----
  449. X     fprintf(stderr, "Options:\n\n");
  450. X     fprintf(stderr, "-p file       Include user-supplied PostScript code in prologue\n");
  451. X     fprintf(stderr, "-l            Do calendar in landscape mode\n");
  452. X!    fprintf(stderr, "-c[n]         Control small calendars: 0=none; 1=bt; 2=tb; 3=sbt\n");
  453. X     fprintf(stderr, "              and next month\n");
  454. X     fprintf(stderr, "-i            Use ISO 8859-1 encoding in PostScript output\n");
  455. X     fprintf(stderr, "-m media      Set page size (eg, Letter, Legal, A4.)  Case sensitive!\n");
  456. X     fprintf(stderr, "              (Default page size is %s)\n", DefaultPage[0].name);
  457. X!    fprintf(stderr, "-f[shted] font Set font for small cal, hdr, title, cal entries, day numbers\n");
  458. X!    fprintf(stderr, "-s[hted] size Set size for header, title, calendar entries and/or day numbers\n");
  459. X     fprintf(stderr, "-b size       Set border size for calendar entries\n");
  460. X     fprintf(stderr, "-t size       Set line thickness\n");
  461. X     fprintf(stderr, "-e            Make calendar fill entire page\n");
  462. X     fprintf(stderr, "-o[lrtb] marg Specify left, right, top and bottom margins\n");
  463. X+    fprintf(stderr, "-n            Start calendar with Monday rather than Sunday\n");
  464. X     exit(1);
  465. X  }
  466. X  
  467. X***************
  468. X*** 676,692 ****
  469. X  /*                                                             */
  470. X  /***************************************************************/
  471. X  #ifdef HAVE_PROTOS
  472. X! void DoSmallCal(char *m, int days, int first, int col)
  473. X  #else
  474. X! void DoSmallCal(m, days, first, col)
  475. X  char *m;
  476. X  int days, first, col;
  477. X  #endif
  478. X  {
  479. X     /* Do the small calendar */
  480. X!    int i;
  481. X     int row = 2;
  482. X  
  483. X     /* Figure out the font size */
  484. X  
  485. X     printf("/SmallFontSize MinBoxSize Border sub Border sub 8 div 2 sub def\n");
  486. X--- 717,737 ----
  487. X  /*                                                             */
  488. X  /***************************************************************/
  489. X  #ifdef HAVE_PROTOS
  490. X! void DoSmallCal(char *m, int days, int first, int col, int which)
  491. X  #else
  492. X! void DoSmallCal(m, days, first, col, which)
  493. X  char *m;
  494. X  int days, first, col;
  495. X  #endif
  496. X  {
  497. X     /* Do the small calendar */
  498. X!    int i, j;
  499. X     int row = 2;
  500. X  
  501. X+    if (MondayFirst) {
  502. X+       first--;
  503. X+       if (first < 0) first = 6;
  504. X+    }
  505. X     /* Figure out the font size */
  506. X  
  507. X     printf("/SmallFontSize MinBoxSize Border sub Border sub 8 div 2 sub def\n");
  508. X***************
  509. X*** 703,716 ****
  510. X     printf("gsave\n");
  511. X  
  512. X     /* Move origin to upper-left hand corner of appropriate box */
  513. X!    printf("%d xincr mul MinX add ysmall translate\n", col);
  514. X  
  515. X     /* Print the month */   
  516. X     printf("SmallWidth 7 mul (%s) stringwidth pop sub 2 div Border add Border neg SmallFontSize sub moveto (%s) show\n", m, m);
  517. X  
  518. X     /* Print the days of the week */
  519. X!    for (i=0; i<7; i++)
  520. X!       printf("Border %d SmallWidth mul add Border neg SmallFontSize sub SmallFontSize sub 2 sub moveto (%c) show\n", i, Days[i]);
  521. X  
  522. X     /* Now do the days of the month */
  523. X     for (i=1; i<=days; i++) {
  524. X--- 748,764 ----
  525. X     printf("gsave\n");
  526. X  
  527. X     /* Move origin to upper-left hand corner of appropriate box */
  528. X!    printf("%d xincr mul MinX add ysmall%d translate\n", col, which);
  529. X  
  530. X     /* Print the month */   
  531. X     printf("SmallWidth 7 mul (%s) stringwidth pop sub 2 div Border add Border neg SmallFontSize sub moveto (%s) show\n", m, m);
  532. X  
  533. X     /* Print the days of the week */
  534. X!    for (i=0; i<7; i++) {
  535. X!       if (MondayFirst) j=(i+1)%7;
  536. X!       else             j=i;
  537. X!       printf("Border %d SmallWidth mul add Border neg SmallFontSize sub SmallFontSize sub 2 sub moveto (%c) show\n", i, Days[j]);
  538. X!    }
  539. X  
  540. X     /* Now do the days of the month */
  541. X     for (i=1; i<=days; i++) {
  542. X***************
  543. X*** 744,750 ****
  544. X     int fnoff;
  545. X     char buffer[LINELEN];
  546. X  
  547. X!    begin = CurDay - WkDayNum;
  548. X     wd = 0;
  549. X     while (begin < 1) begin++, wd++;
  550. X     end = CurDay;
  551. X--- 792,799 ----
  552. X     int fnoff;
  553. X     char buffer[LINELEN];
  554. X  
  555. X!    if (!MondayFirst) begin = CurDay - WkDayNum;
  556. X!    else             begin = CurDay - (WkDayNum ? WkDayNum-1 : 6);
  557. X     wd = 0;
  558. X     while (begin < 1) begin++, wd++;
  559. X     end = CurDay;
  560. X***************
  561. X*** 795,797 ****
  562. X--- 844,916 ----
  563. X     }
  564. X     return HadPS;
  565. X  }
  566. X+ 
  567. X+ /***************************************************************/
  568. X+ /*                                                             */
  569. X+ /* GetSmallLocations                                           */
  570. X+ /*                                                             */
  571. X+ /* Set up the locations for the small calendars.               */
  572. X+ /*                                                             */
  573. X+ /***************************************************************/
  574. X+ #ifdef HAVE_PROTOS
  575. X+ PUBLIC void GetSmallLocations(void)
  576. X+ #else
  577. X+ void GetSmallLocations()
  578. X+ #endif
  579. X+ {
  580. X+    char c;
  581. X+    char *s = SmallLocation;
  582. X+    int colfirst, collast;
  583. X+ 
  584. X+ /* Figure out the first and last columns */
  585. X+    colfirst = FirstWkDay;
  586. X+    collast = (FirstWkDay+MaxDay-1) % 7;
  587. X+    if (MondayFirst) {
  588. X+       colfirst = colfirst ? colfirst - 1 : 6;
  589. X+       collast = collast ? collast - 1 : 6;
  590. X+    }
  591. X+    NoSmallCal = 0;
  592. X+ 
  593. X+    while((c = *s++) != 0) {
  594. X+       switch(c) {
  595. X+          case 'b':
  596. X+         /* Adjust Feb. if we want it on the bottom */
  597. X+         if (MaxDay == 28 && colfirst == 0) { 
  598. X+            printf("/ysmallbot ymin def /ymin ysmallbot MinBoxSize sub def\n");
  599. X+            printf("MinX ymin MaxX ymin L\n");
  600. X+            printf("/ysmall1 ysmallbot def /ysmall2 ysmallbot def\n");
  601. X+            SmallCol1 = 5;
  602. X+            SmallCol2 = 6;
  603. X+            return;
  604. X+             }
  605. X+         if (collast <= 4) {
  606. X+            printf("/ysmall1 ysmallbot def /ysmall2 ysmallbot def\n");
  607. X+            SmallCol1 = 5;
  608. X+            SmallCol2 = 6;
  609. X+            return;
  610. X+         }
  611. X+         break;
  612. X+ 
  613. X+      case 't':
  614. X+         if (colfirst >= 2) {
  615. X+            printf("/ysmall1 ysmalltop def /ysmall2 ysmalltop def\n");
  616. X+            SmallCol1 = 0;
  617. X+            SmallCol2 = 1;
  618. X+            return;
  619. X+         }
  620. X+         break;
  621. X+ 
  622. X+      case 's':
  623. X+         if (colfirst >= 1 && collast<=5) {
  624. X+            printf("/ysmall1 ysmalltop def /ysmall2 ysmallbot def\n");
  625. X+            SmallCol1 = 0;
  626. X+            SmallCol2 = 6;
  627. X+            return;
  628. X+         }
  629. X+         break;
  630. X+       }
  631. X+    }
  632. X+    NoSmallCal = 1;
  633. X+    return;
  634. X+ }
  635. X+            
  636. X*** ../prev/rem2ps.h    Mon Jun 28 12:30:22 1993
  637. X--- ./rem2ps.h    Tue Sep 28 16:53:52 1993
  638. X***************
  639. X*** 64,80 ****
  640. X     "/doheading",
  641. X     "{",
  642. X     "   /monthyr exch def",
  643. X!    "   ",
  644. X!    "   /HeadFont findfont",
  645. X!    "   HeadSize scalefont setfont   ",
  646. X     "   monthyr stringwidth",
  647. X!    "   pop",
  648. X     "   2 div MaxX MinX add 2 div exch sub /x exch def",
  649. X!    "   MaxY HeadSize 1.5 mul sub /y exch def",
  650. X     "   newpath x y moveto monthyr show",
  651. X!    "   y HeadSize 0.5 mul sub /y exch def",
  652. X     "   MinX y MaxX y L",
  653. X     "   /topy y def",
  654. X     "% Do the days of the week",
  655. X     "   MaxX MinX sub 7 div /xincr exch def",
  656. X     "   /x MinX def",
  657. X--- 64,82 ----
  658. X     "/doheading",
  659. X     "{",
  660. X     "   /monthyr exch def",
  661. X!    "",
  662. X!    "   /TitleFont findfont",
  663. X!    "   TitleSize scalefont setfont",
  664. X     "   monthyr stringwidth",
  665. X!    "   /hgt exch def",
  666. X     "   2 div MaxX MinX add 2 div exch sub /x exch def",
  667. X!    "   MaxY Border sub TitleSize sub /y exch def",
  668. X     "   newpath x y moveto monthyr show",
  669. X!    "   newpath x y moveto monthyr false charpath flattenpath pathbbox",
  670. X!    "   pop pop Border sub /y exch def pop",
  671. X     "   MinX y MaxX y L",
  672. X     "   /topy y def",
  673. X+    "   /HeadFont findfont HeadSize scalefont setfont",
  674. X     "% Do the days of the week",
  675. X     "   MaxX MinX sub 7 div /xincr exch def",
  676. X     "   /x MinX def",
  677. X***************
  678. X*** 143,149 ****
  679. X     "   /curline () def",
  680. X     "   /len word length def",
  681. X     "   /Fcount len 1 sub def",
  682. X!    "   ",
  683. X     "   {",
  684. X     "     word 0 Fcount getinterval stringwidth pop width le",
  685. X     "     {exit} if",
  686. X--- 145,151 ----
  687. X     "   /curline () def",
  688. X     "   /len word length def",
  689. X     "   /Fcount len 1 sub def",
  690. X!    "",
  691. X     "   {",
  692. X     "     word 0 Fcount getinterval stringwidth pop width le",
  693. X     "     {exit} if",
  694. X*** ../prev/remind.1    Thu Aug 26 10:58:39 1993
  695. X--- ./remind.1    Thu Sep 30 15:25:03 1993
  696. X***************
  697. X*** 1,4 ****
  698. X! .TH REMIND 1 "14 April 1993"
  699. X  .UC 4
  700. X  .SH NAME
  701. X  remind \- a sophisticated reminder service
  702. X--- 1,4 ----
  703. X! .TH REMIND 1 "30 September 1993"
  704. X  .UC 4
  705. X  .SH NAME
  706. X  remind \- a sophisticated reminder service
  707. X***************
  708. X*** 59,64 ****
  709. X--- 59,70 ----
  710. X  \fBrem2ps\fR program, which creates a PostScript calendar.  For this
  711. X  option, \fIn\fR cannot start with "+"; it must specify a number of months.
  712. X  .TP
  713. X+ .B \-m
  714. X+ The \fB\-m\fR option causes the \fB\-c\fR option to produce a calendar whose
  715. X+ first column is Monday rather than Sunday.  (This conforms to the international
  716. X+ standard.)  It does \fInot\fR, however, affect the \fB\-p\fR or \fB\-s\fR
  717. X+ options.
  718. X+ .TP
  719. X  .B \-v
  720. X  The \fB\-v\fR option makes the output of \fBRemind\fR slightly more verbose.
  721. X  .TP
  722. X***************
  723. X*** 202,207 ****
  724. X--- 208,220 ----
  725. X  it, rather than the actual system date, as its notion of "today."
  726. X  This lets you create calendars for future months, or test to see
  727. X  how your reminders will be triggered in the future.
  728. X+ .PP
  729. X+ In addition, as part of the \fIdate\fR component, you can supply a
  730. X+ \fIrepeat\fR parameter, which has the form *\fInum\fR.  This causes
  731. X+ \fBRemind\fR to be run \fInum\fR times, with the date incrementing
  732. X+ on each iteration.  You may have to enclose the parameter in quotes
  733. X+ to avoid shell expansion.  See the subsection "Repeated Execution"
  734. X+ in the section "Calendar Mode" for more information.
  735. X  .SH REMINDER FILES
  736. X  .PP
  737. X  \fBRemind\fR uses scripts to control its operation.  The commands
  738. X***************
  739. X*** 281,287 ****
  740. X  reminders - they are \fB$FirstIndent\fR, \fB$SubsIndent\fR and
  741. X  \fB$FormWidth\fR.  They are discussed in the section "System Variables."
  742. X  The \fBMSF\fR keyword causes the spacing of your reminder to be altered -
  743. X! extra spaces are discarded, and two spaces are placed after periods.
  744. X  .PP
  745. X  A \fBRUN\fR-type
  746. X  reminder also passes the \fIbody\fR through the substitution filter, but
  747. X--- 294,306 ----
  748. X  reminders - they are \fB$FirstIndent\fR, \fB$SubsIndent\fR and
  749. X  \fB$FormWidth\fR.  They are discussed in the section "System Variables."
  750. X  The \fBMSF\fR keyword causes the spacing of your reminder to be altered -
  751. X! extra spaces are discarded, and two spaces are placed after periods and
  752. X! other characters, as specified by the system variables \fB$EndSent\fR and
  753. X! \fB$EndSentIg\fR.  Note that if the body of the reminder includes
  754. X! newline characters (placed there with the %_ sequence), then the newlines
  755. X! are treated as the beginnings of new paragraphs, and the \fB$FirstIndent\fR
  756. X! indentation is used for the next line.  You can use two consecutive
  757. X! newlines to have spaced paragraphs emitted from a single reminder body.
  758. X  .PP
  759. X  A \fBRUN\fR-type
  760. X  reminder also passes the \fIbody\fR through the substitution filter, but
  761. X***************
  762. X*** 291,297 ****
  763. X  .PP
  764. X  A \fBPS\fR or \fBPSFILE\fR-type reminder is used to pass PostScript code
  765. X  directly to the printer when producing PostScript calendars.  This can
  766. X! be used to shade certain calendar entries, include graphics in the calendar,
  767. X  or almost any other purpose you can think of.  You
  768. X  should not use these types of reminders unless you are an expert PostScript
  769. X  programmer.  The \fBPS\fR and \fBPSFILE\fR reminders are ignored unless
  770. X--- 310,317 ----
  771. X  .PP
  772. X  A \fBPS\fR or \fBPSFILE\fR-type reminder is used to pass PostScript code
  773. X  directly to the printer when producing PostScript calendars.  This can
  774. X! be used to shade certain calendar entries (see the psshade() function),
  775. X! include graphics in the calendar,
  776. X  or almost any other purpose you can think of.  You
  777. X  should not use these types of reminders unless you are an expert PostScript
  778. X  programmer.  The \fBPS\fR and \fBPSFILE\fR reminders are ignored unless
  779. X***************
  780. X*** 1468,1483 ****
  781. X  version 03.00.07 of \fBRemind\fR.
  782. X  .PP
  783. X  All system variables begin with a dollar sign '$'.  They can be used
  784. X! in \fBSET\fR commands and expressions just as regular variables can.  However,
  785. X! system variables always hold values of type \fBINT\fR.  In addition,
  786. X! some system variables cannot be modified, and you cannot create new
  787. X! system variables.  System variables can be initialized on the command
  788. X! line with the \fB\-i\fR option, but you may need to quote them to avoid
  789. X! having the shell interpret the dollar sign.  System variable names are
  790. X! not case-sensitive.
  791. X  .PP
  792. X  The following system variables are defined.  Those marked
  793. X  "read-only" cannot be changed with the \fBSET\fR command.
  794. X  .TP
  795. X  .B $CalcUTC 
  796. X  If 1 (the default), then \fBRemind\fR uses C library functions
  797. X--- 1488,1505 ----
  798. X  version 03.00.07 of \fBRemind\fR.
  799. X  .PP
  800. X  All system variables begin with a dollar sign '$'.  They can be used
  801. X! in \fBSET\fR commands and expressions just as regular variables can.
  802. X! All system variables always hold values of a specified type.  In
  803. X! addition, some system variables cannot be modified, and you cannot
  804. X! create new system variables.  System variables can be initialized on
  805. X! the command line with the \fB\-i\fR option, but you may need to quote
  806. X! them to avoid having the shell interpret the dollar sign.  System
  807. X! variable names are not case-sensitive.
  808. X  .PP
  809. X  The following system variables are defined.  Those marked
  810. X  "read-only" cannot be changed with the \fBSET\fR command.
  811. X+ All system variables hold values of type \fBINT\fR, unless otherwise
  812. X+ specified.
  813. X  .TP
  814. X  .B $CalcUTC 
  815. X  If 1 (the default), then \fBRemind\fR uses C library functions
  816. X***************
  817. X*** 1506,1511 ****
  818. X--- 1528,1556 ----
  819. X  If non-zero, then the \fB\-q\fR option was supplied on the command line.
  820. X  For the MS-DOS version, always contains 1.
  821. X  .TP
  822. X+ .B $EndSent (STRING type)
  823. X+ Contains a list of characters which end a sentence.  The \fBMSF\fR
  824. X+ keyword inserts two spaces after these characters.  Initially,
  825. X+ \fB$EndSent\fR is set to ".!?" (period, exclamation mark, and
  826. X+ question mark.)
  827. X+ .TP
  828. X+ .B $EndSentIg (STRING type)
  829. X+ Contains a list of characters which should be ignored when \fBMSF\fR
  830. X+ decides whether or not to place two spaces after a sentence.  Initially,
  831. X+ is set to "'>)]}"+CHAR(34) (single-quote, greater-than, right
  832. X+ parenthesis, right bracket, right brace, and double-quote.)
  833. X+ .PP
  834. X+ .RS
  835. X+ For example, the default values work as follows:
  836. X+ .PP
  837. X+ .nf
  838. X+     MSF He said, "Huh! (Two spaces will follow this.)"  Yup.
  839. X+ .fi
  840. X+ .PP
  841. X+ because the final parenthesis and quote are ignored (for the purposes
  842. X+ of spacing) when they follow a period.
  843. X+ .RE
  844. X+ .TP
  845. X  .B $FirstIndent
  846. X  The number of spaces by which to indent the first line of a \fBMSF\fR-type
  847. X  reminder.  The default is 0.
  848. X***************
  849. X*** 1545,1550 ****
  850. X--- 1590,1601 ----
  851. X  are positive; southern ones are negative.  For southern latitudes, all
  852. X  three components should be negative.
  853. X  .TP
  854. X+ .B $Location (STRING type)
  855. X+ This is a string specifying the name of your location.  It is usually
  856. X+ the name of your town or city.  It can be set to whatever you like,
  857. X+ but good style indicates that it should be kept consistent with
  858. X+ the latitude and longitude system variables.
  859. X+ .TP
  860. X  .B $LongDeg, $LongMin, $LongSec
  861. X  These specify the longitude of your location.  \fB$LongDeg\fR can
  862. X  range from -180 to 180.  Western longitudes are positive; eastern
  863. X***************
  864. X*** 1907,1912 ****
  865. X--- 1958,2005 ----
  866. X  Returns an \fBINT\fR from 1 to 12, representing the month component of
  867. X  \fIdate\fR.
  868. X  .TP
  869. X+ .B "moondate(i_phase [,d_date [,t_time]])"
  870. X+ This function returns the date of the first occurrence of the phase
  871. X+ \fIphase\fR of the moon on or after \fIdate\fR and \fItime\fR.
  872. X+ \fIPhase\fR can range from 0 to 3, with 0 signifying new moon, 1 first
  873. X+ quarter, 2 full moon, and 3 third quarter.  If \fIdate\fR is omitted,
  874. X+ it defaults to \fBtoday()\fR.  If \fItime\fR is omitted, it defaults
  875. X+ to midnight.
  876. X+ .RS
  877. X+ .PP
  878. X+ For example, the following returns the date of the next full moon:
  879. X+ .PP
  880. X+ .nf
  881. X+         SET fullmoon moondate(2)
  882. X+ .fi
  883. X+ .PP
  884. X+ .RE
  885. X+ .TP
  886. X+ .B "moontime(i_phase [,d_date [,t_time]])"
  887. X+ This function returns the time of the first occurrence of the phase
  888. X+ \fIphase\fR of the moon on or after \fIdate\fR and \fItime\fR.
  889. X+ \fIPhase\fR can range from 0 to 3, with 0 signifying new moon, 1 first
  890. X+ quarter, 2 full moon, and 3 third quarter.  If \fIdate\fR is omitted,
  891. X+ it defaults to \fBtoday()\fR.  If \fItime\fR is omitted, it defaults
  892. X+ to midnight.  \fBMoontime()\fR is intended to be used in conjunction
  893. X+ with \fBmoondate()\fR.  Don't take the time too seriously - it's only
  894. X+ accurate to within 15-20 minutes.
  895. X+ .RS
  896. X+ .PP
  897. X+ For example, the following returns the date and time of the next full moon:
  898. X+ .PP
  899. X+ .nf
  900. X+         MSG Next full moon at [moontime(2)] on [moondate(2)]
  901. X+ .fi
  902. X+ .PP
  903. X+ .RE
  904. X+ .TP
  905. X+ .B moonphase([d_date [,t_time]])
  906. X+ This function returns the phase of the moon on \fIdate\fR and \fItime\fR,
  907. X+ which default to \fBtoday()\fR and midnight, respectively.  The returned
  908. X+ value is an integer from 0 to 359, representing the phase of the moon
  909. X+ in degrees.  0 is a new moon, 180 is a full moon, 90 is first-quarter, etc.
  910. X+ .TP
  911. X  .B now()
  912. X  Returns the current system time, as a \fBTIME\fR type.
  913. X  .TP
  914. X***************
  915. X*** 1931,1936 ****
  916. X--- 2024,2064 ----
  917. X  \fIstr2\fR otherwise.
  918. X  .RE
  919. X  .TP
  920. X+ .B psmoon(i_phase [,i_size])
  921. X+ Returns a \fBSTRING\fR consisting of PostScript code to draw a moon
  922. X+ in the upper-left hand corner of the calendar box.  \fIPhase\fR specifies
  923. X+ the phase of the moon, and is 0 (new moon), 1 (first quarter), 2 (full moon)
  924. X+ or 3 (third quarter).  If \fIsize\fR is specified, it controls the radius of
  925. X+ the moon in PostScript units (1/72 inch.)  If it is not specified, the size
  926. X+ of the day-number font is used.
  927. X+ .PP
  928. X+ .RS
  929. X+ For example, the following four lines place moon symbols on the PostScript
  930. X+ calendar:
  931. X+ .PP
  932. X+ .nf
  933. X+         REM [trigger(moondate(0))] PS [psmoon(0)]
  934. X+         REM [trigger(moondate(1))] PS [psmoon(1)]
  935. X+         REM [trigger(moondate(2))] PS [psmoon(2)]
  936. X+         REM [trigger(moondate(3))] PS [psmoon(3)]
  937. X+ .fi
  938. X+ .PP
  939. X+ .RE
  940. X+ .TP
  941. X+ .B psshade(i_num)
  942. X+ Returns a \fBSTRING\fR which consists of PostScript commands to
  943. X+ shade a calendar box.  \fINum\fR can range from 0 (completely black)
  944. X+ to 100 (completely white.)  Here's an example of how to use this:
  945. X+ .RS
  946. X+ .PP
  947. X+ .nf
  948. X+         REM Sat Sun PS [psshade(95)]
  949. X+ .fi
  950. X+ .PP
  951. X+ The above command emits PostScript code to lightly shade the boxes
  952. X+ for Saturday and Sunday in a PostScript calendar.
  953. X+ .RE
  954. X+ .TP
  955. X  .B realtoday()
  956. X  Returns the date as provided by the operating system.  This is in contrast to
  957. X  \fBRemind\fR's concept of "today", which may be changed if it is running
  958. X***************
  959. X*** 2460,2465 ****
  960. X--- 2588,2605 ----
  961. X  timed reminders are discarded.  If you are in calendar mode
  962. X  (described next), then the calendar processing is aborted.
  963. X  .PP
  964. X+ If you supply an \fBINT\fR-type expression after the \fBEXIT\fR command,
  965. X+ it is returned to the calling program as the exit status.  Otherwise,
  966. X+ an exit status of 99 is returned.
  967. X+ .PP
  968. X+ .B THE FLUSH COMMAND
  969. X+ .PP
  970. X+ This command simply consists of the word \fBFLUSH\fR on a line by
  971. X+ itself.  The command flushes the standard output and standard error
  972. X+ streams used by \fBRemind\fR.  This is not terribly useful to most
  973. X+ people, but may be useful if you run \fBRemind\fR as a subprocess of
  974. X+ another program, and want to use pipes for communication.
  975. X+ .PP
  976. X  .SH CALENDAR MODE
  977. X  .PP
  978. X  If you supply the \fB\-c\fR, \fB\-s\fR or \fB\-p\fR
  979. X***************
  980. X*** 2561,2566 ****
  981. X--- 2701,2728 ----
  982. X  places the time of timed reminders in the calendar according to the
  983. X  \fB\-b\fR command-line option.
  984. X  .PP
  985. X+ .B REPEATED EXECUTION
  986. X+ .PP
  987. X+ If you supply a \fIrepeat\fR parameter on the command line,
  988. X+ and do not use the \fB\-c\fR, \fB\-p\fR, or \fB\-s\fR options, \fBRemind\fR
  989. X+ operates in a similar manner to calendar mode.  It repeatedly executes
  990. X+ the reminder script, incrementing \fBtoday()\fR with each iteration.
  991. X+ The same rules about preserving variables and function definitions
  992. X+ apply.  Note that using \fIrepeat\fR on the command line also enables
  993. X+ the \fB\-q\fR option and disables any \fB\-z\fR option.
  994. X+ As an example, if you want to see how \fBRemind\fR
  995. X+ will behave for the next week, you can type:
  996. X+ .PP
  997. X+ .nf
  998. X+     remind .reminders '*7'
  999. X+ .fi
  1000. X+ .PP
  1001. X+ If you want to print the dates of the next 1000 days, use:
  1002. X+ .PP
  1003. X+ .nf
  1004. X+     (echo 'banner %'; echo 'msg [today()]%') | remind - '*1000'
  1005. X+ .fi
  1006. X+ .PP
  1007. X  .SH INITIALIZING VARIABLES ON THE COMMAND LINE
  1008. X  .PP
  1009. X  The \fB\-i\fR option is used to initialize variables on the \fBRemind\fR
  1010. X***************
  1011. X*** 2640,2650 ****
  1012. X  of the regular calendar entry area.  The space from here to the top
  1013. X  of the box is used only to draw the day number.
  1014. X  .TP
  1015. X! /DayFont, /EntryFont, /SmallFont and /HeadFont
  1016. X  The fonts used to draw the day numbers, the calendar entries, the small
  1017. X! calendars, and the month and day headings, respectively.
  1018. X  .TP
  1019. X! DaySize, EntrySize and HeadSize
  1020. X  The sizes of the above fonts.  (The size of the small calendar font
  1021. X  is \fInot\fR defined here.)  For example, if you wanted to print
  1022. X  the Hebrew date next to the regular day number in the calendar, use:
  1023. X--- 2802,2813 ----
  1024. X  of the regular calendar entry area.  The space from here to the top
  1025. X  of the box is used only to draw the day number.
  1026. X  .TP
  1027. X! /DayFont, /EntryFont, /SmallFont, /TitleFont and /HeadFont
  1028. X  The fonts used to draw the day numbers, the calendar entries, the small
  1029. X! calendars, the calendar title (month, year)
  1030. X! and the day-of-the-week headings, respectively.
  1031. X  .TP
  1032. X! DaySize, EntrySize, TitleSize and HeadSize
  1033. X  The sizes of the above fonts.  (The size of the small calendar font
  1034. X  is \fInot\fR defined here.)  For example, if you wanted to print
  1035. X  the Hebrew date next to the regular day number in the calendar, use:
  1036. X***************
  1037. X*** 3144,3150 ****
  1038. X  versions of \fBRemind\fR prior to 03.00.01.
  1039. X  .SH AUTHOR
  1040. X  .PP
  1041. X! David F. Skoll
  1042. X  .SH BUGS
  1043. X  .PP
  1044. X  There's no good reason why read-only system variables are not
  1045. X--- 3307,3316 ----
  1046. X  versions of \fBRemind\fR prior to 03.00.01.
  1047. X  .SH AUTHOR
  1048. X  .PP
  1049. X! David F. Skoll wrote \fBRemind\fR.  The moon code was copied largely verbatim
  1050. X! from "moontool" by John Walker.  The Hebrew calendar support was taken
  1051. X! from "hdate" by Amos Shapir.  The authors of the language files are
  1052. X! listed in the header file "lang.h" which comes with \fBRemind\fR.
  1053. X  .SH BUGS
  1054. X  .PP
  1055. X  There's no good reason why read-only system variables are not
  1056. X*** ../prev/sort.c    Thu Aug 19 16:12:01 1993
  1057. X--- ./sort.c    Tue Aug 31 16:28:20 1993
  1058. X***************
  1059. X*** 182,187 ****
  1060. X--- 182,188 ----
  1061. X        free(cur);
  1062. X        cur = next;
  1063. X     }
  1064. X+    SortedQueue = NULL;
  1065. X  }
  1066. X  /***************************************************************/
  1067. X  /*                                                             */
  1068. X*** ../prev/test.cmp    Thu Aug 19 17:06:48 1993
  1069. X--- ./test.cmp    Tue Aug 31 13:22:46 1993
  1070. X***************
  1071. X*** 631,637 ****
  1072. X  "a05" + "6" => "a056"
  1073. X  value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
  1074. X  set a058 version()
  1075. X! version() => "03.00.08"
  1076. X  set a059 wkday(today())
  1077. X  today() => 1991/02/16
  1078. X  wkday(1991/02/16) => "Saturday"
  1079. X--- 631,637 ----
  1080. X  "a05" + "6" => "a056"
  1081. X  value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
  1082. X  set a058 version()
  1083. X! version() => "03.00.09"
  1084. X  set a059 wkday(today())
  1085. X  today() => 1991/02/16
  1086. X  wkday(1991/02/16) => "Saturday"
  1087. X***************
  1088. X*** 772,778 ****
  1089. X          a048  "foo"
  1090. X          a067  "INT"
  1091. X          a039  "February"
  1092. X!         a058  "03.00.08"
  1093. X          a077  "1992 92
  1094. X  "
  1095. X          a049  21
  1096. X--- 772,778 ----
  1097. X          a048  "foo"
  1098. X          a067  "INT"
  1099. X          a039  "February"
  1100. X!         a058  "03.00.09"
  1101. X          a077  "1992 92
  1102. X  "
  1103. X          a049  21
  1104. X*** ../prev/token.c    Tue Aug  3 12:29:05 1993
  1105. X--- ./token.c    Fri Sep  3 11:50:53 1993
  1106. X***************
  1107. X*** 57,62 ****
  1108. X--- 57,63 ----
  1109. X     { "errmsg",          6,      T_ErrMsg,       0 },
  1110. X     { "exit",        4,    T_Exit,        0 },
  1111. X     { "february",     3,     T_Month,    1 },
  1112. X+    { "flush",        5,    T_Flush,    0 },
  1113. X     { "friday",         3,    T_WkDay,    4 },
  1114. X     { "fset",        4,    T_Fset,        0 },
  1115. X     { "if",        2,    T_If,        0 },
  1116. X*** ../prev/types.h    Tue Aug  3 12:28:45 1993
  1117. X--- ./types.h    Fri Sep  3 11:50:48 1993
  1118. X***************
  1119. X*** 126,132 ****
  1120. X    T_Clr,
  1121. X    T_Debug,
  1122. X    T_Dumpvars,
  1123. X!   T_Scanfrom
  1124. X  };
  1125. X  
  1126. X  /* The structure of a token */
  1127. X--- 126,133 ----
  1128. X    T_Clr,
  1129. X    T_Debug,
  1130. X    T_Dumpvars,
  1131. X!   T_Scanfrom,
  1132. X!   T_Flush
  1133. X  };
  1134. X  
  1135. X  /* The structure of a token */
  1136. X*** ../prev/var.c    Thu Aug 19 16:40:40 1993
  1137. X--- ./var.c    Tue Sep 28 16:16:07 1993
  1138. X***************
  1139. X*** 12,17 ****
  1140. X--- 12,18 ----
  1141. X  
  1142. X  #include "config.h"
  1143. X  #include <stdio.h>
  1144. X+ #include <string.h>
  1145. X  #ifdef HAVE_STDLIB_H
  1146. X  #include <stdlib.h>
  1147. X  #endif
  1148. X***************
  1149. X*** 218,228 ****
  1150. X     r = EvaluateExpr(p, &v);
  1151. X     if (r) return r;
  1152. X  
  1153. X!    if (*TokBuffer == '$') {
  1154. X!       if (v.type != INT_TYPE) return E_BAD_TYPE;
  1155. X!       return SetSysVar(TokBuffer+1, v.v.val);
  1156. X!    }
  1157. X!    return SetVar(TokBuffer, &v);
  1158. X  }
  1159. X  
  1160. X  /***************************************************************/
  1161. X--- 219,226 ----
  1162. X     r = EvaluateExpr(p, &v);
  1163. X     if (r) return r;
  1164. X  
  1165. X!    if (*TokBuffer == '$') return SetSysVar(TokBuffer+1, &v);
  1166. X!    else return SetVar(TokBuffer, &v);
  1167. X  }
  1168. X  
  1169. X  /***************************************************************/
  1170. X***************
  1171. X*** 331,343 ****
  1172. X  /*  DestroyVars                                                */
  1173. X  /*                                                             */
  1174. X  /*  Free all the memory used by variables, but don't delete    */
  1175. X! /*  preserved variables.                                       */
  1176. X  /*                                                             */
  1177. X  /***************************************************************/
  1178. X  #ifdef HAVE_PROTOS
  1179. X! PUBLIC void DestroyVars(void)
  1180. X  #else
  1181. X! void DestroyVars()
  1182. X  #endif
  1183. X  {
  1184. X     int i;
  1185. X--- 329,342 ----
  1186. X  /*  DestroyVars                                                */
  1187. X  /*                                                             */
  1188. X  /*  Free all the memory used by variables, but don't delete    */
  1189. X! /*  preserved variables unless ALL is non-zero.                */
  1190. X  /*                                                             */
  1191. X  /***************************************************************/
  1192. X  #ifdef HAVE_PROTOS
  1193. X! PUBLIC void DestroyVars(int all)
  1194. X  #else
  1195. X! void DestroyVars(all)
  1196. X! int all;
  1197. X  #endif
  1198. X  {
  1199. X     int i;
  1200. X***************
  1201. X*** 348,354 ****
  1202. X        VHashTbl[i] = NULL;
  1203. X        prev = NULL;
  1204. X        while(v) {
  1205. X!          if (!v->preserve) {
  1206. X              DestroyValue(&(v->v));
  1207. X             next = v->next;
  1208. X          free(v);
  1209. X--- 347,353 ----
  1210. X        VHashTbl[i] = NULL;
  1211. X        prev = NULL;
  1212. X        while(v) {
  1213. X!          if (all || !v->preserve) {
  1214. X              DestroyValue(&(v->v));
  1215. X             next = v->next;
  1216. X          free(v);
  1217. X***************
  1218. X*** 431,472 ****
  1219. X  typedef struct {
  1220. X     char *name;
  1221. X     char modifiable;
  1222. X!    int *value;   
  1223. X     int min;
  1224. X     int max;
  1225. X  } SysVar;
  1226. X  
  1227. X! #define NO_CONSTRAINT 4532
  1228. X  /* All of the system variables sorted alphabetically */
  1229. X  static SysVar SysVarArr[] = {
  1230. X!        /* name          modifiable    value        min    max */
  1231. X!    {   "CalcUTC",      1,        &CalculateUTC,    0,    1   },
  1232. X!    {   "CalMode",      0,        &DoCalendar,    0,    0   },
  1233. X!    {   "Daemon",      0,        &Daemon,    0,    0   },
  1234. X!    {   "DontFork",      0,        &DontFork,    0,    0   },
  1235. X!    {   "DontQueue",      0,        &DontQueue,    0,    0   },
  1236. X!    {   "DontTrigAts",      0,        &DontIssueAts,    0,    0   },
  1237. X!    {   "FirstIndent",      1,        &FirstIndent,    0,    132 },
  1238. X!    {   "FoldYear",      1,        &FoldYear,    0,    1   },
  1239. X!    {   "FormWidth",      1,        &FormWidth,    20,    132 },
  1240. X!    {   "HushMode",      0,        &Hush,        0,    0   },
  1241. X!    {   "IgnoreOnce",      0,        &IgnoreOnce,    0,    0   },
  1242. X!    {   "InfDelta",      0,        &InfiniteDelta,    0,    0   },
  1243. X!    {   "LatDeg",      1,        &LatDeg,    -90,    90  },
  1244. X!    {   "LatMin",      1,        &LatMin,    -59,    59  },
  1245. X!    {   "LatSec",      1,        &LatSec,    -59,    59  },
  1246. X!    {   "LongDeg",      1,        &LongDeg,    -180,    180  },
  1247. X!    {   "LongMin",      1,        &LongMin,    -59,    59  },
  1248. X!    {   "LongSec",      1,        &LongSec,    -59,    59  },
  1249. X!    {   "MaxSatIter",      1,        &MaxSatIter,    10,    NO_CONSTRAINT },
  1250. X!    {   "MinsFromUTC",      1,        &MinsFromUTC,    -13*60,    13*60 },
  1251. X!    {   "NextMode",      0,        &NextMode,    0,    0   },
  1252. X!    {   "NumQueued",      0,        &NumQueued,    0,    0   },
  1253. X!    {   "NumTrig",      0,        &NumTriggered,    0,    0   },
  1254. X!    {   "PSCal",          0,        &PsCal,        0,    0   },
  1255. X!    {   "RunOff",      0,        &RunDisabled,    0,    0   },
  1256. X!    {   "SimpleCal",      0,        &DoSimpleCalendar,    0,  0 },
  1257. X!    {   "SubsIndent",      1,        &SubsIndent,    0,    132}
  1258. X  };
  1259. X  
  1260. X  #define NUMSYSVARS ( sizeof(SysVarArr) / sizeof(SysVar) )
  1261. X--- 430,480 ----
  1262. X  typedef struct {
  1263. X     char *name;
  1264. X     char modifiable;
  1265. X!    int type;
  1266. X!    void *value;
  1267. X     int min;
  1268. X     int max;
  1269. X  } SysVar;
  1270. X  
  1271. X! /* If the type of a sys variable is STR_TYPE, then min is redefined
  1272. X!    to be a flag indicating whether or not the value has been malloc'd. */
  1273. X! #define been_malloced min
  1274. X! 
  1275. X! /* Flag for no min/max constraint */
  1276. X! #define ANY 4532
  1277. X  /* All of the system variables sorted alphabetically */
  1278. X  static SysVar SysVarArr[] = {
  1279. X!        /* name          mod    type        value        min/mal    max */
  1280. X!    {   "CalcUTC",      1,    INT_TYPE,    &CalculateUTC,    0,    1   },
  1281. X!    {   "CalMode",      0,    INT_TYPE,    &DoCalendar,    0,    0   },
  1282. X!    {   "Daemon",      0,    INT_TYPE,    &Daemon,    0,    0   },
  1283. X!    {   "DontFork",      0,    INT_TYPE,    &DontFork,    0,    0   },
  1284. X!    {   "DontQueue",      0,    INT_TYPE,    &DontQueue,    0,    0   },
  1285. X!    {   "DontTrigAts",      0,    INT_TYPE,    &DontIssueAts,    0,    0   },
  1286. X!    {   "EndSent",      1,    STR_TYPE,    &EndSent,    0,    0   },
  1287. X!    {   "EndSentIg",      1,    STR_TYPE,    &EndSentIg,    0,    0   },
  1288. X!    {   "FirstIndent",      1,    INT_TYPE,    &FirstIndent,    0,    132 },
  1289. X!    {   "FoldYear",      1,    INT_TYPE,    &FoldYear,    0,    1   },
  1290. X!    {   "FormWidth",      1,    INT_TYPE,    &FormWidth,    20,    132 },
  1291. X!    {   "HushMode",      0,    INT_TYPE,    &Hush,        0,    0   },
  1292. X!    {   "IgnoreOnce",      0,    INT_TYPE,    &IgnoreOnce,    0,    0   },
  1293. X!    {   "InfDelta",      0,    INT_TYPE,    &InfiniteDelta,    0,    0   },
  1294. X!    {   "LatDeg",      1,    INT_TYPE,    &LatDeg,    -90,    90  },
  1295. X!    {   "LatMin",      1,    INT_TYPE,    &LatMin,    -59,    59  },
  1296. X!    {   "LatSec",      1,    INT_TYPE,    &LatSec,    -59,    59  },
  1297. X!    {   "Location",      1,    STR_TYPE,    &Location,    0,    0   },
  1298. X!    {   "LongDeg",      1,    INT_TYPE,    &LongDeg,    -180,    180  },
  1299. X!    {   "LongMin",      1,    INT_TYPE,    &LongMin,    -59,    59  },
  1300. X!    {   "LongSec",      1,    INT_TYPE,    &LongSec,    -59,    59  },
  1301. X!    {   "MaxSatIter",      1,    INT_TYPE,    &MaxSatIter,    10,    ANY },
  1302. X!    {   "MinsFromUTC",      1,    INT_TYPE,    &MinsFromUTC,    -13*60,    13*60 },
  1303. X!    {   "NextMode",      0,    INT_TYPE,    &NextMode,    0,    0   },
  1304. X!    {   "NumQueued",      0,    INT_TYPE,    &NumQueued,    0,    0   },
  1305. X!    {   "NumTrig",      0,    INT_TYPE,    &NumTriggered,    0,    0   },
  1306. X!    {   "PSCal",          0,    INT_TYPE,    &PsCal,        0,    0   },
  1307. X!    {   "RunOff",      0,    INT_TYPE,    &RunDisabled,    0,    0   },
  1308. X!    {   "SimpleCal",      0,    INT_TYPE,    &DoSimpleCalendar,    0,  0 },
  1309. X!    {   "SubsIndent",      1,    INT_TYPE,    &SubsIndent,    0,    132}
  1310. X  };
  1311. X  
  1312. X  #define NUMSYSVARS ( sizeof(SysVarArr) / sizeof(SysVar) )
  1313. X***************
  1314. X*** 480,501 ****
  1315. X  /*                                                             */
  1316. X  /***************************************************************/
  1317. X  #ifdef HAVE_PROTOS
  1318. X! PUBLIC int SetSysVar(const char *name, int value)
  1319. X  #else
  1320. X  int SetSysVar(name, value)
  1321. X  char *name;
  1322. X! int value;
  1323. X  #endif
  1324. X  {
  1325. X     SysVar *v = FindSysVar(name);
  1326. X     if (!v) return E_NOSUCH_VAR;
  1327. X     if (!v->modifiable) {
  1328. X        Eprint("%s: '$%s'", ErrMsg[E_CANT_MODIFY], name);
  1329. X        return E_CANT_MODIFY;
  1330. X     }
  1331. X!    if (v->max != NO_CONSTRAINT && value > v->max) return E_2HIGH;
  1332. X!    if (v->min != NO_CONSTRAINT && value < v->min) return E_2LOW;
  1333. X!    *(v->value) = value;
  1334. X     return OK;
  1335. X  }
  1336. X  
  1337. X--- 488,519 ----
  1338. X  /*                                                             */
  1339. X  /***************************************************************/
  1340. X  #ifdef HAVE_PROTOS
  1341. X! PUBLIC int SetSysVar(const char *name, Value *value)
  1342. X  #else
  1343. X  int SetSysVar(name, value)
  1344. X  char *name;
  1345. X! Value *value;
  1346. X  #endif
  1347. X  {
  1348. X     SysVar *v = FindSysVar(name);
  1349. X     if (!v) return E_NOSUCH_VAR;
  1350. X+    if (v->type != value->type) return E_BAD_TYPE;
  1351. X     if (!v->modifiable) {
  1352. X        Eprint("%s: '$%s'", ErrMsg[E_CANT_MODIFY], name);
  1353. X        return E_CANT_MODIFY;
  1354. X     }
  1355. X! 
  1356. X! /* If it's a string variable, special measures must be taken */
  1357. X!    if (v->type == STR_TYPE) {
  1358. X!       if (v->been_malloced) free(*((char **)(v->value)));
  1359. X!       v->been_malloced = 1;
  1360. X!       *((char **) v->value) = value->v.str;
  1361. X!       value->type = ERR_TYPE;  /* So that it's not accidentally freed */
  1362. X!    } else {
  1363. X!       if (v->max != ANY && value->v.val > v->max) return E_2HIGH;
  1364. X!       if (v->min != ANY && value->v.val < v->min) return E_2LOW;
  1365. X!       *((int *)v->value) = value->v.val;
  1366. X!    }
  1367. X     return OK;
  1368. X  }
  1369. X  
  1370. X***************
  1371. X*** 516,525 ****
  1372. X  {
  1373. X     SysVar *v = FindSysVar(name);
  1374. X  
  1375. X!    val->type = INT_TYPE;
  1376. X!    val->v.val = 0;
  1377. X     if (!v) return E_NOSUCH_VAR;
  1378. X!    val->v.val = *(v->value);
  1379. X     return OK;
  1380. X  }
  1381. X  
  1382. X--- 534,548 ----
  1383. X  {
  1384. X     SysVar *v = FindSysVar(name);
  1385. X  
  1386. X!    val->type = ERR_TYPE;
  1387. X     if (!v) return E_NOSUCH_VAR;
  1388. X!    if (v->type == STR_TYPE) {
  1389. X!       val->v.str = StrDup(*((char **) v->value));
  1390. X!       if (!val->v.str) return E_NO_MEM;
  1391. X!    } else {
  1392. X!       val->v.val = *((int *) v->value);
  1393. X!    }
  1394. X!    val->type = v->type;
  1395. X     return OK;
  1396. X  }
  1397. X  
  1398. X***************
  1399. X*** 603,615 ****
  1400. X     if (name) strcat(buffer, name); else strcat(buffer, v->name);
  1401. X     fprintf(ErrFp, "%*s  ", VAR_NAME_LEN, buffer);
  1402. X     if (v) {
  1403. X!       if (!v->modifiable) fprintf(ErrFp, "%d\n", *v->value);
  1404. X!       else {
  1405. X!          fprintf(ErrFp, "%-10d  ", *v->value);
  1406. X!      if (v->min == NO_CONSTRAINT) fprintf(ErrFp, "(-Inf, ");
  1407. X!      else                         fprintf(ErrFp, "[%d, ", v->min);
  1408. X!      if (v->max == NO_CONSTRAINT) fprintf(ErrFp, "Inf)\n");
  1409. X!      else                         fprintf(ErrFp, "%d]\n", v->max);
  1410. X        }
  1411. X     } else   fprintf(ErrFp, "%s\n", UNDEF);
  1412. X  
  1413. X--- 626,648 ----
  1414. X     if (name) strcat(buffer, name); else strcat(buffer, v->name);
  1415. X     fprintf(ErrFp, "%*s  ", VAR_NAME_LEN, buffer);
  1416. X     if (v) {
  1417. X!       if (v->type == STR_TYPE) {
  1418. X!          char *s = *((char **)v->value);
  1419. X!      int y;
  1420. X!      putc('"', ErrFp);
  1421. X!      for (y=0; y<MAX_PRT_LEN && *s; y++) putc(*s++, ErrFp);
  1422. X!      putc('"', ErrFp);
  1423. X!      if (*s) fprintf(ErrFp, "...");
  1424. X!      putc('\n', ErrFp);
  1425. X!       } else {
  1426. X!          if (!v->modifiable) fprintf(ErrFp, "%d\n", *((int *)v->value));
  1427. X!          else {
  1428. X!             fprintf(ErrFp, "%-10d  ", *((int *)v->value));
  1429. X!            if (v->min == ANY) fprintf(ErrFp, "(-Inf, ");
  1430. X!         else                         fprintf(ErrFp, "[%d, ", v->min);
  1431. X!         if (v->max == ANY) fprintf(ErrFp, "Inf)\n");
  1432. X!         else                         fprintf(ErrFp, "%d]\n", v->max);
  1433. X!          }
  1434. X        }
  1435. X     } else   fprintf(ErrFp, "%s\n", UNDEF);
  1436. X  
  1437. END_OF_FILE
  1438.   if test 42130 -ne `wc -c <'patch.09.D'`; then
  1439.     echo shar: \"'patch.09.D'\" unpacked with wrong size!
  1440.   elif test -f 'patch.09.A' && test -f 'patch.09.B' && test -f 'patch.09.C'
  1441.   then
  1442.     echo shar: Combining  \"'patch.09'\" \(145785 characters\) 
  1443.     cat 'patch.09.A' 'patch.09.B' 'patch.09.C' 'patch.09.D' > 'patch.09' 
  1444.     if test 145785 -ne `wc -c <'patch.09'`; then 
  1445.       echo shar: \"'patch.09'\" combined with wrong size! 
  1446.     else 
  1447.       rm patch.09.A patch.09.B patch.09.C patch.09.D 
  1448.     fi 
  1449.   fi
  1450.   # end of 'patch.09.D'
  1451. fi
  1452. echo shar: End of archive 3 \(of 4\).
  1453. cp /dev/null ark3isdone
  1454. MISSING=""
  1455. for I in 1 2 3 4 ; do
  1456.     if test ! -f ark${I}isdone ; then
  1457.     MISSING="${MISSING} ${I}"
  1458.     fi
  1459. done
  1460. if test "${MISSING}" = "" ; then
  1461.     echo You have unpacked all 4 archives.
  1462.     rm -f ark[1-9]isdone
  1463. else
  1464.     echo You still must unpack the following archives:
  1465.     echo "        " ${MISSING}
  1466. fi
  1467. exit 0
  1468. exit 0 # Just in case...
  1469.