ASMB,R,L,C
* 
* 
* 
**************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
* RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
* PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
* OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
**************************************************************
* 
* 
* 
*      NAME:    SYMB    
*      SOURCE:  92840-18110 
*      RELOC:   92840-16012 
* 
* 
* 
************************************************************* 
* 
      NAM SYMB,8  92840-16012 REV.1913 790110 
* 
* 
* 
****************************************************************
* 
* 
* 
* 
****************************************************************
* 
      ENT Z12SB 
* 
      EXT Z12PT,SIN,COS,.ENTR,ERR0,IFIX,FLOAT 
* 
****************************************************
* 
* ROUTINE:  SYMB  (SYMBOL)
* 
*        -FORTRAN LINKAGE-
*         CALL SYMB(X,Y,SIZE,BCD,THETA,N) 
* 
*        -CALLING SEQUENCE- 
*           JSB SYMB
*           DEF *+7 
*           DEF X 
*           DEF Y 
*           DEF SIZE
*           DEF BCD 
*           DEF THETA 
*           DEF N 
* 
*        WHERE  X AND Y ARE THE PAGE COORDINATES
*         OF THE LOWER LEFT CORNER OF THE FIRST 
*         CHARACTER. SIZE IS THE DESIRED LETTER 
*         HEIGHT. BCD IS THE LOCATION OF THE
*         ASCII ARRAY. THETA IS THE ANGLE OF
*         LETTERING WITH RESPECT TO THE  X-AXIS.
* 
*         - X,Y,SIZE AND THETA ARE FLOATING POINT 
*          NUMBERS. (THETA IS IN DEGREES).
* 
*          N=1   PLOT THE ASCII STRING DEFINED BY BCD 
*          N=-1  PLOT THE SPECIAL CHARACTER GIVEN AND LEAVE THE 
*                  PEN DOWN 
*          N=-2  PLOT THE SPECIAL CHARACTER GIVEN AND LEAVE THE 
*                  PEN UP 
* 
*          BCD   CAN BE AN INTEGER ARRAY OF THE ACTUAL CHARACTERS 
*                  TO BE PLOTTED (ASCII STRING CONVENTION IS USED 
*                  WHICH MEANS THAT THE FIRST WORD INDICATES THE
*                  NUMBER OF CHARCTERS THAT FOLLOWS) OR AN INTEGER
*                  THAT SPECIFIES THE SPECIAL CHARACTER TO BE PLOTTED.
* 
******************************************************* 
* 
X     DEF FL999    PARAMETER AREA 
Y     DEF FL999     (SET BY .ENTR AFTER CALL) 
SIZE  DEF OFCT      (INITIALIZED TO FIXED VALUES
BCD   DEF C.02       TO PROTECT ROUTINE FROM SHORT
THETA DEF OTHET      PARAMETER LIST). 
N     DEF CM.8
* 
* 
Z12SB NOP 
      JSB .ENTR     SET UP PARAMETER
      DEF Z12SB-6     LINKAGE AREA
* 
      LDA C.03     INITIALIZE PEN TO
      STA PEN        UP POSITION. 
      LDA N,I      CHECK  -N- 
      SSA,RSS       IF N >= 0, GO TO
      JMP S1         SET FOR ARRAY PLOT.
* 
* SPECIAL CHARACTER   ( N < 0 ) 
* 
      LDB C.02
      CMA,SZA   IF N<=-1 THEN SET PEN=2 
      STB PEN       FOR PEN DOWN CONDITION. 
      CCA          SET CHCNT = -1 FOR ONE CHAR
      STA CHCNT     TO BE DRAWN.
      LDA TAB2A    SET TABA TO REFERENCE TAB2 - 
      STA TABA      SPECIAL CHARACTER TABLE.
      DLD BCD,I    GET CHAR VALU, SAVE A
      JSB IFIX
      STA CHAR      INDEX TO TAB2.
      JMP S2         -NORMAL OFFSET- (GT 14(8)) 
* 
* ASCII CHARACTER PLOT (ARRAY OR SINGLE CHARACTER)
* 
S1    LDA BCD,I    GET CHAR COUNT 
      ISZ BCD      INCREMENT ADDRESS TO CHARACTERS
      AND M377     MASK OUT HIGH ORDER BITS 
      CMA,INA      SET N NEGATIVE - 
      STA B        (SAVE TEMPORARILY) 
      SZA,RSS      IF N = 0 (SINGLE CHAR PLOT), 
      CCA           SET  N = -1.
      STA CHCNT    SET N AS INDEX FOR CHAR. COUNT.
* 
      LDA BCD    GET ARRAY ADDRESS - CONVERT TO 
      RAL           CHAR. ADDRESS (UPPER CHAR)
      SZB,RSS      IF SINGLE CHAR. OUTPUT, SET ADDR.
      INA           TO LOWER (BIT 0 =1) 
      STA ARRAD    SAVE ADDRESS.
      LDA N,I       CHECK FOR TYPE OF PLOT
      SZA           USE VECTORS?
      JMP DOTPA     NO,USE DOT PATTERNS 
      LDA TAB1A    SET TABLE ADDRESS = TAB1A TO 
      STA TABA      REFERENCE ASCII SET TABLE.
* 
S2    DLD SIZE,I   GET SIZE PARAMETER, DIVIDE BY
*                  (ADDR OF F7 OR F4 - SET AT S2+1) 
      DST FCT      SET FACTOR  (SIZE/DIV).
* 
* CHECK FOR NEW THETA (ROTATIONAL) PARAMETER
* 
      DLD THETA,I  CHECK NEW THETA
      CPA OTHET     AGAINST OLD THETA VALUE 
      RSS            (INITIALIZED TO 0-DEGREES.)
      JMP S3       -NEW-
      CPB OTHET+1 
      JMP S4       -SAME AS OLD VALUE-
