Contact us Heritage collections Image license terms
HOME ACL Associates Technology Literature Applications Society Software revisited
Further reading □ OverviewNo.1No.2No.3No.5No.6No.7No.8No.9No.10
ACD C&A INF CCD CISD Archives Contact us Heritage archives Image license terms

Search

   
ACLLiteratureProgress ReportsGraphics User Notes
ACLLiteratureProgress ReportsGraphics User Notes
ACL ACD C&A INF CCD CISD Archives
Further reading

Overview
No.1
No.2
No.3
No.5
No.6
No.7
No.8
No.9
No.10

Graphics User Note No 8: The Enhanced Blocked Character Font

D Ralphs

17 March 1977

8.1 INTRODUCTION

The basic aim of the blocked character font (see Graphics User Note 2) is to provide users with a bold character set. This character set does not suffer from the fault that when the characters are larger than a certain size the lines making up the characters separate out. The font attempts to retain a uniform intensity for the shading no matter what size of text is chosen (assuming the intensity is not altered and that the character size is not too small). The font can only be accessed by SMOG users and is intended for output to the FR80. It is available on both the 1906A and the 360/195 although there are some differences which will be explained later.

The routine for writing the text WRIGHT has not been altered to take account of the enhancements to the system, such as, adjustable spacing. It will continue to function as described in Graphics User Note 2. For the enhanced system two additional writing routines have been provided. These are the routine WRITTE, which is biased towards the 1906A although it is available on the 360/195, and the routine WRITHE which is only available on the 360/195.

The two routines WRITTE and WRITHE have access to a larger character set than WRIGHT, including an upper case and a lower case alphabet. The other enhancements to the system are: adjustable spacing between characters, mono or proportional spacing and, sloping the text so that an italic effect can be produced.

The characters in the font are initially defined in a rectangle 40 units by 40 units including the spacing which is initially 10 units see Figure 1). The default spacing selected is mono and the units for the characters are set to 10 device rasters. Thus the string ABC will occupy a rectangular area 3*40-1*10 (no space after C) units wide by 1*40 units high which equals 110 units by 40 units, this being a rectangle 1100 rasters wide by 400 rasters high.

40 units 30 units 10 units Note: units initially 10 rasters

Figure 1: The defining rectangle

8.2 USER ROUTINES

The font may be used from either region zero (device coordinates) or region one (user coordinates) of SMOG. Some of the user routines reflect this in that the arguments have different meanings dependent upon which region is currently selected. These differences are explained in more detail (where appropriate) below.

The transformations, such as rotation, are performed on the characters in the following order: firstly the coordinates for each individual block making up a character are calculated using the current expansion factors and the number of rasters per unit; then, if the text is to be slanted (for an italic effect, say) the coordinates are adjusted; and finally, if the text is to be rotated then the coordinates are again altered. The blocks are then output with the appropriate number of lines to shade them in. Thus the order for the transformations is expand, slant and rotate.

There is one other transformation that a potential user may wish to use and that is reflection. To achieve this effect use region one with either the X or Y coordinates reflected. For example, setting maximum X less than minimum X will cause a reflection of the text about the vertical, the text would in fact be drawn backwards from the specified point.

Most of the confusion when using the font is caused by the expansion routines. If one remembers that the characters are specified in a defining rectangle 40 units by 40 units and that each unit is initially set to 10 rasters then the method of calculating the character size should not be too difficult to follow, see the routines WCHFAC, WTHICK and WCHGAP for more details. The character size is determined by three items, the width and height within the defining rectangle, the current expansion factors, and the number of rasters for each unit.

The arguments for the subroutines follow the usual FORTRAN naming convention with the exception of the TEXT argument for WRIGHT, WRITTE and WRITHE which is explained in more detail in Appendix 7.

(1) WRIGHT (X,Y,TEXT,N)

This routine writes the first N characters from the character string TEXT starting at the point (X,Y). See Appendices 2 and 3 for the 64 characters output by WRIGHT. Appendix 2 shows the internal machine codes for these 64 characters on the 1906A and similarly Appendix 3 shows the 360/195 internal machine codes.

The number of characters N can be a maximum of 60. (X,Y) defines the position of the bottom left corner of the defining rectangle for the first character in the TEXT string. See Appendix 7 for a definition of the TEXT argument.

(2) WRITTE (X,Y,TEXT,N)

