Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Standard procedures

&pagelevel(5)&pagelevel

Overview

The standard procedures incorporated in PRODAMP can only be called from within procedures. The syntax of the procedure calls corresponds to the Pascal syntax.

PRODAMP makes use of the following standard procedures:

Procedure name

Function

COMMAND

DMP_#REFRESH

DUMP_MEMORY

ENTER_MODULE

EXTRACT

INSERT

LIST

LIST_CONTROL_BLOCK

MESSAGE

NEW_TASK

NEXT_WINDOW

READ

READ_WINDOW

REFERENCE

SET_HEADER

UNSIGNED_ON

UNSIGNED_OFF

WRITE

Issue DAMP statements from within a procedure

Refresh the data area

Output a memory area to SYSLST

Provide an interface between PRODAMP procedures and Assembler modules

Manipulate strings

Manipulate strings

Output a string to SYSLST

Output a control block to SYSLST

Output a message

Set a new 'current' task

Switch to a PRODAMP procedure in the next visible window of the DAMP
screen

Read from an EDT area

Interrupt the PRODAMP procedure and allow entries or markings to be made
in a diagnostic window

Define a symbol as an element of a substructure

Create a header for a listing

Turn on unsigned arithmetic

Turn off unsigned arithmetic

Write to an EDT area

Table 13: Overview of PRODAMP standard procedures

The specified names should not be used for separate procedures, as this may lead to the program being interpreted incorrectly. 

COMMAND Issue
DAMP statements

The standard procedure COMMAND enables the user to issue DAMP statements from within a PRODAMP procedure, e.g. in order to assign a private symbol file.

Procedure call

Operation

Operands

COMMAND

(text)

Operands

text

This specifies the text of the DAMP statement. “text” must be a string expression and must contain the statement in the form in which it was entered in the DAMP batch task or procedure.

“text” cannot be any of the following:

  • REPEAT-SESSION

  • RESUME-PRODAMP-PROGRAM

  • SHOW-LAST-STATEMENT

  • START-OPTION-DIALOG

  • START-PATTERN-SEARCH

  • START-PRODAMP-EDITOR

  • START-PRODAMP-PROGRAM

  • START-STATEMENT-SEQUENCE

DMP_#REFRESH
Refresh data areas

The standard procedure DMP_#REFRESH enables you to refresh data areas within a PRODAMP procedure. This may be required every now and then when diagnosing the active system.

Procedure call

Operation

Operands

DMP_#REFRESH


DUMP_MEMORY
Output memory area

The standard procedure DUMP_MEMORY can be used to output a memory area to SYSLST in one of the standard dump formats. All parameters must be numeric expressions.

Procedure call

Operation

Operands

DUMP_MEMORY

(address,relad,length)

Operands

address

Specifies the start address of the area. Depending on the value of CURRENT.ATYPE, the virtual (default value), real, absolute or HSA memory or areas from data spaces are output.

In the case of large real and absolute addresses, only a value within a 4 GB segment can be specified in “address”. The associated segment must be specified in CURRENT.SEGMENT (see "Pseudo-structures").
CURRENT.SEGMENT is maintained on a local procedure basis and is preset to “0”.

relad

Represents the displacement value from the start address. If “relad” is set to 0, the addresses are output relative to the start of the area. (DAMP uses this format, for example, for output of the TCB.)
If a negative value is specified for “relad”, no relative addresses are output (used by DAMP, for example, for output of full pages).

length

Specifies the length of the area to be output.

Example

A := .ETCBTFT; DUMP_MEMORY (A, 0, LENGTH ('IDMTFT','DS'))

The first TFT is output to SYSLST with the length of DSECT “IDMTFT” (see also the description of the standard function LENGTH, "Standard functions"). 

ENTER_MODULE
Call modules

The standard procedure ENTER_MODULE provides an interface between PRODAMP procedures and Assembler modules. It is also possible to branch to modules created with other languages provided that they conform to the conventions described below.

Procedure call

Operation

Operands

ENTER_MODULE

(module, par1, par2, ...)

Operands

module

Indicates the module to be called. The system expects module to be contained as an R type element in the PRODAMP library which has been defined as the object library. module must be a string type expression containing the name of the module in uppercase characters. Only the first 8 characters are evaluated. If module contains less than 8 characters, it is padded with blanks until it is 8 characters in length.

par1, par2, ...
DISTANCEDISTA

