*DECK,MATRIX
          IDENT     BASMOPR 
          TITLE  BASMOPR
*CALL COPYRITE
          ENTRY     BASMADD,BATMADD 
          ENTRY     BASMSUB,BATMSUB 
          ENTRY     BASMSCM,BATMSCM 
          ENTRY     BASMMLT,BATMMLT 
          ENTRY     BASMTRN,BATMTRN 
          ENTRY     BASMZER,BATMZER 
          ENTRY     BASMCON,BATMCON 
          ENTRY     BASMIDN,BATMIDN 
          ENTRY  BASMDET,BATMDET
          ENTRY  BASMDTX,BATMDET
          ENTRY     BASMRED,BATMRED 
          ENTRY     BASMPRT,BATMPRT 
          ENTRY  BASMPRU,BATMPRU
          ENTRY     BASMINV,BATMINV 
          ENTRY     BASMRFL,BATMRFL 
          ENTRY     BASMINP,BATMINP 
          ENTRY BASMWRS,BATMWRS 
          ENTRY BASMPRS,BATMPRS 
          ENTRY  BASMINS,BATMINS
          ENTRY  BASMASS,BATMASS
          ENTRY  BASMRDS,BATMRDS
          ENTRY  BASMRFS,BATMRFS
          EXT    MISDF
          ENTRY     BASMWRT,BATMWRT 
          EXT       BASOPRT 
          EXT    BASASTR
          EXT       BASOCON 
          EXT       BASEGEN 
          EXT    RNBLOCK,RNLIST,DBUGON
          EXT    DATAXXX,ER126
          EXT    ER120
          EXT       BASIRED 
          EXT       BASISRT 
          EXT       BASIEND 
          EXT       BASOWRT 
          EXT       BASIINP 
          EXT    BASIINS
          EXT    BASOUSI,BASOPRO
           EXT   BSTRBUF
          COMMENT BASIC 3 - MATRIX OPERATIONS.
* 
* 
 SIZECHK  MACRO     I,K                 MACRO TO EVALUATE AND 
          SA1       A.I+1               CHECK THE SIZE OF AN ARRAY
          SA2       A.I+2               REGISTERS X0 , X1 , X2 , B7 
          NG        X1,ER161            ARE USED
          FX0       X1*X2               INPUT, A.I POINTS AT DOPE - V.
          BX2       X.I                 OUTPUT IN X.K 
          NG        X0,ER161            *MATRIX DIMENSION ERROR*
          ZR        X0,ER161
          AX2       30
          UX1       B7,X0 
          LX.K      X1,B7 
          IX0       X2-X.K
          NG        X0,ER161
          ENDM
* 
 SIZECHKS MACRO     I,K                 MACRO TO EVALUATE AND 
          SA1       A.I+1               CHECK THE SIZE OF AN ARRAY
          SA2       A.I+2               REGISTERS X0 , X1 , X2 , B7 
          NG        X1,ER161            ARE USED
          FX0       X1*X2               INPUT, A.I POINTS AT DOPE - V.
          BX2       X.I                 OUTPUT IN X.K 
          NG        X0,ER161            *MATRIX DIMENSION ERROR*
          ZR        X0,ER161
          AX2       30
          UX1       B7,X0 
          LX.K      X1,B7 
          IX0       X2-X.K
          NG        X0,ER161
          ENDM
* 
 SIZEVAL  MACRO     I,K                 MACRO TO EVALUATE 
          SA1       A.I+1               THE SIZE OF AN ARRAY
          SA2       A.I+2               REGISTERS X0 , X1 , X2 , B7 
          FX0       X1*X2               ARE USED
          UX1       B7,X0               INPUT, A.I POINTS AT DOPE - V.
          LX.K      X1,B7               OUTPUT IN X.K 
          ENDM
* 
* 
*         DIMCHCK 
* 
*         UPDATE DIMENSION INFORMATION AFTER A CHECK
*         ON PHYSICAL LIMITS. 
* 
*         I = INCOMING, K = RESULT, L = MUST BE SQUARE. 
* 
 DIMCHCK  MACRO  K,I,L
          SA1    A.K
          SA2    A.I+2
          BX6    X1 
          SA1    A.I+1
          AX6    30 
          FX0    X1*X2
          PX6    X6 
          FX0    X6-X0
          NG     X0,ER161 
          IFC    NE, L  ,3
          FX0    X1-X2
          NX6    X0 
          NZ     X6,DETRET
*         IF SIZE OK, ASSIGN DIMENSIONS.
          BX6    X1 
          SA6    A.K+1
          BX6    X2 
          SA6    A.K+2
          ENDM
* 
* 
*         CONCHCK I,J 
* 
*         CHECK DIMENSIONS FOR COMPATIBILITY. 
* 
*         I = FIRST ARGUMENT, J = SECOND ARGUMENT.
* 
 CONCHCK  MACRO  I,J
          SA1    A.I+1       M1(1ST). 
          SA2    A.J+1       M2(1ST). 
          FX0    X1-X2
          UX0    X0 
          NZ     X0,ER161    ERROR IF FIRST DIMENSIONS DISAGREE.
          SA1    A.I+2       M1(2ND). 
          SA2    A.J+2       M2(2ND). 
          FX0    X1-X2
          UX0    X0 
          NZ     X0,ER161    ERROR IF SECOND DIMENSIONS DISAGREE. 
          ENDM
* 
 FSTDIM   MACRO     I,K                 MACRO TO GET FIRST DIMENSION
          SA1       A.I+1 
          UX.K      B6,X1 
          LX.K      X.K,B6
          ENDM
* 
 SECDIM   MACRO     I,K                 MACRO TO GET SECOND DIMENSION 
          SA1       A.I+2 
          UX.K      B6,X1 
          LX.K      X.K,B6
          ENDM
 FETCHAR  EQU    11B
* 
 R        EQU       3                   RESULT
 S        EQU       5                   FIRST ARGUMENT
 T        EQU       4                   SECOND ARGUMENT 
* 
 U        EQU       5                   ARGUMENT
 V        EQU       4                   RESULT
* 
 W        EQU       5                   RESULT PARAMETER ONLY 
* 
 K        EQU       5                   FIRST ARGUMENT
 L        EQU       4                   SECOND ARGUMENT 
 MAXDIMI  EQU    100               MAXIMUM DIMENSION FOR INVERSE
* 
*CALL,ERMNUM
* 
* 
*         ERROR-MESSAGES
* 
* 
* 
 ERM161   DATA   C* MATRIX DIMENSION ERROR *
 ERM162   DATA   C* DET USED BEFORE INV * 
* 
 ER161    BSS    0
          RTERROR ERMN161,ERM161,BASEGEN   *MATRIX DIMENSION ERROR *
* 
 ER162    BSS    0
          RTERROR ERMN162,ERM162,BASEGEN  *DET USED BEFORE INV* 
