ASSIGN procedure

Language reference ›› Built-in procedures ›› "console" procedures ››
Parent Previous Next

assign-procedure = assign-output | assign-input | assign-error .
assign-output = ASSIGN "(" OUTPUT "," output-procedure ")" .
assign-input = ASSIGN "(" INPUT "," input-function ")" .
assign-error = ASSIGN "(" ERROR "," error-procedure ")" .

This is the way a user-defined console character I/O routine may be assigned to the standard console READ, READLN, WRITE and WRITELN built-in procedures, or to assign an output procedure to the ERROR message output..


May be any procedure name that is defined with one and only one BYTE or CHAR argument.


May be any function name that is defined with a result of type BYTE or CHAR, with no arguments.


May be any procedure name that is defined with one and only one BYTE or CHAR argument.

Error routine:

The ERROR routine is used to output messages when there is an unrecoverable runtime error (e.g.: ASSERT failure, memory allocation failure), or in case of a FP error.

For a system failure, the message is an header followed by a single character that indicates the error code:

'HM:1': Heap memory: Overflow (GetMem fails)

'HM:2': Heap memory: Attempt to FreeMem an invalid pointer or FreeMem(X, 0)

'HM:3': Heap memory is corrupted

'FP:4': Floating point: Overflow

'FP:5': Floating point: Underflow

'FP:6': Floating point: Domain error

'7' to '9' are reserved.

For FP errors only: if no ERROR routine is defined, OUTPUT is used. If there is also no OUTPUT, no message is output; then the FP operation is resumed, with FP_FLAGS remaining so that the program may check them. FP_FLAGS remain until an FP_CLR is called.

In all other cases: if no ERROR routine is defined the MCU enters directly the infinite loop.

PMP specificities:

By default nothing is assigned to INPUT, OUTPUT and ERROR pseudo files. If a pseudo file is not assigned, the related console I/O calls will do nothing.

Pseudo files cannot be closed. They may be re-assigned (even with NIL).

procedure MyOutput(Ch: char);

 assign(output, MyOutput); { This will assign the procedure MyOutput for
                             all further WRITE / WRITELN procedure calls }

See also: ASSERT.