This is the list of parameters to be made available to the called module. Each parameter must be an identifier for a PRODAMP variable or (in more general terms) a PRODAMP expression. These expressions or variables can be of any type. The list (par1, par2, ...) can be empty.

The registers are set as follows when the system branches to module:

R1
R13
R14
R15

points to a parameter area supplied with values by PRODAMP.
points to an 18-word (72-byte) area created by PRODAMP where the registers can be saved.
contains the return address.
contains the branch address.

When control is returned from the module, PRODAMP expects registers R1 to R12 to contain the same values they contained when control was passed to the module.

The parameter area has the following format:

Byte

Byte

Byte

Byte

0-1

2-3

4-11

12-n
spac

Total length of the parameter area.

Contains the value 0.

Name of the module called.

Transfer area containing the values of the parameters par1, par2,... in unbroken sequence.

  • Numeric parameters and pattern type parameters are always 4 bytes in length.

  • The length of a string type parameter depends on how it was defined in the PRODAMP procedure (1-133 bytes).

The entire parameter area must not exceed the length of a 4K page (4096 bytes). This means that the total length of the transfer area must not be greater than 4084 bytes.

When control is returned from the module, each variable which was passed as a parameter is updated using the value from the transfer area. This means that ENTER_MODULE also provides write access to PRODAMP variables.

ENTER_MODULE can also be used to start a module that was loaded in some other way. Thus, you can use the PRODAMP procedure COMMAND to issue the DAMP statement LOAD-MODULE in which a load library can be specified.

An entered module is unloaded on returning to the PRODAMP procedure only if it was not loaded with LOAD-MODULE. The loading of modules with the DAMP statement LOAD-MODULE (which is also possible from within PRODAMP via the COMMAND statement) can thus reduce the runtime of PRODAMP procedures considerably if these modules are called frequently. Furthermore, a load library can be specified in the LOAD-MODULE statement.

Examples

Example of a PRODAMP procedure that enters the ASSEMBLER module “TEST”, which changes the string “CARSICK” to “SEASICK”:

PRODAMP procedure

STR := 'CARSICK';
ENTER_MODULE ( 'TEST', STR );
MESSAGE ( STR );

Assembler module TEST

TEST     CSECT
TEST     AMODE ANY
         USING *,15
         STM   14,12,12(13)
         MVC   12(3,1),='SEA'
         LM    14,12,12(13)
         BR    14
         END

The example also shows how to save and restore registers. (In this case, this is in fact unnecessary, since TEST does not change the registers.)

Example of a PRODAMP procedure to reduce the runtime

COMMAND ('LOAD-MODULE *P-U-O-L(TEST)');
"The error case leads to the runtime error (Abort)"
 MESSAGE ('The module TEST was loaded');
"No unloading now occurs for ENTER_MODULE"
N := 0;
STR := ' '*4;
WHILE (N<100) DO
    ENTER_MODULE ('TEST',STR); N := N+1;
END WHILE;

EXTRACT
Manipulate strings

The standard procedure EXTRACT transfers as many characters from a source string, starting at a specified position, to a target string as will fit into this target string. If the length of the target string is greater than the number of characters to be transferred, the remaining characters in the target string are unaffected.

Procedure call

Operation

Operands

EXTRACT

(target,source,position)

Operands

target

Must be an identifier for an initialized variable of the type string. This variable contains the target string.

source

position

Specifies the source string (as a string type expression).

Specifies the position of the first character to be transferred within the source string. The first character of the source string is located at position 0.

Examples

A := 'XXXX' ;
EXTRACT ( A, 'Output for TSN 1234 under TSOS',15 );

Once the statement has been executed, A contains the text “1234”.

A := 'without problems';
EXTRACT ( A, 'This will probably not work.',19 );

Following execution of the EXTRACT procedure, A contains the string “not work.roblems”. Both examples assume that A has already been initialized by the statement shown. 

INSERT
Manipulate strings

INSERT replaces the characters of a target string, starting at a specified position, with the characters of a source string. Characters are replaced until the last character from the source string has been transferred or the last character in the target string has been replaced.

Procedure call

Operation

Operands

INSERT

(source,target,position)

Operands

source

target

Specifies the source string (expression of the type string).

Must be an identifier for an initialized variable of the type string. This variable contains the target string.

position

Specifies the position of the character as of which the target string is to be overwritten.
“position” is specified relative to the start of the target string, i.e. the first character in the target string has the position 0.

Examples

