# ASM templates

Each line of output produced by skool2asm.py is built from a template. A template contains ‘replacement fields’ - identifiers enclosed by braces (`{` and `}`) - that are replaced by appropriate content (such as a label or register name) when the template is formatted.

The default templates can be overridden by custom templates read from a file by setting the `Templates` configuration parameter of skool2asm.py. To define a custom template, specify its name in square brackets on a line of its own, and follow it with the content of the template. For example:

    [org]
    .{org} {address}

## comment

The `comment` template is used to format a line in an entry title, entry description, block start comment, mid-block comment, or block end comment.

    ; {text}

The following identifier is available:

- `text` - the text of the comment line

This template is also used to used to format lines between paragraphs in comments, with `text` set to an empty string.

## equ

The `equ` template is used to format an EQU directive produced by @equ.

    {label} {equ} {value}

The following identifiers are available:

- `equ` - ‘EQU’ or ‘equ’ (depending on the case)

- `label` - the label

- `value` - the value

## instruction

The `instruction` template is used to format an instruction line or instruction comment continuation line.

    {indent}{operation:{width}} {sep} {text}

The following identifiers are available:

- `indent` - the instruction indent (as defined by the `indent` property)

- `operation` - either the operation (e.g. ‘XOR A’), or an empty string (if formatting a comment continuation line)

- `sep` - the comment separator (‘;’ if there is a comment, an empty string otherwise)

- `text` - the text of the comment line

- `width` - the width of the instruction field (as defined by the `instruction-width` property)

The `indent` and `instruction-width` properties can be set by either the @set directive, or the `Set-indent` and `Set-instruction-width` configuration parameters of skool2asm.py.

## label

The `label` template is used to format an instruction label.

    {label}{suffix}

The following identifiers are available:

- `label` - the instruction label

- `suffix` - ‘:’ or an empty string (as defined by the `label-colons` property)

The `label-colons` property can be set by either the @set directive, or the `Set-label-colons` configuration parameter of skool2asm.py.

## org

The `org` template is used to format an ORG directive produced by @org.

    {indent}{org} {address}

The following identifiers are available:

- `address` - the ORG address (as a string)

- `indent` - the instruction indent (as defined by the `indent` property)

- `org` - ‘ORG’ or ‘org’ (depending on the case)

The `indent` property can be set by either the @set directive, or the `Set-indent` configuration parameter of skool2asm.py.

## register

The `register` template is used to format lines in the register section of an entry header.

    ; {prefix:>{prefix_len}}{reg:<{reg_len}} {text}

The following identifiers are available:

- `max_reg_len` - the maximum length of all register names in the register section

- `prefix` - the register prefix (e.g. ‘In:’ or ‘O:’), or an empty string (if formatting a register description continuation line)

- `prefix_len` - the maximum length of all register prefixes in the register section

- `reg` - the register name (e.g. ‘HL’), or an empty string (if formatting a register description continuation line)

- `reg_len` - the length of the register name

- `text` - the text of a line of the register description

Changed in version 8.7: Added the ‘<’ alignment specifier to the `reg` field (to handle the case where `reg_len` is 0).

Changed in version 8.0: Added the `max_reg_len` identifier.