* 
* 
* 
*         TEMPORARIES FOR B1 - B4 
* 
 MATSVB1  BSSZ      1 
 MATSVB2  BSSZ      1 
 MATSVB3  BSSZ      1 
 MATSVB4  BSSZ      1 
          TITLE  MAT ASSIGN (BASASS)
* 
*         MAT ASSIGNMENT
*         OUTPUT IN V INPUT IN U
* 
          DATA   10HBASMASS 
 BASMASS  BSSZ   1
          DIMCHCK V,U 
          SIZEVAL V,6 
          SB5    X6 
*         COPY U INTO RESULT AS IN INVER01
*         SAVE B1 
          SX6    B1 
          SA6    ASSB1
          SX.U   X.U+B2 
          SX.V   X.V+B2 
          SB1    B0 
 ASS01    BSS    0
          SA1    X.U+B1 
          BX6    X1 
          SA6    X.V+B1 
          SB1    B1+1 
          LT     B1,B5,ASS01
*         RESTORE B1 AND GO 
          SA1    ASSB1
          SB1    X1 
          EQ     BASMASS
 ASSB1    BSS    1
 BATMASS  BSS    0
          TITLE  MAT ADD AND MAT SUB (BASMADD,BASMSUB)
* 
*         MAT ADD ARGUMENTS IN S AND T RESULT IN R
* 
          DATA      10HBASMADD
 BASMADD  BSSZ      1 
          SIZEVAL   R,6 
          SB7       X6                  LIMIT 
          CONCHCK S,T        CHECK FOR SAME FORM. 
          SB5       0                   START 
          SB6       1                   SIZE
          DIMCHCK R,S        ASSIGN RESULT DIMENSIONS.
          SX.R      X.R+B2              CONSTRUCT ABSOLUTE ADDRESSES
          SX.S      X.S+B2
          SX.T      X.T+B2
 MATADD   SA1       X.S+B5
          SA2       X.T+B5
          FX6       X1+X2 
         NX6       B0,X6
          SA6       X.R+B5
          SB5       B5+B6 
          LT        B5,B7,MATADD        LOOP
          EQ        BASMADD 
 BATMADD  BSS       0 
* 
*         END MAT ADD 
* 
* 
*         MAT SUB ARGUMENTS IN S AND T RESULT IN R
* 
          DATA      10HBASMSUB
 BASMSUB  BSSZ      1 
          SIZEVAL   R,6 
          SB7       X6                  LIMIT 
          CONCHCK S,T        CHECK FOR SAME FORM. 
          SB5       0                   START 
          SB6       1                   STEP
          SX.R      X.R+B2              CONSTRUCT ABSOLUTE ADDRESSES
          SX.S      X.S+B2
          SX.T      X.T+B2
          DIMCHCK R,S        ASSIGN RESULT DIMENSIONS.
 MATSUB   SA1       X.S+B5
          SA2       X.T+B5
          FX6       X1-X2 
         NX6       B0,X6
          SA6       X.R+B5
          SB5       B5+B6 
          LT        B5,B7,MATSUB        LOOP
          EQ        BASMSUB 
 BATMSUB  BSS       0 
* 
*         END MAT SUB 
* 
          TITLE  (BASMSCM)
* 
*         MAT SCM ARGUMENTS IN S AND T RESULT IN R
* 
          DATA      10HBASMSCM
 BASMSCM  BSSZ      1 
          SIZEVAL   R,6 
          SB7       X6                  LIMIT 
          DIMCHCK   R,T                 CHECK FOR SAME FORM 
          SB5       B0                  START 
          SB6       1                   STEP
          SX.R      X.R+B2              CONSTRUCT ABSOLUTE ADDRESSES
          SX.T      X.T+B2
 MATSCM   SA1       X.T+B5
          FX6       X1*X.S
         NX6       B0,X6
          SA6       X.R+B5
          SB5       B5+B6 
          LT        B5,B7,MATSCM        LOOP
          EQ        BASMSCM 
 BATMSCM  BSS       0 
* 
*         END MAT SCM 
* 
          TITLE  MULTIPLY (BASMMLT) 
* 
*         MAT MLT ARGUMENTS IN S AND T RESULT IN R
* 
          DATA      10HBASMMLT
 BASMMLT  BSSZ      1 
          SA1    A.R
          SA2    A.T+2
          BX0    X1 
          SA1    A.S+1
          AX0    30 
          FX6    X1*X2       (X6) = PHYSICAL SIZE OF MATRIX.
          PX0    X0          (X0) = PHYSICAL LIMIT ON MATRIX. 
          FX6    X0-X6
          NG     X6,ER161 
*         IF SIZE OK, ASSIGN DIMENSIONS.
          BX6    X1 
          SA1    A.T+1
          SA6    A.R+1
          BX6    X2 
          FX7    X1*X2
          SA6    A.R+2
          UX6    B7,X7
          LX0    B7,X6
          UX7    B5,X2
          LX6    B5,X7
          SB5    X6          (B5) = SECOND OF T.
          SX6       B1
          SX7       B2
          SA6       MATMLB1             SAVE B1 
          UX6    B1,X1
          LX2    B1,X6       (X2) = FIRST OF T. 
          SA1    A.S+2
          UX6    B1,X1
          LX1    B1,X6
          IX2    X1-X2       SECOND OF S = FIRST OF T 
          NZ     X2,ER161    MATRIX DIMENSION ERROR 
          SB7    X1          (B7) = SECOND OF S.
          SA7       MATMLB2             SAVE B2 
          SX6       B3
          SX7       B4
          SA6       MATMLB3             SAVE B3 
          SA7       MATMLB4             SAVE B4 
          SB3    1           CHECK AGAINST TWO ARGUMENTS. 
          RJ     MATCTMP     TEMPORARY SUBSTITUTION FOR RESULT IF...
          SB3    X0          (B3) = LENGTH OF T.
          SB1    B7          (B1) = SECOND OF S.
          SIZEVAL   R,6 
          SB4       X6                  B4 = LENGTH OF R
          SX.R      X.R+B2              X.R = BASE ( R )
          SB6       B2-B1 
          SX.S      X.S+B6              X.S = BASE( S ) - SECOND ( S )
          SX.T      X.T+B2              X.T = BASE ( T )
          SB2       B5                  B2 = SECOND OF R AND T
          SB5       B0                  B5 = ROW - POINTER IN R 
 MATMLT1  BSS       0 
          SB6       B0                  B6 = COLUMN - POINTER IN R
          SX.S      X.S+B1              X.S = POINTER TO ROW IN S 
 MATMLT2  BSS       0 
          SB7       B6                  B7 = POINTER IN T 
          SA1       X.S-1               A1 = ADDRESS IN ROW OF S
          MX6       0                   X6 = SUM IN SCALAR PRODUCT
 MATMLT3  BSS       0 
          SA1       A1+1
          SA2       X.T+B7
          FX7       X1*X2 
          FX6       X6+X7 
          SB7       B7+B2               UP POINTER IN T 
          NX6       X6
          LT        B7,B3,MATMLT3       NOT END OF SCALAR PRODUCT 
          SX0       X.R+B5
          SA6       X0+B6               STORE NEXT ELEMENT
          SB6       B6+1
          LT        B6,B2,MATMLT2       NOT END OF ROW
          SB5       B5+B2 
          LT        B5,B4,MATMLT1       STILL MORE
          RJ     MATCRES     COPY BACK TO RESULT. 
          SA1       MATMLB1 
          SA2       MATMLB2 
          SA3       MATMLB3 
          SA4       MATMLB4 
          SB1       X1                  RESET B1
          SB2       X2                  RESET B2
          SB3       X3                  RESET B3
          SB4       X4                  RESET B4
          EQ        BASMMLT 