This routine uses the same 64 characters for input in the TEXT string as WRIGHT but uses the last four as shift characters. They are characters 60, 61, 62 and 63 (decimal) of the 1906A internal character code or characters 5B, BD, CB and CD (hexadecimal) of the 360/195 internal character code. They are usually printed as the following four characters $, ], + and ← and are used for alpha shift, beta shift, delta shift and undefined respectively.

The default shift is alpha and the shifts are selected in the following way: when $ is encountered in the TEXT string then alpha shift is selected or when ] is encountered beta shift is selected. If + is encountered then delta shift is selected for the next character only and then the shift reverts back to alpha or beta dependent upon which had last been selected. Five characters are currently defined for delta shift and they are T, U, V, W and ! producing $, ], ↑ ←, and \ respectively, see Table 3 0f Appendix 4. The alpha shift contains the upper case alphabet see Table 1 of Appendix 4 and beta shift contains the lower case alphabet and is shown in Table 2 of Appendix 4.

The number of characters N also includes the shift characters, for example:

      CALL WRITTE (1.0,5.0,'A$B]C↑TUV$W',11) 

would produce the following output string:

ABc$uvW

The number of characters N, has a maximum of 80.

(3) WRITHE (X,Y,TEXT,N)

This routine is only available on the 360/195 and writes the first N characters from the string TEXT starting at the point (X,Y). See Appendix 5 for those characters that are currently defined. The TEXT string may contain upper and lower case characters which can be input directly, for example, entering a file to ELECTRIC with ENTTYP=BVLC on a Newbury Laboratories terminal supporting upper and lower case characters. N has a maximum of 80.

(4) WCHFAC (XFAC,YFAC)

This routine is used to alter the expansion factors for the characters. If used whilst in region zero (device coordinates) XFAC and YFAC are the X and Y expansion factors for the defining rectangle. For example, setting XFAC=1.5 and YFAC=2.0 will give a defining rectangle for the characters of 60 units by 80 units. This will not alter the characters as originally defined it just specifies that they are to be output 1.5 times as wide and twice as high.

If called whilst in region one XFAC and YFAC are in the users coordinates and define the desired character size. WCHFAC takes account of the current setting for the units (initially 10 rasters) and then calculates the expansion factors necessary to produce a character size of XFAC in the X direction and YFAC in the Y direction.

If using region one, the routines WTHICK and WCHFAC are order dependent. If WTHICK is called first then the characters will be darker or lighter depending on the value of NRASTS and the character size will be XFAC by YFAC. Whereas if WCHFAC is called first the size of the characters is altered firstly by WCHFAC and then by WTHICK. When used from region zero both routines affect the character size. For example setting NRASTS to 5, XFAC to 2.0 and YFAC to 3.0 will give a character size of 40 × 5 × 2.0 rasters by 40 × 5 × 3.0 rasters, which is 400 rasters by 600 rasters.

It is advisable not to set the expansion factors to less than 1.0. For example, to produce a character size 80 rasters square when using region zero would require setting XFAC, YFAC to 1.0 and NRASTS to 2 (see routine WTHICK).

(5) WTHICK (NRASTS)

This routine is used to adjust the gap between the individual lines used to shade the characters. It has two effects, one is to alter the intensity of the character making it darker or lighter and the other is to alter the size (see the routine WCHFAC for more details). NRASTS is initially set to 10 as this is just about the line thickness on all of the FR80 cameras.

(6) WCHGAP (WIDE)

If called whilst in region one then the spacing will be set to WIDE units (in the current user limits). If in region zero then WIDE alters the spacing from a quarter of the defining rectangle (10.0 units) to the desired gap, that is WIDE units. This routine has no effect when using WRIGHT which has a gap of a quarter of the width set up by WCHFAC (XFAC,YFAC).

Note: The author calls the above three routines in the following order WTHICK, WCHFAC and WCHGAP.

(7) WCHMOP (ISPACE)

ISPACE = 0 for mono spacing (the default)

ISPACE = 1 for proportional spacing

Mono spacing (see Section 5.3.4 of the SMOG manual) assumes each character is 30 units wide (WRIGHT only has mono spacing) whereas proportional spacing (see Section 5.3.5 of the SMOG manual) uses the character widths in Appendix 6.

(8) WANGLE (XROT,YROT,DEG)

This routine sets up a rotation for subsequent use by any of the three writing routines. The rotation is about the point (XROT,YROT) and is DEG degrees clockwise, where DEG= 0.0 (the default) produces horizontal text. The rotation is not incremental in nature so that to return text to the horizontal call WANGLE with XROT, YROT and DEG = 0.0. Once a rotation has been set up it affects all subsequent text output until WANGLE is called again.

