[comp.os.vms] BOSS 2.4 1/4

KARNEY%PPC.MFENET@NMFECC.ARPA (07/18/88)

...................... Cut between dotted lines and save. .....................
$!.............................................................................
$! VAX/VMS archive file created by VMS_SHARE V06.00 26-May-1988.
$!
$! VMS_SHARE was written by James Gray (Gray:OSBUSouth@Xerox.COM) from
$! VMS_SHAR by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au).
$!
$! To unpack, simply save, concatinate all parts into one file and
$! execute (@) that file.
$!
$! This archive was created by user KARNEY
$! on 11-JUL-1988 09:43:15.90.
$!
$! ATTENTION: To keep each article below 34 blocks (17408 bytes), this
$!            program has been transmitted in 4 parts.  You should
$!            concatenate ALL parts to ONE file and execute (@) that file.
$!
$! It contains the following 6 files:
$!        BOSS.README
$!        BOSS.HLP
$!        BOSS.C
$!        BOSS_CLD.CLD
$!        BOSS_BUILD.COM
$!        BOSS_INSTALL.COM
$!
$!==============================================================================
$ SET SYMBOL/SCOPE=( NOLOCAL, NOGLOBAL )
$ VERSION = F$GETSYI( "VERSION" )
$ IF VERSION .GES "V4.4" THEN GOTO VERSION_OK
$ WRITE SYS$OUTPUT "You are running VMS ''VERSION'; ", -
    "VMS_SHARE V06.00 26-May-1988 requires VMS V4.4 or higher."
$ EXIT 44 
$VERSION_OK:
$ GOTO START
$
$UNPACK_FILE:
$ WRITE SYS$OUTPUT "Creating ''FILE_IS'"
$ DEFINE/USER_MODE SYS$OUTPUT NL:
$ EDIT/TPU/COMMAND=SYS$INPUT/NODISPLAY/OUTPUT='FILE_IS'/NOSECTION -
    VMS_SHARE_DUMMY.DUMMY
b_part := CREATE_BUFFER( "{Part}", GET_INFO( COMMAND_LINE, "file_name" ) )
; s_file_spec := GET_INFO( COMMAND_LINE, "output_file" ); SET( OUTPUT_FILE
, b_part, s_file_spec ); b_errors := CREATE_BUFFER( "{Errors}" ); i_errors 
:= 0; pat_beg_1 := ANCHOR & "-+-+-+ Beginning"; pat_beg_2 := LINE_BEGIN 
& "+-+-+-+ Beginning"; pat_end := ANCHOR & "+-+-+-+-+ End"; POSITION
( BEGINNING_OF( b_part ) ); i_append_line := 0; LOOP EXITIF MARK( NONE 
) = END_OF( b_part ); s_x := ERASE_CHARACTER( 1 ); IF s_x = "+" THEN r_skip 
:= SEARCH( pat_beg_1, FORWARD, EXACT ); IF r_skip <> 0 THEN s_x := ""
; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ERASE_LINE; ENDIF; ENDIF
; IF s_x = "-" THEN r_skip := SEARCH( pat_end, FORWARD, EXACT ); IF r_skip <
> 0 THEN s_x := ""; MOVE_HORIZONTAL( -CURRENT_OFFSET ); m_skip := MARK( NONE )
; r_skip := SEARCH( pat_beg_2, FORWARD, EXACT ); IF r_skip <> 0 THEN POSITION
( END_OF( r_skip ) ); MOVE_HORIZONTAL( -CURRENT_OFFSET ); MOVE_VERTICAL( 1 )
; MOVE_HORIZONTAL( -1 ); ELSE POSITION( END_OF( b_part ) ); ENDIF; ERASE
( CREATE_RANGE( m_skip, MARK( NONE ), NONE ) ); ENDIF; ENDIF
; IF s_x = "V" THEN s_x := ""; IF i_append_line <> 0 THEN APPEND_LINE
; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF; i_append_line := 1; MOVE_VERTICAL
( 1 ); ENDIF; IF s_x = "X" THEN s_x := ""; IF i_append_line <
> 0 THEN APPEND_LINE; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF
; i_append_line := 0; MOVE_VERTICAL( 1 ); ENDIF; IF s_x <> "" THEN i_errors 
:= i_errors + 1; s_text := CURRENT_LINE; POSITION( b_errors ); COPY_TEXT
( "The following line could not be unpacked properly:" ); SPLIT_LINE
; COPY_TEXT( s_x ); COPY_TEXT( s_text ); POSITION( b_part ); MOVE_VERTICAL( 1 
); ENDIF; ENDLOOP; POSITION( BEGINNING_OF( b_part ) ); LOOP r_x := SEARCH( "`"
, FORWARD, EXACT ); EXITIF r_x = 0; POSITION( r_x ); ERASE_CHARACTER( 1 )
; IF CURRENT_CHARACTER = "`" THEN MOVE_HORIZONTAL( 1 ); ELSE COPY_TEXT( ASCII
( INT( ERASE_CHARACTER( 3 ) ) ) ); ENDIF; ENDLOOP; IF i_errors = 0 THEN SET
( NO_WRITE, b_errors, ON ); ELSE POSITION( BEGINNING_OF( b_errors ) )
; COPY_TEXT( FAO( "The following !UL errors were detected while unpacking !AS"
, i_errors, s_file_spec ) ); SPLIT_LINE; SET( OUTPUT_FILE, b_errors
, "SYS$COMMAND" ); ENDIF; EXIT; 
$ DELETE VMS_SHARE_DUMMY.DUMMY;*
$ CHECKSUM 'FILE_IS
$ WRITE SYS$OUTPUT " CHECKSUM ", -
  F$ELEMENT( CHECKSUM_IS .EQ. CHECKSUM$CHECKSUM, ",", "failed!,passed." )