* 
 MATMLB1  EQU       MATSVB1 
 MATMLB2  EQU       MATSVB2 
 MATMLB3  EQU       MATSVB3 
 MATMLB4  EQU       MATSVB4 
          EJECT 
* 
*         MATCTMP 
* 
*                ALLOCATES A TEMPORARY FOR THE RESULT, AND
*                UPDATES POINTER. 
*                ON ENTRY, (B3) = 0 IF ONE ARGUMENT,
*                               = 1 IF TWO ARGUMENTS. 
*                          (B2) = BASE OF VARIABLES BLOCK.
*                B12567A345X0345 ARE SAVED. 
*                IF (B3) = 0, (X.V) IS UPDATED, ELSE
*                             (X.R) IS UPDATED. 
* 
*         MATCRES 
* 
*                COPIES THE TEMPORARY MATRIX TO THE RESULT
*                MATRIX, THEN FREES THE TEMPORARY.
*                B1567A345X0345 ARE SAVED.  X.(RESULT) IS UPDATED.
* 
 MATCTMP  BSSZ   1
          BX6    X6-X6
          SA1    A.V
          ZR     B3,MATCTMP2 JUMP IF ONE ARGUMENT.
          SA1    A.R
          SA2    A.T
          IX7    X1-X2
          SB4    X7          OFFSET OF RESULT - OFFSET OF 2ND.
          ZR     B4,MATCTMP3 IF SAME, NEED TEMPORARY. 
 MATCTMP2 BSS    0
          SA2    A.U
          ERRNZ  U-S
          IX7    X1-X2
          SA6    MATCSPW     INDICATE NO TEMPORARY. 
          SB4    X7 
          NZ     B4,MATCTMP 
 MATCTMP3 BSS    0
          SX2    B2 
          IX6    X1+X2
          SA6    MATCTAR     (X6) = ABSOLUTE RESULT DESCRIPTOR. 
          LX6    30 
          SB4    X6          (B4) = PHYSICAL LENGTH.
          SX2    10 
          SX6    X6+1        WORD COUNT + 1.
          IX2    X2*X6       10*(WORD COUNT + 1). 
          MX6    0
          SX1    MATCSPW     ADDRESS OF STRING POINTER WORD.
          SA6    X1          ZERO THE STRING POINTER WORD.
* 
          RJ     =XBASGSTR   ALLOCATE THE STRING. 
* 
          SX6    B2          (B2) = BASE OF VARIABLES BLOCK.
          IX2    X1-X6
          SX7    B4          (B4) = PHYSICAL LENGTH.
          LX7    30 
          ZR     B3,MATCTMP4 JUMP IF ONE ARGUMENT.
          IX.R   X2+X7       TEMPORARY DESCRIPTOR.
          EQ     MATCTMP
 MATCTMP4 BSS    0
          IX.V   X2+X7       TEMPORARY DESCRIPTOR.
          EQ     MATCTMP     DONE.
* 
*         MATCRES 
* 
 MATCRES  BSS    1
          SA2    MATCSPW
          SA1    MATCTAR
          ZR     X2,MATCRES  IMMEDIATE RETURN IF NO TEMPORARY.
          SB1    X1          (B1) = FWA OF RESULT.
          SB2    X2          (B2) = FWA OF TEMPORARY. 
          LX1    30 
          SB3    X1-1        (B3) = PHYSICAL LENGTH -1. 
          SA1    B2+B3
*         COPY LOOP TO MOVE TEMPORARY MATRIX TO RESULT MATRIX.
 MATCRES1 BSS    0
          BX6    X1 
          SA6    B1+B3
          SB3    B3-1 
          SA1    B2+B3
          GE     B3,B0,MATCRES1  LOOP.
*         FREE TEMPORARY. 
          SX1    MATCSPW
* 
          RJ     =XBASRSTR   FREE THE STRING. 
* 
          EQ     MATCRES
* 
*         LOCAL VARIABLES.
* 
 MATCSPW  BSS    1           STRING POINTER WORD. 
 MATCTAR  BSS    1           RESULT DESCRIPTOR. 
 BATMMLT  BSS       0 
* 
*         END MAT MLT 
* 
          TITLE  (BASMTRN)
* 
*         MAT TRN ARGUMENT IN U RESULT IN V 
* 
          DATA      10HBASMTRN
 BASMTRN  BSSZ      1 
          SA1    A.V
          SA2    A.U+2
          BX0    X1 
          SA1    A.U+1
          AX0    30 
          FX6    X1*X2       (X6) = PHYSICAL SIZE OF MATRIX.
          PX0    X0          (X0) = PHYSICAL LIMIT ON MATRIX. 
          FX6    X0-X6
          NG     X6,ER161 
*         IF SIZE OK, ASSIGN DIMENSIONS.
          BX6    X1 
          SA6    A.V+2
          BX6    X2 
          SA6    A.V+1
          SX6       B1
          SX7       B2
          SA6       MATTRB1             SAVE B1 
          SA7       MATTRB2             SAVE B2 
          SX6       B3
          SX7       B4
          SA6       MATTRB3             SAVE B3 
          SA7       MATTRB4             SAVE B4 
          SB3    B0          CHECK AGAINST ONE ARGUMENT.
          BX0    X2 
          RJ     MATCTMP     SUBSTITUTE TEMPORARY FOR RESULT IF...
          UX0    B7,X0
          LX7    B7,X0       (X7) = SECOND DIMENSION OF ARGUMENT. 
          SA1    A.V+1
          SA2    A.V+2
          FX0    X1*X2
          UX1    B7,X0
          LX6    B7,X1
          UX2    B7,X2
          LX0    B7,X2
          SB4    X0          (B4) = SECOND DIMENSION OF RESULT. 
          SB5       X.V+B2              B5 = ADDRESS OF ROWS IN RESULT
          SB6       X6+B5               B6 = UPPER END OF RESULT
          SX.U      X.U+B2              X.U = ADDRESS OF COLUMN IN ARG. 
 MATTRN1  BSS       0 
          SB7       0                   B7 = POINTER IN ROW OF RESULT 
          SB3       X.U                 B3 = POINTER IN COLUMN OF ARG.
 MATTRN2  BSS       0 
          SA1       B3
          SB3    B3+X7       UP COLUMN-POINTER OF ARGUMENT. 
          BX6       X1
          SA6       B5+B7 
          SB7       B7+1                UP ROW-POINTER OF RESULT
          LT        B7,B4,MATTRN2       NOT END OF ROW
          SX.U      X.U+1 
          SB5       B5+B4 
          LT        B5,B6,MATTRN1       NOT LAST ROW
          RJ     MATCRES     COPY BACK TO RESULT. 
          SA1       MATTRB3 
          SA2       MATTRB4 
          SA3       MATTRB1 
          SA4       MATTRB2 
          SB3       X1
          SB4       X2
          SB1       X3
          SB2       X4
          EQ        BASMTRN 
