From: SMTP%"bailey@HMIVAX.HUMGEN.UPENN.EDU" 21-JUN-1994 17:21:05.60 To: EVERHART CC: Subj: Patch: Re: RMS Performance Patch Message-Id: <9406180350.AA04526@uu7.psi.com> Date: Fri, 17 Jun 1994 19:34:33 EDT Reply-To: Charles Bailey Sender: ANU-NEWS Discussion From: Charles Bailey Organization: HHMI/Human Genetics, Univ of Pa. Subject: Patch: Re: RMS Performance Patch To: Multiple recipients of list ANU-NEWS In article <1994Jun14.192353.2478@hnrc.tufts.edu>, "Saul Tannenbaum" (Saul Tannenbaum) writes: > Charles Bailey has pointed out some inconsistencies in the base level > sources used to generate this patch. A new version will be posted > real soon now. I'm cancelling the original to reduce confusion. Here's a corrected version of this patch which Saul Tannenbaum sent to me. It applies fine to the base 6.1b9 sources. Enjoy! (FYI - this patch appears in the archive as 940614_NewsFiles.Patch; the date is that of the original posting.) Thanks to Saul for all his work. Regards, Charles Bailey !------------------------------------------------------------------------------- ! Computational Biology and Informatics Laboratory ! Dept. of Genetics, Univ. of Pennsylvania School of Medicine ! Philadelphia, PA USA 19104 Tel. (215) 573-3112 ! Internet: bailey@genetics.upenn.edu (IN 128.91.200.37) !------------------------------------------------------------------------------- $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : 940614_NEWSFILES.PATCH $! By : bailey@genetics.upenn.edu $! Date : 17-JUN-1994 01:15:42.81 $! Using: VMS_SHARE 8.4, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. 940614_NEWSFILES.PATCH $! $ set="set" $ set symbol/scope=(nolocal,noglobal) $ f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $ e="write sys$error ""%UNPACK"", " $ w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes,P4=size $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-HIGHVERS, Creating higher version of ", P1 $file_absent: $ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT/NOJOURNAL 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m; LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode LOCAL m;POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m= END_OF(b);DELETE(m);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")= 1 THEN SkipPartSep;ELSE ProcessLine;MOVE_HORIZONTAL(1);ENDIF;ENDLOOP; ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL, OFF);t:="0123456789ABCDEF";f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO(COMMAND_LINE,"output_file")); QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' XANU`20News`20Patch XPatch`20ID:`20940614_newsfiles.c!saul@hnrc.tufts.edu XDate:`2014-Jun-1994 XAuthor:`20Saul`20Tannenbaum`20`20saul@hnrc.tufts.edu XNews`20Version:`206.1beta9 XNews`20Files:`20NewsFiles.C,`20NewsAdd.C,`20NewsDelete.C,`20NewsRTL.C,`20NNTP_ VServer.C XDescription:`20Implements`20a`20number`20of`20RMS`20optimizations`20to`20file V`20I/O,`20particularly Xto`20the`20group,`20item,`20and`20history`20index`20files.`20`20These`20change Vs`20subsume`20and`20extend Xthose`20in`20the`20file`20Fast_Skim.Patch`20in`20the`206.1beta9`20distribution V.`20The`20following Xlogical`20names`20are`20used`20to`20control`20RMS`20indexed`20file`20performan Vce: X X`20`20NEWS_GROUPFILE_BUFFERCOUNT X`20`20NEWS_ITEMFILE_BUFFERCOUNT X`20`20NEWS_HISTORYFILE_BUFFERCOUNT X`09Sets`20the`20number`20of`20buffers`20used`20for`20each`20file X X`20`20NEWS_GROUPFILE_GLOBAL_BUFFERCOUNT X`20`20NEWS_ITEMFILE_GLOBAL_BUFFERCOUNT X`09Set`20the`20number`20of`20global`20buffers`20used`20for`20these`20files.`20 VThe`20code X`09ensures`20that`20the`20number`20of`20global`20buffers`20used`20is`20never V`20less X`09anything`20defined`20with`20SET`20FILE.`20Note`20that`20in`20a`20shared`20f Viled X`09environment,`20the`20first`20stream`20to`20connect`20to`20a`20file`20establ Vishes X`09its`20global`20buffer`20count. X X`20`20NEWS_GROUPFILE_RTV X`20`20NEWS_HISTORYFILE_RTV X`20`20NEWS_ITEMFILE_RTV X`09If`20defined`20to`20_any_`20value,`20turns`20on`20"cathedral`20windows",`20 Vcauses X`09an`20entire`20file`20to`20be`20mapped`20into`20its`20window`20control`20blo Vck,`20which X`09avoids`20window`20turns.`20Useful`20if`20these`20files`20are`20highly`20fra Vgmented. X X`20`20NEWS_GROUPFILE_DFW X`20`20NEWS_HISTORYFILE_DFW X`20`20NEWS_ITEMFILE_DFW X`09***`20Note:`20Use`20with`20caution.`20*** X`09If`20defined`20to`20_any_`20value,`20turns`20on`20"deferred`20write."`20By V`20default, X`09RMS`20uses`20a`20very`20conservative`20buffering`20strategy,`20writing`20an Vy`20changed X`09buffer`20to`20disk`20immediately.`20Deferred`20write`20changes`20that`20beh Vavior`20and X`09defers`20the`20writing`20of`20a`20buffer`20until`20that`20buffer`20is`20nee Vded`20for`20other X`09blocks.`20Use`20this`20option`20ONLY`20if`20you`20are`20prepared`20to`20reb Vuild`20your X`09group,`20item,`20and/or`20history`20files.`20If`20you`20don't`20know`20what V`20this`20means, X`09don't`20do`20it.`20The`20performance`20gains`20are`20not`20worth`20the`20pa Vin`20of`20learning X`09how`20to`20rebuild`20these`20files. X X`20`20NEWS_GROUPFILE_FASTDELETE X`20`20NEWS_HISTORYFILE_FASTDELETE X`20`20NEWS_ITEMFILE_FASTDELETE X`09If`20defined`20to`20_any_`20value,`20turns`20on`20RMS`20"fast`20delete".`20 V`20This`20option`20is X`09provided`20for`20future`20use;`20it`20has`20not`20been`20tested`20on`20the V`20current`20version`20of X`09News,`20so`20use`20it`20at`20your`20own`20risk. X***`20newsfiles.c X---`20newsfiles_new.c X************** X***`2028,33 X`20`20**`09V6.1b6`0928-Feb-1993`09mark.martinec@ijs.si X`20`20**`09`20`20-`20fix`20strncmp`20match`20for`20generic`20TCP`20`20(broken V`20by`20V6.0-4, X`20`20**`09`20`20`20`20so`20that`20/PROTOCOL=TCP`20matched`20TCPWARE`20instead V`20of`20generic`20TCP) X`20`20**`09V6.1b7`0927-May-93`09munroe@dmc.com X`20`20**`09`20`20`20`20rms$errno`20isn't`20returned`20properly`20from`20most V`20of`20the`20rms_`20routines.`20`20I X`20`20**`09`20`20`20`20need`20the`20information`20in`20order`20to`20debug`20so Vmething`20that`20is`20preventing X---`2028,36`20----- X`20`20**`09V6.1b6`0928-Feb-1993`09mark.martinec@ijs.si X`20`20**`09`20`20-`20fix`20strncmp`20match`20for`20generic`20TCP`20`20(broken V`20by`20V6.0-4, X`20`20**`09`20`20`20`20so`20that`20/PROTOCOL=TCP`20matched`20TCPWARE`20instead V`20of`20generic`20TCP) X+`20**`09V6.1b6`092-Mar-1993`09saul@hnrc.tufts.edu X+`20**`09`20`20-`20RMS`20optimizations X+`20**`09`20`20`20`20(see`20FAST_SKIM.PATCH`20/`20930302_NEWSFILES.PATCH`20for V`20details) X`20`20**`09V6.1b7`0927-May-93`09munroe@dmc.com X`20`20**`09`20`20`20`20rms$errno`20isn't`20returned`20properly`20from`20most V`20of`20the`20rms_`20routines.`20`20I X`20`20**`09`20`20`20`20need`20the`20information`20in`20order`20to`20debug`20so Vmething`20that`20is`20preventing X************** X***`2049,51 X`20`20**-- X`20`20*/ X`20`20`0C X---`2052,59`20----- X+`20**`09V6.1b9`20`2014-Jun-1994`09saul@hnrc.tufts.edu X+`20**`09`20`20`20-`20modifications`20to`20some`20of`20my`20rms`20performance V`20patches: X+`20**`09`20`20`20`20`20separate`20out`20potentially`20dangerous`20deferred`20 Vwrite X+`20**`09`20`20`20`20`20add`20latent`20support`20for`20"fast`20delete"`20on`20 Vitem`20file X+`20**`09`20`20`20`20`20change`20logical`20names`20to`20conform`20to`20NEWS_ V`20standard X`20`20**-- X`20`20*/ X`20`20`0C X************** X***`20103,108 X`20`20`20`20`20`20`7D X`20`20`20`20i->r`20=`20cc$rms_rab; X`20`20`20`20i->r.rab$l_fab`20=`20`26(i->f); X`20`20`20`20if`20((status=sys$open(`26(i->f)))`20`26`201)`20`7B X`20`20`20`20`20`20if`20((status=sys$connect(`26(i->r)))`20`26`201) X`20`20`20`20`20`20`20`20return(i); X---`20111,121`20----- X`20`20`20`20`20`20`7D X`20`20`20`20i->r`20=`20cc$rms_rab; X`20`20`20`20i->r.rab$l_fab`20=`20`26(i->f); X+`20 X+`20/*`20ST`202/2/93`20-`20turn`20on`20multibuffering`20and`20read`20ahead`20* V/ X+`20`20`20i`20->`20r.rab$l_rop`20`7C=`20RAB$M_RAH; X+`20`20`20i`20->`20r.rab$b_mbf`20=`202; X+`20 X`20`20`20`20if`20((status=sys$open(`26(i->f)))`20`26`201)`20`7B X`20`20`20`20`20`20if`20((status=sys$connect(`26(i->r)))`20`26`201) X`20`20`20`20`20`20`20`20return(i); X************** X***`20165,170 X`20`20`20`20i->r`20=`20cc$rms_rab; X`20`20`20`20i->r.rab$l_fab`20=`20`26(i->f); X`20`20 X`20`20`20`20sysprv(); X`20`20`20`20if`20((status=sys$create(`26(i->f)))`20`26`201)`20`7B X`20`20`20`20`20`20if`20((status=sys$connect(`26(i->r)))`20`26`201)`20`7B X---`20178,187`20----- X`20`20`20`20i->r`20=`20cc$rms_rab; X`20`20`20`20i->r.rab$l_fab`20=`20`26(i->f); X`20`20 X+`20/*`20ST`202/2/93`20-`20turn`20on`20multibuffering`20and`20write`20behind V`20*/ X+`20`20`20`20`20i`20->`20r.rab$l_rop`20`7C=`20RAB$M_WBH; X+`20`20`20`20`20i`20->`20r.rab$b_mbf`20=`202; X+`20 X`20`20`20`20sysprv(); X`20`20`20`20if`20((status=sys$create(`26(i->f)))`20`26`201)`20`7B X`20`20`20`20`20`20if`20((status=sys$connect(`26(i->r)))`20`26`201)`20`7B X************** X***`20222,227 X`20`20void`20openfiles(nntp_sts) X`20`20`20`20int`20nntp_sts; X`20`20`7B X`20`20`20`20char`20*in_line`20=`200,`20*gotenv,`20*cp,`20tmp`5B256`5D; X`20`20 X`20`20`20`20if`20(newsrc)`20fseek(newsrc,0,0); X---`20239,245`20----- X`20`20void`20openfiles(nntp_sts) X`20`20`20`20int`20nntp_sts; X`20`20`7B X+`20#define`20REG_OPEN_OPT`20"mbc=32","mbf=2","rop=rah" X`20`20`20`20char`20*in_line`20=`200,`20*gotenv,`20*cp,`20tmp`5B256`5D; X`20`20 X`20`20`20`20if`20(newsrc)`20fseek(newsrc,0,0); X************** X***`20225,231 X`20`20`20`20char`20*in_line`20=`200,`20*gotenv,`20*cp,`20tmp`5B256`5D; X`20`20 X`20`20`20`20if`20(newsrc)`20fseek(newsrc,0,0); X!`20`20`20else`20newsrc`20=`20fopen(news_register,"r","mbc=40"); X`20`20 X`20`20`20`20if`20(`20`20`20newsrc X`20`20`20`20`20`20`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X---`20243,249`20----- X`20`20`20`20char`20*in_line`20=`200,`20*gotenv,`20*cp,`20tmp`5B256`5D; X`20`20 X`20`20`20`20if`20(newsrc)`20fseek(newsrc,0,0); X!`20`20`20else`20newsrc`20=`20fopen(news_register,"r",REG_OPEN_OPT); X`20`20 X`20`20`20`20if`20(`20`20`20newsrc X`20`20`20`20`20`20`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X************** X***`20237,243 X`20`20`20`20`20`20`20`20nntp_client`20=`200; X`20`20`20`20`20`20`20`20fclose(newsrc);`20newsrc`20=`200; X`20`20`20`20`20`20`20`20strcpy(news_register,"SYS$LOGIN:NEWSRC"); X!`20`20`20`20`20`20`20if`20(`20`20`20(newsrc`20=`20fopen(news_register,"r","mb Vc=40"))`20!=`200 X`20`20`09`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`20`20`26`26`20*in_line`20==`20'`7E')`20`7B X`20`20`20`20`20`20`20`20`20`20fclose(newsrc);`20newsrc`20=`200; X---`20255,261`20----- X`20`20`20`20`20`20`20`20nntp_client`20=`200; X`20`20`20`20`20`20`20`20fclose(newsrc);`20newsrc`20=`200; X`20`20`20`20`20`20`20`20strcpy(news_register,"SYS$LOGIN:NEWSRC"); X!`20`20`20`20`20`20`20if`20(`20`20`20(newsrc`20=`20fopen(news_register,"r",REG V_OPEN_OPT))`20!=`200 X`20`20`09`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`20`20`26`26`20*in_line`20==`20'`7E')`20`7B X`20`20`20`20`20`20`20`20`20`20fclose(newsrc);`20newsrc`20=`200; X************** X***`20255,261 X`20`20`09`20`20sprintf(news_register,"SYS$LOGIN:NEWSRC#%s",nntp_node); X`20`20`09`20`20while`20((cp`20=`20strchr(news_register,'.'))`20!=`200)`20*cp V`20=`20'-'; X`20`20`09`20`20if`20((cp`20=`20strchr(news_register,'#'))`20!=`200)`20*cp`20= V`20'.'; X!`20`20`20`20`20`20`20`20`20`20`20if`20(`20`20`20(newsrc`20=`20fopen(news_regi Vster,"r","mbc=40"))`20!=`200 X`20`20`09`20`20`20`20`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`20`20`20`20`20`20`26`26`20*in_line`20==`20'`7E'`20`26`26`20(cp`20= V`20strchr(in_line+1,'`7E'))`20!=`200)`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20`20*cp--`20=`20'`5C0'; X---`20273,279`20----- X`20`20`09`20`20sprintf(news_register,"SYS$LOGIN:NEWSRC#%s",nntp_node); X`20`20`09`20`20while`20((cp`20=`20strchr(news_register,'.'))`20!=`200)`20*cp V`20=`20'-'; X`20`20`09`20`20if`20((cp`20=`20strchr(news_register,'#'))`20!=`200)`20*cp`20= V`20'.'; X!`20`20`20`20`20`20`20`20`20`20`20if`20(`20`20`20(newsrc`20=`20fopen(news_regi Vster,"r",REG_OPEN_OPT))`20!=`200 X`20`20`09`20`20`20`20`20`20`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`20`20`20`20`20`20`26`26`20*in_line`20==`20'`7E'`20`26`26`20(cp`20= V`20strchr(in_line+1,'`7E'))`20!=`200)`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20`20*cp--`20=`20'`5C0'; X************** X***`20285,291 X`20`20`20`20`20`20sprintf(news_register,"SYS$LOGIN:NEWSRC#%s",nntp_node); X`20`20`20`20`20`20while`20((cp`20=`20strchr(news_register,'.'))`20!=`200)`20*c Vp`20=`20'-'; X`20`20`20`20`20`20if`20((cp`20=`20strchr(news_register,'#'))`20!=`200)`20*cp V`20=`20'.'; X!`20`20`20`20`20if`20(`20`20`20(nntp_sts`20<`203)`20`26`26`20(newsrc`20=`20fop Ven(news_register,"r","mbc=40"))`20!=`200 X`20`20`09`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`26`26`20*in_line`20==`20'`7E'`20`26`26`20(cp`20=`20strchr(in_line+1, V'`7E'))`20!=`200)`20`7B X`20`20`20`20`20`20`20`20*cp--`20=`20'`5C0'; X---`20303,310`20----- X`20`20`20`20`20`20sprintf(news_register,"SYS$LOGIN:NEWSRC#%s",nntp_node); X`20`20`20`20`20`20while`20((cp`20=`20strchr(news_register,'.'))`20!=`200)`20*c Vp`20=`20'-'; X`20`20`20`20`20`20if`20((cp`20=`20strchr(news_register,'#'))`20!=`200)`20*cp V`20=`20'.'; X!`20`20`20`20`20if`20(`20`20`20(nntp_sts`20<`203)`20`26`26`20(newsrc`20=`20fop Ven(news_register,"r",REG_OPEN_OPT))`20 X!`20`09`09`09`09`09`09`09`09`09`20`20`20`20!=`200 X`20`20`09`26`26`20(in_line`20=`20fgetl(newsrc))`20!=`200 X`20`20`09`26`26`20*in_line`20==`20'`7E'`20`26`26`20(cp`20=`20strchr(in_line+1, V'`7E'))`20!=`200)`20`7B X`20`20`20`20`20`20`20`20*cp--`20=`20'`5C0'; X************** X***`20363,368 X`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`7D X`20`20`20`20else`20`7B X`20`20`20`20`20`20kid_valid`20=`200; X`20`20`20`20`20`20if`20(init_lock())`20exit(1); X`20`20`20`20`20`20kid_valid`20=`201; X---`20382,397`20----- X`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`7D X`20`20`20`20else`20`7B X+`20/*`20ST`202/2/93`20RMS`20Performance`20Patch`20*/ X+`20`09int`20buff_count=0; X+`20`09char`20*buff_count_ptr; X+`20`09int`20item_performance`20=`20FALSE; X+`20`09buff_count_ptr`20=`20news_getenv("NEWS_ITEMFILE_BUFFERCOUNT",0); X+`20`09if`20(buff_count_ptr`20!=`20NULL) X+`20`09`7B X+`20`09`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20`09`20`20`20`20item_performance`20=`20TRUE; X+`20`09`7D X`20`20`20`20`20`20kid_valid`20=`200; X`20`20`20`20`20`20if`20(init_lock())`20exit(1); X`20`20`20`20`20`20kid_valid`20=`201; X************** X***`20372,377 X`20`20`20`20`20`20itmfab.fab$l_fna`20=`20ITM_FILENAME; X`20`20`20`20`20`20itmfab.fab$b_fns`20=`20strlen(itmfab.fab$l_fna); X`20`20`20`20`20`20itmfab.fab$l_fop`20=`20FAB$M_CIF; X`20`20`20`20`20`20itmfab.fab$w_mrs`20=`20sizeof`20newsitm; X`20`20`20`20`20`20itmfab.fab$b_org`20=`20FAB$C_IDX; X`20`20`20`20`20`20itmfab.fab$b_rat`20=`20FAB$M_CR; X---`20401,412`20----- X`20`20`20`20`20`20itmfab.fab$l_fna`20=`20ITM_FILENAME; X`20`20`20`20`20`20itmfab.fab$b_fns`20=`20strlen(itmfab.fab$l_fna); X`20`20`20`20`20`20itmfab.fab$l_fop`20=`20FAB$M_CIF; X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_ITEMFILE_DFW",0)`20!=`200) X+`20`09`20`20`20`20`09itmfab.fab$l_fop`20`7C=`20FAB$M_DFW;`20/*`20deferred`20w Vrite`20*/ X+`20`20`20`20`20if`20(news_getenv("NEWS_ITEMFILE_RTV",0)`20!=`200) X+`20`09itmfab.fab$b_rtv`20=`20255;`09`20`20`20`20`20`20`20/*`20map`20the`20ent Vire`20file`20*/ X+`20 X`20`20`20`20`20`20itmfab.fab$w_mrs`20=`20sizeof`20newsitm; X`20`20`20`20`20`20itmfab.fab$b_org`20=`20FAB$C_IDX; X`20`20`20`20`20`20itmfab.fab$b_rat`20=`20FAB$M_CR; X************** X***`20409,414 X`20`20`20`20`20`20itmrab.rab$l_rbf`20=`20(char`20*)`20`26newsitm; X`20`20`20`20`20`20itmrab.rab$w_rsz`20=`20sizeof`20newsitm; X`20`20 X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(!sys_open_nofnf(`26itmfab))`20`7B X`20`20#ifndef`20V58_UPGRADE_MANUAL X---`20444,456`20----- X`20`20`20`20`20`20itmrab.rab$l_rbf`20=`20(char`20*)`20`26newsitm; X`20`20`20`20`20`20itmrab.rab$w_rsz`20=`20sizeof`20newsitm; X`20`20 X+`20/*`20ST`203/2/93`20`20-`20use`20up`20to`20127`20buffers`20for`20the`20item V`20file`20*/ X+`20`20`20`20`20if`20(item_performance)`20 X+`20`09itmrab.rab$b_mbf`20=`20(buff_count`20<=`20127)`20?`20buff_count`20:`201 V27; X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_ITEMFILE_FASTDELETE",0)`20!=`200) X+`20`09itmrab.rab$l_rop`20`7C=`20RAB$M_FDL; X+`20 X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(!sys_open_nofnf(`26itmfab))`20`7B X`20`20#ifndef`20V58_UPGRADE_MANUAL X************** X***`20437,442 X`20`20`20`20`20`20`20`20first_time(); X`20`20`20`20`20`20`20`20printf("`5CtNEWS`20-`20create`20new`20ITEM`20file`5Cn" V); X`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20sys_connect(`26itmrab); X`20`20`20`20`20`20`7B`20int`20old_itmrop`20=`20itmrab.rab$l_rop; X`20`20`20`20`20`20`20`20itmrab.rab$l_rop`20`7C=`20RAB$M_RRL`20`7C`20RAB$M_NLK; V X---`20479,499`20----- X`20`20`20`20`20`20`20`20first_time(); X`20`20`20`20`20`20`20`20printf("`5CtNEWS`20-`20create`20new`20ITEM`20file`5Cn" V); X`20`20`20`20`20`20`20`20`7D X+`20/*`206/7/94`20-`20saul@hnrc.tufts.edu`20add`20global`20buffer`20handling V`20*/ X+`20`20`20`20`20`20`20`7B X+`20`09int`20buff_count=0; X+`20`09char`20*buff_count_ptr; X+`20`09buff_count_ptr`20=`20news_getenv("NEWS_ITEMFILE_GLOBAL_BUFFERCOUNT",0); V X+`20`09if`20(buff_count_ptr`20!=`20NULL) X+`20`09`7B X+`20`09`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20 X+`20/*`20the`20file's`20global`20buffer`20count`20gets`20loaded`20on`20open`20 Vby`20RMS,`20use`20the X+`20`20`20`20`20maximum`20of`20the`20stored`20value`20and`20the`20logical`20de Vfined`20value`20*/ X+`20 X+`20`09`20`20`20`20if`20(itmfab.fab$w_gbc`20<`20buff_count)`20itmfab.fab$w_gbc V`20=`20buff_count; X+`20`09`7D X+`20`20`20`20`20`7D X`20`20`20`20`20`20sys_connect(`26itmrab); X`20`20`20`20`20`20`7B`20int`20old_itmrop`20=`20itmrab.rab$l_rop; X`20`20`20`20`20`20`20`20itmrab.rab$l_rop`20`7C=`20RAB$M_RRL`20`7C`20RAB$M_NLK; V X************** X***`20460,465 X`20`20`20`20`20`20nosysprv(); X`20`20 X`20`20`20`20`20`20/*`20open`20the`20index`20newsgroup`20descriptor`20file`20fo Vr`20full`20access`20*/ X`20`20`20`20`20`20grpfab`20=`20cc$rms_fab; X`20`20`20`20`20`20grpfab.fab$b_bks`20=`203; X`20`20`20`20`20`20grpfab.fab$b_fac`20=`20FAB$M_GET`20`7C`20FAB$M_PUT`20`7C`20F VAB$M_UPD`20`7C`20FAB$M_DEL`20; X---`20517,534`20----- X`20`20`20`20`20`20nosysprv(); X`20`20 X`20`20`20`20`20`20/*`20open`20the`20index`20newsgroup`20descriptor`20file`20fo Vr`20full`20access`20*/ X+`20/*`20ST`203/2/93`20-`20RMS`20Performance`20Patches`20*/ X+`20`7B X+`20`09int`20buff_count=0; X+`20`09char`20*buff_count_ptr; X+`20`09int`20group_performance`20=`20FALSE; X+`20`09buff_count_ptr`20=`20news_getenv("NEWS_GROUPFILE_BUFFERCOUNT",0); X+`20`09if`20(buff_count_ptr`20!=`20NULL) X+`20`09`7B X+`20`09`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20`09`20`20`20`20group_performance`20=`20TRUE; X+`20`09`7D X+`20 X`20`20`20`20`20`20grpfab`20=`20cc$rms_fab; X`20`20`20`20`20`20grpfab.fab$b_bks`20=`203; X`20`20`20`20`20`20grpfab.fab$b_fac`20=`20FAB$M_GET`20`7C`20FAB$M_PUT`20`7C`20F VAB$M_UPD`20`7C`20FAB$M_DEL`20; X************** X***`20466,471 X`20`20`20`20`20`20grpfab.fab$l_fna`20=`20GRP_FILENAME; X`20`20`20`20`20`20grpfab.fab$b_fns`20=`20strlen(grpfab.fab$l_fna); X`20`20`20`20`20`20grpfab.fab$l_fop`20=`20FAB$M_CIF; X`20`20`20`20`20`20grpfab.fab$w_mrs`20=`20NEWS_GRPFIL_RSZ; X`20`20`20`20`20`20grpfab.fab$b_org`20=`20FAB$C_IDX; X`20`20`20`20`20`20grpfab.fab$b_rat`20=`20FAB$M_CR; X---`20535,550`20----- X`20`20`20`20`20`20grpfab.fab$l_fna`20=`20GRP_FILENAME; X`20`20`20`20`20`20grpfab.fab$b_fns`20=`20strlen(grpfab.fab$l_fna); X`20`20`20`20`20`20grpfab.fab$l_fop`20=`20FAB$M_CIF; X+`20 X+`20 X+`20/*`206/6/94`20saul@hnrc.tufts.edu`20-`20optionally`20turn`20on`20other`20p Verformance X+`20`09`09`09`09enhancements`20*/ X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_GROUPFILE_DFW",0)`20!=`200) X+`20`09`20`20`20`20`09grpfab.fab$l_fop`20`7C=`20FAB$M_DFW;`20/*`20deferred`20w Vrite`20*/ X+`20`20`20`20`20if`20(news_getenv("NEWS_GROUPFILE_RTV",0)`20!=`200) X+`20`09`09grpfab.fab$b_rtv`20=`20255;`09`20`20`20`20`20`20`20/*`20map`20the`20 Ventire`20file`20*/ X+`20 X`20`20`20`20`20`20grpfab.fab$w_mrs`20=`20NEWS_GRPFIL_RSZ; X`20`20`20`20`20`20grpfab.fab$b_org`20=`20FAB$C_IDX; X`20`20`20`20`20`20grpfab.fab$b_rat`20=`20FAB$M_CR; X************** X***`20499,504 X`20`20`20`20`20`20grprab.rab$l_rbf`20=`20(char`20*)`20`26newsgrp; X`20`20`20`20`20`20grprab.rab$w_rsz`20=`20NEWS_GRPFIL_RSZ; X`20`20 X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(no_priv())`20sys_open(`26grpfab); X`20`20`20`20`20`20else`20sys_create(`26grpfab); X---`20578,591`20----- X`20`20`20`20`20`20grprab.rab$l_rbf`20=`20(char`20*)`20`26newsgrp; X`20`20`20`20`20`20grprab.rab$w_rsz`20=`20NEWS_GRPFIL_RSZ; X`20`20 X+`20/*`20ST`203/2/93`20RMS`20Performance`20*/ X+`20`20`20`20`20if`20(group_performance) X+`20`09grprab.rab$b_mbf`20=`20(buff_count`20<=`20127)`20?`20buff_count`20:`201 V27; X+`20`7D X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_GROUPFILE_FASTDELETE",0)`20!=`200) X+`20`09grprab.rab$l_rop`20`7C=`20RAB$M_FDL; X+`20 X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(no_priv())`20sys_open(`26grpfab); X`20`20`20`20`20`20else`20sys_create(`26grpfab); X************** X***`20502,507 X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(no_priv())`20sys_open(`26grpfab); X`20`20`20`20`20`20else`20sys_create(`26grpfab); X`20`20`20`20`20`20if`20(status`20!=`20RMS$_CREATED) X`20`20`20`20`20`20`20`20sys_connect(`26grprab); X`20`20`20`20`20`20else`20`7B X---`20589,610`20----- X`20`20`20`20`20`20sysprv(); X`20`20`20`20`20`20if`20(no_priv())`20sys_open(`26grpfab); X`20`20`20`20`20`20else`20sys_create(`26grpfab); X+`20 X+`20/*`206/7/94`20-`20saul@hnrc.tufts.edu`20add`20global`20buffer`20handling V`20*/ X+`20`20`20`20`20`20`20`7B X+`20`09int`20buff_count=0; X+`20`09char`20*buff_count_ptr; X+`20`09buff_count_ptr`20=`20news_getenv("NEWS_GROUPFILE_GLOBAL_BUFFERCOUNT",0) V; X+`20`09if`20(buff_count_ptr`20!=`20NULL) X+`20`09`7B X+`20`09`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20 X+`20/*`20the`20file's`20global`20buffer`20count`20gets`20loaded`20on`20open`20 Vby`20RMS,`20use`20the X+`20`20`20`20`20maximum`20of`20the`20stored`20value`20and`20the`20logical`20de Vfined`20value`20*/ X+`20 X+`20`09`20`20`20`20if`20(grpfab.fab$w_gbc`20<`20buff_count)`20grpfab.fab$w_gbc V`20=`20buff_count; X+`20`09`7D X+`20`20`20`20`20`7D X`20`20`20`20`20`20if`20(status`20!=`20RMS$_CREATED) X`20`20`20`20`20`20`20`20sys_connect(`26grprab); X`20`20`20`20`20`20else`20`7B X***`20newsadd.c X---`20newsadd_new.c X************** X***`20238,240 X`20`20** X`20`20**-- X`20`20**/ X---`20238,242`20----- X+`20**`096.1b9`0914-Jun-1994`20Saul`20Tannenbaum`20saul@hnrc.tufts.edu X+`20**`09`20`20-`20add`20rms`20tuning`20hooks X`20`20** X`20`20**-- X`20`20**/ X************** X***`201070,1076 X`20`20`7D X`20`20`0C X`20`20/* X!`20`20*`20`20out_body X`20`20`20* X`20`20`20*`20`20Write`20the`20body`20of`20an`20article`20out`20to`20a`20file X`20`20`20*/ X---`201072,1078`20----- X`20`20`7D X`20`20`0C X`20`20/* X!`20`20*`20`20length_header X`20`20`20* X`20`20`20*`20`20Calculates`20approximate`20length`20of`20all`20header`20lines V`20of`20an`20article. X`20`20`20*`09Modeled`20in`20out_header`20above`20ST`206/6/94 X************** X***`201072,1077 X`20`20/* X`20`20`20*`20`20out_body X`20`20`20* X`20`20`20*`20`20Write`20the`20body`20of`20an`20article`20out`20to`20a`20file X`20`20`20*/ X`20`20 X---`201074,1101`20----- X`20`20/* X`20`20`20*`20`20length_header X`20`20`20* X+`20`20*`20`20Calculates`20approximate`20length`20of`20all`20header`20lines`20 Vof`20an`20article. X+`20`20*`09Modeled`20in`20out_header`20above`20ST`206/6/94 X+`20`20*/ X+`20 X+`20int`20length_header() X+`20`7B X+`20`20`20int`20i; X+`20`20`20int`20total_length`20=`2060;`20/*`20estimated`20size`20of`20a`20"rel Vay"`20header`20*/ X+`20 X+`20`20`20for`20(i`20=`200;`20i`20<`20OHEADERS;`20++i)`20`7B X+`20`20`20`20`20`20`20total_length`20=`20total_length`20+`20HDR_TEXT_L(i); X+`20`20`20`20`20`20`20`7D X+`20`20`20/*`20append`20all`20the`20remaining`20header`20lines,`20unrecognized V`20by`20ANU-NEWS`20*/ X+`20`20`20for`20(i`20=`200;`20i`20<`20itm_unk_l;`20++i)`20`7B X+`20`20`20`20`20total_length`20=`20total_length`20+`20UNK_HDR_TEXT_L(i); X+`20`20`20`20`20`7D X+`20`20`20`20`20return(total_length); X+`20`7D X+`20`0C X+`20/* X+`20`20*`20`20out_body X+`20`20* X`20`20`20*`20`20Write`20the`20body`20of`20an`20article`20out`20to`20a`20file X`20`20`20*/ X`20`20 X************** X***`201093,1099 X`20`20`7D X`20`20`0C X`20`20/* X!`20`20*`20`20create_article X`20`20`20* X`20`20`20*`20`20Create`20an`20article`20file`20from`20the`20headers`20and`20bo Vdy`20stored`20in`20memory X`20`20`20* X---`201117,1123`20----- X`20`20`7D X`20`20`0C X`20`20/* X!`20`20*`20`20length_body X`20`20`20* X`20`20`20*`20`20Estimate`20the`20length`20of`20the`20body`20of`20an`20article V`20and`20return`20it X`20`20`20*`20`20ST`206/5/94 X************** X***`201095,1100 X`20`20/* X`20`20`20*`20`20create_article X`20`20`20* X`20`20`20*`20`20Create`20an`20article`20file`20from`20the`20headers`20and`20bo Vdy`20stored`20in`20memory X`20`20`20* X`20`20`20*`20`20return`20NULL`20on`20error,`20otherwise`20return`20ptr`20to`20 Vfilename X---`201119,1145`20----- X`20`20/* X`20`20`20*`20`20length_body X`20`20`20* X+`20`20*`20`20Estimate`20the`20length`20of`20the`20body`20of`20an`20article`20 Vand`20return`20it X+`20`20*`20`20ST`206/5/94 X+`20`20*/ X+`20 X+`20int`20length_body() X+`20`7B X+`20`20`20if`20(!fpt) X+`20`20`20`20`20`7B X+`20`20`20`20`20return(artbuf_l); X+`20`20`20`20`20`7D X+`20`20`20else`20`7B X+`20`20`20stat_t`20statb; X+`20`20`20`20`20fstat`20(fileno`20(fpt),`20`26statb); X+`20`20`20`20`20return(statb.st_size); X+`20`20`20`20`20`7D X+`20`20`20return(0); X+`20`7D X+`20`0C X+`20/* X+`20`20*`20`20create_article X+`20`20* X`20`20`20*`20`20Create`20an`20article`20file`20from`20the`20headers`20and`20bo Vdy`20stored`20in`20memory X`20`20`20* X`20`20`20*`20`20return`20NULL`20on`20error,`20otherwise`20return`20ptr`20to`20 Vfilename X************** X***`201107,1112 X`20`20`20*`20`20in`20memory).`20`20The`20second`20parameter`20is`20xref,`20whi Vch`20is`20a`20pointer`20to`20the X`20`20`20*`20`20xref`20header`20string`20if`20needed.`20`20This`20is`20the`20o Vne`20header`20line`20that`20is`20not X`20`20`20*`20`20output`20by`20out_header. X`20`20`20*/ X`20`20 X`20`20char`20*create_article(fn,xref) X---`201152,1161`20----- X`20`20`20*`20`20in`20memory).`20`20The`20second`20parameter`20is`20xref,`20whi Vch`20is`20a`20pointer`20to`20the X`20`20`20*`20`20xref`20header`20string`20if`20needed.`20`20This`20is`20the`20o Vne`20header`20line`20that`20is`20not X`20`20`20*`20`20output`20by`20out_header. X+`20`20* X+`20`20*`20`20`20modified`20by`20saul@hnrc.tufts.edu`20to`20estimated`20articl Ve`20size`20and X+`20`20*`09pre-extend`20the`20article`20file`20and`20open`20it`20with`20multib Vlocking, X+`20`20*`09multibuffering,`20and`20write`20behind. X`20`20`20*/ X`20`20 X`20`20char`20*create_article(fn,xref) X************** X***`201114,1120 X`20`20`20`20char`20*xref;`09`09`09/*`20xref`20header`20line`20for`20article`20 Vor`20NULL`20*/ X`20`20`7B X`20`20`20`20FILE`20*fpw; X!`20 X`20`20`20`20if`20(!fn)`20fn`20=`20scratchfilename; X`20`20`20`20sysprv(); X`20`20`20`20if`20(!(fpw`20=`20fopen(fn,"w","mbc=20")))`20`7B X---`201163,1174`20----- X`20`20`20`20char`20*xref;`09`09`09/*`20xref`20header`20line`20for`20article`20 Vor`20NULL`20*/ X`20`20`7B X`20`20`20`20FILE`20*fpw; X!`20`20`20int`20estimated_length`20=`200; X!`20`09`09`09`09/*`20calculated`20the`20estimated`20length`20of`20the X!`20`09`09`09`09`20`20`20article`20and`20prextend`20the`20file`20*/ X!`20`20`20char`20alloc_size`5B32`5D; X!`20`20`20estimated_length`20=`20length_header()`20+`20length_body(); X!`20`20`20sprintf`20(alloc_size,`20"alq=%d",`20((estimated_length+511)/512)); V X`20`20`20`20if`20(!fn)`20fn`20=`20scratchfilename; X`20`20`20`20sysprv(); X`20`20`20`20if`20(!(fpw`20=`20fopen`20(fn,"w",alloc_size,`20"mbc=16","mbf=2"," Vrop=wbh", X************** X***`201117,1123 X`20`20 X`20`20`20`20if`20(!fn)`20fn`20=`20scratchfilename; X`20`20`20`20sysprv(); X!`20`20`20if`20(!(fpw`20=`20fopen(fn,"w","mbc=20")))`20`7B X`20`20`20`20`20`20nosysprv(); X`20`20`20`20`20`20del_after`20=`200; X`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_w(fpw,fn); X---`201171,1178`20----- X`20`20`20`20sprintf`20(alloc_size,`20"alq=%d",`20((estimated_length+511)/512)) V; X`20`20`20`20if`20(!fn)`20fn`20=`20scratchfilename; X`20`20`20`20sysprv(); X!`20`20`20if`20(!(fpw`20=`20fopen`20(fn,"w",alloc_size,`20"mbc=16","mbf=2","ro Vp=wbh", X!`20`09`09`09`20`20`20`20"deq=16","fop=cbt,tef")))`20`7B X`20`20`20`20`20`20nosysprv(); X`20`20`20`20`20`20del_after`20=`200; X`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_w(fpw,fn); X************** X***`201437,1443 X`20`20#if`20ADDFILE_STATISTICS_ENABLE X`20`20`20`20`20`20stat_artbuf_too_small++; X`20`20#endif X!`20`20`20`20`20if`20(!(fpt`20=`20fopen(bigitem_scratchfilename,"w+",`20"mbc=3 V2")))`20`7B X`20`20`20`20`20`20`20`20temp_file_error`20=`201;`20del_after`20=`200; X`20`20`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_w(fpt, Vbigitem_scratchfilename); X`20`20`20`20`20`20`20`20print_log("ERROR`20(Cannot`20open`20scratch`20file`20% Vs)",`20bigitem_scratchfilename,`200); X---`201492,1499`20----- X`20`20#if`20ADDFILE_STATISTICS_ENABLE X`20`20`20`20`20`20stat_artbuf_too_small++; X`20`20#endif X!`20`20`20`20`20if`20(!(fpt`20=`20fopen(bigitem_scratchfilename,"w+",`20"mbc=3 V2", X!`20`09`09`09`09`09`09`20`20`20`20"mbf=2","rop=wbh")))`20`7B X`20`20`20`20`20`20`20`20temp_file_error`20=`201;`20del_after`20=`200; X`20`20`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_w(fpt, Vbigitem_scratchfilename); X`20`20`20`20`20`20`20`20print_log("ERROR`20(Cannot`20open`20scratch`20file`20% Vs)",`20bigitem_scratchfilename,`200); X************** X***`201707,1713 X`20`20`20/*`20printf("`5CtError:`20Add`20-`20`5Cn");`20*/ X`20`20`20`20`20`20return(0); X`20`20`20`20`20`20`7D X!`20`20`20if`20(!(fpr`20=`20fopen(fnam,"r","mbc=120")))`20`7B X`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_r(fpr,fnam); V X`20`20`20`20`20`20print_log("ERROR`20(Cannot`20read`20%s)",`20fnam,`200); X`20`20`20/*`20printf("`5CtError:`20Add`20-`20Cannot`20read`20%s`5Cn",fnam);`20 V*/ X---`201763,1769`20----- X`20`20`20/*`20printf("`5CtError:`20Add`20-`20`5Cn");`20*/ X`20`20`20`20`20`20return(0); X`20`20`20`20`20`20`7D X!`20`20`20if`20(!(fpr`20=`20fopen(fnam,"r","mbc=64","mbf=2","rop=rah")))`20`7B V X`20`20`20`20`20`20if`20(!try_to_quietly_handle_errors)`20_ck_open_r(fpr,fnam); V X`20`20`20`20`20`20print_log("ERROR`20(Cannot`20read`20%s)",`20fnam,`200); X`20`20`20/*`20printf("`5CtError:`20Add`20-`20Cannot`20read`20%s`5Cn",fnam);`20 V*/ X***`20newsdelete.c X---`20newsdelete_new.c X************** X***`2033,35 X`20`20**-- X`20`20**/ X`20`20`0C X---`2033,37`20----- X+`20**`20`20`206.1b9`20`2014-Jun-1994`20Saul`20Tannenbaum`20saul@hnrc.tufts.ed Vu X+`20**`20`20`20`20-`20add`20rms`20tuning`20hooks X`20`20**-- X`20`20**/ X`20`20`0C X************** X***`20156,161 X`20`20open_hist_file() X`20`20`7B X`20`20`20`20FILE`20*fpw; X`20`20 X`20`20`20`20if`20(nntp_client)`20return(0); X`20`20`20`20if`20(hist_off)`20return(0); X---`20158,167`20----- X`20`20open_hist_file() X`20`20`7B X`20`20`20`20FILE`20*fpw; X+`20/*`20ST`203/2/93`20-`20RMS`20Performance`20Options`20for`20History`20file V`20access`20*/ X+`20`20`20int`20buff_count=0; X+`20`20`20char`20*buff_count_ptr; X+`20`20`20int`20hist_performance`20=`20FALSE; X`20`20 X`20`20 X`20`20`20`20if`20(nntp_client)`20return(0); X************** X***`20157,162 X`20`20`7B X`20`20`20`20FILE`20*fpw; X`20`20 X`20`20`20`20if`20(nntp_client)`20return(0); X`20`20`20`20if`20(hist_off)`20return(0); X`20`20`20`20sysprv(); X---`20163,169`20----- X`20`20`20`20char`20*buff_count_ptr; X`20`20`20`20int`20hist_performance`20=`20FALSE; X`20`20 X+`20 X`20`20`20`20if`20(nntp_client)`20return(0); X`20`20`20`20if`20(hist_off)`20return(0); X`20`20`20`20sysprv(); X************** X***`20176,181 X`20`20`20`20histfab.fab$b_fns`20=`20strlen(histfab.fab$l_fna); X`20`20`20`20histfab.fab$b_shr`20=`20FAB$M_SHRDEL`20`7C`20FAB$M_SHRGET`20`7C`20 VFAB$M_SHRPUT`20`7C`20FAB$M_SHRUPD; X`20`20 X`20`20`20`20if`20(!sys_open_nofnf(`26histfab))`20`7B X`20`20`20`20`20`20histfab.fab$b_bks`20=`204; X`20`20`20`20`20`20histfab.fab$l_fop`20=`20FAB$M_CIF; X---`20183,200`20----- X`20`20`20`20histfab.fab$b_fns`20=`20strlen(histfab.fab$l_fna); X`20`20`20`20histfab.fab$b_shr`20=`20FAB$M_SHRDEL`20`7C`20FAB$M_SHRGET`20`7C`20 VFAB$M_SHRPUT`20`7C`20FAB$M_SHRUPD; X`20`20 X+`20/*`20ST`203/2/93`20RMS`20Performance`20Patches`20*/ X+`20`20`20buff_count_ptr`20=`20news_getenv("NEWS_HISTORYFILE_BUFFERCOUNT",0); V X+`20`20`20if`20(buff_count_ptr`20!=`20NULL) X+`20`09`7B X+`20`09`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20`09`20hist_performance`20=`20TRUE; X+`20`09`7D X+`20 X+`20`20`20if`20(news_getenv("NEWS_HISTORYFILE_DFW",0)`20!=`200) X+`20`09`09`20histfab.fab$l_fop`20`7C=`20FAB$M_DFW;`20/*`20deferred`20write`20* V/ X+`20`20`20if`20(news_getenv("NEWS_HISTORYFILE_RTV",0)`20!=`200) X+`20`09`09`20histfab.fab$b_rtv`20=`20255;`09/*`20map`20the`20entire`20file`20* V/ X`20`20`20`20if`20(!sys_open_nofnf(`26histfab))`20`7B X`20`20`20`20`20`20histfab.fab$b_bks`20=`204; X`20`20`20`20`20`20histfab.fab$l_fop`20=`20FAB$M_CIF; X************** X***`20214,219 X`20`20`20`20histrab.rab$l_rbf`20=`20(char`20*)`20`26newshist; X`20`20`20`20histrab.rab$w_rsz`20=`20sizeof`20newshist; X`20`20 X`20`20`20`20if`20(!sys_connect(`26histrab))`20`7B X`20`20`20`20`20`20sys_close(`26histfab); X`20`20`20`20`20`20nosysprv(); X---`20233,245`20----- X`20`20`20`20histrab.rab$l_rbf`20=`20(char`20*)`20`26newshist; X`20`20`20`20histrab.rab$w_rsz`20=`20sizeof`20newshist; X`20`20 X+`20/*`20ST`203/2/93`20RMS`20Performance`20Patches`20*/ X+`20`20`20`20`20if`20(hist_performance)`20 X+`20`09histrab.rab$b_mbf`20=`20(buff_count`20<=`20127)`20?`20buff_count`20:`20 V127; X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_HISTORYFILE_FASTDELETE",0)`20!=`200) X+`20`09histrab.rab$l_rop`20`7C=`20RAB$M_FDL; X+`20`09 X`20`20`20`20if`20(!sys_connect(`26histrab))`20`7B X`20`20`20`20`20`20sys_close(`26histfab); X`20`20`20`20`20`20nosysprv(); X***`20newsrtl.c X---`20newsrtl_new.c X************** X***`2066,68 X`20`20**-- X`20`20**/ X`20`20`0C X---`2066,70`20----- X+`20**`09V6.1b9`20`20`20`206-Jun-1994`09saul@hnrc.tufts.edu X+`20**`09`20`20-`20in`20file_copy,`20dynamically`20allocate`20a`20buffer`20of V`20up`20to`2063`20blocks X`20`20**-- X`20`20**/ X`20`20`0C X************** X***`20903,908 X`20`20`20`20`20`20`20`20`20*to; X`20`20`20`20int`20bypass_signalling_errors;`20`20/*`20bypass`20signalling`20of V`20some X`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`20 V`20`20`20`20`20`20`20`20`20`20`20`20of`20the`20more`20common`20errors`20*/ X`20`20`7B X`20`20`20`20struct`20FAB`20infab, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20outfab; X---`20905,913`20----- X`20`20`20`20`20`20`20`20`20*to; X`20`20`20`20int`20bypass_signalling_errors;`20`20/*`20bypass`20signalling`20of V`20some X`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`20 V`20`20`20`20`20`20`20`20`20`20`20`20of`20the`20more`20common`20errors`20*/ X+`20`20`20`20`20/*`206/6/94`20-`20saul@hnrc.tufts.edu`20-`20Dynamically`20allo Vcate`20the`20buffer X+`20`09`09up`20to`2063`20blocks`20*/ X+`20`09`20`20`20`20 X`20`20`7B X`20`20`20`20struct`20FAB`20infab, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20outfab; X************** X***`20917,924 X`20`20`20`20struct`20XABPRO`20inxabpro, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20outxabpro; X`20`20`20`20int`20status,`20ret_stat; X-`20`20`20char`20rec_buff`5B24*512`5D; X-`20`20`20short`20rec_size`20=`20sizeof(rec_buff); X`20`20 X`20`20`20`20ret_stat`20=`20SS$_NORMAL; X`20`20 X---`20922,927`20----- X`20`20`20`20struct`20XABPRO`20inxabpro, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20outxabpro; X`20`20`20`20int`20status,`20ret_stat; X`20`20 X`20`20`20`20ret_stat`20=`20SS$_NORMAL; X`20`20 X************** X***`20942,949 X`20`20`20`20inrab`20=`20cc$rms_rab; X`20`20`20`20inrab.rab$l_fab`20=`20`26infab; X`20`20`20`20inrab.rab$l_bkt`20=`200; X-`20`20`20inrab.rab$l_ubf`20=`20rec_buff; X-`20`20`20inrab.rab$w_usz`20=`20rec_size; X`20`20 X`20`20`20`20if`20(!`20((status=sys$open(`26infab))`20`26`201))`20`7B X`20`20`20`20`20`20ret_stat`20=`20status; X---`20945,950`20----- X`20`20`20`20inrab`20=`20cc$rms_rab; X`20`20`20`20inrab.rab$l_fab`20=`20`26infab; X`20`20`20`20inrab.rab$l_bkt`20=`200; X`20`20 X`20`20`20`20if`20(!`20((status=sys$open(`26infab))`20`26`201))`20`7B X`20`20`20`20`20`20ret_stat`20=`20status; X************** X***`20961,967 X`20`20`20`20`20`20`20`20outfab.fab$l_fna`20=`20to; X`20`20`20`20`20`20`20`20outfab.fab$b_fns`20=`20strlen(to); X`20`20`20`20`20`20`20`20outfab.fab$l_fop`20=`20FAB$M_CBT; X-`20`20`20`20`20`20`20outfab.fab$w_mrs`20=`20rec_size; X`20`20`20`20`20`20`20`20outfab.fab$b_fac`20=`20FAB$M_BIO`20`7C`20FAB$M_PUT; X`20`20`20`20`20`20`20`20outfab.fab$b_rat`20=`20FAB$M_CR; X`20`20`20`20`20`20`20`20outfab.fab$l_xab`20=`20(char`20*)`20`26outxabdat; X---`20962,967`20----- X`20`20`20`20`20`20`20`20outfab.fab$l_fna`20=`20to; X`20`20`20`20`20`20`20`20outfab.fab$b_fns`20=`20strlen(to); X`20`20`20`20`20`20`20`20outfab.fab$l_fop`20=`20FAB$M_CBT; X`20`20`20`20`20`20`20`20outfab.fab$b_fac`20=`20FAB$M_BIO`20`7C`20FAB$M_PUT; X`20`20`20`20`20`20`20`20outfab.fab$b_rat`20=`20FAB$M_CR; X`20`20`20`20`20`20`20`20outfab.fab$l_xab`20=`20(char`20*)`20`26outxabdat; X************** X***`20980,986 X`20`20`20`20`20`20`20`20outrab`20=`20cc$rms_rab; X`20`20`20`20`20`20`20`20outrab.rab$l_fab`20=`20`26outfab; X`20`20`20`20`20`20`20`20outrab.rab$l_bkt`20=`200; X-`20`20`20`20`20`20`20outrab.rab$l_rbf`20=`20rec_buff; X`20`20 X`20`20`20`20`20`20`20`20outfab.fab$l_alq`20=`20infab.fab$l_alq; X`20`20`20`20`20`20`20`20outfab.fab$w_deq`20=`20infab.fab$w_deq; X---`20980,985`20----- X`20`20`20`20`20`20`20`20outrab`20=`20cc$rms_rab; X`20`20`20`20`20`20`20`20outrab.rab$l_fab`20=`20`26outfab; X`20`20`20`20`20`20`20`20outrab.rab$l_bkt`20=`200; X`20`20 X`20`20`20`20`20`20`20`20outfab.fab$l_alq`20=`20infab.fab$l_alq; X`20`20`20`20`20`20`20`20outfab.fab$w_deq`20=`20infab.fab$w_deq; X************** X***`201015,1020 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20report_rms_error_routine(NEWS$_CONFA VIL,status,`26outrab,module_name_str,__LINE__); X`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20else`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20while`20(sys_read_noeof(`26inrab))`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20`20outrab.rab$w_rsz`20=`20inrab.rab$w_r Vsz; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20if`20(!`20((status=sys$write(`26outr Vab))`20`26`201))`20`7B X---`201014,1038`20----- X`20`20`20`20`20`20`20`20`20`20`20`20`20`20report_rms_error_routine(NEWS$_CONFA VIL,status,`26outrab,module_name_str,__LINE__); X`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20else`20`7B X+`20`09`20`20/*`20buffer`20space`20allocation`206/6/94`20saul@hnrc.tufts.edu V`20*/ X+`20`09`20`20char`20*`20buf_ptr; X+`20`09`20`20int`20buf_size,buf_page; X+`20`09`20`20char`20fall_back_buffer`5B4*512`5D; X+`20 X+`20`09`20`20/*`20set`20buffer`20size`20to`20minimum(last_block_of_input_file, V`2063)`20*/ X+`20`20`20`20`20`20`20`20`20`20`20buf_page`20=`20(inxabfhc.xab$l_ebk`20<=`2063 V)`20?`20inxabfhc.xab$l_ebk`20:`2063; X+`20 X+`20`09`20`20status`20=`20lib$get_vm_page`20(`26buf_page,`20`26buf_ptr); X+`20`09`20`20buf_size`20=`20buf_page`20*`20512; X+`20/*`20if,`20for`20any`20reason`20we`20can't`20get`20memory,`20use`20a`20bui Vltin`20fall`20back`20buffer`20*/ X+`20`09`20`20if`20(!(status`20`26`201))`20`7B X+`20`09`09`20`20`20`20buf_size`20=`20sizeof(fall_back_buffer); X+`20`09`09`20`20`20`20buf_ptr`20`20=`20`26fall_back_buffer; X+`20`09`09`20`20`20`20`7D X+`20`09`20`20`20`20inrab.rab$l_ubf`20=`20buf_ptr; X+`20`09`20`20`20`20outrab.rab$l_rbf`20=`20buf_ptr; X+`20`09`20`20`20`20inrab.rab$w_usz`20=`20buf_size; X+`20 X`20`20`20`20`20`20`20`20`20`20`20`20while`20(sys_read_noeof(`26inrab))`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20`20outrab.rab$w_rsz`20=`20inrab.rab$w_r Vsz; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20if`20(!`20((status=sys$write(`26outr Vab))`20`26`201))`20`7B X************** X***`201026,1031 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20`20`20if`20(status`20==`20RMS$_EOF)`20status`20= V`20SS$_NORMAL; X`20`20`20`20`20`20`20`20`20`20`20`20ret_stat`20=`20status; X`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20sys_close(`26outfab); X`20`20`20`20`20`20`20`20`20`20`7D X---`201044,1054`20----- X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20`20`20if`20(status`20==`20RMS$_EOF)`20status`20= V`20SS$_NORMAL; X`20`20`20`20`20`20`20`20`20`20`20`20ret_stat`20=`20status; X+`20`09if`20(buf_ptr`20!=`20`26fall_back_buffer)`20`7B X+`20`09`20`20`20`20lib$free_vm_page`20( X+`20`09`09`26buf_page, X+`20`20`20`20`20`20`20`20`20`20`20`20`20`09`26buf_ptr); X+`20`09`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20sys_close(`26outfab); X`20`20`20`20`20`20`20`20`20`20`7D X***`20nntp_server.c X---`20nntp_server_new.c X************** X***`20219,221 X`20`20** X`20`20**-- X`20`20**/ X---`20219,223`20----- X+`20**`09V6.1b9`0914-Jun-1994`20`20`20`20`20Saul`20Tannenbaum`20`20saul@hnrc.t Vufts.edu X+`20**`09`20`20-`20RMS`20optimizations`20to`20item,`20group`20and`20history`20 Vfile X`20`20** X`20`20**-- X`20`20**/ X************** X***`201823,1828 X`20`20`20`20grprab.rab$l_ubf`20=`20grprab.rab$l_rbf`20=`20`26newsgrp; X`20`20`20`20grprab.rab$w_usz`20=`20grprab.rab$w_rsz`20=`20sizeof`20newsgrp; X`20`20 X`20`20`20`20if`20(!sys_open(`26itmfab))`20return(0); X`20`20`20`20itm_file_open`20=`201; X`20`20`20`20if`20(!sys_connect(`26itmrab))`20`7B X---`201825,1843`20----- X`20`20`20`20grprab.rab$l_ubf`20=`20grprab.rab$l_rbf`20=`20`26newsgrp; X`20`20`20`20grprab.rab$w_usz`20=`20grprab.rab$w_rsz`20=`20sizeof`20newsgrp; X`20`20 X+`20`20/*`20ST`206/8/94`20`20RMS`20Performance`20Patch`20*/ X+`20`7B X+`20`20`20`20`20`20`20`20int`20buff_count=0; X+`20`20`20`20`20`20`20`20char`20*buff_count_ptr; X+`20`20`20`20`20`20`20`20buff_count_ptr`20=`20news_getenv("NEWS_ITEMFILE_BUFFE VRCOUNT",0); X+`20`20`20`20`20`20`20`20if`20(buff_count_ptr`20!=`20NULL)`20`20sscanf(buff_co Vunt_ptr,"%d",`26buff_count); X+`20`20`20`20`20`20if`20(news_getenv("NEWS_ITEMFILE_DFW",0)`20!=`200) X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20itmfab.fab$l_fop`20`7C=`20FAB V$M_DFW;`20/*`20deferred`20write`20*/ X+`20`20`20`20`20`20if`20(news_getenv("NEWS_ITEMFILE_RTV",0)`20!=`200) X+`20`20`20`20`20`20`20`20itmfab.fab$b_rtv`20=`20255;`20`20`20`20`20`20`20`20/* V`20map`20the`20entire`20file`20*/ X+`20`20`20`20`20`20if`20(buff_count`20>`200)`20 X+`20`20`20`20`20`20`20`20itmrab.rab$b_mbf`20=`20(buff_count`20<=`20127)`20?`20 Vbuff_count`20:`20127; X+`20`7D X`20`20`20`20if`20(!sys_open(`26itmfab))`20return(0); X`20`20`20`20itm_file_open`20=`201; X`20`20 X************** X***`201825,1830 X`20`20 X`20`20`20`20if`20(!sys_open(`26itmfab))`20return(0); X`20`20`20`20itm_file_open`20=`201; X`20`20`20`20if`20(!sys_connect(`26itmrab))`20`7B X`20`20`20`20`20`20sys_close(`26itmfab);`20itm_file_open`20=`200; X`20`20`20`20`20`20return(0); X---`201840,1862`20----- X`20`20`7D X`20`20`20`20if`20(!sys_open(`26itmfab))`20return(0); X`20`20`20`20itm_file_open`20=`201; X+`20 X+`20`20/*`206/7/94`20-`20saul@hnrc.tufts.edu`20add`20global`20buffer`20handlin Vg`20*/ X+`20`20`20`20`20`20`20`20`7B X+`20`20`20`20`20`20`20`20int`20buff_count=0; X+`20`20`20`20`20`20`20`20char`20*buff_count_ptr; X+`20`20`20`20`20`20`20`20buff_count_ptr`20=`20news_getenv("NEWS_ITEMFILE_GLOBA VL_BUFFERCOUNT",0); X+`20`20`20`20`20`20`20`20if`20(buff_count_ptr`20!=`20NULL) X+`20`20`20`20`20`20`20`20`7B X+`20`20`20`20`20`20`20`20`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count) V; X+`20 X+`20`20/*`20the`20file's`20global`20buffer`20count`20gets`20loaded`20on`20open V`20by`20RMS,`20use`20the X+`20`20`20`20`20`20maximum`20of`20the`20stored`20value`20and`20the`20logical V`20defined`20value`20*/ X+`20 X+`20`20`20`20`20`20`20`20`20`20`20`20if`20(itmfab.fab$w_gbc`20<`20buff_count) V`20itmfab.fab$w_gbc`20=`20buff_count; X+`20`20`20`20`20`20`20`20`7D X+`20`20`20`20`20`20`7D X+`20 X`20`20`20`20if`20(!sys_connect(`26itmrab))`20`7B X`20`20`20`20`20`20sys_close(`26itmfab);`20itm_file_open`20=`200; X`20`20`20`20`20`20return(0); X************** X***`201829,1834 X`20`20`20`20`20`20sys_close(`26itmfab);`20itm_file_open`20=`200; X`20`20`20`20`20`20return(0); X`20`20`20`20`20`20`7D X`20`20`20`20if`20(!sys_open(`26grpfab))`20return(0); X`20`20`20`20grp_file_open`20=`201; X`20`20`20`20if`20(!sys_connect(`26grprab))`20`7B X---`201861,1880`20----- X`20`20`20`20`20`20sys_close(`26itmfab);`20itm_file_open`20=`200; X`20`20`20`20`20`20return(0); X`20`20`20`20`20`20`7D X+`20/*`206/8/94`20saul@hnrc.tufts.edu`20-`20RMS`20Performance`20patch`20*/ X+`20`7B X+`20`20`20`20`20`20`20int`20buff_count=0; X+`20`20`20`20`20`20`20char`20*buff_count_ptr; X+`20`20`20`20`20`20`20buff_count_ptr`20=`20news_getenv("NEWS_GROUPFILE_BUFFERC VOUNT",0); X+`20`20`20`20`20`20`20if`20(buff_count_ptr`20!=`20NULL)`20`20sscanf(buff_count V_ptr,"%d",`26buff_count); X+`20 X+`20`20`20`20`20if`20(news_getenv("NEWS_GROUPFILE_DFW",0)`20!=`200) X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20grpfab.fab$l_fop`20`7C=`20FAB$M_ VDFW;`20/*`20deferred`20write`20*/ X+`20`20`20`20`20if`20(news_getenv("NEWS_GROUPFILE_RTV",0)`20!=`200) X+`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20grpfab.fab$b_rtv`20=`20255;`20 V`20`20`20`20`20`20`20/*`20map`20the`20entire`20file`20*/ X+`20`20`20`20`20if`20(buff_count`20>`200) X+`20`20`20`20`20`20`20grprab.rab$b_mbf`20=`20(buff_count`20<=`20127)`20?`20buf Vf_count`20:`20127; X+`20`7D X`20`20`20`20if`20(!sys_open(`26grpfab))`20return(0); X`20`20`20`20grp_file_open`20=`201; X`20`20 X************** X***`201831,1836 X`20`20`20`20`20`20`7D X`20`20`20`20if`20(!sys_open(`26grpfab))`20return(0); X`20`20`20`20grp_file_open`20=`201; X`20`20`20`20if`20(!sys_connect(`26grprab))`20`7B X`20`20`20`20`20`20sys_close(`26grpfab);`20grp_file_open`20=`200; X`20`20`20`20`20`20return(0); X---`201877,1898`20----- X`20`20`7D X`20`20`20`20if`20(!sys_open(`26grpfab))`20return(0); X`20`20`20`20grp_file_open`20=`201; X+`20 X+`20/*`206/8/94`20-`20saul@hnrc.tufts.edu`20RMS`20Performance`20patch`20*/ X+`20`20`20`20`20`20`20`7B X+`20`20`20`20`20`20`20int`20buff_count=0; X+`20`20`20`20`20`20`20char`20*buff_count_ptr; X+`20`20`20`20`20`20`20buff_count_ptr`20=`20news_getenv("NEWS_GROUPFILE_GLOBAL_ VBUFFERCOUNT",0); X+`20`20`20`20`20`20`20if`20(buff_count_ptr`20!=`20NULL) X+`20`20`20`20`20`20`20`7B X+`20`20`20`20`20`20`20`20`20`20`20sscanf(buff_count_ptr,"%d",`26buff_count); X+`20 X+`20/*`20the`20file's`20global`20buffer`20count`20gets`20loaded`20on`20open`20 Vby`20RMS,`20use`20the X+`20`20`20`20`20maximum`20of`20the`20stored`20value`20and`20the`20logical`20de Vfined`20value`20*/ X+`20 X+`20`20`20`20`20`20`20`20`20`20`20if`20(grpfab.fab$w_gbc`20<`20buff_count)`20g Vrpfab.fab$w_gbc`20=`20buff_count; X+`20`20`20`20`20`20`20`7D X+`20`20`20`20`7D X`20`20`20`20if`20(!sys_connect(`26grprab))`20`7B X`20`20`20`20`20`20sys_close(`26grpfab);`20grp_file_open`20=`200; X`20`20`20`20`20`20return(0); X***`20patchlist.h;-1 X---`20patchlist.h X************** X***`201,1 X`20`20=+=+=`20End`20=+=+= X---`201,2`20----- X+`20940614_newsfiles.c!saul@hnrc.tufts.edu X`20`20=+=+=`20End`20=+=+= $ call unpack 940614_NEWSFILES.PATCH - 913669435 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 60 1 1 $ v=f$verify(v) $ exit