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. 95054earlw@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