home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume7 / 2.11news / part18 < prev    next >
Text File  |  1986-11-30  |  62KB  |  2,439 lines

  1. Subject:  v07i057:  2.11 News Source, Part08/09
  2. Newsgroups: mod.sources
  3. Approved: mirror!rs
  4.  
  5. Submitted by: seismo!rick (Rick Adams)
  6. Mod.sources: Volume 7, Issue 57
  7. Archive-name: 2.11news/Part08
  8.  
  9. # To extract, sh this file
  10. #    news 2.11 source part 8 of 9
  11. if test ! -d src
  12. then
  13.     mkdir src
  14. fi
  15. echo x - src/Makefile.dst 1>&2
  16. sed 's/.//' >src/Makefile.dst <<'*-*-END-of-src/Makefile.dst-*-*'
  17. -# '@(#)Makefile.dst    1.17    10/29/86'
  18. -# Generic Makefile.
  19. -# This is converted to USG/v7/etc by localize.sh
  20. -# which should at least be a copy of localize.v7 or localize.usg
  21. -
  22. -# definitions
  23. -
  24. -#V7 OSTYPE = v7
  25. -#USG OSTYPE = usg
  26. -
  27. -# HOME is the user name whose home dir has all the news stuff in it.
  28. -HOME=    exptools
  29. -# Use the -DHOME line if you want dynamic lookup in /etc/passwd
  30. -#HOMENAME=    -DHOME=\"$(HOME)\"
  31. -HOMENAME=
  32. -
  33. -NEWSUSR = news
  34. -NEWSGRP = news
  35. -SPOOLDIR = /usr/spool/news
  36. -BATCHDIR = /usr/spool/batch
  37. -LIBDIR = /usr/lib/news
  38. -BINDIR = /usr/bin
  39. -DESTDIR =
  40. -UUXFLAGS = -r -z
  41. -
  42. -LNRNEWS = ln
  43. -#VMS LNRNEWS = cp    # No links in Eunice
  44. -DEBUG =
  45. -SCCSID = -DSCCSID
  46. -DEFS =    -DRNEWS=\"$(BINDIR)/rnews\" -DSPOOLDIR=\"$(SPOOLDIR)\" \
  47. -    -DBATCHDIR=\"$(BATCHDIR)\" -DLIBDIR=\"$(LIBDIR)\" \
  48. -    -DBINDIR=\"$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \
  49. -    -DNEWSGRP=\"$(NEWSGRP)\"
  50. -
  51. -# Order is important here
  52. -INSCOMPRESS=
  53. -#BSD4_3 INSCOMPRESS= rm -f $(DESTDIR)$(LIBDIR)/compress; ln -s /usr/ucb/compress $(DESTDIR)$(LIBDIR)/compress
  54. -COMPRESS= compress
  55. -#BSD4_3 COMPRESS=
  56. -
  57. -#USG VFORK=-Dvfork=fork
  58. -#V7 VFORK=-Dvfork=fork
  59. -
  60. -#BSD4_1 VFORK=
  61. -#BSD4_2 VFORK=
  62. -#BSD4_3 VFORK=
  63. -
  64. -#USG IBMFLAGS =
  65. -#USG CFLAGS = ${DEBUG} -O $(IBMFLAGS) -DUSG -Dindex=strchr -Drindex=strrchr ${DEFS} ${SCCSID} ${VFORK}
  66. -#USG LFLAGS = ${DEBUG} -s -i $(IBMFLAGS)
  67. -#USG LIBS =
  68. -#USG LINTFLAGS = ${DEFS}
  69. -#V7 CFLAGS = ${DEBUG} -O -DDBM ${DEFS} ${SCCSID} ${VFORK}
  70. -#V7 LFLAGS = ${DEBUG}
  71. -#V7 LIBS = -ldbm
  72. -#V7 LINTFLAGS = -chba -DDBM ${DEFS}
  73. -#BSD4_1 LIBS = -ldbm -ljobs
  74. -
  75. -TERMLIB = -ltermlib
  76. -
  77. -#VMS TERMLIB = -ltrmlib
  78. -#VMS LIBS = -ldbm
  79. -#VMS CFLAGS = ${DEBUG} -O -DDBM ${DEFS} -DVMS ${SCCSID} ${VFORK}
  80. -#VMS MISC = uname.o
  81. -#VMS LINTFLAGS = -chba -DDBM -DVMS ${DEFS}
  82. -#VMS VFORK=
  83. -
  84. -#V7 MISC = uname.o
  85. -#USG MISC = ftime.o
  86. -OBJECTS = funcs.o funcs2.o getdate.o header.o ndir.o $(MISC)
  87. -IOBJECTS = inews.o ifuncs.o iextern.o control.o fullname.o \
  88. -    ipathinit.o $(OBJECTS)
  89. -
  90. -POBJECTS = postnews.o rextern.o rpathinit.o funcs.o $(MISC)
  91. -ROBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o readr.o \
  92. -    process.o rpathinit.o digest.o $(OBJECTS)
  93. -VOBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o process.o rpathinit.o \
  94. -    $(OBJECTS) visual.o virtterm.o
  95. -EXPOBJS = expire.o header.o funcs.o getdate.o iextern.o epathinit.o \
  96. -    funcs2.o ndir.o $(MISC)
  97. -
  98. -SRCS = funcs.c funcs2.c header.c
  99. -ISRCS = inews.c ifuncs.c iextern.c control.c fullname.c  $(SRCS)
  100. -PSRCS = postnews.c rextern.c funcs.c
  101. -RSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c readr.c process.c  \
  102. -    digest.c $(SRCS)
  103. -VSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c process.c $(SRCS) \
  104. -    visual.c virtterm.c
  105. -ESRCS = expire.c header.c funcs.c iextern.c \
  106. -    funcs2.c
  107. -OSRCS = uurec.c recnews.c sendnews.c batch.c unbatch.c caesar.c \
  108. -    recmail.c compress.c
  109. -
  110. -UTILS = inews uurec recnews sendnews expire batch unbatch caesar recmail \
  111. -    encode decode $(COMPRESS)
  112. -SCRIPTS = sendbatch rmgroup checkgroups
  113. -OTHERS = $(UTILS) $(SCRIPTS)
  114. -COMMANDS = readnews checknews postnews vnews
  115. -
  116. -# dependencies
  117. -all: $(COMMANDS) $(OTHERS)
  118. -
  119. -install: all help vnews.help
  120. -    -mkdir $(DESTDIR)$(BINDIR)
  121. -    -mkdir $(DESTDIR)$(LIBDIR)
  122. -    cp $(COMMANDS) $(DESTDIR)$(BINDIR)
  123. -    -cd $(DESTDIR)$(BINDIR); \
  124. -        strip $(COMMANDS); \
  125. -        chown $(NEWSUSR) $(COMMANDS); \
  126. -        chgrp $(NEWSGRP) $(COMMANDS); \
  127. -        chmod 755 $(COMMANDS)
  128. -    cp help vnews.help $(OTHERS) $(DESTDIR)$(LIBDIR)
  129. -    cd $(DESTDIR)$(LIBDIR); \
  130. -        strip $(UTILS); \
  131. -        chown $(NEWSUSR) $(OTHERS); \
  132. -        chgrp $(NEWSGRP) $(OTHERS); \
  133. -        chmod 755 $(OTHERS)
  134. -    -rm -f $(DESTDIR)$(BINDIR)/rnews $(DESTDIR)$(BINDIR)/inews
  135. -    ${LNRNEWS} $(DESTDIR)$(LIBDIR)/inews $(DESTDIR)$(BINDIR)/rnews
  136. -    chown $(NEWSUSR) $(DESTDIR)$(LIBDIR)/inews
  137. -    chgrp $(NEWSGRP) $(DESTDIR)$(LIBDIR)/inews
  138. -    chmod 6755 $(DESTDIR)$(LIBDIR)/inews $(DESTDIR)$(BINDIR)/rnews
  139. -    $(INSCOMPRESS)
  140. -#VMS     vms -v @euninstal
  141. -
  142. -defs.h:    defs.dist localize.sh Makefile.dst Makefile
  143. -    sh localize.sh
  144. -
  145. -Makefile: localize.sh defs.dist Makefile.dst
  146. -    sh localize.sh
  147. -
  148. -update: install.sh makeactive.sh
  149. -    sh install.sh $(SPOOLDIR) $(LIBDIR) $(BINDIR) $(NEWSUSR) $(NEWSGRP) $(OSTYPE)
  150. -    chmod 6755 $(LIBDIR)/inews
  151. -
  152. -clean:
  153. -    rm -f $(COMMANDS) $(OTHERS) *.o a.out
  154. -    rm -f core index errs getdate.c
  155. -
  156. -lint:  ilint vlint rlint elint plint olint
  157. -ilint: defs.h params.h iparams.h header.h $(ISRCS) pathinit.c
  158. -    lint $(LINTFLAGS) $(ISRCS) -DINEW pathinit.c
  159. -vlint: defs.h params.h rparams.h header.h $(VSRCS) pathinit.c
  160. -    lint $(LINTFLAGS) $(VSRCS) -DREAD pathinit.c
  161. -rlint: defs.h params.h rparams.h header.h $(RSRCS) pathinit.c
  162. -    lint $(LINTFLAGS) $(RSRCS) -DREAD pathinit.c
  163. -elint: defs.h params.h iparams.h header.h $(ESRCS) pathinit.c
  164. -    lint $(LINTFLAGS) $(ESRCS) -DEXP pathinit.c
  165. -plint: defs.h params.h iparams.h header.h $(PSRCS) pathinit.c
  166. -    lint $(LINTFLAGS) $(PSRCS) -DREAD pathinit.c
  167. -
  168. -olint: defs.h params.h iparams.h header.h $(OSRCS)
  169. -    for i in $(OSRCS); do lint $(LINTFLAGS) $$i; done
  170. -
  171. -inews:  $(IOBJECTS)
  172. -    $(CC) $(LFLAGS) $(IOBJECTS) -o inews $(LIBS)  #NOTVMS
  173. -#VMS     vms link/notrace inews.o,ifuncs.o,iextern.o,control.o, \
  174. -#VMS     fullname.o,ipathinit.o,funcs.o,funcs2.o,getdate.o,header.o, \
  175. -#VMS     ndir.o,uname.o,lib:libdbm/lib,lib:libc/lib/exe=inews.
  176. -
  177. -readnews:  $(ROBJECTS)
  178. -    $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(LIBS)
  179. -#VMS     mv readnews.exe readnews
  180. -
  181. -funcs.o:  funcs.c params.h defs.h header.h Makefile
  182. -    $(CC) $(CFLAGS) -c funcs.c
  183. -
  184. -funcs2.o:  funcs2.c params.h defs.h header.h Makefile
  185. -    $(CC) $(CFLAGS) -c funcs2.c
  186. -
  187. -getdate.o:  getdate.y
  188. -    @echo "expect 8 shift/reduce conflicts"
  189. -    yacc getdate.y
  190. -    mv y.tab.c getdate.c
  191. -    $(CC) $(CFLAGS) -c getdate.c
  192. -    -rm -f getdate.c
  193. -
  194. -inews.o:  inews.c iparams.h defs.h params.h header.h Makefile
  195. -    $(CC) $(CFLAGS) -c inews.c
  196. -
  197. -ifuncs.o:  ifuncs.c iparams.h defs.h params.h header.h Makefile
  198. -    $(CC) $(CFLAGS) $(HOMENAME) -c ifuncs.c
  199. -
  200. -iextern.o:  iextern.c iparams.h defs.h params.h Makefile header.h
  201. -    $(CC) $(CFLAGS) -c iextern.c
  202. -
  203. -postnews: $(POBJECTS)
  204. -    $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews
  205. -#VMS     mv postnews.exe postnews
  206. -
  207. -postnews.o: postnews.c defs.h params.h header.h Makefile
  208. -    $(CC) $(CFLAGS) -c postnews.c
  209. -
  210. -readnews.o:  readnews.c rparams.h defs.h params.h header.h Makefile
  211. -    $(CC) $(CFLAGS) $(HOMENAME) -c readnews.c
  212. -
  213. -rfuncs.o:  rfuncs.c rparams.h defs.h params.h header.h Makefile
  214. -    $(CC) $(CFLAGS) -c rfuncs.c
  215. -
  216. -rfuncs2.o:  rfuncs2.c rparams.h defs.h params.h header.h Makefile
  217. -    $(CC) $(CFLAGS) -c rfuncs2.c
  218. -
  219. -rextern.o:  rextern.c rparams.h defs.h params.h Makefile header.h
  220. -    $(CC) $(CFLAGS) -c rextern.c
  221. -
  222. -readr.o:  readr.c rparams.h defs.h params.h Makefile ndir.h header.h
  223. -    $(CC) $(CFLAGS) -c readr.c
  224. -
  225. -checknews.o:  checknews.c defs.h header.h Makefile params.h
  226. -    $(CC) $(CFLAGS) -c checknews.c
  227. -
  228. -vnews:    $(VOBJECTS)
  229. -    $(CC) $(LFLAGS) $(VOBJECTS) $(TERMLIB) $(LIBS) -o $@
  230. -#VMS     mv vnews.exe vnews
  231. -
  232. -visual.o:  visual.c rparams.h defs.h params.h ndir.h header.h Makefile
  233. -    $(CC) $(CFLAGS) -c visual.c
  234. -
  235. -control.o:  control.c defs.h iparams.h params.h header.h Makefile
  236. -    $(CC) $(CFLAGS) -c control.c
  237. -
  238. -logdir.o: logdir.c Makefile
  239. -    $(CC) $(CFLAGS) -c logdir.c
  240. -
  241. -uname.o:  uname.c defs.h params.h header.h Makefile
  242. -    $(CC) $(CFLAGS) -c uname.c
  243. -
  244. -ndir.o: ndir.c ndir.h
  245. -    $(CC) $(CFLAGS) -c ndir.c
  246. -
  247. -uurec:  uurec.c defs.h Makefile
  248. -    $(CC) $(CFLAGS) $(LFLAGS) uurec.c -o uurec
  249. -#VMS     mv uurec.exe uurec
  250. -
  251. -recnews:  recnews.c defs.h header.h Makefile
  252. -    $(CC) $(CFLAGS) $(LFLAGS) recnews.c -o recnews
  253. -#VMS     mv recnews.exe recnews
  254. -
  255. -sendnews:  sendnews.o uname.o
  256. -    $(CC) $(LFLAGS) sendnews.o uname.o -o sendnews
  257. -#VMS     mv sendnews.exe sendnews
  258. -
  259. -batch:  batch.c Makefile
  260. -    $(CC) $(CFLAGS) $(LFLAGS) batch.c -o batch
  261. -#VMS     mv batch.exe batch
  262. -
  263. -unbatch:  unbatch.c Makefile
  264. -    $(CC) $(CFLAGS) $(LFLAGS) unbatch.c -o unbatch
  265. -#VMS     mv unbatch.exe unbatch
  266. -
  267. -encode:    encode.c
  268. -    $(CC) $(CFLAGS) $(LFLAGS) encode.c -o encode
  269. -#VMS     mv encode.exe encode
  270. -
  271. -decode:    decode.c
  272. -    $(CC) $(CFLAGS) $(LFLAGS) decode.c -o decode
  273. -#VMS     mv decode.exe decode
  274. -
  275. -caesar:  caesar.c Makefile
  276. -    $(CC) $(CFLAGS) $(LFLAGS) caesar.c -o caesar -lm
  277. -#VMS     mv caesar.exe caesar
  278. -
  279. -compress: compress.c
  280. -    $(CC) $(CFLAGS) $(LFLAGS) -o compress compress.c
  281. -#VMS     mv compress.exe compress
  282. -
  283. -recmail:  recmail.c defs.h params.h header.h
  284. -    $(CC) $(CFLAGS) $(LFLAGS) recmail.c -o recmail
  285. -#VMS     mv recmail.exe recmail
  286. -
  287. -process.o:  process.c rparams.h defs.h params.h header.h Makefile
  288. -    $(CC) $(CFLAGS) -c process.c
  289. -
  290. -checknews:  checknews.o process.o cpathinit.o
  291. -    $(CC) $(LFLAGS) checknews.o process.o cpathinit.o -o checknews
  292. -#VMS     mv checknews.exe checknews
  293. -
  294. -sendbatch: sendbatch.sh Makefile
  295. -    sed -e "s%LIBDIR%$(LIBDIR)%g" \
  296. -     -e "s%UUXFLAGS%$(UUXFLAGS)%g" \
  297. -     -e "s%BATCHDIR%$(BATCHDIR)%g" sendbatch.sh > sendbatch
  298. -#VMS     /etc/unixtovms sendbatch
  299. -
  300. -rmgroup: rmgroup.sh Makefile
  301. -    sed -e "s%LIBDIR%$(LIBDIR)%g" \
  302. -     -e "s%SPOOLDIR%$(SPOOLDIR)%g" rmgroup.sh > rmgroup
  303. -#VMS     /etc/unixtovms rmgroup
  304. -
  305. -checkgroups: checkgroups.sh Makefile
  306. -    sed -e "s%LIBDIR%$(LIBDIR)%g" checkgroups.sh > checkgroups
  307. -#VMS     /etc/unixtovms checkgroups
  308. -
  309. -sendnews.o: sendnews.c defs.h
  310. -    $(CC) $(CFLAGS) -c sendnews.c
  311. -
  312. -fullname.o: defs.h params.h header.h Makefile
  313. -    $(CC) $(CFLAGS) -c fullname.c
  314. -
  315. -expire: $(EXPOBJS)
  316. -    $(CC) $(LFLAGS) -o expire $(EXPOBJS) $(LIBS)
  317. -#VMS     mv expire.exe expire
  318. -
  319. -header.o:  header.c header.h defs.h params.h Makefile
  320. -    $(CC) $(CFLAGS) -c header.c
  321. -
  322. -expire.o:  expire.c defs.h Makefile params.h ndir.h header.h Makefile
  323. -    $(CC) $(CFLAGS) -c expire.c
  324. -
  325. -digest.o:  digest.c Makefile
  326. -    $(CC) $(CFLAGS) -c digest.c
  327. -
  328. -# Some silliness here to get pathinit for both readnews & inews
  329. -rpathinit.o:  pathinit.c rparams.h header.h params.h defs.h Makefile
  330. -    $(CC) $(CFLAGS) $(HOMENAME) -DREAD -c pathinit.c
  331. -    mv pathinit.o rpathinit.o
  332. -
  333. -ipathinit.o:  pathinit.c iparams.h header.h params.h defs.h Makefile
  334. -    $(CC) $(CFLAGS) $(HOMENAME) -DINEW -c pathinit.c
  335. -    mv pathinit.o ipathinit.o
  336. -
  337. -cpathinit.o:  pathinit.c iparams.h header.h params.h defs.h Makefile
  338. -    $(CC) $(CFLAGS) $(HOMENAME) -DCHKN -c pathinit.c
  339. -    mv pathinit.o cpathinit.o
  340. -
  341. -epathinit.o:  pathinit.c iparams.h header.h params.h defs.h Makefile
  342. -    $(CC) $(CFLAGS) $(HOMENAME) -DEXP -c pathinit.c
  343. -    mv pathinit.o epathinit.o
  344. -
  345. -tags:    /tmp
  346. -    ctags -w *.h *.c
  347. -
  348. -$(LIBDIR):
  349. -    mkdir $(LIBDIR)
  350. -    chmod 755 $(LIBDIR)
  351. -    chown $(NEWSUSR) $(LIBDIR)
  352. -    chgrp $(NEWSGRP) $(LIBDIR)
  353. -
  354. -$(BINDIR):
  355. -    mkdir $(BINDIR)
  356. -    chmod 755 $(BINDIR)
  357. -    chown $(NEWSUSR) $(BINDIR)
  358. -    chgrp $(NEWSGRP) $(BINDIR)
  359. *-*-END-of-src/Makefile.dst-*-*
  360. echo x - src/digest.c 1>&2
  361. sed 's/.//' >src/digest.c <<'*-*-END-of-src/digest.c-*-*'
  362. -/*
  363. - * digest - process ARPANET digests
  364. - *
  365. - * digest(ifile, ofile, header)
  366. - * FILE *ifile, *ofile;
  367. - * struct header *header;
  368. - *
  369. - * returns:    TRUE    EOF reached, exit from readnews.
  370. - *        FALSE    normal exit, continue reading news.
  371. - */
  372. -
  373. -#ifdef SCCSID
  374. -static char    *SccsId = "@(#)digest.c    1.7    9/19/86";
  375. -#endif /* SCCSID */
  376. -
  377. -#include "rparams.h"
  378. -
  379. -struct art {
  380. -    long    a_hdr;
  381. -    long    a_bod;
  382. -    int    a_blen;
  383. -    int    a_hlen;
  384. -};
  385. -
  386. -#define    loop        for(;;)
  387. -#define    getnum(p, n)    for (n=0; *p>='0' && *p<='9'; p++) n = n*10 + *p-'0'
  388. -#define    errchk(p)    if (*p) goto badopt
  389. -
  390. -#define    MAXART        128
  391. -
  392. -struct art    *arts;
  393. -int        lastart;
  394. -
  395. -digest(ifp, ofp, h)
  396. -FILE *ifp, *ofp;
  397. -struct hbuf *h;
  398. -{
  399. -    register int    n, curart;
  400. -    struct art    artbuf[MAXART];
  401. -    int        printh, eod, nomore;
  402. -    char        cbuf[BUFLEN], *cmd;
  403. -
  404. -    arts = artbuf;
  405. -    printh = TRUE;
  406. -    nomore = eod = FALSE;
  407. -    curart = 1;
  408. -
  409. -    if (dscan(ifp))
  410. -        return FALSE;
  411. -
  412. -    dprint(0, ifp, ofp);
  413. -
  414. -    loop {
  415. -        if (nomore) break;
  416. -        if (curart < 1) {
  417. -            curart = 1;
  418. -            eod = nomore = FALSE;
  419. -        }
  420. -        if (curart > lastart) curart = lastart;
  421. -        if (eod) nomore = TRUE;
  422. -        if (printh && !nomore)
  423. -            (void) dhprint(curart, ifp, ofp);
  424. -    getcmd:
  425. -        loop {
  426. -            SigTrap = FALSE;
  427. -            fprintf(ofp, "Digest article %d of %d ", curart, lastart);
  428. -            if (curart==lastart && nomore)
  429. -                fprintf(ofp, "Last digest article ");
  430. -            fprintf(ofp, "(%d lines) More? [%s] ",
  431. -                arts[curart].a_blen, nomore?"snq":"ynq");
  432. -            (void) fflush(ofp);
  433. -            cmd = cbuf;
  434. -            if (fgets(cmd, BUFLEN, stdin))
  435. -                break;
  436. -            if (!SigTrap)
  437. -                return(TRUE);
  438. -            putc('\n', ofp);
  439. -        }
  440. -        (void) nstrip(cmd);
  441. -        while (*cmd==' ' || *cmd=='\t')
  442. -            cmd++;
  443. -        printh = TRUE;
  444. -
  445. -        switch (*cmd++) {
  446. -        case '#':
  447. -            fprintf(ofp, "%d articles in digest\n", lastart);
  448. -            (void) fflush(ofp);
  449. -            printh = FALSE;
  450. -            break;
  451. -
  452. -        case '$':
  453. -            curart = lastart;
  454. -            break;
  455. -
  456. -        case '!':
  457. -            fwait(fsubr(ushell, cmd, (char *)NULL));
  458. -            fprintf(ofp, "!\n");
  459. -            printh = FALSE;
  460. -            break;
  461. -
  462. -        case '\0':
  463. -            if (nomore) {
  464. -                putc('\n', ofp);
  465. -                return(FALSE);
  466. -            }
  467. -            cmd--;
  468. -        case 'y':
  469. -        case 'p':
  470. -            errchk(cmd);
  471. -            dprint(curart++, ifp, ofp);
  472. -            if (curart > lastart)
  473. -                eod = TRUE;
  474. -            break;
  475. -
  476. -        case 'n':
  477. -            errchk(cmd);
  478. -            if (++curart > lastart) {
  479. -                putc('\n', ofp);
  480. -                return(FALSE);
  481. -            }
  482. -            break;
  483. -
  484. -        case '+':
  485. -            getnum(cmd, n);
  486. -            errchk(cmd);
  487. -            if (nomore) {
  488. -                putc('\n', ofp);
  489. -                return(FALSE);
  490. -            }
  491. -            if (n)    curart += n;
  492. -            else {
  493. -                curart += 1;
  494. -                if (curart > lastart)
  495. -                    eod = TRUE;
  496. -            }
  497. -            break;
  498. -
  499. -        case '-':
  500. -            getnum(cmd, n);
  501. -            errchk(cmd);
  502. -            eod = nomore = FALSE;
  503. -            curart -= (n) ? n : 1;
  504. -            break;
  505. -
  506. -        case '0': case '1': case '2': case '3': case '4':
  507. -        case '5': case '6': case '7': case '8': case '9':
  508. -            cmd--;
  509. -            getnum(cmd, n);
  510. -            errchk(cmd);
  511. -            curart = n;
  512. -            eod = nomore = FALSE;
  513. -            break;
  514. -
  515. -        case 'q':
  516. -        case 'x':
  517. -            putc('\n', ofp);
  518. -            return(FALSE);
  519. -
  520. -        case '?':
  521. -            fprintf(ofp, "\nDigester options:\n\n");
  522. -            fprintf(ofp, "y\tyes, print article.\n");
  523. -            fprintf(ofp, "n\tno, go to next article.\n");
  524. -            fprintf(ofp, "q\texit from digester.\n");
  525. -            fprintf(ofp, "h\tprint article header.\n");
  526. -            fprintf(ofp, "s file\tsave article in file.\n");
  527. -            fprintf(ofp, "t\ttable of contents.\n");
  528. -            fprintf(ofp, "+[n]\tforward n articles (1).\n");
  529. -            fprintf(ofp, "-[n]\tback n articles (1).\n");
  530. -            fprintf(ofp, "\nh and s may be followed by '-'\n");
  531. -            (void) fflush(ofp);
  532. -            break;
  533. -
  534. -        case 'h':
  535. -            n = curart;
  536. -            if (*cmd=='-') {
  537. -                cmd++;
  538. -                if (n > 1) n--;
  539. -            }
  540. -            errchk(cmd);
  541. -            (void) dhprint(n, ifp, ofp);
  542. -            nomore = printh = FALSE;
  543. -            if (n!=curart)
  544. -                putc('\n', ofp);
  545. -            break;
  546. -
  547. -        case 's':
  548. -        case 'w':
  549. -            n = curart;
  550. -            if (*cmd=='-') {
  551. -                cmd++;
  552. -                if (n > 1) n--;
  553. -            }
  554. -            while (*cmd==' ' || *cmd=='\t')
  555. -                cmd++;
  556. -            dsaveart(n, ifp, ofp, cmd);
  557. -            nomore = printh = FALSE;
  558. -            if (n!=curart)
  559. -                putc('\n', ofp);
  560. -            break;
  561. -
  562. -        case 'H':
  563. -            errchk(cmd);
  564. -            hprint(h, ofp, 1);
  565. -            eod = nomore = FALSE;
  566. -            break;
  567. -
  568. -        case 'T':
  569. -        case 't':
  570. -            errchk(cmd);
  571. -            if (cmd[-1]=='T')
  572. -                hprint(h, ofp, 0);
  573. -            dprint(0, ifp, ofp);
  574. -            eod = nomore = FALSE;
  575. -            break;
  576. -
  577. -        default:
  578. -    badopt:
  579. -            if (!nomore)
  580. -                fprintf(ofp, "y (yes), n (no), ");
  581. -            fprintf(ofp, "q (quit), s file (save), h (header), t (table of contents)\n");
  582. -            fprintf(ofp, "? for help\n");
  583. -            goto getcmd;
  584. -        }
  585. -    }
  586. -    putc('\n', ofp);
  587. -    return(FALSE);
  588. -}
  589. -
  590. -dscan(ifp)
  591. -register FILE *ifp;
  592. -{
  593. -    char        scanbuf[BUFLEN];
  594. -    register int    n, len;
  595. -    register char    *s;
  596. -    register long    pos;
  597. -    short        wasblank, ishead;
  598. -
  599. -    n = len = 0;
  600. -    wasblank = FALSE;
  601. -    s = scanbuf;
  602. -    arts[0].a_bod = arts[1].a_hdr = ftell(ifp);
  603. -    arts[0].a_hdr = 0L;
  604. -    arts[1].a_bod = -1L;
  605. -
  606. -    loop {
  607. -        if (SigTrap)
  608. -            return(TRUE);
  609. -        pos = ftell(ifp);
  610. -        if (fgets(s, BUFLEN, ifp)==NULL)
  611. -            *s = '\0';
  612. -        if (wasblank && isheader(s)) {
  613. -            long lastpos;
  614. -            short is_blank;
  615. -            short nhlines;
  616. -            arts[n++].a_blen = len;
  617. -            len = 0;
  618. -            nhlines = 0;
  619. -            arts[n].a_hdr = pos;
  620. -            is_blank = FALSE;
  621. -            ishead = TRUE;
  622. -            do {
  623. -                lastpos = pos;
  624. -                wasblank = is_blank;
  625. -                nhlines++;
  626. -                pos = ftell(ifp);
  627. -                if (fgets(s, BUFLEN, ifp)==NULL)
  628. -                    *s = '\0';
  629. -                else
  630. -                    len++;
  631. -                is_blank = (*s=='\n') ? TRUE : FALSE;
  632. -                if (is_blank && nhlines==1)
  633. -                    /* one liner--not a header */
  634. -                    break;
  635. -                if (!ishead || (s[0] != ' ' && s[0] != '\t'))
  636. -                    ishead = isheader(s);
  637. -            } while ((is_blank && !wasblank) || ishead);
  638. -            if ((!is_blank && !wasblank) || nhlines < 2) {
  639. -                /* oops! not a header... back off */
  640. -                arts[n].a_hdr = arts[n-1].a_bod;
  641. -                len += arts[--n].a_blen;
  642. -            } else {
  643. -                if (wasblank)
  644. -                    pos = lastpos;
  645. -                arts[n].a_hlen = len;
  646. -                arts[n].a_bod = arts[n+1].a_hdr = pos;
  647. -                arts[n+1].a_bod = -1L;
  648. -                arts[n+1].a_hlen = 3;    /* average header len */
  649. -                len = 0;
  650. -            }
  651. -        }
  652. -        if (*s=='\0')
  653. -            break;
  654. -        wasblank = (*s=='\n') ? TRUE : FALSE;
  655. -        len++;
  656. -    }
  657. -    arts[n].a_blen = len;
  658. -    arts[n+1].a_hdr = pos;
  659. -    lastart = n;
  660. -    return FALSE;
  661. -}
  662. -
  663. -dhprint(art, ifp, ofp)
  664. -register int art;
  665. -register FILE *ifp, *ofp;
  666. -{
  667. -    register char    c;
  668. -    register long    pos = arts[art].a_hdr;
  669. -    register long    epos = arts[art].a_bod;
  670. -    register int    nlines = 1;
  671. -
  672. -    putc('\n', ofp);
  673. -    fseek(ifp, pos, 0);
  674. -    while (pos++ < epos && !SigTrap) {
  675. -        if ((c = getc(ifp))=='\n')
  676. -            nlines++;
  677. -        putc(c, ofp);
  678. -    }
  679. -    (void) fflush(ofp);
  680. -    SigTrap = FALSE;
  681. -    return nlines;
  682. -}
  683. -
  684. -dprint(art, ifp, ofp)
  685. -int art;
  686. -FILE *ifp, *ofp;
  687. -{
  688. -#ifdef    PAGE
  689. -    register int    cnt;
  690. -    FILE        *pfp, *popen();
  691. -
  692. -    if (art && arts[art].a_blen > 23-arts[art+1].a_hlen && *PAGER) {
  693. -        if (!index(PAGER, FMETA)) {
  694. -            if ((pfp = popen(PAGER, "w"))==NULL)
  695. -                (void) dprinta(art, ifp, ofp);
  696. -            else {
  697. -                cnt = dprinta(art, ifp, pfp) % 23;
  698. -                if (cnt > 23-arts[art+1].a_hlen)
  699. -                    while (cnt++ < 24)
  700. -                        putc('\n', pfp);
  701. -                (void) pclose(pfp);
  702. -            }
  703. -        } else
  704. -            pout(ofp);
  705. -    } else
  706. -#endif /* PAGE */
  707. -        (void) dprinta(art, ifp, ofp);
  708. -}
  709. -
  710. -dprinta(art, ifp, ofp)
  711. -int art;
  712. -register FILE *ifp, *ofp;
  713. -{
  714. -    register char    c;
  715. -    register long    pos = arts[art].a_bod;
  716. -    register long    epos = arts[art+1].a_hdr;
  717. -    register int    nlines = 0;
  718. -
  719. -    (void) fseek(ifp, pos, 0);
  720. -    while (pos++ < epos && !SigTrap) {
  721. -        if ((c = getc(ifp))=='\n')
  722. -            nlines++;
  723. -        putc(c, ofp);
  724. -    }
  725. -    (void) fflush(ofp);
  726. -    SigTrap = FALSE;
  727. -    return nlines;
  728. -}
  729. -
  730. -dsaveart(art, ifp, ofp, name)
  731. -int art;
  732. -register FILE *ifp, *ofp;
  733. -register char *name;
  734. -{
  735. -    register FILE    *nfp;
  736. -    char        fname[BUFLEN];
  737. -    char        *strcat(), *strcpy(), *getenv();
  738. -    register char    *nb;
  739. -
  740. -    while (*name==' ' || *name=='\t')
  741. -        name++;
  742. -
  743. -    if (*name=='|') {
  744. -        fprintf(ofp, "don't know how to pipe yet.\n");
  745. -        (void) fflush(ofp);
  746. -        return;
  747. -    } else if (*name=='/')
  748. -        (void) strcpy(fname, name);
  749. -    else {
  750. -        if (nb = getenv("NEWSBOX"))
  751. -            (void) strcpy(fname, nb);
  752. -        else
  753. -            (void) strcpy(fname, userhome);
  754. -        (void) strcat(fname, "/");
  755. -        (void) strcat(fname, name);
  756. -    }
  757. -
  758. -    fprintf(ofp, "Save digest article %d in \"%s\"", art, fname);
  759. -    (void) fflush(ofp);
  760. -    if ((nfp = fopen(fname, "a"))!=NULL) {
  761. -        int ln;
  762. -        ln = dhprint(art, ifp, nfp);
  763. -        ln += dprinta(art, ifp, nfp);
  764. -        fprintf(ofp, " [Appended] %d lines\n", ln);
  765. -        (void) fclose(nfp);
  766. -    } else
  767. -        fprintf(ofp, " cannot append to.\n");
  768. -}
  769. -
  770. -isheader(s)
  771. -register char *s;
  772. -{
  773. -    if (isupper(*s) || islower(*s)) {
  774. -        while (*s && *s!=':' && !isspace(*s))
  775. -            s++;
  776. -        if (*s==':' && *++s==' ')
  777. -            return TRUE;
  778. -    }
  779. -    return FALSE;
  780. -}
  781. *-*-END-of-src/digest.c-*-*
  782. echo x - src/readnews.c 1>&2
  783. sed 's/.//' >src/readnews.c <<'*-*-END-of-src/readnews.c-*-*'
  784. -/*
  785. - * readnews - read news articles.
  786. - */
  787. -
  788. -#ifdef SCCSID
  789. -static char    *SccsId = "@(#)readnews.c    2.31    9/16/86";
  790. -#endif /* SCCSID */
  791. -
  792. -#include "rparams.h"
  793. -
  794. -/*
  795. - * readnews - article reading program
  796. - */
  797. -
  798. -#ifndef SYSBUF
  799. -char    SYSBUF[BUFSIZ];    /* to buffer std out */
  800. -#endif
  801. -
  802. -#define OPTION    0    /* pick up an option string */
  803. -#define STRING    1    /* pick up a string of arguments */
  804. -
  805. -struct timeb Now;
  806. -
  807. -int onsig(), cleanup();
  808. -
  809. -/*
  810. - *    Authors:
  811. - *        Matt Glickman    ucbvax!glickman
  812. - *        Mark Horton    cbosg!mark
  813. - *        Stephen Daniels    duke!swd
  814. - *        Tom Truscott    duke!trt
  815. - */
  816. -
  817. -main(argc, argv)
  818. -int    argc;
  819. -register char    **argv;
  820. -{
  821. -    register char    *ptr;    /* pointer to rest of buffer        */
  822. -    char    *user, *home;
  823. -    int    optflag = FALSE, space = FALSE;
  824. -    struct utsname ubuf;
  825. -    char    *myrc;
  826. -
  827. -    /* set up defaults and initialize. */
  828. -    pathinit();
  829. -    mode = UNKNOWN;
  830. -    header.title[0] = header.nbuf[0] = '\0';
  831. -    coptbuf[0] = datebuf[0] = '\0';
  832. -    uname(&ubuf);
  833. -    strcpy(FULLSYSNAME, ubuf.nodename);
  834. -
  835. -    savmask = umask(N_UMASK);    /* set up mask */
  836. -    uid = getuid();
  837. -    gid = getgid();
  838. -    duid = 0;
  839. -    dgid = 0;
  840. -    (void) ftime(&Now);
  841. -
  842. -#ifndef SHELL
  843. -    if ((SHELL = getenv("SHELL")) == NULL)
  844. -        SHELL = "/bin/sh";
  845. -#endif
  846. -#ifndef IHCC
  847. -    /*
  848. -     * IHCC does not allow use of $LOGNAME to prevent forgery.
  849. -     * Note that this shouldn't matter in readnews, since inews
  850. -     * does all the actual posting of news.
  851. -     */
  852. -    if ((user = getenv("USER")) == NULL)
  853. -        user = getenv("LOGNAME");
  854. -    if ((home = getenv("HOME")) == NULL)
  855. -        home = getenv("LOGDIR");
  856. -#endif
  857. -    if (user == NULL || home == NULL)
  858. -        getuser();
  859. -    else {
  860. -        username = AllocCpy(user);
  861. -        (void) strcpy(header.path, username);
  862. -        userhome = AllocCpy(home);
  863. -    }
  864. -
  865. -    if (!(MAILER = getenv("MAILER")))
  866. -        MAILER = "mail";    /* was /bin/mail */
  867. -
  868. -#ifdef PAGE
  869. -    if (myrc = getenv("PAGER"))
  870. -        PAGER = AllocCpy(myrc);
  871. -    else {
  872. -# ifdef IHCC
  873. -        (void) sprintf(bfr, "%s/bin/%s", logdir(HOME), PAGE);
  874. -        PAGER = AllocCpy(bfr);
  875. -# else /* !IHCC */
  876. -        PAGER = PAGE;
  877. -# endif /* !IHCC */
  878. -    }
  879. -#endif /* PAGE */
  880. -
  881. -    if (ptr = getenv("NEWSOPTS"))
  882. -        (void) strcpy(rcbuf, ptr);
  883. -    else
  884. -        *rcbuf = '\0';
  885. -    if (*rcbuf) {
  886. -        (void) strcat(rcbuf, " \1");
  887. -        ptr = rcbuf;
  888. -        while (*++ptr)
  889. -            if (isspace(*ptr))
  890. -                *ptr = '\0';
  891. -        for (ptr = rcbuf; ; ptr++) {
  892. -            if (!*ptr)
  893. -                continue;
  894. -            if (*ptr == '\1')
  895. -                break;
  896. -            if (++line > LINES)
  897. -                xerror("Too many options.");
  898. -            if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL)
  899. -                xerror("Not enough memory.");
  900. -            argvrc[line] = rcline[line];
  901. -            (void) strcpy(rcline[line], ptr);
  902. -            while (*ptr)
  903. -                ptr++;
  904. -        }
  905. -    }
  906. -    myrc = getenv("NEWSRC");
  907. -    if (myrc == NULL) {
  908. -        myrc = NEWSRC;
  909. -        (void) sprintf(newsrc, "%s/%s", userhome, myrc);
  910. -    } else {
  911. -        (void) strcpy(newsrc, myrc);
  912. -    }
  913. -    if (access(newsrc, 0))
  914. -        newrc(newsrc);
  915. -    if ((rcfp = fopen(newsrc, "r")) != NULL) {
  916. -        rcreadok = FALSE;
  917. -        while (fgets(rcbuf, LBUFLEN, rcfp) != NULL) {
  918. -            if (!(space = isspace(*rcbuf)))
  919. -                optflag = FALSE;
  920. -            if (!strncmp(rcbuf, "options ", 8))
  921. -                optflag = TRUE;
  922. -            if (optflag) {
  923. -                (void) strcat(rcbuf, "\1");
  924. -                if (space)
  925. -                    ptr = rcbuf - 1;
  926. -                else
  927. -                    ptr = &rcbuf[7];
  928. -                while (*++ptr)
  929. -                    if (isspace(*ptr))
  930. -                        *ptr = '\0';
  931. -                if (space)
  932. -                    ptr = rcbuf;
  933. -                else
  934. -                    ptr = &rcbuf[8];
  935. -                for (; ; ptr++) {
  936. -                    if (!*ptr)
  937. -                        continue;
  938. -                    if (*ptr == '\1')
  939. -                        break;
  940. -                    if (++line > LINES)
  941. -                        xerror("Too many options.");
  942. -                    if ((rcline[line] = malloc((unsigned)(strlen(ptr) + 1))) == NULL)
  943. -                        xerror("Not enough memory.");
  944. -                    argvrc[line] = rcline[line];
  945. -                    (void) strcpy(rcline[line], ptr);
  946. -                    while (*ptr)
  947. -                        ptr++;
  948. -                }
  949. -            }
  950. -        }
  951. -        (void) fclose(rcfp);
  952. -        rcreadok = TRUE;
  953. -    }
  954. -    if (line != -1) {
  955. -#ifdef DEBUG
  956. -        register int i;
  957. -        for (i = 0; i <= line; i++)
  958. -            fprintf(stderr, "options:  %s\n", rcline[i]);
  959. -#endif
  960. -        process(line + 2, argvrc);
  961. -        do {
  962. -#ifdef DEBUG
  963. -            fprintf(stderr, "Freeing %d\n", line);
  964. -#endif
  965. -            free(rcline[line]);
  966. -        } while (line--);
  967. -    }
  968. -
  969. -    argv++;
  970. -    (void) strcat(header.nbuf, ADMSUB);
  971. -    process(argc, argv);
  972. -    if (!nflag)
  973. -        (void) sprintf(header.nbuf, "%s,%s", ADMSUB, DFLTSUB);
  974. -    else {
  975. -        char *p = rindex(header.nbuf, ',');
  976. -        if (p && p[1] == '\0')    /* strip of trailing NGDELIM */
  977. -            *p ='\0';
  978. -    }
  979. -    lcase(header.nbuf);
  980. -    makehimask(header.nbuf, "junk");
  981. -    makehimask(header.nbuf, "control");
  982. -    makehimask(header.nbuf, "test");
  983. -
  984. -    setbuf(stdout, SYSBUF);
  985. -    SigTrap = FALSE;    /* true if a signal has been caught */
  986. -    if (!pflag && !lflag && !eflag) {
  987. -        (void) signal(SIGQUIT, SIG_IGN);
  988. -        (void) signal(SIGHUP, cleanup);
  989. -        (void) signal(SIGINT, onsig);
  990. -        (void) signal(SIGPIPE, onsig);
  991. -    } else {
  992. -        int (* old)();
  993. -        if ((old = signal(SIGQUIT, SIG_IGN)) != SIG_IGN)
  994. -            (void) signal(SIGQUIT, cleanup);
  995. -        if ((old = signal(SIGHUP, SIG_IGN)) != SIG_IGN)
  996. -            (void) signal(SIGHUP, cleanup);
  997. -        if ((old = signal(SIGINT, SIG_IGN)) != SIG_IGN)
  998. -            (void) signal(SIGINT, cleanup);
  999. -    }
  1000. -
  1001. -    /*
  1002. -     * ALL of the command line has now been processed. (!)
  1003. -     */
  1004. -
  1005. -    if (!*header.nbuf)
  1006. -        strcpy(header.nbuf, DFLTSUB);
  1007. -    if (sflag) {
  1008. -        printf("Subscription list:  %s\n", header.nbuf);
  1009. -        xxit(0);
  1010. -    }
  1011. -    if (xflag)
  1012. -        line = -1;
  1013. -    rcfp = xfopen(newsrc, "r");
  1014. -    while (fgets(rcbuf, LBUFLEN, rcfp) != NULL) {
  1015. -        if (!nstrip(rcbuf))
  1016. -            xerror(".newsrc line too long");
  1017. -        if (++line >= LINES)
  1018. -            xerror("Too many .newsrc lines");
  1019. -        if ((rcline[line] = malloc((unsigned)(strlen(rcbuf) + 1))) == NULL)
  1020. -            xerror("Not enough memory");
  1021. -        (void) strcpy(rcline[line], rcbuf);
  1022. -    }
  1023. -    fclose(rcfp);
  1024. -
  1025. -    if (SigTrap) {
  1026. -        if (SigTrap == SIGHUP || !rcreadok)
  1027. -            xxit(0);
  1028. -        fprintf(stdout, "Abort (n)?  ");
  1029. -        (void) fflush(stdout);
  1030. -        if (gets(bfr) == NULL || *bfr == 'y' || *bfr == 'Y')
  1031. -            xxit(0);
  1032. -        SigTrap = FALSE;
  1033. -    }
  1034. -    sortactive();
  1035. -    actfp = xfopen(ACTIVE, "r");
  1036. -
  1037. -#ifdef DEBUG
  1038. -    fprintf(stderr, "header.nbuf = %s\n", header.nbuf);
  1039. -#endif /* DEBUG */
  1040. -    if (Kflag)
  1041. -        news++;
  1042. -    else {
  1043. -        switch (mode) {
  1044. -        case UNKNOWN:
  1045. -            readr();
  1046. -            break;
  1047. -#ifdef TMAIL
  1048. -        case MAIL:
  1049. -            Mail();
  1050. -            break;
  1051. -#endif /* TMAIL */
  1052. -        }
  1053. -    }
  1054. -
  1055. -    cleanup();
  1056. -    /*NOTREACHED*/
  1057. -}
  1058. -
  1059. -cleanup()
  1060. -{
  1061. -    (void) signal(SIGHUP, SIG_IGN);
  1062. -    (void) fflush(stdout);
  1063. -    if (!news || xflag || lflag || tflag)
  1064. -        xxit(0);
  1065. -    if (*groupdir && mode != MAIL)
  1066. -        updaterc();
  1067. -    writeoutrc();
  1068. -    xxit(0);
  1069. -}
  1070. -
  1071. -/*
  1072. - * Write out the .newsrc file. It's already been cleaned up by sortactive()
  1073. - * Take care that data is all written, and flushed, before we destroy the
  1074. - * old copy.
  1075. - */
  1076. -writeoutrc()
  1077. -{
  1078. -    FILE *wrcfp;
  1079. -    char aline[BUFLEN];
  1080. -    register int i;
  1081. -
  1082. -    /* NEVER write it out if xflag */
  1083. -    if (xflag || !rcreadok)
  1084. -        return;
  1085. -
  1086. -    (void) strcpy(aline, newsrc);
  1087. -    (void) strcat(aline, ".new");
  1088. -
  1089. -#ifdef VMS
  1090. -    (void) vmsdelete(aline);
  1091. -#endif
  1092. -    wrcfp = xfopen(aline, "w");
  1093. -
  1094. -    for (i = 0; i <= line; i++) {
  1095. -        if (rcline[i] != NULL)
  1096. -            if (fprintf(wrcfp, "%s\n", rcline[i]) < 0)
  1097. -                goto fouled;
  1098. -    }
  1099. -    if (fclose(wrcfp) < 0)
  1100. -        goto fouled;
  1101. -
  1102. -#ifdef VMS
  1103. -    (void) vmsdelete(newsrc);
  1104. -#endif
  1105. -    if (rename(aline, newsrc) < 0)
  1106. -        xerror("Cannot rename %s to %s", aline, newsrc);
  1107. -    return;
  1108. -
  1109. -  fouled:
  1110. -    xerror("Error writing new .newsrc file - no changes made\n");
  1111. -    return;
  1112. -}
  1113. -
  1114. -/*
  1115. - * Forbid newsgroup ng, unless he asked for it in nbuf.
  1116. - */
  1117. -makehimask(nbuf, ng)
  1118. -char *nbuf, *ng;
  1119. -{
  1120. -    if (!findex(nbuf, ng))
  1121. -        (void) sprintf(rindex(nbuf, '\0'), ",!%s", ng);
  1122. -}
  1123. -
  1124. -/*
  1125. - * Return true if the string searchfor is in string, but not if preceded by !.
  1126. - */
  1127. -findex(string, searchfor)
  1128. -char *string, *searchfor;
  1129. -{
  1130. -    register char first;
  1131. -    register char *p;
  1132. -
  1133. -    first = *searchfor;
  1134. -    for (p=index(string, first); p; p = index(p+1, first)) {
  1135. -        if (((p==string) || (p[-1]!='!')) && strncmp(p, searchfor, strlen(searchfor)) == 0)
  1136. -            return TRUE;
  1137. -    }
  1138. -    return FALSE;
  1139. -}
  1140. *-*-END-of-src/readnews.c-*-*
  1141. echo x - src/install.sh 1>&2
  1142. sed 's/.//' >src/install.sh <<'*-*-END-of-src/install.sh-*-*'
  1143. -: '@(#)install.sh    1.16    10/29/86'
  1144. -
  1145. -if test "$#" != 6
  1146. -then
  1147. -    echo "usage: $0 spooldir libdir bindir nuser ngroup ostype"
  1148. -    exit 1
  1149. -fi
  1150. -SPOOLDIR=$1
  1151. -LIBDIR=$2
  1152. -BINDIR=$3
  1153. -NEWSUSR=$4
  1154. -NEWSGRP=$5
  1155. -OSTYPE=$6
  1156. -
  1157. -: Get name of local system
  1158. -case $OSTYPE in
  1159. -    usg)    SYSNAME=`uname -n`
  1160. -        if test ! -d $LIBDIR/history.d
  1161. -        then
  1162. -            mkdir $LIBDIR/history.d
  1163. -            chown $NEWSUSR $LIBDIR/history.d
  1164. -            chgrp $NEWSGRP $LIBDIR/history.d
  1165. -        fi;;
  1166. -    v7)    SYSNAME=`uuname -l`
  1167. -        touch $LIBDIR/history.pag $LIBDIR/history.dir;;
  1168. -    *)    echo "$0: Unknown Ostype"
  1169. -        exit 1;;
  1170. -esac
  1171. -
  1172. -if test "$SYSNAME" = ""
  1173. -then
  1174. -    echo "$0: Cannot get system name"
  1175. -    exit 1
  1176. -fi
  1177. -
  1178. -: Ensure SPOOLDIR exists
  1179. -for i in $SPOOLDIR $SPOOLDIR/.rnews
  1180. -do
  1181. -    if test ! -d $i
  1182. -    then
  1183. -        mkdir $i
  1184. -    fi
  1185. -    chmod 777 $i
  1186. -    chown $NEWSUSR $i
  1187. -    chgrp $NEWSGRP $i
  1188. -done
  1189. -
  1190. -chown $NEWSUSR $LIBDIR
  1191. -chgrp $NEWSGRP $LIBDIR
  1192. -
  1193. -: Ensure certain files in LIBDIR exist
  1194. -touch $LIBDIR/history $LIBDIR/active $LIBDIR/log $LIBDIR/errlog $LIBDIR/users
  1195. -chmod 666 $LIBDIR/users
  1196. -
  1197. -: If no sys file, make one.
  1198. -if test ! -f $LIBDIR/sys
  1199. -then
  1200. -echo
  1201. -echo Making a $LIBDIR/sys file to link you to oopsvax.
  1202. -echo You must change oopsvax to your news feed.
  1203. -echo If you are not in the USA, remove '"usa"' from your line in the sys file.
  1204. -echo If you are not in North America, remove '"na"' from your line in the sys file.
  1205. -    cat > $LIBDIR/sys << EOF
  1206. -$SYSNAME:world,comp,sci,news,rec,soc,talk,misc,net,mod,na,usa,to::
  1207. -oopsvax:world,comp,sci,news,rec,soc,talk,misc,net,mod,na,usa,to.oopsvax::
  1208. -EOF
  1209. -fi
  1210. -
  1211. -: If no seq file, make one.
  1212. -if test ! -s $LIBDIR/seq
  1213. -then
  1214. -    echo '100' >$LIBDIR/seq
  1215. -fi
  1216. -
  1217. -: If no mailpaths, make one.
  1218. -if test ! -s $LIBDIR/mailpaths
  1219. -then
  1220. -    cat <<E_O_F >$LIBDIR/mailpaths
  1221. -backbone    %s
  1222. -internet    %s
  1223. -E_O_F
  1224. -echo "I have created $LIBDIR/mailpaths for you. The paths are certainly wrong."
  1225. -echo "You must correct them manually to be able to post to moderated groups."
  1226. -fi
  1227. -
  1228. -sh makeactive.sh $LIBDIR $SPOOLDIR $NEWSUSR $NEWSGRP
  1229. -
  1230. -for i in $LIBDIR/ngfile $BINDIR/inews $LIBDIR/localgroups $LIBDIR/moderators \
  1231. -    $LIBDIR/cunbatch $LIBDIR/c7unbatch
  1232. -do
  1233. -    if test -f $i
  1234. -    then
  1235. -        echo "$i is no longer used. You should remove it."
  1236. -    fi
  1237. -done
  1238. -
  1239. -for i in $LIBDIR/csendbatch $LIBDIR/c7sendbatch
  1240. -do
  1241. -    if test -f $i
  1242. -    then
  1243. -        echo "$i is no longer used. You should remove it after"
  1244. -        echo "changing your crontab entry to use sendbatch [flags]"
  1245. -    fi
  1246. -done
  1247. -
  1248. -if test -f $BINDIR/cunbatch
  1249. -then
  1250. -    echo "$BINDIR/cunbatch is not used by the new batching scheme."
  1251. -    echo "You should remove it when all of your neighbors have upgraded."
  1252. -fi
  1253. -
  1254. -cat >$LIBDIR/aliases.new <<EOF
  1255. -net.chess        net.games.chess
  1256. -net.trivia        net.games.trivia
  1257. -net.rec.radio        net.ham-radio
  1258. -net.term        net.info-terms
  1259. -net.joke        net.jokes
  1260. -net.vlsi        net.lsi
  1261. -net.micro.16k        net.micro.ns32k
  1262. -net.music.gdea        net.music.gdead
  1263. -net.notes        net.news.notes
  1264. -net.periph        net.periphs
  1265. -net.puzzles        net.puzzle
  1266. -net.unix.wizards    net.unix-wizards
  1267. -net.sources.wanted    net.wanted.sources
  1268. -net.consumers        misc.consumers
  1269. -net.consumers.house    misc.consumers.house
  1270. -net.house        misc.consumers.house
  1271. -na.forsale        misc.forsale
  1272. -net.forsale        misc.forsale
  1273. -net.politics.terror    misc.headlines
  1274. -net.invest        misc.invest
  1275. -net.jobs        misc.jobs
  1276. -net.kids        misc.kids
  1277. -mod.legal        misc.legal
  1278. -net.legal        misc.legal
  1279. -net.followup        misc.misc
  1280. -net.general        misc.misc
  1281. -net.misc        misc.misc
  1282. -net.suicide        misc.misc
  1283. -net.taxes        misc.taxes
  1284. -mod.test        misc.test
  1285. -net.test        misc.test
  1286. -net.wanted        misc.wanted
  1287. -net.announce        mod.announce
  1288. -net.announce.newusers    mod.announce.newusers
  1289. -mod.map.uucp        mod.map
  1290. -net.religion.christian    mod.religion.christian
  1291. -net.religion.xian    mod.religion.christian
  1292. -net.astro        sci.astro
  1293. -net.astro.expert    sci.astro
  1294. -net.bio            sci.bio
  1295. -net.crypt        sci.crypt
  1296. -net.analog        sci.electronics
  1297. -net.nlang        sci.lang
  1298. -net.math        sci.math
  1299. -net.stat        sci.math.stat
  1300. -net.math.stat        sci.math.stat
  1301. -net.math.symbolic    sci.math.symbolic
  1302. -net.med            sci.med
  1303. -net.sci            sci.misc
  1304. -net.physics        sci.physics
  1305. -net.research        sci.research
  1306. -net.space        sci.space
  1307. -net.columbia        sci.space.shuttle
  1308. -net.challenger        sci.space.shuttle
  1309. -net.college        soc.college
  1310. -net.nlang.africa    soc.culture.african
  1311. -net.nlang.celts        soc.culture.celtic
  1312. -net.nlang.greek        soc.culture.greek
  1313. -net.nlang.india        soc.culture.indian
  1314. -net.religion.jewish    soc.culture.jewish
  1315. -net.social        soc.misc
  1316. -mod.motss        soc.motss
  1317. -net.motss        soc.motss
  1318. -net.net-people        soc.net-people
  1319. -net.roots        soc.roots
  1320. -net.singles        soc.singles
  1321. -net.women        soc.women
  1322. -net.abortion        talk.abortion
  1323. -net.bizarre        talk.bizarre
  1324. -net.origins        talk.origins
  1325. -net.philosophy        talk.philosophy.misc
  1326. -net.politics        talk.politics.misc
  1327. -net.politics.theory    talk.politics.theory
  1328. -net.religion        talk.religion.misc
  1329. -talk.religion        talk.religion.misc
  1330. -net.rumor        talk.rumors
  1331. -talk.rumor        talk.rumors
  1332. -EOF
  1333. -: if no aliases file, make one
  1334. -if test ! -f $LIBDIR/aliases
  1335. -then
  1336. -    mv $LIBDIR/aliases.new $LIBDIR/aliases
  1337. -else
  1338. -    : see whats missing
  1339. -    sort $LIBDIR/aliases | sed -e 's/  */    /g'  -e 's/        */    /g' >/tmp/$$aliases
  1340. -    sort $LIBDIR/aliases.new | sed -e 's/  */    /g'  -e 's/        */    /g' >/tmp/$$aliases.new
  1341. -    comm -23 /tmp/$$aliases.new /tmp/$$aliases >/tmp/$$comm
  1342. -    if test -s /tmp/$$comm
  1343. -    then
  1344. -        echo "The following suggested aliases are missing or incorrect in your"
  1345. -        echo "$LIBDIR/aliases file. It is suggested you add them."
  1346. -        echo ""
  1347. -        cat /tmp/$$comm
  1348. -        echo ""
  1349. -        echo "A suggested aliases file has been left in $LIBDIR/aliases.new"
  1350. -        echo "for your convenience."
  1351. -        rm /tmp/$$comm /tmp/$$aliases
  1352. -    else
  1353. -        rm /tmp/$$comm /tmp/$$aliases $LIBDIR/aliases.new
  1354. -    fi
  1355. -fi
  1356. -
  1357. -: if no distributions file, make one
  1358. -if test ! -f $LIBDIR/distributions
  1359. -then
  1360. -    cat >$LIBDIR/distributions <<EOF
  1361. -local        Local to this site
  1362. -regional    Everywhere in this general area
  1363. -usa        Everywhere in the USA
  1364. -na        Everywhere in North America
  1365. -world        Everywhere on Usenet in the world
  1366. -EOF
  1367. -echo
  1368. -echo You may want to add distributions to $LIBDIR/distributions if your
  1369. -echo site particpates in a regional distribution such as '"ba"' or '"dc"'.
  1370. -fi
  1371. -
  1372. -chown $NEWSUSR $LIBDIR/[a-z]*
  1373. -chgrp $NEWSGRP $LIBDIR/[a-z]*
  1374. -
  1375. -echo
  1376. -echo Reminder: uux must permit rnews if running over uucp.
  1377. -rm -f /tmp/$$*
  1378. *-*-END-of-src/install.sh-*-*
  1379. echo x - src/batch.c 1>&2
  1380. sed 's/.//' >src/batch.c <<'*-*-END-of-src/batch.c-*-*'
  1381. -
  1382. -/*
  1383. - * This software is Copyright (c) 1985 by Rick Adams.
  1384. - *
  1385. - * Permission is hereby granted to copy, reproduce, redistribute or
  1386. - * otherwise use this software as long as: there is no monetary
  1387. - * profit gained specifically from the use or reproduction or this
  1388. - * software, it is not sold, rented, traded or otherwise marketed, and
  1389. - * this copyright notice is included prominently in any copy
  1390. - * made.
  1391. - *
  1392. - * The author make no claims as to the fitness or correctness of
  1393. - * this software for any use whatsoever, and it is provided as is. 
  1394. - * Any use of this software is at the user's own risk.
  1395. - *
  1396. - * Batch: program to batch a list of news articles into an unbatch script.
  1397. - * Usage: /usr/lib/news/batch listfile [bytecount]
  1398. - *  where listfile is a file containing a list, one per line, of full
  1399. - *  path names of files containing articles, e.g. as produced by the F
  1400. - *  transmission option in the sys file.
  1401. - *  bytecount is the maximum number of bytes to output before exiting
  1402. - * Output is placed on standard output.
  1403. - *
  1404. - * Intended usage:
  1405. - *
  1406. - *    With the shellfile "sendbatch", with machine names as arguments:
  1407. - *         e.g
  1408. - *        sendbatch rlgvax seismo
  1409. - *
  1410. - * This would be invoked every hour or two from crontab.
  1411. - *
  1412. - */
  1413. -
  1414. -#ifdef SCCSID
  1415. -static char    *SccsId = "@(#)batch.c    1.15    1/17/86";
  1416. -#endif /* SCCSID */
  1417. -
  1418. -#include <stdio.h>
  1419. -#include <sys/types.h>
  1420. -#include <sys/stat.h>
  1421. -#include <errno.h>
  1422. -#include "defs.h"
  1423. -
  1424. -#if defined(USG) || defined(BSD4_2) || defined(BSD4_1C)
  1425. -#include <fcntl.h>
  1426. -#endif
  1427. -
  1428. -struct stat sbuf;
  1429. -
  1430. -extern int errno;
  1431. -extern char *sys_errlist[];
  1432. -
  1433. -main(argc,argv)
  1434. -char **argv;
  1435. -{
  1436. -    register FILE *fd, *nfd;
  1437. -    register int c;
  1438. -    register long n;
  1439. -    register char *cp;
  1440. -    char *fdstatus;
  1441. -    long maxbytes, nbytes;
  1442. -    long atol();
  1443. -    char fname[512];
  1444. -    char workfile[512];
  1445. -    char *index(), *fgets();
  1446. -
  1447. -    if (argc < 2) {
  1448. -        fprintf(stderr, "Usage: batch listfile [bytecount]\n");
  1449. -        exit(1);
  1450. -    }
  1451. -
  1452. -    /*
  1453. -     * Rename real file to a work name to avoid race conditions.
  1454. -     * If workfile exists skip the rename in order
  1455. -     * to recover from a crash w/o losing anything.
  1456. -     */
  1457. -    (void) strcpy(workfile, argv[1]);
  1458. -    (void) strcat(workfile, ".work");
  1459. -    if (access(workfile, 0) < 0) {
  1460. -        if (access(argv[1], 0) < 0 && errno == ENOENT)
  1461. -            exit(0);    /* no news */
  1462. -        if (rename(argv[1], workfile) < 0) {
  1463. -            logerror("rename(%s,%s) %s", argv[1], workfile,
  1464. -                sys_errlist[errno]);
  1465. -            exit(1);
  1466. -        }
  1467. -    }
  1468. -    fd = fopen(workfile, "r");
  1469. -    if (fd == NULL) {
  1470. -        logerror("fopen(%s,r) %s", workfile, sys_errlist[errno]);
  1471. -        exit(1);
  1472. -    }
  1473. -
  1474. -    if (argc > 2)
  1475. -        maxbytes = atol(argv[2]);
  1476. -    else
  1477. -        maxbytes = 100000000L; /* backwards compatible */
  1478. -    nbytes = 0;
  1479. -    while ((fdstatus = fgets(fname, sizeof fname, fd)) != NULL) {
  1480. -        cp = index(fname, '\n');
  1481. -        if (cp)
  1482. -            *cp = '\0';
  1483. -        nfd = fopen(fname, "r");
  1484. -        if (nfd == NULL) {
  1485. -            perror(fname);
  1486. -            continue;
  1487. -        }
  1488. -        (void) fstat(fileno(nfd), &sbuf);
  1489. -        if (cp)
  1490. -            *cp = '\n';
  1491. -        nbytes += sbuf.st_size;
  1492. -        if (nbytes > maxbytes && nbytes != sbuf.st_size)
  1493. -            break;
  1494. -        printf("#! rnews %ld\n", (long)sbuf.st_size);
  1495. -        /* guess length of #! rnews string */
  1496. -        nbytes += 13;
  1497. -        n = 0;
  1498. -        while ((c = getc(nfd)) != EOF) {
  1499. -            putchar(c);
  1500. -            n++;
  1501. -        }
  1502. -        (void) fclose(nfd);
  1503. -        if (ferror(stdout)){
  1504. -            logerror("stdout write %s", sys_errlist[errno]);
  1505. -            exit(1);
  1506. -        }
  1507. -        if (n != sbuf.st_size) { /* paranoia */
  1508. -            logerror("%s, expected %ld bytes, got %ld", fname,
  1509. -                n, sbuf.st_size);
  1510. -            /* breaking out of this early will end up resyncing
  1511. -               the batch files (isn't serendipity wonderful?) */
  1512. -            break;
  1513. -        }
  1514. -    }
  1515. -    if (fdstatus != NULL) {        /* exceeded maxbytes */
  1516. -        char tmpfile[512];
  1517. -
  1518. -        (void) umask(2);
  1519. -        (void) strcpy(tmpfile, argv[1]);
  1520. -        (void) strcat(tmpfile, ".tmp");
  1521. -            nfd = fopen(tmpfile, "w");
  1522. -        if (nfd == NULL) {
  1523. -            logerror("fopen(%s,w) %s", tmpfile, sys_errlist[errno]);
  1524. -            exit(1);
  1525. -        }
  1526. -        do {
  1527. -            fputs(fname, nfd);
  1528. -        } while (fgets(fname, sizeof fname, fd) != NULL);
  1529. -        if (ferror(nfd)) {
  1530. -            logerror("write(%s) %s", tmpfile, sys_errlist[errno]);
  1531. -            exit(1);
  1532. -        }
  1533. -        (void) fclose(nfd);
  1534. -        (void) fclose(fd);
  1535. -        /* will pick it up next time thru */
  1536. -        if (rename(tmpfile, workfile) < 0) {
  1537. -            logerror("rename(%s,%s) %s", tmpfile, workfile,
  1538. -                sys_errlist[errno]);
  1539. -            exit(1);
  1540. -        }
  1541. -    }        
  1542. -    else
  1543. -        (void) unlink(workfile);
  1544. -    exit(0);
  1545. -}
  1546. -
  1547. -/*
  1548. - * Log the given message, with printf strings and parameters allowed,
  1549. - * on the log file, if it can be written.
  1550. - */
  1551. -/* VARARGS1 */
  1552. -logerror(fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9)
  1553. -char *fmt;
  1554. -{
  1555. -    FILE *logfile;
  1556. -    char lfname[BUFLEN];        /* the log file */
  1557. -    char bfr[BUFLEN];
  1558. -    char *logtime, *ctime(); 
  1559. -    time_t t;
  1560. -
  1561. -    (void) time(&t);
  1562. -    logtime = ctime(&t);
  1563. -    logtime[16] = 0;
  1564. -    logtime += 4;
  1565. -
  1566. -#ifdef IHCC
  1567. -    (void) sprintf(lfname, "%s/%s/errlog", logdir(HOME), LIBDIR);
  1568. -#else
  1569. -    (void) sprintf(lfname, "%s/errlog", LIBDIR);
  1570. -#endif
  1571. -
  1572. -    (void) sprintf(bfr, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9);
  1573. -    fprintf(stderr, bfr);
  1574. -    if (access(lfname, 0) == 0 && (logfile = fopen(lfname, "a")) != NULL) {
  1575. -#if defined(USG) || defined(BSD4_2) || defined(BSD4_1C)
  1576. -        int flags;
  1577. -        flags = fcntl(fileno(logfile), F_GETFL, 0);
  1578. -        (void) fcntl(fileno(logfile), F_SETFL, flags|O_APPEND);
  1579. -#else /* v7 */
  1580. -        (void) lseek(fileno(logfile), 0L, 2);
  1581. -#endif /* v7 */
  1582. -        fprintf(logfile, "%s\tbatch\t%s\n", logtime, bfr);
  1583. -        (void) fclose(logfile);
  1584. -    }
  1585. -}
  1586. -
  1587. -#if !defined(BSD4_2) && !defined(BSD4_1C)
  1588. -rename(from, to)
  1589. -register char *from, *to;
  1590. -{
  1591. -    (void) unlink(to);
  1592. -    if (link(from, to) < 0)
  1593. -        return -1;
  1594. -
  1595. -    (void) unlink(from);
  1596. -    return 0;
  1597. -}
  1598. -#endif /* !BSD4_2 && !BSD4_1C */
  1599. *-*-END-of-src/batch.c-*-*
  1600. echo x - src/process.c 1>&2
  1601. sed 's/.//' >src/process.c <<'*-*-END-of-src/process.c-*-*'
  1602. -/*
  1603. - * This software is Copyright (c) 1986 by Rick Adams.
  1604. - *
  1605. - * Permission is hereby granted to copy, reproduce, redistribute or
  1606. - * otherwise use this software as long as: there is no monetary
  1607. - * profit gained specifically from the use or reproduction or this
  1608. - * software, it is not sold, rented, traded or otherwise marketed, and
  1609. - * this copyright notice is included prominently in any copy
  1610. - * made.
  1611. - *
  1612. - * The author make no claims as to the fitness or correctness of
  1613. - * this software for any use whatsoever, and it is provided as is. 
  1614. - * Any use of this software is at the user's own risk.
  1615. - *
  1616. - * process - process options for readnews/vnews
  1617. - */
  1618. -
  1619. -#ifdef SCCSID
  1620. -static char    *SccsId = "@(#)process.c    2.15    9/16/86";
  1621. -#endif /* SCCSID */
  1622. -
  1623. -#include "rparams.h"
  1624. -
  1625. -#define OPTION    0    /* pick up an option string */
  1626. -#define STRING    1    /* pick up a string of arguments */
  1627. -
  1628. -struct optable *optpt, options[] = { /*
  1629. -optlet    filchar    flag    newstate oldmode    newmode    buf    */
  1630. -'p',    '\0',    FALSE,    OPTION,    UNKNOWN,    UNKNOWN,(char *)NULL,    
  1631. -'t',    '\0',    FALSE,    STRING,    ANY,        UNKNOWN,header.title,    
  1632. -'a',    ' ',    FALSE,    STRING,    ANY,        UNKNOWN,datebuf,
  1633. -'n',   NGDELIM,    FALSE,    STRING,    ANY,        UNKNOWN,header.nbuf,
  1634. -'c',    ' ',    FALSE,    STRING,    UNKNOWN,    UNKNOWN,coptbuf,    
  1635. -'l',    ' ',    FALSE,    OPTION,    UNKNOWN,    UNKNOWN,(char *)NULL,
  1636. -'r',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1637. -'s',   NGDELIM,    FALSE,    STRING,    ANY,        UNKNOWN,header.nbuf,
  1638. -'x',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1639. -'h',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1640. -#ifdef TMAIL
  1641. -'M',    '\0',    FALSE,    OPTION,    UNKNOWN,    MAIL,    (char *)NULL,
  1642. -#else /* !TMAIL */
  1643. -'\377',    '\0',    FALSE,    OPTION,    UNKNOWN,    UNKNOWN,(char *)NULL,
  1644. -#endif /* !TMAIL */
  1645. -'f',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1646. -'u',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1647. -'e',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1648. -'K',    '\0',    FALSE,    OPTION,    ANY,        UNKNOWN,(char *)NULL,
  1649. -'\0',    '\0',    0,    0,    0,        0,    (char *)NULL
  1650. -};
  1651. -
  1652. -process(argc,argv)
  1653. -register int argc;
  1654. -register char **argv;
  1655. -{
  1656. -    register int state = STRING;
  1657. -    register char *ptr = header.nbuf;
  1658. -    char filchar = NGDELIM;
  1659. -    int len = BUFLEN, tlen;
  1660. -
  1661. -    /* loop once per arg. */
  1662. -
  1663. -    if (argc > 1 && **argv != '-')
  1664. -        nflag = TRUE;
  1665. -
  1666. -    while (--argc) {
  1667. -        if (state == OPTION) {
  1668. -        if (**argv != '-') {
  1669. -            xerror("Bad option string \"%s\"", *argv);
  1670. -        }
  1671. -        while (*++*argv != '\0') {
  1672. -            for (optpt = options; optpt->optlet != '\0'; ++optpt) {
  1673. -                if (optpt->optlet == **argv)
  1674. -                    goto found;
  1675. -            }
  1676. -            /* unknown option letter */
  1677. -#ifdef TMAIL
  1678. -            fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuMK ]\n", Progname);
  1679. -#else /* !TMAIL */
  1680. -            fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuK ]\n", Progname);
  1681. -#endif /* !TMAIL */
  1682. -            fprintf(stderr, "\t[ -c [ ``mailer'' ]]\n\n");
  1683. -            fprintf(stderr, "       %s -s\n", Progname);
  1684. -            exit(1);
  1685. -
  1686. -            found:;
  1687. -            if (mode != UNKNOWN && (mode&optpt->oldmode) == 0) {
  1688. -                xerror("Bad %c option", **argv);
  1689. -            }
  1690. -            if (mode == UNKNOWN)
  1691. -                mode = optpt->newmode;
  1692. -            filchar = optpt->filchar;
  1693. -            optpt->flag = TRUE;
  1694. -            state = optpt->newstate;
  1695. -            ptr = optpt->buf;
  1696. -            len = BUFLEN;
  1697. -        }
  1698. -
  1699. -        argv++;        /* done with this option arg. */
  1700. -
  1701. -        } else {
  1702. -
  1703. -        /*
  1704. -         * Pick up a piece of a string and put it into
  1705. -         * the appropriate buffer.
  1706. -         */
  1707. -        if (**argv == '-') {
  1708. -            state = OPTION;
  1709. -            argc++;    /* uncount this arg. */
  1710. -            continue;
  1711. -        }
  1712. -
  1713. -        if ((tlen = strlen(*argv)) >= len)
  1714. -            xerror("Argument string too long");
  1715. -        strcpy(ptr, *argv++);
  1716. -        ptr += tlen;
  1717. -        if (*(ptr-1) != filchar)
  1718. -            *ptr++ = filchar;
  1719. -        len -= tlen + 1;
  1720. -        *ptr = '\0';
  1721. -        }
  1722. -    }
  1723. -    return;
  1724. -}
  1725. *-*-END-of-src/process.c-*-*
  1726. echo x - src/uurec.c 1>&2
  1727. sed 's/.//' >src/uurec.c <<'*-*-END-of-src/uurec.c-*-*'
  1728. -/*
  1729. - * uurec - receive articles via /bin/mail.
  1730. - */
  1731. -
  1732. -#ifdef SCCSID
  1733. -static char    *SccsId = "@(#)uurec.c    2.9    4/16/85";
  1734. -#endif /* SCCSID */
  1735. -
  1736. -#include "defs.h"
  1737. -
  1738. -#include <stdio.h>
  1739. -#include <ctype.h>
  1740. -
  1741. -/*
  1742. - * Process a news article which has been shipped via /bin/mail.
  1743. - */
  1744. -
  1745. -#define FROM    01
  1746. -#define NLIN    02
  1747. -#define BLANK    03
  1748. -#define OTHER    04
  1749. -
  1750. -#define SKIPPING    010
  1751. -#define READING        020
  1752. -
  1753. -#define BFSZ 250
  1754. -
  1755. -#define EOT    '\004'
  1756. -
  1757. -#define A    01
  1758. -#define B    02
  1759. -
  1760. -#ifdef debug
  1761. -# define RNEWS "cat"
  1762. -#endif
  1763. -extern    char    *strcat(), *strcpy();
  1764. -extern    char    *frombreak();
  1765. -extern    FILE    *popen();
  1766. -
  1767. -/* ARGSUSED */
  1768. -main(argc, argv)
  1769. -int argc;
  1770. -char **argv;
  1771. -{
  1772. -    char buf[BFSZ], fbuf[BFSZ];
  1773. -    char bfr[BFSZ], *pbfr = bfr;
  1774. -    register char *p = NULL;
  1775. -    register FILE *pipe = stdout;
  1776. -    register int mode, frmflg, pathcnt, format;
  1777. -    char *index();
  1778. -
  1779. -    mode = SKIPPING;
  1780. -    frmflg = FALSE;
  1781. -    while (fgets(buf, BFSZ, stdin) != NULL) {
  1782. -#ifdef debug
  1783. -        printf("%o\t%s", mode|type(buf), buf);
  1784. -#endif
  1785. -        switch (mode | type(buf)) {
  1786. -
  1787. -        case FROM | SKIPPING:
  1788. -            if (frmflg)
  1789. -                p = frombreak(p, buf);
  1790. -            else
  1791. -                p = fbuf;
  1792. -            frmflg = TRUE;
  1793. -            break;
  1794. -
  1795. -        case FROM | READING:
  1796. -            if (!frmflg) {
  1797. -                frmflg = TRUE;
  1798. -                p = fbuf;
  1799. -                pclose(pipe);
  1800. -            }
  1801. -            p = frombreak(p, buf);
  1802. -            break;
  1803. -
  1804. -        case NLIN | SKIPPING:
  1805. -            if ((isupper(buf[1]) && index(buf, ':')) || !strncmp(buf, "From ", 5))
  1806. -                format = B;
  1807. -            else
  1808. -                format = A;
  1809. -#ifdef debug
  1810. -            printf("format = %d\n", format);
  1811. -#endif
  1812. -            mode = READING;
  1813. -
  1814. -        case NLIN | READING:
  1815. -            if (frmflg) {
  1816. -                frmflg = FALSE;
  1817. -                --p;
  1818. -                while (p >= fbuf && *--p != '!')
  1819. -                    ;
  1820. -                *++p = '\0';
  1821. -                pathcnt = 0;
  1822. -#ifdef IHCC
  1823. -                sprintf(pbfr, "%s/%s/%s", logdir(HOME),
  1824. -                        LIBDIR, "rnews");
  1825. -#else
  1826. -                pbfr = RNEWS;
  1827. -#endif
  1828. -                if ((pipe = popen(pbfr, "w")) == NULL) {
  1829. -                    perror("uurec: popen failed");
  1830. -                    exit(1);
  1831. -                }
  1832. -            }
  1833. -            if (format == A) {
  1834. -                if (++pathcnt == 3)
  1835. -                    fputs(fbuf, pipe);
  1836. -                fputs(buf+1, pipe);
  1837. -            } else {
  1838. -                if (!pathcnt && (!strncmp(buf+1, "From: ", 6) || !strncmp(buf+1, "From ", 5))) {
  1839. -                    pathcnt++;
  1840. -                    fprintf(pipe, "From: %s", fbuf);
  1841. -                    sscanf(buf, "%s %[^\n]", fbuf, fbuf);
  1842. -                    fprintf(pipe, "%s\n", fbuf);
  1843. -                } else
  1844. -                    fputs(buf+1, pipe);
  1845. -            }
  1846. -            break;
  1847. -
  1848. -        case OTHER | SKIPPING:
  1849. -            break;
  1850. -
  1851. -        case OTHER | READING:
  1852. -            pclose(pipe);
  1853. -            mode = SKIPPING;
  1854. -        }
  1855. -    }
  1856. -    if (pipe)
  1857. -        pclose(pipe);
  1858. -    exit(0);
  1859. -}
  1860. -
  1861. -type(p)
  1862. -register char *p;
  1863. -{
  1864. -    while (*p == ' ' || *p == '?')
  1865. -        ++p;
  1866. -
  1867. -    if (*p == 'N')
  1868. -        return (NLIN);
  1869. -
  1870. -    if (strncmp(p, ">From ", 6) == 0)
  1871. -        return (FROM);
  1872. -
  1873. -    if (strncmp(p, "From ", 5) == 0)
  1874. -        return (FROM);
  1875. -
  1876. -    return(OTHER);
  1877. -}
  1878. -
  1879. -/*
  1880. - * Get the system name out of a from line.
  1881. - */
  1882. -char *
  1883. -frombreak(buf, fbuf)
  1884. -register char *buf, *fbuf;
  1885. -{
  1886. -    register char *p;
  1887. -
  1888. -    /* break the line into tokens. */
  1889. -    p = fbuf;
  1890. -    while (*++p != '\0')
  1891. -        switch (*p) {
  1892. -        case '\n':
  1893. -        case '\t':
  1894. -        case ' ':
  1895. -            *p = '\0';
  1896. -            break;
  1897. -        case EOT:
  1898. -            goto garbled;
  1899. -        default:;
  1900. -        }
  1901. -    *++p = EOT;
  1902. -    *++p = '\0';
  1903. -
  1904. -    for (p=fbuf; *p != EOT  || p[1] != '\0'; p += strlen(p)+1) {
  1905. -        if (strcmp(p, "forwarded") == 0)
  1906. -            return(buf);
  1907. -        if (strcmp(p, "remote") == 0) {
  1908. -            p += strlen(p)+1;
  1909. -            if (strcmp(p, "from") == 0) {
  1910. -                p += strlen(p)+1;
  1911. -                strcpy(buf, p);
  1912. -                strcat(buf, "!");
  1913. -                return(buf+strlen(buf));
  1914. -            }
  1915. -        }
  1916. -    }
  1917. -    garbled:
  1918. -    strcat(buf, "???!");
  1919. -    return(buf+4);
  1920. -}
  1921. *-*-END-of-src/uurec.c-*-*
  1922. echo x - src/checkgroups.sh 1>&2
  1923. sed 's/.//' >src/checkgroups.sh <<'*-*-END-of-src/checkgroups.sh-*-*'
  1924. -: check active file for missing or extra newsgroups
  1925. -: '@(#)checkgroups    1.17    10/29/86'
  1926. -
  1927. -if  test  ! -s LIBDIR/newsgroups
  1928. -then
  1929. -    cp /dev/null LIBDIR/newsgroups
  1930. -fi
  1931. -# Read first line of stdin.  If of the form "-n group", then only check
  1932. -# for the specified group.  Otherwise, assume doing standard groups
  1933. -sed -e '/^[a-zA-Z-]*: /d' -e '/^$/d' -e '/^[#:]/d' | (
  1934. -read line
  1935. -case "${line}" in
  1936. --n*)
  1937. -    # Doing specific group.  extract group name and preserve
  1938. -    # all of current newsgroups file except for that group.
  1939. -    # Then append entries for this group.
  1940. -    group=`echo "${line}" | sed -e 's/-n /^/' -e 's/$/\\\\./'`
  1941. -    egrep -v "${group}" LIBDIR/newsgroups > /tmp/$$a
  1942. -    cat /tmp/$$a - > LIBDIR/newsgroups
  1943. -    ;;
  1944. -*)
  1945. -    group="^net\\.|^mod\\.|^comp\\.|^sci\\.|^rec\\.|^news\\.|^soc\\.|^misc\\.|^talk\\."
  1946. -    egrep -v "${group}" LIBDIR/newsgroups > /tmp/$$a
  1947. -    cat /tmp/$$a > LIBDIR/newsgroups
  1948. -    cat >> LIBDIR/newsgroups
  1949. -    ;;
  1950. -esac
  1951. -
  1952. -egrep "${group}" LIBDIR/active | sed 's/ .*//' | sort >/tmp/$$active
  1953. -egrep "${group}" LIBDIR/newsgroups | sed 's/    .*//' | sort >/tmp/$$newsgroups
  1954. -
  1955. -comm -13 /tmp/$$active /tmp/$$newsgroups >/tmp/$$missing
  1956. -comm -23 /tmp/$$active /tmp/$$newsgroups >/tmp/$$remove
  1957. -
  1958. -egrep "${group}" LIBDIR/active | sed -n "/m\$/s/ .*//p" |
  1959. -    sort > /tmp/$$active.mod.all
  1960. -egrep "${group}" LIBDIR/newsgroups |
  1961. -sed -n "/Moderated/s/[     ][     ]*.*//p" | sort > /tmp/$$newsg.mod
  1962. -
  1963. -comm -12 /tmp/$$missing /tmp/$$newsg.mod >/tmp/$$add.mod
  1964. -comm -23 /tmp/$$missing /tmp/$$newsg.mod >/tmp/$$add.unmod
  1965. -cat /tmp/$$add.mod /tmp/$$add.unmod >>/tmp/$$add
  1966. -
  1967. -comm -23 /tmp/$$active.mod.all /tmp/$$remove >/tmp/$$active.mod
  1968. -comm -13 /tmp/$$newsg.mod /tmp/$$active.mod >/tmp/$$ismod
  1969. -comm -23 /tmp/$$newsg.mod /tmp/$$active.mod >/tmp/$$notmod.all
  1970. -comm -23 /tmp/$$notmod.all /tmp/$$add >/tmp/$$notmod
  1971. -
  1972. -if test -s /tmp/$$remove
  1973. -then
  1974. -    (
  1975. -    echo "The following newsgroups are not valid and should be removed."
  1976. -    sed "s/^/    /" /tmp/$$remove
  1977. -    echo ""
  1978. -    echo "You can do this by executing the command:"
  1979. -    echo \    LIBDIR/rmgroup `cat /tmp/$$remove`
  1980. -    echo ""
  1981. -    ) 2>&1 >/tmp/$$out
  1982. -fi
  1983. -
  1984. -if test -s /tmp/$$add
  1985. -then
  1986. -    (
  1987. -    echo "The following newsgroups were missing and should be added."
  1988. -    sed "s/^/    /" /tmp/$$add
  1989. -    echo ""
  1990. -    echo "You can do this by executing the command(s):"
  1991. -    for i in `cat /tmp/$$add.unmod`
  1992. -    do
  1993. -        echo 'LIBDIR/inews -C '$i' </dev/null'
  1994. -    done
  1995. -    for i in `cat /tmp/$$add.mod`
  1996. -    do
  1997. -        echo 'LIBDIR/inews -C '$i' moderated </dev/null'
  1998. -    done
  1999. -    echo ""
  2000. -    ) 2>&1 >>/tmp/$$out
  2001. -fi
  2002. -
  2003. -if test -s /tmp/$$ismod
  2004. -then
  2005. -    (
  2006. -    echo "The following newsgroups are not moderated and are marked moderated."
  2007. -    sed "s/^/    /" /tmp/$$ismod
  2008. -    echo ""
  2009. -    echo "You can correct this by executing the command(s):"
  2010. -    for i in `cat /tmp/$$ismod`
  2011. -    do
  2012. -        echo 'LIBDIR/inews -C '$i' </dev/null'
  2013. -    done
  2014. -    echo ""
  2015. -    ) 2>&1 >>/tmp/$$out
  2016. -fi
  2017. -
  2018. -if test -s /tmp/$$notmod
  2019. -then
  2020. -    (
  2021. -    echo "The following newsgroups are moderated and not marked so."
  2022. -    sed "s/^/    /" /tmp/$$notmod
  2023. -    echo ""
  2024. -    echo "You can correct this by executing the command(s):"
  2025. -    for i in `cat /tmp/$$notmod`
  2026. -    do
  2027. -        echo 'LIBDIR/inews -C '$i' moderated </dev/null'
  2028. -    done
  2029. -    echo ""
  2030. -    ) 2>&1 >>/tmp/$$out
  2031. -fi
  2032. -
  2033. -if test -s /tmp/$$out
  2034. -then
  2035. -    (echo    "Subject: Problems with your active file"
  2036. -    echo ""
  2037. -    cat /tmp/$$out
  2038. -    ) | if test $# -gt 0
  2039. -        then
  2040. -            mail $1
  2041. -        else
  2042. -            cat
  2043. -        fi    
  2044. -fi
  2045. -)
  2046. -
  2047. -rm -f /tmp/$$*
  2048. *-*-END-of-src/checkgroups.sh-*-*
  2049. echo x - src/encode.c 1>&2
  2050. sed 's/.//' >src/encode.c <<'*-*-END-of-src/encode.c-*-*'
  2051. -#include <stdio.h>
  2052. -
  2053. -#ifdef SCCSID
  2054. -static char    *SccsId = "@(#)encode.c    1.3    5/15/85";
  2055. -#endif /* SCCSID */
  2056. -
  2057. -/*
  2058. - * Produce a 7 bit printable encoding of stdin on stdout.
  2059. - *
  2060. - * Encoding uses acsii chars from ' ' .. 'z'
  2061. - * (040 .. 0172) (0x20 - 0x7a) inclusive
  2062. - *
  2063. - * Method is to expand 3 chars -> 4 6 bit ones.
  2064. - * Then collect 13 6 bit chars, and spread the 13th over
  2065. - * the preceding 12, so that each of the 12 chars is now
  2066. - * 6.5 bits.  These 2 6.5 bit chars are a little hard
  2067. - * to represent on most common machines (one of these days
  2068. - * sane hosts will have 1/2 bits just for this program)
  2069. - * so we take a pair of them, and represent that in 13 bits.
  2070. - * 13 bits (max value 8191) can be represented as
  2071. - *    A * 91 + B
  2072. - * where A < 91, B < 91  (91^2 == 8281, so it fits!)
  2073. - *
  2074. - * Each of A and B is encoded as a character by adding 32
  2075. - * to make it printable (ie: 0x20).
  2076. - *
  2077. - * The termination conditions are foul beyond belief.  Don't
  2078. - * monkey with them!
  2079. - *
  2080. - * If you think its a fluke that 040 .. 0171 just happen to
  2081. - * be the chars that Piet Beertema's uucp 'f' protocol transmits
  2082. - * as single bytes, you're insane.  0172 chars are produced
  2083. - * with lower frequency than any other (given random data)
  2084. - * so the doubling that occurs with that we will just suffer.
  2085. - * (A newer 'f' proto, sometime, will probably not use 0172)
  2086. - */
  2087. -
  2088. -/*
  2089. - * the following pair of characters cannot legally occur
  2090. - * in normal output (since 90*91 + 90 == 8280, which > 2^13)
  2091. - * so we use them to indicate that the data that follows is the
  2092. - * terminator.  The character immediately following this
  2093. - * pair is the length of the (expanded) terminator (which
  2094. - * otherwise might be indeterminable)
  2095. - */
  2096. -#define    ENDMARK1    ((90*91 + 90) / 91 + ' ')
  2097. -#define    ENDMARK2    ((90*91 + 90) % 91 + ' ')
  2098. -
  2099. -main()
  2100. -{
  2101. -    register char *p;
  2102. -    register char *e;
  2103. -    register c;
  2104. -    char b3[3];
  2105. -
  2106. -    p = b3;
  2107. -    e = b3 + 3;
  2108. -    while ((c = getchar()) != EOF) {
  2109. -        *p++ = c;
  2110. -        if (p == e) {
  2111. -            encode(b3, 3);
  2112. -            p = b3;
  2113. -        }
  2114. -    }
  2115. -    encode(b3, p - b3);
  2116. -    flushout();
  2117. -    exit(0);
  2118. -}
  2119. -
  2120. -static char b13[13];
  2121. -static int cnt = 0;
  2122. -
  2123. -encode(c, n)
  2124. -    register char *c;
  2125. -    int n;
  2126. -{
  2127. -    register char *p;
  2128. -    register i = cnt;
  2129. -    register j;
  2130. -    char b4[4];
  2131. -
  2132. -    p = b4;
  2133. -
  2134. -    p[0] = (c[0] >> 2) & 0x3f;
  2135. -    p[1] = ((c[0] & 0x3) << 4) | ((c[1] >> 4) & 0xf);
  2136. -    p[2] = ((c[1] & 0xF) << 2) | ((c[2] >> 6) & 0x3);
  2137. -    if (n == 3)
  2138. -        p[3] = c[2] & 0x3f;
  2139. -    else
  2140. -        p[3] = n;
  2141. -
  2142. -    c = &b13[i];
  2143. -    for (j = 4; --j >= 0; i++) {
  2144. -        if (i == 13) {
  2145. -            dumpcode(b13, 13);
  2146. -            c = b13;
  2147. -            i = 0;
  2148. -        }
  2149. -        *c++ = *p++;
  2150. -    }
  2151. -    cnt = i;
  2152. -}
  2153. -
  2154. -flushout()
  2155. -{
  2156. -    putchar(ENDMARK1);
  2157. -    putchar(ENDMARK2);
  2158. -    putchar(cnt + ' ');
  2159. -    dumpcode(b13, cnt);
  2160. -}
  2161. -
  2162. -dumpcode(p, n)
  2163. -    register char *p;
  2164. -    register int n;
  2165. -{
  2166. -    register last;
  2167. -    register c;
  2168. -
  2169. -    if (n == 13)
  2170. -        n--, last = p[12];
  2171. -    else if (n & 1)
  2172. -        last = (1 << (6-1));
  2173. -    else
  2174. -        last = 0;
  2175. -
  2176. -    for ( ; n > 0; n -= 2) {
  2177. -        c = *p++ << 6;
  2178. -        c |= *p++;
  2179. -        if (last & (1 << (6-1)))
  2180. -            c |= (1 << 12);
  2181. -        last <<= 1;
  2182. -
  2183. -        /*
  2184. -         * note: 91^2 > 2^13, 90^2 < 2^13, (91 + ' ') is printable
  2185. -         */
  2186. -
  2187. -        /* oh for a compiler that would only do one division... */
  2188. -        putchar((c / 91) + ' ');
  2189. -        putchar((c % 91) + ' ');
  2190. -    }
  2191. -}
  2192. *-*-END-of-src/encode.c-*-*
  2193. echo x - src/caesar.c 1>&2
  2194. sed 's/.//' >src/caesar.c <<'*-*-END-of-src/caesar.c-*-*'
  2195. -/*
  2196. - * program to to decrypt caesar(tm) cypher
  2197. - * (caesar is a trademark of the roman empire)
  2198. - *
  2199. - * to compile:
  2200. - *
  2201. - *    cc decrypt.c -lm -o decrypt.c
  2202. - *
  2203. - * usage:
  2204. - *
  2205. - *    decrypt [n] < file
  2206. - *
  2207. - * where n is an optional forced rotation.
  2208. - *
  2209. - * authors: Stan King, John Eldridge, based on algorithm suggested by
  2210. - *        Bob Morris
  2211. - * 29-Sep-82
  2212. - *
  2213. - */
  2214. -
  2215. -#ifdef SCCSID
  2216. -static char    *SccsId = "@(#)caesar.c    1.7    4/16/85";
  2217. -#endif /* SCCSID */
  2218. -
  2219. -#include <stdio.h>
  2220. -#include <ctype.h>
  2221. -#include <math.h>
  2222. -extern char *calloc();
  2223. -
  2224. -main(argc, argv)
  2225. -int argc;
  2226. -char *argv[];
  2227. -{
  2228. -    /* letter frequencies (taken from some unix(tm) documentation) */
  2229. -    /* (unix is a trademark of Bell Laboratories) */
  2230. -    static double stdf[ 26 ] =
  2231. -    {
  2232. -        7.97, 1.35, 3.61, 4.78, 12.37, 2.01, 1.46, 4.49,
  2233. -        6.39, 0.04, 0.42, 3.81, 2.69, 5.92, 6.96, 2.91,
  2234. -        0.08, 6.63, 8.77, 9.68, 2.62, 0.81, 1.88, 0.23,
  2235. -        2.07, 0.06,
  2236. -    };
  2237. -    int obs[26];
  2238. -    int bufsize;
  2239. -    int c, i, try;
  2240. -    double dot, winnerdot;  /* .. */
  2241. -    int winner, forced = 0;
  2242. -    char *inbuf;
  2243. -
  2244. -    bufsize = 0;
  2245. -    if( argc > 1 )
  2246. -        sscanf( argv[1], "%d", &forced );
  2247. -    if( forced == 0 )
  2248. -        forced = -1000;
  2249. -        
  2250. -    inbuf = calloc( BUFSIZ, 1 );
  2251. -
  2252. -    /* adjust frequency table to weight low probs REAL low */
  2253. -    for (i=0; i<26; i++)    {
  2254. -        stdf[i] = log(stdf[i]) + log(26.0/100.0);
  2255. -    }
  2256. -
  2257. -    /* Decode each line separately */
  2258. -    for (;;) {
  2259. -        for (i=0; i<=25; obs[i++]=0)
  2260. -            ;
  2261. -
  2262. -        /* get a sample of the text */
  2263. -        for( i = 0; i < BUFSIZ; i++ ) {
  2264. -            if( (c = getchar()) == EOF ) {
  2265. -                exit(0);
  2266. -            }    
  2267. -            inbuf[i] = c;
  2268. -            if (c == '\n') {
  2269. -                bufsize = i+1; 
  2270. -                break;
  2271. -            }
  2272. -            if (islower(c))
  2273. -                obs[c-'a'] += 1;
  2274. -            else if (isupper(c))
  2275. -                obs[c-'A'] += 1;
  2276. -        }
  2277. -
  2278. -        /* now "dot" the freqs with the observed letter freqs */
  2279. -        /*    and keep track of best fit */
  2280. -        winner = 0;    
  2281. -        for (try = 0; try<26; try+=13) {
  2282. -            dot = 0;
  2283. -            for ( i=0; i<26; i++ ) {
  2284. -                dot += obs[i] * stdf[ (i+try) % 26 ];
  2285. -                }
  2286. -            /* initialize winning score */
  2287. -            if( try == 0 )
  2288. -                winnerdot = dot;
  2289. -            if( dot > winnerdot ) {
  2290. -                /* got a new winner! */
  2291. -                winner = try;
  2292. -                winnerdot = dot;
  2293. -            }
  2294. -        }
  2295. -
  2296. -        if (forced != -1000)
  2297. -            winner = forced;
  2298. -
  2299. -        /* print out sample buffer */
  2300. -        for( i = 0; i < bufsize; i++ )
  2301. -            putchar( rotate( inbuf[i], winner ) );
  2302. -    }
  2303. - }
  2304. -
  2305. -
  2306. -static int
  2307. -rotate( c, perm )
  2308. -char c;
  2309. -int perm;
  2310. -{
  2311. -    if (isupper(c))    {
  2312. -        return 'A' + (c - 'A' + perm) % 26 ;
  2313. -    }
  2314. -    else if (islower(c)) {
  2315. -        return 'a' + (c-'a'+perm) % 26 ;
  2316. -    }
  2317. -    else return c;
  2318. -}
  2319. *-*-END-of-src/caesar.c-*-*
  2320. echo x - src/defs.dist 1>&2
  2321. sed 's/.//' >src/defs.dist <<'*-*-END-of-src/defs.dist-*-*'
  2322. -/*
  2323. - *    This software is Copyright (c) 1986 by Rick Adams.
  2324. - *
  2325. - *    Permission is hereby granted to copy, reproduce, redistribute or
  2326. - *    otherwise use this software as long as: there is no monetary
  2327. - *    profit gained specifically from the use or reproduction or this
  2328. - *    software, it is not sold, rented, traded or otherwise marketed, and
  2329. - *    this copyright notice is included prominently in any copy
  2330. - *    made.
  2331. - *
  2332. - *    The author make no claims as to the fitness or correctness of
  2333. - *    this software for any use whatsoever, and it is provided as is. 
  2334. - *    Any use of this software is at the user's own risk.
  2335. - *
  2336. - */
  2337. -
  2338. -/*    @(#)defs.dist    2.55    10/30/86    */
  2339. -
  2340. -/*
  2341. - * defs.h - defines for news-related programs.
  2342. - *
  2343. - * If you remove any lines here or in your Makefile, make the change
  2344. - * to localize.sh so you won't have to redo it for each news release.
  2345. - *
  2346. - * If TMAIL is undefined, the -M option will be disabled.
  2347. - *
  2348. - * By convention, the version of the software you are running is taken
  2349. - * to be news_version below.
  2350. - */
  2351. -
  2352. -#define NEWS_VERSION   "B 2.11 10/30/86"
  2353. -
  2354. -#define DAYS    (60L*60L*24L)
  2355. -#define WEEKS    (7*DAYS)
  2356. -/* Things that very well may require local configuration */
  2357. -#ifndef HOME
  2358. -#define    ROOTID    10    /* uid of person allowed to cancel anything    */
  2359. -#endif
  2360. -#define    N_UMASK 000    /* mask for umask call, 022 for secure system    */
  2361. -#define DFLTEXP    2*WEEKS    /* default no. of seconds to expire in        */
  2362. -#define HISTEXP    4*WEEKS    /* default no. of seconds to forget in        */
  2363. -#define DFLTSUB "general,all.announce"    /* default subscription list    */
  2364. -#define TMAIL    "/usr/ucb/Mail"    /* Mail program that understands -T    */
  2365. -#define    ADMSUB    "general,all.announce"    /* Mandatory subscription list    */
  2366. -#define PAGE    "/usr/ucb/more"    /* Default pager            */
  2367. -#define NOTIFY    "usenet"    /* Tell him about certain ctl messages    */
  2368. -                /* Default xmit command - remove -z if    */
  2369. -#define DFTXMIT    "uux - -r -z %s!rnews < %s" /* your uux can't do it    */
  2370. -#define UXMIT    "uux -r -z -c %s!rnews '<' %s" /* If uux -c is ok    */
  2371. -#define DFTEDITOR "vi"        /* Default editor, see also postnews.    */
  2372. -/* #define UUPROG "euuname"    /* omit for uuname, put in LIBDIR    */
  2373. -#define MANUALLY        /* Don't execute rmgroups, just notify.    */
  2374. -/* #define NONEWGROUPS        /* Don't create new groups, just notify.*/
  2375. -#define BATCH "unbatch"        /* name of unbatcher         */
  2376. -/* #define SPOOLNEWS        /* Spool incoming news, don't process    */
  2377. -/* #define LOCALNAME         /* There is no full name database.     */
  2378. -/* #define INTERNET        /* Internet mail works locally        */
  2379. -#define MYDOMAIN ".UUCP"    /* Local domain                */
  2380. -/* #define CHEAP        /* don't chown files to news        */
  2381. -/* #define OLD            /* Add extra headers for old neighbors    */
  2382. -/* #define UNAME        /* If uname call returns your nodename  */
  2383. -/* #define GHNAME        /* If gethostname call is available.    */
  2384. -/* #define UUNAME "/etc/uucpname" /* If your nodename is stored in a file */
  2385. -#define V7MAIL            /* Local mail format is V7 ("From ")    */
  2386. -#define SORTACTIVE        /* if you want news presented in the order of the .newsrc */
  2387. -#define ZAPNOTES        /* if you want old style notes headers moved into the headers */
  2388. -#define DIGPAGE            /* allow digestifying in vnews */
  2389. -/* #define DOXREFS        /* Generate xref line for rn to use */
  2390. -/* #define MULTICAST        /* If you want to be able to multicast news */
  2391. -/* #define BSD4_2        /* If you are running 4.2  or 4.3 BSD    */
  2392. -/* #define BSD4_1C        /* If you are running 4.1C BSD        */
  2393. -/* #define LOCKF        /* If you have the lockf() sys call */
  2394. -/* #define ALWAYSALIAS        /* temporary kludge for conversion */
  2395. -/* #define SENDMAIL "/usr/lib/sendmail" /* command line to run "sendmail" if you have it    */
  2396. -/* #define MMDF    "/usr/mmdf/submit"    /* command line to run mmdf if you have it */
  2397. -#define MYORG "Frobozz Inc., St. Louis"    /* My organization.  Please    */
  2398. -                /* include your city (and state, and    */
  2399. -                /* country, if not obvious) in MYORG,    */
  2400. -                /* and please keep it short.        */
  2401. -/* #define HIDDENNET "frooz"    /* if you have a local network and want */
  2402. -                /* The mail address to look like it came */
  2403. -                /* from one machine */
  2404. -/* #define NICENESS    4    /* does a nice(NICENESS) in rnews */
  2405. -/* #define FASCIST    "all,!all.all"    /* only permit posting to certain groups */
  2406. -                /* see installation guide for details */
  2407. -/* #define SMALL_ADDRESS_SPACE    /* If your machine can't address > 32767 */
  2408. -/* #define ORGDISTRIB    "froozum"    /* For organization wide control message handling */
  2409. -
  2410. -/* Things you might want to change */
  2411. -#define NEWSRC  ".newsrc"    /* name of .newsrc file (in home dir)    */
  2412. -#define LINES    512    /* maximum no. of lines in .newsrc        */
  2413. -#define NEGCHAR    '!'    /* newsgroup negation character            */
  2414. -#define DEADTIME 45    /* no. of seconds to wait on deadlock        */
  2415. -#define FMETA    '%'    /* file meta-character for c option        */
  2416. -#if defined(pdp11) || defined(SMALL_ADDRESS_SPACE)
  2417. -# define BUFLEN    128    /* standard buffer size                */
  2418. -#else
  2419. -# define BUFLEN    256    /* standard buffer size                */
  2420. -#endif
  2421. -#define LBUFLEN 1024    /* big buffer size                */
  2422. -#define    SBUFLEN 32    /* small buffer size (for system names, etc)    */
  2423. -#define LNCNT    14    /* Articles with > LNCNT lines go through pager */
  2424. -
  2425. -/* Things you probably won't want to change */
  2426. -#define PATHLEN 512    /* length of longest source string        */
  2427. -#define    DATELEN    64    /* length of longest allowed date string    */
  2428. -#define    NAMELEN    128    /* length of longest possible message ID    */
  2429. -#define    SNLN    8    /* max significant characters in sysname    */
  2430. -#define    PROTO    'A'    /* old protocol name                */
  2431. -#define NETCHRS    "!:@^%,"/* Punct. chars used for various networks    */
  2432. -#define    TRUE    1    /* boolean true                    */
  2433. -#define    FALSE    0    /* boolean false                */
  2434. -#define    PERHAPS    2    /* indeterminate boolean value            */
  2435. -#define    NGDELIM    ','    /* delimit character in news group line        */
  2436. *-*-END-of-src/defs.dist-*-*
  2437. exit
  2438.  
  2439.