$ RETURN
$
$START:
$ FILE_IS = "BOSS.README"
$ CHECKSUM_IS = 2048593391
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
XThis is BOSS version 2.4 (July 5, 1988).  It consists of 6 files
X    BOSS.README`009      This file
X    BOSS.HLP`009      The user help file
X    BOSS.C`009      The source code
X    BOSS_CLD.CLD      The command language definitions
X    BOSS_BUILD.COM    The procedure for compiling and linking BOSS
X    BOSS_INSTALL.COM  The procedure for installing BOSS
X
XBOSS requires that pseudo TTY (PTY) drivers be installed on your system.
XBOSS works with one of two versions of the drivers:
X
X(a) the lastest version of the drivers posted to INFO-VAX by Kevin Carosso
Xin June 1988 (new PTY).  This is recommended for VMS 5.0.  With VMS 4.7,
XBOSS exhibits a bug with this version of PTY.  When you type control-s to
Xstop output from a process, all connection with the process is apparently
Xlost (the process receives no input, and you receive no output).  At this
Xstage, you have to switch to another process and STOP the process.  (I
Xencounter exactly the same bug with PHOTO).  You can avoid this problem by
Xspecifying the /FLOW_CONTROL qualifier to BOSS.  (This causes BOSS to
Xintercept and act on control-s.  However this will break programs like
XEmacs which need to be able to receive control-s.)  I assume that BOSS
Xworks OK with new PTY and VMS 5.0.  If someone can confirm this for me, I'd
Xlike to hear about it.
X
X(b) the earlier version with the security patch installed (old PTY).  This
Xis recommended for VMS 4.x.  I believe this version of PTY will only work
Xwith VMS 4.x.  You can tell if you don't have the security patch installed,
Xbecause BOSS will quit with an "insufficient privilege" error when you try
Xto start a process (unless you have the READALL privilege or equivalent).
X
XContact me if you need a copy of either old PTY or new PTY.
X
XYou should edit BOSS_INSTALL.COM to refer to the directory where BOSS.EXE
Xresides.  BOSS should be installed with both PHY_IO and OPER privileges.
XYou can get by without these privileges--see the comments in BOSS.C.
X
XBOSS needs to be defined as a foreign command, i.e.,
X    $ BOSS == "$<dev>:[<dir>]BOSS"
XBOSS.HLP tells the user to do
X    $ SETUP BOSS
Xbefore running BOSS.  SETUP on our system runs a .COM file which does the
Xnecessary initialization for various utilities.  You will probably need to
Xedit BOSS.HLP to insert the incantation appropriate for your site.
XBOSS.HLP should of course be installed in some easily accessible help
Xlibrary.  Something like
X    $ LIBRARY/HELP/REPLACE HLP$LIBRARY_1 BOSS
Xshould do the trick.
X
XThe new features in this version (v. 2.4) compared with the last release
X(v. 1.5) are:
X
X* BOSS can control both subprocesses and top-level process (which you have
X  to log into).
X* Broadcast messages that BOSS receives are rebroadcast to the current
X  process.
X* Command character (usually control-\) is settable.
X* BOSS can automatically start and initialize processes when it is started.
X* Hooks are in place to support additional terminal types.  (Currently,
X  VT100-compatible terminals and ADM3As are supported.)
X* BOSS works with the latest (June 1988) release of the pseudo TTY drivers.
X
XFor more information look at HELP BOSS New_Features.
X
X    Charles Karney
X    Plasma Physics Laboratory`009Phone:`009 +1 609 243 2607
X    Princeton University`009MFEnet:`009 Karney@PPC.MFEnet
X    PO Box 451`009`009`009ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
X    Princeton, NJ 08543-0451`009Bitnet:`009 Karney%PPC.MFEnet@ANLVMS.Bitnet
$ GOSUB UNPACK_FILE
$ FILE_IS = "BOSS.HLP"
$ CHECKSUM_IS = 152800594
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X1 BOSS
XBOSS is an interactive job controller.  It lets you run several interactive
Xjobs simultaneously.  Before running BOSS put
X
X    $ SETUP BOSS
X
Xinto your login.com file.  In order to run BOSS type
X
X    $ BOSS
X
XBOSS was written by Charles Karney based on the PHOTO program written by Asbed
XBedrossian of USC.  It utilizes the Pseudo TTY package of Dale Moore of CMU
Xand Kevin Carosso of Network Research Co.
X
XBugs, questions, etc. to
X    Charles Karney
X    Plasma Physics Laboratory   Phone:   +1 609 243 2607
X    Princeton University        MFEnet:  Karney@PPC.MFEnet
X    PO Box 451                  ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
X    Princeton, NJ 08543-0451    Bitnet:  Karney%PPC.MFEnet@ANLVMS.Bitnet
X2 Description
XBOSS lets you create up to 8 processes on a VAX/VMS system.  Each process is
Xidentified by a single letter (A thru Z).  This letter is used in the
Xprocess name and in the DCL prompt.  At most one of these processes is
X``current'.  What you type is sent to that process, and output from that
Xprocess is sent to your terminal.  A process which is not current can run
Xbut normally cannot do output.  (What happens to the output is governed by
Xthe output flag for a particular process.  See topic Output_flags.)  You
Xusually switch between processes by typing control-\ followed by the
Xidentifying letter.  It is also possible to have have of your processes
Xinitiate the switch.  (See topic Communicating.)
X
XYou can run any program under BOSS.  For example, you might
X    run Emacs or EVE                   in process E
X    SET HOST to another machine        in process H
X    run NETTY to the B machine         in process B
X    do a FORTRAN compilation           in process F
X    execute DCL commands               in process D
X    talk to your colleague using PHONE in process P
Xand so on.
X
XOf course, you would normally not need to run so many processes.  (Indeed
Xyour subprocess quota may only let you run 5 processes.)  When you are
Xthrough with a process, you should log out of it (with ``logout') and switch
Xto some other process.
X
XBOSS makes no attempt to keep track of what is on your screen.  Usually when
Xswitching to a process which manages the screen in an advanced manner, you
Xshould issue a command to the program to get it to re-draw the screen.
X(This is control-w for EVE, PHONE, SPELL; control-l for Emacs.)
X
XBOSS uses needs to know the escape sequences for clearing your screen, etc.
XBy default, it uses the VT100 sequences which work for a wide range of
Xterminals.  See topic Terminal_types.
X2 Commands   `032
XUsually, all commands to BOSS begin with the command character which by
Xdefault is C-\ (control-\).  The command character can be changed by using
Xthe /COMMAND_CHARACTER qualifier to BOSS.  The command character is not
Xrequired is when there is no current process (i.e., initially and
Ximmediately after logging out of a process).  In that case the command
Xcharacter is optional.
X
XThe commands are:
X
X    C-h (or BS) Print command summary
X    C-z     Quit (asking confirmation if there are processes)
X    a       Switch to process labeled A (and similarly with a thru z)
X    A       Clear screen and then switch to process A
X    C-n a   Create new process A as a subprocess (C-n A clears screen first)
X    C-t a   Create process A at top level (C-t A clears screen first)
X    C-b     Buffer output for this process
X    C-o     Discard output for this process
X    C-p     Print output from this process
X    C-w     Stop output from this process
X    ?       List processes and output flags
X             (* means current, +/- means waiting for output)
X    C-\     Sends the command character to the current process
X    DEL     Do nothing
X    other   Sound the bell on the terminal
X2 Qualifiers
XWhen starting BOSS you can provide the following qualifiers:
X
X/COMMAND_CHARACTER
X /COMMAND_CHARACTER=num
X Default: /COMMAND_CHARACTER=%O34 (i.e., C-\)
X
XUse the character whose ASCII code is num as the command character instead
Xof C-\.  E.g.,
X  BOSS/COMMAND_CHARACTER=%X1F   ! set command character to C-_
X  BOSS/COMMAND_CHARACTER=%O37                   ! the same
X  BOSS/COMMAND_CHARACTER=31                     ! the same
X  BOSS/COMMAND_CHARACTER='F$CVSI(0,6,"_")'      ! the same
X  BOSS/COMMAND_CHARACTER='F$CVSI(0,8,"``")'      ! set to `` (backquote)
XRepeating the command character twice sends the character to the current
Xprocess.  C-z is disallowed as a command character since otherwise you
Xwouldn't be able to quit.
X
X/START_PROCESS
X /START_PROCESS=(process-1,process-2,...)
X
XBOSS immediately starts up the specified processes.  E.g.,
X  BOSS/START_PROCESS=A
Xstarts process A.  You are left in the last process specified; e.g.,
X  BOSS/START_PROCESS=(E,D)
Xstarts E and D and sets D to be the current process
X
X/STUFF_STRING
X /STUFF_STRING=(string-1,string-2,...)
X
XThis qualifier is processed in parallel with /START_PROCESS.  string-n is
Xsent the process-n when it is started.  A carriage return is added to the
Xstring unless the string is empty.  If the /STUFF_STRING list is shorter
Xthan the /START_PROCESS list, then nothing is sent to the remaining
Xprocesses.  E.g.,
X  BOSS/START=(E,D)/STUFF=EMACS
Xstarts process E runs Emacs in it.  Then BOSS starts process D (and sends
Xnothing to it).  To send more than one command to a process, you can do,
Xe.g.,
X  BOSS/START=(B,B)/STUFF=("SHOW TIME",FINGER)
Xwhich start process B and sends runs both SHOW TIME and FINGER.  (Or else
Xyou can construct a DCL string with an imbedded carriage return.
X
X/OUTPUT_FLAGS
X /OUTPUT_FLAGS=(flag-1,flag-2,...)  flag-n is one of b, o, w, p
X
XThis qualifier is processed in parallel with /START_PROCESS.  The output
Xflag for process-n is set to flag-n.  If the /OUTPUT_FLAGS list is shorter
Xthan the /START_PROCESS list, then the output flags for the remaining
Xprocesses are set to the default.
X
X/DEFAULT_OUTPUT_FLAG
X /DEFAULT_OUTPUT_FLAG=flag (one of b, o, w, p)
X Default: /DEFAULT_OUTPUT_FLAG=b
X
XThis sets the default output flag.  See topic Output_flags.
X
X/BEGIN_PROMPT
X /BEGIN_PROMPT=string
X Default: /NOBEGIN_PROMPT
X
XThis specifies the part of the DCL prompt which appears before the process
Xlabel.  E.g.,
X  BOSS/BEGIN_PROMPT="--"/END_PROMPT=">> "
Xgives you DCL prompts of the form "--Q>> ".
X
X/END_PROMPT
X /END_PROMPT=string
X Default: /END_PROMPT="> "
X
XThis specifies the part of the DCL prompt which appears after the process
Xlabel.
X
X/SWITCH_CREATE
X /SWITCH_CREATE
X Default: /NOSWITCH_CREATE
X
XBy default, you have to create a process with either C-\ C-n x or C-\ C-t
Xx.  If /SWITCH_CREATE is set, then switching to nonexistent process
Xcreates it as a subprocess.  (I.e., C-\ x is equivalent to C-\ C-n x).  If
Xyou always want /SWITCH_CREATE set, then put
X    $ setup boss
X    $ boss == "''boss'/switch_create"
Xinto your LOGIN.COM file.
X
X/FLOW_CONTROL
X /FLOW_CONTROL
X Default: /NOFLOW_CONTROL
X
XNormally, everything you type is passed on to the current process.  This
Xincludes the flow-control characters control-s and control-q.  This results
Xin some delay in these characters being acted upon.  Your terminal may
Xtherefore receive many additional characters after a C-s is typed, causing
Xyou to lose information off the top of your screen or your terminal's input
Xbuffer to overflow.  With
X    BOSS/FLOW_CONTROL
XC-s and C-q are intercepted by the terminal driver and used as flow-
Xcontrol.  This cause C-s to be acted on more promptly.  The drawback is
Xthat you can never send C-s and C-q to your program.  This breaks certain
Xprograms, notably Emacs, which need to be able to receive all the ASCII
Xcharacters.  A second drawback is that once the output is stopped with C-s,
Xonly a C-q can get it going again.  You can't interrupt it with a C-y as
Xyou can normally.  (This is because BOSS/FLOW_CONTROL only treats C-s and
XC-q as special.  C-y and C-c are treated as ordinary characters.)
X
X/DELETE_CHARACTER
X /DELETE_CHARACTER=num
X Default: /DELETE_CHARACTER=%O177 (i.e., DEL)
X
XUse the character whose ASCII code is num as the delete character instead
Xof DEL.  This is useful on some terminals with weird keyboards.  E.g., on
Xsome ADM terminals, the delete key is shift-underscore.  If you do
X  BOSS/DELETE_CHARACTER='F$CVSI(0,8,"_")'
Xthen underscore and delete are interchanged.  (I.e., the underscore key
Xsends a delete to your program, and the shift-underscore key sends an
Xunderscore to your program.)
X2 Terminal_types
XWhen switching processes, BOSS tries either to clear the screen or to move
Xto the bottom of the screen.  By default, it uses VT100 escape sequences for
Xthese operations.  However, if you define the logical name BOSS$TERM to be
Xthe name of some other terminal, then it will use the escape sequence for
Xthat terminal.
X
XE.g., if you're using an ADM3A terminal, you should do
X    $ DEFINE/NOLOG BOSS$TERM ADM3A
Xbefore starting BOSS.  (ADM3A users would probably also want to set the
Xdelete character to underscore.  See topic /DELETE_CHARACTER.)
X
-+-+-+-+-+ End of part 1 +-+-+-+-+-