home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume31 / tin / patch05e < prev    next >
Encoding:
Text File  |  1992-08-16  |  60.5 KB  |  1,948 lines

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