# Module `shared_screen` - Shared screen library

Shared screen library.

To use this library:

    #INCLUDE "shared_screen.module"

## Index

- Data type `COLOUR` - A colour
- Group `COLOURS` - Colour constants
  - Constant `black` - Black
  - Constant `blue` - Blue
  - Constant `bold.black` - Bold black (grey)
  - Constant `bold.blue` - Bold blue
  - Constant `bold.cyan` - Bold cyan
  - Constant `bold.green` - Bold green
  - Constant `bold.magenta` - Bold magenta
  - Constant `bold.red` - Bold red
  - Constant `bold.white` - Bold white
  - Constant `bold.yellow` - Bold yellow
  - Constant `cyan` - Cyan
  - Constant `default` - Default colour
  - Constant `green` - Green
  - Constant `magenta` - Magenta
  - Constant `red` - Red
  - Constant `white` - White
  - Constant `yellow` - Yellow
- Record `COORDINATES` - A pair of coordinates
  - Variable `X` - X coordinate
  - Variable `Y` - Y coordinate
- Record `COORDINATES.COLOUR` - A pair of coordinates and a colour
  - Variable `X` - X coordinate
  - Variable `Y` - Y coordinate
  - Variable `col` - Colour
- Group `SCREEN.COMMAND` - Command tags for
- Protocol `SCREEN.CONTROL` - Control protocol for
  - Tag `byte` - Draw a byte
  - Tag `c.erase.bol` - Move then erase to beginning of line
  - Tag `c.erase.bos` - Move then erase to beginning of screen
  - Tag `c.erase.eol` - Move then erase to end of line
  - Tag `c.erase.eos` - Move then erase to end of screen
  - Tag `c.erase.line` - Move then erase whole line
  - Tag `character` - Draw a character
  - Tag `colour` - Set colour
  - Tag `coordinates` - Set coordinates
  - Tag `cursor.invisible` - Make the cursor invisible
  - Tag `cursor.visible` - Make the cursor visible
  - Tag `down` - Move down
  - Tag `draw.down` - Move down drawing character
  - Tag `draw.left` - Move left drawing character
  - Tag `draw.right` - Move right drawing character
  - Tag `draw.up` - Move up drawing character
  - Tag `erase.bol` - Erase to beginning of line
  - Tag `erase.bos` - Erase to beginning of screen
  - Tag `erase.eol` - Erase to end of line
  - Tag `erase.eos` - Erase to end of screen
  - Tag `erase.line` - Erase whole line
  - Tag `erase.screen` - Clear the screen
  - Tag `flush` - Force a screen update
  - Tag `integer` - Draw an integer
  - Tag `interpret` - Interpret a list of commands
  - Tag `left` - Move left
  - Tag `poison` - Exit
  - Tag `right` - Move right
  - Tag `string` - Draw a string
  - Tag `up` - Move up
- Record `SCREEN.NODE` - A batch instruction to the shared screen
  - Variable `a` - First argument
  - Variable `b` - Second argument
  - Variable `tag` - The command to execute
- Process `fg.col` - Set foreground colour
- Process `screen.driver` - Shared screen process
- Process `screen.interpret` - Interpret an array of screen update commands

## Declarations

### `shared_screen.occ`:39Process `fg.col`

`PROC fg.col (VAL COLOUR c, CHAN BYTE out!)`

Set foreground colour. Generate a VT220 control sequence to set the terminal colour.

#### Parameters:

`VAL COLOUR` | `c` | Colour to set; see `COLOURS`
`CHAN BYTE` | `out` | Channel to write to

### `shared_screen.occ`:74Process `screen.interpret`

`PROC screen.interpret (VAL []SCREEN.NODE node, CHAN BYTE out!)`

Interpret an array of screen update commands.

#### Parameters:

`VAL []SCREEN.NODE` | `node` | Commands to interpret; see `SCREEN.NODE`
`CHAN BYTE` | `out` | Channel to write to

### `shared_screen.occ`:185Process `screen.driver`

`PROC screen.driver (CHAN SCREEN.CONTROL in?, CHAN BYTE out!)`

Shared screen process. Manage a VT220 terminal display.

#### Parameters:

`CHAN SCREEN.CONTROL` | `in` | Command input channel (see `SCREEN.CONTROL`)
`CHAN BYTE` | `out` | Channel to write to

### `shared_screen.inc`:25Data type `COLOUR`

`DATA TYPE COLOUR`

A colour.

### `shared_screen.inc`:26Group `COLOURS`

``

Colour constants

### `shared_screen.inc`:27Constant `default`

`VAL COLOUR default`

Default colour

### `shared_screen.inc`:28Constant `black`

`VAL COLOUR black`

Black

### `shared_screen.inc`:29Constant `red`

`VAL COLOUR red`

Red

### `shared_screen.inc`:30Constant `green`

`VAL COLOUR green`

Green

### `shared_screen.inc`:31Constant `yellow`

`VAL COLOUR yellow`

Yellow

### `shared_screen.inc`:32Constant `blue`

`VAL COLOUR blue`

Blue

### `shared_screen.inc`:33Constant `magenta`

`VAL COLOUR magenta`

Magenta

### `shared_screen.inc`:34Constant `cyan`

`VAL COLOUR cyan`

Cyan

### `shared_screen.inc`:35Constant `white`

`VAL COLOUR white`

White

### `shared_screen.inc`:36Constant `bold.black`

`VAL COLOUR bold.black`

Bold black (grey)

### `shared_screen.inc`:37Constant `bold.red`