(9) WSLANT (SLOPE)

This routine is used to produce an italic effect. The characters are slanted so that the base remains in the same place but the top (of the standard defining rectangle) is moved by SLOPE units of the current character height. SLOPE may be negative or positive and is usually in the range -2.0 ≤ SLOPE ≤ 2.0 (assuming XFAC = YFAC). Outside this range the characters become very distorted.

To determine the angle of the slant from the vertical the following formula can be used:

   angle of slant= tan-1 (SLOPE * XFAC/YFAC) 

(10) WCHERR (MERROR)

The system will print out up to ten non-fatal error messages before it stops. To increase the number of errors allowed set MERROR to the desired amount, where MERROR < 1000. The first ten errors will be printed out and then the system will stop once MERROR errors have been detected. This is mainly of use when the text is being considerably reduced in size and any individual block which is too small to shade in produces an error message and is not drawn.

8.3 USE OF THE ENHANCED FONT

(1) The routines can only be used by SMOG users, they cannot be accessed successfully with SPROGS.

(2) The font is available on the 1906A and the 360/195. On the 1906A the routines are part of the Graphics Algorithms Library and so the additional parameter LIB :GRAFLIB.GRAFLIB is needed to select the Library. On the 360/195 they can be accessed by use of the standard SMOG JCL.

(3) Problems may be experienced when inputting the character strings from different terminals. For example, a Data Dynamics 390 connected to the 1906A has SHIFT - 4 as a $ (dollar) whereas in fact the symbol input is £ (pound), similarly SHIFT - L shows as a \ (back slash) at the terminal but is input as a $ (dollar). Another terminal the author has had problems with is the Newbury Laboratories 2180 connected to the360/195 where the ↑ (up arrow) key appears on the screen as just the head of the arrow, in fact it is input as a circumflex so the screen was correct and the key was wrong. The best method the author has found for solving this problem is to write a small program to read in characters and output the character codes numerically.

8.4 EXAMPLE ON THE 1906A

The cine area of the hardcopy camera in many-up mode is selected. This area is 16K rasters wide and the characters (with default spacing) occupy 400 rasters by default. The user limits for the cine area are set to 40 units by 30 units because of the cine ratio of 4 to 3 and the fact that about 40 characters can be plotted across the frame. To show the boundary of the cine area a box is drawn around it as follows:

C SELECT THE CINE AREA AND PUT A BOX AROUND IT 
      CALL FRHCM 
      CALL CINE 
      CALL JLIMV (0,0,40,30) 
      CALL BOXA (0.0,0.0,40.0,30.0)

The first row of text output is "Mono Spacing" to show the text that is output by default. Note the shift characters are included in the string and in the count of the number of characters:

C USE THE FONT WITH ALL THE DEFAULTS SET. 
      CALL WRITTE (2.0,27.0,'M]ONO $S]PACING',15) 

For the next row of text (and all subsequent rows) proportional spacing is selected because of the different widths of the lower case (beta shift) alphabet.

C SELECT PROPORTIONAL SPACING CALL 
      WCHMOP (1) 
      CALL WRITTE (2.0,24.5, 'P]ROPORTIONAL $S]PACING',23) 

The next two rows of text are slanted, the first forward by 0.5 and the second backwards by -1.0. The slanting is switched off by setting SLOPE to 0.0:

C SLOPE THE TEXT FORWARDS AND BACKWARDS 
      CALL WSLANT (0.5) 
      CALL WRITTE (2.0,22.0,'S]LOPING $F]ORWARDS',19) 
      CALL WSLANT (-1.0) 
      CALL WRITTE (2.0,19.5,'$S]LOPING $ B]ACKWARDS',21) 
      CALL WSLANT (0.0) 

For the next two rows the spacing between the individual lines used for shading is altered, not only does the intensity of the output change but as the text gets lighter it gets larger and as it gets darker it gets smaller. The change in intensity does not show up too well because the FR80 output is on many up hardcopy. If it were on hardcopy single (or any of the other cameras) then the first row of text would have a gap between each line and the second row would be noticeably darker than the default shading:

C SEPERATE LINES 
      CALL WTHICK (20) 
      CALL WRITTE (2.0,16.0,'LIGHTER',8) 
