GRAM Manual

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.

1. HOW TO USE GRAM FOR ANIMATION

1.1 Introduction

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 Simple Command Syntax

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 

1.3 Getting into GRAM

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.

1.4 Macro-store dumping

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.

1.5 SAVE and REStore

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.

1.6 The Animation Subsystems

At present there are three main sets of macros for composing an animation sequence which are accessible via the macros in MOVIES.

  1. ← DRAW FIGNAME: initiates the graphic input system on the Tektronix for creating and editing the graphic figure FIGNAME.
  2. ← EDITING SCRIPTNAME: for creating and editing the script SCRIPTNAME.
  3. ← VIEW SCRIPTNAME: for viewing on the Tektronix display selected frames of the sequence specified in SCRIPTNAME.

Details of commands within each of these subsystems are given in sections 2 to 6.

1.7 Further useful commands

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.

2. THE GRAPHIC EDITOR

2.1 Introduction

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.

Start point Line break 1 2 3 4 5 6 7 8 9 10 11 12 13 14

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.

2.2 Procedure

  1. Check that (a) Tektronix INPUT mode switch is on KEYBOARD and AUX and (b) the joystick is switched on.
  2. To create or edit a figure named HOUSE, for example, enter DRAW HOUSE.

    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.

  3. Command T terminates an edit and returns GRAM to normal input mode, but with the main input and output still assigned to the Tektronix. To return to the teletype enter TTY.

Other commands are listed in 2.5.

2.3 The Edit-Point

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.

"/> STRING OF POINT COORDINATES 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.

"/> EDIT POINT AT START OF FIGURE

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.

LAST POINT IN FIGURE EDIT POINT AT END POSITION

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.

START POSITION AND END POSITION EDIT POINT EMPTY FIGURE

2.3.6 The L command (see 2.5) to establish the first point in the figure.

SITUATION AFTER INSERTING FIRST POINT EDIT POINT (END POSITION) FIRST POSITION

2.4 Menu Facility

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:

  1. Direct Mode. Pressing M takes the Key-Point previously stored by a K command (see 2.5) as the indicated point.
  2. Indirect Mode splits a menu command into two operations. Pre-selects the command pointed at by the cursor. Then repositioning the cursor and pressing O Obeys the command using the coordinates indicated by the new position of the cursor.

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.5 Single Key Commands

W
Display Whole figure irrespective of the current edit-point.
A
Advance edit-point forwards to the next point in the figure. The system responds by displaying the line joining the previous edit-point to the new edit-point. One may advance through the figure in this manner as far as the end-position after the last point in the figure where nothing is displayed and subsequent A commands are ignored.
B
Backspace edit-point to previous point in figure. The response is the same as for A, and it cannot move back beyond the first point in the figure.
C
Display Current edit-point. This is to remind one where the current edit-point is. If the lines joining the point are already stored on the screen, this command merely produces an instantaneous flash at that point. If it is at the end-position, nothing is displayed.
S
Set edit-point to Start of figure. It also displays what is there, as in C.
E
Set edit-point to the End point in the figure, (and confirm by displaying the point). This is the last actual coordinate point, not the hypothetical end-position.
D
Delete current edit-point. The point is removed from the figure, and the next point forwards becomes the new edit-point.
I
Insert a new point before the current edit-point. The coordinates of the new point are taken from the position of the crosshairs cursor at the moment the I key is depressed. A line is drawn to the new point from the last edit-point as confirmation, and the new point becomes the edit-point.
L
Line) Insert a new point after the current edit-point, taken from the position of the cursor, and make the new point the edit-point. It is the normal command used for drawing a new figure, or adding to an existing one, as repeated use of L will add a string of new points in the forward direction.
N
New line-sequence. The same as L, except that it makes a line-break before the new point.
U
Undo. Makes a line-break between the current edit-point and the one before it.
J
J oin. This is the opposite of U. It erases any line-break between the current edit-point and the one before it, thus re-connecting them by a line.
R
Replace current edit-point by one defined by the cursor. This is the same as D followed by I.
H
Insert new point after edit-point. Horizontally aligned with edit-point. This is the same as L, except that it takes its x-coordinate from the cursor, but its y-coordinate from the edit-point.
V
Same as H, but Vertical.
F
Find next line-break. Advances through the figure until a line-break is found, and makes the following point the new edit-point. If no line-break is found, the edit-point becomes the end-position.
K
Set Key-Point. The coordinates of the current edit-point are stored as a key for future reference. This facility is a prerequisite for the commands that follow.
X
Change key-point X-coordinate to x-coordinate of current edit-point.
Y
Same for key-point Y-coordinate.
Q
Query key-point. Marks the current key-point with the character+.
G
Get Menu. Writes out menu down left-hand side of screen.
M
Menu command. This executes the command in the menu pointed at by the horizontal crosshair of the cursor. Any command which requires qualifying by a coordinate point uses the current value of the key-point.
P
Pre-set menu command. This is the indirect version of M. The cursor indicates the menu command which is to be obeyed by an O.
O
Obey menu command previously set by S. Qualifying coordinates (if needed) are taken from the current cursor position.
T
Terminate edit, and return to normal GRAM input mode. The Tektronix stays as the input device, however. To get back into graphic editing mode, enter DRAW again. If DRAWI is entered without giving a figure name, it defaults to the previous figure.