A := 'Output for TSN XXXX under user ID $$$$$$$$.';
INSERT ('1234',A,15); INSERT ('TSOS ',A,34);

Once the statements have been executed, A contains the following text:
“Output for TSN 1234 under user ID TSOS.”

A := 'This will probably not work.'
INSERT ( 'function.',A,22 );

Once the statements have been executed, variable A contains the text:
“This will probably not funct”

Both examples assume that A has already been initialized by the statement shown. 

LIST
Output strings to SYSLST

The standard procedure LIST serves to output a string to SYSLST.

Procedure call

Operation

Operands

LIST

(string[,skiplines])

Operands

string

skiplines

Specifies the string to be output.

Defines how many empty lines are to be inserted before the string.
0 <= skiplines <= 15. If no value is specified, then skiplines = 0.

LIST_CONTROL_BLOCK
Output a control block to SYSLST

The standard procedure LIST_CONTROL_BLOCK can be used to output the contents of a given control block of the currently opened diagnosis object to SYSLST in symbolic layout (see example in section "Symbolic layout"). All substructures and arrays will be in the “revealed” state. All parameters except cbname must be numeric expressions.

Procedure call

Operation

Operands

LIST_CONTROL_BLOCK

(cbname,address,relad,length)

Operands

cbname

Specifies the name of the control block to be displayed (expression of the type string). The symbols file containing the desired control block must be loaded with command ADD-SYMBOLS (see ADD-SYMBOLS command) before the command can be used, if it is not a standard one.

address

Specifies the start address of the area for the control block.
Depending on the addressing type the virtual (default value), real, absolute or HSA memory or areas from data spaces are output. In the case of large real and absolute addresses, only a value within a 4 GB segment can be specified in "address".
The associated segment must be specified in CURRENT.SEGMENT.
CURRENT.SEGMENT is maintained on a local procedure basis and is preset to "0".
Note: CURRENT is local reference in DAMP which is used to access operating data of DAMP program.
Acceptable input for "address" is within the range of X'00000000' to X'FFFFFFFF'.
Maximum length of the field is 4 Bytes.
If the wrong address and/or displacement are given the control block will still be listed with incorrect values.

relad

Represents the displacement value from the start address. If “relad” is set to 0, the addresses are output from the start of the area. If a negative value is specified for “relad”, it will be automatically changed to 0.
Acceptable input is same as mentioned for "address".

length

Specifies the length of the control block to be output.

Example

LIST_CONTROL_BLOCK ('FAFG', X'BAD01400', 0, LENGTH ( 'FAFG', 'DS' )); 

Once the statements have been executed, SYSLST will contain the following information:

DSECT : FAFG          + REL : 00000       = ADDR : BAD01400   LEN : 00170
000 TIME_STAMP        : 00000000 = 0      ! 004 CCAD              : BAD00000
008 FTAD              : BAD01570          ! 00C SPAD              : 00000000 = 0
010 FAMEMPTR          : F70DDE40          ! 014 SRB               : 81FB0270
018 COMB              : D14B0234          ! 01C ABTB              : 00000000 = 0
020+WAITBOID :
  020 WAITBOID(1)     : 81BD0263
  024 WAITBOID(2)     : 82060266
  028 WAITBOID(3)     : 8315023C
02C CMXB              : 00000000 = 0      ! 030 PWRD              : 00000000 = 0
034 TSN               : F0F6D9D3 = '06RL' ! 038 SW                : 00000000
03C DPRIM             : 00000240 = 576    ! 040 DSECOND           : 000000C0 = 192
044 DUSID             :'TSOS '            ! 04C IDUSID            :'        '
054 FGGILIST          : 00000000 = 0      ! 058 FN_GENERATED      : 01
059 TD_GENERATED      : 01                ! 05A TSK_GENERATED     : 01
05B+FLAGS :
  05B RESERVED        : 000006
05E IN_BUF_SIZE       : 0541 = 1345       ! 060 OUT_BUF_SIZE      : 0541 = 1345
062                   : 0000              ! 064 DBLISTPTR         : 00000000 = 0
068 FAHOSTLPTR        : 00000000 = 0      ! 06C CHARTEMPFILE      : 40 = ' '
06D BS2VERS           :'V18.0A0000'       ! 077 UNUSED            : 00 = ' '
078+TRACE             :
  078+HDR             :
    078 DEEP_OK           : 00
    079 RECORDING_POSITION: 00
    07A SS_NUMBER         : 00
    07B FILLER2           : 00
  07C RECORD          :'                                          '
  0BD                 :'                                          ' 
  0FE                 :'                                          ' 
  13F                 :'                                          '
