home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume7 / 2.11news / patch.11 < prev    next >
Internet Message Format  |  1988-03-03  |  50KB

  1. From rick@seismo.CSS.GOV Fri Oct 16 18:23:27 1987
  2. Path: seismo!rick
  3. From: rick@seismo.CSS.GOV (Rick Adams)
  4. Newsgroups: news.software.b
  5. Subject: news 2.11 src patch #11
  6. Message-ID: <44164@beno.seismo.CSS.GOV>
  7. Date: 16 Oct 87 22:23:27 GMT
  8. Organization: Center for Seismic Studies, Arlington, VA
  9. Lines: 1951
  10.  
  11. Description:
  12.     This is patch #11 for news 2.11 src.
  13.  
  14.     Fix problems with expire and sendbatch introduced in patch #10
  15.     Fix lint and more xenix mods.
  16.     A Sample localize.xenix is provided.
  17.     recnews now takes a -a flag for moderated articles
  18.     Code from Stan Barber to allow readnews/postnews/checknews/postnews
  19.         to work with NNTP.
  20.  
  21. Fix:
  22.     cd to the src directory and apply the following patch.
  23.  
  24. Index: localize.nntp
  25. *** .d/localize.nntp    Thu Oct 15 18:37:31 1987
  26. --- localize.nntp    Thu Oct 15 18:29:59 1987
  27. ***************
  28. *** 0 ****
  29. --- 1,92 ----
  30. + # 
  31. + # The file "localize.nntp" should be used as a starting point from which
  32. + # to build a localize.sh from which nntp-capable programs can be built.
  33. + # Basically, you can use the regular localize.sh you use and add those line
  34. + # that contain #NNTP, NNTPSRC and SERVERFILE to make it work.
  35. + # The string NNTPSRC should be replaced with the location of your nntp source
  36. + # directory. The string SERVERFILE should be replaced with the location of
  37. + # the serverfile. See the nntp (Version 1.4) instructions for more information.
  38. + # 
  39. + # You will need nntp version 1.4 to make full use of these programs. They
  40. + # make some use of the XHDR extenstion in nntp version 1.4.
  41. + # 
  42. + # You do not need to include any reference to the dbm library. DBM may remain
  43. + # undefined. You may also want to remove $(OTHERS) from the line in the
  44. + # Makefile that starts with "all:".
  45. + # 
  46. + # You may want to include the line that begins with #RESOLVE in localize.sh
  47. + # if you want to link against the resolver library. I use it on my suns.
  48. + # 
  49. + # You will need to create a "mailpaths" file on each host that uses these
  50. + # programs. See the regular news documenation for information on the
  51. + # mailpaths file.
  52. + # 
  53. + # PROBLEMS:
  54. + # 
  55. + # 1. Distribution checking is disabled in postnews. nntp does not provide this
  56. + # information, so postnews cannot check the article before posting.
  57. + # 
  58. + # 2. History file support is marginal. nntp does not provided direct access
  59. + # to the history file information. nntp can tell if an article is not avail-
  60. + # able, but you cannot know if it was cancelled or expired or has not arrived
  61. + # yet.
  62. + # 
  63. + # 3. The recording feature is available, but you have to implement it on each
  64. + # host that uses these programs. nntp does not provide this information from
  65. + # the server.
  66. + # 
  67. + # 4. sys file searching is disabled. Again, nntp does not provide access to 
  68. + # this information from the server.
  69. + # 
  70. + # 5. XHDR support is necessary for some functions to work. This can be rewritten
  71. + # to avoid this, but I have not done it yet.
  72. + # 
  73. + # FINALLY
  74. + # 
  75. + # If you have bug reports on the nntp hunks of code, please feel free to let
  76. + # me know about it. I will do my best to fix them and route the fixes 
  77. + # through Rick Adams for patch releases.
  78. + # 
  79. + # Stan Barber
  80. + # Baylor College of Medicine
  81. + # uucp: {hoptoad,killer,rice}!academ!sob
  82. + # Internet: sob@tmc.edu
  83. + # 
  84. + rm -f Makefile
  85. + cp Makefile.dst Makefile
  86. + chmod u+w Makefile
  87. + ed Makefile  <<'EOF'
  88. + g/^#BSD4_2 /s///
  89. + g/^#V7 /s///
  90. + g/^#NNTP /s///
  91. + g/^#RESOLVE /s///
  92. + g/^#USG /d
  93. + g/^#EXCELAN /d
  94. + g/=fork/d
  95. + g/^#VMS /d
  96. + g/^#BSD4_3 /d
  97. + g/^#BSD4_1 /d
  98. + g/^all:/s/$(OTHERS)//
  99. + g/#NOTVMS/s/#NOTVMS//
  100. + g/-DDBM/s/-DDBM//
  101. + g/-ldbm/s/-ldbm//
  102. + g/NNTPSRC/s/NNTPSRC/\/usr\/src\/nntp/
  103. + w
  104. + q
  105. + EOF
  106. + rm -f defs.h
  107. + cp defs.dist defs.h
  108. + chmod u+w defs.h
  109. + ed defs.h << 'EOF'
  110. + g/NNTPSRC/s/NNTPSRC/\usr\/src\/nntp/
  111. + g/SERVERFILE/s/SERVERFILE/\/usr\/lib\/news\/server/
  112. + w
  113. + q
  114. + EOF
  115. + echo "Be sure to make a login for usenet and create the group news"
  116. + echo "Also, be sure to alter Makefile and defs.h to reflect the"
  117. + echo "user name, id number, group name and group id number in the"
  118. + echo "places documented."
  119. + echo "Finally, please set your organization name in defs.h"
  120. + echo "Look for #define MYORG for the string to alter."
  121. + echo "Good Luck."
  122. Index: nntp.c
  123. *** .d/nntp.c    Thu Oct 15 18:37:35 1987
  124. --- nntp.c    Thu Oct 15 18:30:01 1987
  125. ***************
  126. *** 0 ****
  127. --- 1,253 ----
  128. + /*
  129. +  * This software is Copyright 1987 by Stan Barber. 
  130. +  *
  131. +  * Permission is hereby granted to copy, reproduce, redistribute or otherwise
  132. +  * use this software as long as: there is no monetary profit gained
  133. +  * specifically from the use or reproduction or this software, it is not
  134. +  * sold, rented, traded or otherwise marketed, and this copyright notice is
  135. +  * included prominently in any copy made. 
  136. +  *
  137. +  * The author make no claims as to the fitness or correctness of this software
  138. +  * for any use whatsoever, and it is provided as is. Any use of this software
  139. +  * is at the user's own risk. 
  140. +  *
  141. +  * this is a file full of functions used by the various news client programs 
  142. +  */
  143. + #ifdef SCCSID
  144. + static char *SccsId = "@(#)nntp.c    2.2    10/15/87";
  145. + #endif    /* SCCSID */
  146. + #include "params.h"
  147. + static char *nntpserver;
  148. + static char ser_line[256];
  149. + static char active_file_name[512];
  150. + static char article_file_name[512];
  151. + static char last_group[256];
  152. + /*
  153. +  * open_server open a connection to the server 
  154. +  */
  155. + open_server()
  156. + {
  157. +     int response;
  158. +     /* open connection to nntpserver if appropriate */
  159. +     nntpserver = getserverbyfile(SERVER_FILE);
  160. +     if (nntpserver == NULL) {
  161. +         fprintf(stderr, "Can't get the name of the news server from %s\n",
  162. +             SERVER_FILE);
  163. +         fprintf(stderr, "Either fix this file, or put NNTPSERVER in your environment.");
  164. +         return -1;
  165. +     }
  166. +     response = server_init(nntpserver);
  167. +     if (response < 0) {
  168. +         fprintf(stderr, "Couldn't connect to %s news server, try again later.\n",
  169. +             nntpserver);
  170. +         return -1;
  171. +     }
  172. +     if (handle_server_response(response, nntpserver) < 0) {
  173. +         fprintf(stderr, "Cannot handle response from nntpserver.\n");
  174. +         return -1;
  175. +     }
  176. +     return 0;
  177. + }
  178. + /*
  179. +  * open_active gets the active file and returns an open file descriptor to
  180. +  * the calling program 
  181. +  */
  182. + FILE *
  183. + open_active()
  184. + {
  185. +     FILE *openfp;
  186. +     bzero(active_file_name, sizeof(active_file_name));
  187. +     put_server("LIST");    /* tell server we want the active file */
  188. +     (void) get_server(ser_line, sizeof(ser_line));
  189. +     if (*ser_line != CHAR_OK) {    /* and then see if that's ok */
  190. +         xerror("Can't get active file from server: \n%s\n", ser_line);
  191. +     }
  192. +     strcpy(active_file_name, "/tmp/nsact.XXXXXX");
  193. +     (void) mktemp(active_file_name);    /* make a temporary name */
  194. +     openfp = fopen(active_file_name, "w+");    /* and get ready */
  195. +     if (openfp == NULL)
  196. +         return NULL;
  197. +     while (get_server(ser_line, sizeof(ser_line)) >= 0) {    /* while */
  198. +         if (ser_line[0] == '.' && strlen(ser_line) == 1)
  199. +             /* there's another line */
  200. +             break;    /* get it and write it to */
  201. +         fputs(ser_line, openfp);
  202. +         putc('\n', openfp);
  203. +     }
  204. +     fseek(openfp, 0L, 0);    /* just get to the beginning */
  205. +     return openfp;
  206. + }
  207. + /*
  208. +  * active_name() returns the name of the temporary file that contains the
  209. +  * name of the current active file. 
  210. +  */
  211. + char *
  212. + active_name()
  213. + {
  214. +     if (active_file_name[0] == '\0')
  215. +         return NULL;
  216. +     return &active_file_name[0];
  217. + }
  218. + /*
  219. +  * set_group() set the current group returns NULL if failure "string" if
  220. +  * successful 
  221. +  */
  222. + char *
  223. + set_group(newsgroup)
  224. + char *newsgroup;
  225. + {
  226. +     char nntpbfr[256];
  227. +     if (newsgroup == NULL || *newsgroup == '\0')
  228. +         return NULL;
  229. +     if (strcmp(newsgroup, last_group)) {
  230. +         (void) sprintf(nntpbfr, "GROUP %s", newsgroup);
  231. +         put_server(nntpbfr);
  232. +         (void) get_server(ser_line, sizeof(ser_line));
  233. +         if (*ser_line != CHAR_OK)
  234. +             return NULL;
  235. +         strcpy(last_group, newsgroup);
  236. +     }
  237. +     return &ser_line[0];
  238. + }
  239. + /*
  240. +  * getarticle() returns an open file descriptor to the requested article. 
  241. +  */
  242. + FILE *
  243. + getarticle(newsgroup, number, command)
  244. + char *newsgroup, *command;
  245. + int number;
  246. + {
  247. +     FILE *fp;
  248. +     char nntpbfr[256];
  249. +     bzero(article_file_name, sizeof(article_file_name));
  250. +     if (set_group(newsgroup) == NULL)
  251. +         return NULL;
  252. +     strcpy(article_file_name, "/tmp/nsart.XXXXXX");
  253. +     if (mktemp(article_file_name) == NULL)
  254. +         return NULL;
  255. +     (void) sprintf(nntpbfr, "%s %ld", command, number);
  256. +     put_server(nntpbfr);
  257. +     (void) get_server(ser_line, sizeof(ser_line));
  258. +     if (*ser_line != CHAR_OK)
  259. +         return NULL;
  260. +     if ((fp = fopen(article_file_name, "w+")) == NULL) {
  261. +         /* and get ready */
  262. +         sync_server();
  263. +         return NULL;
  264. +     }
  265. +     while (get_server(ser_line, sizeof(ser_line)) >= 0) {    /* while */
  266. +         if (ser_line[0] == '.' && strlen(ser_line) == 1)
  267. +             /* there's another line */
  268. +             break;    /* get it and write it to */
  269. +         fputs(ser_line, fp);    /* the temp file */
  270. +         putc('\n', fp);
  271. +     }
  272. +     fseek(fp, 0L, 0);    /* just get to the beginning */
  273. +     return fp;
  274. + }
  275. + /*
  276. +  * article_name() returns the name of the temporary file that contains the
  277. +  * name of the current article file. 
  278. +  */
  279. + char *
  280. + article_name()
  281. + {
  282. +     if (article_file_name[0] == '\0')
  283. +         return NULL;
  284. +     return &article_file_name[0];
  285. + }
  286. + /*
  287. +  * group_name() returns the name of the last group accessed from nntp 
  288. +  */
  289. + char *
  290. + group_name()
  291. + {
  292. +     if (last_group[0] == '\0')
  293. +         return NULL;
  294. +     return &last_group[0];
  295. + }
  296. + /*
  297. +  * getartbyid retrieves an article by id number and returns an open file
  298. +  * descriptor for that article 
  299. +  */
  300. + FILE *
  301. + getartbyid(id)
  302. + char *id;
  303. + {
  304. +     FILE *fp;
  305. +     char nntpbfr[256];
  306. +     (void) sprintf(nntpbfr, "ARTICLE %s", id);
  307. +     put_server(nntpbfr);
  308. +     (void) get_server(ser_line, sizeof(ser_line));
  309. +     if (*ser_line != CHAR_OK) {
  310. +         fprintf(stderr, "Cannot fetch article %s\n", id);
  311. +         return NULL;
  312. +     }
  313. +     strcpy(article_file_name, "/tmp/nsart.XXXXXX");
  314. +     if (mktemp(article_file_name) == NULL)
  315. +         return NULL;
  316. +     if ((fp = fopen(article_file_name, "w+")) == NULL) {
  317. +         /* and get ready */
  318. +         sync_server();
  319. +         return NULL;
  320. +     }
  321. +     while (get_server(ser_line, sizeof(ser_line)) >= 0) {    /* while */
  322. +         if (ser_line[0] == '.' && strlen(ser_line) == 1)
  323. +             /* there's another line */
  324. +             break;    /* get it and write it to */
  325. +         fputs(ser_line, fp);    /* the temp file */
  326. +         putc('\n', fp);
  327. +     }
  328. +     fseek(fp, 0L, 0);    /* just get to the beginning */
  329. +     return fp;
  330. + }
  331. + /*
  332. +  * sync_server gobbles up the rest of the server output until it sees the .
  333. +  * on the beginning of a line by itself 
  334. +  */
  335. + sync_server()
  336. + {
  337. +     while (get_server(ser_line, sizeof(ser_line)) >= 0) {    /* while */
  338. +         if (ser_line[0] == '.' && strlen(ser_line) == 1)
  339. +             /* there's another line */
  340. +             break;    /* get it and throw it away */
  341. +     }
  342. + }
  343. + /*
  344. +  * strindex returns location of tx in sx 
  345. +  */
  346. + int
  347. + strindex(sx, tx)
  348. + char *sx, *tx;
  349. + {
  350. +     int i, n;
  351. +     n = strlen(tx);
  352. +     for (i = 0; sx[i] != '\0'; i++)
  353. +         if (strncmp(sx + i, tx, n) == 0)
  354. +             return i;
  355. +     return -1;
  356. + }
  357. Index: Makefile.dst
  358. Prereq: 1.24
  359. *** .d/Makefile.dst    Wed Oct  7 16:47:57 1987
  360. --- Makefile.dst    Thu Oct 15 19:06:04 1987
  361. ***************
  362. *** 1,2 ****
  363. ! # '@(#)Makefile.dst    1.24    9/24/87'
  364.   # Generic Makefile.
  365. --- 1,2 ----
  366. ! # '@(#)Makefile.dst    1.26    10/15/87'
  367.   # Generic Makefile.
  368. ***************
  369. *** 35,36 ****
  370. --- 35,39 ----
  371.   SCCSID = -DSCCSID
  372. + #NNTP SERVER= -DSERVER 
  373.   DEFS =    -DRNEWS=\"$(BINDIR)/rnews\" -DSPOOLDIR=\"$(SPOOLDIR)\" \
  374. ***************
  375. *** 38,40 ****
  376.       -DBINDIR=\"$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \
  377. !     -DNEWSGRP=\"$(NEWSGRP)\"
  378.   
  379. --- 41,43 ----
  380.       -DBINDIR=\"$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \
  381. !     -DNEWSGRP=\"$(NEWSGRP)\" ${SERVER}
  382.   
  383. ***************
  384. *** 48,50 ****
  385.   #V7 VFORK=-Dvfork=fork
  386.   #BSD4_1 VFORK=
  387. --- 51,53 ----
  388.   #V7 VFORK=-Dvfork=fork
  389. ! #EXCELAN NETINCLUDE= -I/usr/include/EXOS
  390.   #BSD4_1 VFORK=
  391. ***************
  392. *** 54,56 ****
  393.   #USG IBMFLAGS =
  394. ! #USG CFLAGS = ${DEBUG} -O $(IBMFLAGS) -DUSG -Dindex=strchr -Drindex=strrchr ${DEFS} ${SCCSID} ${VFORK}
  395.   #USG LFLAGS = ${DEBUG} -s -i $(IBMFLAGS)
  396. --- 57,59 ----
  397.   #USG IBMFLAGS =
  398. ! #USG CFLAGS = ${DEBUG} -O $(IBMFLAGS) -DUSG -Dindex=strchr -Drindex=strrchr ${DEFS} ${SCCSID} ${VFORK} ${NETINCLUDE}
  399.   #USG LFLAGS = ${DEBUG} -s -i $(IBMFLAGS)
  400. ***************
  401. *** 57,60 ****
  402.   #USG LIBS =
  403. ! #USG LINTFLAGS = ${DEFS}
  404. ! #V7 CFLAGS = ${DEBUG} -O -DDBM ${DEFS} ${SCCSID} ${VFORK}
  405.   #V7 LFLAGS = ${DEBUG}
  406. --- 60,63 ----
  407.   #USG LIBS =
  408. ! #USG LINTFLAGS = ${DEFS} ${NETINCLUDE}
  409. ! #V7 CFLAGS = ${DEBUG} -DDBM ${DEFS} ${SCCSID} ${VFORK} ${NETINCLUDE}
  410.   #V7 LFLAGS = ${DEBUG}
  411. ***************
  412. *** 61,63 ****
  413.   #V7 LIBS = -ldbm
  414. ! #V7 LINTFLAGS = -chba -DDBM ${DEFS}
  415.   #BSD4_1 LIBS = -ldbm -ljobs
  416. --- 64,66 ----
  417.   #V7 LIBS = -ldbm
  418. ! #V7 LINTFLAGS = -chba -DDBM ${DEFS} ${NETINCLUDE}
  419.   #BSD4_1 LIBS = -ldbm -ljobs
  420. ***************
  421. *** 64,65 ****
  422. --- 67,71 ----
  423.   
  424. + #EXCELAN NETLIB = -lsocket
  425. + #RESOLVE NETLIB = -lresolv
  426.   TERMLIB = -ltermlib
  427. ***************
  428. *** 75,78 ****
  429.   
  430. ! #V7 MISC = uname.o
  431. ! #USG MISC = ftime.o
  432.   OBJECTS = funcs.o funcs2.o header.o ndir.o $(MISC) getdate.o 
  433. --- 81,85 ----
  434.   
  435. ! #NNTP CLIENTLIB = clientlib.o nntp.o
  436. ! #V7 MISC = uname.o ${CLIENTLIB}
  437. ! #USG MISC = ftime.o ${CLIENTLIB}
  438.   OBJECTS = funcs.o funcs2.o header.o ndir.o $(MISC) getdate.o 
  439. ***************
  440. *** 89,90 ****
  441. --- 96,99 ----
  442.   
  443. + #NNTP CSRCS = NNTPSRC/common/clientlib.c nntp.c
  444.   SRCS = funcs.c funcs2.c header.c
  445. ***************
  446. *** 91,97 ****
  447.   ISRCS = inews.c ifuncs.c iextern.c control.c fullname.c  $(SRCS)
  448. ! PSRCS = postnews.c rextern.c funcs.c
  449.   RSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c readr.c process.c  \
  450. !     digest.c $(SRCS)
  451.   VSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c process.c $(SRCS) \
  452. !     visual.c virtterm.c
  453.   ESRCS = expire.c header.c funcs.c iextern.c \
  454. --- 100,106 ----
  455.   ISRCS = inews.c ifuncs.c iextern.c control.c fullname.c  $(SRCS)
  456. ! PSRCS = postnews.c rextern.c funcs.c $(CSRCS)
  457.   RSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c readr.c process.c  \
  458. !     digest.c $(SRCS) $(CSRCS)
  459.   VSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c process.c $(SRCS) \
  460. !     visual.c virtterm.c $(CSRCS)
  461.   ESRCS = expire.c header.c funcs.c iextern.c \
  462. ***************
  463. *** 101,102 ****
  464. --- 110,113 ----
  465.   
  466.   UTILS = uurec recnews sendnews expire batch caesar recmail \
  467. ***************
  468. *** 110,115 ****
  469.   
  470. ! install: all help vnews.help
  471.       chmod 755 ./installit
  472. !     -mkdir $(DESTDIR)$(BINDIR)
  473. !     -mkdir $(DESTDIR)$(LIBDIR)
  474.       for i in $(COMMANDS); do \
  475. --- 121,126 ----
  476.   
  477. ! install: all help vnews.help installit
  478.       chmod 755 ./installit
  479. !     -test -d $(DESTDIR)$(BINDIR) || mkdir $(DESTDIR)$(BINDIR)
  480. !     -test -d $(DESTDIR)$(LIBDIR) || mkdir $(DESTDIR)$(LIBDIR)
  481.       for i in $(COMMANDS); do \
  482. ***************
  483. *** 175,177 ****
  484.   readnews:  $(P) $(ROBJECTS)
  485. !     $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(LIBS)
  486.   #VMS     mv readnews.exe readnews
  487. --- 186,188 ----
  488.   readnews:  $(P) $(ROBJECTS)
  489. !     $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(LIBS) $(NETLIB)
  490.   #VMS     mv readnews.exe readnews
  491. ***************
  492. *** 178,179 ****
  493. --- 189,196 ----
  494.   
  495. + #NNTP clientlib.o: NNTPSRC/common/clientlib.c
  496. + #NNTP     $(CC) $(CFLAGS) -c NNTPSRC/common/clientlib.c
  497. + #NNTP nntp.o: nntp.c
  498. + #NNTP     $(CC) $(CFLAGS) -c nntp.c
  499.   funcs.o:  funcs.c params.h defs.h header.h Makefile
  500. ***************
  501. *** 201,203 ****
  502.   postnews: $(P) $(POBJECTS)
  503. !     $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews
  504.   #VMS     mv postnews.exe postnews
  505. --- 218,220 ----
  506.   postnews: $(P) $(POBJECTS)
  507. !     $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews $(NETLIB)
  508.   #VMS     mv postnews.exe postnews
  509. ***************
  510. *** 204,207 ****
  511.   
  512. ! postnews.o: postnews.c defs.h params.h header.h Makefile
  513. !     $(CC) $(CFLAGS) -c postnews.c
  514.   
  515. --- 221,224 ----
  516.   
  517. ! postnews.o: postnews.c defs.h params.h header.h  Makefile
  518. !     $(CC) $(CFLAGS) -c postnews.c 
  519.   
  520. ***************
  521. *** 226,228 ****
  522.   vnews:    $(P) $(VOBJECTS)
  523. !     $(CC) $(LFLAGS) $(VOBJECTS) $(TERMLIB) $(LIBS) -o $@
  524.   #VMS     mv vnews.exe vnews
  525. --- 243,245 ----
  526.   vnews:    $(P) $(VOBJECTS)
  527. !     $(CC) $(LFLAGS) $(VOBJECTS)  -o $@  $(TERMLIB) $(LIBS) $(NETLIB)
  528.   #VMS     mv vnews.exe vnews
  529. ***************
  530. *** 248,250 ****
  531.   
  532. ! recnews:  recnews.c defs.h header.h Makefile
  533.       $(CC) $(CFLAGS) $(LFLAGS) recnews.c -o recnews
  534. --- 265,267 ----
  535.   
  536. ! recnews:  recnews.c defs.h header.h params.h Makefile
  537.       $(CC) $(CFLAGS) $(LFLAGS) recnews.c -o recnews
  538. ***************
  539. *** 283,286 ****
  540.   
  541. ! checknews:  $(P) checknews.o process.o cpathinit.o rextern.o
  542. !     $(CC) $(LFLAGS) checknews.o process.o cpathinit.o rextern.o -o checknews
  543.   #VMS     mv checknews.exe checknews
  544. --- 300,303 ----
  545.   
  546. ! checknews:  $(P) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) 
  547. !     $(CC) $(LFLAGS) checknews.o process.o cpathinit.o rextern.o $(NNTP) $(CLIENTLIB) -o checknews $(NETLIB)
  548.   #VMS     mv checknews.exe checknews
  549. Index: checknews.c
  550. Prereq: 2.29
  551. *** .d/checknews.c    Tue Apr  7 13:58:55 1987
  552. --- checknews.c    Thu Oct 15 18:29:47 1987
  553. ***************
  554. *** 18,20 ****
  555.   #ifdef SCCSID
  556. ! static char    *SccsId = "@(#)checknews.c    2.29    4/6/87";
  557.   #endif /* SCCSID */
  558. --- 18,20 ----
  559.   #ifdef SCCSID
  560. ! static char    *SccsId = "@(#)checknews.c    2.30    10/15/87";
  561.   #endif /* SCCSID */
  562. ***************
  563. *** 129,130 ****
  564. --- 129,134 ----
  565.   #endif
  566. + #ifdef SERVER
  567. +     if (open_server() < 0)
  568. +         xerror("NNTP connection failed.");
  569. + #endif /* SERVER */
  570.       ptr = getenv("NEWSRC");
  571. ***************
  572. *** 213,217 ****
  573.       }
  574.       if ((actfp = fopen(ACTIVE, "r")) == NULL)
  575.           xerror("Cannot open active newsgroups file");
  576.   #ifdef DEBUG
  577. --- 217,224 ----
  578.       }
  579. + #ifdef SERVER
  580. +     if ((actfp = open_active(ACTIVE, "r")) == NULL)
  581. + #else /* !SERVER */
  582.       if ((actfp = fopen(ACTIVE, "r")) == NULL)
  583. + #endif /* !SERVER */
  584.           xerror("Cannot open active newsgroups file");
  585.   #ifdef DEBUG
  586. ***************
  587. *** 544,545 ****
  588. --- 551,555 ----
  589.   {
  590. + #ifdef SERVER
  591. +     close_server();
  592. + #endif /* SERVER */
  593.       exit(i);
  594. Index: defs.dist
  595. Prereq: 2.58
  596. *** .d/defs.dist    Wed Oct  7 16:50:11 1987
  597. --- defs.dist    Thu Oct 15 18:29:48 1987
  598. ***************
  599. *** 16,18 ****
  600.   
  601. ! /*    @(#)defs.dist    2.58    4/10/87     */
  602.   
  603. --- 16,18 ----
  604.   
  605. ! /*    @(#)defs.dist    2.59    10/15/87    */
  606.   
  607. ***************
  608. *** 68,71 ****
  609.   /* #define BSD4_2        /* If you are running 4.2  or 4.3 BSD    */
  610. ! /* #define BSD4_1C        /* If you are running 4.1C BSD        */
  611.   /* #define LOCKF        /* If you have the lockf() sys call */
  612.   /* #define ALWAYSALIAS        /* temporary kludge for conversion */
  613. --- 68,75 ----
  614.   /* #define BSD4_2        /* If you are running 4.2  or 4.3 BSD    */
  615. ! /* #define BSD2_10        /* If you are running 2.10 BSD */
  616.   /* #define LOCKF        /* If you have the lockf() sys call */
  617. + /* #define DOGETUSER        /* Always do 'getuser' so can't fake name */
  618. + /* #define LOGDIR        /* use the 'logdir' call on path lookups */
  619. + /* #define MKDIRSUB        /* your system has mkdir as a syscall */
  620. + /* #define READDIR        /* your system has readdir() in libc */
  621.   /* #define ALWAYSALIAS        /* temporary kludge for conversion */
  622. ***************
  623. *** 115 ****
  624. --- 119,131 ----
  625.   #define NGDELIM    ','    /* delimit character in news group line        */
  626. + /* for NNTP */
  627. + #ifdef SERVER
  628. + # include "NNTPSRC/common/response_codes.h"
  629. + # define SERVER_FILE "SERVERFILE"
  630. + #endif /* SERVER */
  631. + #ifdef M_XENIX
  632. + #define index    strchr
  633. + #define rindex    strrchr
  634. + #define    vfork    fork
  635. + #endif /* M_XENIX */
  636. Index: expire.c
  637. Prereq: 2.54
  638. *** .d/expire.c    Thu Oct  8 00:22:29 1987
  639. --- expire.c    Thu Oct 15 18:29:50 1987
  640. ***************
  641. *** 19,21 ****
  642.   #ifdef SCCSID
  643. ! static char    *SccsId = "@(#)expire.c    2.54    10/7/87";
  644.   #endif /* SCCSID */
  645. --- 19,21 ----
  646.   #ifdef SCCSID
  647. ! static char    *SccsId = "@(#)expire.c    2.55    10/15/87";
  648.   #endif /* SCCSID */
  649. ***************
  650. *** 769,773 ****
  651.           (void) rename(ARTFILE, OARTFILE);
  652. - #endif /* !DBM */
  653.           (void) rename(NARTFILE, ARTFILE);
  654. - #ifdef DBM
  655.           if (dorebuild)
  656. --- 769,771 ----
  657. ***************
  658. *** 807,810 ****
  659.           if (i++ > 5) {
  660. !             error("Can't get lock for expire");
  661. !             exit(1);
  662.           }
  663. --- 805,807 ----
  664.           if (i++ > 5) {
  665. !             xerror("Can't get lock for expire");
  666.           }
  667. Index: funcs2.c
  668. Prereq: 1.21
  669. *** .d/funcs2.c    Thu Oct  8 00:20:34 1987
  670. --- funcs2.c    Thu Oct 15 18:29:52 1987
  671. ***************
  672. *** 19,21 ****
  673.   #ifdef SCCSID
  674. ! static char    *SccsId = "@(#)funcs2.c    1.21    10/7/87";
  675.   #endif /* SCCSID */
  676. --- 19,21 ----
  677.   #ifdef SCCSID
  678. ! static char    *SccsId = "@(#)funcs2.c    1.22    10/15/87";
  679.   #endif /* SCCSID */
  680. ***************
  681. *** 43,45 ****
  682.               xerror("Cannot get user's name");
  683. !         if ( username == NULL || username[0] == 0)
  684.               username = AllocCpy(p->pw_name);
  685. --- 43,46 ----
  686.               xerror("Cannot get user's name");
  687. !         if ( username == NULL || username[0] == 0 ||
  688. !             STRCMP(username, "Unknown") == 0)
  689.               username = AllocCpy(p->pw_name);
  690. ***************
  691. *** 51,52 ****
  692. --- 52,55 ----
  693.   
  694. + /* no sys file on clients via nntp */
  695. + #ifndef SERVER
  696.   static    FILE    *sysfile;
  697. ***************
  698. *** 185,186 ****
  699. --- 188,190 ----
  700.   }
  701. + #endif /* SERVER */
  702.   
  703. ***************
  704. *** 428,429 ****
  705. --- 432,434 ----
  706.   
  707.   /*
  708. ***************
  709. *** 441,442 ****
  710. --- 446,452 ----
  711.       register char *p;
  712. + #ifdef SERVER
  713. +     char workspace[256];
  714. +     struct tm *tm;
  715. +     long clock;
  716. + #else /* !SERVER */
  717.   #ifdef DBM
  718. ***************
  719. *** 448,450 ****
  720.   #endif /* !DBM */
  721.       /* Try to understand old artid's as well.  Assume .UUCP domain. */
  722. --- 458,460 ----
  723.   #endif /* !DBM */
  724. ! #endif /* !SERVER */
  725.       /* Try to understand old artid's as well.  Assume .UUCP domain. */
  726. ***************
  727. *** 459,460 ****
  728. --- 469,548 ----
  729.           (void) strcpy(oidbuf, artid);
  730. + #ifdef SERVER
  731. +     (void) sprintf(lbuf,"STAT %s",oidbuf);
  732. +     put_server(lbuf);
  733. +     (void) get_server(workspace,sizeof(workspace));
  734. +     if (*workspace != CHAR_OK)
  735. +         return NULL;
  736. +     (void) sprintf(lbuf,"XHDR xref %s",oidbuf);
  737. +     put_server(lbuf);
  738. +     (void) get_server(workspace,sizeof(workspace));    /* get response */
  739. +     if (*workspace != CHAR_OK)
  740. +         return NULL;        /* old style nntp */
  741. +     (void) get_server(workspace,sizeof(workspace)); /* get header line */
  742. +     sync_server();    /* get rid of the rest of it */
  743. +     p = index(workspace,' ');
  744. +     p++;
  745. +     if (*p == '(') {    /* there is no xref line */
  746. +         long s,sm;
  747. +         FILE * af;
  748. +         char n[100], buf[100], *name;
  749. +         (void) sprintf(lbuf,"XHDR newsgroups %s",oidbuf);
  750. +         put_server(lbuf);
  751. +         (void) get_server(workspace,sizeof(workspace));
  752. +         if (*workspace != CHAR_OK)
  753. +             return NULL;
  754. +         (void) get_server(workspace,sizeof(workspace));
  755. +         sync_server();
  756. +         if ((name = index(workspace,' ')) == NULL)
  757. +             return NULL;
  758. +         name++;
  759. +         /* now we fetch the line from the active file */
  760. +         af = xfopen(ACTIVE, "r");
  761. +         while (fgets(buf, sizeof(buf), af) != NULL) {
  762. +             if (sscanf(buf, "%s %ld %ld", n, &s, &sm) == 3 &&
  763. +                  STRCMP(n, name) == 0) {
  764. +                 break;
  765. +             }
  766. +         }
  767. +         (void) fclose(af);
  768. +         /* now we ask for a message ids in that newsgroup */
  769. +         if (set_group(name) == NULL)
  770. +             return NULL;
  771. +         (void) sprintf(lbuf, "XHDR message-id %d-%d", sm, s);
  772. +         put_server(lbuf);
  773. +         (void) get_server(workspace,sizeof(workspace));
  774. +         if (*workspace != CHAR_OK)
  775. +             return NULL;
  776. +         while (    get_server(workspace,sizeof(workspace)) >= 0) {
  777. +             if (*workspace == '.'  && strlen(workspace) == 1) 
  778. +                 return NULL;
  779. +             if (strindex(workspace,oidbuf) > -1)
  780. +                 break;
  781. +         }
  782. +         sync_server();
  783. +         *(index(workspace,' ')) = '\0';
  784. +         (void) sprintf(lbuf, "%s/%s", n, workspace);
  785. +         bzero(workspace,sizeof(workspace));
  786. +         strcpy(workspace, lbuf);
  787. +     } else {
  788. +         bzero(lbuf, sizeof(lbuf));
  789. +         strcpy(lbuf, p);
  790. +         while (*p != '\0' && (p = index(lbuf,':')) != NULL) {
  791. +             *p = '/';
  792. +             p++;
  793. +         }
  794. +         strcpy(workspace, lbuf);
  795. +     }
  796. +     p = &workspace[0];
  797. +     time(&clock);        
  798. +     tm = localtime(&clock);
  799. + #ifdef USG
  800. +     sprintf(lbuf, "%s\t%2.2d/%2.2d/%d %2.2d:%2.2d\t%s",
  801. + #else /* !USG */
  802. +     sprintf(lbuf, "%s\t%02d/%02d/%d %02d:%02d\t%s",
  803. + #endif /* !USG */
  804. +     oidbuf,tm->tm_mon,tm->tm_mday,tm->tm_year,tm->tm_hour,tm->tm_min,p);
  805. +     return lbuf;        /* not really the same, but close */
  806. + #else    /* !SERVER */
  807.       lcase(oidbuf);
  808. ***************
  809. *** 491,492 ****
  810. --- 579,581 ----
  811.       return NULL;
  812. + #endif    /* !SERVER */
  813.   }
  814. ***************
  815. *** 537,539 ****
  816. --- 626,638 ----
  817.       if (p) {
  818. + #ifdef SERVER
  819. +     if ((rv = getartbyid(p)) != NULL) {
  820. +         strcpy(fname, article_name());
  821. +         (void) fclose(rv);
  822. +         rv = NULL;
  823. +     }
  824. +     else
  825. +         xerror("Cannot hfopen article %s", artid);
  826. + #else     /* !SERVER */
  827.           (void) strcpy(fname, dirname(p));
  828. + #endif    /* !SERVER */
  829.           rv = fopen(fname, "r");    /* NOT xfopen! */
  830. ***************
  831. *** 542,543 ****
  832. --- 641,645 ----
  833.       }
  834. + #ifdef SERVER
  835. +     (void) unlink(fname);
  836. + #endif /* !SERVER */
  837.       return rv;
  838. ***************
  839. *** 544,547 ****
  840.   }
  841. ! #ifdef DBM
  842.   /*
  843. --- 646,649 ----
  844.   }
  845. ! #ifndef SERVER
  846. ! # ifdef DBM
  847.   /*
  848. ***************
  849. *** 559,561 ****
  850.   }
  851. ! #endif
  852.   
  853. --- 661,664 ----
  854.   }
  855. ! # endif /* DBM */
  856. ! #endif    /* !SERVER */
  857.   
  858. Index: inews.c
  859. Prereq: 2.81
  860. *** .d/inews.c    Thu Oct  8 00:22:03 1987
  861. --- inews.c    Thu Oct 15 18:29:58 1987
  862. ***************
  863. *** 19,21 ****
  864.   #ifdef SCCSID
  865. ! static char    *SccsId = "@(#)inews.c    2.81    10/7/87";
  866.   #endif /* SCCSID */
  867. --- 19,21 ----
  868.   #ifdef SCCSID
  869. ! static char    *SccsId = "@(#)inews.c    2.82    10/15/87";
  870.   #endif /* SCCSID */
  871. ***************
  872. *** 28,32 ****
  873.   
  874. ! #  ifdef F_RDLCK
  875.   struct flock news_lock;
  876. ! #  endif /* F_RDLCK */
  877.   # endif /* LOCKF */
  878. --- 28,32 ----
  879.   
  880. ! # if defined(F_RDLCK) && defined(F_SETLK)
  881.   struct flock news_lock;
  882. ! #  endif /* F_RDLCK  && F_SETLK */
  883.   # endif /* LOCKF */
  884. ***************
  885. *** 138,140 ****
  886.   #ifdef    LOCKF
  887. ! # ifdef    F_RDLCK
  888.       news_lock.l_type = F_RDLCK;
  889. --- 138,140 ----
  890.   #ifdef    LOCKF
  891. ! # if    defined(F_RDLCK) && defined(F_SETLK)
  892.       news_lock.l_type = F_RDLCK;
  893. Index: installit
  894. Prereq: 2.3
  895. *** .d/installit    Wed Oct  7 16:53:08 1987
  896. --- installit    Thu Oct 15 18:29:58 1987
  897. ***************
  898. *** 2,4 ****
  899.   #
  900. ! #    '@(#)installit    2.3    9/24/87'
  901.   #    From install.sh    4.8    (Berkeley)    3/6/86
  902. --- 2,4 ----
  903.   #
  904. ! #    '@(#)installit    2.4    10/15/87'
  905.   #    From install.sh    4.8    (Berkeley)    3/6/86
  906. ***************
  907. *** 7,9 ****
  908.   PATH=/bin:/etc:/usr/bin:/usr/ucb
  909. ! export BATH
  910.   cmd=""
  911. --- 7,9 ----
  912.   PATH=/bin:/etc:/usr/bin:/usr/ucb
  913. ! export PATH
  914.   cmd=""
  915. Index: localize.xenix
  916. *** .d/localize.xenix    Wed Oct  7 16:53:23 1987
  917. --- localize.xenix    Thu Oct 15 18:30:00 1987
  918. ***************
  919. *** 0 ****
  920. --- 1,49 ----
  921. + #
  922. + #    This is correct for the
  923. + #        XENIX (empty) 5.0 iAPX286 1 1006 (empty)
  924. + #    version. There are so many versions of xenix out there
  925. + #    that it is probabably wrong for yours. At least this should give
  926. + #    you a starting point.
  927. + #
  928. + rm -f Makefile
  929. + cp Makefile.dst Makefile
  930. + chmod u+w Makefile
  931. + ed - Makefile  <<'EOF'
  932. + g/^#USG /s///
  933. + g/^#V7 /d
  934. + g/^#VMS /d
  935. + g/^#BSD4_[123] /d
  936. + g/#NOTVMS/s/#NOTVMS.*//
  937. + g/^MISC *=/s/$/ uname.o/
  938. + g/^UUXFLAGS/s//UUXFLAGS =/
  939. + g/^IBMFLAGS/s/$/ -M2l -LARGE -DM_XENIX/
  940. + g/^LIBS/s/$/ -lx -ldbm/
  941. + g/termlib/s//curses -ltermcap/
  942. + g/^LFLAGS =/s/$/ -F 8000 -m ${@}.map/
  943. + g/rm -f $(COMMANDS) $(OTHERS) \*.o a.out/s/a.out/\*.map a.out/
  944. + g/-o inews/s/-o/-m inews.map -F 5000 -o/
  945. + g/-o readnews/s/-o/-m readnews.map -F 3000 -o/
  946. + g/-o vnews /s/-o/-F 5000 -m vnews.map -o /
  947. + g/-o checknews/s/-o/-F E000 -o/
  948. + g/-o expire/s/-o/-F A000 -o/
  949. + g/-Dvfork=fork/s///
  950. + g/-Dindex=strchr/s///
  951. + g/-Drindex=strrchr/s///
  952. + g/^SCCSID/s/^/#/
  953. + w
  954. + q
  955. + EOF
  956. + rm -f defs.h
  957. + cp defs.dist defs.h
  958. + chmod u+w defs.h
  959. + ed - defs.h <<'EOF'
  960. + g/#define TMAIL/s//\/\* #define TMAIL/
  961. + g/\/usr\/ucb\/more/s//\/usr\/bin\/more/
  962. + g/uux - -r -z/s//uux - /
  963. + g/uucpname/s//systemid/
  964. + g/\/\* #define LOCKF/s//#define LOCKF/
  965. + g/\/\* #define UUNAME/s/...//
  966. + w
  967. + q
  968. + EOF
  969. Index: ndir.c
  970. Prereq: 1.11
  971. *** .d/ndir.c    Tue Mar 24 13:51:46 1987
  972. --- ndir.c    Thu Oct 15 18:30:00 1987
  973. ***************
  974. *** 2,3 ****
  975. --- 2,6 ----
  976.   #if !defined(BSD4_2) && !defined(BSD4_1C) && !defined(HP9K5)
  977. + #ifdef M_XENIX
  978. + #include <sys/types.h>
  979. + #endif /* M_XENIX */
  980.   #include <sys/param.h>
  981. ***************
  982. *** 6,8 ****
  983.   #ifdef SCCSID
  984. ! static char    *SccsId = "@(#)ndir.c    1.11    3/20/87";
  985.   #endif /* SCCSID */
  986. --- 9,11 ----
  987.   #ifdef SCCSID
  988. ! static char    *SccsId = "@(#)ndir.c    1.12    10/15/87";
  989.   #endif /* SCCSID */
  990. Index: params.h
  991. Prereq: 2.24
  992. *** .d/params.h    Thu Oct  8 00:22:15 1987
  993. --- params.h    Thu Oct 15 18:30:02 1987
  994. ***************
  995. *** 4,6 ****
  996.   
  997. ! /*    @(#)params.h    2.24    10/7/87    */
  998.   
  999. --- 4,6 ----
  1000.   
  1001. ! /*    @(#)params.h    2.25    10/15/87    */
  1002.   
  1003. ***************
  1004. *** 160 ****
  1005. --- 160,180 ----
  1006.   #define PREFIX(a,b)  ((*(a) != *(b)) ? FALSE : prefix((a)+1, (b)+1))
  1007. + #ifdef SERVER
  1008. + /* from clientlib.c */
  1009. + extern    char    *getserverbyfile();
  1010. + extern    int    server_init();
  1011. + extern  void    put_server();
  1012. + extern    int    get_server();
  1013. + extern    void    close_server();
  1014. + /* from nntp.c */
  1015. + extern    FILE    *open_active();
  1016. + extern    int    open_server();
  1017. + extern    char    *set_group();
  1018. + extern    char    *active_name();
  1019. + extern    char    *group_name();
  1020. + extern    FILE    *getarticle();
  1021. + extern    FILE    *getartbyid();
  1022. + extern    char    *article_name();
  1023. + extern    void    sync_server();
  1024. + extern    int    strindex();
  1025. + #endif /* SERVER */
  1026. Index: patchlevel.h
  1027. *** .d/patchlevel.h    Thu Oct  8 00:22:21 1987
  1028. --- patchlevel.h    Thu Oct 15 18:30:17 1987
  1029. ***************
  1030. *** 1,3 ****
  1031. ! #define    PATCHLEVEL    10
  1032.   
  1033. ! #define NEWS_VERSION   "B 2.11 10/07/87"
  1034. --- 1,3 ----
  1035. ! #define    PATCHLEVEL    11
  1036.   
  1037. ! #define NEWS_VERSION   "B 2.11 10/15/87"
  1038. Index: postnews.c
  1039. Prereq: 1.32
  1040. *** .d/postnews.c    Thu Oct  8 00:23:21 1987
  1041. --- postnews.c    Thu Oct 15 18:30:05 1987
  1042. ***************
  1043. *** 19,21 ****
  1044.   #ifdef SCCSID
  1045. ! static char    *SccsId = "@(#)postnews.c    1.32    10/7/87";
  1046.   #endif /* SCCSID */
  1047. --- 19,21 ----
  1048.   #ifdef SCCSID
  1049. ! static char    *SccsId = "@(#)postnews.c    1.33    10/15/87";
  1050.   #endif /* SCCSID */
  1051. ***************
  1052. *** 109,110 ****
  1053. --- 109,115 ----
  1054.               }
  1055. + #ifdef SERVER
  1056. +             if (getarticle(ng, num, "ARTICLE") == NULL)
  1057. +                     goto nothere;
  1058. +             strcpy(original, article_name());
  1059. + #else    /* !SERVER */
  1060.               (void) sprintf(original, "%s/%s", SPOOL, ng);
  1061. ***************
  1062. *** 115,117 ****
  1063.               (void) strcat(original, num);
  1064.               if ((fd=open(original,0)) >= 0) {
  1065. --- 120,122 ----
  1066.               (void) strcat(original, num);
  1067. ! #endif    /* !SERVER */
  1068.               if ((fd=open(original,0)) >= 0) {
  1069. ***************
  1070. *** 126,127 ****
  1071. --- 131,135 ----
  1072.               } else
  1073. + #ifdef SERVER
  1074. + nothere:
  1075. + #endif    /* !SERVER */
  1076.                   printf("I can't find that article.\n");
  1077. ***************
  1078. *** 234,236 ****
  1079. --- 242,246 ----
  1080.       }
  1081. + #ifndef SERVER
  1082.       printf("For a list of newsgroups, type ?\n");
  1083. + #endif    /* !SERVER */
  1084.       n = 0;
  1085. ***************
  1086. *** 245,246 ****
  1087. --- 255,257 ----
  1088.                   return TRUE;
  1089. + #ifndef SERVER
  1090.           if (buf[0] == '?'){
  1091. ***************
  1092. *** 266,267 ****
  1093. --- 277,279 ----
  1094.           }
  1095. + #endif    /* !SERVER */
  1096.           if (valid_ng(buf, &i, &i, &canpost)) {
  1097. ***************
  1098. *** 345,346 ****
  1099. --- 357,361 ----
  1100.   
  1101. + #ifdef SERVER
  1102. +         return;        /* can't do this yet */
  1103. + #else    /* !SERVER */
  1104.           /* Check that it's a proper distribution */
  1105. ***************
  1106. *** 385,386 ****
  1107. --- 400,402 ----
  1108.           }
  1109. + #endif    /* !SERVER */
  1110.       }
  1111. ***************
  1112. *** 544,546 ****
  1113.   
  1114. !     if (ngmatch(newsgroups, "rec.humor,!rec.humor.d")) {
  1115.           if (askyes("Could this be offensive to anyone? ","")) {
  1116. --- 560,562 ----
  1117.   
  1118. !     if (ngmatch(newsgroups, "rec.humor,!rec.humor.all")) {
  1119.           if (askyes("Could this be offensive to anyone? ","")) {
  1120. ***************
  1121. *** 742,744 ****
  1122. --- 758,769 ----
  1123.       pathinit();
  1124. + #ifdef SERVER
  1125. +     if (open_server() < 0) 
  1126. +         xerror("Server error");
  1127. +             /* do something to some up with distributions */
  1128. +     if ((fd = open_active()) == NULL)
  1129. +         xerror("Server error");
  1130. +     strcpy(ACTIVE,active_name());
  1131. + #else    /* !SERVER */
  1132.       (void) sprintf(buf, "%s/%s", LIB, "distributions");
  1133.       fd = xfopen(buf, "r");
  1134. ***************
  1135. *** 751,752 ****
  1136. --- 776,778 ----
  1137.       }
  1138. + #endif    /* !SERVER */
  1139.       (void) fclose(fd);
  1140. Index: readnews.c
  1141. Prereq: 2.32
  1142. *** .d/readnews.c    Wed Oct  7 16:54:09 1987
  1143. --- readnews.c    Thu Oct 15 18:30:06 1987
  1144. ***************
  1145. *** 5,7 ****
  1146.   #ifdef SCCSID
  1147. ! static char    *SccsId = "@(#)readnews.c    2.32    3/21/87";
  1148.   #endif /* SCCSID */
  1149. --- 5,7 ----
  1150.   #ifdef SCCSID
  1151. ! static char    *SccsId = "@(#)readnews.c    2.33    10/15/87";
  1152.   #endif /* SCCSID */
  1153. ***************
  1154. *** 54,59 ****
  1155.       gid = getgid();
  1156. !     duid = 0;
  1157. !     dgid = 0;
  1158.       (void) ftime(&Now);
  1159.       /* give reasonable error message if SPOOL directory
  1160. --- 54,58 ----
  1161.       gid = getgid();
  1162. !     duid = geteuid();
  1163. !     dgid = getegid();
  1164.       (void) ftime(&Now);
  1165.       /* give reasonable error message if SPOOL directory
  1166. ***************
  1167. *** 62,64 ****
  1168. --- 61,67 ----
  1169.        */
  1170. + #ifdef SERVER
  1171. +     if (open_server() < 0)
  1172. + #else    /* !SERVER */
  1173.       if (access(SPOOL, 05))
  1174. + #endif    /* !SERVER */
  1175.       {
  1176. ***************
  1177. *** 67,69 ****
  1178.       }
  1179.   #ifndef SHELL
  1180. --- 70,71 ----
  1181. ***************
  1182. *** 147,149 ****
  1183.                   optflag = FALSE;
  1184. !             if (!strncmp(rcbuf, "options ", 8))
  1185.                   optflag = TRUE;
  1186. --- 149,151 ----
  1187.                   optflag = FALSE;
  1188. !             if (!STRNCMP(rcbuf, "options ", 8))
  1189.                   optflag = TRUE;
  1190. ***************
  1191. *** 219,226 ****
  1192.       } else {
  1193. !         int (* old)();
  1194. !         if ((old = signal(SIGQUIT, SIG_IGN)) != SIG_IGN)
  1195.               (void) signal(SIGQUIT, cleanup);
  1196. !         if ((old = signal(SIGHUP, SIG_IGN)) != SIG_IGN)
  1197.               (void) signal(SIGHUP, cleanup);
  1198. !         if ((old = signal(SIGINT, SIG_IGN)) != SIG_IGN)
  1199.               (void) signal(SIGINT, cleanup);
  1200. --- 221,227 ----
  1201.       } else {
  1202. !         if (signal(SIGQUIT, SIG_IGN) != SIG_IGN)
  1203.               (void) signal(SIGQUIT, cleanup);
  1204. !         if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
  1205.               (void) signal(SIGHUP, cleanup);
  1206. !         if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  1207.               (void) signal(SIGINT, cleanup);
  1208. ***************
  1209. *** 261,262 ****
  1210. --- 262,270 ----
  1211.       }
  1212. + #ifdef SERVER
  1213. +     if ((actfp = open_active()) == NULL)
  1214. +         xerror("Cannot open active newsgroups file");
  1215. +     strcpy(ACTIVE, active_name());
  1216. +     (void) fclose(actfp);
  1217. +     actfp = NULL;
  1218. + #endif    /* !SERVER */
  1219.       sortactive();
  1220. ***************
  1221. *** 263,265 ****
  1222.       actfp = xfopen(ACTIVE, "r");
  1223.   #ifdef DEBUG
  1224. --- 271,272 ----
  1225. ***************
  1226. *** 370,372 ****
  1227.       for (p=index(string, first); p; p = index(p+1, first)) {
  1228. !         if (((p==string) || (p[-1]!='!')) && strncmp(p, searchfor, strlen(searchfor)) == 0)
  1229.               return TRUE;
  1230. --- 377,379 ----
  1231.       for (p=index(string, first); p; p = index(p+1, first)) {
  1232. !         if (((p==string) || (p[-1]!='!')) && STRNCMP(p, searchfor, strlen(searchfor)) == 0)
  1233.               return TRUE;
  1234. Index: readr.c
  1235. Prereq: 2.62
  1236. *** .d/readr.c    Thu Oct  8 00:23:40 1987
  1237. --- readr.c    Fri Oct 16 14:58:24 1987
  1238. ***************
  1239. *** 18,20 ****
  1240.   #ifdef SCCSID
  1241. ! static char    *SccsId = "@(#)readr.c    2.62    10/7/87";
  1242.   #endif /* SCCSID */
  1243. --- 18,20 ----
  1244.   #ifdef SCCSID
  1245. ! static char    *SccsId = "@(#)readr.c    2.64    10/16/87";
  1246.   #endif /* SCCSID */
  1247. ***************
  1248. *** 46,48 ****
  1249. --- 46,50 ----
  1250.    */
  1251. + #ifndef SERVER
  1252.   static char goodone[BUFLEN];        /* last decent article        */
  1253. + #endif    /* !SERVER */
  1254.   static char ogroupdir[BUFLEN];        /* last groupdir        */
  1255. ***************
  1256. *** 135,137 ****
  1257. --- 137,141 ----
  1258.   #endif
  1259. + #ifndef SERVER
  1260.           (void) strcpy(goodone, filename);
  1261. + #endif    /* SERVER */
  1262.           if (pflag || lflag || eflag) {
  1263. ***************
  1264. *** 218,219 ****
  1265. --- 222,226 ----
  1266.       long i;
  1267. + #ifdef SERVER
  1268. +     char workspace[256];
  1269. + #endif    /* !SERVER */
  1270.   
  1271. ***************
  1272. *** 391,393 ****
  1273.               (void) strcpy(bfr, groupdir);
  1274. !             selectng(ogroupdir, TRUE, FALSE);
  1275.               (void) strcpy(groupdir, ogroupdir);
  1276. --- 398,400 ----
  1277.               (void) strcpy(bfr, groupdir);
  1278. !             selectng(ogroupdir, FALSE, FALSE);
  1279.               (void) strcpy(groupdir, ogroupdir);
  1280. ***************
  1281. *** 439,441 ****
  1282.           break;
  1283.       /* escape to shell */
  1284. --- 446,448 ----
  1285.           break;
  1286. ! #ifndef NOSHELL
  1287.       /* escape to shell */
  1288. ***************
  1289. *** 448,449 ****
  1290. --- 455,457 ----
  1291.       /* mail reply */
  1292. + #endif
  1293.       case 'r':
  1294. ***************
  1295. *** 835,836 ****
  1296. --- 843,845 ----
  1297.       }
  1298. + #ifndef SERVER
  1299.       if (s_find(&srec, bptr) == 0) {
  1300. ***************
  1301. *** 839,840 ****
  1302. --- 848,850 ----
  1303.       }
  1304. + #endif    /* !SERVER */
  1305.       (void) transmit(&srec, tfilename);
  1306. ***************
  1307. *** 964,965 ****
  1308. --- 974,978 ----
  1309.        int noaccess;
  1310. + #ifdef SERVER
  1311. +     char workspace[256];
  1312. + #else    /* !SERVER */
  1313.        register DIR *dirp;
  1314. ***************
  1315. *** 966,967 ****
  1316. --- 979,981 ----
  1317.        register struct direct *dir;
  1318. + #endif    /* !SERVER */
  1319.        long nextnum, tnum;
  1320. ***************
  1321. *** 1022,1024 ****
  1322. --- 1036,1046 ----
  1323.           rcreadok = 2;    /* have seen >= 1 article */
  1324. + #ifdef SERVER
  1325. +     if ((fp = getarticle(groupdir, bit, "ARTICLE")) == NULL)
  1326. +         goto badart;
  1327. +     strcpy(filename, article_name());
  1328. +     (void) fclose(fp);
  1329. +     fp = NULL;
  1330. + #else    /* !SERVER */
  1331.       (void) sprintf(filename, "%s/%ld", dirname(groupdir), bit);
  1332.       if (rfq && goodone[0])
  1333. ***************
  1334. *** 1025,1026 ****
  1335. --- 1047,1049 ----
  1336.           strcpy(filename, goodone);
  1337. + #endif    /* !SERVER */
  1338.       if (SigTrap) {
  1339. ***************
  1340. *** 1056,1057 ****
  1341. --- 1079,1085 ----
  1342.           noaccess = 0;
  1343. + #ifdef SERVER
  1344. +         if (*groupdir == ' ' || *groupdir == '\0' || 
  1345. +             set_group(groupdir) == NULL)
  1346. +             goto badart;
  1347. + #else    /* !SERVER */
  1348.            dirp = opendir(dirname(groupdir));
  1349. ***************
  1350. *** 1062,1064 ****
  1351. --- 1090,1107 ----
  1352.            }
  1353. + #endif    /* !SERVER */
  1354.            nextnum = rflag ? minartno - 1 : ngsize + 1;
  1355. + #ifdef SERVER 
  1356. +         tnum = nextnum;
  1357. +         for(;;){
  1358. +             (void) sprintf(bfr,"STAT %ld",tnum);
  1359. +             put_server(bfr);
  1360. +             (void) get_server(workspace,sizeof(workspace));
  1361. +             if (*workspace != CHAR_OK) {
  1362. +                 if (rflag)
  1363. +                     tnum++;
  1364. +                 else
  1365. +                     tnum--;
  1366. +                 continue;
  1367. +             }
  1368. + #else    /* !SERVER */
  1369.            while ((dir = readdir(dirp)) != NULL) {
  1370. ***************
  1371. *** 1067,1068 ****
  1372. --- 1110,1112 ----
  1373.                    continue;
  1374. + #endif    /* !SERVER */
  1375.                if (rflag ? (tnum > nextnum && tnum < bit)
  1376. ***************
  1377. *** 1070,1073 ****
  1378. --- 1114,1122 ----
  1379.                    nextnum = tnum;
  1380. + #ifdef SERVER
  1381. +             break;        /* not exactly right */
  1382. + #endif    /* !SERVER */
  1383.            }
  1384. + #ifndef SERVER
  1385.            closedir(dirp);
  1386. + #endif    /* SERVER */
  1387.            if (rflag ? (nextnum >= bit) : (nextnum <= bit))
  1388. ***************
  1389. *** 1094,1095 ****
  1390. --- 1143,1145 ----
  1391.    badart:
  1392. + #ifndef SERVER
  1393.   #ifdef DEBUG
  1394. ***************
  1395. *** 1096,1098 ****
  1396.           fprintf(stderr, "Bad article '%s'\n", filename);
  1397. ! #endif
  1398.           FCLOSE(fp);
  1399. --- 1146,1149 ----
  1400.           fprintf(stderr, "Bad article '%s'\n", filename);
  1401. ! #endif    /* DEBUG */
  1402. ! #endif    /* !SERVER */
  1403.           FCLOSE(fp);
  1404. ***************
  1405. *** 1119,1120 ****
  1406. --- 1170,1174 ----
  1407.       obit = bit;
  1408. + #ifdef SERVER
  1409. +     (void) unlink(filename);
  1410. + #endif    /* SERVER */
  1411.       return 0;
  1412. ***************
  1413. *** 1198,1199 ****
  1414. --- 1252,1257 ----
  1415.   #endif /* SORTACTIVE */
  1416. + #ifdef SERVER
  1417. +     (void) unlink(active_name());
  1418. +     close_server();    
  1419. + #endif    /* SERVER */
  1420.       exit(status);
  1421. Index: recnews.c
  1422. Prereq:  2.13
  1423. *** .d/recnews.c    Wed Oct  7 16:54:32 1987
  1424. --- recnews.c    Thu Oct 15 18:30:09 1987
  1425. ***************
  1426. *** 1,3 ****
  1427.   /*
  1428. !  * recnews [to newsgroup] [from user]
  1429.    *
  1430. --- 1,3 ----
  1431.   /*
  1432. !  * recnews [to newsgroup] [from user] [approved by]
  1433.    *
  1434. ***************
  1435. *** 23,24 ****
  1436. --- 23,25 ----
  1437.    *        machine.)
  1438. +  *    in-gamemasters: "|/usr/lib/news/recnews mail.gamemasters '' news"
  1439.    *
  1440. ***************
  1441. *** 35,37 ****
  1442.    * should not allow recnews (and thus the mail interface) to be used.
  1443. ! *
  1444.    * 1) We leave the from line alone.  Just escape the double quotes, but let the
  1445. --- 36,38 ----
  1446.    * should not allow recnews (and thus the mail interface) to be used.
  1447. !  *
  1448.    * 1) We leave the from line alone.  Just escape the double quotes, but let the
  1449. ***************
  1450. *** 41,42 ****
  1451. --- 42,46 ----
  1452.    *    Modifications by rad@tek
  1453. +  *
  1454. +  * John@ODU.EDU: add third argument to cause inews to be invoked with -a,
  1455. +  *         for use with local groups for mailing lists with 2.11.
  1456.    */
  1457. ***************
  1458. *** 44,46 ****
  1459.   #ifdef SCCSID
  1460. ! static char    *SccsId = "@(#)recnews.c    2.13    10/23/86";
  1461.   #endif /* SCCSID */
  1462. --- 48,50 ----
  1463.   #ifdef SCCSID
  1464. ! static char    *SccsId = "@(#)recnews.c    2.14    10/15/87";
  1465.   #endif /* SCCSID */
  1466. ***************
  1467. *** 47,53 ****
  1468.   
  1469. ! #include "defs.h"
  1470.   
  1471. - #include <stdio.h>
  1472. - #include <ctype.h>
  1473.   /*
  1474. --- 51,54 ----
  1475.   
  1476. ! #include "params.h"
  1477.   
  1478.   /*
  1479. ***************
  1480. *** 90,91 ****
  1481. --- 91,93 ----
  1482.   char    newsgroup[BFSZ];    /* newsgroups of message */
  1483. + char    approved[BFSZ];        /* Approved: */
  1484.   int    fromset;        /* from passed on command line */
  1485. ***************
  1486. *** 93,95 ****
  1487.   
  1488. ! extern    char    *strcat(), *strcpy();
  1489.   extern    FILE    *popen();
  1490. --- 95,97 ----
  1491.   
  1492. ! extern    char    *strcat(), *strcpy(), *index();
  1493.   extern    FILE    *popen();
  1494. ***************
  1495. *** 107,109 ****
  1496.       /* build inews command */
  1497. ! #ifdef IHCC
  1498.       sprintf(inews, "%s/%s/%s", logdir(HOME), LIBDIR, "inews");
  1499. --- 109,111 ----
  1500.       /* build inews command */
  1501. ! #ifdef LOGDIR
  1502.       sprintf(inews, "%s/%s/%s", logdir(HOME), LIBDIR, "inews");
  1503. ***************
  1504. *** 117,118 ****
  1505. --- 119,123 ----
  1506.           strcpy(from, argv[2]);
  1507. +     if (argc > 3 && *argv[3]) {
  1508. +         sprintf(approved,"-a %s", argv[3]);
  1509. +     }
  1510.   
  1511. ***************
  1512. *** 189,193 ****
  1513.               strcpy(newsgroup, to);
  1514. !             sprintf(cmdbuf, "exec %s -t \"%s\" -n \"%s\" -f \"%s\"",
  1515.                   inews, *subject ? subject : "(none)",
  1516. !                 newsgroup, from);
  1517.   #ifdef debug
  1518. --- 194,199 ----
  1519.               strcpy(newsgroup, to);
  1520. !             sprintf(cmdbuf,
  1521. !                 "exec %s -t \"%s\" -n \"%s\" -f \"%s\" %s",
  1522.                   inews, *subject ? subject : "(none)",
  1523. !                 newsgroup, from, *approved ? approved : 0);
  1524.   #ifdef debug
  1525. ***************
  1526. *** 216,219 ****
  1527.               }
  1528. !             sprintf(cmdbuf, "exec \"%s\" -t \"%s\" -n \"%s\" -f \"%s\"",
  1529. !                 inews, subject, newsgroup, from);
  1530.   #ifdef debug
  1531. --- 222,227 ----
  1532.               }
  1533. !             sprintf(cmdbuf,
  1534. !                 "exec \"%s\" -t \"%s\" -n \"%s\" -f \"%s\" %s",
  1535. !                 inews, subject, newsgroup, from,
  1536. !                 *approved ? approved : 0);
  1537.   #ifdef debug
  1538. ***************
  1539. *** 252,261 ****
  1540.           return BLANK;
  1541. !     if (strncmp(p, ">From", 5) == 0 || strncmp(p, "From", 4) == 0)
  1542.           return FROM;
  1543. !     if (strncmp(p, "Subj", 4)==0 || strncmp(p, "Re:", 3)==0 ||
  1544. !         strncmp(p, "re:", 3)==0)
  1545.           return SUBJ;
  1546. !     if (strncmp(p, "To", 2)==0)
  1547.           return TO;
  1548. !     if (strncmp(p, "\1\1\1\1", 4)==0)
  1549.           return EOM;
  1550. --- 260,269 ----
  1551.           return BLANK;
  1552. !     if (STRNCMP(p, ">From", 5) == 0 || STRNCMP(p, "From", 4) == 0)
  1553.           return FROM;
  1554. !     if (STRNCMP(p, "Subj", 4)==0 || STRNCMP(p, "Re:", 3)==0 ||
  1555. !         STRNCMP(p, "re:", 3)==0)
  1556.           return SUBJ;
  1557. !     if (STRNCMP(p, "To", 2)==0)
  1558.           return TO;
  1559. !     if (STRNCMP(p, "\1\1\1\1", 4)==0)
  1560.           return EOM;
  1561. ***************
  1562. *** 274,276 ****
  1563.       register char *p, *q;
  1564.       if (fbuf[0] && fromset) {    /* we already know who it's from */
  1565. --- 282,283 ----
  1566. ***************
  1567. *** 300,302 ****
  1568.       q[-1] = '\0';
  1569. !     if ((p=(char *)index(fbuf,'\n')) != NULL)
  1570.           *p = '\0';
  1571. --- 307,309 ----
  1572.       q[-1] = '\0';
  1573. !     if ((p=index(fbuf,'\n')) != NULL)
  1574.           *p = '\0';
  1575. Index: rfuncs.c
  1576. Prereq: 2.41
  1577. *** .d/rfuncs.c    Thu Oct  8 00:23:50 1987
  1578. --- rfuncs.c    Thu Oct 15 18:30:11 1987
  1579. ***************
  1580. *** 18,20 ****
  1581.   #ifdef SCCSID
  1582. ! static char    *SccsId = "@(#)rfuncs.c    2.41    10/7/87";
  1583.   #endif /* SCCSID */
  1584. --- 18,20 ----
  1585.   #ifdef SCCSID
  1586. ! static char    *SccsId = "@(#)rfuncs.c    2.42    10/15/87";
  1587.   #endif /* SCCSID */
  1588. ***************
  1589. *** 259,261 ****
  1590.           while (bit <= ngsize) {
  1591. !             (void) sprintf(filename, "%s/%ld", dirname(groupdir), bit);
  1592.               if (access(filename, 4)
  1593. --- 259,277 ----
  1594.           while (bit <= ngsize) {
  1595. ! #ifdef SERVER
  1596. !         if ((fp = getarticle(groupdir,bit,"ARTICLE")) != NULL) {
  1597. !             strcpy(filename, article_name());
  1598. !             (void) fclose(fp);
  1599. !             fp = NULL;
  1600. !         } else {
  1601. ! #ifdef DEBUG
  1602. !             fprintf(stderr, "Bad article '%s/%d'\n", groupdir,
  1603. !                     bit);
  1604. ! #endif    /* DEBUG */
  1605. !             clear(bit);
  1606. !             nextbit();
  1607. !             continue;
  1608. !         }
  1609. ! #else    /* !SERVER */
  1610. !         (void) sprintf(filename, "%s/%ld", dirname(groupdir), bit);
  1611. ! #endif    /* !SERVER */
  1612.               if (access(filename, 4)
  1613. ***************
  1614. *** 301,302 ****
  1615. --- 317,321 ----
  1616.               (void) fclose(fp);
  1617. + #ifdef SERVER
  1618. +             (void) unlink(filename); /* get rid of temp file */
  1619. + #endif    /* SERVER */
  1620.               fp = NULL;
  1621. ***************
  1622. *** 624,625 ****
  1623. --- 643,645 ----
  1624.       afp = xfopen(p, "r");
  1625.   #else /* !SORTACTIVE */
  1626. ***************
  1627. *** 744,745 ****
  1628. --- 764,766 ----
  1629.       struct hbuf hh;
  1630. + #ifndef SERVER
  1631.       register DIR *dirp;
  1632. ***************
  1633. *** 746,747 ****
  1634. --- 767,769 ----
  1635.       register struct direct *dir;
  1636. + #endif    /* !SERVER */
  1637.       register FILE *fp_art;
  1638. ***************
  1639. *** 753,755 ****
  1640.       char *gets();
  1641.       /* This should get the numbers from the active file XXX */
  1642. --- 775,792 ----
  1643.       char *gets();
  1644. ! #ifdef SERVER 
  1645. !     int lowgp,highgp;
  1646. !     char workspace[256];
  1647. !     if (*lgroup == ' ' || *lgroup == '\0') return;
  1648. !     strcpy(workspace, set_group(lgroup));
  1649. !     if (*workspace != CHAR_OK) {    
  1650. !         printf("Group %s is invalid: \n%s\n", lgroup, workspace);
  1651. !         return;
  1652. !     }
  1653. !     /* We assume that the server will return a line of this format */
  1654. !     (void) sscanf(workspace, "%s %ld %ld %ld", bfr, &i, &lowgp, &highgp);
  1655. !     if (i == 0) {
  1656. !         printf("There are no articles in %s\n", lgroup);
  1657. !         return;
  1658. !     }
  1659. ! #else    /* !SERVER */
  1660.       /* This should get the numbers from the active file XXX */
  1661. ***************
  1662. *** 759,760 ****
  1663. --- 796,798 ----
  1664.       }
  1665. + #endif    /* !SERVER */
  1666.       entries = 0;
  1667. ***************
  1668. *** 765,766 ****
  1669. --- 803,807 ----
  1670.       }
  1671. + #ifdef SERVER
  1672. +     for(i = lowgp; i < highgp; i++){
  1673. + #else    /* !SERVER */
  1674.       while ((dir = readdir(dirp)) != NULL) {
  1675. ***************
  1676. *** 769,770 ****
  1677. --- 810,812 ----
  1678.           i = atoi(dir->d_name);
  1679. + #endif    /* !SERVER */
  1680.           if ((i < 1) || (i > pngsize))
  1681. ***************
  1682. *** 793,795 ****
  1683. --- 835,848 ----
  1684.       for (lg_entry = lg_array; *lg_entry != 0 && int_sig == 0; lg_entry++) {
  1685. + #ifdef SERVER
  1686. + /* we'll see if just getting the header will work here */
  1687. +     if ((fp_art = getarticle(lgroup, *lg_entry, "HEAD")) != NULL) {
  1688. +             strcpy(filename, article_name());
  1689. +             (void) fclose(fp_art);
  1690. +             fp_art = NULL;
  1691. +         }
  1692. +     else
  1693. +         continue;
  1694. + #else    /* !SERVER */
  1695.           (void) sprintf(filename, "%s/%d", dirname(lgroup), *lg_entry);
  1696. + #endif    /* !SERVER */
  1697.           fp_art = fopen(filename, "r");
  1698. ***************
  1699. *** 815,816 ****
  1700. --- 868,872 ----
  1701.           (void) fclose(fp_art);
  1702. + #ifdef SERVER
  1703. +         (void) unlink(filename);
  1704. + #endif    /* SERVER */
  1705.       }
  1706. ***************
  1707. *** 817,822 ****
  1708.       (void) fflush(stdout);
  1709.       closedir(dirp);
  1710.       (void) signal(SIGINT, old_sig);    /* restore to old value */
  1711.       printf("[Press RETURN to continue]");
  1712. --- 873,878 ----
  1713.       (void) fflush(stdout);
  1714. ! #ifndef SERVER
  1715.       closedir(dirp);
  1716. + #endif    /* !SERVER */
  1717.       (void) signal(SIGINT, old_sig);    /* restore to old value */
  1718.       printf("[Press RETURN to continue]");
  1719. ***************
  1720. *** 840,841 ****
  1721. --- 896,898 ----
  1722.   }
  1723. + #endif /* !SMALL_ADDRESS_SPACE */
  1724.   
  1725. ***************
  1726. *** 849,850 ****
  1727.   }
  1728. - #endif /* !SMALL_ADDRESS_SPACE */
  1729. --- 906 ----
  1730. Index: sendbatch.sh
  1731. Prereq: 1.12
  1732. *** .d/sendbatch.sh    Thu Oct  8 00:23:53 1987
  1733. --- sendbatch.sh    Thu Oct 15 18:30:12 1987
  1734. ***************
  1735. *** 1,2 ****
  1736. ! : '@(#)sendbatch.sh    1.12    10/7/87'
  1737.   
  1738. --- 1,2 ----
  1739. ! : '@(#)sendbatch.sh    1.13    10/15/87'
  1740.   
  1741. ***************
  1742. *** 44,46 ****
  1743.       testit="yes"
  1744. !     while test $? -eq 0 -a \( \( -n "$testit" -s BATCHDIR/$rmt \) -o -s BATCHDIR/$rmt.work -o  \( -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave \) \)
  1745.       do
  1746. --- 44,46 ----
  1747.       testit="yes"
  1748. !     while test $? -eq 0 -a \( \( -n "$testit" -a -s BATCHDIR/$rmt \) -o -s BATCHDIR/$rmt.work -o  \( -n "$DOIHAVE" -a -s BATCHDIR/$rmt.ihave \) \)
  1749.       do
  1750. Index: visual.c
  1751. Prereq: 1.37
  1752. *** .d/visual.c    Thu Oct  8 00:24:28 1987
  1753. --- visual.c    Thu Oct 15 18:30:17 1987
  1754. ***************
  1755. *** 6,8 ****
  1756.   #ifdef SCCSID
  1757. ! static char    *SccsId = "@(#)visual.c    1.37    10/7/87";
  1758.   #endif /* SCCSID */
  1759. --- 6,8 ----
  1760.   #ifdef SCCSID
  1761. ! static char    *SccsId = "@(#)visual.c    1.38    10/15/87";
  1762.   #endif /* SCCSID */
  1763. ***************
  1764. *** 151,153 ****
  1765. --- 151,155 ----
  1766.    */
  1767. + #ifndef SERVER
  1768.   static char goodone[BUFLEN];        /* last decent article        */
  1769. + #endif    /* !SERVER */
  1770.   static char ogroupdir[BUFLEN];        /* last groupdir        */
  1771. ***************
  1772. *** 217,219 ****
  1773. --- 219,223 ----
  1774.               break;
  1775. + #ifndef SERVER
  1776.           (void) strcpy(goodone, filename);
  1777. + #endif    /* !SERVER */
  1778.           if (SigTrap)
  1779. ***************
  1780. *** 895,897 ****
  1781. --- 899,905 ----
  1782.           }
  1783. + #ifdef SERVER
  1784. +         (void) sprintf(bfr, "%s/%s", BIN, "postnews");
  1785. + #else    /* !SERVER */
  1786.           (void) sprintf(bfr, "%s/%s %s", BIN, "postnews", goodone);
  1787. + #endif    /* !SERVER */
  1788.           shcmd(bfr, CWAIT);
  1789. ***************
  1790. *** 1020,1021 ****
  1791. --- 1028,1030 ----
  1792.   
  1793. + #ifndef SERVER
  1794.           of = xart_open(goodone, "r");
  1795. ***************
  1796. *** 1028,1030 ****
  1797. --- 1037,1041 ----
  1798.           putc('\n', rfp);
  1799. + #endif        /* !SERVER */
  1800.       }
  1801.       fflush(rfp);
  1802. ***************
  1803. *** 1132,1133 ****
  1804. --- 1143,1147 ----
  1805.       int noaccess;
  1806. + #ifdef SERVER
  1807. +     char workspace[256];
  1808. + #else    /* !SERVER */
  1809.       register DIR *dirp;
  1810. ***************
  1811. *** 1134,1135 ****
  1812. --- 1148,1150 ----
  1813.       register struct direct *dir;
  1814. + #endif    /* !SERVER */
  1815.       long nextnum, tnum;
  1816. ***************
  1817. *** 1136,1138 ****
  1818.       long atol();
  1819.       noaccess = 0;
  1820. --- 1151,1152 ----
  1821. ***************
  1822. *** 1181,1182 ****
  1823. --- 1195,1203 ----
  1824.           rcreadok = 2;    /* have seen >= 1 article */
  1825. + #ifdef SERVER
  1826. +     if ((fp = getarticle(groupdir, bit, "ARTICLE")) == NULL)
  1827. +         goto badart;
  1828. +     strcpy(filename, article_name());
  1829. +     (void) fclose(fp);
  1830. +     fp = NULL;
  1831. + #else    /* !SERVER */
  1832.       (void) sprintf(filename, "%s/%ld", dirname(groupdir), bit);
  1833. ***************
  1834. *** 1184,1185 ****
  1835. --- 1205,1207 ----
  1836.           strcpy(filename, goodone);
  1837. + #endif    /* !SERVER */
  1838.       if (SigTrap == SIGHUP)
  1839. ***************
  1840. *** 1194,1195 ****
  1841. --- 1216,1222 ----
  1842.           noaccess = 0;
  1843. + #ifdef SERVER
  1844. +         if (*groupdir == ' ' || *groupdir == '\0' || 
  1845. +             set_group(groupdir) == NULL)
  1846. +             goto nextart;
  1847. + #else    /* !SERVER */
  1848.           dirp = opendir(dirname(groupdir));
  1849. ***************
  1850. *** 1200,1202 ****
  1851. --- 1227,1244 ----
  1852.           }
  1853. + #endif    /* !SERVER */
  1854.           nextnum = rflag ? minartno - 1 : ngsize + 1;
  1855. + #ifdef SERVER 
  1856. +         tnum = nextnum;
  1857. +         for(;;){
  1858. +             (void) sprintf(bfr,"STAT %ld",tnum);
  1859. +             put_server(bfr);
  1860. +             (void) get_server(workspace,sizeof(workspace));
  1861. +             if (*workspace != CHAR_OK) {
  1862. +                 if (rflag)
  1863. +                     tnum++;
  1864. +                 else
  1865. +                     tnum--;
  1866. +                 continue;
  1867. +             }
  1868. + #else    /* !SERVER */
  1869.           while ((dir = readdir(dirp)) != NULL) {
  1870. ***************
  1871. *** 1207,1208 ****
  1872. --- 1249,1251 ----
  1873.                   continue;
  1874. + #endif    /* !SERVER */
  1875.               if (rflag ? (tnum > nextnum && tnum < bit)
  1876. ***************
  1877. *** 1210,1213 ****
  1878. --- 1253,1261 ----
  1879.                   nextnum = tnum;
  1880. + #ifdef SERVER
  1881. +             break;        /* not exactly right */
  1882. + #endif    /* SERVER */
  1883.           }
  1884. + #ifndef SERVER
  1885.           closedir(dirp);
  1886. + #endif    /* !SERVER */
  1887.           if (rflag ? (nextnum >= bit) : (nextnum <= bit))
  1888. ***************
  1889. *** 1249,1250 ****
  1890. --- 1297,1301 ----
  1891.       obit = bit;
  1892. + #ifdef SERVER
  1893. +     (void) unlink(filename);
  1894. + #endif    /* SERVER */
  1895.       return 0;
  1896. ***************
  1897. *** 2645,2646 ****
  1898. --- 2696,2701 ----
  1899.   #endif /* SORTACTIVE */
  1900. + #ifdef SERVER
  1901. +     (void) unlink(active_name());
  1902. +     close_server();    
  1903. + #endif    /* SERVER */
  1904.       if (ospeed) {    /* is == 0, we haven't been in raw mode yet */
  1905.  
  1906.  
  1907.