[comp.os.vms] Print Symbiont that provides script capabilities

gregg@a.cs.okstate.edu (Gregg Wonderly) (09/17/87)

--------

Here at OSU, we have a terminal network that connects to the majority of
computers on campus.  There are clusters here and there on campus that
have printers in them for the computers operated by the Computer Center
(IBM 3081K/MVS-XA, 780/VMS and 8350/ULTRIX).  The other computers on
the network can not (at this point) make use of the printers in these
clusters due to the fact that there are dedicated circuits to the Computer
Center computers that completely eliminate this possibility.  The network
has the capabilities of queuing connection requests to a particular port,
so that multiple hosts could share printers if they just knew how to
select a port on the network, and negociate the queuing process.

I have written a PSM based symbiont that provides just this capabilities.
It has a comprehensive script facility with conditional logic to make it
possible to write a script that does the best thing for a given condition.
I have tested this thing for about a month now (instead of working on VI
documentation as you all have been asking me to).  One of the best uses
that I forsee, is that you can actually buy a modem and a printer, locate
them anywhere (in the world quite literally), and then call out on your
modem and print at a remote location without having a leased line directly
connected to the printer/computer.

The symbiont supports a fallback capability to choose between any number
of devices and scripts.  You can conditionally turn on transaction logging
for scripts to aid in debugging a connection.  A shareable image can be used
to allow a separate program to display the connection status of all active
queues.

Scripts are parameterized (the script file name is a parameter to each possible
connection method) to minimize the number you have to maintain for similiar
connections.  Below is a sample script that I use to connect to our terminal
network, and select a printer to print on.

top:
! Initiate a connection to the network
xmit "\024"
wait 1
xmit "\r"
! Wait for invitation to select
recv "$0" 20 - error
! Send the port selection
xmit "$1"
wait 1
xmit "$2\r"
! Loop, waiting for something we recognize
loop:
  ! On sucess, go print (done)
  recv "$3" 20 done +error
check:
  ! If busy, then QUEUE and wait
  match "$4" busy
  ! If the printer is off line, then just try again
  match "$5" deranged
  ! IF the connection breaks, then there is a problem.
  match "DISC" disconnect
  goto loop
+error:
error:
  ! Log an error message on the PRINT operators consoles
  oper "Port $6 is not reachable"
deranged:
disconnect:
  ! Break this connection and try the next method.
  restart
! Queue for the port
busy:
  xmit "Q\r"
  recv "QUEUED" 10 - error
  ! Only wait 40 seconds, as another queue could need this device.
  recv "$3" 40 - check
! When done, print the job
done:
go
! Pause to let the network buffers empty before disconnecting.
wait "$7"
! Break the connection and wait 5 seconds before next job.
end 5

I will not attempt to explain the script here, but just thought that I would
include it FYI.  If you are interested in obtaining the symbiont, I can E-Mail
it to you, or you can send me a tape and return postage, and I will snail it
to you.

US-SNAIL: Gregg Wonderly
          401 Math Sciences
          Oklahoma State University
          Stillwater OK, 74078

UUCP:     {cbosgd, ihnp4, rutgers, uiucdcs}!okstate!nemo.math.okstate.edu!gregg
ARPA:     gregg@NEMO.MATH.OKSTATE.EDU