* 
 MATTRB1  EQU       MATSVB1 
 MATTRB2  EQU       MATSVB2 
 MATTRB3  EQU       MATSVB3 
 MATTRB4  EQU       MATSVB4 
 BATMTRN  BSS       0 
* 
*         END MAT TRN 
* 
          TITLE  ZERO AND CON FUNCTIONS (BASMZER,BASMCON) 
* 
*         MAT ZER RESULT IN W 
* 
          DATA      10HBASMZER
 BASMZER  BSSZ      1 
          SIZECHK   W,6 
          SB7       X6                  LIMIT 
          SB5       B0                  START 
          SB6       1                   STEP
          SX6       B0                  ARGUMENT
          SX.W      X.W+B2              CONSTRUCT ABSOLUTE ADDRESS
 MATZERO  SA6       X.W+B5
          SB5       B5+B6 
          LT        B5,B7,MATZERO       LOOP
          EQ        BASMZER 
 BATMZER  BSS       0 
* 
*         END MAT ZER 
* 
* 
*         MAT CON RESULT IN W 
* 
          DATA      10HBASMCON
 BASMCON  BSSZ      1 
          SIZECHK   W,6 
          SB7       X6                  LIMIT 
          SB5       B0                  START 
          SB6       1                   STEP
          SX7       1 
          PX6       X7,B0 
          NX6       X6                  ARGUMENT
          SX.W      X.W+B2              CONSTRUCT ABSOLUTE ADDRESS
 MATCON   SA6       X.W+B5
          SB5       B5+B6 
          LT        B5,B7,MATCON        LOOP
          EQ        BASMCON 
 BATMCON  BSS       0 
* 
*         END MAT CON 
* 
          TITLE  IDN FUNCTION (BASMIDN) 
* 
*         MAT IDN RESULT IN W 
* 
          DATA      10HBASMIDN
 BASMIDN  BSSZ      1 
          SIZECHK   W,6 
          SB7       X6                  LIMIT 
          SB5       B0                  START 
          SB6       1                   STEP
          SA1       A.W+1 
          SA2       A.W+2 
          IX0       X1-X2 
          SX6       B0                  CLEAR FOR ZERO-SETTING
          NZ     X0,ER161    *MATRIX DIMENSION ERROR* 
          SX0       X.W+B2
 MATIDN1  SA6       X0+B5               SET TO ZERO 
          SB5       B5+B6 
          LT        B5,B7,MATIDN1       LOOP
          FSTDIM    W,6 
          SB5       B0
          SB6       X6+1
          SX7       1 
          PX6       X7,B0 
          NX6       X6
 MATIDN2  SA6       X0+B5               SET ONE-S 
          SB5       B5+B6 
          LT        B5,B7,MATIDN2       LOOP
          EQ        BASMIDN 
 BATMIDN  BSS       0 
* 
*         END MAT IDN 
* 
          TITLE  MAT READ (BASMRED) AND DET FUNC (BASMDET)
* 
*         MAT READ RESULT IN W
* 
          DATA      10HBASMRED
 BASMRED  BSSZ      1 
          SIZECHK   W,6 
          SB7       X6                  LIMIT 
          SB5       B0                  START 
          SB6       1                   STEP
          SA1    =XBASANSI
          ZR     X1,MATREA4 
          SB6    2
 MATREA4  BSS    0
          SX.W      X.W+B2              CONSTRUCT ABSOLUTE ADDRESS
          SA1    DATAXXX           DATA POINTER IN B1 
          SB1    X1 
          MX2    42                MASK 
 MATREAD  SA1       B1                  NEXT ELEMENT
          OR   X1,MATREA1          END OF DATA
          ZR   X1,MATREA2          CHECK DATA, ZERO IS OK 
          BX0    X2*X1             EXPONENT MUST EXIST
          ZR   X0,MATREA3          IT WAS A STRING ADDRESS
 MATREA2  BSS    0
          SB1    B1+B6       ADVANCE DATA POSITION. 
          BX6       X1
          SA6       X.W+B5
          SB5    B5+1         ADVANCE ITEM COUNT
          LT        B5,B7,MATREAD 
          SX6    B1                UPDATE DATA POINTER
          SA6    DATAXXX
          EQ        BASMRED 
* 
 MATREA1  SX6    B1                UPDATE DATA POINTER
          SA6    DATAXXX
          EQ   ER120               *END OF DATA*
 MATREA3  SX6    B1 
          SA6    DATAXXX
          EQ   ER126               *BAD DATA IN READ* 
 BATMRED  BSS       0 
* 
*         END MAT READ
* 
 MATDET   DATA   17777777777777777777B START WITH INDEFINITE
          DATA   10HBASMDET 
 BASMDET  BSSZ   1
          SA3    MATDET            TAKE VALUE OF DELTA
          ID     X3,MATDET1  ERROR IF INITIAL VALUE.
          BX5    X3 
          EQ     BASMDET
 MATDET1  BSS    0
          EQ     ER162       DET STILL UNDEFINED - ERROR. 
* 
* 
*         BASMDTX 
* 
*         DETERMINANT WITH PARAMETER. 
* 
*         ENTRY CONDITIONS: 
*                (A5) = POINTER TO DOPE VECTOR FOR SQUARE 
*                       NUMERIC ARRAY.
* 
*         EXIT CONDITIONS:  
*                (X5) = DETERMINANT.
*                B1,B2,B3,B4 ARE SAVED. 
* 
          DATA   10HBASMDTX 
 BASMDTX  BSSZ   1
          FSTDIM U,6         FIRST DIMENSION OF ARGUMENT
          SB6    X6 
          SB7    MAXDIMI     CHECK FOR SIZE TOO BIG.
          GT     B6,B7,ER161  ERROR IF SO.
          SIZEVAL W,6        (X6) = PRODUCT OF DIMENSIONS.
          SB6    X6 
* 
*         ALLOCATE TEMPORARY STRING.
* 
          SX3    10 
          MX0    -1 
          IX7    X6-X0       WORD COUNT + 1.
          IX2    X7*X3       10*(WORD COUNT + 1). 
          MX6    0
          SX1    DTXSPW      ADDRESS OF STRING POINTER WORD.
          SA6    X1          ZERO THE STRING POINTER AREA.
          BX3    X7          SAVE WORD LENGTH OF STRING.
* 
          RJ     =XBASGSTR   ALLOCATE THE STRING. 