C 
C CLOSE GAPS UP 
      CALL WTHICK (5) 
      CALL WRITTE (2.0,14.0, 'D]ARKER',7) 

The spacing between the individual lines is returned to normal, that is, 10 rasters. Two rows of text are then written vertically at the right side of the frame. One is written down and the other is written up the frame:

      CALL WTHICK (10) 
C 
C ROTATE A FEW LINES 
      CALL WANGLE (36.0,27.0,90.0) 
      CALL WRITTE (36.0,27.0,'+90 D]EGREES',12) 
      CALL WANGLE (37.0,3.0,-90.0) 
      CALL WRITTE (37.0,3.0,'-90 D]EGREES',12) 

The example in the bottom left of the frame shows how to combine rotation and slanting. The slant of -1.0 returns the vertical lines making up the characters to the vertical because the text expansion factors in the X and Y directions are equal and the rotation is 45 degrees, This can be checked using the formula for calculating the angle of slant (8.2(9)). With SLOPE=-1.0 and XFAC=YFAC=1.0=default the angle of slant is tan -1 (-1.0) which is -45 degrees. If this is then rotated by 45 degrees the resulting angle is zero degrees giving vertical lines for the sloped text. The slant is then returned to the default but there is no need to adjust the angle of rotation as this is altered in the next example:

C ROTATE AND SLANT TEXT 
      CALL WSLANT (-1.0) 
      CALL WANGLE (2.0,11.5,45.0) 
      CALL WRITTE (2.0,11.5,'S]LIDING $D]OWN',15) 
      CALL WSLANT (0.0) 

The last two sections of the example program show three things. Firstly how to increase the size of the text without altering the apparent intensity of the shading. Secondly, how the shape of the characters is altered by setting the expansion factors unequal, in the example XFAC > YFAC therefore the characters are widened. Thirdly, how to alter the spacing between the characters independently of the character size. Both rows of text are rotated about the same point by 90 degrees showing how a set of text with a left margin when rotated produces a set with the margin at the top. The expansion factors are set to 4.0 user units in the X direction and 3.0 user units in the Y direction and for the second row of the output the gap is set to 2.5 user units:

C CHANGE SIZE AND SHAPE AND ROTATE 
      CALL WCHFAC (4.0,3.0) 
      CALL WANGLE (28.0,28.0,90.0) 
      CALL WRITTE (28.0,28.0,'B]IGGER',7) 
C 
C INCREASE SPACING 
      CALL WCHGAP (2.5) 
      CALL WRITTE (28.0,22.0,'B]IGGER',7) 

Finally the call to ENDSPR terminates the graphics part of the example program.

8.4.1 Listing of Program File is :GRAFEX.BLOKEX

C SELECT THE CINE AREA AND PUT A BOX AROUND IT 
      CALL FRHCM 
      CALL CINE 
      CALL JLIMV (0,0,40,30) 
      CALL BOXA (0.0,0.0,40.0,30.0)
C USE THE FONT WITH ALL THE DEFAULTS SET. 
      CALL WRITTE (2.0,27.0,'M]ONO $S]PACING',15) 
C SELECT PROPORTIONAL SPACING 
      CALL WCHMOP (1) 
      CALL WRITTE (2.0,24.5, 'P]ROPORTIONAL $S]PACING',23) 
C SLOPE THE TEXT FORWARDS AND BACKWARDS 
      CALL WSLANT (0.5) 
      CALL WRITTE (2.0,22.0,'S]LOPING $F]ORWARDS',19) 
      CALL WSLANT (-1.0) 
      CALL WRITTE (2.0,19.5,'$S]LOPING $ B]ACKWARDS',21) 
      CALL WSLANT (0.0) 
C SEPERATE LINES 
      CALL WTHICK (20) 
      CALL WRITTE (2.0,16.0,'LIGHTER',8) 
C 
C CLOSE GAPS UP 
      CALL WTHICK (5) 
      CALL WRITTE (2.0,14.0, 'D]ARKER',7) 
      CALL WTHICK (10) 
C 
C ROTATE A FEW LINES 
      CALL WANGLE (36.0,27.0,90.0) 
      CALL WRITTE (36.0,27.0,'+90 D]EGREES',12) 
      CALL WANGLE (37.0,3.0,-90.0) 
      CALL WRITTE (37.0,3.0,'-90 D]EGREES',12) 