16C INF_BUF_NUMBER    : 0004 = 4           ! 16E OF_BUF_NUMBER    : 0008 = 8


MESSAGE
Display message on screen

When issued without the optional numeric parameter “line”, the standard procedure MESSAGE causes a specified text to be displayed in one of the two message lines in the DAMP screen mask (lines 2 and 3) as soon as the PRODAMP procedure is terminated and the screen is refreshed. If the value 1 or 2 is assigned to the line parameter, the specified text is output to screen immediately.

line parameter not specified:

As soon as the buffer for the two message lines is full, any additional messages are ignored. For this reason, it is advisable to follow a MESSAGE call with either an INTERRUPT or a RETURN statement. If INTERRUPT is used, the user can read the text and then, if desired, resume the procedure with RESUME. However, if the message is an error message and the procedure is to be aborted, it is better to use RETURN.

line parameter specified:

This allows interim messages providing information on the current state of processing in the procedure to be issued during PRODAMP procedures which run over longer periods.

Procedure call

Operation

Operands

MESSAGE

(text[,line])

Operands

text

line

Text to be displayed.

stands for a numeric expression with the value 0, 1 or 2. The values indicate the message lines to which the messages are to be written.
Message line 1 -> line 2 of the screen
Message line 2 -> line 3 of the screen
A specification of 0 for line corresponds to the procedure call MESSAGE (text).

NEW_TASK
Set current task

The standard procedure NEW_TASK sets a new current task as defined by DAMP. This is meaningful only for SLED dumps, SNAP dumps and the active system. All accesses to task-specific tables (ETCB, EJCB etc.) or to addresses in user memory then refer to the new task.

Procedure call

Operation

Operands

NEW_TASK

(task[,map])

Operands

task

Specifies the new current task.

“task” must be a string expression or a numeric expression. NEW_TASK works differently in both cases.

If task is a string expression, it must contain a TSN (up to 4 characters in length). If a task exists with this TSN, it is set as the current task. If this is not the case, CURRENT.ERROR is set.

If task is a numeric expression, the last 3 half-bytes of this value are interpreted as an ITN. If an active task with this ITN exists in the diagnosis object, this task is set. If this is not the case, the subsequent task (in the TLT) is set. CURRENT.ERROR is only set if it is not possible to find a task in this manner.
If the numeric expression is an identifier for a numeric variable, it returns the TID set. This allows you to work through all active tasks sequentially (see example 3, “Changing the current task”, on "Working with procedures (special window: PROC)").

map

Specifies whether the existing system overview (CSECT map) is to be extended to include the overview of the nonprivileged subsystems for the new task.
The value TRUE or FALSE can be used for the parameter map. The value TRUE requests the additional CSECT map. No specification is equivalent to the specification FALSE.

The specification TRUE results in decreased performance and can easily cause a memory overflow on systems with a large number of active tasks. The optional parameter map should therefore only be used when absolutely necessary.

Example

NEW_TASK ( '0A33' ); ——————————————————————————————————————————————————  (1) 
TASK_ID := X'AB'; —————————————————————————————————————————————————————  (2) 
NEW_TASK ( TASK_ID );

(1)

The task with the TSN 0A33 is selected first. If this task does not exist, CURRENT.ERROR is set. 

(2)

Then the task with the ITN X'AB' is selected as the current task. If this task does not exist either, the next task in the TLT (which could be X'AE') is selected and its TID is returned in TASK_ID. CURRENT.ERROR is set only if task X'AB' is not active and there are no more active tasks in the TLT.

NEXT_WINDOW
Switch to next visible window

NEXT_WINDOW can only be called if READ_WINDOW has previously been called successfully. It provides the pseudo symbols INFIELDS.xxx for the next diagnostic window in the screen read by READ_WINDOW. Please refer to READ_WINDOW for further information.
If the DAMP screen does not have any more visible windows, the pseudo symbol CURRENT.ERROR is set to a value other than 0.

The pseudo symbol INFIELDS.COMMAND can always be used to access the command line of the DAMP screen, irrespective of the viewed window.

Procedure call

Operation

Operand

NEXT_WINDOW


Example