* 
* CONVERT THETA TO RADIANS, COMPUTE SIN, COS
* 
S3    DST OTHET    SAVE AS NEW OLD-THETA
      JSB SICOS     CALC. SIN AND COS 
      JMP S5
* 
* 
* 
SICOS NOP           CONV. THETA TO SIN AND COS
      DST TEMP1 
      JSB SIN      CALCULATE SINE 
      JSB ERR0
      DST INCS
      DLD TEMP1 
      JSB COS      CALCULATE COSINE 
      JSB ERR0
      DST INCC
      DLD FCT 
      JMP SICOS,I   RETURN
* 
* CHECK FOR NEW FACTOR PARAMETER (SIZE/DIV) 
* 
S4    DLD FCT    CHECK FOR CHANGE IN
      CPA OFCT       FACTOR 
      RSS 
      JMP S5        -NEW- 
      CPB OFCT+1
      JMP S8       -SAME AS OLD VALUE 
* 
* CALCULATE POINT FACTORS FOR POINT (X1,Y1) 
* 
S5    DST OFCT     SET NEW VALUE AS OLD FACTOR
      FMP INCC     CALCULATE  XA1 = FCT * INCC
      DST XA1 
      DLD OFCT
      FMP INCS     CALCULATE  YA1 = FCT * INCS
      DST YA1 
* 
* CALCULATE POINT FACTORS FOR 10X10 MATRIX (2 TO 9) 
* 
      LDA XA2A     SET ADDR. FOR
      STA TEMP1      XA(2)
      LDA CM.8     SET INDEX FOR RANGE
      STA TEMP2      XA(2)  TO  XA(9) 
      DLD XA1      XA(I) = XA(1) + XA(I-1)
S6    FAD XA1 
      DST TEMP1,I   SET  XA(I) FOR I = 2-9
      ISZ TEMP1     -SET ADDR.
      ISZ TEMP1           FOR NEXT FLPT NUMBER. 
      ISZ TEMP2          INDEX FOR 2 TO 9 
      JMP S6             -CONTINUE
* 
      LDA YA2A          REPEAT
      STA TEMP1          ABOVE
      LDA CM.8            PROCESSING
      STA TEMP2            FOR
      DLD YA1               YA(2) TO YA(9)
S7    FAD YA1                ACCORDING TO:
      DST TEMP1,I 
      ISZ TEMP1          YA(I) = YA(1) + YA(I-1)
      ISZ TEMP1 
      ISZ TEMP2 
      JMP S7
* 
* PROCESS X,Y COORDINATES IN CALL 
* 
S8    DLD X,I      IF -X- IS GT OR = TO 
* 
      FSB XA2 
      FAD YA2        XORG = X - XA(2) + YA(2) 
      DST XORG
* 
S9    DLD Y,I      IF -Y- IS GT OR = TO 
* 
      FSB XA2 
      FSB YA2        YORG = Y - XA(2) - YA(2) 
      DST YORG
* 
S10   LDB N,I      IF N < 0, THEN SET 
      LDA CHAR      (A) = CHAR INDEX
      SSB            AND GO TO
      JMP S12         GET CHAR. OFFSETS.
* 
* EXTRACT CHAR FROM BCD ARRAY AND INDEX TO TABLES 
* 
S11   LDB ARRAD    GET CURRENT CHARACTER ADDRESS
      LBT 
      STB ARRAD     - SET FOR NEXT CHARACTER ADDR.- 
      AND M77          IN A. (USE ONLY LOW 6-BITS)
* 
S12   ADA TABA     SET APPROPRIATE TABLE
      STA TEMP1     ADDRESS - 
      LDA A,I      GET TABLE VALUE FOR -CHAR- 
      AND M377     GET ADDR OF FIRST OFFSET WORD
      ADA TABLA     IN OFFSET TABLE - CONVERT TO
      RAL            UPPER POSITION 
      STA OFFST       CHARACTER ADDRESS.
      LDA TEMP1,I  GET TABLE WORD AGAIN.
      SSA          IF BIT 15 = 1, SET OFFSET ADDRESS
      ISZ OFFST     TO LOWER POSITION.
      ALF,ALF      ROTATE OFFSET COUNT TO 
      AND M177      LOW A (7-BITS) AND SET
      CMA,INA        NEGATIVE FOR 
      STA OFFCT       INDEX FOR INDEX FACTORS 
* 
* EXTRACT AND PROCESS EACH OFFSET PAIR FOR CHARACTER
* 
S13   LDB OFFST    GET CURRENT OFFSET-PAIR CHARACTER
      LBT 
      STB OFFST     ADDRESS, SET FOR NEXT ADDRESS.
      ALF,ALF       (X,Y) OF 8-BITS.
      STA B         SAVE  X,Y.
      ALF          PUT X
      AND M17       IN LOW A, 
      ALS            MULTIPLY BY 2
      STA TEMP1       AND SAVE FOR INDEX TO XA-ARRAY
      LDA B        PUT
      ALF,ALF       Y IN LOW A, 
      AND M17        MULTIPLY 
      ALS             BY 2
      STA TEMP2        AND SAVE FOR INDEX TO YA.
      LDA M36      IF X OFFSET = 17(8) FOR
      LDB C.03      PEN-UP, THEN
      CPA TEMP1      GO TO SET IC AND GET 
      JMP S14         NEXT OFFSET PAIR. 
