This incomplete definition of a GRAM Manual was scanned in by Kate Sullivan in May 2020 from the Tony Pritchett Archives. It consisted of 65 numbered pages and just stops mid section. It seems likely there only a subset of the complete document remains rather than it was unfinished. It relates to the second and fuller version available on the Open University Nova computer.
GRAM is a language consisting of a set of low-level functions, including some for performing geometric transformations and displaying graphics.
Sets of macros, which are programs written in GRAM, are supplied to provide a high-level interactive interface with the user. For instance, there are macros for drawing, editing and animating pictures.
The advantage of this language structure is that it allows the advanced user to write new macros to suit his own application. (See section xx ).
The macros appropriate to the current task reside in a region of memory called the macro-store, together with all other user specific information such as picture definitions. Sets of macros for different applications can be loaded into the macro-store from disk-files when required.
1.2.1 The basic form of GRAM command is a command name, optionally followed by one or more arguments, separated by spaces and terminated by the return key.
Examples: EDIT SEQ1 FG LIN 150 STOP
1.2.2 More than one command may also be typed on one line, using commas to separate them, e.g. EDIT CREDITS, FG FIG FRED, DL 2
1.2.3 Arguments may be either names or numbers. A name may be invented to identify an entity created by the user (such as a picture component or figure) and can consist of the letters A-Z and the digits 0-9 but must start with a letter.
The number of characters in a name is only limited by the length of the input line.
e.g. FRED ABC Z9930
A number may consist of up to four digits optionally preceded by a minus sign, representing an integer between -8191 and 8191.
e.g. 900 2001 -3 120 0 -4096
To enter GRAM from RDOS simply type GRAM. The program replies:
GRAM ENTERED ←
The backward-arrow is a prompt which is printed each time it is ready for a new command.
At each keyboard wait, i.e. whenever the prompt is output, the contents of the whole macro-store is dumped into the disk-file GDUMP.
Each time GRAM is entered from RDOS, the contents of GDUMP are loaded back into the macro-store, thereby restoring it to the state it was in when GRAM was last used. This feature is especially useful when either a GRAM or a FORTRAN error has caused an exit from GRAM back into RDOS. On restarting GRAM, the macro-store is automatically restored to its state immediately prior to the keyboard command which led to the error.
In addition to the automatic dumping and restoring of the macro-store, these two commands may be used to dump to and restore from a disk file other than GDUMP.
← SAVE FRED writes the current macro-store contents to the disk file FRED.
← RES FRED writes the current macro-store contents to the disk file FRED.
The disk file MOVIES contains a copy of the macro-store which is empty apart from the basic macros for animation. Therefore, before starting work on a new animation sequence one should type ← RES MOVIES.
Example: Suppose one needs to suspend work temporarily on an animation sequence and start a new one, then later going back to the old sequence, one would type:
← SAVE FILM 1 ← RES MOVIES
The current state of the first sequence is filed in FILM 1. Then later:
← SAVE FILM 2 ← RES FILM 1
would allow one to carry on developing the original sequence with the second sequence suspended in file FILM 2.
At present there are three main sets of macros for composing an animation sequence which are accessible via the macros in MOVIES.
Details of commands within each of these subsystems are given in sections 2 to 6.
1.7.1 ← LEFT: prints the amount of empty space left in the macro-store, measured in items. One pair of coordinates representing a point in a figure occupies two items.
If any command leads to more space being requested in the macro-store than there is left, GRAM will terminate with a STACK FULL message. On re-entering GRAM, the macro-store will be precisely at it was before the fatal command was given.
A little extra space can often be gained without having to delete anything by giving the command ← GARB, which attempts to rid the macro-store of redundant garbage.
1.7.2 ← STOP: terminates GRAM and returns to RDOS. It is inadvisable to terminate using Control-A, as it tends to leave files open, causing problems on re-entry.
1.7.3 ← TEK: transfers the main console from the teletype to the Tektronix storage tube terminal.
N.B. On the Tektronix and Diablo 1620 terminals, ← (back arrow) is represented as _ (underline).
_ TTY returns the main console to the teletype.
1.7.4 ← DIR: prints a list of all user invented names in the current macro store. A macro does not need to be defined in order to appear in this list; its name present in another macro is sufficient.
This consists of a subset of the MOVIES macros, for creating and editing figures on the Tektronix storage-tube display using its joystick and crosshairs cursor.
A figure is defined as a series of points joined by straight lines, and is created by indicating the points with the joystick and cursor.
The sequence of lines need not be continuous, in other words, two consecutive points need not be joined by a visible line. This is termed a line-break.
The crosshairs cursor will then appear on the Tektronix screen and GRAM will be switched to Graphic Input Mode, where only single-character commands from the Tektronix keyboard are permitted.
In Graphic Input Mode, the presence of the crosshairs cursor indicates that the system is waiting for a command. Pressing a single key on the Tektronix keyboard makes the cursor disappear, but to activate the command one must also press the return key. Some commands make use of the cursor coordinates at the moment the first (command) key is pressed.
Other commands are listed in 2.5.
2.3.1 The graphic editor has a pointer which can move backwards and forwards through the string of coordinates comprising a figure. The coordinate point at which it is currently positioned is called the edit-point.
2.3.2 Most graphic editor commands are concerned with moving the edit-point through the figure, for deleting, inserting and modifying the coordinates at the edit-point.
2.3.3 The DRAW command sets the edit-point at the start of the figure specified as its argument.
Any subsequent command to move the edit-point backwards from the start point is ignored.
2.3.4 The most forward position that the edit-point can assume is a hypothetical end-position after the last coordinate point in the figure.
Any command to move forward from this position is ignored.
2.3.5 If the figure named in the DRAW command did not previously exist, a new, empty figure is created which so far contains no points. The edit-point assumes the hypothetical end-position state, which in an empty figure is the same thing as the start position.
2.3.6 The L command (see 2.5) to establish the first point in the figure.
2.4.1 The number of commands comprising the Graphic Editor has expanded beyond the number of single keys on the Tektronix keyboard which can be used for such commands. Therefore, some commands are activated by a menu.
2.4.2 The menu is a list of commands written down the left-hand side of the Tektronix screen, which is obtained by the single-key command G (for Get Menu).
2.4.3 To access a menu command, line up the horizontal cross-hair of the cursor with the required command in the menu and press either M or P (followed by Return).
2.4.4 Some menu commands need to be accompanied by the indication of a coordinate point. This is achieved by providing two modes of obeying the menu:
2.4.5 O may be entered repeatedly, even interspersed by other single-key commands, and it always activates the last command set up by a P.
2.4.6 All menu commands may be used in both Direct and Indirect modes. For those that do not need a coordinate point indication, the Indirect mode is merely a method of pre-selecting the command.
2.6.1 The following single-key commands are duplicated in the menu:
I - INSERT L - LINE H - HORIZONTAL LINE V - VERTICAL LINE R - REPLACE
The purpose of this duplication is so that by using the direct menu executor M, coordinates Can be taken from the Key-Point rather than the cursor position. The usefulness of this can be illustrated by an example:
In order to add a line to join up with the first point of a figure so that it becomes a closed outline,
1) Enter S go to start point of figure 2) Enter K make Key-Point equal to Start-point 3) Enter E join to last point in figure so far 4) Line up cursor against L - LINE on menu 5) Enter M draws line from last point to Key-Point(= Start point).
2.6.2 SET KEY provides a means of setting the Key-Point to the cursor position (instead of the Edit-Point as with K) by entering P followed by O. Entering M with this menu command effectively does nothing apart from confirm the Key-Point, since it will simply reset it to its current value.
2.6.3 The next pair of menu commands, CW ARC and ACW ARC, insert circular arcs into a figure. An arc is created around the angle subtended by three existing points in the figure, as follows:
CW ARC constructs clockwise from the start point.
ACW ARC constructs anticlockwise from the start point.
An arc is approximated to by a number of points which are inserted into the figure in place of the edit-point and the one following it. The point preceding the edit-point, being the start point of the arc, naturally remains unchanged. The end-point of the arc becomes the new edit-point.
The number of points in the arc is calculated by the system as a function of its angle and radius, in order to give a reasonably smooth arc without being extravagant with points.
The ARC commands are not affected by whether they are executed by direct mode (M) or indirect mode (P-O), other than the fact that, with the latter, execution is delayed until the O is entered.
In order to construct an arc, as described above, the edit-point may not be the first or last point in a figure or have a line-break on either side of it.
If the edit-point is the first point in a figure, or is preceded by a line-break, the ARC commands have no effect.
If the edit-point is the last point in a figure, or is followed by a line-break, an ARC command will construct a complete circle round the edit-point as centre, starting and finishing on the preceding point. Examples:
2.6.4 The remainder of the menu commands are concerned with wholesale modifications to a whole figure, i.e. moviny, re-scaling and rotating.
With these commands, it is often more difficult to regain the original figure if a mistake has been made than is the case with commands that affect only one or two points. Therefore, when executed, they do not immediately modify the stored figure, but merely display a modified copy for approval. This can be tried any number of times until one is satisfied with the result, and only then permanently modify the figure by the command CONFIRM.
In describing these commands, the term Indicated Point is used to mean the Key-Point if the command is executed directly by M, or the cursor position if executed indirectly by P followed by O.
MOVE shifts the whole figure by an amount equivalent to the position of the Indicated Point relative to the current Edit-Point.
Example:
The following four scaling commands operate only in indirect P-O mode, since they require separate values for Key-Point and cursor.
WIDTH modifies the scaling along the x-axis so that the current Edit-Point moves into vertical alignment with the cursor.
The scaling takes place about the current Key-Point.
Example:
HEIGHT modifies the scaling along the y-axis in an equivalent manner to WIDTH.
Example:
SCALE BY X scales both axes equally (about the Key Point) so that the current Edit Point moves into vertical alignment with the cursor.
Example:
SCALE BY Y scales both axes equally (about the Key Point) so that the current Edit Point moves into vertical alignment with the cursor. Example:
ROTATE DEGREES rotates the figure about the Indicated Point by a given number of degrees. On execution, DEG? is printed on the screen, and one must then enter the number of degrees on the keyboard. A negative number gives clockwise rotation, otherwise it is anticlockwise.
Example:
2.7.1 When a figure has been created, it can be stored away permanently in a disc file by entering FILE fig (where fig is the name of the figure), having first terminated the edit by a T command. This does not delete it from the macro store.
2.7.2 Having FILED a figure, it can be deleted from the macro store to make more space available by entering DELETE fig .
2.7.3 GET fig reads the figure fig back into the macro store from disc, overwriting any existing version of fig.
2.7.4 COPY fig 1 fig 2 can be used to make fig 2 into a copy of fig 1 (within the macro store). Any existing fig 2 is overwritten.
2.7.5 A more detailed description of FILE, DELETE, GET and COPY is given in 3.4.
This is a subset of the MOVIES macros which is necessary for creating and modifying user-invented macros such as picture definitions (section 4) and scripts (section 5).
It is a line-orientated editor, since it has a pointer which can move through a macro line-by-line, and can only point to the beginning of a line. Most editing commands are concerned with moving the pointer and deleting, inserting or replacing lines.
Despite the fact that lines are significant, it is not a text-editor, since macros are not held in the macro-store in character form, but item-by-item. (A name or number is a single item, see para 1.2.3).
To create or edit a macro named FRED, enter EDIT FRED on the keyboard. This system replies EDITING FRED and sets the edit-pointer to the first line in FRED. If FRED did not exist, it creates an empty macro of that name.
From then on all the editing commands listed in para 3.3 are available for use.
Existing GRAM commands also remain available, so there is no need for an explicit exit from the EDIT system. However, on calling up other subsystems such as DRAW or VIEW, the EDIT commands are lost, and EDIT must be re-entered to resume macro-editing.
←P 2 14 ANIM LIN 5 15 CH PLACE 6000 0 ← IL → ANIM LIN 10 → CH PLACE 0 0 → THEN → ← (or_ (underline)) ← P 5 14 ANIM LIN 10 15 CH PLACE 0 0 16 THEN 17 ANIM LIN 5 18 CH PLACE 6000 0 ←Note that on completion of the insertion, the edit pointer is at the start of the inserted lines.
←P 3 14 ANIM LIN 10 15 CH PLACE 0 0 16 THEN ← RL 2 → AFTER 15 → ANIM LIN 20 → CH PLACE 1000 0 → CH ANGLE -180 → ← ← P 5 14 AFTER 15 15 ANIM LIN 20 16 CH PLACE 1000 0 17 CH ANGLE -180 18 THEN ←In describing the formats of the next two commands, prompts output by the system are underlined.
Format: ← FG FIND: GROUPSearches forwards from the current pointer position for the item or group of items typed in after the prompt FIND: If the group is found, the pointer is set to the line containing it, otherwise the message GROUP NOT FOUND is output, and the pointer is at the end of the macro. e.g. carrying on from last example:
← FG FIND: PLACE 1000 ← P 16 CH PLACE 1000 0 ←
Format: ← RG REPLACE: GROUP 1 BY: GROUP 2First searches for the group typed in after the prompt REPLACE: (as with FG). Then if successful, gives the prompt BY: on the next line, and the group of items intended to replace it is typed in. (The number of items in the replacement group need not be the same as in the group it replaces, in fact it can be none at all.) e.g.
← P 16 CH PLACE 1000 0 ← RG REPLACE: 1000 0 BY: 2000 1000 ← P 16 CH PLACE 2000 1000
3.4.1 FILE name will write into a disc file~ the macro called name in the macro-store. It may be a script, a picture definition or even a figure. The disc file is in text form. It will overwrite any existing file called name. The reply name FILED is printed when the filing operation is complete. Example:
←FILE FRED FRED FILED ←
If name does not exist in the macro-store, name UNDEFINED will be printed instead, and the disc file name will remain undisturbed. Example:
←FILE WRONG WRONG UNDEFINED ←
3.4.2 GET name reads the macro name from a disc file back into the macro store, overwriting any existing macro called name. On completing the read, name LOADED is printed. Example:
←GET FRED FRED LOADED ←
If name has not previously been written to disc by a FILE command, there wi11 be no response. Example:
←GET FRED ←
This means that there is no FRED stored on disc, and any existing FRED in the macro-store is undisturbed.
3.4.3 COPY name1 name2 makes the macron name2 into a copy of name1.
This this place entirely within the macro-store and does not involve the disc, (copying disc files must be done by XFER in RDOS).
If name2 already exists, it is overwritten. Example:
←COPY BILL FRED ← makes FRED into a copy of BILL
If name1 is nonexistent name2 becomes an empty macro.
3.4.4 DELETE name1 name2 name3 ... deletes from the macro-store all the macros named as arguments. (To delete a macro stored on disc, use DELETE in RDOS). Example:
←DELETE TOM DICK HARRY FRED ←
3.4.5 LIST name prints a listing of the macro name with a heading and line numbers.
←LIST SCRIPT1 SCRIPT1 1 PICTURE ROLL 2 DEF TORN 0 3 DEF PLACE -6000 3000 4 ANIM LIN 5 5 CR TURN -720 6 CH PLACE 6000 -3000 ←
If (LPT) is included as an argument, the listing is output on the lineprinter instead of the current console (Teletype or Tektronix). Example:
←LIST (LPT) SCRIPT1 ←
The Graphic Editor provides a means of creating and editing single figures. A picture may consist of more than one figure, and may also subject these figures to various transformations (translation, scaling, rotation etc.).
A picture definition is a macro containing GRAM commands which define the components of a picture, and can be created using the Macro Editor (section 3), as the following example demonstrates:
4.2.1
←EDIT SHIP EDITING SHIP ← IL (insert lines) ← FIG HULL Picture Definition ← FIG CABIN Picture Definition ← FIG FUNNEL Picture Definition ←
4.2.2 The picture definition SHIP may be confirmed by using the LIST facility, example:
←LIST SHIP 1 FIG HULL 2 FIG CABIN 3 FIG FUNNEL ←
4.2.3 The following convention will be used to represent macros in this text, in order to avoid repeating Macro-Editor syntax:
SHIP
FIG HULL FIG CABIN FIG FUNNEL
4.2.4 The above example defines the picture SHIP to consist of the figures HULL, CABIN and FUNNEL, which have already been created by the Graphic Editor. Example:
4.2.5 Entering DISP SHIP on the keyboard will cause the whole picture SHIP to be displayed:
4.2.6 The command FIG, when executed, causes the figure named as its argument to be copied into a graphic stack, without displaying it. DISP first executes the contents of the picture definition given as argument, then displays the total contents of the stack.
A picture definition may contain references to other picture definitions, by using the command PIC. Example:
This is equivalent to:
FIG HOUSE FIG HULL FIG CABIN FIG FUNNEL FIG MAN
SHIP is thus a sub-picture of SCENE. There is no limit to the nesting of sub-pictures within pictures.
4.4.1 There is a range of commands for performing geometrical transformations on pictures. The most basic ones are:
See 4.7 for complete range of transformation commands.
4.4.2 GRAM screen units are as follows:
4.4.3 Transformation commands can be added to a picture definition. They must follow all FIG and PIC commands, and they apply to the whole picture (or sub-picture). Example SHIP:
The three figures will be displayed
4.4.4 Transformations within a picture definition operate on the whole of that particular picture. They cannot be applied selectively to different figures or sub-pictures by interspersing FIG or PIC with transformation commands. Example:
FIG HULL SCALE 100 50 FIG FUNNEL MOVE 3000 0 FIG CABIN
This will not work, because the transformations are stored in a transformation matrix,which is applied to the co-ordinates in the graphic stack only at the end of a picture definition.
4.4.5 Selective transformations on parts of a picture can only be achieved by creating sub-pictures containing the relevant transformation commands.
The rule is that transformations only apply to the picture (or sub-picture) containing them, and to all sub-pictures of that picture.
Example (1): Figure Lighthouse
Using the last definition of SHIP and defining LHOUSE as:
FIG LIGHTHOUSE SCALE 50 50 MOVE -5000 2000
then the picture
PIC LHOUSE PIC SHIP
would give:
Example (2): SHIPS
Defining two ships, SHIP1 and SHIP2, using the PIC SHIP defined earlier:
SHIP1 PIC SHIP MOVE -4000 -2000 SHIP2 PIC SHIP SCALE -50 50 MOVE 6000 2000 SHIPS PIC SHIP1 PIC SHIP2
would produce:
This is an example of a multiple-instancing of one picture. Notice also that negative scale percentages have the effect of reversing the image.
Applying also a rotation to the whole picture would give SHIPS as follows:
SHIPS PIC SHIP1 PIC SHIP2 ROT -45
The transforming commands are applied in the order which they appear in picture definitions. Order is normally significant, since, for instance, a MOVE followed by a ROT has a different effect from a ROT followed by a MOVE. Example:
SHIPS PIC SHIP MOVE -5000 4000 ROT -90
whereas:
SHIPS PIC SHIP ROT -90 MOVE -5000 4000
gives:
In order to rotate a picture about a point other than the centre of the screen, one must first move it so that the rotation point is at the centre of screen, rotate it, then move it back again. However, there is a command ABT (ABouT) which enables one to do this with only one command, see 4.7.
Suppose figure WHEEL was drawn with its centre 3000 points to the left of the screen centre. Rotating the wheel about the centre would rotate both its position and the orientation of the wheel. To just rotate the wheel would be achieved by:
FIG WHEEL MOVE 3000 0 ROT 45 MOVE -3000 0
Constants as arguments in transformation commands are only useful for producing static pictures. In order to animate a picture, variable arguments known as movers are needed. A single variable name, enclosed in round brackets, can replace one or more numerical arguments. Example:
GOSHIP is defined as: PIC SHIP MOVE (POSN)
Then the mover POSN can be defined using the command DEF. For example:
DEF POSN 1000 2000
whence MOVE (POSN) becomes equivalent to MOVE 1000 2000.
Therefore, (using the definition of SHIP in 4.4.3):
DEF POSN -6000 0 DISP GOSHIP
draws the boat to the very left of the screen while
DEF POSN -3000 0 DISP GOSHIP
draws in nearer to the centre and:
DEF POSN 0 0 DISP GOSHIP
draws it at the centre.
This would be a rather crude and laborious method of . doing animation. However, there are a set of powerful macros for animating automatically, described in Section 5.5.
The picture definitions dealt with in section 4 only describe static pictures. To achieve animation, the arguments of relevant transformation commands must be variables, which in this context are referred to as movers, ( See section 4.6).
There is a set of macro commands for animation, which progressively change movers according to frame numbers. A sequence of these commands stored in a macro form a script.
Starting with a figure called WHEEL:
Let us create a picture description.
ROLL FIG WHEEL SCALE 30 30 ROT (TURN) MOVE (PLACE)
It gives WHEEL a fixed scale reduction of 30%, and the movers TURN and PLACE give it freedom to rotate and move anywhere about the screen.
And, using the Macro Editor in the same way as for picture descriptions, let us create a script:
PICTURE ROLL DEF TURN 0 DEF PLACE -6000 3000 ANIM LIN 5 CH TURN -720 CH PLACE 6000 -3000
This script describes a sequence in which WHEEL, in the space of six frames (start frame plus five) moves from top left to bottom right of the screen simultaneously rotating clockwise by two revolutions.
Let us deal with the animation commands one at a time:
PICTURE ROLL indicates that the picture to be animated is ROLL.
A PICTURE command must appear at the beginning of every script.
DEF TURN 0 defines the initial rotation angle of the wheel to be zero.
DEF PLACE -6000 3000 defines the initial position of the wheel to top left of screen.
All movers must be initialised by a DEF command.
ANIM LIN 5 means 'animate linearity for 5 frames'.
ANIM sets the animation parameters for a sequence. The first argument specifies the animation option, which refers to the kind of motion, we know it accelerates and decelerates at the beginning and end of the movement. The options are given in section 5.10). LIN is a plain linear motion with sudden start and stop.
The second argument specifies the number of frames to the end of the movement. There will naturally be six frames altogether in the sequence, since the movement ends on frame 5, which is five frames after the initial frame, frame 0.
CH TURN -720 means change the mover TURN from its existing value to -720 in the manner and in the number of frames set up in the last call of ANIM. Two revolutions clockwise is equivalent to -720 degrees.
CH PLACE 6000 -3000 means change PLACE to 6000 -3000 according to last call of ANIM.
The arguments of CH from the second to the last always contains the new end values to which the animation changes the mover. There is a variable number of these arguments depending on the requirements of the particular mover.
Still using the above example, see what happens if another ANIM command is inserted between the two CH commands:
PICTURE ROLL DEF TURN 0 DEF PLACE -6000 3000 ANIM LIN 5 CH TURN -720 ANIM LIN 10 CH PLACE 6000 -3000
This means that both operations will still start at the same time, but now TURN will reach two revolutions and stop at frame 5 whereas PLACE will take until frame 10 to reach its final position.
The command AFTER n will delay the start of all following animation operations until n frames after the start of the operation preceding it. For example:
PICTURE ROLL DEF TURN 0 DEF PLACE -6000 3000 AFTER 5 ANIM LIN 5 CH TURN -720 AFTER 3 ANIM LIN 10 CH PLACE 6000 -3000
The command THEN (no arguments) starts the next animation operation immediately after the finish of the preceding one. For instance, if AFTER 3 in the last example is replaced by THEN, WHEEL will rotate for 5 frames then move from top left to bottom right for 10 frames, as in the following bar chart:
Note that THEN causes the following operation to start following the final frame of the operation immediately preceding it in the script, which is not necessarily the last operation to finish. Consider the following script:
PICTURE ROLL DEF TURN 0 DEF PLACE -6000 3000 ANIM LIN 20 CH TURN -720 AFTER 5 ANIM LIN 5 CH PLACE 0 0 THEN ANIM LIN 5 CH PLACE 6000 0
which will animate according to the following bar chart:
If a new operation on a mover is started before a previous operation on the same mover is finished, the first operation is interrupted. The second operation starts with the theoretical end value of the first operation rather than its current value at the time of interruption. For example:
PICTURE ROLL DEF TURN 0 DEF PLACE -6000 3000 ANIM LIN 20 CH PLACE 6000 -3000 ANIM LIN 10 CH TURN -720 THEN ANIM LIN 20 CH PLACE 6000 3000
will result in the following bar chart:
WHEEL starts at top left and moves towards bottom-right, simultaneously rotating. By frame 9 it has reached almost half way across the screen. Between frames 9 and 10 it jumps to its bottom right end position and starts moving up to top right, no longer rotating.
This command starts the following animation operation immediately after all current operations have finished. (it has the same effect as THEN only if the preceding operation is also the last to finish).
Using the last example, replacing the THEN by an AFTALL would result in the following bar chart:
The command HOLD n delays the start of the next animation operation until n frames after the finish of all preceding operations.
For example, replacing AFTALL by HOLD 10 in the last example gives this bar chart:
A sequence is assumed to end when all the outstanding operations have finished, including delaying operations such as HOLD. It does not have to be explicitly stated in the script.
PICTURE name
For example PICTURE SHIP
Indicates that name is the head picture definition (optionally containing sub-pictures) to be animated by the script.
This command is compulsory and should be the first one in the script.
DEF mover values
Defines the initial value of a mover, mover is the mover name.
values is a list of one or more numerical values, or it could be another mover name in brackets, example:
DEF POSN1 2000 2000 DEF POSN2 (POSN1)
in which POSN2 is defined to be the same as POSN1. All movers must be initialised.
AnimationANIM option nf
Sets the animation option and duration for the mover changes that follow it. option is the name of the type of movement required, (see 5.10).
nf is the number of frames over which the animation is to take place. It can optionally be expressed in seconds or milliseconds (see 5.9.4). For example:
ANIM LIN 250 ANIM LIN 10 SEC
CH mover values
Changes mover from its current state to values in the manner set by option and the number of frames set by nf in the last ANIM command. For example:
CH P0SN 4000 -1500 CH ANGLE 90
values could also be a variable previously set by a DEF command. For example:
DEF TOPRIGHT 8000 6000 CH POSN (TOPRIGHT)
which would have the same effect as
CH POSN 8000 6000
At the start frame of an animation operation a mover still has its previous values. The end frame of an animation operation is start frame + nf when a mover takes up its new values as specified in the CH command.
AFTER nf
Sets the start frame of following animation operations to nf frames after the start frame of the preceding operation. For example:
AFTER 320
THEN
Sets the start frame of following animation operations equal to the end frame of the preceding operation (which is not necessarily the last one to finish).
AFTERALL
Sets the start frame of following operations to the end frame of the last of all preceding operations to finish.
HOLD nf
Delays the start frame of following operations until nf frames after. The end frame of the last of all preceding operations to finish. Example:
HOLD 375
(Note that HOLD 0 is equivalent to AFTALL).
Whenever nf (in all the above commands) is just a number, it means a duration of a number of frames. But by addition of the suffixes SEC or MSEC it can also be expressed in terms of seconds for milliseconds. One second is equivalent to 25 frames, which is the standard speed for film transmitted via television in Europe.
The following forms for nf are permissible:
Meaning n n frames n SEC n seconds = n × 25 frames n MSEC n milliseconds = n/40 frames m SEC n m seconds + n frames = m × 25 + n frames m SEC n MSEC m secs + n msecs = m × 25 + n/40 frames Examples AFTER 10 SEC AFTER 350 ANIM LIN 400 MSEC ANIM LIN 20 HOLD 20 SEC 12 HOLD 512 AFTER 4 SEC 500 MSEC AFTER 112
Note: MSEC rounds down to a whole number of frames, thus 500 MSEC = 12 frames.
These are a set of names which specify the type of animation movement required (e.g. whether or not there is an acceleration and deceleration at the ends of the movement). One must be present as first argument of an ANIM command.
LIN
A plain constant speed motion without any acceleration or deceleration frames.
This is at present the only option available.
With this facility it is possible to display individual frames of an animated sequence defined in a script (see section 5) on the Tektronix screen.
To view a sequence, enter VIEW scriptname. For example:
VIEW SEQ1
The system responds by printing a question mark, and one then types in the number of the frame to be viewed (the first frame in any sequence is 0), whereupon the frame is displayed.
Then FRAME followed by its number is printed in confirmation, followed by another question mark asking for a new frame number. The screen is not automatically erased between frames. It must be erased manually if desired. For example:
?230 Frame 230 is displayed FRAME 230 ?500 Frame 500 is displayed ?45 6 Frame 46 is displayed and so on
Note that the frame numbers do not have to be in ascending order. One may move backwards as well as forwards through a sequence.
To terminate the VIEW cycle type T after a question mark instead of a number. For example:
?101 Frame 101 displayed FRAME 101 TT ←
Although the frame can only be displayed on the Tektronix screen, the control and response cycle remains either with the teletype or the Tektronix, which ever is the current console (see 1.7.3).
A preceding frame is not automatically erased before the next one is displayed, since it is often desired to have a build-up of successive frames on the screen. Screen erasure is done manually using the erase button on the Tektronix.
As an alternative to giving absolute frame numbers, typing F or B after a number converts it into a Forwards or Backwards move by a number of frames relative to the last frame displayed. For example:
←VIEW FILM 3 ?200 FRAME 200 ?10F FRAME 210 ?5B FRAME 205 ?T ←
If the question mark is simply followed by a carriage return, this is equivalent to entering 1F, providing an easy way of moving forwards to the next frame. For example:
?450 FRAME 450 ? FRAME 451 ? FRAME 452 ? Etc
On entering VIEW, the current frame number is set to -1, so that entering carriage return as the first response displays frame 0. For example:
←VIEW FILM 3 ? FRAME 0 ? etc
However, negative-numbered frames are not displayable, and any attempt to move backwards beyond frame 0 will merely display frame 0. For example:
←VIEW FILM 3 ?5F FRAME 4 ?6B FRAME 0 ?2F FRAME 2 ? etc
Entering a number followed by SEC or MSEC displays a frame that number of SEConds or milliSEConds from 0, on the basis of 1 second = 25 frames, which is the standard speed for television films. In other words, SEC multiplies the number by 25 to obtain the frame number, and MSEC divides it by 40 (rounding downwards). For example:
←VIEW FILM 3 ?3 SEC FRAME 75 ?4500 MSEC FRAME 112 ? etc
6.8.1 It is also possible to express it in seconds and milliseconds, as follows:
?10 SEC 200 MSEC FRAME 255
6.8.2 Also, m SEC n (without the MSEC) would mean m seconds plus n frames. For example:
←VIEW FILM 3 ?10 SEC 7 FRAME 257 ?
The end of a sequence is defined to be the last frame of the last outstanding operation (see 5.8).
If one tries to display a frame numbered higher than the last frame, no picture is displayed and instead it prints the message
SEQUENCE ENDS AT FRAME n
This is where the archive stops. It is unclear whether the Manual itself was completed or not.