We require to be able to change from one font to another during text printing so that upper and lower case fonts (for example) can be mixed.
To some extent, the ability to do this already exists. A character file can be redefined to call NUMBR instead of drawing a character. There are two drawbacks, however. Firstly, files cannot be defined from inside another file, so the user could not store the ability to select different fonts. Secondly, when the library system is written and fonts are moved in and out, the re-defined character will not be saved.
There are a number of possible display routine methods
1) SHIFT (GM, XN)
defines character number XM to mean "shift to font number XN".
(2) SHIFT (XM)
defines character number XM to act as a flip-switch, changing between current font number and "current+1".
(3) SHIFTU (XM), SHIFTD (XN)
defines two characters, the first selecting "current+1", and the second selecting "current-1".
The first idea implies that any number of characters can be defined in this way. Hence a table needs to be available, and this must be searched for every character converted by TEXT, VTEXT. This will probably be too slow if the table is at all long.
The second and third ideas imply the provision of another display routine RLNUMB (X) which will change the current file number, NFLNO, to NFLNO+X (or 1 if sum is less than 1).
The third method suggested is a compromise between methods 1 and 2, limiting the table search of characters, but allowing any font to be selected by multiple use of XM or XN (unlike the second method, which is too restrictive).
It is therefore proposed to implement the third method. Two new COMMON variables, NSHFTU and NSHFTD, will hold the two shift characters (or be set negative if no shift intended). TEXT and VTEXT will test every character and replace
DRAW (XM) DRAW (XN) by RLNUMB (1.0) RLNUMB (-1.0)
NSHFTU and lNSHFTD will not be saved and restored by the file mechanism. The characters 0-9, A-Z, +-. will not be allowed as shift characters.