* 
      LDA XAD      COMPUTE ADDRESS OF 
      ADA TEMP1      XA-ARRAY FOR X-OFFSET
      STA TEMP3 
      LDA YAD      COMPUTE ADDRESS OF 
      ADA TEMP2      YA-ARRAY FOR  Y-OFFSET 
      STA TEMP4 
      DLD XORG     COMPUTE: 
      FAD TEMP3,I 
      FSB TEMP4,I   XT = XORG + XA(KX) - YA(KY) 
      DST XT
* 
      LDA YAD      COMPUTE ADDRESS OF 
      ADA TEMP1      YA-ARRAY FOR  X-OFFSET 
      STA TEMP3 
      LDA XAD      COMPUTE ADDRESS OF 
      ADA TEMP2      XA-ARRAY FOR Y-OFFSET
      STA TEMP4 
      DLD YORG     COMPUTE
      FAD TEMP3,I 
      FAD TEMP4,I   YT = YORG + YA(KX) + XA(KY) 
      DST YT
* 
* CALL FOR PLOT FOR CURRENT XT,YT 
* 
      JSB Z12PT 
      DEF *+4 
      DEF XT
      DEF YT
      DEF PEN 
* 
* 
      LDB C.02     SET FOR PEN DOWN 
S14   STB PEN 
* 
      ISZ OFFCT    INDEX CHARACTER OFFSET COUNT 
      JMP S13       - MORE TO PROCESS - 
* 
* SET X-ORIGIN AND Y-ORIGIN FOR NEXT CHARACTER. 
* 
      DLD XORG
      FAD XA7      X-ORIGIN = X-ORIGIN + XA(7)
      DST XORG
* 
      DLD YORG
      FAD YA7      Y-ORIGIN = Y-ORIGIN + YA(7)
      DST YORG
      LDA C.03
      STA PEN 
* 
      ISZ CHCNT    INDEX CHARACTER COUNTER
      JMP S11       - MORE TO PLOT -
* 
* CALL TO SYMB COMPLETED
* 
SYMBR JMP Z12SB,I 
      HED USE ACTUAL DOT PATTERNS 
DOTPA EQU *         USE DOT PATTERNS
      DLD SIZE,I    SIZE OF CHAR. 
      JSB IFIX
      SSA 
      CMA,INA       FORM ABSOLUTE VALUE 
      SZA,RSS       INVALID 0?
      CLA,INA       YES, SET IT TO 1
      STA SIZEF     SAVE ABSOL. SIZE (FIXED PT.)
      DLD THETA,I   ANGLE 
      FAD D45.0     "ROUND" 
      JSB SICOS     CALC. SINE AND COS
* DETERMINE IF HORIZ. OR VERTICAL AXIS
      CLB           FLAG FOR VERTICAL 
      LDA INCS      SINE OF THETA 
      XOR INCC      COS OF THETA
      SSA           HORIZ?
      INB           NO
      STB HVFLG     HORIZ/VERT. FLAG
* DETERMINE ACTUAL QUADRANTS
      CLB,INB 
      LDA INCS      SIN OF THETA
      SSA           QUAD. 1 OR 2? 
      CMB,INB       NO. 3 OR 4
      LDA HVFLG     HORIZ/VERT FLAG 
      SZA           HORIZ.? 
      CMB,INB       NO
      STB MY        + OR - 1
      CLB,INB 
      LDA INCC      COS OF THETA
      SSA           QUAD. 1 OR 4? 
      CMB,INB       NO, 2 OR 3
      LDA HVFLG     HORIZ/VERT FLAG 
      SZA           HORIZ.? 
      CMB,INB       NO
      STB MX        + OR - 1
* PICK UP ADDRESS TO DOT PATTERNS 
      CLB           ADDR. ONLY FLAG FOR GPARA 
* SET UP VALUES & CONVERT TO INTEGER
      CLA,INA       BOTTOMS UP READ 
      JSB Z12PT 
      DEF *+4 
      DEF X,I 
      DEF Y,I 
      DEF D3        PEN UP
      STA IX        SAVE INTEGER VALUE OF X-COORD.
      STB IY        SAVE INTEGER VALUE OF Y-COORD.
      STA IIX       ESTABLISH RESET VALUE FOR X-COORD.
      STB IIY       ESTABLISH RESET VALUE FOR Y-COORD.
* EXTRACT CHAR. FROM BCD ARRAY
NXCHR EQU *         NEXT CHARACTER
      LDA ARRAD     CHAR. POINTER TO USER'S BUFFER
      ISZ ARRAD     POINT TO NEXT CHAR. IN BCD STRING 
      CLE,ERA       SHIFT RIGHT/LEFT BIT & /2 
      LDA A,I       PICK UP DESIRED WORD
      SEZ,RSS       RIGHT-HAND CHAR.? 
      ALF,ALF       NO
      AND B177
* DETERMINE RIGHT OR LEFT PORTION OF BIT-PAT.-WORD
      CLE,ERA       SHIFT RIGHT/LEFT BIT & /2 
      CLB           FLAG FOR LEFT 
      SEZ           USE RIGHT HALF OF BIT-PATTERNS? 
      CCB           YES 
      STB RORL      0=LEFT, NOT 0=RIGHT 
      ADA CHBIS     CHAR. BIAS/2
      MPY D9        9 WORDS/CHAR. 
      ADA D9        POINT TO BOTTOM OF LIST 
      ADA ACBUF     START OF BIT-PATTERNS 
      STA ABITP     SAVE POINTER TO BIT-PATTERNS
      LDA MD9       ROWS/CHAR.
      STA IDX1      INDEX FOR LOOP