C ROTATE AND SLANT TEXT 
      CALL WSLANT (-1.0) 
      CALL WANGLE (2.0,11.5,45.0) 
      CALL WRITTE (2.0,11.5,'S]LIDING $D]OWN',15) 
      CALL WSLANT (0.0) 
C CHANGE SIZE AND SHAPE AND ROTATE 
      CALL WCHFAC (4.0,3.0) 
      CALL WANGLE (28.0,28.0,90.0) 
      CALL WRITTE (28.0,28.0,'B]IGGER',7) 
C 
C INCREASE SPACING 
      CALL WCHGAP (2.5) 
      CALL WRITTE (28.0,22.0,'B]IGGER',7)
      CALL ENDSPR
      STOP
      END
**** 

8.4.2 Command To Run Example Program

The command issued (whilst logged in at MOP) to run the program is:

    TASK F,SM,*CR :GRAFEX.BLOCKEX,LIB :GRAFLIB.GRAFLIB,*LP,#LP6,JT35 The LIB Parameter is needed because the blocked font routines are part of the Graphics Algorithms Library. 

8.4.3 FR80 Output Produced

Notes:

The routine WRITTE has been used throughout for writing the text. Only alpha shift($) or beta shift(]) have been used.

The default shift is alpha although in one of the examples this is selected anyway just to show that it does no harm.

A vertical gap of 1.5 units is left between each row of text written at the left of the frame.

Positive rotation is clockwise and negative rotation is anti-clockwise.

The point of rotation is usually the same as the starting point for a string of text to save any calculations as to what the mapping for the start point really is.

8.5 EXAMPLE OF USE ON 360/195

The output produced is the same as for section 8.4 although there are several differences in the program. The major difference is the use of the routine WRITHE instead of WRITTE, for example:

C 
C USE THE FONT WITH ALL THE DEFAULTS SET 
      CALL WRITHE (2.0,17.0,'Mono Spacing',12) 

The upper and lower case text was entered into a file with ENTTYP=BVLC on a Newbury Laboratories terminal. Note how the text string is 12 characters long not 15.

The other changes are: the use of FRSPEC in place of FRHCM and the removal of the LIST and MASTER statements. FRSPEC selects the FR80 camera as specified in the //G.GRAPHICS card in the JCL, it is the preferred method for 360/195 SMOG users. See section 8.5.3 for the program.

8.5.1 JCL To Run The Program

The JCL is as for normal use of SMOG, the example can be run EXECing the file 3RMAINDR.EX85(EX). Three optional parameters may be planted:

PH     First 2 chars of jobname                 default XA
JBNM   Up to 6 chars for rest of jobname        default MPLE
NAME   Programmer name                          default EXAMPLE

8.5.2 FR80 Output Produced

8.5.3 Listing of Program and JCL,_ File Is 3RMAINDR.EX85

C CHANGE SIZE AND SHAPE AND ROTATE 
      CALL WCHFAC (4.0,3.0) 
      CALL WANGLE (28.0,28.0,90.0) 
      CALL WRITTE (28.0,28.0,'B]IGGER',7) 
C 
C INCREASE SPACING 
      CALL WCHGAP (2.5) 
      CALL WRITTE (28.0,22.0,'B]IGGER',7) 

Finally the call to ENDSPR terminates the graphics part of the example program.

8.4.1 Listing of Program File is :GRAFEX.BLOKEX

//XAMPESC FORTH,CPRINT=YES,SYSLIF='SYS1.SMOG',REGION.G=210K 
//C.SYSIN DD * 
C SELECT THE CINE AREA AND PUT A BOX AROUND IT 
      CALL FRHCM 
      CALL CINE 
      CALL JLIMITV (0.0,0.0,40.0,30.0) 
      CALL BOXA (0.0,0.0,40.0,30.0)
C USE THE FONT WITH ALL THE DEFAULTS SET. 
      CALL WRITHE (2.0,27.0,'Mono Spacing',12) 
C SELECT PROPORTIONAL SPACING 
      CALL WCHMOP (1) 
      CALL WRITHE (2.0,24.5, 'Proportional Spacing',20) 
C SLOPE THE TEXT FORWARDS AND BACKWARDS 
      CALL WSLANT (0.5) 
      CALL WRITHE (2.0,22.0,'Sloping Forwards',16) 
      CALL WSLANT (-1.0) 
      CALL WRITHE (2.0,19.5,'Sloping Backwards',17) 
      CALL WSLANT (0.0) 
C SEPERATE LINES 
      CALL WTHICK (20) 
      CALL WRITHE (2.0,16.0,'Lighter',7) 
