home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #27 / NN_1992_27.iso / spool / alt / sources / 2516 < prev    next >
Encoding:
Internet Message Format  |  1992-11-15  |  60.3 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 09/10)
  5. Message-ID: <1992Nov15.155413.20456@anl433.uucp>
  6. Date: 15 Nov 92 15:54:13 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: 2109
  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/part09
  16.  
  17. #!/bin/sh
  18. # this is tin.shar.09 (part 9 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" != 9; 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  Spooldir selection level, Group level, Thread level and Article level.
  40. X***************
  41. X*** 250,256 ****
  42. X  .ft P
  43. X  i.e.,
  44. X  .ft CW
  45. X! 1    +    3    Bnews sources?        iain@estevax.uucp
  46. X  2        1    This question has    ether@net
  47. X  .ti -.5i
  48. X  .ft P
  49. X--- 266,272 ----
  50. X  .ft P
  51. X  i.e.,
  52. X  .ft CW
  53. X! 1    +    3    Bnews sources?        iain@anl433.uucp
  54. X  2        1    This question has    ether@net
  55. X  .ti -.5i
  56. X  .ft P
  57. X***************
  58. X*** 311,317 ****
  59. X  .RE
  60. X  .SH "COMMON EDITING COMMANDS"
  61. X  An emacs style editing package allows the easy editing of input strings.
  62. X! An history list allows the easy re-use of previously entered strings.
  63. X  The following commands are available when editing a string:
  64. X  .PP
  65. X  .TP 10
  66. X--- 327,333 ----
  67. X  .RE
  68. X  .SH "COMMON EDITING COMMANDS"
  69. X  An emacs style editing package allows the easy editing of input strings.
  70. X! An history list allows the easy reuse of previously entered strings.
  71. X  The following commands are available when editing a string:
  72. X  .PP
  73. X  .TP 10
  74. X***************
  75. X*** 391,397 ****
  76. X  .TP
  77. X  \fBl\fP
  78. X  List and allow selection of the available spool directories.  This feature
  79. X! requires a special library to be linked with \fItin\fP to create \fIcdtin 
  80. X  which can then read news from an active news feed and also from multiple 
  81. X  CD-ROMs.
  82. X  .TP
  83. X--- 407,413 ----
  84. X  .TP
  85. X  \fBl\fP
  86. X  List and allow selection of the available spool directories.  This feature
  87. X! requires a special library to be linked with \fItin\fP to create \fIcdtin\fP 
  88. X  which can then read news from an active news feed and also from multiple 
  89. X  CD-ROMs.
  90. X  .TP
  91. X***************
  92. X*** 412,418 ****
  93. X  .TP
  94. X  \fBr\fP
  95. X  Toggle display of all subscribed to groups and just the subscribed to groups 
  96. X! containing unread articles.
  97. X  .TP
  98. X  \fBs\fP
  99. X  Subscribe to current group.
  100. X--- 428,435 ----
  101. X  .TP
  102. X  \fBr\fP
  103. X  Toggle display of all subscribed to groups and just the subscribed to groups 
  104. X! containing unread articles. Command has no effect if groups were read from
  105. X! the command line when \fItin\fP was started.
  106. X  .TP
  107. X  \fBs\fP
  108. X  Subscribe to current group.
  109. X***************
  110. X*** 486,492 ****
  111. X  Quit \fItin.
  112. X  .TP
  113. X  \fBv\fP
  114. X! Print \fItin version information.
  115. X  .SH "GROUP INDEX COMMANDS"
  116. X  .TP 10
  117. X  \fB4\fP
  118. X--- 503,509 ----
  119. X  Quit \fItin.
  120. X  .TP
  121. X  \fBv\fP
  122. X! Print \fItin\fP version information.
  123. X  .SH "GROUP INDEX COMMANDS"
  124. X  .TP 10
  125. X  \fB4\fP
  126. X***************
  127. X*** 589,595 ****
  128. X  Untag all articles that were tagged.
  129. X  .TP
  130. X  \fBv\fP
  131. X! Print \fItin version information.
  132. X  .TP
  133. X  \fBw\fP
  134. X  Post an article to current group.
  135. X--- 606,612 ----
  136. X  Untag all articles that were tagged.
  137. X  .TP
  138. X  \fBv\fP
  139. X! Print \fItin\fP version information.
  140. X  .TP
  141. X  \fBw\fP
  142. X  Post an article to current group.
  143. X***************
  144. X*** 682,691 ****
  145. X  \fBc\fP
  146. X  Mark thread as read after confirmation and return to previous level.
  147. X  .TP
  148. X- \fBC\fP
  149. X- Cancel current article.  It must have been posted by the same user.  The
  150. X- cancel message can be seen in the newsgroup 'control'.
  151. X- .TP
  152. X  \fBd\fP
  153. X  Toggle display to show just the subject or the subject and author.
  154. X  .TP
  155. X--- 699,704 ----
  156. X***************
  157. X*** 715,721 ****
  158. X  saving ('s') / crossposting ('x').
  159. X  .TP
  160. X  \fBv\fP
  161. X! Print \fItin version information.
  162. X  .TP
  163. X  \fBz\fP
  164. X  Mark current article in thread as unread.
  165. X--- 728,734 ----
  166. X  saving ('s') / crossposting ('x').
  167. X  .TP
  168. X  \fBv\fP
  169. X! Print \fItin\fP version information.
  170. X  .TP
  171. X  \fBz\fP
  172. X  Mark current article in thread as unread.
  173. X***************
  174. X*** 756,771 ****
  175. X  getting bugs fixed and features added/changed.
  176. X  .TP
  177. X  \fBc\fP
  178. X! Mark all articles as read with confirmation.
  179. X  .TP
  180. X  \fBd\fP
  181. X  Toggle rot-13 decoding for this article.
  182. X  .TP
  183. X  \fBf\fP
  184. X! Post a followup to current article.
  185. X  .TP
  186. X  \fBF\fP
  187. X! Post a followup with a copy of the current article included.
  188. X  .TP
  189. X  \fBh\fP
  190. X  Help screen of article page commands.
  191. X--- 769,793 ----
  192. X  getting bugs fixed and features added/changed.
  193. X  .TP
  194. X  \fBc\fP
  195. X! Mark all articles as read with confirmation and return to group selection 
  196. X! level.
  197. X  .TP
  198. X+ \fBC\fP
  199. X+ Mark current group as all read and goto next unread group in group
  200. X+ selection list.
  201. X+ .TP
  202. X  \fBd\fP
  203. X  Toggle rot-13 decoding for this article.
  204. X  .TP
  205. X+ \fBD\fP
  206. X+ Delete current article.  It must have been posted by the same user.  The
  207. X+ cancel message can be seen in the newsgroup 'control'.
  208. X+ .TP
  209. X  \fBf\fP
  210. X! Post a followup to the current article with a copy of the article included.
  211. X  .TP
  212. X  \fBF\fP
  213. X! Post a followup to the current article.
  214. X  .TP
  215. X  \fBh\fP
  216. X  Help screen of article page commands.
  217. X***************
  218. X*** 813,822 ****
  219. X  Quit \fItin.
  220. X  .TP
  221. X  \fBr\fP
  222. X! Reply through mail to author.
  223. X  .TP
  224. X  \fBR\fP
  225. X! Reply through mail to author with a copy of the current article included.
  226. X  .TP
  227. X  \fBs\fP
  228. X  Save current article / thread / auto selected (hot) articles / 
  229. X--- 835,845 ----
  230. X  Quit \fItin.
  231. X  .TP
  232. X  \fBr\fP
  233. X! Reply through mail to the author of the current article with a copy of the 
  234. X! article included.
  235. X  .TP
  236. X  \fBR\fP
  237. X! Reply through mail to the author of the current article.
  238. X  .TP
  239. X  \fBs\fP
  240. X  Save current article / thread / auto selected (hot) articles / 
  241. X***************
  242. X*** 834,840 ****
  243. X  saving ('s') / crossposting ('x').
  244. X  .TP
  245. X  \fBv\fP
  246. X! Print \fItin version information.
  247. X  .TP
  248. X  \fBw\fP
  249. X  Post an article to current group.
  250. X--- 857,863 ----
  251. X  saving ('s') / crossposting ('x').
  252. X  .TP
  253. X  \fBv\fP
  254. X! Print \fItin\fP version information.
  255. X  .TP
  256. X  \fBw\fP
  257. X  Post an article to current group.
  258. X***************
  259. X*** 924,930 ****
  260. X  \fBThread articles\fP
  261. X  If set ON articles will be threaded in all groups (default), otherwise
  262. X  articles will be shown unthreaded. Threading/unthreading is possible on
  263. X! a per group basis by setting the group attribute varaible 'thread_arts'
  264. X  to ON/OFF in the file \fI$HOME/.tin/attributes\fP.
  265. X  .TP
  266. X  \fBShow only unread\fP
  267. X--- 947,953 ----
  268. X  \fBThread articles\fP
  269. X  If set ON articles will be threaded in all groups (default), otherwise
  270. X  articles will be shown unthreaded. Threading/unthreading is possible on
  271. X! a per group basis by setting the group attribute variable 'thread_arts'
  272. X  to ON/OFF in the file \fI$HOME/.tin/attributes\fP.
  273. X  .TP
  274. X  \fBShow only unread\fP
  275. X***************
  276. X*** 952,962 ****
  277. X  .ti -\w'\(em'u
  278. X  \(emunpacking of multi-part uuencoded files.
  279. X  .ti -\w'\(em'u
  280. X! \(emunpacking of multi-part uuencoded files that produce a *.zoo archive
  281. X  whose contents is listed.
  282. X  .ti -\w'\(em'u
  283. X! \(emunpacking of multi-part uuencoded files that produce a *.zoo archive
  284. X  whose contents is extracted.
  285. X  .in -.5i
  286. X  .TP
  287. X  \fBSort articles by\fP
  288. X--- 975,997 ----
  289. X  .ti -\w'\(em'u
  290. X  \(emunpacking of multi-part uuencoded files.
  291. X  .ti -\w'\(em'u
  292. X! \(emunpacking of multi-part uuencoded files, which produce a *.zoo archive
  293. X! whose contents is listed.
  294. X! .ti -\w'\(em'u
  295. X! \(emunpacking of multi-part uuencoded files, which produce a *.zoo archive
  296. X! whose contents is extracted.
  297. X! .ti -\w'\(em'u
  298. X! \(emunpacking of multi-part uuencoded files, which produce a *.zip archive
  299. X  whose contents is listed.
  300. X  .ti -\w'\(em'u
  301. X! \(emunpacking of multi-part uuencoded files, which produce a *.zip archive
  302. X  whose contents is extracted.
  303. X+ .ti -\w'\(em'u
  304. X+ \(emunpacking of multi-part uuencoded files, which produce a *.lha archive
  305. X+ whose contents is listed (AmigaDOS version only).
  306. X+ .ti -\w'\(em'u
  307. X+ \(emunpacking of multi-part uuencoded files, which produce a *.lha archive
  308. X+ whose contents is extracted (AmigaDOS version only).
  309. X  .in -.5i
  310. X  .TP
  311. X  \fBSort articles by\fP
  312. X***************
  313. X*** 986,991 ****
  314. X--- 1021,1095 ----
  315. X  \fBPrinter\fP
  316. X  The printer program with options that is to be used to print
  317. X  articles.  Default is lpr for BSD machines and lp for SysV machines.
  318. X+ .SH "TINRC CONFIGURABLE VARIABLES"
  319. X+ The following variables are user configurable by editing \fI$HOME/.tin/tinrc\fP
  320. X+ directly. It is hoped to eventually provide a menu to allow the setting of the
  321. X+ most common variables. 
  322. X+ .TP 4
  323. X+ \fBbatch_save\fP
  324. X+ If set ON articles/threads will be saved in batch mode when save -S
  325. X+ or mail -M is specified on the command line. Default is OFF.
  326. X+ .TP 4
  327. X+ \fBdisplay_reading_prompt\fP
  328. X+ The prompt ``Reading...'' will be displayed when reading an article from a 
  329. X+ NNTP server to provide feedback to the user. Default is ON.
  330. X+ .TP 4
  331. X+ \fBforce_screen_redraw\fP
  332. X+ Specifies whether a screen redraw should always be done after certain 
  333. X+ external commands. Default is OFF.
  334. X+ .TP 4
  335. X+ \fBgroupname_max_length\fP
  336. X+ Maximum length of the names of newsgroups to be displayed so that more of the 
  337. X+ newgroup description can be displayed. Default is 132.
  338. X+ .TP 4
  339. X+ \fBdefault_sigfile\fP
  340. X+ The path that specifies the signature file to use when posting, following upto
  341. X+ or replying to an article. If the path is a directory then the signature will
  342. X+ be randomly generated from files that are in the specified directory.
  343. X+ Default is \fI$HOME/.Sig\fP.
  344. X+ .TP 4
  345. X+ \fBhot_art_mark\fP
  346. X+ The character used to show that an article/thread is auto-selected (hot). 
  347. X+ Default is '*'.
  348. X+ .TP 4
  349. X+ \fBquote_chars\fP
  350. X+ The character used in quoting included text to article followups and mail 
  351. X+ replys. The '_' character represents a blank character and is replaced 
  352. X+ with ' ' when read. Default is ':_'.
  353. X+ .TP 4
  354. X+ \fBreread_active_file_secs\fP
  355. X+ The news active file is reread at regular intervals to show if any new news 
  356. X+ has arrived. Default is 300 seconds.
  357. X+ .TP 4
  358. X+ \fBreturn_art_mark\fP
  359. X+ The character used to show that an article will return. Default is '-'.
  360. X+ .TP 4
  361. X+ \fBsave_to_mmdf_mailbox\fP
  362. X+ Allows articles to be saved to a MMDF style mailbox instead of mbox format.
  363. X+ Default is OFF unless reading news on SCO Unix which uses MMDF by default. 
  364. X+ .TP 4
  365. X+ \fBshow_last_line_prev_page\fP
  366. X+ The last line of the previous page will be displayed as the first line of 
  367. X+ next page. Default is OFF.
  368. X+ .TP 4
  369. X+ \fBslow_speed_terminal\fP
  370. X+ Strips the blanks from the end of each line therefore speeding up the display
  371. X+ when reading on a slow terminal or via modem. Default is OFF.
  372. X+ .TP 4
  373. X+ \fBtab_after_X_selection\fP
  374. X+ If enabled will automatically goto the first unread article after having
  375. X+ selected all hot articles and threads with the 'X' command at group index
  376. X+ level. Default is OFF.
  377. X+ .TP 4
  378. X+ \fBunread_art_mark\fP
  379. X+ The character used to show that an article has not been read. Default is '+'.
  380. X+ .TP 4
  381. X+ \fBuse_builtin_inews\fP
  382. X+ Allows the builtin NNTP inews to be enabled/disabled. Default is ON (enabled).
  383. X+ .TP 4
  384. X+ \fBuse_keypad\fP
  385. X+ Allows the scroll keys on the keypad to be enabled/disabled on supported 
  386. X+ terminals. Default is OFF.
  387. X  .SH "GROUP ATTRIBUTES"
  388. X  \fITin\fP allows certain attributes to be set on a per group basis. These
  389. X  group attributes are read from the file \fI$HOME/.tin/attributes\fP.
  390. X***************
  391. X*** 1000,1010 ****
  392. X  maildir=/usr/iain/Mail/sources
  393. X  savedir=/usr/iain/News/alt.sources
  394. X  sigfile=/usr/iain/.funny_sig
  395. X  followup_to=alt.sources.d
  396. X  auto_save=ON
  397. X! batch_save=ON
  398. X  delete_tmp_files=ON
  399. X! show_only_unread=ON
  400. X  thread_arts=ON
  401. X  show_author=1
  402. X  sort_art_type=5
  403. X--- 1104,1116 ----
  404. X  maildir=/usr/iain/Mail/sources
  405. X  savedir=/usr/iain/News/alt.sources
  406. X  sigfile=/usr/iain/.funny_sig
  407. X+ organization=Wacky Bits Inc.
  408. X  followup_to=alt.sources.d
  409. X+ printer=/usr/local/bin/a2ps -nn | /bin/lpr
  410. X  auto_save=ON
  411. X! batch_save=OFF
  412. X  delete_tmp_files=ON
  413. X! show_only_unread=OFF
  414. X  thread_arts=ON
  415. X  show_author=1
  416. X  sort_art_type=5
  417. X***************
  418. X*** 1017,1023 ****
  419. X  before the attributes are specified for that group.
  420. X  .PP
  421. X  All attributes are set to a reasonable default so you only have to
  422. X! specify the attribute that you want to change (ie. savedir).
  423. X  .PP
  424. X  All toggle attributes are set by specifying ON/OFF. 
  425. X  .PP
  426. X--- 1123,1129 ----
  427. X  before the attributes are specified for that group.
  428. X  .PP
  429. X  All attributes are set to a reasonable default so you only have to
  430. X! specify the attribute that you want to change (i.e., savedir).
  431. X  .PP
  432. X  All toggle attributes are set by specifying ON/OFF. 
  433. X  .PP
  434. X***************
  435. X*** 1029,1036 ****
  436. X  4=from ascending, 5=date descending, 6=date ascending.
  437. X  .PP
  438. X  The post_proc_type attribute is specified by a number from the following 
  439. X! range: 0=none, 1=shar, 2=uudecode, 3=uudecode & list zoo, 4=uudecode & 
  440. X! extract zoo.
  441. X  .SH "AUTOMATIC KILL AND SELECTION"
  442. X  When there is a subject or an author which you are either very
  443. X  interested in, or find completely uninteresting, you can easily
  444. X--- 1135,1144 ----
  445. X  4=from ascending, 5=date descending, 6=date ascending.
  446. X  .PP
  447. X  The post_proc_type attribute is specified by a number from the following 
  448. X! range: 0=none, 1=unshar, 2=uudecode, 3=uudecode & list zoo archive, 
  449. X! 4=uudecode & extract zoo archive, 5=uudecode & list zip archive, 
  450. X! 6=uudecode & extract zip archive. (note: if running on AmigaDOS the zoo
  451. X! options are replaced by there corresponding lha archiver options).
  452. X  .SH "AUTOMATIC KILL AND SELECTION"
  453. X  When there is a subject or an author which you are either very
  454. X  interested in, or find completely uninteresting, you can easily
  455. X***************
  456. X*** 1071,1087 ****
  457. X  posted to and the articles subject line are displayed.
  458. X  .PP
  459. X  Use the 'f' / 'F' command to post a follow-up article to an already
  460. X! posted article.  The 'F' command will copy the text of the original
  461. X  article into the editor.  The editing procedure is the same as when
  462. X  posting an article with the 'w' command.
  463. X  .PP
  464. X  Use the 'r' / 'R' command to reply direct through mail to the author
  465. X! of an already posted article.  The 'R' command will copy the text of
  466. X  the original article into the editor.  The editing procedure is the
  467. X  same as when posting an article with the 'w' command.  After saving
  468. X  and exiting the editor you are asked if you wish to a)bort sending
  469. X  the article, e)dit the article again or s)end the article to the
  470. X  author.
  471. X  .SH "MAILING PIPING PRINTING REPOSTING AND SAVING ARTICLES"
  472. X  The command interface to mail ('m'), pipe ('|'), print ('o'),
  473. X  crosspost ('x') and save ('s') articles is the same for ease of use.
  474. X--- 1179,1232 ----
  475. X  posted to and the articles subject line are displayed.
  476. X  .PP
  477. X  Use the 'f' / 'F' command to post a follow-up article to an already
  478. X! posted article.  The 'f' command will copy the text of the original
  479. X  article into the editor.  The editing procedure is the same as when
  480. X  posting an article with the 'w' command.
  481. X  .PP
  482. X  Use the 'r' / 'R' command to reply direct through mail to the author
  483. X! of an already posted article.  The 'r' command will copy the text of
  484. X  the original article into the editor.  The editing procedure is the
  485. X  same as when posting an article with the 'w' command.  After saving
  486. X  and exiting the editor you are asked if you wish to a)bort sending
  487. X  the article, e)dit the article again or s)end the article to the
  488. X  author.
  489. X+ .SH "CUSTOMIZING THE ARTICLE QUOTE STRING"
  490. X+ When posting a followup to an article or replying direct to the author
  491. X+ of an article via email the text of the article can be quoted. The 
  492. X+ beginning of the quoted text can contain information about the quoted
  493. X+ article (i.e., Name and the Message Id of the article). To allow for
  494. X+ different situations certain information from the article can be used 
  495. X+ in the quoted string. The following variables are expanded if found in 
  496. X+ the tinrc variables 'mail_quote_format=' or 'news_quote_format=':
  497. X+ .RS
  498. X+ .nf
  499. X+ .ta \w'%A  'u +\w'Address'u
  500. X+ \fB%A\fP    Address (Email)
  501. X+ \fB%D\fP    Date 
  502. X+ \fB%F\fP    Full address (%N (%A))
  503. X+ \fB%G\fP    Groupname
  504. X+ \fB%M\fP    Message Id
  505. X+ \fB%N\fP    Name of user
  506. X+ .fi
  507. X+ .RE
  508. X+ i.e.,
  509. X+ .RS
  510. X+ .nf
  511. X+ .ft CW
  512. X+ mail_quote_format=On %D in %G you wrote:
  513. X+ news_quote_format=In %M, %F wrote:
  514. X+ .ft P
  515. X+ .fi
  516. X+ .RE
  517. X+ would expand when used to:
  518. X+ .RS
  519. X+ .nf
  520. X+ .ft CW
  521. X+ On 21 Jul 1992 09:45:51 -0400 in alt.sources you wrote:
  522. X+ In <abcINN123@anl433.uucp>, Iain Lea (iain@anl433.uucp) wrote:
  523. X+ .ft P
  524. X+ .fi
  525. X+ .RE
  526. X  .SH "MAILING PIPING PRINTING REPOSTING AND SAVING ARTICLES"
  527. X  The command interface to mail ('m'), pipe ('|'), print ('o'),
  528. X  crosspost ('x') and save ('s') articles is the same for ease of use.
  529. X***************
  530. X*** 1147,1159 ****
  531. X  .RS
  532. X  .nf
  533. X  .ft CW
  534. X! NAME   Iain Lea
  535. X! EMAIL  Iain.Lea%anl433.uucp@Germany.EU.net
  536. X  SNAIL  Bruecken Strasse 12, 8500 Nuernberg 90, Germany
  537. X  PHONE  +49-911-331963 (home)  +49-911-3089-407 (work)
  538. X  .ft P
  539. X  .fi
  540. X  .RE
  541. X  .SH "ENVIROMENT VARIABLES"
  542. X  .TP
  543. X  \fBTINRC\fP
  544. X--- 1292,1312 ----
  545. X  .RS
  546. X  .nf
  547. X  .ft CW
  548. X! NAMES  Iain Lea    Iain.Lea%anl433.uucp@Germany.EU.net
  549. X  SNAIL  Bruecken Strasse 12, 8500 Nuernberg 90, Germany
  550. X  PHONE  +49-911-331963 (home)  +49-911-3089-407 (work)
  551. X  .ft P
  552. X  .fi
  553. X  .RE
  554. X+ \fITin\fP also has the capability to generate random signatures on a per
  555. X+ newsgroup basis if so desired. The way to accomplish this is to specify
  556. X+ the default signature or the group attribute sigfile as a directory.
  557. X+ If for example the sigfile path is \fI/usr/iain/.sigs\fP and \fI.sigs\fP is
  558. X+ a directory then \fItin\fP will select a random signature from any file that
  559. X+ is in the directory \fI.sigs\fP (note: one signature per numbered file). A 
  560. X+ random signature can also consist of a fixed part signature that can contain 
  561. X+ your name, address etc. followed by the random sig. The fixed part of the 
  562. X+ random sig is read from the file \fI$HOME/.sigfixed\fP.
  563. X  .SH "ENVIROMENT VARIABLES"
  564. X  .TP
  565. X  \fBTINRC\fP
  566. X***************
  567. X*** 1168,1173 ****
  568. X--- 1321,1331 ----
  569. X  \fI$HOME/.tin\fP. (i.e. if you want all tin's private files in \fI/tmp/.tin\fP
  570. X  you would set TINDIR to \fI/tmp\fP.
  571. X  .TP
  572. X+ \fBTIN_INDEX\fP
  573. X+ Define this variable if you do not want the .index directory in 
  574. X+ \fI$HOME/.tin/.index\fP. (i.e. if you want all tin's index files in
  575. X+ \fI/tmp/.index\fP you would set TIN_INDEX to \fI/tmp\fP.
  576. X+ .TP
  577. X  \fBNNTPSERVER\fP
  578. X  The default NNTP server to remotely read news from.  This variable only
  579. X  needs to be set if the -r command line option is specified and the file
  580. X***************
  581. X*** 1250,1257 ****
  582. X  contains user specified group attributes.
  583. X  .TP 2i
  584. X  \fI$HOME/.tin/.index\fP
  585. X! newsgroup index files directory.
  586. X  .TP 2i
  587. X  \fI$HOME/.tin/add_address\fP
  588. X  address to add to when replying through mail.
  589. X  .TP 2i
  590. X--- 1408,1427 ----
  591. X  contains user specified group attributes.
  592. X  .TP 2i
  593. X  \fI$HOME/.tin/.index\fP
  594. X! newsgroups index files directory.
  595. X! .TP 2i
  596. X! \fI$HOME/.tin/.mailidx\fP
  597. X! mailgroups index files directory.
  598. X! .TP 2i
  599. X! \fI$HOME/.tin/.saveidx\fP
  600. X! saved newsgroups index files directory.
  601. X! .TP 2i
  602. X! \fI$HOME/.tin/active.mail\fP
  603. X! active file of users mailgroups.
  604. X  .TP 2i
  605. X+ \fI$HOME/.tin/active.save\fP
  606. X+ active file of users saved newsgroups.
  607. X+ .TP 2i
  608. X  \fI$HOME/.tin/add_address\fP
  609. X  address to add to when replying through mail.
  610. X  .TP 2i
  611. X***************
  612. X*** 1259,1265 ****
  613. X  address to send bug reports to.
  614. X  .TP 2i
  615. X  \fI$HOME/.tin/kill\fP
  616. X! kill file.
  617. X  .TP 2i
  618. X  \fI$HOME/.tin/organization\fP
  619. X  string to replace default organization.
  620. X--- 1429,1435 ----
  621. X  address to send bug reports to.
  622. X  .TP 2i
  623. X  \fI$HOME/.tin/kill\fP
  624. X! article kill and auto-selection file.
  625. X  .TP 2i
  626. X  \fI$HOME/.tin/organization\fP
  627. X  string to replace default organization.
  628. X***************
  629. X*** 1275,1280 ****
  630. X--- 1445,1462 ----
  631. X  .TP 2i
  632. X  \fI$HOME/.Sig\fP
  633. X  signature.
  634. X+ .TP 2i
  635. X+ \fI$HOME/.sigfixed\fP
  636. X+ fixed part of a randomly generated signature.
  637. X+ .TP 2i
  638. X+ \fI/usr/lib/news/motd\fP
  639. X+ News message of the day file.
  640. X+ .TP 2i
  641. X+ \fI/usr/lib/news/newsgroups\fP
  642. X+ Short description of all newsgroups.
  643. X+ .TP 2i
  644. X+ \fI/usr/lib/news/subscriptions\fP
  645. X+ List of newsgroups to subscribe first time user to.
  646. X  .SH BUGS
  647. X  There are bugs somewhere among the creeping featurism.  Any bugs found
  648. X  should be reported by the 'B' (bug report) command.
  649. X***************
  650. X*** 1287,1292 ****
  651. X--- 1469,1476 ----
  652. X  .PP
  653. X  Coredumps when setting certain toggle options from the options menu at article
  654. X  viewer level.
  655. X+ .PP
  656. X+ Coredumps when killing last article in a thread at article viewer level.
  657. X  .SH HISTORY
  658. X  Based on the \fItass\fP newsreader that was developed by Rich Skrenta and 
  659. X  posted to alt.sources in March 1991.  Tass was itself heavily influenced by 
  660. X***************
  661. X*** 1322,1384 ****
  662. X  v1.1 PL5 (patch) was posted in 7 parts to alt.sources on 11 Aug 1992.
  663. X  .br
  664. X  v1.1 PL6 (full) was posted in 15 parts to alt.sources on 14 Sep 1992.
  665. X  .SH CREDITS
  666. X! .TP
  667. X  Rich Skrenta
  668. X  author of tass v3.2 which this newsreader used as its base.
  669. X! .TP
  670. X  Bill Davidsen
  671. X  author of envarg.c environment variable reading routine.
  672. X! .TP
  673. X  Rich Salz
  674. X  author of wildmat.c pattern matching and parsedate.y date parsing routines.
  675. X! .TP
  676. X  Dave Taylor
  677. X  author of curses.c from the elm mailreader.
  678. X! .TP
  679. X  Chris Thewalt
  680. X  author of getline.c emacs style editing routine.
  681. X! .TP
  682. X  Mark Tomlinson
  683. X! for porting \fItin\fP to the Commodore Amiga.
  684. X! .TP
  685. X  Dieter Becker
  686. X! for generously posting certain versions and patches for me when my net
  687. X  connection was removed by a group of very short sighted people.
  688. X  .PP
  689. X! I wish to thank the following people for supplying patchs:
  690. X  .PP
  691. X! Anton Aylward, Paul Bauwens, Dieter Becker, Dan Berry, Marc Boucher, 
  692. X! Leila Burrell-Davis, Peter Castro, Robert Claeson, Steven Cogswell, 
  693. X! Don Costello, Ned Danieley, Chris Davies, John Davis, Craig Durland, Kirk Edson,
  694. X! Rob Engle, Brent Ermlick, Olle Eriksson, Michael Faurot, Callum Gibson, Carl Hage,
  695. X! Paul Halsema, Ed Hanway, Scott Hauck, Daniel Hermans, Tom Hite, Torsten Homeyer,
  696. X! Steve Hunt, Robbin Johnson, Nelson Kading, Fritz Kleeman, Karl-Koenig Koenigsson,
  697. X! Martin Kraemer, Kris Kugel, Alex Lange, Hakan Lennestal, Clifford Luke, 
  698. X! David MacKenzie, Hugh Mahon, Sergio Morales, James Nugen, Jeb Palmer, Neil Parker,
  699. X! Tom Parry, Walter Pelissero, Bill Poitras, Wolfgang Prediger, Jim Robinson, 
  700. X! Stephen Roseman, Nickolay Saukh, Rich Salz, John Sauter, Bart Sears, 
  701. X  Karl-Olav Serrander, Doug Sewell, Steve Spearman, Cliff Stanford, Steve Starck, 
  702. X! Mark Tomlin, Michael Traub, Adri Verhoef, Paul Vickers, Cary Whitney, Greg Woods,
  703. X! Lloyd Wright
  704. X  .PP
  705. X  I wish to thank the following people for bug reports/comments:
  706. X  .PP
  707. X! Klaus Arzig, Scott Babb, Reiner Balling, Preston Bannister, Bill de Beabien,
  708. X! Volker Beyer, Etienne Bido, Roger Binns, Georg Biehler, Jean-Marc Bonnaudet,
  709. X! Eric Bowles, Sean Brady, Ian Brown, Andreas Brosig, Craig Bruce, Tom Czarnik, 
  710. X! Dave Datta, Mat Davis, David Donovan, Peter Dressler, Gerhard Ermer, Hugh Fader, 
  711. X! Joachim Feld, Paul Fox, Jay Geertsen, Bernhard Gmelch, Viet Hoang, Andy Jackson,
  712. X! Joe Johnson, Cyrill Jung, Kuo-Chein Kai, Hans-Juergen Knopp, Tom Kovar, 
  713. X! Bernhard Kroenung, Murray Laing, Marty Leisner, Per Lindqvist, Eric Litman, 
  714. X! Bob Lukas, Michael Marshall, Kazushi Marukawa, Phillip Molloy, Toni Metz, 
  715. X! Greg Miller, Deeptendu Majumder, Klaus Neuberger, Otto Niesser, Reiner Oelhaf,
  716. X! Alex Pakter, John Palkovic, Dave Pascoe, Wolf Paul, Andrew Phillips, Tim Pierce, 
  717. X! Stefan Rathmann, Ted Richards, David Ross, Jonas Rwgmyr, Daemon Schaefer, 
  718. X! John Schmitz, Dean Schrimpf, Klamer Schutte, Fredy Schwatz, Dave Schweisguth, 
  719. X! Bernd Schwerin, Don Sheythe, Chris Smith, Daniel Smith, Hironobu Takahashi, 
  720. X! Ken Taylor, Tony Travis, Paul Verket, Sven Werner, Paul Wood, Gregory Woodbury, 
  721. X! Orest Zboroski
  722. X  .SH AUTHOR
  723. X  .TP 1i
  724. X  Iain Lea
  725. X--- 1506,1581 ----
  726. X  v1.1 PL5 (patch) was posted in 7 parts to alt.sources on 11 Aug 1992.
  727. X  .br
  728. X  v1.1 PL6 (full) was posted in 15 parts to alt.sources on 14 Sep 1992.
  729. X+ .br
  730. X+ v1.1 PL7 (patch) was posted in 8 parts to alt.sources on ?? Oct 1992.
  731. X  .SH CREDITS
  732. X! .TP 1.5i
  733. X  Rich Skrenta
  734. X  author of tass v3.2 which this newsreader used as its base.
  735. X! .TP 1.5i
  736. X  Bill Davidsen
  737. X  author of envarg.c environment variable reading routine.
  738. X! .TP 1.5i
  739. X! Mike Gleason 
  740. X! author of sigfile.c random signature generation routines.
  741. X! .TP 1.5i
  742. X! Arnold Robbins
  743. X! author of strftime.c date formatting routine.
  744. X! .TP 1.5i
  745. X! Jim Robinson
  746. X! co-author of kill.c article kill and auto-selection routines.
  747. X! .TP 1.5i
  748. X  Rich Salz
  749. X  author of wildmat.c pattern matching and parsedate.y date parsing routines.
  750. X! .TP 1.5i
  751. X  Dave Taylor
  752. X  author of curses.c from the elm mailreader.
  753. X! .TP 1.5i
  754. X  Chris Thewalt
  755. X  author of getline.c emacs style editing routine.
  756. X! .TP 1.5i
  757. X  Mark Tomlinson
  758. X! for porting \fItin\fP to the Commodore AmigaDOS operating system.
  759. X! .TP 1.5i
  760. X  Dieter Becker
  761. X! for generously posting certain releases for me when my net
  762. X  connection was removed by a group of very short sighted people.
  763. X  .PP
  764. X! I wish to thank the following people for supplying patches:
  765. X  .PP
  766. X! Anton Aylward, Paul Bauwens, Dieter Becker, Dan Berry, Fokke de Boer, 
  767. X! Marc Boucher, Leila Burrell-Davis, Peter Castro, Robert Claeson, 
  768. X! Steven Cogswell, Don Costello, Ned Danieley, Chris Davies, John Davis, 
  769. X! Craig Durland, Kirk Edson, Rob Engle, Brent Ermlick, Olle Eriksson, 
  770. X! Michael Faurot, Werner Fleck, Callum Gibson, Carl Hage, Paul Halsema, Ed Hanway,
  771. X! Scott Hauck, Daniel Hermans, Tom Hite, Torsten Homeyer, Steve Hunt, Robbin Johnson,
  772. X! Nelson Kading, Fritz Kleeman, Karl-Koenig Koenigsson, Martin Kraemer, Kris Kugel, 
  773. X! Alex Lange, Hakan Lennestal, Clifford Luke, David MacKenzie, Hugh Mahon, 
  774. X! Sergio Morales, James Nugen, Jeb Palmer, Neil Parker, Tom Parry, Walter Pelissero, 
  775. X! Eric Peterson, Tim Pierce, Bill Poitras, Wolfgang Prediger, Jim Robinson, 
  776. X! Stephen Roseman, Nickolay Saukh, Rich Salz, John Sauter, John Schmitz, Bart Sears, 
  777. X  Karl-Olav Serrander, Doug Sewell, Steve Spearman, Cliff Stanford, Steve Starck, 
  778. X! Ed Sznyter, Andry Timonin, Mark Tomlin, Michael Traub, Adri Verhoef, 
  779. X! Paul Vickers, Cary Whitney, Greg Woods, Lloyd Wright
  780. X  .PP
  781. X  I wish to thank the following people for bug reports/comments:
  782. X  .PP
  783. X! Jack Applin, Klaus Arzig, Scott Babb, Reiner Balling, Preston Bannister, 
  784. X! Bill de Beabien, Volker Beyer, Etienne Bido, Roger Binns, Georg Biehler, 
  785. X! Jean-Marc Bonnaudet, Eric Bowles, Sean Brady, Ian Brown, Andreas Brosig, 
  786. X! Craig Bruce, Tom Czarnik, Dave Datta, Mat Davis, Klaus Dimmler, David Donovan,
  787. X! Peter Dressler, Gerhard Ermer, Hugh Fader, Miguel Farah, Joachim Feld, Paul Fox, 
  788. X! Jay Geertsen, Bernhard Gmelch, Jason Haar, Viet Hoang, Andy Jackson, Joe Johnson, 
  789. X! Cyrill Jung, Kuo-Chein Kai, Hans-Juergen Knopp, Tom Kovar, Bernhard Kroenung, 
  790. X! Murray Laing, Marty Leisner, Per Lindqvist, Eric Litman, Bob Lukas, Michael Marshall, 
  791. X! Kazushi Marukawa, Phillip Molloy, Toni Metz, Greg Miller, Deeptendu Majumder, 
  792. X! Klaus Neuberger, Otto Niesser, Reiner Oelhaf, Alex Pakter, John Palkovic, 
  793. X! Dave Pascoe, Wolf Paul, Andrew Phillips, Stefan Rathmann, Ted Richards, 
  794. X! David Ross, Jonas Rwgmyr, Daemon Schaefer, Dean Schrimpf, Klamer Schutte, Fredy Schwatz, 
  795. X! Dave Schweisguth, Bernd Schwerin, Don Sheythe, Chris Smith, Daniel Smith, 
  796. X! Hironobu Takahashi, Ken Taylor, Tony Travis, Paul Verket, Sven Werner, 
  797. X! Dick Wexelblat, Paul Wood, Gregory Woodbury, Blair Zajac, Orest Zboroski, 
  798. X! Thomas Ziegler
  799. X  .SH AUTHOR
  800. X  .TP 1i
  801. X  Iain Lea
  802. Xdiff -rcs ../1.16/tin.h ./tin.h
  803. X*** ../1.16/tin.h    Sun Nov 15 18:41:39 1992
  804. X--- ./tin.h    Sun Nov 15 16:02:48 1992
  805. X***************
  806. X*** 3,9 ****
  807. X   *  Module    : tin.h
  808. X   *  Author    : I.Lea & R.Skrenta
  809. X   *  Created   : 01-04-91
  810. X!  *  Updated   : 06-09-92
  811. X   *  Notes     : #include files, #defines & struct's
  812. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  813. X   *              You may  freely  copy or  redistribute  this software,
  814. X--- 3,9 ----
  815. X   *  Module    : tin.h
  816. X   *  Author    : I.Lea & R.Skrenta
  817. X   *  Created   : 01-04-91
  818. X!  *  Updated   : 05-11-92
  819. X   *  Notes     : #include files, #defines & struct's
  820. X   *  Copyright : (c) Copyright 1991-92 by Iain Lea & Rich Skrenta
  821. X   *              You may  freely  copy or  redistribute  this software,
  822. X***************
  823. X*** 32,37 ****
  824. X--- 32,38 ----
  825. X  #    else
  826. X  #        include <sys/types.h>
  827. X  #        include    <sys/stat.h>
  828. X+ #        include    <sys/time.h>
  829. X  #        include    <time.h>
  830. X  #        ifdef HAVE_UNISTD_H
  831. X  #            include    <unistd.h>
  832. X***************
  833. X*** 38,43 ****
  834. X--- 39,45 ----
  835. X  #        endif
  836. X  #    endif
  837. X  #    include    <pwd.h>
  838. X+ #    include <sys/param.h>
  839. X  #endif
  840. X  
  841. X  #include    <ctype.h>
  842. X***************
  843. X*** 81,86 ****
  844. X--- 83,96 ----
  845. X  #endif
  846. X  
  847. X  /*
  848. X+  * Needed for timeout in user abort of indexing a group
  849. X+  */
  850. X+ 
  851. X+ #ifdef HAVE_SYS_WAIT_H
  852. X+ #    include    <sys/wait.h>
  853. X+ #endif
  854. X+ 
  855. X+ /*
  856. X   * Needed for resizing under an xterm
  857. X   */
  858. X  
  859. X***************
  860. X*** 100,106 ****
  861. X  #                include <sys/tty.h>
  862. X  #            endif
  863. X  #            ifdef HAVE_SYS_PTY_H
  864. X! #                ifndef _h_BSDTYPES
  865. X  #                    include <sys/bsdtypes.h>
  866. X  #                endif
  867. X  #                include <sys/pty.h>
  868. X--- 110,116 ----
  869. X  #                include <sys/tty.h>
  870. X  #            endif
  871. X  #            ifdef HAVE_SYS_PTY_H
  872. X! #                if !defined(_h_BSDTYPES) && !defined(DONT_HAVE_SYS_BSDTYPES_H)
  873. X  #                    include <sys/bsdtypes.h>
  874. X  #                endif
  875. X  #                include <sys/pty.h>
  876. X***************
  877. X*** 110,115 ****
  878. X--- 120,161 ----
  879. X  #endif
  880. X  
  881. X  /*
  882. X+  * Directory handling code - Hopefully one of these is right for you. 
  883. X+  */
  884. X+ 
  885. X+ #ifdef BSD
  886. X+ #    ifdef sinix
  887. X+ #        include <dir.h>
  888. X+ #    else
  889. X+ #        ifdef __arm
  890. X+ #            include <dirent.h>
  891. X+ #            define    DIR_BUF    struct dirent
  892. X+ #        else
  893. X+ #            include <sys/dir.h>
  894. X+ #        endif
  895. X+ #    endif
  896. X+ #    ifndef DIR_BUF
  897. X+ #        define    DIR_BUF        struct direct
  898. X+ #    endif
  899. X+ #    define        D_LENGTH    d_namlen
  900. X+ #endif
  901. X+ #ifdef M_XENIX
  902. X+ #    include <sys/ndir.h>
  903. X+ #    define        DIR_BUF        struct direct
  904. X+ #    define        D_LENGTH    d_namlen
  905. X+ #endif
  906. X+ #ifdef AMIGA
  907. X+ #    include    "amiga.h"
  908. X+ #    define        DIR_BUF        struct dirent
  909. X+ #    define        D_LENGTH    d_reclen
  910. X+ #endif
  911. X+ #ifndef DIR_BUF
  912. X+ #    include    <dirent.h>
  913. X+ #    define        DIR_BUF        struct dirent
  914. X+ #    define        D_LENGTH    d_reclen
  915. X+ #endif
  916. X+ 
  917. X+ /*
  918. X   * Setup support for reading from CD-ROM
  919. X   */
  920. X  
  921. X***************
  922. X*** 152,158 ****
  923. X   */
  924. X   
  925. X  #ifdef INDEX_DAEMON
  926. X! #    define    LOCK_FILE TMPDIR "tind.LCK"
  927. X  #    undef    NNTP_ABLE
  928. X  #    undef    NNTP_ONLY
  929. X  #    undef    NNTP_INEWS
  930. X--- 198,205 ----
  931. X   */
  932. X   
  933. X  #ifdef INDEX_DAEMON
  934. X! #    define    DONT_HAVE_SELECT
  935. X! #    define    LOCK_FILE "tind.LCK"
  936. X  #    undef    NNTP_ABLE
  937. X  #    undef    NNTP_ONLY
  938. X  #    undef    NNTP_INEWS
  939. X***************
  940. X*** 187,193 ****
  941. X  #    define        DEFAULT_SUM    "sum"
  942. X  #    ifdef DGUX
  943. X  #        define        DEFAULT_MAILBOX    "/usr/mail"
  944. X- #        define        POSIX_JOB_CONTROL
  945. X  #        define        USE_INVERSE_HACK
  946. X  #    endif
  947. X  #    ifdef pyr
  948. X--- 234,239 ----
  949. X***************
  950. X*** 205,211 ****
  951. X  #        define        DEFAULT_MAILER    "/usr/bin/mailx"
  952. X  #    endif
  953. X  #    ifdef AMIGA
  954. X- #        undef    POSIX_JOB_CONTROL
  955. X  #        define    DEFAULT_EDITOR    "c:ed"
  956. X  #        define    DEFAULT_MAILER    "uucp:c/sendmail"
  957. X  #        define    DEFAULT_MAILBOX    "uumail:"
  958. X--- 251,256 ----
  959. X***************
  960. X*** 218,228 ****
  961. X  #        define    DEFAULT_MAILBOX    "/usr/spool/mail"
  962. X  #    endif
  963. X  #    ifdef RS6000
  964. X! #        define    DEFAULT_MAILER    "/usr/bin/mail"
  965. X  #        define    DEFAULT_PRINTER    "/bin/lp"
  966. X  #    endif
  967. X  #    ifdef SCO_UNIX
  968. X! #        define    USE_MMDF_MAILER
  969. X  #    endif
  970. X  #    ifdef sinix
  971. X  #        define    DEFAULT_PRINTER    "/bin/lpr"
  972. X--- 263,273 ----
  973. X  #        define    DEFAULT_MAILBOX    "/usr/spool/mail"
  974. X  #    endif
  975. X  #    ifdef RS6000
  976. X! #        define    DEFAULT_MAILER    "/usr/lib/sendmail"
  977. X  #        define    DEFAULT_PRINTER    "/bin/lp"
  978. X  #    endif
  979. X  #    ifdef SCO_UNIX
  980. X! #        define    HAVE_MMDF_MAILER
  981. X  #    endif
  982. X  #    ifdef sinix
  983. X  #        define    DEFAULT_PRINTER    "/bin/lpr"
  984. X***************
  985. X*** 263,277 ****
  986. X   * Useful for logging user usage
  987. X   */
  988. X   
  989. X! #ifdef LOG_USER
  990. X! #    define        LOG_USER_FILE    TMPDIR ".tin_log" 
  991. X! #endif
  992. X  
  993. X  /*
  994. X   * Should active file be reread for new news & if so how often
  995. X   */
  996. X   
  997. X! #ifndef NO_REREAD_ACTIVE_FILE
  998. X  #    ifndef REREAD_ACTIVE_FILE_SECS
  999. X  #        define    REREAD_ACTIVE_FILE_SECS    300    /* seconds */
  1000. X  #    endif
  1001. X--- 308,322 ----
  1002. X   * Useful for logging user usage
  1003. X   */
  1004. X   
  1005. X! #define        LOG_USER_FILE    ".tin_log" 
  1006. X  
  1007. X  /*
  1008. X   * Should active file be reread for new news & if so how often
  1009. X   */
  1010. X   
  1011. X! #ifdef DONT_REREAD_ACTIVE_FILE
  1012. X! #    define    REREAD_ACTIVE_FILE_SECS    0
  1013. X! #else
  1014. X  #    ifndef REREAD_ACTIVE_FILE_SECS
  1015. X  #        define    REREAD_ACTIVE_FILE_SECS    300    /* seconds */
  1016. X  #    endif
  1017. X***************
  1018. X*** 299,310 ****
  1019. X  
  1020. X  #define        RCDIR            ".tin"
  1021. X  #define        RCFILE            "tinrc"
  1022. X! #define        INDEXDIR        ".index"
  1023. X  #define        ACTIVE            "active"
  1024. X  #define        ACTIVE_TIMES        "active.times"
  1025. X  #define        KILLFILE        "kill"
  1026. X  #define        POSTFILE        "posted"
  1027. X  #define        DEFAULT_MAILDIR        "Mail"
  1028. X  
  1029. X  #ifdef TRUE
  1030. X  #    undef TRUE
  1031. X--- 344,360 ----
  1032. X  
  1033. X  #define        RCDIR            ".tin"
  1034. X  #define        RCFILE            "tinrc"
  1035. X! #define        INDEX_MAILDIR        ".mailidx"
  1036. X! #define        INDEX_NEWSDIR        ".index"
  1037. X  #define        ACTIVE            "active"
  1038. X+ #define        ACTIVE_MAIL        "active.mail"
  1039. X+ #define        ACTIVE_SAVE        "active.save"
  1040. X  #define        ACTIVE_TIMES        "active.times"
  1041. X  #define        KILLFILE        "kill"
  1042. X  #define        POSTFILE        "posted"
  1043. X  #define        DEFAULT_MAILDIR        "Mail"
  1044. X+ #define        DEFAULT_SAVEDIR        "News"
  1045. X+ #define        MAILGROUPS_FILE        "mailgroups"
  1046. X  
  1047. X  #ifdef TRUE
  1048. X  #    undef TRUE
  1049. X***************
  1050. X*** 320,329 ****
  1051. X  #define        LEN            512
  1052. X  #define        PATH_LEN        128
  1053. X  #else
  1054. X  #define        LEN            1024
  1055. X! #define        PATH_LEN        256
  1056. X  #endif
  1057. X- #define        HEADER_LEN        1024
  1058. X  #define        MODULO_COUNT_NUM    5
  1059. X  #define        TABLE_SIZE        1409
  1060. X  #define        MAX_PAGES        1000
  1061. X--- 370,388 ----
  1062. X  #define        LEN            512
  1063. X  #define        PATH_LEN        128
  1064. X  #else
  1065. X+ #ifndef MAXPATHLEN
  1066. X+ #   define MAXPATHLEN 256
  1067. X+ #endif
  1068. X+ #define        PATH_LEN        MAXPATHLEN
  1069. X  #define        LEN            1024
  1070. X! #endif
  1071. X! #define        NEWSRC_LINE        8192
  1072. X! 
  1073. X! #ifdef HAVE_MAIL_HANDLER
  1074. X! #    define    HEADER_LEN        8192
  1075. X! #else
  1076. X! #    define    HEADER_LEN        1024
  1077. X  #endif
  1078. X  #define        MODULO_COUNT_NUM    5
  1079. X  #define        TABLE_SIZE        1409
  1080. X  #define        MAX_PAGES        1000
  1081. X***************
  1082. X*** 356,362 ****
  1083. X  #endif
  1084. X  
  1085. X  #define        SCREEN_READ_UNREAD        6        /* position for "  +" / "   " */
  1086. X! #define        INDEX_TOP                2
  1087. X  
  1088. X  #ifdef NO_REGEX 
  1089. X  #    define STR_MATCH(s1,s2)    (str_str (s1, s2, strlen (s2)) != 0)
  1090. X--- 415,421 ----
  1091. X  #endif
  1092. X  
  1093. X  #define        SCREEN_READ_UNREAD        6        /* position for "  +" / "   " */
  1094. X! #define        INDEX_TOP            2
  1095. X  
  1096. X  #ifdef NO_REGEX 
  1097. X  #    define STR_MATCH(s1,s2)    (str_str (s1, s2, strlen (s2)) != 0)
  1098. X***************
  1099. X*** 368,373 ****
  1100. X--- 427,440 ----
  1101. X               (arts[i].killed && kill_level > 0))
  1102. X  
  1103. X  /*
  1104. X+  *  News/Mail group types 
  1105. X+  */
  1106. X+  
  1107. X+ #define        GROUP_TYPE_MAIL            0
  1108. X+ #define        GROUP_TYPE_NEWS            1
  1109. X+ #define        GROUP_TYPE_SAVE            2
  1110. X+ 
  1111. X+ /*
  1112. X   *  used by get_arrow_key()
  1113. X   */
  1114. X  
  1115. X***************
  1116. X*** 446,458 ****
  1117. X   *  Assertion verifier
  1118. X   */
  1119. X  
  1120. X! #if __STDC__ && !defined(apollo)
  1121. X! #    define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, #p); else
  1122. X  #else
  1123. X  #    define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, "p"); else
  1124. X  #endif
  1125. X  
  1126. X  #define    ESC    27
  1127. X  #if defined(AMIGA) || defined(apollo) || defined(BSD) || defined(MINIX)
  1128. X  #    define        CR        '\r'
  1129. X  #else
  1130. X--- 513,530 ----
  1131. X   *  Assertion verifier
  1132. X   */
  1133. X  
  1134. X! #if __STDC__ || defined(SVR4)
  1135. X! #    ifndef apollo
  1136. X! #        define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, #p); else
  1137. X! #    else
  1138. X! #        define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, "p"); else
  1139. X! #    endif
  1140. X  #else
  1141. X  #    define    assert(p)    if(! (p)) asfail(__FILE__, __LINE__, "p"); else
  1142. X  #endif
  1143. X  
  1144. X  #define    ESC    27
  1145. X+ 
  1146. X  #if defined(AMIGA) || defined(apollo) || defined(BSD) || defined(MINIX)
  1147. X  #    define        CR        '\r'
  1148. X  #else
  1149. X***************
  1150. X*** 481,486 ****
  1151. X--- 553,560 ----
  1152. X  #define        ART_UNREAD        1
  1153. X  #define        ART_WILL_RETURN        2
  1154. X  
  1155. X+ #define        ART_UNAVAILABLE        -1
  1156. X+ 
  1157. X  /*
  1158. X   * used by group_t & my_group[]
  1159. X   */
  1160. X***************
  1161. X*** 497,509 ****
  1162. X  #define KILL_BOTH    3
  1163. X  
  1164. X  /*
  1165. X-  * usedin group.c & page.c
  1166. X-  */
  1167. X-  
  1168. X- #define    ART_UNAVAILABLE    -1
  1169. X- 
  1170. X- 
  1171. X- /*
  1172. X   * used in feed.c & save.c
  1173. X   */
  1174. X   
  1175. X--- 571,576 ----
  1176. X***************
  1177. X*** 510,517 ****
  1178. X  #define POST_PROC_NONE            0
  1179. X  #define POST_PROC_SHAR            1
  1180. X  #define POST_PROC_UUDECODE        2
  1181. X! #define POST_PROC_UUD_LST_ZOO    3
  1182. X! #define POST_PROC_UUD_EXT_ZOO    4
  1183. X  
  1184. X  /*
  1185. X   *  struct article_t - article header
  1186. X--- 577,586 ----
  1187. X  #define POST_PROC_NONE            0
  1188. X  #define POST_PROC_SHAR            1
  1189. X  #define POST_PROC_UUDECODE        2
  1190. X! #define POST_PROC_UUD_LST_ZOO        3
  1191. X! #define POST_PROC_UUD_EXT_ZOO        4
  1192. X! #define POST_PROC_UUD_LST_ZIP        5
  1193. X! #define POST_PROC_UUD_EXT_ZIP        6
  1194. X  
  1195. X  /*
  1196. X   *  struct article_t - article header
  1197. X***************
  1198. X*** 570,578 ****
  1199. X      int tagged;        /* 0 = not tagged, >0 = tagged */
  1200. X      long date;        /* Date: line from header in seconds */
  1201. X      char *archive;        /* Archive-name: line from mail header */
  1202. X!     char *part;        /* part no. of archive */
  1203. X      char *patch;        /* patch no. of archive */
  1204. X!     char *xref;        /* cross reference line */
  1205. X  };
  1206. X  
  1207. X  /*
  1208. X--- 639,647 ----
  1209. X      int tagged;        /* 0 = not tagged, >0 = tagged */
  1210. X      long date;        /* Date: line from header in seconds */
  1211. X      char *archive;        /* Archive-name: line from mail header */
  1212. X!     char *part;        /* part  no. of archive */
  1213. X      char *patch;        /* patch no. of archive */
  1214. X!     char *xref;        /* Xref: cross posted article reference line */
  1215. X  };
  1216. X  
  1217. X  /*
  1218. X***************
  1219. X*** 583,589 ****
  1220. X--- 652,660 ----
  1221. X      char *maildir;                /* mail dir if other than ~/Mail */
  1222. X      char *savedir;                /* save dir if other than ~/News */
  1223. X      char *sigfile;                /* sig file if other than ~/.Sig */
  1224. X+     char *organization;            /* organization name */
  1225. X      char *followup_to;            /* where posts should be redirected */
  1226. X+     char *printer;                /* printer command & parameters */
  1227. X      unsigned int read_during_session:1;    /* marked TRUE if group entered during session */
  1228. X      unsigned int auto_save:1;        /* 0=none, 1=save */
  1229. X      unsigned int batch_save:1;        /* 0=none, 1=save -S/mail -M  */
  1230. X***************
  1231. X*** 603,613 ****
  1232. X   */
  1233. X  
  1234. X  struct group_t {
  1235. X!     char *name;
  1236. X      char *description;        /* text from LIBDIR/newsgroups file */
  1237. X!     long max;
  1238. X!     long min;
  1239. X!     char moderated;
  1240. X      int next;            /* next active entry in hash chain */
  1241. X      int my_group;            /* subscribed/unsubscribed to group */
  1242. X      int unread;            /* unread articles in group */
  1243. X--- 674,686 ----
  1244. X   */
  1245. X  
  1246. X  struct group_t {
  1247. X!     char *name;            /* newsgroup / mailbox name */
  1248. X      char *description;        /* text from LIBDIR/newsgroups file */
  1249. X!     char *spooldir;            /* groups spool directory */
  1250. X!     char moderated;            /* state of group moderation */
  1251. X!     long max;            /* max. article number */
  1252. X!     long min;            /* min. article number */
  1253. X!     int type;            /* grouptype - newsgroup / mailbox */
  1254. X      int next;            /* next active entry in hash chain */
  1255. X      int my_group;            /* subscribed/unsubscribed to group */
  1256. X      int unread;            /* unread articles in group */
  1257. X***************
  1258. X*** 711,716 ****
  1259. X--- 784,792 ----
  1260. X  #ifdef HAVE_SIGTYPE_INT
  1261. X  typedef int sigtype_t;
  1262. X  #endif
  1263. X+ 
  1264. X+ #define MOTD_FILE        "motd"
  1265. X+ #define SUBSCRIPTIONS_FILE    "subscriptions"
  1266. X  
  1267. X  #ifdef AMIGA
  1268. X  #    define NEWSGROUPS_FILE        "newsdescrip"
  1269. XBinary files ../1.16/tin.nrf and ./tin.nrf differ
  1270. XOnly in .: tin.tar
  1271. XFiles ../1.16/wildmat.3 and ./wildmat.3 are identical
  1272. XFiles ../1.16/wildmat.c and ./wildmat.c are identical
  1273. Xdiff -rcs ../1.16/xindex.c ./xindex.c
  1274. X*** ../1.16/xindex.c    Sun Nov 15 18:41:38 1992
  1275. X--- ./xindex.c    Sun Nov 15 16:02:48 1992
  1276. X***************
  1277. X*** 3,11 ****
  1278. X   *  Module    : xindex.c
  1279. X   *  Author    : I.Lea
  1280. X   *  Created   : 07-03-92
  1281. X!  *  Updated   : 13-08-92
  1282. X   *  Notes     : Add a command to retieve index files from the
  1283. X   *              NNTP server so as to save space on the client.
  1284. X   *              Ideas borrowed from XTHREAD nntp extension code
  1285. X   *              posted by Tim Iverson to alt.sources in mid'91.
  1286. X   *  Copyright : (c) Copyright 1992 by Iain Lea
  1287. X--- 3,13 ----
  1288. X   *  Module    : xindex.c
  1289. X   *  Author    : I.Lea
  1290. X   *  Created   : 07-03-92
  1291. X!  *  Updated   : 05-11-92
  1292. X   *  Notes     : Add a command to retieve index files from the
  1293. X   *              NNTP server so as to save space on the client.
  1294. X+  *              If XOVERVIEW is defined then search for .overview
  1295. X+  *              type files first in preference to tin index files.
  1296. X   *              Ideas borrowed from XTHREAD nntp extension code
  1297. X   *              posted by Tim Iverson to alt.sources in mid'91.
  1298. X   *  Copyright : (c) Copyright 1992 by Iain Lea
  1299. X***************
  1300. X*** 22,28 ****
  1301. X  #undef    DEBUG_XINDEX        /* set to define to turn on more debug info */
  1302. X  #define HASH_VALUE 1409        /* mod value for hashing group name */
  1303. X  
  1304. X! #if __STDC__
  1305. X  void xindex (int argc, char *argv[]);
  1306. X  static void find_index_file (char *group, char *index_file);
  1307. X  static long hash_groupname (char *group);
  1308. X--- 24,34 ----
  1309. X  #undef    DEBUG_XINDEX        /* set to define to turn on more debug info */
  1310. X  #define HASH_VALUE 1409        /* mod value for hashing group name */
  1311. X  
  1312. X! #ifndef MAXPATHLEN
  1313. X! #    define MAXPATHLEN 256
  1314. X! #endif
  1315. X! 
  1316. X! #ifdef __STDC__
  1317. X  void xindex (int argc, char *argv[]);
  1318. X  static void find_index_file (char *group, char *index_file);
  1319. X  static long hash_groupname (char *group);
  1320. X***************
  1321. X*** 32,41 ****
  1322. X  static long hash_groupname ();
  1323. X  #endif
  1324. X  
  1325. X  /*
  1326. X!  *  Usage: XINDEX GROUP
  1327. X   *
  1328. X!  *  GROUP    Group for which to retrieve index file
  1329. X   *
  1330. X   *  This command is NOT documented in RFC977.
  1331. X   */
  1332. X--- 38,49 ----
  1333. X  static long hash_groupname ();
  1334. X  #endif
  1335. X  
  1336. X+ static int overview_index;
  1337. X+ 
  1338. X  /*
  1339. X!  *  Usage: XINDEX groupname
  1340. X   *
  1341. X!  *  Retrieve an index file for the specified newsgroup (ie. alt.sources)
  1342. X   *
  1343. X   *  This command is NOT documented in RFC977.
  1344. X   */
  1345. X***************
  1346. X*** 45,52 ****
  1347. X      char    *argv[];
  1348. X  {
  1349. X      char    line[NNTP_STRLEN];
  1350. X!     char    group[256];
  1351. X!     char    index_file[256];
  1352. X      char    *cp;
  1353. X      FILE    *fp;
  1354. X      
  1355. X--- 53,60 ----
  1356. X      char    *argv[];
  1357. X  {
  1358. X      char    line[NNTP_STRLEN];
  1359. X!     char    group[MAXPATHLEN];
  1360. X!     char    index_file[MAXPATHLEN];
  1361. X      char    *cp;
  1362. X      FILE    *fp;
  1363. X      
  1364. X***************
  1365. X*** 76,82 ****
  1366. X              return;
  1367. X          }
  1368. X  
  1369. X!         printf("%d XINDEX group in index format\r\n", OK_XINDEX);
  1370. X          (void) fflush(stdout);
  1371. X          
  1372. X          while (fgets(line, sizeof(line), fp) != NULL) {
  1373. X--- 84,91 ----
  1374. X              return;
  1375. X          }
  1376. X  
  1377. X!         printf("%d XINDEX group in %s index format\r\n", 
  1378. X!             OK_XINDEX, (overview_index ? ".overview" : "tin"));
  1379. X          (void) fflush(stdout);
  1380. X          
  1381. X          while (fgets(line, sizeof(line), fp) != NULL) {
  1382. X***************
  1383. X*** 92,101 ****
  1384. X  }
  1385. X  
  1386. X  /*
  1387. X!  *  Look in <SPOOLDIR>/.index directory for the index file for the
  1388. X!  *  given group.  Hashing the group name gets a number. See if that
  1389. X!  *  #.1 file exists; if so, read first line. Group we want? If not,
  1390. X!  *  try #.2.  Repeat until no such file or we find the right file.
  1391. X   */
  1392. X  
  1393. X  static void find_index_file (group, index_file)
  1394. X--- 101,113 ----
  1395. X  }
  1396. X  
  1397. X  /*
  1398. X!  *  If XOVERVIEW is defined first look at SPOOLDIR/group/.overview
  1399. X!  *  and set index_file  to this file  if found, otherwise  look in 
  1400. X!  *  XINDEX_DIR directory (defined  in conf.h) for  the index  file 
  1401. X!  *  for the given group. Hashing the group name gets a number. 
  1402. X!  *  See if that #.1 file exists; if so, read first line. Is it the
  1403. X!  *  Group we want? If not try #.2. Repeat until no such file or we 
  1404. X!  *  find the right file.
  1405. X   */
  1406. X  
  1407. X  static void find_index_file (group, index_file)
  1408. X***************
  1409. X*** 102,116 ****
  1410. X      char *group;
  1411. X      char *index_file;
  1412. X  {
  1413. X!     char buf[256], *p;
  1414. X      FILE *fp;
  1415. X      int i = 1;
  1416. X      unsigned long hash;
  1417. X  
  1418. X      hash = hash_groupname (group);
  1419. X  
  1420. X      while (1) {
  1421. X!         sprintf (index_file, "%s/.index/%lu.%d", SPOOLDIR, hash, i);
  1422. X          
  1423. X          if ((fp = fopen (index_file, "r")) == NULL) {
  1424. X              return;
  1425. X--- 114,147 ----
  1426. X      char *group;
  1427. X      char *index_file;
  1428. X  {
  1429. X!     char buf[MAXPATHLEN], *p;
  1430. X      FILE *fp;
  1431. X      int i = 1;
  1432. X      unsigned long hash;
  1433. X+     struct stat sb;
  1434. X+     
  1435. X+ #ifdef XOVERVIEW
  1436. X+     strncpy (buf, group, sizeof (buf)-1);
  1437. X+     p = buf;
  1438. X+     while (*p) {
  1439. X+         if (*p == '.') {
  1440. X+             *p = '/';
  1441. X+         }    
  1442. X+         p++;
  1443. X+     }
  1444. X+     sprintf (index_file, "%s/%s/.overview", SPOOLDIR, buf);
  1445. X  
  1446. X+     if (stat (index_file, &sb) != -1) {
  1447. X+         overview_index = 1;
  1448. X+         return;
  1449. X+     }
  1450. X+ #endif
  1451. X+ 
  1452. X+     overview_index = 0;
  1453. X      hash = hash_groupname (group);
  1454. X  
  1455. X      while (1) {
  1456. X!         sprintf (index_file, "%s/%lu.%d", XINDEX_DIR, hash, i);
  1457. X          
  1458. X          if ((fp = fopen (index_file, "r")) == NULL) {
  1459. X              return;
  1460. X***************
  1461. X*** 151,157 ****
  1462. X  
  1463. X      return (hash_value);
  1464. X  }
  1465. X- 
  1466. X  
  1467. X  #endif /* XINDEX */
  1468. X  
  1469. X--- 182,187 ----
  1470. XOnly in .: xmotd.c
  1471. XFiles ../1.16/xuser.c and ./xuser.c are identical
  1472. SHAR_EOF
  1473. echo 'File tin-1.17.patch is complete' &&
  1474. chmod 0644 tin-1.17.patch ||
  1475. echo 'restore of tin-1.17.patch failed'
  1476. Wc_c="`wc -c < 'tin-1.17.patch'`"
  1477. test 508946 -eq "$Wc_c" ||
  1478.     echo 'tin-1.17.patch: original size 508946, current size' "$Wc_c"
  1479. rm -f _shar_wnt_.tmp
  1480. fi
  1481. # ============= amiga.h ==============
  1482. if test -f 'amiga.h' -a X"$1" != X"-c"; then
  1483.     echo 'x - skipping amiga.h (File already exists)'
  1484.     rm -f _shar_wnt_.tmp
  1485. else
  1486. > _shar_wnt_.tmp
  1487. echo 'x - extracting amiga.h (Text)'
  1488. sed 's/^X//' << 'SHAR_EOF' > 'amiga.h' &&
  1489. X/*
  1490. X *  Project   : tin - a threaded Netnews reader
  1491. X *  Module    : amiga.h
  1492. X *  Author    : M.Tomlinson & I.Lea
  1493. X *  Created   : 17-09-92
  1494. X *  Updated   : 17-09-92
  1495. X *  Notes     : Directory support for AmigaDOS
  1496. X *  Copyright : (c) Copyright 1991-92 by Mark Tomlinson & Iain Lea
  1497. X *              You may  freely  copy or  redistribute  this software,
  1498. X *              so  long as there is no profit made from its use, sale
  1499. X *              trade or  reproduction.  You may not change this copy-
  1500. X *              right notice, and it must be included in any copy made
  1501. X */
  1502. X
  1503. X#ifdef AMIGA
  1504. X
  1505. X#include <dos/dos.h>
  1506. X
  1507. X#define ST_DIRECT 0x10   /* Aztec's stat() doesn't give this information */
  1508. X
  1509. Xstruct dirent { 
  1510. X    char *d_name; 
  1511. X    long d_reclen;
  1512. X};
  1513. X
  1514. Xtypedef struct
  1515. X{
  1516. X    BPTR    Lock;
  1517. X    struct  FileInfoBlock fib;
  1518. X    int    first;
  1519. X} DIR;
  1520. X
  1521. XDIR *opendir ();
  1522. Xstruct dirent *readdir ();
  1523. X
  1524. X#endif
  1525. SHAR_EOF
  1526. chmod 0644 amiga.h ||
  1527. echo 'restore of amiga.h failed'
  1528. Wc_c="`wc -c < 'amiga.h'`"
  1529. test 859 -eq "$Wc_c" ||
  1530.     echo 'amiga.h: original size 859, current size' "$Wc_c"
  1531. rm -f _shar_wnt_.tmp
  1532. fi
  1533. # ============= mail.c ==============
  1534. if test -f 'mail.c' -a X"$1" != X"-c"; then
  1535.     echo 'x - skipping mail.c (File already exists)'
  1536.     rm -f _shar_wnt_.tmp
  1537. else
  1538. > _shar_wnt_.tmp
  1539. echo 'x - extracting mail.c (Text)'
  1540. sed 's/^X//' << 'SHAR_EOF' > 'mail.c' &&
  1541. X/*
  1542. X *  Project   : tin - a threaded Netnews reader
  1543. X *  Module    : mail.c
  1544. X *  Author    : I.Lea
  1545. X *  Created   : 02-10-92
  1546. X *  Updated   : 11-10-92
  1547. X *  Notes     : Mail handling routines for creating pseudo newsgroups
  1548. X *  Copyright : (c) Copyright 1991-92 by Iain Lea
  1549. X *              You may  freely  copy or  redistribute  this software,
  1550. X *              so  long as there is no profit made from its use, sale
  1551. X *              trade or  reproduction.  You may not change this copy-
  1552. X *              right notice, and it must be included in any copy made
  1553. X */
  1554. X
  1555. X#include    "tin.h"
  1556. X
  1557. X/*
  1558. X *  Load the mail active file into active[]
  1559. X */
  1560. X
  1561. Xvoid read_mail_active_file ()
  1562. X{
  1563. X#if !defined(INDEX_DAEMON) && defined(HAVE_MAIL_HANDLING)
  1564. X    FILE *fp;
  1565. X    char buf[LEN];
  1566. X    char spooldir[PATH_LEN];
  1567. X    int i;
  1568. X    long h, min, max;
  1569. X        
  1570. X    if ((update && update_fork) || ! update) {
  1571. X        wait_message (txt_reading_mail_active_file);
  1572. X    }
  1573. X
  1574. X    /*
  1575. X     * Open the mail active file & if we can't create an empty one
  1576. X     */
  1577. X    if ((fp = open_mail_active_fp ("r")) == (FILE *) 0) {
  1578. X        if (cmd_line) {
  1579. X            fputc ('\n', stderr);
  1580. X        }
  1581. X        error_message (txt_cannot_open, mail_active_file);
  1582. X        write_mail_active_file ();
  1583. X        return;    
  1584. X    }
  1585. X
  1586. X    if (num_active == -1) {
  1587. X        num_active = 0;
  1588. X        for (i = 0; i < TABLE_SIZE; i++) {
  1589. X            group_hash[i] = -1;
  1590. X        }
  1591. X    }
  1592. X
  1593. X    while (fgets (buf, sizeof (buf), fp) != NULL) {
  1594. X        if (! parse_active_line (buf, &max, &min, spooldir)) {
  1595. X            continue;
  1596. X        }
  1597. X
  1598. X        /*
  1599. X         * Load group into group hash table
  1600. X         */
  1601. X        if (num_active >= max_active) {
  1602. X            expand_active ();
  1603. X        }
  1604. X
  1605. X        h = hash_groupname (buf);
  1606. X
  1607. X        if (group_hash[h] == -1) {
  1608. X            group_hash[h] = num_active;
  1609. X        } else {    /* hash linked list chaining */
  1610. X            for (i=group_hash[h]; active[i].next >= 0; i=active[i].next) {
  1611. X                if (strcmp (active[i].name, buf) == 0) {
  1612. X                    goto read_mail_active_continue;    /* kill dups */
  1613. X                }
  1614. X            }
  1615. X            if (strcmp (active[i].name, buf) == 0)
  1616. X                goto read_mail_active_continue;
  1617. X            active[i].next = num_active;
  1618. X        }
  1619. X        /*
  1620. X         * Load group info.
  1621. X         */
  1622. X        active[num_active].type = GROUP_TYPE_MAIL;
  1623. X        active[num_active].name = str_dup (buf);
  1624. X        active[num_active].spooldir = str_dup (spooldir);
  1625. X        active[num_active].description = (char *) 0;
  1626. X        active[num_active].max = max;
  1627. X        active[num_active].min = min;
  1628. X        active[num_active].moderated = 'y';
  1629. X        active[num_active].next = -1;            /* hash chaining */
  1630. X        active[num_active].my_group = UNSUBSCRIBED;    /* not in my_group[] yet */
  1631. X        active[num_active].unread = 0;
  1632. X        num_active++;
  1633. X
  1634. Xread_mail_active_continue:;
  1635. X
  1636. X    }
  1637. X    fclose (fp);
  1638. X
  1639. X    if ((cmd_line && ! update && ! verbose) || (update && update_fork)) {
  1640. X        wait_message ("\n");
  1641. X    }
  1642. X
  1643. X#endif    /* INDEX_DAEMON    */
  1644. X}
  1645. X
  1646. X/*
  1647. X *  Write the mail groups from active[] to ~/.tin/mactive
  1648. X */
  1649. X
  1650. Xvoid write_mail_active_file ()
  1651. X{
  1652. X#if !defined(INDEX_DAEMON) && defined(HAVE_MAIL_HANDLING)
  1653. X    FILE *fp;
  1654. X    register int i;
  1655. X        
  1656. X    if ((fp = open_mail_active_fp ("w")) == (FILE *) 0) {
  1657. X        return;
  1658. X    }
  1659. X
  1660. X    /*
  1661. X     * Load group into group hash table
  1662. X     */
  1663. X    fprintf (fp, "# Mail active file. Format is like news active file:\n");
  1664. X    fprintf (fp, "#   groupname  max.artnum  min.artnum  /maildir\n#\n");
  1665. X    for (i = 0 ; i < num_active ; i++) {
  1666. X        if (active[i].type == GROUP_TYPE_MAIL) {
  1667. X            fprintf (fp, "%s %08ld %08ld %s\n", 
  1668. X                active[i].name, active[i].max,
  1669. X                active[i].min, active[i].spooldir);
  1670. X        }
  1671. X    }
  1672. X    fclose (fp);
  1673. X
  1674. X#endif    /* INDEX_DAEMON    */
  1675. X}
  1676. X
  1677. X/*
  1678. X *  Load the text description from ~/.tin/mailgroups for each mail group into 
  1679. X *  the active[] array.
  1680. X */
  1681. X
  1682. Xvoid read_mailgroups_file ()
  1683. X{
  1684. X#ifndef INDEX_DAEMON
  1685. X    FILE *fp;
  1686. X    
  1687. X    if (show_description == FALSE || save_news || catchup) {
  1688. X        return;
  1689. X    }
  1690. X
  1691. X    if ((fp = open_mailgroups_fp ()) != (FILE *) 0) {
  1692. X        wait_message (txt_reading_mailgroups_file);
  1693. X
  1694. X        read_groups_descriptions (fp, (FILE *) 0);
  1695. X        
  1696. X        fclose (fp);
  1697. X
  1698. X        if (cmd_line && ! update && ! verbose) {
  1699. X            wait_message ("\n");
  1700. X        }
  1701. X    }
  1702. X    
  1703. X#endif    /* INDEX_DAEMON */
  1704. X}
  1705. X
  1706. X/*
  1707. X *  Load the text description from LIBDIR/newsgroups for each group into the 
  1708. X *  active[] array. Save a copy locally if reading via NNTP to save bandwidth.
  1709. X */
  1710. X
  1711. Xvoid read_newsgroups_file ()
  1712. X{
  1713. X#ifndef INDEX_DAEMON
  1714. X    FILE *fp;
  1715. X    FILE *fp_save = (FILE *) 0;
  1716. X    
  1717. X    if (show_description == FALSE || save_news || catchup) {
  1718. X        return;
  1719. X    }
  1720. X
  1721. X    wait_message (txt_reading_newsgroups_file);
  1722. X
  1723. X    if ((fp = open_newsgroups_fp ()) != (FILE *) 0) {
  1724. X        if (read_news_via_nntp && ! read_local_newsgroups_file) {
  1725. X            fp_save = fopen (local_newsgroups_file, "w");
  1726. X        }
  1727. X    
  1728. X        read_groups_descriptions (fp, fp_save);
  1729. X
  1730. X        fclose (fp);
  1731. X
  1732. X        if (fp_save) {
  1733. X            fclose (fp_save);
  1734. X            read_local_newsgroups_file = TRUE;
  1735. X        }
  1736. X    }
  1737. X    
  1738. X    if (cmd_line && ! update && ! verbose) {
  1739. X        wait_message ("\n");
  1740. X    }
  1741. X#endif    /* INDEX_DAEMON */
  1742. X}
  1743. X
  1744. X/*
  1745. X *  Read groups descriptions from opened file & make local backup copy 
  1746. X *  of all groups that don't have a 'x' in the active file moderated 
  1747. X *  field & if reading groups of type GROUP_TYPE_NEWS.
  1748. X */
  1749. X
  1750. Xvoid read_groups_descriptions (fp, fp_save)
  1751. X    FILE *fp;
  1752. X    FILE *fp_save;
  1753. X{
  1754. X    char buf[LEN];
  1755. X    char group[PATH_LEN];
  1756. X    char *p, *q;
  1757. X    int i;
  1758. X    
  1759. X    while (fgets (buf, sizeof (buf), fp) != NULL) {
  1760. X        if (buf[0] == '#' || buf[0] == '\n') {
  1761. X            continue;
  1762. X        }
  1763. X        if (p = (char *) strchr (buf, '\n')) {
  1764. X            *p = '\0';
  1765. X        }
  1766. X
  1767. X        for (p = buf, q = group ; *p && *p != ' ' && *p != '\t' ; p++, q++) {
  1768. X            *q = *p;
  1769. X        }
  1770. X        *q = '\0';
  1771. X
  1772. X        while (*p == '\t' || *p == ' ') {
  1773. X            p++;
  1774. X        }    
  1775. X
  1776. X        i = find_group_index (group);
  1777. X         
  1778. X        if (i >= 0 && active[i].description == (char *) 0) {
  1779. X            active[i].description = str_dup (p);
  1780. X            if (active[i].type == GROUP_TYPE_NEWS) {
  1781. X                if (fp_save && read_news_via_nntp && 
  1782. X                    ! read_local_newsgroups_file) {
  1783. X                    fprintf (fp_save, "%s\n", buf);
  1784. X                }
  1785. X            }
  1786. X        }
  1787. X    }
  1788. X}
  1789. SHAR_EOF
  1790. chmod 0644 mail.c ||
  1791. echo 'restore of mail.c failed'
  1792. Wc_c="`wc -c < 'mail.c'`"
  1793. test 5571 -eq "$Wc_c" ||
  1794.     echo 'mail.c: original size 5571, current size' "$Wc_c"
  1795. rm -f _shar_wnt_.tmp
  1796. fi
  1797. # ============= sigfile.c ==============
  1798. if test -f 'sigfile.c' -a X"$1" != X"-c"; then
  1799.     echo 'x - skipping sigfile.c (File already exists)'
  1800.     rm -f _shar_wnt_.tmp
  1801. else
  1802. > _shar_wnt_.tmp
  1803. echo 'x - extracting sigfile.c (Text)'
  1804. sed 's/^X//' << 'SHAR_EOF' > 'sigfile.c' &&
  1805. X/*
  1806. X *  Project   : tin - a threaded Netnews reader
  1807. X *  Module    : sigfile.c
  1808. X *  Author    : M.Gleason & I.Lea
  1809. X *  Created   : 17-10-92
  1810. X *  Updated   : 05-11-92
  1811. X *  Notes     : Generate random signature for posting/mailing etc.
  1812. X *  Copyright : (c) Copyright 1989-92 by Mike Gleason & Iain Lea 
  1813. X *              You may  freely  copy or  redistribute  this software,
  1814. X *              so  long as there is no profit made from its use, sale
  1815. X *              trade or  reproduction.  You may not change this copy-
  1816. X *              right notice, and it must be included in any copy made
  1817. X */
  1818. X
  1819. X#include    "tin.h"
  1820. X
  1821. X#define MAXLOOPS 1000
  1822. X
  1823. X#ifndef S_ISDIR
  1824. X#   define S_ISDIR(m)   (((m) & S_IFMT) == S_IFDIR)
  1825. X#endif
  1826. X
  1827. Xstatic char sigfile[PATH_LEN];
  1828. X
  1829. X
  1830. Xvoid add_signature (fp, flag)
  1831. X    FILE *fp;
  1832. X    int flag;
  1833. X{
  1834. X    char path[PATH_LEN];
  1835. X    FILE *fixfp;
  1836. X    FILE *sigfp;
  1837. X    int i;
  1838. X    
  1839. X#ifdef NNTP_INEWS
  1840. X    if (read_news_via_nntp) {
  1841. X        flag = TRUE;
  1842. X    }
  1843. X#endif
  1844. X    i = my_group[cur_groupnum];
  1845. X
  1846. X    if (! strfpath (active[i].attribute.sigfile, path, sizeof (path), 
  1847. X        homedir, (char *) 0, (char *) 0, active[i].name)) {
  1848. X        if (! strfpath (default_sigfile, path, sizeof (path), 
  1849. X            homedir, (char *) 0, (char *) 0, active[i].name)) {
  1850. X            joinpath (path, homedir, ".Sig");
  1851. X        }
  1852. X    }
  1853. X    
  1854. X    /*
  1855. X     *  Check to see if sigfile is a directory & if it is  generate a 
  1856. X     *  random signature from sigs in sigdir. If the file ~/.sigfixed
  1857. X     *  exists (fixed part of random sig) then  read it  in first and 
  1858. X     *  append the random sig part onto the end.
  1859. X     */
  1860. X    if ((sigfp = open_random_sig (path)) != (FILE *) 0) {
  1861. Xif (debug == 2) {
  1862. X    error_message ("USING random sig=[%s]", sigfile);
  1863. X}
  1864. X        fprintf (fp, "\n--\n");
  1865. X        sprintf (path, "%s/.sigfixed", homedir);
  1866. X        if ((fixfp = fopen (path, "r")) != (FILE *) 0) {
  1867. X            copy_fp (fixfp, fp, "");
  1868. X            fclose (fixfp);    
  1869. X        }
  1870. X        copy_fp (sigfp, fp, "");
  1871. X        fclose (sigfp);
  1872. X        return;
  1873. X    }
  1874. X    
  1875. X    /*
  1876. X     *  Use ~/.signature or ~/.Sig or custom .Sig files
  1877. X     */
  1878. X    if ((sigfp = fopen (default_signature, "r")) != (FILE *) 0) {
  1879. X        if (flag) {
  1880. X            fprintf (fp, "\n--\n");
  1881. X            copy_fp (sigfp, fp, "");
  1882. X        }
  1883. X        fclose (sigfp);
  1884. X        return;
  1885. X    }
  1886. X
  1887. X    if ((sigfp = fopen (path, "r")) != (FILE *) 0) {
  1888. X        fprintf (fp, "\n--\n");
  1889. X        copy_fp (sigfp, fp, "");
  1890. X        fclose (sigfp);
  1891. X    }
  1892. X}
  1893. X
  1894. X
  1895. XFILE *open_random_sig (sigdir)
  1896. X    char *sigdir;
  1897. X{
  1898. X    long epoch;
  1899. X    struct stat st;
  1900. X
  1901. X    if (stat (sigdir, &st) != -1) {
  1902. X        if (S_ISDIR(st.st_mode)) {
  1903. X            time (&epoch);
  1904. X            srand ((unsigned int) epoch);
  1905. X
  1906. X            chdir (sigdir);
  1907. X            if (thrashdir (sigdir) || ! sigfile[0]) { 
  1908. Xif (debug == 2) {
  1909. X    error_message ("NO sigfile=[%s]", sigfile);
  1910. X}
  1911. X                return (FILE *) 0;
  1912. X            } else {
  1913. Xif (debug == 2) {
  1914. X    error_message ("sigfile=[%s]", sigfile);
  1915. X}
  1916. X                return fopen (sigfile, "r");
  1917. X            }
  1918. X        }
  1919. X    }
  1920. X    
  1921. X    return (FILE *) 0;
  1922. X}
  1923. X
  1924. X
  1925. Xint thrashdir (sigdir)
  1926. X    char *sigdir;
  1927. X{
  1928. X    char *cwd;
  1929. X    int safeguard, recurse;
  1930. X    register DIR *dirp;
  1931. X    register DIR_BUF *dp;
  1932. X    register int c, numentries, pick;
  1933. X    struct stat st;
  1934. X
  1935. X    sigfile[0] = '\0';
  1936. X
  1937. X    if ((dirp = opendir (".")) == NULL) {
  1938. X        return (1);
  1939. X    }
  1940. X
  1941. X    numentries = 0;
  1942. X    while ((dp = readdir (dirp)) != NULL) {
  1943. X        numentries++;
  1944. X    }
  1945. X
  1946. X    /* 
  1947. X     * consider "." and ".." non-entries 
  1948. X     */
  1949. X    cwd = (char *) my_malloc (PATH_LEN + 1);
  1950. X    if (numentries < 3 || cwd == (char *) 0) {
  1951. X        closedir (dirp);
  1952. X        return (-1);
  1953. X    }
  1954. X
  1955. X    get_cwd (cwd);
  1956. X    recurse = strcmp (cwd, sigdir);
  1957. X
  1958. X    /* If we are using the root sig directory, we don't want
  1959. X     * to recurse, or else we might use a custom sig intended
  1960. X     * for a specific newsgroup (and not this one). 
  1961. X     */
  1962. X    for (safeguard=0, dp=NULL; safeguard<MAXLOOPS && dp==NULL; safeguard++) {
  1963. Xif (debug == 2) {
  1964. X    sprintf (msg, "sig loop=[%d] recurse=[%d]", safeguard, recurse);
  1965. X    error_message (msg, "");
  1966. X}
  1967. X#ifdef HAVE_REWINDDIR
  1968. X        rewinddir (dirp);
  1969. X#else
  1970. X        closedir (dirp);
  1971. X        if ((dirp = opendir (".")) == NULL) {
  1972. X            return (1);
  1973. X        }
  1974. X#endif
  1975. X        pick = rand () % numentries + 1;
  1976. X        while (--pick >= 0) {
  1977. X            if ((dp = readdir (dirp)) == NULL) {
  1978. X                break;
  1979. X            }
  1980. X        }
  1981. X        if (dp != NULL) {    /* if we could open the dir entry */
  1982. X            if (! strcmp (dp->d_name, ".") || 
  1983. X                ! strcmp(dp->d_name, "..")) {
  1984. X                dp = NULL;
  1985. X            } else {    /* if we have a non-dot entry */
  1986. X                if (stat (dp->d_name, &st) == -1) {
  1987. Xif (debug == 2) {
  1988. X    error_message ("error: before GAK stat(%s)", dp->d_name);
  1989. X}
  1990. Xgak:
  1991. X                    closedir (dirp);
  1992. Xif (debug == 2) {
  1993. X    error_message ("error: after GAK stat(%s)", dp->d_name);
  1994. X}
  1995. X                    return (1);
  1996. X                }
  1997. X                if (S_ISDIR(st.st_mode)) {
  1998. Xif (debug == 2) {
  1999. X    error_message ("Is a dir %s", dp->d_name);
  2000. X}
  2001. X                    if (recurse) {
  2002. X                        /* 
  2003. X                         * do subdirectories 
  2004. X                         */
  2005. X                        if (chdir (dp->d_name) < 0) {
  2006. X                            goto gak;
  2007. X                        }
  2008. X                        if ((c = thrashdir (sigdir)) == 1) {
  2009. X                            goto gak;
  2010. X                        } else if (c == -1) {
  2011. X                            /* 
  2012. X                             * the one we picked was an 
  2013. X                             * empty dir so try again. 
  2014. X                             */
  2015. X                            dp = NULL;
  2016. X                            chdir (cwd);
  2017. X                        }
  2018. X                    } else {
  2019. X                        dp = NULL;
  2020. X                    }
  2021. X                } else {    /* end dir; we have a file */
  2022. X                    get_cwd (sigfile);
  2023. X                    strcat (sigfile, "/");
  2024. X                    strcat (sigfile, dp->d_name);
  2025. Xif (debug == 2) {
  2026. X    error_message ("Found a file=[%s]", sigfile);
  2027. X}
  2028. X                }
  2029. X            }
  2030. X        }
  2031. X    }
  2032. X    free (cwd);
  2033. X
  2034. Xif (debug == 2) {
  2035. X    error_message ("return 0: sigfile=[%s]", sigfile);
  2036. X}
  2037. X
  2038. X    return (0);
  2039. X}
  2040. SHAR_EOF
  2041. chmod 0644 sigfile.c ||
  2042. echo 'restore of sigfile.c failed'
  2043. Wc_c="`wc -c < 'sigfile.c'`"
  2044. test 5107 -eq "$Wc_c" ||
  2045.     echo 'sigfile.c: original size 5107, current size' "$Wc_c"
  2046. rm -f _shar_wnt_.tmp
  2047. fi
  2048. # ============= strftime.c ==============
  2049. if test -f 'strftime.c' -a X"$1" != X"-c"; then
  2050.     echo 'x - skipping strftime.c (File already exists)'
  2051.     rm -f _shar_wnt_.tmp
  2052. else
  2053. > _shar_wnt_.tmp
  2054. echo 'x - extracting strftime.c (Text)'
  2055. sed 's/^X//' << 'SHAR_EOF' > 'strftime.c' &&
  2056. X/*
  2057. X *  Project   : tin - a threaded Netnews reader
  2058. X *  Module    : strftime.c
  2059. X *  Author    : A.Robbins & I.Lea
  2060. X *  Created   : 01-02-91
  2061. X *  Updated   : 29-09-92
  2062. X *  Notes     : Relatively quick-and-dirty implemenation of ANSI library 
  2063. X *              routine for System V Unix systems.
  2064. X *              It's written in old-style C for maximal portability.
  2065. X *  Example   : time (&secs);
  2066. X *              tm = localtime (&secs);
  2067. X *              num = strftime (buf, sizeof (buf), "%a %d-%m-%y %H:%M:%S", tm);
  2068. X *  Copyright : (c) Copyright 1991-92 by Arnold Robbins & Iain Lea
  2069. X *              You may  freely  copy or  redistribute  this software,
  2070. X *              so  long as there is no profit made from its use, sale
  2071. X *              trade or  reproduction.  You may not change this copy-
  2072. X *              right notice, and it must be included in any copy made
  2073. X */
  2074. X
  2075. X#include "tin.h"
  2076. X
  2077. X#ifdef SYSV
  2078. Xextern int daylight;
  2079. X#endif
  2080. X
  2081. X#define SYSV_EXT    1    /* stuff in System V ascftime routine */
  2082. X
  2083. X/* 
  2084. X * strftime --- produce formatted time 
  2085. X */
  2086. X
  2087. X#ifndef __STDC__
  2088. Xsize_t
  2089. Xmy_strftime(s, maxsize, format, timeptr)
  2090. Xchar *s;
  2091. Xsize_t maxsize;
  2092. Xchar *format;
  2093. Xstruct tm *timeptr;
  2094. X#else
  2095. Xsize_t
  2096. Xmy_strftime(char *s, size_t maxsize, char *format, struct tm *timeptr)
  2097. X#endif
  2098. X{
  2099. X    char *endp = s + maxsize;
  2100. X    char *start = s;
  2101. X    char tbuf[100];
  2102. X    int i;
  2103. X
  2104. X    /* 
  2105. X     * various tables, useful in North America 
  2106. X     */
  2107. X    static char *days_a[] = {
  2108. X        "Sun", "Mon", "Tue", "Wed",
  2109. X        "Thu", "Fri", "Sat",
  2110. X    };
  2111. SHAR_EOF
  2112. true || echo 'restore of strftime.c failed'
  2113. fi
  2114. echo 'End of tin-1.17 part 9'
  2115. echo 'File strftime.c is continued in part 10'
  2116. echo 10 > _shar_seq_.tmp
  2117. exit 0
  2118.  
  2119. --
  2120. NAMES  Iain Lea    Iain.Lea%anl433.uucp@Germany.EU.net
  2121. SNAIL  Siemens AG, ANL A433SZ, Gruendlacher Str. 248, 8510 Fuerth, Germany.
  2122. PHONE  +49-911-3089-407 (work) +49-911-331963 (home) +49-911-3089-290 (FAX)  
  2123.