home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume35 / remind / patch03 < prev    next >
Encoding:
Text File  |  1993-02-21  |  24.9 KB  |  889 lines

  1. Newsgroups: comp.sources.misc
  2. From: <dfs@doe.carleton.ca> (David F. Skoll)
  3. Subject: v35i073:  remind - A replacement for calendar, Patch03
  4. Message-ID: <1993Feb22.033259.14231@sparky.imd.sterling.com>
  5. X-Md4-Signature: 81e3b98dba4c2a394624e4e381404aca
  6. Date: Mon, 22 Feb 1993 03:32:59 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: <dfs@doe.carleton.ca> (David F. Skoll)
  10. Posting-number: Volume 35, Issue 73
  11. Archive-name: remind/patch03
  12. Environment: UNIX, MS-DOS
  13. Patch-To: remind: Volume 33, Issue 58-69
  14.  
  15. This is Patch 3 for remind 3.0.  It fixes bugs in Remind and Rem2PS that
  16. patch 2 introduced.  I strongly recommend that you apply this patch!
  17.  
  18. Check the usual ftp site (ftp.doe.carleton.ca:pub/remind-3.0) for the
  19. patch and source distribution.
  20.  
  21. The bugs are:  The RUN OFF command did not work correctly, and the
  22. PostScript code produced an "invalidfont" error unless ISO encoding was
  23. used.
  24.  
  25. -------------- Cut Here ---------- Cut Here ---------- Cut Here -------------
  26. #!/bin/sh
  27. # This is Remind3.0/patch3, a shell archive (shar 3.32)
  28. # made 02/08/1993 19:46 UTC by <dfs@doe.carleton.ca> (David F. Skoll)
  29. # Source directory /enterprise/turbolift/dfs/work/.rem/Remind-3.0/tmp
  30. #
  31. # existing files WILL be overwritten
  32. #
  33. #                                                                          
  34. #                                                                          
  35. #
  36. # This shar contains:
  37. # length  mode       name
  38. # ------ ---------- ------------------------------------------
  39. #  22550 -rw------- patch.03
  40. #
  41. if touch 2>&1 | fgrep 'amc' > /dev/null
  42.  then TOUCH=touch
  43.  else TOUCH=true
  44. fi
  45. if test -r shar3_seq_.tmp; then
  46.     echo "Must unpack archives in sequence!"
  47.     next=`cat shar3_seq_.tmp`; echo "Please unpack part $next next"
  48.     exit 1
  49. fi
  50. # ============= patch.03 ==============
  51. echo "x - extracting patch.03 (Text)"
  52. sed 's/^X//' << 'SHAR_EOF' > patch.03 &&
  53. XPrereq: "03.00.02"
  54. X*** ../patch2/version.h    Fri Jan  8 13:22:45 1993
  55. X--- ./version.h    Tue Feb  2 14:36:05 1993
  56. X***************
  57. X*** 9,12 ****
  58. X  /*                                                             */
  59. X  /***************************************************************/
  60. X  
  61. X! #define VERSION "03.00.02"
  62. X--- 9,12 ----
  63. X  /*                                                             */
  64. X  /***************************************************************/
  65. X  
  66. X! #define VERSION "03.00.03"
  67. X*** ../patch2/MANIFEST.UNX    Mon Jan 25 15:39:51 1993
  68. X--- ./MANIFEST.UNX    Mon Feb  8 14:26:43 1993
  69. X***************
  70. X*** 23,29 ****
  71. X  init.c
  72. X  kall
  73. X  kall.1
  74. X! lanh.h
  75. X  lnk.msc
  76. X  lnk.tc
  77. X  main.c
  78. X--- 23,29 ----
  79. X  init.c
  80. X  kall
  81. X  kall.1
  82. X! lang.h
  83. X  lnk.msc
  84. X  lnk.tc
  85. X  main.c
  86. X*** ../patch2/Makefile    Mon Jan 25 15:39:39 1993
  87. X--- ./Makefile    Tue Feb  2 14:36:58 1993
  88. X***************
  89. X*** 45,51 ****
  90. X  # YOU SHOULDN'T EDIT ANYTHING BELOW HERE.  You may want to change some things
  91. X  # in config.h; then, you should be able to type 'make'.
  92. X  #-----------------------------------------------------------------------------
  93. X! VERSION= 03.00.02
  94. X  
  95. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  96. X  STDHDRS= config.h types.h protos.h globals.h err.h lang.h
  97. X--- 45,51 ----
  98. X  # YOU SHOULDN'T EDIT ANYTHING BELOW HERE.  You may want to change some things
  99. X  # in config.h; then, you should be able to type 'make'.
  100. X  #-----------------------------------------------------------------------------
  101. X! VERSION= 03.00.03
  102. X  
  103. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  104. X  STDHDRS= config.h types.h protos.h globals.h err.h lang.h
  105. X***************
  106. X*** 99,106 ****
  107. X  var.o: var.c $(STDHDRS) expr.h
  108. X  
  109. X  tarZ:
  110. X!     tar cvf remind-3.0.2.tar $(MANIFEST)
  111. X!     compress -v remind-3.0.2.tar
  112. X  
  113. X  shar:
  114. X      shar -x -n"Remind $(VERSION)" -l45 -o./Shar $(MANIFEST)
  115. X--- 99,106 ----
  116. X  var.o: var.c $(STDHDRS) expr.h
  117. X  
  118. X  tarZ:
  119. X!     tar cvf remind-3.0.3.tar $(MANIFEST)
  120. X!     compress -v remind-3.0.3.tar
  121. X  
  122. X  shar:
  123. X      shar -x -n"Remind $(VERSION)" -l45 -o./Shar $(MANIFEST)
  124. X*** ../patch2/WHATSNEW.30    Mon Feb  1 12:29:52 1993
  125. X--- ./WHATSNEW.30    Mon Feb  8 14:43:57 1993
  126. X***************
  127. X*** 5,10 ****
  128. X--- 5,16 ----
  129. X  Ottawa, Ontario K2C 0J2
  130. X  Canada
  131. X  
  132. X+ * Version 3.0 Patch 3
  133. X+ 
  134. X+ - Corrected bugs in Remind and Rem2PS.  No new features added.  You
  135. X+   should NOT use patch level 2 - either stick to 3.0.1 or upgrade to
  136. X+   3.0.3.
  137. X+ 
  138. X  * Version 3.0 Patch 2
  139. X  
  140. X  - Added the -u option to Remind so that root can run it as any user.
  141. X*** ../patch2/calendar.c    Fri Jan 22 10:26:13 1993
  142. X--- ./calendar.c    Fri Feb  5 14:47:40 1993
  143. X***************
  144. X*** 616,622 ****
  145. X     char *s;
  146. X  
  147. X     /* Parse the trigger date and time */
  148. X!    if (r=ParseRem(p, &trig, &tim)) return r;
  149. X  
  150. X  /* Don't include timed reminders in calendar if -a option supplied. */
  151. X  #ifdef HAVE_QUEUED
  152. X--- 616,622 ----
  153. X     char *s;
  154. X  
  155. X     /* Parse the trigger date and time */
  156. X!    if ( (r=ParseRem(p, &trig, &tim)) ) return r;
  157. X  
  158. X  /* Don't include timed reminders in calendar if -a option supplied. */
  159. X  #ifdef HAVE_QUEUED
  160. X***************
  161. X*** 633,639 ****
  162. X        s = SubstBuffer;
  163. X        if (DoSimpleCalendar || tim.ttime != NO_TIME)
  164. X           s += strlen(SimpleTime(tim.ttime, s));
  165. X!       if (r=DoSubst(p, s, &trig, &tim, jul, CAL_MODE)) return r;
  166. X        if (!*s) return OK;
  167. X        s = SubstBuffer;
  168. X        if (!DoSimpleCalendar) while (isspace(*s)) s++;
  169. X--- 633,639 ----
  170. X        s = SubstBuffer;
  171. X        if (DoSimpleCalendar || tim.ttime != NO_TIME)
  172. X           s += strlen(SimpleTime(tim.ttime, s));
  173. X!       if ( (r=DoSubst(p, s, &trig, &tim, jul, CAL_MODE)) ) return r;
  174. X        if (!*s) return OK;
  175. X        s = SubstBuffer;
  176. X        if (!DoSimpleCalendar) while (isspace(*s)) s++;
  177. X*** ../patch2/dorem.c    Fri Jan 22 10:25:12 1993
  178. X--- ./dorem.c    Fri Feb  5 14:48:35 1993
  179. X***************
  180. X*** 49,55 ****
  181. X     int jul;
  182. X  
  183. X     /* Parse the trigger date and time */
  184. X!    if (r=ParseRem(p, &trig, &tim)) return r;
  185. X  
  186. X     if (trig.typ == NO_TYPE) return E_EOLN;
  187. X     if (trig.typ == SAT_TYPE) return DoSatRemind(&trig, &tim, p);
  188. X--- 49,55 ----
  189. X     int jul;
  190. X  
  191. X     /* Parse the trigger date and time */
  192. X!    if ( (r=ParseRem(p, &trig, &tim)) ) return r;
  193. X  
  194. X     if (trig.typ == NO_TYPE) return E_EOLN;
  195. X     if (trig.typ == SAT_TYPE) return DoSatRemind(&trig, &tim, p);
  196. X***************
  197. X*** 70,76 ****
  198. X  
  199. X  
  200. X     if (ShouldTriggerReminder(&trig, &tim, jul)) {
  201. X!       if (r=TriggerReminder(p, &trig, &tim, jul)) return r;
  202. X     }
  203. X  
  204. X     return OK;
  205. X--- 70,76 ----
  206. X  
  207. X  
  208. X     if (ShouldTriggerReminder(&trig, &tim, jul)) {
  209. X!       if ( (r=TriggerReminder(p, &trig, &tim, jul)) ) return r;
  210. X     }
  211. X  
  212. X     return OK;
  213. X***************
  214. X*** 412,418 ****
  215. X  /* If it's NextMode, process as a CAL-type entry, and issue simple-calendar
  216. X     format. */
  217. X     if (NextMode) {
  218. X!       if (r=DoSubst(p, SubstBuffer, t, tim, jul, CAL_MODE)) return r;
  219. X        if (!*SubstBuffer) return OK;
  220. X        FromJulian(jul, &y, &m, &d);
  221. X        printf("%04d%c%02d%c%02d %s%s\n", y, DATESEP, m+1, DATESEP, d,
  222. X--- 412,418 ----
  223. X  /* If it's NextMode, process as a CAL-type entry, and issue simple-calendar
  224. X     format. */
  225. X     if (NextMode) {
  226. X!       if ( (r=DoSubst(p, SubstBuffer, t, tim, jul, CAL_MODE)) ) return r;
  227. X        if (!*SubstBuffer) return OK;
  228. X        FromJulian(jul, &y, &m, &d);
  229. X        printf("%04d%c%02d%c%02d %s%s\n", y, DATESEP, m+1, DATESEP, d,
  230. X***************
  231. X*** 422,428 ****
  232. X     }
  233. X  
  234. X  /* Put the substituted string into the SubstBuffer */
  235. X!    if (r=DoSubst(p, SubstBuffer, t, tim, jul, NORMAL_MODE)) return r;
  236. X  
  237. X  /* Go for it... */
  238. X     if (t->typ == MSG_TYPE) printf("%s\n", SubstBuffer);
  239. X--- 422,428 ----
  240. X     }
  241. X  
  242. X  /* Put the substituted string into the SubstBuffer */
  243. X!    if ( (r=DoSubst(p, SubstBuffer, t, tim, jul, NORMAL_MODE)) ) return r;
  244. X  
  245. X  /* Go for it... */
  246. X     if (t->typ == MSG_TYPE) printf("%s\n", SubstBuffer);
  247. X*** ../patch2/expr.c    Fri Jan 22 10:23:16 1993
  248. X--- ./expr.c    Fri Feb  5 14:51:35 1993
  249. X***************
  250. X*** 738,745 ****
  251. X     Value v1, v2, v3;
  252. X     int r;
  253. X     
  254. X!    if (r = PopValStack(&v2)) return r;
  255. X!    if (r = PopValStack(&v1)) {
  256. X        DestroyValue(&v2);
  257. X        return r;
  258. X     }
  259. X--- 738,745 ----
  260. X     Value v1, v2, v3;
  261. X     int r;
  262. X     
  263. X!    if ( (r = PopValStack(&v2)) )return r;
  264. X!    if ( (r = PopValStack(&v1)) ) {
  265. X        DestroyValue(&v2);
  266. X        return r;
  267. X     }
  268. X***************
  269. X*** 768,778 ****
  270. X  
  271. X  /* If either is a string, coerce them both to strings and concatenate */
  272. X     if (v1.type == STR_TYPE || v2.type == STR_TYPE) {
  273. X!       if (r = DoCoerce(STR_TYPE, &v1)) {
  274. X             DestroyValue(&v1); DestroyValue(&v2);
  275. X           return r;
  276. X        }
  277. X!       if (r = DoCoerce(STR_TYPE, &v2)) {
  278. X             DestroyValue(&v1); DestroyValue(&v2);
  279. X             return r;
  280. X        }
  281. X--- 768,778 ----
  282. X  
  283. X  /* If either is a string, coerce them both to strings and concatenate */
  284. X     if (v1.type == STR_TYPE || v2.type == STR_TYPE) {
  285. X!       if ( (r = DoCoerce(STR_TYPE, &v1)) ) {
  286. X             DestroyValue(&v1); DestroyValue(&v2);
  287. X           return r;
  288. X        }
  289. X!       if ( (r = DoCoerce(STR_TYPE, &v2)) ) {
  290. X             DestroyValue(&v1); DestroyValue(&v2);
  291. X             return r;
  292. X        }
  293. X***************
  294. X*** 808,815 ****
  295. X     Value v1, v2;
  296. X     int r;
  297. X     
  298. X!    if (r = PopValStack(&v2)) return r;
  299. X!    if (r = PopValStack(&v1)) {
  300. X        DestroyValue(&v2);
  301. X        return r;
  302. X     }
  303. X--- 808,815 ----
  304. X     Value v1, v2;
  305. X     int r;
  306. X     
  307. X!    if ( (r = PopValStack(&v2)) ) return r;
  308. X!    if ( (r = PopValStack(&v1)) ) {
  309. X        DestroyValue(&v2);
  310. X        return r;
  311. X     }
  312. X***************
  313. X*** 862,869 ****
  314. X     Value v1, v2;
  315. X     int r;
  316. X  
  317. X!    if (r = PopValStack(&v2)) return r;
  318. X!    if (r = PopValStack(&v1)) {
  319. X        DestroyValue(&v2);
  320. X        return r;
  321. X     }
  322. X--- 862,869 ----
  323. X     Value v1, v2;
  324. X     int r;
  325. X  
  326. X!    if ( (r = PopValStack(&v2)) ) return r;
  327. X!    if ( (r = PopValStack(&v1)) ) {
  328. X        DestroyValue(&v2);
  329. X        return r;
  330. X     }
  331. X***************
  332. X*** 892,899 ****
  333. X     Value v1, v2;
  334. X     int r;
  335. X  
  336. X!    if (r = PopValStack(&v2)) return r;
  337. X!    if (r = PopValStack(&v1)) {
  338. X        DestroyValue(&v2);
  339. X        return r;
  340. X     }
  341. X--- 892,899 ----
  342. X     Value v1, v2;
  343. X     int r;
  344. X  
  345. X!    if ( (r = PopValStack(&v2)) ) return r;
  346. X!    if ( (r = PopValStack(&v1)) ) {
  347. X        DestroyValue(&v2);
  348. X        return r;
  349. X     }
  350. X***************
  351. X*** 923,930 ****
  352. X     Value v1, v2;
  353. X     int r;
  354. X  
  355. X!    if (r = PopValStack(&v2)) return r;
  356. X!    if (r = PopValStack(&v1)) {
  357. X        DestroyValue(&v2);
  358. X        return r;
  359. X     }
  360. X--- 923,930 ----
  361. X     Value v1, v2;
  362. X     int r;
  363. X  
  364. X!    if ( (r = PopValStack(&v2)) ) return r;
  365. X!    if ( (r = PopValStack(&v1)) ) {
  366. X        DestroyValue(&v2);
  367. X        return r;
  368. X     }
  369. X***************
  370. X*** 979,986 ****
  371. X     Value v1, v2, v3;
  372. X     int r;
  373. X  
  374. X!    if (r = PopValStack(&v2)) return r;
  375. X!    if (r = PopValStack(&v1)) {
  376. X        DestroyValue(&v2);
  377. X        return r;
  378. X     }
  379. X--- 979,986 ----
  380. X     Value v1, v2, v3;
  381. X     int r;
  382. X  
  383. X!    if ( (r = PopValStack(&v2)) ) return r;
  384. X!    if ( (r = PopValStack(&v1)) ) {
  385. X        DestroyValue(&v2);
  386. X        return r;
  387. X     }
  388. X***************
  389. X*** 1038,1045 ****
  390. X     Value v1, v2;
  391. X     int r;
  392. X  
  393. X!    if (r = PopValStack(&v2)) return r;
  394. X!    if (r = PopValStack(&v1)) {
  395. X        DestroyValue(&v2);
  396. X        return r;
  397. X     }
  398. X--- 1038,1045 ----
  399. X     Value v1, v2;
  400. X     int r;
  401. X  
  402. X!    if ( (r = PopValStack(&v2)) ) return r;
  403. X!    if ( (r = PopValStack(&v1)) ) {
  404. X        DestroyValue(&v2);
  405. X        return r;
  406. X     }
  407. X***************
  408. X*** 1068,1075 ****
  409. X     Value v1, v2;
  410. X     int r;
  411. X  
  412. X!    if (r = PopValStack(&v2)) return r;
  413. X!    if (r = PopValStack(&v1)) {
  414. X        DestroyValue(&v2);
  415. X        return r;
  416. X     }
  417. X--- 1068,1075 ----
  418. X     Value v1, v2;
  419. X     int r;
  420. X  
  421. X!    if ( (r = PopValStack(&v2)) ) return r;
  422. X!    if ( (r = PopValStack(&v1)) ) {
  423. X        DestroyValue(&v2);
  424. X        return r;
  425. X     }
  426. X*** ../patch2/files.c    Fri Jan  8 13:25:39 1993
  427. X--- ./files.c    Fri Feb  5 14:52:12 1993
  428. X***************
  429. X*** 337,346 ****
  430. X      char tok[TOKSIZE];
  431. X      int r, e;
  432. X  
  433. X!     if(r=ParseToken(p, tok)) return r;
  434. X      e = VerifyEoln(p); 
  435. X      if (e) Eprint("%s", ErrMsg[e]);
  436. X!     if(r=IncludeFile(tok)) return r;
  437. X      NumIfs = 0;
  438. X      IfFlags = 0;
  439. X      return OK;
  440. X--- 337,346 ----
  441. X      char tok[TOKSIZE];
  442. X      int r, e;
  443. X  
  444. X!     if ( (r=ParseToken(p, tok)) ) return r;
  445. X      e = VerifyEoln(p); 
  446. X      if (e) Eprint("%s", ErrMsg[e]);
  447. X!     if ( (r=IncludeFile(tok)) ) return r;
  448. X      NumIfs = 0;
  449. X      IfFlags = 0;
  450. X      return OK;
  451. X***************
  452. X*** 387,393 ****
  453. X        return OK;
  454. X     }
  455. X     /* Ugh!  We failed!  */
  456. X!    if (r=PopFile()) return r;
  457. X     return E_CANT_OPEN;
  458. X  }
  459. X  
  460. X--- 387,393 ----
  461. X        return OK;
  462. X     }
  463. X     /* Ugh!  We failed!  */
  464. X!    if ( (r=PopFile()) ) return r;
  465. X     return E_CANT_OPEN;
  466. X  }
  467. X  
  468. X*** ../patch2/funcs.c    Fri Jan 22 10:03:07 1993
  469. X--- ./funcs.c    Fri Feb  5 14:43:14 1993
  470. X***************
  471. X*** 426,434 ****
  472. X     for (i=1; i<Nargs; i++) {
  473. X        if (ARG(i).type != type) return E_BAD_TYPE;
  474. X        if (type != STR_TYPE) {
  475. X!      if (ARG(i).v.val > maxptr->v.val) maxptr=&ARG(i);
  476. X        } else {
  477. X!      if (strcmp(ARG(i).v.str, maxptr->v.str) > 0) maxptr=&ARG(i);
  478. X        }
  479. X     }
  480. X     DCOPYVAL(RetVal, *maxptr);
  481. X--- 426,434 ----
  482. X     for (i=1; i<Nargs; i++) {
  483. X        if (ARG(i).type != type) return E_BAD_TYPE;
  484. X        if (type != STR_TYPE) {
  485. X!      if (ARG(i).v.val > maxptr->v.val) maxptr = &ARG(i);
  486. X        } else {
  487. X!      if (strcmp(ARG(i).v.str, maxptr->v.str) > 0) maxptr = &ARG(i);
  488. X        }
  489. X     }
  490. X     DCOPYVAL(RetVal, *maxptr);
  491. X***************
  492. X*** 456,464 ****
  493. X     for (i=1; i<Nargs; i++) {
  494. X        if (ARG(i).type != type) return E_BAD_TYPE;
  495. X        if (type != STR_TYPE) {
  496. X!      if (ARG(i).v.val < minptr->v.val) minptr=&ARG(i);
  497. X        } else {
  498. X!      if (strcmp(ARG(i).v.str, minptr->v.str) < 0) minptr=&ARG(i);
  499. X        }
  500. X     }
  501. X     DCOPYVAL(RetVal, *minptr);
  502. X--- 456,464 ----
  503. X     for (i=1; i<Nargs; i++) {
  504. X        if (ARG(i).type != type) return E_BAD_TYPE;
  505. X        if (type != STR_TYPE) {
  506. X!      if (ARG(i).v.val < minptr->v.val) minptr = &ARG(i);
  507. X        } else {
  508. X!      if (strcmp(ARG(i).v.str, minptr->v.str) < 0) minptr = &ARG(i);
  509. X        }
  510. X     }
  511. X     DCOPYVAL(RetVal, *minptr);
  512. X*** ../patch2/init.c    Mon Feb  1 15:47:17 1993
  513. X--- ./init.c    Mon Feb  8 14:41:06 1993
  514. X***************
  515. X*** 21,27 ****
  516. X--- 21,30 ----
  517. X  #ifdef UNIX
  518. X  #include <sys/types.h>
  519. X  #include <pwd.h>
  520. X+ #ifdef HAVE_UNISTD
  521. X+ #include <unistd.h>
  522. X  #endif
  523. X+ #endif
  524. X  #include <ctype.h>
  525. X  #include "types.h"
  526. X  #include "protos.h"
  527. X***************
  528. X*** 388,394 ****
  529. X  #endif /* HAVE_PROTOS */
  530. X  {
  531. X  #ifdef SYSV
  532. X!    uid_t myuid;
  533. X  #else
  534. X     int myuid;
  535. X  #endif
  536. X--- 391,398 ----
  537. X  #endif /* HAVE_PROTOS */
  538. X  {
  539. X  #ifdef SYSV
  540. X!    /* uid_t myuid; This seems to mess up on XENIX, so forget it... */ 
  541. X!   int myuid;
  542. X  #else
  543. X     int myuid;
  544. X  #endif
  545. X*** ../patch2/main.c    Fri Jan 22 14:22:16 1993
  546. X--- ./main.c    Fri Feb  5 14:55:19 1993
  547. X***************
  548. X*** 763,769 ****
  549. X  
  550. X     if (ShouldIgnoreLine()) syndrome = IF_TRUE | BEFORE_ELSE;
  551. X     else {
  552. X!       if (r = EvaluateExpr(p, &v)) {
  553. X           syndrome = IF_TRUE | BEFORE_ELSE;
  554. X       Eprint("%s", ErrMsg[r]);
  555. X        } else 
  556. X--- 763,769 ----
  557. X  
  558. X     if (ShouldIgnoreLine()) syndrome = IF_TRUE | BEFORE_ELSE;
  559. X     else {
  560. X!       if ( (r = EvaluateExpr(p, &v)) ) {
  561. X           syndrome = IF_TRUE | BEFORE_ELSE;
  562. X       Eprint("%s", ErrMsg[r]);
  563. X        } else 
  564. X***************
  565. X*** 847,853 ****
  566. X     if (NumIfs >= IF_NEST) return E_NESTED_IF;
  567. X     if (ShouldIgnoreLine()) syndrome = IF_TRUE | BEFORE_ELSE;
  568. X     else {
  569. X!       if (r=ParseRem(p, &trig, &tim)) return r;
  570. X        if (trig.typ != NO_TYPE) return E_PARSE_ERR;
  571. X        jul = ComputeTrigger(JulianToday, &trig, &r);
  572. X        if (r) syndrome = IF_TRUE | BEFORE_ELSE;
  573. X--- 847,853 ----
  574. X     if (NumIfs >= IF_NEST) return E_NESTED_IF;
  575. X     if (ShouldIgnoreLine()) syndrome = IF_TRUE | BEFORE_ELSE;
  576. X     else {
  577. X!       if ( (r=ParseRem(p, &trig, &tim)) ) return r;
  578. X        if (trig.typ != NO_TYPE) return E_PARSE_ERR;
  579. X        jul = ComputeTrigger(JulianToday, &trig, &r);
  580. X        if (r) syndrome = IF_TRUE | BEFORE_ELSE;
  581. X***************
  582. X*** 906,912 ****
  583. X  {
  584. X     int r;
  585. X  
  586. X!    if (r = ParseToken(p, TokBuffer)) return r;
  587. X     if (*TokBuffer && (*TokBuffer != '#') && (*TokBuffer != ';')) {
  588. X        Eprint("Expecting end-of-line, found '%s'", TokBuffer);
  589. X        return E_EXTRANEOUS_TOKEN;
  590. X--- 906,912 ----
  591. X  {
  592. X     int r;
  593. X  
  594. X!    if ( (r = ParseToken(p, TokBuffer)) ) return r;
  595. X     if (*TokBuffer && (*TokBuffer != '#') && (*TokBuffer != ';')) {
  596. X        Eprint("Expecting end-of-line, found '%s'", TokBuffer);
  597. X        return E_EXTRANEOUS_TOKEN;
  598. X***************
  599. X*** 1043,1054 ****
  600. X  {
  601. X     int r;
  602. X  
  603. X!    if (r=ParseToken(p, TokBuffer)) return r;
  604. X  
  605. X  /* Only allow RUN ON in top-level script */
  606. X!    if (StriEq(TokBuffer, "ON"))
  607. X        if (TopLevel()) RunDisabled &= ~RUN_SCRIPT;
  608. X! 
  609. X  /* But allow RUN OFF anywhere */
  610. X     else if (StriEq(TokBuffer, "OFF"))
  611. X        RunDisabled |= RUN_SCRIPT;
  612. X--- 1043,1054 ----
  613. X  {
  614. X     int r;
  615. X  
  616. X!    if ( (r=ParseToken(p, TokBuffer)) ) return r;
  617. X  
  618. X  /* Only allow RUN ON in top-level script */
  619. X!    if (StriEq(TokBuffer, "ON")) {
  620. X        if (TopLevel()) RunDisabled &= ~RUN_SCRIPT;
  621. X!    }
  622. X  /* But allow RUN OFF anywhere */
  623. X     else if (StriEq(TokBuffer, "OFF"))
  624. X        RunDisabled |= RUN_SCRIPT;
  625. X***************
  626. X*** 1078,1084 ****
  627. X  
  628. X     t.typ = MSG_TYPE;
  629. X     tt.ttime = SystemTime() / 60;
  630. X!    if (r=DoSubst(p, SubstBuffer, &t, &tt, JulianToday, NORMAL_MODE)) return r;
  631. X     s = SubstBuffer;
  632. X     while (isspace(*s)) s++;
  633. X     fprintf(ErrFp, "%s\n", s);
  634. X--- 1078,1085 ----
  635. X  
  636. X     t.typ = MSG_TYPE;
  637. X     tt.ttime = SystemTime() / 60;
  638. X!    if ( (r=DoSubst(p, SubstBuffer, &t, &tt, JulianToday, NORMAL_MODE)) ) 
  639. X!       return r;
  640. X     s = SubstBuffer;
  641. X     while (isspace(*s)) s++;
  642. X     fprintf(ErrFp, "%s\n", s);
  643. X*** ../patch2/makefile.os2    Mon Jan 25 15:39:23 1993
  644. X--- ./makefile.os2    Tue Feb  2 14:36:47 1993
  645. X***************
  646. X*** 25,31 ****
  647. X  # YOU SHOULDN'T EDIT ANYTHING BELOW HERE.  You may want to change some things
  648. X  # in config.h; then, you should be able to type 'make'.
  649. X  #-----------------------------------------------------------------------------
  650. X! VERSION= 03.00.02
  651. X  
  652. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  653. X  
  654. X--- 25,31 ----
  655. X  # YOU SHOULDN'T EDIT ANYTHING BELOW HERE.  You may want to change some things
  656. X  # in config.h; then, you should be able to type 'make'.
  657. X  #-----------------------------------------------------------------------------
  658. X! VERSION= 03.00.03
  659. X  
  660. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  661. X  
  662. X*** ../patch2/makefile.tc    Mon Jan 25 15:39:12 1993
  663. X--- ./makefile.tc    Tue Feb  2 14:36:38 1993
  664. X***************
  665. X*** 1,6 ****
  666. X  # Makefile for REMIND for Turbo C for MSDOS
  667. X  
  668. X! VERSION= 03.00.02
  669. X  
  670. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  671. X  
  672. X--- 1,6 ----
  673. X  # Makefile for REMIND for Turbo C for MSDOS
  674. X  
  675. X! VERSION= 03.00.03
  676. X  
  677. X  HDRS= config.h err.h expr.h globals.h protos.h types.h version.h lang.h
  678. X  
  679. X*** ../patch2/omit.c    Fri Jan  8 13:24:53 1993
  680. X--- ./omit.c    Fri Feb  5 14:56:03 1993
  681. X***************
  682. X*** 300,306 ****
  683. X     
  684. X  /* Parse the OMIT.  We need a month and day; year is optional. */
  685. X     while(parsing) {
  686. X!       if (r=ParseToken(p, TokBuffer)) return r;
  687. X        FindToken(TokBuffer, &tok);
  688. X        switch (tok.type) {
  689. X           case T_Year:
  690. X--- 300,306 ----
  691. X     
  692. X  /* Parse the OMIT.  We need a month and day; year is optional. */
  693. X     while(parsing) {
  694. X!       if ( (r=ParseToken(p, TokBuffer)) ) return r;
  695. X        FindToken(TokBuffer, &tok);
  696. X        switch (tok.type) {
  697. X           case T_Year:
  698. X*** ../patch2/rem2ps.c    Fri Jan 29 13:33:44 1993
  699. X--- ./rem2ps.c    Mon Feb  8 14:31:59 1993
  700. X***************
  701. X*** 284,290 ****
  702. X     if (UseISO)
  703. X        isostuff = "reencodeISO";
  704. X     else
  705. X!       isostuff = "findfont definefont pop";
  706. X  
  707. X  /* Write the document structuring stuff */
  708. X     printf("%%!PS-Adobe-\n");
  709. X--- 284,290 ----
  710. X     if (UseISO)
  711. X        isostuff = "reencodeISO";
  712. X     else
  713. X!       isostuff = "copyFont";
  714. X  
  715. X  /* Write the document structuring stuff */
  716. X     printf("%%!PS-Adobe-\n");
  717. X*** ../patch2/rem2ps.h    Fri Jan 22 10:55:22 1993
  718. X--- ./rem2ps.h    Mon Feb  8 14:28:33 1993
  719. X***************
  720. X*** 38,43 ****
  721. X--- 38,48 ----
  722. X     "    /Encoding ISOLatin1Encoding def",
  723. X     "    currentdict end definefont pop",
  724. X     "} bind def",
  725. X+    "/copyFont { %def",
  726. X+    "    findfont dup length dict begin",
  727. X+    "    { 1 index /FID ne { def } { pop pop } ifelse } forall",
  728. X+    "    currentdict end definefont pop",
  729. X+    "} bind def",
  730. X     "",
  731. X     "% L - Draw a line",
  732. X     "/L {",
  733. X*** ../patch2/remind.1    Mon Feb  1 16:21:27 1993
  734. X--- ./remind.1    Tue Feb  2 14:36:32 1993
  735. X***************
  736. X*** 1663,1669 ****
  737. X  .TP
  738. X  .B version()
  739. X  Returns a string specifying the version of \fBRemind\fR.  For version 
  740. X! 03.00.02, returns "03.00.02".  It is guaranteed that as new versions of
  741. X  \fBRemind\fR are released, the value returned by \fBversion()\fR will
  742. X  strictly increase, according to the rules for string ordering.
  743. X  .TP
  744. X--- 1663,1669 ----
  745. X  .TP
  746. X  .B version()
  747. X  Returns a string specifying the version of \fBRemind\fR.  For version 
  748. X! 03.00.03, returns "03.00.03".  It is guaranteed that as new versions of
  749. X  \fBRemind\fR are released, the value returned by \fBversion()\fR will
  750. X  strictly increase, according to the rules for string ordering.
  751. X  .TP
  752. X*** ../patch2/test.cmp    Wed Jan  6 18:57:29 1993
  753. X--- ./test.cmp    Tue Feb  2 14:36:18 1993
  754. X***************
  755. X*** 349,355 ****
  756. X  "a05" + "6" => "a056"
  757. X  value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
  758. X  set a058 version()
  759. X! version() => "03.00.02"
  760. X  set a059 wkday(today())
  761. X  today() => 1991/02/16
  762. X  wkday(1991/02/16) => "Saturday"
  763. X--- 349,355 ----
  764. X  "a05" + "6" => "a056"
  765. X  value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
  766. X  set a058 version()
  767. X! version() => "03.00.03"
  768. X  set a059 wkday(today())
  769. X  today() => 1991/02/16
  770. X  wkday(1991/02/16) => "Saturday"
  771. X***************
  772. X*** 453,459 ****
  773. X          a048  "foo"
  774. X          a067  "INT"
  775. X          a039  "February"
  776. X!         a058  "03.00.02"
  777. X          a049  21
  778. X          a068  "STRING"
  779. X          a059  "Saturday"
  780. X--- 453,459 ----
  781. X          a048  "foo"
  782. X          a067  "INT"
  783. X          a039  "February"
  784. X!         a058  "03.00.03"
  785. X          a049  21
  786. X          a068  "STRING"
  787. X          a059  "Saturday"
  788. X*** ../patch2/trigger.c    Fri Jan  8 13:23:30 1993
  789. X--- ./trigger.c    Fri Feb  5 14:56:52 1993
  790. X***************
  791. X*** 94,100 ****
  792. X       else return -1;
  793. X  
  794. X        case GOT_DAY+GOT_MON:
  795. X!      if (m > trig->m || m == trig->m && d > trig->d) y++;
  796. X       if (trig->d > MonthDays[trig->m]) {
  797. X          *err = E_BAD_DATE;
  798. X          return -1;
  799. X--- 94,100 ----
  800. X       else return -1;
  801. X  
  802. X        case GOT_DAY+GOT_MON:
  803. X!      if (m > trig->m || (m == trig->m && d > trig->d)) y++;
  804. X       if (trig->d > MonthDays[trig->m]) {
  805. X          *err = E_BAD_DATE;
  806. X          return -1;
  807. X***************
  808. X*** 177,183 ****
  809. X       return j;
  810. X  
  811. X        case GOT_WD+GOT_YR+GOT_DAY:
  812. X!      if (y > trig->y+1 || y > trig->y && m>0) return -1;
  813. X       if (y > trig->y) {
  814. X          j = Julian(trig->y, 11, trig->d);
  815. X          while(! (trig->wd & (1 << (j%7)))) j++;
  816. X--- 177,183 ----
  817. X       return j;
  818. X  
  819. X        case GOT_WD+GOT_YR+GOT_DAY:
  820. X!      if (y > trig->y+1 || (y > trig->y && m>0)) return -1;
  821. X       if (y > trig->y) {
  822. X          j = Julian(trig->y, 11, trig->d);
  823. X          while(! (trig->wd & (1 << (j%7)))) j++;
  824. X*** ../patch2/userfns.c    Fri Jan  8 13:23:16 1993
  825. X--- ./userfns.c    Fri Feb  5 14:57:30 1993
  826. X***************
  827. X*** 70,76 ****
  828. X     Var *v;
  829. X  
  830. X     /* Get the function name */
  831. X!    if(r=ParseIdentifier(p, TokBuffer)) return r;
  832. X  
  833. X     /* Should be followed by '(' */
  834. X     c = ParseNonSpaceChar(p, &r, 0);
  835. X--- 70,76 ----
  836. X     Var *v;
  837. X  
  838. X     /* Get the function name */
  839. X!    if ( (r=ParseIdentifier(p, TokBuffer)) ) return r;
  840. X  
  841. X     /* Should be followed by '(' */
  842. X     c = ParseNonSpaceChar(p, &r, 0);
  843. X***************
  844. X*** 97,103 ****
  845. X     }
  846. X     else {
  847. X        while(1) {
  848. X!      if (r=ParseIdentifier(p, TokBuffer)) return r;
  849. X       v = NEW(Var);
  850. X       func->nargs++;
  851. X       v->v.type = ERR_TYPE;
  852. X--- 97,103 ----
  853. X     }
  854. X     else {
  855. X        while(1) {
  856. X!      if ( (r=ParseIdentifier(p, TokBuffer)) ) return r;
  857. X       v = NEW(Var);
  858. X       func->nargs++;
  859. X       v->v.type = ERR_TYPE;
  860. X***************
  861. X*** 313,319 ****
  862. X     Var *var;
  863. X  
  864. X     for (i=0, var=f->locals; var && i<f->nargs; var=var->next, i++) {
  865. X!       if (r=PopValStack(&(var->v))) {
  866. X       DestroyLocalVals(f);
  867. X       return r;
  868. X        }
  869. X--- 313,319 ----
  870. X     Var *var;
  871. X  
  872. X     for (i=0, var=f->locals; var && i<f->nargs; var=var->next, i++) {
  873. X!       if ( (r=PopValStack(&(var->v))) ) {
  874. X       DestroyLocalVals(f);
  875. X       return r;
  876. X        }
  877. SHAR_EOF
  878. $TOUCH -am 0208144593 patch.03 &&
  879. chmod 0600 patch.03 ||
  880. echo "restore of patch.03 failed"
  881. set `wc -c patch.03`;Wc_c=$1
  882. if test "$Wc_c" != "22550"; then
  883.     echo original size 22550, current size $Wc_c
  884. fi
  885. exit 0
  886.  
  887.  
  888. exit 0 # Just in case...
  889.