NXROW EQU *         NEXT ROW
      LDB RORL      RIGHT OR LEFT BIT-PAT. FLAG 
      LDA ABITP     POINTER TO BIT PATTERNS 
      ADA MD1       BUMP POINTER TO NEXT ROW
      STA ABITP     RESTORE IT
      LDA A,I       PICK UP CURRENT BIT PATTERN 
      CLE,ERB       SHIFT RIGHT/LEFT FLAG 
      SEZ           LEFT HALF?
      ALF,ALF       NO
      CLE,ELA       IGNORE 1ST COL. 
      STA BITP      NEXT ROW OF BIT PATTERNS
      LDA NOCOL     NO. COLUMNS (7 OR 5)
      STA IDX2      INITIALIZE INDEX FOR COLUMNS
NXBIT EQU *         NEXT BIT
      LDA BITP      CURRENT BIT PATTERN FOR THIS ROW
      CLE,ELA       SHIFT BIT INTO POSITION 
      STA BITP      SAVE REMAINING BITS 
      SEZ,RSS       BIT SET?
      JMP NOTST     NO
      DLD IX        X,Y 
      JSB TBITO     TURN THIS BIT ON IN DISC
      LDA SIZEF     POSSIBLE SIZE OF CHAR.
      CPA D1        *2? 
      JMP NOTX2     NO
      CLA 
      LDB MY        Y = Y + MY
      JSB HVCK      HORIZ/VERT CHECK FOR SWAP X&Y 
      JSB TBITO     SET THIS BIT ON IN DISC 
      LDA MX        X = X + MX
      CLB 
      JSB HVCK      CHECK FOR SWAP
      JSB TBITO     SET BIT ON
      CLA 
      LDB MY        Y = Y - MY
      CMB,INB 
      JSB HVCK      CHECK FOR SWAP
      JSB TBITO     SET BIT ON
      JMP NOTX2     INC. X BY ONLY 1 FOR X2 NOW 
NOTST EQU *         BIT NOT SET 
      LDA SIZEF     POSSIBLE SIZE OF CHAR.
      CPA D1        *2? 
      JMP NOTX2     NO
      LDA MX        X = X + MX
      CLB 
      JSB HVCK      CHECK FOR SWAP
NOTX2 EQU *         NOT TWICE AS BIG
      LDA MX        X = X + MX
      CLB 
      JSB HVCK      CHECK FOR SWAP
CKROW EQU *         CHECK IF ROW COMPLETE 
      ISZ IDX2      FINISHED W/ ALL COL. IN ROW?
      JMP NXBIT     NO,CHECK NEXT BIT IN ROW
      LDB AIIX      ADDR. OF RESET VALUES 
      ADB HVFLG     BIAS TO APPROPIATE VALUE
      LDA B,I       PICK UP X OR Y COORD. 
      ADB D2        BIAS TO PROPER COORD. 
      STA B,I       SAVE APPROPIATE COORD.
      CLA 
      LDB MY        Y = Y + MY
      JSB HVCK      CHECK FOR SWAP
      LDA SIZEF     POSSIBLE SIZE OF CHAR.
      CPA D1        *2? 
      JMP CKR       NO
      CLA 
      LDB MY        Y = Y + MY
      JSB HVCK      CHECK FOR SWAP
CKR   ISZ IDX1      FINISHED WITH CHAR.?
      JMP NXROW     NO, START ON NEXT ROW 
      LDA IIX       RESET VALUE FOR X-COORD.
      LDB IIY       RESET VALUE FOR Y-COORD.
      STA IX        RESET X-COORD.
      STB IY        RESET Y-COORD.
      LDA SIZE,I    POSSIBLE SIZE & ORIENTATION 
      SSA           "LEFT-TO-RIGHT"?
      JMP TTB       NO, "TOP-TO-BOTTOM" 
      LDA MX        STEP-DIRECTION FOR X-COORD. 
      MPY D7        ASSUME 5X9
      STA TEMP1     SAVE X FOR POSSIBLE *2
      CLB           X = X + (7*MX)
      JSB HVCK      CHECK FOR SWAP
      LDA SIZEF     POSSIBLE SIZE OF CHAR.
      CPA D1        *2? 
      JMP RSTA      NO, RESTORE 
      LDA TEMP1     PICK UP X VALUE 
      CLB 
      JSB HVCK      CHECK FOR SWAP
RSTA  LDA IX        RESTORE X-COORD.
      JMP CKCHR     CHECK FOR NEXT CHAR. IN STRING
TTB   EQU *         "TOP-TO-BOTTOM" 
      LDA MY
      MPY D11       ASSUME 5X9
      STA B         Y = Y - (11*MY) 
      CMB,INB 
      STB TEMP1     TEMP. SAVE FOR POSSIBLE *2
      CLA 
      JSB HVCK      CHECK FOR H/V SWAP
      LDA SIZEF     POSSIBLE SIZE OF CHAR.
      CPA D1        *2? 
      JMP RSTB      NO
      LDB TEMP1     RESTORE Y VALUE 
      CLA 
      JSB HVCK      CHECK FOR H/V SWAP
RSTB  LDA IX        RESTORE X-COORD 
CKCHR EQU *         CHECK CHAR. 
      DST IIX       SAVE NEW RESET COORD. VALUES
      ISZ CHCNT     FINISHED W/ USER'S CHAR. STRING?
      JMP NXCHR     NO,START ON NEXT CHAR.
      JSB FLOAT     FLOAT VALUE OF X-COORD. 
      DST TEMP1      AND SAVE IT
      LDA IIY       RESET VALUE 
      JSB FLOAT     FLOAT VALUE OF Y-COORD. 
      DST TEMP3      AND SAVE IT
      JSB Z12PT     INITIALIZE ALL REQ'D. FLAGS 
      DEF *+4 
      DEF TEMP1 
      DEF TEMP3 
      DEF D3        PEN UP
      JMP SYMBR     RETURN TO USER