2.6 Menu Commands

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:

  1. The current edit-point becomes the centre of the arc.
  2. The point before the edit-point sets the start of the arc, and therefore its radius.
  3. The line joining the edit-point with the point following it determines the angle of the arc, i.e., its last point falls on this line.

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.

Examples: 1 2 3EDITPOINT 4 5 CW ARC DELETED DELETED EDIT POINT 1 2 3 4 5 6 7 8 9 10 EDIT POINT ACW ARC DELETED EDIT POINT EDIT POINT CW ARC CW ARC EDIT POINT EDIT POINT

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:

ACW ARC EDIT POINT EDIT POINT DELETED LINE BREAK EDIT POINT CW ARC LINE BREAK EDIT POINT DELETED

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:

EDIT POINT FIGURE BEFORE MOVE KEY POINT or CURSOR FIGURE AFTER MOVE

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:

EDIT POINT BEFORE AFTER KEY-POINT CURSOR

HEIGHT modifies the scaling along the y-axis in an equivalent manner to WIDTH.

Example:

KEY-POINT EDIT POINT CURSOR

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:

KEY-POINT EDIT POINT CURSOR BEFORE AFTER

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:

EDIT POINT BEFORE CURSOR KEY POINT AFTER

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:

INDICATED POINT BEFORE DEG? 90 INDICATED POINT AFTER

2.7 Filing figures on disc

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.

3. THE MACRO EDITOR

3.1 Introduction

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).

3.2 Procedure

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.

3.3 Commands

3.3.1 P n
Print n lines from current pointer position, with line numbers, (the first line in the macro is number 1). If the argument n is absent, only the current line is printed.
3.3.2 L n
Move edit pointer n Lines from current position.
3.3.3 LN n
Move edit pointer to start of Line No. n, irrespective of its current position.
3.3.4 S
Move edit pointer to Start of macro.
3.3.5 Z
Move edit pointer to end of macro.
3.3.6 IL
Insert Lines before the current line. On entering the command {without arguments), the prompt → is output on the next line. Then any number of lines of commands may be typed in (prompted by → at the start of each line). Entering ← or _ (underline) following a → terminates the sequence. e.g. Consider the following sequence of commands and replies:
←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.
3.3.7 DL n
Delete n Lines, starting with current line. If n is absent, the current line only is deleted. The line following the deletion becomes the current line.
3.3.8 RL n
Replace n Lines. This is equivalent to DL followed by IL. After entering RL n, the system replies with the prompt → , and so on as for IL. e.g.
←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.
3.3.9 FG
Find Group
Format: ← FG
 FIND: GROUP
Searches 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
←
3.3.10 RG
Replace Group
Format: ← RG
 REPLACE: GROUP 1
 BY: GROUP 2
First 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 Filing, Copying, Etc

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
←

4. PICTURE DEFINITIONS

4.1 Introduction

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.).

4.2 Picture definition

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:

HULL CABIN FUNNEL

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.

4.3 Sub-pictures

A picture definition may contain references to other picture definitions, by using the command PIC. Example:

SCENE FIG HOUSE PIC SHIP FIG MAN

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 Transformations

4.4.1 There is a range of commands for performing geometrical transformations on pictures. The most basic ones are:

