home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2110 < prev    next >
Internet Message Format  |  1990-12-28  |  36KB

  1. From: dfs@doe.carleton.ca (David F. Skoll)
  2. Newsgroups: alt.sources
  3. Subject: REMIND 2.2 04/05
  4. Message-ID: <dfs.658781298@yar>
  5. Date: 16 Nov 90 18:48:18 GMT
  6.  
  7.  
  8. #!/bin/sh
  9. # This is part 04 of Remind-2.2
  10. if touch 2>&1 | fgrep 'amc' > /dev/null
  11.  then TOUCH=touch
  12.  else TOUCH=true
  13. fi
  14. # ============= remind.1 ==============
  15. if test X"$1" != X"-c" -a -f 'remind.1'; then
  16.     echo "File already exists: skipping 'remind.1'"
  17. else
  18. echo "x - extracting remind.1 (Text)"
  19. sed 's/^X//' << 'SHAR_EOF' > remind.1 &&
  20. X.TH REMIND 1 "25 October 1990"
  21. X.UC 4
  22. X.SH NAME
  23. Xremind \- a sophisticated reminder service
  24. X.SH SYNOPSIS
  25. X.B remind
  26. X[\fB\-d\fR | \fB\-p\fR | \fB\-c\fR\fIn\fR [\fB\-w\fR\fIn\fR | \fB\-s\fR]]
  27. X[\fB\-voraq\fR]
  28. X.I filename
  29. X[\fIdate\fR]
  30. X.SH DESCRIPTION
  31. X.B remind
  32. Xreads the supplied
  33. X.I filename
  34. Xfor a list of reminders, and then issues reminders appropriate for
  35. Xthe current date.
  36. XEach reminder can consist of a message sent to standard output, or
  37. Xa program to be executed.
  38. X.SH OPTIONS
  39. X.TP
  40. X.B \-d
  41. XThe
  42. X.B \-d
  43. Xflag causes
  44. X.B remind
  45. Xto enter a debugging mode.
  46. XIn this mode, each reminder in the reminder file is examined and its
  47. Xtrigger date is printed to standard output.  Also, some consistency
  48. Xchecking is done, and warnings are issued about constructs which could
  49. Xresult in slow execution times.
  50. X.TP
  51. X.B \-p
  52. XThe
  53. X.B \-p
  54. Xflag causes
  55. X.B remind
  56. Xto go into
  57. X.I purge
  58. Xmode.  This mode is incompatible with the
  59. X.B \-d
  60. Xflag.  It causes
  61. X.B remind
  62. Xto scan the reminder file and echo all reminders which have not expired
  63. Xto the standard output.  All expired reminders are echoed to the standard
  64. Xerror stream.
  65. X.TP
  66. X.B \-c\fR\fIn\fR
  67. XThe
  68. X.B \-c
  69. Xflag causes \fBremind\fR to generate a calendar with reminders indicated on
  70. Xthe calendar.  The calendar printout is formatted and sent to standard output.
  71. XIf you supply a number \fIn\fR from 1 to 12, 
  72. Xthen a calendar will be generated for
  73. X\fIn\fR months, starting with the current month.  The default is to
  74. Xproduce a calendar for one month only.  The
  75. X.B \-c
  76. Xoption is not compatible with the \fB\-p\fR or \fB\-d\fR options.
  77. X.TP
  78. X.B \-w\fR\fIn\fR
  79. XThe \fB\-w\fR flag causes \fBremind\fR to format the calendar for a device
  80. Xwhose output width is \fIn\fR columns.  The default is to produce a calendar
  81. Xfor an 80-column device.
  82. X.TP
  83. X.B \-s
  84. XThe \fB\-s\fB flag causes \fBremind\fR to send an unformatted "simple
  85. Xcalendar" listing to standard output.  This can be used if you wish to
  86. Xformat the calendar with another program rather than using \fBremind\fR's
  87. Xbuilt-in calendar format.
  88. X.TP
  89. X.B \-v
  90. XThe
  91. X.B \-v
  92. Xflag causes the debugging messages caused by
  93. X.B \-d
  94. Xto be printed in a verbose manner.  Also, any error messages issued by
  95. X.B remind
  96. Xare printed in verbose format.
  97. X.TP
  98. X.B \-o
  99. XThe
  100. X.B \-o
  101. Xflag causes
  102. X.B remind
  103. Xto ignore any
  104. X.B ONCE
  105. Xdirectives in the reminder file.
  106. X.TP
  107. X.B \-r
  108. XThe
  109. X.B \-r
  110. Xflag causes
  111. X.B remind
  112. Xto ignore any
  113. X.B RUN
  114. Xdirectives in the reminder file.
  115. X.TP
  116. X.B \-a
  117. XThe
  118. X.B \-a
  119. Xoption causes
  120. X.B remind
  121. Xnot to issue
  122. X.B AT
  123. Xreminders when the reminder file is read and processed, providing the
  124. X.B AT
  125. Xreminders would normally be queued.  This allows you to have
  126. X.B remind
  127. Xqueue
  128. X.B AT
  129. Xreminders without triggering them when it reads the file.
  130. X.TP
  131. X.B \-q
  132. XThe
  133. X.B \-q
  134. Xflag causes
  135. X.B remind
  136. Xnot to queue
  137. X.B AT
  138. Xreminders for triggering later in the day.  This prevents
  139. X.B remind
  140. Xfrom running as a daemon and popping up reminders as they are triggered.
  141. X.PP
  142. XIf you supply a
  143. X.I date
  144. Xon the command line, it must consist of
  145. X.I day month year
  146. Xwhere
  147. X.I day
  148. Xis the day of the month,
  149. X.I month
  150. Xis (at least the first three letters of) the English name of the month,
  151. Xand
  152. X.I year
  153. Xis a year (all 4 digits) from 1990 to 2075.  These components can appear
  154. Xin any order, but must be separated by spaces.  If a date is supplied,
  155. X.B remind
  156. Xuses it rather than the actual system date as its notion of "today."  You
  157. Xcan use this feature to test how reminders will appear in the future, or
  158. Xto produce a calendar for any month you choose.
  159. X.SH REMINDER FILES
  160. X.B Remind
  161. Xuses scripts called
  162. X.I reminder files
  163. Xto control its operation.  A sample reminder file is shown below:
  164. X.PP
  165. X.nf
  166. X    #!/usr/local/bin/remind
  167. X    # Sample file
  168. X    BANNER Hi there.  Here are your reminders:
  169. X
  170. X    # First some birthdays
  171. X    REM 6 Jan MSG David's birthday.
  172. X    REM 23 Nov +10 MSG El's birthday is %a.
  173. X
  174. X    # Next some housekeeping
  175. X    REM 1 -1 OMIT Sat Sun RUN do_backup
  176. X
  177. X    # Introduce some holidays
  178. X    OMIT 25 Dec        # Christmas
  179. X    OMIT  1 July        # Canada Day
  180. X    OMIT 22 Nov 1990    # American Thanksgiving
  181. X
  182. X    # Business things
  183. X    REM 23 Nov 1990 +2 AT 10:00 +30 *15 MSG \\
  184. X    %"Meeting with Bill%" %1%_Bring papers!
  185. X
  186. X.fi
  187. X.PP
  188. XNote that
  189. X.B remind
  190. Xignores blank lines and lines beginning with "#".  If the character '\\'
  191. Xis the LAST character on the line, it is treated as a continuation
  192. Xcharacter.  You can string many lines together using this character.
  193. XNote that if you use line continuation, then
  194. X.B remind
  195. Xuses the line number of the last line when printing diagnostic messages.
  196. X.PP
  197. XCommands, names of months, etc. can be typed in any
  198. Xmixture of upper- and lower-case.  The convention I use is to
  199. Xuse upper-case for
  200. X.B remind
  201. Xtokens like
  202. X.I
  203. XMSG, OMIT,
  204. Xetc., and mixed case for other words like
  205. X.I January
  206. Xand
  207. X.I Sunday.
  208. X.SH THE REM COMMAND
  209. XThe most-used command in a reminder file is the
  210. X.I REM
  211. Xcommand.  This command is used to denote a reminder.  There are many
  212. Xforms of the
  213. X.I REM
  214. Xcommand; they are represented by:
  215. X.PP
  216. X.RS
  217. XREM [ONCE] [\fIdate_spec\fR]
  218. X[\fIdelta\fR]
  219. X[\fIback\fR]
  220. X[\fIrepeat\fR]
  221. X[OMIT \fIomit_list\fR]
  222. X[AT \fItime\fR [\fItdelta\fR] [\fItrepeat\fR]]
  223. X[MSG | RUN]
  224. X.I body
  225. X.RE
  226. X.PP
  227. XThe
  228. X.I date_spec, delta, back
  229. Xand
  230. X.I repeat
  231. Xcan be specified in any order.  The 
  232. X.I OMIT, 
  233. Xif present, must follow these three
  234. Xitems.  The 
  235. X.I AT,
  236. Xif present, must follow the
  237. X.I OMIT
  238. Xand the other items.  The
  239. X.I MSG
  240. Xor
  241. X.I RUN 
  242. Xmust be the last item before the
  243. X.I body.
  244. X.SH DATE SPECIFICATIONS
  245. XThe
  246. X.I date_spec
  247. Xconsists of zero to four parts.  These parts are
  248. X.I day
  249. X(day of month),
  250. X
  251. X
  252. X
  253. X
  254. X
  255. X
  256. X.I month
  257. X(month name),
  258. X.I year
  259. Xand
  260. X.I weekday.
  261. X.I Month
  262. Xand
  263. X.I weekday
  264. Xare the English names of months and weekdays.  At least the first three
  265. Xcharacters must be used.  Case is irrelevant.  The following are examples
  266. Xof the various parts of a
  267. X.I date_spec:
  268. X.TP
  269. X.I day:
  270. X1, 22, 31, 14, 3
  271. X.TP
  272. X.I month:
  273. XJANUARY, feb, March, ApR, may, Aug
  274. X.TP
  275. X.I year:
  276. X1990, 1993, 2030, 95 (interpreted as 1995).  The year can range
  277. Xfrom 1990 to 2075.
  278. X.TP
  279. X.I weekday:
  280. XMonday, tue, Wed, THU, Friday, saturday, sundAy
  281. X.PP
  282. XNote that there can be several
  283. X.I weekday
  284. Xcomponents separated by spaces in a
  285. X.I date_spec.
  286. X.PP
  287. X.B INTERPRETATION OF DATE SPECIFICATIONS
  288. X.PP
  289. XThe following examples show how date specifications are interpreted.
  290. X.PP
  291. X1. Null date specification - the reminder is triggered every day.
  292. XThe trigger date for a specific run is simply the current system date.
  293. X.PP
  294. X2. Only
  295. X.I day
  296. Xpresent.  The reminder is triggered on the specified day of each month.
  297. XThe trigger date for a particular run is the closest such day to the
  298. Xcurrent system date.  For example:
  299. X.nf
  300. X    REM 1 MSG First of every month.
  301. X    REM 31 MSG 31st of every month that has 31 days.
  302. X.fi
  303. X.PP
  304. X3. Only
  305. X.I month
  306. Xpresent.  The reminder is triggered every day of the specified month.
  307. XExample:
  308. X.nf
  309. X    REM Feb MSG Every day in February
  310. X.fi
  311. X.PP
  312. X4.
  313. X.I day
  314. Xand
  315. X.I month
  316. Xpresent.  Examples:
  317. X.nf
  318. X    REM 6 Jan MSG Every 6th of January
  319. X    REM Feb 29 MSG Every 29th of February
  320. X.fi
  321. X.PP
  322. X5.  Only
  323. X.I year
  324. Xpresent. Example:
  325. X.nf
  326. X    REM 1991 MSG Every day in 1991
  327. X.fi
  328. X.PP
  329. X6.
  330. X.I year
  331. Xand
  332. X.I day
  333. Xpresent.  Examples:
  334. X.nf
  335. X    REM 1 1990 MSG 1st of every month in 1990
  336. X    REM 1992 23 MSG 23rd of every month in 1992
  337. X.fi
  338. X.PP
  339. X7.
  340. X.I year
  341. Xand
  342. X.I month
  343. Xpresent.  Examples:
  344. X.nf
  345. X    REM Feb 1991 MSG Every day in Feb 1991
  346. X    REM 1992 September MSG Every day in Sept 1992
  347. X.fi
  348. X.PP
  349. X8.
  350. X.I year, month
  351. Xand
  352. X.I day
  353. Xpresent.  Examples:
  354. X.nf
  355. X    REM 8 Jan 1991 MSG 8th January 1991.
  356. X    REM 1992 March 9 MSG 9th March 1992.
  357. X.fi
  358. X.PP
  359. X9.
  360. X.I weekday
  361. Xonly.  Examples:
  362. X.nf
  363. X    REM Sat MSG Every Saturday
  364. X    REM Mon Tue Wed Thu Fri MSG Every working day
  365. X    REM Monday Wednesday MSG Every Monday and Wednesday
  366. X.fi
  367. X.PP
  368. X10.
  369. X.I weekday
  370. Xand
  371. X.I day
  372. Xpresent.  Examples:
  373. X.nf
  374. X    REM Sat 1 MSG First Saturday of every month
  375. X    REM Mon Tue Wed Thu Fri MSG 1st working day after 15th of every month
  376. X.fi
  377. X.PP
  378. X11.
  379. X.I weekday
  380. Xand
  381. X.I month
  382. Xpresent.  Examples:
  383. X.nf
  384. X    REM Mon March MSG Every Monday in March
  385. X    REM Mon Tue Wed Thu Fri Feb MSG Every working day in February
  386. X.fi
  387. X.PP
  388. X12.
  389. X.I weekday, month
  390. Xand
  391. X.I day
  392. Xpresent.  Examples:
  393. X.nf
  394. X    REM Mon 1 March MSG First Monday in March
  395. X    REM Sat Sun 15 July MSG First Sat or Sun on or after 15 July
  396. X.fi
  397. X.PP
  398. X13.
  399. X.I weekday
  400. Xand
  401. X.I year
  402. Xpresent.  Example:
  403. X.nf
  404. X    REM Sat Sun 1991 MSG Every Saturday and Sunday in 1991
  405. X.fi
  406. X.PP
  407. X14.
  408. X.I weekday, day
  409. Xand
  410. X.I year
  411. Xpresent.  Examples:
  412. X.nf
  413. X    REM Mon 15 1990 MSG 1st Mon after 15th of every month in 1990
  414. X    REM Mon Tue Wed Thu Fri 1 1990 MSG 1st working day of every
  415. X        month in 1990
  416. X.fi
  417. X.PP
  418. X15.
  419. X.I weekday, month
  420. Xand
  421. X.I year
  422. Xpresent.  Example:
  423. X.nf
  424. X    REM Mon Wed 1991 Feb MSG Every Mon and Wed in Feb 1991.
  425. X.fi
  426. X.PP
  427. X16.
  428. X.I weekday, day, month
  429. Xand
  430. X.I year
  431. Xpresent.  Example:
  432. X.nf
  433. X    REM Mon Tue Wed Thu Fri 28 Oct 1990 MSG 1st working day
  434. X        on or after 28 October 1990.
  435. X.fi
  436. X.PP
  437. XNote that when
  438. X.I weekday
  439. Xand
  440. X.I day
  441. Xare specified,
  442. X.B remind
  443. Xchooses the first date on or after the specified
  444. X.I day
  445. Xwhich also satisfies the
  446. X.I weekday
  447. Xconstraint.  It does this by picking the first date on or after the specified
  448. X.I day
  449. Xwhich is listed in the list of
  450. X.I weekdays.
  451. XThus, a reminder like:
  452. X.PP
  453. X.nf
  454. X    REM Mon Tue 28 Oct 1990 MSG Hi
  455. X.fi
  456. X.PP
  457. Xwould be issued only on Monday, 29 October, 1990.  It would not be issued
  458. Xon Tuesday, 30 October, 1990, since the 29th is the first date to satisfy
  459. Xthe
  460. X.I weekday
  461. Xconstraints.
  462. X.PP
  463. X.B BACKWARD SCANNING
  464. X.PP
  465. XSometimes, you need to incorporate "backward scanning" into your date
  466. Xspecification.  This is accomplished with the
  467. X.I back
  468. Xpart of the reminder specification.  If present, the
  469. X.I back
  470. Xis specified as a negative number.  This causes
  471. X.B remind
  472. Xto compute the trigger date as usual, and then move back the specified
  473. Xnumber of days.  For example:
  474. X.PP
  475. X.nf
  476. X    REM Mon 1 -7 MSG Last Monday of every month.
  477. X.fi
  478. X.PP
  479. XThis works by finding the first Monday of every month, and then moving
  480. X"back" seven days.  This results in the last Monday of the previous
  481. Xmonth.  (Warning:  If you have global 
  482. X.I OMITs, 
  483. Xthis might not work - see
  484. Xthe 
  485. X.I OMIT 
  486. Xcommand.)
  487. X.PP
  488. XAnother example is:
  489. X.PP
  490. X.nf
  491. X    REM 1 -1 MSG Last day of every month.
  492. X.fi
  493. X.PP
  494. XSince we don't know how many days are in a month, to get to the last day
  495. Xof a month, we go to the first day of the next month and then move back
  496. Xone day.
  497. X.PP
  498. X.B Remind
  499. Xwill automatically scan forwards and backwards until it finds a suitable
  500. Xtrigger date.  Note that large
  501. X.I back
  502. Xvalues can lead to a lot of backtracking and slow the execution of
  503. X.B remind.
  504. X.PP
  505. X.B ADVANCE WARNING
  506. X.PP
  507. X.B Remind
  508. Xcan warn you of an upcoming reminder as far in advance as you desire.  This
  509. Xis specified by a
  510. X.I delta,
  511. Xwhich is a positive number preceded by a "+" sign.  For example:
  512. X.PP
  513. X.nf
  514. X    REM 8 Jan 1992 +3 MSG Test1
  515. X    REM 1 +1 MSG Test2
  516. X.fi
  517. X.PP
  518. XThe reminder "Test1" will be triggered on the 8th of January, 1992, as well
  519. Xas the 3 days preceding it.  All told, "Test1" will be triggered on the
  520. X5th through the 8th of January, 1992.
  521. X.PP
  522. XThe reminder "Test2" will be triggered on the first day of every month, as
  523. Xwell as the day before.  In effect, "Test2" will be triggered on the first
  524. Xand last day of every month.
  525. X.PP
  526. X.I Delta
  527. Xand
  528. X.I back
  529. Xcan be combined:
  530. X.PP
  531. X.nf
  532. X    REM Mon 1 -7 +3 MSG Test3
  533. X.fi
  534. X.PP
  535. XThe reminder "Test3" will be triggered on the last Monday of every month,
  536. Xas well as the three days preceding it.
  537. X.PP
  538. X.B REPEATING REMINDERS
  539. X.PP
  540. XThe
  541. X.I repeat
  542. Xcomponent in a reminder is a number preceded by an asterisk; for example,
  543. X"*14".  The
  544. X.I repeat
  545. Xis used to remind you of events which occur regularly after a specified
  546. Xstart date.  For example, suppose you get paid every second Thursday,
  547. Xand that your last payday was 8 November 1990.  The following reminder
  548. Xwould remind you of each payday 3 days in advance:
  549. X.PP
  550. X.nf
  551. X    REM 8 Nov 1990 *14 +3 MSG Payday is %b!
  552. X.fi
  553. X.PP
  554. XThe
  555. X.I repeat
  556. Xcomponent of "*14" would cause the reminder to be triggered every 14
  557. Xdays from the start date.
  558. X.PP
  559. XIn order to use a
  560. X.I repeat,
  561. Xyou must fully specify the start date.  That means that if
  562. Xyou use a
  563. X.I repeat,
  564. Xyou must specify the
  565. X.I month, day
  566. Xand
  567. X.I year.
  568. XYou can also specify
  569. X.I weekday, back
  570. Xand
  571. X.I local OMITs
  572. Xbut these only affect the calculation of the start date.  Once the
  573. Xstart date is calculated, the reminder is issued regularly every
  574. X.I repeat
  575. Xdays.  Note, in particular, that once the start date is calculated,
  576. X.B remind
  577. Xignores local and global
  578. X.I OMITs
  579. Xwhen calculating the trigger date.  The final trigger date is strictly
  580. Xa multiple of
  581. X.I repeat
  582. Xdays from the start date.
  583. X.PP
  584. X.B THE MSG KEYWORD
  585. X.PP
  586. XThe
  587. X.I MSG
  588. Xkeyword causes the remaining part of the line to be passed through a
  589. Xsubstitution filter and then printed to standard output whenever the
  590. Xreminder is triggered.  See the section "Substitution" for more information
  591. Xabout the substitution filter.
  592. X.PP
  593. X.B THE RUN KEYWORD
  594. X.PP
  595. XThe
  596. X.I RUN
  597. Xkeyword causes the remaining part of the line to be passed through the
  598. Xsubstitution filter and then passed to the default shell for execution
  599. Xwhenever the reminder is triggered.  If the
  600. X.B \-r
  601. Xcommand-line option is specified, all
  602. X.I REM
  603. Xcommands with the
  604. X.I RUN
  605. Xkeyword are ignored.
  606. X.PP
  607. X.B
  608. XGETTING REMINDED ONLY ONCE PER DAY
  609. X.PP
  610. XIf you run
  611. X.B remind
  612. Xfrom your
  613. X.I .login
  614. Xscript, you may only want certain reminders to be run once per day, not
  615. Xonce per login.  Typically, this is used to control
  616. X.I RUN
  617. Xcommands so that they only execute once per day.  To specify this,
  618. Xplace the
  619. X.I ONCE
  620. Xkeyword in the reminder file.  When
  621. X.B remind
  622. Xencounters a
  623. X.I ONCE
  624. Xkeyword, it checks the last-access date of the reminder file.  If it is
  625. Xequal to the current date,
  626. X.B remind
  627. Xassumes that the reminder file has already been run once, and ignored the
  628. Xreminder.  If you start
  629. X.B remind
  630. Xwith the
  631. X.B \-o
  632. Xcommand-line option,
  633. X.B remind
  634. Xignores the
  635. X.I ONCE
  636. Xkeyword.
  637. X.PP
  638. X.B LOCALLY OMITTING WEEKDAYS
  639. X.PP
  640. XA
  641. X.I REM
  642. Xcommand containing the
  643. X.I OMIT
  644. Xkeyword followed by a list of weekdays causes the
  645. X.I delta
  646. Xand
  647. X.I back
  648. Xto ignore the specified weekdays when counting days.  This is called a
  649. X.I local OMIT.
  650. XFor example:
  651. X.PP
  652. X.nf
  653. X    REM 1 +1 OMIT Sat Sun MSG Test4
  654. X.fi
  655. X.PP
  656. XThis reminder prints "Test4" on the first day of every month, as well
  657. Xas the previous day.  If, however, the first day of the month falls on
  658. Xa Sunday or Monday, the reminder is also triggered on the previous
  659. XFriday, since the
  660. X.I delta
  661. Xof +1 does not count Saturdays or Sundays when moving backwards.  Here's
  662. Xanother example:
  663. X.PP
  664. X.nf
  665. X    REM 1 -1 +1 OMIT Sat Sun MSG Test5
  666. X.fi
  667. X.PP
  668. XThis reminder is triggered on the last working day of each month, as well
  669. Xas the working day preceding it.  Let's look at it in detail:
  670. X.PP
  671. XThe
  672. X.I day
  673. Xof "1" specifies the first day of each month.  The
  674. X.I back
  675. Xof "-1" tells
  676. X.B remind
  677. Xto go backwards by one day, not counting Saturday and Sunday as it moves.
  678. XThis takes us the the last working day of the preceding month, which is the
  679. Xtrigger date.  The
  680. X.I delta
  681. Xof "+1" ensures that the reminder will be triggered on the day preceding
  682. Xthis trigger date also.  Finally, if the trigger date happens to be
  683. Xa Monday, the
  684. X.I delta
  685. Xcombined with the
  686. X.I local OMIT
  687. Xcauses the reminder to be triggered on the Friday (and Saturday and Sunday)
  688. Xpreceding the trigger date.
  689. X.PP
  690. X.B THE AT KEYWORD
  691. X.PP
  692. XReminders with the
  693. X.I AT
  694. Xkeyword are called "timed reminders" or "AT reminders."  The
  695. X.I AT
  696. Xkeyword must be followed by a
  697. X.I time,
  698. Xwhich is a time in 24-hour format, from 0:00 to 23:59.  The
  699. X.I time
  700. Xmust be of the form \fIhh\fR:\fImm\fR.
  701. XAlso, after the
  702. X.I AT
  703. Xkeyword, you can supply a
  704. X.I tdelta
  705. Xand a
  706. X.I trepeat.
  707. XThese have the same form as a
  708. X.I delta
  709. Xand a
  710. X.I repeat.
  711. XIn other words, a
  712. X.I tdelta
  713. Xis a number preceded by a "+" sign, and a
  714. X.I trepeat
  715. Xis a number preceded by an asterisk.
  716. X.PP
  717. XWhen
  718. X.B remind
  719. Xencounters a timed reminder, it examines the actual trigger date.  This
  720. Xis the date specified by the date_spec, not counting any
  721. X.I delta
  722. Xwhich may be present.  If the trigger date is the same as the current
  723. Xdate, the timed reminder will be placed on a queue in addition to
  724. Xbeing triggered like a normal reminder.  (If you supply the
  725. X.B \-a
  726. Xcommand-line option, a timed reminder which would be queued will not
  727. Xbe triggered like a normal reminder.)  After
  728. X.B remind
  729. Xhas finished processing the reminder file, it starts up a background
  730. Xprocess to trigger all the queued timed reminders.  As each reminder's
  731. Xtrigger time is reached, it is triggered.  Thus, you can have
  732. X.B remind
  733. Xissue reminders just before important meetings or time-sensitive tasks.
  734. X.PP
  735. XThe
  736. X.I tdelta
  737. Xand
  738. X.I trepeat
  739. Xare interpreted in minutes.  This is how they work:
  740. X.PP
  741. X.nf
  742. X    REM AT 17:00 +60 *15 MSG Hello!
  743. X.fi
  744. X.PP
  745. XThis timed reminder has a trigger time of 5:00pm.  It is also triggered
  746. Xone hour before 5:00pm (because of the
  747. X.I tdelta
  748. Xof +60)
  749. Xand every 15 minutes thereafter until 5:00pm (because of the
  750. X.I trepeat
  751. Xof +15.)  All told, the reminder would be triggered at 4:00pm, 4:15pm,
  752. X4:30pm, 4:45pm and 5:00pm.
  753. X.PP
  754. X.nf
  755. X    REM Fri AT 17:00 +45 *30 MSG Work ends at 5!!
  756. X.fi
  757. X.PP
  758. XThis timed reminder would be placed on the queue every Friday.  It
  759. Xwould be triggered at 4:15pm, 4:45pm and 5:00pm every Friday.  Note
  760. Xthat a timed reminder is always triggered at the time specified
  761. Xafter the
  762. X.I AT
  763. Xkeyword, even if the
  764. X.I tdelta
  765. Xis not a multiple of
  766. X.I trepeat.
  767. X.PP
  768. XIf a reminder has a regular
  769. X.I delta,
  770. Xit will not be queued unless the current system date equals the actual
  771. Xtrigger date.  Thus:
  772. X.PP
  773. X.nf
  774. X    REM Fri +1 AT 17:00 MSG Go home at 5:00!
  775. X.fi
  776. X.PP
  777. XOn Thursdays, this reminder would simply be treated as a regular reminder
  778. Xand printed.  On Fridays, however, it would be queued for timed triggering.
  779. XNote that the
  780. X.B \-q
  781. Xcommand-line option causes
  782. X.B remind
  783. Xto treat timed reminders as normal reminders, and not queue them.
  784. X.SH THE OMIT COMMAND
  785. X.I OMIT
  786. Xexists as a separate command as well as a keyword within a
  787. X.I REM
  788. Xstatement.  When used as a separate command, it is called a
  789. X.I global OMIT,
  790. Xand has the following form:
  791. X.RS
  792. XOMIT
  793. X.I day
  794. X.I month
  795. X[
  796. X.I year
  797. X]
  798. X.RE
  799. XThe arguments can be specified in any order.
  800. X.PP
  801. XThe form without the
  802. X.I year
  803. Xcomponent is used for holidays which fall on the same date each year.
  804. XFor example:
  805. X.PP
  806. X.nf
  807. X    OMIT 25 December    # Christmas
  808. X    OMIT  1 January        # New Year's Day
  809. X.fi
  810. X.PP
  811. X(Note that
  812. X.I OMIT
  813. Xcan have a following comment on the same line, unlike the
  814. X.I REM
  815. Xcommand.)
  816. X.PP
  817. XThe form with the
  818. X.I year
  819. Xcomponent is used for holidays which vary from year to year.  For example:
  820. X.PP
  821. X.nf
  822. X    OMIT 12 October 1990    # Columbus Day 1990
  823. X    OMIT 22 November 1990    # Thanksgiving Day 1990
  824. X.fi
  825. X.PP
  826. XIn its debugging messages,
  827. X.B remind
  828. Xcalls the first form a
  829. X.I partially-specified global OMIT
  830. Xand the second form a
  831. X.I fully-specified global OMIT.
  832. X.PP
  833. XThe dates specified by
  834. X.I global OMITs
  835. Xare omitted by the
  836. X.I back
  837. Xand
  838. X.I delta
  839. Xportions of a reminders, in addition to any
  840. X.I local OMITs.
  841. XFor example:
  842. X.PP
  843. X.nf
  844. X    OMIT 25 December
  845. X    REM 26 +1 OMIT Sat Sun MSG Test6
  846. X.fi
  847. X.PP
  848. XThis would issue a reminder on the 26th of each month, as well as the
  849. Xpreceding working day.  Also, on the 24th of December 1990, the reminder
  850. Xwould be issued.  Even though the 25th of December 1990 is a Tuesday, the
  851. X.I global OMIT
  852. Xwould cause the
  853. X.I delta
  854. Xto skip it.
  855. X.PP
  856. X.I Global OMITs
  857. Xare in force for all reminders following them in the reminder file.  Thus,
  858. Xyou could have a series of reminders for which
  859. X.I global OMITs
  860. Xare inappropriate (such as birthdays or reminders which rely on
  861. X.I back
  862. Xto get to a specific weekday) ahead of any
  863. X.I global OMITs,
  864. Xwith business reminders (for which omission of holidays is appropriate)
  865. Xfollowing the
  866. X.I global OMITs.
  867. X.SH THE INCLUDE COMMAND
  868. XThe
  869. X.I INCLUDE
  870. Xcommand has the following form:
  871. X.RS
  872. XINCLUDE
  873. X.I filename
  874. X.RE
  875. XThis causes
  876. X.B remind
  877. Xto suspend the current file and read the contents of the specified
  878. X.I filename.
  879. XOnce that file has been read,
  880. X.B remind
  881. Xcontinues reading the original file from where it left off.
  882. X.I INCLUDE
  883. Xcommands can be nested to a depth of 10.
  884. X.PP
  885. X.I INCLUDE
  886. Xallows you or someone else to maintain a file of holidays or system-wide
  887. Xreminders that everyone should get.  For example, your reminder file could
  888. Xlook something like this:
  889. X.PP
  890. X.nf
  891. X    #!/usr/local/bin/remind
  892. X    #
  893. X    # Place personal stuff here - birthdays, etc.
  894. X
  895. X    # Now get system-wide global OMITS (holidays)
  896. X    INCLUDE /usr/share/holidays
  897. X
  898. X    # and system-wide reminders
  899. X    INCLUDE /usr/share/reminders
  900. X
  901. X    # Place local business stuff here.
  902. X.fi
  903. X.PP
  904. XThe
  905. X.I ONCE
  906. Xkeyword operates on the last-access date of the top-level file.
  907. XThe access dates of
  908. X.I INCLUDEd
  909. Xfiles are not used to control the operation of the
  910. X.I ONCE
  911. Xkeyword.
  912. X.SH SUBSTITUTION
  913. XBefore being processed, the body of a
  914. X.I REM
  915. Xcommand is passed through a substitution filter.  The filter scans for
  916. Xsequences "%x" where "x" is any letter and certain other characters,
  917. X and performs substitutions as
  918. Xshown below.  (All dates refer to the trigger date of the reminder.)
  919. X.TP
  920. X.B %a
  921. Xis replaced with "on \fIweekday, day month, year\fR"
  922. X.RS
  923. XFor example, consider the reminder:
  924. X.PP
  925. XREM 18 Oct 1990 +4 MSG Meeting with Bob %a.
  926. X.PP
  927. XOn 16 October 1990, it would print "Meeting with Bob on Thursday, 18 October,
  928. X1990."
  929. X.PP
  930. XOn 17 October 1990, it would print "Meeting with Bob tomorrow."
  931. X.PP
  932. XOn 18 October 1990, it would print "Meeting with Bob today."
  933. X.RE
  934. X.TP
  935. X.B %b
  936. Xis replaced with "in \fIdiff\fR day's time" where
  937. X.I diff
  938. Xis the
  939. X.B actual
  940. Xnumber of days between the current date and the trigger date.
  941. X(\fIOMITs\fR have no effect.)
  942. X.RS
  943. XFor example, consider:
  944. X.PP
  945. XREM 18 Oct 1990 +4 MSG Meeting with Bob %b.
  946. X.PP
  947. XOn 16 October 1990, it would print "Meeting with Bob in 2 days' time."
  948. X.PP
  949. XOn 17 October 1990, it would print "Meeting with Bob tomorrow."
  950. X.PP
  951. XOn 18 October 1990, it would print "Meeting with Bob today."
  952. X.RE
  953. X.TP
  954. X.B %c
  955. Xis replaced with "on \fIweekday\fR"
  956. X.RS
  957. XExample: REM 18 Oct 1990 +4 MSG Meeting with Bob %c.
  958. X.PP
  959. XOn 16 October 1990, it would print "Meeting with Bob on Thursday."
  960. X.PP
  961. XOn 17 October 1990, it would print "Meeting with Bob tomorrow."
  962. X.PP
  963. XOn 18 October 1990, it would print "Meeting with Bob today."
  964. X.RE
  965. X.TP
  966. X.B %d
  967. Xis replaced with "\fIday\fR", the day of the month.
  968. X.TP
  969. X.B %e
  970. Xis replaced with "on \fIdd/mm/yyyy\fR"
  971. X.TP
  972. X.B %f
  973. Xis replaced with "on \fImm/dd/yyyy\fR"
  974. X.TP
  975. X.B %g
  976. Xis replaced with "on \fIweekday, day month\fR"
  977. X.TP
  978. X.B %h
  979. Xis replaced with "on \fIdd/mm\fR"
  980. X.TP
  981. X.B %i
  982. Xis replaced with "on \fImm/dd\fR"
  983. X.TP
  984. X.B %j
  985. Xis replaced with "on \fIweekday, month day-th, year\fR"  This form appends the
  986. Xcharacters "st", "nd", "rd" or "th" to the day of the month, as appropriate.
  987. X.TP
  988. X.B %k
  989. Xis replaced with "on \fIweekday, month day-th\fR"
  990. X.TP
  991. X.B %l
  992. Xis replaced with "on \fIyyyy/mm/dd\fR"
  993. X.TP
  994. X.B %m
  995. Xis replaced with "\fImonth\fR", the name of the month.
  996. X.TP
  997. X.B %n
  998. Xis replaced with the number (1 to 12) of the month.
  999. X.TP
  1000. X.B %o
  1001. Xis replaced with " (today)" if and only if the current system date is the same
  1002. Xas the date being used by
  1003. X.B remind
  1004. Xas the current date.  Recall that you can specify a date for
  1005. X.B remind
  1006. Xto use on the command line.  This substitution is not generally useful in a
  1007. X.I REM
  1008. Xcommand, but is useful in a
  1009. X.I BANNER
  1010. Xstatement.  (See the section "The BANNER Command.)
  1011. X.TP
  1012. X.B %p
  1013. Xis replaced with "s" if the
  1014. X.I diff
  1015. Xbetween the current date and the trigger date is not 1.  You can use this
  1016. Xto construct reminders like:
  1017. X.RS
  1018. XREM 1 Jan +4 MSG %x day%p to go before New Year!
  1019. X.RE
  1020. X.TP
  1021. X.B %q
  1022. Xis replaced with "'s" if the
  1023. X.I diff
  1024. Xbetween the trigger date and the current date is 1.  Otherwise, it is replaced
  1025. Xwith "s'"  This can be used as follows:
  1026. X.RS
  1027. XREM 1 Jan +4 MSG New Year in %x day%q time!
  1028. X.RE
  1029. X.TP
  1030. X.B %r
  1031. Xis replaced with the day of the month (01 to 31) padded with a leading zero
  1032. Xif needed to pad to two digits.
  1033. X.TP
  1034. X.B %s
  1035. Xis replaced with "st", "nd", "rd" or "th" depending on the day of the month.
  1036. X.TP
  1037. X.B %t
  1038. Xis replaced with the number of the month (01 to 12) padded to two digits
  1039. Xwith a leading zero.
  1040. X.TP
  1041. X.B %u
  1042. Xis replaced with "on \fIweekday, day-th month, year\fR"  This is similar
  1043. Xto
  1044. X.B %a
  1045. Xexcept that "st", "nd", "rd" or "th" is added to the
  1046. X.I day
  1047. Xas appropriate.
  1048. X.TP
  1049. X.B %v
  1050. Xis replaced with "on \fIweekday, day-th month\fR"
  1051. X.TP
  1052. X.B %w
  1053. Xis replaced with "\fIweekday\fR", the name of the day of the week.
  1054. X.TP
  1055. X.B %x
  1056. Xis replaced with the
  1057. X.I diff
  1058. Xbetween the current date and the trigger date.  The
  1059. X.I diff
  1060. Xis defined as the actual number of days between these two dates;
  1061. X.I OMITs
  1062. Xare not counted.  (Strict date subtraction is performed.)
  1063. X.TP
  1064. X.B %y
  1065. Xis replaced with "\fIyear\fR", the year of the trigger date.
  1066. X.TP
  1067. X.B %z
  1068. Xis replaced with "\fIyy\fR", the last two digits of the year.
  1069. X.TP
  1070. X.B %_
  1071. X(percent-underscore) is replaced with a newline.  You can use this to
  1072. Xachieve multi-line reminders.
  1073. X.TP
  1074. X.B %1
  1075. Xis replaced with "now", "\fIm\fR minutes from now", "\fIm\fR minutes ago",
  1076. X"\fIh\fR hours from now", "\fIh\fR hours ago", "\fIh\fR hours and \fIm\fR
  1077. Xminutes from now" or "\fIh\fR hours and \fIm\fR minutes ago", as appropriate
  1078. Xfor a timed reminder.  Note that unless you specify the \fB\-a\fR option,
  1079. Xtimed reminders will be triggered like normal reminders, and thus a timed
  1080. Xreminder which occurred earlier in the day may be triggered.  This
  1081. Xcauses the need for the "...ago" forms.
  1082. X.TP
  1083. X.B %2
  1084. Xis replaced with "at \fIhh\fR:\fImm\fRam" or "..pm" depending on the
  1085. X.I AT
  1086. Xtime of the reminder.
  1087. X.TP
  1088. X.B %3
  1089. Xis replaced with "at \fIhh\fR:\fImm\fR" in 24-hour format.
  1090. X.TP
  1091. X.B %4
  1092. Xis replaced with "\fImm\fR" where \fImm\fR is the number of minutes between
  1093. X"now" and the time specified by \fIAT\fR.  If the \fIAT\fR time is
  1094. Xearlier than the current time, then the result is negative.
  1095. X.TP
  1096. X.B %5
  1097. Xis replaced with "\fIma\fR" where \fIma\fR is the absolute value of the number
  1098. Xproduced by \fB%4\fR.
  1099. X.TP
  1100. X.B %6
  1101. Xis replaced with "ago" or "from now", depending on the relationship between
  1102. Xthe \fIAT\fR time and the current time.
  1103. X.TP
  1104. X.B %7
  1105. Xis replaced with the number of hours between the \fIAT\fR time and the
  1106. Xcurrent time.  It is always non-negative.
  1107. X.TP
  1108. X.B %8
  1109. Xis replaced with the number of minutes between the \fIAT\fR time and
  1110. Xthe current time, after the hours (\fB%7\fR) have been subtracted out.
  1111. XThis is a number ranging from 0 to 59.
  1112. X.TP
  1113. X.B %9
  1114. Xis replaced with "s" if the value produced by \fB%8\fR is not 1.
  1115. X.TP
  1116. X.B %0
  1117. Xis replaced with "s" if the value produced by \fB%7\fR is not 1.
  1118. X.TP
  1119. X.B %!
  1120. Xis replaced with "is" if the current time is before the \fIAT\fR time,
  1121. Xor "was" if it is after.
  1122. X.TP
  1123. X.B 
  1124. X%"
  1125. X(percent-doublequote) is removed.  This sequence is not 
  1126. Xused by the substitution filter,
  1127. Xbut is used to tell \fBremind\fR which text to include in a calendar
  1128. Xentry when the \fB\-c\fR option is chosen.  See the section "Producing
  1129. Xa Calendar"
  1130. X.PP
  1131. XNotes:
  1132. X.TP
  1133. Xo
  1134. X.B Remind
  1135. Xnormally prints a blank line after each reminder; if the last character
  1136. Xof the body is '%', the blank line will not be printed.
  1137. X.TP
  1138. Xo
  1139. XSubstitutions a, b, c, e, f, g, h, i, j, k, l, u and v all are replaced
  1140. Xwith "today" if the current date equals the trigger date, or "tomorrow"
  1141. Xif the trigger date is one day after the current date.  Thus, they are
  1142. X.B not
  1143. Xthe same as substitutions built up from the simpler %w, %y, etc.
  1144. Xsequences.
  1145. X.TP
  1146. Xo
  1147. XAny of the substitutions dealing with time (0 through 9 and '!')
  1148. Xproduce undefined results if used in a reminder which does not have
  1149. Xan \fIAT\fR keyword.  Also, if a reminder has a \fIdelta\fR and may
  1150. Xbe triggered on several days, the time substitutions ignore the date.  Thus,
  1151. Xthe \fB%1\fR substitution may report that a meeting is in 15 minutes, for
  1152. Xexample, even though it may only be in 2 days time, because a \fIdelta\fR has
  1153. Xtriggered the reminder.  It is recommended that you use the time substitutions
  1154. Xonly in timed reminders with no \fIdelta\fR which are designed to be
  1155. Xqueued for timed activation.
  1156. X.TP 
  1157. Xo
  1158. XCapital letters can be used in the substitution sequence, in which case
  1159. Xthe first character of the substituted string is capitalized (if it is
  1160. Xnormally a lower-case letter.)
  1161. X.TP 
  1162. Xo
  1163. XAll other characters following a "%" sign are simply copied.  In particular,
  1164. Xto get a "%" sign out, use "%%" in the body.  To start the body of a reminder
  1165. Xwith a space, use "% ", since
  1166. X.B remind
  1167. Xnormally scans for the first non-space character after a
  1168. X.I MSG
  1169. Xor
  1170. X.I RUN
  1171. Xtoken.
  1172. X.SH PRODUCING A CALENDAR
  1173. XIf you provide the \fB\-c\fR option, the \fBremind\fR will scan your
  1174. Xreminder file and produce a calendar with your reminders entered on the
  1175. Xappropriate dates.
  1176. X.PP
  1177. XWhen you produce a calendar, \fBremind\fR will \fBnot\fR pass the text
  1178. Xthrough the substitution mechanism.  Thus, you must indicate to \fBremind\fR
  1179. Xwhich portions of the text should be placed in the calendar.  This is done
  1180. Xwith the \fB%"\fR sequence.  Here's an example:
  1181. X.PP
  1182. X.nf
  1183. X    REM 6 Jan +6 MSG %"David's birthday%" is %a.
  1184. X.fi
  1185. X.PP
  1186. XWhen you run \fBremind\fR normally, it executes the reminder as if the
  1187. X.B 
  1188. X%"
  1189. Xsequences were not there.  When you produce a calendar with the \fB\-c\fR
  1190. Xoption, however, only the text "David's birthday" is entered into the
  1191. Xcalendar.  For convenience, timed reminders are sorted by time before
  1192. Xbeing entered into the calendar, and the time of each reminder is printed
  1193. Xbefore the reminder text.
  1194. X.PP
  1195. XNote that only \fIMSG\fR reminders are included in the calendar; \fIRUN\fR
  1196. Xreminders are ignored.  If you indicate empty text for the calendar entry
  1197. Xwith the sequence \fB%"%"\fR, then the reminder is ignored when producing
  1198. Xthe calendar.
  1199. X.SH THE BANNER COMMAND
  1200. XWhen
  1201. X.B remind
  1202. Xissues reminders, it normally prints a message saying:
  1203. X.PP
  1204. X"Reminders for \fIweekday, day-th month, year\fR (today):"
  1205. X.PP
  1206. X(If you supply a date on the command line different from the system date,
  1207. Xthe "(today)" portion is omitted.)
  1208. X.PP
  1209. XYou can change this default to anything you want with the
  1210. X.I BANNER
  1211. Xcommand.  It should appear in the reminder file before any
  1212. X.I REM
  1213. Xcommands.  (This is not enforced, but a
  1214. X.I BANNER
  1215. Xcommand encountered after a reminder has been triggered will be ignored.)
  1216. X.PP
  1217. XThe format of
  1218. X.I BANNER
  1219. Xis:
  1220. X.PP
  1221. XBANNER
  1222. X.I string
  1223. X.PP
  1224. XThe
  1225. X.I string
  1226. Xis passed through the substitution mechanism described before, using the
  1227. Xcurrent date and time for substitution.  The standard banner is described by:
  1228. X.PP
  1229. X.nf
  1230. X    BANNER Reminders for %w, %d%s %m, %y%o:
  1231. X.fi
  1232. X.PP
  1233. XYou can have a blank banner by using:
  1234. X.PP
  1235. X.nf
  1236. X    BANNER %
  1237. X.fi
  1238. X.PP
  1239. X.SH PURGING REMINDER FILES
  1240. XYou should periodically purge your reminder file of "expired"
  1241. X.I REM
  1242. Xcommands and global
  1243. X.I OMITs.
  1244. XThese are reminders which took place in the past and can never occur
  1245. Xagain, or
  1246. X.I OMITs
  1247. Xwhich are for past years.  Of course, only
  1248. X.I REMs
  1249. Xand
  1250. X.I OMITs
  1251. Xwith the
  1252. X.I year
  1253. Xspecified can ever expire.
  1254. X.PP
  1255. XTo purge your reminder file, run
  1256. X.B remind
  1257. Xin
  1258. X.I purge
  1259. Xmode.  This mode simply echoes non-expired lines to standard output, and
  1260. Xexpired lines to standard error.  Thus, to purge a file, you could type:
  1261. X.PP
  1262. X.nf
  1263. X    REMIND -p notes.old > notes.new
  1264. X.fi
  1265. X.PP
  1266. XThe file "notes.new" would contain all non-expired lines from "notes.old."
  1267. XAll expired lines are echoed to the screen.
  1268. X.I INCLUDEd
  1269. Xfiles are read and processed, but not purged.  You must purge each
  1270. X.I INCLUDEd
  1271. Xfile separately.
  1272. X.PP
  1273. XYou can supply a date on the command line when purging, but beware:  If you
  1274. Xsupply a date in the future, you may inadvertently purge lines which have not
  1275. Xreally expired yet.
  1276. X.SH DEBUGGING A REMINDER FILE
  1277. XThe debug command-line option \-d is used to debug reminder files.  It tells
  1278. Xyou useful information about the reminder file.  It displays the trigger date
  1279. Xof each reminder, and places an asterisk by those which would be issued
  1280. Xon the current date.  It also informs you of
  1281. X.I OMITs
  1282. Xwhich have expired, and gives warnings about situations which could lead
  1283. Xto long execution times or unexpected results.
  1284. X.PP
  1285. XAll debugging messages are sent to standard error.
  1286. X.SH EXAMPLES OF REMINDERS
  1287. XThis section is a sampling of what you can do with \fBremind\fR.
  1288. X.PP
  1289. X.nf
  1290. X    REM 5 Feb 1991 AT 14:00 +45 *30 \\
  1291. X    RUN mail -s "Meeting %2" $LOGNAME </dev/null
  1292. X.fi
  1293. X.PP
  1294. XOn 5 Februrary, 1991, this reminder will mail 
  1295. Xyou reminders of a 2:00pm meeting at 1:15, 
  1296. X1:45 and 2:00.  The subject of the mail message will be "Meeting at 2:00pm"
  1297. Xand the body of the message will be blank.
  1298. X.PP
  1299. X.nf
  1300. X    REM AT 17:00 RUN echo "5:00pm - GO HOME!" > /tmp/rem.$$; \\
  1301. X    xterm -g 80x25+0+0 -e view /tmp/rem.$$; rm -f /tmp/rem.$$
  1302. X.fi
  1303. X.PP
  1304. XThis reminder will pop up an xterm at 5:00pm every day.  The xterm
  1305. Xwill execute view (read-only "vi") on a file which reads "5:00pm - GO HOME!"
  1306. X.PP
  1307. X.nf
  1308. X    remind -c12 /dev/null 1 Jan 1991
  1309. X.fi
  1310. X.PP
  1311. XThis invocation of \fBremind\fR will cause it to print a calendar for
  1312. X1991, with all entries left blank.
  1313. X.SH AUTHOR
  1314. XDavid F. Skoll
  1315. X.SH BUGS
  1316. X.B Remind
  1317. Xwas originally written for MS-DOS and ported to UNIX.  It does some things
  1318. Xin an ungainly way.
  1319. X.PP
  1320. XDate calculation algorithms are fairly "brute force."
  1321. X.PP
  1322. XThe MS-DOS version of \fBremind\fR does not support queuing or timed
  1323. Xactivation of reminders.  It does, however, support the other semantics
  1324. Xof the \fIAT\fR keyword.
  1325. SHAR_EOF
  1326. $TOUCH -am 1116130390 remind.1 &&
  1327. chmod 0600 remind.1 ||
  1328. echo "restore of remind.1 failed"
  1329. set `wc -c remind.1`;Wc_c=$1
  1330. if test "$Wc_c" != "32451"; then
  1331.     echo original size 32451, current size $Wc_c
  1332. fi
  1333. fi
  1334. # ============= remind.mak ==============
  1335. if test X"$1" != X"-c" -a -f 'remind.mak'; then
  1336.     echo "File already exists: skipping 'remind.mak'"
  1337. else
  1338. echo "x - extracting remind.mak (Text)"
  1339. sed 's/^X//' << 'SHAR_EOF' > remind.mak &&
  1340. X# Simple-minded MAKE file.
  1341. X
  1342. XHEADERS = globals.h protos.h defines.h
  1343. XWARN = /W3
  1344. Xmain.obj: main.c $(HEADERS)
  1345. X   cl $(WARN) /AS /Fomain.obj /c main.c
  1346. X
  1347. Xnextdate.obj: nextdate.c $(HEADERS)
  1348. X   cl $(WARN) /AS /Fonextdate.obj /c nextdate.c
  1349. X
  1350. Xdorem.obj: dorem.c $(HEADERS)
  1351. X   cl $(WARN) /AS /Fodorem.obj /c dorem.c
  1352. X
  1353. Xinit.obj: init.c $(HEADERS)
  1354. X   cl $(WARN) /AS /Foinit.obj /c init.c
  1355. X
  1356. Xdosubst.obj: dosubst.c
  1357. X   cl $(WARN) /AS /Fodosubst.obj /c dosubst.c
  1358. X
  1359. Xfiles.obj: files.c
  1360. X   cl $(WARN) /AS /Fofiles.obj /c files.c
  1361. X
  1362. Xcalendar.obj: calendar.c
  1363. X   cl $(WARN) /AS /Focalendar.obj /c calendar.c
  1364. X
  1365. Xcache.obj: cache.c
  1366. X   cl $(WARN) /AS /Focache.obj /c cache.c
  1367. X
  1368. Xremind.exe: main.obj nextdate.obj dorem.obj init.obj dosubst.obj files.obj calendar.obj cache.obj
  1369. X   cl /Feremind.exe main.obj nextdate.obj dorem.obj init.obj dosubst.obj files.obj calendar.obj cache.obj
  1370. X
  1371. SHAR_EOF
  1372. $TOUCH -am 1116093790 remind.mak &&
  1373. chmod 0600 remind.mak ||
  1374. echo "restore of remind.mak failed"
  1375. set `wc -c remind.mak`;Wc_c=$1
  1376. if test "$Wc_c" != "847"; then
  1377.     echo original size 847, current size $Wc_c
  1378. fi
  1379. fi
  1380. echo "End of part 4, continue with part 5"
  1381. exit 0
  1382.