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

  1. Newsgroups: comp.sources.misc
  2. From: iain@norisc.siemens.de (Iain J. Lea)
  3. Subject:  v23i078:  tin - threaded full screen newsreader, Patch03a/4
  4. Message-ID: <csm-v23i078=tin.221835@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 3179fb740cf6f2393878dc1f4d6d448d
  6. Date: Sun, 20 Oct 1991 03:19:46 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: iain@norisc.siemens.de (Iain J. Lea)
  10. Posting-number: Volume 23, Issue 78
  11. Archive-name: tin/patch03a
  12. Environment: BSD, SCO, ISC, SUNOS, SYSVR3, SYSVR4, ULTRIX, XENIX
  13. Patch-To: tin: Volume 23, Issue 15-23
  14.  
  15. This patch updates tin 1.0 PL2 to PL3 (patchlevel 3).
  16.  
  17. To apply unpack all 4 parts of this patch and then enter:
  18.  
  19.   patch < tin.patch03
  20.  
  21. Major changes over tin 1.0 PL2 are the following:
  22.  
  23. o  added -z and -Z options (see man page for more info).
  24. o  added 'g' and `G` commands to pager for 'less' users.
  25. o  added option to switch threading off on a group basis.
  26. o  added nroff formatted man page for SCO Unix users without troff.
  27. o  fixed auto-save articles routine that I broke in PL2.
  28. o  fixed -U option that was causing char echo if a ^Z was done.
  29. o  fixed a memory leak in 'W' command.
  30.  
  31. For more bugs fixes, other changes & additions read the CHANGES & TODO files.
  32.  
  33. --cut here--
  34. #!/bin/sh
  35. # This is tin1.0, a shell archive (shar 3.24)
  36. # made 09/30/1991 18:09 UTC by iain@estevax.uucp
  37. # Source directory /piez/iain/tin
  38. #
  39. # existing files WILL be overwritten
  40. #
  41. # This is part 1 of a multipart archive                                    
  42. # do not concatenate these parts, unpack them in order with /bin/sh        
  43. #
  44. # This shar contains:
  45. # length  mode       name
  46. # ------ ---------- ------------------------------------------
  47. # 141957 -rw------- tin.patch03
  48. #  36817 -rw------- tin.nrf
  49. #
  50. if touch 2>&1 | fgrep '[-amc]' > /dev/null
  51.  then TOUCH=touch
  52.  else TOUCH=true
  53. fi
  54. if test -r shar3_seq_.tmp; then
  55.     echo "Must unpack archives in sequence!"
  56.     next=`cat shar3_seq_.tmp`; echo "Please unpack part $next next"
  57.     exit 1
  58. fi
  59. # ============= tin.patch03 ==============
  60. echo "x - extracting tin.patch03 (Text)"
  61. sed 's/^X//' << 'SHAR_EOF' > tin.patch03 &&
  62. Xdiff -rcs 102/CHANGES 103/CHANGES
  63. X*** 102/CHANGES    Mon Sep 23 17:55:37 1991
  64. X--- 103/CHANGES    Mon Sep 30 14:52:28 1991
  65. X***************
  66. X*** 1,3 ****
  67. X--- 1,94 ----
  68. X+ CHANGES tin v1.0 PL2 -> tin 1.0 PL3
  69. X+ -----------------------------------
  70. X+ 
  71. X+ 1)  iain@estevax.uucp (Iain Lea)
  72. X+     ADD. help.c - added 'g' and `G` commands to show_info_page().
  73. X+ 
  74. X+ 2)  iain@estevax.uucp (Iain Lea)
  75. X+     ADD. art.c - added #ifdef SLOW_SCREEN_UPDATE to indexing routine.
  76. X+ 
  77. X+ 3)  otto@norisc.uucp (Otto Niesser)
  78. X+     BUG. Beim Befehl 'y' wird bei nicht mehr vorhandenen Gruppen die
  79. X+          Meldung 'Group not in active file' ausgegeben. Die einzelnen
  80. X+          Meldungen sind zwar durch <lf>, nicht aber durch <cr>
  81. X+          voneinander getrennt, d.h. stehen durcheinander auf dem screen.
  82. X+     FIX. newsrc.c - added '\r' to string that is passed to wait_message.
  83. X+ 
  84. X+ 4)  iain@estevax.uucp (Iain Lea)
  85. X+     BUG. While modifying feed.c I broke the auto-save articles routine.
  86. X+     FIX. feed.c - fixed it (things happen when one meddles!)    
  87. X+ 
  88. X+ 5)  hugh@slee01.sr1.ford.com (Hugh Fader)
  89. X+     BUG. It world help in installation to make the location of the file
  90. X+          containing the nntp server name configurable with a define.
  91. X+     FIX. Makefile - added define NNTP_SERVER_FILE.
  92. X+ 
  93. X+ 6)  spear@druco.att.com (Steve Spearman)
  94. X+     BUG. SysV has -DUSE_NNTP set as default in Makefile when NNTP is
  95. X+          only an option on most systems.
  96. X+     FIX. Makefile - removed -DUSE_NNTP from sysv & sysvr4 make options.
  97. X+ 
  98. X+ 7)  iain@estevax.uucp (Iain Lea)
  99. X+     ADD. group.c - added define UNREAD_ART_CHAR (default is '+'). I use 'U'.
  100. X+ 
  101. X+ 8)  klamer@mi.el.utwente.nl (Klamer Schutte)
  102. X+     BUG. When suspending tin while in the kill article menu, tin redraws
  103. X+          the display from the group index menu, not from the kill article menu.
  104. X+     FIX. kill.c - added signal handler to ignore ^Z while in kill_art_menu().
  105. X+ 
  106. X+ 9)  arj@cam-orl.co.uk (Andy Jackson)
  107. X+     ADD. add an option to switch off article threading so behaviour is
  108. X+          like vanilla rn.
  109. X+     FIX. art.c rcfile.c - added var thread_arts to control threading.
  110. X+ 
  111. X+ 10) anton@analsyn (Anton Aylward)
  112. X+     BUG. main.c - you omit a ',""' in one of the help messages.
  113. X+     FIX. main.c - added a ',""'.
  114. X+ 
  115. X+ 11) spear@druco.att.com (Steve Spearman)
  116. X+     ADD. vn has the ability to quickly mark all groups which were
  117. X+          examined as read on exiting.
  118. X+     FIX. misc.c - asks user if entered groups should all be marked read.
  119. X+ 
  120. X+ 12) arj@cam-orl.co.uk (Andy Jackson)
  121. X+     BUG. When started with -U update option and tin is suspended with
  122. X+          ^Z and then restarted, the terminal I/O state gets changed and
  123. X+          characters are echoed to the screen and missed by tin.
  124. X+     FIX. main.c - set update=FALSE in parent process after child is
  125. X+          forked to update indexes in the background.
  126. X+ 
  127. X+ 13) unido!asd.tds.philips.se!kko (Karl-Koenig Koenigsson)
  128. X+     BUG. If the last line of an article is the last displayed line
  129. X+          --More--(100%) [<num>/<num>] will be displayed and if SPACE
  130. X+          is pressed an empty page will be displayed.
  131. X+     FIX. page.c - compare note_size with note_mark[note_page] and if
  132. X+          they are the same set note_end to TRUE.
  133. X+ 
  134. X+ 14) iain@estevax.uucp (Iain Lea)
  135. X+     BUG. 'W' command causes a memory leak because it dynamically allocates
  136. X+          memory but never frees it.
  137. X+     FIX. post.c - added free() call to free allocated memory.
  138. X+ 
  139. X+ 15) tho@slxger.specialix.de (Torsten Homeyer)
  140. X+     BUG. SCO Unix base systems cannot format man page because it is sold
  141. X+          without troff/nroff because all man pages are already in catman
  142. X+          format.
  143. X+     FIX. tin.nrf - nroff formatted version of tin.1 man page (> 35K).
  144. X+ 
  145. X+ 16) iain@estevax.uucp (Iain Lea)
  146. X+     ADD. misc.c - added default command to shell_escape () routine.
  147. X+ 
  148. X+ 17) cc_paul@rcvie.co.at (Wolf N. Paul)
  149. X+     ADD. Could tin have a command line option which will cause it to
  150. X+          simply terminate with 0 exit status if there is no new news.
  151. X+     FIX. art.c main.c - added -Z option to return exit 0 no news 2 news.
  152. X+ 
  153. X+ 18) hakanl@lulea.telesoft.se (Hakan Lennestal)
  154. X+     BUG. Rn makes .oldnewsrc as a hard link to .newsrc. Tin copies
  155. X+          .newsrc to .oldnewsrc, the file gets copied to itself, and
  156. X+          the result is an empty file.
  157. X+     FIX. newsrc.c - added unlink() .oldnewsrc before backing up copy.
  158. X+ 
  159. X  CHANGES tin v1.0 PL1 -> tin 1.0 PL2
  160. X  -----------------------------------
  161. X  
  162. XOnly in 103: LINT
  163. Xdiff -rcs 102/MANIFEST 103/MANIFEST
  164. X*** 102/MANIFEST    Tue Sep 24 14:18:15 1991
  165. X--- 103/MANIFEST    Mon Sep 30 07:58:33 1991
  166. X***************
  167. X*** 1,39 ****
  168. X! MANIFEST for tin newsreader (Tue Sep 24 14:18:13 MET DST 1991)
  169. X  --------------------------------------------------------------
  170. X!     4762 README
  171. X!    14067 CHANGES
  172. X!     1810 TODO
  173. X       530 UPDATE_INDEX
  174. X!     8986 Makefile
  175. X!    26331 tin.1
  176. X      2247 wildmat.3
  177. X!     9348 tin.h
  178. X!     9707 lang.h
  179. X!     3688 nntp.h
  180. X!    17147 proto.h
  181. X        21 patchlevel.h
  182. X!    26620 art.c
  183. X      6043 curses.c
  184. X!     2575 debug.c
  185. X!    11087 feed.c
  186. X!    19165 group.c
  187. X!     2811 hashstr.c
  188. X!     5124 help.c
  189. X!     9529 kill.c
  190. X!    17911 lang.c
  191. X!     7015 main.c
  192. X      6239 memory.c
  193. X!    19195 misc.c
  194. X!    19674 newsrc.c
  195. X!     6736 open.c
  196. X!    24185 page.c
  197. X!    17061 post.c
  198. X      3098 prompt.c
  199. X!    18379 rcfile.c
  200. X!    19585 save.c
  201. X      2171 screen.c
  202. X      7830 search.c
  203. X!    19579 select.c
  204. X!     7569 signal.c
  205. X      4749 wildmat.c
  206. X!   382574 total
  207. X--- 1,39 ----
  208. X! MANIFEST for tin newsreader (Mon Sep 30 07:55:48 MET 1991)
  209. X  --------------------------------------------------------------
  210. X!     4698 README
  211. X!    17602 CHANGES
  212. X!     2060 TODO
  213. X       530 UPDATE_INDEX
  214. X!     9042 Makefile
  215. X!    27729 tin.1
  216. X      2247 wildmat.3
  217. X!     9798 tin.h
  218. X!     9739 lang.h
  219. X!     3720 nntp.h
  220. X!    17303 proto.h
  221. X        21 patchlevel.h
  222. X!    28499 art.c
  223. X      6043 curses.c
  224. X!     2631 debug.c
  225. X!    11387 feed.c
  226. X!    19434 group.c
  227. X!     2818 hashstr.c
  228. X!     5150 help.c
  229. X!    10301 kill.c
  230. X!    17947 lang.c
  231. X!     8130 main.c
  232. X      6239 memory.c
  233. X!    20999 misc.c
  234. X!    19676 newsrc.c
  235. X!     6791 open.c
  236. X!    24789 page.c
  237. X!    17279 post.c
  238. X      3098 prompt.c
  239. X!    18671 rcfile.c
  240. X!    19589 save.c
  241. X      2171 screen.c
  242. X      7830 search.c
  243. X!    19856 select.c
  244. X!     7531 signal.c
  245. X      4749 wildmat.c
  246. X!   396097 total
  247. Xdiff -rcs 102/Makefile 103/Makefile
  248. X*** 102/Makefile    Tue Sep 24 14:18:09 1991
  249. X--- 103/Makefile    Mon Sep 30 19:07:47 1991
  250. X***************
  251. X*** 29,34 ****
  252. X--- 29,37 ----
  253. X  #    NETLIBS should be the networking libraries you need to link with
  254. X  #    the nntp clientlib.o
  255. X  #
  256. X+ #  -D NNTP_SERVER_FILE
  257. X+ #    only define if your nntpserver file is other than /etc/nntpserver
  258. X+ #
  259. X  #  -D POSIX_JOB_CONTROL
  260. X  #    define if your machine uses sigaction() POSIX signal handling.
  261. X  #    This is defined as default for SysVR4 machines in this makefile.
  262. X***************
  263. X*** 66,75 ****
  264. X  #
  265. X  EXE=tin
  266. X  
  267. X- # name of dir where base version is for use by diff program
  268. X- #
  269. X- BASE_DIR=../tin-1.01
  270. X-  
  271. X  #BINDIR = /piez/iain/bin
  272. X  BINDIR = /usr/local/bin
  273. X  STRIP = strip
  274. X--- 69,74 ----
  275. X***************
  276. X*** 86,92 ****
  277. X          lang.o main.o memory.o misc.o newsrc.o open.o page.o post.o \
  278. X          prompt.o rcfile.o save.o screen.o search.o select.o signal.o wildmat.o
  279. X  
  280. X! SUPPORT = Makefile MANIFEST README CHANGES TODO UPDATE_INDEX *.[13]
  281. X  
  282. X  LINTFLAGS=-a -c -h -n -x 
  283. X  
  284. X--- 85,91 ----
  285. X          lang.o main.o memory.o misc.o newsrc.o open.o page.o post.o \
  286. X          prompt.o rcfile.o save.o screen.o search.o select.o signal.o wildmat.o
  287. X  
  288. X! SUPPORT = Makefile MANIFEST README CHANGES TODO UPDATE_INDEX *.[13] $(EXE).nrf
  289. X  
  290. X  LINTFLAGS=-a -c -h -n -x 
  291. X  
  292. X***************
  293. X*** 111,117 ****
  294. X  # For System V:
  295. X  sysv:
  296. X      @echo "Compiling for System V..."
  297. X!     @$(MAKE) CFLAGS='-c -O -DUSE_NNTP  -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
  298. X               NNTPLIB="clientlib.o" \
  299. X               NETLIBS="-lnet -lnsl_s" \
  300. X               LIBS="-lcurses -ltermcap" \
  301. X--- 110,116 ----
  302. X  # For System V:
  303. X  sysv:
  304. X      @echo "Compiling for System V..."
  305. X!     @$(MAKE) CFLAGS='-c -O -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
  306. X               NNTPLIB="clientlib.o" \
  307. X               NETLIBS="-lnet -lnsl_s" \
  308. X               LIBS="-lcurses -ltermcap" \
  309. X***************
  310. X*** 118,128 ****
  311. X               EXE=tin linkit
  312. X  
  313. X  # For System V Release 4:
  314. X  sysvr4:
  315. X      @echo "Compiling for System V Release 4..."
  316. X!     @$(MAKE) CFLAGS='-c -O -DUSE_NNTP -DPOSIX_JOB_CONTROL -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
  317. X!              NNTPLIB="./nntp/clientlib.o" \
  318. X!              NETLIBS="-lnsl -lsocket" \
  319. X               LIBS="-lcurses -ltermcap -L/usr/ucblib -lucb" \
  320. X               EXE=tin linkit
  321. X  
  322. X--- 117,127 ----
  323. X               EXE=tin linkit
  324. X  
  325. X  # For System V Release 4:
  326. X+ #             NNTPLIB="./nntp/clientlib.o" \
  327. X+ #             NETLIBS="-lnsl -lsocket" \
  328. X  sysvr4:
  329. X      @echo "Compiling for System V Release 4..."
  330. X!     @$(MAKE) CFLAGS='-c -O -DPOSIX_JOB_CONTROL -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR=\"/usr/lib/news\" -DSPOOLDIR=\"/usr/spool/news\"' \
  331. X               LIBS="-lcurses -ltermcap -L/usr/ucblib -lucb" \
  332. X               EXE=tin linkit
  333. X  
  334. X***************
  335. X*** 129,135 ****
  336. X  # For SCO Unix:
  337. X  sco:
  338. X      @echo "Compiling for SCO Unix..."
  339. X!     @$(MAKE) CFLAGS='-c -O -UM_XENIX -DUSE_INVERSE_HACK  -DAUTO_RESIZE -DLIBDIR="\"/usr/lib/news\"" -DSPOOLDIR="\"/usr/spool/news\""' \
  340. X               LIBS="-lcurses -lgen -lc_s" \
  341. X               EXE=tin linkit
  342. X  
  343. X--- 128,134 ----
  344. X  # For SCO Unix:
  345. X  sco:
  346. X      @echo "Compiling for SCO Unix..."
  347. X!     @$(MAKE) CFLAGS='-c -O -UM_XENIX -DUSE_INVERSE_HACK -DAUTO_RESIZE -DLIBDIR="\"/usr/lib/news\"" -DSPOOLDIR="\"/usr/spool/news\""' \
  348. X               LIBS="-lcurses -lgen -lc_s" \
  349. X               EXE=tin linkit
  350. X  
  351. X***************
  352. X*** 140,146 ****
  353. X      @echo "Compiling for Xenix 386..."
  354. X      @$(MAKE) CFLAGS='-c -Zi -DSYSV -DLIBDIR="\\"/usr/lib/news\\"" -DSPOOLDIR="\\"/usr/spool/news\\""' \
  355. X               LIBS="-lcurses -ltinfo -lx" \
  356. X!              EXE=tin linkit
  357. X  
  358. X  # SITE SPECIFIC - IGNORE
  359. X  norisc:
  360. X--- 139,145 ----
  361. X      @echo "Compiling for Xenix 386..."
  362. X      @$(MAKE) CFLAGS='-c -Zi -DSYSV -DLIBDIR="\\"/usr/lib/news\\"" -DSPOOLDIR="\\"/usr/spool/news\\""' \
  363. X               LIBS="-lcurses -ltinfo -lx" \
  364. X!              LFLAGS=-Zi EXE=tin linkit
  365. X  
  366. X  # SITE SPECIFIC - IGNORE
  367. X  norisc:
  368. X***************
  369. X*** 169,192 ****
  370. X  
  371. X  linkit: $(OBJECTS)
  372. X      @echo "Linking $(EXE)..."
  373. X! #    $(CC) -Zi -o $(EXE) $(OBJECTS) $(NNTPLIB) $(NETLIBS) $(LIBS) 
  374. X!     $(CC) -o $(EXE) $(OBJECTS) $(NNTPLIB) $(NETLIBS) $(LIBS) 
  375. X      @ls -l $(EXE)
  376. X  
  377. X! install: all
  378. X!     @echo "installing $(EXE)..."
  379. X      @$(STRIP) $(EXE)
  380. X      @-mv $(EXE) $(BINDIR)
  381. X      @chmod 755 $(BINDIR)/$(EXE)
  382. X  
  383. X! install_setuid: all
  384. X!     @echo "installing SETUID $(EXE)..."
  385. X      @mv $(EXE) $(BINDIR)
  386. X      @chown news $(BINDIR)/$(EXE) 
  387. X      @su news -c "chmod 4755 $(BINDIR)/$(EXE)"
  388. X  
  389. X  proto:
  390. X!     @echo "generating function prototypes for proto.h..."
  391. X      @echo "#ifdef __STDC__" > PROTO.H
  392. X      @echo " " >> PROTO.H
  393. X      @cproto $(CFILES) >> PROTO.H
  394. X--- 168,193 ----
  395. X  
  396. X  linkit: $(OBJECTS)
  397. X      @echo "Linking $(EXE)..."
  398. X!     $(CC) $(LFLAGS) -o $(EXE) $(OBJECTS) $(NNTPLIB) $(NETLIBS) $(LIBS) 
  399. X      @ls -l $(EXE)
  400. X  
  401. X! install:
  402. X!     @echo "Installing $(EXE)..."
  403. X      @$(STRIP) $(EXE)
  404. X      @-mv $(EXE) $(BINDIR)
  405. X      @chmod 755 $(BINDIR)/$(EXE)
  406. X+     @ls -l $(BINDIR)/$(EXE)
  407. X  
  408. X! install_setuid:
  409. X!     @echo "Installing SETUID $(EXE)..."
  410. X!     @$(STRIP) $(EXE)
  411. X      @mv $(EXE) $(BINDIR)
  412. X      @chown news $(BINDIR)/$(EXE) 
  413. X      @su news -c "chmod 4755 $(BINDIR)/$(EXE)"
  414. X+     @ls -l $(BINDIR)/$(EXE)
  415. X  
  416. X  proto:
  417. X!     @echo "Generating function prototypes for proto.h..."
  418. X      @echo "#ifdef __STDC__" > PROTO.H
  419. X      @echo " " >> PROTO.H
  420. X      @cproto $(CFILES) >> PROTO.H
  421. X***************
  422. X*** 199,205 ****
  423. X      @-mv PROTO.H proto.h
  424. X  
  425. X  shar:
  426. X!     @echo "generating shell archive..."
  427. X      @echo "MANIFEST for tin newsreader (`date`)" > MANIFEST
  428. X      @echo "--------------------------------------------------------------" >> MANIFEST
  429. X      @wc -c README CHANGES TODO UPDATE_INDEX Makefile *.[13] $(HFILES) $(CFILES) >> MANIFEST
  430. X--- 200,209 ----
  431. X      @-mv PROTO.H proto.h
  432. X  
  433. X  shar:
  434. X!     @echo "Generating shell archive..."
  435. X!     @echo "Creating nroff man page..."
  436. X!     @nroff -man $(EXE).1 > $(EXE).nrf
  437. X!     @echo "Creating MANIFEST..."
  438. X      @echo "MANIFEST for tin newsreader (`date`)" > MANIFEST
  439. X      @echo "--------------------------------------------------------------" >> MANIFEST
  440. X      @wc -c README CHANGES TODO UPDATE_INDEX Makefile *.[13] $(HFILES) $(CFILES) >> MANIFEST
  441. X***************
  442. X*** 207,273 ****
  443. X  
  444. X  uuencode:
  445. X      make tar
  446. X!     @echo "uuencoding $(EXE).tar.Z..."
  447. X      @uuencode $(EXE).tar.Z $(EXE).tar.Z > $(EXE).tar.Z.uue
  448. X      @ls -l $(EXE).tar.Z.uue
  449. X   
  450. X  diff:
  451. X!     @echo "generating diffs against $(BASE_DIR) (results in $(EXE).diff)..."
  452. X      @-mv -f $(EXE).diff $(EXE).diff-
  453. X!     @diff $(BASE_DIR) . > $(EXE).diff
  454. X  
  455. X  tar:
  456. X!     @echo "archiving files to $(EXE).tar..."
  457. X      @-rm $(EXE).tar $(EXE).tar.Z > /dev/null 2>&1
  458. X      @tar cvf $(EXE).tar $(SUPPORT) $(CFILES) $(HFILES) 
  459. X!     @echo "compressing $(EXE).tar..."
  460. X      @compress $(EXE).tar 
  461. X      @ls -l $(EXE).tar.Z
  462. X  
  463. X  zoo:
  464. X!     @echo "archiving files to $(EXE).zoo..."
  465. X      @-rm $(EXE).zoo > /dev/null 2>&1
  466. X      @zoo ah $(EXE).zoo  $(SUPPORT) $(CFILES) $(HFILES)
  467. X      @ls -l $(EXE).zoo
  468. X  
  469. X  tags:
  470. X!     @echo "generating tags (results in ./tags)..."
  471. X      @-rm tags
  472. X      @ctags $(HFILES) $(CFILES) 
  473. X  
  474. X  lint:
  475. X!     @echo "linting source (results in ./LINT)..."
  476. X      @lint $(LINTFLAGS) -DUSE_NNTP $(CFILES) > LINT
  477. X  
  478. X  clean:
  479. X!     @echo "cleaning..."
  480. X      @-'rm' -rf *.o #* $(EXE).diff*
  481. X  
  482. X  clobber:
  483. X!     @echo "clobbering..."
  484. X      @-'rm' -rf *.o #* tags $(EXE) $(EXE).diff*
  485. X  
  486. X  cflow:
  487. X!     @echo "creating cflow for $(EXE)..."
  488. X      @cflow $(CFILES) > cflow.$(EXE) &
  489. X  
  490. X- grind:
  491. X-     @echo "grinding tags index..."
  492. X-     @ctags -v *.[ch] | sort -f > $(EXE).index
  493. X- 
  494. X  man:
  495. X!     @echo "printing $(EXE) manual to $(PRINT)..."
  496. X      @$(ROFF) $(PRINT) $(EXE).1
  497. X  
  498. X  print:
  499. X      @for FILE in $(HFILES) $(CFILES); do \
  500. X!     echo "printing $$FILE to $(PRINT)..."; \
  501. X      expand -4 $$FILE | enscript -2r -h -G $(PRINT) -b $$FILE; \
  502. X      done
  503. X  
  504. X  dist:
  505. X      @for HOST in estevax kommu beperl; do \
  506. X!     echo "copying to $$HOST..."; \
  507. X      rcp $(CFILES) $(HFILES) $(SUPPORT) $$HOST:.src/tin &; \
  508. X      done
  509. X  
  510. X--- 211,273 ----
  511. X  
  512. X  uuencode:
  513. X      make tar
  514. X!     @echo "Uuencoding $(EXE).tar.Z..."
  515. X      @uuencode $(EXE).tar.Z $(EXE).tar.Z > $(EXE).tar.Z.uue
  516. X      @ls -l $(EXE).tar.Z.uue
  517. X   
  518. X  diff:
  519. X!     @echo "Generating diffs against 102 (results in $(EXE).diff)..."
  520. X      @-mv -f $(EXE).diff $(EXE).diff-
  521. X!     @diff -rcs 102 103 > $(EXE).diff
  522. X  
  523. X  tar:
  524. X!     @echo "Archiving files to $(EXE).tar..."
  525. X      @-rm $(EXE).tar $(EXE).tar.Z > /dev/null 2>&1
  526. X      @tar cvf $(EXE).tar $(SUPPORT) $(CFILES) $(HFILES) 
  527. X!     @echo "Compressing $(EXE).tar..."
  528. X      @compress $(EXE).tar 
  529. X      @ls -l $(EXE).tar.Z
  530. X  
  531. X  zoo:
  532. X!     @echo "Archiving files to $(EXE).zoo..."
  533. X      @-rm $(EXE).zoo > /dev/null 2>&1
  534. X      @zoo ah $(EXE).zoo  $(SUPPORT) $(CFILES) $(HFILES)
  535. X      @ls -l $(EXE).zoo
  536. X  
  537. X  tags:
  538. X!     @echo "Generating tags (results in ./tags)..."
  539. X      @-rm tags
  540. X      @ctags $(HFILES) $(CFILES) 
  541. X  
  542. X  lint:
  543. X!     @echo "Linting source (results in ./LINT)..."
  544. X      @lint $(LINTFLAGS) -DUSE_NNTP $(CFILES) > LINT
  545. X  
  546. X  clean:
  547. X!     @echo "Cleaning..."
  548. X      @-'rm' -rf *.o #* $(EXE).diff*
  549. X  
  550. X  clobber:
  551. X!     @echo "Clobbering..."
  552. X      @-'rm' -rf *.o #* tags $(EXE) $(EXE).diff*
  553. X  
  554. X  cflow:
  555. X!     @echo "Creating cflow for $(EXE)..."
  556. X      @cflow $(CFILES) > cflow.$(EXE) &
  557. X  
  558. X  man:
  559. X!     @echo "Printing $(EXE) manual to $(PRINT)..."
  560. X      @$(ROFF) $(PRINT) $(EXE).1
  561. X  
  562. X  print:
  563. X      @for FILE in $(HFILES) $(CFILES); do \
  564. X!     echo "Printing $$FILE to $(PRINT)..."; \
  565. X      expand -4 $$FILE | enscript -2r -h -G $(PRINT) -b $$FILE; \
  566. X      done
  567. X  
  568. X  dist:
  569. X      @for HOST in estevax kommu beperl; do \
  570. X!     echo "Copying to $$HOST..."; \
  571. X      rcp $(CFILES) $(HFILES) $(SUPPORT) $$HOST:.src/tin &; \
  572. X      done
  573. X  
  574. Xdiff -rcs 102/README 103/README
  575. X*** 102/README    Tue Sep 24 14:15:14 1991
  576. X--- 103/README    Mon Sep 30 14:53:14 1991
  577. X***************
  578. X*** 1,23 ****
  579. X! This is version 1.0 PL2 (patchlevel 2) of the tin newsreader.
  580. X  
  581. X! Major improvements over tin 1.0 PL1 are the following:
  582. X  
  583. X! o  -n option informs of any new newsgroups since last session.
  584. X  
  585. X! o  -S option saves news to private news structure for later reading.
  586. X  
  587. X! o  -U option forks a tin -u to update indexes while reading news in foregroud.
  588. X  
  589. X! o  Goto first / last unread article within a group (selectable).
  590. X  
  591. X! o  Resizes automatically if running under an Xterm.
  592. X  
  593. X! o  Added regex pattern matching to kill articles.
  594. X  
  595. X! o  Cancel a posted article from within tin.
  596. X  
  597. X- o  Backups .newsrc to .oldnewsrc on starting tin.
  598. X- 
  599. X  For more bugs fixes, other changes & additions read the CHANGES & TODO files.
  600. X  
  601. X  I am still looking for people to send me ideas/comments & bug reports.
  602. X--- 1,21 ----
  603. X! This is version 1.0 PL3 (patchlevel 3) of the tin newsreader.
  604. X  
  605. X! Major improvements over tin 1.0 PL2 are the following:
  606. X  
  607. X! o  added -z and -Z options.
  608. X  
  609. X! o  added 'g' and `G` commands to pager for 'less' users.
  610. X  
  611. X! o  added option to switch threading off on a group basis.
  612. X  
  613. X! o  added nroff formatted man page for SCO Unix users without troff.
  614. X  
  615. X! o  fixed auto-save articles routine that I broke in PL2.
  616. X  
  617. X! o  fixed -U option that was causing char echo if a ^Z was done.
  618. X  
  619. X! o  fixed a memory leak in 'W' command.
  620. X  
  621. X  For more bugs fixes, other changes & additions read the CHANGES & TODO files.
  622. X  
  623. X  I am still looking for people to send me ideas/comments & bug reports.
  624. X***************
  625. X*** 76,82 ****
  626. X      5)  386 PC & SCO SysVR3.2
  627. X      6)  386 PC & ISC SysVR3.2
  628. X      7)  ICL DRS6000 (sparc) & SysVR4.0 
  629. X!     8)  Sun 3/4/IPC/Sparcstation & SunOS 4.0.3/4.1/4.1.1 
  630. X      9)  Intel303 & SysVR4
  631. X      10) DEC 5000 & Ultrix 4.1
  632. X      11) Sony News & SysVR4 / BSD 4.3
  633. X--- 74,80 ----
  634. X      5)  386 PC & SCO SysVR3.2
  635. X      6)  386 PC & ISC SysVR3.2
  636. X      7)  ICL DRS6000 (sparc) & SysVR4.0 
  637. X!     8)  Sun 3/4/IPC/SS1/SS2 & SunOS 4.0.3/4.1/4.1.1 
  638. X      9)  Intel303 & SysVR4
  639. X      10) DEC 5000 & Ultrix 4.1
  640. X      11) Sony News & SysVR4 / BSD 4.3
  641. X***************
  642. X*** 83,89 ****
  643. X      12) Atari STe & Minix 1.5.10.3b
  644. X      13) Apricot VX/FT & SCO 3.2.2
  645. X      14) DIAB DS90 & D-NIX 5.3
  646. X!        
  647. X  Building Tin
  648. X  ------------
  649. X      1)  type 'make' and a few system types will be displayed
  650. X--- 81,88 ----
  651. X      12) Atari STe & Minix 1.5.10.3b
  652. X      13) Apricot VX/FT & SCO 3.2.2
  653. X      14) DIAB DS90 & D-NIX 5.3
  654. X!     15) Amdahl & SysVR3
  655. X!         
  656. X  Building Tin
  657. X  ------------
  658. X      1)  type 'make' and a few system types will be displayed
  659. X***************
  660. X*** 110,120 ****
  661. X  
  662. X  I wish to thank the following people for bug reports/patchs/comments:
  663. X  
  664. X! Klaus Arzig, Reiner Balling, Volker Beyer, Roger Binns, Georg Biehler,
  665. X! Andreas Brosig, Peter Dressler, Gerhard Ermer, Joachim Feld,
  666. X! Bernhard Gmelch, Viet Hoang, Joe Johnson, Cyrill Jung,
  667. X! Karl-Koenig Koenigsson, Hans-Juergen Knopp, Bob Lukas, Clifford Luke,
  668. X! Phillip Molloy, Toni Metz, Greg Miller, Klaus Neuberger, Otto Niesser,
  669. X! Wolf Paul, Nickolay Saukh, Rich Salz, Fredy Schwatz, Bernd Schwerin,
  670. X! Karl-Olav Serrander, Chris Smith, Cliff Stanford, Adri Verhoef,
  671. X  Cary Whitney
  672. X--- 109,120 ----
  673. X  
  674. X  I wish to thank the following people for bug reports/patchs/comments:
  675. X  
  676. X! Klaus Arzig, Anton Aylward, Reiner Balling, Volker Beyer, Roger Binns,
  677. X! Georg Biehler, Andreas Brosig, Peter Dressler, Gerhard Ermer, Hugh Fader,
  678. X! Joachim Feld, Bernhard Gmelch, Viet Hoang, Torsten Homeyer, Andy Jackson,
  679. X! Joe Johnson, Cyrill Jung, Karl-Koenig Koenigsson, Hans-Juergen Knopp,
  680. X! Hakan Lennestal, Bob Lukas, Clifford Luke, Phillip Molloy, Toni Metz,
  681. X! Greg Miller, Klaus Neuberger, Otto Niesser, Wolf Paul, Nickolay Saukh,
  682. X! Rich Salz, Fredy Schwatz, Bernd Schwerin, Klamer Schutte, Karl-Olav
  683. X! Serrander, Chris Smith, Steve Spearman, Cliff Stanford, Adri Verhoef,
  684. X  Cary Whitney
  685. Xdiff -rcs 102/TODO 103/TODO
  686. X*** 102/TODO    Mon Sep 23 17:55:38 1991
  687. X--- 103/TODO    Mon Sep 30 18:59:59 1991
  688. X***************
  689. X*** 8,20 ****
  690. X  
  691. X  o  Fix code to KILL articles with 't' command.
  692. X  
  693. X  o  Fix 'z' so that it stays unread even if a KILL is performed before
  694. X     leaving the group.
  695. X  
  696. X! o  Fix so that it always finds unread messages. 
  697. X  
  698. X  ADD FEATURES
  699. X  ------------
  700. X  o  Add crossposting of articles so that read ones are marked read in 
  701. X     other groups. in rn it uses Xref: line to do this. Perhaps just
  702. X     use update_group() to do it?
  703. X--- 8,34 ----
  704. X  
  705. X  o  Fix code to KILL articles with 't' command.
  706. X  
  707. X+ o  Fix so that it always finds unread messages. 
  708. X+ 
  709. X  o  Fix 'z' so that it stays unread even if a KILL is performed before
  710. X     leaving the group.
  711. X  
  712. X! o  Fix 'z' at group selection level so whole screen is not redrawn.
  713. X  
  714. X+ o  Fix -s <savedir> -S so that an active is constructed when new
  715. X+    articles are saved to private news dir.
  716. X+  
  717. X  ADD FEATURES
  718. X  ------------
  719. X+ o  Add 2nd page to 'M' Options menu and put on the options:
  720. X+      1) ask user if to update read groups on exits (al a vn)
  721. X+      2) thread/unthread groups (read from ~/.tin/unthread)
  722. X+ 
  723. X+ o  Add elm style print command with %s in it for printing in 'M'.
  724. X+ 
  725. X+ 
  726. X+ o  Add mail/save to -S option. Selectable by 'M' menu.
  727. X+ 
  728. X  o  Add crossposting of articles so that read ones are marked read in 
  729. X     other groups. in rn it uses Xref: line to do this. Perhaps just
  730. X     use update_group() to do it?
  731. X***************
  732. X*** 26,34 ****
  733. X  
  734. X  o  Add code to 'N' at group level so it goes to next group with unread news.
  735. X  
  736. X- o  Add -s <dir> option to save new news to specifed spool dir for when
  737. X-    one goes on holiday so that it can be read later by giving -S <dir>.
  738. X- 
  739. X  o  Add 'H' context senstive level help screens
  740. X  
  741. X  o  Sort .newsrc according to preference. (sort active file as it is read)
  742. X--- 40,45 ----
  743. X***************
  744. X*** 36,41 ****
  745. X--- 47,55 ----
  746. X  o  Add code to do unpack patches
  747. X  
  748. X  o  Add time period kill article
  749. X+ 
  750. X+ o  Add TAB like command to go to next group with unread news but don't
  751. X+    enter it
  752. X  
  753. X  PIPEDREAMS
  754. X  ----------
  755. XFiles 102/UPDATE_INDEX and 103/UPDATE_INDEX are identical
  756. Xdiff -rcs 102/art.c 103/art.c
  757. X*** 102/art.c    Tue Sep 24 08:13:21 1991
  758. X--- 103/art.c    Mon Sep 30 18:33:02 1991
  759. X***************
  760. X*** 3,9 ****
  761. X   *  Module    : art.c
  762. X   *  Author    : R.Skrenta / I.Lea
  763. X   *  Created   : 01-04-91
  764. X!  *  Updated   : 24-09-91
  765. X   *  Release   : 1.0
  766. X   *  Notes     :
  767. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  768. X--- 3,9 ----
  769. X   *  Module    : art.c
  770. X   *  Author    : R.Skrenta / I.Lea
  771. X   *  Created   : 01-04-91
  772. X!  *  Updated   : 29-09-91
  773. X   *  Release   : 1.0
  774. X   *  Notes     :
  775. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  776. X***************
  777. X*** 19,25 ****
  778. X  
  779. X  extern int errno;
  780. X  
  781. X! char index_file[LEN+1];
  782. X  char *glob_art_group;
  783. X  int index_file_killed = FALSE;
  784. X  long last_read_article;
  785. X--- 19,25 ----
  786. X  
  787. X  extern int errno;
  788. X  
  789. X! char index_file[LEN];
  790. X  char *glob_art_group;
  791. X  int index_file_killed = FALSE;
  792. X  long last_read_article;
  793. X***************
  794. X*** 286,294 ****
  795. X                  CleartoEOLN ();
  796. X                  center_line (0, TRUE, group);
  797. X                  display_groupname = FALSE;
  798. X              }
  799. X!             sprintf (msg, txt_indexing, count);
  800. X              wait_message (msg);
  801. X          }
  802. X      }
  803. X  
  804. X--- 286,299 ----
  805. X                  CleartoEOLN ();
  806. X                  center_line (0, TRUE, group);
  807. X                  display_groupname = FALSE;
  808. X+ #ifdef SLOW_SCREEN_UPDATE
  809. X+                 wait_message (txt_indexing);
  810. X+ #endif
  811. X              }
  812. X! #ifndef SLOW_SCREEN_UPDATE
  813. X!             sprintf (msg, txt_indexing_num, count);
  814. X              wait_message (msg);
  815. X+ #endif
  816. X          }
  817. X      }
  818. X  
  819. X***************
  820. X*** 307,312 ****
  821. X--- 312,318 ----
  822. X  void make_threads (rethread)
  823. X      int rethread;
  824. X  {
  825. X+     extern int cur_groupnum;
  826. X      register int i;
  827. X      register int j;
  828. X  
  829. X***************
  830. X*** 313,319 ****
  831. X      /*
  832. X       *  .thread & .inthread need to be reset if re-threading arts[]
  833. X       */
  834. X!     if (rethread) {
  835. X          for (i=0 ; i < top ; i++) {
  836. X              arts[i].thread = ART_NORMAL;
  837. X              arts[i].inthread = FALSE;
  838. X--- 319,326 ----
  839. X      /*
  840. X       *  .thread & .inthread need to be reset if re-threading arts[]
  841. X       */
  842. X!     if (rethread && thread_arts &&
  843. X!         active[my_group[cur_groupnum]].thread) {
  844. X          for (i=0 ; i < top ; i++) {
  845. X              arts[i].thread = ART_NORMAL;
  846. X              arts[i].inthread = FALSE;
  847. X***************
  848. X*** 340,355 ****
  849. X              break;
  850. X      }
  851. X  
  852. X!     for (i = 0; i < top; i++) {
  853. X!         if (arts[i].thread == ART_NORMAL) {
  854. X!             for (j = i+1; j < top; j++) {
  855. X!                 if (arts[j].thread != ART_EXPIRED &&
  856. X!                     ((arts[i].subject == arts[j].subject) ||
  857. X!                     ((arts[i].part || arts[i].patch) &&
  858. X!                     arts[i].archive == arts[j].archive))) {
  859. X!                         arts[i].thread = j;
  860. X!                         arts[j].inthread = TRUE;
  861. X!                         break;
  862. X                  }
  863. X              }
  864. X          }
  865. X--- 347,364 ----
  866. X              break;
  867. X      }
  868. X  
  869. X!     if (thread_arts && active[my_group[cur_groupnum]].thread) {
  870. X!         for (i = 0; i < top; i++) {
  871. X!             if (arts[i].thread == ART_NORMAL) {
  872. X!                 for (j = i+1; j < top; j++) {
  873. X!                     if (arts[j].thread != ART_EXPIRED &&
  874. X!                         ((arts[i].subject == arts[j].subject) ||
  875. X!                         ((arts[i].part || arts[i].patch) &&
  876. X!                         arts[i].archive == arts[j].archive))) {
  877. X!                             arts[i].thread = j;
  878. X!                             arts[j].inthread = TRUE;
  879. X!                             break;
  880. X!                     }
  881. X                  }
  882. X              }
  883. X          }
  884. X***************
  885. X*** 501,507 ****
  886. X      char *group;
  887. X      int killed;
  888. X  {
  889. X!     char nam[LEN+1];
  890. X      FILE *fp;
  891. X      int *iptr;
  892. X      int realnum;
  893. X--- 510,516 ----
  894. X      char *group;
  895. X      int killed;
  896. X  {
  897. X!     char nam[LEN];
  898. X      FILE *fp;
  899. X      int *iptr;
  900. X      int realnum;
  901. X***************
  902. X*** 673,679 ****
  903. X  {
  904. X      int error = 0;
  905. X      int i, n;
  906. X!     char buf[LEN+1], *p;
  907. X      FILE *fp;
  908. X  
  909. X      top = 0;
  910. X--- 682,688 ----
  911. X  {
  912. X      int error = 0;
  913. X      int i, n;
  914. X!     char buf[LEN], *p;
  915. X      FILE *fp;
  916. X  
  917. X      top = 0;
  918. X***************
  919. X*** 882,888 ****
  920. X      char *group;
  921. X  {
  922. X      unsigned long h;
  923. X!     static char buf[LEN+1];
  924. X      int i;
  925. X      char *p;
  926. X      FILE *fp;
  927. X--- 891,897 ----
  928. X      char *group;
  929. X  {
  930. X      unsigned long h;
  931. X!     static char buf[LEN];
  932. X      int i;
  933. X      char *p;
  934. X      FILE *fp;
  935. X***************
  936. X*** 921,927 ****
  937. X  void do_update()
  938. X  {
  939. X      int i, j;
  940. X!     char group_path[LEN+1];
  941. X      char *p;
  942. X      long epoch;
  943. X      
  944. X--- 930,936 ----
  945. X  void do_update()
  946. X  {
  947. X      int i, j;
  948. X!     char group_path[LEN];
  949. X      char *p;
  950. X      long epoch;
  951. X      
  952. X***************
  953. X*** 960,970 ****
  954. X  }
  955. X  
  956. X  /*
  957. X   *  Save any new articles to savedir and mark arts read and mail user
  958. X   *  and inform how many arts in which groups were saved.
  959. X   */
  960. X  
  961. X! void save_any_news ()
  962. X  {
  963. X      char buf[LEN], log[LEN], *p;
  964. X      char group_path[LEN];
  965. X--- 969,984 ----
  966. X  }
  967. X  
  968. X  /*
  969. X+  *  Check for articles and say how many new/unread in each group.
  970. X+  *  or
  971. X+  *  Start if new/unread articles and return first group with new/unread.
  972. X+  *  or
  973. X   *  Save any new articles to savedir and mark arts read and mail user
  974. X   *  and inform how many arts in which groups were saved.
  975. X   */
  976. X  
  977. X! int check_start_save_any_news (check_start_save)
  978. X!     int check_start_save;
  979. X  {
  980. X      char buf[LEN], log[LEN], *p;
  981. X      char group_path[LEN];
  982. X***************
  983. X*** 971,993 ****
  984. X      extern FILE *note_fp;
  985. X      FILE *fp, *fp_log;
  986. X      int i, j, print_group;
  987. X      int    log_opened = TRUE;
  988. X      int saved_arts = 0;
  989. X      int saved_groups = 0;
  990. X      long epoch;
  991. X  
  992. X!     sprintf (log, "%s/log", rcdir);
  993. X!     if ((fp_log = fopen (log, "w")) == NULL) {
  994. X!         error_message (txt_cannot_open, log);
  995. X!         fp_log = stdout;
  996. X!         verbose = FALSE;
  997. X!         log_opened = FALSE;
  998. X!     } 
  999. X      
  1000. X-     time (&epoch);
  1001. X-     fprintf (fp_log, "To: %s\r\n", userid);
  1002. X-     fprintf (fp_log, "Subject: NEWS LOG %s\r\n", ctime (&epoch));
  1003. X- 
  1004. X      for (i = 0; i < local_top; i++) {
  1005. X          strcpy (group_path, active[my_group[i]].name);
  1006. X          for (p = group_path; *p; p++) {
  1007. X--- 985,1021 ----
  1008. X      extern FILE *note_fp;
  1009. X      FILE *fp, *fp_log;
  1010. X      int i, j, print_group;
  1011. X+     int check_arts = 0;
  1012. X      int    log_opened = TRUE;
  1013. X+     int print_first = TRUE;
  1014. X      int saved_arts = 0;
  1015. X      int saved_groups = 0;
  1016. X+     int unread_news = FALSE;    
  1017. X      long epoch;
  1018. X  
  1019. X!     switch (check_start_save) {
  1020. X!         case CHECK_ANY_NEWS:
  1021. X!             if (verbose) {
  1022. X!                 wait_message ("Checking for news...");
  1023. X!             }
  1024. X!             break;
  1025. X!         case START_ANY_NEWS:
  1026. X!             wait_message ("Checking for news...");
  1027. X!             break;
  1028. X!         case SAVE_ANY_NEWS:
  1029. X!             sprintf (log, "%s/log", rcdir);
  1030. X!             if ((fp_log = fopen (log, "w")) == NULL) {
  1031. X!                 error_message (txt_cannot_open, log);
  1032. X!                 fp_log = stdout;
  1033. X!                 verbose = FALSE;
  1034. X!                 log_opened = FALSE;
  1035. X!             }
  1036. X!             time (&epoch);
  1037. X!             fprintf (fp_log, "To: %s\r\n", userid);
  1038. X!             fprintf (fp_log, "Subject: NEWS LOG %s\r\n", ctime (&epoch));
  1039. X!             break;
  1040. X!     }
  1041. X      
  1042. X      for (i = 0; i < local_top; i++) {
  1043. X          strcpy (group_path, active[my_group[i]].name);
  1044. X          for (p = group_path; *p; p++) {
  1045. X***************
  1046. X*** 999,1066 ****
  1047. X          index_group (active[my_group[i]].name, group_path);
  1048. X          read_newsrc_line (active[my_group[i]].name);
  1049. X          print_group = TRUE;
  1050. X  
  1051. X          for (j = 0; j < top; j++) {
  1052. X              if (arts[j].unread == ART_UNREAD)  {
  1053. X!                 if (print_group) {    
  1054. X!                     sprintf (msg, "Saving %s...\r\n", active[my_group[i]].name);
  1055. X!                     fprintf (fp_log, "%s", msg);
  1056. X!                     if (verbose) {
  1057. X!                         printf ("%s", msg);
  1058. X!                     }
  1059. X!                     print_group = FALSE;
  1060. X!                     saved_groups++;
  1061. X!                     sprintf (buf, "%s/dummy", group_path);
  1062. X!                     create_path (buf);
  1063. X!                 }
  1064. X!                 sprintf (msg, "[%5ld]  %s\r\n", arts[j].artnum, arts[j].subject);
  1065. X!                 fprintf (fp_log, "%s", msg);
  1066. X!                 if (verbose) {
  1067. X!                     printf ("%s", msg);
  1068. X!                 }
  1069. X!                 saved_arts++;
  1070. X!                 
  1071. X!                 sprintf (buf, "%s/%s/%ld", savedir, group_path, arts[j].artnum);
  1072. X!                 if ((fp = fopen (buf, "w")) == NULL) {
  1073. X!                     fprintf (fp_log, txt_cannot_open, buf);
  1074. X!                     error_message (txt_cannot_open, buf);
  1075. X!                     continue;
  1076. X!                 }
  1077. X!                 
  1078. X!                 open_note (arts[j].artnum, group_path);
  1079. X  
  1080. X!                 fseek (note_fp, 0L, 0);
  1081. X! 
  1082. X!                 copy_fp (note_fp, fp, (char *) 0);
  1083. X                  
  1084. X!                 note_cleanup ();
  1085. X!                 
  1086. X!                 fclose (fp);
  1087. X              }
  1088. X          }
  1089. X!         if (catchup) {
  1090. X!             for (j = 0; j < top; j++) {
  1091. X!                 arts[j].unread = ART_READ;
  1092. X              }
  1093. X!             update_newsrc (active[my_group[i]].name, my_group[i], FALSE);
  1094. X          }
  1095. X      }
  1096. X!     sprintf (msg, "\r\nSaved %d articles from %d groups\r\n", saved_arts, saved_groups);
  1097. X!     fprintf (fp_log, "%s", msg);
  1098. X!     if (verbose) {
  1099. X!         printf ("%s", msg);
  1100. X      }
  1101. X!         
  1102. X!     if (log_opened) {
  1103. X!         fclose (fp_log);
  1104. X!         if (verbose) {
  1105. X!             printf ("Mailing log to %s\r\n", userid);
  1106. X!         }
  1107. X!         sprintf (buf, "%s \"%s\" < %s", mailer, userid, log);
  1108. X!         if (! invoke_cmd (buf)) {
  1109. X!             error_message (txt_command_failed_s, buf);
  1110. X!         }
  1111. X!     }
  1112. X  }
  1113. X  
  1114. X  /*
  1115. X--- 1027,1136 ----
  1116. X          index_group (active[my_group[i]].name, group_path);
  1117. X          read_newsrc_line (active[my_group[i]].name);
  1118. X          print_group = TRUE;
  1119. X+         check_arts = 0;
  1120. X  
  1121. X          for (j = 0; j < top; j++) {
  1122. X              if (arts[j].unread == ART_UNREAD)  {
  1123. X!                 switch (check_start_save) {
  1124. X!                     case CHECK_ANY_NEWS:
  1125. X!                         if (print_first && verbose) {
  1126. X!                             putchar ('\n');
  1127. X!                             print_first = FALSE;
  1128. X!                         }
  1129. X!                         check_arts++;
  1130. X!                         break;
  1131. X!                     case START_ANY_NEWS:
  1132. X!                         return i;    /* return first group with unread news */ 
  1133. X!                         /* NOTREACHED */
  1134. X!                     case SAVE_ANY_NEWS:
  1135. X!                         if (print_group) {    
  1136. X!                             sprintf (msg, "Saved %s...\n", active[my_group[i]].name);
  1137. X!                             fprintf (fp_log, "%s", msg);
  1138. X!                             if (verbose) {
  1139. X!                                 wait_message (msg);
  1140. X!                             }
  1141. X!                             print_group = FALSE;
  1142. X!                             saved_groups++;
  1143. X!                             sprintf (buf, "%s/dummy", group_path);
  1144. X!                             create_path (buf);
  1145. X!                         }
  1146. X!                         sprintf (msg, "[%5ld]  %s\n", arts[j].artnum, arts[j].subject);
  1147. X!                         fprintf (fp_log, "%s", msg);
  1148. X!                         if (verbose) {
  1149. X!                             wait_message (msg);
  1150. X!                         }
  1151. X!                         saved_arts++;
  1152. X  
  1153. X!                         sprintf (buf, "%s/%s/%ld", savedir, group_path, arts[j].artnum);
  1154. X!                         if ((fp = fopen (buf, "w")) == NULL) {
  1155. X!                             fprintf (fp_log, txt_cannot_open, buf);
  1156. X!                             error_message (txt_cannot_open, buf);
  1157. X!                             continue;
  1158. X!                         }
  1159. X                  
  1160. X!                         open_note (arts[j].artnum, group_path);    
  1161. X!                         fseek (note_fp, 0L, 0);
  1162. X!                         copy_fp (note_fp, fp, (char *) 0);
  1163. X!                         note_cleanup ();
  1164. X!                         fclose (fp);
  1165. X!                         break;
  1166. X!                 }
  1167. X              }
  1168. X          }
  1169. X!         
  1170. X!         if (check_start_save == SAVE_ANY_NEWS) {
  1171. X!             if (catchup) {
  1172. X!                 for (j = 0; j < top; j++) {
  1173. X!                     arts[j].unread = ART_READ;
  1174. X!                 }
  1175. X!                 update_newsrc (active[my_group[i]].name, my_group[i], FALSE);
  1176. X              }
  1177. X!         } else {
  1178. X!             if (check_arts) {
  1179. X!                 if (verbose) {
  1180. X!                     sprintf (msg, "%4d unread articles in %s\n",
  1181. X!                         check_arts, active[my_group[i]].name);
  1182. X!                     wait_message (msg);     
  1183. X!                 }
  1184. X!                 unread_news = TRUE;    
  1185. X!             }
  1186. X          }
  1187. X      }
  1188. X!     switch (check_start_save) {
  1189. X!         case CHECK_ANY_NEWS:
  1190. X!             if (unread_news) {
  1191. X!                 return 2;
  1192. X!             } else {
  1193. X!                 if (verbose) {
  1194. X!                     wait_message ("\nThere is no news\n");
  1195. X!                 }
  1196. X!                 return 0;
  1197. X!             }
  1198. X!             /* NOTREACHED */ 
  1199. X!         case START_ANY_NEWS:
  1200. X!             wait_message ("\nThere is no news\n");
  1201. X!             return -1;
  1202. X!             /* NOTREACHED */ 
  1203. X!         case SAVE_ANY_NEWS:
  1204. X!             sprintf (msg, "\nSaved %d article(s) from %d group(s)\n", saved_arts, saved_groups);
  1205. X!             fprintf (fp_log, "%s", msg);
  1206. X!             if (verbose) {
  1207. X!                 wait_message (msg);
  1208. X!             }
  1209. X!             if (log_opened) {
  1210. X!                 fclose (fp_log);
  1211. X!                 if (verbose) {
  1212. X!                     sprintf (msg, "Mailing log to %s\n", userid);
  1213. X!                     wait_message (msg);
  1214. X!                 }
  1215. X!                 sprintf (buf, "%s \"%s\" < %s", mailer, userid, log);
  1216. X!                 if (! invoke_cmd (buf)) {
  1217. X!                     error_message (txt_command_failed_s, buf);
  1218. X!                 }
  1219. X!             }
  1220. X!             /* NOTREACHED */ 
  1221. X      }
  1222. X!     return 0;
  1223. X  }
  1224. X  
  1225. X  /*
  1226. X***************
  1227. X*** 1071,1077 ****
  1228. X      char *group;
  1229. X      int killed;
  1230. X  {
  1231. X!     char group_path[LEN+1];
  1232. X      char *p;
  1233. X  
  1234. X      if (local_index) {            /* writing index in home directory */
  1235. X--- 1141,1147 ----
  1236. X      char *group;
  1237. X      int killed;
  1238. X  {
  1239. X!     char group_path[LEN];
  1240. X      char *p;
  1241. X  
  1242. X      if (local_index) {            /* writing index in home directory */
  1243. XFiles 102/curses.c and 103/curses.c are identical
  1244. Xdiff -rcs 102/debug.c 103/debug.c
  1245. X*** 102/debug.c    Mon Sep 23 17:55:38 1991
  1246. X--- 103/debug.c    Mon Sep 30 07:58:05 1991
  1247. X***************
  1248. X*** 3,9 ****
  1249. X   *  Module    : debug.c
  1250. X   *  Author    : I.Lea
  1251. X   *  Created   : 01-04-91
  1252. X!  *  Updated   : 06-09-91
  1253. X   *  Release   : 1.0
  1254. X   *  Notes     : debug routines
  1255. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  1256. X--- 3,9 ----
  1257. X   *  Module    : debug.c
  1258. X   *  Author    : I.Lea
  1259. X   *  Created   : 01-04-91
  1260. X!  *  Updated   : 29-09-91
  1261. X   *  Release   : 1.0
  1262. X   *  Notes     : debug routines
  1263. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  1264. X***************
  1265. X*** 115,122 ****
  1266. X  
  1267. X      if ((fp = fopen ("/tmp/ACTIVE","w")) != NULL) {
  1268. X          for (i = 0; i < num_active; i++) {    /* for each group */
  1269. X!             fprintf (fp, "[%4d]=[%-28s] max=[%4ld] min=[%4ld] nxt=[%4d] flag=[%d]\n",
  1270. X!                 i, active[i].name, active[i].max, active[i].min, active[i].next, active[i].flag);
  1271. X          }
  1272. X          fflush (fp);
  1273. X          fclose (fp);
  1274. X--- 115,122 ----
  1275. X  
  1276. X      if ((fp = fopen ("/tmp/ACTIVE","w")) != NULL) {
  1277. X          for (i = 0; i < num_active; i++) {    /* for each group */
  1278. X!             fprintf (fp, "[%4d]=[%-28s] max=[%4ld] min=[%4ld] nxt=[%4d] flag=[%d] read=[%d] thread=[%d]\n",
  1279. X!                 i, active[i].name, active[i].max, active[i].min, active[i].next, active[i].flag, active[i].read, active[i].thread);
  1280. X          }
  1281. X          fflush (fp);
  1282. X          fclose (fp);
  1283. Xdiff -rcs 102/feed.c 103/feed.c
  1284. X*** 102/feed.c    Mon Sep 23 17:55:38 1991
  1285. X--- 103/feed.c    Mon Sep 30 18:33:52 1991
  1286. X***************
  1287. X*** 3,9 ****
  1288. X   *  Module    : feed.c
  1289. X   *  Author    : I.Lea
  1290. X   *  Created   : 31-08-91
  1291. X!  *  Updated   : 22-09-91
  1292. X   *  Release   : 1.0
  1293. X   *  Notes     : provides same interface to mail,pipe,print and save commands
  1294. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  1295. X--- 3,9 ----
  1296. X   *  Module    : feed.c
  1297. X   *  Author    : I.Lea
  1298. X   *  Created   : 31-08-91
  1299. X!  *  Updated   : 30-09-91
  1300. X   *  Release   : 1.0
  1301. X   *  Notes     : provides same interface to mail,pipe,print and save commands
  1302. X   *  Copyright : (c) Copyright 1991 by Iain Lea
  1303. X***************
  1304. X*** 16,23 ****
  1305. X  #include    "tin.h"
  1306. X  
  1307. X  extern char *glob_group;            /* Group name */
  1308. X! extern char note_h_subj[LEN+1];        /* Subject:    */
  1309. X! extern char note_h_from[LEN+1];        /* From:    */
  1310. X  extern FILE *note_fp;                /* the body of the current article */
  1311. X  extern int note_end;                /* end of article ? */
  1312. X  extern int note_page;                /* what page we're on */
  1313. X--- 16,23 ----
  1314. X  #include    "tin.h"
  1315. X  
  1316. X  extern char *glob_group;            /* Group name */
  1317. X! extern char note_h_subj[LEN];        /* Subject:    */
  1318. X! extern char note_h_from[LEN];        /* From:    */
  1319. X  extern FILE *note_fp;                /* the body of the current article */
  1320. X  extern int note_end;                /* end of article ? */
  1321. X  extern int note_page;                /* what page we're on */
  1322. X***************
  1323. X*** 37,47 ****
  1324. X      int respnum;
  1325. X      char *group_path;
  1326. X  {
  1327. X!     char address[LEN+1];
  1328. X!     char command[LEN+1];
  1329. X!     char file[LEN+1], *p;
  1330. X!     char mailbox[LEN+1];
  1331. X!     char pattern[LEN+1];
  1332. X      char ch = 'a', ch_default = 'a';
  1333. X      char proc_ch = proc_ch_default;
  1334. X      FILE *fp;
  1335. X--- 37,47 ----
  1336. X      int respnum;
  1337. X      char *group_path;
  1338. X  {
  1339. X!     char address[LEN];
  1340. X!     char command[LEN];
  1341. X!     char file[LEN], *p;
  1342. X!     char mailbox[LEN];
  1343. X!     char pattern[LEN];
  1344. X      char ch = 'a', ch_default = 'a';
  1345. X      char proc_ch = proc_ch_default;
  1346. X      FILE *fp;
  1347. X***************
  1348. X*** 49,55 ****
  1349. X      int is_mailbox = FALSE;
  1350. X      int orig_note_end;
  1351. X      int orig_note_page;
  1352. X!     int ret1, ret2;
  1353. X      int redraw_screen = FALSE;
  1354. X      
  1355. X      if (level == PAGE_LEVEL) {
  1356. X--- 49,56 ----
  1357. X      int is_mailbox = FALSE;
  1358. X      int orig_note_end;
  1359. X      int orig_note_page;
  1360. X!     int ret1 = FALSE;
  1361. X!     int ret2 = FALSE;
  1362. X      int redraw_screen = FALSE;
  1363. X      
  1364. X      if (level == PAGE_LEVEL) {
  1365. X***************
  1366. X*** 65,78 ****
  1367. X      if (! num_of_tagged_files && nresp (b)) {
  1368. X          ch_default = 't';
  1369. X      }
  1370. X-     do {
  1371. X-         sprintf (msg, "%s%s%c", prompt, txt_art_thread_regex_tag, ch_default);
  1372. X-         wait_message (msg);
  1373. X-         MoveCursor (LINES, strlen (msg)-1);
  1374. X-         if ((ch = ReadCh ()) == CR)
  1375. X-             ch = ch_default;
  1376. X-     } while (ch != 'a' && ch != 't' && ch != 'T' && ch != 'r' && ch != 'e');
  1377. X  
  1378. X      if (ch == 'e') {    /* exit */
  1379. X          clear_message ();
  1380. X          return;
  1381. X--- 66,88 ----
  1382. X      if (! num_of_tagged_files && nresp (b)) {
  1383. X          ch_default = 't';
  1384. X      }
  1385. X  
  1386. X+     if ((save_archive_name == FALSE || arts[respnum].archive == (char *) 0) ||
  1387. X+         (save_archive_name == TRUE && function != FEED_SAVE) ||
  1388. X+         ch_default == 'T') {
  1389. X+         do {
  1390. X+             sprintf (msg, "%s%s%c", prompt, txt_art_thread_regex_tag, ch_default);
  1391. X+             wait_message (msg);
  1392. X+             MoveCursor (LINES, (int) strlen (msg)-1);
  1393. X+             if ((ch = ReadCh ()) == CR)
  1394. X+                 ch = ch_default;
  1395. X+         } while (ch != 'a' && ch != 't' && ch != 'T' && ch != 'r' && ch != 'e');
  1396. X+     } else {
  1397. X+         file[0] = '\0';
  1398. X+         ch = ch_default;
  1399. X+         proc_ch = 's'; 
  1400. X+     }
  1401. X+ 
  1402. X      if (ch == 'e') {    /* exit */
  1403. X          clear_message ();
  1404. X          return;
  1405. X***************
  1406. X*** 134,139 ****
  1407. X--- 144,150 ----
  1408. X                  error_message (txt_command_failed_s, command);
  1409. X                  return;
  1410. X              }
  1411. X+             wait_message ("Piping...");
  1412. X              Raw (FALSE);
  1413. X              break;
  1414. X          case FEED_PRINT:    
  1415. X***************
  1416. X*** 194,205 ****
  1417. X                      do {
  1418. X                          sprintf (msg, "%s%c", txt_post_procees_type, proc_ch_default);
  1419. X                          wait_message (msg);
  1420. X!                         MoveCursor (LINES, strlen (msg)-1);
  1421. X                          if ((proc_ch = ReadCh ()) == CR)
  1422. X                              proc_ch = proc_ch_default;
  1423. X!                         } while (proc_ch != 'n' && proc_ch != 's' &&
  1424. X!                                 proc_ch != 'u' && proc_ch != 'U' &&
  1425. X!                                 proc_ch != 'p');
  1426. X                  }
  1427. X              }
  1428. X              clear_message ();
  1429. X--- 205,216 ----
  1430. X                      do {
  1431. X                          sprintf (msg, "%s%c", txt_post_procees_type, proc_ch_default);
  1432. X                          wait_message (msg);
  1433. X!                         MoveCursor (LINES, (int) strlen (msg)-1);
  1434. X                          if ((proc_ch = ReadCh ()) == CR)
  1435. X                              proc_ch = proc_ch_default;
  1436. X!                     } while (proc_ch != 'n' && proc_ch != 's' &&
  1437. X!                             proc_ch != 'u' && proc_ch != 'U' &&
  1438. X!                             proc_ch != 'p');
  1439. X                  }
  1440. X              }
  1441. X              clear_message ();
  1442. X***************
  1443. X*** 232,237 ****
  1444. X--- 243,249 ----
  1445. X                      pclose (fp);        
  1446. X                      break;
  1447. X                  case FEED_SAVE:
  1448. X+                     wait_message (txt_saving);
  1449. X                      add_to_save_list (0, &arts[respnum], is_mailbox, file);
  1450. X                      (void) save_art_to_file (respnum, 0, FALSE, "");
  1451. X                      break;
  1452. X***************
  1453. X*** 242,248 ****
  1454. X              break;
  1455. X              
  1456. X          case 't':         /* thread */
  1457. X!             for (i = base[b]; i >= 0; i = arts[i].thread) {
  1458. X                  if (function == FEED_PRINT) {
  1459. X                      if ((fp = popen (command, "w")) == NULL) {
  1460. X                          error_message (txt_command_failed_s, command);
  1461. X--- 254,260 ----
  1462. X              break;
  1463. X              
  1464. X          case 't':         /* thread */
  1465. X!             for (i = (int) base[b]; i >= 0; i = arts[i].thread) {
  1466. X                  if (function == FEED_PRINT) {
  1467. X                      if ((fp = popen (command, "w")) == NULL) {
  1468. X                          error_message (txt_command_failed_s, command);
  1469. X***************
  1470. X*** 395,405 ****
  1471. X              redraw_screen = mail_check ();    /* in case of sending to oneself */
  1472. X              break;
  1473. X          case FEED_SAVE:
  1474. X!             ret1 = (mark_saved_read ? TRUE : FALSE);
  1475. X              if (proc_ch != 'n' && is_mailbox == FALSE) {
  1476. X                  ret2 = post_process_files (proc_ch);
  1477. X              }
  1478. X!             if (ret1 || ret2) {
  1479. X                  redraw_screen = TRUE;
  1480. X              }
  1481. X              free_save_array ();
  1482. X--- 407,419 ----
  1483. X              redraw_screen = mail_check ();    /* in case of sending to oneself */
  1484. X              break;
  1485. X          case FEED_SAVE:
  1486. X!             if (level == GROUP_LEVEL) {
  1487. X!                 ret1 = (mark_saved_read ? TRUE : FALSE);
  1488. X!             }
  1489. X              if (proc_ch != 'n' && is_mailbox == FALSE) {
  1490. X                  ret2 = post_process_files (proc_ch);
  1491. X              }
  1492. X!             if ((ret1 || ret2) && is_mailbox == FALSE) {
  1493. X                  redraw_screen = TRUE;
  1494. X              }
  1495. X              free_save_array ();
  1496. X***************
  1497. X*** 419,424 ****
  1498. X--- 433,440 ----
  1499. X              } else {
  1500. X                  redraw_page (respnum, glob_group);
  1501. X              }
  1502. X+         } else {
  1503. X+             clear_message ();
  1504. X          }
  1505. X      } else {
  1506. X          if (redraw_screen) {
  1507. Xdiff -rcs 102/group.c 103/group.c
  1508. X*** 102/group.c    Mon Sep 23 17:55:38 1991
  1509. X--- 103/group.c    Mon Sep 30 18:35:39 1991
  1510. X***************
  1511. X*** 3,9 ****
  1512. X   *  Module    : group.c
  1513. X   *  Author    : R.Skrenta / I.Lea
  1514. X   *  Created   : 01-04-91
  1515. X!  *  Updated   : 22-09-91
  1516. X   *  Release   : 1.0
  1517. X   *  Notes     :
  1518. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1519. X--- 3,9 ----
  1520. X   *  Module    : group.c
  1521. X   *  Author    : R.Skrenta / I.Lea
  1522. X   *  Created   : 01-04-91
  1523. X!  *  Updated   : 28-09-91
  1524. X   *  Release   : 1.0
  1525. X   *  Notes     :
  1526. X   *  Copyright : (c) Copyright 1991 by Rich Skrenta & Iain Lea
  1527. X***************
  1528. X*** 15,21 ****
  1529. X  
  1530. X  #include    "tin.h"
  1531. X  
  1532. X! extern char cvers[LEN+1];
  1533. X  extern int cur_groupnum;
  1534. X  extern int last_resp;        /* page.c */
  1535. X  extern int this_resp;        /* page.c */
  1536. X--- 15,21 ----
  1537. X  
  1538. X  #include    "tin.h"
  1539. X  
  1540. X! extern char cvers[LEN];
  1541. X  extern int cur_groupnum;
  1542. X  extern int last_resp;        /* page.c */
  1543. X  extern int this_resp;        /* page.c */
  1544. X***************
  1545. X*** 30,36 ****
  1546. X  void group_page (group)
  1547. X      char *group;
  1548. X  {
  1549. X!     char group_path[LEN+1];
  1550. X      char ch;
  1551. X      char *p;
  1552. X      int flag, i, n;
  1553. X--- 30,36 ----
  1554. X  void group_page (group)
  1555. X      char *group;
  1556. X  {
  1557. X!     char group_path[LEN];
  1558. X      char ch;
  1559. X      char *p;
  1560. X      int flag, i, n;
  1561. X***************
  1562. X*** 40,45 ****
  1563. X--- 40,47 ----
  1564. X      int sav_groupnum;
  1565. X      int thread_marked_unread = FALSE;
  1566. X  
  1567. X+     active[my_group[cur_groupnum]].read = TRUE;
  1568. X+ 
  1569. X      glob_group = group;
  1570. X      sav_groupnum = cur_groupnum;
  1571. X      
  1572. X***************
  1573. X*** 175,180 ****
  1574. X--- 177,183 ----
  1575. X  
  1576. X                  case 'I':        /* ansi  PgUp */
  1577. X                  case 'V':        /* at386 PgUp */
  1578. X+                 case 'v':        /* emacs style */
  1579. X                      goto group_page_up;
  1580. X  
  1581. X                  case 'H':        /* at386  Home */
  1582. X***************
  1583. X*** 190,197 ****
  1584. X                  }
  1585. X                  break;
  1586. X  
  1587. X!             case ctrl('D'):        /* page down */
  1588. X!             case ' ':    
  1589. X  group_page_down:
  1590. X                  if (!top_base || index_point == top_base - 1)
  1591. X                      break;
  1592. X--- 193,201 ----
  1593. X                  }
  1594. X                  break;
  1595. X  
  1596. X!             case ' ':            /* page down */
  1597. X!             case ctrl('D'):        /* vi style */
  1598. X!             case ctrl('V'):        /* emacs style */
  1599. X  group_page_down:
  1600. X                  if (!top_base || index_point == top_base - 1)
  1601. X                      break;
  1602. X***************
  1603. X*** 215,221 ****
  1604. X                  }
  1605. X                  if (kill_articles) {
  1606. X                      old_top = top;
  1607. X!                     n = base[index_point];
  1608. X                      old_artnum = arts[n].artnum;
  1609. X                      if (kill_art_menu (group, (int) base[index_point])) {
  1610. X                          kill_any_articles (group);
  1611. X--- 219,225 ----
  1612. X                  }
  1613. X                  if (kill_articles) {
  1614. X                      old_top = top;
  1615. X!                     n = (int) base[index_point];
  1616. X                      old_artnum = arts[n].artnum;
  1617. X                      if (kill_art_menu (group, (int) base[index_point])) {
  1618. X                          kill_any_articles (group);
  1619. X***************
  1620. X*** 370,376 ****
  1621. X                      break;
  1622. X                  }
  1623. X                  if (new_responses (index_point)) {
  1624. X!                     for (i = base[index_point]; i >= 0; i = arts[i].thread)
  1625. X                          arts[i].unread = 0;
  1626. X                      mark_screen (SCREEN_READ_UNREAD, "   ");    
  1627. X                      flag = FALSE;
  1628. X--- 374,380 ----
  1629. X                      break;
  1630. X                  }
  1631. X                  if (new_responses (index_point)) {
  1632. X!                     for (i = (int) base[index_point]; i >= 0; i = arts[i].thread)
  1633. X                          arts[i].unread = 0;
  1634. X                      mark_screen (SCREEN_READ_UNREAD, "   ");    
  1635. X                      flag = FALSE;
  1636. X***************
  1637. X*** 410,416 ****
  1638. X  
  1639. X              case 'M':    /* options menu */
  1640. X                  old_top = top;
  1641. X!                 n = base[index_point];
  1642. X                  old_artnum = arts[n].artnum;
  1643. X                  n = sort_art_type;
  1644. X                  kill_state = change_rcfile (group, TRUE);
  1645. X--- 414,420 ----
  1646. X  
  1647. X              case 'M':    /* options menu */
  1648. X                  old_top = top;
  1649. X!                 n = (int) base[index_point];
  1650. X                  old_artnum = arts[n].artnum;
  1651. X                  n = sort_art_type;
  1652. X                  kill_state = change_rcfile (group, TRUE);
  1653. X***************
  1654. X*** 511,517 ****
  1655. X  
  1656. X              case 'T':    /* tag/untag art for mailing/piping/printing/saving */
  1657. X                   if (index_point >= 0) {
  1658. X!                     n = base[index_point];
  1659. X                      if (arts[n].tagged) {
  1660. X                          arts[n].tagged = 0;
  1661. X                          sprintf (msg, "%3s", (arts[n].unread ? "  +" : "   "));
  1662. X--- 515,521 ----
  1663. X  
  1664. X              case 'T':    /* tag/untag art for mailing/piping/printing/saving */
  1665. X                   if (index_point >= 0) {
  1666. X!                     n = (int) base[index_point];
  1667. X                      if (arts[n].tagged) {
  1668. X                          arts[n].tagged = 0;
  1669. X                          sprintf (msg, "%3s", (arts[n].unread ? "  +" : "   "));
  1670. X***************
  1671. X*** 557,563 ****
  1672. X                       info_message (txt_no_arts);
  1673. X                      break;
  1674. X                  }
  1675. X!                 i = base[index_point];
  1676. X                  arts[i].unread = ART_UNREAD;
  1677. X                  mark_screen (SCREEN_READ_UNREAD, "  +");    
  1678. X                  info_message (txt_art_marked_as_unread);
  1679. X--- 561,567 ----
  1680. X                       info_message (txt_no_arts);
  1681. X                      break;
  1682. X                  }
  1683. X!                 i = (int) base[index_point];
  1684. X                  arts[i].unread = ART_UNREAD;
  1685. X                  mark_screen (SCREEN_READ_UNREAD, "  +");    
  1686. X                  info_message (txt_art_marked_as_unread);
  1687. X***************
  1688. X*** 568,574 ****
  1689. X                       info_message (txt_no_arts);
  1690. X                      break;
  1691. X                  }
  1692. X!                 for (i = base[index_point] ; i != -1 ; i = arts[i].thread) {
  1693. X                      arts[i].unread = ART_UNREAD;
  1694. X                      thread_marked_unread = TRUE;
  1695. X                  }
  1696. X--- 572,578 ----
  1697. X                       info_message (txt_no_arts);
  1698. X                      break;
  1699. X                  }
  1700. X!                 for (i = (int) base[index_point] ; i != -1 ; i = arts[i].thread) {
  1701. X                      arts[i].unread = ART_UNREAD;
  1702. X                      thread_marked_unread = TRUE;
  1703. X                  }
  1704. X***************
  1705. X*** 587,596 ****
  1706. X  group_done:
  1707. X      fix_new_highest (sav_groupnum);
  1708. X      update_newsrc (group, my_group[sav_groupnum], FALSE);
  1709. X-     clear_note_area ();
  1710. X  
  1711. X!     if (index_point == -2)
  1712. SHAR_EOF
  1713. echo "End of tin1.0 part 1"
  1714. echo "File tin.patch03 is continued in part 2"
  1715. echo "2" > shar3_seq_.tmp
  1716. exit 0
  1717.  
  1718. exit 0 # Just in case...
  1719. -- 
  1720. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1721. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1722. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1723. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1724.