READ_WINDOW; ——————————————————————————————————————————————————————————  (1) 
WHILE (CURRENT.ERROR = 0) DO ——————————————————————————————————————————  (2) 
   WRITE (DEC_STRING (INFIELDS.WNDNO)); ———————————————————————————————  (3) 
   NEXT_WINDOW; ———————————————————————————————————————————————————————  (4) 
END WHILE;

(1)

The procedure is interrupted. The procedure is reactivated when the key is pressed, and the entries made in the last screen are stored internally. The topmost diagnostic window on the screen is the current diagnostic window to which INFIELDS.xxx refers.

(2)

Aborts the procedure if NEXT_WINDOW does not display any further visible window.

(3)

This allows the pseudo symbols INFIELDS.xxx to be evaluated for the current window. In the example, the window number is written to the EDT area. Since INFIELDS.WNDNO always exists, it is not necessary to evaluate CURRENT.ERROR.

(4)

Switch to next window.

READ
Read from EDT area

The standard procedure READ reads sequentially from the current EDT area and assigns the record read to a string variable text. If this string variable has not yet been initialized, a string with the maximum permissible length (133 bytes) is created. If the EDT line is too short, the variable is filled with blanks; if it is too long, surplus characters are ignored.

In addition to being used to access diagnostic data that is not in the diagnosis object (such as the REP file), this function can be used, for example, to store table layouts in separate files and to read them into the PRODAMP procedure, thereby doing away with the need for resource-intensive initialization operations.

The user is advised not to alternate between the procedures READ and WRITE, since it is possible that WRITE will change the current line number set internally by EDT. A subsequent READ operation could possibly return the wrong line.

Procedure call

Operation

Operand

READ

(text)

Operands

text

String variable to be assigned to the text read.
Maximum length: 133 characters.

READ_WINDOW
Interrupt PRODAMP procedure and allow entries or markings to be made in diagnostic window

The standard procedure READ_WINDOW interrupts the PRODAMP procedure. The PRODAMP procedure is reactivated after you press the key. Until you do this, you can carry out any work required in the DAMP screens.
When the procedure is reactivated using the key, the entries in the last DAMP screen are not passed to the DAMP screen, but to PRODAMP instead. The pseudo symbols INFIELDS.xxx (see below) make available entries in the topmost diagnostic window on the screen as well as entries in the command line. The standard procedure NEXT_WINDOW allows access to the entries in any subsequent diagnostic window (on the same screen). Calling the NEXT_WINDOW procedure a number of times in succession makes the entries from all the diagnostic windows on the screen (from top to bottom) available.

As well as entries, READ_WINDOW allows you to determine a number of values assigned to the windows (such as the window number). Not all entries are available. This applies particularly to entries in most of the special windows. Please refer to the list below for details. This list contains the permitted INFIELDS.xxx pseudo symbols.

Users can program their own interfaces for DAMP by incorporating READ_WINDOW and NEXT_WINDOW procedures in a PRODAMP procedure and always using the key for transferring data. This allows implementation of new, user-specific DAMP statements.

Procedure call

Operation

Operands

READ_WINDOW


The following pseudo-symbols can be accessed:

INFIELDS.ADDRESS
Contains any entry made in the Absolute address field in the header line of the viewed window; 4-digit numeric value.

INFIELDS.ASEL
Contains any entry made in the ASEL (Address Space Selector) field in the header line of the viewed window; 3-character string.

INFIELDS.ASID
Contains any entry made in the ASID (Address Space Identifier) field in the header line of the viewed window; 17-character string.

INFIELDS.COMMAND
Contains any entry made in the DAMP statement line; 72-character string.

INFIELDS.LAYOUT
Contains any entry made in the Window layout field in the header line of the viewed window; 3-character string.

INFIELDS.LENGTH
Contains any entry made in the Length field in the header line of the viewed window; 1-digit numeric value.

INFIELDS.MARK1 to INFIELDS.MARK6
Contains any addresses marked in the viewed window; 4-digit numeric value (for each address).

INFIELDS.RELATIVE
Contains any entry made in the Relative address field in the header line of the viewed window; 4-digit numeric value.

INFIELDS.STACK
Contains any entry made in the Stack number field in the header line of the viewed stack window; 4-digit numeric value.

