# System Functions

TCB(FILE | OBJECT | WINDOW | CONTROL) | Return Active Elements

## Format

1. Return Open (and Accessible) Files: | TCB(FILE index [,ERR=stmtref])
2. Return Existing Objects: | TCB(OBJECT index [,ERR=stmtref])
3. Return Open Windows: | TCB(WINDOW index [::name] [,ERR=stmtref])
4. Return Existing Controls: | TCB(CONTROL index [,ERR=stmtref])

Where:

index | A numeric value containing either 0 (to retrieve the count of elements) or the index of the desired element.
stmtref | Program line number or statement label to which to transfer control.
::name | Can be any of the following window attributes for which information is to be retrieved:
::name | Return Value
::Columns | Number of columns wide.
::Lines | Number of lines high.
::CurrentColumn | Current column.
::CurrentLine | Current line.
::AbsColumn | Column window was created at (not current if moved).
::AbsLine | Line window was created at.
::ScrollColumn | Scroll region column.
::ScrollLine | Scroll region line.
::ScrollColumns | Scroll region number of columns.
::ScrollLines | Scroll region number of lines.
::LeftColumn | Leftmost column displayed on screen.
::TopLine | Top line displayed on screen.
::ViewableColumns | Number of visible columns.
::ViewableLines | Number of visible lines.
::IsDialogue | Returns 1 if a Dialogue window; else 0.

(The ::name option was added in PxPlus 2021.)

## Description

The TCB(FILE | OBJECT | WINDOW | CONTROL index) function is designed to allow the programmer an easy method to determine which elements are currently in existence/active in the system.

In all cases when using this function, if the value in index is zero, the function will return the number of currently active elements. For example, TCB(OBJECT 0) will return the total number of objects currently active in the system.

If the value of index is non-zero, it is considered the relative number of the specified element. For example, TCB(WINDOW 2) will return the window number of the second relative window (the window directly behind the current one).

If the value of index is < zero or greater than the number of elements, an Error #41: Invalid integer encountered will be generated and an error exception will occur.

Using this function with the ::name option provides the ability to access a number of window attributes.

(The TCB(FILE | OBJECT | WINDOW | CONTROL index) function was added in PxPlus v7.00.)

## Format 1

Return Open/Accessible Files

TCB(FILE index [,ERR=stmtref])

This function will return the count and channel number for open and currently accessible files. Files that are opened exclusively by objects and thus may not be accessible are not included.

If this function is invoked from within an object that does have access to the file, it will be included in the count. The return value for a non-zero index will be the file channel number. TCB( FILE 1) will always return zero.

## Format 2

Return Objects Handles

TCB(OBJECT index [,ERR=stmtref])

This function will return the count and handle numbers for the PxPlus objects that currently exist in the system. The return value for a non-zero index will be the object number (handle).

## Format 3

Return Open Windows

TCB(WINDOW index [::name] [,ERR=stmtref])

This function will return the count and window numbers for all the windows currently in existence. The values returned will reflect the display order of the windows; thus, TCB(WINDOW 1) will return the current window number. The return value for a non-zero index will be the window number.

When used with the ::name option, the index must be a variable, not a literal window number or expression. This function provides the ability to access information for the Window Attributes in the table above.

Example:

This example uses the ::Columns option to return the width of the current window:

> X = TCB(WINDOW 1)
> TCB(WINDOW X::Columns)

(The ::name option was added in PxPlus 2021.)

## Format 4

Return Control Handles

TCB(CONTROL index [,ERR=stmtref])

This function will return the count and CTL value associated with all the controls currently in use. This will include all controls in the current window (whether hidden or disabled) and controls in any concurrent windows. Global controls are not accessible.

The return value for a non-zero index will be the CTL value associated with the control.

#### Note:
When using the TCB(CONTROL index) function under WindX, the system will have to send the request to the workstation in order to get the value. This can result in performance problems when used repeatedly. The suggestion is that if you want to access the list of active controls, you should use the FIN (0, "CTLLIST") function, which will return a comma-separated list of CTL numbers.