C 
C CLOSE GAPS UP 
      CALL WTHICK (5) 
      CALL WRITHE (2.0,14.0, 'Darker',6) 
      CALL WTHICK (10) 
C 
C ROTATE A FEW LINES 
      CALL WANGLE (36.0,27.0,90.0) 
      CALL WRITHE (36.0,27.0,'+90 Degrees',11) 
      CALL WANGLE (37.0,3.0,-90.0) 
      CALL WRITTE (37.0,3.0,'-90 Degrees',11) 
C ROTATE AND SLANT TEXT 
      CALL WSLANT (-1.0) 
      CALL WANGLE (2.0,11.5,45.0) 
      CALL WRITHE (2.0,11.5,'Sliding Down',12) 
      CALL WSLANT (0.0) 
C CHANGE SIZE AND SHAPE AND ROTATE 
      CALL WCHFAC (4.0,3.0) 
      CALL WANGLE (28.0,28.0,90.0) 
      CALL WRITTE (28.0,28.0,'Bigger',6) 
C 
C INCREASE SPACING 
      CALL WCHGAP (2.5) 
      CALL WRITHE (28.0,22.0,'Bigger',6) 
      CALL ENDSPR
      STOP
      END

APPENDIX 1: Routine Names

The following names are used by the blocked font and should be avoided by the user:

WANGLD     WANGLE       WCHERR
WCHFAC     WCHGAP       WCHMOP
WDCODE     WDCODF       WFLERR
WPLOTC     WPLOTD       WPLOTE
WPLOTF     WRIGHT       WRITHE
WRITTE     WSEMI        WSIZE
WSLAND     WSLANT       WTHICK
WVFXPL     WVFXRC       WVFYPL
WVFYRC     

APPENDIX 2: 1906A Internal Machine Codes

Table A2-1 shows the internal machine codes (octal) for the 64 characters input to WRIGHT and WRITTE on the 1906A. The table also shows the output produced by WRIGHT. Most of these characters have a one-one correspondence with the keys at a terminal or card punch. For example, to input an A which is octal 4l (or decimal 33) type A which will be input as octal 41!

Least significant octal digit Most significant octal digit

Table A2-1: 1906A internal machine codes for WRIGHT and WRITTE

APPENDIX 3: 360/195 Internal Machine Codes

Table A3-1 shows the internal machine codes (hexadecimal) for the 64 characters input to WRIGHT and WRITTE on the 360/195. The Table shows the output produced by WRIGHT. For example, inputting 5 (F5 hexadecimal) to WRIGHT will output the character 5.

Least significant hexadecimal digit Most significant hexadecimal digit

Table A3-1: 360/195 internal machine codes for WRIGHT and WRITTE

APPENDIX 4: Output Produced By WRITTE

The character codes input to WRITTE are shown in Appendix 2 for the 1906A and Appendix 3 for the 360/195, Table A4-1I shows the characters output when alpha shift has been selected, Table A4-2 shows beta shift and Table A4-3 shows delta shift. The codes in all three tables are in decimal.

Most significant decimal digit

Table A4-1: Alpha shift characters output by WRITTE

Most significant decimal digit

Table A4-2: Beta shift characters output by WRITTE

Most significant decimal digit -->

Table A4-3: Delta shift characters output by WRITTE

For example, to output \ (back slash) on the 1906A. Delta shift has to be selected by ↑ (up arrow) which is character 62 (octal). The \ is in position 17 (21 octal) which if checked in Table A2-1 is ! (exclamation mark). Thus the two characters needed for \ are ↑ ! (on most terminals).

To output # (number) on the 360/195, beta shift must have previously been selected by ] (right bracket), character BD (hexadecimal). The number is in position 19 (23 octal). Character 23 in Table A2-1 is #x2260; (not equals) which is character 7B (hexadecimal) in Table A3-1. On most terminals character 7B is input by typing # (SHIFT -3).

APPENDIX 5: Characters For WRITHE On The 360/195

Table A5-1 shows the internal machine codes (hexadecimal) for those characters defined on the 360/195 and output by WRITHE. There is a one-one correspondence between the code of the character input and the character as defined in the table. As can be seen from the table undefined characters produce a space.

Least significant hexadecimal digit Most significant hexadecimal digit

Table A5-1: Characters defined for WRITHE on the 360/195

