Lines

FISH programs can be embedded in a FLAC3D data file, or may be entered directly into the console. Lines following the word fish define are taken to be statements of a FISH function. The function stops when the statement end is encountered. A valid line of FISH code must take one of the following forms:

  1. The line starts with a statement, such as if, loop, etc. (see the FISH statements).
  2. The line contains one or more names of built-in or user-defined FISH functions, separated by spaces (for example, fun_1 fun_2 fun_3).
  3. The line consists of an assignment statement (i.e., the expression on the right of the = sign is evaluated, and the value is given to the variable or function name on the left of the = sign).
  4. The line consists of a FLAC3D command, provided that the line is embedded in a section of FISH code delimited by command - endcommand.
  5. The line is blank or starts with a semicolon.

FISH variables and statements must be spelled out in full: they cannot be truncated, unlike FLAC3D commands.

FISH built-in library functions may use abbreviations if the name contains a ‘.’ and the result is unambiguous.

Continuation lines are allowed with the ... control statement at the end of the line.

FISH is “case-insensitive” at all times. Spaces are significant (unlike in FORTRAN) and serve to separate variables, keywords, etc.; no embedded blanks are allowed in variable or function names. Extra spaces may be used to improve readability (for example, by indenting loops and conditional clauses).

Any characters following a semicolon ( ; ) are ignored; comments may be embedded in a FISH program by preceding them with a semicolon. Blank lines may be embedded in a FISH program.

Inline FISH

In addition to the typical insertion of FISH via fish define, valid FISH statements may be included as their own lines as FISH fragments or within a command using the inline FISH facility. Anything found inside square brackets ( [ ] ) is interpreted in-place and immediately evaluated. This can be an efficient and preferable mechanism for simple, shorthand FISH operations. See Executing FISH: Inline FISH or FISH Fragments for further information.