INFIELDS.SYMBOL
Contains any entry made in the Symbol field in the header line of the viewed window;31-character string.
(For reasons of compatibility, the last (i.e. 32nd) character of the Symbol field is ignored.

INFIELDS.TID
Contains any entry made in the TID field in the title line of the viewed dump window; 4-digit numeric value.

INFIELDS.TSN
Contains any entry made in the TSN field in the title line of the viewed dump window; 4-digit numeric value.

INFIELDS.WNDNO
Contains the window number of the viewed window; single-digit numeric value.

INFIELDS.WNDTSK
Contains the TID to which the data in the viewed window belongs; 4-digit numeric value.

Notes

  • If the pseudo-symbol is queried even though no entry has been made in the corresponding field in the DAMP window, the pseudo-symbol CURRENT.ERROR is set to a value other than 0. The pseudo-symbols WNDNO and WNDTSK are set implicitly. WNDNO is always valid and WNDTSK is valid whenever the window contains data from a user task. If the data is system data, the value contained in WNDTSK is not valid (CURRENT.ERROR is set).

  • If the PRODAMP procedure interrupted with READ_WINDOW is resumed using the RESUME-PRODAMP-PROGRAM statement, the procedure is always aborted if an attempt is made to access one of the pseudo-symbols. In this event, an appropriate message is issued.

  • The data stored in the pseudo-symbols is not destroyed if the PRODAMP procedure is interrupted normally using the INTERRUPT statement. It remains available after the procedure has been resumed (using the RESUME-PRODAMP-PROGRAM) statement.Each time a PRODAMP procedure is restarted, however, the data area accessed by the pseudo-base INFIELDS is set to an invalid value. This is also the case if a different procedure was started between the INTERRUPT and RESUME-PRODAMP-PROGRAM statements.

  • Irrespective of the number of windows displayed on the screen, a maximum of 6 markers are transferred and assigned to the relevant windows with the READ_WINDOW and NEXT_WINDOW procedures. The markers are available in the PRODAMP procedure via the pseudo-symbols INFIELDS.MARK1 through INFIELDS.MARK6.

Example

The following procedure waits in the background until an address field is marked and transferred using the key. If this happens, the procedure outputs the first word located at the marked address in the message line. 

ARRANGE
 .WORD : OFFSET = 0, LENGTH = 4, TYPE = NUMERIC;
END ARRANGE;
B := 0;
WHILE B=B DO
  CURRENT.ERROR := 0;
  READ_WINDOW;
  WHILE CURRENT.ERROR = 0 DO
    A := INFIELDS.MARK1;
    MESSAGE ( HEX_STRING(A,8)+': '+HEX_STRING(A.WORD,8) );
    NEXT_WINDOW;
  END WHILE;
END WHILE;

REFERENCE
Localize symbol which is element of substructure

The standard procedure REFERENCE is only used in conjunction with the standard functions ADDRESS and LENGTH. The procedure is used for specifying references if the symbol to be processed using ADDRESS or LENGTH is an element of a substructure. The REFERENCE procedure must be called for each symbol which lies on the “path” to the required element. This must be done in the correct sequence (see example). Symbols must be specified as a string of up to 32 characters. These are collected by the REFERENCE calls, but not checked for validity. The strings are only checked when the ADDRESS or LENGTH function is called.

All REFERENCE calls are only valid locally within a procedure. If the calls are not resolved by calling ADDRESS or LENGTH when the procedure is terminated, the procedure is aborted. If the call is resolved, the referenced path is deleted. If the element is required again, you must make new REFERENCE calls.

Procedure call

Operation

Operand

REFERENCE

(symbol)

Operands

symbol

Specifies the symbol to be localized; 31-character string.

Example

NKLCB_MDL.COPY_PARAMETER.USER_ADMINISTRATION.WAIT_FACTOR ——————————————  (1) 
REFERENCE ( 'NKLCB_MDL' );
REFERENCE ( 'COPY_PARAMETER' ); 
REFERENCE ( 'USER_ADMINISTRATION' ); ——————————————————————————————————  (2) 
A := ADDRESS ( 'WAIT_FACTOR', 'RF' ); —————————————————————————————————  (3) 

(1)

This SPL structure field is to be evaluated.

(2)

The REFERENCE procedure is used three times to indicate the path (“NKLCB_MDL.COPY_PARAMETER.USER_ADMINISTRATION”) leading to the WAIT_FACTOR symbol.

(3)

This returns the address of the WAIT_FACTOR symbol. The address is calculated relative to the first symbol of the chain of references (NKLCB_MDL in the example). Specifying “RF” indicates that REFERENCE calls were required to find this symbol.

SET_HEADER
Generate header for list output

SET_HEADER can be used to generate a header for a list output. This header is output for the first time when SET_HEADER is called; after this, it is output after each subsequent new page in the list until the text is changed by a new SET_HEADER call.

Procedure call

Operation

Operands

SET_HEADER

(string,skiplines,reservelines)

Operands

string

must be an expression of the type “string” and contains the text for the header.

skiplines

must be a numeric expression and specifies the number of lines to be skipped before the header is printed for the first time. 0 ≤ skiplines ≤ 255.

reservelines

must be a numeric expression and has the following effect: if there are less than “reservelines” lines left on the current page before the next page break, a form feed to a new page is executed before the header is printed for the first time.
0 <= reservelines <= 255. Specifying “255” forces a form feed.

Example

SET_HEADER ('TEXT',0,255); ————————————————————————————————————————————(1)
SET_HEADER ('TFT FOR TASK'+CURRENT.TSN, 2, 20); ———————————————————————(2)

(1)

This forces a form feed before the header.

(2)

2 lines are skipped before the header (one line is always skipped after the header). If there are less than 20 lines left on the current page, a form feed is executed.

UNSIGNED_ON and UNSIGNED_OFF
Enable and disable unsigned arithmetic

When performing calculations with addresses, it can sometimes be a disadvantage to work with signed arithmetic. For this reason, it is possible to select between unsigned and signed arithmetic for the numeric data type of PRODAMP by calling a standard procedure.

In the signed interpretation of 32-bit data, the leading bit has a value of -231; in the unsigned interpretation, its value is 231.

A PRODAMP main routine initially runs with signed arithmetic enabled (UNSIGNED_OFF, the default setting for PRODAMP). Unsigned arithmetic must be enabled with the procedure UNSIGNED_ON and can be disabled again with UNSIGNED_OFF.

On calling a subroutine, this arithmetic execution mode (i.e. signed or unsigned) is inherited by the subroutine. Changing the mode in the called routine has no effect on the arithmetic execution mode in the calling routine.

The arithmetic execution mode only affects calculations with the arithmetic data type of length 4 (32-bit data). The addressing of data objects is not affected.

Signed arithmetic (UNSIGNED_OFF)

Calculations with signed arithmetic are performed as usual in PRODAMP. If errors occur (overflow on addition, subtraction and multiplication; division by zero), the PRODAMP run is aborted with a runtime error.

Unsigned arithmetic (UNSIGNED_ON)

Overflows on addition, subtraction and multiplication are ignored (the result is “modulo 232”, which is correct) and, in particular, do not result in a runtime error.
In the case of a division by zero, the PRODAMP run is aborted with a runtime error.Comparisons in unsigned arithmetic are performed as binary “logical comparisons”.

In the standard functions “DEC_BINARY - Convert decimal number” and “DEC_STRING - Convert numeric values”, the switch to signed arithmetic with UNSIGNED_ON is ignored.

Procedure call

Operation

Operand

UNSIGNED_ON


UNSIGNED_OFF


WRITE
Write to EDT area

The standard procedure WRITE causes a text to be written to an EDT area (namely area 8, unless otherwise specified). This makes it possible, for example, to generate a table of system values in the EDT area and then evaluate this table in EDT.

The EDT output area can be modified at any time with the aid of WRITE (“@PROC nn”).

Strings which begin with the character “@” are interpreted as EDT statements. “@WRITE ''filename''” can thus be used to save the contents of the EDT area to a file.
However, only EDT statements accepted in EDT F mode are accepted in the WRITE procedure. Other statements can only be issued by way of an EDT procedure file.

PRODAMP simulates the EDT statements @PROC and @END, albeit with the following restrictions:

  • Only procedure files 1 to 9 can be used.

  • If the system recognizes the number of a valid procedure file, no further syntax checking is carried out. Any further command entry is ignored.

  • The @END command must not be abbreviated.

  • It is not possible to chain @PROC or @END together with other EDT commands.

If old PRODAMP procedures which still use L mode EDT commands are recompiled under DAMP V4.7, they will no longer run.

The standard procedure WRITE may modify the current line number set internally by EDT. If it is followed by a READ procedure, the resultant line contents will be other than expected. For this reason, alternate use of WRITE and READ should be avoided.

Procedure call

Operation

Operands

WRITE

(text)

Operands

text

Specifies the string expression to be written to the EDT area.