The codes in the table correspond to the codes as defined in the Rutherford Laboratory's EBCDIC Standard (see section 4 of RL-76-121/C "Standard Character Codes for the RL Central Computer System" by C D Osland).

Appendix 6: Character Widths for Proportional Spacing

6a Code a are decimal and 195 Code is hexadecimal.

^ is used to indicate that it occurs in WRIGHT and WRITTE.

Number   Char   Width   6A Code   195 Code   WRIGHT   WRITTE   WRITHE   
  1       A        30        33         C1      ^     alpha       ^   
  2       B        30        34         C2      ^     alpha       ^   
  3       C        30        35         C3      ^     alpha       ^  
  4       D        30        36         C4      ^     alpha       ^   
  5       E        30        37         C5      ^     alpha       ^   
  6       F        30        38         C6      ^     alpha       ^   
  7       G        30        39         C7      ^     alpha       ^   
  8       H        30        40         C8      ^     alpha       ^   
  9       I        30        41         C9      ^     alpha       ^   
 10       J        30        42         D1      ^     alpha       /   
 11       K        30        43         D2      ^     alpha       ^   
 12       L        30        44         D3      ^     alpha       ^   
 13       M        30        45         D4      ^     alpha       ^   
 14       N        30        46         D5      ^     alpha       ^   
 15       O        30        47         D6      ^     alpha       ^   
 16       P        30        48         D7      ^     alpha       ^   
 17       Q        30        49         D8      ^     alpha       ^   
 18       R        30        50         D9      ^     alpha       ^   
 19       S        30        51         E2      ^     alpha       ^   
 20       T        30        52         E3      ^     alpha       ^   
 21       U        30        53         E4      ^     alpha       ^   
 22       V        30        54         E5      ^     alpha       ^  
 23       W        30        55         E6      ^     alpha       ^   
 24       X        30        56         E7      ^     alpha       ^   
 25       Y        30        57         E8      ^     alpha       ^   
 26       Z        30        58         E9      ^     alpha       ^   
 27   space        30        16         40      ^     alpha            
 28       ,        30        28         6B      ^     alpha           
 29       .        30        30         4B      ^     alpha           
 30       0        30         0         F0      ^     alpha            
 31       1        30         1         F1      ^     alpha            
 32       2        30         2         F2      ^     alpha            
 33       3        30         3         F3      ^     alpha             
 34       4        30         4         F4      ^     alpha            
 35       5        30         5         F5      ^     alpha              
 36       6        30         6         F6      ^     alpha              
 37       7        30         7         F7      ^     alpha            
 38       8        30         8         F8      ^     alpha             
 39       9        30         9         F9      ^     alpha                
 40       +        30        27         4E      ^     alpha       ^
 41       -        30        29         60      ^     alpha       ^
 42       *        30        26         5C      ^     alpha       ^
 43       ÷        30        31         EB      ^     alpha       ^
 44       =        30        13         7E      ^     a1pha       ^
 45       >        30        14         6E      ^     alpha     
 46       <         30       12         4C      ^     alpha     
 47       )        30        25         5D      ^     alpha     
 48       (        30        24         4D      ^     alpha     
 49       ≠        30        19         BE      ^     alpha       ^   
 50       :        30        10         7A      ^     alpha     
 51       ;        30        11         5E      ^     alpha     
 52       ?        30        15         6F      ^     alpha       ^
 53       !        30        17         5A      ^     alpha       
 54       "        30        18         7F      ^     alpha       
 55       '        30        23         7D      ^     alpha       
 56       [        30        59         AD      ^     alpha       
 57       ]        30        61         BD      ^     BETA       
 58       ↑        30        62         CB      ^     DELTA       
 59       ←        30        63         CD      ^     UND         ^   
 60       £        30        20         DB      ^     alpha       ^   
 61       %        30        21         6C      ^     alpha       
 62       &        30        22         50      ^     alpha       
 63       @        30        32         7C      ^     alpha       ^   
 64       $        30        60         5B      ^     ALPHA       ^   
 65       a        20        33         81            beta        ^   
 66       b        20        34         82            beta        ^   
 67       c        20        35         83            beta        ^   
 68       d        20        36         84            beta        ^   
 69       e        20        37         85            beta        ^   
 70       f        20        38         86            beta        ^   
 71       g        20        39         87            beta        ^   
 72       h        20        40         88            beta        ^   
 73       i         6        41         89            beta        ^   
 74       j        20        42         91            beta        ^   
 75       k        20        43         92            beta        ^   
 76       l         6        44         93            beta        ^   
 77       m        30        45         94            beta        ^   
 78       n        20        46         95            beta        ^   
 79       o        20        47         96            beta        ^   
 80       p        20        48         97            beta        ^   
 81       q        26        49         98            beta        ^   
 82       r        20        50         99            beta        ^   
 83       s        20        51         A2            beta        ^   
 84       t        20        52         A3            beta        ^   
 85       u        20        53         A4            beta        ^   
 86       V        20        54         A5            beta        ^   
 87       w        30        55         A6            beta        ^   
 88       x        20        56         A7            beta        ^   
 89       y        20        57         A8            beta        ^   
 90       z        20        58         A9            beta        ^   
 91       [        20        59         AD            beta        ^   
 92       ]        20                   BD                        ^   
 93       ↑        20                   CB                        ^   
 94                20        62         DELTA       
 95                20        63         UND       
 96                20        32         beta       
 97       0        30         0         F0            beta        ^   
 98       1        12         1         F1            beta        ^   
 99       2        30         2         F2            beta        ^   
100       3        30         3         F3            beta        ^   
101       4        30         4         F4            beta        ^   
102       5        30         5         F5            beta        ^   
103       6        30         6         F6            beta        ^   
104       7        30         7         F7            beta        ^     
105       8        30         8         F8            beta        ^     
106       9        30         9         F9            beta        ^     
107       :        10        10         7A            beta        ^     
108       ;        10        11         5E            beta        ^        
109       <        20        12         4C            beta        ^   
110       =        30        13         7E            beta        ^
111       >        20        14         6E            beta        ^
112       ?        30        15         6F            beta        ^
113   space        20        16         40            beta        ^  
114       !         6        17         5A            beta        ^   
115       "        18        18         7F            beta        ^   
116       #        30        19         7B            beta        ^
117       £        30        20         DB            beta        ^
118       %        20        21         6C            beta        ^  
119       &        30        22         50            beta        ^
120       '         6        23         7D            beta        ^
121       (        10        24         4D            beta        ^
122       )        10        25         5D            beta        ^
123       *        30        26         5C            beta        ^
124       +        30        27         4E            beta        ^
125       ,        10        28         6B            beta        ^
126       -        30        29         60            beta        ^
127       .        10        30         4B            beta        ^
128       /        30        31         61            beta        ^
129       -        30                   BF                        ^   
130       |        30                   FA                        ^   
131       +        30                   8F                        ^   
132       r        30                   AC                        ^   
133       .        30                   AB                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ?   
134       .        30                   BB                        ^                  
135       ,        30                   BC                        ^   
136   under        30                   6D                        ^   
137       |         6                   4F                        ^   
138       :         6                   6A                        ^             
139                     
140                     
141                     
142                     
143                     
144                     
145
146       \        30        17         EO            delta       ^   
147                     
148                     
149                     
150                     
151                     
152                     
153                     
154                     
155                     
156                     
157                     
158                     
159                     
160                     
161                     
162                 
163                 
164                 
165                 
166                 
167                 
168                 
169                 
170                 
171                 
172                 
173                 
174                 
175                 
176                 
177                 
178                 
179                 
180                 
181       $        30        52         E3            delta     
181       ]        30        53         E4            delta     
182       ↑        30        54         E5            delta     
183       ←        30        55         E6            delta     
184                 
185                 
186                 
187                 
188                 
189                 
190                 
191                 
192                 
193                 
194                 
195                 
196                 
197                 
198                 
199                 
200                 

APPENDIX 7: The TEXT String Arguments

The TEXT argument passed to the WRIGHT, WRITHE and WRITTE routines can take either of two forms:

(a) a text constant, for example:

'A STRING IN QUOTES' 
15HA TEXT CONSTANT 

(b) a variable or an array element containing the string of text. The text can either be read in or assigned in a DATA statement for example:

      DATA ITEXT,JCHARS/4HWORD,9HMORE TEXT/ 

where JCHARS is an array.

Care has to be taken when using the 1906A or the 360/195 because different data types are of different lengths and thus will hold a different number of characters. For example a LOGICAL*1 variable on the 360 will only hold one character whereas a REAL*8 variable will hold 8 characters.

⇑ Top of page
© Chilton Computing and UKRI Science and Technology Facilities Council webmaster@chilton-computing.org.uk
Our thanks to UKRI Science and Technology Facilities Council for hosting this site