MOVE x, y
Move (translate) picture by x and y screen units.
SCALE x, y
Scale picture by x and y along respective axes, expressed as percentages of original size.
ROT a
Rotate picture by a degrees about centre of screen, (positive anticlockwise, negative clockwise).

See 4.7 for complete range of transformation commands.

4.4.2 GRAM screen units are as follows:

CENTRE SCREEN -8191 8191 -6080 6080 0 0 Y X

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:

SHIP FIG HULL FIG CABIN FIG FUNNEL SCALE 100 50 MOVE 3000 0

The three figures will be displayed

  1. scaled by 100% in x (no change) and 50% in y '(squashed to half-height about centre screen), then
  2. moved 3000 screen units in the x-direction and none in the y-direction.

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

4.5 Order of transformations

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

4.6 Movers

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.

4.7 Summary of Transformation Commands

4.7.1 MOVE X x, y
Move picture x points horizontally and y points vertically. e.g. MOVE 2000 -3500 moves a whole picture 2000 screen points to the right and 3500 screen points downwards.
4.7.2 SCALE x, y
Scale picture x per cent horizontally and y per cent vertically, about centre of screen. Thus 100 means no change, 50 means reduce to half and 200 means increase to double. For example, SCALE 300 25 would expand a picture to 3 times its original width and squash it to a quarter of its original height.
4.7.3 ROT a
Rotate picture a degrees about centre of screen. Positive gives anticlockwise rotation. Negative gives clockwise rotation. e.g. ROT -90 would rotate the picture clockwise through a right-angle.
4.7.4 ABT x y command
Facilitates scaling or rotating ABouT the point x, y. For example ABT 2000 3000 SCALE 50 50 would reduce a picture to 50% of its original size about the point (2000, 3000). i.e. the point (2000, 3000) would stay put where it was. ABT -3400 -1020 ROT 270 would rotate a picture 270 degrees anticlockwise about the point (-3400, -1020). N.B. Where a picture is to be animated, the arguments of ABT and the arguments of the transformation command contained within it must be replaced by separate movers. For example ABT (PIVOT) ROT(ANGLE).

5. ANIMATION SCRIPTS

5.1 Introduction

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.

5.2 Example

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.

5.3 Parallel operations finishing at different frames

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.

STOPS TURNING FRAME 0 FRAME 10

5.4 Parallel operations starting at different frames

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
BAR CHART Frame Number Anim TURN Anim PLACE 0 5 8 10 18

5.5 Sequential operations

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:

Frame Number Anim TURN Anim PLACE 0 5 10 20

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:

Frame Number Anim TURN Anim PLACE (to 0,0) Anim PLACE (to 3000,0) 0 5 10 15 20 25 30

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:

Frame Number Anim TURN Anim PLACE (to 6000,-3000) Anim PLACE (to 6000, 3000) CANCELLED 0 5 10 15 20 25 30

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.

FRAME 0 FRAME 9 Jump FRAME 10 FRAME 20

5.6 AFTALL

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:

Frame Number Anim TURN Anim PLACE (to 6000,-3000) Anim PLACE (to 6000, 3000) 0 5 10 15 20 25 30 35 40

5.7 HOLD

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:

Frame Number Anim TURN Anim PLACE (to 6000,-3000) Anim PLACE (to 6000, 3000) 0 5 10 15 20 25 30 35 40 45 50

5.8 End of Sequence

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.

5.9 Definitions of Script Commands

5.9.1 Initialisation

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.

Animation

5.9.2 Animation

ANIM 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.

5.9.3 Delays

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).

5.9.4 Expression of duration in time units

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.

5.10 Animation Options

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.

5.10.1 LIN: Linear interpolation

LIN

A plain constant speed motion without any acceleration or deceleration frames.

This is at present the only option available.

6. VIEW

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.

6.1 View

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.

6.2 Terminate

To terminate the VIEW cycle type T after a question mark instead of a number. For example:

?101
Frame 101 displayed
FRAME 101
TT
←

6.3 Responses

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).

6.4 Erasing

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.

6.5 Forwards and Backwards

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
←

6.6 Next Frame

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

6.7 Negative Frames

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

6.8 Movements by Time

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
?

6.9 Sequence End

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.