* 
* ROUTINE TO CHECK AND SWAP HORIZ/VERT. VALUES IF REQ'D.
* 
HVCK  NOP           HORIZ/VERT. CHECK 
      STA RX        SAVE TEMP RELATIVE VALUES 
      STB RY
      LDA HVFLG     HORIZ/VERT. FLAG
      SZA           HORIZ. AXIS?
      JMP VERT      NO
      LDA RX
      JMP VERT+2
VERT  LDA RY        SWAP HORIZ. & VERT. VALUES
      LDB RX
      ADA IX        STEP IN PROPER DIRECTION
      ADB IY
      DST IX        RESTORE VALUES
      JMP HVCK,I    RETURN
* 
* ROUTINE TO PLOT DESIRED POINT 
* 
TBITO NOP           TURN BIT ON 
      LDA AXY       ADDR. OF X-Y COORD. 
      LDB APENC     ADDR. OF PEN CONTROL
      JMP TBITO,I   RETURN
* 
* 
* 
AXY   DEF IX
APENC DEF D1        ADDR. OF PEN CONTROL
D45.0 DEC 45.0
D11   DEC 11
D7    DEC 7 
NOCOL DEC -7        NO. COLUMNS (7 OR 5)
MD1   DEC -1
MD9   DEC -9
D9    DEC 9 
D3    DEC 3 
D2    DEC 2 
D1    DEC 1 
CHBIS OCT -20       CHAR. BIAS/2
B177  OCT 177 
HVFLG OCT 0         HORIZ./VERT. FLAG 
MX    OCT 0         MOVEMENT IN "X" DIRECTION 
MY    OCT 0         MOVEMENT IN "Y" DIRECTION 
ACBUF OCT 0         ADDR. OF CHAR DOT PAT. BUFFER 
AIIX  DEF IIX 
* PRESERVE THE FOLLOWING 4-WORD SEQUENCE
IIX   OCT 0         RESET VALUE FOR X-COORD.
IIY   OCT 0         RESET VALUE FOR Y-COORD.
IX    OCT 0         X-COORDINATE
IY    OCT 0         Y-COORDINATE
RORL  OCT 0         RIGHT OR LEFT 
IDX1  OCT 0         INDEX REGISTER 1
IDX2  OCT 0         INDEX REGISTER 2
ABITP OCT 0         ADDR. OF CURRENT BIT PATTERN
BITP  OCT 0         CURRENT ROW OF BITS FOR PATTERN 
RX    OCT 0         RELATIVE X-COORD. 
RY    OCT 0         RELATIVE Y-COORD. 
SIZEF OCT 0         ABSOL. VALUE OF FIXED PT. SIZE
* 
* 
* CONSTANT, FLAG AND STORAGE SECTION
* 
A     EQU 0        A, B 
B     EQU 1         REGISTERS 
* 
C.02  DEC 2 
C.03  DEC 3 
CM.8  DEC -8
CM15  DEC -15 
* 
M17   OCT 17
M36   OCT 36
M77   OCT 77
M177  OCT 177 
M377  OCT 377 
M1774 OCT 177400
* 
FL999 DEC 999.0 
* 
F4A   DEF F4
F4    DEC 4.0 
F7A   DEF F7
F7    DEC 7.0 
* 
PEN   NOP 
* 
CHCNT NOP 
CHAR  NOP 
OFFST NOP 
OFFCT NOP 
ARRAD NOP 
* 
TEMP1 NOP     TEMPORARY 
TEMP2 NOP 
TEMP3 NOP      STORAGE
TEMP4 NOP 
* 
INCS  DEC 0.
INCC  DEC 1.0 
* 
FCT   DEC 0.
OFCT  DEC .02  FOR .14 INCH INCREMENTS (.01 FOR .07)
* 
OTHET DEC 0.   INITIALIZE TO ZERO DEGREES ROTATION
* 
RADN  DEC .0174533  FACTOR FOR DEGREES TO RADIANS 
* 
* 
* 
XAD   DEF XA0 
XA2A  DEF XA2 
* 
XA0   DEC .00      INITIAL
XA1   DEC .02       VALUES
XA2   DEC .04        SET
XA3   DEC .06         FOR 
XA4   DEC .08          .14 INCH 
XA5   DEC .10           INCREMENTS
XA6   DEC .12 
XA7   DEC .14      (FOR .07 INCH INCREMENTS,
XA8   DEC .16        HALVE VALUES)
XA9   DEC .18 
* 
* 
* 
YAD   DEF YA0 
YA2A  DEF YA2 
* 
YA0   DEC 0.
YA1   DEC 0.
YA2   DEC 0.
YA3   DEC 0.
YA4   DEC 0.
YA5   DEC 0.
YA6   DEC 0.
YA7   DEC 0.
YA8   DEC 0.
YA9   DEC 0.
* 
* 
* 
XORG  DEC 0.
YORG  DEC 0.
* 
XT    DEC 0.
YT    DEC 0.
* 
* 
TABA  NOP 
* 
TAB1A DEF TAB1
* 
TAB2A DEF TAB2
* 
* 
* CHARACTER REFERENCE TABLES -
* 
*  THE FOLLOWING TABLES (TAB1 AND TAB2) CONTAIN 
*   THE INFORMATION TO ACCESS THE OFFSET TABLE
*   FOR EACH AVAILABLE CHARACTER. 
* 
*  EACH CHARACTER OR SPECIAL SYMBOL AVAILABLE 
*   FOR PLOTTING IS ASSOCIATED WITH ONE UNIQUE
*   WORD IN ONE OF THE FOLLOWING TABLES.
* 
*  EACH REFERENCE WORD CONTAINS THE FOLLOWING 
*   INFORMATION:
*      1. RELATIVE ADDRESS OF WORD IN OFFSET TABLE
*          FOR START OF OFFSET STRING 
*           (BITS 07-00)
*      2. NUMBER OF OFFSET PAIRS (8-BITS) IN STRING 
*           (BITS 14-08)
*      3. STARTING POSITION OF STRING IN WORD,
*          0 MEANS UPPER, 1 MEANS LOWER.
*           (BIT  15) 
* 
*  TAB1  COMPRISES THE STANDARD CHARACTER SET 
*  TAB2  COMPRISES SPECIAL CHARACTERS AND 
*         CENTERED SYMBOLS WHICH CAN BE ACCESSED
*         BY POSITION WHEN PARAMETER N < 0, IN CALL.
* 
*   TAB1 IS ORDERED BY POSITION DESIGNATED BY LOWER 
*         6-BITS OF ASCII CODE  (E.G. A = 101 = 01) 
*        - THIS TABLE IS LIMITED TO 64 ENTRIES - 00 
*           TO 77.
* 
* 
*                                 POS CNT ADDR    CODE    CHARACTER 
*                                 --- --- ----    ----    --------- 
* 
TAB2  OCT 103641   1   7   241    00
      OCT 106244   1  14   244    01
      OCT 003252   0   6   252    02
      OCT 003660   0   7   260    03
      OCT 103663   1   7   263    04
      OCT 003666   0   7   266    05
      OCT 003671   0   7   271    06
      OCT 004274   0  10   274    07
      OCT 005700   0  13   300    08
      OCT 003705   0   7   305    09
      OCT 007310   0  16   310    10
      OCT 006660   0  15   260    11
      OCT 103316   1   6   316    12
      OCT 002260   0   4   260    13
      OCT 006252   0  14   252    14
      OCT 101321   1   2   321    15
      OCT 101325   1   2   325    16
      OCT 102726   1   5   326    17
      OCT 103233   1   6   233    18
      OCT 104321   1  10   321    19
      OCT 002731   0   5   331    20
      OCT 102733   1   5   333    21
      OCT 103236   1   6   236    22
      OCT 001746   0   3   346    23
      OCT 004336   0  10   336    24
      OCT 004342   0  10   342    25
