Relay-Version: VMS News - V6.0-3 14/03/90 VAX/VMS V5.4; site cerritos.edu Path: cerritos.edu!arizona.edu!mvb.saic.com!mark.berryman Newsgroups: vmsnet.sources Subject: DRIBBLE v1.3 1/1 Message-ID: <3111641@MVB.SAIC.COM> From: tp@mccall.com Date: Wed, 17 Jul 1991 00:36:07 GMT Organization: The McCall Pattern Co., Manhattan, KS, USA Approved: Mark.Berryman@Mvb.Saic.Com Lines: 838 Submitted-by: tp@mccall.com (Terry Poot) Posting-number: Volume 1, Issue 48 Archive-name: dribble_v1/part1 [ Moderators Note: By all means use this for submissions to this group. The format of the message this sends cuts my work considerably. ] $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990 $! On 15-JUL-1991 13:53:28.43 By user TP $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $! 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. AAAREADME.TXT;1 $! 2. DRIBBLE.COM;34 $! 3. DRIBBLE.HLP;4 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ 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 $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete 'f'* $ exit $file_absent: $ 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: $ w "-I-PROCESS, Processing file ''P1'." $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b)); LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1); IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE; MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1; ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")= 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF"; POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r); ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1; COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE, "output_file"));ENDPROCEDURE;Unpacker;QUIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create 'f' XDribble is documented in the help file and the code. Here are some exceprts Xfrom the help file: X X1 DRIBBLE XSends the parts of a VMS_SHARE file via email or posts them to news at a Xcontrolled rate expressed in blocks per day. The requests are appended to a Xfile. The user should start a delivery job with DRIBBLE SUBMIT if he does Xnot already have one running. The delivery job runs periodically, reads the Xnext item from the file, and sends it. The delay between runs of the Xdelivery job is based on the size of the parts and the daily-quota set for Xthe delivery job, and is designed so that on the average, DRIBBLE will send Xthe specified number of blocks per day. X XMail messages and postings may be intermixed on the queue. The user may Xonly have one queue file and one delivery job at any given time. Once the Xqueue is exhausted, DRIBBLE will not start another job. X X2 MAIL XDRIBBLE MAIL is used to queue the parts of a file generated by VMS_SHARE as Xa series of electronic mail messages to the same address. X XFormat: X $ DRIBBLE MAIL recipient filespec num_parts `5Bsubject`5D X X2 POST XDRIBBLE POST is used to queue the parts of a file generated by VMS_SHARE as Xa series of news articles in the same newsgroup. The Archive-name: and XSubmitted-by: pseudo-headers may be added by DRIBBLE, making it easy to Xinclude these in source postings. X XFormat: X $ DRIBBLE POST newsgroups filespec num_parts `5Bsubject`5D X `5Barchive-name`5D `5Bsubmitter`5D X X2 SUBMIT XDRIBBLE SUBMIT submits the batch delivery job that actually mails files or Xposts them to news. The file sys$scratch:dribble_file.list contains the Xqueue that DRIBBLE processes in the delivery job, and should not be Xdisturbed while the delivery job is in the queue. The exception to this is Xthat DRIBBLE MAIL or DRIBBLE POST may be used to add files to DRIBBLE's Xqueue. X XFormat: X $ DRIBBLE SUBMIT `5Bbatch-queue`5D `5Bdaily-quota`5D X $ CALL UNPACK AAAREADME.TXT;1 459763540 $ create 'f' X$ ! Purpose: X$ !`20 X$ ! To mail out a series of files produced by VMS_SHARE to a series of X$ ! recipients, or to post them into news, one at a time on a time schedule V. X$ ! This is based on PAKMAIL, by Andy Harper of King's College London, UK. X$ ! Heavily hacked upon to produce DRIBBLE by Terry Poot . X$ ! PAKMAIL works great, so any bugs are mine. Some code also swiped from X$ ! PAKNEWS.COM by Jamie Hanrahan. X$ ! X$ ! When DRIBBLE is executed by a user (as indicated by a first parameter X$ ! of MAIL or POST), the parts are all added to a list maintained in a X$ ! standard location. When DRIBBLE is executed with a first parameter of X$ ! SUBMIT, it submits itself as a batch job using the first parameter SEND V. X$ ! When DRIBBLE is run with the parameter SEND, it sends one part based on X$ ! its list, and then computes when it should next run based on the size o Vf X$ ! that part and the daily quota. X$ ! X$ ! If P1 is omitted, a usage message is printed (because I can never X$ ! remember the order of the parameters :-).`20 X$ ! X$ ! Parameters: X$ ! X$ ! P1 = function. X$ ! X$ ! The meaning of all other parameters depends on which function is X$ ! selected, so the other parameters will be described beneath each X$ ! function code. Several common data items will be further defined X$ ! below. X$ ! X$ ! POST - Post the files to netnews using ANU News X$ ! X$ ! P2 = newsgroup(s) X$ ! X$ ! This can be a logical. It must either be a logical name or X$ ! useable as is. DRIBBLE attempts to translate it as a logical, X$ ! and if that fails it simply uses the parameter as supplied. X$ ! X$ ! The newsgroups should be a comma separated list of newsgroups X$ ! (or a single newsgroup name). X$ ! X$ ! P3 = file spec of package X$ ! X$ ! "device:`5Bdirectory`5Dfile" without VMS_SHARE suffix! X$ ! X$ ! X$ ! P4 = number of parts in the package X$ ! X$ ! This procedure adds the VMS_SHARE suffix and sends files X$ ! called "device:`5Bdirectory`5Dfile''nn'" nn from 1-> 'P3' X$ ! X$ ! P5 = Package description for subject line X$ ! X$ ! Defaults to file name of package (without directory or X$ ! extension). X$ ! X$ ! P6 = Archive name X$ ! X$ ! If specified, an Archive-name: pseudo-header will be added at X$ ! the beginning of the message body. This should be one word X$ ! that would be a legal file name (name only, no period), or one X$ ! word followed by a patch number. The name should probably X$ ! include some version indicator. X$ ! X$ ! Examples:`20 X$ ! X$ ! dribble_v1 X$ ! dribble_v1/patch01 X$ ! dribble_v1/patch02 X$ ! X$ ! P7 = Submitter X$ ! X$ ! E-mail address of package submitter, with full name in X$ ! parentheses following. Example: X$ ! X$ ! tp@mccall.com (Terry Poot) X$ ! X$ ! MAIL - Mail the files using VMS Mail X$ ! X$ ! P2 = name (or list ) of recipient(s). X$ ! X$ ! This can be a logical. It must either be a logical name or X$ ! useable as is. DRIBBLE attempts to translate it as a logical, X$ ! and if that fails it simply uses the parameter as supplied. X$ ! X$ ! If sending to a distribution list, it is necessary to define a X$ ! logical pointing to the file and then give that logical as the X$ ! recipient name. This avoids problems with DCL's handling of X$ ! quotes and '@' symbols. X$ ! X$ ! Internet addresses are best handled the same way. X$ ! X$ ! P3 = file spec of package X$ ! X$ ! "device:`5Bdirectory`5Dfile" without VMS_SHARE suffix! X$ ! X$ ! X$ ! P4 = number of parts in the package X$ ! X$ ! This procedure adds the VMS_SHARE suffix and sends files X$ ! called "device:`5Bdirectory`5Dfile''nn'" nn from 1-> 'P3' X$ ! X$ ! P5 = Package description for subject line X$ ! X$ ! Defaults to file name of package (without directory or X$ ! extension). X$ ! `20 X$ ! SEND - Send the next part on the list (can be used to force a X$ ! quicker delivery. This takes no other parameters. X$ ! X$ ! SEND-SUBMIT - Send the next part on the list and then resubmit X$ ! DRIBBLE at a time interval based on the quota argument and the size X$ ! of the part sent. This function takes the same parameters as submit X$ ! below. X$ ! X$ ! SUBMIT - Submit DRIBBLE to a batch queue with the SEND-SUBMIT X$ ! function. X$ ! X$ ! P2 = batch queue to submit to. X$ ! X$ ! If blank or omitted, SYS$BATCH will be used. X$ ! X$ ! P3 = daily quota X$ ! X$ ! This is the number of blocks per day that DRIBBLE should X$ ! transmit. The interval between transmissions is calculated X$ ! based on the size of the file in such a way that the total X$ ! transmissions for one day would equal the daily quota. More X$ ! data to send would take longer than a day, and less will take X$ ! correspondingly less time. Effectively, it will transmit a fil Ve X$ ! every size/(daily quota) days. X$ ! X$ ! X$ ! Privileges: X$ ! X$ ! Whatever is necessary to access e-mail or news and the relevant X$ ! networks. X$ ! X$ ! X$ ! Environment: X$ !`20 X$ ! Nothing special. VMS_SHARE must exist of course in order to produce X$ ! the software package. ANU News must be installed to use the POST X$ ! function. X$ ! X$ ! Revision History: X$ ! X$ ! PAKMAIL 1.4 Andy Harper 03-AUG-1989 starting basis for DRIBBLE X$ ! DRIBBLE 1.0 Terry Poot 29-JUN-1990 Original version X$ ! DRIBBLE 1.1 Terry Poot 03-JUL-1990 Send part 0 if present X$ ! DRIBBLE 1.2 Terry Poot 10-AUG-1990 Prompt for input, process X$ ! Archive-Name: et. al. X$ ! DRIBBLE 1.3 Terry Poot 15-JUL-1991 Use POST rather than ADD FILE fo Vr X$ ! news batches. Remove issue/volum Ve X$ ! stuff. This makes it unuseable X$ ! for moderators, which need ADD X$ ! FILE anyway. X$ ! X$ ! X$ ! SET UP STANDARD EXIT CODES X$ !`20 X$ ss$_normal= 1 X$ ss$_abort = 44 X$ ! X$ ! Set up to write error messages X$ ! X$ em="write sys$error ""%"+f$parse(f$environment("PROCEDURE"),,,"NAME")+""", V" X$ say="write sys$output" X$ idle = 0 X$ define dribble_file_list sys$scratch:dribble_file.list X$ ! X$ ! MAKE SURE WE HAVE ALL THE PARAMETERS X$ ! X$ funclist = "/POST/MAIL/SEND/SUBMIT/SEND-SUBMIT/" X$ function = p1 X$ if function.eqs."" then goto help X$ if f$locate("/''p1'/", funclist).eq.f$length(funclist) X$ then X$ em "-INVFUNCOD, Invalid function code" X$ goto help X$ endif X$ if function.eqs."POST" X$ then X$ get_newsgroups: X$ if p2.eqs."" X$ then X$ read/prompt="_newsgroups to post to "/end=exit sys$command P2 X$ goto get_newsgroups X$ endif X$ newsgroups = f$trnlnm(p2) X$ if newsgroups.eqs."" then newsgroups = p2 X$ endif X$ if function.eqs."MAIL" X$ then X$ get_recipient: X$ if p2.eqs."" X$ then X$ read/prompt="_mail address of recipient "/end=exit sys$command P2 X$ goto get_recipient X$ endif X$ r = f$trnlnm(p2) X$ if r .eqs."" then r = p2 X$ r = r+" " X$ recipient = f$element(0, """", r) X$ e = 1 X$ rloop: X$ if f$element(e, """", r).nes."""" X$ then X$ recipient = recipient+""""""+f$element(e, """", r) X$ e = e+1 X$ goto rloop X$ endif X$ recipient = f$edit(recipient, "collapse") X$ endif X$ if function.eqs."POST".or.function.eqs."MAIL" X$ then X$ get_filespec: X$ if p3.eqs."" X$ then X$ read/prompt="_Package directory and base filename "/end=exit sys$com Vmand P3 X$ goto get_filespec X$ endif X$ filespec = p3 X$ FILESPEC = f$parse(FILESPEC,,,,"SYNTAX_ONLY")-f$parse(FILESPEC,,,"VERSI VON") X$ if f$parse(FILESPEC,,,"TYPE") .nes. "." then $ FILESPEC = FILESPEC + "_ V" X$ ! X$ get_num_parts: X$ if p4.eqs."" X$ then X$ read/prompt="_Number of parts "/end=exit sys$command p4 X$ goto get_num_parts X$ endif X$ num_parts = p4 X$ ! X$ ! Set up symbols for package name and length of part number X$ !`20 X$ package = f$parse(FILESPEC,,,"NAME") X$ l = f$length(NUM_PARTS) X$ ! X$ get_descr: X$ if p5.eqs."" X$ then X$ read/prompt="_Description of package (default will be ''package') "/ Vend=exit sys$command P5 X$ endif X$ descr = p5 X$ if descr.eqs."" then descr = package X$ endif X$ if function.eqs."POST" X$ then X$ get_arcname: X$ if p6.eqs."" X$ then X$ type sys$input X The archive name of a package should be a file name that would be X suitable as a directory name (with no brackets or periods). If X this is a patch to a previously posted package, be sure to use X the same archive name. Just type return to omit the archive name X header from your posting. X$ read/prompt="_Archive name of package "/end=exit sys$command P6 X$ if p6.nes."" X$ then X$ type sys$input X If this is a new package, enter return. If it is a patch to a X previously posted package, enter the patch number. X$ read/prompt="_patch number "/end=exit sys$command patch X$ if patch.eqs."" X$ then p6 = p6+"/" X$ else p6 = p6+"/patch"+patch+"-" X$ endif X$ endif X$ endif X$ get_submitter: X$ if p7.eqs."" X$ then X$ read/prompt="_E-mail address of submitter of package (default is to V omit it) "/end=exit sys$command P7 X$ if p7.nes."" X$ then X$ read/prompt="_Full name of submitter (default is to omit it) "/en Vd=exit sys$command name X$ if name.nes."" then p7 = p7+" ("+name+")" X$ endif X$ endif X$ endif X$ if function.eqs."POST".or.function.eqs."MAIL" X$ then X$ ! X$ ! Be sure the package exists X$ !`20 X$ if f$search("''FILESPEC'*") .eqs. "" then $ goto nopackage X$ ! X$ ! Do a quick check to make sure all required files are there!!!!! X$ !`20 X$ part = 0 X$ OK = "TRUE" X$ check: X$ part = part+1 X$ if part .gt. NUM_PARTS then $ goto end_check X$ if f$search("''FILESPEC'''part'") .nes. "" then $ goto check X$ em "-E-NOPART, Part ''part' of ''package' is missing!" X$ OK = "FALSE" X$ goto check X$ end_check: X$ ! X$ ! Were all the parts found? If not, now's the time to find out! X$ !`20 X$ if .not. OK then $ goto abandon X$ ! X$ ! Add the files to our list X$ ! X$ if f$search("DRIBBLE_FILE_LIST").eqs."" then copy nl: DRIBBLE_FILE_LIST X$ open/append out DRIBBLE_FILE_LIST X$ part = 0 X$ if f$search("''FILESPEC'''part'").nes."" then part = -1 X$ wloop: X$ part = part+1 X$ if part .le. NUM_PARTS X$ then X$ n = f$fao("!#ZL",l,part) X$ em "-I-QUEUEPART, queueing part ", part, " of ", package X$ write out function X$ if function.eqs."MAIL" then write out recipient X$ if function.eqs."POST" then write out newsgroups X$ write out descr, " ", n, "/", num_parts !subject X$ write out filespec,part X$ if function.eqs."POST" X$ then X$ if p6.nes."" X$ then write out p6,"part",n X$ else write out "" X$ endif X$ write out p7 X$ endif X$ goto wloop X$ endif X$ close out X$ endif X$ if function.eqs."SUBMIT".or.function.eqs."SEND-SUBMIT" X$ then X$ if p2.eqs."" X$ then X$ read/prompt="_Queue to submit DRIBBLE to (defaults to sys$batch) "/e Vnd=exit sys$command P2 X$ endif X$ queue = p2 X$ if queue.eqs."" then queue = "SYS$BATCH" X$ if p2.eqs."" X$ then X$ read/prompt="_Number of blocks per day to send "/end=exit sys$comman Vd P3 X$ endif X$ quota = p3 X$ if quota.eqs."" then quota = "1000" X$ endif X$ if function.eqs."SEND".or.function.eqs."SEND-SUBMIT" X$ then X$ if f$search("DRIBBLE_FILE_LIST").eqs."" then copy nl: DRIBBLE_FILE_LIST X$ open/read in DRIBBLE_FILE_LIST X$ read/end=eof in cmd X$ read/end=eof in to X$ read/end=eof in subject X$ read/end=eof in filespec X$ if cmd.eqs."POST" X$ then X$ read/end=eof in arcname X$ read/end=eof in subname X$ endif X$ idle = 0 X$ goto nxt X$ eof: idle = 1 X$ nxt: X$ close in X$ if .not.idle X$ then X$ if cmd.eqs."MAIL" X$ then X$ edit/EDT DRIBBLE_FILE_LIST XDELETE 1:4 XEXIT X$ mail/noedit/noself/subject="''subject'" 'filespec' "''to'" X$ endif X$ if cmd.eqs."POST" X$ then X$ edit/EDT DRIBBLE_FILE_LIST XDELETE 1:6 XEXIT X$ tfile = "sys$scratch:dribble_post_"+f$getjpi(0,"pid")+".tmp" X$ create 'tfile' X$ open/append out 'tfile' X$ if subname.nes."" then write out "Submitted-by: ",subname X$ if arcname.nes."" then write out "Archive-name: ",arcname X$ if "''arcname'''subname'".nes."" then write out "" X$ close out X$ append 'filespec' 'tfile' X$ def/user newsrc nl: X$ news/noscreen post/noedit/subject="''subject'" - X /newsgroups="''to'" 'tfile' Xy X$ endif X$ purge DRIBBLE_FILE_LIST X$ else X$ ! X$ ! We are idle, delete the file X$ ! X$ delete 'f$parse(";*","dribble_file_list")' X$ endif X$ endif X$ if function.eqs."SUBMIT" then after="" X$ if function.eqs."SEND-SUBMIT" X$ then X$ if .not.idle X$ then X$ wait = (f$integer(f$file(filespec,"alq"))*1440)/quota X$ wdays = wait/1440 X$ wait = wait-(1440*wdays) X$ whrs = wait/60 X$ wait = wait-(60*whrs) X$ wmins = wait X$ after = "/AFTER=""+"+f$string(wdays)+"-"+f$string(whrs)+":" - X +f$string(wmins)+"""" X$ after = f$edit(after,"trim,collapse") X$ endif X$ endif X$ if function.eqs."SUBMIT".or.(function.eqs."SEND-SUBMIT".and..not.idle) X$ then X$ proc = f$environment("procedure") X$ proc = proc-f$parse(proc,,,"version") X$ submit'after' - X /queue='queue' - X /parameters=(SEND-SUBMIT,"''queue'","''quota'") - X /noprint - X 'proc' X$ endif X$ exit ss$_normal X$ ! X$ ! ERROR HANDLERS X$ ! X$ help: X$ type sys$input XTo post articles to news: X DRIBBLE POST newsgroups filespec parts `5Bcomment`5D - X `5Barchive-name`5D `5Bsubmitter`5D `5Bvolume.issue`5D XTo mail files: X DRIBBLE MAIL recipient filespec num_parts `5Bcomment`5D XTo start the DRIBBLE batch job (if not already running) X DRIBBLE SUBMIT `5Bbatch-queue`5D `5Bdaily-quota`5D X X$ exit ss$_normal X$ nopackage: X$ em "-E-NOPACKAGE, Cant find any files for ''package'." X$ abandon: X$ em "-E-ABANDON, One or more missing parts. Send abandoned." X$ exit: X$ exit ss$_abort $ CALL UNPACK DRIBBLE.COM;34 1517198002 $ create 'f' X1 DRIBBLE XSends the parts of a VMS_SHARE file via email or posts them to news at a Xcontrolled rate expressed in blocks per day. The requests are appended to a Xfile. The user should start a delivery job with DRIBBLE SUBMIT if he does Xnot already have one running. The delivery job runs periodically, reads the Xnext item from the file, and sends it. The delay between runs of the Xdelivery job is based on the size of the parts and the daily-quota set for Xthe delivery job, and is designed so that on the average, DRIBBLE will send Xthe specified number of blocks per day. X XMail messages and postings may be intermixed on the queue. The user may Xonly have one queue file and one delivery job at any given time. Once the Xqueue is exhausted, DRIBBLE will not start another job. X X2 MAIL XDRIBBLE MAIL is used to queue the parts of a file generated by VMS_SHARE as Xa series of electronic mail messages to the same address. X XFormat: X $ DRIBBLE MAIL recipient filespec num_parts `5Bsubject`5D X X3 Recipient XThe mail address of the recipient. This may be anything which can be used Xon the MAIL command line. Because of the way MAIL parses addresses and the Xway DCL treats @ symbols, care is needed when specifying addresses which Xare distribution lists (usually prefixed by @) or which contain double Xquotes (such as needed for most foreign mail products, such as DECUS UUCP, XPMDF, MX, etc.). X X3 Filespec XThe directory and fixed constant part of the files containing the XVMS_SHARE'd package. The part number is appended to the TYPE part Xof the name.`20 X XFor instance, the name "`5B.TEST`5DBURBLE" refers to the files: X X `5B.TEST`5DBURBLE.nn X X'nn' being the part number. X X3 Num_parts XSpecifies the number of parts making up the complete package to be sent. XThis defines the total number of files to be sent.`20 X XThere is no default for this. X X3 Subject XSpecifies the subject line of the mail message or news posting. This will Xhave the part number appened in a form similar to 06/25, meaning part 6 out Xof a total 25 parts. The default is the base filename of the package files. X X3 Distribution_Lists XUse of distribution lists directly on the MAIl command line does not work Xas DCL gets at the '@' symbol before MAIL does! It must be done by Xpointing a logical name at the distribution list, including the '@' and Xthen using the logical name as the recipient.`20 X XFor instance, to simulate: X X $ DRIBBLE @FRIENDS .... X XDo: X X $ DEFINE FRIENDS "@FRIENDS.DIS" X $ CREATE FRIENDS.DIS X ..... insert friends here X `5EZ X $ DRIBBLE FRIENDS ..... X3 Quoted_usernames XUsernames must be specified in exactly the same form as they would be used Xon the MAIL command line, as in:`20 X X $ MAIL MESSAGE.TXT NET%"""FRED@MIT""" X XThis is important only when addresses containing double quotes are used; Xessentially, individual quotes are doubled and a new set placed around the Xlot.`20 X XFor instance, to simulate: X X $ DRIBBLE EARN%"FRED@CARNEGIE" X XDo: X $ DRIBBLE EARN%"""FRED@CARNEGIE""" X XAlternatively, define a logical name that contains the original form of Xaddress:`20 X X $ DEFINE BROTHER EARN%"""FRED@CARNEGIE""" X $ DRIBBLE BROTHER ... X3 Example X $ DRIBBLE MAIL FRED `5B.TEST`5DPACKAGE 25 "New copy of package" X Send all 25 parts of a VMS_SHARE created series of files that X comprise the package "PACKAGE". Files have a generic prefix of X "`5B.TEST`5DPACKAGE" and each will have its TYPE suffixed by the X VMS_SHARE convention of 'nn'. The subject of the first message X will be "New copy of package 01/25". X X2 POST XDRIBBLE POST is used to queue the parts of a file generated by VMS_SHARE as Xa series of news articles in the same newsgroup. The Archive-name: and XSubmitted-by: pseudo-headers may be added by DRIBBLE, making it easy to Xinclude these in source postings. X XFormat: X $ DRIBBLE POST newsgroups filespec num_parts `5Bsubject`5D X `5Barchive-name`5D `5Bsubmitter`5D X X3 Newsgroups XThe newsgroups to which the articles should be posted. This will either be Xone newsgroup or a comma separated list containing no embeded blanks. Be Xaware that some newsgroup names might need to be quoted, as they might Xcontain characters that have special meaning to DCL. X X3 Filespec XThe directory and fixed constant part of the files containing the XVMS_SHARE'd package. The part number is appended to the TYPE part of the Xname.`20 X XFor instance, the name "`5B.TEST`5DBURBLE" refers to the files: X X `5B.TEST`5DBURBLE.nn X X'nn' being the part number. X X X3 Num_parts XSpecifies the number of parts making up the complete package to be sent. XThis defines the total number of files to be sent.`20 X XThere is no default for this. X X3 Subject XSpecifies the subject line of the mail message or news posting. This will Xhave the part number appened in a form similar to 06/25, meaning part 6 out Xof a total 25 parts. The default is the base filename of the package files. X X3 Archive-name XThis supplies the text for the Archive-name: pseudo header line for news Xarticles. It's use is strongly encouraged when posting source files. It Xshould be one word that would be a legal file name (name only, no period), Xor one word followed by a patch number. The name should probably include Xsome version indicator. X X Examples:`20 X X dribble_v1 X dribble_v1/patch01 X dribble_v1/patch02 X X3 Submitter XThe electronic address of the submitter of the articles. Strongly Xencouraged for source postings. If specified, a Submitted-by: pseudo-header Xwill be included in the posting. This parameter should contain an email Xaddress, followed by a full name in parentheses. Note that this will need Xto by quoted. X XExample: X tp@mccall.com (Terry Poot) X X3 Example X $ DRIBBLE POST vmsnet.sources `5B.shar`5Dwhizz 5 "Whizzbang 1.0" - X whizzbang_v1-0 "tp@mccall.com (Terry Poot)" X Post all 5 parts (preceded by a part 0 if present) of X version 1.0 of a package named Whizzbang to the newsgroup X vmsnet.sources with an archive name of "whizzbang_v1-0" and X a submitter address of "tp@mccall.com (Terry Poot)". X X2 SUBMIT XDRIBBLE SUBMIT submits the batch delivery job that actually mails files or Xposts them to news. The file sys$scratch:dribble_file.list contains the Xqueue that DRIBBLE processes in the delivery job, and should not be Xdisturbed while the delivery job is in the queue. The exception to this is Xthat DRIBBLE MAIL or DRIBBLE POST may be used to add files to DRIBBLE's Xqueue. X XFormat: X $ DRIBBLE SUBMIT `5Bbatch-queue`5D `5Bdaily-quota`5D X X3 Batch-queue XThe batch queue in which the delivery job should run. X X3 daily-quota XThe number of blocks DRIBBLE should send in a single 24 hour period. After Xeach file is sent, dribble calculates how long to wait before sending the Xnext one by calculating what percentage of the daily quota that file Xconsumed, and submitting itself after that percentage of 24 hours has Xelapsed. Note that for small quotas and large files, this could be longer Xthan 1 day. X XA value of 0 means that DRIBBLE should not wait. The job to send the next Xpart should be queued to run immediately after each part is sent. X XNote that the only way to change this value for a DRIBBLE job already in Xthe queue is to delete that job and execute DRIBBLE SUBMIT with the new Xvalue. X X3 Examples X $ DRIBBLE SUBMIT sys$batch 2000 X Submit a batch job to begin delivery of files queued to X DRIBBLE. The job runs in sys$batch. DRIBBLE will send 2000 blocks X of data per day. X X2 VMS_SHARE XVMS_SHARE packages a series of files into the special format. See the help Xon that utility for specific information.`20 X2 Errors XThese errors can be returned from DRIBBLE. X3 ABANDON XOne or more of the parts of the package could not be found. Prior messages Xshould give the specific parts that could not be found. XSee NOPART.`20 X3 INVFUNCOD XThe first parameter to DRIBBLE was not recognized. Users should only use XMAIL, POST, or SUBMIT for the first parameter. X3 MAIL_errors XDRIBBLE uses the MAIL utility to send the parts. Consequently errors may be Xissued by the MAIL utility under certain conditions. Consult the MAIL Xreference manual and/or system messages reference manual for details of Xthese. These messages only occur when a message is actually sent, and thus Xwill appear in the dribble.log file in the user's home directory. X3 NEWS_errors XDRIBBLE uses the ANU News program to post news articles. Consequently, Xerros may be issued by the News utility under certain conditions. Consult Xthe ANU News documentation for details of these. These messages only occur Xwhen an article is actually sent, and thus will appear in the dribble.log Xfile in the user's home directory. X3 NOPACKAGE XNo files could be found for the package at all so it is highly probable Xthat the name of the package has been given incorrectly. X3 NOPART XIndicates that a particular part of the package cannot be found. Given a Xfilespec of '`5Bdir`5Dfile.type', the parts of the package should exist as:` V20 X `5Bdir`5Dfile.type_1 X `5Bdir`5Dfile.type_2 X ... X3 QUEUEPART XAn informational message to indicate that a particular part of the package Xhas been queued for delivery at a later time. $ CALL UNPACK DRIBBLE.HLP;4 1493995795 $ v=f$verify(v) $ EXIT -- Terry Poot The McCall Pattern Company (uucp: ...!rutgers!ksuvax1!deimos!mccall!tp) 615 McCall Road (800)255-2762, in KS (913)776-4041 Manhattan, KS 66502, USA