This part of the Natural openUTM Interface documentation covers the following topics:
When used in this document, the notation vrs or vr represents the relevant product version (see also Version in the Glossary).
Several user exits are provided in the Natural openUTM Interface. These are described below.
To use any of these exits, the corresponding user program must be linked
with the Natural
environment-dependent
nucleus (see the Installation documentation).
The user exit RP2PRNT
is an exception.
User exit routines are called with the customary register conventions.
ACCEXIT
|
ACCINIT
|
INPTEX
|
RP2PRNT
|
RMSPOOL
|
SHUTALL
|
SHUTLST
|
STRTALL
|
STRTFST
|
TRMIOEX
|
UINPEX
|
UOUTEX
|
UVGEXIT
|
WHCEXT
The user exit ACCEXIT
can be used to retrieve accounting
information. Depending on the value of the parameter ACCNT
in macro
NURENT
, this user exit is activated either at the end of each
dialog step or at each change of application (new Natural logon ID); see also
Accounting for
Natural openUTM Applications.
The user exit ACCINIT
can be used to gather accounting
information. It is activated at the beginning of each dialog step; see also
Accounting for
Natural openUTM Applications.
The user exit INPTEX
is activated whenever an input
message is read. See also the description of the program
INPTEX
in
the section Utility Programs
for Use with Natural under openUTM.
The user exit RP2PRNT
is intended as an interface to other
manufacturers' spooling systems. The user exit routine (spooling program) must
be reentrant and linked with the reentrant part of the Natural openUTM
application. See also Other Spooling
Systems and the description of the parameter
SPOOL
in
the section Parameters of Macro
NATUTM.
If you wish to write your own spooling interface program, call it
RMSPOOL
. The program RMSPOOL
can be linked to the
non-reentrant part or to the reentrant part of the Natural openUTM
application. If it is to be linked to the reentrant part, the program itself
must be written so as to be reentrant.
Important:
If program RMSPOOL
is to be used, the
SPOOL
parameter in the macros
NATUTM
and
NURENT
must be set to
SPOOL=RMSPOOL
.
The Natural openUTM Interface passes the following parameters
to program RMSPOOL
:
Address (Format/Length) | Contents | |
---|---|---|
1st Address (A2) | Function code. Possible function codes are: | |
OP |
The print file has to be opened, and the first print record is passed. | |
PR |
Any subsequent print record is passed. | |
CL |
The print file has to be closed. | |
2nd Address | Print record (data to be
printed).
The first byte of the print record contains the line/form feed
character. (If function code |
|
3rd Address (B2) | Length of print record (including
feed character).
(If function code |
|
4th Address (A8) | Printer name. | |
5th Address | Print buffer.
This buffer can be used as work area by |
|
6th Address (B2) | Length of print buffer. | |
7th Address (A8) | Current user ID (as in the system
variable *USER ).
|
|
8th Address (A8) | Current terminal ID (as in the
system variable *INIT-ID ).
|
|
9th Address (A8) | Current Natural library name (as
in the system variable *LIBRARY-ID ).
|
|
10th Address (A8) | Current Natural program name (as
in the system variable *PROGRAM ).
|
|
11th Address (A4/B4) | Return code.
When |
The user exit specified with the SHUTALL
parameter in macro
NATUTM
is activated whenever a openUTM task is terminated
(KDCSHUTn
). By default,
this user exit is SHUTEX1
.
If the user exit specified with SHUTALL
is
to be used, the parameter USAGE=SHUT
in KDCDEF
for
the Natural openUTM Interface must have been set when generating
KDCROOT
.
The user exit specified with the SHUTLST
parameter in macro
NATUTM
is activated when the last openUTM task
is terminated (KDCSHUTn
).
By default, this user exit is SHUTEX2
.
If the user exit specified with SHUTLST
is
to be used, the parameter USAGE=SHUT
in KDCDEF
for
the Natural openUTM Interface must have been set when generating
KDCROOT
.
The user exit specified with the STRTALL
parameter in macro
NATUTM
is activated whenever an openUTM task is started.
By default, this user exit is STARTEX
.
The user exit specified with the STRTFST
parameter in macro
NATUTM
is activated when the first openUTM task
is started. By default, this user exit is STAPPLX
.
The user exit TRMIOEX is activated with each formatted input or output message.
The user exit specified with the UINPEX
parameter in macro
NURENT
is activated after a terminal message has been
sent. By default, this user exit is INPSCR
.
Natural under openUTM passes the following parameters to the user exit:
Address (Format/Length) | Contents |
---|---|
1st Address | Address input buffer. |
2nd Address (B2) | Address message length. |
The user exit specified with the UOUTEX
parameter in macro
NURENT
is activated before a terminal message is to be
sent. By default, this user exit is OUTSCR
.
Natural under openUTM passes the following parameters to the user exit:
Address (Format/Length) | Contents |
---|---|
1st Address | Address output buffer. |
2nd Address (B2) | Address message length. |
The user exit UVGEXIT
is activated at the start, restart
and end (normal or abnormal) of an openUTM DC transaction. The current
task ID (Vorgangskennzeichen, KCKNZVG
) is passed to the
user exit routine.
The user exit WHCEXT
can be used to modify an output which
is to be printed before it is passed by FPUT
to openUTM.
When WHCEXT
is called, Register 9 contains the address of the
output to be printed and Register 13 the address of the save area.
WHCEXT
must be reentrant and it must be linked to the
reentrant part of the Natural openUTM application. For further
information, please refer to the source listing of the assembled macro
NURENT
(Label 'NUWHC'
).
To start an asynchronous transaction, the service routine
NATASYN
in the Natural openUTM Interface has to be
called.
The start of an asynchronous transaction in a Natural program is done by passing dynamic parameters according to the following pattern:
... COMPRESS dynamic parameters INTO field CALL 'NATASYN'[parameter area SET CONTROL 'H' WRITE NOTITLE NOHDR field [WRITE ...] INPUT 'text' ifield (A1) END
If the length of the dynamic parameters exceeds 250 bytes (that is, if
more than one WRITE
statement is required), a parameter
area has to be passed with the CALL 'NATASYN'
statement.
The parameter area is also required if the asynchronous transaction is
to be started with openUTM DPUT
; that is, at a specific
time. The aggregate length of the dynamic parameters must not exceed 3750
bytes. The parameter area for the CALL 'NATASYN'
has the
following structure:
Bytes | Contents | |
---|---|---|
01-02 | Number of WRITE
statements.
|
|
03 | DPUT time indicator:
|
|
R |
a relative time, | |
A |
an absolute time | |
blank | FPUT |
|
04-06 | Day of the year. | |
07-08 | Hours. | |
09-10 | Minutes. | |
11-12 | Seconds. |
For the contents of Bytes 03 - 12, the same rules apply as described for
DPUT
calls in the respective openUTM documentation.
Natural programming examples can be found in the Natural library
SYSEXTP
(programs STARTAS1
, ASYNMULT
,
STARTAS
, READAUTO
, AWINDOW1
,
AWINDOW2
).
For asynchronous transaction processing, KDCROOT
,
KDCDEF
and the openUTM startup job must be modified as
necessary (see the openUTM documentation).
All openUTM TACs for asynchronous transactions must begin with
the character sequence which is defined as a unique identifier for asynchronous
TACs in parameter ASYNTAC
of macro
NATUTM
. Conversely, the first five characters of openUTM
TACs for synchronous transactions must not be this character
string.
Mixed transaction processing (that is, both within a single openUTM application and between two openUTM applications) is not possible.
If transactions are to be processed asynchronously within a Natural
openUTM application, the operands of the parameters
SYAPPLI
and
ASAPPLI
of macro
NATUTM
must be set to NO
(this is the default
value).
This is an example of a Natural program that initializes an asynchronous transaction within a Natural openUTM application.
* STARTAS - EXAMPLE OF THE INITIALIZATION FOR ASYNCHRONOUS * TRANSACTION WORKING WITHIN ONE UTM APPLICATION * PARMS ARE SEPARATED BY ',' * SUBLIST IN STACK IS SEPARATED BY ';' FORMAT LS=145 RESET PARM1(A144) PRDEST(A8) LTDEST(A8) MOVE 'PRINTER1' TO PRDEST /* --> Note 1 MOVE *INIT-ID TO LTDEST /* --> Note 2 COMPRESS 'SENDER=' PRDEST ',OUTDEST=' LTDEST ',' 'MENU=F,STACK=(LOGON APPL1;READAUTO)' INTO PARM1 LEAVING NO /* --> Note 3 CALL 'NATASYN' /* --> Note 4 SET CONTROL 'H' /* --> Note 5 WRITE NOTITLE NOHDR PARM1 /* --> Note 6 INPUT 'ASYNTASK INVOKED - HOPEFULLY' IFELD(A1) /* --> Note 7 END
Note | |
---|---|
1 | The name (dummy) of a printer is moved into field
PRDEST .
|
2 | The logical name of the openUTM terminal is moved into
field LTDEST .
|
3 | The message that is to be sent and processed by Natural is
assembled, with the following information:
|
4 | When the subroutine NATASYN (in macro
NATUTM ) is called, a marker is set to indicate that an
asynchronous transaction is to be initialized. The subroutine
NATASYN conforms to the conventions for calling non-Natural
programs.
|
5 | The Natural offline report is activated. |
6 | The message (PARM1 ) is output by FPUT
as an asynchronous transaction.
|
7 | The Natural offline report is "switched off" by
means of an INPUT statement that must have at least one input
field.
|
An example of the program that is to be executed asynchronously:
* READAUTO - EXAMPLE FOR ASYNCHRONOUS TRANSACTION WORKING READ (75) AUTOMOBILES BY MAKE WRITE MAKE MODEL HORSEPOWER YEAR LOOP ON ERROR DO /* --> Note 1 ERRNO(A4) = *ERROR WRITE '********************************************************' /'ERROR NO.: ' ERRNO ' IN ASYNCHRONOUS PROGRAM ' *PROGRAM /'********************************************************' TERMINATE DOEND TERMINATE /* --> Note 2 END
Note | |
---|---|
1 | An ON ERROR routine must be defined in each
program that is to be executed asynchronously. The routine must end with a
TERMINATE statement.
|
2 | Each program that is to be executed asynchronously must end
with a TERMINATE statement.
|
When processing transactions asynchronously between two Natural
openUTM applications, the logical openUTM terminal name
(LTERM
name) of the synchronous application must be defined with
the parameter SYAPPLI
of macro
NATUTM
, and the logical openUTM terminal name
(LTERM
name) of the asynchronous application must be defined with
the parameter ASAPPLI
of macro
NATUTM.
Warning:KDCROOT and KDCDEF must be generated as
appropriate for both applications. |
NUSTART NATUTM SYAPPLI=LNATUTM,ASAPPLI=LNATASY,... ASYNDRV NATUTM SYAPPLI=LNATUTM,ASAPPLI=LNATASY,...
OPTION GEN=ALL,ROOTSRC=INPUT.KDCROOT.KDCNATS ROOT.KDCNATS MAX KB=400,SPAB=8192,NB=5120,TRMSGLTH=520 MAX APPLINAME=NATUTM,APPLIMODE=S,KDCFILE=(NATUTM,S) MAX TASKS=10,ASYNTASKS=5 . . EXIT PROGRAM=NUSTART,USAGE=START EXIT PROGRAM=NUSTART,USAGE=SHUT EXIT PROGRAM=FREXIT,USAGE=FORMAT . . DEFAULT PROGRAM COMP=ASSEMB PROGRAM NUSTART PROGRAM FREXIT PROGRAM NUERROR . . DEFAULT TAC TYPE=D,PROGRAM=NUSTART,EXIT=NUERROR,CALL=BOTH,... TAC NAT,ADMIN=NO,TIME=0 TAC NAT1,ADMIN=NO,TIME=0 . . DEFAULT TAC TYPE=A,PROGRAM=NUSTART,EXIT=NUERROR,CALL=FIRST,... TAC NATSY TAC NATAS . . PTERM NATASY,PRONAM=HOST,PTYPE=APPLI,TERMN=A1,LTERM=LNATASI DEFAULT PTERM PRONAM=PCDF,PTYPE=T9750,TERMN=FE,CONNECT=N,STATUS=ON PTERM DFDSS001,LTERM=DF97501 PTERM DFDSS002,LTERM=DF97502 . . LTERM LNATASY DEFAULT LTERM USAGE=D,STATUS=ON,ANNOAMSG=Y,RESTART=YES LTERM DF97501 LTERM DF97502 . . SFUNC F1,RET=21Z . . END
OPTION GEN=ALL,ROOTSRC=INPUT.KDCROOT.KDCNATA ROOT.KDCNATA MAX KB=400,SPAB=8192,NB=5120,TRMSGLTH=520 MAX APPLINAME=NATASY,APPLIMODE=S,KDCFILE=(NATASY,S) MAX TASKS=10,ASYNTASKS=5 . . EXIT PROGRAM=ASYNDRV,USAGE=START EXIT PROGRAM=ASYNDRV,USAGE=SHUT EXIT PROGRAM=FREXIT,USAGE=FORMAT . . DEFAULT PROGRAM COMP=ASSEMB PROGRAM ASYNDRV PROGRAM FREXIT PROGRAM NUERROR . . DEFAULT TAC TYPE=D,PROGRAM=ASYNDRV,EXIT=NUERROR,CALL=BOTH,... TAC NAT,ADMIN=NO,TIME=0 TAC NAT1,ADMIN=NO,TIME=0 . . DEFAULT TAC TYPE=A,PROGRAM=ASYNDRV,EXIT=NUERROR,CALL=FIRST,... TAC NATSY TAC NATAS . . PTERM NATUTM,PRONAM=HOST,PTYPE=APPLI,TERMN=A1,LTERM=LNATUTM DEFAULT PTERM PRONAM=PCDF,PTYPE=T9750,TRMN=FE,CONNECT=N,STATUS=ON PTERM DFDSS001,LTERM=97501 PTERM DFDSS002,LTERM=97502 . . LTERM LNATUM DEFAULT LTERM USAGE=D,STATUS=ON,ANNOAMSG=Y,RESTART=YES LTERM DF97501 LTERM DF97502 . . SFUNC F1,RET=21Z . . END
Please see also the openUTM documentation. If the asynchronous application is primarily intended for processing asynchronous transactions, storage can be saved by generating this application with a small (local) Natural swap pool of about 64 KB.
Important:
The TAC that was defined with the parameter
SYNTAC
(the
default value is NATSY
) must always be defined for
KDCDEF
with TYPE=A
; this is an exception to the rules
for naming openUTM TACs. If, in addition, the synchronous application
uses the openUTM TACCLASS concept, an asynchronous TAC class must also
be allocated to this TAC
* ASYNAPPL - EXAMPLE OF INITIALIZATION FOR ASYNCHRONOUS * TRANSACTION WORKING BETWEEN TWO UTM APPLICATIONS FORMAT LS=145 RESET PARM1(A144) PRDEST(A8) LTDEST(A8) ASYNTAC(A8) MOVE 'PRINTER1' TO PRDEST /* --> Note 1 MOVE *INIT-ID TO LTDEST /* --> Note 2 MOVE 'NATSY' TO ASYNTAC /* --> Note 3 COMPRESS 'NATAS' ' SENDER=' PRDEST ',OUTDEST=' LTDEST ',ASYNNAME=' ASYNTAC ',' 'MENU=F,STACK=(LOGON APPL1;READAUTO)' INTO PARM1 LEAVING NO /* --> Note 4 CALL 'NATASYN' /* --> Note 5 SET CONTROL 'H' /* --> Note 6 WRITE NOTITLE NOHDR PARM1 /* --> Note 7 INPUT 'ASYNTASK INVOKED - HOPEFULLY' IFELD(A1) /* --> Note 8 END
Notes | |
---|---|
1 | The name of a printer (simulation) is moved into the field
PRDEST .
|
2 | The logical name of the openUTM terminal
(KCLOGTER ) is moved into the field LTDEST .
|
3 | The standard TAC for sending "free-running"
messages from the asynchronous application to the synchronous application is
put in the field ASYNTAC . See also the description of the
parameter SYNTAC
of macro NATUTM .
|
4 | The message that is to be sent and processed by Natural is
assembled, with the following information:
|
5 | When subroutine NATASYN (in macro
NATUTM ) is called, a marker for the initialization of an
asynchronous transaction is set. The subroutine conforms to the conventions for
calling non-Natural programs.
|
6 | The Natural offline report is activated. |
7 | The message (PARM1 ) is output with
FPUT as an asynchronous transaction.
|
8 | The Natural offline report is "switched off" by
means of an INPUT statement with at least one input field.
|
The program to be executed asynchronously (READAUTO
) must
conform to the conventions that apply to asynchronous transaction processing
within one Natural openUTM application.
The following topics are covered:
A Natural program that wishes to use local printers without spooling
(that is, with FPUT
via openUTM), should proceed as shown
in the following example.
* TESTPRNT - TEST FOR THE Natural OFFLINE REPORT RESET PARAM(A9) REDEFINE PARAM (PARAM1(A1) PARAM2(A8)) MOVE 'H' TO PARAM1 /* --> Note 1 MOVE 'PRINTER1' TO PARAM2 /* --> Note 2 SET CONTROL PARAM /* --> Note 3 READ (50) AUTOMOBILES BY MAKE WRITE NOTITLE NOHDR MAKE MODEL HORSEPOWER YEAR /* --> Note 4 LOOP EJECT INPUT 'PRINT ORDER WAS EXECUTED' IFELD(A1) /* --> Note 5 END
Notes | |
---|---|
1 | The Natural offline report is activated by putting an
H in the first position of the field PARAM .
|
2 | The logical openUTM printer name is defined starting
at the second position of the field PARAM .
|
3 | The SET CONTROL statement, together with the
content of the field PARAM , activates the Natural offline report
and specifies the name of the printer. To ensure compatibility for existing
programs written using Natural Version 1, the programs CMLIST and
NATPRNT continue to be available; see
Utility
Programs for Use with Natural under openUTM.
|
4 | The print records are passed to openUTM from the
Natural openUTM Interface using FPUT .
|
5 | The INPUT statement (which must have at least one
input field) deactivates the Natural offline report.
|
All the necessary steps for using local printers must have been taken when generating openUTM; for further details, please refer to the openUTM documentation. The appropriate openUTM administration commands can be used to verify that a connection to the defined printers exists.
The parameter SPOOL
of macro
NATUTM
is provided for using NATSPOOL
under
openUTM. Further details are given in the section
Parameters of Macro
NATUTM. Please refer also to the BS2000-specific
installation information in the Natural Advanced
Facilities documentation.
If in an asynchronous openUTM transaction printing is to be
done with NATSPOOL
, the TERMINATE
statement must be
preceded by an END OF TRANSACTION
statement.
The User Exit RP2PRNT
is provided for interfacing to other
spooling systems. This user exit is activated if REPRO-2000
is
specified with the parameter SPOOL
in macro
NURENT
. (This value should be used for all spooling systems.)
Since it must be linked with the reentrant part of the Natural
openUTM application, the user exit routine RP2PRNT
must
be reentrant.
The logic of the transfer of print records from Natural, buffer
processing, etc., can be seen in macro NURENT
(labels
CMWTERM
and CMWHC
) and the appropriate routines in
macro NATUTM
.
As an alternative, it is possible to use the User Exit
RMSPOOL
; see section
User Exits
above.
Software AG does not provide support for this interface to other spooling systems except as described in the preceding paragraphs.
Non-Natural programs are called using the standard register conventions
for inter-program communication. If the program to be called is reentrant (uses
shared code), it can be defined with the profile parameter
CSTATIC
in the Natural parameter module (macro
NTPRM
)
and linked to the reentrant part of the openUTM application.
Otherwise, one of the following procedures can be used:
The programs can be dynamically loaded at runtime. To do this, the
programs must be in the library defined with the profile parameter
LIBNAM
in
the Natural parameter module or in the BLSLIB
libraries specified
in the openUTM start job;
The programs can be linked to the Natural
environment-dependent
nucleus (see the Installation documentation).
To do this, the names of the programs must be defined in the operand of the
parameter LINK
,
LINK2
,
LINK3
or LINK4
of
macro NATUTM
. This procedure is always necessary for programs that
contain an EXTRN
reference to an ENTRY
that is
already present in the Natural
environment-dependent
nucleus. The Natural openUTM Interface executes a
TABLE
macro call for the programs that have been defined in this
way. This makes an entry in the dynamic loader's LINK
table,
indicating that it is not necessary to dynamically load the programs when they
are called by the Natural program.
In both cases, the maximum number of called non-Natural programs must be
defined with the parameter CDYNAM
of macro
NATUTM
; see Parameters of
Macro NATUTM.
Note:
If parameter KB
in macro NATUTM
is set to YES
, Natural always passes the address of the
openUTM communication area KB (Kommunikationsbereich) as the
first parameter address. This does not apply to programs which are defined with
profile parameter CSTATIC
.
Several methods are provided for ending a Natural session
(FIN
or TERMINATE
) with a PEND PR(OGRAM)
instead of a PEND FI(NISH)
, so that another openUTM
partial program is called:
The openUTM TAC for the openUTM partial program that
is to be called can be passed using the Natural dynamic parameter
PROGRAM
at the start of the Natural session, for example:
STACK=(LOGON APPL1;MENU),PROGRAM=NAT10
The openUTM TAC for the openUTM partial program that
is to be called can be defined in the operand of the parameter
PENDPR
of macro
NATUTM
, for example:
NATUTM PENDPR='NAT10'
The utility program TACSWTCH
can be
used.
In all cases, the Natural openUTM Interface would execute a
PEND PR(OGRAM)
with the openUTM TAC NAT10
at
the end of the Natural session, which means that the openUTM partial
program associated with this TAC would be started.
Another way to execute a PEND PR(OGRAM)
is by activating
the function key defined for this purpose, which suspends, but not terminates,
the Natural session. On return from the openUTM partial program with
PEND PR(OGRAM)
, the Natural session can be continued from the
point at which it has been suspended; see also the parameter
PRKEY
. If the
function key for PEND PR(OGRAM)
is activated without a
openUTM TAC for another openUTM partial program being
defined, an appropriate error message is displayed.
Note:
The programs NUEXAMPL
, UTMNAV
and
UTMCOB
show
examples of the logic necessary in an openUTM partial program that
wishes to communicate with the Natural openUTM Interface (and
therefore with Natural itself) - see the descriptions of programs
UTMCOB
and UTMNAV
in the section
Software
Exchange.
If a Natural program calls a non-Natural program that also includes
Adabas calls, the appropriate field in the Adabas control block must be
supplied with the current Adabas user ID. In this case, generate the
CSECT ADACALL
in the Natural openUTM Interface.
ADACALL
contains an entry which is defined with the
parameter ADACALL
in macro
NATUTM
(the default value of this parameter is
ADABAS
).
This entry is activated for every CALL [ADABAS] USING ...
.
The current Adabas user ID is passed to the field ADDITIONS2
of
the Adabas command block, and subsequent processing of the Adabas call is
passed to the Adabas interface module ADALNN
; see also the
parameter ADACALL
.
The Natural session (and thereby also the openUTM task) can be
abnormally terminated by entering the CANCEL
parameter's
value of the Natural parameter module (default is *CANCEL
in
upper-case letters).