From: jonathan@ucsvc.ucs.unimelb.edu.au
Newsgroups: news.software.anu-news
Subject: NEWSSKIM_ALT.2-OF-7
Date: 15 Oct 92 03:08:40 GMT
Organization: The University of Melbourne

-+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+
V_News
X$`20NNTP_Node_Search`20`20=`204`09`09`09!`20`20Search`20stream`20id`20for`20NN
VTP_News
X$`20NNTP_Batch_Search`20=`205`09`09`09!`20`20Search`20stream`20id`20for`20Add_
VNews
X$
X$`20Now`20`20=`20f$time`20()
X$`20Hour_Start`20=`20f$extract`20(12,2,Now)
X$`20dd`20`20`20=`20f$cvtime`20(Now,"ABSOLUTE","DAY")
X$`20mmm`20`20=`20f$cvtime`20(Now,"ABSOLUTE","MONTH")
X$`20yyyy`20=`20f$cvtime`20(Now,"ABSOLUTE","YEAR")
X$`20File_Ext`20=`20dd`20+`20mmm`20+`20f$extract`20(2,2,yyyy)`09!Today's`20exte
Vnsion`20(DDMMMYY)
X$`20if`20f$length`20(File_Ext)`20.eq.`206`20`20then`20`20File_Ext`20=`20"0"
V`20+`20File_Ext`20`20!`20dd`20<`2010
X$
X$`20Me`20`20=`20f$edit`20(f$getjpi("","USERNAME"),"COLLAPSE")`09!`20Username
V`20of`20process.
X$`20Pid`20=`20f$getjpi`20("","PID")`09`09`09`09!`20PID`20of`20process.
X$`20Process_Name`20=`20f$getjpi`20("","PRCNAM")`09`09`09!`20Name`20of`20proces
Vs.
X$`20Newsnode`20=`20f$trnlnm`20("NEWS_ADDRESS")`09`09`09!`20Our`20Internet`20ad
Vdress.
X$
X$`20Fail_msg1`20`20=`20""`09`09`09`09`09!`20Info`20for`20ABORT.
X$`20Fail_msg2`20`20=`20""`09`09`09`09`09!`20Info`20for`20ABORT.
X$`20crlf`5B0,16`5D`20=`20%X0A0D`09`09`09`09`09!`20Formatting`20for`20subject
X$
X$`20notset`20=`20%X1077808A`09`09`09`09`09!`20System`20service`20status
X$`20get_day_number`09`09`09`09`09!`20May`20get`20CO`20or`20CD`20param
X$
X$`20set`20on
X$`20on`20warning`20`20then`20`20goto`20`20ABORT
X$
X$`20if`20p1`20.eqs.`20""`20then`20`20goto`20`20'Hour_Start'`09!`20`20A`20norma
Vlly`20scheduled`20run.
X$
X$!............................................................................
V..
X$!`20`20Something`20special`20as`20a`20one-off`20run`20or`20an`20asynchronous
V`20job`20-`20handle`20it
X$!`20`20separately`20as`20specified`20in`20the`20parameter`20list.
X$
X$`20gosub`20`20Parse_Params
X$`20goto`20`20ZOOM
X$
X$!............................................................................
V..
X$!`20`20Scheduled`20run`20-`20do`20tasks`20as`20indicated`20below`20by`20hour.
V`20`20ALL`20hours`20have`20labels.
X$
X$00:
X$`09gosub`20All_Tasks
X$`09goto`20`20ZOOM
X$
X$03:
X$05:
X$07:
X$08:
X$10:
X$11:
X$12:
X$13:
X$14:
X$15:
X$16:
X$18:
X$20:
X$22:
X$`09gosub`20Standard_Tasks
X$`09goto`20`20ZOOM
X$
X$01:
X$02:
X$04:
X$06:
X$09:
X$17:
X$19:
X$21:
X$23:
X$`09if`20Every_Hour`20`20then`20`20gosub`20`20Standard_Tasks
X$`09goto`20`20ZOOM
X$
X$!............................................................................
V..
X$ZOOM:
X$
X$`20on`20warning`20`20then`20`20goto`20`20ABORT
X$
X$!`20`20Setting`20the`20process`20name`20will`20cause`20the`20job`20to`20abort
V`20if`20another`20job`20of`20the
X$!`20`20same`20name`20already`20exists.`20`20This`20is`20one`20way`20to`20prev
Vent`20duplicate`20jobs.
X$
X$`20if`20.not.`20Duplicate_Job`20.and.`20.not.`20(Postman`20.or.`20NNTPman)
X$`20then
X$`20`20`20wait`2000:00:30.0`09`09`09!`20Allow`20starting`20job`20to`20terminat
Ve.
X$`20`20`20set`20noon
X$`20`20`20set`20process`20/name="News_Skim"
X$`20`20`20if`20$status`20.eq.`20notset`20`20then`20`20goto`20`20EXIT_DOOR
X$`20`20`20set`20on
X$`20endif
X$`20Process_Name`20=`20f$getjpi`20("","PRCNAM")`09!`20Yes,`20again.
X$
X$`20gosub`20`20Check_Stop`09`09`09!`20See`20if`20we`20can`20get`20off`20the
V`20ground.
X$
X$`20if`20Special`20`20then`20`20goto`20`20`20Do_Special`09!`20Black`20hole`20-
V`20NO`20RETURN!
X$
X$!`20`20Post`20and`20NNTP`20news`20(if`20it's`20waiting`20to`20go)`20both`20at
V`20the`20beginning`20and
X$!`20`20the`20end`20to`20avoid`20clogging`20the`20disks.
X$
X$`20if`20Post_news`20.or.`20Postman`20`20then`20`20gosub`20`20Do_Post_News
X$`20if`20Postman`20`20then`20`20goto`20`20EXIT_DOOR
X$
X$`20if`20NNTP_news`20.or.`20NNTPman`20`20then`20`20gosub`20`20Do_Xmit_NNTP_New
Vs
X$`20if`20NNTPman`20`20then`20`20goto`20`20EXIT_DOOR
X$
X$`20if`20Skim_news`20`20`20`20`20then`20`20gosub`20`20Do_Skim_News`09!`20Keep
V`20db`20trim:`20Skim`20before`20Add
X$
X$`20Guvner`20=`20Guvner`20.and.`20Add_News`09`09!`20Only`20if`20we`20are`20add
Ving`20news.
X$!............................................................................
V..
X$BONSAI:
X$`20gosub`20`20Check_Disk_Space`09`09`09!`20Check`20if`20there`20is`20room`20t
Vo`20go.
X$`20if`20Disk_Space_Problem`20`20then`20`20gosub`20`20Clean_Up_Disk
X$
X$`20if`20Extract_Mail`20`20then`20`20gosub`20`20Do_Extract_Mail
X$`20if`20Add_news`20`20`20`20`20`20then`20`20gosub`20`20Do_Add_News
X$`20if`20Convert_Db`20`20`20`20then`20`20gosub`20`20Do_Convert_Db`09!`20Call
V`20before`20Do_Compress_Mail
X$`20if`20Compress_Mail`20then`20`20gosub`20`20Do_Compress_Mail
X$`20if`20Report_Junk`20`20`20then`20`20gosub`20`20Do_Report_Junk
X$
X$`20if`20Post_news`20.and.`20New_News`20`20`20then`20`20gosub`20`20Do_Post_New
Vs
X$`20if`20NNTP_news`20.and.`20New_News`20`20`20then`20`20gosub`20`20Do_Xmit_NNT
VP_News
X$
X$`20if`20Guvner`20`20then`20`20goto`20`20BONSAI`09`09`09!`20Cycle`20-`20reset
V`20by`20Do_Add_News
X$!............................................................................
V..
X$`20if`20Post_news`20`20then`20`20gosub`20`20Wait_Post_Jobs
X$`20if`20NNTP_news`20`20then`20`20gosub`20`20Wait_NNTP_Jobs
X$
X$`20if`20Resubmit`20`20`20then`20`20gosub`20`20Resubmit_Self
X$
X$`20goto`20`20EXIT_DOOR
X$
X$!============================================================================
V==
X$!`20All`20subroutines`20follow`20here:
X$!----------------------------------------------------------------------------
V--
X$!`20`20Set`20flags`20for`20"all"`20tasks.
X$
X$ALL_TASKS:
X$
X$`20gosub`20`20Standard_Tasks`09`09!`20As`20usual.
X$`20Skim_News`20=`201`09`09`09!`20Force`20it.
X$
X$`20RETURN
X$
X$!----------------------------------------------------------------------------
V--
X$!`20`20Set`20flags`20for`20standard`20tasks`20-`20usually`20ones`20that`20sho
Vuld`20happen`20more`20than
X$!`20`20once`20a`20day.`20`20Only`20convert`20the`20database`20once`20a`20week
V.
X$
X$STANDARD_TASKS:
X$
X$`20gosub`20Skim_Check
X$`20gosub`20Convert_Check
X$
X$`20Extract_Mail`20`20=`201
X$`20Add_News`09=`201
X$`20Post_News`09=`201
X$`20NNTP_News`09=`201
X$
X$`20RETURN
X$
X$!----------------------------------------------------------------------------
V--
X$!`20`20Check`20the`20time`20the`20last`20skim`20was`20done.`20`20Skim`20every
V`20day.
X$
X$SKIM_CHECK:
X$
X$`20if`20f$search`20("NEWS_MANAGER:TIMESTAMP_SKIM.DAT")`20.nes.`20""
X$`20then
X$`20`20`20close`20/nolog`20stamp
X$`20`20`20open`20/read`20stamp`20NEWS_MANAGER:TIMESTAMP_SKIM.DAT
X$`20`20`20read`20/error=FUDGE_IT`20/end=FUDGE_IT`20stamp`20last_skim_time
X$`20`20`20goto`20`20OK_SKIM_READ
X$FUDGE_IT:
X$`20`20`20last_skim_time`20=`20"0000-00-00"`09!`20Force`20skim`20if`20file`20i
Vn`20bad`20state.
X$OK_SKIM_READ:
X$`20`20`20close`20/nolog`20stamp
X$`20else
X$`20`20`20last_skim_time`20=`20"0000-00-00"`09!`20Force`20skim`20if`20file`20d
Voes`20not`20exist.
X$`20endif
X$
X$`20date_today`20=`20f$cvtime`20(,,"DATE")
X$`20if`20(last_skim_time`20.lts.`20date_today)`20.or.`20Skim_News`20`20then
V`20`20Skim_News`20=`201
X$
X$`20RETURN
X$
X$!----------------------------------------------------------------------------
V--
X$!`20`20Check`20the`20day`20the`20last`20convert`20was`20done.`20Convert`20at
V`20least`20once`20every`207`20days.
X$
X$CONVERT_CHECK:
X$
X$`20if`20f$search`20("NEWS_MANAGER:TIMESTAMP_CONVERT.DAT")`20.nes.`20""
X$`20then
X$`20`20`20close`20/nolog`20stamp
X$`20`20`20open`20/read`20stamp`20NEWS_MANAGER:TIMESTAMP_CONVERT.DAT
X$`20`20`20read`20/error=FAKE_IT`20/end=FAKE_IT`20stamp`20Last_Convert_Day
X$`20`20`20goto`20`20OK_CONVERT_READ
X$FAKE_IT:
X$`20`20`20Last_Convert_Day`20=`200`09!`20Force`20convert`20if`20file`20in`20ba
Vd`20state.
X$OK_CONVERT_READ:
X$`20`20`20Last_Convert_Day`20=`20f$integer`20(Last_Convert_Day)
X$`20`20`20close`20/nolog`20stamp
X$`20else
X$`20`20`20Last_Convert_Day`20=`200`09!`20Force`20convert`20if`20file`20does
V`20not`20exist.
X$`20endif
X$
X$`20if`20(Last_Convert_Day+7`20.le.`20Day_Number)`20.or.`20Convert_db
X$`20then
X$`20`20`20Convert_db`20`20`20`20=`201
X$`20`20`20Compress_Mail`20=`201
X$`20`20`20Report_Junk`20`20`20=`201
X$`20endif
X$
X$`20RETURN
X$
X$!----------------------------------------------------------------------------
V--
X$!`20`20Determine`20if`20NEWS_STOP`20has`20been`20defined,`20and`20if`20so,
V`20exit`20gracefully,
X$!`20`20rescheduling`20with`20/HOLD`20if`20process`20is`20News_Skim.`20`20If
V`20NEWS_STOP`20is
X$!`20`20defined`20to`20be`20"ALLOW_MAIL"`20then`20asynchronous`20mail`20jobs
V`20are`20allowed`20to
X$!`20`20continue`20or`20be`20started.
X$
X$CHECK_STOP:
X$
X$`20Brakes`20=`20f$trnlnm`20("NEWS_STOP","LNM$SYSTEM_TABLE",,"EXECUTIVE",,"ACC
VESS_MODE")
X$`20if`20Brakes`20.nes.`20"EXECUTIVE"`20`20then`20`20RETURN`09!`20Not`20define
Vd,`20so`20carry`20on.
X$
X$`20Habeus`20=`20f$trnlnm`20("NEWS_STOP","LNM$SYSTEM_TABLE",,"EXECUTIVE",,"VAL
VUE")
X$`20if`20Postman`20.and.`20(Habeus`20.eqs.`20"ALLOW_MAIL")`20`20then`20`20RETU
VRN`09!`20Allow`20POST`20job
X$
X$!`20Must`20shutdown`20gracefully`20and`20reschedule`20if`20News_Skim`20proces
Vs.
X$
X$`20Holder`20=`20"/HOLD"
X$`20if`20Process_Name`20.eqs.`20"News_Skim"`20`20then`20`20gosub`20`20Resubmit
V_Self
X$
X$`20subject`20=`20"%NEWSSKIM`20WARNING:`20''Process_Name'`20SHUTDOWN`20BY`20NE
VWS_STOP`20"`20+`20-
X`09`20`20`20`20"at`20''f$time()'"
X$`20say`20subject
X$`20mail`20NL:`20usenet`20/subject="''subject'"
X$
X$`20goto`20`20EXIT_DOOR
X$`20EXIT`09`09!`20Safety`20net.
X$
X$!----------------------------------------------------------------------------
V--
X$!`20`20Parse`20any`20parameters`20that`20exist.`20`20Allow`20only`20valid`20f
Vunctions`20as`20defined
X$!`20`20in`20this`20DCL`20procedure.`20`20Tasks`20must`20be`20specified`20one
V`20per`20parameter,`20e.g.
X$!`20`20`20P1`20=`20ADD_NEWS`20`20P2`20=`20POST_NEWS
X$!`20`20Any`20valid`20abbreviation`20of`202`20characters`20or`20greater`20may
V`20be`20specified.
X$!`20`20Only`20the`20first`20TWO`20characters`20are`20significant.
X$
X$PARSE_PARAMS:
X$
X$`20Resubmit`20=`200`09`09!`20`20Must`20specifically`20request`20this`20when
V`20parameters`20used.
X$`20Param`20`20`20`20=`200
X$`20say`20"%NEWSSKIM`20Parameters:`20''p1'`20''p2'`20''p3'`20''p4'`20''p5'`20'
V'p6'`20''p7'`20''p8'"
X$`20valid_params`20=`20"#N`20#P`20AD`20AL`20AN`20AS`20CD`20CM`20CO`20DU`20EX
V`20NN`20PO`20RE`20RI`20SK`20SN`20SP`20ST`20SY"
X$`20valid_params_len`20=`20f$length`20(valid_params)
X$
X$GET_PARAM:
X$`20Param`20=`20Param`20+`201
X$`20Cmd`20=`20P'Param'
X$`20if`20Cmd`20.eqs.`20""`20`20then`20`20RETURN
X$`20Cmd`20=`20f$edit`20(Cmd,"COLLAPSE,UNCOMMENT,UPCASE")
X$`20if`20f$length`20(Cmd)`20.lt.`202
X$`20then
X$`20`20`20Fail_msg1`20=`20"%NEWSSKIM`20Error:`20parameters`20must`20be`20>=
V`202`20chars`20(P''Param')"
X$`20`20`20Fail_msg2`20=`20"%Valid`20parameters:`20''valid_params'"
X$`20`20`20goto`20`20ABORT
X$`20endif
X$
X$`20Cmd`20=`20f$extract`20(0,2,Cmd)`09`09`09`09!`20First`202`20chars`20only.
X$`20if`20f$locate`20(Cmd,valid_params)`20.eq.`20valid_params_len
X$`20then
X$`20`20`20Fail_msg1`20=`20"%NEWSSKIM`20Error:`20INVALID`20parameter:`20''Cmd'"
V
X$`20`20`20Fail_msg2`20=`20"%Valid`20parameters:`20''valid_params'"
X$`20`20`20goto`20`20ABORT
X$`20endif
X$
X$`20if`20Cmd`20.eqs.`20"SP"`09!`20"SPecial"
X$`20then
X$`20`20`20if`20(Param`20.eq.`201)`20.and.`20(P2`20.nes.`20"")`20`20`20!`20Spec
Vial`20one-off`20user-specified`20run
X$`20`20`20then
X$`20`20`20`20`20Special`20=`201
X$`20`20`20`20`20RETURN
X$`20`20`20endif
X$`20`20`20if`20Param`20.ne.`201`20then`20-
X`09Fail_msg1`20=`20"%NEWSSKIM`20Error:`20SPECIAL`20parameter`20must`20be`20P1.
V"
X$`20`20`20if`20P2`20.eqs.`20""`20`20then`20-
X`09Fail_msg2`20=`20"%NEWSSKIM`20Error:`20SPECIAL`20parameter`20P2`20is`20missi
Vng."
X$`20`20`20goto`20ABORT
X$`20endif
X$
X$`20if`20Cmd`20.eqs.`20"SK"`20`20then`20`20Skim_News`09`20=`201
X$`20if`20Cmd`20.eqs.`20"EX"`20`20then`20`20Extract_Mail`20`20=`201
X$`20if`20Cmd`20.eqs.`20"AD"`20`20then`20`20Add_News`20`20`20`20`20`20=`201
X$`20if`20Cmd`20.eqs.`20"PO"`20`20then`20`20Post_News`20`20`20`20`20=`201
X$`20if`20Cmd`20.eqs.`20"NN"`20`20then`20`20NNTP_News`20`20`20`20`20=`201
X$`20if`20Cmd`20.eqs.`20"CO"`20.or.`20Cmd`20.eqs.`20"CD"
X$`20then
X$`20`20`20Convert_Db`20`20`20`20=`201
X$`20`20`20Force_Convert`20=`201
X$`20endif
X$`20if`20Cmd`20.eqs.`20"CO"`20.or.`20Cmd`20.eqs.`20"CM"`20`20then`20`20Compres
Vs_Mail`20=`201
X$`20if`20Cmd`20.eqs.`20"RE"`20`20then`20`20Resubmit`20=`201
X$`20if`20Cmd`20.eqs.`20"RI"`20`20then`20`20Resubmit`20=`203`09`09`09!Resubmit
V`20Immediately
X$`20if`20Cmd`20.eqs.`20"AL"`20`20then`20`20gosub`20All_Tasks
X$`20if`20Cmd`20.eqs.`20"ST"`20`20then`20`20gosub`20Standard_Tasks
X$`20if`20Cmd`20.eqs.`20"AS"`20`20then`20`20Asynchronous_Post`20=`201`09!ASynch
Vronous`20post
X$`20if`20Cmd`20.eqs.`20"SY"`20`20then`20`20Asynchronous_Post`20=`200`09!SYnchr
Vonous`20`20post
X$`20if`20Cmd`20.eqs.`20"AN"`20`20then`20`20Asynchronous_NNTP`20=`201`09!Asynch
Vronous`20NNTP
X$`20if`20Cmd`20.eqs.`20"SN"`20`20then`20`20Asynchronous_NNTP`20=`200`09!Synchr
Vonous`20`20NNTP
X$`20if`20Cmd`20.eqs.`20"DU"`20`20then`20`20Duplicate_Job`20`20`20`20`20=`201
X$
X$`20if`20Cmd`20.eqs.`20"#P"`09!`20Handle`20ALL`20remaining`20parameter`20parsi
Vng`20for`20"#P"`20here.
X$`20then
X$`20`20`20if`20Param`20.ne.`201
X$`20`20`20then
X$`20`20`20`20`20Fail_msg1`20=`20"%NEWSPOST-F-BADPARAM,`20#P`20parameter`20must
V`20be`20P1."
X$`20`20`20`20`20goto`20`20ABORT
X$`20`20`20endif
X$`20`20`20if`20p2`20.eqs.`20""
X$`20`20`20then
X$`20`20`20`20`20Fail_msg1`20=`20"%NEWSPOST-F-NONODE,`20No`20NODE`20specified
V`20to`20NEWSPOST."
X$`20`20`20`20`20goto`20`20ABORT
X$`20`20`20else
X$`20`20`20`20`20Node`20=`20p2
X$`20`20`20endif
X$`20`20`20Postman`20`20`20`20`20`20`20`20`20`20`20=`201
X$`20`20`20Asynchronous_Post`20=`200
X$`20`20`20if`20p3`20.nes.`20""`20`20then`20`20Max_Mail_Batches`20`20`20=`20p3
X$`20`20`20if`20p4`20.nes.`20""`20`20then`20`20Mail_From_Usenet`20`20`20=`20p4
X$`20`20`20if`20p5`20.nes.`20""`20`20then`20`20Notify_Failed_Mail`20=`20p5
X$`20`20`20if`20Process_Name`20.nes.`20"POST_''Node'"
X$`20`20`20then
X$`20`20`20`20`20set`20noon
X$`20`20`20`20`20set`20process`20/name="POST_''Node'"
X$`20`20`20`20`20if`20$status`20.eq.`20notset`20`20then`20`20goto`20`20EXIT_DOO
VR
X$`20`20`20`20`20set`20on
X$`20`20`20endif
X$`20`20`20RETURN
X$`20endif
X$
X$`20if`20Cmd`20.eqs.`20"#N"`09!`20Handle`20ALL`20remaining`20parameter`20parsi
Vng`20for`20"#N"`20here.
X$`20then
X$`20`20`20if`20Param`20.ne.`201
+-+-+-+-+-+-+-+-  END  OF PART 2 +-+-+-+-+-+-+-+-