[net.sources] news 2.10.2 sys file enhancement

earlw@pesnta.UUCP (Earl Wallace) (09/19/84)

Here is a little mod to funcs2.c in news 2.10.2 that helps make the sys file
more "editable".  Blank lines are allowed and systems with lots of news group
selections can be split across lines using the escaped newline (backslash). 

Sample use:

# me, myself and I
pesnta:net,fa,mod,usa,na,world,pe,ba,ca,to,control::

# PE Tustin, Calif.
petstn:net,mod,world,na,usa,net.announce,net.adm,net.general,net.followup,\
	net.bugs,net.dcom,net.info-terms,net.lan,net.lang,net.sources,\
	net.news,net.unix,net.unix-wizards,net.ai,net.jokes,net.med,\
	net.movies,net.music,net.notes,net.space,fa.telecom,net.test,\
	net.video,net.wanted,net.micro:F:/usr/spool/batch/Bpetstn
petstn:pe,ca,to.petstn::uux - -z petstn!rnews
 
The diffs:

	codes:  + add this line
		- remove this line

---- about line 48 in funcs2.c (function "s_read") ----

	register char *p;
+       register int  c;
+       char     *e;
+       int      chop_spaces;

---- about line 52 in funcs2.c (function "s_read") ----

-       if (fgets(p, LBUFLEN, sysfile) == NULL)
-               return(FALSE);

+       /*
+        * Read  the  SUBFILE  (/usr/lib/news/sys)  from   the   current
+        * position  to  the  first  unescaped newline.  If a newline is
+        * escaped with a backslash (\) continue reading but throw  away
+        * the backslash and newline; read the next line skipping spaces
+        * and tabs until the first non-space/tab character, then  start
+        * looking   for   a   newline   again.   Skipping  the  leading
+        * spaces/tabs after a escaped newline  keeps  the  news  groups
+        * together.  If  a  line  begins  with a newline, just skip it.
+        * [earlw@pesnta.UUCP]
+        */
+       for (e=p+LBUFLEN; p < e && (*p=c=fgetc(sysfile)) != EOF; p++) {
+               if (p == bfr)
+                       continue;
+               if (*p == '\n') {
+                       if (p[-1] == '\\') {
+                               chop_spaces++;
+                               p -= 2;
+                       } else if (p[-1] == '\n')
+                               continue;
+                       else {
+                               p[1] = '\0';
+                               break;
+                       }
+               } else if (chop_spaces) {
+                       if (*p == '\t' || *p == ' ')
+                               p--;
+                       else
+                               chop_spaces = 0;
+               }
+       }
+       if(c == EOF) {
+               return (FALSE);
+       }
+       p = bfr;

-- 
Earl Wallace
UUCP:   ..!{ihnp4, ucbvax!hplabs, ucbvax!twg}!pesnta!earlw
PHONE:	(408) 727-5540 x230
USMAIL:	Perkin-Elmer Corp., Santa Clara, Calif. 95054

earlw@pesnta.UUCP (Earl Wallace) (09/19/84)

Here is a little mod to funcs2.c in news 2.10.2 that helps make the sys file
more "editable".  Blank lines are allowed and systems with lots of news group
selections can be split across lines using the escaped newline (backslash). 

Sample use:

# me, myself and I
pesnta:net,fa,mod,usa,na,world,pe,ba,ca,to,control::

# PE Tustin, Calif.
petstn:net,mod,world,na,usa,net.announce,net.adm,net.general,net.followup,\
	net.bugs,net.dcom,net.info-terms,net.lan,net.lang,net.sources,\
	net.news,net.unix,net.unix-wizards,net.ai,net.jokes,net.med,\
	net.movies,net.music,net.notes,net.space,fa.telecom,net.test,\
	net.video,net.wanted,net.micro:F:/usr/spool/batch/Bpetstn
petstn:pe,ca,to.petstn::uux - -z petstn!rnews
 
The diffs:

	codes:  + add this line
		- remove this line

about line 48 in funcs2.c (function "s_read")

	register char *p;
+       register int  c;
+       char     *e;
+       int      chop_spaces;

about line 52 in funcs2.c (function "s_read")

-       if (fgets(p, LBUFLEN, sysfile) == NULL)
-               return(FALSE);

+       /*
+        * Read  the  SUBFILE  (/usr/lib/news/sys)  from   the   current
+        * position  to  the  first  unescaped newline.  If a newline is
+        * escaped with a backslash (\) continue reading but throw  away
+        * the backslash and newline; read the next line skipping spaces
+        * and tabs until the first non-space/tab character, then  start
+        * looking   for   a   newline   again.   Skipping  the  leading
+        * spaces/tabs after a escaped newline  keeps  the  news  groups
+        * together.  If  a  line  begins  with a newline, just skip it.
+        * [earlw@pesnta.UUCP]
+        */
+       for (e=p+LBUFLEN; p < e && (*p=c=fgetc(sysfile)) != EOF; p++) {
+               if (*p == '\n') {
+                       if (p == bfr || p[-1] != '\\') {
+                               p[1] = '\0';
+                               break;
+                       } else {
+                               chop_spaces++;
+                               p -= 2;
+                       }
+               } else if (chop_spaces) {
+                       if (*p == '\t' || *p == ' ')
+                               p--;
+                       else
+                               chop_spaces = 0;
+               }
+       }
+       if (c == EOF) {
+               return (FALSE);
+       }
+       p = bfr;
+       if (*p == '\n')
+               goto again;             /* skip newlines */











-- 
Earl Wallace
UUCP:   ..!{ihnp4, ucbvax!hplabs, ucbvax!twg}!pesnta!earlw
PHONE:	(408) 727-5540 x230
USMAIL:	Perkin-Elmer Corp., Santa Clara, Calif. 95054