remind-rb 6.2.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +328 -0
  3. data/README.md +141 -0
  4. data/ext/remind/shim.c +379 -0
  5. data/lib/remind/builder.rb +252 -0
  6. data/lib/remind/library.rb +141 -0
  7. data/lib/remind/native.rb +257 -0
  8. data/lib/remind/reminder.rb +527 -0
  9. data/lib/remind/runtime.rb +130 -0
  10. data/lib/remind/session.rb +246 -0
  11. data/lib/remind/source.rb +160 -0
  12. data/lib/remind/value.rb +170 -0
  13. data/lib/remind/version.rb +13 -0
  14. data/lib/remind.rb +147 -0
  15. data/remind-v06.02.10/COPYRIGHT +300 -0
  16. data/remind-v06.02.10/configure +5684 -0
  17. data/remind-v06.02.10/configure.ac +131 -0
  18. data/remind-v06.02.10/docs/WHATSNEW +3858 -0
  19. data/remind-v06.02.10/include/ansitext.rem +35 -0
  20. data/remind-v06.02.10/include/holidays/ad/02.rem +15 -0
  21. data/remind-v06.02.10/include/holidays/ad/03.rem +14 -0
  22. data/remind-v06.02.10/include/holidays/ad/04.rem +14 -0
  23. data/remind-v06.02.10/include/holidays/ad/05.rem +14 -0
  24. data/remind-v06.02.10/include/holidays/ad/06.rem +16 -0
  25. data/remind-v06.02.10/include/holidays/ad/07.rem +15 -0
  26. data/remind-v06.02.10/include/holidays/ad/08.rem +14 -0
  27. data/remind-v06.02.10/include/holidays/ad.rem +28 -0
  28. data/remind-v06.02.10/include/holidays/ae.rem +10 -0
  29. data/remind-v06.02.10/include/holidays/al.rem +33 -0
  30. data/remind-v06.02.10/include/holidays/am.rem +19 -0
  31. data/remind-v06.02.10/include/holidays/ao.rem +41 -0
  32. data/remind-v06.02.10/include/holidays/ar.rem +38 -0
  33. data/remind-v06.02.10/include/holidays/as.rem +40 -0
  34. data/remind-v06.02.10/include/holidays/at/1.rem +15 -0
  35. data/remind-v06.02.10/include/holidays/at/2.rem +16 -0
  36. data/remind-v06.02.10/include/holidays/at/3.rem +15 -0
  37. data/remind-v06.02.10/include/holidays/at/4.rem +15 -0
  38. data/remind-v06.02.10/include/holidays/at/5.rem +15 -0
  39. data/remind-v06.02.10/include/holidays/at/6.rem +15 -0
  40. data/remind-v06.02.10/include/holidays/at/7.rem +15 -0
  41. data/remind-v06.02.10/include/holidays/at/8.rem +15 -0
  42. data/remind-v06.02.10/include/holidays/at/9.rem +15 -0
  43. data/remind-v06.02.10/include/holidays/at.rem +32 -0
  44. data/remind-v06.02.10/include/holidays/au/act.rem +27 -0
  45. data/remind-v06.02.10/include/holidays/au/nsw.rem +25 -0
  46. data/remind-v06.02.10/include/holidays/au/nt.rem +28 -0
  47. data/remind-v06.02.10/include/holidays/au/qld.rem +23 -0
  48. data/remind-v06.02.10/include/holidays/au/sa.rem +29 -0
  49. data/remind-v06.02.10/include/holidays/au/tas.rem +16 -0
  50. data/remind-v06.02.10/include/holidays/au/vic.rem +24 -0
  51. data/remind-v06.02.10/include/holidays/au/wa.rem +24 -0
  52. data/remind-v06.02.10/include/holidays/au.rem +21 -0
  53. data/remind-v06.02.10/include/holidays/aw.rem +19 -0
  54. data/remind-v06.02.10/include/holidays/az.rem +44 -0
  55. data/remind-v06.02.10/include/holidays/ba/bih.rem +23 -0
  56. data/remind-v06.02.10/include/holidays/ba/brc.rem +20 -0
  57. data/remind-v06.02.10/include/holidays/ba/srp.rem +23 -0
  58. data/remind-v06.02.10/include/holidays/ba.rem +22 -0
  59. data/remind-v06.02.10/include/holidays/bb.rem +28 -0
  60. data/remind-v06.02.10/include/holidays/bd.rem +14 -0
  61. data/remind-v06.02.10/include/holidays/be.rem +24 -0
  62. data/remind-v06.02.10/include/holidays/bf.rem +29 -0
  63. data/remind-v06.02.10/include/holidays/bg.rem +34 -0
  64. data/remind-v06.02.10/include/holidays/bh.rem +11 -0
  65. data/remind-v06.02.10/include/holidays/bi.rem +30 -0
  66. data/remind-v06.02.10/include/holidays/bn.rem +22 -0
  67. data/remind-v06.02.10/include/holidays/bo/b.rem +13 -0
  68. data/remind-v06.02.10/include/holidays/bo/c.rem +13 -0
  69. data/remind-v06.02.10/include/holidays/bo/h.rem +13 -0
  70. data/remind-v06.02.10/include/holidays/bo/l.rem +13 -0
  71. data/remind-v06.02.10/include/holidays/bo/n.rem +13 -0
  72. data/remind-v06.02.10/include/holidays/bo/o.rem +13 -0
  73. data/remind-v06.02.10/include/holidays/bo/p.rem +13 -0
  74. data/remind-v06.02.10/include/holidays/bo/s.rem +13 -0
  75. data/remind-v06.02.10/include/holidays/bo/t.rem +13 -0
  76. data/remind-v06.02.10/include/holidays/bo.rem +32 -0
  77. data/remind-v06.02.10/include/holidays/br/ac.rem +21 -0
  78. data/remind-v06.02.10/include/holidays/br/al.rem +16 -0
  79. data/remind-v06.02.10/include/holidays/br/am.rem +13 -0
  80. data/remind-v06.02.10/include/holidays/br/ap.rem +15 -0
  81. data/remind-v06.02.10/include/holidays/br/ba.rem +13 -0
  82. data/remind-v06.02.10/include/holidays/br/ce.rem +15 -0
  83. data/remind-v06.02.10/include/holidays/br/df.rem +14 -0
  84. data/remind-v06.02.10/include/holidays/br/es.rem +13 -0
  85. data/remind-v06.02.10/include/holidays/br/go.rem +14 -0
  86. data/remind-v06.02.10/include/holidays/br/ma.rem +13 -0
  87. data/remind-v06.02.10/include/holidays/br/mg.rem +13 -0
  88. data/remind-v06.02.10/include/holidays/br/ms.rem +13 -0
  89. data/remind-v06.02.10/include/holidays/br/pa.rem +13 -0
  90. data/remind-v06.02.10/include/holidays/br/pb.rem +13 -0
  91. data/remind-v06.02.10/include/holidays/br/pe.rem +13 -0
  92. data/remind-v06.02.10/include/holidays/br/pi.rem +13 -0
  93. data/remind-v06.02.10/include/holidays/br/pr.rem +13 -0
  94. data/remind-v06.02.10/include/holidays/br/rj.rem +13 -0
  95. data/remind-v06.02.10/include/holidays/br/rn.rem +14 -0
  96. data/remind-v06.02.10/include/holidays/br/ro.rem +14 -0
  97. data/remind-v06.02.10/include/holidays/br/rr.rem +13 -0
  98. data/remind-v06.02.10/include/holidays/br/rs.rem +13 -0
  99. data/remind-v06.02.10/include/holidays/br/sc.rem +14 -0
  100. data/remind-v06.02.10/include/holidays/br/se.rem +13 -0
  101. data/remind-v06.02.10/include/holidays/br/sp.rem +13 -0
  102. data/remind-v06.02.10/include/holidays/br/to.rem +15 -0
  103. data/remind-v06.02.10/include/holidays/br.rem +33 -0
  104. data/remind-v06.02.10/include/holidays/bs.rem +26 -0
  105. data/remind-v06.02.10/include/holidays/bw.rem +31 -0
  106. data/remind-v06.02.10/include/holidays/by.rem +17 -0
  107. data/remind-v06.02.10/include/holidays/bz.rem +43 -0
  108. data/remind-v06.02.10/include/holidays/ca/ab.rem +17 -0
  109. data/remind-v06.02.10/include/holidays/ca/bc.rem +14 -0
  110. data/remind-v06.02.10/include/holidays/ca/mb.rem +16 -0
  111. data/remind-v06.02.10/include/holidays/ca/nb.rem +14 -0
  112. data/remind-v06.02.10/include/holidays/ca/nl.rem +19 -0
  113. data/remind-v06.02.10/include/holidays/ca/ns.rem +16 -0
  114. data/remind-v06.02.10/include/holidays/ca/nt.rem +14 -0
  115. data/remind-v06.02.10/include/holidays/ca/nu.rem +16 -0
  116. data/remind-v06.02.10/include/holidays/ca/on.rem +16 -0
  117. data/remind-v06.02.10/include/holidays/ca/pe.rem +13 -0
  118. data/remind-v06.02.10/include/holidays/ca/qc.rem +18 -0
  119. data/remind-v06.02.10/include/holidays/ca/sk.rem +14 -0
  120. data/remind-v06.02.10/include/holidays/ca/yt.rem +17 -0
  121. data/remind-v06.02.10/include/holidays/ca.rem +37 -0
  122. data/remind-v06.02.10/include/holidays/cg.rem +17 -0
  123. data/remind-v06.02.10/include/holidays/ch/ag.rem +22 -0
  124. data/remind-v06.02.10/include/holidays/ch/ai.rem +20 -0
  125. data/remind-v06.02.10/include/holidays/ch/ar.rem +16 -0
  126. data/remind-v06.02.10/include/holidays/ch/be.rem +17 -0
  127. data/remind-v06.02.10/include/holidays/ch/bl.rem +17 -0
  128. data/remind-v06.02.10/include/holidays/ch/bs.rem +17 -0
  129. data/remind-v06.02.10/include/holidays/ch/fr.rem +19 -0
  130. data/remind-v06.02.10/include/holidays/ch/ge.rem +17 -0
  131. data/remind-v06.02.10/include/holidays/ch/gl.rem +22 -0
  132. data/remind-v06.02.10/include/holidays/ch/gr.rem +18 -0
  133. data/remind-v06.02.10/include/holidays/ch/ju.rem +21 -0
  134. data/remind-v06.02.10/include/holidays/ch/lu.rem +21 -0
  135. data/remind-v06.02.10/include/holidays/ch/ne.rem +18 -0
  136. data/remind-v06.02.10/include/holidays/ch/nw.rem +24 -0
  137. data/remind-v06.02.10/include/holidays/ch/ow.rem +24 -0
  138. data/remind-v06.02.10/include/holidays/ch/sg.rem +20 -0
  139. data/remind-v06.02.10/include/holidays/ch/sh.rem +20 -0
  140. data/remind-v06.02.10/include/holidays/ch/so.rem +17 -0
  141. data/remind-v06.02.10/include/holidays/ch/sz.rem +22 -0
  142. data/remind-v06.02.10/include/holidays/ch/tg.rem +18 -0
  143. data/remind-v06.02.10/include/holidays/ch/ti.rem +23 -0
  144. data/remind-v06.02.10/include/holidays/ch/ur.rem +22 -0
  145. data/remind-v06.02.10/include/holidays/ch/vd.rem +17 -0
  146. data/remind-v06.02.10/include/holidays/ch/vs.rem +23 -0
  147. data/remind-v06.02.10/include/holidays/ch/zg.rem +23 -0
  148. data/remind-v06.02.10/include/holidays/ch/zh.rem +18 -0
  149. data/remind-v06.02.10/include/holidays/ch.rem +18 -0
  150. data/remind-v06.02.10/include/holidays/chinese-new-year.rem +86 -0
  151. data/remind-v06.02.10/include/holidays/cl/ap.rem +13 -0
  152. data/remind-v06.02.10/include/holidays/cl/nb.rem +13 -0
  153. data/remind-v06.02.10/include/holidays/cl.rem +46 -0
  154. data/remind-v06.02.10/include/holidays/cm.rem +21 -0
  155. data/remind-v06.02.10/include/holidays/co.rem +85 -0
  156. data/remind-v06.02.10/include/holidays/cr.rem +39 -0
  157. data/remind-v06.02.10/include/holidays/cu.rem +19 -0
  158. data/remind-v06.02.10/include/holidays/cw.rem +24 -0
  159. data/remind-v06.02.10/include/holidays/cy.rem +27 -0
  160. data/remind-v06.02.10/include/holidays/cz.rem +20 -0
  161. data/remind-v06.02.10/include/holidays/de/bb.rem +15 -0
  162. data/remind-v06.02.10/include/holidays/de/be.rem +13 -0
  163. data/remind-v06.02.10/include/holidays/de/bw.rem +15 -0
  164. data/remind-v06.02.10/include/holidays/de/by.rem +18 -0
  165. data/remind-v06.02.10/include/holidays/de/hb.rem +13 -0
  166. data/remind-v06.02.10/include/holidays/de/he.rem +13 -0
  167. data/remind-v06.02.10/include/holidays/de/hh.rem +13 -0
  168. data/remind-v06.02.10/include/holidays/de/mv.rem +14 -0
  169. data/remind-v06.02.10/include/holidays/de/ni.rem +13 -0
  170. data/remind-v06.02.10/include/holidays/de/nw.rem +14 -0
  171. data/remind-v06.02.10/include/holidays/de/rp.rem +14 -0
  172. data/remind-v06.02.10/include/holidays/de/sh.rem +13 -0
  173. data/remind-v06.02.10/include/holidays/de/sl.rem +15 -0
  174. data/remind-v06.02.10/include/holidays/de/sn.rem +14 -0
  175. data/remind-v06.02.10/include/holidays/de/st.rem +14 -0
  176. data/remind-v06.02.10/include/holidays/de/th.rem +14 -0
  177. data/remind-v06.02.10/include/holidays/de.rem +23 -0
  178. data/remind-v06.02.10/include/holidays/discordian.rem +25 -0
  179. data/remind-v06.02.10/include/holidays/dj.rem +12 -0
  180. data/remind-v06.02.10/include/holidays/dk.rem +23 -0
  181. data/remind-v06.02.10/include/holidays/dm.rem +24 -0
  182. data/remind-v06.02.10/include/holidays/do.rem +36 -0
  183. data/remind-v06.02.10/include/holidays/dz.rem +12 -0
  184. data/remind-v06.02.10/include/holidays/ec.rem +48 -0
  185. data/remind-v06.02.10/include/holidays/ee.rem +19 -0
  186. data/remind-v06.02.10/include/holidays/eg.rem +17 -0
  187. data/remind-v06.02.10/include/holidays/es/an.rem +17 -0
  188. data/remind-v06.02.10/include/holidays/es/ar.rem +17 -0
  189. data/remind-v06.02.10/include/holidays/es/as.rem +17 -0
  190. data/remind-v06.02.10/include/holidays/es/cb.rem +15 -0
  191. data/remind-v06.02.10/include/holidays/es/ce.rem +15 -0
  192. data/remind-v06.02.10/include/holidays/es/cl.rem +17 -0
  193. data/remind-v06.02.10/include/holidays/es/cm.rem +15 -0
  194. data/remind-v06.02.10/include/holidays/es/cn.rem +15 -0
  195. data/remind-v06.02.10/include/holidays/es/ct.rem +16 -0
  196. data/remind-v06.02.10/include/holidays/es/ex.rem +16 -0
  197. data/remind-v06.02.10/include/holidays/es/ga.rem +15 -0
  198. data/remind-v06.02.10/include/holidays/es/ib.rem +15 -0
  199. data/remind-v06.02.10/include/holidays/es/mc.rem +17 -0
  200. data/remind-v06.02.10/include/holidays/es/md.rem +16 -0
  201. data/remind-v06.02.10/include/holidays/es/ml.rem +15 -0
  202. data/remind-v06.02.10/include/holidays/es/nc.rem +15 -0
  203. data/remind-v06.02.10/include/holidays/es/pv.rem +15 -0
  204. data/remind-v06.02.10/include/holidays/es/ri.rem +16 -0
  205. data/remind-v06.02.10/include/holidays/es/vc.rem +16 -0
  206. data/remind-v06.02.10/include/holidays/es.rem +23 -0
  207. data/remind-v06.02.10/include/holidays/et.rem +20 -0
  208. data/remind-v06.02.10/include/holidays/fi.rem +43 -0
  209. data/remind-v06.02.10/include/holidays/fr/bl.rem +13 -0
  210. data/remind-v06.02.10/include/holidays/fr/ges.rem +14 -0
  211. data/remind-v06.02.10/include/holidays/fr/gp.rem +16 -0
  212. data/remind-v06.02.10/include/holidays/fr/gy.rem +13 -0
  213. data/remind-v06.02.10/include/holidays/fr/mf.rem +13 -0
  214. data/remind-v06.02.10/include/holidays/fr/mq.rem +15 -0
  215. data/remind-v06.02.10/include/holidays/fr/nc.rem +13 -0
  216. data/remind-v06.02.10/include/holidays/fr/pf.rem +15 -0
  217. data/remind-v06.02.10/include/holidays/fr/re.rem +13 -0
  218. data/remind-v06.02.10/include/holidays/fr/wf.rem +14 -0
  219. data/remind-v06.02.10/include/holidays/fr/yt.rem +13 -0
  220. data/remind-v06.02.10/include/holidays/fr.rem +18 -0
  221. data/remind-v06.02.10/include/holidays/ga.rem +18 -0
  222. data/remind-v06.02.10/include/holidays/gb/eng.rem +14 -0
  223. data/remind-v06.02.10/include/holidays/gb/nir.rem +20 -0
  224. data/remind-v06.02.10/include/holidays/gb/sct.rem +20 -0
  225. data/remind-v06.02.10/include/holidays/gb/wls.rem +14 -0
  226. data/remind-v06.02.10/include/holidays/gb.rem +27 -0
  227. data/remind-v06.02.10/include/holidays/ge.rem +24 -0
  228. data/remind-v06.02.10/include/holidays/gh.rem +34 -0
  229. data/remind-v06.02.10/include/holidays/gl.rem +25 -0
  230. data/remind-v06.02.10/include/holidays/gr.rem +37 -0
  231. data/remind-v06.02.10/include/holidays/gt.rem +24 -0
  232. data/remind-v06.02.10/include/holidays/gu.rem +37 -0
  233. data/remind-v06.02.10/include/holidays/hk.rem +25 -0
  234. data/remind-v06.02.10/include/holidays/hn.rem +18 -0
  235. data/remind-v06.02.10/include/holidays/hr.rem +21 -0
  236. data/remind-v06.02.10/include/holidays/ht.rem +34 -0
  237. data/remind-v06.02.10/include/holidays/hu.rem +20 -0
  238. data/remind-v06.02.10/include/holidays/id.rem +15 -0
  239. data/remind-v06.02.10/include/holidays/ie.rem +41 -0
  240. data/remind-v06.02.10/include/holidays/im.rem +26 -0
  241. data/remind-v06.02.10/include/holidays/in/ap.rem +14 -0
  242. data/remind-v06.02.10/include/holidays/in/as.rem +13 -0
  243. data/remind-v06.02.10/include/holidays/in/br.rem +14 -0
  244. data/remind-v06.02.10/include/holidays/in/cg.rem +13 -0
  245. data/remind-v06.02.10/include/holidays/in/gj.rem +15 -0
  246. data/remind-v06.02.10/include/holidays/in/hr.rem +14 -0
  247. data/remind-v06.02.10/include/holidays/in/ka.rem +13 -0
  248. data/remind-v06.02.10/include/holidays/in/kl.rem +14 -0
  249. data/remind-v06.02.10/include/holidays/in/mh.rem +15 -0
  250. data/remind-v06.02.10/include/holidays/in/mp.rem +13 -0
  251. data/remind-v06.02.10/include/holidays/in/od.rem +15 -0
  252. data/remind-v06.02.10/include/holidays/in/rj.rem +14 -0
  253. data/remind-v06.02.10/include/holidays/in/sk.rem +13 -0
  254. data/remind-v06.02.10/include/holidays/in/tn.rem +15 -0
  255. data/remind-v06.02.10/include/holidays/in/ts.rem +14 -0
  256. data/remind-v06.02.10/include/holidays/in/uk.rem +13 -0
  257. data/remind-v06.02.10/include/holidays/in/up.rem +13 -0
  258. data/remind-v06.02.10/include/holidays/in/wb.rem +16 -0
  259. data/remind-v06.02.10/include/holidays/in.rem +24 -0
  260. data/remind-v06.02.10/include/holidays/is.rem +23 -0
  261. data/remind-v06.02.10/include/holidays/it/ag.rem +13 -0
  262. data/remind-v06.02.10/include/holidays/it/al.rem +13 -0
  263. data/remind-v06.02.10/include/holidays/it/an.rem +13 -0
  264. data/remind-v06.02.10/include/holidays/it/andria.rem +13 -0
  265. data/remind-v06.02.10/include/holidays/it/ao.rem +13 -0
  266. data/remind-v06.02.10/include/holidays/it/ap.rem +13 -0
  267. data/remind-v06.02.10/include/holidays/it/aq.rem +13 -0
  268. data/remind-v06.02.10/include/holidays/it/ar.rem +13 -0
  269. data/remind-v06.02.10/include/holidays/it/at.rem +13 -0
  270. data/remind-v06.02.10/include/holidays/it/av.rem +13 -0
  271. data/remind-v06.02.10/include/holidays/it/ba.rem +13 -0
  272. data/remind-v06.02.10/include/holidays/it/barletta.rem +13 -0
  273. data/remind-v06.02.10/include/holidays/it/bg.rem +13 -0
  274. data/remind-v06.02.10/include/holidays/it/bl.rem +13 -0
  275. data/remind-v06.02.10/include/holidays/it/bn.rem +13 -0
  276. data/remind-v06.02.10/include/holidays/it/bo.rem +13 -0
  277. data/remind-v06.02.10/include/holidays/it/br.rem +13 -0
  278. data/remind-v06.02.10/include/holidays/it/bs.rem +13 -0
  279. data/remind-v06.02.10/include/holidays/it/bt.rem +15 -0
  280. data/remind-v06.02.10/include/holidays/it/bz.rem +14 -0
  281. data/remind-v06.02.10/include/holidays/it/ca.rem +13 -0
  282. data/remind-v06.02.10/include/holidays/it/cb.rem +13 -0
  283. data/remind-v06.02.10/include/holidays/it/ce.rem +13 -0
  284. data/remind-v06.02.10/include/holidays/it/cesena.rem +13 -0
  285. data/remind-v06.02.10/include/holidays/it/ch.rem +13 -0
  286. data/remind-v06.02.10/include/holidays/it/cl.rem +13 -0
  287. data/remind-v06.02.10/include/holidays/it/cn.rem +13 -0
  288. data/remind-v06.02.10/include/holidays/it/co.rem +13 -0
  289. data/remind-v06.02.10/include/holidays/it/cr.rem +13 -0
  290. data/remind-v06.02.10/include/holidays/it/cs.rem +13 -0
  291. data/remind-v06.02.10/include/holidays/it/ct.rem +13 -0
  292. data/remind-v06.02.10/include/holidays/it/cz.rem +13 -0
  293. data/remind-v06.02.10/include/holidays/it/en.rem +13 -0
  294. data/remind-v06.02.10/include/holidays/it/fc.rem +14 -0
  295. data/remind-v06.02.10/include/holidays/it/fe.rem +13 -0
  296. data/remind-v06.02.10/include/holidays/it/fg.rem +13 -0
  297. data/remind-v06.02.10/include/holidays/it/fi.rem +13 -0
  298. data/remind-v06.02.10/include/holidays/it/fm.rem +14 -0
  299. data/remind-v06.02.10/include/holidays/it/forli.rem +13 -0
  300. data/remind-v06.02.10/include/holidays/it/fr.rem +13 -0
  301. data/remind-v06.02.10/include/holidays/it/ge.rem +13 -0
  302. data/remind-v06.02.10/include/holidays/it/go.rem +13 -0
  303. data/remind-v06.02.10/include/holidays/it/gr.rem +13 -0
  304. data/remind-v06.02.10/include/holidays/it/im.rem +13 -0
  305. data/remind-v06.02.10/include/holidays/it/is.rem +13 -0
  306. data/remind-v06.02.10/include/holidays/it/kr.rem +13 -0
  307. data/remind-v06.02.10/include/holidays/it/lc.rem +13 -0
  308. data/remind-v06.02.10/include/holidays/it/le.rem +13 -0
  309. data/remind-v06.02.10/include/holidays/it/li.rem +13 -0
  310. data/remind-v06.02.10/include/holidays/it/lo.rem +13 -0
  311. data/remind-v06.02.10/include/holidays/it/lt.rem +14 -0
  312. data/remind-v06.02.10/include/holidays/it/lu.rem +13 -0
  313. data/remind-v06.02.10/include/holidays/it/mb.rem +13 -0
  314. data/remind-v06.02.10/include/holidays/it/mc.rem +13 -0
  315. data/remind-v06.02.10/include/holidays/it/me.rem +13 -0
  316. data/remind-v06.02.10/include/holidays/it/mi.rem +13 -0
  317. data/remind-v06.02.10/include/holidays/it/mn.rem +13 -0
  318. data/remind-v06.02.10/include/holidays/it/mo.rem +13 -0
  319. data/remind-v06.02.10/include/holidays/it/ms.rem +13 -0
  320. data/remind-v06.02.10/include/holidays/it/mt.rem +13 -0
  321. data/remind-v06.02.10/include/holidays/it/na.rem +13 -0
  322. data/remind-v06.02.10/include/holidays/it/no.rem +13 -0
  323. data/remind-v06.02.10/include/holidays/it/nu.rem +13 -0
  324. data/remind-v06.02.10/include/holidays/it/or.rem +13 -0
  325. data/remind-v06.02.10/include/holidays/it/pa.rem +13 -0
  326. data/remind-v06.02.10/include/holidays/it/pc.rem +13 -0
  327. data/remind-v06.02.10/include/holidays/it/pd.rem +13 -0
  328. data/remind-v06.02.10/include/holidays/it/pe.rem +13 -0
  329. data/remind-v06.02.10/include/holidays/it/pesaro.rem +13 -0
  330. data/remind-v06.02.10/include/holidays/it/pg.rem +14 -0
  331. data/remind-v06.02.10/include/holidays/it/pi.rem +13 -0
  332. data/remind-v06.02.10/include/holidays/it/pn.rem +14 -0
  333. data/remind-v06.02.10/include/holidays/it/pr.rem +13 -0
  334. data/remind-v06.02.10/include/holidays/it/pt.rem +13 -0
  335. data/remind-v06.02.10/include/holidays/it/pu.rem +14 -0
  336. data/remind-v06.02.10/include/holidays/it/pv.rem +13 -0
  337. data/remind-v06.02.10/include/holidays/it/pz.rem +13 -0
  338. data/remind-v06.02.10/include/holidays/it/ra.rem +13 -0
  339. data/remind-v06.02.10/include/holidays/it/rc.rem +13 -0
  340. data/remind-v06.02.10/include/holidays/it/re.rem +13 -0
  341. data/remind-v06.02.10/include/holidays/it/rg.rem +14 -0
  342. data/remind-v06.02.10/include/holidays/it/ri.rem +13 -0
  343. data/remind-v06.02.10/include/holidays/it/rm.rem +13 -0
  344. data/remind-v06.02.10/include/holidays/it/rn.rem +13 -0
  345. data/remind-v06.02.10/include/holidays/it/ro.rem +13 -0
  346. data/remind-v06.02.10/include/holidays/it/sa.rem +13 -0
  347. data/remind-v06.02.10/include/holidays/it/si.rem +13 -0
  348. data/remind-v06.02.10/include/holidays/it/so.rem +13 -0
  349. data/remind-v06.02.10/include/holidays/it/sp.rem +13 -0
  350. data/remind-v06.02.10/include/holidays/it/sr.rem +13 -0
  351. data/remind-v06.02.10/include/holidays/it/ss.rem +13 -0
  352. data/remind-v06.02.10/include/holidays/it/su.rem +13 -0
  353. data/remind-v06.02.10/include/holidays/it/sv.rem +13 -0
  354. data/remind-v06.02.10/include/holidays/it/ta.rem +13 -0
  355. data/remind-v06.02.10/include/holidays/it/te.rem +13 -0
  356. data/remind-v06.02.10/include/holidays/it/tn.rem +13 -0
  357. data/remind-v06.02.10/include/holidays/it/to.rem +13 -0
  358. data/remind-v06.02.10/include/holidays/it/tp.rem +13 -0
  359. data/remind-v06.02.10/include/holidays/it/tr.rem +13 -0
  360. data/remind-v06.02.10/include/holidays/it/trani.rem +13 -0
  361. data/remind-v06.02.10/include/holidays/it/ts.rem +13 -0
  362. data/remind-v06.02.10/include/holidays/it/tv.rem +13 -0
  363. data/remind-v06.02.10/include/holidays/it/ud.rem +13 -0
  364. data/remind-v06.02.10/include/holidays/it/urbino.rem +13 -0
  365. data/remind-v06.02.10/include/holidays/it/va.rem +13 -0
  366. data/remind-v06.02.10/include/holidays/it/vb.rem +13 -0
  367. data/remind-v06.02.10/include/holidays/it/vc.rem +13 -0
  368. data/remind-v06.02.10/include/holidays/it/ve.rem +14 -0
  369. data/remind-v06.02.10/include/holidays/it/vi.rem +13 -0
  370. data/remind-v06.02.10/include/holidays/it/vr.rem +13 -0
  371. data/remind-v06.02.10/include/holidays/it/vt.rem +13 -0
  372. data/remind-v06.02.10/include/holidays/it/vv.rem +13 -0
  373. data/remind-v06.02.10/include/holidays/it.rem +26 -0
  374. data/remind-v06.02.10/include/holidays/je.rem +19 -0
  375. data/remind-v06.02.10/include/holidays/jewish.rem +135 -0
  376. data/remind-v06.02.10/include/holidays/jm.rem +24 -0
  377. data/remind-v06.02.10/include/holidays/jo.rem +11 -0
  378. data/remind-v06.02.10/include/holidays/jp.rem +27 -0
  379. data/remind-v06.02.10/include/holidays/ke.rem +25 -0
  380. data/remind-v06.02.10/include/holidays/kg.rem +20 -0
  381. data/remind-v06.02.10/include/holidays/kh.rem +22 -0
  382. data/remind-v06.02.10/include/holidays/kn.rem +28 -0
  383. data/remind-v06.02.10/include/holidays/kr.rem +19 -0
  384. data/remind-v06.02.10/include/holidays/kw.rem +10 -0
  385. data/remind-v06.02.10/include/holidays/kz.rem +34 -0
  386. data/remind-v06.02.10/include/holidays/la.rem +47 -0
  387. data/remind-v06.02.10/include/holidays/lgbtq/au.rem +8 -0
  388. data/remind-v06.02.10/include/holidays/lgbtq/br.rem +10 -0
  389. data/remind-v06.02.10/include/holidays/lgbtq/ca.rem +7 -0
  390. data/remind-v06.02.10/include/holidays/lgbtq/cl.rem +7 -0
  391. data/remind-v06.02.10/include/holidays/lgbtq/ie.rem +7 -0
  392. data/remind-v06.02.10/include/holidays/lgbtq/in.rem +7 -0
  393. data/remind-v06.02.10/include/holidays/lgbtq/nl.rem +7 -0
  394. data/remind-v06.02.10/include/holidays/lgbtq/ua.rem +7 -0
  395. data/remind-v06.02.10/include/holidays/lgbtq/uk.rem +8 -0
  396. data/remind-v06.02.10/include/holidays/lgbtq/us.rem +16 -0
  397. data/remind-v06.02.10/include/holidays/lgbtq.rem +34 -0
  398. data/remind-v06.02.10/include/holidays/li.rem +31 -0
  399. data/remind-v06.02.10/include/holidays/ls.rem +18 -0
  400. data/remind-v06.02.10/include/holidays/lt.rem +23 -0
  401. data/remind-v06.02.10/include/holidays/lu.rem +18 -0
  402. data/remind-v06.02.10/include/holidays/lv.rem +25 -0
  403. data/remind-v06.02.10/include/holidays/ma.rem +17 -0
  404. data/remind-v06.02.10/include/holidays/mc.rem +26 -0
  405. data/remind-v06.02.10/include/holidays/md.rem +21 -0
  406. data/remind-v06.02.10/include/holidays/me.rem +28 -0
  407. data/remind-v06.02.10/include/holidays/mg.rem +24 -0
  408. data/remind-v06.02.10/include/holidays/mh.rem +22 -0
  409. data/remind-v06.02.10/include/holidays/misc.rem +9 -0
  410. data/remind-v06.02.10/include/holidays/mk.rem +17 -0
  411. data/remind-v06.02.10/include/holidays/mp.rem +44 -0
  412. data/remind-v06.02.10/include/holidays/mr.rem +11 -0
  413. data/remind-v06.02.10/include/holidays/mt.rem +21 -0
  414. data/remind-v06.02.10/include/holidays/mv.rem +12 -0
  415. data/remind-v06.02.10/include/holidays/mw.rem +36 -0
  416. data/remind-v06.02.10/include/holidays/mx.rem +15 -0
  417. data/remind-v06.02.10/include/holidays/my/01.rem +13 -0
  418. data/remind-v06.02.10/include/holidays/my/02.rem +13 -0
  419. data/remind-v06.02.10/include/holidays/my/03.rem +14 -0
  420. data/remind-v06.02.10/include/holidays/my/04.rem +18 -0
  421. data/remind-v06.02.10/include/holidays/my/05.rem +16 -0
  422. data/remind-v06.02.10/include/holidays/my/06.rem +17 -0
  423. data/remind-v06.02.10/include/holidays/my/07.rem +17 -0
  424. data/remind-v06.02.10/include/holidays/my/08.rem +15 -0
  425. data/remind-v06.02.10/include/holidays/my/09.rem +14 -0
  426. data/remind-v06.02.10/include/holidays/my/10.rem +16 -0
  427. data/remind-v06.02.10/include/holidays/my/11.rem +16 -0
  428. data/remind-v06.02.10/include/holidays/my/12.rem +19 -0
  429. data/remind-v06.02.10/include/holidays/my/13.rem +22 -0
  430. data/remind-v06.02.10/include/holidays/my/14.rem +16 -0
  431. data/remind-v06.02.10/include/holidays/my/15.rem +18 -0
  432. data/remind-v06.02.10/include/holidays/my/16.rem +16 -0
  433. data/remind-v06.02.10/include/holidays/my.rem +23 -0
  434. data/remind-v06.02.10/include/holidays/mz.rem +25 -0
  435. data/remind-v06.02.10/include/holidays/na.rem +27 -0
  436. data/remind-v06.02.10/include/holidays/ng.rem +21 -0
  437. data/remind-v06.02.10/include/holidays/ni/mn.rem +14 -0
  438. data/remind-v06.02.10/include/holidays/ni.rem +24 -0
  439. data/remind-v06.02.10/include/holidays/nl.rem +26 -0
  440. data/remind-v06.02.10/include/holidays/no.rem +19 -0
  441. data/remind-v06.02.10/include/holidays/nz/auk.rem +13 -0
  442. data/remind-v06.02.10/include/holidays/nz/can.rem +13 -0
  443. data/remind-v06.02.10/include/holidays/nz/cit.rem +13 -0
  444. data/remind-v06.02.10/include/holidays/nz/hkb.rem +13 -0
  445. data/remind-v06.02.10/include/holidays/nz/mbh.rem +13 -0
  446. data/remind-v06.02.10/include/holidays/nz/nsn.rem +13 -0
  447. data/remind-v06.02.10/include/holidays/nz/ntl.rem +13 -0
  448. data/remind-v06.02.10/include/holidays/nz/ota.rem +14 -0
  449. data/remind-v06.02.10/include/holidays/nz/south_canterbury.rem +13 -0
  450. data/remind-v06.02.10/include/holidays/nz/stl.rem +13 -0
  451. data/remind-v06.02.10/include/holidays/nz/tki.rem +13 -0
  452. data/remind-v06.02.10/include/holidays/nz/wgn.rem +13 -0
  453. data/remind-v06.02.10/include/holidays/nz/wtc.rem +13 -0
  454. data/remind-v06.02.10/include/holidays/nz.rem +69 -0
  455. data/remind-v06.02.10/include/holidays/pa.rem +27 -0
  456. data/remind-v06.02.10/include/holidays/pagan.rem +65 -0
  457. data/remind-v06.02.10/include/holidays/pe.rem +22 -0
  458. data/remind-v06.02.10/include/holidays/pg.rem +24 -0
  459. data/remind-v06.02.10/include/holidays/ph.rem +26 -0
  460. data/remind-v06.02.10/include/holidays/pk.rem +13 -0
  461. data/remind-v06.02.10/include/holidays/pl.rem +20 -0
  462. data/remind-v06.02.10/include/holidays/pr.rem +40 -0
  463. data/remind-v06.02.10/include/holidays/pt/01.rem +13 -0
  464. data/remind-v06.02.10/include/holidays/pt/02.rem +13 -0
  465. data/remind-v06.02.10/include/holidays/pt/03.rem +13 -0
  466. data/remind-v06.02.10/include/holidays/pt/04.rem +13 -0
  467. data/remind-v06.02.10/include/holidays/pt/05.rem +13 -0
  468. data/remind-v06.02.10/include/holidays/pt/06.rem +13 -0
  469. data/remind-v06.02.10/include/holidays/pt/07.rem +13 -0
  470. data/remind-v06.02.10/include/holidays/pt/08.rem +13 -0
  471. data/remind-v06.02.10/include/holidays/pt/09.rem +13 -0
  472. data/remind-v06.02.10/include/holidays/pt/10.rem +13 -0
  473. data/remind-v06.02.10/include/holidays/pt/12.rem +13 -0
  474. data/remind-v06.02.10/include/holidays/pt/13.rem +13 -0
  475. data/remind-v06.02.10/include/holidays/pt/14.rem +13 -0
  476. data/remind-v06.02.10/include/holidays/pt/15.rem +13 -0
  477. data/remind-v06.02.10/include/holidays/pt/16.rem +13 -0
  478. data/remind-v06.02.10/include/holidays/pt/18.rem +13 -0
  479. data/remind-v06.02.10/include/holidays/pt/20.rem +13 -0
  480. data/remind-v06.02.10/include/holidays/pt/30.rem +14 -0
  481. data/remind-v06.02.10/include/holidays/pt.rem +17 -0
  482. data/remind-v06.02.10/include/holidays/pw.rem +34 -0
  483. data/remind-v06.02.10/include/holidays/py.rem +20 -0
  484. data/remind-v06.02.10/include/holidays/ro.rem +24 -0
  485. data/remind-v06.02.10/include/holidays/rs.rem +26 -0
  486. data/remind-v06.02.10/include/holidays/ru.rem +21 -0
  487. data/remind-v06.02.10/include/holidays/sa.rem +13 -0
  488. data/remind-v06.02.10/include/holidays/sc.rem +28 -0
  489. data/remind-v06.02.10/include/holidays/se.rem +23 -0
  490. data/remind-v06.02.10/include/holidays/sg.rem +16 -0
  491. data/remind-v06.02.10/include/holidays/si.rem +20 -0
  492. data/remind-v06.02.10/include/holidays/sk.rem +25 -0
  493. data/remind-v06.02.10/include/holidays/sm.rem +25 -0
  494. data/remind-v06.02.10/include/holidays/sv/ss.rem +14 -0
  495. data/remind-v06.02.10/include/holidays/sv.rem +25 -0
  496. data/remind-v06.02.10/include/holidays/sz.rem +26 -0
  497. data/remind-v06.02.10/include/holidays/td.rem +22 -0
  498. data/remind-v06.02.10/include/holidays/th.rem +72 -0
  499. data/remind-v06.02.10/include/holidays/tl.rem +31 -0
  500. data/remind-v06.02.10/include/holidays/tn.rem +15 -0
  501. data/remind-v06.02.10/include/holidays/to.rem +38 -0
  502. data/remind-v06.02.10/include/holidays/tr.rem +17 -0
  503. data/remind-v06.02.10/include/holidays/tw.rem +26 -0
  504. data/remind-v06.02.10/include/holidays/tz.rem +23 -0
  505. data/remind-v06.02.10/include/holidays/ua.rem +20 -0
  506. data/remind-v06.02.10/include/holidays/uk.rem +27 -0
  507. data/remind-v06.02.10/include/holidays/um.rem +32 -0
  508. data/remind-v06.02.10/include/holidays/us/ak.rem +17 -0
  509. data/remind-v06.02.10/include/holidays/us/al.rem +17 -0
  510. data/remind-v06.02.10/include/holidays/us/ar.rem +13 -0
  511. data/remind-v06.02.10/include/holidays/us/as.rem +20 -0
  512. data/remind-v06.02.10/include/holidays/us/az.rem +14 -0
  513. data/remind-v06.02.10/include/holidays/us/ca.rem +16 -0
  514. data/remind-v06.02.10/include/holidays/us/co.rem +14 -0
  515. data/remind-v06.02.10/include/holidays/us/ct.rem +17 -0
  516. data/remind-v06.02.10/include/holidays/us/dc.rem +16 -0
  517. data/remind-v06.02.10/include/holidays/us/de.rem +14 -0
  518. data/remind-v06.02.10/include/holidays/us/fl.rem +14 -0
  519. data/remind-v06.02.10/include/holidays/us/ga.rem +18 -0
  520. data/remind-v06.02.10/include/holidays/us/gu.rem +17 -0
  521. data/remind-v06.02.10/include/holidays/us/hi.rem +19 -0
  522. data/remind-v06.02.10/include/holidays/us/ia.rem +15 -0
  523. data/remind-v06.02.10/include/holidays/us/id.rem +14 -0
  524. data/remind-v06.02.10/include/holidays/us/il.rem +17 -0
  525. data/remind-v06.02.10/include/holidays/us/in.rem +19 -0
  526. data/remind-v06.02.10/include/holidays/us/ks.rem +16 -0
  527. data/remind-v06.02.10/include/holidays/us/ky.rem +16 -0
  528. data/remind-v06.02.10/include/holidays/us/la.rem +14 -0
  529. data/remind-v06.02.10/include/holidays/us/ma.rem +17 -0
  530. data/remind-v06.02.10/include/holidays/us/md-extra.rem +19 -0
  531. data/remind-v06.02.10/include/holidays/us/md.rem +14 -0
  532. data/remind-v06.02.10/include/holidays/us/me.rem +14 -0
  533. data/remind-v06.02.10/include/holidays/us/mi.rem +19 -0
  534. data/remind-v06.02.10/include/holidays/us/mo.rem +16 -0
  535. data/remind-v06.02.10/include/holidays/us/mp.rem +23 -0
  536. data/remind-v06.02.10/include/holidays/us/ms.rem +14 -0
  537. data/remind-v06.02.10/include/holidays/us/mt.rem +13 -0
  538. data/remind-v06.02.10/include/holidays/us/nc.rem +22 -0
  539. data/remind-v06.02.10/include/holidays/us/ne.rem +14 -0
  540. data/remind-v06.02.10/include/holidays/us/nh.rem +14 -0
  541. data/remind-v06.02.10/include/holidays/us/nj.rem +17 -0
  542. data/remind-v06.02.10/include/holidays/us/nm.rem +14 -0
  543. data/remind-v06.02.10/include/holidays/us/nv.rem +16 -0
  544. data/remind-v06.02.10/include/holidays/us/ny.rem +17 -0
  545. data/remind-v06.02.10/include/holidays/us/oh.rem +13 -0
  546. data/remind-v06.02.10/include/holidays/us/ok.rem +13 -0
  547. data/remind-v06.02.10/include/holidays/us/pa.rem +14 -0
  548. data/remind-v06.02.10/include/holidays/us/pr.rem +21 -0
  549. data/remind-v06.02.10/include/holidays/us/ri.rem +14 -0
  550. data/remind-v06.02.10/include/holidays/us/sc.rem +13 -0
  551. data/remind-v06.02.10/include/holidays/us/sd.rem +13 -0
  552. data/remind-v06.02.10/include/holidays/us/tn.rem +13 -0
  553. data/remind-v06.02.10/include/holidays/us/tx.rem +25 -0
  554. data/remind-v06.02.10/include/holidays/us/ut.rem +16 -0
  555. data/remind-v06.02.10/include/holidays/us/va.rem +13 -0
  556. data/remind-v06.02.10/include/holidays/us/vi.rem +22 -0
  557. data/remind-v06.02.10/include/holidays/us/vt.rem +16 -0
  558. data/remind-v06.02.10/include/holidays/us/wi.rem +20 -0
  559. data/remind-v06.02.10/include/holidays/us/wv.rem +17 -0
  560. data/remind-v06.02.10/include/holidays/us.rem +41 -0
  561. data/remind-v06.02.10/include/holidays/uy.rem +39 -0
  562. data/remind-v06.02.10/include/holidays/uz.rem +21 -0
  563. data/remind-v06.02.10/include/holidays/va.rem +23 -0
  564. data/remind-v06.02.10/include/holidays/ve.rem +21 -0
  565. data/remind-v06.02.10/include/holidays/vi.rem +41 -0
  566. data/remind-v06.02.10/include/holidays/vn.rem +17 -0
  567. data/remind-v06.02.10/include/holidays/vu.rem +32 -0
  568. data/remind-v06.02.10/include/holidays/ws.rem +18 -0
  569. data/remind-v06.02.10/include/holidays/za.rem +28 -0
  570. data/remind-v06.02.10/include/holidays/zm.rem +31 -0
  571. data/remind-v06.02.10/include/lang/auto.rem +32 -0
  572. data/remind-v06.02.10/include/lang/ca.rem +60 -0
  573. data/remind-v06.02.10/include/lang/da.rem +77 -0
  574. data/remind-v06.02.10/include/lang/de.rem +80 -0
  575. data/remind-v06.02.10/include/lang/en.rem +4 -0
  576. data/remind-v06.02.10/include/lang/es.rem +55 -0
  577. data/remind-v06.02.10/include/lang/fi.rem +202 -0
  578. data/remind-v06.02.10/include/lang/fr.rem +172 -0
  579. data/remind-v06.02.10/include/lang/gr.rem +74 -0
  580. data/remind-v06.02.10/include/lang/is.rem +58 -0
  581. data/remind-v06.02.10/include/lang/it.rem +76 -0
  582. data/remind-v06.02.10/include/lang/nl.rem +71 -0
  583. data/remind-v06.02.10/include/lang/no.rem +66 -0
  584. data/remind-v06.02.10/include/lang/pl.rem +177 -0
  585. data/remind-v06.02.10/include/lang/pt.rem +176 -0
  586. data/remind-v06.02.10/include/lang/ro.rem +74 -0
  587. data/remind-v06.02.10/include/lunar-eclipses.rem +149 -0
  588. data/remind-v06.02.10/include/moonphases.rem +19 -0
  589. data/remind-v06.02.10/include/seasons.rem +21 -0
  590. data/remind-v06.02.10/include/solar-eclipses.rem +238 -0
  591. data/remind-v06.02.10/include/sun.rem +12 -0
  592. data/remind-v06.02.10/include/translations/de/holidays/chinese-new-year.rem +13 -0
  593. data/remind-v06.02.10/include/translations/de/moonphases.rem +4 -0
  594. data/remind-v06.02.10/include/translations/de/seasons.rem +4 -0
  595. data/remind-v06.02.10/include/translations/de/sun.rem +2 -0
  596. data/remind-v06.02.10/include/translations/nl/holidays/chinese-new-year.rem +13 -0
  597. data/remind-v06.02.10/include/translations/nl/moonphases.rem +4 -0
  598. data/remind-v06.02.10/include/translations/nl/seasons.rem +4 -0
  599. data/remind-v06.02.10/include/translations/nl/sun.rem +2 -0
  600. data/remind-v06.02.10/include/utils/add-html-anchors.rem +5 -0
  601. data/remind-v06.02.10/install-sh +238 -0
  602. data/remind-v06.02.10/man/rem.1.in +21 -0
  603. data/remind-v06.02.10/man/rem2ps.1.in +816 -0
  604. data/remind-v06.02.10/man/remind.1.in +7658 -0
  605. data/remind-v06.02.10/man/tkremind.1.in +612 -0
  606. data/remind-v06.02.10/rem2html/Makefile.in +30 -0
  607. data/remind-v06.02.10/rem2html/rem2html.in +1299 -0
  608. data/remind-v06.02.10/rem2pdf/Makefile.PL.in +25 -0
  609. data/remind-v06.02.10/rem2pdf/Makefile.top.in +50 -0
  610. data/remind-v06.02.10/rem2pdf/bin/rem2pdf.in +761 -0
  611. data/remind-v06.02.10/scripts/tkremind.in +5794 -0
  612. data/remind-v06.02.10/src/Makefile.in +133 -0
  613. data/remind-v06.02.10/src/calendar.c +3069 -0
  614. data/remind-v06.02.10/src/config.h +117 -0
  615. data/remind-v06.02.10/src/config.h.in +116 -0
  616. data/remind-v06.02.10/src/custom.h +167 -0
  617. data/remind-v06.02.10/src/custom.h.in +167 -0
  618. data/remind-v06.02.10/src/dedupe.c +179 -0
  619. data/remind-v06.02.10/src/dorem.c +2389 -0
  620. data/remind-v06.02.10/src/dosubst.c +910 -0
  621. data/remind-v06.02.10/src/dynbuf.c +198 -0
  622. data/remind-v06.02.10/src/dynbuf.h +41 -0
  623. data/remind-v06.02.10/src/err.h +294 -0
  624. data/remind-v06.02.10/src/expr.c +3408 -0
  625. data/remind-v06.02.10/src/files.c +1437 -0
  626. data/remind-v06.02.10/src/funcs.c +5230 -0
  627. data/remind-v06.02.10/src/globals.c +23 -0
  628. data/remind-v06.02.10/src/globals.h +277 -0
  629. data/remind-v06.02.10/src/hashtab.c +428 -0
  630. data/remind-v06.02.10/src/hashtab.h +88 -0
  631. data/remind-v06.02.10/src/hashtab_stats.c +101 -0
  632. data/remind-v06.02.10/src/hbcal.c +579 -0
  633. data/remind-v06.02.10/src/ifelse.c +236 -0
  634. data/remind-v06.02.10/src/init.c +1494 -0
  635. data/remind-v06.02.10/src/json.c +1048 -0
  636. data/remind-v06.02.10/src/json.h +276 -0
  637. data/remind-v06.02.10/src/main.c +2310 -0
  638. data/remind-v06.02.10/src/md5.c +250 -0
  639. data/remind-v06.02.10/src/md5.h +33 -0
  640. data/remind-v06.02.10/src/moon.c +957 -0
  641. data/remind-v06.02.10/src/omit.c +560 -0
  642. data/remind-v06.02.10/src/protos.h +284 -0
  643. data/remind-v06.02.10/src/queue.c +1118 -0
  644. data/remind-v06.02.10/src/rem2ps.c +1383 -0
  645. data/remind-v06.02.10/src/rem2ps.h +229 -0
  646. data/remind-v06.02.10/src/sort.c +257 -0
  647. data/remind-v06.02.10/src/token.c +494 -0
  648. data/remind-v06.02.10/src/trans.c +544 -0
  649. data/remind-v06.02.10/src/trigger.c +871 -0
  650. data/remind-v06.02.10/src/types.h +341 -0
  651. data/remind-v06.02.10/src/userfns.c +810 -0
  652. data/remind-v06.02.10/src/utils.c +374 -0
  653. data/remind-v06.02.10/src/var.c +1762 -0
  654. data/remind-v06.02.10/src/version.h +1 -0
  655. data/remind-v06.02.10/src/version.h.in +1 -0
  656. data/remind-v06.02.10/src/xlat.c +100 -0
  657. data/remind-v06.02.10/www/Makefile.in +91 -0
  658. metadata +764 -0
