Next: Template body: definitions Up: QSAS Template Language (QTPL) Previous: Plug-in declaration Contents
Subsections

- Argument syntax
- Argument datatype

## Plug-in argument list

### Argument syntax

Entry in argument list
  comprises three tokens inout datatype varname.

Input/output keyword
  inout may have the value `INPUT` or `OUTPUT`. `INPUT` arguments must not be modified by the plug-in; `OUTPUT` arguments are created and returned by it. Note that all inputs must appear before any outputs in the argument list.

Datatype keyword
  datatype indicates the type of data-object or value accepted or returned by that argument. Some datatypes include a variety of data-objects, and the QPLUGUI can perform implicit type-conversions as described below in §4.4.2, and summarised in Table 1.

Variable-name token
  varname is used to refer to this argument only within the body of the template, and is independent of any names used within the plug-in source-code or elsewhere. It must be a valid `QTPL` variable-name as defined above.

### Argument datatype

The `QTPL` argument datatype keywords are summarised in Table 1. For `INPUT` arguments some testing of the datatype will be performed against the types understood by QSAS as listed in table 1. For `OUTPUT` arguments the datatype information is used only for labelling the QPLUGUI slots, so incorrect `OUTPUT` datatypes may not be detected by the software but could confuse the user.

Output objects are placed automatically on the working list, with the exception of `TIME_INTERVAL` objects that are placed on the Time Interval List.

In all instances the input object available to the plug-in is of type QdObject and must be narrowed to the type expected. Because of the wide range of objects that may be narrowed to the requested data type, the plug-in code is responsible for performing the required narrow and test, and to ensure that xrefs such as FRAME or TIME_TAGS are present when required.

The datatypes `ANY_DATA_OBJECT` and `ANY_TIME_SERIES` are provided so that a single plug-in may operate analagously on a variety of types of data-object: e.g. a time-averaging plug-in might have an `ANY_TIME_SERIES` input and an `ANY_DATA_OBJECT` output argument, as well as other inputs to specify the details of the time-averaging, enabling it to time-average many different kinds of time-series and to return a new data-object of an appropriate kind to contain the result in each case.

Inputs requiring either a sequence of time tags, `TIMETAGS` or a time interval, `TIME_INTERVAL`, will accept any object with associated TIME_TAGS xref as well as time sequence or interval objects.

In addition, if an input is specified as `ANY_DATA_OBJECT` then the associated input slot will accept a numeric value typed into the input slot. This is converted into a FLOAT type data object before being passed to the plug-in.

Single numeric quantities `FLOAT` and `INTEGER`, and strings `STRING` accept both QSAS data objects of the appropriate type and values typed directly into the input slot. The interface between QSAS and the plug-in still uses a QSAS data-object of the appropriate type, but the Plug-in Window handles such quantities as text strings instead of requiring the user to first create a data-object. Thus the user can type a number directly into a `FLOAT` or `INTEGER` input slot, and text into a `STRING` input slot.

to

datatype in file.qtpl | QSAS data-object type | NOTES
| accepted in INPUT slot |
`ANY_DATA_OBJECT` | QdObject | All qdos objects inherit from QdObject
| float value | or float numeric value
`ANY_TIME_SERIES` | QdRScalarSeq | with TIME_TAGS Xref
| QdRMatrixSeq |
`MATRIX_TIME_SERIES` | QdRMatrixSeq | with TIME_TAGS Xref
`VECTOR_TIME_SERIES` | QdRMatrixSeq | with TIME_TAGS & Frame Xrefs
`SCALAR_TIME_SERIES` | QdRScalarSeq | with TIME_TAGS Xref
`MATRIX_SERIES` | QdRMatrixSeq |
`VECTOR_SERIES` | QdRMatrixSeq | with Frame Xref
`SCALAR_SERIES` | QdRScalarSeq |
`TIMETAGS` | QdTimeSeq |
| QdRMatrixSeq | uses TIME_TAGS Xref
| QdRScalarSeq | uses TIME_TAGS Xref
`TIME_INTERVAL` | QdTimeInterval |
| QdTimeSeq | uses start/end times
| QdRMatrixSeq | uses TIME_TAGS Xref
| QdRScalarSeq | uses TIME_TAGS Xref
`FLOAT` | QdRScalar |
| float value | numeric value typed in INPUT
`INTEGER` | QdRScalar |
| float value | numeric value (cast to int)
`MATRIX` | QdRMatrix |
`STRING` | QdString |
| string literal | string typed in INPUT

Table 1: `QTPL` datatypes, valid QPLUGUI inputs, and QDOS data-object types.

Next: Template body: definitions Up: QSAS Template Language (QTPL) Previous: Plug-in declaration Contents