home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / sun / volume1 / calentool / patch4a / patches04a
Encoding:
Text File  |  1989-10-26  |  48.7 KB  |  2,071 lines

  1. Index: patchlevel.h
  2. Prereq: 2.3
  3. *** /tmp/,RCSt1a06183    Tue Sep 19 06:20:43 1989
  4. --- patchlevel.h    Tue Sep 19 06:20:19 1989
  5. ***************
  6. *** 1,5
  7.   /*
  8. !  * $Header: patchlevel.h,v 2.3 89/05/16 16:31:28 billr Exp $
  9.    */
  10.   /*
  11.    * patchlevel.h - current patchlevel of calentool program
  12.  
  13. --- 1,5 -----
  14.   /*
  15. !  * $Header: patchlevel.h,v 2.5 89/09/19 06:19:56 billr Exp $
  16.    */
  17.   /*
  18.    * patchlevel.h - current patchlevel of calentool program
  19. ***************
  20. *** 5,8
  21.    * patchlevel.h - current patchlevel of calentool program
  22.    */
  23.   
  24. ! #define PATCHLEVEL    2
  25.  
  26. --- 5,8 -----
  27.    * patchlevel.h - current patchlevel of calentool program
  28.    */
  29.   
  30. ! #define PATCHLEVEL    4
  31. *** /tmp/,RCSt1a06154    Tue Sep 19 06:18:16 1989
  32. --- PATCHLOG    Tue Sep 19 06:17:30 1989
  33. ***************
  34. *** 1,4
  35. ! # $Header: PATCHLOG,v 2.3 89/05/16 16:32:23 billr Exp $
  36.   
  37.   #$Log:    PATCHLOG,v $
  38.   # Revision 2.3  89/05/16  16:32:23  billr
  39.  
  40. --- 1,4 -----
  41. ! # $Header: PATCHLOG,v 2.5 89/09/19 06:17:10 billr Exp $
  42.   
  43.   #$Log:    PATCHLOG,v $
  44.   # Revision 2.5  89/09/19  06:17:10  billr
  45. ***************
  46. *** 1,6
  47.   # $Header: PATCHLOG,v 2.3 89/05/16 16:32:23 billr Exp $
  48.   
  49.   #$Log:    PATCHLOG,v $
  50.   # Revision 2.3  89/05/16  16:32:23  billr
  51.   # Fix bug whereby nfs mounted appointment files were not being
  52.   # properly updated.  Add support for PostScript pretty printing
  53.  
  54. --- 1,38 -----
  55.   # $Header: PATCHLOG,v 2.5 89/09/19 06:17:10 billr Exp $
  56.   
  57.   #$Log:    PATCHLOG,v $
  58. + # Revision 2.5  89/09/19  06:17:10  billr
  59. + # Patchlevel 4 of calentool. Fixes the following bug reports:
  60. + # 
  61. + # Bug fix in pcal.c for printing month of September <alexl@daemon.cna.tek.com>
  62. + # Bug fix for 386i machines when viewing long appointment strings <baron@neptune.cs.ucla.edu>
  63. + # Fix typos and clean up man page <rodgers@maxwell.mmwb.ucsf.edu>
  64. + # 
  65. + # Revision 2.4  89/08/11  08:34:47  billr
  66. + # Patchlevel 3 of calentool. Fixes the following bug reports:
  67. + # 
  68. + # Bug fix for moontool <kelvin%throop@acad.uucp>
  69. + # Bug fix/new version of passover() <amos@nsc.com>
  70. + # Bug in moon phase calculation <kent@tfd.com>, <ras@needle1.bellcore.com>, <roberts%studguppy@lanl.gov>, <darcic@lachlan.sts.te.com>
  71. + # Check return from get_defaults <ian@sq.com>
  72. + # Cleanup Makefile <casey@gauss.llnl.gov>
  73. + # Idea for monthly printout for terminal users <ian@sq.com>
  74. + # Makefile did not copy dates/computing to lib dir <jmc@ptsfa.pacbell.com>
  75. + # Missing arg for rotate function in ras2ps <jasmerb@hobbes.cs.orst.edu>
  76. + # More makefile cleanup <lwv27%chemabs@cis.ohio-state.edu>
  77. + # Off by one in mt2ct conversion <tom@cis.udel.edu>, <kas@cs.aber.ac.uk>, <paul%gill@uunet.uu.net>
  78. + # Optimize nr weeks calculation for month display <rwolff@noao.edu>
  79. + # Prevent calentool from sending mail when there are no appts <zander%trak@lanl.gov>, <john@math.nwu.edu>, <kayhan@cleopatra.usc.edu>
  80. + # Raster print command missing '-v' argument <hleroy@presto.irisa.fr>
  81. + # Scrambled moon icon on 386i <scott@cfi.com>, <lwv27%chemabs@cis.ohio-state.edu>, <syd@dsi.com>, <alfred@mcc.com>
  82. + # Seg fault when cursor moved to long appt entry (386i) <alfred@mcc.com>, <jmc@pbjmc.pacbell.com>, <baron@neptune.cs.ucla.edu>
  83. + # Set file access permissions on tmp file to match .appointments file <brooks@ge-dab.ge.com>
  84. + # Space date file <steve@prism.gatech.edu>
  85. + # Typo in man page "Save" file shoudl be "Update" file <lwv27%chemabs@cis.ohio-state.edu>
  86. + # Typo in riseset.c (tzp.minuteswest should be tzp.tz_minuteswest) <hleroy@presto.irisa.fr>, <correira@austin.lockheed.com>
  87. + # When deleteing an overlapping entry, background entry is not displayed <rgh@shell.uucp>
  88. + # Wrong week displayed when selecting a week in month display <rodgers@maxwell.mmwb.ucsf.edu>
  89. + #
  90.   # Revision 2.3  89/05/16  16:32:23  billr
  91.   # Fix bug whereby nfs mounted appointment files were not being
  92.   # properly updated.  Add support for PostScript pretty printing
  93. *** /tmp/,RCSt1a05523    Wed Jul 19 20:45:38 1989
  94. --- calentool.c    Wed Jul 19 20:26:26 1989
  95. ***************
  96. *** 1,5
  97.   /*
  98. !  * $Header: calentool.c,v 2.1 89/05/09 15:28:43 billr Exp $
  99.    */
  100.   /*
  101.    * calentool.c
  102.  
  103. --- 1,5 -----
  104.   /*
  105. !  * $Header: calentool.c,v 2.2 89/07/19 20:25:41 billr Exp $
  106.    */
  107.   /*
  108.    * calentool.c
  109. ***************
  110. *** 155,160
  111.   {
  112.       int   flag, i;
  113.       int   printit = 0, toolrunning = 1, user_pos = 0;
  114.       extern char *optarg;
  115.       
  116.       if (progname = rindex(*argv, '/'))
  117.  
  118. --- 155,161 -----
  119.   {
  120.       int   flag, i;
  121.       int   printit = 0, toolrunning = 1, user_pos = 0;
  122. +     int   printit_dst = 0;
  123.       extern char *optarg;
  124.       
  125.       if (progname = rindex(*argv, '/'))
  126. ***************
  127. *** 171,177
  128.       working_msg = 1;
  129.   
  130.       /*
  131. !      * Check for -p or -m option, which means we don't want
  132.        * to create the tool. Also check for -Wp so we can supply
  133.        * a resonable default if the user doesn't supply one.
  134.        */
  135.  
  136. --- 172,178 -----
  137.       working_msg = 1;
  138.   
  139.       /*
  140. !      * Check for -p, -P or -m option, which means we don't want
  141.        * to create the tool. Also check for -Wp so we can supply
  142.        * a resonable default if the user doesn't supply one.
  143.        */
  144. ***************
  145. *** 177,184
  146.        */
  147.       i = argc;
  148.       while (--i > 0) {
  149. !         if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "-m")
  150. !             || !strcmp(argv[i], "-P"))
  151.               toolrunning = 0;
  152.           if (!strcmp(argv[i], "-Wp"))
  153.               user_pos = 1;
  154.  
  155. --- 178,194 -----
  156.        */
  157.       i = argc;
  158.       while (--i > 0) {
  159. !         if (!strncmp(argv[i], "-p", 2) || !strcmp(argv[i], "-m")
  160. !             || !strncmp(argv[i], "-P", 2)) {
  161. !             /* standard getopt doesn't allow optional
  162. !              * arguments, so we do a check here for
  163. !              * obsolete usage of the -p option
  164. !              */
  165. !             if ((argv[i][1] == 'p' || argv[i][1] == 'P') &&
  166. !                 argv[i][2] == '\0') {
  167. !                 fprintf(stderr, "calentool: -p/-P requires a 'd', 'w' or 'm' argument\n");
  168. !                 exit(1);
  169. !             }
  170.               toolrunning = 0;
  171.           } else if (!strcmp(argv[i], "-Wp"))
  172.               user_pos = 1;
  173. ***************
  174. *** 180,186
  175.           if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "-m")
  176.               || !strcmp(argv[i], "-P"))
  177.               toolrunning = 0;
  178. !         if (!strcmp(argv[i], "-Wp"))
  179.               user_pos = 1;
  180.       }
  181.       if (toolrunning) {
  182.  
  183. --- 190,196 -----
  184.                   exit(1);
  185.               }
  186.               toolrunning = 0;
  187. !         } else if (!strcmp(argv[i], "-Wp"))
  188.               user_pos = 1;
  189.       }
  190.       if (toolrunning) {
  191. ***************
  192. *** 195,201
  193.                   0);
  194.       }
  195.   
  196. !     while ((flag = getopt(argc, argv, "57bd:f:im:opPrtu:zH:h:w")) != EOF)
  197.           switch (flag) {   
  198.               case 'f':    /* use this file */
  199.               otherfile = 1;
  200.  
  201. --- 205,211 -----
  202.                   0);
  203.       }
  204.   
  205. !     while ((flag = getopt(argc, argv, "57bd:f:im:op:P:rtu:zH:h:w")) != EOF)
  206.           switch (flag) {   
  207.               case 'f':    /* use this file */
  208.               otherfile = 1;
  209. ***************
  210. *** 212,218
  211.               
  212.               case 'p':    /* print and exit */
  213.               read_only = 1;
  214. !             printit = 1;
  215.               break;
  216.   
  217.               case 'P':    /* print and exit (ignore some notes) */
  218.  
  219. --- 222,246 -----
  220.               
  221.               case 'p':    /* print and exit */
  222.               read_only = 1;
  223. !             switch (*optarg) {
  224. !                 case 'd':
  225. !                 case 'D':
  226. !                     printit = PRI_DAY;
  227. !                     break;
  228. !                 case 'w':
  229. !                 case 'W':
  230. !                     printit = PRI_WEEK;
  231. !                     break;
  232. !                 case 'm':
  233. !                 case 'M':
  234. !                     printit = PRI_MONTH;
  235. !                     break;
  236. !                 default:
  237. !                     fprintf(stderr, "calentool: unknown print option.", NON_FATAL);
  238. !                     break;
  239. !             }
  240. !             if (!printit_dst)
  241. !                 printit_dst = DST_STDOUT;
  242.               break;
  243.   
  244.               case 'P':    /* print and exit (ignore some notes) */
  245. ***************
  246. *** 217,223
  247.   
  248.               case 'P':    /* print and exit (ignore some notes) */
  249.               read_only = 1;
  250. !             printit = 3;
  251.               break;
  252.   
  253.               case 'm':    /* mail today's appts and exit */
  254.  
  255. --- 245,269 -----
  256.   
  257.               case 'P':    /* print and exit (ignore some notes) */
  258.               read_only = 1;
  259. !             switch (*optarg) {
  260. !                 case 'd':
  261. !                 case 'D':
  262. !                     printit = PRI_DAY_XNOTES;
  263. !                     break;
  264. !                 case 'w':
  265. !                 case 'W':
  266. !                     printit = PRI_WEEK_XNOTES;
  267. !                     break;
  268. !                 case 'm':
  269. !                 case 'M':
  270. !                     printit = PRI_MONTH_XNOTES;
  271. !                     break;
  272. !                 default:
  273. !                     fprintf(stderr, "calentool: unknown print option.", NON_FATAL);
  274. !                     break;
  275. !             }
  276. !             if (!printit_dst)
  277. !                 printit_dst = DST_STDOUT;
  278.               break;
  279.   
  280.               case 'm':    /* mail today's appts and exit */
  281. ***************
  282. *** 222,228
  283.   
  284.               case 'm':    /* mail today's appts and exit */
  285.               read_only = 1;
  286. !             printit = 2;
  287.               mailto = optarg;
  288.               break;
  289.   
  290.  
  291. --- 268,274 -----
  292.   
  293.               case 'm':    /* mail today's appts and exit */
  294.               read_only = 1;
  295. !             printit_dst = DST_MAIL;
  296.               mailto = optarg;
  297.               break;
  298.   
  299. ***************
  300. *** 292,298
  301.                       holiday_s = 1;
  302.                       break;
  303.                   default:
  304. !                     fprintf(stderr, "unknown holiday option (must be one of \"Aacijs\")");
  305.                       break;
  306.               }
  307.               break;
  308.  
  309. --- 338,344 -----
  310.                       holiday_s = 1;
  311.                       break;
  312.                   default:
  313. !                     fprintf(stderr, "calentool: unknown holiday option (must be one of \"Aacijs\")");
  314.                       break;
  315.               }
  316.               break;
  317. ***************
  318. *** 326,332
  319.                       holiday_s = 2;
  320.                       break;
  321.                   default:
  322. !                     fprintf(stderr, "unknown holiday option (must be one of \"Aacijs\")");
  323.                       break;
  324.               }
  325.               break;
  326.  
  327. --- 372,378 -----
  328.                       holiday_s = 2;
  329.                       break;
  330.                   default:
  331. !                     fprintf(stderr, "calentool: unknown holiday option (must be one of \"Aacijs\")");
  332.                       break;
  333.               }
  334.               break;
  335. ***************
  336. *** 333,339
  337.   #else
  338.               case 'h':
  339.               case 'H':
  340. !                 fprintf(stderr, "-h and -H options not available\n");
  341.                   break;
  342.   #endif
  343.               case '?':
  344.  
  345. --- 379,385 -----
  346.   #else
  347.               case 'h':
  348.               case 'H':
  349. !                 fprintf(stderr, "calentool: -h and -H options not available\n");
  350.                   break;
  351.   #endif
  352.               case '?':
  353. ***************
  354. *** 341,348
  355.               fprintf(stderr, "usage: %s [options...]\nwhere <options> are:\n", progname);
  356.               fprintf(stderr, " -f <appointment_file>\n");
  357.               fprintf(stderr, " -r        // readonly\n");
  358. !             fprintf(stderr, " -p        // print selected days appts and exit\n");
  359. !             fprintf(stderr, " -P        // like -p, only don't print marked notes\n");
  360.               fprintf(stderr, " -m <user>    // mail selected days appts to <user>\n");
  361.               fprintf(stderr, " [-5|-7]    // 5-day or 7-day week display\n");
  362.               fprintf(stderr, " -d <date>    // display appts for <date>\n");
  363.  
  364. --- 387,394 -----
  365.               fprintf(stderr, "usage: %s [options...]\nwhere <options> are:\n", progname);
  366.               fprintf(stderr, " -f <appointment_file>\n");
  367.               fprintf(stderr, " -r        // readonly\n");
  368. !             fprintf(stderr, " -p <dwm>    // print selected day [d], week [w] or month [m] appts and exit\n");
  369. !             fprintf(stderr, " -P <dwm>    // like -p, only don't print marked notes\n");
  370.               fprintf(stderr, " -m <user>    // mail selected days appts to <user>\n");
  371.               fprintf(stderr, " [-5|-7]    // 5-day or 7-day week display\n");
  372.               fprintf(stderr, " -d <date>    // display appts for <date>\n");
  373. ***************
  374. *** 382,388
  375.       get_printer();
  376.       
  377.       if (printit) {
  378. !         print_apts(printit);
  379.           exit(0);
  380.       }
  381.   
  382.  
  383. --- 428,434 -----
  384.       get_printer();
  385.       
  386.       if (printit) {
  387. !         print_apts(printit, printit_dst);
  388.           exit(0);
  389.       }
  390.   
  391. ***************
  392. *** 630,636
  393.               close_day();
  394.           current = today;
  395.           err2console(TRUE);
  396. !         get_day_appts();
  397.           err2console(FALSE);
  398.           day_is_open = TRUE;
  399.           if (!new_day) {
  400.  
  401. --- 676,682 -----
  402.               close_day();
  403.           current = today;
  404.           err2console(TRUE);
  405. !         (void)get_day_appts();
  406.           err2console(FALSE);
  407.           day_is_open = TRUE;
  408.           if (!new_day) {
  409. ***************
  410. *** 769,775
  411.                   close_day();
  412.               current = Save;
  413.               err2console(TRUE);
  414. !             get_day_appts();
  415.               err2console(FALSE);
  416.               day_is_open = TRUE;
  417.           }
  418.  
  419. --- 815,821 -----
  420.                   close_day();
  421.               current = Save;
  422.               err2console(TRUE);
  423. !             (void)get_day_appts();
  424.               err2console(FALSE);
  425.               day_is_open = TRUE;
  426.           }
  427. *** /tmp/,RCSt1a05528    Wed Jul 19 20:45:42 1989
  428. --- ct.h    Wed Jul 19 20:26:54 1989
  429. ***************
  430. *** 1,5
  431.   /*
  432. !  * $Header: ct.h,v 2.1 89/05/09 14:25:13 billr Exp $
  433.    */
  434.   /*
  435.    * ct.h - header file for calentool
  436.  
  437. --- 1,5 -----
  438.   /*
  439. !  * $Header: ct.h,v 2.2 89/07/19 20:26:27 billr Exp $
  440.    */
  441.   /*
  442.    * ct.h - header file for calentool
  443. ***************
  444. *** 24,30
  445.   
  446.   /* directory for date/event files */
  447.   #ifndef DATELIB_DIR
  448. ! #    define DATELIB_DIR    "/usr/local/lib/calentool"
  449.   #endif
  450.   
  451.   #ifndef NOPRINTER
  452.  
  453. --- 24,30 -----
  454.   
  455.   /* directory for date/event files */
  456.   #ifndef DATELIB_DIR
  457. ! #    define DATELIB_DIR    "/usr/net/lib/calentool"
  458.   #endif
  459.   
  460.   #ifndef NOPRINTER
  461. ***************
  462. *** 34,39
  463.   #    endif
  464.   
  465.   /*#    define RASTER_ONLY    /* define this if no Postscript printer available */
  466.   #endif
  467.   
  468.   /* define NR_WEEKDAYS for desired week display */
  469.  
  470. --- 34,41 -----
  471.   #    endif
  472.   
  473.   /*#    define RASTER_ONLY    /* define this if no Postscript printer available */
  474. + #ifndef PS_NOTE_FONT
  475. + #       define PS_NOTE_FONT     "Helvetica-Narrow"
  476.   #endif
  477.   #endif
  478.   
  479. ***************
  480. *** 35,40
  481.   
  482.   /*#    define RASTER_ONLY    /* define this if no Postscript printer available */
  483.   #endif
  484.   
  485.   /* define NR_WEEKDAYS for desired week display */
  486.   /* NR_WEEKDAYS        display   */
  487.  
  488. --- 37,43 -----
  489.   #ifndef PS_NOTE_FONT
  490.   #       define PS_NOTE_FONT     "Helvetica-Narrow"
  491.   #endif
  492. + #endif
  493.   
  494.   /* define NR_WEEKDAYS for desired week display */
  495.   /* NR_WEEKDAYS        display   */
  496. ***************
  497. *** 197,202
  498.   #define NON_FATAL    0
  499.   #define FATAL        1
  500.   
  501.   #define STD_ICON    0        /* flags for icon currently displayed */
  502.   #define REV_ICON    1
  503.   #define NA_ICON        2
  504.  
  505. --- 200,206 -----
  506.   #define NON_FATAL    0
  507.   #define FATAL        1
  508.   
  509. + /* icon identifiers */
  510.   #define STD_ICON    0        /* flags for icon currently displayed */
  511.   #define REV_ICON    1
  512.   #define NA_ICON        2
  513. ***************
  514. *** 200,205
  515.   #define STD_ICON    0        /* flags for icon currently displayed */
  516.   #define REV_ICON    1
  517.   #define NA_ICON        2
  518.   
  519.   /* header line in appts file implies one-based entries and 99 memo flag */
  520.   #define HEADER        "# CalenTool V2 - DO NOT REMOVE THIS LINE\n"
  521.  
  522. --- 204,220 -----
  523.   #define STD_ICON    0        /* flags for icon currently displayed */
  524.   #define REV_ICON    1
  525.   #define NA_ICON        2
  526. + /* arguments to print_apts() */
  527. + #define PRI_DAY            1
  528. + #define PRI_WEEK        2
  529. + #define PRI_MONTH        3
  530. + #define PRI_XNOTES        4
  531. + #define PRI_DAY_XNOTES        (PRI_DAY|PRI_XNOTES)
  532. + #define PRI_WEEK_XNOTES        (PRI_WEEK|PRI_XNOTES)
  533. + #define PRI_MONTH_XNOTES     (PRI_MONTH|PRI_XNOTES)
  534. + #define DST_STDOUT        1
  535. + #define DST_MAIL        2
  536.   
  537.   /* header line in appts file implies one-based entries and 99 memo flag */
  538.   #define HEADER        "# CalenTool V2 - DO NOT REMOVE THIS LINE\n"
  539. *** /tmp/,RCSt1a05533    Wed Jul 19 20:45:45 1989
  540. --- datelib.c    Wed Jul 19 20:35:04 1989
  541. ***************
  542. *** 1,5
  543.   /*
  544. !  * $Header: datelib.c,v 2.1 89/05/09 14:18:52 billr Exp $
  545.    *
  546.    * datelib.c - Calendar (date) computation library
  547.    *
  548.  
  549. --- 1,5 -----
  550.   /*
  551. !  * $Header: datelib.c,v 2.2 89/07/19 20:34:23 billr Exp $
  552.    *
  553.    * datelib.c - Calendar (date) computation library
  554.    *
  555. ***************
  556. *** 1026,1033
  557.    * and that it exhibits the eccentricity of always computing the day
  558.    * relative to March, so that April 2 appears as March 33, which is also
  559.    * corrected below.
  560. !  * This formula is probably only accurate for years up to and including
  561. !  * 2000 (tested); I know that it fails for 2011.
  562.    */
  563.   double
  564.   passover(year, jyear)
  565.  
  566. --- 1026,1034 -----
  567.    * and that it exhibits the eccentricity of always computing the day
  568.    * relative to March, so that April 2 appears as March 33, which is also
  569.    * corrected below.
  570. !  *
  571. !  * Floating point implementation by R.P.C. Rodgers; integer implementation
  572. !  * (for faster calculation) by Amos Shapir (amos@nsc.com).
  573.    */
  574.   double
  575.   passover(year, jyear)
  576. ***************
  577. *** 1033,1039
  578.   passover(year, jyear)
  579.       int    *jyear, year;
  580.   {
  581. !     double    etmp, p_day;
  582.       int    atmp, btmp, ctmp, day_of_week, dtmp, ftmp, gtmp;
  583.       int    p_month;
  584.   
  585.  
  586. --- 1034,1040 -----
  587.   passover(year, jyear)
  588.       int    *jyear, year;
  589.   {
  590. !     int    etmp, p_day;
  591.       int    atmp, btmp, ctmp, day_of_week, dtmp, ftmp, gtmp;
  592.       int    p_month;
  593.   
  594. ***************
  595. *** 1041,1050
  596.       *jyear = atmp;
  597.       btmp = (12 * atmp + 17) % 19;
  598.       ctmp = atmp % 4;
  599. !     etmp = (1.55424180 * btmp) - (0.003177794 * atmp)
  600. !         + (ctmp / 4) + 32.04409316;
  601. !     dtmp = etmp;
  602. !     etmp = etmp - dtmp;
  603.           /* day_of_week is not to be confused with the
  604.            value returned by the day_of_week routine; here, Sunday = 1 */
  605.       day_of_week = ((3 * atmp) + (5 * ctmp) + dtmp + 5) % 7;
  606.  
  607. --- 1042,1051 -----
  608.       *jyear = atmp;
  609.       btmp = (12 * atmp + 17) % 19;
  610.       ctmp = atmp % 4;
  611. !     etmp = (765433 * btmp) - (1565 * atmp)
  612. !         + (ctmp * 123120) + 15781075;
  613. !     dtmp = etmp / 492480;
  614. !     etmp %= 492480;
  615.           /* day_of_week is not to be confused with the
  616.            value returned by the day_of_week routine; here, Sunday = 1 */
  617.       day_of_week = ((3 * atmp) + (5 * ctmp) + dtmp + 5) % 7;
  618. ***************
  619. *** 1048,1057
  620.           /* day_of_week is not to be confused with the
  621.            value returned by the day_of_week routine; here, Sunday = 1 */
  622.       day_of_week = ((3 * atmp) + (5 * ctmp) + dtmp + 5) % 7;
  623. !     if (day_of_week == 0 && btmp > 11 && etmp >= 0.89772377)
  624. !         p_day = dtmp + 1.0;
  625. !     else if (day_of_week == 1 && btmp > 6 && etmp >= 0.63287037)
  626. !         p_day = dtmp + 2.0;
  627.       else if (day_of_week == 2 || day_of_week == 4 || day_of_week ==6)
  628.           p_day = dtmp + 1.0;
  629.       else {
  630.  
  631. --- 1049,1058 -----
  632.           /* day_of_week is not to be confused with the
  633.            value returned by the day_of_week routine; here, Sunday = 1 */
  634.       day_of_week = ((3 * atmp) + (5 * ctmp) + dtmp + 5) % 7;
  635. !     if (day_of_week == 0 && btmp > 11 && etmp >= 311676)
  636. !         p_day = dtmp + 1;
  637. !     else if (day_of_week == 1 && btmp > 6 && etmp >= 311676)
  638. !         p_day = dtmp + 2;
  639.       else if (day_of_week == 2 || day_of_week == 4 || day_of_week ==6)
  640.           p_day = dtmp + 1;
  641.       else {
  642. ***************
  643. *** 1053,1059
  644.       else if (day_of_week == 1 && btmp > 6 && etmp >= 0.63287037)
  645.           p_day = dtmp + 2.0;
  646.       else if (day_of_week == 2 || day_of_week == 4 || day_of_week ==6)
  647. !         p_day = dtmp + 1.0;
  648.       else {
  649.           p_day = dtmp;
  650.       }
  651.  
  652. --- 1054,1060 -----
  653.       else if (day_of_week == 1 && btmp > 6 && etmp >= 311676)
  654.           p_day = dtmp + 2;
  655.       else if (day_of_week == 2 || day_of_week == 4 || day_of_week ==6)
  656. !         p_day = dtmp + 1;
  657.       else {
  658.           p_day = dtmp;
  659.       }
  660. *** /tmp/,RCSt1a06079    Tue Sep 19 06:02:26 1989
  661. --- devent.c    Tue Sep 19 05:59:20 1989
  662. ***************
  663. *** 1,5
  664.   /*
  665. !  * $Header: devent.c,v 2.1 89/05/09 14:18:59 billr Exp $
  666.    */
  667.   /*
  668.    * devent.c
  669.  
  670. --- 1,5 -----
  671.   /*
  672. !  * $Header: devent.c,v 2.5 89/09/19 05:58:58 billr Exp $
  673.    */
  674.   /*
  675.    * devent.c
  676. ***************
  677. *** 68,74
  678.       event = canvas_window_event(canvas, event);
  679.           x = event_x(event);
  680.           y = event_y(event);
  681. -     /*fix_event(canvas, event);    /* check for LOC_RGNENTER */
  682.       if (event_id(event) == LOC_RGNEXIT && old_slot >= 0) {
  683.           /* erase text cursor */
  684.           text_cursor(old_slot);
  685.  
  686. --- 68,73 -----
  687.       event = canvas_window_event(canvas, event);
  688.           x = event_x(event);
  689.           y = event_y(event);
  690.       if (event_id(event) == LOC_RGNEXIT && old_slot >= 0) {
  691.           /* erase text cursor */
  692.           text_cursor(old_slot);
  693. ***************
  694. *** 202,208
  695.               }
  696.           }
  697.           expecting = 0;
  698. !         } else if (found_flag == FOUND_SLOT && event_id(event) == MS_MIDDLE) {
  699.           /* Process a MB click. */
  700.           if (box_index >= n_tslots)
  701.               /* don't flow into notes section */
  702.  
  703. --- 201,207 -----
  704.               }
  705.           }
  706.           expecting = 0;
  707. !     } else if (found_flag == FOUND_SLOT && event_id(event) == MS_MIDDLE) {
  708.           /* Process a MB click. */
  709.           if (event_is_down(event)) {
  710.               /* try to start dragging from here */
  711. ***************
  712. *** 204,212
  713.           expecting = 0;
  714.           } else if (found_flag == FOUND_SLOT && event_id(event) == MS_MIDDLE) {
  715.           /* Process a MB click. */
  716. -         if (box_index >= n_tslots)
  717. -             /* don't flow into notes section */
  718. -             box_index = n_tslots - 1;
  719.           if (event_is_down(event)) {
  720.               /* try to start dragging from here */
  721.               if (slots[box_index].active != ACTIVE) {
  722.  
  723. --- 203,208 -----
  724.           expecting = 0;
  725.       } else if (found_flag == FOUND_SLOT && event_id(event) == MS_MIDDLE) {
  726.           /* Process a MB click. */
  727.           if (event_is_down(event)) {
  728.               /* try to start dragging from here */
  729.               if (slots[box_index].active != ACTIVE || box_index >= n_tslots) {
  730. ***************
  731. *** 209,215
  732.               box_index = n_tslots - 1;
  733.           if (event_is_down(event)) {
  734.               /* try to start dragging from here */
  735. !             if (slots[box_index].active != ACTIVE) {
  736.                   start_arrow_box = -1;
  737.                   return(0);
  738.               }
  739.  
  740. --- 205,212 -----
  741.           /* Process a MB click. */
  742.           if (event_is_down(event)) {
  743.               /* try to start dragging from here */
  744. !             if (slots[box_index].active != ACTIVE || box_index >= n_tslots) {
  745. !                 /* not allowed in notes slots, either */
  746.                   start_arrow_box = -1;
  747.                   return(0);
  748.               }
  749. ***************
  750. *** 223,232
  751.               }
  752.               prev_box = start_arrow_box = box_index;
  753.           } else {
  754. !             /* end of dragging => end of arrow */
  755. !             if (box_index < start_arrow_box || start_arrow_box == -1) {
  756. !                 start_arrow_box = -1;
  757. !                 return(0);
  758.               }
  759.               if (box_index > start_arrow_box) {
  760.                   i = start_arrow_box;
  761.  
  762. --- 220,233 -----
  763.               }
  764.               prev_box = start_arrow_box = box_index;
  765.           } else {
  766. !             if (box_index >= n_tslots) {
  767. !                 /* mouse currently in notes section */
  768. !                 if (start_arrow_box == -1)
  769. !                     /* started in notes section, too */
  770. !                     return(0);
  771. !                 else
  772. !                     /* truncate at start of notes section */
  773. !                     box_index = n_tslots - 1;
  774.               }
  775.               /* end of dragging => end of arrow */
  776.               if (box_index > start_arrow_box && start_arrow_box != -1) {
  777. ***************
  778. *** 228,234
  779.                   start_arrow_box = -1;
  780.                   return(0);
  781.               }
  782. !             if (box_index > start_arrow_box) {
  783.                   i = start_arrow_box;
  784.                   slots[i].cur_appt->arrows = box_index - start_arrow_box;
  785.                   while (++i < box_index) {
  786.  
  787. --- 229,236 -----
  788.                       /* truncate at start of notes section */
  789.                       box_index = n_tslots - 1;
  790.               }
  791. !             /* end of dragging => end of arrow */
  792. !             if (box_index > start_arrow_box && start_arrow_box != -1) {
  793.                   i = start_arrow_box;
  794.                   slots[i].cur_appt->arrows = box_index - start_arrow_box;
  795.                   while (++i < box_index) {
  796. ***************
  797. *** 337,343
  798.                   }
  799.           }
  800.           i = (int) menu_show(day_sel_menu, canvas, event, 0);
  801. !         if (i > 0)
  802.               switch (i) {
  803.                   case MDELETE:
  804.                       delete_appt(box_index, canvas);
  805.  
  806. --- 339,345 -----
  807.                   }
  808.           }
  809.           i = (int) menu_show(day_sel_menu, canvas, event, 0);
  810. !         if (i > 0) {
  811.               switch (i) {
  812.                   case MDELETE:
  813.                       delete_appt(box_index, canvas);
  814. ***************
  815. *** 358,366
  816.                       undelete_appt(box_index);
  817.                       break;
  818.               }
  819. !         if (new_entry) {
  820. !             close_day();
  821. !             draw_day();    /* redraw display */
  822.           }
  823.       } else
  824.           window_default_event_proc(canvas, event, 0);
  825.  
  826. --- 360,369 -----
  827.                       undelete_appt(box_index);
  828.                       break;
  829.               }
  830. !             if (new_entry) {
  831. !                 close_day();
  832. !                 draw_day();    /* redraw display */
  833. !             }
  834.           }
  835.       } else
  836.           window_default_event_proc(canvas, event, 0);
  837. ***************
  838. *** 393,402
  839.       int    strl, x;
  840.   
  841.       strl = strlen(&slots[slotno].cur_appt->str[slots[slotno].cur_appt->sindex]);
  842. !     if (strl > (day_message_size-1)) {
  843. !         pw_write(main_pixwin, slots[slotno].slot_pos.right, slots[slotno].slot_pos.bottom-4,
  844. !           8, 8, PIX_SRC^PIX_DST, &tri_right_pr, 0, 0);
  845. !     } else {
  846.           x = slots[slotno].slot_pos.left + strl * font->pf_defaultsize.x;
  847.           pw_write(main_pixwin, x, slots[slotno].slot_pos.bottom-4,
  848.             16, 16, PIX_SRC^PIX_DST, &tri_up_pr, 0, 0);
  849.  
  850. --- 396,402 -----
  851.       int    strl, x;
  852.   
  853.       strl = strlen(&slots[slotno].cur_appt->str[slots[slotno].cur_appt->sindex]);
  854. !     if (strl <= (day_message_size-1)) {
  855.           x = slots[slotno].slot_pos.left + strl * font->pf_defaultsize.x;
  856.           pw_write(main_pixwin, x, slots[slotno].slot_pos.bottom-4,
  857.             16, 16, PIX_SRC^PIX_DST, &tri_up_pr, 0, 0);
  858. ***************
  859. *** 829,836
  860.       /* run through the list to see if there are any deleted */
  861.       for (aptr=slots[bi].first; aptr; aptr=aptr->next)
  862.           if (aptr->flags & DELETED) {
  863. !             found = 1;
  864. !             break;
  865.           }
  866.       /* now see if the current one matches */
  867.       if (found && !strcmp(aptr->str, slots[bi].cur_appt->str))
  868.  
  869. --- 829,837 -----
  870.       /* run through the list to see if there are any deleted */
  871.       for (aptr=slots[bi].first; aptr; aptr=aptr->next)
  872.           if (aptr->flags & DELETED) {
  873. !             /* now see if the current one matches */
  874. !             if (!strcmp(aptr->str, slots[bi].cur_appt->str))
  875. !                 return(1);
  876.           }
  877.       
  878.       return(0);
  879. ***************
  880. *** 832,840
  881.               found = 1;
  882.               break;
  883.           }
  884. -     /* now see if the current one matches */
  885. -     if (found && !strcmp(aptr->str, slots[bi].cur_appt->str))
  886. -         return(1);
  887.       
  888.       return(0);
  889.   }
  890.  
  891. --- 833,838 -----
  892.               if (!strcmp(aptr->str, slots[bi].cur_appt->str))
  893.                   return(1);
  894.           }
  895.       
  896.       return(0);
  897.   }
  898. *** /tmp/,RCSt1a05543    Wed Jul 19 20:45:55 1989
  899. --- dpaint.c    Wed Jul 19 20:27:58 1989
  900. ***************
  901. *** 1,5
  902.   /*
  903. !  * $Header: dpaint.c,v 2.2 89/05/10 10:06:20 billr Exp $
  904.    */
  905.   /*
  906.    * dpaint.c
  907.  
  908. --- 1,5 -----
  909.   /*
  910. !  * $Header: dpaint.c,v 2.3 89/07/19 20:27:45 billr Exp $
  911.    */
  912.   /*
  913.    * dpaint.c
  914. ***************
  915. *** 77,82
  916.    */
  917.   draw_day1()
  918.   {
  919.       lock_cursors();
  920.       fix_current_day();
  921.       working(TRUE);
  922.  
  923. --- 77,84 -----
  924.    */
  925.   draw_day1()
  926.   {
  927. +     int i;
  928.       lock_cursors();
  929.       fix_current_day();
  930.       working(TRUE);
  931. ***************
  932. *** 83,89
  933.       pw_batch_on(main_pixwin);
  934.       draw_day_outline();
  935.       pw_batch_off(main_pixwin);
  936. !     get_day_appts();
  937.       working(FALSE);
  938.       pw_batch_on(main_pixwin);
  939.       draw_day_appts();
  940.  
  941. --- 85,91 -----
  942.       pw_batch_on(main_pixwin);
  943.       draw_day_outline();
  944.       pw_batch_off(main_pixwin);
  945. !     i = get_day_appts();
  946.       working(FALSE);
  947.       if (i) {
  948.           pw_batch_on(main_pixwin);
  949. ***************
  950. *** 85,93
  951.       pw_batch_off(main_pixwin);
  952.       get_day_appts();
  953.       working(FALSE);
  954. !     pw_batch_on(main_pixwin);
  955. !     draw_day_appts();
  956. !     pw_batch_off(main_pixwin);
  957.       day_is_open = TRUE;
  958.       unlock_cursors();
  959.   }
  960.  
  961. --- 87,97 -----
  962.       pw_batch_off(main_pixwin);
  963.       i = get_day_appts();
  964.       working(FALSE);
  965. !     if (i) {
  966. !         pw_batch_on(main_pixwin);
  967. !         draw_day_appts();
  968. !         pw_batch_off(main_pixwin);
  969. !     }
  970.       day_is_open = TRUE;
  971.       unlock_cursors();
  972.   }
  973. ***************
  974. *** 172,177
  975.    * with all the lines from the ".appointments" file 
  976.    * which do not pertain to the current day.
  977.    */
  978.   get_day_appts()
  979.   {
  980.       FILE *apts, *temp_apts;
  981.  
  982. --- 176,182 -----
  983.    * with all the lines from the ".appointments" file 
  984.    * which do not pertain to the current day.
  985.    */
  986. + int
  987.   get_day_appts()
  988.   {
  989.       FILE *apts, *temp_apts;
  990. ***************
  991. *** 176,182
  992.   {
  993.       FILE *apts, *temp_apts;
  994.       int slotno, n_arrows, i;
  995. !     int read_stat;
  996.       struct appt_entry appt;
  997.       struct appt_entry *nappt, *aptr;
  998.       char buf[MAX_STRLEN], *sptr;
  999.  
  1000. --- 181,187 -----
  1001.   {
  1002.       FILE *apts, *temp_apts;
  1003.       int slotno, n_arrows, i;
  1004. !     int read_stat, some_appt = 0;
  1005.       struct appt_entry appt;
  1006.       struct appt_entry *nappt, *aptr;
  1007.       char buf[MAX_STRLEN], *sptr;
  1008. ***************
  1009. *** 329,334
  1010.           fclose(apts);             
  1011.       current = First;
  1012.       fix_current_day();
  1013.   }
  1014.   
  1015.   
  1016.  
  1017. --- 334,351 -----
  1018.           fclose(apts);             
  1019.       current = First;
  1020.       fix_current_day();
  1021. +     /* now check to see if there is anything happening this day */
  1022. +     if (findex)
  1023. +         some_appt = 1;
  1024. +     else {
  1025. +         for (i=0; i<N_SLOTS; i++) {
  1026. +             if (slots[i].count > 0) {
  1027. +                 some_appt = 1;
  1028. +                 break;
  1029. +             }
  1030. +         }
  1031. +     }
  1032. +     return(some_appt);
  1033.   }
  1034.   
  1035.   
  1036. *** /tmp/,RCSt1a05550    Wed Jul 19 20:45:59 1989
  1037. --- init.c    Wed Jul 19 20:28:11 1989
  1038. ***************
  1039. *** 1,5
  1040.   /*
  1041. !  * $Header: init.c,v 2.1 89/05/09 14:23:19 billr Exp $
  1042.    */
  1043.   /*
  1044.    * init.c
  1045.  
  1046. --- 1,5 -----
  1047.   /*
  1048. !  * $Header: init.c,v 2.2 89/07/19 20:27:59 billr Exp $
  1049.    */
  1050.   /*
  1051.    * init.c
  1052. ***************
  1053. *** 35,40
  1054.   #include <suntool/menu.h>
  1055.   #include <sunwindow/defaults.h>
  1056.   #include <sys/file.h>
  1057.   #include <pwd.h>
  1058.   #include "ct.h"
  1059.   
  1060.  
  1061. --- 35,41 -----
  1062.   #include <suntool/menu.h>
  1063.   #include <sunwindow/defaults.h>
  1064.   #include <sys/file.h>
  1065. + #include <sys/stat.h>
  1066.   #include <pwd.h>
  1067.   #include "ct.h"
  1068.   
  1069. ***************
  1070. *** 321,327
  1071.       char *strcpy(), *rindex(), *getenv();
  1072.       char *slash, *default_ptr, *envptr;
  1073.       char buff[80];
  1074. !     int to_slash, getpid(), fd, errflag;
  1075.       struct passwd *pw;
  1076.       FILE *appts;
  1077.   
  1078.  
  1079. --- 322,328 -----
  1080.       char *strcpy(), *rindex(), *getenv();
  1081.       char *slash, *default_ptr, *envptr;
  1082.       char buff[80];
  1083. !     int to_slash, getpid(), fd, errflag, numask;
  1084.       struct passwd *pw;
  1085.       struct stat statbuf;
  1086.       FILE *appts;
  1087. ***************
  1088. *** 323,328
  1089.       char buff[80];
  1090.       int to_slash, getpid(), fd, errflag;
  1091.       struct passwd *pw;
  1092.       FILE *appts;
  1093.   
  1094.       /* the tmp file */
  1095.  
  1096. --- 324,330 -----
  1097.       char buff[80];
  1098.       int to_slash, getpid(), fd, errflag, numask;
  1099.       struct passwd *pw;
  1100. +     struct stat statbuf;
  1101.       FILE *appts;
  1102.   
  1103.       /* the tmp file */
  1104. ***************
  1105. *** 382,388
  1106.               if ((int)window_loop(prompt_frame) == 0) {
  1107.                   /* try to create the file */
  1108.                   fprintf(stderr, "creating file\n");
  1109. !                 if ((fd=open(apts_pathname, O_CREAT|O_RDWR, 0664)) <= 0) {
  1110.                       perror(apts_pathname);
  1111.                       errflag = 1;
  1112.                       fprintf(stderr, "..error\n");
  1113.  
  1114. --- 384,390 -----
  1115.               if ((int)window_loop(prompt_frame) == 0) {
  1116.                   /* try to create the file */
  1117.                   fprintf(stderr, "creating file\n");
  1118. !                 if ((fd=open(apts_pathname, O_CREAT|O_RDWR, 0644)) <= 0) {
  1119.                       perror(apts_pathname);
  1120.                       errflag = 1;
  1121.                       fprintf(stderr, "..error\n");
  1122. ***************
  1123. *** 406,412
  1124.               fprintf(stderr, "Cannot access calendar file %s - create? ", apts_pathname);
  1125.               fgets(buff, 80, stdin);
  1126.               if (buff[0] == 'y' || buff[0] == 'Y') {
  1127. !                 if ((fd=open(apts_pathname, O_CREAT|O_RDWR, 0664)) <= 0) {
  1128.                       perror(apts_pathname);
  1129.                       return(1);
  1130.                   } else {
  1131.  
  1132. --- 408,414 -----
  1133.               fprintf(stderr, "Cannot access calendar file %s - create? ", apts_pathname);
  1134.               fgets(buff, 80, stdin);
  1135.               if (buff[0] == 'y' || buff[0] == 'Y') {
  1136. !                 if ((fd=open(apts_pathname, O_CREAT|O_RDWR, 0644)) <= 0) {
  1137.                       perror(apts_pathname);
  1138.                       return(1);
  1139.                   } else {
  1140. ***************
  1141. *** 424,429
  1142.       }
  1143.       if (access(apts_pathname, W_OK) == -1)
  1144.           read_only = 1;
  1145.   
  1146.       /* update base frame label, if the tool is running */
  1147.       if (frame) {
  1148.  
  1149. --- 426,439 -----
  1150.       }
  1151.       if (access(apts_pathname, W_OK) == -1)
  1152.           read_only = 1;
  1153. +     /*
  1154. +      * set permissions on tmp file based on .appointments file
  1155. +      * with the expception that we need at least write permission
  1156. +      * for the owner.
  1157. +      */
  1158. +     (void)stat(apts_pathname, &statbuf);
  1159. +     numask = ~statbuf.st_mode & 0077;  /* yes, this is octal 77 */
  1160. +     (void)umask(numask);
  1161.   
  1162.       /* update base frame label, if the tool is running */
  1163.       if (frame) {
  1164. *** /tmp/,RCSt1a05560    Wed Jul 19 20:46:07 1989
  1165. --- mpaint.c    Wed Jul 19 20:29:26 1989
  1166. ***************
  1167. *** 1,5
  1168.   /*
  1169. !  * $Header: mpaint.c,v 2.1 89/05/09 14:19:29 billr Exp $
  1170.    */
  1171.   /*
  1172.    * mpaint.c
  1173.  
  1174. --- 1,5 -----
  1175.   /*
  1176. !  * $Header: mpaint.c,v 2.2 89/07/19 20:29:01 billr Exp $
  1177.    */
  1178.   /*
  1179.    * mpaint.c
  1180. ***************
  1181. *** 41,48
  1182.   
  1183.   draw_month()
  1184.   {
  1185. !     int start_dow, i, x, y, n_days, n_weeks;
  1186. !     int histo[7], days_in_week;
  1187.       int arrow_index, last_top, index;
  1188.       char c[4], title[20], *cp;
  1189.       int left_border, right_border, top_border, bottom_border;
  1190.  
  1191. --- 41,48 -----
  1192.   
  1193.   draw_month()
  1194.   {
  1195. !     int start_dow, i, x, y, n_days;
  1196. !     int days_in_week;
  1197.       int arrow_index, last_top, index;
  1198.       char c[4], title[20], *cp;
  1199.       int left_border, right_border, top_border, bottom_border;
  1200. ***************
  1201. *** 66,80
  1202.       working(TRUE);
  1203.       start_dow = current.tm_wday;
  1204.       n_days = monthlength(current.tm_mon);
  1205. !     for (i=0; i<7; i++)    /* Calculate # of full/partial weeks. */
  1206. !         histo[i] = 0;
  1207. !     for (i=0; i<n_days; i++)
  1208. !         histo[(start_dow + i) % 7] += 1;
  1209. !     n_weeks = 0;
  1210. !     for (i=0; i<7; i++)
  1211. !         if (histo[i] > n_weeks)
  1212. !             n_weeks = histo[i];
  1213.       pw_batch_on(main_pixwin);
  1214.           rect = (Rect *) window_get(canvas, WIN_RECT);
  1215.       /* Erase the window */
  1216.  
  1217. --- 66,72 -----
  1218.       working(TRUE);
  1219.       start_dow = current.tm_wday;
  1220.       n_days = monthlength(current.tm_mon);
  1221. !     
  1222.       pw_batch_on(main_pixwin);
  1223.           rect = (Rect *) window_get(canvas, WIN_RECT);
  1224.       /* Erase the window */
  1225. ***************
  1226. *** 80,86
  1227.       /* Erase the window */
  1228.           pw_writebackground(main_pixwin,0,0,rect->r_width,rect->r_height,PIX_CLR);
  1229.           left_border = (rect->r_width - 7*64)/2 + 32;
  1230. !         top_border = (rect->r_height - n_weeks*64) / 2;
  1231.           right_border = left_border + 7*64;
  1232.            
  1233.       sprintf(title, "%s, %d",
  1234.  
  1235. --- 72,78 -----
  1236.       /* Erase the window */
  1237.           pw_writebackground(main_pixwin,0,0,rect->r_width,rect->r_height,PIX_CLR);
  1238.           left_border = (rect->r_width - 7*64)/2 + 32;
  1239. !         top_border = (rect->r_height - 5*64) / 2;
  1240.           right_border = left_border + 7*64;
  1241.            
  1242.       sprintf(title, "%s, %d",
  1243. *** /tmp/,RCSt1a05567    Wed Jul 19 20:46:09 1989
  1244. --- mt2ct.c    Wed Jul 19 20:29:42 1989
  1245. ***************
  1246. *** 1,5
  1247.   /*
  1248. !  * $Header: mt2ct.c,v 2.1 89/05/09 14:19:31 billr Exp $
  1249.    */
  1250.   /*
  1251.    * mt2ct - convert monthtool reminder files to calentool style files
  1252.  
  1253. --- 1,5 -----
  1254.   /*
  1255. !  * $Header: mt2ct.c,v 2.2 89/07/19 20:29:27 billr Exp $
  1256.    */
  1257.   /*
  1258.    * mt2ct - convert monthtool reminder files to calentool style files
  1259. ***************
  1260. *** 109,117
  1261.               aptr->flags |= ALL_YEARS;
  1262.           if (aptr->month == 0)
  1263.               aptr->flags |= ALL_MONTHS;
  1264. !         if (aptr->day == 0)
  1265. !             aptr->flags |= ALL_DAYS;
  1266. !         if (aptr->month == 99) {
  1267.               /* weekly reminder */
  1268.               aptr->flags |= ALL_MONTHS;
  1269.               aptr->flags |= Setday(aptr->day-1);
  1270.  
  1271. --- 109,115 -----
  1272.               aptr->flags |= ALL_YEARS;
  1273.           if (aptr->month == 0)
  1274.               aptr->flags |= ALL_MONTHS;
  1275. !         else if (aptr->month == 99) {
  1276.               /* weekly reminder */
  1277.               aptr->flags |= ALL_MONTHS;
  1278.               aptr->flags |= Setday(aptr->day-1);
  1279. ***************
  1280. *** 115,121
  1281.               /* weekly reminder */
  1282.               aptr->flags |= ALL_MONTHS;
  1283.               aptr->flags |= Setday(aptr->day-1);
  1284. !         }
  1285.           aptr->next = (struct appt_entry *)malloc(sizeof(struct appt_entry));
  1286.           if (aptr->next == NULL) {
  1287.               fprintf(stderr, "out of memory\n");
  1288.  
  1289. --- 113,122 -----
  1290.               /* weekly reminder */
  1291.               aptr->flags |= ALL_MONTHS;
  1292.               aptr->flags |= Setday(aptr->day-1);
  1293. !         } else
  1294. !             --aptr->month;
  1295. !         if (aptr->day == 0)
  1296. !             aptr->flags |= ALL_DAYS;
  1297.           aptr->next = (struct appt_entry *)malloc(sizeof(struct appt_entry));
  1298.           if (aptr->next == NULL) {
  1299.               fprintf(stderr, "out of memory\n");
  1300. *** /tmp/,RCSt1a06103    Tue Sep 19 06:06:51 1989
  1301. --- calentool.1    Tue Sep 19 06:06:30 1989
  1302. ***************
  1303. *** 1,4
  1304. ! .\" $Header: calentool.1,v 2.2 89/05/16 16:38:22 billr Exp $
  1305.   .\"
  1306.   .TH CALENTOOL 1 "15 May 1989"
  1307.   .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
  1308.  
  1309. --- 1,4 -----
  1310. ! .\" $Header: calentool.1,v 2.4 89/09/19 06:06:11 billr Exp $
  1311.   .\"
  1312.   .TH CALENTOOL 1 "14 September 1989"
  1313.   .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
  1314. ***************
  1315. *** 1,6
  1316.   .\" $Header: calentool.1,v 2.2 89/05/16 16:38:22 billr Exp $
  1317.   .\"
  1318. ! .TH CALENTOOL 1 "15 May 1989"
  1319.   .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
  1320.   .SH NAME
  1321.   calentool - day/week/month/year-at-a-glance SunView tool (the Hacker's Almanac)
  1322.  
  1323. --- 1,6 -----
  1324.   .\" $Header: calentool.1,v 2.4 89/09/19 06:06:11 billr Exp $
  1325.   .\"
  1326. ! .TH CALENTOOL 1 "14 September 1989"
  1327.   .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
  1328.   .SH NAME
  1329.   calentool - day/week/month/year-at-a-glance SunView tool (the Hacker's Almanac)
  1330. ***************
  1331. *** 7,13
  1332.   .SH SYNOPSIS
  1333.   .B calentool
  1334.   [
  1335. ! .B -b
  1336.   ]
  1337.   [
  1338.   .B -d
  1339.  
  1340. --- 7,13 -----
  1341.   .SH SYNOPSIS
  1342.   .B calentool
  1343.   [
  1344. ! .B \-b
  1345.   ]
  1346.   [
  1347.   .B \-d
  1348. ***************
  1349. *** 10,16
  1350.   .B -b
  1351.   ]
  1352.   [
  1353. ! .B -d
  1354.   .I date
  1355.   ]
  1356.   [
  1357.  
  1358. --- 10,16 -----
  1359.   .B \-b
  1360.   ]
  1361.   [
  1362. ! .B \-d
  1363.   .I date
  1364.   ]
  1365.   [
  1366. ***************
  1367. *** 14,20
  1368.   .I date
  1369.   ]
  1370.   [
  1371. ! .B -f
  1372.   .I apptsfile
  1373.   ]
  1374.   [
  1375.  
  1376. --- 14,20 -----
  1377.   .I date
  1378.   ]
  1379.   [
  1380. ! .B \-f
  1381.   .I apptsfile
  1382.   ]
  1383.   [
  1384. ***************
  1385. *** 18,24
  1386.   .I apptsfile
  1387.   ]
  1388.   [
  1389. ! .B -h
  1390.   [
  1391.   .I A a c i l j s
  1392.   ]]
  1393.  
  1394. --- 18,24 -----
  1395.   .I apptsfile
  1396.   ]
  1397.   [
  1398. ! .B \-h
  1399.   [
  1400.   .I A a c i l j s
  1401.   ]]
  1402. ***************
  1403. *** 23,29
  1404.   .I A a c i l j s
  1405.   ]]
  1406.   [
  1407. ! .B -H
  1408.   [
  1409.   .I A a c i l j s
  1410.   ]]
  1411.  
  1412. --- 23,29 -----
  1413.   .I A a c i l j s
  1414.   ]]
  1415.   [
  1416. ! .B \-H
  1417.   [
  1418.   .I A a c i l j s
  1419.   ]]
  1420. ***************
  1421. *** 28,34
  1422.   .I A a c i l j s
  1423.   ]]
  1424.   [
  1425. ! .B -i
  1426.   ]
  1427.   [
  1428.   .B -m
  1429.  
  1430. --- 28,34 -----
  1431.   .I A a c i l j s
  1432.   ]]
  1433.   [
  1434. ! .B \-i
  1435.   ]
  1436.   [
  1437.   .B \-m
  1438. ***************
  1439. *** 31,37
  1440.   .B -i
  1441.   ]
  1442.   [
  1443. ! .B -m
  1444.   .I userid
  1445.   ]
  1446.   [
  1447.  
  1448. --- 31,37 -----
  1449.   .B \-i
  1450.   ]
  1451.   [
  1452. ! .B \-m
  1453.   .I userid
  1454.   ]
  1455.   [
  1456. ***************
  1457. *** 35,41
  1458.   .I userid
  1459.   ]
  1460.   [
  1461. ! .B -o
  1462.   ]
  1463.   [
  1464.   .B -p
  1465.  
  1466. --- 35,41 -----
  1467.   .I userid
  1468.   ]
  1469.   [
  1470. ! .B \-o
  1471.   ]
  1472.   [
  1473.   .B \-p
  1474. ***************
  1475. *** 38,45
  1476.   .B -o
  1477.   ]
  1478.   [
  1479. ! .B -p
  1480. ! ]
  1481.   [
  1482.   .B -P
  1483.   ]
  1484.  
  1485. --- 38,44 -----
  1486.   .B \-o
  1487.   ]
  1488.   [
  1489. ! .B \-p
  1490.   [
  1491.   .I d w m
  1492.   ]]
  1493. ***************
  1494. *** 41,48
  1495.   .B -p
  1496.   ]
  1497.   [
  1498. ! .B -P
  1499. ! ]
  1500.   [
  1501.   .B -r
  1502.   ]
  1503.  
  1504. --- 40,47 -----
  1505.   [
  1506.   .B \-p
  1507.   [
  1508. ! .I d w m
  1509. ! ]]
  1510.   [
  1511.   .B \-P
  1512.   [
  1513. ***************
  1514. *** 44,50
  1515.   .B -P
  1516.   ]
  1517.   [
  1518. ! .B -r
  1519.   ]
  1520.   [
  1521.   .B -t
  1522.  
  1523. --- 43,54 -----
  1524.   .I d w m
  1525.   ]]
  1526.   [
  1527. ! .B \-P
  1528. ! [
  1529. ! .I d w m
  1530. ! ]]
  1531. ! [
  1532. ! .B \-r
  1533.   ]
  1534.   [
  1535.   .B \-t
  1536. ***************
  1537. *** 47,53
  1538.   .B -r
  1539.   ]
  1540.   [
  1541. ! .B -t
  1542.   ]
  1543.   [
  1544.   .B -u
  1545.  
  1546. --- 51,57 -----
  1547.   .B \-r
  1548.   ]
  1549.   [
  1550. ! .B \-t
  1551.   ]
  1552.   [
  1553.   .B \-u
  1554. ***************
  1555. *** 50,56
  1556.   .B -t
  1557.   ]
  1558.   [
  1559. ! .B -u
  1560.   .I int
  1561.   ]
  1562.   [
  1563.  
  1564. --- 54,60 -----
  1565.   .B \-t
  1566.   ]
  1567.   [
  1568. ! .B \-u
  1569.   .I int
  1570.   ]
  1571.   [
  1572. ***************
  1573. *** 54,60
  1574.   .I int
  1575.   ]
  1576.   [
  1577. ! .B -w
  1578.   ]
  1579.   [
  1580.   .B -z
  1581.  
  1582. --- 58,64 -----
  1583.   .I int
  1584.   ]
  1585.   [
  1586. ! .B \-w
  1587.   ]
  1588.   [
  1589.   .B \-z
  1590. ***************
  1591. *** 57,63
  1592.   .B -w
  1593.   ]
  1594.   [
  1595. ! .B -z
  1596.   ]
  1597.   [
  1598.   .B -5
  1599.  
  1600. --- 61,67 -----
  1601.   .B \-w
  1602.   ]
  1603.   [
  1604. ! .B \-z
  1605.   ]
  1606.   [
  1607.   .B \-5
  1608. ***************
  1609. *** 60,66
  1610.   .B -z
  1611.   ]
  1612.   [
  1613. ! .B -5
  1614.   ]
  1615.   [
  1616.   .B -7
  1617.  
  1618. --- 64,70 -----
  1619.   .B \-z
  1620.   ]
  1621.   [
  1622. ! .B \-5
  1623.   ]
  1624.   [
  1625.   .B \-7
  1626. ***************
  1627. *** 63,69
  1628.   .B -5
  1629.   ]
  1630.   [
  1631. ! .B -7
  1632.   ]
  1633.   [
  1634.   .I window options
  1635.  
  1636. --- 67,73 -----
  1637.   .B \-5
  1638.   ]
  1639.   [
  1640. ! .B \-7
  1641.   ]
  1642.   [
  1643.   .I suntools options
  1644. ***************
  1645. *** 66,72
  1646.   .B -7
  1647.   ]
  1648.   [
  1649. ! .I window options
  1650.   ]
  1651.   .SH DESCRIPTION
  1652.   .I Calentool
  1653.  
  1654. --- 70,76 -----
  1655.   .B \-7
  1656.   ]
  1657.   [
  1658. ! .I suntools options
  1659.   ]
  1660.   .SH DESCRIPTION
  1661.   .I Calentool
  1662. ***************
  1663. *** 120,126
  1664.   .I suntools
  1665.   command line options at the end of the command line.
  1666.   .TP 15
  1667. ! .B -b
  1668.   When an appointment is pending, a bell character (along with the appointment
  1669.   message) is sent to the console; only one reminder is sent for each
  1670.   appointment.  Also, place a copy of the appointment text in the file
  1671.  
  1672. --- 124,130 -----
  1673.   .I suntools
  1674.   command line options at the end of the command line.
  1675.   .TP 15
  1676. ! .B \-b
  1677.   When an appointment is pending, a bell character (along with the appointment
  1678.   message) is sent to the console; only one reminder is sent for each
  1679.   appointment.  Also, place a copy of the appointment text in the file
  1680. ***************
  1681. *** 160,166
  1682.   described by a particular appointments file should have write permission for
  1683.   that file.
  1684.   .TP
  1685. ! .BI \-h char
  1686.   Compute and display holidays which do not fall on set dates of the Gregorian
  1687.   calendar.  Notes appear in the day and week displays, and marks appear in
  1688.   the month and year displays.  This option is followed by a single character
  1689.  
  1690. --- 164,170 -----
  1691.   described by a particular appointments file should have write permission for
  1692.   that file.
  1693.   .TP
  1694. ! .BI \-h " char"
  1695.   Compute and display holidays which do not fall on set dates of the Gregorian
  1696.   calendar.  Notes appear in the day and week displays, and marks appear in
  1697.   the month and year displays.  This option is followed by a single character
  1698. ***************
  1699. *** 199,205
  1700.   US Secular holidays.
  1701.   .RE
  1702.   .TP
  1703. ! .BI \-H char
  1704.   Identical to the
  1705.   .B \-h
  1706.   option, except that computed dates are displayed only in the day and week
  1707.  
  1708. --- 203,209 -----
  1709.   US Secular holidays.
  1710.   .RE
  1711.   .TP
  1712. ! .BI \-H " char"
  1713.   Identical to the
  1714.   .B \-h
  1715.   option, except that computed dates are displayed only in the day and week
  1716. ***************
  1717. *** 212,218
  1718.   .I yy
  1719.   represents the last two digits of a past year).
  1720.   .TP
  1721. ! .BI \-m \ userid
  1722.   Send mail listing todays appointments to the user specified by
  1723.   .I userid
  1724.   and exit.
  1725.  
  1726. --- 216,222 -----
  1727.   .I yy
  1728.   represents the last two digits of a past year).
  1729.   .TP
  1730. ! .BI \-m " userid"
  1731.   Send mail listing todays appointments to the user specified by
  1732.   .I userid
  1733.   and exit.
  1734. ***************
  1735. *** 218,224
  1736.   and exit.
  1737.   This feature is useful when calentool is run from
  1738.   .IR cron (1),
  1739. ! to send yourself mail about today's appointments.
  1740.   (Note: this option eliminates the need for the separate program,
  1741.   .IR calenmail (1L),
  1742.   which was distributed with earlier releases of
  1743.  
  1744. --- 222,229 -----
  1745.   and exit.
  1746.   This feature is useful when calentool is run from
  1747.   .IR cron (1),
  1748. ! to send yourself mail about today's appointments.  No mail is
  1749. ! sent about today's appointments, if there are none.
  1750.   (Note: this option eliminates the need for the separate program,
  1751.   .IR calenmail (1L),
  1752.   which was distributed with earlier releases of
  1753. ***************
  1754. *** 232,238
  1755.   .I yy
  1756.   represents the last two digits of the past year).
  1757.   .TP
  1758. ! .B -p
  1759.   Print today's appointments and exit.  This is useful for reviewing
  1760.   appointments from an ordinary terminal or
  1761.   .IR shelltool (1).
  1762.  
  1763. --- 237,243 -----
  1764.   .I yy
  1765.   represents the last two digits of the past year).
  1766.   .TP
  1767. ! .BI \-p char
  1768.   Print today's appointments and exit.  This is useful for reviewing
  1769.   appointments from an ordinary terminal or
  1770.   .IR shelltool "(1)."
  1771. ***************
  1772. *** 235,241
  1773.   .B -p
  1774.   Print today's appointments and exit.  This is useful for reviewing
  1775.   appointments from an ordinary terminal or
  1776. ! .IR shelltool (1).
  1777.   .TP
  1778.   .B -P
  1779.   Print today's appointments and exit, ignoring notes which are not to mark
  1780.  
  1781. --- 240,252 -----
  1782.   .BI \-p char
  1783.   Print today's appointments and exit.  This is useful for reviewing
  1784.   appointments from an ordinary terminal or
  1785. ! .IR shelltool "(1)."
  1786. ! The
  1787. ! .I d, w, m
  1788. ! modifiers select a printout of the current day, week or month, respectively.
  1789. ! The day and week printouts are straight ASCII; the month printout is in
  1790. ! \*(Ps.  No printout is provide of the current days appointments, if there
  1791. ! are none.
  1792.   .TP
  1793.   .BI \-P char
  1794.   Print today's appointments and exit, ignoring notes which are not to mark
  1795. ***************
  1796. *** 237,243
  1797.   appointments from an ordinary terminal or
  1798.   .IR shelltool (1).
  1799.   .TP
  1800. ! .B -P
  1801.   Print today's appointments and exit, ignoring notes which are not to mark
  1802.   the month or year displays.  This is useful for suppressing trivia when
  1803.   reviewing appointments from an ordinary terminal or
  1804.  
  1805. --- 248,254 -----
  1806.   \*(Ps.  No printout is provide of the current days appointments, if there
  1807.   are none.
  1808.   .TP
  1809. ! .BI \-P char
  1810.   Print today's appointments and exit, ignoring notes which are not to mark
  1811.   the month or year displays.  This is useful for suppressing trivia when
  1812.   reviewing appointments from an ordinary terminal or
  1813. ***************
  1814. *** 241,247
  1815.   Print today's appointments and exit, ignoring notes which are not to mark
  1816.   the month or year displays.  This is useful for suppressing trivia when
  1817.   reviewing appointments from an ordinary terminal or
  1818. ! .IR shelltool (1).
  1819.   .TP
  1820.   .B -r
  1821.   Open the calendar tool in read-only mode.
  1822.  
  1823. --- 252,264 -----
  1824.   Print today's appointments and exit, ignoring notes which are not to mark
  1825.   the month or year displays.  This is useful for suppressing trivia when
  1826.   reviewing appointments from an ordinary terminal or
  1827. ! .IR shelltool "(1)."
  1828. ! The
  1829. ! .I d, w, m
  1830. ! modifiers select a printout of the current day, week or month, respectively.
  1831. ! The day and week printouts are straight ASCII; the month printout is in
  1832. ! \*(Ps.  No printout is provide of the current days appointments, if there
  1833. ! are none.
  1834.   .TP
  1835.   .B \-r
  1836.   Open the calendar tool in read-only mode.
  1837. ***************
  1838. *** 243,249
  1839.   reviewing appointments from an ordinary terminal or
  1840.   .IR shelltool (1).
  1841.   .TP
  1842. ! .B -r
  1843.   Open the calendar tool in read-only mode.
  1844.   Appointments can be edited, but no changes will be saved.
  1845.   The tool's banner strip will contain the string "[Read Only]".
  1846.  
  1847. --- 260,266 -----
  1848.   \*(Ps.  No printout is provide of the current days appointments, if there
  1849.   are none.
  1850.   .TP
  1851. ! .B \-r
  1852.   Open the calendar tool in read-only mode.
  1853.   Appointments can be edited, but no changes will be saved.
  1854.   The tool's banner strip will contain the string "[Read Only]".
  1855. ***************
  1856. *** 252,258
  1857.   .B -f
  1858.   option.
  1859.   .TP
  1860. ! .B -t
  1861.   Display the current time below the
  1862.   .I calentool
  1863.   icon (no further need for
  1864.  
  1865. --- 269,275 -----
  1866.   .B -f
  1867.   option.
  1868.   .TP
  1869. ! .B \-t
  1870.   Display the current time below the
  1871.   .I calentool
  1872.   icon (no further need for
  1873. ***************
  1874. *** 258,264
  1875.   icon (no further need for
  1876.   .IR clocktool (1)).
  1877.   .TP
  1878. ! .BI -u int
  1879.   Update the time at the interval of
  1880.   .I int
  1881.   seconds.
  1882.  
  1883. --- 275,281 -----
  1884.   icon (no further need for
  1885.   .IR clocktool (1)).
  1886.   .TP
  1887. ! .BI \-u " int"
  1888.   Update the time at the interval of
  1889.   .I int
  1890.   seconds.
  1891. ***************
  1892. *** 263,269
  1893.   .I int
  1894.   seconds.
  1895.   .TP
  1896. ! .B -w
  1897.   Don't display the "Working!" message in the control panel during
  1898.   lengthy operations.  The cursor still changes to an hourglass.
  1899.   .TP
  1900.  
  1901. --- 280,286 -----
  1902.   .I int
  1903.   seconds.
  1904.   .TP
  1905. ! .B \-w
  1906.   Don't display the "Working!" message in the control panel during
  1907.   lengthy operations.  The cursor still changes to an hourglass.
  1908.   .TP
  1909. ***************
  1910. *** 267,273
  1911.   Don't display the "Working!" message in the control panel during
  1912.   lengthy operations.  The cursor still changes to an hourglass.
  1913.   .TP
  1914. ! .B -z
  1915.   Convert appointments file used by earlier versions of
  1916.   .I calentool
  1917.   to the format used by the current version.  This option should be invoked only
  1918.  
  1919. --- 284,290 -----
  1920.   Don't display the "Working!" message in the control panel during
  1921.   lengthy operations.  The cursor still changes to an hourglass.
  1922.   .TP
  1923. ! .B \-z
  1924.   Convert appointments file used by earlier versions of
  1925.   .I calentool
  1926.   to the format used by the current version.  This option should be invoked only
  1927. ***************
  1928. *** 274,280
  1929.   once, the first time an old format file is read by
  1930.   .IR calentool .
  1931.   .TP
  1932. ! .B -5
  1933.   Display only five days (Monday through Friday) in the week display.  This is
  1934.   useful if the installer has set the default display format to 7 days.
  1935.   .TP
  1936.  
  1937. --- 291,297 -----
  1938.   once, the first time an old format file is read by
  1939.   .IR calentool .
  1940.   .TP
  1941. ! .B \-5
  1942.   Display only five days (Monday through Friday) in the week display.  This is
  1943.   useful if the installer has set the default display format to 7 days.
  1944.   .TP
  1945. ***************
  1946. *** 278,284
  1947.   Display only five days (Monday through Friday) in the week display.  This is
  1948.   useful if the installer has set the default display format to 7 days.
  1949.   .TP
  1950. ! .B -7
  1951.   Display all seven days in the week display.  This is useful if the installer
  1952.   has set the default value to 5 days.  The 7-day display is wider than the 5-day
  1953.   display, allowing longer messages to be displayed.
  1954.  
  1955. --- 295,301 -----
  1956.   Display only five days (Monday through Friday) in the week display.  This is
  1957.   useful if the installer has set the default display format to 7 days.
  1958.   .TP
  1959. ! .B \-7
  1960.   Display all seven days in the week display.  This is useful if the installer
  1961.   has set the default value to 5 days.  The 7-day display is wider than the 5-day
  1962.   display, allowing longer messages to be displayed.
  1963. ***************
  1964. *** 525,531
  1965.   selecting
  1966.   .BR Accept .
  1967.   The
  1968. ! .B Save
  1969.   button updates the current appointments file with any changes made that
  1970.   have not yet been logged.  This is typically not an often used option.
  1971.   .SH "FILE FORMAT"
  1972.  
  1973. --- 542,548 -----
  1974.   selecting
  1975.   .BR Accept .
  1976.   The
  1977. ! .B Update
  1978.   button updates the current appointments file with any changes made that
  1979.   have not yet been logged.
  1980.   .SH "FILE FORMAT"
  1981. ***************
  1982. *** 527,533
  1983.   The
  1984.   .B Save
  1985.   button updates the current appointments file with any changes made that
  1986. ! have not yet been logged.  This is typically not an often used option.
  1987.   .SH "FILE FORMAT"
  1988.   Using an included file (see below) is the one instance where manual editing
  1989.   of the
  1990.  
  1991. --- 544,550 -----
  1992.   The
  1993.   .B Update
  1994.   button updates the current appointments file with any changes made that
  1995. ! have not yet been logged.
  1996.   .SH "FILE FORMAT"
  1997.   Using an included file (see below) is the one instance where manual editing
  1998.   of the
  1999. ***************
  2000. *** 663,668
  2001.   events
  2002.   Historical events (major and minor)
  2003.   .TP
  2004.   lives
  2005.   Biographical dates of note
  2006.   .TP
  2007.  
  2008. --- 680,688 -----
  2009.   events
  2010.   Historical events (major and minor)
  2011.   .TP
  2012. + gdead
  2013. + Dates concerning the rock group Grateful Dead
  2014. + .TP
  2015.   lives
  2016.   Biographical dates of note
  2017.   .TP
  2018. ***************
  2019. *** 676,681
  2020.   popcult
  2021.   Special dates in Western popular culture
  2022.   .TP
  2023.   usa_holiday
  2024.   Major US/Canadian holidays (holidays from work)
  2025.   .TP
  2026.  
  2027. --- 696,704 -----
  2028.   popcult
  2029.   Special dates in Western popular culture
  2030.   .TP
  2031. + space
  2032. + Dates of note in the history of the exploration of outer space
  2033. + .TP
  2034.   usa_holiday
  2035.   Major US/Canadian holidays (holidays from work)
  2036.   .TP
  2037. ***************
  2038. *** 863,870
  2039.   R. P. C. Rodgers (School of Pharmacy, University of California,
  2040.   San Francisco, rodgers@maxwell.mmwb.ucsf.edu), performed extensive beta
  2041.   testing, made numerous design suggestions, and contributed the holiday
  2042. ! computation library, icons, manual pages, and special dates files (which were
  2043. ! modified from earlier net postings contributed by unknown authors).
  2044.   We thank Dr. Omar Afzal of Cornell University (Chairman of the Committee
  2045.   for Crescent Observation) for his help in implementing the Islamic date
  2046.   computations.
  2047.  
  2048. --- 886,904 -----
  2049.   R. P. C. Rodgers (School of Pharmacy, University of California,
  2050.   San Francisco, rodgers@maxwell.mmwb.ucsf.edu), performed extensive beta
  2051.   testing, made numerous design suggestions, and contributed the holiday
  2052. ! computation library, icons, manual pages, and special dates files.  The initial
  2053. ! set of special dates files were modified from earlier net postings contributed
  2054. ! by Rich Kulawiec (rsk@boulder.Colorado.EDU) and
  2055. ! Dick Wexelblat (...decvax!ittvax!wxlvax!rlw), assisted by the following
  2056. ! contributors known only by their network addresses:
  2057. ! (decvax!seismo!rochester!ritcv!ccieng5!ccieng6!wla),
  2058. ! (decvax!sii!mem),
  2059. ! (ittvax!bunker!dick),
  2060. ! (ittvax!decvax!bellcore!yquem!psl),
  2061. ! (ittvax!decvax!harpo!eagle!mhuxl!ihnp4!ihuxw!pector),
  2062. ! and (seismo!rochester!rocksvax!sunybcs!colonel),
  2063. ! in addition to others whose identifications have been lost (speak up!).
  2064. ! .LP
  2065.   We thank Dr. Omar Afzal of Cornell University (Chairman of the Committee
  2066.   for Crescent Observation) for his help in implementing the Islamic date
  2067.   computations.
  2068.