* 
* 
* 
TAB1  OCT 110347   1  20   347    00        @ 
      OCT 004400   0  11     0    01        A 
      OCT 106005   1  14     5    02        B 
      OCT 104014   1  10    14    03        C 
      OCT 103404   1   7     4    04        D 
      OCT 003422   0   7    22    05        E 
      OCT 003022   0   6    22    06        F 
      OCT 006036   0  14    36    07        G 
      OCT 103025   1   6    25    10        H 
      OCT 003044   0   6    44    11        1 
      OCT 103047   1   6    47    12        J 
      OCT 003033   0   6    33    13        K 
      OCT 001425   0   3    25    14        L 
      OCT 102431   1   5    31    15        M 
      OCT 102030   1   4    30    16        N 
      OCT 004414   0  11    14    17        O 
      OCT 103453   1   7    53    20        P 
      OCT 006014   0  14    14    21        Q 
      OCT 104453   1  11    53    22        R 
      OCT 006460   0  15    60    23        S 
      OCT 102066   1   4    66    24        T 
      OCT 003447   0   7    47    25        U 
      OCT 001473   0   3    73    26        V 
      OCT 002452   0   5    52    27        W 
      OCT 102474   1   5    74    30        X 
      OCT 002477   0   5    77    31        Y 
      OCT 103467   1   7    67    32        Z 
      OCT 002156   0   4   156    33
      OCT 001076   0   2    76    34
      OCT 002160   0   4   160    35
      OCT 002562   0   5   162    36
      OCT 102564   1   5   164    37        _ 
      OCT 100471   1   1    71    40
      OCT 003574   0   7   174    41        ! 
      OCT 004577   0  11   177    42        " 
      OCT 105603   1  13   203    43        # 
      OCT 006611   0  15   211    44        $ 
      OCT 106217   1  14   217    45        % 
      OCT 105357   0  12   357    46        & 
      OCT 002177   0   4   177    47        ' 
      OCT 002152   0   4   152    50        ( 
      OCT 002154   0   4   154    51        ) 
      OCT 005542   0  13   142    52        * 
      OCT 002542   0   5   142    53        + 
      OCT 103230   1   6   230    54        , 
      OCT 101143   1   2   143    55        - 
      OCT 102630   1   5   230    56       .
      OCT 101074   1   2    74    57        / 
      OCT 105013   1  12    13    60        0 
      OCT 102501   1   5   101    61        1 
      OCT 004504   0  11   104    62        2 
      OCT 006524   0  15   124    63        3 
      OCT 102110   1   4   110    64        4 
      OCT 105112   1  12   112    65        5 
      OCT 106113   1  14   113    66        6 
      OCT 102521   1   5   121    67        7 
      OCT 010524   0  21   124    70        8 
      OCT 105534   1  13   134    71        9 
      OCT 105625   1  13   225    72        : 
      OCT 106225   1  14   225    73        ; 
      OCT 001635   0   3   235    74        < 
      OCT 102547   1   5   147    75        = 
      OCT 001640   0   3   240    76        > 
      OCT 007167   0  16   167    77        ? 