* 
          SX0    B2          (B2) = BASE OF VARIABLES BLOCK.
          BX2    X3          (X2) = WORD LENGTH OF STRING.
          IX3    X1-X0
          LX2    30          (X2)<59:30> = LENGTH.
          IX7    X3+X2
          ERRNZ  U-W
          SA7    DTXAPL      LENGTH AND FWA FOR RESULT. 
          SA2    A.W+1       TRANSFER DIMENSIONS ACROSS.
          SA1    A.W+2
          BX6    X2 
          LX7    X1 
          SA6    DTXAPL+1 
          SA7    DTXAPL+2 
          SA.V   DTXAPL 
          SA1    MATDET      SAVE THE OLD DET 
          BX6    X1 
          SA6    DTXSAVE
          SX6    B5          SAVE THE FET POINTER 
          SA6    SVB5 
* 
          RJ     BASMINV     INVERT ARGUMENT. 
* 
          SA1    SVB5        RESTORE THE FET POINTER
          SB5    X1 
          SX1    DTXSPW 
* 
          RJ     =XBASRSTR   FREE THE STRING. 
* 
          SA3    MATDET      TAKE DETERMINANT VALUE.
          BX5    X3 
          SA1    DTXSAVE     RETRIEVE THE OLD DET 
          BX6    X1 
          SA6    MATDET 
          EQ     BASMDTX
* 
*         APLIST AND STRING POINTER WORD. 
* 
 DTXSPW   BSS    1           STRING POINTER WORD. 
 SVB5     BSSZ   1
 DTXAPL   BSS    3           APLIST FOR INVERSION CALL. 
 DTXSAVE  BSSZ   1           SAVE OLD DET IN BASMINV
 BATMDET  BSS    0
* 
*         END MAT DET 
* 
          TITLE  MAT PRINT (BASMPRT)
* 
*         MAT PRINT ARGUMENTS IN K AND L
* 
          DATA      10HBASMPRT
 BASMPRT  BSSZ      1 
          SX6       B2
          SX7       B3
          SA6       MATPTB2             SAVE B2 
          SA7       MATPTB3             SAVE B3 
          BX7       X.L 
          AX.L      59
          BX7       X7-X.L              SAVE ABSOLUTE VALUE OF X.L
          SA7       MATPTXS             SAVE X.S
          SX7       B1
          SA7       MATPTB1             SAVE B1 TOO 
          SB2       X.K+B2
          SIZEVAL   K,6 
          SX6    X6+B2
          SA6    MATSIZE     SAVE MAT BASE + LENGTH 
          SECDIM    K,6 
          SB1       X6                  B1 = SECOND DIM 
 MATPRT1  BSS       0 
          SB3    B0          B3 = COUNT 
 MATPRNT  BSS    0
          SA5    B2+B3
          SA1    PRSFL
          NZ     X1,MATPRT3  SKIP IF PRINTING STRINGS 
          RJ        BASOCON 
 MATPRT3   BSS    0 
          SA4       MATPTXS             GET TAB 
          RJ        BASOPRT 
          SB3    B3+1 
 MATPRT4  BSS    0
          LT     B3,B1,MATPRNT         STILL SAME ROW 
         SA1       B5+FETCHAR 
          ZR        X1,MATPRT2         AT START OF NEW LINE 
          SX4       -1
          SX5       B0
          RJ        BASOPRT             GO TO NEW LINE
MATPRT2   BSS       0 
          SX4       -1
          SA5    BLKLINE
          RJ        BASOPRT             ADD ONE BLANK LINE
          SB2       B2+B1               NEXT ROW
          SA4    MATSIZE
          SB6    X4          B6 = MATRIX BASE + LENGTH
          LT     B2,B6,MATPRT1         STILL MORE 
          SX4       -1
          SA5    BLKLINE
          RJ        BASOPRT             SET NEW LINE
          SA4       MATPTB1 
          SB1       X4                  RESET B1
          SA1       MATPTB2 
          SA2       MATPTB3 
          SB2       X1
          SB3       X2
          EQ        BASMPRT 
* 
 MATPTB1  EQU       MATSVB1 
 MATPTB2  EQU       MATSVB2 
 MATPTB3  EQU       MATSVB3 
 BLKLINE  VFD    6/0,18/8,18/0,18/MATPTBL 
 MATSIZE  BSS    1
 MATPTBL  DATA      8L
 MATPTXS  BSSZ      1 
 PRSFL    BSSZ   1
 BATMPRT  BSS       0 
* 
*         END MAT PRINT 
* 
          TITLE  MAT PRINT USING (BASMPRU)
* 
*         MAT PRINT USING 
* 
*                 ON ENTRY (A5) = IMAGE STRING
*                          (X4) = ARRAY DOPE
*                          (X3) = TERMINATOR
*                                (+) = NUMERIC
*                                (-) = STRING 
*                                (0) = SEMI-COLON 
*                                (1) = COMMA OR EOS 
* 
          DATA   10HBASMPRU 
 BASMPRU  PS
          SX6    B1          SAVE B REGS
          SX7    B2 
          SA6    MS1
          SA7    MS1+1
          SX6    B3 
          SA6    MS1+2
          BX6    X3          SAVE X3
          SX7    A5          AND A5 
          SA6    MS3
          SA7    MS5
          SB2    X4+B2
          SIZEVAL 4,6 
          SX6    X6+B2
          SA6    MATSIZE     SAVE MATRIX BASE + LENGTH
          SECDIM 4,6
          SB1    X6          B1 = SECOND DIM
 MATPRU2  BSS    0
          SB3    B0          B3 = COUNTER 
          SA5    MS5
          SA5    X5 
          RJ     BASOUSI
 MATPRU   BSS    0
          SA3    MS3
          SA4    B2+B3
          SB3    B3+1 
          RJ     BASOPRO
          LT     B3,B1,MATPRU   STILL SAME ROW
          SA1    B5+FETCHAR 
          ZR     X1,MATPRU3  AT START OF LINE 
          MX4    73B
          SX5    B0 
          RJ     BASOPRT     GO TO NEW LINE 
 MATPRU3  BSS    0
          SB2    B2+B1       NEXT ROW 
          SA4    MATSIZE
          SB6    X4          B6 = MAT BASE + LENGTH 
          LT     B2,B6,MATPRU2         MORE TO PRINT
          MX4    73B
          SA5    BLANKLN     A5 = ADR OF POINTER FOR BLANK
          RJ     BASOPRT
          SA1    MS1
          SA2    MS1+1
          SA3    MS1+2
          SA5    MS5
          SB1    X1 
          SB2    X2 
          SB3    X3 
          SA5    X5 
          EQ     BASMPRU
* 
 MS1      BSSZ   3
 MS3      BSSZ   1
 MS5      BSSZ   1
 ADDER    BSSZ   1
 BLANKLN  VFD    6/0,18/1,18/0,18/BLANK  STR PTR WORD FOR BLANK 
 BLANK    DATA   C* * 
 BATMPRU  BSS    0
          TITLE  MAT READ FILE (BASMRFL)