`VAL COLOUR bold.red`

Bold red

### `shared_screen.inc`:38Constant `bold.green`

`VAL COLOUR bold.green`

Bold green

### `shared_screen.inc`:39Constant `bold.yellow`

`VAL COLOUR bold.yellow`

Bold yellow

### `shared_screen.inc`:40Constant `bold.blue`

`VAL COLOUR bold.blue`

Bold blue

### `shared_screen.inc`:41Constant `bold.magenta`

`VAL COLOUR bold.magenta`

Bold magenta

### `shared_screen.inc`:42Constant `bold.cyan`

`VAL COLOUR bold.cyan`

Bold cyan

### `shared_screen.inc`:43Constant `bold.white`

`VAL COLOUR bold.white`

Bold white

### `shared_screen.inc`:48Record `COORDINATES`

`DATA TYPE COORDINATES`

A pair of coordinates.

### `shared_screen.inc`:50Variable `X`

`BYTE`

X coordinate

### `shared_screen.inc`:51Variable `Y`

`BYTE`

Y coordinate

### `shared_screen.inc`:56Record `COORDINATES.COLOUR`

`DATA TYPE COORDINATES.COLOUR`

A pair of coordinates and a colour.

### `shared_screen.inc`:58Variable `X`

`BYTE`

X coordinate

### `shared_screen.inc`:59Variable `Y`

`BYTE`

Y coordinate

### `shared_screen.inc`:60Variable `col`

`COLOUR`

Colour

### `shared_screen.inc`:64Group `SCREEN.COMMAND`

``

Command tags for `SCREEN.NODE`.

### `shared_screen.inc`:91Record `SCREEN.NODE`

`DATA TYPE SCREEN.NODE`

A batch instruction to the shared screen. This is really a union type; the argument tags have different meanings depending on the command.

### `shared_screen.inc`:95Variable `tag`

`BYTE`

The command to execute. See `SCREEN.COMMAND`.

### `shared_screen.inc`:97Variable `a`

`BYTE`

First argument

### `shared_screen.inc`:99Variable `b`

`BYTE`

Second argument

### `shared_screen.inc`:106Protocol `SCREEN.CONTROL`

`PROTOCOL SCREEN.CONTROL`

Control protocol for `screen.driver`.

### `shared_screen.inc`:109Tag `coordinates`

`coordinates; COORDINATES`

Set coordinates

### `shared_screen.inc`:110Tag `colour`

`colour; COLOUR`

Set colour

### `shared_screen.inc`:111Tag `string`

`string; BYTE::[]BYTE`

Draw a string

### `shared_screen.inc`:112Tag `integer`

`integer; INT`

Draw an integer

### `shared_screen.inc`:113Tag `byte`

`byte; BYTE`

Draw a byte

### `shared_screen.inc`:114Tag `character`

`character; BYTE`

Draw a character

### `shared_screen.inc`:115Tag `left`

`left; BYTE`

Move left

### `shared_screen.inc`:116Tag `right`

`right; BYTE`

Move right

### `shared_screen.inc`:117Tag `up`

`up; BYTE`

Move up

### `shared_screen.inc`:118Tag `down`

`down; BYTE`

Move down

### `shared_screen.inc`:119Tag `draw.left`

`draw.left; BYTE; BYTE`

Move left drawing character

### `shared_screen.inc`:120Tag `draw.right`

`draw.right; BYTE; BYTE`

Move right drawing character

### `shared_screen.inc`:121Tag `draw.up`

`draw.up; BYTE; BYTE`

Move up drawing character

### `shared_screen.inc`:122Tag `draw.down`

`draw.down; BYTE; BYTE`

Move down drawing character

### `shared_screen.inc`:123Tag `erase.eol`

`erase.eol`

Erase to end of line

### `shared_screen.inc`:124Tag `erase.bol`

`erase.bol`

Erase to beginning of line

### `shared_screen.inc`:125Tag `erase.line`

`erase.line`

Erase whole line

### `shared_screen.inc`:126Tag `erase.eos`

`erase.eos`

Erase to end of screen

### `shared_screen.inc`:127Tag `erase.bos`

`erase.bos`

Erase to beginning of screen

### `shared_screen.inc`:128Tag `flush`

`flush`

Force a screen update

### `shared_screen.inc`:142Tag `c.erase.eol`

`c.erase.eol; COORDINATES`

Move then erase to end of line

### `shared_screen.inc`:143Tag `c.erase.bol`

`c.erase.bol; COORDINATES`

Move then erase to beginning of line

### `shared_screen.inc`:144Tag `c.erase.line`

`c.erase.line; COORDINATES`

Move then erase whole line

### `shared_screen.inc`:145Tag `c.erase.eos`

`c.erase.eos; COORDINATES`

Move then erase to end of screen

### `shared_screen.inc`:146Tag `c.erase.bos`

`c.erase.bos; COORDINATES`

Move then erase to beginning of screen

### `shared_screen.inc`:147Tag `erase.screen`

`erase.screen`

Clear the screen

### `shared_screen.inc`:148Tag `cursor.visible`

`cursor.visible`

Make the cursor visible

### `shared_screen.inc`:149Tag `cursor.invisible`

`cursor.invisible`

Make the cursor invisible

### `shared_screen.inc`:152Tag `interpret`

`interpret; BYTE::[]SCREEN.NODE`

Interpret a list of commands. See `SCREEN.NODE`.

### `shared_screen.inc`:153Tag `poison`

`poison`

Exit