@@ -0,0 +1,1383 @@
1
+ /***************************************************************/
2
+ /* */
3
+ /* REM2PS.C */
4
+ /* */
5
+ /* Print a PostScript calendar. */
6
+ /* */
7
+ /* This file is part of REMIND. */
8
+ /* Copyright (C) 1992-2026 by Dianne Skoll */
9
+ /* SPDX-License-Identifier: GPL-2.0-only */
10
+ /* */
11
+ /***************************************************************/
12
+
13
+ #include "version.h"
14
+ #include "config.h"
15
+ #include "dynbuf.h"
16
+
17
+ #include <stdio.h>
18
+ #include <string.h>
19
+ #include <ctype.h>
20
+
21
+ #include <unistd.h>
22
+ #include <stdlib.h>
23
+ #include "rem2ps.h"
24
+ #include "json.h"
25
+
26
+ #define NEW(type) (malloc(sizeof(type)))
27
+
28
+ #define SPECIAL_NORMAL 0
29
+ #define SPECIAL_POSTSCRIPT 1
30
+ #define SPECIAL_PSFILE 2
31
+ #define SPECIAL_MOON 3
32
+ #define SPECIAL_COLOR 4
33
+ #define SPECIAL_WEEK 5
34
+ #define SPECIAL_SHADE 6
35
+ #define SPECIAL_UNKNOWN 7
36
+
37
+ /* Array holding how specials sort */
38
+ static int SpecialSortOrder[] = {
39
+ 0, /* NORMAL */
40
+ 1, /* POSTSCRIPT */
41
+ 1, /* PSFILE */
42
+ 2, /* MOON */
43
+ 0, /* COLOR */
44
+ 4, /* WEEK */
45
+ 5 /* SHADE */
46
+ };
47
+
48
+ typedef struct calentry {
49
+ struct calentry *next;
50
+ int special;
51
+ char *entry;
52
+ int daynum;
53
+ } CalEntry;
54
+
55
+ typedef struct {
56
+ char const *name;
57
+ int xsize, ysize;
58
+ } PageType;
59
+
60
+ char DayName[7][33];
61
+
62
+ char const *SmallCalLoc[] = {
63
+ "",
64
+ "bt",
65
+ "tb",
66
+ "sbt",
67
+ };
68
+
69
+ #define NUMSMALL ((int) (sizeof(SmallCalLoc)/sizeof(SmallCalLoc[0])))
70
+ char const *SmallLocation;
71
+ int SmallCol1, SmallCol2;
72
+
73
+ PageType Pages[] =
74
+ {
75
+ {"Letter", 612, 792}, /* 8.5 x 11 in. */
76
+ {"Tabloid", 792, 1224}, /* 11 x 17 in. */
77
+ {"Ledger", 1224, 792}, /* 17 x 11 in. */
78
+ {"Legal", 612, 1008}, /* 8.5 x 14 in. */
79
+ {"Statement", 396, 612}, /* 5.5 x 8.5 in. */
80
+ {"Executive", 540, 720}, /* 7.5 x 10 in. */
81
+ {"A3", 842, 1190},
82
+ {"A4", 595, 842},
83
+ {"A5", 420, 595},
84
+ {"B4", 729, 1032},
85
+ {"B5", 519, 729},
86
+ {"Folio", 612, 936},
87
+ {"Quarto", 612, 780},
88
+ {"10x14", 720, 1008},
89
+ {"-custom-", 0, 0}
90
+ };
91
+
92
+ PageType DefaultPage[1] =
93
+ {
94
+ DEFAULT_PAGE
95
+ };
96
+
97
+ #define NUMPAGES (sizeof(Pages)/sizeof(Pages[0]))
98
+
99
+ CalEntry *CurEntries = NULL;
100
+ CalEntry *PsEntries[32];
101
+ PageType *CurPage;
102
+ char PortraitMode;
103
+ char DaynumRight;
104
+ char NoSmallCal;
105
+ char UseISO;
106
+
107
+ char const *HeadFont="Helvetica";
108
+ char const *TitleFont="Helvetica";
109
+ char const *DayFont="Helvetica-BoldOblique";
110
+ char const *EntryFont="Helvetica";
111
+ char const *SmallFont="Helvetica";
112
+ char const *LineWidth = "1";
113
+
114
+ char const *HeadSize="14";
115
+ char const *TitleSize="14";
116
+ char const *DaySize="14";
117
+ char const *EntrySize="8";
118
+ char const *BorderSize = "6";
119
+
120
+ char const *UserProlog = NULL;
121
+
122
+ int validfile = 0;
123
+
124
+ int CurDay;
125
+ int MaxDay;
126
+ int DayNum;
127
+ int WkDayNum;
128
+ int FirstWkDay;
129
+ int MondayFirst;
130
+ int LeftMarg, RightMarg, TopMarg, BotMarg;
131
+ int FillPage;
132
+ int Verbose = 0;
133
+
134
+ static void Init (int argc, char const *argv[]);
135
+ static void Usage (char const *s);
136
+ static void DoPsCal (void);
137
+ static int DoQueuedPs (void);
138
+ static void DoSmallCal (char const *m, int days, int first, int col, int which);
139
+ static void WriteProlog (void);
140
+ static void WriteCalEntry (void);
141
+ static void WriteOneEntry (CalEntry const *c);
142
+ static void GetSmallLocations (void);
143
+ static char const *EatToken(char const *in, char *out, int maxlen);
144
+
145
+ static void
146
+ put_escaped_string(char const *s)
147
+ {
148
+ while(*s) {
149
+ if (*s == '\\' || *s == '(' || *s == ')') {
150
+ putchar('\\');
151
+ }
152
+ putchar(*s);
153
+ s++;
154
+ }
155
+ }
156
+
157
+ /***************************************************************/
158
+ /* */
159
+ /* Parse the new-style JSON intermediate format */
160
+ /* */
161
+ /***************************************************************/
162
+ static CalEntry *
163
+ JSONToCalEntry(DynamicBuffer const *buf)
164
+ {
165
+ CalEntry *c;
166
+ json_value *val;
167
+
168
+ val = json_parse(DBufValue(buf), DBufLen(buf));
169
+ if (!val) {
170
+ fprintf(stderr, "Unable to parse JSON line `%s'\n", DBufValue(buf));
171
+ exit(EXIT_FAILURE);
172
+ }
173
+
174
+ if (val->type != json_object) {
175
+ fprintf(stderr, "Expecting JSON object; found `%s'\n",
176
+ DBufValue(buf));
177
+ exit(EXIT_FAILURE);
178
+ }
179
+
180
+ c = NEW(CalEntry);
181
+ if (!c) {
182
+ fprintf(stderr, "malloc failed - aborting.\n");
183
+ exit(EXIT_FAILURE);
184
+ }
185
+ c->next = NULL;
186
+ c->special = SPECIAL_NORMAL;
187
+
188
+ int got_date = 0, got_body = 0;
189
+ size_t i;
190
+ for (i=0; i<val->u.object.length; i++) {
191
+ char const *nm = val->u.object.values[i].name;
192
+ json_value *v = val->u.object.values[i].value;
193
+ char const *s;
194
+ if (!strcmp(nm, "date")) {
195
+ if (v->type == json_string) {
196
+ s = v->u.string.ptr;
197
+ c->daynum = (s[8] - '0') * 10 + s[9] - '0';
198
+ got_date = 1;
199
+ }
200
+ } else if (!strcmp(nm, "body")) {
201
+ if (v->type == json_string) {
202
+ s = v->u.string.ptr;
203
+ c->entry = malloc(strlen(s)+1);
204
+ if (!c->entry) {
205
+ fprintf(stderr, "malloc failed - aborting.\n");
206
+ exit(EXIT_FAILURE);
207
+ }
208
+ strcpy(c->entry, s);
209
+ got_body = 1;
210
+ }
211
+ } else if (!strcmp(nm, "passthru")) {
212
+ if (v->type == json_string) {
213
+ s = v->u.string.ptr;
214
+ if (!strcasecmp(s, "PostScript")) {
215
+ c->special = SPECIAL_POSTSCRIPT;
216
+ } else if (!strcasecmp(s, "SHADE")) {
217
+ c->special = SPECIAL_SHADE;
218
+ } else if (!strcasecmp(s, "MOON")) {
219
+ c->special = SPECIAL_MOON;
220
+ } else if (!strcasecmp(s, "WEEK")) {
221
+ c->special = SPECIAL_WEEK;
222
+ } else if (!strcasecmp(s, "PSFile")) {
223
+ c->special = SPECIAL_PSFILE;
224
+ } else if (!strcasecmp(s, "COLOUR") ||
225
+ !strcasecmp(s, "COLOR")) {
226
+ c->special = SPECIAL_COLOR;
227
+ } else {
228
+ c->special = SPECIAL_UNKNOWN;
229
+ }
230
+ }
231
+ }
232
+ }
233
+
234
+ json_value_free(val);
235
+
236
+ if (!got_body || !got_date) {
237
+ fprintf(stderr, "Could not parse line `%s'\n", DBufValue(buf));
238
+ exit(EXIT_FAILURE);
239
+ }
240
+ return c;
241
+ }
242
+
243
+ /***************************************************************/
244
+ /* */
245
+ /* Parse the old-style REM2PS intermediate format */
246
+ /* */
247
+ /***************************************************************/
248
+ static CalEntry *
249
+ TextToCalEntry(DynamicBuffer *buf)
250
+ {
251
+ char const *startOfBody;
252
+ char passthru[PASSTHRU_LEN+1];
253
+
254
+ CalEntry *c = NEW(CalEntry);
255
+ if (!c) {
256
+ fprintf(stderr, "malloc failed - aborting.\n");
257
+ exit(EXIT_FAILURE);
258
+ }
259
+ c->next = NULL;
260
+ c->special = SPECIAL_NORMAL;
261
+ c->daynum = (DBufValue(buf)[8] - '0') * 10 + DBufValue(buf)[9] - '0';
262
+
263
+ /* Skip the tag, duration and time */
264
+ startOfBody = DBufValue(buf)+10;
265
+
266
+ /* Eat the passthru */
267
+ startOfBody = EatToken(startOfBody, passthru, PASSTHRU_LEN);
268
+
269
+ /* Eat the tag */
270
+ startOfBody = EatToken(startOfBody, NULL, 0);
271
+
272
+ /* Eat the duration */
273
+ startOfBody = EatToken(startOfBody, NULL, 0);
274
+
275
+ /* Eat the time */
276
+ startOfBody = EatToken(startOfBody, NULL, 0);
277
+
278
+ c->entry = malloc(strlen(startOfBody) + 1);
279
+ if (!c->entry) {
280
+ fprintf(stderr, "malloc failed - aborting.\n");
281
+ exit(EXIT_FAILURE);
282
+ }
283
+ strcpy(c->entry, startOfBody);
284
+
285
+ /* Save the type of SPECIAL */
286
+ if (!strcasecmp(passthru, "PostScript")) {
287
+ c->special = SPECIAL_POSTSCRIPT;
288
+ } else if (!strcasecmp(passthru, "SHADE")) {
289
+ c->special = SPECIAL_SHADE;
290
+ } else if (!strcasecmp(passthru, "MOON")) {
291
+ c->special = SPECIAL_MOON;
292
+ } else if (!strcasecmp(passthru, "WEEK")) {
293
+ c->special = SPECIAL_WEEK;
294
+ } else if (!strcasecmp(passthru, "PSFile")) {
295
+ c->special = SPECIAL_PSFILE;
296
+ } else if (!strcasecmp(passthru, "COLOUR") ||
297
+ !strcasecmp(passthru, "COLOR")) {
298
+ c->special = SPECIAL_COLOR;
299
+ } else if (strcasecmp(passthru, "*")) {
300
+ c->special = SPECIAL_UNKNOWN;
301
+ }
302
+ return c;
303
+ }
304
+
305
+ /***************************************************************/
306
+ /* */
307
+ /* MAIN PROGRAM */
308
+ /* */
309
+ /***************************************************************/
310
+ int main(int argc, char const *argv[])
311
+ {
312
+ /* If stdin is a tty - probably wrong. */
313
+
314
+ DynamicBuffer buf;
315
+ DBufInit(&buf);
316
+ Init(argc, argv);
317
+
318
+ if (isatty(0)) {
319
+ Usage("Input should not come from a terminal");
320
+ }
321
+
322
+ int first_line = 1;
323
+ /* Search for a valid input file */
324
+ while (!feof(stdin)) {
325
+ DBufGets(&buf, stdin, 0);
326
+ if (first_line && (!strcmp(DBufValue(&buf), "["))) {
327
+ fprintf(stderr, "Rem2PS: It appears that you have invoked Remind with the -ppp option.\n Please use either -p or -pp, but not -ppp. Also, Rem2PS does\n not support weekly calendars, so do not use -p+ or -pp+.\n");
328
+ exit(EXIT_FAILURE);
329
+ }
330
+ first_line = 0;
331
+ if (!strcmp(DBufValue(&buf), PSBEGIN) ||
332
+ !strcmp(DBufValue(&buf), PSBEGIN2)) {
333
+ if (!validfile) {
334
+ if (Verbose) {
335
+ fprintf(stderr, "Rem2PS: Version %s Copyright (C) 1992-2026 by Dianne Skoll\n\n", VERSION);
336
+ fprintf(stderr, "Generating PostScript calendar\n\n");
337
+ }
338
+ fprintf(stderr, "NOTE: Rem2PS is deprecated. You should use rem2pdf instead.\n");
339
+ }
340
+ validfile++;
341
+ DoPsCal();
342
+ }
343
+ DBufFree(&buf);
344
+ }
345
+ if (!validfile) {
346
+ fprintf(stderr, "Rem2PS: Couldn't find any calendar data - are you\n");
347
+ fprintf(stderr, " sure you fed me input produced by remind -p ...?\n");
348
+ exit(EXIT_FAILURE);
349
+ }
350
+ printf("%%%%Trailer\n");
351
+ printf("%%%%Pages: %d\n", validfile);
352
+ if (Verbose) fprintf(stderr, "Rem2PS: Done\n");
353
+ return 0;
354
+ }
355
+
356
+ /***************************************************************/
357
+ /* */
358
+ /* DoPsCal - emit PostScript for the calendar. */
359
+ /* */
360
+ /***************************************************************/
361
+ static void DoPsCal(void)
362
+ {
363
+ char month[40], year[40];
364
+ char prevm[40], nextm[40];
365
+ int days, wkday, prevdays, nextdays;
366
+ int sfirst;
367
+ int i;
368
+ int firstcol;
369
+ DynamicBuffer buf;
370
+ CalEntry *c, *d, *p;
371
+ char *s;
372
+
373
+ /* Read the month and year name, followed by # days in month and 1st day of
374
+ month */
375
+ DBufInit(&buf);
376
+ DBufGets(&buf, stdin, 0);
377
+ sscanf(DBufValue(&buf), "%39s %39s %d %d %d", month, year, &days, &wkday,
378
+ &MondayFirst);
379
+
380
+ /* Replace underscores in month name with spaces */
381
+ s = month;
382
+ while(*s) {
383
+ if (*s == '_') *s = ' ';
384
+ s++;
385
+ }
386
+
387
+ /* Get day names */
388
+ DBufGets(&buf, stdin, 0);
389
+ sscanf(DBufValue(&buf), "%32s %32s %32s %32s %32s %32s %32s",
390
+ DayName[0], DayName[1], DayName[2], DayName[3],
391
+ DayName[4], DayName[5], DayName[6]);
392
+
393
+ /* Replace underscores in day names with spaces */
394
+ for (i=0; i<7; i++) {
395
+ s = DayName[i];
396
+ while(*s) {
397
+ if (*s == '_') *s = ' ';
398
+ s++;
399
+ }
400
+ }
401
+
402
+ /* We write the prolog here because it's only at this point that
403
+ MondayFirst is set correctly. */
404
+ if (validfile == 1) {
405
+ WriteProlog();
406
+ }
407
+
408
+ DBufGets(&buf, stdin, 0);
409
+ sscanf(DBufValue(&buf), "%39s %d", prevm, &prevdays);
410
+ DBufGets(&buf, stdin, 0);
411
+ sscanf(DBufValue(&buf), "%39s %d", nextm, &nextdays);
412
+
413
+ /* Replace underscores with spaces in names of next/prev month */
414
+ s = prevm;
415
+ while(*s) {
416
+ if (*s == '_') *s = ' ';
417
+ s++;
418
+ }
419
+ s = nextm;
420
+ while(*s) {
421
+ if (*s == '_') *s = ' ';
422
+ s++;
423
+ }
424
+
425
+ DBufFree(&buf);
426
+ MaxDay = days;
427
+ FirstWkDay = wkday;
428
+
429
+ /* Print a message for the user */
430
+ if (Verbose) fprintf(stderr, " %s %s\n", month, year);
431
+
432
+ printf("%%%%Page: %c%c%c%c%c %d\n", month[0], month[1], month[2],
433
+ year[2], year[3], validfile);
434
+ printf("%%%%PageBoundingBox: 0 0 %d %d\n", CurPage->xsize, CurPage->ysize);
435
+
436
+ /* Emit PostScript to do the heading */
437
+ if (!PortraitMode) printf("90 rotate 0 XSIZE neg translate\n");
438
+ printf("/SAVESTATE save def (%s) (%s) PreCal SAVESTATE restore\n", month, year);
439
+ printf("(%s %s) doheading\n", month, year);
440
+
441
+ /* Figure out the column of the first day in the calendar */
442
+
443
+ if (MondayFirst) {
444
+ firstcol = wkday-1;
445
+ if (firstcol < 0) firstcol = 6;
446
+ } else {
447
+ firstcol = wkday;
448
+ }
449
+
450
+ /* Calculate the minimum box size */
451
+ if (!FillPage) {
452
+ printf("/MinBoxSize ytop MinY sub 7 div def\n");
453
+ } else {
454
+ if ((days == 31 && firstcol >= 5) || (days == 30 && firstcol == 6))
455
+ printf("/MinBoxSize ytop MinY sub 6 div def\n");
456
+ else if (days == 28 && firstcol == 0 && NoSmallCal)
457
+ printf("/MinBoxSize ytop MinY sub 4 div def\n");
458
+ else
459
+ printf("/MinBoxSize ytop MinY sub 5 div def\n");
460
+ }
461
+
462
+ printf("/ysmalltop ytop def\n");
463
+
464
+ /* Do each entry */
465
+
466
+ CurEntries = NULL;
467
+ CurDay = 1;
468
+ WkDayNum = wkday;
469
+
470
+ while(1) {
471
+ if (feof(stdin)) {
472
+ fprintf(stderr, "Input from REMIND is corrupt!\n");
473
+ exit(EXIT_FAILURE);
474
+ }
475
+
476
+ DBufGets(&buf, stdin, 0);
477
+ if (!strcmp(DBufValue(&buf), PSEND) ||
478
+ !strcmp(DBufValue(&buf), PSEND2)) {
479
+ DBufFree(&buf);
480
+ break;
481
+ }
482
+
483
+ /* Ignore lines beginning with '#' */
484
+ if (DBufValue(&buf)[0] == '#') {
485
+ DBufFree(&buf);
486
+ continue;
487
+ }
488
+
489
+ if (DBufValue(&buf)[0] == '{') {
490
+ /* Starts with '{', so assume new-style JSON format */
491
+ c = JSONToCalEntry(&buf);
492
+ } else {
493
+ /* Assume it's the old-style rem2ps intermediate format */
494
+ c = TextToCalEntry(&buf);
495
+ }
496
+
497
+ /* If it's an unknown special, ignore */
498
+ if (c->special == SPECIAL_UNKNOWN) {
499
+ DBufFree(&buf);
500
+ free(c);
501
+ c = NULL;
502
+ continue;
503
+ }
504
+ if (c->daynum != CurDay) {
505
+ for(; CurDay<c->daynum; CurDay++) {
506
+ WriteCalEntry();
507
+ WkDayNum = (WkDayNum + 1) % 7;
508
+ }
509
+ }
510
+ if (c->special == SPECIAL_POSTSCRIPT ||
511
+ c->special == SPECIAL_SHADE ||
512
+ c->special == SPECIAL_MOON ||
513
+ c->special == SPECIAL_WEEK ||
514
+ c->special == SPECIAL_PSFILE) {
515
+ if (!PsEntries[c->daynum]) {
516
+ PsEntries[c->daynum] = c;
517
+ } else {
518
+ d = PsEntries[c->daynum];
519
+ p = NULL;
520
+ /* Slot it into the right place */
521
+ while (d->next && (SpecialSortOrder[c->special] <= SpecialSortOrder[d->special])) {
522
+ p = d;
523
+ d = d->next;
524
+ }
525
+ if (SpecialSortOrder[c->special] <= SpecialSortOrder[d->special]) {
526
+ c->next = d->next;
527
+ d->next = c;
528
+ } else {
529
+ if (p) {
530
+ p->next = c;
531
+ } else {
532
+ PsEntries[c->daynum] = c;
533
+ }
534
+ c->next = d;
535
+ }
536
+ }
537
+ } else {
538
+ /* Put on linked list */
539
+ if (!CurEntries) {
540
+ CurEntries = c;
541
+ } else {
542
+ d = CurEntries;
543
+ while(d->next) d = d->next;
544
+ d->next = c;
545
+ }
546
+ }
547
+ }
548
+ for(; CurDay<=days; CurDay++) {
549
+ WriteCalEntry();
550
+ WkDayNum = (WkDayNum + 1) % 7;
551
+ }
552
+
553
+ /* If wkday < 2, set ysmall. If necessary (only for feb) increase cal size. */
554
+ printf("/ysmallbot ylast def\n");
555
+
556
+ /* Now draw the vertical lines */
557
+ GetSmallLocations();
558
+ for (i=0; i<=7; i++) {
559
+ printf("%d xincr mul MinX add ymin %d xincr mul MinX add topy L\n",
560
+ i, i);
561
+ }
562
+
563
+ /* print the small calendars */
564
+ if (!NoSmallCal) {
565
+ sfirst = wkday - (prevdays % 7);
566
+ if (sfirst < 0) sfirst += 7;
567
+ DoSmallCal(prevm, prevdays, sfirst, SmallCol1, 1);
568
+ sfirst = wkday + (days % 7);
569
+ if (sfirst >6) sfirst -= 7;
570
+ DoSmallCal(nextm, nextdays, sfirst, SmallCol2, 2);
571
+ }
572
+ /* Do it! */
573
+ printf("showpage\n");
574
+ }
575
+
576
+ /***************************************************************/
577
+ /* */
578
+ /* WriteProlog - write the PostScript prologue */
579
+ /* */
580
+ /***************************************************************/
581
+ static void WriteProlog(void)
582
+ {
583
+ int i;
584
+ int x = CurPage->xsize;
585
+ int y = CurPage->ysize;
586
+ char const *isostuff;
587
+ FILE *fp;
588
+ int nread;
589
+ char buffer[512];
590
+
591
+ if (!PortraitMode) {
592
+ i = x; x = y; y = i;
593
+ }
594
+
595
+ if (UseISO)
596
+ isostuff = "reencodeISO";
597
+ else
598
+ isostuff = "copyFont";
599
+
600
+ /* Write the document structuring stuff */
601
+ printf("%%!PS-Adobe-2.0\n");
602
+ printf("%%%%DocumentFonts: %s", HeadFont);
603
+ if (strcmp(TitleFont, HeadFont)) printf(" %s", TitleFont);
604
+ if (strcmp(TitleFont, DayFont) &&
605
+ strcmp(HeadFont, DayFont)) printf(" %s", DayFont);
606
+ if (strcmp(EntryFont, HeadFont) &&
607
+ strcmp(TitleFont, EntryFont) &&
608
+ strcmp(EntryFont, DayFont)) printf(" %s", EntryFont);
609
+ if (!NoSmallCal && strcmp(SmallFont, HeadFont) &&
610
+ strcmp(SmallFont, DayFont) &&
611
+ strcmp(TitleFont, SmallFont) &&
612
+ strcmp(SmallFont, EntryFont)) printf(" %s", SmallFont);
613
+ putchar('\n');
614
+ printf("%%%%Creator: Rem2PS\n");
615
+ printf("%%%%Pages: (atend)\n");
616
+ printf("%%%%Orientation: %s\n", PortraitMode ? "Portrait" : "Landscape");
617
+ printf("%%%%EndComments\n");
618
+ if (PortraitMode) {
619
+ printf("<< /PageSize [%d %d] >> setpagedevice\n", x, y);
620
+ } else {
621
+ /* They were swapped up above, so swap them back or we'll get rotated output */
622
+ printf("<< /PageSize [%d %d] >> setpagedevice\n", y, x);
623
+ }
624
+
625
+ for (i=0; PSProlog1[i]; i++) puts(PSProlog1[i]);
626
+ if (!MondayFirst)
627
+ printf("[(%s) (%s) (%s) (%s) (%s) (%s) (%s)]\n",
628
+ DayName[0], DayName[1], DayName[2], DayName[3],
629
+ DayName[4], DayName[5], DayName[6]);
630
+ else
631
+ printf("[(%s) (%s) (%s) (%s) (%s) (%s) (%s)]\n",
632
+ DayName[1], DayName[2], DayName[3],
633
+ DayName[4], DayName[5], DayName[6], DayName[0]);
634
+ for (i=0; PSProlog2[i]; i++) puts(PSProlog2[i]);
635
+
636
+ printf("/HeadFont /%s %s\n", HeadFont, isostuff);
637
+ if (!NoSmallCal) printf("/SmallFont /%s %s\n", SmallFont, isostuff);
638
+ printf("/DayFont /%s %s\n", DayFont, isostuff);
639
+ printf("/EntryFont /%s %s\n", EntryFont, isostuff);
640
+ printf("/TitleFont /%s %s\n", TitleFont, isostuff);
641
+ printf("/HeadSize %s def\n", HeadSize);
642
+ printf("/DaySize %s def\n", DaySize);
643
+ printf("/EntrySize %s def\n", EntrySize);
644
+ printf("/TitleSize %s def\n", TitleSize);
645
+ printf("/XSIZE %d def\n", CurPage->xsize);
646
+ printf("/MinX %d def\n", LeftMarg);
647
+ printf("/MinY %d def\n", BotMarg);
648
+ printf("/MaxX %d def\n", x-RightMarg);
649
+ printf("/MaxY %d def\n", y-TopMarg);
650
+ printf("/Border %s def\n", BorderSize);
651
+ printf("/LineWidth %s def\n", LineWidth);
652
+ printf("%s setlinewidth\n", LineWidth);
653
+
654
+ /* Check if smallfont is fixed pitch */
655
+ if (!NoSmallCal) {
656
+ printf("/SmallFont findfont /FontInfo get /isFixedPitch get\n");
657
+
658
+ /* Define SmallString used to set smallfont size */
659
+ printf("{/SmallString (WW ) def}\n");
660
+ printf("{/SmallString (WW) def}\nifelse\n");
661
+ }
662
+
663
+ /* Do the user-supplied prolog file, if any */
664
+ if (UserProlog) {
665
+ fp = fopen(UserProlog, "r");
666
+ if (!fp) {
667
+ fprintf(stderr, "Could not open prologue file `%s'\n", UserProlog);
668
+ } else {
669
+ while(1) {
670
+ nread = fread(buffer, sizeof(char), 512, fp);
671
+ if (!nread) break;
672
+ fwrite(buffer, sizeof(char), nread, stdout);
673
+ }
674
+ fclose(fp);
675
+ }
676
+ }
677
+
678
+ printf("%%%%EndProlog\n");
679
+
680
+
681
+ }
682
+
683
+ /***************************************************************/
684
+ /* */
685
+ /* WriteCalEntry - write all entries for one day */
686
+ /* */
687
+ /***************************************************************/
688
+ static void WriteCalEntry(void)
689
+ {
690
+ CalEntry *c = CurEntries;
691
+ CalEntry *d;
692
+ int begin, end, i, HadQPS;
693
+
694
+ /* Move to appropriate location */
695
+ printf("/CAL%d {\n", CurDay);
696
+ if (!MondayFirst)
697
+ printf("Border ytop %d xincr mul MinX add xincr\n", WkDayNum);
698
+ else
699
+ printf("Border ytop %d xincr mul MinX add xincr\n", (WkDayNum ? WkDayNum-1 : 6));
700
+
701
+ /* Set up the text array */
702
+ printf("[\n");
703
+
704
+ CurEntries = NULL;
705
+
706
+ while(c) {
707
+ WriteOneEntry(c);
708
+ free(c->entry);
709
+ d = c->next;
710
+ free(c);
711
+ c = d;
712
+ }
713
+ printf("]\n");
714
+
715
+ /* Print the day number */
716
+ printf("(%d) %d\n", CurDay, (int) DaynumRight);
717
+ /* Do it! */
718
+ printf("DoCalBox\n");
719
+
720
+ /* Update ymin */
721
+ printf("/y exch def y ymin lt {/ymin y def} if\n");
722
+ printf("} def\n");
723
+
724
+ /* If WkDayNum is a Sunday or Monday, depending on MondayFirst,
725
+ move to next row. Also handle the queued PS and PSFILE reminders */
726
+ if ((!MondayFirst && WkDayNum == 6) ||
727
+ (MondayFirst && WkDayNum == 0) || CurDay == MaxDay) {
728
+ HadQPS = 0;
729
+ if (MondayFirst) begin = CurDay - (WkDayNum ? WkDayNum-1 : 6);
730
+ else begin = CurDay - WkDayNum;
731
+ if (begin < 1) begin = 1;
732
+ end = CurDay;
733
+ for (i=begin; i<=end; i++) {
734
+ if (PsEntries[i]) {
735
+ HadQPS = 1;
736
+ break;
737
+ }
738
+ }
739
+ /* Avoid problems with blotching if PS printer has roundoff errors */
740
+ if (HadQPS) printf("1 setgray\n");
741
+ for (i=begin; i<=end; i++) {
742
+ printf("CAL%d\n", i);
743
+ }
744
+ if (HadQPS) printf("0 setgray\n");
745
+ printf("/y ytop MinBoxSize sub def y ymin lt {/ymin y def} if\n");
746
+
747
+ /* Draw the line at the bottom of the row */
748
+ printf("MinX ymin MaxX ymin L\n");
749
+
750
+ /* Update ytop */
751
+ printf("/ylast ytop def\n");
752
+ printf("/ytop ymin def\n");
753
+
754
+ (void) DoQueuedPs();
755
+
756
+ /* Re-do the calendar stuff if there was any included PS code */
757
+ if (HadQPS) {
758
+ printf("/ytop ylast def\n");
759
+ for (i=begin; i<=end; i++) {
760
+ printf("CAL%d\n", i);
761
+ }
762
+ printf("/y ytop MinBoxSize sub def y ymin lt {/ymin y def} if\n");
763
+ printf("MinX ymin MaxX ymin L\n");
764
+ printf("/ylast ytop def\n");
765
+ printf("/ytop ymin def\n");
766
+ }
767
+ }
768
+ }
769
+
770
+ /***************************************************************/
771
+ /* */
772
+ /* WriteOneEntry - write an entry for one day */
773
+ /* */
774
+ /***************************************************************/
775
+ static void WriteOneEntry(CalEntry const *c)
776
+ {
777
+ int ch, i;
778
+ char const *s = c->entry;
779
+
780
+ printf(" [");
781
+
782
+ /* Chew up leading spaces */
783
+ while(isspace((unsigned char) *s)) s++;
784
+
785
+ /* Skip three decimal numbers for COLOR special */
786
+ if (c->special == SPECIAL_COLOR) {
787
+ for (i=0; i<3; i++) {
788
+ while(*s && !isspace(*s)) s++;
789
+ while(*s && isspace(*s)) s++;
790
+ }
791
+ }
792
+
793
+ putchar('(');
794
+ while(*s) {
795
+ /* Use the "unsigned char" cast to fix problem on Solaris 2.5 */
796
+ /* which treated some latin1 characters as white space. */
797
+ ch = (unsigned char) *s++;
798
+ if (ch == '\\' || ch == '(' || ch == ')') putchar('\\');
799
+ if (!isspace(ch)) putchar(ch);
800
+ else {
801
+ putchar(')');
802
+ while(isspace((unsigned char)*s)) s++;
803
+ if (!*s) {
804
+ goto finish;
805
+ }
806
+ putchar('(');
807
+ }
808
+ }
809
+ printf(")\n");
810
+ finish:
811
+ if (c->special == SPECIAL_COLOR) {
812
+ int r, g, b;
813
+ if (sscanf(c->entry, "%d %d %d", &r, &g, &b) == 3) {
814
+ if (r < 0) r = 0;
815
+ else if (r > 255) r = 255;
816
+ if (g < 0) g = 0;
817
+ else if (g > 255) g = 255;
818
+ if (b < 0) b = 0;
819
+ else if (b > 255) b = 255;
820
+ printf("(gsave %f %f %f setrgbcolor)(grestore)",
821
+ r / 255.0, g / 255.0, b / 255.0);
822
+ } else {
823
+ /* Punt... unrecognized color is black */
824
+ printf("()()");
825
+ }
826
+ } else {
827
+ printf("()()");
828
+ }
829
+ printf("]\n");
830
+ }
831
+
832
+ /***************************************************************/
833
+ /* */
834
+ /* Init - set up parameters */
835
+ /* */
836
+ /***************************************************************/
837
+ static void Init(int argc, char const *argv[])
838
+ {
839
+ char const *s;
840
+ char const *t;
841
+ int i=1;
842
+ size_t j;
843
+ int k;
844
+ int offset;
845
+
846
+ PortraitMode = 1;
847
+ NoSmallCal = 0;
848
+ LeftMarg = 36;
849
+ RightMarg = 36;
850
+ TopMarg = 36;
851
+ BotMarg = 36;
852
+ UseISO = 0;
853
+ FillPage = 0;
854
+ MondayFirst = 0;
855
+ SmallLocation = "bt";
856
+ DaynumRight = 1;
857
+
858
+ for(j=0; j<32; j++) PsEntries[i] = NULL;
859
+
860
+ CurPage = DefaultPage; /* Letter size by default */
861
+
862
+ while (i < argc) {
863
+ s = argv[i];
864
+ i++;
865
+
866
+ if (*s++ != '-') Usage("Options must begin with `-'");
867
+
868
+ switch(*s++) {
869
+
870
+ case 'p':
871
+ if (i == argc) Usage("Prologue filename must be supplied");
872
+ UserProlog = argv[i++];
873
+ break;
874
+
875
+ case 's':
876
+ if (i == argc) Usage("Size must be supplied");
877
+ t = argv[i++];
878
+ while(*s) {
879
+ switch(*s++) {
880
+ case 'h': HeadSize = t; break;
881
+ case 'e': EntrySize = t; break;
882
+ case 'd': DaySize = t; break;
883
+ case 't': TitleSize = t; break;
884
+ default: Usage("Size must specify h, t, e, or d");
885
+ }
886
+ }
887
+ break;
888
+
889
+ case 'f':
890
+ if (i == argc) Usage("Font must be supplied");
891
+ t = argv[i++];
892
+ while(*s) {
893
+ switch(*s++) {
894
+ case 'h': HeadFont = t; break;
895
+ case 'e': EntryFont = t; break;
896
+ case 'd': DayFont = t; break;
897
+ case 's': SmallFont = t; break;
898
+ case 't': TitleFont = t; break;
899
+ default: Usage("Font must specify s, h, t, e, or d");
900
+ }
901
+ }
902
+ break;
903
+
904
+ case 'v':
905
+ Verbose = 1;
906
+ break;
907
+
908
+ case 'm':
909
+ if (i == argc) Usage("Media must be supplied");
910
+ t = argv[i++];
911
+ CurPage = NULL;
912
+ for (j=0; j<NUMPAGES-1; j++)
913
+ if (!strcmp(t, Pages[j].name)) {
914
+ CurPage = &Pages[j];
915
+ break;
916
+ }
917
+
918
+ if (!CurPage) {
919
+ double w, h;
920
+ if (sscanf(t, "%lfx%lfin", &w, &h) == 2) {
921
+ CurPage = &Pages[NUMPAGES-1];
922
+ CurPage->xsize = (int) (w * 72.0);
923
+ CurPage->ysize = (int) (h * 72.0);
924
+ } else if (sscanf(t, "%lfx%lfcm", &w, &h) == 2) {
925
+ CurPage = &Pages[NUMPAGES-1];
926
+ CurPage->xsize = (int) ((double) w * 28.346457);
927
+ CurPage->ysize = (int) ((double) w * 28.346457);
928
+ }
929
+ }
930
+ if (!CurPage) {
931
+ fprintf(stderr, "\nUnknown media specified.\n");
932
+ fprintf(stderr, "\nAvailable media types:\n");
933
+ for (j=0; j<NUMPAGES-1; j++) {
934
+ fprintf(stderr, " %s\n", Pages[j].name);
935
+ }
936
+ fprintf(stderr, " WxHin Specify size in inches (W and H are decimal numbers)\n");
937
+ fprintf(stderr, " WxHcm Specify size in centimetres (W and H are decimal numbers)\n");
938
+ fprintf(stderr, "Default media type is %s\n", DefaultPage[0].name);
939
+ exit(EXIT_FAILURE);
940
+ }
941
+ break;
942
+
943
+ case 'o':
944
+ if (i == argc) Usage("Offset must be supplied");
945
+ offset = atoi(argv[i++]);
946
+ if (offset < 0) offset = 0;
947
+ if (!*s) Usage("Offset must specify l, r, t or b");
948
+ while(*s) {
949
+ switch(*s++) {
950
+ case 'l': LeftMarg = offset; break;
951
+ case 'r': RightMarg = offset ; break;
952
+ case 't': TopMarg = offset; break;
953
+ case 'b': BotMarg = offset; break;
954
+ default: Usage("Offset must specify l, r, t or b");
955
+ }
956
+ }
957
+ break;
958
+
959
+ case 'b':
960
+ if (i == argc) Usage("Border must be supplied");
961
+ BorderSize = argv[i++];
962
+ break;
963
+
964
+ case 't':
965
+ if (i == argc) Usage("Line thickness must be supplied");
966
+ LineWidth = argv[i++];
967
+ break;
968
+
969
+ case 'l': PortraitMode = 0; break;
970
+
971
+ case 'i': UseISO = 1; break;
972
+
973
+ case 'x': DaynumRight = 0; break;
974
+ case 'c': k=(*s);
975
+ if (!k) {
976
+ SmallLocation = SmallCalLoc[0];
977
+ } else {
978
+ k -= '0';
979
+ if (k>=0 && k<NUMSMALL) {
980
+ SmallLocation = SmallCalLoc[k];
981
+ } else {
982
+ SmallLocation = SmallCalLoc[0];
983
+ }
984
+ }
985
+ break;
986
+
987
+ case 'e': FillPage = 1; break;
988
+
989
+ case '-':
990
+ if (!strcmp(s, "version")) {
991
+ printf("rem2ps version %s\n", VERSION);
992
+ exit(0);
993
+ }
994
+ Usage("Unrecognized option");
995
+ break;
996
+
997
+ default: Usage("Unrecognized option");
998
+ }
999
+ }
1000
+ }
1001
+
1002
+ /***************************************************************/
1003
+ /* */
1004
+ /* Usage - print usage information */
1005
+ /* */
1006
+ /***************************************************************/
1007
+ void Usage(char const *s)
1008
+ {
1009
+ if (s) fprintf(stderr, "Rem2PS: %s\n\n", s);
1010
+
1011
+ fprintf(stderr, "Rem2PS: Produce a PostScript calendar from output of Remind.\n\n");
1012
+ fprintf(stderr, "NOTE: Rem2PS is deprecated. You should use rem2pdf instead.\n\n");
1013
+ fprintf(stderr, "Usage: rem2ps [options]\n\n");
1014
+ fprintf(stderr, "Options:\n\n");
1015
+ fprintf(stderr, "-v Print progress messages to standard error\n");
1016
+ fprintf(stderr, "-p file Include user-supplied PostScript code in prologue\n");
1017
+ fprintf(stderr, "-l Do calendar in landscape mode\n");
1018
+ fprintf(stderr, "-c[n] Control small calendars: 0=none; 1=bt; 2=tb; 3=sbt\n");
1019
+ fprintf(stderr, "-i Use ISO 8859-1 encoding in PostScript output\n");
1020
+ fprintf(stderr, "-m media Set page size (eg, Letter, Legal, A4.) Case sensitive!\n");
1021
+ fprintf(stderr, " (Default page size is %s)\n", DefaultPage[0].name);
1022
+ fprintf(stderr, "-f[shted] font Set font for small cal, hdr, title, cal entries, day numbers\n");
1023
+ fprintf(stderr, "-s[hted] size Set size for header, title, calendar entries and/or day numbers\n");
1024
+ fprintf(stderr, "-b size Set border size for calendar entries\n");
1025
+ fprintf(stderr, "-t size Set line thickness\n");
1026
+ fprintf(stderr, "-e Make calendar fill entire page\n");
1027
+ fprintf(stderr, "-x Put day numbers on left instead of right\n");
1028
+ fprintf(stderr, "-o[lrtb] marg Specify left, right, top and bottom margins\n");
1029
+ fprintf(stderr, "--version Print the version of rem2ps and exit\n");
1030
+ exit(EXIT_FAILURE);
1031
+ }
1032
+
1033
+ /***************************************************************/
1034
+ /* */
1035
+ /* DoSmallCal - do the small calendar for previous or next */
1036
+ /* month. */
1037
+ /* */
1038
+ /***************************************************************/
1039
+ static void DoSmallCal(char const *m, int days, int first, int col, int which)
1040
+ {
1041
+ /* Do the small calendar */
1042
+ int i, j;
1043
+ int row = 2;
1044
+
1045
+ if (MondayFirst) {
1046
+ first--;
1047
+ if (first < 0) first = 6;
1048
+ }
1049
+ /* Figure out the font size */
1050
+
1051
+ printf("/SmallFontSize MinBoxSize Border sub Border sub 8 div 2 sub def\n");
1052
+ printf("/SmallFont findfont setfont\n");
1053
+ printf("SmallString stringwidth pop /SmallWidth exch def\n");
1054
+ printf("SmallWidth 7 mul xincr Border sub Border sub exch div /tmp exch def\n");
1055
+ printf("tmp SmallFontSize lt {/SmallFontSize tmp def} if\n");
1056
+ printf("/SmallFont findfont SmallFontSize scalefont setfont\n");
1057
+
1058
+ /* Recalculate SmallWidth */
1059
+ printf("SmallString stringwidth pop /SmallWidth exch def\n");
1060
+
1061
+ /* Save graphics state */
1062
+ printf("gsave\n");
1063
+
1064
+ /* Move origin to upper-left hand corner of appropriate box */
1065
+ printf("%d xincr mul MinX add ysmall%d translate\n", col, which);
1066
+
1067
+ /* Print the month */
1068
+ printf("SmallWidth 7 mul (%s) stringwidth pop sub 2 div Border add Border neg SmallFontSize sub moveto (%s) show\n", m, m);
1069
+
1070
+ /* Print the days of the week */
1071
+ for (i=0; i<7; i++) {
1072
+ if (MondayFirst) j=(i+1)%7;
1073
+ else j=i;
1074
+ printf("Border %d SmallWidth mul add Border neg SmallFontSize sub SmallFontSize sub 2 sub moveto (%c) show\n", i, DayName[j][0]);
1075
+ }
1076
+
1077
+ /* Now do the days of the month */
1078
+ for (i=1; i<=days; i++) {
1079
+ printf("Border %d SmallWidth mul add Border neg SmallFontSize sub SmallFontSize 2 add %d mul sub moveto (%d) show\n", first, row, i);
1080
+ first++;
1081
+ if (first == 7) { first = 0; row++; }
1082
+ }
1083
+
1084
+ /* restore graphics state */
1085
+ printf("grestore\n");
1086
+ }
1087
+
1088
+ /***************************************************************/
1089
+ /* */
1090
+ /* DoQueuedPs - do the queued PS and PSFILE reminders. */
1091
+ /* */
1092
+ /***************************************************************/
1093
+ static int DoQueuedPs(void)
1094
+ {
1095
+ int i;
1096
+ int HadPS = 0;
1097
+ int wd;
1098
+ int begin, end;
1099
+ int nread;
1100
+ CalEntry *e, *n;
1101
+ FILE *fp;
1102
+ int fnoff;
1103
+ char buffer[512];
1104
+ char fbuffer[512];
1105
+ char const *size, *fsize, *extra;
1106
+ char const *s;
1107
+ int num, r, g, b, phase, fontsize, moonsize;
1108
+
1109
+ if (!MondayFirst) begin = CurDay - WkDayNum;
1110
+ else begin = CurDay - (WkDayNum ? WkDayNum-1 : 6);
1111
+ wd = 0;
1112
+ while (begin < 1) begin++, wd++;
1113
+ end = CurDay;
1114
+ for (i=begin; i<=end; i++, wd++) {
1115
+ e = PsEntries[i];
1116
+
1117
+ if (e) {
1118
+ HadPS = 1;
1119
+ printf("/SAVESTATE save def\n");
1120
+
1121
+ /* Translate coordinates to bottom of calendar box */
1122
+ printf("%d xincr mul MinX add ytop translate\n", wd);
1123
+
1124
+ /* Set up convenient variables */
1125
+ printf("/BoxWidth xincr def\n/BoxHeight ylast ytop sub def\n");
1126
+ printf("/InBoxHeight BoxHeight border sub DaySize sub DaySize sub 2 add EntrySize add def \n");
1127
+ }
1128
+
1129
+ while (e) {
1130
+
1131
+ /* Now do the PostScript SPECIAL */
1132
+ fnoff = 0;
1133
+ while (isspace(*(e->entry+fnoff))) fnoff++;
1134
+ switch(e->special) {
1135
+ case SPECIAL_POSTSCRIPT: /* Send PostScript through */
1136
+ printf("%s\n", e->entry+fnoff);
1137
+ break;
1138
+ case SPECIAL_PSFILE: /* PostScript from a file */
1139
+ fp = fopen(e->entry+fnoff, "r");
1140
+ if (!fp) {
1141
+ fprintf(stderr, "Could not open PostScript file `%s'\n", e->entry+1);
1142
+ } else {
1143
+ while(1) {
1144
+ nread = fread(buffer, sizeof(char), 512, fp);
1145
+ if (!nread) break;
1146
+ fwrite(buffer, sizeof(char), nread, stdout);
1147
+ }
1148
+ fclose(fp);
1149
+ }
1150
+ break;
1151
+ case SPECIAL_SHADE: /* Shading */
1152
+ num = sscanf(e->entry+fnoff, "%d %d %d", &r, &g, &b);
1153
+ if (num == 1) {
1154
+ g = r;
1155
+ b = r;
1156
+ } else if (num != 3) {
1157
+ fprintf(stderr, "Rem2PS: Malformed SHADE special\n");
1158
+ break;
1159
+ }
1160
+ if (r < 0 || r > 255 ||
1161
+ g < 0 || g > 255 ||
1162
+ b < 0 || b > 255) {
1163
+ fprintf(stderr, "Rem2PS: Illegal values for SHADE\n");
1164
+ break;
1165
+ }
1166
+ printf("/_A LineWidth 2 div def _A _A moveto\n");
1167
+ printf("BoxWidth _A sub _A lineto BoxWidth _A sub BoxHeight _A sub lineto\n");
1168
+ printf("_A BoxHeight _A sub lineto closepath\n");
1169
+ printf("%g %g %g setrgbcolor fill 0.0 setgray\n",
1170
+ r/255.0, g/255.0, b/255.0);
1171
+ break;
1172
+
1173
+ case SPECIAL_WEEK: /* Week number */
1174
+ printf("gsave Border Border 2 div moveto /EntryFont findfont EntrySize 1.2 div scalefont setfont (");
1175
+ s = e->entry+fnoff;
1176
+ while(*s && isspace(*s)) {
1177
+ s++;
1178
+ }
1179
+ put_escaped_string(s);
1180
+ printf(") show grestore\n");
1181
+ break;
1182
+
1183
+ case SPECIAL_MOON: /* Moon phase */
1184
+ num = sscanf(e->entry+fnoff, "%d %d %d", &phase, &moonsize,
1185
+ &fontsize);
1186
+ /* See if we have extra stuff */
1187
+ extra = e->entry+fnoff;
1188
+
1189
+ /* Skip phase */
1190
+ while(*extra && !isspace(*extra)) extra++;
1191
+ while(*extra && isspace(*extra)) extra++;
1192
+
1193
+ /* Skip moon size */
1194
+ while(*extra && !isspace(*extra)) extra++;
1195
+ while(*extra && isspace(*extra)) extra++;
1196
+
1197
+ /* Skip font size */
1198
+ while(*extra && !isspace(*extra)) extra++;
1199
+ while(*extra && isspace(*extra)) extra++;
1200
+
1201
+ if (num == 1) {
1202
+ moonsize = -1;
1203
+ fontsize = -1;
1204
+ } else if (num == 2) {
1205
+ fontsize = -1;
1206
+ } else if (num != 3) {
1207
+ fprintf(stderr, "Rem2PS: Badly formed MOON special\n");
1208
+ break;
1209
+ }
1210
+ if (phase < 0 || phase > 3) {
1211
+ fprintf(stderr, "Rem2PS: Illegal MOON phase %d\n",
1212
+ phase);
1213
+ break;
1214
+ }
1215
+ if (moonsize < 0) {
1216
+ size = "DaySize 2 div";
1217
+ } else {
1218
+ snprintf(buffer, sizeof(buffer), "%d", moonsize);
1219
+ size = buffer;
1220
+ }
1221
+
1222
+ /* Store the starting X coordinate in "moonstartx" */
1223
+ if (DaynumRight) {
1224
+ printf("Border %s add /moonstartx exch def", size);
1225
+ } else {
1226
+ printf("xincr Border sub %s sub ", size);
1227
+ if (*extra) {
1228
+ if (fontsize < 0) {
1229
+ fsize = "EntrySize";
1230
+ } else {
1231
+ snprintf(fbuffer, sizeof(fbuffer), "%d", fontsize);
1232
+ fsize = fbuffer;
1233
+ }
1234
+ printf("/EntryFont findfont %s scalefont setfont (",
1235
+ fsize);
1236
+ put_escaped_string(extra);
1237
+ printf(") stringwidth pop sub Border sub ");
1238
+ }
1239
+ printf("/moonstartx exch def\n");
1240
+ }
1241
+ printf(" gsave 0 setgray newpath ");
1242
+ printf("moonstartx BoxHeight Border sub %s sub\n", size);
1243
+ printf(" %s 0 360 arc closepath\n", size);
1244
+ switch(phase) {
1245
+ case 0:
1246
+ printf("fill\n");
1247
+ break;
1248
+ case 2:
1249
+ printf("stroke\n");
1250
+ break;
1251
+
1252
+ case 1:
1253
+ printf("stroke\nnewpath ");
1254
+ printf("moonstartx BoxHeight Border sub %s sub\n", size);
1255
+ printf("%s 90 270 arc closepath fill\n", size);
1256
+ break;
1257
+ default:
1258
+ printf("stroke\nnewpath ");
1259
+ printf("moonstartx BoxHeight Border sub %s sub\n", size);
1260
+ printf("%s 270 90 arc closepath fill\n", size);
1261
+ break;
1262
+ }
1263
+ /* Anything left? */
1264
+ if (*extra) {
1265
+ printf("moonstartx %s add Border add BoxHeight border sub %s sub %s sub moveto\n", size, size, size);
1266
+ if (fontsize < 0) {
1267
+ fsize = "EntrySize";
1268
+ } else {
1269
+ snprintf(fbuffer, sizeof(fbuffer), "%d", fontsize);
1270
+ fsize = fbuffer;
1271
+ }
1272
+ printf("/EntryFont findfont %s scalefont setfont (",
1273
+ fsize);
1274
+ put_escaped_string(extra);
1275
+ printf(") show\n");
1276
+
1277
+ }
1278
+ printf("grestore\n");
1279
+ break;
1280
+ }
1281
+
1282
+ /* Free the entry */
1283
+ free(e->entry);
1284
+ n = e->next;
1285
+ free(e);
1286
+ e = n;
1287
+ }
1288
+ if (PsEntries[i]) printf("\n SAVESTATE restore\n");
1289
+ PsEntries[i] = NULL;
1290
+ }
1291
+ return HadPS;
1292
+ }
1293
+
1294
+ /***************************************************************/
1295
+ /* */
1296
+ /* GetSmallLocations */
1297
+ /* */
1298
+ /* Set up the locations for the small calendars. */
1299
+ /* */
1300
+ /***************************************************************/
1301
+ static void GetSmallLocations(void)
1302
+ {
1303
+ char c;
1304
+ char const *s = SmallLocation;
1305
+ int colfirst, collast;
1306
+
1307
+ /* Figure out the first and last columns */
1308
+ colfirst = FirstWkDay;
1309
+ collast = (FirstWkDay+MaxDay-1) % 7;
1310
+ if (MondayFirst) {
1311
+ colfirst = colfirst ? colfirst - 1 : 6;
1312
+ collast = collast ? collast - 1 : 6;
1313
+ }
1314
+ NoSmallCal = 0;
1315
+
1316
+ while((c = *s++) != 0) {
1317
+ switch(c) {
1318
+ case 'b':
1319
+ /* Adjust Feb. if we want it on the bottom */
1320
+ if (MaxDay == 28 && colfirst == 0) {
1321
+ printf("/ysmallbot ymin def /ymin ysmallbot MinBoxSize sub def\n");
1322
+ printf("MinX ymin MaxX ymin L\n");
1323
+ printf("/ysmall1 ysmallbot def /ysmall2 ysmallbot def\n");
1324
+ SmallCol1 = 5;
1325
+ SmallCol2 = 6;
1326
+ return;
1327
+ }
1328
+ if (collast <= 4) {
1329
+ printf("/ysmall1 ysmallbot def /ysmall2 ysmallbot def\n");
1330
+ SmallCol1 = 5;
1331
+ SmallCol2 = 6;
1332
+ return;
1333
+ }
1334
+ break;
1335
+
1336
+ case 't':
1337
+ if (colfirst >= 2) {
1338
+ printf("/ysmall1 ysmalltop def /ysmall2 ysmalltop def\n");
1339
+ SmallCol1 = 0;
1340
+ SmallCol2 = 1;
1341
+ return;
1342
+ }
1343
+ break;
1344
+
1345
+ case 's':
1346
+ if (colfirst >= 1 && collast<=5) {
1347
+ printf("/ysmall1 ysmalltop def /ysmall2 ysmallbot def\n");
1348
+ SmallCol1 = 0;
1349
+ SmallCol2 = 6;
1350
+ return;
1351
+ }
1352
+ break;
1353
+ }
1354
+ }
1355
+ NoSmallCal = 1;
1356
+ return;
1357
+ }
1358
+
1359
+ /***************************************************************/
1360
+ /* */
1361
+ /* EatToken */
1362
+ /* */
1363
+ /* Read a space-delimited token into an output buffer. */
1364
+ /* */
1365
+ /***************************************************************/
1366
+ static char const *EatToken(char const *in, char *out, int maxlen)
1367
+ {
1368
+ int i = 0;
1369
+
1370
+ /* Skip space before token */
1371
+ while(*in && isspace(*in)) in++;
1372
+
1373
+ /* Eat the token */
1374
+ while(*in && !isspace(*in)) {
1375
+ if (i < maxlen) {
1376
+ if (out) *out++ = *in;
1377
+ i++;
1378
+ }
1379
+ in++;
1380
+ }
1381
+ if (out) *out = 0;
1382
+ return in;
1383
+ }