From:	MERC::"uunet!VM1.NODAK.EDU!owner-anu-news" 27-APR-1993 11:31:01.33
To:	Multiple recipients of list ANU-NEWS <ANU-NEWS@VM1.NoDak.EDU>
CC:	
Subj:	BUG-fixes / EXTENSION  SHARE 3/7

-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+
V`20`20`20`20`20/*`20Date:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_NEWSGROUPS`20`20`202`20`20`20`20`20`20`20`20`20
V`20/*`20Newsgroups:`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_SUBJECT`20`20`20`20`20`203`20`20`20`20`20`20`20
V`20`20`20/*`20Subject:`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_MESSAGEID`20`20`20`204`20`20`20`20`20`20`20`20`20
V`20/*`20Message-Id:`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_PATH`20`20`20`20`20`20`20`20`205`20`20`20`20`20
V`20`20`20`20`20/*`20Path:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_FOLLOWUPTO`20`20`206`20`20`20`20`20`20`20`20`20
V`20/*`20Followup-To:`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_EXPIRES`20`20`20`20`20`207`20`20`20`20`20`20`20
V`20`20`20/*`20Expires:`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_REPLYTO`20`20`20`20`20`208`20`20`20`20`20`20`20
V`20`20`20/*`20Reply-To:`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_SENDER`20`20`20`20`20`20`209`20`20`20`20`20`20`20
V`20`20`20/*`20Sender:`20`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_REFERENCES`20`20`2010`20`20`20`20`20`20`20`20`20/*
V`20References:`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_CONTROL`20`20`20`20`20`2011`20`20`20`20`20`20`20
V`20`20/*`20Control:`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_DISTRIBUTION`2012`20`20`20`20`20`20`20`20`20/*`20D
Vistribution:`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_KEYWORDS`20`20`20`20`2013`20`20`20`20`20`20`20`20
V`20/*`20Keywords:`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_SUMMARY`20`20`20`20`20`2014`20`20`20`20`20`20`20
V`20`20/*`20Summary:`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_APPROVED`20`20`20`20`2015`20`20`20`20`20`20`20`20
V`20/*`20Approved:`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_LINES`20`20`20`20`20`20`20`2016`20`20`20`20`20`20
V`20`20`20/*`20Lines:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_XREF`20`20`20`20`20`20`20`20`2017`20`20`20`20`20
V`20`20`20`20/*`20Xref:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_ORGANIZATION`2018`20`20`20`20`20`20`20`20`20/*`20O
Vrganization:`20`20`20`20`20`20`20`20*/
X+`20#define`20FILTER_SELECT_XNEWS`20`20`20`20`20`20`20`2019`20`20`20`20`20`20
V`20`20`20/*`20X-NEWS:`20`20`20(ANU-news)`20*/
X+`20
X+`20#define`20FILTER_SELECT_ALL`20`20`20`20`20`20`20`20`20`2030`20`20`20`20
V`20`20`20`20`20/*`20all`20lines,`20no`20checks`20*/
X+`20#define`20FILTER_SELECT_NONE`20`20`20`20`20`20`20`20`2031`20`20`20`20`20
V`20`20`20`20/*`20no`20header`20lines`20`20`20`20`20`20*/
X+`20
X+`20#define`20FILTER_MAX_HEADERLINES`20`20`20`20`2020
X+`20
X`20`20static
X`20`20struct`20`20filter_header_line_struct
X`20`20`20`20`20`20`20`20`20`20`20`20`7B`20
X**************
X***`2046,51
X`20`20#endif
X`20`20
X`20`20static
X`20`20int`20append_ofile,
X`20`20`20`20`20`20m_seen,
X`20`20`20`20`20`20ofnam_valid`20=`200,
X---`2075,90`20-----
X`20`20#define`20FILTER_MAX_HEADERLINES`20`20`20`20`2020
X`20`20
X`20`20static
X+`20struct`20`20filter_header_line_struct
X+`20`20`20`20`20`20`20`20`20`20`20`7B`20
X+`20`20`20`20`20`20`20`20`20`20`20char`20hdr_line`5B4`5D;`20`20`20`20/*`204
V`20chars`20are`20enough`20to`20recognize`20header`20*/
X+`20`20`20`20`20`20`20`20`20`20`20`7D`20filter_header_line`5BFILTER_MAX_HEADER
VLINES`5D`20=
X+`20`20`20`20`20`20`20`20`20`20`20`20`20`7B`20`7B"from"`7D,`20`7B"date"`7D,
V`20`7B"news"`7D,`20`7B"subj"`7D,`20`7B"mess"`7D,`20`7B"path"`7D,
X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B"foll"`7D,`20`7B"expi"`7D,
V`20`7B"repl"`7D,`20`7B"send"`7D,`20`7B"refe"`7D,`20`7B"cont"`7D,
X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B"dist"`7D,`20`7B"keyw"`7D,
V`20`7B"summ"`7D,`20`7B"appr"`7D,`20`7B"line"`7D,`20`7B"xref"`7D,
X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7B"orga"`7D,`20`7B"xnew"`7D`20
V`7D;
X+`20
X+`20static
X`20`20int`20append_ofile,
X`20`20`20`20`20`20m_seen,
X`20`20`20`20`20`20ofnam_valid`20=`200,
X**************
X***`2049,55
X`20`20int`20append_ofile,
X`20`20`20`20`20`20m_seen,
X`20`20`20`20`20`20ofnam_valid`20=`200,
X-`20`20`20`20`20i_header,
X`20`20`20`20`20`20n_extracted,
X`20`20`20`20`20`20more_submit,
X`20`20`20`20`20`20print_directory,
X---`2088,93`20-----
X`20`20int`20append_ofile,
X`20`20`20`20`20`20m_seen,
X`20`20`20`20`20`20ofnam_valid`20=`200,
X`20`20`20`20`20`20n_extracted,
X`20`20`20`20`20`20more_submit,
X`20`20`20`20`20`20print_directory,
X**************
X***`20272,278
X`20`20`20`20return(m);
X`20`20`7D
X`20`20
X!`20void`20apply_filter(g,m,action)
X`20`20`20`20int`20g,`20m,`20(*action)();
X`20`20`7B
X`20`20`20`20if`20((m`20=`20scan_filter(g,m))`20!=`200)`20(*action)(g,m);
X---`20310,316`20-----
X`20`20`20`20return(m);
X`20`20`7D
X`20`20
X!`20void`20apply_filter(g,m,filter,action)
X`20`20`20`20int`20g,`20m,`20(*action)();
X`20`20`20`20unsigned`20int`20filter;
X`20`20`7B
X**************
X***`20274,279
X`20`20
X`20`20void`20apply_filter(g,m,action)
X`20`20`20`20int`20g,`20m,`20(*action)();
X`20`20`7B
X`20`20`20`20if`20((m`20=`20scan_filter(g,m))`20!=`200)`20(*action)(g,m);
X`20`20`7D
X---`20312,318`20-----
X`20`20
X`20`20void`20apply_filter(g,m,filter,action)
X`20`20`20`20int`20g,`20m,`20(*action)();
X+`20`20`20unsigned`20int`20filter;
X`20`20`7B
X`20`20`20`20if`20((m`20=`20scan_filter(g,m))`20!=`200)`20(*action)(g,m,filter)
V;
X`20`20`7D
X**************
X***`20275,281
X`20`20void`20apply_filter(g,m,action)
X`20`20`20`20int`20g,`20m,`20(*action)();
X`20`20`7B
X!`20`20`20if`20((m`20=`20scan_filter(g,m))`20!=`200)`20(*action)(g,m);
X`20`20`7D
X`20`20`0C
X`20`20int`20dir_entry(g,m)
X---`20314,320`20-----
X`20`20`20`20int`20g,`20m,`20(*action)();
X`20`20`20`20unsigned`20int`20filter;
X`20`20`7B
X!`20`20`20if`20((m`20=`20scan_filter(g,m))`20!=`200)`20(*action)(g,m,filter);
X`20`20`7D
X`20`20`0C
X`20`20int`20dir_entry(g,m)
X**************
X***`20297,304
X`20`20`20`20return(1);
X`20`20`7D
X`20`20`0C
X!`20int`20extract_it(g,m)
X!`20`20`20int`20g,`20m;
X`20`20`7B
X`20`20`20`20char`20xfrbuf`5B512`5D,`20*cp1,`20*cp2;
X`20`20`20`20int`20w_ok`20=`20i_header,`20do_rotit`20=`200;
X---`20336,343`20-----
X`20`20`20`20return(1);
X`20`20`7D
X`20`20`0C
X!`20static`20void`20init_filter(filter)
X!`20`20`20unsigned`20int`20*filter;
X`20`20`7B
X`20`20`20`20char`20uv`5B256`5D;
X`20`20`20`20unsigned`20short`20ul,`20i;
X**************
X***`20300,305
X`20`20int`20extract_it(g,m)
X`20`20`20`20int`20g,`20m;
X`20`20`7B
X`20`20`20`20char`20xfrbuf`5B512`5D,`20*cp1,`20*cp2;
X`20`20`20`20int`20w_ok`20=`20i_header,`20do_rotit`20=`200;
X`20`20
X---`20339,419`20-----
X`20`20static`20void`20init_filter(filter)
X`20`20`20`20unsigned`20int`20*filter;
X`20`20`7B
X+`20`20`20char`20uv`5B256`5D;
X+`20`20`20unsigned`20short`20ul,`20i;
X+`20`20`20$DESCRIPTOR(ud,uv);
X+`20
X+`20`20`20if`20(cli$present(c$dsc("HEADER"))`20==`20CLI$_PRESENT)
X+`20`20`20`20`20`7B
X+`20`20`20`20`20*filter`20=`200;
X+`20`20`20`20`20while`20(cli$get_value(c$dsc("HEADER"),`26ud,`26ul)`20`26`201)
V`20
X+`20`20`20`20`20`20`20`20`7B
X+`20`20`20`20`20`20`20`20uv`5Bul`5D`20=`20'\0';
X+`20`20`20`20`20`20`20`20lower_case(uv);
X+`20`20`20`20`20`20`20`20if`20(strncmp(uv,`20"all",`20ul)`20==`200)`20`20`20/*
V`20check`20for`20ALL`20*/
X+`20`20`20`20`20`20`20`20`20`20`7B
X+`20`20`20`20`20`20`20`20`20`20*filter`20=`201`20<<`20FILTER_SELECT_ALL;
X+`20`20`20`20`20`20`20`20`20`20break;
X+`20`20`20`20`20`20`20`20`20`20`7D
X+`20`20`20`20`20`20`20`20if`20(strncmp(uv,`20"none",`20ul)`20==`200)`20`20/*
V`20check`20for`20NONE`20*/
X+`20`20`20`20`20`20`20`20`20`20`7B
X+`20`20`20`20`20`20`20`20`20`20*filter`20=`201`20<<`20FILTER_SELECT_NONE;
X+`20`20`20`20`20`20`20`20`20`20break;
X+`20`20`20`20`20`20`20`20`20`20`7D
X+`20`20`20`20`20`20`20`20for`20(i=0;`20i<FILTER_MAX_HEADERLINES;`20i++)`20`20
V`20`20`20`20/*`20check`20fo`20the`20others`20*/
X+`20`20`20`20`20`20`20`20`20`20if`20(strncmp(uv,`20`26filter_header_line`5Bi
V`5D,`204)`20==`200)
X+`20`20`20`20`20`20`20`20`20`20`20`20`7B
X+`20`20`20`20`20`20`20`20`20`20`20`20*filter`20`7C=`201`20<<`20i;
X+`20`20`20`20`20`20`20`20`20`20`20`20break;
X+`20`20`20`20`20`20`20`20`20`20`20`20`7D
X+`20`20`20`20`20`20`20`20`7D`20`20`20`20
X+`20`20`20`20`20`7D
X+`20`20`20else`20if`20(cli$present(c$dsc("HEADER"))`20==`20CLI$_NEGATED)
X+`20`20`20`20`20`7B`20
X+`20`20`20`20`20*filter`20=`201`20<<`20FILTER_SELECT_NONE;
X+`20`20`20`20`20`7D
X+`20`20`20else`20/*`20qualifier`20absent`20*/
X+`20`20`20`20`20`7B
X+`20`20`20`20`20*filter`20=`201`20<<`20FILTER_SELECT_ALL;
X+`20`20`20`20`20`7D
X+`20`7D
X+`20`0C
X+`20static`20int`20get_header_line(str)
X+`20`20`20char`20*str;
X+`20`7B
X+`20`20`20int`20i;
X+`20`20`20char`20headline`5B5`5D;
X+`20`20`20
X+`20`20`20strncpy(headline,`20str,`204);
X+`20`20`20headline`5B4`5D`20=`20'\0';
X+`20`20`20lower_case(headline);
X+`20`20`20for`20(i=0;`20i<FILTER_MAX_HEADERLINES;`20i++)`20`20`20`20`20`20/*
V`20check`20fo`20the`20others`20*/
X+`20`20`20`20`20`20`7B
X+`20`20`20`20`20`20if`20(strncmp(headline,`20`26filter_header_line`5Bi`5D,`204
V)`20==`200)
X+`20`20`20`20`20`20`20`20`20return(i);
X+`20`20`20`20`20`20`7D
X+`20`20`20return`20(-1);`20`20`20/*`20this`20line`20is`20not`20a`20headerline
V`20*/
X+`20`7D
X+`20`0C
X+`20static`20int`20check_header_line(filter,`20header_line)
X+`20`20`20`20unsigned`20int`20filter;
X+`20`20`20`20int`20header_line;
X+`20`7B
X+`20`20`20`20if`20((header_line`20>`2031)`20`7C`7C`20(header_line`20<`200)`20
X+`20`20`20`20`20`20`7C`7C`20((filter`20`26`20(1`20<<`20FILTER_SELECT_NONE))
V`20!=`200))
X+`20`20`20`20`20`20return(0);
X+`20
X+`20`20`20`20if`20(((filter`20`26`20(1`20<<`20header_line))`20!=`200)`20
X+`20`20`20`20`20`20`7C`7C`20((filter`20`26`20(1`20<<`20FILTER_SELECT_ALL))`20!
V=`200))
X+`20`20`20`20`20`20`20return(1);
X+`20`20`20`20
X+`20`20`20`20return(0);
X+`20`7D
X+`20`0C
X+`20int`20extract_it(g,m,filter)
X+`20`20`20int`20g,`20m;
X+`20`20`20unsigned`20int`20filter;
X+`20`7B
X`20`20`20`20char`20xfrbuf`5B512`5D,`20*cp1,`20*cp2;
X`20`20`20`20int`20do_rotit`20=`200;
X`20`20`20`20char`20header;
X**************
X***`20301,307
X`20`20`20`20int`20g,`20m;
X`20`20`7B
X`20`20`20`20char`20xfrbuf`5B512`5D,`20*cp1,`20*cp2;
X!`20`20`20int`20w_ok`20=`20i_header,`20do_rotit`20=`200;
X`20`20
X`20`20`20`20if`20(print_directory)`20return(dir_entry(g,m));
X`20`20`20`20if`20(!(fp`20=`20do_open_item(g,m,"r",fp_open)))`20`7B
X---`20415,423`20-----
X`20`20`20`20unsigned`20int`20filter;
X`20`20`7B
X`20`20`20`20char`20xfrbuf`5B512`5D,`20*cp1,`20*cp2;
X!`20`20`20int`20do_rotit`20=`200;
X!`20`20`20char`20header;
X!`20`20`20int`20header_line;
X`20`20
X`20`20`20`20if`20(print_directory)`20return(dir_entry(g,m));
X`20`20`20`20if`20(!(fp`20=`20do_open_item(g,m,"r",fp_open)))`20`7B
X**************
X***`20349,355
X`20`20`20`20`20`20`7D
X`20`20`20`20if`20(append_ofile)`20fprintf(fpextract,"\f\n");
X`20`20`20`20append_ofile`20=`201;
X!`20`20`20if`20(w_ok)`20`7B
X`20`20`20`20`20`20sprintf(xfrbuf,"X-NEWS:`20%s`20%s:`20%d",
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20news_node,ga`5Bg
V`5D->grp_name,ga`5Bg`5D->grp_ia`5Bm`5D.itm_num);
X`20`20`20`20`20`20fputs(xfrbuf,fpextract);
X---`20465,471`20-----
X`20`20`20`20`20`20`7D
X`20`20`20`20if`20(append_ofile)`20fprintf(fpextract,"\f\n");
X`20`20`20`20append_ofile`20=`201;
X!`20`20`20if`20(check_header_line(filter,`20FILTER_SELECT_XNEWS))`20`7B
X`20`20`20`20`20`20sprintf(xfrbuf,"X-NEWS:`20%s`20%s:`20%d",
X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20news_node,ga`5Bg
V`5D->grp_name,ga`5Bg`5D->grp_ia`5Bm`5D.itm_num);
X`20`20`20`20`20`20fputs(xfrbuf,fpextract);
X**************
X***`20357,362
X`20`20`20`20`20`20`7D
X`20`20`20`20err_line(xfrbuf);
X`20`20`20`20if`20(m_seen)`20item_update(g,m);
X`20`20`20`20while`20(fgets(xfrbuf,510,fp))`20`7B
X`20`20`20`20`20`20if`20(*xfrbuf`20==`20'\n')`20`7B
X`20`20`20`20`20`20`20`20w_ok`20=`201;
X---`20473,480`20-----
X`20`20`20`20`20`20`7D
X`20`20`20`20err_line(xfrbuf);
X`20`20`20`20if`20(m_seen)`20item_update(g,m);
X+`20`20`20header`20=`201;
X+`20`20`20header_line`20=`20-1;
X`20`20`20`20while`20(fgets(xfrbuf,510,fp))`20`7B
X`20`20`20`20`20`20if`20(*xfrbuf`20==`20'\n')`20`7B
X`20`20`20`20`20`20`20`20header`20=`200;
X**************
X***`20359,365
X`20`20`20`20if`20(m_seen)`20item_update(g,m);
X`20`20`20`20while`20(fgets(xfrbuf,510,fp))`20`7B
X`20`20`20`20`20`20if`20(*xfrbuf`20==`20'\n')`20`7B
X!`20`20`20`20`20`20`20w_ok`20=`201;
X`20`20`20`20`20`20`20`20do_rotit`20=`20rot13_sw;
X`20`20`20`20`20`20`20`20`7D
X`20`20`20`20`20`20if`20(w_ok)`20`7B`20
X---`20477,483`20-----
X`20`20`20`20header_line`20=`20-1;
X`20`20`20`20while`20(fgets(xfrbuf,510,fp))`20`7B
X`20`20`20`20`20`20if`20(*xfrbuf`20==`20'\n')`20`7B
X!`20`20`20`20`20`20`20header`20=`200;
X`20`20`20`20`20`20`20`20do_rotit`20=`20rot13_sw;
X`20`20`20`20`20`20`20`20`7D
X`20`20`20`20`20`20if`20(header)`20`7B
X**************
X***`20362,368
X`20`20`20`20`20`20`20`20w_ok`20=`201;
X`20`20`20`20`20`20`20`20do_rotit`20=`20rot13_sw;
X`20`20`20`20`20`20`20`20`7D
X!`20`20`20`20`20if`20(w_ok)`20`7B`20
X`20`20`20`20`20`20`20`20if`20(do_rotit)`20`7B
X`20`20`20`20`20`20`20`20`20`20char`20*a`20=`20xfrbuf;
X`20`20
X---`20480,502`20-----
X`20`20`20`20`20`20`20`20header`20=`200;
X`20`20`20`20`20`20`20`20do_rotit`20=`20rot13_sw;
X`20`20`20`20`20`20`20`20`7D
X!`20`20`20`20`20if`20(header)`20`7B
X!`20`20`20`20`20`20`20if`20((filter`20`26`20(1`20<<`20FILTER_SELECT_ALL))`20!=
V`200)
X!`20`20`20`20`20`20`20`20`20fputs(xfrbuf,fpextract);`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20/*`20ALL`20headerlines`20*/
X!`20`20`20`20`20`20`20else`20if`20((filter`20`26`20(1`20<<`20FILTER_SELECT_NON
VE))`20==`200)
X!`20`20`20`20`20`20`20`20`20`7B`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20/*`20not`20NONE`20*/
X!`20`20`20`20`20`20`20`20`20/*`20try`20to`20check`20if`20new`20headerline:`20h
Veaderline`20contains`20':'`20and`20*/
X!`20`20`20`20`20`20`20`20`20/*`20the`20first`20occurence`20of`20a`20':'`20is
V`20before`20the`20first`20occurence`20`20*/
X!`20`20`20`20`20`20`20`20`20/*`20of`20a`20'`20'`20(if`20there`20is`20a`20space
V)`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
V`20`20`20`20`20*/
X!`20`20`20`20`20`20`20`20`20if`20((strchr(xfrbuf,`20':')`20!=`200)`20`26`26
V`20(((strchr(xfrbuf,'`20')`20!=`200)`20
+-+-+-+-+-+-+-+-  END  OF PART 3 +-+-+-+-+-+-+-+-
----------------------------------------------------------------------------
Radio Suisse Ltd,       Internet:  winter@vision.rs.ch
Laupenstrasse 18a                  postmaster@rs.ch
3008 Bern               PSI-Mail: +22846431062::WINTER     (public X.25)
Switzerland             X.400: C=CH; A=ARCOM; P=RS; O=DM; S=WINTER, G=MARTIN
----------------------------------------------------------------------------
