home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / alt / sources / 2519 < prev    next >
Encoding:
Internet Message Format  |  1992-11-15  |  60.7 KB

  1. Path: sparky!uunet!psgrain!percy!hfglobe!ichips!iWarp.intel.com|eff!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!agate!doc.ic.ac.uk!uknet!mcsun!Germany.EU.net!anl433!Iain.Lea
  2. From: Iain.Lea%anl433.uucp@Germany.EU.net (Iain Lea)
  3. Newsgroups: alt.sources
  4. Subject: TIN newsreader v1.1 PL7 (Patch 03/10)
  5. Message-ID: <1992Nov15.155032.20113@anl433.uucp>
  6. Date: 15 Nov 92 15:50:32 GMT
  7. Sender: news@anl433.uucp (Netnews Administrator)
  8. Reply-To: Iain.Lea%anl433.uucp@Germany.EU.net
  9. Followup-To: alt.sources.d
  10. Organization: ANL A433, Siemens AG., Germany.
  11. Lines: 2114
  12. X-Newsreader: TIN [version 1.1 PL7]
  13.  
  14. Submitted-by: Iain.Lea%anl433.uucp@Germany.EU.net (Iain Lea)
  15. Archive-name: tin-1.17/part03
  16.  
  17. #!/bin/sh
  18. # this is tin.shar.03 (part 3 of tin-1.17)
  19. # do not concatenate these parts, unpack them in order with /bin/sh
  20. # file tin-1.17.patch continued
  21. #
  22. if test ! -r _shar_seq_.tmp; then
  23.     echo 'Please unpack part 1 first!'
  24.     exit 1
  25. fi
  26. (read Scheck
  27.  if test "$Scheck" != 3; then
  28.     echo Please unpack part "$Scheck" next!
  29.     exit 1
  30.  else
  31.     exit 0
  32.  fi
  33. ) < _shar_seq_.tmp || exit 1
  34. if test ! -f _shar_wnt_.tmp; then
  35.     echo 'x - still skipping tin-1.17.patch'
  36. else
  37. echo 'x - continuing file tin-1.17.patch'
  38. sed 's/^X//' << 'SHAR_EOF' >> 'tin-1.17.patch' &&
  39. X!  *  Group we want?  If no, try #.2.  Repeat until no such file or
  40. X   *  we find an existing file that matches our group.
  41. X   */
  42. X  
  43. X! void find_index_file (group)
  44. X      char *group;
  45. X  {
  46. X!     char *p;
  47. X      FILE *fp;
  48. X!     int i = 1;
  49. X!     static char buf[LEN];
  50. X!     char dir[PATH_LEN];
  51. X      unsigned long h;
  52. X  
  53. X      h = hash_groupname (group);
  54. X  
  55. X!     if (read_news_via_nntp && xindex_supported) {
  56. X          sprintf (index_file, "%sxindex.%d", TMPDIR, process_id);
  57. X!         return;
  58. X      }
  59. X      
  60. X      if (local_index) {
  61. X!         my_strncpy (dir, indexdir, sizeof (dir));
  62. X      } else {
  63. X!         joinpath (dir, spooldir, INDEXDIR);
  64. X      }
  65. X      
  66. X      while (TRUE) {
  67. X          sprintf (index_file, "%s/%lu.%d", dir, h, i);
  68. X          
  69. X          if ((fp = fopen (index_file, "r")) == (FILE *) 0) {
  70. X!             return;
  71. X          }
  72. X  
  73. X          if (fgets (buf, sizeof (buf), fp) == (char *) 0) {
  74. X              fclose (fp);
  75. X!             return;
  76. X          }
  77. X          fclose (fp);
  78. X  
  79. X--- 1006,1069 ----
  80. X      if (fp) {
  81. X          fclose(fp);
  82. X      }    
  83. X!     set_tin_uid_gid ();
  84. X      unlink (index_file);
  85. X!     set_real_uid_gid ();
  86. X      top = 0;
  87. X  }
  88. X  
  89. X  
  90. X  /*
  91. X!  *  Look in the local $HOME/RCDIR/[ INDEX_NEWSDIR | INDEX_MAILDIR ] etc.
  92. X!  *  directory for the index file for the given group.  Hashing the group 
  93. X!  *  name gets a number.  See if that #.1 file exists; if so, read first 
  94. X!  *  line. Group we want?  If no, try #.2.  Repeat until no such file or
  95. X   *  we find an existing file that matches our group.
  96. X+  *  Return group type of the index file (mail / news / -1 on error).
  97. X   */
  98. X  
  99. X! int find_index_file (group)
  100. X      char *group;
  101. X  {
  102. X!     char *p, dir[PATH_LEN];
  103. X      FILE *fp;
  104. X!     int i = 1, j, type;
  105. X!     static char buf[PATH_LEN];
  106. X      unsigned long h;
  107. X  
  108. X+     j = find_group_index (group);
  109. X+     if (j == -1) {
  110. X+         return j;
  111. X+     }
  112. X+     type = active[j].type;
  113. X      h = hash_groupname (group);
  114. X  
  115. X!     if (read_news_via_nntp && xindex_supported && type == GROUP_TYPE_NEWS) {
  116. X          sprintf (index_file, "%sxindex.%d", TMPDIR, process_id);
  117. X!         return (type);
  118. X      }
  119. X      
  120. X      if (local_index) {
  121. X!         if (type == GROUP_TYPE_NEWS) {
  122. X!             my_strncpy (dir, index_newsdir, sizeof (dir));
  123. X!         } else {
  124. X!             my_strncpy (dir, index_maildir, sizeof (dir));
  125. X!         }
  126. X      } else {
  127. X!         joinpath (dir, get_val ("TIN_INDEX", active[j].spooldir), INDEX_NEWSDIR);
  128. X      }
  129. X      
  130. X+     i = 1;
  131. X      while (TRUE) {
  132. X          sprintf (index_file, "%s/%lu.%d", dir, h, i);
  133. X          
  134. X          if ((fp = fopen (index_file, "r")) == (FILE *) 0) {
  135. X!             return (type);
  136. X          }
  137. X  
  138. X          if (fgets (buf, sizeof (buf), fp) == (char *) 0) {
  139. X              fclose (fp);
  140. X!             return (type);
  141. X          }
  142. X          fclose (fp);
  143. X  
  144. X***************
  145. X*** 918,924 ****
  146. X          *p = '\0';
  147. X  
  148. X          if (strcmp (buf, group) == 0) {
  149. X!             return;
  150. X          }    
  151. X          i++;
  152. X      }    
  153. X--- 1073,1079 ----
  154. X          *p = '\0';
  155. X  
  156. X          if (strcmp (buf, group) == 0) {
  157. X!             return (type);
  158. X          }    
  159. X          i++;
  160. X      }    
  161. X***************
  162. X*** 930,941 ****
  163. X  
  164. X  void do_update ()
  165. X  {
  166. X!     char *p, group_path[PATH_LEN];
  167. X!     char buf[PATH_LEN];
  168. X      register int i, j;
  169. X      long beg_epoch, end_epoch;
  170. X      long group_time, index_time;
  171. X      struct stat stinfo;
  172. X      
  173. X      if (verbose) {
  174. X          time (&beg_epoch);
  175. X--- 1085,1098 ----
  176. X  
  177. X  void do_update ()
  178. X  {
  179. X!     char group_path[PATH_LEN];
  180. X      register int i, j;
  181. X      long beg_epoch, end_epoch;
  182. X+ #ifdef INDEX_DAEMON
  183. X+     char buf[PATH_LEN];
  184. X      long group_time, index_time;
  185. X      struct stat stinfo;
  186. X+ #endif
  187. X      
  188. X      if (verbose) {
  189. X          time (&beg_epoch);
  190. X***************
  191. X*** 950,963 ****
  192. X       * loop through groups and update any required index files
  193. X       */
  194. X      for (i = 0; i < group_top; i++) {
  195. X!         my_strncpy (group_path, active[my_group[i]].name, sizeof (group_path));
  196. X!         for (p = group_path ; *p ; p++) {
  197. X!             if (*p == '.') {
  198. X!                 *p = '/';
  199. X!             }
  200. X!         }
  201. X  #ifdef INDEX_DAEMON
  202. X!         sprintf (buf, "%s/%s", spooldir, group_path);
  203. X          if (stat (buf, &stinfo) == -1) {
  204. X              if (verbose) {
  205. X                  error_message ("Can't stat group %s\n", buf);
  206. X--- 1107,1115 ----
  207. X       * loop through groups and update any required index files
  208. X       */
  209. X      for (i = 0; i < group_top; i++) {
  210. X!         make_group_path (active[my_group[i]].name, group_path);
  211. X  #ifdef INDEX_DAEMON
  212. X!         joinpath (buf, active[my_group[i]].spooldir, group_path);
  213. X          if (stat (buf, &stinfo) == -1) {
  214. X              if (verbose) {
  215. X                  error_message ("Can't stat group %s\n", buf);
  216. X***************
  217. X*** 968,974 ****
  218. X          group_time = stinfo.st_mtime;
  219. X  
  220. X          index_time = 0L;
  221. X!         find_index_file (active[my_group[i]].name);
  222. X          if (stat (index_file, &stinfo) == -1) {
  223. X              if (verbose) {
  224. X                  printf ("Can't stat %s index %s\n", active[my_group[i]].name, index_file);
  225. X--- 1120,1129 ----
  226. X          group_time = stinfo.st_mtime;
  227. X  
  228. X          index_time = 0L;
  229. X!         if (find_index_file (active[my_group[i]].name) == -1) {
  230. X!             continue;
  231. X!         }
  232. X! 
  233. X          if (stat (index_file, &stinfo) == -1) {
  234. X              if (verbose) {
  235. X                  printf ("Can't stat %s index %s\n", active[my_group[i]].name, index_file);
  236. X***************
  237. X*** 984,990 ****
  238. X          }
  239. X          
  240. X          if (index_time == 0L || active[my_group[i]].last_updated_time == 0L || 
  241. X!             group_time > active[my_group[i]].last_updated_time) {
  242. X              active[my_group[i]].last_updated_time = group_time;
  243. X          } else {
  244. X              continue;
  245. X--- 1139,1145 ----
  246. X          }
  247. X          
  248. X          if (index_time == 0L || active[my_group[i]].last_updated_time == 0L || 
  249. X!             group_time > active[my_group[i]].last_updated_time || purge_index_files) {
  250. X              active[my_group[i]].last_updated_time = group_time;
  251. X          } else {
  252. X              continue;
  253. X***************
  254. X*** 996,1002 ****
  255. X                  active[my_group[i]].name);
  256. X              fflush (stdout);
  257. X          }
  258. X!         index_group (active[my_group[i]].name, group_path);
  259. X          if (catchup) {
  260. X              for (j = 0; j < top; j++) {
  261. X                  arts[j].unread = ART_READ;
  262. X--- 1151,1159 ----
  263. X                  active[my_group[i]].name);
  264. X              fflush (stdout);
  265. X          }
  266. X!         if (! index_group (active[my_group[i]].name, group_path)) {
  267. X!             continue;
  268. X!         }
  269. X          if (catchup) {
  270. X              for (j = 0; j < top; j++) {
  271. X                  arts[j].unread = ART_READ;
  272. X***************
  273. X*** 1133,1135 ****
  274. X--- 1290,1315 ----
  275. X      art->hot = FALSE;
  276. X      art->zombie = FALSE;
  277. X  }
  278. X+ 
  279. X+ int input_pending ()
  280. X+ {
  281. X+ #ifndef DONT_HAVE_SELECT
  282. X+     int fd = STDIN_FILENO;
  283. X+     fd_set fdread;
  284. X+     struct timeval tvptr;
  285. X+ 
  286. X+     FD_ZERO(&fdread);
  287. X+ 
  288. X+     tvptr.tv_sec = 0;
  289. X+     tvptr.tv_usec = 0;
  290. X+ 
  291. X+     FD_SET(fd, &fdread);
  292. X+     if (select (1, &fdread, NULL, NULL, &tvptr)) {
  293. X+         if (FD_ISSET(fd, &fdread)) {
  294. X+             return TRUE;
  295. X+         }
  296. X+     }
  297. X+ #endif
  298. X+     return FALSE;
  299. X+ }
  300. X+ 
  301. Xdiff -rcs ../1.16/common.patch ./common.patch
  302. X*** ../1.16/common.patch    Sun Nov 15 18:41:36 1992
  303. X--- ./common.patch    Thu Nov  5 13:17:59 1992
  304. X***************
  305. X*** 1,45 ****
  306. X! Files common.old/Makefile and common/Makefile are identical
  307. X! Files common.old/README and common/README are identical
  308. X! Files common.old/README.HPUX and common/README.HPUX are identical
  309. X! Files common.old/README.IRIX and common/README.IRIX are identical
  310. X! Files common.old/README.LIB and common/README.LIB are identical
  311. X! Files common.old/README.MTXNIU and common/README.MTXNIU are identical
  312. X! Files common.old/README.SYSV and common/README.SYSV are identical
  313. X! Files common.old/README.XENIX and common/README.XENIX are identical
  314. X! Files common.old/clientlib.c and common/clientlib.c are identical
  315. X! Files common.old/clientlib.h and common/clientlib.h are identical
  316. X! Only in common: conf.h
  317. X! diff -rcs common.old/conf.h.dist common/conf.h.dist
  318. X! *** common.old/conf.h.dist    Wed May  6 09:01:11 1992
  319. X! --- common/conf.h.dist    Mon May  4 07:31:14 1992
  320. X  ***************
  321. X! *** 7,12 ****
  322. X! --- 7,20 ----
  323. X     * Compile time options.
  324. X     */
  325. X      
  326. X! + /*
  327. X! +  * Extensions to NNTP RFC977 (I.Lea 07-03-92)
  328. X  +  */
  329. X  + 
  330. X- + #define XUSER            /* log clients username to nntp logfile */
  331. X  + #define XINDEX            /* retieve tin index files from server */
  332. X  + #define SUBSCRIPTIONS_FILE    "/usr/lib/news/subscriptions"
  333. X  + 
  334. X!   
  335. X    #undef    ALONE        /* True if we're running without inetd */
  336. X    
  337. X! Only in common: conf.h.dst.old
  338. X! Only in common: conf.h.norisc
  339. X! diff -rcs common.old/nntp.h common/nntp.h
  340. X! *** common.old/nntp.h    Wed May  6 09:01:11 1992
  341. X! --- common/nntp.h    Tue Mar 10 08:52:12 1992
  342. X  ***************
  343. X  *** 38,43 ****
  344. X! --- 38,46 ----
  345. X    #define    OK_GOODBYE    205    /* Closing connection */
  346. X    #define    OK_GROUP    211    /* Group selected */
  347. X    #define    OK_GROUPS    215    /* Newsgroups follow */
  348. X  + #ifdef XINDEX
  349. X  + #define    OK_XINDEX    218    /* Group index file follows */
  350. X  + #endif
  351. X--- 1,80 ----
  352. X! diff -rcs nntp/common/conf.h nntp-1.5.11/common/conf.h
  353. X! *** common/conf.h    Wed Sep 30 14:34:38 1992
  354. X! --- common/conf.h    Thu Nov  5 08:33:37 1992
  355. X  ***************
  356. X! *** 4,9 ****
  357. X! --- 4,25 ----
  358. X!    */
  359. X!   
  360. X!   /*
  361. X! +  * Extensions to NNTP RFC977 (I.Lea 05-11-92)
  362. X! +  */
  363. X! + 
  364. X! + #define XOVERVIEW         /* specifies that .overview index type files */
  365. X! +                 /* should be searched for before tin index   */
  366. X! +                 /* files and that they should be returned by */
  367. X! +                 /* the NNTP XINDEX command extension         */
  368. X! + #define XINDEX            /* retieve tin index files from server       */
  369. X! + #define XMOTD            /* retieve message of the day from server    */
  370. X! + #define XUSER            /* log clients username to nntp logfile      */
  371. X! + 
  372. X! + #define XINDEX_DIR        "/usr/spool/news/.index"
  373. X! + #define XMOTD_FILE        "/usr/lib/news/motd"
  374. X! + #define SUBSCRIPTIONS_FILE    "/usr/lib/news/subscriptions"
  375. X! + 
  376. X! + /*
  377. X     * Compile time options.
  378. X     */
  379. X+   
  380. X+ diff -rcs nntp/common/conf.h.dist nntp-1.5.11/common/conf.h.dist
  381. X+ *** common/conf.h.dist        Wed Sep 30 14:34:35 1992
  382. X+ --- common/conf.h.dist        Sun Oct 18 13:51:22 1992
  383. X+ ***************
  384. X+ *** 4,13 ****
  385. X+    */
  386. X+   
  387. X+   /*
  388. X+    * Compile time options.
  389. X+    */
  390. X      
  391. X! - 
  392. X!   #undef    ALONE        /* True if we're running without inetd */
  393. X!   
  394. X!   #ifdef ALONE
  395. X! --- 4,24 ----
  396. X!    */
  397. X!   
  398. X!   /*
  399. X! +  * Extensions to NNTP RFC977 (I.Lea 27-09-92)
  400. X  +  */
  401. X  + 
  402. X  + #define XINDEX            /* retieve tin index files from server */
  403. X+ + #define XMOTD            /* retieve message of the day from server */
  404. X+ + #define XUSER            /* log clients username to nntp logfile */
  405. X+ + 
  406. X+ + #define XINDEX_DIR        "/usr/spool/news/.index"
  407. X+ + #define XMOTD_FILE        "/usr/lib/news/motd"
  408. X  + #define SUBSCRIPTIONS_FILE    "/usr/lib/news/subscriptions"
  409. X  + 
  410. X! + /*
  411. X!    * Compile time options.
  412. X!    */
  413. X!     
  414. X    #undef    ALONE        /* True if we're running without inetd */
  415. X    
  416. X!   #ifdef ALONE
  417. X! diff -rcs nntp/common/nntp.h nntp-1.5.11/common/nntp.h
  418. X! *** common/nntp.h    Wed Sep 30 14:34:38 1992
  419. X! --- common/nntp.h    Sun Sep 27 12:31:30 1992
  420. X  ***************
  421. X  *** 38,43 ****
  422. X! --- 38,49 ----
  423. X    #define    OK_GOODBYE    205    /* Closing connection */
  424. X    #define    OK_GROUP    211    /* Group selected */
  425. X    #define    OK_GROUPS    215    /* Newsgroups follow */
  426. X+ + #ifdef XMOTD
  427. X+ + #define    OK_XMOTD    217    /* Motd (message of the day) file follows */
  428. X+ + #endif
  429. X  + #ifdef XINDEX
  430. X  + #define    OK_XINDEX    218    /* Group index file follows */
  431. X  + #endif
  432. X***************
  433. X*** 48,57 ****
  434. X    #define    OK_BODY        222    /* Body follows */
  435. X  ***************
  436. X  *** 57,62 ****
  437. X! --- 60,68 ----
  438. X    #define    ERR_GOODBYE    400    /* Have to hang up for some reason */
  439. X    #define    ERR_NOGROUP    411    /* No such newsgroup */
  440. X    #define    ERR_NCING    412    /* Not currently in newsgroup */
  441. X  + #ifdef XINDEX
  442. X  + #define    ERR_XINDEX    418    /* No index file for newsgroup */
  443. X  + #endif
  444. X--- 83,95 ----
  445. X    #define    OK_BODY        222    /* Body follows */
  446. X  ***************
  447. X  *** 57,62 ****
  448. X! --- 63,74 ----
  449. X    #define    ERR_GOODBYE    400    /* Have to hang up for some reason */
  450. X    #define    ERR_NOGROUP    411    /* No such newsgroup */
  451. X    #define    ERR_NCING    412    /* Not currently in newsgroup */
  452. X+ + #ifdef XMOTD
  453. X+ + #define    ERR_XMOTD    417    /* No motd (message of the day) file */
  454. X+ + #endif
  455. X  + #ifdef XINDEX
  456. X  + #define    ERR_XINDEX    418    /* No index file for newsgroup */
  457. X  + #endif
  458. X***************
  459. X*** 58,61 ****
  460. X    #define    ERR_NOCRNT    420    /* No current article selected */
  461. X    #define    ERR_NONEXT    421    /* No next article in this group */
  462. X    #define    ERR_NOPREV    422    /* No previous article in this group */
  463. X- Files common.old/version.c and common/version.c are identical
  464. X--- 96,98 ----
  465. Xdiff -rcs ../1.16/config.h ./config.h
  466. X*** ../1.16/config.h    Sun Nov 15 18:41:38 1992
  467. X--- ./config.h    Sun Nov 15 16:02:48 1992
  468. X***************
  469. X*** 3,9 ****
  470. X   *  Module    : config.h
  471. X   *  Author    : I.Lea
  472. X   *  Created   : 03-09-92
  473. X!  *  Updated   : 06-09-92
  474. X   *  Notes     : #defines to determine different OS capabilites
  475. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  476. X   *              You may  freely  copy or  redistribute  this software,
  477. X--- 3,9 ----
  478. X   *  Module    : config.h
  479. X   *  Author    : I.Lea
  480. X   *  Created   : 03-09-92
  481. X!  *  Updated   : 15-11-92
  482. X   *  Notes     : #defines to determine different OS capabilites
  483. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  484. X   *              You may  freely  copy or  redistribute  this software,
  485. X***************
  486. X*** 12,23 ****
  487. X   *              right notice, and it must be included in any copy made
  488. X   */
  489. X  
  490. X- #ifdef MCH_AMIGA
  491. X- #    define    AMIGA
  492. X- #endif
  493. X- 
  494. X- #define    HAVE_SYS_STREAM_H
  495. X- 
  496. X  #ifdef M_XENIX
  497. X  #    define    HAVE_PROTOTYPES_H
  498. X  #endif
  499. X--- 12,17 ----
  500. X***************
  501. X*** 26,35 ****
  502. X  #    define    HAVE_TERMIO_H
  503. X  #endif
  504. X  
  505. X  #ifdef SVR4
  506. X  #    define    HAVE_LOCALE_H
  507. X- #    define    HAVE_TERMIOS_H
  508. X- #    define    POSIX_JOB_CONTROL
  509. X  #    undef    sinix        /* SNI Sinix (nsc32000) */
  510. X  #endif
  511. X  
  512. X--- 20,35 ----
  513. X  #    define    HAVE_TERMIO_H
  514. X  #endif
  515. X  
  516. X+ #if defined(SVR4) || defined(UMAXV)
  517. X+ #    define    HAVE_TERMIOS_H
  518. X+ #endif
  519. X+ 
  520. X+ #if defined(_POSIX_SOURCE) || defined(DGUX) || defined(SVR4) || defined(UMAXV)
  521. X+ #    define    HAVE_POSIX_JC
  522. X+ #endif
  523. X+ 
  524. X  #ifdef SVR4
  525. X  #    define    HAVE_LOCALE_H
  526. X  #    undef    sinix        /* SNI Sinix (nsc32000) */
  527. X  #endif
  528. X  
  529. X***************
  530. X*** 49,66 ****
  531. X  #    define    HAVE_SYS_UTSNAME_H
  532. X  #endif
  533. X  
  534. X! #if !defined(apollo) && !defined(sysV68) && !defined(UTS)
  535. X  #    define    HAVE_STDLIB_H
  536. X  #endif
  537. X  
  538. X  #ifdef BSD
  539. X  #    define    HAVE_STRINGS_H
  540. X- #    define    HAVE_FCNTL_H
  541. X  #else
  542. X  #    define    HAVE_STRING_H
  543. X  #endif
  544. X  
  545. X! #if !defined(apollo) && !defined(sinix)
  546. X  #    define    HAVE_SYS_PTEM_H
  547. X  #endif
  548. X  
  549. X--- 49,73 ----
  550. X  #    define    HAVE_SYS_UTSNAME_H
  551. X  #endif
  552. X  
  553. X! #if !defined(apollo) && !defined(sequent) && !defined(sysV68) && !defined(UTS)
  554. X  #    define    HAVE_STDLIB_H
  555. X  #endif
  556. X  
  557. X  #ifdef BSD
  558. X  #    define    HAVE_STRINGS_H
  559. X  #else
  560. X  #    define    HAVE_STRING_H
  561. X  #endif
  562. X  
  563. X! #if defined(BSD) || defined(UMAXV)
  564. X! #    define    HAVE_FCNTL_H
  565. X! #endif
  566. X! 
  567. X! #ifndef __hpux
  568. X! #    define    HAVE_SYS_STREAM_H
  569. X! #endif
  570. X! 
  571. X! #if !defined(apollo) && !defined(__hpux) && !defined(sinix) && !defined(UMAXV)
  572. X  #    define    HAVE_SYS_PTEM_H
  573. X  #endif
  574. X  
  575. X***************
  576. X*** 68,87 ****
  577. X  #    define    HAVE_SYS_PTY_H
  578. X  #endif
  579. X  
  580. X! #if defined(BSD) || defined(RS6000) || defined(sinix)
  581. X  #    define    HAVE_NETDB_H
  582. X  #endif
  583. X  
  584. X! #if defined(__GNUC__) || defined(POSIX_JOB_CONTROL)
  585. X  #    define    HAVE_SIGTYPE_VOID
  586. X  #else    
  587. X  #    if defined(sony)
  588. X  #        define    HAVE_SIGTYPE_INT
  589. X  #    else
  590. X! #        if __STDC__ || defined(atthcx) || defined(PTX) || \
  591. X!            defined(RS6000) || defined(sgi) || defined(sinix) || \
  592. X!            defined(sysV68) || defined(sun) || defined(SVR4) || \
  593. X!            defined(ultrix)
  594. X  #            define    HAVE_SIGTYPE_VOID
  595. X  #        else
  596. X  #            define    HAVE_SIGTYPE_INT
  597. X--- 75,99 ----
  598. X  #    define    HAVE_SYS_PTY_H
  599. X  #endif
  600. X  
  601. X! #if defined(BSD) || defined(__hpux) || defined(RS6000) || defined(sinix) || \
  602. X!     defined(UMAXV)
  603. X  #    define    HAVE_NETDB_H
  604. X  #endif
  605. X  
  606. X! #if !defined(apollo)
  607. X! #    define    HAVE_SYS_TIME_H
  608. X! #endif
  609. X! 
  610. X! #if defined(__GNUC__) || defined(HAVE_POSIX_JC)
  611. X  #    define    HAVE_SIGTYPE_VOID
  612. X  #else    
  613. X  #    if defined(sony)
  614. X  #        define    HAVE_SIGTYPE_INT
  615. X  #    else
  616. X! #        if __STDC__ || defined(atthcx) || defined(__hpux) || \
  617. X!            defined(PTX) || defined(RS6000) || defined(sgi) || \
  618. X!            defined(sinix) || defined(sysV68) || defined(sun) || \
  619. X!            defined(SVR4) || defined(ultrix)
  620. X  #            define    HAVE_SIGTYPE_VOID
  621. X  #        else
  622. X  #            define    HAVE_SIGTYPE_INT
  623. X***************
  624. X*** 89,102 ****
  625. X  #    endif
  626. X  #endif
  627. X  
  628. X! #if defined(AUX) || defined(BSD) || defined(PTX) || defined(RS6000) || \
  629. X!     defined(sinix) || defined(SVR4)
  630. X! #    ifndef HAVE_LONG_FILENAMES
  631. X! #        define    HAVE_LONG_FILENAMES
  632. X! #    endif
  633. X  #endif
  634. X  
  635. X! #if defined(BSD) || defined(__hpux) || defined(RS6000) || defined(sinix) 
  636. X  #    define    HAVE_GETHOSTBYNAME
  637. X  #endif
  638. X  
  639. X--- 101,114 ----
  640. X  #    endif
  641. X  #endif
  642. X  
  643. X! #if defined(apollo) || defined(AUX) || defined(BSD) || defined(__hpux) || \
  644. X!     defined(PTX) || defined(RS6000) || defined(sinix) || defined(SVR4) || \
  645. X!     defined(UMAXV)
  646. X! #    define    HAVE_LONG_FILENAMES
  647. X  #endif
  648. X  
  649. X! #if defined(BSD) || defined(__hpux) || defined(RS6000) || defined(sinix) || \
  650. X!     defined(UMAXV) 
  651. X  #    define    HAVE_GETHOSTBYNAME
  652. X  #endif
  653. X  
  654. X***************
  655. X*** 116,126 ****
  656. X   * Used in parsedate.y
  657. X   */
  658. X  
  659. X! #if !defined(BSD) || defined(DGUX)
  660. X  #    define    DONT_HAVE_TM_GMTOFF
  661. X  #endif
  662. X  
  663. X  #ifdef sinix
  664. X  #    undef    HAVE_SYS_STREAM_H
  665. X  #    define    DONT_HAVE_MKDIR
  666. X  #endif
  667. X--- 128,164 ----
  668. X   * Used in parsedate.y
  669. X   */
  670. X  
  671. X! #if defined(__arm) || defined(DGUX) || defined(sequent) || !defined(BSD)
  672. X  #    define    DONT_HAVE_TM_GMTOFF
  673. X  #endif
  674. X  
  675. X+ #if defined(apollo)
  676. X+ #    define    DONT_HAVE_SELECT
  677. X+ #endif
  678. X+ 
  679. X+ #if defined(__hpux)
  680. X+ #    define    DONT_PROTOTYPE_PTR_TO_FUNC
  681. X+ #    define    DONT_HAVE_SYS_BSDTYPES_H
  682. X+ #    define    HAVE_KEYPAD
  683. X+ #endif
  684. X+ 
  685. X  #ifdef sinix
  686. X  #    undef    HAVE_SYS_STREAM_H
  687. X  #    define    DONT_HAVE_MKDIR
  688. X+ #endif
  689. X+ 
  690. X+ /*
  691. X+  * Hack used to try and get a compile on Sun i386 & old SunOS 4.0.2
  692. X+  */
  693. X+  
  694. X+ #if defined(sun) && defined(i386)
  695. X+ #    undef    HAVE_STDLIB_H
  696. X+ #endif
  697. X+ 
  698. X+ #ifndef STDIN_FILENO
  699. X+ #    define    STDIN_FILENO    0
  700. X+ #endif
  701. X+ 
  702. X+ #if defined(BSD) || defined(_POSIX_SOURCE)
  703. X+ #    define    HAVE_REWINDDIR
  704. X  #endif
  705. Xdiff -rcs ../1.16/curses.c ./curses.c
  706. X*** ../1.16/curses.c    Sun Nov 15 18:41:46 1992
  707. X--- ./curses.c    Sun Nov 15 16:02:48 1992
  708. X***************
  709. X*** 3,9 ****
  710. X   *  Module    : curses.c
  711. X   *  Author    : D.Taylor & I.Lea
  712. X   *  Created   : 01-01-86
  713. X!  *  Updated   : 23-08-92
  714. X   *  Notes     : This is a screen management library borrowed with permission
  715. X   *              from the Elm mail system (a great mailer--I highly recommend
  716. X   *              it!).This library was hacked to provide what tin needs.
  717. X--- 3,9 ----
  718. X   *  Module    : curses.c
  719. X   *  Author    : D.Taylor & I.Lea
  720. X   *  Created   : 01-01-86
  721. X!  *  Updated   : 11-10-92
  722. X   *  Notes     : This is a screen management library borrowed with permission
  723. X   *              from the Elm mail system (a great mailer--I highly recommend
  724. X   *              it!).This library was hacked to provide what tin needs.
  725. X***************
  726. X*** 385,392 ****
  727. X  void set_keypad_on ()
  728. X  {
  729. X  #ifndef INDEX_DAEMON
  730. X! #    ifdef __hpux
  731. X!      if (_keypadxmit) {
  732. X          tputs (_keypadxmit, 1, outchar);
  733. X          fflush (stdout);
  734. X      }
  735. X--- 385,392 ----
  736. X  void set_keypad_on ()
  737. X  {
  738. X  #ifndef INDEX_DAEMON
  739. X! #    ifdef HAVE_KEYPAD
  740. X!      if (use_keypad && _keypadxmit) {
  741. X          tputs (_keypadxmit, 1, outchar);
  742. X          fflush (stdout);
  743. X      }
  744. X***************
  745. X*** 397,404 ****
  746. X  void set_keypad_off ()
  747. X  {
  748. X  #ifndef INDEX_DAEMON
  749. X! #    ifdef __hpux
  750. X!     if (_keypadlocal) {
  751. X          tputs (_keypadlocal, 1, outchar);
  752. X          fflush (stdout);
  753. X      }
  754. X--- 397,404 ----
  755. X  void set_keypad_off ()
  756. X  {
  757. X  #ifndef INDEX_DAEMON
  758. X! #    ifdef HAVE_KEYPAD
  759. X!     if (use_keypad && _keypadlocal) {
  760. X          tputs (_keypadlocal, 1, outchar);
  761. X          fflush (stdout);
  762. X      }
  763. X***************
  764. X*** 634,641 ****
  765. X   *  output a character. From tputs... (Note: this CANNOT be a macro!)
  766. X   */
  767. X  
  768. X! int outchar(c)
  769. X!     char c;
  770. X  {
  771. X      fputc (c, stdout);
  772. X  }
  773. X--- 634,641 ----
  774. X   *  output a character. From tputs... (Note: this CANNOT be a macro!)
  775. X   */
  776. X  
  777. X! int outchar (c)
  778. X!     int c;
  779. X  {
  780. X      fputc (c, stdout);
  781. X  }
  782. Xdiff -rcs ../1.16/debug.c ./debug.c
  783. X*** ../1.16/debug.c    Sun Nov 15 18:41:47 1992
  784. X--- ./debug.c    Sun Nov 15 16:02:48 1992
  785. X***************
  786. X*** 3,9 ****
  787. X   *  Module    : debug.c
  788. X   *  Author    : I.Lea
  789. X   *  Created   : 01-04-91
  790. X!  *  Updated   : 13-09-92
  791. X   *  Notes     : debug routines
  792. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  793. X   *              You may  freely  copy or  redistribute  this software,
  794. X--- 3,9 ----
  795. X   *  Module    : debug.c
  796. X   *  Author    : I.Lea
  797. X   *  Created   : 01-04-91
  798. X!  *  Updated   : 02-10-92
  799. X   *  Notes     : debug routines
  800. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  801. X   *              You may  freely  copy or  redistribute  this software,
  802. X***************
  803. X*** 221,228 ****
  804. X  
  805. X      if ((fp = fopen (file, "w")) != NULL) {
  806. X          for (i = 0; i < num_active; i++) {    /* for each group */
  807. X!             fprintf (fp, "[%4d]=[%-28s] max=[%4ld] min=[%4ld] mod=[%c] nxt=[%4d] my_group=[%d]\n",
  808. X!                 i, active[i].name, active[i].max, active[i].min,
  809. X                  active[i].moderated, active[i].next, active[i].my_group);
  810. X              fprintf (fp, "hash=[%ld]  description=[%s]\n", hash_groupname (active[i].name), 
  811. X                  (active[i].description ? active[i].description : ""));
  812. X--- 221,230 ----
  813. X  
  814. X      if ((fp = fopen (file, "w")) != NULL) {
  815. X          for (i = 0; i < num_active; i++) {    /* for each group */
  816. X!             fprintf (fp, "[%4d]=[%-28s] type=[%d] spooldir=[%s]\n", 
  817. X!                 i, active[i].name, active[i].type, active[i].spooldir);
  818. X!             fprintf (fp, "max=[%4ld] min=[%4ld] mod=[%c] nxt=[%4d] my_group=[%d]\n",
  819. X!                 active[i].max, active[i].min,
  820. X                  active[i].moderated, active[i].next, active[i].my_group);
  821. X              fprintf (fp, "hash=[%ld]  description=[%s]\n", hash_groupname (active[i].name), 
  822. X                  (active[i].description ? active[i].description : ""));
  823. X***************
  824. X*** 234,243 ****
  825. X                  active[i].attribute.show_author,  
  826. X                  active[i].attribute.auto_save,
  827. X                  active[i].attribute.post_proc_type);
  828. X!             fprintf (fp, "maildir=[%s] ",(active[i].attribute.maildir == (char *) 0 ? "" : active[i].attribute.maildir));            
  829. X!             fprintf (fp, "savedir=[%s] ",(active[i].attribute.savedir == (char *) 0 ? "" : active[i].attribute.savedir));
  830. X!             fprintf (fp, "sigfile=[%s] ",(active[i].attribute.sigfile == (char *) 0 ? "" : active[i].attribute.sigfile));
  831. X!             fprintf (fp, "followup_to=[%s]\n\n", (active[i].attribute.followup_to  == (char *) 0 ? "" : active[i].attribute.followup_to));
  832. X          }
  833. X          fflush (fp);
  834. X          fclose (fp);
  835. X--- 236,247 ----
  836. X                  active[i].attribute.show_author,  
  837. X                  active[i].attribute.auto_save,
  838. X                  active[i].attribute.post_proc_type);
  839. X!             fprintf (fp, "maildir=[%s] savedir=[%s]\n",
  840. X!                 (active[i].attribute.maildir == (char *) 0 ? "" : active[i].attribute.maildir),
  841. X!                 (active[i].attribute.savedir == (char *) 0 ? "" : active[i].attribute.savedir));
  842. X!             fprintf (fp, "sigfile=[%s] followup_to=[%s]\n\n",
  843. X!                 (active[i].attribute.sigfile == (char *) 0 ? "" : active[i].attribute.sigfile),
  844. X!                 (active[i].attribute.followup_to  == (char *) 0 ? "" : active[i].attribute.followup_to));
  845. X          }
  846. X          fflush (fp);
  847. X          fclose (fp);
  848. X***************
  849. X*** 295,298 ****
  850. X      printf ("\n");
  851. X  #endif
  852. X  }
  853. X!     
  854. X--- 299,302 ----
  855. X      printf ("\n");
  856. X  #endif
  857. X  }
  858. X!     
  859. X\ No newline at end of file
  860. Xdiff -rcs ../1.16/envarg.c ./envarg.c
  861. X*** ../1.16/envarg.c    Sun Nov 15 18:41:47 1992
  862. X--- ./envarg.c    Sun Nov 15 16:02:48 1992
  863. X***************
  864. X*** 3,9 ****
  865. X   *  Module    : envarg.c
  866. X   *  Author    : B.Davidson
  867. X   *  Created   : 10-13-91
  868. X!  *  Updated   : 23-10-91
  869. X   *  Notes     : Adds default options from environment to command line
  870. X   *  Copyright : (c) Copyright 1991-92 by Bill Davidsen
  871. X   *              You may  freely  copy or  redistribute  this software,
  872. X--- 3,9 ----
  873. X   *  Module    : envarg.c
  874. X   *  Author    : B.Davidson
  875. X   *  Created   : 10-13-91
  876. X!  *  Updated   : 01-10-92
  877. X   *  Notes     : Adds default options from environment to command line
  878. X   *  Copyright : (c) Copyright 1991-92 by Bill Davidsen
  879. X   *              You may  freely  copy or  redistribute  this software,
  880. X***************
  881. X*** 61,78 ****
  882. X       * count the args so we can allocate room for them 
  883. X       */
  884. X      argc = count_args (envptr);
  885. X!     bufptr = malloc(1+strlen(envptr));
  886. X!     if (bufptr == (char *) 0)
  887. X!         fprintf (stderr, "Can't get memory for arguments");
  888. X! 
  889. X      strcpy (bufptr, envptr);
  890. X  
  891. X      /* 
  892. X       * allocate a vector large enough for all args 
  893. X       */
  894. X!     argv = (char **) malloc((argc+*Pargc+1)*sizeof(char *));
  895. X!     if (argv == (char **) 0)
  896. X!         fprintf (stderr, "Can't get memory for arguments");
  897. X      argvect = argv;
  898. X  
  899. X      /* 
  900. X--- 61,73 ----
  901. X       * count the args so we can allocate room for them 
  902. X       */
  903. X      argc = count_args (envptr);
  904. X!     bufptr = (char *) my_malloc (1+strlen (envptr));
  905. X      strcpy (bufptr, envptr);
  906. X  
  907. X      /* 
  908. X       * allocate a vector large enough for all args 
  909. X       */
  910. X!     argv = (char **) my_malloc ((argc+*Pargc+1)*sizeof(char *));
  911. X      argvect = argv;
  912. X  
  913. X      /* 
  914. Xdiff -rcs ../1.16/extern.h ./extern.h
  915. X*** ../1.16/extern.h    Sun Nov 15 18:41:40 1992
  916. X--- ./extern.h    Sun Nov 15 16:02:48 1992
  917. X***************
  918. X*** 3,9 ****
  919. X   *  Module    : extern.h
  920. X   *  Author    : I.Lea
  921. X   *  Created   : 01-04-91
  922. X!  *  Updated   : 11-09-92
  923. X   *  Notes     :
  924. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  925. X   *              You may  freely  copy or  redistribute  this software,
  926. X--- 3,9 ----
  927. X   *  Module    : extern.h
  928. X   *  Author    : I.Lea
  929. X   *  Created   : 01-04-91
  930. X!  *  Updated   : 14-11-92
  931. X   *  Notes     :
  932. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  933. X   *              You may  freely  copy or  redistribute  this software,
  934. X***************
  935. X*** 67,73 ****
  936. X  extern char *help_select[];
  937. X  extern char *help_spooldir[];
  938. X  extern char *help_thread[];
  939. X- extern char active_file[PATH_LEN];
  940. X  extern char active_times_file[PATH_LEN];
  941. X  extern char add_addr[LEN];
  942. X  extern char article[PATH_LEN];
  943. X--- 67,72 ----
  944. X***************
  945. X*** 80,85 ****
  946. X--- 79,85 ----
  947. X  extern char default_author_search[LEN];
  948. X  extern char default_crosspost_group[LEN];
  949. X  extern char default_mail_address[LEN];
  950. X+ extern char default_organization[PATH_LEN];
  951. X  extern char default_pipe_command[LEN];
  952. X  extern char default_post_newsgroups[PATH_LEN];
  953. X  extern char default_post_subject[PATH_LEN];
  954. X***************
  955. X*** 96,115 ****
  956. X  extern char default_signature[PATH_LEN];
  957. X  extern char default_subject_search[LEN];
  958. X  extern char homedir[PATH_LEN];
  959. X! extern char indexdir[PATH_LEN];
  960. X  extern char killfile[PATH_LEN];
  961. X  extern char killfrom[LEN];
  962. X  extern char killsubj[LEN];
  963. X  extern char lock_file[PATH_LEN];
  964. X  extern char local_newsgroups_file[PATH_LEN];
  965. X  extern char mail_news_user[LEN];
  966. X  extern char mailbox[PATH_LEN];
  967. X  extern char mailer[PATH_LEN];
  968. X  extern char msg[LEN];
  969. X  extern char my_distribution[LEN];
  970. X- extern char my_org[LEN];
  971. X  extern char new_active_file_attribute[32];
  972. X  extern char new_active_file_server[PATH_LEN];
  973. X  extern char newsgroups_file[PATH_LEN];
  974. X  extern char newnewsrc[PATH_LEN];
  975. X  extern char newsrc[PATH_LEN];
  976. X--- 96,122 ----
  977. X  extern char default_signature[PATH_LEN];
  978. X  extern char default_subject_search[LEN];
  979. X  extern char homedir[PATH_LEN];
  980. X! extern char index_maildir[PATH_LEN];
  981. X! extern char index_newsdir[PATH_LEN];
  982. X  extern char killfile[PATH_LEN];
  983. X  extern char killfrom[LEN];
  984. X  extern char killsubj[LEN];
  985. X  extern char lock_file[PATH_LEN];
  986. X  extern char local_newsgroups_file[PATH_LEN];
  987. X+ extern char mail_active_file[PATH_LEN];
  988. X+ extern char mail_quote_format[PATH_LEN];
  989. X+ extern char news_active_file[PATH_LEN];
  990. X+ extern char news_quote_format[PATH_LEN];
  991. X  extern char mail_news_user[LEN];
  992. X  extern char mailbox[PATH_LEN];
  993. X  extern char mailer[PATH_LEN];
  994. X+ extern char motd_file[PATH_LEN];
  995. X+ extern char motd_file_info[PATH_LEN];
  996. X  extern char msg[LEN];
  997. X  extern char my_distribution[LEN];
  998. X  extern char new_active_file_attribute[32];
  999. X  extern char new_active_file_server[PATH_LEN];
  1000. X+ extern char mailgroups_file[PATH_LEN];
  1001. X  extern char newsgroups_file[PATH_LEN];
  1002. X  extern char newnewsrc[PATH_LEN];
  1003. X  extern char newsrc[PATH_LEN];
  1004. X***************
  1005. X*** 116,122 ****
  1006. X  extern char *nntp_server;
  1007. X  extern char page_header[LEN];
  1008. X  extern char postfile[PATH_LEN];
  1009. X! extern char printer[LEN];
  1010. X  extern char proc_ch_default;                /* set in change_rcfile () */
  1011. X  extern char progname[PATH_LEN];
  1012. X  extern char quote_chars[PATH_LEN];
  1013. X--- 123,129 ----
  1014. X  extern char *nntp_server;
  1015. X  extern char page_header[LEN];
  1016. X  extern char postfile[PATH_LEN];
  1017. X! extern char default_printer[LEN];
  1018. X  extern char proc_ch_default;                /* set in change_rcfile () */
  1019. X  extern char progname[PATH_LEN];
  1020. X  extern char quote_chars[PATH_LEN];
  1021. X***************
  1022. X*** 124,129 ****
  1023. X--- 131,137 ----
  1024. X  extern char rcfile[PATH_LEN];
  1025. X  extern char redirect_output[LEN];
  1026. X  extern char reply_to[LEN];
  1027. X+ extern char save_active_file[PATH_LEN];
  1028. X  extern char spooldir[PATH_LEN];
  1029. X  extern char spooldir_alias[PATH_LEN];
  1030. X  extern char subscriptions_file[PATH_LEN];
  1031. X***************
  1032. X*** 130,141 ****
  1033. X  extern char userid[PATH_LEN];
  1034. X  
  1035. X  extern char txt_1_resp[];
  1036. X  extern char txt_active_file_is_empty[];
  1037. X  extern char txt_added_groups[];
  1038. X  extern char txt_append_to_file[];
  1039. X  extern char txt_art[];
  1040. X! extern char txt_art_cancelled[];
  1041. X! extern char txt_art_cannot_cancel[];
  1042. X  extern char txt_art_marked_as_unread[];
  1043. X  extern char txt_art_not_saved[];
  1044. X  extern char txt_art_pager_com[];
  1045. X--- 138,150 ----
  1046. X  extern char userid[PATH_LEN];
  1047. X  
  1048. X  extern char txt_1_resp[];
  1049. X+ extern char txt_abort_indexing[];
  1050. X  extern char txt_active_file_is_empty[];
  1051. X  extern char txt_added_groups[];
  1052. X  extern char txt_append_to_file[];
  1053. X  extern char txt_art[];
  1054. X! extern char txt_art_deleted[];
  1055. X! extern char txt_art_cannot_delete[];
  1056. X  extern char txt_art_marked_as_unread[];
  1057. X  extern char txt_art_not_saved[];
  1058. X  extern char txt_art_pager_com[];
  1059. X***************
  1060. X*** 149,155 ****
  1061. X  extern char txt_bad_active_file[];
  1062. X  extern char txt_bad_command[];
  1063. X  extern char txt_begin_of_art[];
  1064. X! extern char txt_cancelling[];
  1065. X  extern char txt_cannot_find_base_art[];
  1066. X  extern char txt_cannot_get_nntp_server_name[];
  1067. X  extern char txt_cannot_open[];
  1068. X--- 158,164 ----
  1069. X  extern char txt_bad_active_file[];
  1070. X  extern char txt_bad_command[];
  1071. X  extern char txt_begin_of_art[];
  1072. X! extern char txt_deleting[];
  1073. X  extern char txt_cannot_find_base_art[];
  1074. X  extern char txt_cannot_get_nntp_server_name[];
  1075. X  extern char txt_cannot_open[];
  1076. X***************
  1077. X*** 166,171 ****
  1078. X--- 175,181 ----
  1079. X  extern char txt_command_failed[];
  1080. X  extern char txt_command_failed_s[];
  1081. X  extern char txt_connecting[];
  1082. X+ extern char txt_reconnecting[];
  1083. X  extern char txt_connection_to_server_broken[];
  1084. X  extern char txt_continue[];
  1085. X  extern char txt_copyright_notice[];
  1086. X***************
  1087. X*** 176,182 ****
  1088. X  extern char txt_crosspost_group[];
  1089. X  extern char txt_del_group_in_newsrc[];
  1090. X  extern char txt_delete_bogus_group[];
  1091. X! extern char txt_deleting[];
  1092. X  extern char txt_deleting_from_newsrc[];
  1093. X  extern char txt_delete_processed_files[];
  1094. X  extern char txt_end_of_arts[];
  1095. X--- 186,192 ----
  1096. X  extern char txt_crosspost_group[];
  1097. X  extern char txt_del_group_in_newsrc[];
  1098. X  extern char txt_delete_bogus_group[];
  1099. X! extern char txt_deleting_art[];
  1100. X  extern char txt_deleting_from_newsrc[];
  1101. X  extern char txt_delete_processed_files[];
  1102. X  extern char txt_end_of_arts[];
  1103. X***************
  1104. X*** 195,201 ****
  1105. X  extern char txt_group_undeleted[];
  1106. X  extern char txt_help_bug_report[LEN];
  1107. X  extern char txt_help_4[];
  1108. X! extern char txt_help_C[];
  1109. X  extern char txt_help_I[];
  1110. X  extern char txt_help_K[];
  1111. X  extern char txt_help_M[];
  1112. X--- 205,211 ----
  1113. X  extern char txt_group_undeleted[];
  1114. X  extern char txt_help_bug_report[LEN];
  1115. X  extern char txt_help_4[];
  1116. X! extern char txt_help_D[];
  1117. X  extern char txt_help_I[];
  1118. X  extern char txt_help_K[];
  1119. X  extern char txt_help_M[];
  1120. X***************
  1121. X*** 318,327 ****
  1122. X  extern char txt_help_x[];
  1123. X  extern char txt_help_y[];
  1124. X  extern char txt_hit_any_key[];
  1125. X  extern char txt_hit_space_for_more[];
  1126. X- extern char txt_in_art_you_write[];
  1127. X  extern char txt_index_page_com[];
  1128. X- extern char txt_indexing[];
  1129. X  extern char txt_indexing_num[];
  1130. X  extern char txt_ispell_define_not_compiled[];
  1131. X  extern char txt_inverse_off[];
  1132. X--- 328,336 ----
  1133. X  extern char txt_help_x[];
  1134. X  extern char txt_help_y[];
  1135. X  extern char txt_hit_any_key[];
  1136. X+ extern char txt_cmdline_hit_any_key[];
  1137. X  extern char txt_hit_space_for_more[];
  1138. X  extern char txt_index_page_com[];
  1139. X  extern char txt_indexing_num[];
  1140. X  extern char txt_ispell_define_not_compiled[];
  1141. X  extern char txt_inverse_off[];
  1142. X***************
  1143. X*** 339,344 ****
  1144. X--- 348,354 ----
  1145. X  extern char txt_mail_art_to[];
  1146. X  extern char txt_mail_bug_report[];
  1147. X  extern char txt_mail_bug_report_confirm[];
  1148. X+ extern char txt_mail_quote[];
  1149. X  extern char txt_mailed[];
  1150. X  extern char txt_mailing_to[];
  1151. X  extern char txt_mark_all_read[];
  1152. X***************
  1153. X*** 347,355 ****
  1154. X--- 357,367 ----
  1155. X  extern char txt_more[];
  1156. X  extern char txt_more_percent[];
  1157. X  extern char txt_moving[];
  1158. X+ extern char txt_news_quote[];
  1159. X  extern char txt_newsgroup[];
  1160. X  extern char txt_newsgroup_position[];
  1161. X  extern char txt_next_resp[];
  1162. X+ extern char txt_nntp_authorization_failed[];
  1163. X  extern char txt_nntp_to_fd_cannot_reopen[];
  1164. X  extern char txt_nntp_to_fp_cannot_reopen[];
  1165. X  extern char txt_no[];
  1166. X***************
  1167. X*** 374,379 ****
  1168. X--- 386,392 ----
  1169. X  extern char txt_no_quick_newsgroups[];
  1170. X  extern char txt_no_quick_subject[];
  1171. X  extern char txt_no_resp[];
  1172. X+ extern char txt_no_responses[];
  1173. X  extern char txt_no_resps_in_thread[];
  1174. X  extern char txt_no_search_string[];
  1175. X  extern char txt_no_spooldirs[];
  1176. X***************
  1177. X*** 416,421 ****
  1178. X--- 429,436 ----
  1179. X  extern char txt_post_process_type[];
  1180. X  extern char txt_post_process_uud_ext_zoo[];
  1181. X  extern char txt_post_process_uud_lst_zoo[];
  1182. X+ extern char txt_post_process_uud_ext_zip[];
  1183. X+ extern char txt_post_process_uud_lst_zip[];
  1184. X  extern char txt_post_process_uudecode[];
  1185. X  extern char txt_post_processing[];
  1186. X  extern char txt_post_processing_failed[];
  1187. X***************
  1188. X*** 422,431 ****
  1189. X  extern char txt_post_processing_finished[];
  1190. X  extern char txt_post_subject[];
  1191. X  extern char txt_posting[];
  1192. X  extern char txt_printed[];
  1193. X  extern char txt_printing[];
  1194. X  extern char txt_quit[];
  1195. X! extern char txt_quit_edit_cancel[];
  1196. X  extern char txt_quit_edit_post[];
  1197. X  extern char txt_quit_edit_xpost[];
  1198. X  extern char txt_quit_edit_save_killfile[];
  1199. X--- 437,447 ----
  1200. X  extern char txt_post_processing_finished[];
  1201. X  extern char txt_post_subject[];
  1202. X  extern char txt_posting[];
  1203. X+ extern char txt_purge[];
  1204. X  extern char txt_printed[];
  1205. X  extern char txt_printing[];
  1206. X  extern char txt_quit[];
  1207. X! extern char txt_quit_edit_delete[];
  1208. X  extern char txt_quit_edit_post[];
  1209. X  extern char txt_quit_edit_xpost[];
  1210. X  extern char txt_quit_edit_save_killfile[];
  1211. X***************
  1212. X*** 435,444 ****
  1213. X  extern char txt_read_resp[];
  1214. X  extern char txt_reading_all_arts[];
  1215. X  extern char txt_reading_new_arts[];
  1216. X  extern char txt_reading_article[];
  1217. X! extern char txt_reading_active_file[];
  1218. X  extern char txt_reading_attributes_file[];
  1219. X  extern char txt_reading_newsgroups_file[];
  1220. X  extern char txt_rejected_by_nntpserver[];
  1221. X  extern char txt_rename_error[];
  1222. X  extern char txt_reply_to_author[];
  1223. X--- 451,465 ----
  1224. X  extern char txt_read_resp[];
  1225. X  extern char txt_reading_all_arts[];
  1226. X  extern char txt_reading_new_arts[];
  1227. X+ extern char txt_reading_all_groups[];
  1228. X+ extern char txt_reading_new_groups[];
  1229. X  extern char txt_reading_article[];
  1230. X! extern char txt_reading_news_active_file[];
  1231. X! extern char txt_reading_mail_active_file[];
  1232. X  extern char txt_reading_attributes_file[];
  1233. X+ extern char txt_reading_mailgroups_file[];
  1234. X  extern char txt_reading_newsgroups_file[];
  1235. X+ extern char txt_reconnecting[];
  1236. X  extern char txt_rejected_by_nntpserver[];
  1237. X  extern char txt_rename_error[];
  1238. X  extern char txt_reply_to_author[];
  1239. X***************
  1240. X*** 488,493 ****
  1241. X--- 509,515 ----
  1242. X  extern char txt_suspended_message[];
  1243. X  extern char txt_tagged_art[];
  1244. X  extern char txt_tagged_thread[];
  1245. X+ extern char txt_testing_archive[];
  1246. X  extern char txt_there_is_no_news[];
  1247. X  extern char txt_threading_arts[];
  1248. X  extern char txt_thread_com[];
  1249. X***************
  1250. X*** 510,517 ****
  1251. X  extern char txt_untagged_thread[];
  1252. X  extern char txt_unthreading_arts[];
  1253. X  extern char txt_uudecoding[];
  1254. X- extern char txt_writes[];
  1255. X- extern char txt_writes_name[];
  1256. X  extern char txt_writing_attributes_file[];
  1257. X  extern char txt_x_resp[];
  1258. X  extern char txt_yanking_all_groups[];
  1259. X--- 532,537 ----
  1260. X***************
  1261. X*** 519,524 ****
  1262. X--- 539,545 ----
  1263. X  extern char txt_yes[];
  1264. X  extern char txt_you_have_mail[];
  1265. X  
  1266. X+ extern int _hp_glitch;
  1267. X  extern int unread_art_mark;
  1268. X  extern int hot_art_mark;
  1269. X  extern int return_art_mark;
  1270. X***************
  1271. X*** 554,559 ****
  1272. X--- 575,581 ----
  1273. X  extern int draw_arrow_mark;
  1274. X  extern int force_screen_redraw;
  1275. X  extern int full_page_scroll;
  1276. X+ extern int groupname_max_length;
  1277. X  extern int group_hash[TABLE_SIZE];
  1278. X  extern int group_top;
  1279. X  extern int groupname_len;
  1280. X***************
  1281. X*** 560,565 ****
  1282. X--- 582,588 ----
  1283. X  extern int index_file_killed;
  1284. X  extern int inn_nntp_server;
  1285. X  extern int inverse_okay;
  1286. X+ extern int use_keypad;
  1287. X  extern int killed_articles;
  1288. X  extern int kill_level;
  1289. X  extern int local_index;
  1290. X***************
  1291. X*** 585,590 ****
  1292. X--- 608,614 ----
  1293. X  extern int post_article_and_exit;
  1294. X  extern int pos_first_unread;
  1295. X  extern int print_header;
  1296. X+ extern int purge_index_files;
  1297. X  extern int process_id;
  1298. X  extern int read_local_newsgroups_file;
  1299. X  extern int read_news_via_nntp;
  1300. X***************
  1301. X*** 599,604 ****
  1302. X--- 623,629 ----
  1303. X  extern int show_description;
  1304. X  extern int show_last_line_prev_page;
  1305. X  extern int show_only_unread_groups;
  1306. X+ extern int slow_speed_terminal;
  1307. X  extern int space_mode;
  1308. X  extern int spooldir_is_active;
  1309. X  extern int start_editor_offset;
  1310. X***************
  1311. X*** 611,616 ****
  1312. X--- 636,642 ----
  1313. X  extern int top_base;
  1314. X  extern int unlink_article;
  1315. X  extern int update;
  1316. X+ extern int use_builtin_inews;
  1317. X  extern int verbose;
  1318. X  extern int update_fork;
  1319. X  extern int check_any_unread;
  1320. X***************
  1321. X*** 631,637 ****
  1322. X  extern struct spooldir_t *spooldirs;
  1323. X  extern struct screen_t *screen;
  1324. X  
  1325. X! #ifdef POSIX_JOB_CONTROL
  1326. X  extern struct sigaction art_act;
  1327. X  extern struct sigaction group_act;
  1328. X  extern struct sigaction kill_act;
  1329. X--- 657,663 ----
  1330. X  extern struct spooldir_t *spooldirs;
  1331. X  extern struct screen_t *screen;
  1332. X  
  1333. X! #ifdef HAVE_POSIX_JC
  1334. X  extern struct sigaction art_act;
  1335. X  extern struct sigaction group_act;
  1336. X  extern struct sigaction kill_act;
  1337. Xdiff -rcs ../1.16/feed.c ./feed.c
  1338. X*** ../1.16/feed.c    Sun Nov 15 18:41:48 1992
  1339. X--- ./feed.c    Sun Nov 15 16:02:48 1992
  1340. X***************
  1341. X*** 3,9 ****
  1342. X   *  Module    : feed.c
  1343. X   *  Author    : I.Lea
  1344. X   *  Created   : 31-08-91
  1345. X!  *  Updated   : 13-09-92
  1346. X   *  Notes     : provides same interface to mail,pipe,print and save commands
  1347. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  1348. X   *              You may  freely  copy or  redistribute  this software,
  1349. X--- 3,9 ----
  1350. X   *  Module    : feed.c
  1351. X   *  Author    : I.Lea
  1352. X   *  Created   : 31-08-91
  1353. X!  *  Updated   : 01-11-92
  1354. X   *  Notes     : provides same interface to mail,pipe,print and save commands
  1355. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea
  1356. X   *              You may  freely  copy or  redistribute  this software,
  1357. X***************
  1358. X*** 15,21 ****
  1359. X  #include    "tin.h"
  1360. X  
  1361. X  extern char *glob_group;        /* Group name */
  1362. X! extern char note_h_date[LEN];        /* Date:    */
  1363. X  extern char note_h_newsgroups[LEN];    /* Newsgroups:    */
  1364. X  extern char note_h_subj[LEN];        /* Subject:    */
  1365. X  extern FILE *note_fp;            /* the body of the current article */
  1366. X--- 15,21 ----
  1367. X  #include    "tin.h"
  1368. X  
  1369. X  extern char *glob_group;        /* Group name */
  1370. X! extern char note_h_date[PATH_LEN];    /* Date:    */
  1371. X  extern char note_h_newsgroups[LEN];    /* Newsgroups:    */
  1372. X  extern char note_h_subj[LEN];        /* Subject:    */
  1373. X  extern FILE *note_fp;            /* the body of the current article */
  1374. X***************
  1375. X*** 46,51 ****
  1376. X--- 46,52 ----
  1377. X      char group[LEN];
  1378. X      char mailbox[LEN];
  1379. X      char pattern[LEN];
  1380. X+     char path[PATH_LEN];
  1381. X      char proc_ch = proc_ch_default;
  1382. X      FILE *fp = (FILE *) 0;
  1383. X      int ch = 'a', ch_default = 'a';
  1384. X***************
  1385. X*** 89,94 ****
  1386. X--- 90,97 ----
  1387. X          ch_default = 'a';
  1388. X      }
  1389. X  
  1390. X+     i = my_group[cur_groupnum];
  1391. X+ 
  1392. X      if ((default_auto_save == FALSE || arts[respnum].archive == (char *) 0) ||
  1393. X          (default_auto_save == TRUE && function != FEED_SAVE) ||
  1394. X          ch_default == 'T') {
  1395. X***************
  1396. X*** 103,112 ****
  1397. X          filename[0] = '\0';
  1398. X          ch = ch_default;
  1399. X          if (proc_ch != 'n') {
  1400. X              if (str_str (glob_group, "sources", 7)) {
  1401. X!                 proc_ch = 's';        /* *source* group */ 
  1402. X              } else if (str_str (glob_group, "binaries", 8)) {
  1403. X!                 proc_ch = 'u';        /* *binaries* group */
  1404. X              } else {
  1405. X                  proc_ch = 's';
  1406. X              }
  1407. X--- 106,121 ----
  1408. X          filename[0] = '\0';
  1409. X          ch = ch_default;
  1410. X          if (proc_ch != 'n') {
  1411. X+             /* 
  1412. X+              *  Set up default for *source* / *binaries* group
  1413. X+              */
  1414. X              if (str_str (glob_group, "sources", 7)) {
  1415. X!                 proc_ch = 's';        
  1416. X              } else if (str_str (glob_group, "binaries", 8)) {
  1417. X!                 proc_ch = get_post_proc_type (active[i].attribute.post_proc_type);
  1418. X!                 if (proc_ch < POST_PROC_UUDECODE) {
  1419. X!                     proc_ch = 'u';
  1420. X!                 }
  1421. X              } else {
  1422. X                  proc_ch = 's';
  1423. X              }
  1424. X***************
  1425. X*** 188,194 ****
  1426. X                      cmd_line_printer, REDIRECT_OUTPUT);
  1427. X              } else {
  1428. X                  sprintf (command, "%s %s",
  1429. X!                     printer, REDIRECT_OUTPUT);
  1430. X              }
  1431. X              break;
  1432. X          case FEED_SAVE:        /* ask user for filename */
  1433. X--- 197,203 ----
  1434. X                      cmd_line_printer, REDIRECT_OUTPUT);
  1435. X              } else {
  1436. X                  sprintf (command, "%s %s",
  1437. X!                     active[i].attribute.printer, REDIRECT_OUTPUT);
  1438. X              }
  1439. X              break;
  1440. X          case FEED_SAVE:        /* ask user for filename */
  1441. X***************
  1442. X*** 244,250 ****
  1443. X                          MoveCursor (LINES, (int) strlen (msg)-1);
  1444. X                          if ((proc_ch = ReadCh ()) == CR)
  1445. X                              proc_ch = proc_ch_default;
  1446. X!                     } while (! strchr ("nqsuU\033", proc_ch));
  1447. X                      if (proc_ch == 'q' || proc_ch == ESC) {    /* exit */
  1448. X                          clear_message ();
  1449. X                          return;
  1450. X--- 253,259 ----
  1451. X                          MoveCursor (LINES, (int) strlen (msg)-1);
  1452. X                          if ((proc_ch = ReadCh ()) == CR)
  1453. X                              proc_ch = proc_ch_default;
  1454. X!                     } while (! strchr ("eElLnqsu\033", proc_ch));
  1455. X                      if (proc_ch == 'q' || proc_ch == ESC) {    /* exit */
  1456. X                          clear_message ();
  1457. X                          return;
  1458. X***************
  1459. X*** 279,292 ****
  1460. X      switch (ch) {
  1461. X          case 'a':        /* article */
  1462. X              if (level == GROUP_LEVEL) {
  1463. X!                 note_page = art_open (arts[respnum].artnum, group_path);    
  1464. X!                 if (note_page == ART_UNAVAILABLE) {
  1465. X                      break;
  1466. X                  }
  1467. X              }
  1468. X              switch (function) {
  1469. X                  case FEED_MAIL:
  1470. X!                     redraw_screen = mail_to_someone (address, FALSE, TRUE, &processed_ok);
  1471. X                      break;
  1472. X                  case FEED_PIPE:
  1473. X                      fseek (note_fp, 0L, 0);
  1474. X--- 288,300 ----
  1475. X      switch (ch) {
  1476. X          case 'a':        /* article */
  1477. X              if (level == GROUP_LEVEL) {
  1478. X!                 if (! does_article_exist (function, arts[respnum].artnum, group_path)) {
  1479. X                      break;
  1480. X                  }
  1481. X              }
  1482. X              switch (function) {
  1483. X                  case FEED_MAIL:
  1484. X!                     redraw_screen = mail_to_someone (respnum, address, FALSE, TRUE, &processed_ok);
  1485. X                      break;
  1486. X                  case FEED_PIPE:
  1487. X                      fseek (note_fp, 0L, 0);
  1488. X***************
  1489. X*** 296,303 ****
  1490. X                      processed_ok = print_file (command, respnum, 1);
  1491. X                      break;
  1492. X                  case FEED_SAVE:
  1493. X!                     add_to_save_list (0, &arts[respnum], is_mailbox, filename);
  1494. X!                     processed_ok = save_art_to_file (respnum, 0, FALSE, "");
  1495. X                      break;
  1496. X                  case FEED_XPOST:
  1497. X                      redraw_screen = crosspost_article (group, respnum);
  1498. X--- 304,314 ----
  1499. X                      processed_ok = print_file (command, respnum, 1);
  1500. X                      break;
  1501. X                  case FEED_SAVE:
  1502. X!                     note_page = art_open (arts[respnum].artnum, group_path);
  1503. X!                     if (note_page != ART_UNAVAILABLE) {
  1504. X!                         add_to_save_list (0, &arts[respnum], is_mailbox, TRUE, filename);
  1505. X!                         processed_ok = save_art_to_file (respnum, 0, FALSE, "");
  1506. X!                     }
  1507. X                      break;
  1508. X                  case FEED_XPOST:
  1509. X                      redraw_screen = crosspost_article (group, respnum);
  1510. X***************
  1511. X*** 322,335 ****
  1512. X                  if (level == PAGE_LEVEL) {
  1513. X                      art_close ();
  1514. X                  }
  1515. X!                 note_page = art_open (arts[i].artnum, group_path);    
  1516. X!                 if (note_page == ART_UNAVAILABLE) {
  1517. X                      continue;
  1518. X!                 }    
  1519. X                  switch (function) {
  1520. X                      case FEED_MAIL:
  1521. X                          processed_ok = TRUE;    
  1522. X!                         mail_to_someone (address, FALSE, confirm, &processed_ok);
  1523. X                          confirm = FALSE;
  1524. X                          break;
  1525. X                      case FEED_PIPE:
  1526. X--- 333,345 ----
  1527. X                  if (level == PAGE_LEVEL) {
  1528. X                      art_close ();
  1529. X                  }
  1530. X!                 if (! does_article_exist (function, arts[i].artnum, group_path)) {
  1531. X                      continue;
  1532. X!                 }
  1533. X                  switch (function) {
  1534. X                      case FEED_MAIL:
  1535. X                          processed_ok = TRUE;    
  1536. X!                         mail_to_someone (respnum, address, FALSE, confirm, &processed_ok);
  1537. X                          confirm = FALSE;
  1538. X                          break;
  1539. X                      case FEED_PIPE:
  1540. X***************
  1541. X*** 340,346 ****
  1542. X                          processed_ok = print_file (command, i, processed+1);
  1543. X                          break;
  1544. X                      case FEED_SAVE:
  1545. X!                         add_to_save_list (i, &arts[i], is_mailbox, filename);
  1546. X                          break;
  1547. X                      case FEED_XPOST:
  1548. X                          redraw_screen = crosspost_article (group, i);
  1549. X--- 350,356 ----
  1550. X                          processed_ok = print_file (command, i, processed+1);
  1551. X                          break;
  1552. X                      case FEED_SAVE:
  1553. X!                         add_to_save_list (i, &arts[i], is_mailbox, TRUE, filename);
  1554. X                          break;
  1555. X                      case FEED_XPOST:
  1556. X                          redraw_screen = crosspost_article (group, i);
  1557. X***************
  1558. X*** 370,383 ****
  1559. X                          if (level == PAGE_LEVEL) {
  1560. X                              art_close ();
  1561. X                          }
  1562. X!                         note_page = art_open (arts[j].artnum, group_path);    
  1563. X!                         if (note_page == ART_UNAVAILABLE) {
  1564. X                              continue;
  1565. X                          }    
  1566. X                          switch (function) {
  1567. X                              case FEED_MAIL:
  1568. X                                  processed_ok = TRUE;
  1569. X!                                 mail_to_someone (address, FALSE, confirm, &processed_ok);
  1570. X                                  confirm = FALSE;
  1571. X                                  break;
  1572. X                              case FEED_PIPE:
  1573. X--- 380,392 ----
  1574. X                          if (level == PAGE_LEVEL) {
  1575. X                              art_close ();
  1576. X                          }
  1577. X!                         if (! does_article_exist (function, arts[j].artnum, group_path)) {
  1578. X                              continue;
  1579. X                          }    
  1580. X                          switch (function) {
  1581. X                              case FEED_MAIL:
  1582. X                                  processed_ok = TRUE;
  1583. X!                                 mail_to_someone (respnum, address, FALSE, confirm, &processed_ok);
  1584. X                                  confirm = FALSE;
  1585. X                                  break;
  1586. X                              case FEED_PIPE:
  1587. X***************
  1588. X*** 388,394 ****
  1589. X                                  processed_ok = print_file (command, j, processed+1);
  1590. X                                  break;
  1591. X                              case FEED_SAVE:
  1592. X!                                 add_to_save_list (j, &arts[j], is_mailbox, filename);
  1593. X                                  break;
  1594. X                              case FEED_XPOST:
  1595. X                                  redraw_screen = crosspost_article (group, j);
  1596. X--- 397,403 ----
  1597. X                                  processed_ok = print_file (command, j, processed+1);
  1598. X                                  break;
  1599. X                              case FEED_SAVE:
  1600. X!                                 add_to_save_list (j, &arts[j], is_mailbox, TRUE, filename);
  1601. X                                  break;
  1602. X                              case FEED_XPOST:
  1603. X                                  redraw_screen = crosspost_article (group, j);
  1604. X***************
  1605. X*** 417,422 ****
  1606. X--- 426,432 ----
  1607. X              confirm = TRUE;
  1608. X              for (i = 0 ; i < top_base ; i++) {
  1609. X                  for (j = (int) base[i]; j >= 0; j = arts[j].thread) {
  1610. X+                     proceed = FALSE;
  1611. X                      if (ch == 'p') {
  1612. X                          if (STR_MATCH(arts[j].subject, pattern)) {
  1613. X                              proceed = TRUE;
  1614. X***************
  1615. X*** 425,442 ****
  1616. X                          proceed = TRUE;
  1617. X                      }                
  1618. X                      if (proceed) {
  1619. X-                         proceed = FALSE;
  1620. X                          if (level == PAGE_LEVEL) {
  1621. X                              art_close ();
  1622. X                          }
  1623. X!                         note_page = art_open (arts[j].artnum, group_path);    
  1624. X!                         if (note_page == ART_UNAVAILABLE) {
  1625. X                              continue;
  1626. X                          }    
  1627. X                          switch (function) {
  1628. X                              case FEED_MAIL:
  1629. X                                  processed_ok = TRUE;
  1630. X!                                 mail_to_someone (address, FALSE, confirm, &processed_ok);
  1631. X                                  /* confirm = FALSE; */
  1632. X                                  break;
  1633. X                              case FEED_PIPE:
  1634. X--- 435,450 ----
  1635. X                          proceed = TRUE;
  1636. X                      }                
  1637. X                      if (proceed) {
  1638. X                          if (level == PAGE_LEVEL) {
  1639. X                              art_close ();
  1640. X                          }
  1641. X!                         if (! does_article_exist (function, arts[j].artnum, group_path)) {
  1642. X                              continue;
  1643. X                          }    
  1644. X                          switch (function) {
  1645. X                              case FEED_MAIL:
  1646. X                                  processed_ok = TRUE;
  1647. X!                                 mail_to_someone (respnum, address, FALSE, confirm, &processed_ok);
  1648. X                                  /* confirm = FALSE; */
  1649. X                                  break;
  1650. X                              case FEED_PIPE:
  1651. X***************
  1652. X*** 447,454 ****
  1653. X                                  processed_ok = print_file (command, j, processed+1);
  1654. X                                  break;
  1655. X                              case FEED_SAVE:
  1656. X!                                 sprintf (filename, "%s.%02d", filename, processed+1);
  1657. X!                                 add_to_save_list (0, &arts[j], is_mailbox, filename);
  1658. X                                  processed_ok = save_art_to_file (respnum, 0, FALSE, "");
  1659. X                                  break;
  1660. X                              case FEED_XPOST:
  1661. X--- 455,466 ----
  1662. X                                  processed_ok = print_file (command, j, processed+1);
  1663. X                                  break;
  1664. X                              case FEED_SAVE:
  1665. X!                                 if (! is_mailbox) {
  1666. X!                                     sprintf (path, "%s.%02d", filename, processed+1);
  1667. X!                                 }
  1668. X! sprintf (msg, "subj=[%s] is_mailbox=[%d] path=[%s]", arts[j].subject, is_mailbox, path);
  1669. X! error_message (msg, "");
  1670. X!                                 add_to_save_list (0, &arts[j], is_mailbox, FALSE, path);
  1671. X                                  processed_ok = save_art_to_file (respnum, 0, FALSE, "");
  1672. X                                  break;
  1673. X                              case FEED_XPOST:
  1674. X***************
  1675. X*** 531,537 ****
  1676. X          }
  1677. X      } else {
  1678. X          if (redraw_screen) {
  1679. X!             show_group_page (glob_group);
  1680. X          }
  1681. X      }
  1682. X      if (function == FEED_MAIL) {    
  1683. X--- 543,549 ----
  1684. X          }
  1685. X      } else {
  1686. X          if (redraw_screen) {
  1687. X!             show_group_page ();
  1688. X          }
  1689. X      }
  1690. X      if (function == FEED_MAIL) {    
  1691. X***************
  1692. X*** 586,588 ****
  1693. X--- 598,665 ----
  1694. X      
  1695. X      return (TRUE);    /* a hack that will check if file was really checked later */
  1696. X  }                        
  1697. X+ 
  1698. X+ 
  1699. X+ int get_post_proc_type (proc_type)
  1700. X+     int proc_type;
  1701. X+ {
  1702. X+     int type;
  1703. X+         
  1704. X+      switch (proc_type) {
  1705. X+          case POST_PROC_SHAR:
  1706. X+              type = 's';
  1707. X+              break;
  1708. X+          case POST_PROC_UUDECODE:
  1709. X+              type = 'u';
  1710. X+              break;
  1711. X+          case POST_PROC_UUD_LST_ZOO:
  1712. X+              type = 'l';
  1713. X+              break;
  1714. X+          case POST_PROC_UUD_EXT_ZOO:
  1715. X+              type = 'e';
  1716. X+              break;
  1717. X+          case POST_PROC_UUD_LST_ZIP:
  1718. X+              type = 'L';
  1719. X+              break;
  1720. X+          case POST_PROC_UUD_EXT_ZIP:
  1721. X+              type = 'E';
  1722. X+              break;
  1723. X+          case POST_PROC_NONE:
  1724. X+          default:
  1725. X+              type = 'n';
  1726. X+              break;
  1727. X+      }
  1728. X+      
  1729. X+     return type; 
  1730. X+ }
  1731. X+ 
  1732. X+ /*
  1733. X+  * Opening an article here & also later in the save
  1734. X+  * routine is a real performance (bandwidth) killer
  1735. X+  * as both times the art will be transfered (Ouch!)
  1736. X+  *
  1737. X+  * So if function is to save an article only stat 
  1738. X+  * it the first time which saves a lot and almost
  1739. X+  * gets us the elusive free lunch!
  1740. X+  */
  1741. X+ 
  1742. X+ int does_article_exist (function, artnum, path)
  1743. X+     int function;
  1744. X+     long artnum;
  1745. X+     char *path;
  1746. X+ {
  1747. X+     int retcode = FALSE;
  1748. X+ 
  1749. X+     if (function == FEED_SAVE) {
  1750. X+         if (stat_article (artnum, path)) {
  1751. X+             retcode = TRUE;
  1752. X+         }
  1753. X+     } else { 
  1754. X+         note_page = art_open (artnum, path);    
  1755. X+         if (note_page != ART_UNAVAILABLE) {
  1756. X+             retcode = TRUE;
  1757. X+         }    
  1758. X+     }
  1759. X+     
  1760. X+     return retcode;
  1761. X+ }
  1762. XFiles ../1.16/getline.c and ./getline.c are identical
  1763. Xdiff -rcs ../1.16/group.c ./group.c
  1764. X*** ../1.16/group.c    Sun Nov 15 18:41:50 1992
  1765. X--- ./group.c    Sun Nov 15 16:02:48 1992
  1766. X***************
  1767. X*** 3,9 ****
  1768. X   *  Module    : group.c
  1769. X   *  Author    : I.Lea & R.Skrenta
  1770. X   *  Created   : 01-04-91
  1771. X!  *  Updated   : 06-09-92
  1772. X   *  Notes     :
  1773. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  1774. X   *              You may  freely  copy or  redistribute  this software,
  1775. X--- 3,9 ----
  1776. X   *  Module    : group.c
  1777. X   *  Author    : I.Lea & R.Skrenta
  1778. X   *  Created   : 01-04-91
  1779. X!  *  Updated   : 07-11-92
  1780. X   *  Notes     :
  1781. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  1782. X   *              You may  freely  copy or  redistribute  this software,
  1783. X***************
  1784. X*** 17,27 ****
  1785. X  #define MARK_OFFSET    8
  1786. X  
  1787. X  extern char cvers[LEN];
  1788. X  extern int last_resp;        /* page.c */
  1789. X  extern int this_resp;        /* page.c */
  1790. X  extern int note_page;        /* page.c */
  1791. X- extern char proc_ch_type;    /* feed.c */
  1792. X- extern char _hp_glitch;        /* curses.c */
  1793. X  
  1794. X  char *glob_group;
  1795. X  int index_point;
  1796. X--- 17,26 ----
  1797. X  #define MARK_OFFSET    8
  1798. X  
  1799. X  extern char cvers[LEN];
  1800. X+ extern char proc_ch_type;    /* feed.c */
  1801. X  extern int last_resp;        /* page.c */
  1802. X  extern int this_resp;        /* page.c */
  1803. X  extern int note_page;        /* page.c */
  1804. X  
  1805. X  char *glob_group;
  1806. X  int index_point;
  1807. X***************
  1808. X*** 65,71 ****
  1809. X      char group_path[LEN];
  1810. X       char buf[128];
  1811. X       char pat[128];
  1812. X-     char *p;
  1813. X      int ch;
  1814. X      int dummy = 0;
  1815. X      int flag, i;
  1816. X--- 64,69 ----
  1817. X***************
  1818. X*** 86,122 ****
  1819. X      active[my_group[cur_groupnum]].attribute.read_during_session = TRUE;
  1820. X      show_author = active[my_group[cur_groupnum]].attribute.show_author;
  1821. X  
  1822. X!      switch (active[my_group[cur_groupnum]].attribute.post_proc_type) {
  1823. X!          case POST_PROC_SHAR:
  1824. X!              proc_ch_default = 's';
  1825. X!              break;
  1826. X!          case POST_PROC_UUDECODE:
  1827. X!              proc_ch_default = 'u';
  1828. X!              break;
  1829. X!          case POST_PROC_UUD_LST_ZOO:
  1830. X!              proc_ch_default = 'U';
  1831. X!              break;
  1832. X!          case POST_PROC_UUD_EXT_ZOO:
  1833. X!              proc_ch_default = 'U';
  1834. X!              break;
  1835. X!          case POST_PROC_NONE:
  1836. X!          default:
  1837. X!              proc_ch_default = 'n';
  1838. X!              break;
  1839. X!      }
  1840. X  
  1841. X      glob_group = group;
  1842. X      sav_groupnum = cur_groupnum;
  1843. X      num_of_tagged_arts = 0;
  1844. X      
  1845. X!     strcpy (group_path, group);        /* turn comp.unix.amiga into */
  1846. X!     for (p = group_path; *p; p++)        /* comp/unix/amiga */
  1847. X!         if (*p == '.')
  1848. X!             *p = '/';
  1849. X  
  1850. X      last_resp = -1;
  1851. X      this_resp = -1;
  1852. X!     index_group (group, group_path);    /* update index file */
  1853. X      
  1854. X      if (space_mode) {
  1855. X          for (i = 0; i < top_base; i++) {
  1856. X--- 84,106 ----
  1857. X      active[my_group[cur_groupnum]].attribute.read_during_session = TRUE;
  1858. X      show_author = active[my_group[cur_groupnum]].attribute.show_author;
  1859. X  
  1860. X!      proc_ch_default = get_post_proc_type (active[my_group[cur_groupnum]].attribute.post_proc_type);
  1861. X  
  1862. X      glob_group = group;
  1863. X      sav_groupnum = cur_groupnum;
  1864. X      num_of_tagged_arts = 0;
  1865. X      
  1866. X!     make_group_path (group, group_path);
  1867. X  
  1868. X      last_resp = -1;
  1869. X      this_resp = -1;
  1870. X!     
  1871. X!     /* 
  1872. X!      * update index file. quit group level if user aborts indexing
  1873. X!      */
  1874. X!     if (! index_group (group, group_path)) {
  1875. X!         return;
  1876. X!     }    
  1877. X      
  1878. X      if (space_mode) {
  1879. X          for (i = 0; i < top_base; i++) {
  1880. X***************
  1881. X*** 138,144 ****
  1882. X      
  1883. X      set_subj_from_size (COLS);
  1884. X      clear_note_area ();
  1885. X!     show_group_page (group);
  1886. X  
  1887. X      while (TRUE) {
  1888. X          ch = ReadCh ();
  1889. X--- 122,128 ----
  1890. X      
  1891. X      set_subj_from_size (COLS);
  1892. X      clear_note_area ();
  1893. X!     show_group_page ();
  1894. X  
  1895. X      while (TRUE) {
  1896. X          ch = ReadCh ();
  1897. X***************
  1898. X*** 175,181 ****
  1899. X                              erase_subject_arrow ();
  1900. X  #endif                    
  1901. X                              index_point = 0;
  1902. X!                             show_group_page (group);
  1903. X                          } else {
  1904. X                              erase_subject_arrow ();
  1905. X                              index_point = 0;
  1906. X--- 159,165 ----
  1907. X                              erase_subject_arrow ();
  1908. X  #endif                    
  1909. X                              index_point = 0;
  1910. X!                             show_group_page ();
  1911. X                          } else {
  1912. X                              erase_subject_arrow ();
  1913. X                              index_point = 0;
  1914. X***************
  1915. X*** 192,198 ****
  1916. X  #ifndef NO_SHELL_ESCAPE
  1917. X              case '!':
  1918. X                  shell_escape ();
  1919. X!                 show_group_page (group);
  1920. X                  break;
  1921. X  #endif
  1922. X  
  1923. X--- 176,182 ----
  1924. X  #ifndef NO_SHELL_ESCAPE
  1925. X              case '!':
  1926. X                  shell_escape ();
  1927. X!                 show_group_page ();
  1928. X                  break;
  1929. X  #endif
  1930. X  
  1931. X***************
  1932. X*** 207,213 ****
  1933. X                          erase_subject_arrow ();
  1934. X  #endif                    
  1935. X                          index_point = top_base - 1;
  1936. X!                         show_group_page (group);
  1937. X                      } else {
  1938. X                          erase_subject_arrow ();
  1939. X                          index_point = top_base - 1;
  1940. X--- 191,197 ----
  1941. X                          erase_subject_arrow ();
  1942. X  #endif                    
  1943. X                          index_point = top_base - 1;
  1944. X!                         show_group_page ();
  1945. X                      } else {
  1946. X                          erase_subject_arrow ();
  1947. X                          index_point = top_base - 1;
  1948. X***************
  1949. X*** 222,233 ****
  1950. X                      break;
  1951. X                  }
  1952. X                  index_point = show_page (this_resp, &dummy, group, group_path);
  1953. X!                 if (index_point < 0) {
  1954. X!                     space_mode = FALSE;
  1955. X!                     goto group_done;
  1956. X                  }
  1957. X-                 clear_note_area ();
  1958. X-                 show_group_page (group);
  1959. X                  break;
  1960. X  
  1961. X              case '|':    /* pipe article/thread/tagged arts to command */
  1962. X--- 206,222 ----
  1963. X                      break;
  1964. X                  }
  1965. X                  index_point = show_page (this_resp, &dummy, group, group_path);
  1966. X!                 if (index_point == -5) {
  1967. X!                     index_point = which_thread (this_resp);
  1968. X!                     clear_message ();
  1969. X!                 } else {
  1970. X!                     if (index_point < 0) {
  1971. X!                         space_mode = (index_point == -4);
  1972. X!                         goto group_done;
  1973. X!                     }
  1974. X!                     clear_note_area ();
  1975. X!                     show_group_page ();
  1976. X                  }
  1977. X                  break;
  1978. X  
  1979. X              case '|':    /* pipe article/thread/tagged arts to command */
  1980. X***************
  1981. X*** 251,266 ****
  1982. X                  }
  1983. X                  i = (int) base[index_point];
  1984. X                  index_point = show_page (i, &dummy, group, group_path);
  1985. X!                 if (index_point < 0) {
  1986. X!                     space_mode = FALSE;
  1987. X!                     goto group_done;
  1988. X                  }
  1989. X-                 clear_note_area ();
  1990. X-                 show_group_page (group);
  1991. X                  break;
  1992. X  
  1993. X              case '\t':    /* goto next unread article/group */
  1994. X! tab_pressed:            
  1995. X                   space_mode = TRUE;
  1996. X                  if (index_point < 0) {
  1997. X                      n =  -1;
  1998. X--- 240,260 ----
  1999. X                  }
  2000. X                  i = (int) base[index_point];
  2001. X                  index_point = show_page (i, &dummy, group, group_path);
  2002. X!                 if (index_point == -5) {
  2003. X!                     index_point = which_thread (i);
  2004. X!                     clear_message ();
  2005. X!                 } else {
  2006. X!                     if (index_point < 0) {
  2007. X!                         space_mode = (index_point == -4);
  2008. X!                         goto group_done;
  2009. X!                     }
  2010. X!                     clear_note_area ();
  2011. X!                     show_group_page ();
  2012. X                  }
  2013. X                  break;
  2014. X  
  2015. X              case '\t':    /* goto next unread article/group */
  2016. X! group_tab_pressed:            
  2017. X                   space_mode = TRUE;
  2018. X                  if (index_point < 0) {
  2019. X                      n =  -1;
  2020. X***************
  2021. X*** 281,291 ****
  2022. X                      goto group_done;
  2023. X                  }
  2024. X                  index_point = show_page (n, &dummy, group, group_path);
  2025. X!                 if (index_point < 0) {
  2026. X!                     goto group_done;
  2027. X!                 }    
  2028. X!                 clear_note_area ();
  2029. X!                 show_group_page (group);
  2030. X                  break;
  2031. X      
  2032. X              case ' ':        /* page down */
  2033. X--- 275,290 ----
  2034. X                      goto group_done;
  2035. X                  }
  2036. X                  index_point = show_page (n, &dummy, group, group_path);
  2037. X!                 if (index_point == -5) {
  2038. X!                     index_point = which_thread (n);
  2039. X!                     goto group_tab_pressed;    /* repeat TAB */
  2040. X!                 } else {
  2041. X!                     if (index_point < 0) {
  2042. X!                         goto group_done;
  2043. X!                     }    
  2044. X!                     clear_note_area ();
  2045. X!                     show_group_page ();
  2046. X!                 }
  2047. X                  break;
  2048. X      
  2049. X              case ' ':        /* page down */
  2050. X***************
  2051. X*** 296,310 ****
  2052. X                      break;
  2053. X                  }
  2054. X                  if (index_point == top_base - 1) {
  2055. X- #ifdef NO_LOOP_AROUND
  2056. X-                     break;
  2057. X- #else
  2058. X                      if (0 < first_subj_on_screen) {
  2059. X  #    ifndef USE_CLEARSCREEN
  2060. X                          erase_subject_arrow ();
  2061. X  #    endif                    
  2062. X                          index_point = 0;
  2063. X!                         show_group_page (group);
  2064. X                      } else {
  2065. X                          erase_subject_arrow ();
  2066. X                          index_point = 0;
  2067. X--- 295,306 ----
  2068. X                      break;
  2069. X                  }
  2070. X                  if (index_point == top_base - 1) {
  2071. X                      if (0 < first_subj_on_screen) {
  2072. X  #    ifndef USE_CLEARSCREEN
  2073. X                          erase_subject_arrow ();
  2074. X  #    endif                    
  2075. X                          index_point = 0;
  2076. X!                         show_group_page ();
  2077. X                      } else {
  2078. X                          erase_subject_arrow ();
  2079. X                          index_point = 0;
  2080. X***************
  2081. X*** 311,317 ****
  2082. X                          draw_subject_arrow ();
  2083. X                      }
  2084. X                      break;
  2085. X- #endif                    
  2086. X                  }
  2087. X                  erase_subject_arrow ();
  2088. X                  scroll_lines = (full_page_scroll ? NOTESLINES : NOTESLINES / 2);
  2089. X--- 307,312 ----
  2090. X***************
  2091. X*** 324,330 ****
  2092. X                  }
  2093. X                  if (index_point < first_subj_on_screen
  2094. X                  || index_point >= last_subj_on_screen)
  2095. X!                     show_group_page (group);
  2096. X                  else
  2097. X                      draw_subject_arrow ();
  2098. X                  break;
  2099. X--- 319,325 ----
  2100. X                  }
  2101. X                  if (index_point < first_subj_on_screen
  2102. X                  || index_point >= last_subj_on_screen)
  2103. X!                     show_group_page ();
  2104. X                  else
  2105. X                      draw_subject_arrow ();
  2106. X                  break;
  2107. X***************
  2108. X*** 343,349 ****
  2109. X                      find_base (my_group[cur_groupnum]);
  2110. X                      index_point = find_new_pos (old_top, old_artnum, index_point);
  2111. X                  }
  2112. X!                 show_group_page (group);
  2113. X                  break;
  2114. X  
  2115. X              case ctrl('L'):        /* redraw screen */
  2116. SHAR_EOF
  2117. true || echo 'restore of tin-1.17.patch failed'
  2118. fi
  2119. echo 'End of tin-1.17 part 3'
  2120. echo 'File tin-1.17.patch is continued in part 4'
  2121. echo 4 > _shar_seq_.tmp
  2122. exit 0
  2123.  
  2124. --
  2125. NAMES  Iain Lea    Iain.Lea%anl433.uucp@Germany.EU.net
  2126. SNAIL  Siemens AG, ANL A433SZ, Gruendlacher Str. 248, 8510 Fuerth, Germany.
  2127. PHONE  +49-911-3089-407 (work) +49-911-331963 (home) +49-911-3089-290 (FAX)  
  2128.