$set nover $copy sys$input BOARD_DIGEST.COM $deck $! $! BOARD_DIGEST.COM $! $! Command file invoked by folder associated with a BBOARD which is $! is specified with /SPECIAL. It will convert "digest" mail and $! split it into separate messages. This type of mail is used in $! certain Arpanet mailing lists, such as TEXHAX and INFO-MAC. $! $ FF[0,8] = 12 ! Define a form feed character $ SET PROTECT=(W:RWED)/DEFAULT $ SET PROC/PRIV=SYSPRV $ USER := 'F$GETJPI("","USERNAME") $ EXTRACT_FILE = "BULL_DIR:" + "''USER'" + ".TXT" $ DEFINE/USER EXTRACT_FILE BULL_DIR:'USER' $ MAIL READ EXTRACT EXTRACT_FILE DELETE $ OPEN/READ INPUT 'EXTRACT_FILE' $ OPEN/WRITE OUTPUT 'EXTRACT_FILE' $ READ INPUT FROM_USER $AGAIN: $ READ/END=ERROR INPUT BUFFER $ IF F$EXTRACT(0,3,BUFFER) .NES. "To:" THEN GOTO SKIP $ USER = F$EXTRACT(4,F$LEN(BUFFER),BUFFER) $ GOTO AGAIN1 $SKIP: $ IF F$EXTRACT(0,15,BUFFER) .NES. "---------------" THEN GOTO AGAIN $AGAIN1: $ READ/END=ERROR INPUT BUFFER $ IF F$EXTRACT(0,15,BUFFER) .NES. "---------------" THEN GOTO AGAIN1 $ FROM = " " $ SUBJ = " " $NEXT: $ READ/END=EXIT INPUT BUFFER $FROM: $ IF F$EXTRACT(0,5,BUFFER) .NES. "From:" THEN GOTO SUBJECT $ FROM = BUFFER $ GOTO NEXT $SUBJECT: $ IF F$EXTRACT(0,8,BUFFER) .NES. "Subject:" THEN GOTO NEXT $ SUBJ = BUFFER - "Subject:" $F2: $ IF F$LENGTH(SUBJ) .EQ. 0 THEN GOTO WRITE $ IF F$EXTRACT(0,1,SUBJ) .NES. " " THEN GOTO WRITE $ SUBJ = F$EXTRACT(1,F$LENGTH(SUBJ),SUBJ) $ GOTO F2 $WRITE: $ WRITE OUTPUT FROM_USER ! Write From: + TAB + USERNAME $ WRITE OUTPUT "To: " + USER ! Write To: + TAB + BBOARDUSERNAME $ WRITE OUTPUT "Subj: " + SUBJ ! Write Subject: + TAB + mail subject $ WRITE OUTPUT "" ! Write one blank line $ IF FROM .NES. " " THEN WRITE OUTPUT FROM $READ: $ READ/END=EXIT/ERR=EXIT INPUT BUFFER $ IF F$EXTRACT(0,15,BUFFER) .EQS. "---------------" THEN GOTO READ1 $ WRITE OUTPUT BUFFER $ GOTO READ $READ1: $ READ/END=EXIT/ERR=EXIT INPUT BUFFER $ IF F$LOCATE(":",BUFFER) .EQ. F$LENGTH(BUFFER) THEN GOTO READ1 $ WRITE OUTPUT FF $ FROM = " " $ SUBJ = " " $ GOTO FROM $EXIT: $ CLOSE INPUT $ CLOSE OUTPUT $ PUR 'EXTRACT_FILE' $ EXIT $ERROR: $ CLOSE INPUT $ CLOSE OUTPUT $ DELETE 'EXTRACT_FILE'; $eod $copy sys$input BOARD_SPECIAL.COM $deck $! $! BOARD_SPECIAL.COM $! $! Command file invoked by folder associated with a BBOARD which is $! is specified with /SPECIAL. This can be used to convert data to $! a message via a different means than the VMS mail. This is done by $! converting the data to look like output created by the MAIL utility, $! which appears as follows: $! $! First line is 0 length line. $! Second line is "From:" followed by TAB followed by incoming username $! Third line is "To:" followed by TAB followed by BBOARD username $! Fourth line is "Subj:" followed by TAB followed by subject $! The message text then follows. $! Message is ended by a line containing a FORM FEED. $! $! This command file should be put in the BBOARD_DIRECTORY as specified $! in BULLFILES.INC. You can also have several different types of special $! procedures. To accomplish this, rename the file to the BBOARD username. $! i.e. if you specify SET BBOARD FOO/SPECIAL, you could name the file $! FOO.COM and it will execute that rather than BOARD_SPECIAL.COM. $! $! The following routine is the one we use to convert mail from a non-DEC $! mail network. The output from this mail is written into a file which $! is slightly different from the type outputted by MAIL. $! $! (NOTE: A username in the SET BBOARD command need only be specified if $! the process which reads the mail requires that the process be owned by $! a specific user, which is the case for this sample, and for that matter $! when reading VMS MAIL. If this is not required, you do not have to $! specify a username.) $! $ USERNAME := 'F$GETJPI("","USERNAME")' ! This trims trailing spaces $ IF F$SEARCH("MFE_TELL_FILES:"+USERNAME+".MAI") .EQS. "" THEN EXIT $ SET DEFAULT BULL_DIR: ! BULLETIN looks for text in BBOARD directory $ SET PROTECT=(W:RWED)/DEFAULT $ IF F$SEARCH("MFEMSG.MAI") .NES. "" THEN - DELETE MFEMSG.MAI;* ! Delete any leftover output files. $ MSG := $MFE_TELL: MESSAGE $ DEFINE/USER SYS$COMMAND SYS$INPUT $ MSG ! Read MFENET mail copy * MFEMSG delete * exit $ FF[0,8] = 12 ! Define a form feed character $ OPEN/READ/ERROR=EXIT INPUT MFEMSG.MAI $ OUTNAME = USERNAME+".TXT" ! Output file will be 'USERNAME'.TXT $ OPEN/WRITE OUTPUT 'OUTNAME' $ READ/END=END INPUT DATA ! Skip first line in MSG output $HEADER: $ FROM = "" $ SUBJ = "" $ MFEMAIL = "T" $NEXTHEADER: $ IF (FROM.NES."") .AND. (SUBJ.NES."") THEN GOTO SKIPHEADER $ READ/END=END INPUT DATA ! Read header line in MSG output $ IF DATA .EQS. "" THEN GOTO SKIPHEADER ! Missing From or Subj ?? $ IF FROM .NES. "" THEN GOTO SKIPFROM $ IF F$LOCATE("From: ",DATA) .NES. 0 THEN GOTO 10$ $ MFEMAIL = "F" $ FROM= F$EXTRACT(6,F$LENGTH(DATA),DATA) $ GOTO NEXTHEADER $10$: $ IF F$LOCATE("Reply-to: ",DATA) .NES. 0 THEN GOTO 20$ $ MFEMAIL = "F" $ FROM= F$EXTRACT(10,F$LENGTH(DATA),DATA) $ GOTO NEXTHEADER $20$: $ IF F$LOCATE("From ",DATA) .NES. 0 THEN GOTO SKIPFROM $ FROM= F$EXTRACT(5,F$LENGTH(DATA),DATA) $ GOTO NEXTHEADER $SKIPFROM: $ IF SUBJ .NES. "" THEN GOTO SKIPSUBJ $ IF F$LOCATE("Subject",DATA) .NES. 0 THEN GOTO SKIPSUBJ $ SUBJ= F$EXTRACT(F$LOCATE(": ",DATA)+2,F$LENGTH(DATA),DATA) $ GOTO NEXTHEADER $SKIPSUBJ: $ GOTO NEXTHEADER $SKIPHEADER: $ WRITE OUTPUT "From: " + FROM ! Write From: + TAB + USERNAME $ WRITE OUTPUT "To: " + USERNAME ! Write To: + TAB + BBOARDUSERNAME $ WRITE OUTPUT "Subj: " + SUBJ ! Write Subject: + TAB + mail subject $ WRITE OUTPUT "" ! Write one blank line $ IF (DATA.EQS."") .OR. MFEMAIL THEN GOTO SKIPBLANKS $50$: $ READ/END=END INPUT DATA ! Skip rest of main header $ IF DATA .NES. "" THEN GOTO 50$ $60$: $ READ/END=END INPUT DATA ! Skip all of secondary header $ IF DATA .NES. "" THEN GOTO 60$ $SKIPBLANKS: $ READ/END=END INPUT DATA ! Skip all blanks $ IF DATA .EQS. "" THEN GOTO SKIPBLANKS $NEXT: ! Read and write message text $ WRITE OUTPUT DATA $ IF DATA .EQS. FF THEN GOTO HEADER ! Multiple messages are seperated by form feeds $ READ/END=END INPUT DATA $ GOTO NEXT $END: $ CLOSE INPUT $ CLOSE OUTPUT $ DELETE MFEMSG.MAI; $EXIT: $ EXIT $eod $copy sys$input BULLCOM.CLD $deck ! ! BULLCOM.CLD ! ! VERSION 8/8/89 ! MODULE BULLETIN_SUBCOMMANDS DEFINE VERB ADD PARAMETER P1, LABEL=FILESPEC, VALUE(TYPE=$FILE) QUALIFIER ALL, NONNEGATABLE QUALIFIER BELL, NONNEGATABLE QUALIFIER BROADCAST, NONNEGATABLE DISALLOW NOT BROADCAST AND ALL DISALLOW NOT BROADCAST AND BELL QUALIFIER CLUSTER, DEFAULT QUALIFIER EDIT, NEGATABLE QUALIFIER EXPIRATION, NONNEGATABLE, VALUE QUALIFIER FOLDER, LABEL=SELECT_FOLDER, VALUE(REQUIRED,LIST) QUALIFIER NODES, LABEL=NODES, VALUE(REQUIRED,LIST) NONNEGATABLE QUALIFIER LOCAL, NONNEGATABLE DISALLOW LOCAL AND NOT BROADCAST DISALLOW NODES AND SELECT_FOLDER QUALIFIER NOINDENT, NONNEGATABLE DISALLOW NOINDENT AND NOT TEXT QUALIFIER PERMANENT, NONNEGATABLE QUALIFIER SHUTDOWN, NONNEGATABLE, VALUE DISALLOW PERMANENT AND SHUTDOWN QUALIFIER SUBJECT, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER SYSTEM, NONNEGATABLE QUALIFIER TEXT, NONNEGATABLE DISALLOW TEXT AND NOT EDIT DISALLOW TEXT AND FILESPEC QUALIFIER USERNAME, LABEL=USERNAME, VALUE(REQUIRED) NONNEGATABLE DEFINE VERB BACK DEFINE VERB CHANGE PARAMETER P1, LABEL=FILESPEC, VALUE(TYPE=$FILE) QUALIFIER EDIT, NEGATABLE QUALIFIER EXPIRATION, NONNEGATABLE, VALUE QUALIFIER GENERAL, NONNEGATABLE QUALIFIER HEADER, NONNEGATABLE QUALIFIER SUBJECT, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER NEW,NONNEGATABLE QUALIFIER NUMBER, VALUE(TYPE=$NUMBER,REQUIRED) QUALIFIER PERMANENT, NONNEGATABLE QUALIFIER SHUTDOWN, NONNEGATABLE, VALUE QUALIFIER SYSTEM,NONNEGATABLE QUALIFIER TEXT, NONNEGATABLE DISALLOW NEW AND NOT EDIT DISALLOW SYSTEM AND GENERAL DISALLOW PERMANENT AND SHUTDOWN DISALLOW PERMANENT AND EXPIRATION DISALLOW SHUTDOWN AND EXPIRATION DISALLOW SUBJECT AND HEADER DEFINE VERB COPY PARAMETER P1, LABEL=FOLDER, PROMPT="Folder" VALUE(REQUIRED) PARAMETER P2, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER ALL QUALIFIER MERGE QUALIFIER ORIGINAL DISALLOW ALL AND BULLETIN_NUMBER DEFINE VERB CREATE QUALIFIER BRIEF, NONNEGATABLE QUALIFIER DESCRIPTION, NONNEGATABLE, VALUE(REQUIRED) ! ! Make the following qualifier DEFAULT if you want CREATE to be ! a privileged command. NOTE: Make sure that BULL_DIR:BULLUSER.DAT ! has the following protection: (RWED,RWED,,) ! QUALIFIER NEEDPRIV, NONNEGATABLE QUALIFIER NODE, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER NOTIFY, NONNEGATABLE QUALIFIER OWNER, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER PRIVATE, NONNEGATABLE QUALIFIER READNEW, NONNEGATABLE QUALIFIER REMOTENAME, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER SEMIPRIVATE, NONNEGATABLE QUALIFIER SHOWNEW, NONNEGATABLE QUALIFIER SYSTEM, NONNEGATABLE PARAMETER P1, LABEL=CREATE_FOLDER, PROMPT="Folder" VALUE(REQUIRED) DISALLOW PRIVATE AND SEMIPRIVATE DISALLOW BRIEF AND READNEW DISALLOW SHOWNEW AND READNEW DISALLOW BRIEF AND SHOWNEW DISALLOW NODE AND (NOTIFY OR PRIVATE OR SEMIPRIVATE) DISALLOW REMOTENAME AND NOT NODE DEFINE VERB CURRENT QUALIFIER EDIT DEFINE VERB DELETE PARAMETER P1, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER ALL QUALIFIER IMMEDIATE,NONNEGATABLE QUALIFIER FOLDER, LABEL=SELECT_FOLDER, VALUE(REQUIRED,LIST) QUALIFIER NODES, LABEL=NODES, VALUE(REQUIRED,LIST) QUALIFIER USERNAME, LABEL=USERNAME, VALUE(REQUIRED) QUALIFIER SUBJECT, VALUE(REQUIRED) DISALLOW NOT SUBJECT AND (NODES OR SELECT_FOLDER) DISALLOW NODES AND SELECT_FOLDER DEFINE VERB DIRECTORY PARAMETER P1, LABEL=SELECT_FOLDER QUALIFIER FOLDER, SYNTAX=DIRECTORY_FOLDER, NONNEGATABLE QUALIFIER NEW QUALIFIER START, VALUE(REQUIRED,TYPE=$NUMBER), NONNEGATABLE QUALIFIER SINCE,VALUE(DEFAULT="TODAY",TYPE=$DATETIME) QUALIFIER MARKED, NONNEGATABLE DISALLOW (NEW AND SINCE) OR (START AND NEW) OR (START AND SINCE) DEFINE SYNTAX DIRECTORY_FOLDER QUALIFIER DESCRIBE QUALIFIER FOLDER, DEFAULT DEFINE VERB E ! EXIT command. DEFINE VERB EX ! EXIT command. DEFINE VERB EXIT ! EXIT command. DEFINE VERB EXTRACT PARAMETER P1, LABEL=FILESPEC, VALUE(TYPE=$FILE,REQUIRED), PROMPT="File" PARAMETER P2, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER ALL QUALIFIER HEADER, DEFAULT QUALIFIER NEW, NONNEGATABLE DISALLOW ALL AND BULLETIN_NUMBER DEFINE VERB FILE PARAMETER P1, LABEL=FILESPEC, VALUE(TYPE=$FILE,REQUIRED), PROMPT="File" PARAMETER P2, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER ALL QUALIFIER HEADER, DEFAULT QUALIFIER NEW, NONNEGATABLE DISALLOW ALL AND BULLETIN_NUMBER DEFINE VERB HELP PARAMETER P1, LABEL=HELP_FOLDER, VALUE(TYPE=$REST_OF_LINE) DEFINE VERB INDEX PARAMETER P1, LABEL=SELECT_FOLDER QUALIFIER MARKED QUALIFIER FOLDER, SYNTAX=DIRECTORY_FOLDER, NONNEGATABLE QUALIFIER NEW QUALIFIER RESTART QUALIFIER START, VALUE(REQUIRED,TYPE=$NUMBER), NONNEGATABLE QUALIFIER SINCE,VALUE(DEFAULT="TODAY",TYPE=$DATETIME) DISALLOW (NEW AND SINCE) OR (START AND NEW) OR (START AND SINCE) DEFINE VERB LAST DEFINE VERB MAIL PARAMETER P1, LABEL=RECIPIENTS, PROMPT="Recipients" VALUE(REQUIRED,IMPCAT,LIST) QUALIFIER HEADER, DEFAULT QUALIFIER SUBJECT, VALUE(REQUIRED) DEFINE VERB MODIFY QUALIFIER DESCRIPTION QUALIFIER NAME, VALUE(REQUIRED) QUALIFIER OWNER, VALUE(REQUIRED) DEFINE VERB MOVE PARAMETER P1, LABEL=FOLDER, PROMPT="Folder" VALUE(REQUIRED) PARAMETER P2, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER ALL QUALIFIER MERGE QUALIFIER NODES QUALIFIER ORIGINAL QUALIFIER IMMEDIATE,NONNEGATABLE,DEFAULT DISALLOW ALL AND BULLETIN_NUMBER DISALLOW FOLDER AND NODES DEFINE VERB NEXT DEFINE VERB POST QUALIFIER CC, VALUE(LIST,REQUIRED) QUALIFIER LIST, DEFAULT QUALIFIER SUBJECT, VALUE(REQUIRED) QUALIFIER NOINDENT, NONNEGATABLE DISALLOW NOINDENT AND NOT TEXT QUALIFIER TEXT QUALIFIER EDIT DISALLOW TEXT AND NOT EDIT DEFINE VERB PRINT PARAMETER P1, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) QUALIFIER HEADER, DEFAULT QUALIFIER NOTIFY, DEFAULT QUALIFIER QUEUE, VALUE(DEFAULT=SYS$PRINT), NONNEGATABLE QUALIFIER FORM, VALUE, NONNEGATABLE QUALIFIER ALL DISALLOW ALL AND BULLETIN_NUMBER DEFINE VERB QUIT DEFINE VERB READ PARAMETER P1, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$NUMBER) QUALIFIER EDIT QUALIFIER MARKED, NONNEGATABLE QUALIFIER NEW QUALIFIER PAGE, DEFAULT QUALIFIER SINCE,VALUE(DEFAULT="TODAY",TYPE=$DATETIME) DISALLOW NEW AND SINCE DEFINE VERB REPLY PARAMETER P1, LABEL=FILESPEC, VALUE(TYPE=$FILE) QUALIFIER ALL, NONNEGATABLE QUALIFIER BELL, NONNEGATABLE QUALIFIER BROADCAST, NONNEGATABLE DISALLOW NOT BROADCAST AND ALL DISALLOW NOT BROADCAST AND BELL QUALIFIER CLUSTER, DEFAULT QUALIFIER EDIT, NEGATABLE QUALIFIER EXPIRATION, NONNEGATABLE, VALUE QUALIFIER FOLDER, LABEL=SELECT_FOLDER, VALUE(REQUIRED,LIST) QUALIFIER NODES, LABEL=NODES, VALUE(REQUIRED,LIST) NONNEGATABLE QUALIFIER LOCAL DISALLOW LOCAL AND NOT BROADCAST DISALLOW NODES AND SELECT_FOLDER QUALIFIER NOINDENT, NONNEGATABLE DISALLOW NOINDENT AND NOT TEXT QUALIFIER PERMANENT, NONNEGATABLE QUALIFIER SHUTDOWN, NONNEGATABLE, VALUE DISALLOW PERMANENT AND SHUTDOWN QUALIFIER SUBJECT, NONNEGATABLE, VALUE(REQUIRED) QUALIFIER SYSTEM, NONNEGATABLE QUALIFIER TEXT, NONNEGATABLE DISALLOW TEXT AND NOT EDIT DISALLOW TEXT AND FILESPEC QUALIFIER USERNAME, LABEL=USERNAME, VALUE(REQUIRED) NONNEGATABLE DEFINE VERB REMOVE PARAMETER P1, LABEL=REMOVE_FOLDER, PROMPT="Folder" VALUE(REQUIRED) DEFINE VERB RESPOND QUALIFIER CC, VALUE(LIST,REQUIRED) QUALIFIER LIST QUALIFIER SUBJECT, VALUE(REQUIRED) QUALIFIER NOINDENT, NONNEGATABLE DISALLOW NOINDENT AND NOT TEXT QUALIFIER TEXT QUALIFIER EDIT DISALLOW TEXT AND NOT EDIT DEFINE VERB SEARCH PARAMETER P1, LABEL=SEARCH_STRING QUALIFIER START, VALUE(TYPE=$NUMBER,REQUIRED) QUALIFIER REVERSE QUALIFIER SUBJECT DEFINE VERB SELECT PARAMETER P1, LABEL=SELECT_FOLDER QUALIFIER MARKED, NONNEGATABLE DEFINE VERB SET PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) QUALIFIER ID DEFINE TYPE SET_OPTIONS KEYWORD NODE, SYNTAX=SET_NODE KEYWORD NONODE, SYNTAX = SET_NONODE KEYWORD EXPIRE_LIMIT, SYNTAX=SET_EXPIRE KEYWORD NOEXPIRE_LIMIT KEYWORD GENERIC, SYNTAX=SET_GENERIC KEYWORD NOGENERIC, SYNTAX=SET_GENERIC KEYWORD LOGIN, SYNTAX=SET_LOGIN KEYWORD NOLOGIN, SYNTAX=SET_LOGIN KEYWORD NOBBOARD KEYWORD BBOARD, SYNTAX=SET_BBOARD KEYWORD NOBRIEF, SYNTAX=SET_NOFLAGS KEYWORD BRIEF, SYNTAX=SET_FLAGS KEYWORD NOSHOWNEW, SYNTAX=SET_NOFLAGS KEYWORD SHOWNEW, SYNTAX=SET_FLAGS KEYWORD NOREADNEW, SYNTAX=SET_NOFLAGS KEYWORD READNEW, SYNTAX=SET_FLAGS KEYWORD ACCESS, SYNTAX=SET_ACCESS KEYWORD NOACCESS, SYNTAX=SET_NOACCESS KEYWORD FOLDER, SYNTAX=SET_FOLDER KEYWORD NOTIFY, SYNTAX=SET_FLAGS KEYWORD NONOTIFY, SYNTAX=SET_NOFLAGS KEYWORD PRIVILEGES, SYNTAX=SET_PRIVILEGES KEYWORD DUMP KEYWORD NODUMP KEYWORD PAGE KEYWORD NOPAGE KEYWORD SYSTEM KEYWORD NOSYSTEM KEYWORD KEYPAD KEYWORD NOKEYPAD KEYWORD PROMPT_EXPIRE KEYWORD NOPROMPT_EXPIRE KEYWORD DEFAULT_EXPIRE, SYNTAX=SET_DEFAULT_EXPIRE KEYWORD STRIP KEYWORD NOSTRIP KEYWORD DIGEST KEYWORD NODIGEST DEFINE SYNTAX SET_NODE PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=NODENAME, VALUE(REQUIRED) PARAMETER P3, LABEL=REMOTENAME QUALIFIER FOLDER, VALUE(REQUIRED) DEFINE SYNTAX SET_NONODE QUALIFIER FOLDER, VALUE(REQUIRED) DEFINE SYNTAX SET_EXPIRE PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=EXPIRATION, VALUE(TYPE=$NUMBER,REQUIRED) DEFINE SYNTAX SET_GENERIC PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=USERNAME, VALUE(REQUIRED) QUALIFIER DAYS,VALUE(TYPE=$NUMBER,DEFAULT="7"),DEFAULT DEFINE SYNTAX SET_LOGIN PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=USERNAME, VALUE(REQUIRED) DEFINE SYNTAX SET_FLAGS PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) QUALIFIER DEFAULT, NONNEGATABLE QUALIFIER ALL, NONNEGATABLE QUALIFIER CLUSTER, DEFAULT QUALIFIER FOLDER, VALUE(REQUIRED) DISALLOW NOT ALL AND NOT DEFAULT AND CLUSTER DISALLOW ALL AND DEFAULT DEFINE SYNTAX SET_NOFLAGS PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) QUALIFIER DEFAULT, NONNEGATABLE QUALIFIER ALL, NONNEGATABLE QUALIFIER FOLDER, VALUE(REQUIRED) DISALLOW ALL AND DEFAULT DEFINE SYNTAX SET_BBOARD PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=BB_USERNAME QUALIFIER EXPIRATION, VALUE(TYPE=$NUMBER) LABEL=EXPIRATION, DEFAULT QUALIFIER SPECIAL, NONNEGATABLE QUALIFIER VMSMAIL, NONNEGATABLE DISALLOW VMSMAIL AND NOT SPECIAL DISALLOW VMSMAIL AND NOT BB_USERNAME DEFINE SYNTAX SET_FOLDER PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=SELECT_FOLDER QUALIFIER MARKED, NONNEGATABLE DEFINE SYNTAX SET_NOACCESS PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=ACCESS_ID, VALUE(LIST) PARAMETER P3, LABEL=ACCESS_FOLDER QUALIFIER ALL, NONNEGATABLE QUALIFIER READONLY, NONNEGATABLE DISALLOW NOT ALL AND NOT ACCESS_ID DISALLOW ALL AND NOT READONLY DEFINE SYNTAX SET_ACCESS PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=ACCESS_ID, VALUE(LIST) PARAMETER P3, LABEL=ACCESS_FOLDER QUALIFIER READONLY, NONNEGATABLE QUALIFIER ALL, NONNEGATABLE DISALLOW NOT ALL AND NOT ACCESS_ID DEFINE SYNTAX SET_PRIVILEGES PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=PRIVILEGES, PROMPT="Privileges" VALUE (REQUIRED,LIST) DEFINE SYNTAX SET_DEFAULT_EXPIRE PARAMETER P1, LABEL=SET_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SET_OPTIONS) PARAMETER P2, LABEL=DEFAULT_EXPIRE, VALUE(TYPE=$NUMBER,REQUIRED) DEFINE VERB SHOW PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) ! ! The following are defined to allow qualifiers to be specified ! directly after the SHOW command, i.e. SHOW/FULL FOLDER. ! Otherwise, the CLI routines will reject the command, because it ! first attempts to process the qualifier before process the parameter, ! so it has no information the qualifiers are valid. ! QUALIFIER FULL, SYNTAX=SHOW_FOLDER_FULL, NONNEGATABLE QUALIFIER ALL, SYNTAX=SHOW_USER QUALIFIER LOGIN, SYNTAX=SHOW_USER QUALIFIER NOLOGIN, SYNTAX=SHOW_USER QUALIFIER PRINT, SYNTAX=SHOW_KEYPAD_PRINT DEFINE TYPE SHOW_OPTIONS KEYWORD FOLDER, SYNTAX=SHOW_FOLDER KEYWORD NEW, SYNTAX=SHOW_FLAGS KEYWORD PRIVILEGES, SYNTAX=SHOW_FLAGS KEYWORD FLAGS, SYNTAX=SHOW_FLAGS KEYWORD KEYPAD, SYNTAX=SHOW_KEYPAD KEYWORD USER, SYNTAX=SHOW_USER KEYWORD VERSION DEFINE SYNTAX SHOW_FLAGS PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) DEFINE SYNTAX SHOW_KEYPAD PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) QUALIFIER PRINT DEFINE SYNTAX SHOW_KEYPAD_PRINT PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) QUALIFIER PRINT,DEFAULT DEFINE SYNTAX SHOW_FOLDER PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) PARAMETER P2, LABEL=SHOW_FOLDER DEFINE SYNTAX SHOW_USER PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) PARAMETER P2, LABEL=USERNAME QUALIFIER ALL QUALIFIER LOGIN QUALIFIER NOLOGIN DISALLOW (NOLOGIN OR LOGIN OR ALL) AND USERNAME DISALLOW (LOGIN AND NOLOGIN) DEFINE SYNTAX SHOW_FOLDER_FULL QUALIFIER FULL, DEFAULT PARAMETER P1, LABEL=SHOW_PARAM1, PROMPT="What" VALUE(REQUIRED, TYPE=SHOW_OPTIONS) PARAMETER P2, LABEL=SHOW_FOLDER DEFINE VERB MARK PARAMETER P1, LABEL=NUMBER, VALUE(LIST,TYPE=$NUMBER) DEFINE VERB SPAWN PARAMETER P1, LABEL=COMMAND, VALUE(TYPE=$REST_OF_LINE) DEFINE VERB UNMARK PARAMETER P1, LABEL=NUMBER, VALUE(LIST,TYPE=$NUMBER) DEFINE VERB UNDELETE PARAMETER P1, LABEL=BULLETIN_NUMBER, VALUE(TYPE=$FILE) $eod $copy sys$input BULLETIN.CLD $deck ! ! This file is the CLD file used to define a command to execute ! BULLETIN by using CDU, which adds the command to the command table. ! The alternative is to define a symbol to execute BULLETIN. ! Either way will work, and it is up to the user's to decide which ! method to work. (If you don't know which, you probably should use ! the default symbol method.) ! Define Verb BULLETIN Image BULL_DIR:BULLETIN Parameter P1, Label = SELECT_FOLDER Qualifier ALL Qualifier BBOARD Qualifier BULLCP Qualifier CLEANUP, Value (Required) Qualifier EDIT Qualifier KEYPAD Qualifier LOGIN Qualifier MARKED Qualifier PAGE, Default Qualifier PROMPT, Value (Default = "BULLETIN"), Default Qualifier READNEW Qualifier REVERSE ! ! The following line causes a line to be outputted separating system notices. ! The line consists of a line of all "-"s, i.e.: !-------------------------------------------------------------------------- ! If you want a different character to be used, simply put in the desired one ! in the following line. If you want to disable the feature, remove the ! Default at the end of the line. (Don't remove the whole line!) ! Qualifier SEPARATE, Value (Default = "-"), Default Qualifier STARTUP Qualifier STOP Qualifier SYSTEM, Value (Type = $NUMBER, Default = "7") $eod $copy sys$input BULLETIN.COM $deck $ DEFINE SYS$INPUT SYS$NET $ BULLETIN $eod $copy sys$input BULLMAIN.CLD $deck MODULE BULLETIN_MAINCOMMANDS DEFINE VERB BULLETIN PARAMETER P1, LABEL=SELECT_FOLDER QUALIFIER ALL QUALIFIER BBOARD QUALIFIER BULLCP QUALIFIER CLEANUP, LABEL=CLEANUP, VALUE(REQUIRED) QUALIFIER EDIT QUALIFIER KEYPAD QUALIFIER LOGIN QUALIFIER MARKED QUALIFIER PAGE, DEFAULT QUALIFIER READNEW QUALIFIER REVERSE ! ! The following line causes a line to be outputted separating system notices. ! The line consists of a line of all "-"s, i.e.: !-------------------------------------------------------------------------- ! If you want a different character to be used, simply put in the desired one ! in the following line. If you want to disable the feature, remove the ! DEFAULT at the end of the line. (Don't remove the whole line!) ! QUALIFIER SEPARATE, VALUE(DEFAULT="-"), DEFAULT QUALIFIER STARTUP QUALIFIER STOP QUALIFIER SYSTEM, VALUE(TYPE=$NUMBER,DEFAULT="7") $eod $copy sys$input BULLSTART.COM $deck $ RUN SYS$SYSTEM:INSTALL BULL_DIR:BULLETIN/SHAR/OPEN/HEAD/- PRIV=(OPER,SYSPRV,CMKRNL,WORLD,DETACH,PRMMBX,SYSNAM) /EXIT $ BULL*ETIN :== $BULL_DIR:BULLETIN $ BULLETIN/STARTUP $eod $copy sys$input CREATE.COM $deck $ FORTRAN/EXTEND BULLETIN $ FORTRAN/EXTEND BULLETIN0 $ FORTRAN/EXTEND BULLETIN1 $ FORTRAN/EXTEND BULLETIN2 $ FORTRAN/EXTEND BULLETIN3 $ FORTRAN/EXTEND BULLETIN4 $ FORTRAN/EXTEND BULLETIN5 $ FORTRAN/EXTEND BULLETIN6 $ FORTRAN/EXTEND BULLETIN7 $ FORTRAN/EXTEND BULLETIN8 $ FORTRAN/EXTEND BULLETIN9 $ MAC ALLMACS $ SET COMMAND/OBJ BULLCOM $ SET COMMAND/OBJ BULLMAIN $ IF F$SEARCH("BULL.OLB") .NES. "" THEN DELETE BULL.OLB; $ IF F$SEARCH("BULL.OLB") .EQS. "" THEN LIB/CREATE BULL $ LIB BULL *.OBJ; $ DELETE *.OBJ;* $ @BULLETIN.LNK $eod $copy sys$input DCLREMOTE.COM $deck $! DCL procedure to execute DCL commands passed over Decnet on a remote system. $! Commands sent by the command procedure REMOTE.COM on the local system are $! are received by this procedure on the remote node. $! This procedure is usually a DECNET OBJECT with task name DCLREMOTE and $! normally resides in the default DECNET account. To install as an object, $! enter NCP, and then use the command: $! NCP> SET OBJECT DCLREMOTE FILE file-spec NUM 0 $! where file-spec includes the disk, directory, and file name of the file. $! If DCLREMOTE is not installed as an object, the logical name DCLREMOTE can $! be defined to point at it. $! $! Alternativley, DCLREMOTE.COM could be placed in the directory of the user's $! proxy login on the remote system. $! $! WARNING: An EXIT command must not be passed as a command to execute at this $! procedure level or the link will hang. $! $ SET NOON $ N = 0 $AGAIN: $ N = N + 1 $ IF N .GE. 5 THEN GOTO DONE $ OPEN/WRITE/READ/ERR=AGAIN NET SYS$NET $ DEFINE /NOLOG SYS$OUTPUT NET $ DEFINE /NOLOG SYS$ERROR NET $NEXT_CMD: $ READ /ERR=DONE NET COMMAND $ 'COMMAND' $ WRITE/ERR=DONE SYS$OUTPUT "COMMAND$DONE ''$STATUS'" $ GOTO NEXT_CMD $DONE: $ CLOSE NET $eod $copy sys$input INSTALL.COM $deck $ COPY BULLETIN.EXE BULL_DIR: $ RUN SYS$SYSTEM:INSTALL BULL_DIR:BULLETIN/DEL BULL_DIR:BULLETIN/SHAR/OPEN/HEAD/- PRIV=(OPER,SYSPRV,CMKRNL,WORLD,DETACH,PRMMBX,SYSNAM) /EXIT $! $! NOTE: BULLETIN requires a separate help library. If you do not wish $! the library to be placed in SYS$HELP, modify the following lines and $! define the logical name BULL_HELP to be the help library directory, i.e. $! $ DEFINE/SYSTEM BULL_HELP SYSD$:[NEWDIRECTORY] $! The above line should be placed in BULLSTART.COM to be executed after $! every system reboot. $! $ IF F$SEARCH("SYS$HELP:BULL.HLB") .NES. "" THEN LIB/DELETE=*/HELP SYS$HELP:BULL $ IF F$SEARCH("SYS$HELP:BULL.HLB") .EQS. "" THEN LIB/CREATE/HELP SYS$HELP:BULL $ LIB/HELP SYS$HELP:BULL BULLCOMS1,BULLCOMS2 $ LIB/HELP SYS$HELP:HELPLIB BULLETIN $eod $copy sys$input INSTALL_REMOTE.COM $deck $! $! INSTALL_REMOTE.COM $! VERSION 5/25/88 $! $! DESCRIPTION: $! Command procedure to easily install BULLETIN.EXE on several nodes. $! $! INPUTS: $! The following parameters can be added to the command line. They $! should be placed on the command line which executes this command $! procedure, separated by spaces. I.e. @INSTALL_REMOTE.COM OLD COPY TEST $! $! OLD - Specifies that the present version of BULLETIN is 1.51 or earlier. $! COPY - Specifies that the executable is to be copied to the nodes. $! TEST - Specifies that all the nodes are to be checked to see if they $! are up before beginning the intallation. $! $! NOTES: $! ***PLEASE READ ALL COMMENTS BEFORE RUNNING THIS*** $! This calls REMOTE.COM which is also included with the installation. $! $! DCLREMOTE.COM must be properly installed on all nodes. $! See comments at the beginning of that file for instructions. $! Also, you need to have a proxy login with privileges on those nodes. $! This procedure assumes that the BULLETIN executable on each node is $! located in the BULL_DIR directory. The new executable should be copied $! to that directory before running this procedure, or the COPY option $! should be used. $! $! If the present version of BULLETIN is 1.51 or earlier, it does not have $! the ability of setting BULL_DISABLE to disable BULLETIN, so you should $! use the OLD parameter when running this procedure. $! $! INSTRUCTIONS FOR SPECIFYING THE NODES AT YOUR SITE: $! Place the nodes where bulletin is to be reinstalled in variable NODES. $! Place the nodes where the executable is to be copied to in COPY_NODES. $! Place nodes where BULLCP is running in BULLCP_NODES. $! $ NODES = "ALCVAX,NERUS,ANANSI,MOLVAX,LAURIE,CANDLE,KLYPSO,DOME" +- ",ARVON,LARAN,ORYANA,PALDAR,MOTHRA,TARNA,DARIUS" $ COPY_NODES = "NERUS,LAURIE,ARVON" $ BULLCP_NODES = "NERUS,LAURIE,ARVON" $! $ NODES = NODES + "," $ COPY_NODES = COPY_NODES + "," $ BULLCP_NODES = BULLCP_NODES + "," $! $! Check for any parameters passed to the command procedure. $! $ PARAMETER = P1 + P2 + P3 $ OLD = 0 $ IF F$LOCATE("OLD",PARAMETER) .NE. F$LENGTH(PARAMETER) THEN OLD = 1 $ TEST = 0 $ IF F$LOCATE("TEST",PARAMETER) .NE. F$LENGTH(PARAMETER) THEN TEST = 1 $ COPYB = 0 $ IF F$LOCATE("COPY",PARAMETER) .NE. F$LENGTH(PARAMETER) THEN COPYB = 1 $! $! If TEST requested, see if nodes are accessible. $! $ IF .NOT. TEST THEN GOTO END_TEST $BEGIN_TEST: $ NODES1 = NODES $TEST: $ IF F$LEN(NODES1) .EQ. 0 THEN GOTO END_TEST $ NODE = F$EXTRACT(0,F$LOCATE(",",NODES1),NODES1) $ NODES1 = NODES1 - NODE - "," $ @REMOTE 'NODE' END $ GOTO TEST $END_TEST: $! $! If COPY requested, copy executable to nodes. $! $ IF .NOT. COPYB THEN GOTO END_COPY $COPY: $ IF F$LEN(COPY_NODES) .EQ. 0 THEN GOTO END_COPY $ NODE = F$EXTRACT(0,F$LOCATE(",",COPY_NODES),COPY_NODES) $ COPY_NODES = COPY_NODES - NODE - "," $ COPY BULLETIN.EXE 'NODE'::BULL_DIR: $ GOTO COPY $END_COPY: $! $! The procedure now goes to each node and disables bulletin and kills $! the BULLCP process if present. NOTE: If version is < 1.51, we assume $! that BULLCP is running under SYSTEM account. This is not necessary $! for older versions where the BULLETIN/STOP command can be used. $! If BULLCP is not running under the SYSTEM account for version 1.51 $! or less, you will have to kill them manually before running this! $! $BEGIN_DISABLE: $ NODES1 = NODES $DISABLE: $ IF F$LEN(NODES1) .EQ. 0 THEN GOTO END_DISABLE $ NODE = F$EXTRACT(0,F$LOCATE(",",NODES1),NODES1) $ NODES1 = NODES1 - NODE - "," $ @REMOTE 'NODE' CONTINUE SET PROC/PRIV=ALL $ IF F$LOCATE(","+NODE+",",","+BULLCP_NODES) .EQ. - F$LENGTH(","+BULLCP_NODES) THEN GOTO SKIP_STOP_BULLCP $ IF OLD THEN @REMOTE 'NODE' CONTINUE SET UIC [SYSTEM] $ IF OLD THEN @REMOTE 'NODE' CONTINUE STOP BULLCP $ IF .NOT. OLD THEN @REMOTE 'NODE' CONTINUE BULLETIN := $BULL_DIR:BULLETIN $ IF .NOT. OLD THEN @REMOTE 'NODE' CONTINUE BULLETIN/STOP $SKIP_STOP_BULLCP: $ @REMOTE 'NODE' CONTINUE INS := $SYS$SYSTEM:INSTALL $ IF OLD THEN @REMOTE 'NODE' END INS BULL_DIR:BULLETIN/DELETE $ IF .NOT. OLD THEN @REMOTE 'NODE' END DEF/SYSTEM BULL_DISABLE DISABLE $ GOTO DISABLE $END_DISABLE: $! $! The procedure now installs the new BULLETIN. $! $ NODES1 = NODES $INSTALL: $ IF F$LEN(NODES1) .EQ. 0 THEN EXIT $ NODE = F$EXTRACT(0,F$LOCATE(",",NODES1),NODES1) $ NODES1 = NODES1 - NODE - "," $ @REMOTE 'NODE' CONTINUE SET PROC/PRIV=ALL $ @REMOTE 'NODE' CONTINUE INS := $SYS$SYSTEM:INSTALL $ @REMOTE 'NODE' CONTINUE BULLETIN := $BULL_DIR:BULLETIN $ IF OLD THEN @REMOTE 'NODE' CONTINUE INS BULL_DIR:BULLETIN/SHAR- /OPEN/HEAD/PRIV=(OPER,SYSPRV,CMKRNL,WORLD,DETACH,PRMMBX,SYSNAM) $ IF .NOT. OLD THEN @REMOTE 'NODE' CONTINUE INS BULL_DIR:BULLETIN/REPLACE $ IF .NOT. OLD THEN @REMOTE 'NODE' CONTINUE DEASS/SYSTEM BULL_DISABLE $ IF F$LOCATE(","+NODE+",",","+BULLCP_NODES) .EQ. - F$LENGTH(","+BULLCP_NODES) THEN GOTO SKIP_START_BULLCP $ @REMOTE 'NODE' CONTINUE SET UIC [SYSTEM] $ @REMOTE 'NODE' CONTINUE BULLETIN := $BULL_DIR:BULLETIN" $ @REMOTE 'NODE' CONTINUE BULLETIN/START $SKIP_START_BULLCP: $ @REMOTE 'NODE' END CONTINUE $ GOTO INSTALL $eod $copy sys$input INSTRUCT.COM $deck $ BULLETIN ADD/PERMANENT/SYSTEM INSTRUCT.TXT INFO ON HOW TO USE THE BULLETIN UTILITY. ADD/PERMANENT NONSYSTEM.TXT INFO ON BEING PROMPTED TO READ NON-SYSTEM BULLETINS. EXIT $eod $copy sys$input LOGIN.COM $deck $! $! The following line defines the BULLETIN command. $! $ BULL*ETIN :== $BULL_DIR:BULLETIN $! $! Note: The command prompt when executing the utility is named after $! the executable image. Thus, as it is presently set up, the prompt $! will be "BULLETIN>". DO NOT make the command that executes the $! image different from the image name, or certain things will break. $! $! If you would rather define the BULLETIN command using CDU rather than $! defining it using a symbol, use the BULLETIN.CLD file to do so. $! $! The following line causes new messages to be displayed upon logging in. $! $ BULLETIN/LOGIN/REVERSE $! $! If you wish bulletins to be displayed starting with $! the newest rather the oldest, omit the /REVERSE qualifier. $! Note that for totally new users, only permanent system messages and $! the first non-system general message is displayed (which, if you ran $! INSTURCT.COM, would describe what a non-system message is). $! This is done so as to avoid overwhelming a new user with lots of $! messages upon logging in for the first time. $! Users who have DISMAIL enabled in the authorzation table will automatically $! be set to "NOLOGIN" (see HELP SET NOLOGIN). If you wish to disable this $! feature, add /ALL to the /LOGIN command. $! $eod $copy sys$input MAKEFILE. $deck # Makefile for BULLETIN Bulletin : Bulletin.Exe Bull.Hlb Bulletin.Exe : Bull.Olb Link /NoTrace Bull.Olb/Lib /Inc=Bulletin$Main,Sys$System:Sys.Stb/Sel - /NoUserlib /Exe=Bulletin.Exe,Sys$Input/Opt ID="V1.68" $ Bull.Olb : Bulletin.Obj Bulletin0.Obj Bulletin1.Obj Bulletin2.Obj \ Bulletin3.Obj Bulletin4.Obj Bulletin5.Obj Bulletin6.Obj \ Bulletin7.Obj Bulletin8.Obj Bulletin9.Obj \ Bullcom.Obj Bullmain.Obj Allmacs.Obj Library /Create Bull.Olb *.Obj Purge /Log *.Obj,*.Exe Bulletin.Obj : Bulletin.For Bullfiles.Inc Bulldir.Inc Bullfolder.Inc \ Bulluser.Inc Fortran /Extend /NoList Bulletin.For Bulletin0.Obj : Bulletin0.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin0.For Bulletin1.Obj : Bulletin1.For Bulldir.Inc Bullfolder.Inc Bulluser.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin1.For Bulletin2.Obj : Bulletin2.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin2.For Bulletin3.Obj : Bulletin3.For Bulldir.Inc Bullfolder.Inc Bulluser.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin3.For Bulletin4.Obj : Bulletin4.For Bullfolder.Inc Bulluser.Inc Bullfiles.Inc \ Bulldir.Inc Fortran /Extend /NoList Bulletin4.For Bulletin5.Obj : Bulletin5.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin5.For Bulletin6.Obj : Bulletin6.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin6.For Bulletin7.Obj : Bulletin7.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin7.For Bulletin8.Obj : Bulletin8.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin8.For Bulletin9.Obj : Bulletin9.For Bulldir.Inc Bulluser.Inc Bullfolder.Inc \ Bullfiles.Inc Fortran /Extend /NoList Bulletin9.For Allmacs.Obj : Allmacs.mar Macro /NoList Allmacs.Mar Bullcom.Obj : Bullcom.cld Set Command /Obj Bullcom.Cld Bullmain.Obj : Bullmain.cld Set Command /Obj Bullmain.Cld Bull.Hlb : Bullcoms1.Hlp Bullcoms2.Hlp Library /Create /Help Bull.Hlb Bullcoms1.Hlp, Bullcoms2.Hlp Purge Bull.Hlb *.hlb : lib/help/cre $* $eod $copy sys$input REMOTE.COM $deck $! FILE: REMOTE.COM VERSION 1.3 EDIT 880513 - CAK $! DCL procedure to execute DCL commands on a remote decnet node. $! The remote DECNET object DCLREMOTE.COM must be defined as a known type 0 $! object on the remote node or the file must be in the login directory $! of the account used on the remote system. Or the logical name DCLREMOTE $! can be defined to point at the object. $! $! Usage: REM*OTE :== @SYS$MANAGER:REMOTE [P1] [P2] ... $! $! P1 - Node name commands are to be executed on, including any access control. $! If no access control is specified then a proxy login is attempted. $! The you do not have an account on the remote system then the default $! DECNET account is used. $! P2 - DCL command to execute on the remote system. Optional. $! P3-P8 Additional parameters passed to the command (so quotes aren't needed) $ $ ON WARNING THEN GOTO ERROR $ ON CONTROL_Y THEN GOTO ERROR $ COMMAND := 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8' $ IF P2 .EQS. "CONTINUE" THEN COMMAND = COMMAND - "CONTINUE" $ IF P2 .EQS. "END" THEN COMMAND = COMMAND - "END" $ NEXT_CMD = "NEXT_CMD" $ IF P2 .NES. "" THEN NEXT_CMD = "DONE" $ P1 = P1 - "::" $ $ IF F$LOG ("NET") .EQS. "" THEN GOTO OPEN_LINK $ IF P2 .EQS. "CONTINUE" THEN GOTO NEXT_CMD $ IF P2 .EQS. "END" THEN GOTO NEXT_CMD $OPEN_LINK: $ WRITE SYS$OUTPUT "Establishing DECNET link to node ''P1'..." $ OPEN/WRITE/READ NET 'P1'::"TASK=DCLREMOTE" $ $NEXT_CMD: $ IF P2 .EQS. "" THEN READ /ERR=ERROR/PROMPT="''P1'> " SYS$COMMAND COMMAND $ IF F$EDIT(F$EXTR(0,1,COMMAND),"UPCASE") .EQS. "E" THEN GOTO DONE $ WRITE NET COMMAND $LOOP: $ READ/ERR=ERROR/TIME_OUT=10 NET LINE $ IF F$EXTR (0,12,LINE) .EQS. "COMMAND$DONE" THEN GOTO 'NEXT_CMD' $ WRITE SYS$OUTPUT LINE $ GOTO LOOP $DONE: $ IF P2 .EQS. "CONTINUE" THEN EXIT $ IF F$LOG ("NET") .NES. "" THEN CLOSE NET $ EXIT $ERROR: $ IF F$LOG ("NET") .NES. "" THEN CLOSE NET $ STOP $eod