This manual describes the version of SPROGS designed also to cater for the new micro,film recorder, the III FR80, obtained by the Atlas Computer Laboratory. The various sections describe the new facilities offered by this device, and the software that has been written to make use of them. There are also sections on the conversion of programs originally designed for the SD4020, and the running of jobs previously run under SMOG (a simpler version of SPROGS).
It is assumed that the user is familiar with existing SPROGS manuals, and, in the case of SMOG jobs, with the SMOG manual.
The Atlas Computer Laboratory has purchased an FR80 Microfilm Recorder from Information International Incorporated to replace the SD4020. This device, apart from being more accurate, has a number of extra facilities which will enable better pictures to be produced faster. The main features are:
The FR80 can only mount one camera at a time (the SD4020 could have both hardcopy and one of the microfilm cameras mounted together). However, there are more cameras available:
The FR80 has an addressable area of 16384x16384 points with origin at the bottom left-hand corner (compared to 1024xl024 points on the SD4020 with origin at the top left-hand corner). However, each camera has a fixed aperture plate, which prevents the whole of the screen being seen. Also, the area visible through the aperture is normally greater than the area moved by advancing the frame, so adjacent pictures drawn to fill the aperture will overlap. This means that frames may be abutted by confining the picture to a specifiable area within the aperture (on the SD4020, abutment is possible only on 35mm by special order), and can be spaced "normally" by further confining the picture. The appropriate values for aperture, abutment and cine picture on each camera are given in the Appendix.
It is possible to vary the intensity of the beam over a range of 256 values (on the SD4020, intensity variations on vectors are available only by overstriking). Since if is also possible to overstrike on the FR80, an almost continuous grey-scale can be produced. The intensity selected affects both vectors and characters.
As mentioned earlier, the dual movement camera has a number of colour filters which can be selected by program and inserted in front of the film. The filters are clear, cyan, magenta and yellow, and a subtractive process is used to obtain the primary colours (eg yellow and cyan together will produce green). The user must adjust intensity himself to get the desired shade. Since the primaries require a double filter, users who are not particular about which colour they have are advised to use the single-filter colours (cyan, yellow and magenta).
The FR80 is able to draw full-screen-width lines (unlike the SD4020). Consequently, lines will not have to be split by the low-level software. In general, this will produce fewer orders on tape, and will make SPROGS faster.
Unlike the SD4020, there are no hardware-produced characters as such. Instead, hardware exists to interpret a special packed-character mode, which allows many fonts to be defined. Initially, two fonts will be available. It is also possible to specify character height, spacing, rotation and line spacing, and whether the characters are to be equispaced or proportionally spaced without redefining the font.
The FR80 has two tape decks; one compatible with the current SD4020 deck (7-track) and the other a 9-track 1600 'bpi deck.
The software in the FR80 will interpret two consecutive filemarks as "end of tape". Consequently, users must not write more than one filemark at a time.
The standard output from the FR80 will be in cine mode (frames upright when film is lying from top to bottom. It is possible to rotate this image to comic mode: (frames upright when film is lying from left to right) without physically moving the tube. Thus one can switch from cine to comic quickly with no operator intervention. The standard output from the SD4020 was cine mode. Output to microfiche will be comic mode.
There is no hardware forms flash facility, whereby a previously prepared slide can be superimposed on any given frame by optical projection (this SD4020 feature is at present used only on the identification frame).
The FR80 will eventually replace the SD4020 and new SPROGS routines have been provided to exploit its enhanced performance. For the moment, the old SD4020-specific routines will be preserved, with FR80 equivalents. These will be withdrawn at some future time.
The FR80 will be accessible as device 1, 2, or 32 in DVOUT. Only one of these numbers should be used and, at a later date, numbers 2 and 32 may be re-assigned. The COMMON blocks SDH, SDM, SDBOTH will be removed later.
The specific camera required must be selected either by the routine CAMERA, or by one of the standard device setting routines (see Section 4).
The routine EXPRED will cease to function for the FR80. It will thus affect only the Lineprinter Graphical device. Abutment will be achieved by other means (see later).
The routine: FLASH will be removed.
The routine: NOSD will prevent the FR80 routines being loaded. This routine will be removed later.
The routines: SDFILM and SDHARD will set region 1 with limits 0,0,1023,1023 as before, but will map this onto the visible area of the black and white 16mm single movement camera, and the 'multi frame' hardcopy camera respectively (see Section 4.1). Both these routines will later be removed.
LPFILM and LPHARD select the Lineprinter Graphical device, together with the cameras selected by SDFILM, SDHARD respectively. The actual function of these two routines may be changed at a later date.
Since intensity variation on the SD4020 is performed by overstriking, the intensity values specified will tend to be low (1-4). The standard intensity on the FR80 is 225, with a range of 1-256, so all the intensity commands must be altered to avoid a very faint picture.
If the dual movement camera is loaded with colour film, then the COLOUR and COLCL commands will actually cause filters to be selected, as follows:
0 no output 1 Cyan (Blue/green) 2 Yellow (green/red) 3 Green 4 Magenta (red/blue) 5 Blue 6 Red 7 Clear 8 Clear
Care must be exercised in selecting intensities to avoid very faint colours. Green, blue and red require two filters to be selected.
The routine: MF35MM will no longer be available. Users requiring 35mm output should make use of the extra routines to be described later.
The SPOOL area provided for the FR80 output is much larger than that available for the SD4020. There is also a considerable number of useful utilities associated with it. Users are therefore urged to use the SPOOL rather than private tapes.
Those users who need special facilities or who have large amounts of output can now use 9-track 1600 bpi tapes as well as 7-track. The greater packing density on 9-track will enable much more information to be stored.
The routine DVITEM has been removed.
This section describes the new routines which allow the user access to the new features of the FR80. These routines should be used in preference to any existing SD4020 routines.
The following routines will select the specified cameras and select region with coordinates equal to the. whole raster (0,0,16383,16383). This region will be chained to the base region 0, which has the same coordinates. Calling one of these will allow the user to set his own limits with LIMIT (or with one of the similar routines described later).
FRCL16 1 Combined camera, 16mm, colour FRBW16 2 Combined camera, 16mm, black and white FRCL35 3 Combined camera, 35mm, colour FRBW35 4 Combined camera, 35mm, black and white FRPR16 5 Precision, 16mm, black and white FRMFCH 6 microfiche FRHCS 7 hardcopy, one sub-frame 'per frame' FRHCM 8 hardcopy, many sub-frames 'per frame'
The hardcopy camera has 12" wide paper, which gives a large frame size. It is possible to pack sub-frames into the page, thus saving paper.
The routine:
MANYUP (N,M)
called before the 'many frames' hardcopy camera is selected (by FRHCM or by CAMERA (8.0)), will cause N x M sub-frames to be packed within one 12" frame, N sub-frames across the page, and M sub-frames down. If MANYUP is not used, but FRHCM is called, 4 sub-frames will be fitted into the single frame area. In order to conserve paper stocks, users are asked to make use of this 'many frames' feature wherever possible.
The following routine has been provided to ease the changing of devices within a program. However, its use will cause more core to be occupied.
DVALL (I)
will set up the devices as follows:
I Equivalent routine 1 FRCL16 2 FRBW16 3 FRCL35 4 FRBW35 5 FRPR16 6 FRMFCH 7 FRHCS 8 FRHCM 9 TKTRON 10 BPACK 11 LPGRAF
The user may also set up regions himself and select the FR80 using DVOUT. The required camera must first be specified by:
CAMERA (X)
where X defines the camera and film stock (see previous table).
Thus:
CAMERA (4.0) DVOUT (1.0)
will select the 35mm black and white camera.
Note that DVALL has an integer argument, whereas DVOUT has a real argument.
Although the basic raster of the FR80 is 16384 x 16384, not all cameras can 'see' all the raster. For each camera, it is possible to define the aperture size which is normally larger than the distance moved in a frame advance. This means that two adjacent frames with information filling the whole aperture will overlap. Within the aperture, it is possible to define an abutment area such that output on adjacent frames over this area would touch. For cine film, a third area gives the image frame which can be seen in a projector. All the figures are provided in the table in the Appendix.
The following routines will set the conversion of the current region so that the coordinates of this region will map onto the aperture, abutment or cine area for the selected camera. Meanings for these three areas have been given to the other devices as well for completeness (see Appendix).
APER Map user coordinates onto aperture area ABUT Map user coordinates onto abutment area CINE Map user coordinates onto cine area.
(NB. This is distinct from cine mode, which determines the rotation)
The FR80 will normally write output in cine mode (except on microfiche). If comic mode is desired, the corresponding routines:
CMAPER CMABUT CMCINE
should be used.
In the case of the FR80, the X,Y limits will also be interchanged if one of these three routines is used. Thus the actual shape of the area visible on film will remain the same, but the user's X,Y aspect ratios will have changed. If the user wishes to rotate his area through 90°, he can use the routine:
COMIC (1)
Thus:
APER COMIC (1)
is not the same as:
CMAPER
since, in the former case, the X,Y limits are not interchanged.
In general, this will imply that, considering a cine mode picture as standard, the use of CMAPER instead of APER will still cause all the picture to be visible, but will change the shape of items in the picture. Use of COMIC(1) will not alter any of the shapes, but will map some part of the picture outside the visible area.
COMIC(0) will reset the rotation to cine mode.
On all other devices, 'comic' mode has no effect. Thus, on the Tektronix, for example:
CMAPER is same as APER , etc.
The user can set his own region limits using RGLIM or LIMIT, as before. However, since the various areas already described tend to be rectangular in shape, he will have to take the aspect ratio into account to avoid distorted pictures.
The routine:
LIMITS(X1,Y1,X2,Y2,AX,AY)
will set the current region limits to X1,Y1,X2,Y2 and alter the conversion limits, so that the current region maps onto the largest area within the currently-defined, mapped area, having an aspect ratio such that AX units in the X direction will equal AY units in the Y direction. This new area will be centralised within the old area.
Thus:
ABUT LIMITS(X1,Y1,X2,Y2,1.0,1.0)
will map the current region onto a square area within the previously-defined abutment area.
The standard SPROGS line-drawing routines will function as before. However, care should be taken over the use of intensity. The FR80 has 256 intensity levels, with the 'standard' level being 225. The routine:
INTNST (X)
will select the specified beam intensity, rather than overstrike the line. The interpretation of the intensity value on the other devices has been changed to avoid any problem caused by the magnitude of these numbers. Now, no overstriking will take place on the Tektronix and only 1 overstrike will be allowed on the Hewlett-Packard pen plotter.
The colour routines COLGL and COLOUR will cause colour orders to be generated, and, if the colour camera is selected, colour film can be produced. Exactly which intensities should be used with which colours has yet to be determined. The colour settings are:
0 no output 1 Cyan (blue/green) 2 Yellow (green/red) 3 Green 4 Magenta (red/blue) 5 Blue 6 Red 7 Clear 8 Clear
COLGL(-1.0) will cancel filter selection.
The filter system has three single coloured filters: cyan, yellow and magenta. Using two of these together produces the primary colours green, red and blue. However, these primaries must be run at a higher intensity, since two filters are involved. Those users requiring colour for contrast, but who do no specifically require primary colours, are advised to select the single filters rather than the primaries. The contrasts between magenta and cyan, say, or magenta and yellow are quite striking.
Two routines refer only to the FR80 microfiche camera.
Normally, ADVFLM will move to a new frame on the current fiche. The routine:
HFICHE
will throw to a new fiche. However, HFICHE is not a display routine (in the SPROGS sense), and, if it is used within a file definition, it will act as ADVFLM.
Note that repeated use of ADVFLM will not throw a new fiche eventually, but will produce one long fiche.
It is possible to add a fiche title by using the routine:
FCHTLE (N, STRING)
N must be less than 60, and FCHTLE must appear before the FR80 is first selected. If STRING contains:
$L
the title will occupy 2 lines at the top of the fiche. $L should appear once at the most, and $ should not appear elsewhere in the title.
Standard fiche will have the user's identifier and a fiche count as well as any user-defined title.
For those users who do not wish to use the FR80, or have the FR80 device-handling code in core, the following routine has been provided:
NOFR
wil1 prevent any FR80 code being loaded. Subsequent calls to FR80-specific routines will lead to error conditions.
The FR80 has two sets of hardware characters available for use. The first, OCRB3, is a simple font. The second, GPO, has a somewhat better character set for proportional spaced text output. It is possible to specify the character height, character rotation and line spacing, and also the space between characters. Usually, the space determines the distance between the left-hand edge of one character and the left-hand edge of the next. This is called mono-spacing and selection of mono-spaced text allows fast printing using special FR80 hardware. Alternatively, the space value can determine the distance from the right-hand edge of one character to the left-hand edge of the next. This is called proportional spacing. This form of spacing may make a line of text look more pleasing, but the resulting printing is slower. Users are therefore advised to use mono-spacing wherever possible.
The routine:
HFONT (N)
called before the FR80 is selected, will select the OCRB3 font if N = 0 and the GPO font if N = 1. If this routine is not used, OCRB3 will be selected by default.
The routine:
MONO
will cause the specified character space to be interpreted as a mono space in all subsequent text, whereas the routine:
PROPwill cause the spacing to be proportional. These routines can be called more than once during a job.
The routine:
CHHT(Z)
will cause all FR80 characters to have a height of Z units in the current region coordinate system. If Z = 0.0, a height appropriate to the setting of character space for mono-spaced text will be used.
The routine:
CHSP(X)
will set the character spacing of FR80 characters to X units in the current region coordinate system. This space value, together with the current mono or proportional setting, will determine how far apart adjacent characters will be.
The routine:
LNSP(Y)
will cause adjacent lines of text to be Y units apart in the current region coordinate system. This measures the distance between corresponding points on the two lines.
The routine:
CHOCT(X)
will cause each character on the FR80 to be rotated through X × 45° anticlockwise. A whole line of characters may be rotated in this way, but if X is odd, no newline characters should be used.
All the above routines affect the FR80 only. The following routines are applicable to any device having a hardware character set. Since the use of these routines does not involve SPROGS fonts in any way, they will use less core and be more efficient. However, the characters cannot be used in general within SPROGS files.
The existing routine:
PLOT(XCH)
is still available, and will plot the character, whose SPROGS number is XCH, on the current devices at the current point. If XCH = 76.0, a point plot order will be generated on the FR80.
The routine:
PLOTPT
is equivalent to PLOT (76.0).
Subsequent text commands will either specify character strings or the 1906A internal code number (in INTEGER format). To allow access to the full 256 characters in the FR80 character set, a COMMON block called TEXTAB has been set up:
COMMON/TEXTAB/NTXTAB(64)
Each value in NTXTAB is the FR80 code (+256) of the corresponding 1906A code (-1). Thus:
ICL code for character 2 is 2 NTXTAB(3) contains 306 = 256 + 50 FR80 code for 2 is 50
This COMMON block may be included in the user's program and locations changed. Thus:
NTXTAB(3) = 256 + 51
will cause every 2 to become 3. Every printing character must have 256 added. Control characters (such as newline, code 143) do not require the extra 256. Thus:
NTXTAB (3) = 143
will cause every 2 to generate a newline code. Other ways of obtaining a newline are dealt with below.
The routine:
HPLOT(N)
will call PLOT (X), where X is the SPROGS number of the character whose 1906A code is N. The COMMON block TEXTAB is used in the conversion, so altering TEXTAB will affect all selected devices.. The routine:
HPLOTS(ICH)
will also call PLOT(X), where X is the SPROGS number of the single character ICH.
Thus:
HPLOT(33) ≡ HPLOTS('A') ≡ PLOT(11.0)
(unless TEXTAB has been altered).
The following routines output one or more characters. If no other orders have been generated between two consecutive calls to these routines, the text from the second call and that from the first call will be concatenated. TEXTAB changes will affect the FR80 only.
HTEXT(N,STR)
will print N characters of the string STR, either immediately following a previous text string or starting from the current position. There is no change in the current position.
The routine:
HTYPES(ICH)
is equivalent to HTEXT(1,ICH) and the routine:
HTYPE(N)
is equivalent to HTYPES(ICH) where ICn ~s the character whose 1906A code is N.
Thus:
HTEXT (3,'ABC') HTYPES ('D') HTYPE(37) HTEXT (2, 'FG')
is equivalent to:
HTEXT(7,'ABCDEFG')
and:
HTEXT(3,'ABC') HTYPES('D') SETXY(5.0,7.0) HTYPE(37) HTEXT(2,'FG')
is equivalent to:
HTEXT (4,'ABCD') SETXY(5.0,7.0) HTEXT(3,'EFG')
since the intervening SETXY will prevent concatenation of ABCD and EFG.
Note that concatenation is only possible between these three routines. No concatenation will take place if PLOT, HPLOT or HPLOTS are used.
The routine:
TYPNMB(A,XI,XJ)
is equivalent to:
TYPEN(A,XI,XJ)
but calls HTEXT instead of TEXT to output the character form of A in the specified format: Since TYPNMB uses hardware characters, the routine GETFNT is not required.
XI = 0.0 E format, field width XJ + 7 XJ = 0.0 I format, field width XI + 1 XI, XJ not = 0.0 F format, XI places before decimal point, XJ places after. Field width XI + XJ + 2.
There are three ways to output newlines:
(1) Reset one of the locations in TEXTAB to 143. This will cause the newline code to be output on the FR80 only and will have no effect on other devices.
(2) The routine:
NLCHAR(STR)
will set the character defined by the single-character string STR to be interpreted as carriage return, line feed on all devices. Setting STR to -1 will cancel any newline.
Thus:
NLCHAR('/') JTEXT (4,'A/BC')
will produce the following output:
A BC
Newline will cause the X coordinate to return to the beginning of the string containing the newline character. Thus the above pattern of characters (with B vertically below A) will be repeated as long as the text string has not been concatenated. For example:
HTEXT (5,'DEFGH') NLCHAR('/') HTEXT(4,'A/BC')
will produce:
DEFGHA BC
The newline character can be removed by:
NLCHAR(-1)
(3) The routine:
HLINES(N)
is equivalent to:
ICB = previous newline character NLCHAR('/') HTEXT(N,'///...') NLCHAR(ICH)
Thus:
NLCHAR('/') HTEXT(4,'A/BC') NLCHAR(-1)
is equivalent to:
HTYPES ('A') HLINES (1) HTEXT (2,'BC')
A page throw can be obtained by:
HPAGE
which is equivalent to:
ADVFLM UP LEFT HLINES(1)
Two routines have been added to aid the drawing of horizontal or vertical grid lines.
HGRATX(X1,Y1,X2,Y2,N)
will divide the range (X1,Y2) into N parts and draw N-1 lines parallel to the Y-xis between the lines (X1,Y1,X1,Y2) and (X2,Y1,X2,Y2).
HGRATY(X1,Y1,X2,Y2,N)
is similar, but will draw lines parallel to the X axis. These lines will be drawn using VEC orders, unless the FR80 is the only selected device. In this case, use is made of the special 'vector family' order within the FR80, and a more efficiently generated grid is drawn.
It is now possible to alter the character used by Lineprinter Graphical mode to draw lines. The routine:
LPCHAR(ST1,ST2)
will use the character defined in the single-character string ST1 to draw lines on the lineprinter, and the character defined in the single-character string ST2 to indicate overstriking. The default setting is LPCHAR ('*','+').
The LISTFILE command in GEORGE 4 has recently been altered.
LISTFILE MYFILE,ALL
will cause MYFILE to be listed up to a line containing:
*+*+
At this point, the listing will be halted, and will resume when the user types the ACCEPT key.
Alterations have been made to the output to the Hewlett-Packard pen plotter and to the Tektronix to make use of this feature, so that a user can look at one frame at a time without having to split the file. All pen plotter messages (such as ADVANCE, COLOUR) are now followed by *+*+. Each frame of Tektronix output also ends with *+*+, and each frame now begins with a 'clear screen' command.
These new files are not currently acceptable to the FRSPLIT macro.
One of the SPOOL utilities available separately is the ability to view spooled output on the Tektronix. To ensure that the user's output remains in the SPOOL long enough for viewing, the following routine can be used to prevent the output being sent to the FR80 for a given length of time.
DELAY(N)
will cause spooled output to be delayed in the SPOOL for N minutes. If this routine is called before the FR80 is selected, the delay will take effect even if the job subsequently fails catastrophically. If a job runs to completion, the last call to DELAY will be effective.
If the user knows that the output is not worth plotting, or he only wishes to access the Tektronix via the SPOOL (rather than directly), he can greatly assist the operators by calling:
ERASE
This will cause the output to be removed from the SPOOL, without being sent to the FR80, after the delay period has expired.
Other SPOOL utilities are available as stand-alone programs. These are described elsewhere.
The COMMON block:
COMMON/FR/FR
has been initialised to the correct FR80 device number and may be included in user's programs. In this way, they will be unaffected by any possible future device number alterations.
In order to assist users further in decreasing the amount of core (particularly Lower Data) used, the following routines have been defined. They act in the same way as NOFR, NOTK etc. Thus, their inclusion in the user's program will prevent sections of SPROGS code being loaded, and will give rise to an error halt if the code is subsequently accessed.
Routine Halt Action NOSHFT SF Removes shift character feature from text. NOTHK TH Removes thick and dotted lines feature. NOCUT SC Removes circular, elliptic and irregular region scissoring. NOINDX NX Removes all index variable code. NOSQ SQ Removes sequence list control codes. This will still allow the use of DRAW. NOLIB LB Removes SPROGS library creation feature. This will still allow the use of GETFNT and GETLIB. NODSP DP Removes user-defined display routine feature. NONULL NL Removes NULL routine feature. NOCOL CL Removes colour feature NOBSFL BS Removes basic file feature. Ordinary SPROGS files unaffected. NOTRCE TR Removes trace feature. NOPLOT PL Removes PLOT routine. This will also prevent access to fonts 3 and and 4. NOXP XP Removes expand and rotate feature. NOTXP TX Removes text expansion feature. NOSTOR ST Removes creation of SPROGS files.
While the SD4020 is still active, the existing version of SPROGS will be unaltered. A new macro, SPROGSF, will give access to the FR80 version of SPROGS.
The parameters to this macro are the same as those for SPROGS. However a user may now attach a 9-track tape to #MTI4 if large amounts of output are required.
Users are strongly advised to convert programs to call the FR80 routines directly. However, for those with existing SD4020 programs, the following points must be taken into account.
(1) If DVOUT is used to select the device initially (rather than SDHARD, SDFILM), then the routine:
CAMERA (X)
must be called before DVOUT to select the desired camera. Details of this routine will be found in Section 4. Only one camera may be selected.
(2) If intensity settings are required, the values of the SD4020 intensities must be changed. Default settings give an intensity of 225 in a range of 1 to 256. Darker lines can therefore be drawn either by using an intensity value greater than 225, or by calling INTNST at the start with a lower value, and subsequently using a higher value.
(3) Only one of the devices numbered 1, 2 or 32 should be called in a program. Calling more than one together will result in the outputs being repeated two or three times.
(4) Only one filemark, at most, may be written to tape (or SPOOL) as a marker. In general, no filemarks need be explicitly written.
NB A filemark will produce a frame advance.
(5) The routines:
FLASH MF35MM
will be dummies and will later be removed.
(6) The basic raster of the FR80 is 16 times that of the SD4020. However, not all cameras can record from the whole area. A user who currently plots in raster coordinates must take account of the camera aperture size, and adjust his limits accordingly (see Appendix). Similarly, users who provide their own region mapping onto the base region must change the scaling used. The routines SDHARD, SDFILM will take this into account.
(7) The routine:
EXPRED
will only affect Lineprinter Graphical output. Abutment is ensured by calling the appropriate FR80 routines (for example, ABUT and CMABUT).
The simple graphics package, SMOG, has been defined so that programs written in SMOG can run under SPROGS with very little alteration. Thus, a user can graduate from simple graphics to the more sophisticated system without trouble. There are a few minor differences, however, which must be taken into account.
(1) The SPROGS routine:
LIMIT
behaves like LIMITV in SMOG. However, if the routine LIMIT is used immediately after a call to APER, ABUT etc, the effect will be the same in both systems.
(2) Only absolute orders are generated for the FR80. This should not affect a user's program. However, it will mean that, if TOPRIN (1.0) is selected to print the commands being sent to tape or SPOOL, the two listings generated (under SMOG and SPROGS) will be different.
(3) Owing to a fundamental difference in design between the two systems, the following command sequence will give different results under SMOG and SPROGS. However, it is not very likely to occur in practice.
SETXY (X1,Y1) HTEXT (3,'ABC') SETXY (X1,Y1) HTEXT (3,'DEF')
where the order between two HTEXT calls will, in fact, not alter the current position. In SPROGS, the second SETXY is ignored, and so the two HTEXT strings will be concatenated. In SMOG, the second SETXY generate"s a "plotting" order, so the second string will overprint the first (see SMOG manual).
The routine HPLOTS can be used to cause overprinting in both systems:
SETXY (X1,Y1) HTEXT (3,'ABC') HPLOTS(' ') HTEXT (3,'DEF')
(4) The routine:
FRSAV(X)
does not generate an FR80 picture definition in SPROGS. Instead, it generates a SPROGS basic file. The effect should be the same.
(5) The routine:
RDLIB(XA,XN)
does not make use of a user-supplied COHMON block. Instead, it reads a SPROGS file from channel DA1 into the SPROGS filestore.
Some extra routines have been added to SPROGS so that SMOG programs can be run under the more sophisticated system. Some of these which provide new facilities have been described already. The following routines duplicate existing SPROGS features.
FLEMK ≡ FLEMKS(1.0)
LIMITV(X1,Y1,X2,Y2) ≡ LIMIT(X1,Y1,X2,Y2)
JTYPEN(NI,NJ) ≡ TYPNMB(FLOAT(NI),FLOAT(NJ),0.0)
FRSAV(X) ≡ STSAV(X+16383.0,DEV) where DEV is the currently selected device. RDLIB('SPROGS' ,XN) ≡ GETLIB(XN,1.0,1.0) and defines XN as the current 'background'. DRAWNM(X) ≡ DRAW(Y) where Y = X + 16383.0 if X≥0 = background file if X<0
The majority of routines in SPROGS require real arguments. A set of routines has been provided which takes integer arguments, calling the equivalent real routines. Thus, in SPROGS, these routines are less efficient than their real argument counterparts.
Routine Equivalent Real Routines VECTOR VEC JVEC VEC JTOXY TOXY JTOX TOX JTOY TOY JTODXY TODXY JTODX TODX JTODY TODY JSETXY SETXY JSETX SETX JSETY SETY JUPDXY UPDXY JUPDX UPDX JUPDY UPDY JLIMIT LIMIT JSTYPE STYPE JLIMV LIMITV JLIMS LIMITS
The complete FR80 plotting area has coordinates 0 to 16383 in both the X and Y directions. Each camera is capable of photographing only part of the plotting area - the aperture plate ensures that plotting outside its bounds is not recorded. However, if output is produced over the complete area allowed by the plate, the images on consecutive frames overlap. Consequently, it is usual to restrict plotting to a least an area such that two consecutive frames abut. For 16mm and 35mm cine film, the frame area is even smaller with a gap between consecutive frames. Where appropriate, the three areas given above are defined. All images are defined within aperture by 20 raster positions to allow for errors in measurement.
Image | XWIDTH | YWIDTH | XMIN | YMIN | XMAX | YMAX |
---|---|---|---|---|---|---|
8020 Combined 35mm | ||||||
Aperture | 16383+ | 13530 | 0 | 1460 | 16383 | 14990 |
Abutment | 16383 | 12520 | 0 | 1931 | 16383 | 14451 |
Cine | 14653 | 10528 | 0 | 2928 | 14653 | 13456 |
Cine image is based on British Standard 0.866 (+.004, -.000) by 0.629 (+.004, -.000) inches
Atlas cine (image) is based on 0.868 by 0.631 both ±.002
(1 raster = 0.0000596")
8020 Combined 16mm | ||||||
---|---|---|---|---|---|---|
Aperture | 7000 | 5960 | 4720 | 5260 | 11720 | 11220 |
Abutment | 6960 | 5010 | 4740 | 5686 | 11700 | 10696 |
Cine | 6728 | 4920 | 4827 | 5731 | 11555 | 10651 |
Cine image is based on British Standard 0.402 (+.006, -.000) by 0.292 (+.006, -.000) inches
Atlas cine (image) is based on 0.404 by both 0.294 ±.002
(1 raster = 0.0000596")
8021 16mm cine | ||||||
---|---|---|---|---|---|---|
Aperture | 10230 | 8800 | 3140 | 4250 | 13370 | 13050 |
Abutment | 10190 | 7220 | 3160 | 4822 | 13350 | 13042 |
Cine | 9688 | 7086 | 3347 | 4889 | 13035 | 11975 |
Y offset by +241 raster positions to centre 16mm cine image
8060 Hardcopy | ||||||
---|---|---|---|---|---|---|
Aperture | 16383+ | 12930 | 0 | 1962 | 16383 | 14892 |
Cine | 16383+ | 11771 | 0 | 2307 | 16383 | 14078 |
Abutment | 16383+ | 12422 | 0 | 1981 | 16383 | 14413 |
1 raster unit = 0.000708
8025 105mm Microfiche | ||||||
---|---|---|---|---|---|---|
Aperture | 14000 | 16383 | 1200 | 0 | 15200 | 16383 |
Image | 13530 | 16383 | 1427 | 0 | 14957 | 16383 |
The complete plotting area has coordinates 0 to 119 in both X and Y directions. On the 1906A, characters are spaced 10 to the inch in the X direction and 6 to the inch in the Y direction. A page throw is inserted between each frame.
Routines exist to remove the page throw, and to decrease the plotting area. The routines APER, ABUT and CINE will give the following effects:
XMIN | YMIN | XMAX | YMAX | PAGE THROW | |
---|---|---|---|---|---|
Aperture | 0 | 0 | 119 | 119 | Yes |
Abutment | 0 | 0 | 119 | 119 | No |
Cine | 0 | 0 | 69 | 69 | Yes |
The complete plotting area has coordinates 0 to 1023 in the X direction and 0 to 779 in the Y direction. The three areas set by APER, ABUT and CINE are:
XWIDTH | YWIDTH | XMIN | YMIN | XMAX | YMAX | |
---|---|---|---|---|---|---|
Aperture | 1023 | 779 | 0 | 0 | 1023 | 779 |
Abutment | 779 | 779 | 224 | 0 | 1023 | 779 |
Cine | 779 | 585 | 224 | 97 | 1023 | 682 |
The complete plotting area has coordinates 0 to 9999 in both the X and Y directions. Since the aspect ratios can be set manually on the device, no other areas have been defined for this device.
The following is a very brief description of the FR80 order code sent to tape. It is included here so that some decoding will be possible if the user has selected 'Print orders sent to tape' (TOPRIN(1.0)). It is by no means a complete set.
All words consist of 6 octal digits. Orders may be one or more words long. Various records will be sent to tape before START JOB and after END JOB. Their contents are not described here.
The format of single word commands is as follows:
The first four bits define the type of command while the lower 14 bits define an X or Y value or increment.
C | A | Formal Description | Name |
---|---|---|---|
0010 | X | CX' = X | ABSOLUTE MOVE HORIZONTAL |
0110 | DX | CX' = CX + DX | RELATIVE MOVE HORIZONTAL |
1010 | X | V(CX,CY,X,CY); CX' = X | ABSOLUTE DRAW HORIZONTAL |
1110 | DX | V(CX,CY,CX+DX,CY); CX' = CX + DX | RELATIVE DRAW HORIZONTAL |
0011 | Y | CY' = Y | ABSOLUTE MOVE VERTICAL |
0111 | DY | CY' = CY + DY | RELATIVE MOVE VERTICAL |
1011 | Y | V(CX,CY,CX,Y);CY' = Y | ABSOLUTE DRAW VERTICAL |
1111 | DY | V(CX,CY,CX,CY+DY);CY' = CY + DY | RELATIVE DRAW VERTICAL |
The two-word commands are similar to the one-word commands. The format is as follows:
C | A | B | Formal Description | Name |
---|---|---|---|---|
0010 | X | Y | CX' = X; CY' = Y | MOVE ABSOLUTE |
0110 | DX | DY | CX'= CX + DX; CY' =CY + DY | MOVE RELATIVE |
1010 | X | Y | V(CX,CY,X,Y); CX' = X; CY' = Y | DRAW ABSOLUTE |
1110 | DX | DY | V(CX,CY,CX+DX,CY+DY); CX' = CX + DX; CY' = CY + DY | DRAW RELATIVE |
The remaining orders will be given in their octal form, together with a description.
N-1 lines will be drawn between the next two visible lines drawn.
A point is plotted at the current position.
234400 + N (two words) 400000 + M
This sets intensity N for filter defined by M, as follows.
M Colour 0 Clear 200 Red 300 Magenta 400 Green 500 Yellow 600 Blue 700 Cyan
214000 (two words) N
This selects colour N, as follows:
N Colour 610000 Blue 600400 Green 600020 Red 600001 Clear 410000 Cyan 400400 Yellow 400020 Magenta
221400 cine mode or 221000 comic mode
020000 or 022000 followed by text string
211000 + N or 211777 (two words) 100000 + N
Character Spacing is set to N
212000 + N or 212777 (two words) 140000 + N
Line spacing is set to N
224000 + N or 224777 (two words) 140000 + N
Character height is set to N, or to a suitable space value if N = 0.
Characters are rotated through N × 45°.
204400 followed by text string
204100 followed by text string
202100 + N This indicates the start of picture N 202377 This indicates the end of the current picture definition.
This draws picture N.
Various commands can be followed by text strings. Text is packed two characters to a word. The code used is that defined in Appendix 2, with the additional feature that all non-control codes have the 9th bit set. For example, A will be 501.
Text strings are terminated by 203.
000000 NOP 004010 End Job 020000 Start Job 022000 Start Job followed by text 034001 Advance Frame 036000 Advance Fiche 100000 + X Set absolute position, next word may be Y 140000 + Y 202100 + N Define picture N 202377 End definition 202500 + N Draw picture N 203100 Mono spaced text, followed by text 204400 Proportional spaced text, followed by text 210000 + N Character rotation through N × 45° 211000 + N Character Spacing 211777 Next word gives character spacing 212000 + N Line Spacing 212777 Next word gives line spacing 214000 Next word gives colour 215000 Plot point 221000 Comic mode 221400 Cine mode 222000 + N Vector family 224000 + N Character height 224777 Next word gives character height 234400 + N Intensity. Next word gives colour 300000 + X Set relative position, next word may be Y 340000 + Y 500000 + X Absolute vector, next word may be Y 540000 + Y 700000 + X Relative vector, next word may be Y 740000 + Y
(for use with DVOUT).
1.0 FR80 2.0 (FR80) 4.0 Not defined 8.0 Lineprinter Graphical 16.0 Lineprinter 32.0 (FR80) 64.0 Tektr0nix 128.0 User-defined 256.0 User-defined 512.0 Hewlett-Packard pen plotter
The type indicates Subroutine (S) or Function (F).
Name | Type | Meaning |
---|---|---|
ABUT | S | Set abut limits for current camera |
ADVRPT(X) | S | X > 0.0, set up advance repeat file, X=0.0, delete advance repeat file |
ANAME('ST') | F | Converts string ST into a REAL number representation, characters converted to SPROGS number, if ST is less than 5 chars, chars packed using 65 as multiplier, otherwise each must be alphanumeric, and ST must start with a letter, 37 is then used as packing multiplier |
APER | S | Set aperture limits for current camera |
AR1(XND1,XND2,XND3) | F | Ith argument is array reference defined by index variable |
AR2(XND1,XND2,XND3) | F | |
AR3(XND1,XND2,XND3) | F | |
AR4(XND1,XND2,XND3) | F | |
AR5(XND1,XND2,XND3) | F | |
AR6(XND1,XND2,XND3) | F | |
BASE(SWOUTP) | S | Set current region as basic for device SWOUTP |
BASER(R,SWOUTP) | S | set region R as basic for devices SWOUTP |
CAMERA(X) | S | Select specified FR80 camera |
CHHT(Z) | S | Set height for hardware characters |
CHOCT(X) | S | Set rotations 45 degrees * X hardware characters |
CHSP(X) | S | Set spacing for hardware characters |
CINE | S | Set cine limits |
CHABUT | S | set abut limits in comic mode |
CHAPER | S | set aperture limits in comic mode |
CHCINE | S | Set cine limits in comic mode |
COMIC(N) | S | N=0/1 for cine/comic mode |
DELAY(N) | S | Set spool output delay to N mins |
DLETE (FILE) | S | Delete file from store |
DRAWNM(X) | S | Draw file X+16383 or background if x -ve |
DSALL | S | Set visibility of current region |
DSPF82 | S | Routines to execute user defined display routines |
DSPF83 | S | |
DSPF84 | S | |
DSPF85 | S | |
DSPF86 | S | |
DSPF87 | S | |
DSPF88 | S | |
DSPF89 | S | |
DVALL(I) | S | Set up regions for device I |
DVOUT(XI) | S | Sets the value of NTRMLS to XI |
ENDSPR | S | Clears SPROGS output at end of run |
ERASE | S | Do not plot spooled output |
EXPRED(A) | S | Select SD4020 expand image mode and remove pagethrow in lineprinter graphical |
FAIR(FR,FNO,TYP) | F | Fairing value |
FILIST(X,XN) | S | List file X, number XN |
FISAV | S | Finish saving basic file |
FLASH | S | Project SD4020 form flash |
FLEMK | S | Output 1 filemark |
FLEMKS(ANO) | S | Write ANO file marks to SD4020 tape |
FMODE(XN) | S | Sets mode equal to XM, the mode of storage for the next file |
FRBW16 | S | Set up FR80 16mm Black and White |
FRBW35 | S | Set up FR80 35mm Black and White |
FREL(FNAM,FNO) | S | Output relative orders equivalent to those in file file FNAM/FNO |
FRCL16 | S | Set up FR80 16mm Colour |
FRCL35 | S | Set up FR80 35mm Colour |
FRHCM | S | Set up FR80 multi frame hardcopy |
FRHCS | S | Set up FR80 single frame hardopy |
FRMCH | S | Set up FR80 microfiche |
FRPR16 | S | Set up FR80 16mm precision |
FRSAV(X) | S | =STSAV (X-16383,current device) |
GARBGE | S | Collect unused space in filestore |
GETCHA(X,y) | S | Get character X from font Y into filestore |
GETFNT (X) | S | Get font X into the file store |
GVCHSZ(DX,DY) | S | Get text factor for natural character size |
HFICHE | S | Advance one fiche |
HFONT(N) | S | Select FR80 font |
HGRATX(X1,Y1,X2,Y2,N) | S | Draw N+1 vertical lines |
HGRATY(X1,Y1,X2,Y2,N) | S | Draw N+1 horizontal lines |
HLINES(N) | S | N newlines in device ardware characters |
HPACK | S | Set up HP plotter region |
HPAGE | S | New page in device hardware characters |
HPLOT(N) | S | Plot hardware character with 1900 code N |
HPLOTS('ST') | S | Plot singe hardware character |
HTEXT(N,'ST') | S | Print text string in device hardware characters |
HTYPE(N) | S | Print hardware character with 1900 code N |
HTYPES('ST') | S | Print single hardware character |
IDSTST(XN,A) | S | Test for store or execute user display routine |
LIBINT(X) | S | Initialise library X |
LCPRY(XPRYV) | S | Set local priority value |
LIMIT(XM,YM,XN,YN) | S | Set limits of current region |
LIMITS(X1,Y1,X2,Y2,AX,AY) | S | Set limits with aspect ratio |
LIMITV(X1,Y1,X2,Y2) | S | =LIMIT |
LNSP(y) | S | Set line spacing for hardware characters |
LPCHAR('S1','S2') | S | Set plot and overstrike characters for lineprinter graphical |
LPDBUG | S | Add lineprinter to current region devices and select it in addition |
LPFILM | S | Set regions for SD4020 microfilm and LP Graphical and select |
LPGRAF | S | Set regions for lineprinter graphical and select |
LPHARD | S | Set regions for SD4020 hardcopy and LP Graphical and select |
LSTALL | S | List all files |
MANYUP(N,M) | S | Set N*M subframes on hardcopy |
MF35MM | S | Select 35mm camera instead of 16mm |
MONO | S | Set mono spaced hardware characters |
NEWDSP(XN,XNI,XNO) | S | Set up new user display routine |
NLCHAR('ST') | S | Set ST as newline character in hardware text |
NLINES(XN) | S | Draws file 'NL' XN times |
NOBSFL | S | Do not include basic files |
NOCOL | S | Do not include colour |
NOCUT | S | Do not include irregular scissoring |
NODSP | S | Do not include user defined display routines |
NOFR | S | Do not include FR80 |
NOHP | S | Do not include HP plotter |
NOINDX | S | Do not include index variables |
NOLIB | S | Do not include library creation |
NOLP | S | Do not include LP output |
NOLPG | S | Do not include lineprinter graphical routines |
NONEW | S | Do not include new IO routines |
NONUL | S | Do not include null routines |
NOPLOT | S | Do not include plot routines |
NOSD | S | Do not include SD4020 routines |
NOSHFT | S | Do not include software shift characters |
NOSQ | S | Do not include sequence list additions |
NOSTOR | S | Do not include file creation |
NOTHK | S | Do not include dotted and thick lined |
NOTK | S | Do not include Tektronix routines |
NOTRCE | S | Do not include tracing |
NOTXP | S | Do not include text expansion for software characters |
NOXP | S | Do not include text expansion for software characters |
NPAGE | S | ADVFLM, UP, LEFT and draw file 'NL' |
NWCLPL(XS,YS,IV,N,R) | S | User routine to clip lines |
NWCLPP(X,Y,IV,R) | S | User routine to determine point visibility |
NWCNV(X,Y,R) | S | User routine to provide shear conversion |
NW8ADV | S | Advance frame for dummy devices |
NW9ADV | S | Advance frame for dummy devices |
NW8CH(X,Y,ICN,IV,IC) | S | Plot ICN on dummy device |
NW9CH(X,Y,ICN,IV,IC) | S | Plot ICN on dummy device |
NW8FIN | S | Close dummy device |
NW9FIN | S | Close dummy device |
NW8ST | S | Open dummy device |
NW9ST | S | Open dummy device |
NW8VEC(X1,Y1,X2,Y2,IV,IC) | S | Draw vector on dummy device |
NW9VEC(X1,Y1,X2,Y2,IV,IC) | S | Draw vector on dummy device |
OUTR (R,XN) | S | Set region R as basic for devices XN and select devices |
PCPRY(P) | S | Sets the global priority level NPRYV equal to P for the next file definition |
PLIMIT(P,XM,YM,XN,YN) | S | Set current region in terms of region P |
PLOTPT | S | =PLOT(76.0) |
PROP | S | Select hardware proportional spacing |
PR1(XIND) | S | Defines argument in Ith position as reference to index variable |
PR2(XIND) | S | |
PR3(XIND) | S | |
PR4(XIND) | S | |
PR5(XIND) | S | |
PR6(XIND) | S | |
RDLIB(X,XN) | S | Read file XN from library 1 and set as background |
READXY(X,Y) | S | Read current position into X,Y |
RUNOUT(X) | S | X frames of runout on SD4020 microfilm |
SDFILM | S | Set regions for SD4020 microfilm and select |
SDHARD | S | Set regions for SD4020 hardcopy and select |
SETIO(XL,XER,XLP,XSDO,XSDU,XSDU,XTR) | S | Reset IO streams for file lists, error messages, lineprinter output, SD4020 operator and user output and trace list |
SHAPE(CNV,BSC) | S | Set shape of current region |
SHAPER(R,CNV,BSC) | S | Set shape of region R |
SHIELD | S | Set visibility of current region to outside only |
STCHSZ(DX,DY) | S | Set text factor for character grid size |
STDF(ST) | S | Starts defining a file whose name is ST, the number of the file is the current value of NUMBER, the mode of the file is attempted as the current mode setting, the value of NPRYV defines the global priority setting |
STSAV(X,D) | S | Save orders for device D in file X |
STSPR | S | Initialise SPROGS system |
STSQLS | S | Start sequence list |
TKREAD(CH,X,Y) | S | Read character and cross-hairs from Tektronix |
TKTRON | S | Set up Tektronix base region |
TEXT(N,'ST') | S | A shorthand for drawing a set of pictures corresponding to characters |
TOPRIN(ANO) | S | Print SD4020 tape orders |
TOTAPE(ANO( | S | Suppress writing SD4020 tape |
TYPEN(A,XI,XJ) | S | Print number A on output devices |
TYPNMB(A,XI,XJ) | S | Output number in hardware characters |
VECTOR(IX1,IY1,IX2,IY2) | S | =VEC |
VISO(XMI,XMO) | S | Set visibility of current region |
VISOR(R,XMI,XMO) | S | Set visibility of region R |
VTEXT(N,'ST') | S | As for text, but character interspersed with file 'VT' |
VTYPEN(A,XI,XJ) | S | As for TYPEN, but characters interspersed with file 'VT' |
WINDOW | S | Set visibility of current region to inside only |
XMLTIM(A) | F | Mill time in secs |