* 
* 
* 
* 
* CHARACTER - OFFSET - TABLE
*   -EACH WORD CONTAINS 2 PAIRS OF X,Y  OFFSETS,
*      "X1Y1X2Y2", EACH PAIR IS 8-BITS AND 4
*      BITS IN EACH PAIR SPECIFY THE X AND Y POINT
*      FOR THE OFFSET.
* 
* THE STRING OF OFFSET PAIRS FOR A CHARACTER MAY
*  START IN THE UPPER OR LOWER POSITION OF A
*  WORD.  THE STARTING LOCATION, POSITION INDICATOR 
*  AND OFFSET COUNT FOR EACH CHARACTER IS CONTAINED 
*  IN THE REFERENCE TABLES. 
* 
* 
* PORTIONS OF OFFSET STRINGS MAY OVERLAP OTHER
*  STRINGS WHEN LINE SEGMENTS AMONG CHARACTERS
*  ARE IDENTICAL. 
* 
* 
TABLA DEF TABLE    DEFINE STARTING ADDRESS OF TABLE 
* 
*                                       OCTAL PAIRS  ADDRESS SYMBOL 
* 
TABLE OCT 021045    2-2  2-5       00   +A
      OCT 062445    6-5  2-5
      OCT 024071    2-10 3-11 
      OCT 054550    5-11 6-10 
      OCT 061131    6-2  5-11           -D
      OCT 064143    6-10 6-3            -B
      OCT 051042    5-2  2-2
      OCT 024531    2-11 5-11 
      OCT 064147    6-10 6-7       10 
      OCT 053046    5-6  2-6
      OCT 053145    5-6  6-5
      OCT 061527    6-3  5-7            -0
      OCT 064143    6-10 6-3            +Q,+0,-C
      OCT 051062    5-2  3-2
      OCT 021450    2-3  2-10 
      OCT 034531    3-11 5-11 
      OCT 064360    6-10 17-0      20 
      OCT 042142    4-4  6-2
      OCT 064451    6-11 2-11           +E,+F 
      OCT 023126    2-6  5-6
      OCT 023042    2-6  2-2
      OCT 061042    6-2  2-2            +L,-H 
      OCT 024446    2-11 2-6
      OCT 063151    6-6  6-11 
      OCT 061042    6-2  2-2       30   -N
      OCT 024542    2-11 6-2            -M
      OCT 064506    6-11 4-6
      OCT 024442    2-11 2-2            +K
      OCT 022551    2-5  6-11 
      OCT 043542    4-7  6-2
      OCT 072525    7-5  5-5            +G
      OCT 062543    6-5  6-3
      OCT 051062    5-2  3-2       40 
      OCT 021450    2-3  2-10 
      OCT 034531    3-11 5-11 
      OCT 064147    6-10 6-7
      OCT 051062    5-2  3-2            +I
      OCT 041111    4-2  4-11 
      OCT 034531    3-11 5-11 
      OCT 024444    2-11 2-4            +U,-J 
      OCT 021462    2-3  3-2       50 
      OCT 051143    5-2  6-3
      OCT 064542    6-11 6-2            +W
      OCT 043042    4-6  2-2            -P,-R 
      OCT 024531    2-11 5-11 
      OCT 064147    6-10 6-7
      OCT 053046    5-6  2-6
      OCT 043142    4-6  6-2
      OCT 022043    2-4  2-3       60   +S
      OCT 031122    3-2  5-2
      OCT 061545    6-3  6-5
      OCT 053066    5-6  3-6
      OCT 023450    2-7  2-10 
      OCT 034531    3-11 5-11 
      OCT 064102    6-10 4-2            -T
      OCT 044451    4-11 2-11           -Z
      OCT 064442    6-11 2-2       70 
      OCT 061360    6-2  17-0           -(PEN UP) 
      OCT 033126    3-6  5-6
      OCT 024502    2-11 4-2            +V
      OCT 064442    6-11 2-2            -X,-/ 
      OCT 064760    6-11 17-0 
      OCT 024542    2-11 6-2            +\
      OCT 024506    2-11 4-6            +Y
      OCT 041106    4-2  4-6      100 
      OCT 064522    6-11 5-2            -1
      OCT 031102    3-2  4-2
      OCT 044470    4-11 3-10 
      OCT 023450    2-7  2-10           +2
      OCT 034531    3-11 5-11 
      OCT 064147    6-10 6-7
      OCT 021442    2-3  2-2
      OCT 061122    6-2  5-2      110   -4
      OCT 054444    5-11 2-4
      OCT 062151    6-4  6-11           -5
      OCT 024446    2-11 2-6            -6
      OCT 053145    5-6  6-5
      OCT 061522    6-3  5-2
      OCT 031043    3-2  2-3
      OCT 022050    2-4  2-10 
      OCT 034531    3-11 5-11     120 
      OCT 064050    6-10 2-10           -7
      OCT 024551    2-11 6-11 
      OCT 064102    6-10 4-2
      OCT 024071    2-10 3-11           +8,+3 
      OCT 054550    5-11 6-10 
      OCT 063526    6-7  5-6
      OCT 033126    3-6  5-6
      OCT 062543    6-5  6-3      130 
      OCT 051062    5-2  3-2
      OCT 021445    2-3  2-5
      OCT 033047    3-6  2-7
      OCT 024043    2-10 2-3            +9
      OCT 031122    3-2  5-2
      OCT 061550    6-3  6-10 
      OCT 054471    5-11 3-11 
      OCT 024046    2-10 2-6      140 
      OCT 032545    3-5  6-5   END OF BASIC 
      OCT 041507    4-3  4-7            ++,+* 
      OCT 042445    4-5  2-5            --
      OCT 062505    6-5  4-5
      OCT 021547    2-3  6-7
      OCT 042447    4-5  2-7
      OCT 061446    6-3  2-6            -=
      OCT 063360    6-6  17-0     150 
      OCT 021543    2-3  6-3
      OCT 041063    4-2  3-3            +(
      OCT 034111    3-10 4-11 
      OCT 041123    4-2  5-3            +)
      OCT 054111    5-10 4-11 
      OCT 051062    5-2  3-2            +[
      OCT 034531    3-11 5-11 
      OCT 031122    3-2  5-2      160   +]
      OCT 054471    5-11 3-11 
      OCT 041111    4-2  4-11           +^
      OCT 034130    3-10 5-10 
      OCT 044545    4-11 6-5            -_. 
      OCT 022466    2-5  3-6
      OCT 032045    3-4  2-5
      OCT 023450    2-7  2-10           +?
      OCT 034531    3-11 5-11     170 
      OCT 064147    6-10 6-7
      OCT 053106    5-6  4-6
      OCT 042360    4-4  17-0 
      OCT 031122    3-2  5-2            +!
      OCT 041462    4-3  3-2
      OCT 170104    17-0 4-4
      OCT 044507    4-11 4-7            +',+" 
      OCT 054511    5-11 4-11     200 
      OCT 170051    17-0 2-11 
      OCT 023471    2-7  3-11 
      OCT 024463    2-11 3-3            -#
      OCT 033466    3-7  3-6
      OCT 023146    2-6  6-6
      OCT 053127    5-6  5-7
      OCT 051524    5-3  5-4
      OCT 062044    6-4  2-4      210 
      OCT 022063    2-4  3-3            +$
      OCT 051544    5-3  6-4
      OCT 062446    6-5  2-6
      OCT 023470    2-7  3-10 
      OCT 054147    5-10 6-7
      OCT 170111    17-0 4-11 
      OCT 041050    4-2  2-10           -%
      OCT 034071    3-10 3-11     220 
      OCT 024360    2-10 17-0 
      OCT 021151    2-2  6-11 
      OCT 170142    17-0 6-2
      OCT 061522    6-3  5-2
      OCT 061107    6-2  4-7
      OCT 043126    4-6  5-6
      OCT 053507    5-7  4-7
      OCT 170123    17-0 5-3
      OCT 041504    4-3  4-4
      OCT 052123    5-4  5-3
      OCT 041043    4-2  2-3
      OCT 061760    6-3  17-0 
      OCT 062046    6-4  2-6            +>
      OCT 064043    6-10 2-3            - 
      OCT 061760    6-3  17-0 
      OCT 022146    2-4  6-6      240   +>
      OCT 024042    2-10 2-2
      OCT 042004    4-4  0-4
      OCT 000100    0-0  4-0
      OCT 042042    4-4  2-2
      OCT 022024    2-4  1-4
      OCT 001401    0-3  0-1
      OCT 010060    1-0  3-0
      OCT 040503    4-1  4-3     250
      OCT 032044    3-4  2-4
      OCT 021044    2-2  2-4
      OCT 000501    0-1  4-1
      OCT 022042    2-4  2-2
      OCT 021403    2-3  0-3
      OCT 020103    2-0  4-3
      OCT 021442    2-3  2-2
      OCT 021044    2-2  2-4     260
      OCT 020042    2-0  2-2
      OCT 001102    0-2  4-2
      OCT 021004    2-2  0-4
      OCT 040042    4-0  2-2
      OCT 000104    0-0  4-4
      OCT 021044    2-2  2-4
      OCT 001040    0-2  2-0
      OCT 041044    4-2  2-4     270
      OCT 021002    2-2  0-2
      OCT 022040    2-4  2-0
      OCT 022102    2-4  4-2
      OCT 021004    2-2  0-4
      OCT 042042    4-4  2-2
      OCT 000042    0-0  2-2
      OCT 040042    4-0  2-2
      OCT 021022    2-2  1-2     300
      OCT 031042    3-2  2-2
      OCT 042004    4-4  0-4
      OCT 042000    4-4  0-0
      OCT 040000    4-0  0-0
      OCT 021004    2-2  0-4
      OCT 021104    2-2  4-4
      OCT 021040    2-2  2-0
      OCT 021104    2-2  4-4     310
      OCT 031423    3-3  1-3
      OCT 002023    0-4  1-3
      OCT 010400    1-1  0-0
      OCT 010461    1-1  3-1
      OCT 040061    4-0  3-1
      OCT 031442    3-3  2-2
      OCT 002104    0-4  4-4
      OCT 000100    0-0  4-0     320
      OCT 021042    2-2  2-2
      OCT 061360    6-2  17-0 
      OCT 022545    2-5  6-5
      OCT 170050    17-0 2-10 
      OCT 064051    6-10 2-11           -1,#16
      OCT 021111    2-2  4-11           - 
      OCT 041063    4-2  3-3
      OCT 051502    5-3  4-2      330 
      OCT 022545    2-5  6-5            + 
      OCT 053124    5-6  5-4
      OCT 062562    6-5  7-2
      OCT 021126    2-2  5-6
      OCT 024571    2-11 7-11 
      OCT 023146    2-6  6-6            + 
      OCT 170043    17-0 2-3
      OCT 061760    6-3  17-0     340 
      OCT 053462    5-7  3-2
      OCT 021543    2-3  6-3            + 
      OCT 170046    17-0 2-6
      OCT 063106    6-6  4-6
      OCT 044104    4-10 4-4      345 
      OCT 021507    2-3  4-7            + 
      OCT 061544    6-3  6-4            -@
      OCT 051463    5-3  3-3      350 
      OCT 022047    2-4  2-7
      OCT 034130    3-10 5-10 
      OCT 063545    6-7  6-5
      OCT 052104    5-4  4-4
      OCT 032466    3-5  3-6
      OCT 043527    4-7 5-7 
      OCT 063142    6-6 6-2 
      OCT 033470    3-73-10 
      OCT 044530    4-11 5-10 
      OCT 022444    2-5 2-4 
      OCT 031503    3-3 3-4 
      OCT 062000    6-4 
* 
* 
      END 
                                                                                                                                                      