home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sources / misc / 3813 < prev    next >
Encoding:
Text File  |  1992-08-15  |  60.8 KB  |  1,955 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: iain%anl433.uucp@Germany.EU.net (Iain Lea)
  4. Subject:  v31i084:  tin - threaded full screen newsreader v1.1, Patch05e/7
  5. Message-ID: <1992Aug16.012712.12802@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 100f5de7ca7be805577ef6f8f5121163
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Reply-To: iain%anl433.uucp@Germany.EU.net
  10. Organization: ANL A433, Siemens AG., Germany.
  11. References: <csm-v31i080=tin.201729@sparky.IMD.Sterling.COM>
  12. Date: Sun, 16 Aug 1992 01:27:12 GMT
  13. Approved: kent@sparky.imd.sterling.com
  14. Lines: 1939
  15.  
  16. Submitted-by: iain%anl433.uucp@Germany.EU.net (Iain Lea)
  17. Posting-number: Volume 31, Issue 84
  18. Archive-name: tin/patch05e
  19. Environment: BSD, SCO, ISC, SUNOS, SYSVR3, SYSVR4, ULTRIX, XENIX
  20. Patch-To: tin: Volume 31, Issue 1-15
  21.  
  22. #!/bin/sh
  23. # this is patch-1.15.shar.05 (part 5 of tin-1.15)
  24. # do not concatenate these parts, unpack them in order with /bin/sh
  25. # file tin-1.15.patch continued
  26. #
  27. if test ! -r _shar_seq_.tmp; then
  28.     echo 'Please unpack part 1 first!'
  29.     exit 1
  30. fi
  31. (read Scheck
  32.  if test "$Scheck" != 5; then
  33.     echo Please unpack part "$Scheck" next!
  34.     exit 1
  35.  else
  36.     exit 0
  37.  fi
  38. ) < _shar_seq_.tmp || exit 1
  39. if test ! -f _shar_wnt_.tmp; then
  40.     echo 'x - still skipping tin-1.15.patch'
  41. else
  42. echo 'x - continuing file tin-1.15.patch'
  43. sed 's/^X//' << 'SHAR_EOF' >> 'tin-1.15.patch' &&
  44. ***************
  45. *** 3,9 ****
  46. X   *  Module    : page.c
  47. X   *  Author    : I.Lea & R.Skrenta
  48. X   *  Created   : 01-04-91
  49. !  *  Updated   : 20-06-92
  50. X   *  Notes     :
  51. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  52. X   *              You may  freely  copy or  redistribute  this software,
  53. --- 3,9 ----
  54. X   *  Module    : page.c
  55. X   *  Author    : I.Lea & R.Skrenta
  56. X   *  Created   : 01-04-91
  57. !  *  Updated   : 07-08-92
  58. X   *  Notes     :
  59. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  60. X   *              You may  freely  copy or  redistribute  this software,
  61. ***************
  62. *** 36,41 ****
  63. --- 36,42 ----
  64. X  int note_page;                    /* what page we're on */
  65. X  int rotate;                        /* 0=normal, 13=rot13 decode */
  66. X  int this_resp;
  67. + int doing_pgdn;
  68. X  
  69. X  long note_mark[MAX_PAGES];        /* ftells on beginnings of pages */
  70. X  long note_size;                    /* stat size in bytes of article */
  71. ***************
  72. *** 53,59 ****
  73. X      int i, n = 0;
  74. X      int copy_text;
  75. X      int kill_state = NO_KILLING;
  76. !     int old_sort_art_type = sort_art_type;
  77. X      int old_top;
  78. X      int posted;
  79. X      int ret_code;
  80. --- 54,60 ----
  81. X      int i, n = 0;
  82. X      int copy_text;
  83. X      int kill_state = NO_KILLING;
  84. !     int old_sort_art_type = default_sort_art_type;
  85. X      int old_top;
  86. X      int posted;
  87. X      int ret_code;
  88. ***************
  89. *** 74,81 ****
  90. X  
  91. X      rotate = 0;            /* normal mode, not rot13 */
  92. X      art = arts[respnum].artnum;
  93. -     arts[respnum].unread = ART_READ;    /* mark article as read */
  94. X  
  95. X      if ((note_page = art_open (art, group_path)) == ART_UNAVAILABLE) {
  96. X          sprintf (msg, txt_art_unavailable, art);
  97. X          error_message (msg, "");
  98. --- 75,88 ----
  99. X  
  100. X      rotate = 0;            /* normal mode, not rot13 */
  101. X      art = arts[respnum].artnum;
  102. X  
  103. +     if (arts[respnum].unread != ART_READ) {
  104. +         if (arts[respnum].hot && num_of_hot_arts) {
  105. +             num_of_hot_arts--;
  106. +         }
  107. +     }
  108. +     arts[respnum].unread = ART_READ;    /* mark article as read */
  109. +     
  110. X      if ((note_page = art_open (art, group_path)) == ART_UNAVAILABLE) {
  111. X          sprintf (msg, txt_art_unavailable, art);
  112. X          error_message (msg, "");
  113. ***************
  114. *** 188,195 ****
  115. X                      }
  116. X                      respnum = n;
  117. X                      goto restart;
  118. !                 } else
  119. X                      show_note_page (respnum, group);
  120. X                  break;
  121. X  
  122. X              case '\r':
  123. --- 195,204 ----
  124. X                      }
  125. X                      respnum = n;
  126. X                      goto restart;
  127. !                 } else {
  128. !                     doing_pgdn = TRUE;
  129. X                      show_note_page (respnum, group);
  130. +                 }
  131. X                  break;
  132. X  
  133. X              case '\r':
  134. ***************
  135. *** 252,260 ****
  136. X              case ctrl('K'):        /* kill article */
  137. X                  if (kill_art_menu (group, respnum)) {
  138. X                      i = which_thread (respnum);
  139. !                     if (kill_any_articles (group)) {
  140. X                          make_threads (FALSE);
  141. !                         find_base (show_only_unread);
  142. X                          if (i >= top_base)
  143. X                              i = top_base - 1;
  144. X                          respnum = base[i];    
  145. --- 261,269 ----
  146. X              case ctrl('K'):        /* kill article */
  147. X                  if (kill_art_menu (group, respnum)) {
  148. X                      i = which_thread (respnum);
  149. !                     if (kill_any_articles (my_group[cur_groupnum])) {
  150. X                          make_threads (FALSE);
  151. !                         find_base (my_group[cur_groupnum]);
  152. X                          if (i >= top_base)
  153. X                              i = top_base - 1;
  154. X                          respnum = base[i];    
  155. ***************
  156. *** 296,302 ****
  157. X              case 'a':    /* author search forward */
  158. X              case 'A':    /* author search backward */
  159. X                  i = (ch == 'a');
  160. !                 n = search_author (show_only_unread, respnum, i);
  161. X                  if (n < 0)
  162. X                      break;
  163. X                  respnum = n;
  164. --- 305,311 ----
  165. X              case 'a':    /* author search forward */
  166. X              case 'A':    /* author search backward */
  167. X                  i = (ch == 'a');
  168. !                 n = search_author (my_group[cur_groupnum], respnum, i);
  169. X                  if (n < 0)
  170. X                      break;
  171. X                  respnum = n;
  172. ***************
  173. *** 372,380 ****
  174. X  return_to_index:
  175. X                  art_close ();
  176. X                  if (kill_state == NO_KILLING &&
  177. !                     sort_art_type != old_sort_art_type) {
  178. X                      make_threads (TRUE);
  179. !                     find_base (show_only_unread);
  180. X                  }
  181. X                  i = which_thread (respnum);
  182. X                  *threadnum = which_response (respnum);
  183. --- 381,389 ----
  184. X  return_to_index:
  185. X                  art_close ();
  186. X                  if (kill_state == NO_KILLING &&
  187. !                     default_sort_art_type != old_sort_art_type) {
  188. X                      make_threads (TRUE);
  189. !                     find_base (my_group[cur_groupnum]);
  190. X                  }
  191. X                  i = which_thread (respnum);
  192. X                  *threadnum = which_response (respnum);
  193. ***************
  194. *** 381,389 ****
  195. X                  if (kill_state == KILLING) {
  196. X                      old_top = top;
  197. X                      old_artnum = arts[respnum].artnum;
  198. !                     kill_any_articles (group);
  199. X                      make_threads (FALSE);
  200. !                     find_base (show_only_unread);
  201. X                      i = find_new_pos (old_top, old_artnum, i);
  202. X                  }
  203. X                  return (i);
  204. --- 390,398 ----
  205. X                  if (kill_state == KILLING) {
  206. X                      old_top = top;
  207. X                      old_artnum = arts[respnum].artnum;
  208. !                     kill_any_articles (my_group[cur_groupnum]);
  209. X                      make_threads (FALSE);
  210. !                     find_base (my_group[cur_groupnum]);
  211. X                      i = find_new_pos (old_top, old_artnum, i);
  212. X                  }
  213. X                  return (i);
  214. ***************
  215. *** 409,416 ****
  216. X                  /* NOTREACHED */
  217. X  
  218. X              case 'K':    /* mark rest of thread as read */
  219. !                 for (n = respnum; n >= 0; n = arts[n].thread)
  220. X                      arts[n].unread = ART_READ;
  221. X                  n = next_unread (next_response (respnum));
  222. X                  if (n == -1)
  223. X                      goto return_to_index;
  224. --- 418,431 ----
  225. X                  /* NOTREACHED */
  226. X  
  227. X              case 'K':    /* mark rest of thread as read */
  228. !                 for (n = respnum; n >= 0; n = arts[n].thread) {
  229. !                     if (arts[n].unread != ART_READ) {
  230. !                         if (arts[n].hot && num_of_hot_arts) {
  231. !                             num_of_hot_arts--;
  232. !                         }
  233. !                     }
  234. X                      arts[n].unread = ART_READ;
  235. +                 }    
  236. X                  n = next_unread (next_response (respnum));
  237. X                  if (n == -1)
  238. X                      goto return_to_index;
  239. ***************
  240. *** 426,432 ****
  241. X              case 'M':    /* options menu */
  242. X                  if (change_rcfile (group, FALSE) == KILLING) {
  243. X                      kill_state = KILLING;
  244. !                 } 
  245. X                  redraw_page (respnum, group);
  246. X                  break;
  247. X  
  248. --- 441,448 ----
  249. X              case 'M':    /* options menu */
  250. X                  if (change_rcfile (group, FALSE) == KILLING) {
  251. X                      kill_state = KILLING;
  252. !                 }
  253. !                 set_subj_from_size (COLS); 
  254. X                  redraw_page (respnum, group);
  255. X                  break;
  256. X  
  257. ***************
  258. *** 475,481 ****
  259. X  
  260. X              case 'Q':    /* quit */
  261. X                  return -2;
  262. -                 break;
  263. X      
  264. X              case 'r':    /* reply to author through mail */
  265. X              case 'R':
  266. --- 491,496 ----
  267. ***************
  268. *** 491,499 ****
  269. X              case 't':    /* return to group selection page */
  270. X                  art_close ();
  271. X                  if (kill_state == KILLING) {
  272. !                     kill_any_articles (group);
  273. X                      make_threads (FALSE);
  274. !                     find_base (show_only_unread);
  275. X                  }
  276. X                  update_newsrc (group, my_group[cur_groupnum], FALSE);
  277. X                  fix_new_highest (cur_groupnum);
  278. --- 506,514 ----
  279. X              case 't':    /* return to group selection page */
  280. X                  art_close ();
  281. X                  if (kill_state == KILLING) {
  282. !                     kill_any_articles (my_group[cur_groupnum]);
  283. X                      make_threads (FALSE);
  284. !                     find_base (my_group[cur_groupnum]);
  285. X                  }
  286. X                  update_newsrc (group, my_group[cur_groupnum], FALSE);
  287. X                  fix_new_highest (cur_groupnum);
  288. ***************
  289. *** 534,539 ****
  290. --- 549,559 ----
  291. X                  break;
  292. X  
  293. X              case 'z':    /* mark article as unread (to return) */
  294. +                 if (arts[n].unread != ART_UNREAD) {
  295. +                     if (arts[n].hot) {
  296. +                         num_of_hot_arts++;
  297. +                     }
  298. +                 }
  299. X                  arts[respnum].unread = ART_WILL_RETURN;
  300. X                  info_message (txt_art_marked_as_unread);
  301. X                  break;
  302. ***************
  303. *** 569,579 ****
  304. X  {
  305. X  #ifndef INDEX_DAEMON
  306. X  
  307. !     char buf[LEN];
  308. X      char buf2[LEN+50];
  309. X      char *p, *q;
  310. X      int i, j;
  311. X      int ctrl_L;        /* form feed character detected */
  312. X      long tmp_pos;
  313. X  
  314. X      ClearScreen ();
  315. --- 589,600 ----
  316. X  {
  317. X  #ifndef INDEX_DAEMON
  318. X  
  319. !     static char buf[LEN];
  320. X      char buf2[LEN+50];
  321. X      char *p, *q;
  322. X      int i, j;
  323. X      int ctrl_L;        /* form feed character detected */
  324. +     int first  = TRUE;
  325. X      long tmp_pos;
  326. X  
  327. X      ClearScreen ();
  328. ***************
  329. *** 587,599 ****
  330. X          fseek (note_fp, tmp_pos, 0);    /* goto old position */
  331. X      }
  332. X      
  333. !     if (note_page == 0)
  334. X          show_first_header (respnum, group);
  335. !     else
  336. X          show_cont_header (respnum);
  337. X      ctrl_L = FALSE;
  338. X      while (note_line < LINES) {
  339. X          if (fgets (buf, sizeof (buf), note_fp) == NULL) {
  340. X              note_end = TRUE;
  341. X              break;
  342. --- 608,630 ----
  343. X          fseek (note_fp, tmp_pos, 0);    /* goto old position */
  344. X      }
  345. X      
  346. !     if (note_page == 0) {
  347. !         buf2[0] = '\0';
  348. !         doing_pgdn = FALSE;
  349. X          show_first_header (respnum, group);
  350. !     } else {
  351. X          show_cont_header (respnum);
  352. !     }
  353. !     
  354. X      ctrl_L = FALSE;
  355. X      while (note_line < LINES) {
  356. +         if (show_last_line_prev_page) {
  357. +             note_mark[note_page+1] = ftell (note_fp);
  358. +             if (doing_pgdn && first && buf2[0]) {
  359. +                 goto print_a_line;
  360. +             }
  361. +         }
  362. +         first = FALSE;
  363. X          if (fgets (buf, sizeof (buf), note_fp) == NULL) {
  364. X              note_end = TRUE;
  365. X              break;
  366. ***************
  367. *** 647,654 ****
  368. X  
  369. X          *q = '\0';
  370. X  
  371. X          printf("%s\r\n", buf2);
  372. X          note_line += ((int) strlen (buf2) / COLS) + 1;
  373. X  
  374. X          if (ctrl_L) {
  375. --- 678,694 ----
  376. X  
  377. X          *q = '\0';
  378. X  
  379. + print_a_line:
  380. +         if (first) {
  381. +             StartInverse ();
  382. +         }    
  383. X          printf("%s\r\n", buf2);
  384. !         if (first) {
  385. !             EndInverse ();
  386. !         }    
  387. !         first = FALSE;
  388. !         doing_pgdn = FALSE;
  389. !         
  390. X          note_line += ((int) strlen (buf2) / COLS) + 1;
  391. X  
  392. X          if (ctrl_L) {
  393. ***************
  394. *** 656,666 ****
  395. X          }
  396. X      }
  397. X  
  398. !     note_mark[++note_page] = ftell (note_fp);
  399. !     if (note_mark[note_page] == note_size) {
  400. X          note_end = TRUE;
  401. X      }
  402. X  
  403. X      if (note_end) {
  404. X          MoveCursor (LINES, MORE_POS-(5+BLANK_PAGE_COLS));
  405. --- 696,711 ----
  406. X          }
  407. X      }
  408. X  
  409. !     if (! show_last_line_prev_page) {
  410. !         note_mark[++note_page] = ftell (note_fp);
  411. !     } else {
  412. !         note_page++;
  413. !     }
  414. !     
  415. !     if (ftell (note_fp) == note_size) {
  416. X          note_end = TRUE;
  417. X      }
  418. X  
  419. X      if (note_end) {
  420. X          MoveCursor (LINES, MORE_POS-(5+BLANK_PAGE_COLS));
  421. diff -rcs ../1.14/patchlev.h ./patchlev.h
  422. *** ../1.14/patchlev.h    Tue Aug 11 21:23:30 1992
  423. --- ./patchlev.h    Mon Aug 10 12:10:07 1992
  424. ***************
  425. *** 3,9 ****
  426. X   *  Module    : patchlev.h
  427. X   *  Author    : I.Lea
  428. X   *  Created   : 01-04-91
  429. !  *  Updated   : 22-06-92
  430. X   *  Notes     :
  431. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  432. X   *              You may  freely  copy or  redistribute  this software,
  433. --- 3,9 ----
  434. X   *  Module    : patchlev.h
  435. X   *  Author    : I.Lea
  436. X   *  Created   : 01-04-91
  437. !  *  Updated   : 24-06-92
  438. X   *  Notes     :
  439. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  440. X   *              You may  freely  copy or  redistribute  this software,
  441. ***************
  442. *** 13,16 ****
  443. X   */
  444. X  
  445. X  #define VERSION        "1.1"        /* Beta versions are "1.n Beta" */
  446. ! #define PATCHLEVEL    4
  447. --- 13,16 ----
  448. X   */
  449. X  
  450. X  #define VERSION        "1.1"        /* Beta versions are "1.n Beta" */
  451. ! #define PATCHLEVEL    5
  452. diff -rcs ../1.14/post.c ./post.c
  453. *** ../1.14/post.c    Tue Aug 11 21:23:18 1992
  454. --- ./post.c    Tue Aug 11 21:17:20 1992
  455. ***************
  456. *** 3,9 ****
  457. X   *  Module    : post.c
  458. X   *  Author    : I.Lea
  459. X   *  Created   : 01-04-91
  460. !  *  Updated   : 16-06-92
  461. X   *  Notes     : mail/post/replyto/followup/crosspost & cancel articles
  462. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  463. X   *              You may  freely  copy or  redistribute  this software,
  464. --- 3,9 ----
  465. X   *  Module    : post.c
  466. X   *  Author    : I.Lea
  467. X   *  Created   : 01-04-91
  468. !  *  Updated   : 31-07-92
  469. X   *  Notes     : mail/post/replyto/followup/crosspost & cancel articles
  470. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  471. X   *              You may  freely  copy or  redistribute  this software,
  472. ***************
  473. *** 204,210 ****
  474. X      char ch_default = 'p';
  475. X      char subj[LEN];
  476. X      char buf[LEN];
  477. !     int redraw_screen = FALSE;
  478. X  
  479. X      /*
  480. X       * Don't allow if not active news feed 
  481. --- 204,210 ----
  482. X      char ch_default = 'p';
  483. X      char subj[LEN];
  484. X      char buf[LEN];
  485. !     int i, redraw_screen = FALSE;
  486. X  
  487. X      /*
  488. X       * Don't allow if not active news feed 
  489. ***************
  490. *** 262,267 ****
  491. --- 262,272 ----
  492. X          fprintf (fp, "Reply-To: %s\n", reply_to);
  493. X          start_line_offset++;
  494. X      }
  495. +     i = find_group_index (group);
  496. +     if (i >= 0 && active[i].attribute.followup_to != (char *) 0) {
  497. +         fprintf (fp, "Followup-To: %s\n", active[i].attribute.followup_to);
  498. +         start_line_offset++;
  499. +     }
  500. X      fprintf (fp, "Distribution: %s\n", my_distribution);
  501. X      fprintf (fp, "Summary: \n");
  502. X      fprintf (fp, "Keywords: \n\n\n");
  503. ***************
  504. *** 281,287 ****
  505. X                      MoveCursor (LINES, (int) strlen (txt_no_blank_line));
  506. X                      if ((ch = (char) ReadCh ()) == CR)
  507. X                          ch = 'e';
  508. !                 } while (ch != ESC && ch != 'q' && ch != 'e');
  509. X                  if (ch == 'e')
  510. X                      invoke_editor (article);
  511. X                  else
  512. --- 286,292 ----
  513. X                      MoveCursor (LINES, (int) strlen (txt_no_blank_line));
  514. X                      if ((ch = (char) ReadCh ()) == CR)
  515. X                          ch = 'e';
  516. !                 } while (! strchr ("eipq\033", ch));
  517. X                  if (ch == 'e')
  518. X                      invoke_editor (article);
  519. X                  else
  520. ***************
  521. *** 291,296 ****
  522. --- 296,304 ----
  523. X              if (ch == 'e') {
  524. X                  break;
  525. X              }
  526. +         case 'i':
  527. +             invoke_ispell (article);
  528. +             break;
  529. X          case 'q':
  530. X          case ESC:
  531. X              if (unlink_article)
  532. ***************
  533. *** 319,325 ****
  534. X              MoveCursor (LINES, (int) strlen (txt_quit_edit_post));
  535. X              if ((ch = (char) ReadCh ()) == CR)
  536. X                  ch = ch_default;
  537. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 'p');
  538. X      }
  539. X  
  540. X  post_base_done:
  541. --- 327,333 ----
  542. X              MoveCursor (LINES, (int) strlen (txt_quit_edit_post));
  543. X              if ((ch = (char) ReadCh ()) == CR)
  544. X                  ch = ch_default;
  545. !         } while (! strchr ("eipq\033", ch));
  546. X      }
  547. X  
  548. X  post_base_done:
  549. ***************
  550. *** 345,352 ****
  551. X      char ch, *ptr;
  552. X      char ch_default = 'p';
  553. X      char buf[LEN];
  554. X      int ret_code = POSTED_NONE;
  555. -     int followup_to_poster = FALSE;
  556. X      
  557. X      /*
  558. X       * Don't allow if not active news feed 
  559. --- 353,360 ----
  560. X      char ch, *ptr;
  561. X      char ch_default = 'p';
  562. X      char buf[LEN];
  563. +     int i;
  564. X      int ret_code = POSTED_NONE;
  565. X      
  566. X      /*
  567. X       * Don't allow if not active news feed 
  568. ***************
  569. *** 366,373 ****
  570. X              return (ret_code);
  571. X          }
  572. X          *note_h_followup = '\0';
  573. -         followup_to_poster = TRUE;
  574. X          find_reply_to_addr (respnum, buf);
  575. X          mail_to_someone (buf, TRUE, FALSE, &ret_code);
  576. X          return (ret_code);
  577. --- 374,379 ----
  578. ***************
  579. *** 408,413 ****
  580. --- 414,424 ----
  581. X          fprintf (fp, "Newsgroups: %s\n", note_h_newsgroups);
  582. X      }
  583. X  
  584. +     i = find_group_index (group);
  585. +     if (i >= 0 && active[i].attribute.followup_to != (char *) 0) {
  586. +         fprintf (fp, "Followup-To: %s\n", active[i].attribute.followup_to);
  587. +     }
  588. +     
  589. X      fprintf (fp, "References: %s\n", note_h_messageid);
  590. X  
  591. X      if (*my_org) {
  592. ***************
  593. *** 418,424 ****
  594. X          fprintf (fp, "Reply-To: %s\n", reply_to);
  595. X          start_line_offset++;
  596. X      }
  597. !     if (note_h_distrib != '\0') {
  598. X          fprintf (fp, "Distribution: %s\n", note_h_distrib);
  599. X          start_line_offset++;
  600. X      }
  601. --- 429,435 ----
  602. X          fprintf (fp, "Reply-To: %s\n", reply_to);
  603. X          start_line_offset++;
  604. X      }
  605. !     if (*note_h_distrib) {
  606. X          fprintf (fp, "Distribution: %s\n", note_h_distrib);
  607. X          start_line_offset++;
  608. X      }
  609. ***************
  610. *** 429,439 ****
  611. X              if (arts[respnum].name == arts[respnum].from) {     
  612. X                  fprintf (fp, txt_writes, arts[respnum].from);
  613. X              } else {
  614. !                 fprintf (fp, txt_writes_name, arts[respnum].from, arts[respnum].name);
  615. X              }
  616. X          }
  617. X          fseek (note_fp, note_mark[0], 0);
  618. !         copy_fp (note_fp, fp, DEFAULT_COMMENT);
  619. X      }
  620. X  
  621. X      add_signature (fp, FALSE);
  622. --- 440,450 ----
  623. X              if (arts[respnum].name == arts[respnum].from) {     
  624. X                  fprintf (fp, txt_writes, arts[respnum].from);
  625. X              } else {
  626. !                 fprintf (fp, txt_writes_name, arts[respnum].name, arts[respnum].from);
  627. X              }
  628. X          }
  629. X          fseek (note_fp, note_mark[0], 0);
  630. !         copy_fp (note_fp, fp, quote_chars);
  631. X      }
  632. X  
  633. X      add_signature (fp, FALSE);
  634. ***************
  635. *** 451,457 ****
  636. X                      MoveCursor (LINES, (int) strlen (txt_no_blank_line));
  637. X                      if ((ch = (char) ReadCh ()) == CR)
  638. X                          ch = 'e';
  639. !                 } while (ch != ESC && ch != 'q' && ch != 'e');
  640. X                  if (ch == 'e')
  641. X                      invoke_editor (article);
  642. X                  else
  643. --- 462,468 ----
  644. X                      MoveCursor (LINES, (int) strlen (txt_no_blank_line));
  645. X                      if ((ch = (char) ReadCh ()) == CR)
  646. X                          ch = 'e';
  647. !                 } while (! strchr ("eq\033", ch));
  648. X                  if (ch == 'e')
  649. X                      invoke_editor (article);
  650. X                  else
  651. ***************
  652. *** 463,468 ****
  653. --- 474,484 ----
  654. X              ret_code = POSTED_REDRAW;
  655. X              break;
  656. X  
  657. +         case 'i':
  658. +             invoke_ispell (article);
  659. +             ret_code = POSTED_REDRAW;
  660. +             break;
  661. +             
  662. X          case 'q':
  663. X          case ESC:
  664. X              if (unlink_article)
  665. ***************
  666. *** 491,497 ****
  667. X              MoveCursor(LINES, (int) strlen (txt_quit_edit_post));
  668. X              if ((ch = (char) ReadCh()) == CR)
  669. X                  ch = ch_default;
  670. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 'p');
  671. X      }
  672. X  
  673. X  post_response_done:
  674. --- 507,513 ----
  675. X              MoveCursor(LINES, (int) strlen (txt_quit_edit_post));
  676. X              if ((ch = (char) ReadCh()) == CR)
  677. X                  ch = ch_default;
  678. !         } while (! strchr ("eipq\033", ch));
  679. X      }
  680. X  
  681. X  post_response_done:
  682. ***************
  683. *** 568,574 ****
  684. X          ch = 'e';
  685. X          fprintf (fp, "In article %s you wrote:\n", note_h_messageid);
  686. X          fseek (note_fp, note_mark[0], 0);
  687. !         copy_fp (note_fp, fp, DEFAULT_COMMENT);
  688. X      } else {
  689. X          fseek (note_fp, 0L, 0);
  690. X          copy_fp (note_fp, fp, "");
  691. --- 584,590 ----
  692. X          ch = 'e';
  693. X          fprintf (fp, "In article %s you wrote:\n", note_h_messageid);
  694. X          fseek (note_fp, note_mark[0], 0);
  695. !         copy_fp (note_fp, fp, quote_chars);
  696. X      } else {
  697. X          fseek (note_fp, 0L, 0);
  698. X          copy_fp (note_fp, fp, "");
  699. ***************
  700. *** 586,592 ****
  701. X                  MoveCursor (LINES, (int) (strlen (msg)-1));
  702. X                  if ((ch = (char) ReadCh ()) == CR)
  703. X                      ch = ch_default;
  704. !             } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 's');
  705. X          }
  706. X          switch (ch) {
  707. X              case 'e':
  708. --- 602,608 ----
  709. X                  MoveCursor (LINES, (int) (strlen (msg)-1));
  710. X                  if ((ch = (char) ReadCh ()) == CR)
  711. X                      ch = ch_default;
  712. !             } while (! strchr ("eqs\033", ch));
  713. X          }
  714. X          switch (ch) {
  715. X              case 'e':
  716. ***************
  717. *** 626,632 ****
  718. X                  MoveCursor (LINES, (int) (strlen (msg)-1));
  719. X                  if ((ch = (char) ReadCh ()) == CR)
  720. X                      ch = ch_default;
  721. !             } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 's');
  722. X          }    
  723. X      }
  724. X  
  725. --- 642,648 ----
  726. X                  MoveCursor (LINES, (int) (strlen (msg)-1));
  727. X                  if ((ch = (char) ReadCh ()) == CR)
  728. X                      ch = ch_default;
  729. !             } while (! strchr ("eqs\033", ch));
  730. X          }    
  731. X      }
  732. X  
  733. ***************
  734. *** 643,655 ****
  735. X      char ch;
  736. X      char ch_default = 's';
  737. X      char buf[LEN];
  738. !     char mail_to[LEN];
  739. X      FILE *fp;
  740. X      FILE *fp_uname;
  741. X      int is_nntp = FALSE;
  742. X      int is_nntp_only   = FALSE;
  743. X      int is_longfiles   = FALSE;
  744. -     int is_resync_active = 0;
  745. X      int uname_ok = FALSE;
  746. X  
  747. X      start_line_offset = 5;
  748. --- 659,670 ----
  749. X      char ch;
  750. X      char ch_default = 's';
  751. X      char buf[LEN];
  752. !     char mail_to[PATH_LEN];
  753. X      FILE *fp;
  754. X      FILE *fp_uname;
  755. X      int is_nntp = FALSE;
  756. X      int is_nntp_only   = FALSE;
  757. X      int is_longfiles   = FALSE;
  758. X      int uname_ok = FALSE;
  759. X  
  760. X      start_line_offset = 5;
  761. ***************
  762. *** 687,695 ****
  763. X          fprintf (fp, "\nPlease enter the following information:\n");
  764. X          fprintf (fp, "BOX1: Machine+OS:\n");
  765. X      }
  766. - #ifndef NO_RESYNC_ACTIVE_FILE
  767. -     is_resync_active = RESYNC_ACTIVE_SECS;
  768. - #endif
  769. X  #ifdef USE_LONG_FILENAMES
  770. X      is_longfiles = TRUE;
  771. X  #endif
  772. --- 702,707 ----
  773. ***************
  774. *** 699,707 ****
  775. X  #ifdef NNTP_ONLY
  776. X      is_nntp_only = TRUE;
  777. X  #endif
  778. !     fprintf (fp, "\nCFG1: active=%d  arts=%d  resync=%d  longfilenames=%d  setuid=%d\n\
  779. X  CFG2: nntp=%d  nntp_only=%d  nntp_xuser=%d  nntp_xindex=%d  nntp_xspooldir=%d\n",
  780. !         DEFAULT_ACTIVE_NUM,DEFAULT_ARTICLE_NUM,is_resync_active,
  781. X          is_longfiles, (tin_uid == real_uid ? 0 : 1), is_nntp, 
  782. X          is_nntp_only,  xuser_supported, xindex_supported, 
  783. X          xspooldir_supported);
  784. --- 711,719 ----
  785. X  #ifdef NNTP_ONLY
  786. X      is_nntp_only = TRUE;
  787. X  #endif
  788. !     fprintf (fp, "\nCFG1: active=%d  arts=%d  reread=%d  longfilenames=%d  setuid=%d\n\
  789. X  CFG2: nntp=%d  nntp_only=%d  nntp_xuser=%d  nntp_xindex=%d  nntp_xspooldir=%d\n",
  790. !         DEFAULT_ACTIVE_NUM,DEFAULT_ARTICLE_NUM,reread_active_file_secs,
  791. X          is_longfiles, (tin_uid == real_uid ? 0 : 1), is_nntp, 
  792. X          is_nntp_only,  xuser_supported, xindex_supported, 
  793. X          xspooldir_supported);
  794. ***************
  795. *** 752,758 ****
  796. X              MoveCursor (LINES, (int) strlen (msg)-1);
  797. X              if ((ch = (char) ReadCh ()) == CR)
  798. X                  ch = ch_default;
  799. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 's');
  800. X      }
  801. X  
  802. X  mail_bug_report_done:
  803. --- 764,770 ----
  804. X              MoveCursor (LINES, (int) strlen (msg)-1);
  805. X              if ((ch = (char) ReadCh ()) == CR)
  806. X                  ch = ch_default;
  807. !         } while (! strchr ("eqs\033", ch));
  808. X      }
  809. X  
  810. X  mail_bug_report_done:
  811. ***************
  812. *** 804,810 ****
  813. X      if (copy_text) {        /* if "copy_text" */
  814. X          fprintf (fp, txt_in_art_you_write, note_h_messageid);
  815. X          fseek (note_fp, note_mark[0], 0);
  816. !         copy_fp (note_fp, fp, DEFAULT_COMMENT);
  817. X      }
  818. X  
  819. X      add_signature (fp, TRUE);
  820. --- 816,822 ----
  821. X      if (copy_text) {        /* if "copy_text" */
  822. X          fprintf (fp, txt_in_art_you_write, note_h_messageid);
  823. X          fseek (note_fp, note_mark[0], 0);
  824. !         copy_fp (note_fp, fp, quote_chars);
  825. X      }
  826. X  
  827. X      add_signature (fp, TRUE);
  828. ***************
  829. *** 846,852 ****
  830. X              MoveCursor (LINES, (int) strlen (msg)-1);
  831. X              if ((ch = (char) ReadCh ()) == CR)
  832. X                  ch = ch_default;
  833. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 's');
  834. X      }
  835. X  
  836. X  mail_to_author_done:
  837. --- 858,864 ----
  838. X              MoveCursor (LINES, (int) strlen (msg)-1);
  839. X              if ((ch = (char) ReadCh ()) == CR)
  840. X                  ch = ch_default;
  841. !         } while (! strchr ("eqs\033", ch));
  842. X      }
  843. X  
  844. X  mail_to_author_done:
  845. ***************
  846. *** 991,997 ****
  847. X              MoveCursor (LINES, (int) strlen (msg)-1);
  848. X              if ((ch = (char) ReadCh ()) == CR)
  849. X                  ch = ch_default;
  850. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 'c');
  851. X  
  852. X          switch (ch) {
  853. X          case 'e':
  854. --- 1003,1009 ----
  855. X              MoveCursor (LINES, (int) strlen (msg)-1);
  856. X              if ((ch = (char) ReadCh ()) == CR)
  857. X                  ch = ch_default;
  858. !         } while (! strchr ("ceq\033", ch));
  859. X  
  860. X          switch (ch) {
  861. X          case 'e':
  862. ***************
  863. *** 1058,1064 ****
  864. X          fprintf (fp, "Reply-To: %s\n", reply_to);
  865. X          start_line_offset++;
  866. X      }
  867. !     if (note_h_distrib != '\0') {
  868. X          fprintf (fp, "Distribution: %s\n", note_h_distrib);
  869. X          start_line_offset++;
  870. X      }
  871. --- 1070,1076 ----
  872. X          fprintf (fp, "Reply-To: %s\n", reply_to);
  873. X          start_line_offset++;
  874. X      }
  875. !     if (*note_h_distrib) {
  876. X          fprintf (fp, "Distribution: %s\n", note_h_distrib);
  877. X          start_line_offset++;
  878. X      }
  879. ***************
  880. *** 1083,1089 ****
  881. X              MoveCursor (LINES, (int) strlen (msg)-1);
  882. X              if ((ch = (char) ReadCh ()) == CR)
  883. X                  ch = ch_default;
  884. !         } while (ch != ESC && ch != 'q' && ch != 'e' && ch != 'p');
  885. X          switch (ch) {
  886. X          case 'e':
  887. X              invoke_editor (article);
  888. --- 1095,1101 ----
  889. X              MoveCursor (LINES, (int) strlen (msg)-1);
  890. X              if ((ch = (char) ReadCh ()) == CR)
  891. X                  ch = ch_default;
  892. !         } while (! strchr ("epq\033", ch));
  893. X          switch (ch) {
  894. X          case 'e':
  895. X              invoke_editor (article);
  896. ***************
  897. *** 1169,1179 ****
  898. X  {
  899. X      FILE *sigfp;
  900. X  
  901. -     if (read_news_via_nntp) {
  902. X  #ifdef NNTP_INEWS
  903. X          flag = TRUE;
  904. - #endif
  905. X      }
  906. X  
  907. X      /*
  908. X       * Use ~/.signature or ~/.Sig or custom .Sig files
  909. --- 1181,1191 ----
  910. X  {
  911. X      FILE *sigfp;
  912. X  
  913. X  #ifdef NNTP_INEWS
  914. +     if (read_news_via_nntp) {
  915. X          flag = TRUE;
  916. X      }
  917. + #endif
  918. X  
  919. X      /*
  920. X       * Use ~/.signature or ~/.Sig or custom .Sig files
  921. Files ../1.14/prompt.c and ./prompt.c are identical
  922. diff -rcs ../1.14/proto.h ./proto.h
  923. *** ../1.14/proto.h    Tue Aug 11 21:23:29 1992
  924. --- ./proto.h    Fri Aug  7 13:05:11 1992
  925. ***************
  926. *** 2,14 ****
  927. X   
  928. X  /* active.c */
  929. X  extern void resync_active_file(void);
  930. ! extern int read_active_file(void);
  931. ! extern int backup_active(int create);
  932. ! extern void notify_groups(void);
  933. ! extern void mark_unthreaded_groups(void);
  934. X  extern void read_newsgroups_file(void);
  935. X  /* art.c */
  936. ! extern void find_base(int only_unread);
  937. X  extern int num_of_arts(void);
  938. X  extern int valid_artnum(long art);
  939. X  extern int purge_needed(void);
  940. --- 2,20 ----
  941. X   
  942. X  /* active.c */
  943. X  extern void resync_active_file(void);
  944. ! extern int find_group_index(char *group);
  945. ! extern void read_active_file(void);
  946. ! extern void backup_active(int create);
  947. ! extern void check_for_any_new_groups(void);
  948. ! extern int prompt_subscribe_group(char *group);
  949. ! extern void set_default_attributes(void);
  950. ! extern void read_attributes_file(void);
  951. ! extern void write_attributes_file(void);
  952. X  extern void read_newsgroups_file(void);
  953. + extern void load_active_size_info(char *info);
  954. + extern int find_active_size_index(char *cur_active_server);
  955. X  /* art.c */
  956. ! extern void find_base(int index);
  957. X  extern int num_of_arts(void);
  958. X  extern int valid_artnum(long art);
  959. X  extern int purge_needed(void);
  960. ***************
  961. *** 49,54 ****
  962. --- 55,61 ----
  963. X  extern void debug_nntp_respcode(int respcode);
  964. X  extern void debug_print_arts(void);
  965. X  extern void debug_print_header(struct article_t *s);
  966. + extern void debug_save_comp(void);
  967. X  extern void debug_print_comment(char *comment);
  968. X  extern void debug_print_base(void);
  969. X  extern void debug_print_active(void);
  970. ***************
  971. *** 61,67 ****
  972. X  extern void group_page(char *group);
  973. X  extern void fix_new_highest(int groupnum);
  974. X  extern void show_group_page(char *group);
  975. ! extern void update_group_page(char *group);
  976. X  extern void draw_subject_arrow(void);
  977. X  extern void erase_subject_arrow(void);
  978. X  extern void prompt_subject_num(int ch, char *group);
  979. --- 68,74 ----
  980. X  extern void group_page(char *group);
  981. X  extern void fix_new_highest(int groupnum);
  982. X  extern void show_group_page(char *group);
  983. ! extern void update_group_page(void);
  984. X  extern void draw_subject_arrow(void);
  985. X  extern void erase_subject_arrow(void);
  986. X  extern void prompt_subject_num(int ch, char *group);
  987. ***************
  988. *** 70,75 ****
  989. --- 77,83 ----
  990. X  extern void mark_screen(int level, int screen_row, int screen_col, char *value);
  991. X  extern void set_subj_from_size(int num_cols);
  992. X  extern void toggle_subject_from(void);
  993. + extern void show_group_title(int clear_title);
  994. X  /* hashstr.c */
  995. X  extern char *hash_str(char *s);
  996. X  extern struct hashnode *add_string(char *s);
  997. ***************
  998. *** 77,82 ****
  999. --- 85,91 ----
  1000. X  extern void hash_reclaim(void);
  1001. X  /* help.c */
  1002. X  extern void show_info_page(int type, char *help[], char *title);
  1003. + extern void display_info_page(void);
  1004. X  /* inews.c */
  1005. X  extern int submit_inews(char *name);
  1006. X  extern void get_host_name(char *host_name);
  1007. ***************
  1008. *** 90,97 ****
  1009. X  extern void write_kill_file(void);
  1010. X  extern int kill_art_menu(char *group_name, int index);
  1011. X  extern int unkill_all_articles(void);
  1012. ! extern int kill_any_articles(char *group);
  1013. ! extern int auto_select_articles(char *group);
  1014. X  /* lang.c */
  1015. X  /* main.c */
  1016. X  extern void main(int argc, char *argv[]);
  1017. --- 99,106 ----
  1018. X  extern void write_kill_file(void);
  1019. X  extern int kill_art_menu(char *group_name, int index);
  1020. X  extern int unkill_all_articles(void);
  1021. ! extern int kill_any_articles(int index);
  1022. ! extern int auto_select_articles(int index);
  1023. X  /* lang.c */
  1024. X  /* main.c */
  1025. X  extern void main(int argc, char *argv[]);
  1026. ***************
  1027. *** 107,118 ****
  1028. --- 116,132 ----
  1029. X  extern void expand_active(void);
  1030. X  extern void expand_kill(void);
  1031. X  extern void expand_save(void);
  1032. + extern void expand_spooldirs(void);
  1033. + extern void expand_active_size(void);
  1034. X  extern void init_screen_array(int allocate);
  1035. X  extern void free_all_arrays(void);
  1036. X  extern void free_art_array(void);
  1037. + extern void free_attributes_array(void);
  1038. X  extern void free_active_arrays(void);
  1039. X  extern void free_kill_array(void);
  1040. X  extern void free_save_array(void);
  1041. + extern void free_spooldirs_array(void);
  1042. + extern void free_active_size_array(void);
  1043. X  extern char *my_malloc(unsigned size);
  1044. X  extern char *my_realloc(char *p, unsigned size);
  1045. X  /* misc.c */
  1046. ***************
  1047. *** 120,125 ****
  1048. --- 134,140 ----
  1049. X  extern void copy_fp(FILE *fp_ip, FILE *fp_op, char *prefix);
  1050. X  extern char *get_val(char *env, char *def);
  1051. X  extern int invoke_editor(char *nam);
  1052. + extern int invoke_ispell(char *nam);
  1053. X  extern void shell_escape(void);
  1054. X  extern void tin_done(int ret);
  1055. X  extern long hash_groupname(char *group);
  1056. ***************
  1057. *** 143,148 ****
  1058. --- 158,164 ----
  1059. X  extern void get_author(int thread, int respnum, char *str);
  1060. X  extern void toggle_inverse_video(void);
  1061. X  extern int get_arrow_key(void);
  1062. + extern void create_index_lock_file(char *lock_file);
  1063. X  /* newsrc.c */
  1064. X  extern int auto_subscribe_groups(void);
  1065. X  extern void backup_newsrc(void);
  1066. ***************
  1067. *** 174,179 ****
  1068. --- 190,196 ----
  1069. X  extern void nntp_open(void);
  1070. X  extern void nntp_close(void);
  1071. X  extern FILE *open_active_fp(void);
  1072. + extern FILE *open_newgroups_fp(int index);
  1073. X  extern FILE *open_subscription_fp(void);
  1074. X  extern FILE *open_newsgroups_fp(void);
  1075. X  extern FILE *open_index_fp(char *group_name);
  1076. ***************
  1077. *** 231,236 ****
  1078. --- 248,255 ----
  1079. X  extern int match_boolean(char *line, char *pat, int *dst);
  1080. X  extern int match_number(char *line, char *pat, int *dst);
  1081. X  extern int match_string(char *line, char *pat, char *dst, int dstlen);
  1082. + extern void quote_dash_to_space(char *s);
  1083. + extern char *quote_space_to_dash(char *s);
  1084. X  /* save.c */
  1085. X  extern int check_start_save_any_news(int check_start_save);
  1086. X  extern int save_art_to_file(int respnum, int index, int mailbox, char *filename);
  1087. ***************
  1088. *** 262,268 ****
  1089. X  extern void show_title(char *title);
  1090. X  extern void ring_bell(void);
  1091. X  /* search.c */
  1092. ! extern int search_author(int only_unread, int current_art, int forward);
  1093. X  extern void search_group(int forward);
  1094. X  extern void search_subject(int forward, char *group);
  1095. X  extern int search_article(int forward);
  1096. --- 281,287 ----
  1097. X  extern void show_title(char *title);
  1098. X  extern void ring_bell(void);
  1099. X  /* search.c */
  1100. ! extern int search_author(int index, int current_art, int forward);
  1101. X  extern void search_group(int forward);
  1102. X  extern void search_subject(int forward, char *group);
  1103. X  extern int search_article(int forward);
  1104. ***************
  1105. *** 279,284 ****
  1106. --- 298,304 ----
  1107. X  extern void catchup_group(int goto_next_unread_group);
  1108. X  extern void next_unread_group(int enter_group);
  1109. X  extern void set_groupname_len(int all_groups);
  1110. + extern void toggle_my_groups(int only_unread_groups);
  1111. X  /* signal.c */
  1112. X  extern sigtype_t (*sigdisp(int sig, sigtype_t (*func)()))();
  1113. X  extern void set_signal_handlers(void);
  1114. ***************
  1115. *** 289,294 ****
  1116. --- 309,315 ----
  1117. X  extern int set_win_size(int *num_lines, int *num_cols);
  1118. X  extern void set_signals_art(void);
  1119. X  extern void set_signals_group(void);
  1120. + extern void set_signals_help(void);
  1121. X  extern void set_signals_page(void);
  1122. X  extern void set_signals_select(void);
  1123. X  extern void set_signals_spooldir(void);
  1124. ***************
  1125. *** 298,303 ****
  1126. --- 319,325 ----
  1127. X  extern void select_suspend(int sig);
  1128. X  extern void spooldir_suspend(int sig);
  1129. X  extern void group_suspend(int sig);
  1130. + extern void help_suspend(int sig);
  1131. X  extern void page_suspend(int sig);
  1132. X  extern void thread_suspend(int sig);
  1133. X  extern void rcfile_suspend(int sig);
  1134. ***************
  1135. *** 306,311 ****
  1136. --- 328,334 ----
  1137. X  extern void select_resize(int sig);
  1138. X  extern void spooldir_resize(int sig);
  1139. X  extern void group_resize(int sig);
  1140. + extern void help_resize(int sig);
  1141. X  extern void page_resize(int sig);
  1142. X  extern void thread_resize(int sig);
  1143. X  /* spooldir.c */
  1144. ***************
  1145. *** 342,354 ****
  1146. X   
  1147. X  /* active.c */
  1148. X  extern void resync_active_file(/*void*/);
  1149. ! extern int read_active_file(/*void*/);
  1150. ! extern int backup_active(/*int create*/);
  1151. ! extern void notify_groups(/*void*/);
  1152. ! extern void mark_unthreaded_groups(/*void*/);
  1153. X  extern void read_newsgroups_file(/*void*/);
  1154. X  /* art.c */
  1155. ! extern void find_base(/*int only_unread*/);
  1156. X  extern int num_of_arts(/*void*/);
  1157. X  extern int valid_artnum(/*long art*/);
  1158. X  extern int purge_needed(/*void*/);
  1159. --- 365,383 ----
  1160. X   
  1161. X  /* active.c */
  1162. X  extern void resync_active_file(/*void*/);
  1163. ! extern int find_group_index(/*char *group*/);
  1164. ! extern void read_active_file(/*void*/);
  1165. ! extern void backup_active(/*int create*/);
  1166. ! extern void check_for_any_new_groups(/*void*/);
  1167. ! extern int prompt_subscribe_group(/*char *group*/);
  1168. ! extern void set_default_attributes(/*void*/);
  1169. ! extern void read_attributes_file(/*void*/);
  1170. ! extern void write_attributes_file(/*void*/);
  1171. X  extern void read_newsgroups_file(/*void*/);
  1172. + extern void load_active_size_info(/*char *info*/);
  1173. + extern int find_active_size_index(/*char *cur_active_server*/);
  1174. X  /* art.c */
  1175. ! extern void find_base(/*int index*/);
  1176. X  extern int num_of_arts(/*void*/);
  1177. X  extern int valid_artnum(/*long art*/);
  1178. X  extern int purge_needed(/*void*/);
  1179. ***************
  1180. *** 389,394 ****
  1181. --- 418,424 ----
  1182. X  extern void debug_nntp_respcode(/*int respcode*/);
  1183. X  extern void debug_print_arts(/*void*/);
  1184. X  extern void debug_print_header(/*struct article_t *s*/);
  1185. + extern void debug_save_comp(/*void*/);
  1186. X  extern void debug_print_comment(/*char *comment*/);
  1187. X  extern void debug_print_base(/*void*/);
  1188. X  extern void debug_print_active(/*void*/);
  1189. ***************
  1190. *** 401,407 ****
  1191. X  extern void group_page(/*char *group*/);
  1192. X  extern void fix_new_highest(/*int groupnum*/);
  1193. X  extern void show_group_page(/*char *group*/);
  1194. ! extern void update_group_page(/*char *group*/);
  1195. X  extern void draw_subject_arrow(/*void*/);
  1196. X  extern void erase_subject_arrow(/*void*/);
  1197. X  extern void prompt_subject_num(/*int ch, char *group*/);
  1198. --- 431,437 ----
  1199. X  extern void group_page(/*char *group*/);
  1200. X  extern void fix_new_highest(/*int groupnum*/);
  1201. X  extern void show_group_page(/*char *group*/);
  1202. ! extern void update_group_page(/*void*/);
  1203. X  extern void draw_subject_arrow(/*void*/);
  1204. X  extern void erase_subject_arrow(/*void*/);
  1205. X  extern void prompt_subject_num(/*int ch, char *group*/);
  1206. ***************
  1207. *** 410,415 ****
  1208. --- 440,446 ----
  1209. X  extern void mark_screen(/*int level, int screen_row, int screen_col, char *value*/);
  1210. X  extern void set_subj_from_size(/*int num_cols*/);
  1211. X  extern void toggle_subject_from(/*void*/);
  1212. + extern void show_group_title(/*int clear_title*/);
  1213. X  /* hashstr.c */
  1214. X  extern char *hash_str(/*char *s*/);
  1215. X  extern struct hashnode *add_string(/*char *s*/);
  1216. ***************
  1217. *** 417,422 ****
  1218. --- 448,454 ----
  1219. X  extern void hash_reclaim(/*void*/);
  1220. X  /* help.c */
  1221. X  extern void show_info_page(/*int type, char *help[], char *title*/);
  1222. + extern void display_info_page(/*void*/);
  1223. X  /* inews.c */
  1224. X  extern int submit_inews(/*char *name*/);
  1225. X  extern void get_host_name(/*char *host_name*/);
  1226. ***************
  1227. *** 430,437 ****
  1228. X  extern void write_kill_file(/*void*/);
  1229. X  extern int kill_art_menu(/*char *group_name, int index*/);
  1230. X  extern int unkill_all_articles(/*void*/);
  1231. ! extern int kill_any_articles(/*char *group*/);
  1232. ! extern int auto_select_articles(/*char *group*/);
  1233. X  /* lang.c */
  1234. X  /* main.c */
  1235. X  extern void main(/*int argc, char *argv[]*/);
  1236. --- 462,469 ----
  1237. X  extern void write_kill_file(/*void*/);
  1238. X  extern int kill_art_menu(/*char *group_name, int index*/);
  1239. X  extern int unkill_all_articles(/*void*/);
  1240. ! extern int kill_any_articles(/*int index*/);
  1241. ! extern int auto_select_articles(/*int index*/);
  1242. X  /* lang.c */
  1243. X  /* main.c */
  1244. X  extern void main(/*int argc, char *argv[]*/);
  1245. ***************
  1246. *** 447,458 ****
  1247. --- 479,495 ----
  1248. X  extern void expand_active(/*void*/);
  1249. X  extern void expand_kill(/*void*/);
  1250. X  extern void expand_save(/*void*/);
  1251. + extern void expand_spooldirs(/*void*/);
  1252. + extern void expand_active_size(/*void*/);
  1253. X  extern void init_screen_array(/*int allocate*/);
  1254. X  extern void free_all_arrays(/*void*/);
  1255. X  extern void free_art_array(/*void*/);
  1256. + extern void free_attributes_array(/*void*/);
  1257. X  extern void free_active_arrays(/*void*/);
  1258. X  extern void free_kill_array(/*void*/);
  1259. X  extern void free_save_array(/*void*/);
  1260. + extern void free_spooldirs_array(/*void*/);
  1261. + extern void free_active_size_array(/*void*/);
  1262. X  extern char *my_malloc(/*unsigned size*/);
  1263. X  extern char *my_realloc(/*char *p, unsigned size*/);
  1264. X  /* misc.c */
  1265. ***************
  1266. *** 460,465 ****
  1267. --- 497,503 ----
  1268. X  extern void copy_fp(/*FILE *fp_ip, FILE *fp_op, char *prefix*/);
  1269. X  extern char *get_val(/*char *env, char *def*/);
  1270. X  extern int invoke_editor(/*char *nam*/);
  1271. + extern int invoke_ispell(/*char *nam*/);
  1272. X  extern void shell_escape(/*void*/);
  1273. X  extern void tin_done(/*int ret*/);
  1274. X  extern long hash_groupname(/*char *group*/);
  1275. ***************
  1276. *** 483,488 ****
  1277. --- 521,527 ----
  1278. X  extern void get_author(/*int thread, int respnum, char *str*/);
  1279. X  extern void toggle_inverse_video(/*void*/);
  1280. X  extern int get_arrow_key(/*void*/);
  1281. + extern void create_index_lock_file(/*char *lock_file*/);
  1282. X  /* newsrc.c */
  1283. X  extern int auto_subscribe_groups(/*void*/);
  1284. X  extern void backup_newsrc(/*void*/);
  1285. ***************
  1286. *** 514,519 ****
  1287. --- 553,559 ----
  1288. X  extern void nntp_open(/*void*/);
  1289. X  extern void nntp_close(/*void*/);
  1290. X  extern FILE *open_active_fp(/*void*/);
  1291. + extern FILE *open_newgroups_fp(/*int index*/);
  1292. X  extern FILE *open_subscription_fp(/*void*/);
  1293. X  extern FILE *open_newsgroups_fp(/*void*/);
  1294. X  extern FILE *open_index_fp(/*char *group_name*/);
  1295. ***************
  1296. *** 571,576 ****
  1297. --- 611,618 ----
  1298. X  extern int match_boolean(/*char *line, char *pat, int *dst*/);
  1299. X  extern int match_number(/*char *line, char *pat, int *dst*/);
  1300. X  extern int match_string(/*char *line, char *pat, char *dst, int dstlen*/);
  1301. + extern void quote_dash_to_space(/*char *s*/);
  1302. + extern char *quote_space_to_dash(/*char *s*/);
  1303. X  /* save.c */
  1304. X  extern int check_start_save_any_news(/*int check_start_save*/);
  1305. X  extern int save_art_to_file(/*int respnum, int index, int mailbox, char *filename*/);
  1306. ***************
  1307. *** 602,608 ****
  1308. X  extern void show_title(/*char *title*/);
  1309. X  extern void ring_bell(/*void*/);
  1310. X  /* search.c */
  1311. ! extern int search_author(/*int only_unread, int current_art, int forward*/);
  1312. X  extern void search_group(/*int forward*/);
  1313. X  extern void search_subject(/*int forward, char *group*/);
  1314. X  extern int search_article(/*int forward*/);
  1315. --- 644,650 ----
  1316. X  extern void show_title(/*char *title*/);
  1317. X  extern void ring_bell(/*void*/);
  1318. X  /* search.c */
  1319. ! extern int search_author(/*int index, int current_art, int forward*/);
  1320. X  extern void search_group(/*int forward*/);
  1321. X  extern void search_subject(/*int forward, char *group*/);
  1322. X  extern int search_article(/*int forward*/);
  1323. ***************
  1324. *** 619,624 ****
  1325. --- 661,667 ----
  1326. X  extern void catchup_group(/*int goto_next_unread_group*/);
  1327. X  extern void next_unread_group(/*int enter_group*/);
  1328. X  extern void set_groupname_len(/*int all_groups*/);
  1329. + extern void toggle_my_groups(/*int only_unread_groups*/);
  1330. X  /* signal.c */
  1331. X  extern sigtype_t (*sigdisp(/*int sig, sigtype_t (*func)()*/))();
  1332. X  extern void set_signal_handlers(/*void*/);
  1333. ***************
  1334. *** 629,634 ****
  1335. --- 672,678 ----
  1336. X  extern int set_win_size(/*int *num_lines, int *num_cols*/);
  1337. X  extern void set_signals_art(/*void*/);
  1338. X  extern void set_signals_group(/*void*/);
  1339. + extern void set_signals_help(/*void*/);
  1340. X  extern void set_signals_page(/*void*/);
  1341. X  extern void set_signals_select(/*void*/);
  1342. X  extern void set_signals_spooldir(/*void*/);
  1343. ***************
  1344. *** 638,643 ****
  1345. --- 682,688 ----
  1346. X  extern void select_suspend(/*int sig*/);
  1347. X  extern void spooldir_suspend(/*int sig*/);
  1348. X  extern void group_suspend(/*int sig*/);
  1349. + extern void help_suspend(/*int sig*/);
  1350. X  extern void page_suspend(/*int sig*/);
  1351. X  extern void thread_suspend(/*int sig*/);
  1352. X  extern void rcfile_suspend(/*int sig*/);
  1353. ***************
  1354. *** 646,651 ****
  1355. --- 691,697 ----
  1356. X  extern void select_resize(/*int sig*/);
  1357. X  extern void spooldir_resize(/*int sig*/);
  1358. X  extern void group_resize(/*int sig*/);
  1359. + extern void help_resize(/*int sig*/);
  1360. X  extern void page_resize(/*int sig*/);
  1361. X  extern void thread_resize(/*int sig*/);
  1362. X  /* spooldir.c */
  1363. diff -rcs ../1.14/rcfile.c ./rcfile.c
  1364. *** ../1.14/rcfile.c    Tue Aug 11 21:23:19 1992
  1365. --- ./rcfile.c    Fri Aug  7 11:44:15 1992
  1366. ***************
  1367. *** 3,9 ****
  1368. X   *  Module    : rcfile.c
  1369. X   *  Author    : I.Lea
  1370. X   *  Created   : 01-04-91
  1371. !  *  Updated   : 20-06-92
  1372. X   *  Notes     :
  1373. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  1374. X   *              You may  freely  copy or  redistribute  this software,
  1375. --- 3,9 ----
  1376. X   *  Module    : rcfile.c
  1377. X   *  Author    : I.Lea
  1378. X   *  Created   : 01-04-91
  1379. !  *  Updated   : 07-08-92
  1380. X   *  Notes     :
  1381. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  1382. X   *              You may  freely  copy or  redistribute  this software,
  1383. ***************
  1384. *** 26,31 ****
  1385. --- 26,32 ----
  1386. X  
  1387. X  int read_rcfile ()
  1388. X  {
  1389. +     char active_size_info[PATH_LEN];
  1390. X      char buf[LEN];
  1391. X      FILE *fp;
  1392. X  
  1393. ***************
  1394. *** 37,45 ****
  1395. X          if (buf[0] == '#' || buf[0] == '\n') { 
  1396. X              continue;
  1397. X          }    
  1398. !         if (match_boolean (buf, "save_archive=", &save_archive_name)) {
  1399. X              continue;
  1400. !         }    
  1401. X          if (match_boolean (buf, "start_editor_offset=", &start_editor_offset)) {
  1402. X              continue;
  1403. X          }    
  1404. --- 38,49 ----
  1405. X          if (buf[0] == '#' || buf[0] == '\n') { 
  1406. X              continue;
  1407. X          }    
  1408. !         if (match_boolean (buf, "auto_save=", &default_auto_save)) {
  1409. X              continue;
  1410. !         }
  1411. !         if (match_boolean (buf, "batch_save=", &default_batch_save)) {
  1412. !             continue;
  1413. !         }
  1414. X          if (match_boolean (buf, "start_editor_offset=", &start_editor_offset)) {
  1415. X              continue;
  1416. X          }    
  1417. ***************
  1418. *** 67,81 ****
  1419. X          if (match_boolean (buf, "catchup_read_groups=", &catchup_read_groups)) {
  1420. X              continue;
  1421. X          }    
  1422. !         if (match_boolean (buf, "thread_articles=", &thread_arts)) {
  1423. X              continue;
  1424. X          }    
  1425. X          if (match_boolean (buf, "unlink_article=", &unlink_article)) {
  1426. X              continue;
  1427. X          }    
  1428. !         if (match_boolean (buf, "show_only_unread=", &show_only_unread)) {
  1429. X              continue;
  1430. !         }    
  1431. X          if (match_boolean (buf, "confirm_action=", &confirm_action)) {
  1432. X              continue;
  1433. X          }
  1434. --- 71,88 ----
  1435. X          if (match_boolean (buf, "catchup_read_groups=", &catchup_read_groups)) {
  1436. X              continue;
  1437. X          }    
  1438. !         if (match_boolean (buf, "thread_articles=", &default_thread_arts)) {
  1439. X              continue;
  1440. X          }    
  1441. X          if (match_boolean (buf, "unlink_article=", &unlink_article)) {
  1442. X              continue;
  1443. X          }    
  1444. !         if (match_boolean (buf, "show_only_unread_groups=", &show_only_unread_groups)) {
  1445. X              continue;
  1446. !         }
  1447. !         if (match_boolean (buf, "show_only_unread=", &default_show_only_unread)) {
  1448. !             continue;
  1449. !         }
  1450. X          if (match_boolean (buf, "confirm_action=", &confirm_action)) {
  1451. X              continue;
  1452. X          }
  1453. ***************
  1454. *** 85,92 ****
  1455. X          if (match_number (buf, "show_author=", &default_show_author)) {
  1456. X              continue;
  1457. X          }    
  1458. !         if (match_number (buf, "post_process_type=", &post_proc_type)) {
  1459. !             switch (post_proc_type) {
  1460. X                  case POST_PROC_SHAR:
  1461. X                      proc_ch_default = 's';
  1462. X                      break;
  1463. --- 92,99 ----
  1464. X          if (match_number (buf, "show_author=", &default_show_author)) {
  1465. X              continue;
  1466. X          }    
  1467. !         if (match_number (buf, "post_process_type=", &default_post_proc_type)) {
  1468. !             switch (default_post_proc_type) {
  1469. X                  case POST_PROC_SHAR:
  1470. X                      proc_ch_default = 's';
  1471. X                      break;
  1472. ***************
  1473. *** 106,112 ****
  1474. X              }
  1475. X              continue;
  1476. X          }    
  1477. !         if (match_number (buf, "sort_article_type=", &sort_art_type)) {
  1478. X              continue;
  1479. X          }    
  1480. X          if (match_string (buf, "savedir=", default_savedir, sizeof (default_savedir))) {
  1481. --- 113,119 ----
  1482. X              }
  1483. X              continue;
  1484. X          }    
  1485. !         if (match_number (buf, "sort_article_type=", &default_sort_art_type)) {
  1486. X              continue;
  1487. X          }    
  1488. X          if (match_string (buf, "savedir=", default_savedir, sizeof (default_savedir))) {
  1489. ***************
  1490. *** 126,131 ****
  1491. --- 133,166 ----
  1492. X          if (match_string (buf, "printer=", printer, sizeof (printer))) {
  1493. X              continue;
  1494. X          }
  1495. +         if (match_string (buf, "quote_chars=", quote_chars, sizeof (quote_chars))) {
  1496. +             quote_dash_to_space (quote_chars);
  1497. +             continue;
  1498. +         }
  1499. +         if (match_string (buf, "unread_art_mark=", buf, sizeof (buf))) {
  1500. +             unread_art_mark = buf[0];
  1501. +             continue;
  1502. +         }
  1503. +         if (match_string (buf, "hot_art_mark=", buf, sizeof (buf))) {
  1504. +             hot_art_mark = buf[0];
  1505. +             continue;
  1506. +         }
  1507. +         if (match_string (buf, "return_art_mark=", buf, sizeof (buf))) {
  1508. +             return_art_mark = buf[0];
  1509. +             continue;
  1510. +         }
  1511. +         if (match_number (buf, "reread_active_file_secs=", &reread_active_file_secs)) {
  1512. +             continue;
  1513. +         }
  1514. +         if (match_boolean (buf, "show_last_line_prev_page=", &show_last_line_prev_page)) {
  1515. +             continue;
  1516. +         }
  1517. +         if (match_boolean (buf, "tab_after_X_selection=", &tab_after_X_selection)) {
  1518. +             continue;
  1519. +         }
  1520. +         if (match_boolean (buf, "force_screen_redraw=", &force_screen_redraw)) {
  1521. +             continue;
  1522. +         }
  1523. X          if (match_string (buf, "default_spooldir_alias=", spooldir_alias, sizeof (spooldir_alias))) {
  1524. X              continue;
  1525. X          }
  1526. ***************
  1527. *** 171,176 ****
  1528. --- 206,215 ----
  1529. X          if (match_string (buf, "default_shell_command=", default_shell_command, sizeof (default_shell_command))) {
  1530. X              continue;
  1531. X          }
  1532. +         if (match_string (buf, "active_file_info=", active_size_info, sizeof (active_size_info))) {
  1533. +             load_active_size_info (active_size_info);
  1534. +             continue;
  1535. +         }    
  1536. X      }
  1537. X      fclose (fp);
  1538. X      return TRUE;        
  1539. ***************
  1540. *** 184,190 ****
  1541. X  void write_rcfile ()
  1542. X  {
  1543. X      FILE *fp;
  1544. X      if ((fp = fopen (rcfile, "w")) == NULL) {
  1545. X          return;
  1546. X      }    
  1547. --- 223,230 ----
  1548. X  void write_rcfile ()
  1549. X  {
  1550. X      FILE *fp;
  1551. !     int i;
  1552. !     
  1553. X      if ((fp = fopen (rcfile, "w")) == NULL) {
  1554. X          return;
  1555. X      }    
  1556. ***************
  1557. *** 194,200 ****
  1558. X      }
  1559. X      fprintf (fp, "# if ON articles/threads with Archive-name: in mail header will\n");
  1560. X      fprintf (fp, "# be automatically saved with the Archive-name & part/patch no.\n");
  1561. !     fprintf (fp, "save_archive=%s\n\n", (save_archive_name ? "ON" : "OFF"));
  1562. X      fprintf (fp, "# if ON editor will be started with cursor offset into the file\n");
  1563. X      fprintf (fp, "# otherwise the cursor will be positioned at the first line\n");
  1564. X      fprintf (fp, "start_editor_offset=%s\n\n", (start_editor_offset ? "ON" : "OFF"));
  1565. --- 234,243 ----
  1566. X      }
  1567. X      fprintf (fp, "# if ON articles/threads with Archive-name: in mail header will\n");
  1568. X      fprintf (fp, "# be automatically saved with the Archive-name & part/patch no.\n");
  1569. !     fprintf (fp, "auto_save=%s\n\n", (default_auto_save ? "ON" : "OFF"));
  1570. !     fprintf (fp, "# if ON articles/threads will be saved in batch mode when save -S\n");
  1571. !     fprintf (fp, "# or mail -M is specified on the command line\n");
  1572. !     fprintf (fp, "batch_save=%s\n\n", (default_batch_save ? "ON" : "OFF"));
  1573. X      fprintf (fp, "# if ON editor will be started with cursor offset into the file\n");
  1574. X      fprintf (fp, "# otherwise the cursor will be positioned at the first line\n");
  1575. X      fprintf (fp, "start_editor_offset=%s\n\n", (start_editor_offset ? "ON" : "OFF"));
  1576. ***************
  1577. *** 222,245 ****
  1578. X      fprintf (fp, "show_author=%d\n\n", default_show_author);
  1579. X      fprintf (fp, "# type of post processing to perform after saving articles.\n");
  1580. X      fprintf (fp, "# 0=(none) 1=(shar) 2=(uudecode) 3=(uud & list zoo) 4=(uud & extract zoo) 5=(patch).\n");
  1581. !     fprintf (fp, "post_process_type=%d\n\n", post_proc_type);
  1582. X      fprintf (fp, "# if ON and group not in ~/.tin/unthread articles will be threaded.\n");
  1583. !     fprintf (fp, "thread_articles=%s\n\n", (thread_arts ? "ON" : "OFF"));
  1584. X      fprintf (fp, "# if ON remove ~/.article after posting.\n");
  1585. X      fprintf (fp, "unlink_article=%s\n\n", (unlink_article ? "ON" : "OFF"));
  1586. X      fprintf (fp, "# if ON show only new/unread articles otherwise show all.\n");
  1587. !     fprintf (fp, "show_only_unread=%s\n\n", (show_only_unread ? "ON" : "OFF"));
  1588. X      fprintf (fp, "# sort articles by 0=(nothing) 1=(Subject descend) 2=(Subject ascend)\n");
  1589. X      fprintf (fp, "# 3=(From descend) 4=(From ascend) 5=(Date descend) 6=(Date ascend).\n");
  1590. !     fprintf (fp, "sort_article_type=%d\n\n", sort_art_type);
  1591. !     fprintf (fp, "# (-d) directory where articles/threads are saved\n");
  1592. X      fprintf (fp, "savedir=%s\n\n", default_savedir);
  1593. !     fprintf (fp, "# (-M) directory where articles/threads are saved in mailbox format\n");    
  1594. X      fprintf (fp, "maildir=%s\n\n", default_maildir);    
  1595. !     fprintf (fp, "# (-p) print program with parameters used to print articles/threads\n");
  1596. X      fprintf (fp, "printer=%s\n\n", printer);
  1597. X  
  1598. !     fprintf (fp, "# default actions/prompt strings for questions\n");
  1599. X      fprintf (fp, "default_spooldir_alias=%s\n", spooldir_alias);
  1600. X      fprintf (fp, "default_author_search=%s\n", default_author_search);
  1601. X      fprintf (fp, "default_goto_group=%s\n", default_goto_group);
  1602. --- 265,306 ----
  1603. X      fprintf (fp, "show_author=%d\n\n", default_show_author);
  1604. X      fprintf (fp, "# type of post processing to perform after saving articles.\n");
  1605. X      fprintf (fp, "# 0=(none) 1=(shar) 2=(uudecode) 3=(uud & list zoo) 4=(uud & extract zoo) 5=(patch).\n");
  1606. !     fprintf (fp, "post_process_type=%d\n\n", default_post_proc_type);
  1607. X      fprintf (fp, "# if ON and group not in ~/.tin/unthread articles will be threaded.\n");
  1608. !     fprintf (fp, "thread_articles=%s\n\n", (default_thread_arts ? "ON" : "OFF"));
  1609. X      fprintf (fp, "# if ON remove ~/.article after posting.\n");
  1610. X      fprintf (fp, "unlink_article=%s\n\n", (unlink_article ? "ON" : "OFF"));
  1611. +     fprintf (fp, "# if ON show only subscribed to groups that contain unread articles.\n");
  1612. +     fprintf (fp, "show_only_unread_groups=%s\n\n", (show_only_unread_groups ? "ON" : "OFF"));
  1613. X      fprintf (fp, "# if ON show only new/unread articles otherwise show all.\n");
  1614. !     fprintf (fp, "show_only_unread=%s\n\n", (default_show_only_unread ? "ON" : "OFF"));
  1615. X      fprintf (fp, "# sort articles by 0=(nothing) 1=(Subject descend) 2=(Subject ascend)\n");
  1616. X      fprintf (fp, "# 3=(From descend) 4=(From ascend) 5=(Date descend) 6=(Date ascend).\n");
  1617. !     fprintf (fp, "sort_article_type=%d\n\n", default_sort_art_type);
  1618. !     fprintf (fp, "# directory where articles/threads are saved\n");
  1619. X      fprintf (fp, "savedir=%s\n\n", default_savedir);
  1620. !     fprintf (fp, "# (-m) directory where articles/threads are saved in mailbox format\n");    
  1621. X      fprintf (fp, "maildir=%s\n\n", default_maildir);    
  1622. !     fprintf (fp, "# print program with parameters used to print articles/threads\n");
  1623. X      fprintf (fp, "printer=%s\n\n", printer);
  1624. +     fprintf (fp, "# time interval in seconds between rereading the active file\n");
  1625. +     fprintf (fp, "reread_active_file_secs=%d\n\n", reread_active_file_secs);
  1626. +     fprintf (fp, "# characters used in quoting to followups and replys. '_' replaced by ' '\n");
  1627. +     fprintf (fp, "quote_chars=%s\n\n", quote_space_to_dash (quote_chars));
  1628. +     fprintf (fp, "# character used to show that an art was unread (default '+')\n");
  1629. +     fprintf (fp, "unread_art_mark=%c\n\n", unread_art_mark);
  1630. +     fprintf (fp, "# character used to show that an art was auto-selected (default '*')\n");
  1631. +     fprintf (fp, "hot_art_mark=%c\n\n", hot_art_mark);
  1632. +     fprintf (fp, "# character used to show that an art will return (default '-')\n");
  1633. +     fprintf (fp, "return_art_mark=%c\n\n", return_art_mark);
  1634. +     fprintf (fp, "# if ON show the last line of the previous page as first line of next page\n");
  1635. +     fprintf (fp, "show_last_line_prev_page=%s\n\n", (show_last_line_prev_page ? "ON" : "OFF"));
  1636. +     fprintf (fp, "# if ON a TAB command will be automatically done after the X command\n");
  1637. +     fprintf (fp, "tab_after_X_selection=%s\n\n", (tab_after_X_selection ? "ON" : "OFF"));
  1638. +     fprintf (fp, "# if ON a screen redraw will always be done after certain external commands\n");
  1639. +     fprintf (fp, "force_screen_redraw=%s\n\n", (force_screen_redraw ? "ON" : "OFF"));
  1640. X  
  1641. !     fprintf (fp, "# default action/prompt strings\n");
  1642. X      fprintf (fp, "default_spooldir_alias=%s\n", spooldir_alias);
  1643. X      fprintf (fp, "default_author_search=%s\n", default_author_search);
  1644. X      fprintf (fp, "default_goto_group=%s\n", default_goto_group);
  1645. ***************
  1646. *** 254,260 ****
  1647. X      fprintf (fp, "default_regex_pattern=%s\n", default_regex_pattern);
  1648. X      fprintf (fp, "default_save_file=%s\n", default_save_file);
  1649. X      fprintf (fp, "default_select_pattern=%s\n", default_select_pattern);
  1650. !     fprintf (fp, "default_shell_command=%s\n", default_shell_command);
  1651. X  
  1652. X      fclose (fp);
  1653. X      chmod (rcfile, 0600);
  1654. --- 315,332 ----
  1655. X      fprintf (fp, "default_regex_pattern=%s\n", default_regex_pattern);
  1656. X      fprintf (fp, "default_save_file=%s\n", default_save_file);
  1657. X      fprintf (fp, "default_select_pattern=%s\n", default_select_pattern);
  1658. !     fprintf (fp, "default_shell_command=%s\n\n", default_shell_command);
  1659. !     fprintf (fp, "# active file sizes/dates from different servers used for detecting new groups\n");
  1660. !     if (! num_active_size) {
  1661. !         fprintf (fp, "active_file_info=%s[%s]\n", 
  1662. !             new_active_file_server, new_active_file_attribute);
  1663. !     } else {
  1664. !         for (i = 0 ; i < num_active_size ; i++) {
  1665. !             fprintf (fp, "active_file_info=%s[%s]\n", 
  1666. !                 active_size[i].server, active_size[i].attribute);
  1667. !         }
  1668. !     }
  1669. X  
  1670. X      fclose (fp);
  1671. X      chmod (rcfile, 0600);
  1672. ***************
  1673. *** 268,278 ****
  1674. --- 340,352 ----
  1675. X      char *group;
  1676. X      int kill_at_once;
  1677. X  {
  1678. +     extern int cur_groupnum;
  1679. X      char *str = (char *) 0;
  1680. X      int ch, i;
  1681. X      int kill_changed = FALSE;
  1682. X      int orig_show_only_unread;
  1683. X      int orig_thread_arts;
  1684. +     int index;
  1685. X      int option;
  1686. X      int ret_code = NO_KILLING;
  1687. X      int var_orig;
  1688. ***************
  1689. *** 280,286 ****
  1690. X  #ifdef SIGTSTP
  1691. X      sigtype_t (*susp)();
  1692. X      
  1693. !     susp = (sigtype_t *) 0;
  1694. X  
  1695. X      if (do_sigtstp) {
  1696. X          susp = sigdisp (SIGTSTP, SIG_DFL);
  1697. --- 354,360 ----
  1698. X  #ifdef SIGTSTP
  1699. X      sigtype_t (*susp)();
  1700. X      
  1701. !     susp = (sigtype_t (*)()) 0;
  1702. X  
  1703. X      if (do_sigtstp) {
  1704. X          susp = sigdisp (SIGTSTP, SIG_DFL);
  1705. ***************
  1706. *** 323,337 ****
  1707. X              case -1:
  1708. X                  if (kill_changed) {
  1709. X                      if (kill_at_once) {
  1710. !                         if (killed_articles = read_kill_file ()) {
  1711. !                             if (kill_any_articles (group)) {
  1712. X                                  make_threads (FALSE);
  1713. !                                 find_base (show_only_unread);
  1714. X                              }
  1715. X                          } else {
  1716. !                             if (unkill_all_articles()) {
  1717. X                                  make_threads (FALSE);
  1718. !                                 find_base (show_only_unread);
  1719. X                              }
  1720. X                          }
  1721. X                      }
  1722. --- 397,413 ----
  1723. X              case -1:
  1724. X                  if (kill_changed) {
  1725. X                      if (kill_at_once) {
  1726. !                         index = my_group[cur_groupnum];
  1727. !                         killed_articles = read_kill_file ();
  1728. !                         if (killed_articles) {
  1729. !                             if (kill_any_articles (index)) {
  1730. X                                  make_threads (FALSE);
  1731. !                                 find_base (index);
  1732. X                              }
  1733. X                          } else {
  1734. !                             if (unkill_all_articles ()) {
  1735. X                                  make_threads (FALSE);
  1736. !                                 find_base (index);
  1737. X                              }
  1738. X                          }
  1739. X                      }
  1740. ***************
  1741. *** 347,353 ****
  1742. X                  return ret_code;
  1743. X              
  1744. X              case 1:        /* auto save */
  1745. !                 prompt_on_off (INDEX_TOP, COL1, &save_archive_name, 
  1746. X                      txt_help_autosave, txt_opt_autosave);
  1747. X                  break;
  1748. X  
  1749. --- 423,429 ----
  1750. X                  return ret_code;
  1751. X              
  1752. X              case 1:        /* auto save */
  1753. !                 prompt_on_off (INDEX_TOP, COL1, &default_auto_save, 
  1754. X                      txt_help_autosave, txt_opt_autosave);
  1755. X                  break;
  1756. X  
  1757. ***************
  1758. *** 395,416 ****
  1759. X                  break;
  1760. X  
  1761. X              case 10:    /* thread/unthread all groups except those in ~/.tin/unthreaded */
  1762. !                 orig_thread_arts = thread_arts;    
  1763. !                 prompt_on_off (INDEX_TOP+6, COL1, &thread_arts, 
  1764. X                      txt_help_thread_arts, txt_opt_thread_arts);
  1765. !                 if (thread_arts != orig_thread_arts || group != (char *) 0) {
  1766. X                      make_threads (TRUE);
  1767. !                     find_base (show_only_unread);
  1768. X                  }
  1769. X                  break;
  1770. X  
  1771. X              case 11:    /* show all arts or just new/unread arts */
  1772. !                 orig_show_only_unread = show_only_unread;    
  1773. !                 prompt_on_off (INDEX_TOP+6, COL2, &show_only_unread, 
  1774. X                      txt_help_show_only_unread, txt_opt_show_only_unread);
  1775. !                 if (show_only_unread != orig_show_only_unread || group != (char *) 0) {
  1776. X                      make_threads (TRUE);
  1777. !                     find_base (show_only_unread);
  1778. X                      if (space_mode) {
  1779. X                          for (i = 0; i < top_base; i++) {
  1780. X                              if (new_responses (i)) {
  1781. --- 471,493 ----
  1782. X                  break;
  1783. X  
  1784. X              case 10:    /* thread/unthread all groups except those in ~/.tin/unthreaded */
  1785. !                 orig_thread_arts = default_thread_arts;    
  1786. !                 prompt_on_off (INDEX_TOP+6, COL1, &default_thread_arts, 
  1787. X                      txt_help_thread_arts, txt_opt_thread_arts);
  1788. !                 if (default_thread_arts != orig_thread_arts || group != (char *) 0) {
  1789. X                      make_threads (TRUE);
  1790. !                     find_base (my_group[cur_groupnum]);
  1791. X                  }
  1792. +                 clear_message ();
  1793. X                  break;
  1794. X  
  1795. X              case 11:    /* show all arts or just new/unread arts */
  1796. !                 orig_show_only_unread = default_show_only_unread;    
  1797. !                 prompt_on_off (INDEX_TOP+6, COL2, &default_show_only_unread, 
  1798. X                      txt_help_show_only_unread, txt_opt_show_only_unread);
  1799. !                 if (default_show_only_unread != orig_show_only_unread || group != (char *) 0) {
  1800. X                      make_threads (TRUE);
  1801. !                     find_base (my_group[cur_groupnum]);
  1802. X                      if (space_mode) {
  1803. X                          for (i = 0; i < top_base; i++) {
  1804. X                              if (new_responses (i)) {
  1805. ***************
  1806. *** 437,453 ****
  1807. X                  break;
  1808. X  
  1809. X              case 13:        /* show subject & author / subject only */
  1810. !                 var_orig = show_author;
  1811. X                  show_menu_help (txt_help_show_author);
  1812. X                  do {
  1813. X                      MoveCursor (INDEX_TOP+8, COL1 + (int) strlen (txt_opt_show_author));
  1814. X                      if ((ch    = ReadCh()) == ' ') {
  1815. !                         if (show_author + 1 > SHOW_FROM_BOTH) {
  1816. !                             show_author = SHOW_FROM_NONE;
  1817. X                          } else {
  1818. !                             show_author++;
  1819. X                          }
  1820. !                         switch (show_author) {
  1821. X                              case SHOW_FROM_NONE:
  1822. X                                  str = txt_show_from_none;
  1823. X                                  break;
  1824. --- 514,530 ----
  1825. X                  break;
  1826. X  
  1827. X              case 13:        /* show subject & author / subject only */
  1828. !                 var_orig = default_show_author;
  1829. X                  show_menu_help (txt_help_show_author);
  1830. X                  do {
  1831. X                      MoveCursor (INDEX_TOP+8, COL1 + (int) strlen (txt_opt_show_author));
  1832. X                      if ((ch    = ReadCh()) == ' ') {
  1833. !                         if (default_show_author + 1 > SHOW_FROM_BOTH) {
  1834. !                             default_show_author = SHOW_FROM_NONE;
  1835. X                          } else {
  1836. !                             default_show_author++;
  1837. X                          }
  1838. !                         switch (default_show_author) {
  1839. X                              case SHOW_FROM_NONE:
  1840. X                                  str = txt_show_from_none;
  1841. X                                  break;
  1842. ***************
  1843. *** 467,474 ****
  1844. X                  } while (ch != CR && ch != ESC);
  1845. X  
  1846. X                  if (ch == ESC) {    /* restore original value */
  1847. !                     show_author = var_orig;
  1848. !                     switch (show_author) {
  1849. X                          case SHOW_FROM_NONE:
  1850. X                              str = txt_show_from_none;
  1851. X                              break;
  1852. --- 544,551 ----
  1853. X                  } while (ch != CR && ch != ESC);
  1854. X  
  1855. X                  if (ch == ESC) {    /* restore original value */
  1856. !                     default_show_author = var_orig;
  1857. !                     switch (default_show_author) {
  1858. X                          case SHOW_FROM_NONE:
  1859. X                              str = txt_show_from_none;
  1860. X                              break;
  1861. ***************
  1862. *** 484,507 ****
  1863. X                      }
  1864. X                      fputs (str, stdout);
  1865. X                      fflush (stdout);
  1866. !                 } else {
  1867. !                     default_show_author = show_author;
  1868. X                      set_subj_from_size (COLS);
  1869. X                  }
  1870. X                  break;
  1871. X  
  1872. X              case 14:
  1873. !                 var_orig = post_proc_type;
  1874. X                  show_menu_help (txt_help_post_proc_type);
  1875. X                  do {
  1876. X                      MoveCursor (INDEX_TOP+8, COL2 + (int) strlen (txt_opt_process_type));
  1877. X                      if ((ch    = ReadCh()) == ' ') {
  1878. !                         if (post_proc_type + 1 > POST_PROC_UUD_EXT_ZOO) {
  1879. !                             post_proc_type = POST_PROC_NONE;
  1880. X                          } else {
  1881. !                             post_proc_type++;
  1882. X                          }
  1883. !                         switch (post_proc_type) {
  1884. X                              case POST_PROC_NONE:
  1885. X                                  str = txt_post_process_none;
  1886. X                                  proc_ch_default = 'n';
  1887. --- 561,586 ----
  1888. X                      }
  1889. X                      fputs (str, stdout);
  1890. X                      fflush (stdout);
  1891. !                 }
  1892. ! #if 0
  1893. !                  else {
  1894. X                      set_subj_from_size (COLS);
  1895. X                  }
  1896. + #endif                
  1897. X                  break;
  1898. X  
  1899. X              case 14:
  1900. !                 var_orig = default_post_proc_type;
  1901. X                  show_menu_help (txt_help_post_proc_type);
  1902. X                  do {
  1903. X                      MoveCursor (INDEX_TOP+8, COL2 + (int) strlen (txt_opt_process_type));
  1904. X                      if ((ch    = ReadCh()) == ' ') {
  1905. !                         if (default_post_proc_type + 1 > POST_PROC_UUD_EXT_ZOO) {
  1906. !                             default_post_proc_type = POST_PROC_NONE;
  1907. X                          } else {
  1908. !                             default_post_proc_type++;
  1909. X                          }
  1910. !                         switch (default_post_proc_type) {
  1911. X                              case POST_PROC_NONE:
  1912. X                                  str = txt_post_process_none;
  1913. X                                  proc_ch_default = 'n';
  1914. ***************
  1915. *** 530,537 ****
  1916. X                  } while (ch != CR && ch != ESC);
  1917. X  
  1918. X                  if (ch == ESC) {    /* restore original value */
  1919. !                     post_proc_type = var_orig;
  1920. !                     switch (post_proc_type) {
  1921. X                          case POST_PROC_NONE:
  1922. X                              str = txt_post_process_none;
  1923. X                              proc_ch_default = 'n';
  1924. --- 609,616 ----
  1925. X                  } while (ch != CR && ch != ESC);
  1926. X  
  1927. X                  if (ch == ESC) {    /* restore original value */
  1928. !                     default_post_proc_type = var_orig;
  1929. !                     switch (default_post_proc_type) {
  1930. X                          case POST_PROC_NONE:
  1931. X                              str = txt_post_process_none;
  1932. X                              proc_ch_default = 'n';
  1933. ***************
  1934. SHAR_EOF
  1935. true || echo 'restore of tin-1.15.patch failed'
  1936. fi
  1937. echo 'End of tin-1.15 part 5'
  1938. echo 'File tin-1.15.patch is continued in part 6'
  1939. echo 6 > _shar_seq_.tmp
  1940. exit 0
  1941.  
  1942. --
  1943. NAME   Iain Lea 
  1944. EMAIL  iain%anl433.uucp@Germany.EU.net
  1945. SNAIL  Siemens AG, ANL A433SZ, Gruendlacher Str. 248, 8510 Fuerth, Germany.
  1946. PHONE  +49-911-3089-407 (work) +49-911-331963 (home) +49-911-3089-290 (FAX)  
  1947. exit 0 # Just in case...
  1948.