Mainframe : SPRI : Changes in SPRI 38

The following outlines the enhancements in SPRI available in Release 3.8.  Detail information on these changes may be found in the 'Changes in SPRI 3.8' document (S000). 

If you have questions concerning these enhancements, please contact Software Pursuits Technical Support via:


Support For email of SPRI Elements Via SMTP

You can now specify that SPRI elements are to be sent via email using SMTP (Simple Mail Transfer Protocol) to one or more recipients and/or groups of recipients. This is done using the SPRI RPT statement and its new MAILTO= operand.

To simplify the process of creating email groups, we have added the new MAILGROUP SPRIDEFN statement. Multiple MAILGROUP statements may be used with each assigned a different name. A group may contain from one to one hundred email addresses and each email address may be up to 128 characters in length.

The MAILTO= operand can be used on the LST, PUN and/or RPT statements.

For example:

Where "LIST1" is defined using the MAILGROUP statement.


LPD (Line Printer Daemon) Support

This is the protocol used to communicate with Berkeley versions of UNIX print spoolers. The protocol is widely implemented or accepted on a wide range of other systems including Windows, AT&T flavors of UNIX, network print controllers (i.e. Intel Netport), etc.

This is supported with the use of the new SPRIDEFN LPD statement.

For example:

LPD CPU=x,         CPU affected by this definition
  INDEX=index,     INDEX list to be searched for elements
  ROUTE=LPD,       Route code for LPD selection
  LPDLPORT=0,      Local port to listen for inbound LPD connections
  LPDFPORT=515,    Foreign port for outbound LPD connections.
  OPTIONS=LMSG,    LPD options
  MAXCONS=5        Maximum number of active LPD connections
This is prefixed with the NODENAME value specified in the TCPIP definition. In this example, elements with route code MAIL21K.LPD.* will be considered for transmission.
LMSG causes a message to be displayed when LPD accesses an element.
Inbound LPD connections are NOT supported. This value is forced to 0.
The following is a definition for a remote LPD printer. Work is selected by adding a route of "node.LPD.remotename" to the element to be selected. In the example show below and if your node name was "ALAMEDA1", this would be "ALAMEDA1.LPD.HP500A".
PRINTER CPU=n,                    Printer for this CPU 
  REMOTENAME=HP500A,              Local name for the remote printer
  REMOTEQUEUE=HP500A,             Remote queue name for printer
  REMOTEHOST=SPILINUX.ALAMEDA,    Host name for remote printer
  FILTER=PCL5                     Output Exit

New Exit Routines

  • An exit filter is being provided to allow user modification of data streams to RTF, PDF, etc. Only one exit per printer is allowed and it is defined using the SPRIDEFN PRINTER statement.

    The exit is user written and supported. For example:


    The user created exit routine being called is "PCL5".

    If a user exit routine is specified and it does not exist, the data will be passed without any modification.

  • A security exit is now provided so that requests for Location changes can be verified/denied according to your installation standards.

    The exit is user written and supported.

    The exit routine is specified on the MSTRDEFN statement for SPRIDEFN using the new SECEXIT= operand.. For example:

    MSTRDEFN op1=a,

    The user created exit routine that will be called is "LOCHANGE".


The new ROUTE= operand allows you to display the form count for a specific route code. The format of the new command is:


New SPRIDEFN Statements

The following new SPRIDEFN statements have been added to support he additional services provided by SPRI.

TCPIP Statement

the TCPIP statement is used to define the TCP/IP host and node name information for the particular CPU that is using SPRI. For example:
TCPIP  CPU=x,                CPU affected by this definition,  TCP/IP hostname for this CPU
  ORGNAME='name',            Company's name
  NODENAME=nodename          Node name for TCP/IP selection

EMAIL Statement

The SPRIDEFN EMAIL statement defines the specific site information needed to allow SPRI to process email requests. For example:
EMAIL  CPU=x,                     CPU affected by this definition
  INDEX=index,                    INDEX list searched for elements
  MAXCONS=n,                      Maximum active email connections
  ROUTE=route,                    Route code for email selection
  REPLYTO='name@loc',             Sent messages reply address
  SMTPFPORT=nn,                   Foreign port address for SMTP 
  SMTPLPORT=n,                    Local port to LISTEN for inbound SMTP
  SMRTRELY=nnn.nnn.nnn.nnn        Address or name of 
                                  SMART relay email host.
  1. All mail is forwarded to the smart mailer specified in SMRTRELY.

    • BADRCPTFAILS causes the SMTP transmission to fail if any of the recipients are rejected.
    • LMSG causes a message to display when an element is accessed.

  3. ROUTE is prefixed with the NODE value specified in the TCPIP definition.

  4. SMTPLPORT - Inbound SMTP connections are NOT supported so this value is forced to 0.

DEFINE Statement

The new DEFINE SPRIDEFN statement is used to define specific parameters for the MAILTO= operand for the LST/PUN/RPT statements.

The format of the DEFINE SPRIDEFN statement is:

DEFINE ID=nnnn,     SPRI OPTU definition for MAILTO (User selected)
  LENGTH=64,        Can be increased up to 128.
  REPEAT=5          Maximum number of recipients, can be increased.
The combination of LENGTH= and REPEAT= can not exceed a maximum as specified by NJE (currently 16K).

Starting and Stopping TCIP on SPRI

The new SPRI TCPIP command is used to start/stop the TCP/IP services when SPRI is active. The format of the commands is:
You may specify "ALL" to start/stop both the EMAIL and LPD services.

The EMAIL and LPD services are defined with the use of the EMAIL and LPD definitions in SPRIDEFN.

UNIF/USER Operand Support

SPRI supports the use of the UNIF= operand for POWER compatibility on any JECL statements that allow the use of this operand. This allows the user to specify certain information for the USER= field. Please refer to the appropriate VSE/POWER documentation for a complete description and use of this operand.