home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume1 / rn / part08 < prev    next >
Internet Message Format  |  1986-11-30  |  63KB

  1. Date: Tue, 7 May 85 14:05:44 pdt
  2. From: allegra!sdcrdcf!RDCF.SDC.UUCP!lwall (Larry Wall)
  3. Newsgroups: mod.sources
  4. Subject: rn version 4.3 (kit 8 of 9)
  5. Reply-To: lwall@sdcrdcf.UUCP
  6. Organization: System Development Corporation R&D, Santa Monica
  7.  
  8. #! /bin/sh
  9.  
  10. # Make a new directory for the rn sources, cd to it, and run kits 1 thru 9 
  11. # through sh.  When all 9 kits have been run, read README.
  12.  
  13. echo "This is rn kit 8 (of 9).  If kit 8 is complete, the line"
  14. echo '"'"End of kit 8 (of 9)"'" will echo at the end.'
  15. echo ""
  16. export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
  17. echo Extracting addng.c
  18. cat >addng.c <<'!STUFFY!FUNK!'
  19. /* $Header: addng.c,v 4.3 85/05/01 11:34:41 lwall Exp $
  20.  *
  21.  * $Log:    addng.c,v $
  22.  * Revision 4.3  85/05/01  11:34:41  lwall
  23.  * Baseline for release with 4.3bsd.
  24.  * 
  25.  */
  26.  
  27. #include "EXTERN.h"
  28. #include "common.h"
  29. #include "rn.h"
  30. #include "ngdata.h"
  31. #include "last.h"
  32. #include "util.h"
  33. #include "intrp.h"
  34. #include "only.h"
  35. #include "rcstuff.h"
  36. #include "INTERN.h"
  37. #include "addng.h"
  38.  
  39. void
  40. addng_init()
  41. {
  42.     ;
  43. }
  44.  
  45. #ifdef FINDNEWNG
  46. /* generate a list of new newsgroups from active file */
  47.  
  48. bool
  49. newlist(munged,checkinlist)
  50. bool munged;                /* are we scanning the whole file? */
  51. bool checkinlist;
  52. {
  53.     char *tmpname;
  54.     register char *s;
  55.     long birthof();
  56.  
  57.     tmpname = savestr(filexp("/tmp/rnew.%$"));
  58.     tmpfp = fopen(tmpname,"w");
  59.     if (tmpfp == Nullfp) {
  60.     printf(cantcreate,tmpname) FLUSH;
  61.     return FALSE;
  62.     }
  63.     while (fgets(buf,LBUFLEN,actfp) != Nullch) {
  64.     if (s = index(buf,' ')) {
  65.         *s++ = '\0';
  66.         if (strnEQ(buf,"to.",3))
  67.         continue;
  68.         if (find_ng(buf) == nextrcline &&
  69.             (checkinlist ?
  70.             (inlist(buf)) :
  71.             (birthof(buf,(ART_NUM)atol(s)) > lasttime)
  72.             )
  73.         ) {
  74.                     /* if not in .newsrc and younger */
  75.                     /* than the last time we checked */
  76.         fprintf(tmpfp,"%s\n",buf);
  77.                     /* then remember said newsgroup */
  78.         }
  79. #ifdef FASTNEW
  80.         else {            /* not really a new group */
  81.         if (!munged) {        /* did we assume not munged? */
  82.             fclose(tmpfp);    /* then go back, knowing that */
  83.             UNLINK(tmpname);
  84.             free(tmpname);
  85.             return TRUE;    /* active file was indeed munged */
  86.         }
  87.         }
  88. #endif
  89.     }
  90. #ifdef DEBUGGING
  91.     else
  92.         printf("Bad active record: %s\n",buf) FLUSH;
  93. #endif
  94.     }
  95.  
  96.     /* we have successfully generated the list */
  97.  
  98.     fclose(tmpfp);
  99.     tmpfp = fopen(tmpname,"r");
  100.     UNLINK(tmpname);            /* be nice to the world */
  101.     if (tmpfp == Nullfp) {
  102.     printf(cantopen,tmpname) FLUSH;
  103.     return FALSE;
  104.     }
  105.     while (fgets(buf,LBUFLEN,tmpfp) != Nullch) {
  106.     buf[strlen(buf)-1] = '\0';
  107.     get_ng(buf,TRUE);        /* add newsgroup, maybe */
  108.     }
  109.     fclose(tmpfp);            /* be nice to ourselves */
  110.     free(tmpname);
  111.     return FALSE;            /* do not call us again */
  112. }
  113.  
  114. /* return creation time of newsgroup */
  115.  
  116. long
  117. birthof(ngnam,ngsize)
  118. char *ngnam;
  119. ART_NUM ngsize;
  120. {
  121.     char tst[128];
  122.  
  123.     sprintf(tst, ngsize ? "%s/%s/1" : "%s/%s" ,spool,getngdir(ngnam));
  124.     if (stat(tst,&filestat) < 0)
  125.     return 0L;            /* not there, assume ancient */
  126.     else
  127.     return filestat.st_mtime;
  128. }
  129.  
  130. bool
  131. scanactive()
  132. {
  133.     NG_NUM oldnext = nextrcline;    /* remember # lines in newsrc */
  134.  
  135.     fseek(actfp,0L,0);
  136.     newlist(TRUE,TRUE);
  137.     if (nextrcline != oldnext) {    /* did we add any new groups? */
  138.     return TRUE;
  139.     }
  140.     return FALSE;
  141. }
  142.  
  143. #endif
  144.  
  145. !STUFFY!FUNK!
  146. echo Extracting Pnews.1
  147. cat >Pnews.1 <<'!STUFFY!FUNK!'
  148. ''' $Header: Pnews.1,v 4.3 85/05/01 11:33:50 lwall Exp $
  149. ''' 
  150. ''' $Log:    Pnews.1,v $
  151. ''' Revision 4.3  85/05/01  11:33:50  lwall
  152. ''' Baseline for release with 4.3bsd.
  153. ''' 
  154. .de Sh
  155. .br
  156. .ne 5
  157. .PP
  158. \fB\\$1\fR
  159. .PP
  160. ..
  161. .de Sp
  162. .if t .sp .5v
  163. .if n .sp
  164. ..
  165. '''
  166. '''     Set up \*(-- to give an unbreakable dash;
  167. '''     string Tr holds user defined translation string.
  168. '''     Bell System Logo is used as a dummy character.
  169. '''
  170. .ie n \{\
  171. .tr \(bs-\*(Tr
  172. .ds -- \(bs-
  173. .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
  174. .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
  175. .ds L" ""
  176. .ds R" ""
  177. .ds L' '
  178. .ds R' '
  179. 'br\}
  180. .el\{\
  181. .ds -- \(em\|
  182. .tr \*(Tr
  183. .ds L" ``
  184. .ds R" ''
  185. .ds L' `
  186. .ds R' '
  187. 'br\}
  188. .TH PNEWS 1 LOCAL
  189. .SH NAME
  190. Pnews - a program for posting news articles
  191. .SH SYNOPSIS
  192. .B Pnews newsgroup title
  193. .br
  194.   or
  195. .br
  196. .B Pnews -h headerfile [oldarticle]
  197. .br
  198.   or
  199. .br
  200. .B Pnews
  201. .SH DESCRIPTION
  202. Pnews is a friendly interface for posting news articles.
  203. It will ask several questions, then allow you to enter your article,
  204. and then post it using the inews(1) program.
  205. If you type h and a carriage return at any point,
  206. .I Pnews
  207. will tell you what it wants to know.
  208. .PP
  209. The -h form is used when invoked from
  210. .IR rn .
  211. If your editor can edit multiple files, and you want the article to which
  212. you are replying to show up as an alternate file, define the environment
  213. variable NEWSPOSTER as \*(L"Pnews -h %h %A\*(R".
  214. You can also modify the the NEWSHEADER environment variable to change the
  215. header file that
  216. .I rn
  217. passes to Pnews.
  218. .SH ENVIRONMENT
  219. .IP DOTDIR 8
  220. Where to find your dot files, if they aren't in your home directory.
  221. .Sp
  222. Default: $HOME
  223. .IP EDITOR 8
  224. The editor you want to use, if VISUAL is undefined.
  225. .Sp
  226. Default: whatever your news administrator installed, usually vi.
  227. .IP HOME 8
  228. Your home directory.
  229. .Sp
  230. Default: $LOGDIR
  231. .IP LOGDIR 8
  232. Your home directory if HOME is undefined.
  233. .IP LOGNAME 8
  234. Your login name, if USER is undefined.
  235. .Sp
  236. Default: value of \*(L"whoami\*(R".
  237. .IP NAME 8
  238. Your full name.
  239. .Sp
  240. Default: name from /etc/passwd, or ~/.fullname.
  241. .IP ORGANIZATION 8
  242. Either the name of your organization, or the name of a file containing the
  243. name of your organization.
  244. .Sp
  245. Default: whatever your news administrator chose.
  246. .IP USER 8
  247. Your login name.
  248. .Sp
  249. Default: $LOGNAME
  250. .IP VISUAL 8
  251. The editor you want to use.
  252. .Sp
  253. Default: $EDITOR
  254. .SH FILES
  255. /tmp/article$$
  256. .br
  257. ~/dead.article
  258. .SH SEE ALSO
  259. rn(1), Rnmail(1), inews(1)
  260. .SH DIAGNOSTICS
  261. .SH BUGS
  262. Not the speediest program in the world, but maybe that's a blessing to the
  263. net.
  264. !STUFFY!FUNK!
  265. echo Extracting Rnmail.1
  266. cat >Rnmail.1 <<'!STUFFY!FUNK!'
  267. ''' $Header: Rnmail.1,v 4.3 85/05/01 11:34:28 lwall Exp $
  268. ''' 
  269. ''' $Log:    Rnmail.1,v $
  270. ''' Revision 4.3  85/05/01  11:34:28  lwall
  271. ''' Baseline for release with 4.3bsd.
  272. ''' 
  273. .de Sh
  274. .br
  275. .ne 5
  276. .PP
  277. \fB\\$1\fR
  278. .PP
  279. ..
  280. .de Sp
  281. .if t .sp .5v
  282. .if n .sp
  283. ..
  284. '''
  285. '''     Set up \*(-- to give an unbreakable dash;
  286. '''     string Tr holds user defined translation string.
  287. '''     Bell System Logo is used as a dummy character.
  288. '''
  289. .ie n \{\
  290. .tr \(bs-\*(Tr
  291. .ds -- \(bs-
  292. .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
  293. .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
  294. .ds L" ""
  295. .ds R" ""
  296. .ds L' '
  297. .ds R' '
  298. 'br\}
  299. .el\{\
  300. .ds -- \(em\|
  301. .tr \*(Tr
  302. .ds L" ``
  303. .ds R" ''
  304. .ds L' `
  305. .ds R' '
  306. 'br\}
  307. .TH RNMAIL 1 LOCAL
  308. .SH NAME
  309. Rnmail - a program for replying via mail
  310. .SH SYNOPSIS
  311. .B Rnmail destination_list
  312. .br
  313.   or
  314. .br
  315. .B Rnmail -h headerfile [oldarticle]
  316. .br
  317.   or
  318. .br
  319. .B Rnmail
  320. .SH DESCRIPTION
  321. Rnmail is a friendly interface for mailing replies to news articles.
  322. It will ask several questions, then allow you to enter your letter,
  323. and then mail it off.
  324. If you type h and a carriage return at any point,
  325. .I Rnmail
  326. will tell you what it wants to know.
  327. .PP
  328. The -h form is used when invoked from
  329. .IR rn .
  330. If your editor can edit multiple files, and you want the article to which
  331. you are replying to show up as an alternate file, define the environment
  332. variable MAILPOSTER as \*(L"Rnmail -h %h %A\*(R".
  333. You can also modify the the MAILHEADER environment variable to change the
  334. header file that
  335. .I rn
  336. passes to Rnmail.
  337. .SH ENVIRONMENT
  338. .IP EDITOR 8
  339. The editor you want to use, if VISUAL is undefined.
  340. .Sp
  341. Default: whatever your news administrator installed, usually vi.
  342. .IP HOME 8
  343. Your home directory.
  344. .Sp
  345. Default: $LOGDIR
  346. .IP LOGDIR 8
  347. Your home directory if HOME is undefined.
  348. .IP LOGNAME 8
  349. Your login name, if USER is undefined.
  350. .Sp
  351. Default: value of \*(L"whoami\*(R".
  352. .IP ORGANIZATION 8
  353. Either the name of your organization, or the name of a file containing the
  354. name of your organization.
  355. .Sp
  356. Default: whatever your news administrator chose.
  357. .IP USER 8
  358. Your login name.
  359. .Sp
  360. Default: $LOGNAME
  361. .IP VISUAL 8
  362. The editor you want to use.
  363. .Sp
  364. Default: $EDITOR
  365. .SH FILES
  366. /tmp/rnmail$$
  367. .br
  368. ~/dead.letter
  369. .SH SEE ALSO
  370. rn(1), Pnews(1), mail(1)
  371. .SH DIAGNOSTICS
  372. .SH BUGS
  373. Uses /bin/mail in the absence of sendmail.
  374. !STUFFY!FUNK!
  375. echo Extracting only.c
  376. cat >only.c <<'!STUFFY!FUNK!'
  377. /* $Header: only.c,v 4.3 85/05/01 11:45:21 lwall Exp $
  378.  *
  379.  * $Log:    only.c,v $
  380.  * Revision 4.3  85/05/01  11:45:21  lwall
  381.  * Baseline for release with 4.3bsd.
  382.  * 
  383.  */
  384.  
  385. #include "EXTERN.h"
  386. #include "common.h"
  387. #include "search.h"
  388. #include "util.h"
  389. #include "final.h"
  390. #include "ngsrch.h"
  391. #include "INTERN.h"
  392. #include "only.h"
  393.  
  394. void
  395. only_init()
  396. {
  397.     ;
  398. }
  399.  
  400. void
  401. setngtodo(pat)
  402. char *pat;
  403. {
  404.     char *s;
  405.  
  406. #ifdef ONLY
  407.     if (!*pat)
  408.     return;
  409.     if (maxngtodo < NGMAX) {
  410.     ngtodo[maxngtodo] = savestr(pat);
  411. #ifdef SPEEDOVERMEM
  412. #ifndef lint
  413.     compextodo[maxngtodo] = (COMPEX*)safemalloc(sizeof(COMPEX));
  414. #endif lint
  415.     init_compex(compextodo[maxngtodo]);
  416.     compile(compextodo[maxngtodo],pat,TRUE,TRUE);
  417.     if ((s = ng_comp(compextodo[maxngtodo],pat,TRUE,TRUE)) != Nullch) {
  418.                         /* compile regular expression */
  419.         printf("\n%s\n",s) FLUSH;
  420.         finalize(1);
  421.     }
  422. #endif
  423.     maxngtodo++;
  424.     }
  425. #else
  426.     notincl("o");
  427. #endif
  428. }
  429.  
  430. /* if command line list is non-null, is this newsgroup wanted? */
  431.  
  432. bool
  433. inlist(ngnam)
  434. char *ngnam;
  435. {
  436. #ifdef ONLY
  437.     register int i;
  438. #ifdef SPEEDOVERMEM
  439.  
  440.     if (maxngtodo == 0)
  441.     return TRUE;
  442.     for (i=0; i<maxngtodo; i++) {
  443.     if (execute(compextodo[i],ngnam))
  444.         return TRUE;
  445.     }
  446.     return FALSE;
  447. #else
  448.     COMPEX ilcompex;
  449.     char *s;
  450.  
  451.     if (maxngtodo == 0)
  452.     return TRUE;
  453.     init_compex(&ilcompex);
  454.     for (i=0; i<maxngtodo; i++) {
  455.     if ((s = ng_comp(&ilcompex,ngtodo[i],TRUE,TRUE)) != Nullch) {
  456.                         /* compile regular expression */
  457.         printf("\n%s\n",s) FLUSH;
  458.         finalize(1);
  459.     }
  460.     
  461.     if (execute(&ilcompex,ngnam) != Nullch) {
  462.         free_compex(&ilcompex);
  463.         return TRUE;
  464.     }
  465.     }
  466.     free_compex(&ilcompex);
  467.     return FALSE;
  468. #endif
  469. #else
  470.     return TRUE;
  471. #endif
  472. }
  473.  
  474. #ifdef ONLY
  475. void
  476. end_only()
  477. {
  478.     if (maxngtodo) {            /* did they specify newsgroup(s) */
  479.     int whicharg;
  480.  
  481. #ifdef VERBOSE
  482.     IF(verbose)
  483.         printf("\nRestriction %s%s removed.\n",ngtodo[0],
  484.         maxngtodo > 1 ? ", etc." : nullstr) FLUSH;
  485.     ELSE
  486. #endif
  487. #ifdef TERSE
  488.         fputs("\nExiting \"only\".\n",stdout) FLUSH;
  489. #endif
  490.     for (whicharg = 0; whicharg < maxngtodo; whicharg++) {
  491.         free(ngtodo[whicharg]);
  492. #ifdef SPEEDOVERMEM
  493.         free_compex(compextodo[whicharg]);
  494. #ifndef lint
  495.         free((char*)compextodo[whicharg]);
  496. #endif lint
  497. #endif
  498.     }
  499.     maxngtodo = 0;
  500.     }
  501. }
  502. #endif
  503. !STUFFY!FUNK!
  504. echo Extracting backpage.c
  505. cat >backpage.c <<'!STUFFY!FUNK!'
  506. /* $Header: backpage.c,v 4.3 85/05/01 11:36:03 lwall Exp $
  507.  *
  508.  * $Log:    backpage.c,v $
  509.  * Revision 4.3  85/05/01  11:36:03  lwall
  510.  * Baseline for release with 4.3bsd.
  511.  * 
  512.  */
  513.  
  514. #include "EXTERN.h"
  515. #include "common.h"
  516. #include "intrp.h"
  517. #include "final.h"
  518. #include "INTERN.h"
  519. #include "backpage.h"
  520.  
  521. ART_LINE maxindx = -1;
  522. long lseek();
  523.  
  524. void
  525. backpage_init()
  526. {
  527.     char *varyname;
  528.     
  529.     varyname = filexp(VARYNAME);
  530.     close(creat(varyname,0600));
  531.     varyfd = open(varyname,2);
  532.     UNLINK(varyname);
  533.     if (varyfd < 0) {
  534.     printf(cantopen,varyname) FLUSH;
  535.     sig_catcher(0);
  536.     }
  537.     
  538. }
  539.  
  540. /* virtual array read */
  541.  
  542. ART_POS
  543. vrdary(indx)
  544. ART_LINE indx;
  545. {
  546.     int subindx;
  547.     long offset;
  548.  
  549. #ifdef DEBUGGING
  550.     if (indx > maxindx) {
  551.     printf("vrdary(%ld) > %ld\n",(long)indx, (long)maxindx) FLUSH;
  552.     return 0;
  553.     }
  554. #endif
  555.     if (indx < 0)
  556.     return 0;
  557.     subindx = indx % VARYSIZE;
  558.     offset = (indx - subindx) * sizeof(varybuf[0]);
  559.     if (offset != oldoffset) {
  560.     if (oldoffset >= 0) {
  561. #ifndef lint
  562.         (void)lseek(varyfd,oldoffset,0);
  563.         write(varyfd, (char *)varybuf,sizeof(varybuf));
  564. #endif lint
  565.     }
  566. #ifndef lint
  567.     (void)lseek(varyfd,offset,0);
  568.     read(varyfd,(char *)varybuf,sizeof(varybuf));
  569. #endif lint
  570.     oldoffset = offset;
  571.     }
  572.     return varybuf[subindx];
  573. }
  574.  
  575. /* write to virtual array */
  576.  
  577. void
  578. vwtary(indx,newvalue)
  579. ART_LINE indx;
  580. ART_POS newvalue;
  581. {
  582.     int subindx;
  583.     long offset;
  584.  
  585. #ifdef DEBUGGING
  586.     if (indx < 0)
  587.     printf("vwtary(%ld)\n",(long)indx) FLUSH;
  588.     if (!indx)
  589.     maxindx = 0;
  590.     if (indx > maxindx) {
  591.     if (indx != maxindx + 1)
  592.         printf("indx skipped %d-%d\n",maxindx+1,indx-1) FLUSH;
  593.     maxindx = indx;
  594.     }
  595. #endif
  596.     subindx = indx % VARYSIZE;
  597.     offset = (indx - subindx) * sizeof(varybuf[0]);
  598.     if (offset != oldoffset) {
  599.     if (oldoffset >= 0) {
  600. #ifndef lint
  601.         (void)lseek(varyfd,oldoffset,0);
  602.         write(varyfd,(char *)varybuf,sizeof(varybuf));
  603. #endif lint
  604.     }
  605. #ifndef lint
  606.     (void)lseek(varyfd,offset,0);
  607.     read(varyfd,(char *)varybuf,sizeof(varybuf));
  608. #endif lint
  609.     oldoffset = offset;
  610.     }
  611.     varybuf[subindx] = newvalue;
  612. }
  613.  
  614. !STUFFY!FUNK!
  615. echo Extracting makedepend.SH
  616. cat >makedepend.SH <<'!STUFFY!FUNK!'
  617. case $CONFIG in
  618.     '') . config.sh ;;
  619. esac
  620. echo "Extracting makedepend (with variable substitutions)"
  621. $spitshell >makedepend <<!GROK!THIS!
  622. $startsh
  623. # $Header: makedepend.SH,v 4.3 85/05/01 11:42:26 lwall Exp $
  624. #
  625. # $Log:    makedepend.SH,v $
  626. # Revision 4.3  85/05/01  11:42:26  lwall
  627. # Baseline for release with 4.3bsd.
  628.  
  629. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  630.  
  631. $cat /dev/null >.deptmp
  632. $echo "(Note: this is going to take a while.)"
  633. $rm -f X*.c
  634. for file in *.c; do
  635.     filebase=\`basename \$file .c\`
  636.     $echo "Finding dependencies for \$filebase.o."
  637.     $sed -n <\$file >X\$file \\
  638.     -e "/^\${filebase}_init(/q" \\
  639.     -e '/^#/{' \\
  640.     -e 's|/\*.*$||' \\
  641.     -e p \\
  642.     -e '}'
  643.     $cpp X\$file | $sed  \\
  644.     -e '/^# *[0-9]/!d' \\
  645.     -e 's/^.*"\(.*\)".*\$/'\$filebase'.o: \1/' \\
  646.     -e 's|: \./|: |' \\
  647.     -e 's|: X|: |' | \\
  648.     $uniq | $sort | $uniq >> .deptmp
  649. done
  650.  
  651. for file in *.SH; do
  652.     $echo \`basename \$file .SH\`: \$file config.sh \; /bin/sh \$file >> .deptmp
  653. done
  654.  
  655. $sed <Makefile >Makefile.new -e '1,/^# AUTOMATICALLY/!d'
  656.  
  657. if $test -s .deptmp; then
  658.     echo "Updating Makefile..."
  659.     echo "# If this runs make out of memory, delete /usr/include lines." >>Makefile.new
  660.     $cat .deptmp >>Makefile.new
  661. else
  662.     $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
  663.     $egrep '^#include ' *.c *.h >.deptmp
  664.     echo "Updating Makefile..."
  665.     <.deptmp $sed -n 's|c:#include "\(.*\)".*\$\$|o: \1|p' >> Makefile.new
  666.     <.deptmp $sed -n 's|c:#include <\(.*\)>.*\$\$|o: /usr/include/\1|p' >> Makefile.new
  667.     <.deptmp $sed -n 's|h:#include "\(.*\)".*\$\$|h: \1|p' >> Makefile.new
  668.     <.deptmp $sed -n 's|h:#include <\(.*\)>.*\$\$|h: /usr/include/\1|p' >> Makefile.new
  669. fi
  670. $mv Makefile Makefile.old
  671. $mv Makefile.new Makefile
  672. $echo "# WARNING: Put nothing here or make depend will gobble it up!" >> Makefile
  673. rm .deptmp X*.c
  674.  
  675. !GROK!THIS!
  676. $eunicefix makedepend
  677. chmod 755 makedepend
  678. !STUFFY!FUNK!
  679. echo Extracting subs.help.SH
  680. cat >subs.help.SH <<'!STUFFY!FUNK!'
  681. case $CONFIG in
  682.     '') . config.sh ;;
  683. esac
  684. echo "Extracting subs.help (with variable substitutions)"
  685. $spitshell >subs.help <<!GROK!THIS!
  686. $startsh
  687. # $Header: subs.help.SH,v 4.3 85/05/01 11:50:50 lwall Exp $
  688. # $Log:    subs.help.SH,v $
  689. # Revision 4.3  85/05/01  11:50:50  lwall
  690. # Baseline for release with 4.3bsd.
  691.  
  692. $pager <<'EOT'
  693. Valid substitutions are:
  694.  
  695. a    Current article number
  696. A    Full name of current article (%P/%c/%a)
  697. b    Destination of last save command, often a mailbox
  698. B    Bytes to ignore at beginning of last saved article
  699. c    Current newsgroup, directory form
  700. C    Current newsgroup, dot form
  701. d    Full name of newsgroup directory (%P/%c)
  702. D    Distribution line from current article\
  703. f    Who the current article is from
  704. F    Newsgroups to followup to (from Newsgroups and Followup-To)
  705. h    (This help message)
  706. H    Host name (yours)
  707. i    Message-I.D. line from current article, with <>
  708. I    Reference indicator mark (see -F switch)
  709. l    News administrator's login name, if any
  710. L    Login name (yours)
  711. m    Current mode, first letter of (init,newsgroup,article,pager,misc)
  712. M    Number of article marked with M
  713. n    Newsgroups from current article
  714. N    Full name (yours)
  715. o    Organization (yours)
  716. O    Original working directory (where you ran rn from)
  717. p    Your private news directory (from -d)
  718. P    Public news spool directory
  719. r    Last reference (parent article id)
  720. R    References list for followup article
  721. s    Subject, with all Re's and (nf)'s stripped off
  722. S    Subject, with one Re stripped off\
  723. t    New To line derived from From and Reply-To (Internet format)
  724. T    New To line derived from Path
  725. u    Number of unread articles
  726. U    Number of unread articles not counting current article
  727. x    News library directory
  728. X    Rn library directory
  729. z    Length of current article in bytes
  730. ~    Your home directory
  731. .    Directory containing . files
  732. $    Current process number
  733. /    Last search string
  734. ESC    Run preceding command through % interpretation
  735. EOT
  736. !GROK!THIS!
  737. $eunicefix subs.help
  738. chmod 755 subs.help
  739. !STUFFY!FUNK!
  740. echo Extracting ndir.c
  741. cat >ndir.c <<'!STUFFY!FUNK!'
  742. /* $Header: ndir.c,v 4.3 85/05/01 11:42:55 lwall Exp $
  743.  *
  744.  * $Log:    ndir.c,v $
  745.  * Revision 4.3  85/05/01  11:42:55  lwall
  746.  * Baseline for release with 4.3bsd.
  747.  * 
  748.  */
  749.  
  750. #include "EXTERN.h"
  751. #include "common.h"
  752. #include "INTERN.h"
  753. #include "ndir.h"
  754.  
  755. #ifdef USENDIR
  756. /*
  757.  * support for Berkeley directory reading routine on a V7 file system
  758.  */
  759.  
  760. /*
  761.  * open a directory.
  762.  */
  763. DIR *
  764. opendir(name)
  765. char *name;
  766. {
  767.     register DIR *dirp;
  768.     register int fd;
  769.  
  770.     if ((fd = open(name, 0)) == -1)
  771.         return NULL;
  772.     if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
  773.         close (fd);
  774.         return NULL;
  775.     }
  776.     dirp->dd_fd = fd;
  777.     dirp->dd_loc = 0;
  778.     return dirp;
  779. }
  780.  
  781. /*
  782.  * read an old style directory entry and present it as a new one
  783.  */
  784. #ifndef pyr
  785. #define    ODIRSIZ    14
  786.  
  787. struct    olddirect {
  788.     short    od_ino;
  789.     char    od_name[ODIRSIZ];
  790. };
  791. #else    an Pyramid in the ATT universe
  792. #define    ODIRSIZ    248
  793.  
  794. struct    olddirect {
  795.     long    od_ino;
  796.     short    od_fill1, od_fill2;
  797.     char    od_name[ODIRSIZ];
  798. };
  799. #endif
  800.  
  801. /*
  802.  * get next entry in a directory.
  803.  */
  804. struct direct *
  805. readdir(dirp)
  806. register DIR *dirp;
  807. {
  808.     register struct olddirect *dp;
  809.     static struct direct dir;
  810.  
  811.     for (;;) {
  812.         if (dirp->dd_loc == 0) {
  813.             dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf,
  814.                 DIRBLKSIZ);
  815.             if (dirp->dd_size <= 0)
  816.                 return NULL;
  817.         }
  818.         if (dirp->dd_loc >= dirp->dd_size) {
  819.             dirp->dd_loc = 0;
  820.             continue;
  821.         }
  822.         dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc);
  823.         dirp->dd_loc += sizeof(struct olddirect);
  824.         if (dp->od_ino == 0)
  825.             continue;
  826.         dir.d_ino = dp->od_ino;
  827.         strncpy(dir.d_name, dp->od_name, ODIRSIZ);
  828.         dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */
  829.         dir.d_namlen = strlen(dir.d_name);
  830.         dir.d_reclen = DIRSIZ(&dir);
  831.         return (&dir);
  832.     }
  833. }
  834.  
  835. /*
  836.  * close a directory.
  837.  */
  838. void
  839. closedir(dirp)
  840. register DIR *dirp;
  841. {
  842.     close(dirp->dd_fd);
  843.     dirp->dd_fd = -1;
  844.     dirp->dd_loc = 0;
  845.     free(dirp);
  846. }
  847. #endif USENDIR
  848. !STUFFY!FUNK!
  849. echo Extracting header.c.1.pat
  850. cat >header.c.1.pat <<'!STUFFY!FUNK!'
  851. NOTE: the preceding context may be different under 2.10.2, but you should
  852. be able to figure it out anyway.
  853.  
  854. *** header.old.c    Fri Apr 27 11:30:49 1984
  855. --- header.c    Mon Feb 27 10:44:03 1984
  856. ***************
  857. *** 107,112
  858.   #define NUMLINES    19
  859.   #define KEYWORDS    20
  860.   #define APPROVED    21
  861.   #define OTHER        99
  862.   
  863.   char *malloc();
  864.  
  865. --- 107,115 -----
  866.   #define NUMLINES    19
  867.   #define KEYWORDS    20
  868.   #define APPROVED    21
  869. + #ifdef DOXREFS
  870. + #define XREF        98
  871. + #endif DOXREFS
  872.   #define OTHER        99
  873.   
  874.   char *malloc();
  875. ***************
  876. *** 201,206
  877.                   seenrelay = 1;
  878.               }
  879.               break;
  880.           case OTHER:
  881.               if (unreccnt < NUNREC) {
  882.                   hp->unrec[unreccnt] = malloc(strlen(bfr) + 1);
  883.  
  884. --- 204,214 -----
  885.                   seenrelay = 1;
  886.               }
  887.               break;
  888. + #ifdef DOXREFS
  889. +         case XREF:
  890. +             getfield(hp->xref);
  891. +             break;
  892. + #endif DOXREFS
  893.           case OTHER:
  894.               if (unreccnt < NUNREC) {
  895.                   hp->unrec[unreccnt] = malloc(strlen(bfr) + 1);
  896. ***************
  897. *** 398,403
  898.           return KEYWORDS;
  899.       if (its("Approved: "))
  900.           return APPROVED;
  901.       return OTHER;
  902.   }
  903.   
  904.  
  905. --- 406,415 -----
  906.           return KEYWORDS;
  907.       if (its("Approved: "))
  908.           return APPROVED;
  909. + #ifdef DOXREFS
  910. +     if (its("Xref: "))
  911. +         return XREF;
  912. + #endif DOXREFS
  913.       return OTHER;
  914.   }
  915.   
  916. ***************
  917. *** 507,512
  918.           fprintf(fp, "Keywords: %s\n", hp->keywords);
  919.       if (*hp->approved)
  920.           fprintf(fp, "Approved: %s\n", hp->approved);
  921.       for (iu = 0; iu < NUNREC; iu++) {
  922.           if (hp->unrec[iu])
  923.               fprintf(fp, "%s", &hp->unrec[iu][0]);
  924.  
  925. --- 519,528 -----
  926.           fprintf(fp, "Keywords: %s\n", hp->keywords);
  927.       if (*hp->approved)
  928.           fprintf(fp, "Approved: %s\n", hp->approved);
  929. + #ifdef DOXREFS
  930. +     if (wr == 1 && *hp->xref)
  931. +         fprintf(fp, "Xref: %s\n", hp->xref);
  932. + #endif DOXREFS
  933.       for (iu = 0; iu < NUNREC; iu++) {
  934.           if (hp->unrec[iu])
  935.               fprintf(fp, "%s", &hp->unrec[iu][0]);
  936. !STUFFY!FUNK!
  937. echo Extracting ng.help.SH
  938. cat >ng.help.SH <<'!STUFFY!FUNK!'
  939. case $CONFIG in
  940.     '') . config.sh ;;
  941. esac
  942. echo "Extracting ng.help (with variable substitutions)"
  943. $spitshell >ng.help <<!GROK!THIS!
  944. $startsh
  945. # $Header: ng.help.SH,v 4.3 85/05/01 11:44:34 lwall Exp $
  946. # $Log:    ng.help.SH,v $
  947. # Revision 4.3  85/05/01  11:44:34  lwall
  948. # Baseline for release with 4.3bsd.
  949.  
  950. $pager <<'EOT'
  951. Newsgroup Selection commands:
  952.  
  953. y,SP    Do this newsgroup now.
  954. .cmd    Do this newsgroup, executing cmd as first command.
  955. =    Equivalent to .=<carriage return>.
  956. u    Unsubscribe from this newsgroup.
  957. c    Catch up (mark this newsgroup all read).
  958.  
  959. n    Go to the next newsgroup with unread news.
  960. N    Go to the next newsgroup.
  961. p    Go to the previous newsgroup with unread news.
  962. P    Go to the previous newsgroup.
  963. -    Go to the previously displayed newsgroup.
  964. 1    Go to the first newsgroup.
  965. ^    Go to the first newsgroup with unread news.
  966. $    Go to the last newsgroup.
  967. g name    Go to the named newsgroup.  Subscribe to new newsgroups this way too.
  968. /pat    Search forward for newsgroup matching pattern.
  969. ?pat    Search backward for newsgroup matching pattern.
  970.     (Use * and ? style patterns.  Append r to include read newsgroups.)
  971. l pat    List unsubscribed newsgroups containing pattern.
  972. m name    Move named newsgroup elsewhere (no name moves current newsgroup).
  973. o pat    Only display newsgroups matching pattern.  Omit pat to unrestrict.
  974. a pat    Like o, but also scans for unsubscribed newsgroups matching pattern.
  975. L    List current .newsrc.
  976. &    Print current command-line switch settings.
  977. &switch {switch}
  978.     Set (or unset) more command-line switches.
  979. &&    Print current macro definitions.
  980. &&def    Define a new macro.
  981. !cmd    Shell escape.
  982. q    Quit rn.
  983. ^K    Edit the global KILL file.  Use commands like /pattern/j to suppress
  984.     pattern in every newsgroup.
  985. v    Print version.
  986. EOT
  987. !GROK!THIS!
  988. $eunicefix ng.help
  989. chmod 755 ng.help
  990. !STUFFY!FUNK!
  991. echo Extracting header.c.2.pat
  992. cat >header.c.2.pat <<'!STUFFY!FUNK!'
  993. *** header.old.c    Tue Apr 30 14:33:53 1985
  994. --- header.c        Tue Apr 30 14:33:56 1985
  995. ***************
  996. *** 119,124
  997.   #define APPROVED    21
  998.   #define NFID        22
  999.   #define NFFROM        23
  1000.   #define OTHER        99
  1001.   
  1002.   char *malloc();
  1003.  
  1004. --- 119,127 -----
  1005.   #define APPROVED    21
  1006.   #define NFID        22
  1007.   #define NFFROM        23
  1008. + #ifdef DOXREFS
  1009. + #define XREF        98
  1010. + #endif DOXREFS
  1011.   #define OTHER        99
  1012.   
  1013.   char *malloc();
  1014. ***************
  1015. *** 214,219
  1016.                   getfield(hp->relayversion);
  1017.               }
  1018.               break;
  1019.           case OTHER:
  1020.               if (unreccnt < NUNREC) {
  1021.                   if ((hp->unrec[unreccnt] = malloc((unsigned)(strlen(bfr) + 1))) != NULL ) {
  1022.  
  1023. --- 217,227 -----
  1024.                   getfield(hp->relayversion);
  1025.               }
  1026.               break;
  1027. + #ifdef DOXREFS
  1028. +         case XREF:
  1029. +             getfield(hp->xref);
  1030. +             break;
  1031. + #endif DOXREFS
  1032.           case OTHER:
  1033.               if (unreccnt < NUNREC) {
  1034.                   if ((hp->unrec[unreccnt] = malloc((unsigned)(strlen(bfr) + 1))) != NULL ) {
  1035. ***************
  1036. *** 422,427
  1037.           return NFID;
  1038.       if (its("Nf-From: "))
  1039.           return NFFROM;
  1040.       return OTHER;
  1041.   }
  1042.   
  1043.  
  1044. --- 430,439 -----
  1045.           return NFID;
  1046.       if (its("Nf-From: "))
  1047.           return NFFROM;
  1048. + #ifdef DOXREFS
  1049. +     if (its("Xref: "))
  1050. +         return XREF;
  1051. + #endif DOXREFS
  1052.       return OTHER;
  1053.   }
  1054.   
  1055. ***************
  1056. *** 536,541
  1057.           fprintf(fp, "Nf-ID: %s\n", hp->nf_id);
  1058.       if (*hp->nf_from)
  1059.           fprintf(fp, "Nf-From: %s\n", hp->nf_from);
  1060.       for (iu = 0; iu < NUNREC; iu++) {
  1061.           if (hp->unrec[iu])
  1062.               fprintf(fp, "%s", &hp->unrec[iu][0]);
  1063.  
  1064. --- 548,557 -----
  1065.           fprintf(fp, "Nf-ID: %s\n", hp->nf_id);
  1066.       if (*hp->nf_from)
  1067.           fprintf(fp, "Nf-From: %s\n", hp->nf_from);
  1068. + #ifdef DOXREFS
  1069. +     if (wr == 1 && *hp->xref)
  1070. +         fprintf(fp, "Xref: %s\n", hp->xref);
  1071. + #endif DOXREFS
  1072.       for (iu = 0; iu < NUNREC; iu++) {
  1073.           if (hp->unrec[iu])
  1074.               fprintf(fp, "%s", &hp->unrec[iu][0]);
  1075. !STUFFY!FUNK!
  1076. echo Extracting newsgroups.1
  1077. cat >newsgroups.1 <<'!STUFFY!FUNK!'
  1078. ''' $Header: newsgroups.1,v 4.3 85/05/01 11:43:32 lwall Exp $
  1079. ''' 
  1080. ''' $Log:    newsgroups.1,v $
  1081. ''' Revision 4.3  85/05/01  11:43:32  lwall
  1082. ''' Baseline for release with 4.3bsd.
  1083. ''' 
  1084. ''' 
  1085. .de Sh
  1086. .br
  1087. .ne 5
  1088. .PP
  1089. \fB\\$1\fR
  1090. .PP
  1091. ..
  1092. .de Sp
  1093. .if t .sp .5v
  1094. .if n .sp
  1095. ..
  1096. '''
  1097. '''     Set up \*(-- to give an unbreakable dash;
  1098. '''     string Tr holds user defined translation string.
  1099. '''     Bell System Logo is used as a dummy character.
  1100. '''
  1101. .ie n \{\
  1102. .tr \(bs-\*(Tr
  1103. .ds -- \(bs-
  1104. .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
  1105. .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
  1106. .ds L" ""
  1107. .ds R" ""
  1108. .ds L' '
  1109. .ds R' '
  1110. 'br\}
  1111. .el\{\
  1112. .ds -- \(em\|
  1113. .tr \*(Tr
  1114. .ds L" ``
  1115. .ds R" ''
  1116. .ds L' `
  1117. .ds R' '
  1118. 'br\}
  1119. .TH NEWSGROUPS 1 LOCAL
  1120. .SH NAME
  1121. newsgroups - a program to list unsubscribed newsgroups.
  1122. .SH SYNOPSIS
  1123. .B newsgroups pattern flag
  1124. .SH DESCRIPTION
  1125. The
  1126. .I newsgroups
  1127. program compares your .newsrc file with the file of active newsgroups,
  1128. and prints a list of unsubscribed newsgroups matching pattern.
  1129. If the second argument \*(L"flag\*(R" is present, only newsgroups not
  1130. found in your .newsrc are listed, and the display is not paged.
  1131. If the second argument is missing, the display is paged, and an additional
  1132. list of unsubscribed newsgroups occurring in your .newsrc is printed.
  1133. .SH ENVIRONMENT
  1134. .IP DOTDIR 8
  1135. Where to find your .newsrc, if not in your home directory.
  1136. .Sp
  1137. Default: $HOME
  1138. .IP HOME 8
  1139. Your home directory.
  1140. .Sp
  1141. Default: $LOGDIR
  1142. .IP LOGDIR 8
  1143. Your home directory if HOME is undefined.
  1144. .SH FILES
  1145. /usr/lib/news/active or a reasonable facsimile
  1146. .br
  1147. ${DOTDIR-{$HOME-$LOGDIR}}/.newsrc
  1148. .SH SEE ALSO
  1149. rn(1), newsrc(5)
  1150. .SH DIAGNOSTICS
  1151. .SH BUGS
  1152. The flag argument is a kludge.
  1153. !STUFFY!FUNK!
  1154. echo Extracting bits.h
  1155. cat >bits.h <<'!STUFFY!FUNK!'
  1156. /* $Header: bits.h,v 4.3 85/05/01 11:36:39 lwall Exp $
  1157.  *
  1158.  * $Log:    bits.h,v $
  1159.  * Revision 4.3  85/05/01  11:36:39  lwall
  1160.  * Baseline for release with 4.3bsd.
  1161.  * 
  1162.  */
  1163.  
  1164. EXT char *ctlarea INIT(Nullch);    /* one bit for each article in current newsgroup */
  1165.             /* with the following interpretation: */
  1166.             /*    0 => unread  */
  1167.             /*    1 => read    */
  1168.  
  1169. /* if subscripting is faster than shifting on your machine, define this */
  1170. #undef USESUBSCRIPT
  1171. #ifdef USESUBSCRIPT
  1172. EXT char powerof2[] INIT({1,2,4,8,16,32,64,128});
  1173. #define pow2(x) powerof2[x]
  1174. #else
  1175. #define pow2(x) (1 << (x))
  1176. #endif
  1177.  
  1178. #ifdef lint
  1179. EXT bool nonesuch INIT(FALSE);
  1180. #define ctl_set(a)
  1181. #define ctl_clear(a)
  1182. #define ctl_read(a) nonesuch
  1183. #define was_read(a) nonesuch
  1184. #else
  1185. #define ctl_set(a) (ctlarea[(OFFSET(a)) / BITSPERBYTE] |= pow2((OFFSET(a)) % BITSPERBYTE))
  1186. #define ctl_clear(a) (ctlarea[(OFFSET(a)) / BITSPERBYTE] &= ~pow2((OFFSET(a)) % BITSPERBYTE))
  1187. #define ctl_read(a) ((ctlarea[(OFFSET(a)) / BITSPERBYTE] & pow2((OFFSET(a)) % BITSPERBYTE)) != 0)
  1188.  
  1189. #define was_read(a) ((a)<firstart || ctl_read(a))
  1190. #endif lint
  1191.  
  1192. EXT ART_NUM absfirst INIT(0);    /* 1st real article in current newsgroup */
  1193. EXT ART_NUM firstart INIT(0);    /* minimum unread article number in newsgroup */
  1194. EXT ART_NUM lastart INIT(0);    /* maximum article number in newsgroup */
  1195.  
  1196. #ifdef DELAYMARK
  1197. EXT FILE *dmfp INIT(Nullfp);
  1198. EXT char *dmname INIT(Nullch);
  1199. EXT int dmcount INIT(0);
  1200. #endif
  1201.  
  1202. void    bits_init();
  1203. void    checkpoint_rc();
  1204. void    restore_ng();
  1205. void    onemore();
  1206. void    oneless();
  1207. void    unmark_as_read();
  1208. void    delay_unmark();
  1209. void    mark_as_read();
  1210. void    check_first();
  1211. #ifdef DELAYMARK
  1212.     void    yankback();
  1213. #endif
  1214. int    chase_xrefs();
  1215. int    initctl();
  1216. void    grow_ctl();
  1217. !STUFFY!FUNK!
  1218. echo Extracting pager.help.SH
  1219. cat >pager.help.SH <<'!STUFFY!FUNK!'
  1220. case $CONFIG in
  1221.     '') . config.sh ;;
  1222. esac
  1223. echo "Extracting pager.help (with variable substitutions)"
  1224. $spitshell >pager.help <<!GROK!THIS!
  1225. $startsh
  1226. # $Header: pager.help.SH,v 4.3 85/05/01 11:45:31 lwall Exp $
  1227. #
  1228. # $Log:    pager.help.SH,v $
  1229. # Revision 4.3  85/05/01  11:45:31  lwall
  1230. # Baseline for release with 4.3bsd.
  1231.  
  1232. $pager <<'EOT'
  1233. Paging commands:
  1234.  
  1235. SP    Display the next page.
  1236. x    Display the next page decrypted (rot13).
  1237. d    Display half a page more.
  1238. CR    Display one more line.
  1239. ^R,v,^X    Restart the current article (v=verbose header, ^X=rot13).
  1240. ^B    Back up one page.
  1241. ^L,X    Refresh the screen (X=rot13).
  1242. g pat    Go to (search forward within article for) pattern.
  1243. G    Search again for current pattern within article.
  1244. ^G    Search for next line beginning with \"Subject:\".
  1245. TAB    Search for next line beginning with a different character.
  1246. q    Quit the pager, go to end of article.  Leave article read or unread.
  1247. j    Junk this article (mark it read).  Goes to end of article.
  1248.  
  1249. The following commands skip the rest of the current article, then behave
  1250. just as if typed to the 'What next?' prompt at the end of the article:
  1251.  
  1252. n    Scan forward for next unread article.
  1253. N    Go to next article.
  1254. ^N    Scan forward for next unread article with same title.
  1255. p,P,^P    Same as n,N,^N, only going backwards.
  1256. -    Go to previously displayed article.
  1257.  
  1258. The following commands also take you to the end of the article.
  1259. Type h at end of article for a description of these commands:
  1260.  
  1261.     # $ & / = ? c C f F k K ^K m M number r R ^R s S u v w W Y ^ |
  1262.  
  1263. (To return to the middle of the article after one of these commands, type ^L.)
  1264. EOT
  1265. !GROK!THIS!
  1266. $eunicefix pager.help
  1267. chmod 755 pager.help
  1268. !STUFFY!FUNK!
  1269. echo Extracting artio.c
  1270. cat >artio.c <<'!STUFFY!FUNK!'
  1271. /* $Header: artio.c,v 4.3 85/05/01 11:35:39 lwall Exp $
  1272.  *
  1273.  * $Log:    artio.c,v $
  1274.  * Revision 4.3  85/05/01  11:35:39  lwall
  1275.  * Baseline for release with 4.3bsd.
  1276.  * 
  1277.  */
  1278.  
  1279. #include "EXTERN.h"
  1280. #include "common.h"
  1281. #include "INTERN.h"
  1282. #include "artio.h"
  1283.  
  1284. void
  1285. artio_init()
  1286. {
  1287.     ;
  1288. }
  1289.  
  1290. /* open an article, unless it's already open */
  1291.  
  1292. FILE *
  1293. artopen(artnum)
  1294. ART_NUM artnum;
  1295. {
  1296.     char artname[8];            /* filename of current article */
  1297.  
  1298.     if (artnum < 1)
  1299.     return Nullfp;
  1300.     if (openart == artnum) {        /* this article is already open? */
  1301.     fseek(artfp,0L,0);        /* just get to the beginning */
  1302.     return artfp;            /* and say we succeeded */
  1303.     }
  1304.     if (artfp != Nullfp) {        /* it was somebody else? */
  1305.     fclose(artfp);            /* put them out of their misery */
  1306.     openart = 0;            /* and remember them no more */
  1307.     }
  1308.     sprintf(artname,"%ld",(long)artnum);
  1309.                     /* produce the name of the article */
  1310.     if (artfp = fopen(artname,"r"))    /* if we can open it */
  1311.     openart = artnum;        /* remember what we did here */
  1312. #ifdef LINKART
  1313.     {
  1314.     char tmpbuf[256];
  1315.     char *s;
  1316.  
  1317.     if (fstat(artfp->_file,&filestat))
  1318.         return artfp;
  1319.     if (filestat.st_size < (sizeof tmpbuf)) {
  1320.         fgets(tmpbuf,(sizeof tmpbuf),artfp);
  1321.         if (*tmpbuf == '/') {    /* is a "link" to another article */
  1322.         fclose(artfp);
  1323.         if (s=index(tmpbuf,'\n'))
  1324.             *s = '\0';
  1325.         if (!(artfp = fopen(tmpbuf,"r")))
  1326.             openart = 0;
  1327.         else {
  1328.             if (*linkartname)
  1329.             free(linkartname);
  1330.             linkartname = savestr(tmpbuf);
  1331.         }
  1332.         }
  1333.         else
  1334.         fseek(artfp,0L,0);        /* get back to the beginning */
  1335.     }
  1336.     }
  1337. #endif
  1338.     return artfp;            /* and return either fp or NULL */
  1339. }
  1340.  
  1341. !STUFFY!FUNK!
  1342. echo Extracting newsetup.1
  1343. cat >newsetup.1 <<'!STUFFY!FUNK!'
  1344. ''' $Header: newsetup.1,v 4.3 85/05/01 11:43:22 lwall Exp $
  1345. ''' 
  1346. ''' $Log:    newsetup.1,v $
  1347. ''' Revision 4.3  85/05/01  11:43:22  lwall
  1348. ''' Baseline for release with 4.3bsd.
  1349. ''' 
  1350. ''' 
  1351. .de Sh
  1352. .br
  1353. .ne 5
  1354. .PP
  1355. \fB\\$1\fR
  1356. .PP
  1357. ..
  1358. .de Sp
  1359. .if t .sp .5v
  1360. .if n .sp
  1361. ..
  1362. '''
  1363. '''     Set up \*(-- to give an unbreakable dash;
  1364. '''     string Tr holds user defined translation string.
  1365. '''     Bell System Logo is used as a dummy character.
  1366. '''
  1367. .ie n \{\
  1368. .tr \(bs-\*(Tr
  1369. .ds -- \(bs-
  1370. .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
  1371. .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
  1372. .ds L" ""
  1373. .ds R" ""
  1374. .ds L' '
  1375. .ds R' '
  1376. 'br\}
  1377. .el\{\
  1378. .ds -- \(em\|
  1379. .tr \*(Tr
  1380. .ds L" ``
  1381. .ds R" ''
  1382. .ds L' `
  1383. .ds R' '
  1384. 'br\}
  1385. .TH NEWSETUP 1 LOCAL
  1386. .SH NAME
  1387. newsetup - a program to set up a .newsrc file
  1388. .SH SYNOPSIS
  1389. .B newsetup
  1390. .SH DESCRIPTION
  1391. The
  1392. .I newsetup
  1393. program creates a new .newsrc file containing all of the currently active
  1394. newsgroups.
  1395. It tries to put them in a reasonable order, i.e. local newsgroups earlier,
  1396. but you'll probably want to change the ordering anyway (if you use
  1397. .IR rn )
  1398. in order to put interesting newsgroups first.
  1399. If you already have a .newsrc, it will be backed up with the name
  1400. \*(L".oldnewsrc\*(R".
  1401. .SH ENVIRONMENT
  1402. .IP DOTDIR 8
  1403. Where to put your .newsrc, if not in your home directory.
  1404. .Sp
  1405. Default: $HOME
  1406. .IP HOME 8
  1407. Your home directory.
  1408. .Sp
  1409. Default: $LOGDIR
  1410. .IP LOGDIR 8
  1411. Your home directory if HOME is undefined.
  1412. .SH FILES
  1413. /usr/lib/news/active or a reasonable facsimile
  1414. .br
  1415. ${DOTDIR-{$HOME-$LOGDIR}}/.newsrc
  1416. .SH SEE ALSO
  1417. rn(1), newsrc(5)
  1418. .SH DIAGNOSTICS
  1419. .SH BUGS
  1420. !STUFFY!FUNK!
  1421. echo Extracting newsgroups.SH
  1422. cat >newsgroups.SH <<'!STUFFY!FUNK!'
  1423. case $CONFIG in
  1424.     '') . config.sh ;;
  1425. esac
  1426. echo "Extracting newsgroups (with variable substitutions)"
  1427. $spitshell >newsgroups <<!GROK!THIS!
  1428. $startsh
  1429. # $Header: newsgroups.SH,v 4.3 85/05/01 11:43:27 lwall Exp $
  1430. # $Log:    newsgroups.SH,v $
  1431. # Revision 4.3  85/05/01  11:43:27  lwall
  1432. # Baseline for release with 4.3bsd.
  1433.  
  1434. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  1435.  
  1436. : syntax: newsgroups [pattern] [pipeflag]
  1437.  
  1438. : System Dependencies
  1439.  
  1440. : You might want to change pager to a "make column" program if you have one.
  1441. : On the other hand, if your kernel does paging, cat would probably do.
  1442. pager="${pager-/usr/ucb/more}"
  1443. active="${active-/usr/lib/news/active}"
  1444.  
  1445. : End of system dependencies, hopefully
  1446.  
  1447. case \$active in
  1448. ~*) active=\`$filexp \$active\` ;;
  1449. esac
  1450.  
  1451. if $test \$# -ge 2 ; then
  1452.     pager=$cat
  1453. else
  1454.     $echo "Completely unsubscribed newsgroups:"
  1455. fi
  1456.  
  1457. dotdir=\${DOTDIR-\${HOME-\$LOGDIR}}
  1458.  
  1459. : Throwing .newsrc into the pot twice is a lovely hack to prevent
  1460. : bogus newsgroups from showing up as unsubscribed.
  1461.  
  1462. $cat \$dotdir/.newsrc \$dotdir/.newsrc \$active | \\
  1463. $sed    -e '/^options/d' \\
  1464.     -e '/^[     ]/d' \\
  1465.     -e '/^control/d' \\
  1466.     -e '/^to\./d' \\
  1467.     -e 's/^\([^ !:]*\)[ !:].*\$/\1/' \\
  1468.     -e "/.*\$1/p" \\
  1469.     -e 'd' | \\
  1470. $sort | $uniq -u | \$pager
  1471. if $test \$# -ge 2 ; then
  1472.     exit
  1473. fi
  1474. $echo $n "[Type return to continue] $c"
  1475. read tmp
  1476. $echo ""
  1477. $echo "Unsubscribed but mentioned in .newsrc:"
  1478. $sed < \$dotdir/.newsrc \\
  1479.     -e "/\$1.*!/"'s/^\([^!]*\)!.*\$/\1/p' \\
  1480.     -e 'd' | \\
  1481. $sort | \$pager
  1482. !GROK!THIS!
  1483. $eunicefix newsgroups
  1484. chmod 755 newsgroups
  1485. !STUFFY!FUNK!
  1486. echo Extracting ndir.h
  1487. cat >ndir.h <<'!STUFFY!FUNK!'
  1488. /* $Header: ndir.h,v 4.3 85/05/01 11:43:00 lwall Exp $
  1489.  *
  1490.  * $Log:    ndir.h,v $
  1491.  * Revision 4.3  85/05/01  11:43:00  lwall
  1492.  * Baseline for release with 4.3bsd.
  1493.  * 
  1494.  */
  1495.  
  1496. #ifdef LIBNDIR
  1497. #   include <ndir.h>
  1498. #else
  1499. #   ifndef USENDIR
  1500. #    include <sys/dir.h>
  1501. #   else
  1502.  
  1503. #ifndef DEV_BSIZE
  1504. #define    DEV_BSIZE    512
  1505. #endif
  1506. #define DIRBLKSIZ    DEV_BSIZE
  1507. #define    MAXNAMLEN    255
  1508.  
  1509. struct    direct {
  1510.     long    d_ino;            /* inode number of entry */
  1511.     short    d_reclen;        /* length of this record */
  1512.     short    d_namlen;        /* length of string in d_name */
  1513.     char    d_name[MAXNAMLEN + 1];    /* name must be no longer than this */
  1514. };
  1515.  
  1516. /*
  1517.  * The DIRSIZ macro gives the minimum record length which will hold
  1518.  * the directory entry.  This requires the amount of space in struct direct
  1519.  * without the d_name field, plus enough space for the name with a terminating
  1520.  * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
  1521.  */
  1522. #undef DIRSIZ
  1523. #define DIRSIZ(dp) \
  1524.     ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
  1525.  
  1526. /*
  1527.  * Definitions for library routines operating on directories.
  1528.  */
  1529. typedef struct _dirdesc {
  1530.     int    dd_fd;
  1531.     long    dd_loc;
  1532.     long    dd_size;
  1533.     char    dd_buf[DIRBLKSIZ];
  1534. } DIR;
  1535. #ifndef NULL
  1536. #define NULL 0
  1537. #endif
  1538. extern    DIR *opendir();
  1539. extern    struct direct *readdir();
  1540. extern    long telldir();
  1541. extern    void seekdir();
  1542. #define rewinddir(dirp)    seekdir((dirp), (long)0)
  1543. extern    void closedir();
  1544.  
  1545. #   endif
  1546. #endif
  1547. !STUFFY!FUNK!
  1548. echo Extracting newsnews.SH
  1549. cat >newsnews.SH <<'!STUFFY!FUNK!'
  1550. case $CONFIG in
  1551.     '') . config.sh ;;
  1552. esac
  1553. echo "Extracting newsnews (with variable substitutions)"
  1554. cat >newsnews <<!GROK!THIS!
  1555.             *** NEWS NEWS ***
  1556.  
  1557. Welcome to rn.  There are more options to rn than you want to think about, so
  1558. we won't list them here.  If you want to find out about them, read the manual
  1559. page(s).  There are some important things to remember, though:
  1560.  
  1561.   * Rn is not a modified readnews.  Don't expect the commands to be identical.
  1562.   * Rn runs in cbreak mode.  This means you don't have to type carriage return
  1563.     on single character commands.  (There are some multi-character commands.)
  1564.   * At ANY prompt in rn, you may type 'h' for help.  There are many different
  1565.     help menus, depending on where you are in rn.  Typing <esc>h in the
  1566.     middle of a multi-character command will list escape substitutions.
  1567.   * Typing a space to any prompt means to do the normal thing.  You could
  1568.     spend all day reading news and never hit anything but the space bar.
  1569.  
  1570. This particular message comes from $rnlib/newsnews.  You will only
  1571. see it once.  You news administrator should feel free to substitute his or
  1572. her own message whenever something new happens to rn, and then the file
  1573. will again be displayed, just once for each person.
  1574.  
  1575. Larry Wall    sdcrdcf!lwall
  1576. !GROK!THIS!
  1577. $eunicefix newsnews
  1578. !STUFFY!FUNK!
  1579. echo Extracting rcstuff.h
  1580. cat >rcstuff.h <<'!STUFFY!FUNK!'
  1581. /* $Header: rcstuff.h,v 4.3 85/05/01 11:46:49 lwall Exp $
  1582.  *
  1583.  * $Log:    rcstuff.h,v $
  1584.  * Revision 4.3  85/05/01  11:46:49  lwall
  1585.  * Baseline for release with 4.3bsd.
  1586.  * 
  1587.  */
  1588.  
  1589. EXT char *rcline[MAXRCLINE];/* pointers to lines of .newsrc */
  1590. EXT ART_UNREAD toread[MAXRCLINE];
  1591.             /* number of articles to be read in newsgroup */
  1592.             /* <0 => invalid or unsubscribed newsgroup */
  1593. #define TR_ONE ((ART_UNREAD) 1)
  1594. #define TR_NONE ((ART_UNREAD) 0)
  1595. #define TR_UNSUB ((ART_UNREAD) -1)
  1596.             /* keep this one as -1, some tests use >= TR_UNSUB */
  1597. #define TR_BOGUS ((ART_UNREAD) -2)
  1598. #define TR_JUNK ((ART_UNREAD) -3)
  1599.  
  1600. EXT char rcchar[MAXRCLINE]; /* holds the character : or ! while spot is \0 */
  1601. EXT char rcnums[MAXRCLINE]; /* offset from rcline to numbers on line */
  1602. EXT ACT_POS softptr[MAXRCLINE];
  1603.             /* likely ptr to active file entry for newsgroup */
  1604. EXT bool paranoid INIT(FALSE);    /* did we detect some inconsistency in .newsrc? */
  1605.  
  1606. bool    rcstuff_init();
  1607. bool    get_ng();    /* return TRUE if newsgroup can be found or added */
  1608. NG_NUM    add_newsgroup();
  1609. #ifdef RELOCATE
  1610.     NG_NUM    relocate_newsgroup();    /* move newsgroup around */
  1611. #endif
  1612. void    list_newsgroups();
  1613. NG_NUM    find_ng();    /* return index of newsgroup */
  1614. void    cleanup_rc();
  1615. void    sethash();
  1616. int    hash();
  1617. void    newsrc_check();
  1618. void    write_rc();
  1619. void    get_old_rc();
  1620. !STUFFY!FUNK!
  1621. echo Extracting kitlists.c
  1622. cat >kitlists.c <<'!STUFFY!FUNK!'
  1623. /* $Header: kitlists.c,v 4.3 85/05/01 11:42:08 lwall Exp $
  1624.  *
  1625.  * $Log:    kitlists.c,v $
  1626.  * Revision 4.3  85/05/01  11:42:08  lwall
  1627.  * Baseline for release with 4.3bsd.
  1628.  * 
  1629.  */
  1630.  
  1631. #include <stdio.h>
  1632.  
  1633. #define MAXKIT 100
  1634. #define MAXKITSIZE 63000
  1635. #define KITOVERHEAD 700
  1636. #define FILEOVERHEAD 80
  1637.  
  1638. long tot[MAXKIT];
  1639. FILE *outfp[MAXKIT];        /* of course, not this many file descriptors */
  1640.  
  1641. main(argc,argv)
  1642. int argc;
  1643. char **argv;
  1644. {
  1645.     FILE *inp, *popen();
  1646.     char buf[1024], filnam[128];
  1647.     char *index();
  1648.     register char *s;
  1649.     register int i, newtot;
  1650.     
  1651.     sprintf(buf,"\
  1652. ls -l `awk '{print $1}' <%s'` | awk '{print $8 \" \" $4}' | sort +1nr\
  1653. ", argc > 1 ? argv[1] : "MANIFEST.new");
  1654.     inp = popen(buf,"r");
  1655.  
  1656.     while (fgets(buf,1024,inp) != Nullch) {
  1657.     s = index(buf,' ');
  1658.     *s++ = '\0';
  1659.     for (i=1;
  1660.       (newtot = tot[i] + atol(s) + FILEOVERHEAD) > MAXKITSIZE-KITOVERHEAD;
  1661.       i++) 
  1662.         ;
  1663.     if (!tot[i]) {
  1664.         sprintf(filnam,"kit%d.list",i);
  1665.         outfp[i] = fopen(filnam,"w");
  1666.     }
  1667.     tot[i] = newtot;
  1668.     printf("Adding %s to kit %d giving %d bytes\n",buf,i,newtot);
  1669.     fprintf(outfp[i],"%s\n",buf);
  1670.     }
  1671. }
  1672. !STUFFY!FUNK!
  1673. echo Extracting makedir.SH
  1674. cat >makedir.SH <<'!STUFFY!FUNK!'
  1675. case $CONFIG in
  1676.     '') . config.sh ;;
  1677. esac
  1678. echo "Extracting makedir (with variable substitutions)"
  1679. $spitshell >makedir <<!GROK!THIS!
  1680. $startsh
  1681. # $Header: makedir.SH,v 4.3 85/05/01 11:42:31 lwall Exp $
  1682. # $Log:    makedir.SH,v $
  1683. # Revision 4.3  85/05/01  11:42:31  lwall
  1684. # Baseline for release with 4.3bsd.
  1685.  
  1686. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  1687.  
  1688. case \$# in
  1689.   0)
  1690.     $echo "makedir pathname filenameflag"
  1691.     exit 1
  1692.     ;;
  1693. esac
  1694.  
  1695. : guarantee one slash before 1st component
  1696. case \$1 in
  1697.   /*) ;;
  1698.   *)  set ./\$1 \$2 ;;
  1699. esac
  1700.  
  1701. : strip last component if it is to be a filename
  1702. case X\$2 in
  1703.   X1) set \`$echo \$1 | $sed 's:\(.*\)/[^/]*\$:\1:'\` ;;
  1704.   *)  set \$1 ;;
  1705. esac
  1706.  
  1707. : return reasonable status if nothing to be created
  1708. if $test -d "\$1" ; then
  1709.     exit 0
  1710. fi
  1711.  
  1712. list=''
  1713. while true ; do
  1714.     case \$1 in
  1715.     */*)
  1716.     list="\$1 \$list"
  1717.     set \`echo \$1 | $sed 's:\(.*\)/:\1 :'\`
  1718.     ;;
  1719.     *)
  1720.     break
  1721.     ;;
  1722.     esac
  1723. done
  1724.  
  1725. set \$list
  1726.  
  1727. for dir do
  1728.     $mkdir \$dir >/dev/null 2>&1
  1729. done
  1730. !GROK!THIS!
  1731. $eunicefix makedir
  1732. chmod 755 makedir
  1733. !STUFFY!FUNK!
  1734. echo Extracting search.h
  1735. cat >search.h <<'!STUFFY!FUNK!'
  1736. /* $Header: search.h,v 4.3 85/05/01 11:50:46 lwall Exp $
  1737.  *
  1738.  * $Log:    search.h,v $
  1739.  * Revision 4.3  85/05/01  11:50:46  lwall
  1740.  * Baseline for release with 4.3bsd.
  1741.  * 
  1742.  */
  1743.  
  1744. #ifndef NBRA
  1745. #define    NBRA    10        /* the maximum number of meta-brackets in an
  1746.                    RE -- \( \) */
  1747. #define NALTS    10        /* the maximum number of \|'s */
  1748.  
  1749. typedef struct {    
  1750.     char *expbuf;        /* The compiled search string */
  1751.     int eblen;            /* Length of above buffer */
  1752.     char *alternatives[NALTS];    /* The list of \| seperated alternatives */
  1753.     char *braslist[NBRA];    /* RE meta-bracket start list */
  1754.     char *braelist[NBRA];    /* RE meta-bracket end list */
  1755.     char *brastr;        /* saved match string after execute() */
  1756.     char nbra;            /* The number of meta-brackets int the most
  1757.                    recenlty compiled RE */
  1758.     bool do_folding;        /* fold upper and lower case? */
  1759. } COMPEX;
  1760.  
  1761. void    search_init();
  1762. void    init_compex();
  1763. void    free_compex();
  1764. char    *getbracket();
  1765. void    case_fold();
  1766. char    *compile(); 
  1767. void    grow_eb();
  1768. char    *execute(); 
  1769. bool    advance();
  1770. bool    backref(); 
  1771. bool    cclass(); 
  1772. #endif
  1773. !STUFFY!FUNK!
  1774. echo Extracting last.c
  1775. cat >last.c <<'!STUFFY!FUNK!'
  1776. /* $Header: last.c,v 4.3 85/05/01 11:42:16 lwall Exp $
  1777.  *
  1778.  * $Log:    last.c,v $
  1779.  * Revision 4.3  85/05/01  11:42:16  lwall
  1780.  * Baseline for release with 4.3bsd.
  1781.  * 
  1782.  */
  1783.  
  1784. #include "EXTERN.h"
  1785. #include "common.h"
  1786. #include "rn.h"
  1787. #include "util.h"
  1788. #include "intrp.h"
  1789. #include "INTERN.h"
  1790. #include "last.h"
  1791.  
  1792. char *lastname = Nullch;    /* path name of .rnlast file */
  1793.  
  1794. void
  1795. last_init(tcbuf)
  1796. char *tcbuf;
  1797. {
  1798.     lastname = savestr(filexp(LASTNAME));
  1799.     if ((tmpfp = fopen(lastname,"r")) != Nullfp) {
  1800.     fgets(tcbuf,1024,tmpfp);
  1801.     tcbuf[strlen(tcbuf)-1] = '\0';
  1802.     lastngname = savestr(tcbuf);
  1803.     fgets(tcbuf,1024,tmpfp);
  1804.     lasttime = atol(tcbuf);
  1805.     fgets(tcbuf,1024,tmpfp);
  1806.     lastactsiz = atol(tcbuf);
  1807.     fclose(tmpfp);
  1808.     }
  1809.     else {
  1810.     lastngname = nullstr;
  1811.     lasttime = 0;
  1812.     lastactsiz = 0;
  1813.     }
  1814. }
  1815.  
  1816. /* put out certain values for next run of rn */
  1817.  
  1818. void
  1819. writelast()
  1820. {
  1821.     if ((tmpfp = fopen(lastname,"w")) != Nullfp) {
  1822.     fprintf(tmpfp,"%s\n%ld\n%ld\n",ngname,(long)lasttime,(long)lastactsiz);
  1823.     fclose(tmpfp);
  1824.     }
  1825.     else
  1826.     printf(cantcreate,lastname) FLUSH;
  1827. }
  1828. !STUFFY!FUNK!
  1829. echo Extracting artsrch.h
  1830. cat >artsrch.h <<'!STUFFY!FUNK!'
  1831. /* $Header: artsrch.h,v 4.3 85/05/01 11:35:55 lwall Exp $
  1832.  *
  1833.  * $Log:    artsrch.h,v $
  1834.  * Revision 4.3  85/05/01  11:35:55  lwall
  1835.  * Baseline for release with 4.3bsd.
  1836.  * 
  1837.  */
  1838.  
  1839. #ifndef NBRA
  1840. #include "search.h"
  1841. #endif
  1842.  
  1843. #ifdef ARTSEARCH
  1844.  
  1845. #define SRCH_ABORT 0
  1846. #define SRCH_INTR 1
  1847. #define SRCH_FOUND 2
  1848. #define SRCH_NOTFOUND 3
  1849. #define SRCH_DONE 4
  1850. #define SRCH_SUBJDONE 5
  1851. #define SRCH_ERROR 6
  1852. #endif
  1853.  
  1854. EXT char *lastpat INIT(nullstr);    /* last search pattern */
  1855. #ifdef ARTSEARCH
  1856.     EXT COMPEX sub_compex;        /* last compiled subject search */
  1857.     EXT COMPEX art_compex;        /* last compiled normal search */
  1858. #   ifdef CONDSUB
  1859.     EXT COMPEX *bra_compex INIT(&art_compex);
  1860.                     /* current compex with brackets */
  1861. #   endif
  1862.     EXT char art_howmuch;        /* search just the subjects */
  1863.     EXT bool art_doread;        /* search read articles? */
  1864. #endif
  1865.  
  1866. void    artsrch_init();
  1867. #ifdef ARTSEARCH
  1868.     int        art_search();
  1869.     bool    wanted();    /* return TRUE if current article matches pattern */
  1870. #endif
  1871. !STUFFY!FUNK!
  1872. echo Extracting mbox.saver.SH
  1873. cat >mbox.saver.SH <<'!STUFFY!FUNK!'
  1874. case $CONFIG in
  1875.     '') . config.sh ;;
  1876. esac
  1877. echo "Extracting mbox.saver (with variable substitutions)"
  1878. $spitshell >mbox.saver <<!GROK!THIS!
  1879. $startsh
  1880. # $Header: mbox.saver.SH,v 4.3 85/05/01 11:42:51 lwall Exp $
  1881. # $Log:    mbox.saver.SH,v $
  1882. # Revision 4.3  85/05/01  11:42:51  lwall
  1883. # Baseline for release with 4.3bsd.
  1884. #    Arguments:
  1885. #    1 Full name of article (%A)
  1886. #    2 Public news spool directory (%P)
  1887. #    3 Directory of current newsgroup (%c)
  1888. #    4 Article number (%a)
  1889. #    5 Where in article to start (%B)
  1890. #    6 Newsgroup name (%C)
  1891. #    7 Save destination (%b)
  1892. #    8 First line of message, normally From...
  1893. #
  1894. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  1895.  
  1896. ( $echo "\$8"
  1897.   case "$5" in
  1898.   0) $echo "Article \$4 of \$6:" ;;
  1899.   esac
  1900.   $tail +\$5c \$1 | $sed "s/^From/>From/"
  1901.   $echo ""
  1902.   $echo "" ) >> \$7
  1903. !GROK!THIS!
  1904. $eunicefix mbox.saver
  1905. chmod 755 mbox.saver
  1906. !STUFFY!FUNK!
  1907. echo Extracting util.h
  1908. cat >util.h <<'!STUFFY!FUNK!'
  1909. /* $Header: util.h,v 4.3 85/05/01 11:51:58 lwall Exp $
  1910.  *
  1911.  * $Log:    util.h,v $
  1912.  * Revision 4.3  85/05/01  11:51:58  lwall
  1913.  * Baseline for release with 4.3bsd.
  1914.  * 
  1915.  */
  1916.  
  1917. EXT bool waiting INIT(FALSE);        /* are we waiting for subprocess (in doshell)? */
  1918. EXT int len_last_line_got INIT(0);
  1919.             /* strlen of some_buf after */
  1920.             /*  some_buf = get_a_line(bufptr,buffersize,fp) */
  1921.  
  1922. /* is the string for makedir a directory name or a filename? */
  1923.  
  1924. #define MD_DIR 0
  1925. #define MD_FILE 1
  1926.  
  1927. void    util_init();
  1928. int    doshell();
  1929. char    *safemalloc();
  1930. char    *saferealloc();
  1931. char    *safecpy();
  1932. char    *safecat();
  1933. char    *cpytill();
  1934. char    *instr();
  1935. #ifdef SETUIDGID
  1936.     int        eaccess();
  1937. #endif
  1938. char    *getwd();
  1939. void    cat();
  1940. void    prexit();
  1941. char    *get_a_line();
  1942. char    *savestr();
  1943. int    makedir();
  1944. void    setenv();
  1945. int    envix();
  1946. void    notincl();
  1947. char    *getval();
  1948. void    growstr();
  1949. void    setdef();
  1950. !STUFFY!FUNK!
  1951. echo Extracting norm.saver.SH
  1952. cat >norm.saver.SH <<'!STUFFY!FUNK!'
  1953. case $CONFIG in
  1954.     '') . config.sh ;;
  1955. esac
  1956. echo "Extracting norm.saver (with variable substitutions)"
  1957. $spitshell >norm.saver <<!GROK!THIS!
  1958. $startsh
  1959. # $Header: norm.saver.SH,v 4.3 85/05/01 11:45:16 lwall Exp $
  1960. # $Log:    norm.saver.SH,v $
  1961. # Revision 4.3  85/05/01  11:45:16  lwall
  1962. # Baseline for release with 4.3bsd.
  1963. #    Arguments:
  1964. #    1 Full name of article (%A)
  1965. #    2 Public news spool directory (%P)
  1966. #    3 Directory of current newsgroup (%c)
  1967. #    4 Article number (%a)
  1968. #    5 Where in article to start (%B)
  1969. #    6 Newsgroup name (%C)
  1970. #    7 Save destination (%b)
  1971. #
  1972. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  1973.  
  1974. ( case "$5" in
  1975.   0) $echo "Article \$4 of \$6:" ;;
  1976.   esac
  1977.   $tail +\$5c \$1
  1978.   $echo ""
  1979.   $echo "" ) >> \$7
  1980. !GROK!THIS!
  1981. $eunicefix norm.saver
  1982. chmod 755 norm.saver
  1983. !STUFFY!FUNK!
  1984. echo Extracting rn.h
  1985. cat >rn.h <<'!STUFFY!FUNK!'
  1986. /* $Header: rn.h,v 4.3 85/05/01 11:48:19 lwall Exp $
  1987.  *
  1988.  * $Log:    rn.h,v $
  1989.  * Revision 4.3  85/05/01  11:48:19  lwall
  1990.  * Baseline for release with 4.3bsd.
  1991.  * 
  1992.  */
  1993.  
  1994. EXT char *ngname INIT(Nullch);        /* name of current newsgroup */
  1995. EXT int ngnlen INIT(0);            /* current malloced size of ngname */
  1996. EXT char *ngdir INIT(Nullch);        /* same thing in directory name form */
  1997. EXT int ngdlen INIT(0);            /* current malloced size of ngdir */
  1998.  
  1999. EXT NG_NUM ng INIT(0);        /* current newsgroup index into rcline and toread */
  2000. EXT NG_NUM current_ng INIT(0);    /* stable current newsgroup so we can ditz with ng */
  2001. EXT NG_NUM starthere INIT(0);   /* set to the first newsgroup with unread news on startup */
  2002. EXT char *spool INIT(Nullch);        /* public news spool directory */
  2003.  
  2004. void    rn_init();
  2005. void    main();
  2006. void    set_ngname();
  2007. char    *getngdir();
  2008. !STUFFY!FUNK!
  2009. echo Extracting Wishlist
  2010. cat >Wishlist <<'!STUFFY!FUNK!'
  2011. Generalized article set manipulation
  2012.     Interface to subject listing.
  2013.     Recursive newsgroup visitation.
  2014. Virtual article abstract type to allow the following:
  2015.     Personalized header munging via % subs.
  2016.     Undigestification.
  2017.     Personal archive perusal.
  2018.     Mail handling.
  2019.     Remotely stored news.
  2020. Parent command (waiting for ARTFILE interface and recursive newsgroups).
  2021. Merge Pnews and postnews.
  2022. Vnews duplicate suppression algorithm for sites that can't do Xref patch.
  2023. Dynamic allocation of stuff currently restricted by MAXRCLINE.
  2024.     (And pull parallel arrays into array of structs).
  2025. Separation of .newsrc functions and newsgroup functions to separate processes
  2026.     communicating via pipes (to make fit on non-separate-I-and-D pdp11,
  2027.     or unreasonable facsimiles thereof).
  2028. Faster!!!
  2029. Smaller!!!
  2030. More general!!!
  2031. Perfect?
  2032. !STUFFY!FUNK!
  2033. echo Extracting intrp.h
  2034. cat >intrp.h <<'!STUFFY!FUNK!'
  2035. /* $Header: intrp.h,v 4.3 85/05/01 11:41:48 lwall Exp $
  2036.  *
  2037.  * $Log:    intrp.h,v $
  2038.  * Revision 4.3  85/05/01  11:41:48  lwall
  2039.  * Baseline for release with 4.3bsd.
  2040.  * 
  2041.  */
  2042.  
  2043. EXT char *lib INIT(Nullch);        /* news library */
  2044. EXT char *rnlib INIT(Nullch);        /* private news program library */
  2045. EXT char *origdir INIT(Nullch);        /* cwd when rn invoked */
  2046. EXT char *homedir INIT(Nullch);        /* login directory */
  2047. EXT char *dotdir INIT(Nullch);        /* where . files go */
  2048. EXT char *logname INIT(Nullch);        /* login id */
  2049. EXT char *sitename INIT(Nullch);    /* host name */
  2050.  
  2051. #ifdef NEWSADMIN
  2052.     EXT char newsadmin[] INIT(NEWSADMIN);/* news administrator */
  2053.     EXT int newsuid INIT(0);
  2054. #endif
  2055.  
  2056. void    intrp_init();
  2057. char    *filexp();
  2058. char    *dointerp();
  2059. void    interp();
  2060. void    refscpy();
  2061. char    *getrealname();
  2062. !STUFFY!FUNK!
  2063. echo Extracting makekit
  2064. cat >makekit <<'!STUFFY!FUNK!'
  2065. #!/bin/sh
  2066. # $Header: makekit,v 4.3 85/05/01 11:42:38 lwall Exp $
  2067. #
  2068. # $Log:    makekit,v $
  2069. # Revision 4.3  85/05/01  11:42:38  lwall
  2070. # Baseline for release with 4.3bsd.
  2071.  
  2072. numkits=$#
  2073. for kitlist in $*; do
  2074.     kit=`basename $kitlist .list`
  2075.     kitnum=`expr "$kit" : 'kit\([0-9][0-9]*\)'`
  2076.     echo "*** Making $kit ***"
  2077.     kitleader "$kit" "$kitnum" "$numkits"
  2078.     for file in `/bin/cat $kitlist`; do
  2079.     echo $file
  2080.     echo "echo Extracting $file" >> $kit
  2081.     if egrep '^\.$' $file; then
  2082.         echo "sed >$file <<'!STUFFY!FUNK!' -e 's/X//'" >> $kit
  2083.         sed <$file >>$kit -e 's/^/X/'
  2084.     else
  2085.         echo "cat >$file <<'!STUFFY!FUNK!'" >> $kit
  2086.         /bin/cat $file >> $kit
  2087.     fi
  2088.     echo "!STUFFY!FUNK!" >> $kit
  2089.     done
  2090.     kittrailer "$kit" "$kitnum" "$numkits"
  2091. done
  2092. !STUFFY!FUNK!
  2093. echo Extracting artstate.h
  2094. cat >artstate.h <<'!STUFFY!FUNK!'
  2095. /* $Header: artstate.h,v 4.3 85/05/01 11:35:59 lwall Exp $
  2096.  *
  2097.  * $Log:    artstate.h,v $
  2098.  * Revision 4.3  85/05/01  11:35:59  lwall
  2099.  * Baseline for release with 4.3bsd.
  2100.  * 
  2101.  */
  2102.  
  2103. EXT bool reread INIT(FALSE);        /* consider current art temporarily */
  2104.                     /* unread? */
  2105. EXT bool do_fseek INIT(FALSE);    /* should we back up in article file? */
  2106.  
  2107. EXT bool oldsubject INIT(FALSE);    /* not 1st art in subject thread */
  2108. EXT ART_LINE topline INIT(-1);        /* top line of current screen */
  2109. EXT bool do_hiding INIT(TRUE);        /* hide header lines with -h? */
  2110. #ifdef ROTATION
  2111. EXT bool rotate INIT(FALSE);        /* has rotation been requested? */
  2112. #endif
  2113. EXT char *prompt;            /* pointer to current prompt */
  2114.  
  2115. EXT char *firstline INIT(Nullch);            /* special first line? */
  2116. !STUFFY!FUNK!
  2117. echo Extracting final.h
  2118. cat >final.h <<'!STUFFY!FUNK!'
  2119. /* $Header: final.h,v 4.3 85/05/01 11:38:17 lwall Exp $
  2120.  * 
  2121.  * $Log:    final.h,v $
  2122.  * Revision 4.3  85/05/01  11:38:17  lwall
  2123.  * Baseline for release with 4.3bsd.
  2124.  * 
  2125.  */
  2126.  
  2127. /* cleanup status for fast exits */
  2128.  
  2129. EXT bool panic INIT(FALSE);        /* we got hung up or something-- */
  2130.                     /*  so leave tty alone */
  2131. EXT bool rc_changed INIT(FALSE);    /* need we rewrite .newsrc? */
  2132. EXT bool doing_ng INIT(FALSE);        /* do we need to reconstitute */
  2133.                     /* current rc line? */
  2134.  
  2135. EXT char int_count INIT(0);        /* how many interrupts we've had */
  2136.  
  2137. /* signal catching routines */
  2138.  
  2139. int    int_catcher();
  2140. int    sig_catcher();
  2141. #ifdef SIGTSTP
  2142.     int    stop_catcher();
  2143.     int    cont_catcher();
  2144. #endif
  2145.  
  2146. void    final_init();
  2147. void    finalize();
  2148. !STUFFY!FUNK!
  2149. echo Extracting manimake
  2150. cat >manimake <<'!STUFFY!FUNK!'
  2151. #!/bin/sh
  2152. # $Header: manimake,v 4.3 85/05/01 11:42:46 lwall Exp $
  2153. #
  2154. # $Log:    manimake,v $
  2155. # Revision 4.3  85/05/01  11:42:46  lwall
  2156. # Baseline for release with 4.3bsd.
  2157.  
  2158. : make MANIFEST and MANIFEST.new say the same thing
  2159. if test -f MANIFEST.new; then
  2160.     cat <<'EOH' > MANIFEST
  2161. After all the rn kits are run you should have the following files:
  2162.  
  2163. Filename    Kit Description
  2164. --------    --- -----------
  2165. EOH
  2166.     sort MANIFEST.new >.mani
  2167.     grep . kit*.list | sed 's/^kit\(.*\)\.list:\$*\(.*\)$/\2 |\1|/' | \
  2168.     sort | \
  2169.     join -a1 - .mani | \
  2170.     awk -F'|' '{printf "%-16s%2s %s\n",$1,$2,$3}' | \
  2171.     unexpand >> MANIFEST
  2172.     rm .mani
  2173. else
  2174.     echo "You don't have a MANIFEST.new file.  Run manifake."
  2175. fi
  2176. !STUFFY!FUNK!
  2177. echo Extracting kittrailer
  2178. cat >kittrailer <<'!STUFFY!FUNK!'
  2179. #! /bin/sh
  2180. # $Header: kittrailer,v 4.3 85/05/01 11:42:11 lwall Exp $
  2181. #
  2182. # $Log:    kittrailer,v $
  2183. # Revision 4.3  85/05/01  11:42:11  lwall
  2184. # Baseline for release with 4.3bsd.
  2185.  
  2186. rangelist=`range 1 $3`
  2187. cat >>$1 <<EOT
  2188. echo ""
  2189. echo "End of kit $2 (of $3)"
  2190. cat /dev/null >kit${2}isdone
  2191. config=true
  2192. for iskit in $rangelist; do
  2193.     if test -f kit\${iskit}isdone; then
  2194.     echo "You have run kit \${iskit}."
  2195.     else
  2196.     echo "You still need to run kit \${iskit}."
  2197.     config=false
  2198.     fi
  2199. done
  2200. case \$config in
  2201.     true)
  2202.     echo "You have run all your kits.  Please read README and then type Configure."
  2203.     chmod 755 Configure
  2204.     ;;
  2205. esac
  2206. : I do not append .signature, but someone might mail this.
  2207. exit
  2208. EOT
  2209. !STUFFY!FUNK!
  2210. echo Extracting only.h
  2211. cat >only.h <<'!STUFFY!FUNK!'
  2212. /* $Header: only.h,v 4.3 85/05/01 11:45:27 lwall Exp $
  2213.  *
  2214.  * $Log:    only.h,v $
  2215.  * Revision 4.3  85/05/01  11:45:27  lwall
  2216.  * Baseline for release with 4.3bsd.
  2217.  * 
  2218.  */
  2219.  
  2220. #ifndef NBRA
  2221. #include "search.h"
  2222. #endif
  2223.  
  2224. #ifdef ONLY
  2225.     EXT char *ngtodo[NGMAX];        /* restrictions in effect */
  2226. #   ifdef SPEEDOVERMEM
  2227.     EXT COMPEX *compextodo[NGMAX];    /* restrictions in compiled form */
  2228. #   endif
  2229. #endif
  2230.  
  2231. EXT int maxngtodo INIT(0);            /*  0 => no restrictions */
  2232.                     /* >0 => # of entries in ngtodo */
  2233.  
  2234. void    only_init();
  2235. bool    inlist();    /* return TRUE if ngname is in command line list */
  2236.             /* or if there was no list */
  2237. void    setngtodo();
  2238. #ifdef ONLY
  2239.     void    end_only();
  2240. #endif
  2241. !STUFFY!FUNK!
  2242. echo Extracting header.h.1.pat
  2243. cat >header.h.1.pat <<'!STUFFY!FUNK!'
  2244. NOTE: the preceding context may be different under 2.10.2, but you should
  2245. be able to figure it out anyway.
  2246.  
  2247. *** header.old.h    Fri Apr 27 11:30:49 1984
  2248. --- header.h    Thu May 10 15:19:55 1984
  2249. ***************
  2250. *** 34,38
  2251.       int    intnumlines;        /* Integer version    */
  2252.       char    keywords[BUFLEN];    /* Keywords:        */
  2253.       char    approved[BUFLEN];    /* Approved:        */
  2254.       char    *unrec[NUNREC];        /* unrecognized lines    */
  2255.   };
  2256.  
  2257. --- 34,41 -----
  2258.       int    intnumlines;        /* Integer version    */
  2259.       char    keywords[BUFLEN];    /* Keywords:        */
  2260.       char    approved[BUFLEN];    /* Approved:        */
  2261. + #ifdef DOXREFS
  2262. +     char    xref[BUFLEN];        /* Xref:        */
  2263. + #endif
  2264.       char    *unrec[NUNREC];        /* unrecognized lines    */
  2265.   };
  2266. !STUFFY!FUNK!
  2267. echo Extracting artio.h
  2268. cat >artio.h <<'!STUFFY!FUNK!'
  2269. /* $Header: artio.h,v 4.3 85/05/01 11:35:43 lwall Exp $
  2270.  *
  2271.  * $Log:    artio.h,v $
  2272.  * Revision 4.3  85/05/01  11:35:43  lwall
  2273.  * Baseline for release with 4.3bsd.
  2274.  * 
  2275.  */
  2276.  
  2277. EXT ART_POS artpos INIT(0);    /* byte position in article file */
  2278.  
  2279. EXT ART_LINE artline INIT(0);        /* current line number in article file */
  2280. EXT FILE *artfp INIT(Nullfp);        /* current article file pointer */
  2281. EXT ART_NUM openart INIT(0);        /* what is the currently open article number? */
  2282. #ifdef LINKART
  2283.     EXT char *linkartname INIT(nullstr);/* real name of article for Eunice */
  2284. #endif
  2285.  
  2286. void    artio_init();
  2287. FILE    *artopen();            /* open an article unless already opened */
  2288. !STUFFY!FUNK!
  2289. echo Extracting ngdata.h
  2290. cat >ngdata.h <<'!STUFFY!FUNK!'
  2291. /* $Header: ngdata.h,v 4.3 85/05/01 11:44:48 lwall Exp $
  2292.  *
  2293.  * $Log:    ngdata.h,v $
  2294.  * Revision 4.3  85/05/01  11:44:48  lwall
  2295.  * Baseline for release with 4.3bsd.
  2296.  * 
  2297.  */
  2298.  
  2299. EXT FILE *actfp INIT(Nullfp);    /* the active file */
  2300. EXT bool writesoft INIT(FALSE);    /* rewrite the soft pointer file? */
  2301. EXT int softtries INIT(0), softmisses INIT(0);
  2302.  
  2303. #ifdef CACHEFIRST
  2304.     EXT ART_NUM abs1st[MAXRCLINE];    /* 1st real article in newsgroup */
  2305. #else
  2306. # ifdef MININACT
  2307.     EXT ART_NUM abs1st INIT(0);
  2308. # endif
  2309. #endif
  2310.  
  2311.  
  2312. void    ngdata_init();
  2313. ART_NUM    getngsize();
  2314. ACT_POS findact();
  2315. ART_NUM    getabsfirst();
  2316. ART_NUM    getngmin();
  2317. !STUFFY!FUNK!
  2318. echo Extracting kitleader
  2319. cat >kitleader <<'!STUFFY!FUNK!'
  2320. #! /bin/sh
  2321. # $Header: kitleader,v 4.3 85/05/01 11:42:03 lwall Exp $
  2322. #
  2323. # $Log:    kitleader,v $
  2324. # Revision 4.3  85/05/01  11:42:03  lwall
  2325. # Baseline for release with 4.3bsd.
  2326.  
  2327. cat >$1 <<EOT
  2328. #! /bin/sh
  2329.  
  2330. # Make a new directory for the rn sources, cd to it, and run kits 1 thru $3 
  2331. # through sh.  When all $3 kits have been run, read README.
  2332.  
  2333. echo "This is rn kit $2 (of $3).  If kit $2 is complete, the line"
  2334. echo '"'"End of kit $2 (of $3)"'" will echo at the end.'
  2335. echo ""
  2336. export PATH || (echo "You didn't use sh, you clunch." ; kill \$\$)
  2337. EOT
  2338. !STUFFY!FUNK!
  2339. echo Extracting kfile.h
  2340. cat >kfile.h <<'!STUFFY!FUNK!'
  2341. /* $Header: kfile.h,v 4.3 85/05/01 11:42:00 lwall Exp $
  2342.  *
  2343.  * $Log:    kfile.h,v $
  2344.  * Revision 4.3  85/05/01  11:42:00  lwall
  2345.  * Baseline for release with 4.3bsd.
  2346.  * 
  2347.  */
  2348.  
  2349. #define KF_GLOBAL 0
  2350. #define KF_LOCAL 1
  2351.  
  2352. #ifdef KILLFILES
  2353. EXT FILE *globkfp INIT(Nullfp);        /* global article killer file */
  2354. EXT FILE *localkfp INIT(Nullfp);    /* local (for this newsgroup) */
  2355.                     /*  article killer file */
  2356. #endif
  2357.  
  2358. void    kfile_init();
  2359. int    do_kfile();
  2360. void    kill_unwanted();
  2361. int    edit_kfile();
  2362. void    open_kfile();
  2363. void    kf_append();
  2364. void    setthru();
  2365.  
  2366. !STUFFY!FUNK!
  2367. echo Extracting backpage.h
  2368. cat >backpage.h <<'!STUFFY!FUNK!'
  2369. /* $Header: backpage.h,v 4.3 85/05/01 11:36:11 lwall Exp $
  2370.  *
  2371.  * $Log:    backpage.h,v $
  2372.  * Revision 4.3  85/05/01  11:36:11  lwall
  2373.  * Baseline for release with 4.3bsd.
  2374.  * 
  2375.  */
  2376.  
  2377. /* things for doing the 'back page' command */
  2378.  
  2379. EXT int varyfd INIT(0);            /* virtual array file for storing  */
  2380.                     /* file offsets */
  2381. EXT ART_POS varybuf[VARYSIZE];        /* current window onto virtual array */
  2382.  
  2383. EXT long oldoffset INIT(-1);        /* offset to block currently in window */
  2384.  
  2385. void    backpage_init();
  2386. ART_POS    vrdary();
  2387. void    vwtary();
  2388. !STUFFY!FUNK!
  2389. echo Extracting ngsrch.h
  2390. cat >ngsrch.h <<'!STUFFY!FUNK!'
  2391. /* $Header: ngsrch.h,v 4.3 85/05/01 11:44:56 lwall Exp $
  2392.  *
  2393.  * $Log:    ngsrch.h,v $
  2394.  * Revision 4.3  85/05/01  11:44:56  lwall
  2395.  * Baseline for release with 4.3bsd.
  2396.  * 
  2397.  */
  2398.  
  2399. #ifdef NGSEARCH
  2400. #define NGS_ABORT 0
  2401. #define NGS_FOUND 1
  2402. #define NGS_INTR 2
  2403. #define NGS_NOTFOUND 3
  2404.  
  2405. EXT bool ng_doread INIT(FALSE);        /* search read newsgroups? */
  2406. #endif
  2407.  
  2408. void    ngsrch_init();
  2409. #ifdef NGSEARCH 
  2410.     int        ng_search();
  2411.     bool    ng_wanted();
  2412. #endif
  2413. #ifdef NGSORONLY
  2414.     char    *ng_comp();
  2415. #endif
  2416. !STUFFY!FUNK!
  2417. echo Extracting manifake
  2418. cat >manifake <<'!STUFFY!FUNK!'
  2419. #!/bin/sh
  2420. # $Header: manifake,v 4.3 85/05/01 11:42:41 lwall Exp $
  2421. #
  2422. # $Log:    manifake,v $
  2423. # Revision 4.3  85/05/01  11:42:41  lwall
  2424. # Baseline for release with 4.3bsd.
  2425.  
  2426. : make MANIFEST and MANIFEST.new say the same thing
  2427. if test ! -f MANIFEST.new; then
  2428.     if test -f MANIFEST; then
  2429.     sed <MANIFEST >MANIFEST.new \
  2430.         -e '1,/---/d' \
  2431.         -e 's/\([     ][     ]*\)[0-9]*  */\1/'
  2432.     else
  2433.     echo "Make a MANIFEST.new file, with names and descriptions."
  2434.     fi
  2435. fi
  2436. !STUFFY!FUNK!
  2437. echo Extracting respond.h
  2438. cat >respond.h <<'!STUFFY!FUNK!'
  2439. /* $Header: respond.h,v 4.3 85/05/01 11:47:50 lwall Exp $
  2440.  *
  2441.  * $Log:    respond.h,v $
  2442.  * Revision 4.3  85/05/01  11:47:50  lwall
  2443.  * Baseline for release with 4.3bsd.
  2444.  * 
  2445.  */
  2446.  
  2447. EXT char *savedest INIT(Nullch);    /* value of %b */
  2448. EXT ART_POS savefrom INIT(0);        /* value of %B */
  2449. EXT char *headname INIT(Nullch);
  2450.  
  2451. #define SAVE_ABORT 0
  2452. #define SAVE_DONE 1
  2453.  
  2454. void    respond_init();
  2455. int    save_article();
  2456. int    cancel_article();
  2457. void    reply();
  2458. void    followup();
  2459. void    invoke();
  2460. !STUFFY!FUNK!
  2461. echo Extracting cheat.h
  2462. cat >cheat.h <<'!STUFFY!FUNK!'
  2463. /* $Header: cheat.h,v 4.3 85/05/01 11:36:58 lwall Exp $
  2464.  *
  2465.  * $Log:    cheat.h,v $
  2466.  * Revision 4.3  85/05/01  11:36:58  lwall
  2467.  * Baseline for release with 4.3bsd.
  2468.  * 
  2469.  */
  2470.  
  2471. #ifdef ARTSEARCH
  2472. EXT ART_NUM srchahead INIT(0);     /* are we in subject scan mode? */
  2473.                 /* (if so, contains art # found or -1) */
  2474. #endif
  2475.  
  2476. #ifdef PENDING
  2477. #   ifdef CACHESUBJ
  2478.     EXT ART_NUM subj_to_get;
  2479. #   endif
  2480. #endif
  2481.  
  2482. void    cheat_init();
  2483. void    look_ahead();
  2484. void    collect_subjects();
  2485. !STUFFY!FUNK!
  2486. echo Extracting last.h
  2487. cat >last.h <<'!STUFFY!FUNK!'
  2488. /* $Header: last.h,v 4.3 85/05/01 11:42:22 lwall Exp $
  2489.  *
  2490.  * $Log:    last.h,v $
  2491.  * Revision 4.3  85/05/01  11:42:22  lwall
  2492.  * Baseline for release with 4.3bsd.
  2493.  * 
  2494.  */
  2495.  
  2496. EXT char *lastngname INIT(Nullch);    /* last newsgroup read, from .rnlast file */
  2497. EXT long lasttime INIT(0);    /* time last rn was started up */
  2498. EXT long lastactsiz INIT(0);    /* size of active file when rn last started up */
  2499.  
  2500. void    last_init();
  2501. void    writelast();
  2502. !STUFFY!FUNK!
  2503. echo Extracting rcln.h
  2504. cat >rcln.h <<'!STUFFY!FUNK!'
  2505. /* $Header: rcln.h,v 4.3 85/05/01 11:45:52 lwall Exp $
  2506.  *
  2507.  * $Log:    rcln.h,v $
  2508.  * Revision 4.3  85/05/01  11:45:52  lwall
  2509.  * Baseline for release with 4.3bsd.
  2510.  * 
  2511.  */
  2512.  
  2513. #ifdef DEBUGGING
  2514. EXT ART_NUM ngmax[MAXRCLINE];
  2515. #endif
  2516.  
  2517. void    rcln_init();
  2518. #ifdef CATCHUP
  2519.     void    catch_up();
  2520. #endif
  2521. int    addartnum();
  2522. #ifdef MCHASE
  2523.     void    subartnum();
  2524. #endif
  2525. void    prange();
  2526. void    set_toread();
  2527. void    checkexpired();
  2528. !STUFFY!FUNK!
  2529. echo Extracting art.h
  2530. cat >art.h <<'!STUFFY!FUNK!'
  2531. /* $Header: art.h,v 4.3 85/05/01 11:35:29 lwall Exp $
  2532.  *
  2533.  * $Log:    art.h,v $
  2534.  * Revision 4.3  85/05/01  11:35:29  lwall
  2535.  * Baseline for release with 4.3bsd.
  2536.  * 
  2537.  */
  2538.  
  2539. /* do_article() return values */
  2540.  
  2541. #define DA_NORM 0
  2542. #define DA_RAISE 1
  2543. #define DA_CLEAN 2
  2544. #define DA_TOEND 3
  2545.  
  2546. void    art_init();
  2547. int    do_article();
  2548. int    page_switch();
  2549. bool    innermore();
  2550. !STUFFY!FUNK!
  2551. echo Extracting ngstuff.h
  2552. cat >ngstuff.h <<'!STUFFY!FUNK!'
  2553. /* $Header: ngstuff.h,v 4.3 85/05/01 11:45:12 lwall Exp $
  2554.  *
  2555.  * $Log:    ngstuff.h,v $
  2556.  * Revision 4.3  85/05/01  11:45:12  lwall
  2557.  * Baseline for release with 4.3bsd.
  2558.  * 
  2559.  */
  2560.  
  2561. #define NN_NORM 0
  2562. #define NN_INP 1
  2563. #define NN_REREAD 2
  2564. #define NN_ASK 3
  2565.  
  2566. void    ngstuff_init();
  2567. int    escapade();
  2568. int    switcheroo();
  2569. int    numnum();
  2570. int    perform();
  2571. !STUFFY!FUNK!
  2572. echo ""
  2573. echo "End of kit 8 (of 9)"
  2574. cat /dev/null >kit8isdone
  2575. config=true
  2576. for iskit in 1 2 3 4 5 6 7 8 9; do
  2577.     if test -f kit${iskit}isdone; then
  2578.     echo "You have run kit ${iskit}."
  2579.     else
  2580.     echo "You still need to run kit ${iskit}."
  2581.     config=false
  2582.     fi
  2583. done
  2584. case $config in
  2585.     true)
  2586.     echo "You have run all your kits.  Please read README and then type Configure."
  2587.     chmod 755 Configure
  2588.     ;;
  2589. esac
  2590. : I do not append .signature, but someone might mail this.
  2591. exit
  2592.  
  2593.