home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume23 / tin / patch05c < prev    next >
Encoding:
Text File  |  1991-10-19  |  48.7 KB  |  2,019 lines

  1. Newsgroups: comp.sources.misc
  2. From: iain@norisc.siemens.de (Iain J. Lea)
  3. Subject:  v23i086:  tin - threaded full screen newsreader, Patch05c/4
  4. Message-ID: <1991Oct20.032613.25168@sparky.imd.sterling.com>
  5. X-Md4-Signature: 6327a1217cad12c0539c783b403c11ad
  6. Date: Sun, 20 Oct 1991 03:26:13 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: iain@norisc.siemens.de (Iain J. Lea)
  10. Posting-number: Volume 23, Issue 86
  11. Archive-name: tin/patch05c
  12. Environment: BSD, SCO, ISC, SUNOS, SYSVR3, SYSVR4, ULTRIX, XENIX
  13. Patch-To: tin: Volume 23, Issue 15-23
  14.  
  15. #!/bin/sh
  16. # this is patch05.shar.03 (part 3 of tin)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file tin.patch05 continued
  19. #
  20. if touch 2>&1 | fgrep '[-amc]' > /dev/null
  21.  then TOUCH=touch
  22.  else TOUCH=true
  23. fi
  24. if test ! -r shar3_seq_.tmp; then
  25.     echo "Please unpack part 1 first!"
  26.     exit 1
  27. fi
  28. (read Scheck
  29.  if test "$Scheck" != 3; then
  30.     echo "Please unpack part $Scheck next!"
  31.     exit 1
  32.  else
  33.     exit 0
  34.  fi
  35. ) < shar3_seq_.tmp || exit 1
  36. echo "x - Continuing file tin.patch05"
  37. sed 's/^X//' << 'SHAR_EOF' >> tin.patch05 &&
  38. X+                 set_tin_uid_gid ();
  39. X                  break;
  40. X  
  41. X              case 't':    /* return to group selection page */
  42. X!                 art_close ();
  43. X                  if (kill_state == KILLING) {
  44. X                      if (kill_articles) {
  45. X                          kill_any_articles (group);
  46. X***************
  47. X*** 558,563 ****
  48. X--- 580,591 ----
  49. X                  break;
  50. X  
  51. X              case 'w':    /* post a basenote */
  52. X+ #ifdef USE_NNTP
  53. X+                 if (! can_post) {
  54. X+                     info_message (txt_cannot_post);
  55. X+                     break;
  56. X+                 }
  57. X+ #endif
  58. X                  if (post_base (group)) {
  59. X                      update_newsrc (group, my_group[cur_groupnum], FALSE);
  60. X                      index_group (group, group_path);
  61. X***************
  62. X*** 650,658 ****
  63. X  
  64. X                      while (i++ < j)
  65. X                          *q++ = ' ';
  66. X!                 } else if (((*p) & 0x7F) < 32) {
  67. X                      *q++ = '^';
  68. X!                     *q++ = ((*p) & 0x7F) + '@';
  69. X                  } else if (*p >= 'A' && *p <= 'Z')
  70. X                      *q++ = 'A' + (*p - 'A' + rotate) % 26;
  71. X                  else if (*p >= 'a' && *p <= 'z')
  72. X--- 678,686 ----
  73. X  
  74. X                      while (i++ < j)
  75. X                          *q++ = ' ';
  76. X!                 } else if (((*p) & 0xFF) < ' ') {
  77. X                      *q++ = '^';
  78. X!                     *q++ = ((*p) & 0xFF) + '@';
  79. X                  } else if (*p >= 'A' && *p <= 'Z')
  80. X                      *q++ = 'A' + (*p - 'A' + rotate) % 26;
  81. X                  else if (*p >= 'a' && *p <= 'z')
  82. X***************
  83. X*** 675,683 ****
  84. X  
  85. X                      while (i++ < j)
  86. X                          *q++ = ' ';
  87. X!                 } else if (((*p) & 0x7F) < 32) {
  88. X                      *q++ = '^';
  89. X!                     *q++ = ((*p) & 0x7F) + '@';
  90. X                  } else
  91. X                      *q++ = *p;
  92. X              }
  93. X--- 703,711 ----
  94. X  
  95. X                      while (i++ < j)
  96. X                          *q++ = ' ';
  97. X!                 } else if (((*p) & 0xFF) < ' ') {
  98. X                      *q++ = '^';
  99. X!                     *q++ = ((*p) & 0xFF) + '@';
  100. X                  } else
  101. X                      *q++ = *p;
  102. X              }
  103. X***************
  104. X*** 844,850 ****
  105. X  }
  106. X  
  107. X  
  108. X! void open_note (art, group_path)
  109. X      long art;
  110. X      char *group_path;
  111. X  {
  112. X--- 872,878 ----
  113. X  }
  114. X  
  115. X  
  116. X! void art_open (art, group_path)
  117. X      long art;
  118. X      char *group_path;
  119. X  {
  120. X***************
  121. X*** 872,878 ****
  122. X          buf[1024] = '\0';
  123. X  
  124. X          for (p=buf ; *p && *p != '\n' ; p++) {
  125. X!             if (((*p) & 0x7F) < 32)
  126. X                  *p = ' ';
  127. X          }
  128. X          *p = '\0';
  129. X--- 900,906 ----
  130. X          buf[1024] = '\0';
  131. X  
  132. X          for (p=buf ; *p && *p != '\n' ; p++) {
  133. X!             if (((*p) & 0xFF) < ' ')
  134. X                  *p = ' ';
  135. X          }
  136. X          *p = '\0';
  137. X***************
  138. X*** 880,913 ****
  139. X          if (*buf == '\0')
  140. X              break;
  141. X  
  142. X!         if (strncmp(buf, "From: ", 6) == 0) {
  143. X!             strcpy(note_h_from, &buf[6]);
  144. X!             note_h_from[LEN-1] = '\0';
  145. X!         } else if (strncmp(buf, "Path: ", 6) == 0) {
  146. X!             strcpy(note_h_path, &buf[6]);
  147. X!             note_h_path[LEN-1] = '\0';
  148. X!         } else if (strncmp(buf, "Subject: ", 9) == 0) {
  149. X!             strcpy(note_h_subj, &buf[9]);
  150. X!             note_h_subj[LEN-1] = '\0';
  151. X!         } else if (strncmp(buf, "Organization: ", 14) == 0) {
  152. X!             strcpy(note_h_org, &buf[14]);
  153. X!             note_h_org[LEN-1] = '\0';
  154. X!         } else if (strncmp(buf, "Date: ", 6) == 0) {
  155. X!             strcpy(note_h_date, &buf[6]);
  156. X!             note_h_date[LEN-1] = '\0';
  157. X!         } else if (strncmp(buf, "Newsgroups: ", 12) == 0) {
  158. X!             strcpy(note_h_newsgroups, &buf[12]);
  159. X!             note_h_newsgroups[LEN-1] = '\0';
  160. X!         } else if (strncmp(buf, "Message-ID: ", 12) == 0) {
  161. X!             strcpy(note_h_messageid, &buf[12]);
  162. X!             note_h_messageid[LEN-1] = '\0';
  163. X!         } else if (strncmp(buf, "Distribution: ", 14) == 0) {
  164. X!             strcpy(note_h_distrib, &buf[14]);
  165. X!             note_h_distrib[LEN-1] = '\0';
  166. X!         } else if (strncmp(buf, "Followup-To: ", 13) == 0) {
  167. X!             strcpy(note_h_followup, &buf[13]);
  168. X!             note_h_followup[LEN-1] = '\0';
  169. X!         }
  170. X      }
  171. X  
  172. X      note_page = 0;
  173. X--- 908,933 ----
  174. X          if (*buf == '\0')
  175. X              break;
  176. X  
  177. X!           if (match_header (buf, "From", note_h_from, LEN))
  178. X!               continue;
  179. X!           if (match_header (buf, "Path", note_h_path, LEN))
  180. X!               continue;
  181. X!           if (match_header (buf, "Subject", note_h_subj, LEN))
  182. X!               continue;
  183. X!           if (match_header (buf, "Organization", note_h_org, LEN))
  184. X!               continue;
  185. X!           if (match_header (buf, "Date", note_h_date, LEN))
  186. X!               continue;
  187. X!           if (match_header (buf, "Newsgroups", note_h_newsgroups, LEN))
  188. X!               continue;
  189. X!           if (match_header (buf, "Message-ID", note_h_messageid, LEN))
  190. X!               continue;
  191. X!           if (match_header (buf, "Message-Id", note_h_messageid, LEN))
  192. X!               continue;
  193. X!           if (match_header (buf, "Distribution", note_h_distrib, LEN))
  194. X!               continue;
  195. X!           if (match_header (buf, "Followup-To", note_h_followup, LEN))
  196. X!               continue;
  197. X      }
  198. X  
  199. X      note_page = 0;
  200. X***************
  201. X*** 920,929 ****
  202. X  }
  203. X  
  204. X  
  205. X! void note_cleanup()
  206. X  {
  207. X      if (note_page != NOTE_UNAVAIL)
  208. X!         fclose(note_fp);
  209. X  }
  210. X  
  211. X  
  212. X--- 940,949 ----
  213. X  }
  214. X  
  215. X  
  216. X! void art_close ()
  217. X  {
  218. X      if (note_page != NOTE_UNAVAIL)
  219. X!         fclose (note_fp);
  220. X  }
  221. X  
  222. X  
  223. X***************
  224. X*** 975,981 ****
  225. X      char *p;
  226. X      
  227. X      for (p=str ; *p ; p++) {
  228. X!         if (((*p) & 0x7F) < 32)
  229. X              *p = ' ';
  230. X      }
  231. X  
  232. X--- 995,1001 ----
  233. X      char *p;
  234. X      
  235. X      for (p=str ; *p ; p++) {
  236. X!         if (((*p) & 0xFF) < ' ')
  237. X              *p = ' ';
  238. X      }
  239. X  
  240. X***************
  241. X*** 1069,1075 ****
  242. X      char *p;
  243. X  
  244. X      for (p = orig; *p; p++)
  245. X!         if (((*p) & 0x7F) < 32)
  246. X              *p = ' ';
  247. X  
  248. X      while (*addr)
  249. X--- 1089,1095 ----
  250. X      char *p;
  251. X  
  252. X      for (p = orig; *p; p++)
  253. X!         if (((*p) & 0xFF) < ' ')
  254. X              *p = ' ';
  255. X  
  256. X      while (*addr)
  257. X***************
  258. X*** 1143,1151 ****
  259. X                      while (i++ < j) {
  260. X                          *q++ = ' ';
  261. X                      }
  262. X!                 } else if (((*p) & 0x7F) < 32) {
  263. X                      *q++ = '^';
  264. X!                     *q++ = ((*p) & 0x7F) + '@';
  265. X                  } else {
  266. X                      *q++ = *p;
  267. X                  }
  268. X--- 1163,1171 ----
  269. X                      while (i++ < j) {
  270. X                          *q++ = ' ';
  271. X                      }
  272. X!                 } else if (((*p) & 0xFF) < ' ') {
  273. X                      *q++ = '^';
  274. X!                     *q++ = ((*p) & 0xFF) + '@';
  275. X                  } else {
  276. X                      *q++ = *p;
  277. X                  }
  278. X***************
  279. X*** 1167,1170 ****
  280. X--- 1187,1210 ----
  281. X      }
  282. X      fseek (note_fp, note_mark[note_page], 0);
  283. X      return TRUE;
  284. X+ }
  285. X+ 
  286. X+ 
  287. X+ int match_header (buf, pat, body, len)
  288. X+     char *buf;
  289. X+     char *pat;
  290. X+     char *body;
  291. X+     int    len;
  292. X+ {
  293. X+     int    plen = strlen (pat);
  294. X+ 
  295. X+     if(strncmp (buf, pat, plen) == 0 && buf[plen] == ':' && buf[plen + 1] == ' ') {
  296. X+         plen += 2;
  297. X+         while (buf[plen] == ' ')
  298. X+             plen++;
  299. X+         strncpy (body, &buf[plen], len);
  300. X+         body[len - 1] = '\0';
  301. X+         return TRUE;
  302. X+     }
  303. X+     return FALSE;
  304. X  }
  305. Xdiff -rcs ../104/patchlevel.h ./patchlevel.h
  306. X*** ../104/patchlevel.h    Mon Sep 30 19:38:32 1991
  307. X--- ./patchlevel.h    Wed Oct  2 20:21:38 1991
  308. X***************
  309. X*** 1 ****
  310. X! #define PATCHLEVEL    4
  311. X--- 1 ----
  312. X! #define PATCHLEVEL    5
  313. Xdiff -rcs ../104/post.c ./post.c
  314. X*** ../104/post.c    Wed Oct  2 08:28:24 1991
  315. X--- ./post.c    Wed Oct 16 20:32:39 1991
  316. X***************
  317. X*** 3,9 ****
  318. X   *  Module    : post.c
  319. X   *  Author    : I.Lea
  320. X   *  Created   : 01-04-91
  321. X!  *  Updated   : 30-09-91
  322. X   *  Release   : 1.0
  323. X   *  Notes     : mailing/posting/replying/followup & cancel article routines
  324. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  325. X--- 3,9 ----
  326. X   *  Module    : post.c
  327. X   *  Author    : I.Lea
  328. X   *  Created   : 01-04-91
  329. X!  *  Updated   : 16-10-91
  330. X   *  Release   : 1.0
  331. X   *  Notes     : mailing/posting/replying/followup & cancel article routines
  332. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  333. X***************
  334. X*** 171,176 ****
  335. X--- 171,178 ----
  336. X          }
  337. X      }
  338. X      
  339. X+     wait_message (txt_post_an_article);
  340. X+ 
  341. X      set_real_uid_gid ();
  342. X  
  343. X      if ((fp = fopen (article, "w")) == NULL) {
  344. X***************
  345. X*** 213,225 ****
  346. X  
  347. X          case 'p':
  348. X              wait_message (txt_posting);
  349. X!             if (debug) {
  350. X!                 sprintf (buf, "%s/inews -h < %s", INEWSDIR, article);
  351. X!             } else {
  352. X!                 sprintf (buf, "%s/inews -h < %s > /dev/null 2>&1",
  353. X!                     INEWSDIR, article);
  354. X!             }
  355. X!             if (invoke_cmd (buf)) {
  356. X                  unlink (article);
  357. X                  info_message (txt_art_posted);
  358. X                  goto post_base_done;
  359. X--- 215,221 ----
  360. X  
  361. X          case 'p':
  362. X              wait_message (txt_posting);
  363. X!             if (submit_file (article)) {
  364. X                  unlink (article);
  365. X                  info_message (txt_art_posted);
  366. X                  goto post_base_done;
  367. X***************
  368. X*** 261,267 ****
  369. X  
  370. X      start_line_offset = 4;
  371. X  
  372. X!     wait_message ("Post a followup...");
  373. X      
  374. X      if (*note_h_followup && strcmp (note_h_followup, "poster") == 0) {
  375. X          clear_message ();
  376. X--- 257,263 ----
  377. X  
  378. X      start_line_offset = 4;
  379. X  
  380. X!     wait_message (txt_post_a_followup);
  381. X      
  382. X      if (*note_h_followup && strcmp (note_h_followup, "poster") == 0) {
  383. X          clear_message ();
  384. X***************
  385. X*** 352,364 ****
  386. X  
  387. X          case 'p':
  388. X              wait_message (txt_posting);
  389. X!             if (debug) {
  390. X!                 sprintf (buf, "%s/inews -h < %s", INEWSDIR, article);
  391. X!             } else {
  392. X!                 sprintf (buf, "%s/inews -h < %s > /dev/null 2>&1",
  393. X!                     INEWSDIR, article);
  394. X!             }
  395. X!             if (invoke_cmd (buf)) {
  396. X                  unlink (article);
  397. X                  info_message (txt_art_posted);
  398. X                  goto post_response_done;
  399. X--- 348,354 ----
  400. X  
  401. X          case 'p':
  402. X              wait_message (txt_posting);
  403. X!             if (submit_file (article)) {
  404. X                  unlink (article);
  405. X                  info_message (txt_art_posted);
  406. X                  goto post_response_done;
  407. X***************
  408. X*** 502,508 ****
  409. X  
  410. X      start_line_offset = 5;
  411. X      
  412. X!     wait_message ("Mail bug report...");
  413. X      
  414. X      set_real_uid_gid ();
  415. X  
  416. X--- 492,498 ----
  417. X  
  418. X      start_line_offset = 5;
  419. X      
  420. X!     wait_message (txt_mail_bug_report);
  421. X      
  422. X      set_real_uid_gid ();
  423. X  
  424. X***************
  425. X*** 591,597 ****
  426. X  
  427. X      start_line_offset = 4;
  428. X      
  429. X!     wait_message ("Reply to author...");
  430. X  
  431. X      set_real_uid_gid ();
  432. X  
  433. X--- 581,587 ----
  434. X  
  435. X      start_line_offset = 4;
  436. X      
  437. X!     wait_message (txt_reply_to_author);
  438. X  
  439. X      set_real_uid_gid ();
  440. X  
  441. X***************
  442. X*** 693,699 ****
  443. X          return;
  444. X      }
  445. X  
  446. X!     while (fgets(buf, 1024, fp) != NULL) {
  447. X          for (p = buf; *p && *p != '\n'; p++)
  448. X              continue;
  449. X          *p = '\0';
  450. X--- 683,689 ----
  451. X          return;
  452. X      }
  453. X  
  454. X!     while (fgets(buf, sizeof (buf), fp) != NULL) {
  455. X          for (p = buf; *p && *p != '\n'; p++)
  456. X              continue;
  457. X          *p = '\0';
  458. X***************
  459. X*** 761,767 ****
  460. X  
  461. X      fprintf (fp, "Article cancelled from within tin\n");
  462. X      
  463. X-     add_signature (fp, TRUE);
  464. X      fclose (fp);
  465. X      
  466. X      while (1) {
  467. X--- 751,756 ----
  468. X***************
  469. X*** 789,796 ****
  470. X  
  471. X          case 'c':
  472. X              wait_message (txt_cancelling);
  473. X!             sprintf (buf, "%s/inews -h < %s", INEWSDIR, cancel);
  474. X!             if (invoke_cmd (buf)) {
  475. X                  info_message (txt_art_cancelled);
  476. X                  goto cancel_article_done;
  477. X              } else {
  478. X--- 778,784 ----
  479. X  
  480. X          case 'c':
  481. X              wait_message (txt_cancelling);
  482. X!             if (submit_file (cancel)) {
  483. X                  info_message (txt_art_cancelled);
  484. X                  goto cancel_article_done;
  485. X              } else {
  486. X***************
  487. X*** 805,808 ****
  488. X--- 793,819 ----
  489. X      set_tin_uid_gid ();
  490. X  
  491. X      return (redraw_screen);
  492. X+ }
  493. X+ 
  494. X+ int
  495. X+ submit_file(name)
  496. X+ char*    name;
  497. X+ {
  498. X+     char    buf[LEN];
  499. X+     char*    cp = buf;
  500. X+ 
  501. X+ #ifdef INEWSDIR
  502. X+     strcpy(buf, INEWSDIR);
  503. X+     strcat(buf, "/");
  504. X+     cp = &buf[strlen(buf)];
  505. X+ #endif
  506. X+ 
  507. X+     if (debug)
  508. X+         sprintf (cp, "inews -h < %s", name);
  509. X+     else
  510. X+         sprintf (cp, "inews -h < %s > /dev/null 2>&1", name);
  511. X+ 
  512. X+     if (invoke_cmd(buf))
  513. X+         return TRUE;
  514. X+     return FALSE;
  515. X  }
  516. Xdiff -rcs ../104/prompt.c ./prompt.c
  517. X*** ../104/prompt.c    Mon Sep 30 20:51:37 1991
  518. X--- ./prompt.c    Tue Oct  8 19:35:19 1991
  519. X***************
  520. X*** 29,34 ****
  521. X--- 29,35 ----
  522. X      int len;
  523. X      int i;
  524. X      int num;
  525. X+     int    ic = ch & 0xFF;
  526. X  
  527. X      MoveCursor (LINES,0);
  528. X      printf ("%s %c",prompt,ch);
  529. X***************
  530. X*** 36,48 ****
  531. X      buf[0] = ch;
  532. X      buf[1] = '\0';
  533. X      len = 1;
  534. X!     ch = ReadCh ();
  535. X!     while (ch != '\n' && ch != '\r') {
  536. X!         if (ch == ESC) {        /* Esc pressed so return */
  537. X              clear_message ();
  538. X              return -1;
  539. X          }
  540. X!         if (ch == 8 || ch == 127) {
  541. X              if (len) {
  542. X                  len--;
  543. X                  buf[len] = '\0';
  544. X--- 37,52 ----
  545. X      buf[0] = ch;
  546. X      buf[1] = '\0';
  547. X      len = 1;
  548. X!      ic = ReadCh ();
  549. X!      if(ic == EOF)
  550. X!          return (-1);
  551. X!      ic &= 0xFF;
  552. X!      while (ic != '\n' && ic != '\r') {
  553. X!         if (ic == ESC) {        /* Esc pressed so return */
  554. X              clear_message ();
  555. X              return -1;
  556. X          }
  557. X!          if (ic == '\b' || ic == 127) {
  558. X              if (len) {
  559. X                  len--;
  560. X                  buf[len] = '\0';
  561. X***************
  562. X*** 54,61 ****
  563. X                  CleartoEOLN ();
  564. X                  return (-1);
  565. X              }
  566. X!         } else if (ch == 21) {    /* control-U    */
  567. X!             for (i = len ; i>0 ; i--) {
  568. X                  putchar ('\b');
  569. X                  putchar (' ');
  570. X                  putchar ('\b');
  571. X--- 58,65 ----
  572. X                  CleartoEOLN ();
  573. X                  return (-1);
  574. X              }
  575. X!         } else if (ic == 21) {    /* control-U    */
  576. X!             for (i = len; i > 0; i--) {
  577. X                  putchar ('\b');
  578. X                  putchar (' ');
  579. X                  putchar ('\b');
  580. X***************
  581. X*** 62,75 ****
  582. X              }
  583. X              buf[0] = '\0';
  584. X              len = 0;
  585. X!         } else if (ch >= '0' && ch <= '9' && len < 4) {
  586. X!             buf[len++] = ch;
  587. X              buf[len] = '\0';
  588. X!             putchar (ch);
  589. X          } else
  590. X              putchar (7);
  591. X          fflush (stdout);
  592. X!         ch = ReadCh ();
  593. X      }
  594. X  
  595. X      MoveCursor (LINES, 0);
  596. X--- 66,82 ----
  597. X              }
  598. X              buf[0] = '\0';
  599. X              len = 0;
  600. X!         } else if (ic >= '0' && ic <= '9' && len < 4) {
  601. X!             buf[len++] = ic;
  602. X              buf[len] = '\0';
  603. X!             putchar (ic);
  604. X          } else
  605. X              putchar (7);
  606. X          fflush (stdout);
  607. X!         ic = ReadCh ();
  608. X!         if(ic == EOF)
  609. X!             return (-1);
  610. X!         ic &= 0xFF;
  611. X      }
  612. X  
  613. X      MoveCursor (LINES, 0);
  614. X***************
  615. X*** 79,88 ****
  616. X          num = atoi (buf);
  617. X          return (num);
  618. X      } else
  619. X!         return(-1);
  620. X  }
  621. X  
  622. X- 
  623. X  /*
  624. X   *  parse_string
  625. X   *  get a string from the user
  626. X--- 86,94 ----
  627. X          num = atoi (buf);
  628. X          return (num);
  629. X      } else
  630. X!         return (-1);
  631. X  }
  632. X  
  633. X  /*
  634. X   *  parse_string
  635. X   *  get a string from the user
  636. X***************
  637. X*** 93,99 ****
  638. X      char *prompt;
  639. X      char *buf;
  640. X  {
  641. X!     char ch;
  642. X      int i, len;
  643. X      int max_len;
  644. X  
  645. X--- 99,105 ----
  646. X      char *prompt;
  647. X      char *buf;
  648. X  {
  649. X!     int ch;
  650. X      int i, len;
  651. X      int max_len;
  652. X  
  653. X***************
  654. X*** 106,118 ****
  655. X      len = 0;
  656. X      max_len = (COLS - strlen (prompt))-2;
  657. X      ch = ReadCh ();
  658. X! 
  659. X      while (ch != '\n' && ch != '\r') {
  660. X          if (ch == ESC) {        /* Esc pressed so abort */
  661. X              clear_message ();
  662. X              return FALSE;
  663. X          }
  664. X!         if (ch == 8 || ch == 127) {
  665. X              if (len) {
  666. X                  len--;
  667. X                  buf[len] = '\0';
  668. X--- 112,126 ----
  669. X      len = 0;
  670. X      max_len = (COLS - strlen (prompt))-2;
  671. X      ch = ReadCh ();
  672. X!      if(ch == EOF)
  673. X!          return FALSE;
  674. X!      ch &= 0xFF;
  675. X      while (ch != '\n' && ch != '\r') {
  676. X          if (ch == ESC) {        /* Esc pressed so abort */
  677. X              clear_message ();
  678. X              return FALSE;
  679. X          }
  680. X!         if (ch == '\b' || ch == 127) {
  681. X              if (len) {
  682. X                  len--;
  683. X                  buf[len] = '\0';
  684. X***************
  685. X*** 187,193 ****
  686. X                  CleartoEOLN();
  687. X              }
  688. X          } else if (ch == 21) {    /* control-U    */
  689. X!             for (i = len;i>0;i--) {
  690. X                  putchar('\b');
  691. X                  putchar(' ');
  692. X                  putchar('\b');
  693. X--- 195,201 ----
  694. X                  CleartoEOLN();
  695. X              }
  696. X          } else if (ch == 21) {    /* control-U    */
  697. X!             for (i = len; i > 0; i--) {
  698. X                  putchar('\b');
  699. X                  putchar(' ');
  700. X                  putchar('\b');
  701. X***************
  702. X*** 202,207 ****
  703. X--- 210,218 ----
  704. X              putchar(7);
  705. X          fflush(stdout);
  706. X          ch = ReadCh();
  707. X+         if(ch == EOF)
  708. X+             return FALSE;
  709. X+         ch &= 0xFF;
  710. X      }
  711. X  
  712. X      if (buf[0]) {
  713. Xdiff -rcs ../104/proto.h ./proto.h
  714. X*** ../104/proto.h    Mon Sep 30 20:32:10 1991
  715. X--- ./proto.h    Wed Oct 16 19:52:10 1991
  716. X***************
  717. X*** 28,33 ****
  718. X--- 28,34 ----
  719. X  /* curses.c */
  720. X  int InitScreen(void);
  721. X  void ScreenSize(int *num_lines, int *num_columns);
  722. X+ void EndWin(void);
  723. X  void ClearScreen(void);
  724. X  void MoveCursor(int row, int col);
  725. X  void CleartoEOLN(void);
  726. X***************
  727. X*** 153,160 ****
  728. X  void show_note_page(int respnum, char *group);
  729. X  void show_first_header(int respnum, char *group);
  730. X  void show_cont_header(int respnum);
  731. X! void open_note(long art, char *group_path);
  732. X! void note_cleanup(void);
  733. X  int prompt_response(int ch, int respnum);
  734. X  int choose_resp(int i, int n);
  735. X  void parse_from(char *str, char *addr, char *name);
  736. X--- 154,161 ----
  737. X  void show_note_page(int respnum, char *group);
  738. X  void show_first_header(int respnum, char *group);
  739. X  void show_cont_header(int respnum);
  740. X! void art_open(long art, char *group_path);
  741. X! void art_close(void);
  742. X  int prompt_response(int ch, int respnum);
  743. X  int choose_resp(int i, int n);
  744. X  void parse_from(char *str, char *addr, char *name);
  745. X***************
  746. X*** 163,168 ****
  747. X--- 164,170 ----
  748. X  int next_basenote(int n);
  749. X  void yank_to_addr(char *orig, char *addr);
  750. X  int show_last_page(void);
  751. X+ int match_header(char *buf, char *pat, char *body, int len);
  752. X  /* post.c */
  753. X  int user_posted_messages(void);
  754. X  void update_art_posted_file(char *group, char *subj);
  755. X***************
  756. X*** 173,178 ****
  757. X--- 175,181 ----
  758. X  int mail_to_author(int copy_text);
  759. X  void find_new_to(char *nam, char *mail_to);
  760. X  int cancel_article(void);
  761. X+ int submit_file(char *name);
  762. X  /* prompt.c */
  763. X  int parse_num(int ch, char *prompt);
  764. X  int parse_string(char *prompt, char *buf);
  765. X***************
  766. X*** 281,286 ****
  767. X--- 284,290 ----
  768. X  /* curses.c */
  769. X  int InitScreen(/*void*/);
  770. X  void ScreenSize(/*int *num_lines, int *num_columns*/);
  771. X+ void EndWin(/*void*/);
  772. X  void ClearScreen(/*void*/);
  773. X  void MoveCursor(/*int row, int col*/);
  774. X  void CleartoEOLN(/*void*/);
  775. X***************
  776. X*** 406,413 ****
  777. X  void show_note_page(/*int respnum, char *group*/);
  778. X  void show_first_header(/*int respnum, char *group*/);
  779. X  void show_cont_header(/*int respnum*/);
  780. X! void open_note(/*long art, char *group_path*/);
  781. X! void note_cleanup(/*void*/);
  782. X  int prompt_response(/*int ch, int respnum*/);
  783. X  int choose_resp(/*int i, int n*/);
  784. X  void parse_from(/*char *str, char *addr, char *name*/);
  785. X--- 410,417 ----
  786. X  void show_note_page(/*int respnum, char *group*/);
  787. X  void show_first_header(/*int respnum, char *group*/);
  788. X  void show_cont_header(/*int respnum*/);
  789. X! void art_open(/*long art, char *group_path*/);
  790. X! void art_close(/*void*/);
  791. X  int prompt_response(/*int ch, int respnum*/);
  792. X  int choose_resp(/*int i, int n*/);
  793. X  void parse_from(/*char *str, char *addr, char *name*/);
  794. X***************
  795. X*** 416,421 ****
  796. X--- 420,426 ----
  797. X  int next_basenote(/*int n*/);
  798. X  void yank_to_addr(/*char *orig, char *addr*/);
  799. X  int show_last_page(/*void*/);
  800. X+ int match_header(/*char *buf, char *pat, char *body, int len*/);
  801. X  /* post.c */
  802. X  int user_posted_messages(/*void*/);
  803. X  void update_art_posted_file(/*char *group, char *subj*/);
  804. X***************
  805. X*** 426,431 ****
  806. X--- 431,437 ----
  807. X  int mail_to_author(/*int copy_text*/);
  808. X  void find_new_to(/*char *nam, char *mail_to*/);
  809. X  int cancel_article(/*void*/);
  810. X+ int submit_file(/*char *name*/);
  811. X  /* prompt.c */
  812. X  int parse_num(/*int ch, char *prompt*/);
  813. X  int parse_string(/*char *prompt, char *buf*/);
  814. Xdiff -rcs ../104/rcfile.c ./rcfile.c
  815. X*** ../104/rcfile.c    Mon Sep 30 20:24:53 1991
  816. X--- ./rcfile.c    Tue Oct  8 10:46:42 1991
  817. X***************
  818. X*** 3,9 ****
  819. X   *  Module    : rcfile.c
  820. X   *  Author    : I.Lea
  821. X   *  Created   : 01-04-91
  822. X!  *  Updated   : 30-09-91
  823. X   *  Release   : 1.0
  824. X   *  Notes     :
  825. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  826. X--- 3,9 ----
  827. X   *  Module    : rcfile.c
  828. X   *  Author    : I.Lea
  829. X   *  Created   : 01-04-91
  830. X!  *  Updated   : 09-10-91
  831. X   *  Release   : 1.0
  832. X   *  Notes     :
  833. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  834. X***************
  835. X*** 80,86 ****
  836. X                      strncpy (savedir, &buf[8], LEN);
  837. X                      savedir[strlen (savedir) - 1] = '\0';
  838. X                      if (savedir[0] == '.' && strlen (savedir) == 1) {
  839. X! #ifdef BSD
  840. X                          getwd (buf);    
  841. X  #else
  842. X                          getcwd (buf, LEN);
  843. X--- 80,86 ----
  844. X                      strncpy (savedir, &buf[8], LEN);
  845. X                      savedir[strlen (savedir) - 1] = '\0';
  846. X                      if (savedir[0] == '.' && strlen (savedir) == 1) {
  847. X! #if defined(BSD) && ! defined(SINIX)
  848. X                          getwd (buf);    
  849. X  #else
  850. X                          getcwd (buf, LEN);
  851. Xdiff -rcs ../104/save.c ./save.c
  852. X*** ../104/save.c    Wed Oct  2 18:52:25 1991
  853. X--- ./save.c    Thu Oct 10 20:48:47 1991
  854. X***************
  855. X*** 3,9 ****
  856. X   *  Module    : save.c
  857. X   *  Author    : R.Skrenta / I.Lea
  858. X   *  Created   : 01-04-91
  859. X!  *  Updated   : 02-10-91
  860. X   *  Release   : 1.0
  861. X   *  Notes     :
  862. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta, Iain Lea
  863. X--- 3,9 ----
  864. X   *  Module    : save.c
  865. X   *  Author    : R.Skrenta / I.Lea
  866. X   *  Created   : 01-04-91
  867. X!  *  Updated   : 10-10-91
  868. X   *  Release   : 1.0
  869. X   *  Notes     :
  870. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta, Iain Lea
  871. X***************
  872. X*** 67,72 ****
  873. X--- 67,73 ----
  874. X      FILE *fp;
  875. X      int is_mailbox = FALSE;
  876. X      int i = 0, ret_code = FALSE;
  877. X+     long epoch;
  878. X      
  879. X      if (filename) {
  880. X          my_strncpy (file, filename, LEN);
  881. X***************
  882. X*** 92,98 ****
  883. X          return (ret_code);
  884. X      }
  885. X  
  886. X!     fprintf(fp, "From %s %s\n", note_h_path, note_h_date);
  887. X  
  888. X      if (fseek(note_fp, 0L, 0) == -1) {
  889. X          error_message ("fseek() error on [%s]", arts[respnum].subject);
  890. X--- 93,100 ----
  891. X          return (ret_code);
  892. X      }
  893. X  
  894. X!      time (&epoch);
  895. X!      fprintf(fp, "From %s %s", note_h_path, ctime (&epoch));
  896. X  
  897. X      if (fseek(note_fp, 0L, 0) == -1) {
  898. X          error_message ("fseek() error on [%s]", arts[respnum].subject);
  899. X***************
  900. X*** 131,136 ****
  901. X--- 133,139 ----
  902. X      FILE *fp;
  903. X      int count = 0;
  904. X      int i, ret_code = FALSE;
  905. X+     long    epoch;
  906. X  
  907. X      set_real_uid_gid ();
  908. X  
  909. X***************
  910. X*** 150,160 ****
  911. X              return (ret_code);
  912. X          }    
  913. X  
  914. X!         open_note (arts[save[i].index].artnum, group_path);
  915. X!         fprintf (fp, "From %s %s\n", note_h_path, note_h_date);
  916. X          fseek (note_fp, 0L, 0);
  917. X          copy_fp (note_fp, fp, "");
  918. X!         note_cleanup ();
  919. X          save[i].saved = TRUE;
  920. X  
  921. X          if (mark_saved_read) {
  922. X--- 153,164 ----
  923. X              return (ret_code);
  924. X          }    
  925. X  
  926. X!         art_open (arts[save[i].index].artnum, group_path);
  927. X!         time (&epoch);
  928. X!         fprintf (fp, "From %s %s", note_h_path, ctime (&epoch));
  929. X          fseek (note_fp, 0L, 0);
  930. X          copy_fp (note_fp, fp, "");
  931. X!         art_close ();
  932. X          save[i].saved = TRUE;
  933. X  
  934. X          if (mark_saved_read) {
  935. X***************
  936. X*** 165,171 ****
  937. X      }
  938. X      set_tin_uid_gid ();
  939. X      
  940. X!     if (! (first_savefile = get_first_savefile ())) {
  941. X          info_message (txt_thread_not_saved);
  942. X      } else {
  943. X          if (is_mailbox) {
  944. X--- 169,177 ----
  945. X      }
  946. X      set_tin_uid_gid ();
  947. X      
  948. X!     first_savefile = get_first_savefile ();
  949. X! 
  950. X!     if (first_savefile == (char *) 0) {
  951. X          info_message (txt_thread_not_saved);
  952. X      } else {
  953. X          if (is_mailbox) {
  954. X***************
  955. X*** 210,223 ****
  956. X              sprintf (buf2, "%s.%02d", save[i].file, i+1);
  957. X          }
  958. X  
  959. X!         open_note (arts[save[i].index].artnum, group_path);
  960. X          ret_code = save_art_to_file (save[i].index, i, is_mailbox, buf2);
  961. X!         note_cleanup ();            
  962. X          save[i].saved = TRUE;
  963. X      }
  964. X  
  965. X      if (! save_num) {    
  966. X!         info_message(txt_no_match);
  967. X      } else {
  968. X          if (is_mailbox) {
  969. X              sprintf (buf, txt_saved_to_mailbox, get_first_savefile ());
  970. X--- 216,229 ----
  971. X              sprintf (buf2, "%s.%02d", save[i].file, i+1);
  972. X          }
  973. X  
  974. X!         art_open (arts[save[i].index].artnum, group_path);
  975. X          ret_code = save_art_to_file (save[i].index, i, is_mailbox, buf2);
  976. X!         art_close ();            
  977. X          save[i].saved = TRUE;
  978. X      }
  979. X  
  980. X      if (! save_num) {    
  981. X!         info_message (txt_no_match);
  982. X      } else {
  983. X          if (is_mailbox) {
  984. X              sprintf (buf, txt_saved_to_mailbox, get_first_savefile ());
  985. X***************
  986. X*** 225,231 ****
  987. X              sprintf (buf,txt_saved_pattern_to,
  988. X                  get_first_savefile (), get_last_savefile ());
  989. X          }
  990. X!         info_message(buf);
  991. X      }
  992. X      return (ret_code);
  993. X  }
  994. X--- 231,237 ----
  995. X              sprintf (buf,txt_saved_pattern_to,
  996. X                  get_first_savefile (), get_last_savefile ());
  997. X          }
  998. X!         info_message (buf);
  999. X      }
  1000. X      return (ret_code);
  1001. X  }
  1002. X***************
  1003. X*** 617,623 ****
  1004. X                  post_process_patch ();
  1005. X                  break;
  1006. X          }
  1007. X-         set_tin_uid_gid();
  1008. X  
  1009. X          info_message (txt_post_processing_finished);
  1010. X          sleep (1);
  1011. X--- 623,628 ----
  1012. X***************
  1013. X*** 736,742 ****
  1014. X      /*
  1015. X       *  uudecode file
  1016. X       */
  1017. X!     wait_message ("Uudecoding...");
  1018. X      
  1019. X      sprintf (buf, "cd %s; uudecode %s", file_out_dir, file_out); 
  1020. X      if (invoke_cmd (buf)) {
  1021. X--- 741,747 ----
  1022. X      /*
  1023. X       *  uudecode file
  1024. X       */
  1025. X!     wait_message (txt_uudecoding);
  1026. X      
  1027. X      sprintf (buf, "cd %s; uudecode %s", file_out_dir, file_out); 
  1028. X      if (invoke_cmd (buf)) {
  1029. X***************
  1030. X*** 765,775 ****
  1031. X              free (file);
  1032. X              file = (char *) 0;
  1033. X          }
  1034. X-         set_tin_uid_gid ();
  1035. X      }
  1036. X  
  1037. X      if (pp > POST_PROC_UUDECODE) {
  1038. X-         set_real_uid_gid ();
  1039. X          sprintf (buf, "*.%s", archiver[pp].ext); 
  1040. X          if ((file = get_archive_file (file_out_dir, buf)) != NULL) {
  1041. X              if (pp == POST_PROC_UUD_EXT_ZOO) {
  1042. X--- 770,780 ----
  1043. X              free (file);
  1044. X              file = (char *) 0;
  1045. X          }
  1046. X      }
  1047. X  
  1048. X+     set_real_uid_gid ();
  1049. X+ 
  1050. X      if (pp > POST_PROC_UUDECODE) {
  1051. X          sprintf (buf, "*.%s", archiver[pp].ext); 
  1052. X          if ((file = get_archive_file (file_out_dir, buf)) != NULL) {
  1053. X              if (pp == POST_PROC_UUD_EXT_ZOO) {
  1054. X***************
  1055. X*** 785,799 ****
  1056. X              free (file);
  1057. X              file = (char *) 0;
  1058. X              if (! invoke_cmd (buf)) {
  1059. X                  error_message ("Post processing failed", "");
  1060. X              }
  1061. X          }
  1062. X      }
  1063. X      delete_processed_files ();
  1064. X  
  1065. X      unlink (file_out);
  1066. X- 
  1067. X-     set_tin_uid_gid ();
  1068. X  }
  1069. X  
  1070. X  /*
  1071. X--- 790,804 ----
  1072. X              free (file);
  1073. X              file = (char *) 0;
  1074. X              if (! invoke_cmd (buf)) {
  1075. X+                 set_real_uid_gid ();
  1076. X                  error_message ("Post processing failed", "");
  1077. X              }
  1078. X+             set_real_uid_gid ();
  1079. X          }
  1080. X      }
  1081. X      delete_processed_files ();
  1082. X  
  1083. X      unlink (file_out);
  1084. X  }
  1085. X  
  1086. X  /*
  1087. X***************
  1088. X*** 867,872 ****
  1089. X--- 872,878 ----
  1090. X              fflush (stdout);
  1091. X              Raw (FALSE);
  1092. X              invoke_cmd (buf);
  1093. X+             set_real_uid_gid ();
  1094. X              Raw (TRUE);
  1095. X              unlink (file_out);
  1096. X          }
  1097. Xdiff -rcs ../104/screen.c ./screen.c
  1098. X*** ../104/screen.c    Mon Sep 30 19:24:27 1991
  1099. X--- ./screen.c    Fri Oct  4 08:05:05 1991
  1100. X***************
  1101. X*** 3,9 ****
  1102. X   *  Module    : screen.c
  1103. X   *  Author    : R.Skrenta / I.Lea
  1104. X   *  Created   : 01-04-91
  1105. X!  *  Updated   : 08-09-91
  1106. X   *  Release   : 1.0
  1107. X   *  Notes     :
  1108. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1109. X--- 3,9 ----
  1110. X   *  Module    : screen.c
  1111. X   *  Author    : R.Skrenta / I.Lea
  1112. X   *  Created   : 01-04-91
  1113. X!  *  Updated   : 04-10-91
  1114. X   *  Release   : 1.0
  1115. X   *  Notes     :
  1116. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1117. X***************
  1118. X*** 117,122 ****
  1119. X--- 117,123 ----
  1120. X      if (draw_arrow_mark) {
  1121. X          printf ("  ");
  1122. X      } else {
  1123. X+         EndInverse ();
  1124. X          printf ("%s", screen[line-INDEX_TOP].col);
  1125. X      }
  1126. X      fflush (stdout);
  1127. Xdiff -rcs ../104/search.c ./search.c
  1128. X*** ../104/search.c    Mon Sep 30 19:24:27 1991
  1129. X--- ./search.c    Tue Oct  8 19:29:35 1991
  1130. X***************
  1131. X*** 315,321 ****
  1132. X              for (p = buf, q = buf2;    *p && *p != '\n' && q<&buf2[LEN]; p++) {
  1133. X                  if (*p == '\b' && q > buf2) {
  1134. X                      q--;
  1135. X!                 } else if (*p == 12) {        /* ^L */
  1136. X                      *q++ = '^';
  1137. X                      *q++ = 'L';
  1138. X                      ctrl_L = TRUE;
  1139. X--- 315,321 ----
  1140. X              for (p = buf, q = buf2;    *p && *p != '\n' && q<&buf2[LEN]; p++) {
  1141. X                  if (*p == '\b' && q > buf2) {
  1142. X                      q--;
  1143. X!                 } else if (*p == '\f') {        /* ^L */
  1144. X                      *q++ = '^';
  1145. X                      *q++ = 'L';
  1146. X                      ctrl_L = TRUE;
  1147. X***************
  1148. X*** 326,334 ****
  1149. X                      while (i++ < j) {
  1150. X                          *q++ = ' ';
  1151. X                      }
  1152. X!                 } else if (((*p) & 0x7F) < 32) {
  1153. X                      *q++ = '^';
  1154. X!                     *q++ = ((*p) & 0x7F) + '@';
  1155. X                  } else {
  1156. X                      *q++ = *p;
  1157. X                  }
  1158. X--- 326,334 ----
  1159. X                      while (i++ < j) {
  1160. X                          *q++ = ' ';
  1161. X                      }
  1162. X!                 } else if (((*p) & 0xFF) < ' ') {
  1163. X                      *q++ = '^';
  1164. X!                     *q++ = ((*p) & 0xFF) + '@';
  1165. X                  } else {
  1166. X                      *q++ = *p;
  1167. X                  }
  1168. Xdiff -rcs ../104/select.c ./select.c
  1169. X*** ../104/select.c    Mon Sep 30 20:43:20 1991
  1170. X--- ./select.c    Wed Oct  9 10:33:21 1991
  1171. X***************
  1172. X*** 3,9 ****
  1173. X   *  Module    : select.c
  1174. X   *  Author    : R.Skrenta / I.Lea
  1175. X   *  Created   : 01-04-91
  1176. X!  *  Updated   : 29-09-91
  1177. X   *  Release   : 1.0
  1178. X   *  Notes     :
  1179. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1180. X--- 3,9 ----
  1181. X   *  Module    : select.c
  1182. X   *  Author    : R.Skrenta / I.Lea
  1183. X   *  Created   : 01-04-91
  1184. X!  *  Updated   : 09-10-91
  1185. X   *  Release   : 1.0
  1186. X   *  Notes     :
  1187. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1188. X***************
  1189. X*** 107,116 ****
  1190. X--- 107,118 ----
  1191. X  
  1192. X                      case 'G':        /* ansi  PgDn */
  1193. X                      case 'U':        /* at386 PgDn */
  1194. X+                     case 'T':        /* 97801 PgDn */
  1195. X                          goto select_page_down;
  1196. X  
  1197. X                      case 'I':        /* ansi  PgUp */
  1198. X                      case 'V':        /* at386 PgUp */
  1199. X+                     case 'S':        /* 97801 PgUp */
  1200. X                      case 'v':        /* emacs style */
  1201. X                          goto select_page_up;
  1202. X  
  1203. X***************
  1204. X*** 313,318 ****
  1205. X--- 315,321 ----
  1206. X  
  1207. X              case 'q':    /* quit */
  1208. X                  tin_done (0);
  1209. X+                 break;
  1210. X  
  1211. X              case 's':    /* subscribe to current group */
  1212. X                  if (active[my_group[cur_groupnum]].flag != SUBS) {
  1213. X***************
  1214. X*** 421,426 ****
  1215. X--- 424,435 ----
  1216. X                  break;
  1217. X  
  1218. X              case 'w':    /* post a basenote */
  1219. X+ #ifdef USE_NNTP
  1220. X+                 if (! can_post) {
  1221. X+                     info_message (txt_cannot_post);
  1222. X+                     break;
  1223. X+                 }
  1224. X+ #endif
  1225. X                  if (post_base (active[my_group[cur_groupnum]].name)) {
  1226. X                      group_selection_page ();
  1227. X                  }
  1228. X***************
  1229. X*** 531,537 ****
  1230. X      sprintf (buf, "%s (%d)", txt_group_selection, local_top);
  1231. X      center_line (0, TRUE, buf);
  1232. X  
  1233. X!     if (col = (COLS - (int) strlen (txt_type_h_for_help))+1) {
  1234. X          MoveCursor (0, 0);            /* in upper middle */
  1235. X          if (kill_articles) {        /* display KILL on screen */
  1236. X              printf ("KILL ON");
  1237. X--- 540,547 ----
  1238. X      sprintf (buf, "%s (%d)", txt_group_selection, local_top);
  1239. X      center_line (0, TRUE, buf);
  1240. X  
  1241. X!     col = (COLS - (int) strlen (txt_type_h_for_help))+1;
  1242. X!     if (col) {
  1243. X          MoveCursor (0, 0);            /* in upper middle */
  1244. X          if (kill_articles) {        /* display KILL on screen */
  1245. X              printf ("KILL ON");
  1246. Xdiff -rcs ../104/signal.c ./signal.c
  1247. X*** ../104/signal.c    Mon Sep 30 19:24:27 1991
  1248. X--- ./signal.c    Tue Oct 15 09:41:42 1991
  1249. X***************
  1250. X*** 3,9 ****
  1251. X   *  Module    : signal.c
  1252. X   *  Author    : R.Skrenta / I.Lea
  1253. X   *  Created   : 01-04-91
  1254. X!  *  Updated   : 29-09-91
  1255. X   *  Release   : 1.0
  1256. X   *  Notes     : signal handlers for different modes and window resizing
  1257. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1258. X--- 3,9 ----
  1259. X   *  Module    : signal.c
  1260. X   *  Author    : R.Skrenta / I.Lea
  1261. X   *  Created   : 01-04-91
  1262. X!  *  Updated   : 15-10-91
  1263. X   *  Release   : 1.0
  1264. X   *  Notes     : signal handlers for different modes and window resizing
  1265. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1266. X***************
  1267. X*** 38,44 ****
  1268. X  
  1269. X  void set_signal_handlers ()
  1270. X  {
  1271. X!     signal (SIGQUIT, signal_handler);        /* ctrl-\ */
  1272. X      signal (SIGILL, signal_handler);
  1273. X      signal (SIGBUS, signal_handler);
  1274. X      signal (SIGSEGV, signal_handler);
  1275. X--- 38,45 ----
  1276. X  
  1277. X  void set_signal_handlers ()
  1278. X  {
  1279. X!     signal (SIGINT, signal_handler);    /* ctrl-C */
  1280. X!     signal (SIGQUIT, signal_handler);    /* ctrl-\ */
  1281. X      signal (SIGILL, signal_handler);
  1282. X      signal (SIGBUS, signal_handler);
  1283. X      signal (SIGSEGV, signal_handler);
  1284. X***************
  1285. X*** 70,83 ****
  1286. X  void signal_handler (sig)
  1287. X      int sig;
  1288. X  {
  1289. X!     switch (sig) {
  1290. X!         case SIGINT:
  1291. X!             signal (SIGINT, signal_handler);
  1292. X!             break;
  1293. X!         default:
  1294. X!             Raw (FALSE);
  1295. X!             printf ("\n%s: signal handler caught signal %d\n", progname,sig);
  1296. X!             exit (1);
  1297. X      }
  1298. X  }
  1299. X  
  1300. X--- 71,94 ----
  1301. X  void signal_handler (sig)
  1302. X      int sig;
  1303. X  {
  1304. X!     if (update) {
  1305. X!         Raw (FALSE);
  1306. X!         EndWin ();
  1307. X!         fprintf (stderr, "\n%s: signal handler caught signal %d\n", progname,sig);
  1308. X!         fflush (stderr);
  1309. X!         exit (1);
  1310. X!     } else {
  1311. X!         switch (sig) {
  1312. X!             case SIGINT:
  1313. X!                 signal (SIGINT, signal_handler);
  1314. X!                 break;
  1315. X!             default:
  1316. X!                 Raw (FALSE);
  1317. X!                 EndWin ();
  1318. X!                 fprintf (stderr, "\n%s: signal handler caught signal %d\n", progname,sig);
  1319. X!                 fflush (stderr);
  1320. X!                 exit (1);
  1321. X!         }
  1322. X      }
  1323. X  }
  1324. X  
  1325. Xdiff -rcs ../104/tin.1 ./tin.1
  1326. X*** ../104/tin.1    Wed Oct  2 09:58:17 1991
  1327. X--- ./tin.1    Tue Oct 15 09:44:26 1991
  1328. X***************
  1329. X*** 1,4 ****
  1330. X! .TH TIN 1 "Version 1.0 PL4"
  1331. X  .SH NAME
  1332. X  tin \- Visual threaded Usenet news reader
  1333. X  .SH SYNOPSIS
  1334. X--- 1,4 ----
  1335. X! .TH TIN 1 "Version 1.0 PL5"
  1336. X  .SH NAME
  1337. X  tin \- Visual threaded Usenet news reader
  1338. X  .SH SYNOPSIS
  1339. X***************
  1340. X*** 372,378 ****
  1341. X  Go to next group.
  1342. X  .TP
  1343. X  \fBN\fP
  1344. X! Go to next unread group.
  1345. X  .TP
  1346. X  \fBo\fP
  1347. X  Output current article / thread / articles matching pattern / tagged articles
  1348. X--- 372,378 ----
  1349. X  Go to next group.
  1350. X  .TP
  1351. X  \fBN\fP
  1352. X! Go to next unread article.
  1353. X  .TP
  1354. X  \fBo\fP
  1355. X  Output current article / thread / articles matching pattern / tagged articles
  1356. X***************
  1357. X*** 382,388 ****
  1358. X  Go to previous group.
  1359. X  .TP
  1360. X  \fBP\fP
  1361. X! Go to previous unread group.
  1362. X  .TP
  1363. X  \fBq\fP
  1364. X  Quit tin.
  1365. X--- 382,388 ----
  1366. X  Go to previous group.
  1367. X  .TP
  1368. X  \fBP\fP
  1369. X! Go to previous unread article.
  1370. X  .TP
  1371. X  \fBq\fP
  1372. X  Quit tin.
  1373. X***************
  1374. X*** 500,509 ****
  1375. X  User configurable options menu (for more information see section Options Menu).
  1376. X  .TP
  1377. X  \fBn\fP
  1378. X! Go to to the next article.
  1379. X  .TP
  1380. X  \fBN\fP
  1381. X! Go to to the next unread article.
  1382. X  .TP
  1383. X  \fBo\fP
  1384. X  Output current article / thread / articles matching pattern / tagged articles
  1385. X--- 500,509 ----
  1386. X  User configurable options menu (for more information see section Options Menu).
  1387. X  .TP
  1388. X  \fBn\fP
  1389. X! Go to the next article.
  1390. X  .TP
  1391. X  \fBN\fP
  1392. X! Go to the next unread article.
  1393. X  .TP
  1394. X  \fBo\fP
  1395. X  Output current article / thread / articles matching pattern / tagged articles
  1396. X***************
  1397. X*** 862,878 ****
  1398. X  Chris Smith
  1399. X  author of multi-part uudecode routine.
  1400. X  .PP
  1401. X! I wish to thank the following people for bug reports/patchs and comments:
  1402. X  
  1403. X! Klaus Arzig, Anton Aylward, Reiner Balling, Volker Beyer, Roger Binns,
  1404. X! Georg Biehler, Andreas Brosig, Peter Dressler, Gerhard Ermer, Hugh Fader,
  1405. X! Joachim Feld, Paul Fox, Bernhard Gmelch, Viet Hoang, Torsten Homeyer,
  1406. X! Andy Jackson, Joe Johnson, Cyrill Jung, Karl-Koenig Koenigsson,
  1407. X! Hans-Juergen Knopp, Hakan Lennestal, Bob Lukas, Clifford Luke,
  1408. X! Phillip Molloy, Toni Metz, Greg Miller, Klaus Neuberger, Otto Niesser,
  1409. X! Reiner Oelhaf, Wolf Paul, Nickolay Saukh, Rich Salz, Fredy Schwatz,
  1410. X! Bernd Schwerin, Klamer Schutte, Karl-Olav Serrander, Chris Smith,
  1411. X! Steve Spearman, Cliff Stanford, Adri Verhoef, Cary Whitney
  1412. X  .SH AUTHOR
  1413. X  .TP
  1414. X  Iain Lea
  1415. X--- 862,883 ----
  1416. X  Chris Smith
  1417. X  author of multi-part uudecode routine.
  1418. X  .PP
  1419. X! I wish to thank the following people for supplying patchs:
  1420. X  
  1421. X! Anton Aylward, Carl Hage, Ed Hanway, Karl-Koenig Koenigsson, Kris Kugel,
  1422. X! Hakan Lennestal, Clifford Luke, Bill Poitras,  Nickolay Saukh, Rich Salz,
  1423. X! Bart Sears, Karl-Olav Serrander, Doug Sewell, Cliff Stanford, Adri Verhoef,
  1424. X! Cary Whitney
  1425. X! .PP
  1426. X! I wish to thank the following people for bug reports/comments:
  1427. X! 
  1428. X! Klaus Arzig, Reiner Balling, Volker Beyer, Roger Binns, Georg Biehler,
  1429. X! Ian Brown, Andreas Brosig, David Donovan, Peter Dressler, Gerhard Ermer,
  1430. X! Hugh Fader, Joachim Feld, Paul Fox, Bernhard Gmelch, Viet Hoang, 
  1431. X! Torsten Homeyer, Andy Jackson, Joe Johnson, Cyrill Jung, Hans-Juergen
  1432. X! Knopp, Bob Lukas, Phillip Molloy, Toni Metz, Greg Miller, Klaus Neuberger,
  1433. X! Otto Niesser, Reiner Oelhaf, Wolf Paul, Fredy Schwatz, Bernd Schwerin,
  1434. X! Klamer Schutte, Chris Smith, Steve Spearman
  1435. X  .SH AUTHOR
  1436. X  .TP
  1437. X  Iain Lea
  1438. XOnly in .: tin.diff
  1439. Xdiff -rcs ../104/tin.h ./tin.h
  1440. X*** ../104/tin.h    Mon Sep 30 20:23:00 1991
  1441. X--- ./tin.h    Thu Oct 10 20:25:10 1991
  1442. X***************
  1443. X*** 3,9 ****
  1444. X   *  Module    : tin.h
  1445. X   *  Author    : R.Skrenta / I.Lea
  1446. X   *  Created   : 01-04-91
  1447. X!  *  Updated   : 30-09-91
  1448. X   *  Release   : 1.0
  1449. X   *  Notes     :
  1450. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1451. X--- 3,9 ----
  1452. X   *  Module    : tin.h
  1453. X   *  Author    : R.Skrenta / I.Lea
  1454. X   *  Created   : 01-04-91
  1455. X!  *  Updated   : 10-10-91
  1456. X   *  Release   : 1.0
  1457. X   *  Notes     :
  1458. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1459. X***************
  1460. X*** 23,45 ****
  1461. X  #include    <sys/stat.h>
  1462. X  
  1463. X  #ifdef BSD
  1464. X! #include    <strings.h>
  1465. X  #else
  1466. X! #include    <string.h>
  1467. X! #include    <malloc.h>
  1468. X  #endif
  1469. X  
  1470. X  #ifdef SCO_UNIX
  1471. X! #include    <sys/streams.h>
  1472. X! #include    <sys/ptem.h>
  1473. X  #endif
  1474. X  
  1475. X  #ifdef SIGWINCH
  1476. X! #include    <sys/ioctl.h>
  1477. X! #ifdef AUTO_RESIZE
  1478. X! #include    <sys/ttold.h>        /* needed for resizing under an xterm */
  1479. X  #endif
  1480. X- #endif
  1481. X  
  1482. X  #include    "patchlevel.h"
  1483. X  
  1484. X--- 23,45 ----
  1485. X  #include    <sys/stat.h>
  1486. X  
  1487. X  #ifdef BSD
  1488. X! #    include    <strings.h>
  1489. X  #else
  1490. X! #    include    <string.h>
  1491. X! #    include    <malloc.h>
  1492. X  #endif
  1493. X  
  1494. X  #ifdef SCO_UNIX
  1495. X! #    include    <sys/streams.h>
  1496. X! #    include    <sys/ptem.h>
  1497. X  #endif
  1498. X  
  1499. X  #ifdef SIGWINCH
  1500. X! #    include    <sys/ioctl.h>
  1501. X! #    ifdef AUTO_RESIZE
  1502. X! #        include    <sys/ttold.h>        /* needed for resizing under an xterm */
  1503. X! #    endif
  1504. X  #endif
  1505. X  
  1506. X  #include    "patchlevel.h"
  1507. X  
  1508. X***************
  1509. X*** 47,60 ****
  1510. X  #define BUG_REPORT_ADDRESS    "iain@estevax.uucp"
  1511. X  
  1512. X  #ifndef SPOOLDIR
  1513. X! #define        SPOOLDIR        "/usr/spool/news"
  1514. X  #endif
  1515. X  #ifndef LIBDIR
  1516. X! #define        LIBDIR            "/usr/lib/news"
  1517. X  #endif
  1518. X- #ifndef INEWSDIR
  1519. X- #define        INEWSDIR        LIBDIR
  1520. X- #endif
  1521. X  
  1522. X  #define        RCDIR            ".tin"
  1523. X  #define        RCFILE            "tinrc"
  1524. X--- 47,57 ----
  1525. X  #define BUG_REPORT_ADDRESS    "iain@estevax.uucp"
  1526. X  
  1527. X  #ifndef SPOOLDIR
  1528. X! #    define        SPOOLDIR    "/usr/spool/news"
  1529. X  #endif
  1530. X  #ifndef LIBDIR
  1531. X! #    define        LIBDIR        "/usr/lib/news"
  1532. X  #endif
  1533. X  
  1534. X  #define        RCDIR            ".tin"
  1535. X  #define        RCFILE            "tinrc"
  1536. X***************
  1537. X*** 67,95 ****
  1538. X  #define        DEFAULT_MAILDIR    "Mail"
  1539. X  
  1540. X  #ifdef BSD
  1541. X! #define     DEFAULT_EDITOR    "/usr/ucb/vi"
  1542. X! #define        DEFAULT_MAILER    "/bin/rmail"
  1543. X! #define        DEFAULT_MAILBOX    "/usr/spool/mail"
  1544. X! #define        DEFAULT_PRINTER    "/usr/ucb/lpr"
  1545. X! #define        DEFAULT_SUM        "sum"
  1546. X! #ifndef USE_LONG_FILENAMES
  1547. X! #define USE_LONG_FILENAMES
  1548. X! #endif
  1549. X  #else
  1550. X! #ifdef M_XENIX
  1551. X! #define     DEFAULT_EDITOR    "/bin/vi"
  1552. X! #define        DEFAULT_MAILBOX    "/usr/spool/mail"
  1553. X! #else
  1554. X! #define     DEFAULT_EDITOR    "/usr/bin/vi"
  1555. X! #define        DEFAULT_MAILBOX    "/usr/mail"
  1556. X  #endif
  1557. X- #define        DEFAULT_MAILER    "/usr/bin/rmail"
  1558. X- /*
  1559. X- #define        DEFAULT_MAILER    "/usr/lib/sendmail -t"
  1560. X- */
  1561. X- #define        DEFAULT_PRINTER    "/usr/bin/lp"
  1562. X- #define        DEFAULT_SUM        "sum -r"
  1563. X- #endif
  1564. X  
  1565. X  #define        DEFAULT_ACTIVE_NUM    100        /* initial size of active array */
  1566. X  #define        DEFAULT_ARTICLE_NUM    400        /* initial size of art array */ 
  1567. X--- 64,102 ----
  1568. X  #define        DEFAULT_MAILDIR    "Mail"
  1569. X  
  1570. X  #ifdef BSD
  1571. X! #    define        DEFAULT_EDITOR    "/usr/ucb/vi"
  1572. X! #    define        DEFAULT_MAILER    "/bin/rmail"
  1573. X! #    define        DEFAULT_MAILBOX    "/usr/spool/mail"
  1574. X! #    define        DEFAULT_PRINTER    "/usr/ucb/lpr"
  1575. X! #    define        DEFAULT_SUM        "sum"
  1576. X! #    ifndef USE_LONG_FILENAMES
  1577. X! #        define USE_LONG_FILENAMES
  1578. X! #    endif
  1579. X  #else
  1580. X! #    ifdef M_XENIX
  1581. X! #        define        DEFAULT_EDITOR    "/bin/vi"
  1582. X! #        define        DEFAULT_MAILBOX    "/usr/spool/mail"
  1583. X! #    else
  1584. X! #        define        DEFAULT_EDITOR    "/usr/bin/vi"
  1585. X! #        define        DEFAULT_MAILBOX    "/usr/mail"
  1586. X! #    endif
  1587. X! #    ifdef NCR
  1588. X! #        define        DEFAULT_MAILER    "/usr/bin/mailx"
  1589. X! #    endif
  1590. X! #    ifdef RS6000
  1591. X! #        define        DEFAULT_PRINTER    "/bin/lp"
  1592. X! #    endif
  1593. X! #    ifdef UNIXPC
  1594. X! #        define        DEFAULT_MAILER    "/bin/rmail"
  1595. X! #    endif
  1596. X! #    ifndef DEFAULT_MAILER
  1597. X! #        define        DEFAULT_MAILER    "/usr/bin/mail"
  1598. X! #    endif
  1599. X! #    ifndef DEFAULT_PRINTER
  1600. X! #        define        DEFAULT_PRINTER    "/usr/bin/lp"
  1601. X! #    endif
  1602. X! #    define        DEFAULT_SUM        "sum -r"
  1603. X  #endif
  1604. X  
  1605. X  #define        DEFAULT_ACTIVE_NUM    100        /* initial size of active array */
  1606. X  #define        DEFAULT_ARTICLE_NUM    400        /* initial size of art array */ 
  1607. X***************
  1608. X*** 99,117 ****
  1609. X  #define        TRUE        1
  1610. X  #define        FALSE        0
  1611. X  
  1612. X! #define        LEN        200
  1613. X  
  1614. X  #ifdef USE_LONG_FILENAMES
  1615. X! #define        LONG_PATH_PART    "part"
  1616. X! #define        LONG_PATH_PATCH    "patch"
  1617. X  #else
  1618. X! #define        LONG_PATH_PART    ""
  1619. X! #define        LONG_PATH_PATCH    "p"
  1620. X  #endif
  1621. X  
  1622. X  #define        DEFAULT_COMMENT    ": "    /* used when by follow-ups & replys */
  1623. X  #ifndef     UNREAD_ART_MARK
  1624. X! #define        UNREAD_ART_MARK    '+'        /* used to show that an art is unread */
  1625. X  #endif
  1626. X  
  1627. X  /*
  1628. X--- 106,124 ----
  1629. X  #define        TRUE        1
  1630. X  #define        FALSE        0
  1631. X  
  1632. X! #define        LEN        1024
  1633. X  
  1634. X  #ifdef USE_LONG_FILENAMES
  1635. X! #    define        LONG_PATH_PART    "part"
  1636. X! #    define        LONG_PATH_PATCH    "patch"
  1637. X  #else
  1638. X! #    define        LONG_PATH_PART    ""
  1639. X! #    define        LONG_PATH_PATCH    "p"
  1640. X  #endif
  1641. X  
  1642. X  #define        DEFAULT_COMMENT    ": "    /* used when by follow-ups & replys */
  1643. X  #ifndef     UNREAD_ART_MARK
  1644. X! #    define        UNREAD_ART_MARK    '+'        /* used to show that an art is unread */
  1645. X  #endif
  1646. X  
  1647. X  /*
  1648. X***************
  1649. X*** 129,141 ****
  1650. X  
  1651. X  
  1652. X  #ifdef USE_INVERSE_HACK
  1653. X! #define        BLANK_SELECT_COLS        59
  1654. X! #define        BLANK_GROUP_COLS        2
  1655. X! #define        BLANK_PAGE_COLS            2
  1656. X  #else
  1657. X! #define        BLANK_SELECT_COLS        57
  1658. X! #define        BLANK_GROUP_COLS        0
  1659. X! #define        BLANK_PAGE_COLS            0
  1660. X  #endif
  1661. X  
  1662. X  #define        SCREEN_READ_UNREAD        6        /* position for "  +" / "   " */
  1663. X--- 136,148 ----
  1664. X  
  1665. X  
  1666. X  #ifdef USE_INVERSE_HACK
  1667. X! #    define        BLANK_SELECT_COLS        59
  1668. X! #    define        BLANK_GROUP_COLS        2
  1669. X! #    define        BLANK_PAGE_COLS            2
  1670. X  #else
  1671. X! #    define        BLANK_SELECT_COLS        57
  1672. X! #    define        BLANK_GROUP_COLS        0
  1673. X! #    define        BLANK_PAGE_COLS            0
  1674. X  #endif
  1675. X  
  1676. X  #define        SCREEN_READ_UNREAD        6        /* position for "  +" / "   " */
  1677. X***************
  1678. X*** 259,264 ****
  1679. X--- 266,280 ----
  1680. X  #define        NOTGOT            0x01    /* haven't put in my_group yet */
  1681. X  #define        SUBS            0x02    /* subscribed to */
  1682. X  
  1683. X+ /*
  1684. X+  *  used in hashstr.c
  1685. X+  */
  1686. X+  
  1687. X+ struct hashnode {
  1688. X+     char *s;                        /* the string we're saving */
  1689. X+     struct hashnode *next;            /* chain for spillover */
  1690. X+ };
  1691. X+ 
  1692. X  #define KILL_SUBJ    1
  1693. X  #define KILL_FROM    2
  1694. X  #define KILL_BOTH    3
  1695. X***************
  1696. X*** 304,312 ****
  1697. X  extern struct screen_t *screen;
  1698. X  
  1699. X  struct posted_t {
  1700. X!     char date[LEN];
  1701. X!     char group[LEN];
  1702. X!     char subj[LEN];
  1703. X  };
  1704. X  
  1705. X  extern struct posted_t *posted;
  1706. X--- 320,328 ----
  1707. X  extern struct screen_t *screen;
  1708. X  
  1709. X  struct posted_t {
  1710. X!     char date[10];
  1711. X!     char group[80];
  1712. X!     char subj[120];
  1713. X  };
  1714. X  
  1715. X  extern struct posted_t *posted;
  1716. X***************
  1717. X*** 322,327 ****
  1718. X--- 338,347 ----
  1719. X  extern struct sigaction old_act;
  1720. X  #endif
  1721. X  
  1722. X+ #ifdef USE_NNTP
  1723. X+ extern int can_post;    /* open.c */
  1724. X+ #endif
  1725. X+ 
  1726. X  extern int debug;
  1727. X  extern int active_num;
  1728. X  extern int article_num;
  1729. X***************
  1730. X*** 433,441 ****
  1731. X   */
  1732. X  
  1733. X  #ifdef __STDC__
  1734. X! #define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, #p); else
  1735. X  #else
  1736. X! #define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, "p"); else
  1737. X  #endif
  1738. X  
  1739. X  /*
  1740. X--- 453,461 ----
  1741. X   */
  1742. X  
  1743. X  #ifdef __STDC__
  1744. X! #    define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, #p); else
  1745. X  #else
  1746. X! #    define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, "p"); else
  1747. X  #endif
  1748. X  
  1749. X  /*
  1750. Xdiff -rcs ../104/tin.nrf ./tin.nrf
  1751. X*** ../104/tin.nrf    Wed Oct  2 19:49:00 1991
  1752. X--- ./tin.nrf    Wed Oct 16 20:07:30 1991
  1753. X***************
  1754. X*** 1,7 ****
  1755. X  
  1756. X  
  1757. X  
  1758. X!      Version 1.0 PL4                                                 TIN(1)
  1759. X  
  1760. X  
  1761. X  
  1762. X--- 1,7 ----
  1763. X  
  1764. X  
  1765. X  
  1766. X!      Version 1.0 PL5                                                 TIN(1)
  1767. X  
  1768. X  
  1769. X  
  1770. X***************
  1771. X*** 67,73 ****
  1772. X  
  1773. X  
  1774. X  
  1775. X!      TIN(1)                                                 Version 1.0 PL4
  1776. X  
  1777. X  
  1778. X            -S        save news articles for later reading. Useful when going
  1779. X--- 67,73 ----
  1780. X  
  1781. X  
  1782. X  
  1783. X!      TIN(1)                                                 Version 1.0 PL5
  1784. X  
  1785. X  
  1786. X            -S        save news articles for later reading. Useful when going
  1787. X***************
  1788. X*** 133,139 ****
  1789. X  
  1790. X  
  1791. X  
  1792. X!      Version 1.0 PL4                                                 TIN(1)
  1793. X  
  1794. X  
  1795. X            A good way to keep Tin index files current is to run tin -u from
  1796. X--- 133,139 ----
  1797. X  
  1798. X  
  1799. X  
  1800. X!      Version 1.0 PL5                                                 TIN(1)
  1801. X  
  1802. X  
  1803. X            A good way to keep Tin index files current is to run tin -u from
  1804. X***************
  1805. X*** 199,205 ****
  1806. X  
  1807. X  
  1808. X  
  1809. X!      TIN(1)                                                 Version 1.0 PL4
  1810. X  
  1811. X  
  1812. X       COMMON MOVING KEYS
  1813. X--- 199,205 ----
  1814. X  
  1815. X  
  1816. X  
  1817. X!      TIN(1)                                                 Version 1.0 PL5
  1818. X  
  1819. X  
  1820. X       COMMON MOVING KEYS
  1821. X***************
  1822. X*** 265,271 ****
  1823. X  
  1824. X  
  1825. X  
  1826. X!      Version 1.0 PL4                                                 TIN(1)
  1827. X  
  1828. X  
  1829. X            M         User configurable options menu (for more information
  1830. X--- 265,271 ----
  1831. X  
  1832. X  
  1833. X  
  1834. X!      Version 1.0 PL5                                                 TIN(1)
  1835. X  
  1836. X  
  1837. X            M         User configurable options menu (for more information
  1838. X***************
  1839. X*** 331,337 ****
  1840. X  
  1841. X  
  1842. X  
  1843. X!      TIN(1)                                                 Version 1.0 PL4
  1844. X  
  1845. X  
  1846. X            B         Mail a bug/gripe/comment to the author of tin. This is
  1847. X--- 331,337 ----
  1848. X  
  1849. X  
  1850. X  
  1851. X!      TIN(1)                                                 Version 1.0 PL5
  1852. X  
  1853. X  
  1854. X            B         Mail a bug/gripe/comment to the author of tin. This is
  1855. X***************
  1856. X*** 364,370 ****
  1857. X  
  1858. X            n         Go to next group.
  1859. X  
  1860. X!           N         Go to next unread group.
  1861. X  
  1862. X            o         Output current article / thread / articles matching
  1863. X                      pattern / tagged articles to printer.
  1864. X--- 364,370 ----
  1865. X  
  1866. X            n         Go to next group.
  1867. X  
  1868. X!           N         Go to next unread article.
  1869. X  
  1870. X            o         Output current article / thread / articles matching
  1871. X                      pattern / tagged articles to printer.
  1872. X***************
  1873. X*** 371,377 ****
  1874. X  
  1875. X            p         Go to previous group.
  1876. X  
  1877. X!           P         Go to previous unread group.
  1878. X  
  1879. X            q         Quit tin.
  1880. X  
  1881. X--- 371,377 ----
  1882. X  
  1883. X            p         Go to previous group.
  1884. X  
  1885. X!           P         Go to previous unread article.
  1886. X  
  1887. X            q         Quit tin.
  1888. X  
  1889. X***************
  1890. X*** 397,403 ****
  1891. X  
  1892. X  
  1893. X  
  1894. X!      Version 1.0 PL4                                                 TIN(1)
  1895. X  
  1896. X  
  1897. X            v         Print tin version number.
  1898. X--- 397,403 ----
  1899. X  
  1900. X  
  1901. X  
  1902. X!      Version 1.0 PL5                                                 TIN(1)
  1903. X  
  1904. X  
  1905. X            v         Print tin version number.
  1906. X***************
  1907. X*** 463,469 ****
  1908. X  
  1909. X  
  1910. X  
  1911. X!      TIN(1)                                                 Version 1.0 PL4
  1912. X  
  1913. X  
  1914. X            h         Help screen of article page commands.
  1915. X--- 463,469 ----
  1916. X  
  1917. X  
  1918. X  
  1919. X!      TIN(1)                                                 Version 1.0 PL5
  1920. X  
  1921. X  
  1922. X            h         Help screen of article page commands.
  1923. X***************
  1924. X*** 486,494 ****
  1925. X            M         User configurable options menu (for more information
  1926. X                      see section Options Menu).
  1927. X  
  1928. X!           n         Go to to the next article.
  1929. X  
  1930. X!           N         Go to to the next unread article.
  1931. X  
  1932. X            o         Output current article / thread / articles matching
  1933. X                      pattern / tagged articles to printer.
  1934. X--- 486,494 ----
  1935. X            M         User configurable options menu (for more information
  1936. X                      see section Options Menu).
  1937. X  
  1938. X!           n         Go to the next article.
  1939. X  
  1940. X!           N         Go to the next unread article.
  1941. X  
  1942. X            o         Output current article / thread / articles matching
  1943. X                      pattern / tagged articles to printer.
  1944. X***************
  1945. X*** 529,535 ****
  1946. X  
  1947. X  
  1948. X  
  1949. X!      Version 1.0 PL4                                                 TIN(1)
  1950. X  
  1951. X  
  1952. X            z         Mark article as unread.
  1953. X--- 529,535 ----
  1954. X  
  1955. X  
  1956. X  
  1957. X!      Version 1.0 PL5                                                 TIN(1)
  1958. X  
  1959. X  
  1960. X            z         Mark article as unread.
  1961. X***************
  1962. X*** 595,601 ****
  1963. X  
  1964. X  
  1965. X  
  1966. X!      TIN(1)                                                 Version 1.0 PL4
  1967. X  
  1968. X  
  1969. X            Goto 1st unread
  1970. X--- 595,601 ----
  1971. X  
  1972. X  
  1973. X  
  1974. X!      TIN(1)                                                 Version 1.0 PL5
  1975. X  
  1976. X  
  1977. X            Goto 1st unread
  1978. X***************
  1979. X*** 661,667 ****
  1980. X  
  1981. X  
  1982. X  
  1983. X!      Version 1.0 PL4                                                 TIN(1)
  1984. X  
  1985. X  
  1986. X            On starting tin the users killfile $_H_O_M_E/._t_i_n/_k_i_l_l is read and on
  1987. X--- 661,667 ----
  1988. X  
  1989. X  
  1990. X  
  1991. X!      Version 1.0 PL5                                                 TIN(1)
  1992. X  
  1993. X  
  1994. X            On starting tin the users killfile $_H_O_M_E/._t_i_n/_k_i_l_l is read and on
  1995. X***************
  1996. X*** 727,733 ****
  1997. X  
  1998. X  
  1999. X  
  2000. X!      TIN(1)                                                 Version 1.0 PL4
  2001. SHAR_EOF
  2002. echo "End of tin part 3"
  2003. echo "File tin.patch05 is continued in part 4"
  2004. echo "4" > shar3_seq_.tmp
  2005. exit 0
  2006.  
  2007. --
  2008. NAME   Iain Lea
  2009. EMAIL  iain@estevax.uucp    ...!unido!estevax!iain
  2010. SNAIL  Bruecken Str. 12, 8500 Nuernberg, Germany
  2011. PHONE  +49-911-3089-407 (work)  +49-911-331963 (home)
  2012.  
  2013. exit 0 # Just in case...
  2014. -- 
  2015. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  2016. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  2017. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  2018. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  2019.