* 
*         MAT READ FILE RESULT IN W 
* 
          DATA      10HBASMRFL
 BASMRFL  BSSZ      1 
          SX6       B1
          SX7       B2
          SA6       MATRFL1             SAVE B1 
          SA7       MATRFL2             SAVE B2 
          SX6       B3
          SA6       MATRFL3             SAVE B3 
          SB2       X.W+B2              CONSTRUCT ABSOLUTE ADDRESS
          SIZECHK   W,6 
          SB1       X6                  LIMIT 
          SB3       B0
MATRDF1  MX4       00B            CLEAR X4
         RJ        BASIRED        GET NEXT ELEMENT IN X6
          SA6       B2+B3               STORE IT
          SB3       B3+1
          LT        B3,B1,MATRDF1       LOOP
          SA1       MATRFL1 
          SA2       MATRFL2 
          SA3       MATRFL3 
          SB1       X1                  RESET B1
          SB2       X2                  RESET B2
          SB3       X3                  RESET B3
          EQ        BASMRFL 
* 
 MATRFL1  EQU       MATSVB1 
 MATRFL2  EQU       MATSVB2 
 MATRFL3  EQU       MATSVB3 
 BATMRFL  BSS       0 
* 
*         END MAT READ FILE 
* 
          TITLE  MAT INPUT (BASMINP)
* 
*         MAT INPUT RESULT IN W 
* 
          DATA      10HBASMINP
 BASMINP  BSSZ      1 
          SX6       B1
          SX7       B2
          SA6       MATINP1             SAVE B1 
          SA7       MATINP2             SAVE B2 
          SX6       B3
          SX7       B4
          SA6       MATINP3             SAVE B3 
          SA7       MATINP4             SAVE B4 
          SB2       X.W+B2
          SX6    B2 
          SA6    SVB2IN 
          SIZECHK   W,6 
          SB3       X6+B2               B3 = BASE + LENGTH
          SECDIM    W,6 
          SB1       X6                  B1 = SECOND DIM 
 MATIN01  BSS       0 
          RJ        BASISRT             INITIATE INPUT OF ONE ROW 
          SA1    SVB2IN 
          SB2    X1 
          SB4       B0                  BJ = COUNT
 MATIN02  BSS       0 
          RJ        BASIINP             GET NEXT ELEMENT
          SA6       B2+B4               STORE IT
          SB4       B4+1
          LT        B4,B1,MATIN02       STILL SAME ROW
          SB2    B2+B1       GO TO THE NEXT ROW 
          SB4    B0 
          LT     B2,B3,MATIN02
          RJ        BASIEND             TERMINATE INPUT OF ONE ROW
          SA1       MATINP1 
          SA2       MATINP2 
          SA3       MATINP3 
          SA4       MATINP4 
          SB1       X1                  RESET B1
          SB2       X2                  RESET B2
          SB3       X3                  RESET B3
          SB4       X4                  RESET B4
          EQ        BASMINP 
 SVB2IN   DATA   0
* 
 MATINP1  EQU       MATSVB1 
 MATINP2  EQU       MATSVB2 
 MATINP3  EQU       MATSVB3 
 MATINP4  EQU       MATSVB4 
 BATMINP  BSS       0 
* 
*         END MAT INPUT 
* 
          TITLE  MAT WRITE FILE (BASMWRT) 
* 
*         MAT WRITE FILE ARGUMENT IN W
* 
          DATA      10HBASMWRT
 BASMWRT  BSSZ      1 
          SX6       B1
          SX7       B2
          SA6       MATWRT1             SAVE B1 
          SA7       MATWRT2             SAVE B2 
          SX6       B3
          SA6       MATWRT3             SAVE B3 
          SB2       X.W+B2              CONSTRUCT ABSOLUTE ADDRESS
          SIZEVAL   W,6 
          SB1       X6                  LIMIT 
          SB3       B0
 MATWRF1  SA5       B2+B3               GET NEXT ELEMENT
         MX4       00B            CLEAR X4 -STRING INDICATOR
          RJ        BASOWRT             WRITE IT
          SB3       B3+1
          LT        B3,B1,MATWRF1       LOOP
          SA1       MATWRT1 
          SA2       MATWRT2 
          SA3       MATWRT3 
          SB1       X1                  RESET B1
          SB2       X2                  RESET B2
          SB3       X3                  RESET B3
          EQ        BASMWRT 
* 
 MATWRT1  EQU       MATSVB1 
 MATWRT2  EQU       MATSVB2 
 MATWRT3  EQU       MATSVB3 
 BATMWRT  BSS       0 
* 
*         END MAT WRITE FILE
* 
          TITLE  INV FUNCTION (BASMINV) 
* 
*         MAT INV ARGUMENT IN U RESULT IN V 
* 
          DATA      10HBASMINV
 BASMINV  BSSZ      1 
