---
title: "Read and navigate FHX"
---

# Read and navigate FHX

The DeltaV FHX language in the text editor: colouring including expressions and module paths, outline, go to definition, find references, hover and completion of the names an export defines.

**Verification state:** modelled. Tested on hand-written fixtures and on the real DeltaV 14.5.1 export: the whole export (430,087 lines) colours with no string or comment left open; completion offers the export's 293 module tags and 45 classes. The expression syntax is not read from Emerson's books. Not seen in the running Editor; not on Windows.

## Colouring

Open a `.fhx` file (either case of the extension). The status bar language reads DeltaV FHX. Statements, attributes, quoted values with `""` escapes, numbers, T and F, both comment forms (`(* *)` and C-style) and braces are coloured. Inside `EXPRESSION`, `CONFIRM_EXPRESSION`, `DELAY_EXPRESSION` and the other expression values, the expression keywords, strings, operators, `:=`, comments and the `'//module/...'` and `'^/...'` paths stand out.

The language and its colouring are always available, like the Editor's other built-in languages, whether or not the DCS environment is on. Everything below needs the environment.

## Navigate

| Feature | How | What |
|---|---|---|
| **Outline** | View > Open View > Outline | Areas, classes and modules with their function blocks and parameters |
| **Go to Definition** | Ctrl+click | A module named in a path such as `'//FIC-101/PID1/OUT.CV'`, a module's area, a module's class |
| **Find All References** | Shift+F12 on a module's `TAG=` or a path | Every path that names the module |
| **Hover** | On a path | The module's description, area, class and function blocks, or that the export has no such module (it may be in another export) |

The index is built once per version of the text, only when asked. References between exports (a path to a module in another file) do not resolve.

## Completion

Only names the export defines are offered; nothing is invented.

- After `'//` in an expression or `REF="//`: the export's module tags; after `'//TAG/`: that module's function blocks and parameters, and its class's.
- After `'^/` (a relative path): the members of what it names. In a module its own and its class's; in a sequence composite those of the module or phase class that runs it; in a value written for an embedded block (`FAIL_MONITOR/...`) that block's composite; in a phase class its definition's and algorithm's.
- After `MODULE_CLASS="`, `PLANT_AREA="`, `CONTROLLER="`, `DEFINITION="`, `CLASS="`, `SET="`, `COMMAND_SET="` and `PRIORITY_NAME="`: the names the export defines.

Measured on the real export: module tags in about 1 s the first time (while the shared index is built), under 1 ms after; other lists each in under 125 ms.

To edit values safely, use the tables ([Alarms](https://neuralinverse.com/docs/modules/dcs/alarms/), [Edit instances](https://neuralinverse.com/docs/modules/dcs/bulk-edit/)) or edit the text and let the [save guard](https://neuralinverse.com/docs/modules/dcs/save-and-import/#the-save-guard) check the save.