* 
*         RESET VALUE OF DELTA TO 1 
* 
          SA1    MATDET            SAVE OLD VALUE OF DET IN CASE OF ERR 
          BX7    X1 
          SA7    SAVEDET
          SX7    172040B
          LX7    42 
          SA7    MATDET 
          DIMCHCK V,U,1 
          SIZEVAL   U,6 
          SB5       X6                  B5 = LENGTH OF U
          FSTDIM U,6
          SB6       X6                  B6 = LENGTH OF ROW
          SB7       MAXDIMI             CHECK FOR SIZE TOO BIG
          GT     B6,B7,DETRET      TOO BIG
          SX6       B1
          SX7       B2
          SA6       INVERB1             SAVE B1 
          SA7       INVERB2             SAVE B2 
          SX6       B3
          SX7       B4
          SA6       INVERB3             SAVE B3 
          SA7       INVERB4             SAVE B4 
          SX.U      X.U+B2
          SX.V      X.V+B2
          SB1       B0
 INVER01  BSS       0 
          SA1       X.U+B1              COPY U INTO RESULT
          BX6       X1
          SA6       X.V+B1
          SB1       B1+1
          LT        B1,B5,INVER01       END COPY
          SX2       MATINVV             X2 = BASE OF V
          SX3       MATINVW             X3 = BASE OF W
          SB1       B0
          SX6       -1
          BX7       X6
 INVER02  BSS       0 
          SA6       X2+B1               CLEAR V 
          SA7       X3+B1               CLEAR W 
          SB1       B1+1
          LT        B1,B6,INVER02       END CLEAR 
          SB5       X.V+B5              B5 = TOP OF RESULT
          SX7       X.V                 X7 = BASE OF RESULT R 
          SX6       B0
          SA6       INVERVQ             FOR Q = 0 ( 1 ) N-1 DO
 INVER10  BSS       0 
          SA5       INVERLM 
          BX0       -X5                 DD = - LIMIT
          SB1       X7                  FOR I = BASE ( N ) TOP-1 DO 
          SB7       B0                  II = 0
 INVER11  BSS       0 
          SA4       X2+B7               V(II) 
          PL        X4,INVER14          V(II)>0 
          SB2       B0                  FOR J = 0 ( 1 ) N DO
          SB4       X7                  JJ = BASE 
 INVER12  BSS       0 
          SA4       X3+B2               W(J)
          SA5       B1+B2               R(I,J)
          PL        X4,INVER13          W(J) > 0
          BX4       X5
          AX4       59
          BX5       X5-X4               ABS(R(I,J)) 
          FX4       X0-X5 
          PL        X4,INVER13          ABS(R(I,J)) < DD
          BX0       X5                  DD = ABS(R(I,J))
          SB3       B7                  B3 = II  ( K STEP 1 ) 
          SX6       B2                  X6 = J
          LX6       30
          SX1       B4                  X1 = JJ 
          BX6       X6+X1               X6 = J + JJ ( L STEP 1 , STEP N)
          SX1       B1                  X1 = I   ( K STEP N ) 
 INVER13  BSS       0 
          SB2       B2+1                J = J+1 
          SB4       B4+B6               JJ = JJ+N 
          LT        B2,B6,INVER12       END J 
 INVER14  BSS       0 
          SB1       B1+B6               I = I+N 
          SB7       B7+1                II = II + 1 
          LT        B1,B5,INVER11       END I 
          SA6       X2+B3               V(KK) = L ( STEP 1 , STEP N ) 
          LX6       30
          SB4       X6                  B4 = L
          SX6       B3
          SA6       X3+B4               W(L) = KK ( STEP 1 )
          SB3       X1                  B3 = K
          SA5       B3+B4               R(K,L)
          BX0       -X5                 DD = - R(K,L) 
          BX4       X5
          AX4       59
          BX5       X5-X4               ABS(R(I,J)) 
          SA4       INVERLM             GET LIMIT 
          FX5       X4-X5 
          NG        X5,INVER15          NOT TO SMALL
          SB1    X7          BASE OF RESULT.
 MATSG    BSS    0
          SX6    177700B
          LX6    42          MAKE ENTIRE ARRAY INDEFINITE.
 INVSING  BSS    0
          SA6    B1 
          SB1    B1+1 
          LT     B1,B5,INVSING
          BX6    X6-X6
          SA6    MATDET      DET = 0. 
          EQ     INVEXIT
 DETRET   BSS    0
          SA3    SAVEDET
          BX7    X3 
          SA7    MATDET 
          EQ     ER161       *MATRIX DIMENSION ERROR* 
 INVER15  BSS       0 
          SB2       B0                  FOR J = 0 ( 1 ) N-1 DO
 INVER20  BSS       0 
          SA5       B3+B2               R(K,J)
          RX6       X5/X0 
          SA6       A5                  R(K,J) = R(K,J)/DD
          SB2       B2+1                J = J+1 
          LT        B2,B6,INVER20       END J 
          BX0       -X0                 DD = -DD
          SB1       X7                  FOR I = BASE ( N ) TOP-1 DO 
          BX7    X0               TAKE VALUE OF PIVOT 
          SA5    MATDET            AND MULTIPLY BY OLD PRODUCT
          FX7    X7*X5             TO GET THE NEW PRODUCT 
          ZR     X7,MATSG 
          SA7    MATDET 
          SX7    B1                RESTORE X7 
 INVER30  BSS       0 
          EQ        B1,B3,INVER33       I = K 
          SA1       B1+B4               EE = R(I,L) 
          SB2       B0                  FOR J = 0 ( 1 ) N-1 DO
 INVER31  BSS       0 
          EQ        B2,B4,INVER32       J = L 
          SA4       B3+B2 
          SA5       B1+B2 
          RX6       X4*X1 
       RX6       X6+X5
          BX5       X6
          AX5       59
          BX5       X5-X6 
          UX5       B0,X5 
          AX5       3 
+         NZ        X5,*+1
          SX6       0 
          NX6       X6
          SA6       A5                  R(I,J) = R(I,J) + EE * R(K,J) 
 INVER32  BSS       0 
          SB2       B2+1                J = J+1 
          LT        B2,B6,INVER31       END J 
         RX6       X1/X0
          SA6       B1+B4               R(I,L) = EE / DD
 INVER33  BSS       0 
          SB1       B1+B6               I = I + N 
          LT        B1,B5,INVER30       END I 
          SX4       1 
          PX5       B0,X4 
          NX5       X5                  CONSTRUCT ONE 
          RX6       X5/X0 
          SA6       B3+B4               R(K,L) = 1 / DD 
          SA4       INVERVQ 
          SX6       X4+1                Q = Q + 1 
          SB1       X6
          SA6       A4
          LT        B1,B6,INVER10       END Q 
          SX0       X7                  X0 = BASE 
INVER34   BSS       0                  RESTART LOOP.. 
          SB1       X0                  FOR I = BASE ( N ) TOP-1 DO 
          SB7       B0                  II
 INVER40  BSS       0 
          SA1       X2+B7 
          SB3       X1                  K = V(II) 
          EQ        B1,B3,INVER42       K = I 
*         SIGN OF DET WAS CHANGED 
          SA5    MATDET 
          BX7    -X5
          SA7    MATDET 
* 
          SB2       B0                  FOR J = 0 ( 1 ) N-1 DO
          AX1       30
 INVER41  BSS       0 
          SA4       B1+B2               R(I,J)
          SA5       B3+B2               R(K,J)
          BX6       X4
          LX7       X5
          SA6       A5                  R(K,J) = R(I,J) 
          SA7       A4                  R(I,J) = R(K,J) 
          SB2       B2+1                J = J+1 
          LT        B2,B6,INVER41       END J 
          SB2       X1
          SA4       X2+B2               V(KK) 
          SX6       B3
          BX7       X4
          SA6       A4                  V(KK) = K 
          SA7       X2+B7               V(II) = V(KK) 
          EQ        INVER34            GO TO RESTART LOOP 
 INVER42  BSS       0 
          SB1       B1+B6               I = I+N 
          SB7       B7+1                II = II + 1 
          LT        B1,B5,INVER40       END I 
INVER43   BSS       0                  RESTART LOOP 
          SB2       B0                  FOR J = 0 ( 1 ) N-1 DO
 INVER50  BSS       0 
          SA1       X3+B2 
          SB4       X1                  L = W(J)
          EQ        B2,B4,INVER52       L = J 
          SB1       X0                  FOR I = BASE ( N ) TOP-1 DO 
 INVER51  BSS       0 
          SA4       B1+B2               R(I,J)
          SA5       B1+B4               R(I,L)
          BX6       X4
          LX7       X5
          SA6       A5                  R(I,L) = R(I,J) 
          SA7       A4                  R(I,J) = R(I,L) 
          SB1       B1+B6               I = I + N 
          LT        B1,B5,INVER51       END I 
          SA4       X3+B4 
          SX6       B4
          BX7       X4
          SA6       A4                  W(L) = L
          SA7       X3+B2               W(J) = W(L) 
          EQ        INVER43            GO TO RESTART LOOP 
 INVER52  BSS       0 
          SB2       B2+1
          LT        B2,B6,INVER50       END J 
 INVEXIT  BSS    0
          SA1       INVERB1 
          SA2       INVERB2 
          SA3       INVERB3 
          SA4       INVERB4 
          SB1       X1                  RESET B1
          SB2       X2                  RESET B2
          SB3       X3                  RESET B3
          SB4       X4                  RESET B4
          EQ        BASMINV 
* 
 INVERB1  EQU       MATSVB1 
 INVERB2  EQU       MATSVB2 
 INVERB3  EQU       MATSVB3 
 INVERB4  EQU       MATSVB4 
* 
 INVERVQ  BSSZ      1 
 SAVEDET  BSSZ   1
 INVERLM  DATA   0                 USE DETERMINANT INSTEAD
 MATINVV  BSS       MAXDIMI 
 MATINVW  BSS       MAXDIMI 
* 
*         END MAT INV 
* 
 BATMINV  BSS       0 
          TITLE  MAT WRITE AND PRINT STRINGS (BASMWRS,BASMPRS)
          DATA   10HBASMWRS 
* 
*         MAT WRITE FOR STRINGS 
* 
 BASMWRS  BSSZ   1
          SX6    B1 
          SX7    B2 
          SA6    MATWRT1
          SA7    MATWRT2
          SX6    B3 
          SA6    MATWRT3
          SB2    X.W+B2 
          SIZEVAL W,6 
          SB1    X6 
          SB3    B0 
 MATWRS1  BSS    0
          SA5    B2+B3             ADDRESS OF ARRAY IN A5 
          SX4    1                 STRINGS
          RJ     BASOWRT
          SB3    B3+1 
          LT     B3,B1,MATWRS1
          SA1    MATWRT1
          SA2    MATWRT2
          SA3    MATWRT3
          SB1    X1 
          SB2    X2 
          SB3    X3 
          EQ     BASMWRS
 BATMWRS  BSS    0
          DATA   10HBASMPRS 
* 
*         MAT PRINT FOR STRINGS 
* 
 BASMPRS  BSSZ   1
          MX7    1
          SA7    PRSFL
          RJ     BASMPRT
          MX7    0
          SA7    PRSFL
          JP     BASMPRS
 BATMPRS  BSS    0
          TITLE  MAT INPUT STRING ARRAY (BASMINS) 
          DATA   10HBASMINS 
* 
*         MAT INPUT STRING ARRAYS 
*         ARRAY DOPE VECTOR IN X5 
* 
 BASMINS  BSSZ   1
*         SAVE B1 B2 B3 B4
          SX6    B1 
          SX7    B2 
          SA6    MATINP1
          SA7    MATINP2
          SX6    B3 
          SX7    B4 
          SA6    MATINP3
          SA7    MATINP4
          SB2    X.W+B2            ADDRESS ARRAY IN B2
          SX6    B2 
          SA6    SVB2IN 
          SX7    1                 SET MAT INPUT ARRAY FLAG 
          SA7    MISDF
          SIZECHKS W,6
          SB3    X6+B2             B3 = BASE + LENGTH 
          SECDIM W,6
          SB1    X6 
 MATIS01  BSS    0
          RJ     BASISRT           INIT INPUT 
          SA1    SVB2IN 
          SB2    X1 
          SB4    B0 
 MATIS02  BSS    0
          SA5    B2+B4       A5 = ADDRESS OF STRING POINTER 
          RJ     BASIINS     GET NEXT ELEMENT 
          SB4    B4+1        INCREMENT COUNTER
          LT     B4,B1,MATIS02     ROW LOOP 
          SB2    B2+B1       GET THE NEXT ROW 
          SB4    B0 
          LT     B2,B3,MATIS02
          RJ     BASIEND
          MX7    0                 RESET MAT INPUT ARRAY FLAG 
          SA7    MISDF
*         RESTORE REGISTERS AND GO
          SA1    MATINP1
          SA2    MATINP2
          SA3    MATINP3
          SA4    MATINP4
          SB1    X1 
          SB2    X2 
          SB3    X3 
          SB4    X4 
          EQ     BASMINS
 BATMINS  BSS    0
          TITLE  MAT READ STRING ARRAY (BASMRS
* 
*         MAT READ STRING ARRAY 
*         B1 POINTS TO DATA BLOCK 
* 
          DATA   10HBASMRDS 
 BASMRDS  BSSZ   1
          SIZECHKS W,6             X.W CONTAINS THE ARRAY DOPE VECTOR 
          SB3    X6 
          SB6    X.W+B2      B6 = FWA OF MATRIX 
          SB3    B3+B6       B3 = LWA +1 OF MATRIX
          SA1    DATAXXX           DATA POINTER IN B1 
          SB1    X1 
          MX2    42                MASK 
 BASMRS1  BSS    0                 LOOP 
          SA1    B1          X1 = DATA ITEM (PTR TO STR PTR WORD) 
          OR   X1,BASMRS2          END OF DATA
          ZR   X1,BASMRS3          CHECK DATA, ZERO IS BAD STRING ADDR
          BX0    X2*X1             ADDR MUST NOT EXCEED 18 BITS 
          NZ   X0,BASMRS3          BAD DATA IN READ 
          SB7    X1+B4       B7 = SOURCE ADDRESS
*                            B6 = DESTINATION ADDRESS/
          RJ     BASASTR
          SB1    B1+1              ADVANCE DATA POSITION
          SB6    B6+1 
          LT     B6,B3,BASMRS1         LOOP OF NOT DONE 
          SX6    B1                UPDATE DATA POINTER
          SA6    DATAXXX
          EQ     BASMRDS
* 
 BASMRS2  SX6    B1                UPDATE DATA POINTER
          SA6    DATAXXX
          EQ   ER120               *END OF DATA*
 BASMRS3  SX6    B1 
          SA6    DATAXXX
          SA1    =XBASANSI
          ZR     X1,ER126 
          SB1    B1+1 
          EQ     BASMRS1
 BATMRDS  BSS    0
          TITLE  MAT READ STRING FROM FILE (BASMRFS)
  
* 
*         MAT READ STRING ARRAY FROM FILE 
* 
          DATA   10HBASMRFS 
 BASMRFS  BSSZ   1
          SX6    B1 
          SX7    B2 
          SA6    MATRFL1           SAVE B1
          SA7    MATRFL2           SAVE B2
          SX6    B3 
          SA6    MATRFL3           SAVE B3
          SB2    X.W+B2            ARRAY ADDRESS IN B2
          SIZECHKS W,6
          SB1    X6 
          SB3    B0 
 MATRSF1  BSS    0                 LOOP 
          SX4    1
          SA5    B2+B3       A5 = ADDRESS OF TARGET STRING
          RJ     BASIRED
          SB3    B3+1 
          LT     B3,B1,MATRSF1
          SA1    MATRFL1
          SA2    MATRFL2
          SA3    MATRFL3
          SB1    X1 
          SB2    X2 
          SB3    X3 
          EQ     BASMRFS
 BATMRFS  BSS    0
          END 
