*DECK KEYA
          IDENT  KYAN 
          ENTRY  SDAHASH
          ENTRY  SD$KEYH
          ENTRY  SDAKYAN
          ENTRY  SDAKEYH,SDAENDH
          ENTRY  SD$KYAN,SD$ENDH
 MEMR 
 KYADD
LCNT      DATA   1
 BUFFR    BSSZ   8
 ONE1     DATA   0
TWO1      DATA   0
 THREE1   DATA   0
 FOUR1    DATA   0
 FIVE1    DATA   0
 SHM      BSSZ   6
 BUFD     BSS    1                 CONTAINS  ADDRESS OF KYAN BUFFER     S.M.KYAN
 DEBG     EQU    2
 TRVERL   DATA   25                TRIVIAL ERROR NUMBER ALLOWED 
 SAVEHM   DATA   0
 FIELD    DATA   0                 CONTAINS  FIELD LENGTH               S.M.KYAN
 ENDL     DATA   8L 
 DIZ      DATA   0                 VARIES FROM 1 TO DIV/2               S.M.KYAN
 SAVEB6   DATA   0                 BUFFER LENGTH                        S.M.KYAN
 HMBMX    DATA   0                 =MAX(HMB1,HMB2,HMB3,HMB4,HMB5) 
 HMLK     DATA   L$1    HOME $                                          0005  52
 HN       DATA   L$BLOCK     $
 CNT      DATA   0
 STDIV    DATA   L$  STANDARD$
          DATA   L$ DEVIATION$
 KYANM    DATA   C$KEY ANALYZER ABORT$
 ENDSYN   DATA   C$         SYNONIM LIMIT REACHED$
BLK5      DATA   5R 
 MGA      DATA   L$NOT ENOUGH FIELD LENGTH USE             $
 BPARM    DATA   C$ILLEGAL PARAMETER ENCOUNTERED IN INPUT$
 BHASH    DATA   C$         BAD KEY ENCOUNTERED$
 HASHAB   DATA   C$ MORE THAN 25 BAD KEYS ENCOUNTERED$
 ENDKYH   DATA   C$ END KEY ANALYZER$ 
 COREUSE  DATA   C$          D WORDS OF CENTRAL MEMORY USED$
 NOLOAD   DATA  L$KEY ANALYZER CAN NOT FIND **            $ 
 ONE      DATA   0                  SET  WHEN  HASH1  IN  USE           S.M.KYAN
 TWO      DATA   0                  SET  WHEN  HASH2  IN  USE           S.M.KYAN
 THREE    DATA   0                  SET  WHEN  HASH3  IN  USE           S.M.KYAN
 FOUR     DATA   0                  SET  WHEN  HASH4  IN  USE           S.M.KYAN
 FIVE     DATA   0                  SET  WHEN  HASH5  IN  USE           S.M.KYAN
 SFH1     EQU    0                 SHOWS POSITUON FOR ENTRY IN HASH1
 SFH2     EQU    12 
 SFH3     EQU    24 
 SFH4     EQU    36 
 SFH5     EQU    48 
 ESYN     DATA   5
 ADDBF    DATA   0
 FORTB    BSSZ   6
 ADDB     BSSZ   6
 RNDKY    DATA   0
 LIMIT1   DATA   4094 
 D1V      DATA   0
 DIV      DATA   0                 MULTIPLE OF ST. DIV.                 S.M.KYAN
 DIV2     DATA   0                 DIV/2                                S.M.KYAN
 VL 
 VS 
 SVFL 
 FIRST1 
 PBUF     DATA   0
 FRSTP
 LFN
 VLFN 
 MRL
 VMRL 
 KL 
 KEYL 
 RKP
 KEYP 
 RKW
 RKEYW
*                            INPUT PARAMETERS FOR HASHING ROUTINE 1.
 HA 
 E1 
 HM1
 OP1
*                            INPUT PARAMETERS FOR HASHING ROUTINE 2.
 HB 
 E2 
 HM2
 OP2
*                            INPUT PARAMETERS FOR HASHING ROUTINE 3.
 HC 
 E3 
 HM3
 OP3
*                            INPUT PARAMETERS FOR HASHING ROUTINE 4.
 HD 
 E4 
 HM4
 OP4
*                            INPUT PARAMETERS FOR HASHING ROUTINE 5.
 HF 
 E5 
 HM5
 OP5
 ENDCK2   DATA   -1 
 KYAN1    DATA   L KYAN 
 KYAN2    DATA   L HA 
 RKWN     DATA   L$RKW$ 
 BLNK9    DATA   L$         0$                                          0005  33
 KYBUFF   BSSZ   10                STOREAGE FOR KEY RETURN BY SD$ALKY 
 LBUF     EQU    65                BUFFER LENGTH                        S.M.KYAN
 INPUT    FILEC  MSGBUF,LBUF
 BUFLD    LDREQ  BEGIN
 FLN      LDREQ  LOAD,(AA)
          LDREQ  END
XX        LDREQ  BEGIN
ENT       LDREQ  ENTRY,(A,B,C,D,E)
ENT1      EQU    ENT+1
ENT2      EQU    ENT1+1 
ENT3      EQU    ENT2+1 
ENT4      EQU    ENT3+1 
ENT5      EQU    ENT4+1 
          LDREQ  END
          BSSZ   2
 MX       DATA   0                                                      S.M.KYAN
          USE    /CCOMMON/
 FCOM     BSS    3
          USE    CODE 
 SDAKEYH  BSS    0
SD$KEYH 
          SA2    A1 
          ZR     X2,ABT            IF KEY ADDRESS NOT SET ABORT 
          SX7    X2 
          SA7    KYADD             UPDATE KEY ADDRESS 
 SDAKYAN  BSS    0
 SD$KYAN  SB1    1                 FORM ENTRY POINT 
          SB2    2
          SB1    1
*                                  MACRO LIST                           SMKYAN
 TRANS    MACRO  AC 
          SA1    AC 
          BX6    X1 
          SA6    ENT1+B2
          SB2    B2+B1
          ENDM
CKKY      MACRO  A,B,C,D,F
          LOCAL  RT,RRT 
          SA5    A                 LOAD NUMBER OF HOME BLOCKS 
          RJ     MODULO 
          SA5    A5 
          IX5    X6-X5             CHECK FOR VALID KEY
          SA2    B                 LOAD ENTRY NAME
          NG     X5,RRT            VALID KEY - EXIT 
          MX0    42 
          BX6    X0*X2             CLEAN GARGEAGE 
          SA1    BHASH
          BX1    -X0*X1 
          IX6    X6+X1
          SA6    BHASH             STORE ENTRY NAME IN ERROR MESSAGE
          MESSAGE  BHASH,,R        ISSUE MESSAGE
          SA1    TRVERL 
          SX6    X1-1 
          SA6    TRVERL            UPDATE NUM ER    OF ERRORS 
          NZ     X6,RT
          MESSAGE HASHAB,,R        ISSUE MESSAGE AND ABORT RUN
          ABORT 
 RT       EQ     C
 RRT      BSS    0
          SB2    D
          SA3    F
          ENDM
 MCT      MACRO  R
          SA1    R
          RJ     MCTM 
          ENDM
 THM      MACRO  H,M
          SA1    H
          BX6    X1 
          SA6    SHM+M
          ENDM
 STP      MACRO  AL,BL             INNITIALIZE POINT RS 
          SA1    AL 
          SX6    X1 
          SA6    BL 
          ENDM
          PURGMAC CHECK 
 CHECK    MACRO  AF,BF             VERIFY IF PARAMETER IS SET 
          SA4    AF 
          SA2    BF 
          IX3    X4-X2
          NZ     X3,ABT 
          ENDM
 STDV     MACRO  AA,BB,CC,DD,HH    CHECK IF STANDARD DIVIATION
          SA2    AA                REQUIERED  FOR OUPUT                 S.M.KYAN
          PL     X2,BB                                                  S.M.KYAN
          SB2    DD 
          SA3    HH 
          RJ     ADD               ADD  ALL ENTRIES FOR SPECIEFIC TEST  S.M.KYAN
          SA3    HH 
          RJ     SUBT              CALCULATE  MEAN AND SUBTRACT ALL     S.M.KYAN
          SA7    CC                STORE SQUERE ROOT
          ENDM                                                          S.M.KYAN
 GETH     MACRO  A,B,C
          SA1    A                 CHECK IF PROGRAM IN USE              S.M.KYAN
          ZR     X1,B              IF NOT CHECK NEXT PROGRAM            S.M.KYAN
          RJ     GETKP             SET KEY PARAMETERS                   S.M.KYAN
          SA5    C                 NUMBER OF HOME BLOCKS
          RJ     SD$ALKY           ALLINE KEY TO RKP=0                  S.M.KYAN
          ENDM                                                          S.M.KYAN
 LINE     MACRO  C,D,F                                                  S.M.KYAN
          SB3    B3+B1
          SA1    C                 CHECK IF TABULAR REPRESENTAION       S.M.KYAN
          PL     X1,D              REQUIRED, IF NOT  GO  NEXT ENTRY     S.M.KYAN
          SB2    F                 SHIFT  B2 BITS TO RIGHT              S.M.KYAN
          AX6    B2,X2
          BX6    -X0*X6 
          SA6    BUFFR+B3          STORE LINE IN  OUTPUT BUFFER         S.M.KYAN
          ENDM                                                          S.M.KYAN
 TABH     MACRO  M,N                                                    S.M.KYAN
          SA1    M                 SET OPTION  POINTERS IN SIGN         S.M.KYAN
          LX6    B3,X1             POSITION                             S.M.KYAN
          SA6    N                 +  EXECUTE, - SKIP TO NEXT           S.M.KYAN
          ENDM                                                          S.M.KYAN
 SETH     MACRO  AM,BM,CM,DM       SET RJY INSTRACTION.                 S.M.KYAN
          SA1    AM                CHECK IF  RESPECIVE                  S.M.KYAN
          ZR     X1,BM                HASHING ROUTINE      IN  USE.     S.M.KYAN
          SA1    CM                LOAD ADDRESS                         S.M.KYAN
          SX1    X1                                                     S.M.KYAN
          LX1    30                                                     S.M.KYAN
          SX3    010B              MASK  RY HASH                        S.M.KYAN
          LX3    51                                                     S.M.KYAN
          BX6    X1+X3
          SA6    DM                STORE INSTRUCTION IN  RJ LOCATION.   S.M.KYAN
          ENDM                                                          S.M.KYAN
 SOP      MACRO  A
          SA1    A
          RJ     SETOP
          ENDM
          SA1    FIRST1            CHECK IF FIRST CALL
          NZ     X1,NXTRCD         TO SD$KYAN.                   ****** S.M.KYAN
          MX0    54 
          SA1    BHASH
          BX6    -X0*X1 
          SA6    BHASH
          SX6    1
          SA6    FIRST1 
          MEMORY CM,FIELD,R        FIND FIELD LENGTH                    S.M.KYAN
          SX1    1
          MX2    0
          RJ     =XCMM.GFS         GET SIZE LARGEST AVAILABLE FIXED BLOCK 
          SA6    MX 
          READ   INPUT,R
*                                  INNITIALIZE HASHING ROUTINES 
          SA1    MSGBUF 
          SA7    PBUF 
          RJ     EXTRACT
          CHECK  FRSTP,KYAN1
          CHECK  RKW,RKWN 
          RJ     TRANSE 
          THM    HM1,0
          THM    HM2,1
          THM    HM3,2
          THM    HM4,3
          THM    HM5,4
          SOP    OP1
          SOP    OP2               SET KYAN OPTIONS 
          SOP    OP3
          SOP    OP4
          SOP    OP5
*                                  THE FOLLOWING CODE FINDS THE         S.M.KYAN
*                                  MAXIMUM HOME BLOCK NUMBER USED       S.M.KYAN
*                                  IN THIS TEST.                        S.M.KYAN
          SB3    4
          SA3    SHM
          SA4    A3 
 BGN      BSS    0                 LOOPING  LABEL                       S.M.KYAN
          SB3    B3-B1             COUNTER                              S.M.KYAN
          SA4    A4+B1
          IX7    X3-X4             SUBTRACT VALUES                      S.M.KYAN
          NG     X7,SRT1                                                S.M.KYAN
          EQ     SRT2                                                   S.M.KYAN
 SRT1     BX3    X4                STORE LARGER NUMBER IN X3            S.M.KYAN
 SRT2     NE     B3,B0,BGN         EXIT IF ALL  NUMBERS ENCOUNTERED     S.M.KYAN
          BX6    X3                                                     S.M.KYAN
          SA6    HMBMX             STORE LARGEST HMB IN  HMBMX          S.M.KYAN
          EQ     ZEROBUF
 NETT     BSS    0                                                      0005  78
          BX6    X1                                                     0005  79
          RJ     TBLNK             CONVERT BINARY ZEROES TO BLANKS      0005  80
          MX0    48                SET EOR                              0005  81
          BX6    X0*X6                                                  0005  82
          SA6    NOLOAD+3 
          MESSAGE NOLOAD,,R 
          SA1    SVFL 
          SA1    X1 
          SA5    SAVEHM 
          SB5    X5 
          SB6    5
          SB3    B6-B5
          SB5    B5-B1
          SX6    B0 
          SA6    SHM+B3 
          SB5    B5-B1
          EQ     B5,LENT
          EQ     NET
 ZEROBUF  BSS    0                 ZERO SD$KYAN BUFFER                  S.M.KYAN
*                                  ENTRY  NAMES  STORED IN BUFLDBY GETPRS.M.KYAN
          SA1    VLFN 
          ZR     X1,NLD            DON-T LOAD IF DEFAULT HASHING        0003   5
          BX6    X1 
          SA6    FLN+B1 
          LOADER BUFLD,CMM
 NLD      BSS    0                                                      0003   7
          SB2    B0 
          MX0    42 
YY        SA1    ENT1+B2
          BX6    X0*X1
          SB2    B2+B1
          NZ     X6,YY
          SA6    A1 
          SA1    ENT
          RJ     TRANSE 
          LOADER XX,CMM 
          RJ     =XCMM.GOS         GET STATISTICS 
          SX3    4
          SA2    HMBMX
          IX2    X2+X3
          SA3    X1+6              GET THE LARGEST BLOCK SIZE 
          BX6    X3 
          SA6    MX                SAVE THAT VALUE
          IX7    X3-X2             TEST IF LARGEST BLOCK IS ENOUGH
          PL     X7,GETBF          GET THAT BUFFER IS OKAY
          SA3    X1+3              GET CURRENT MAX FL 
          IX1    X3-X7       TOTAL NEEDED 
          SB2    SVFL 
          RJ     SD$BIND
          LX6    12 
          MX0    48                PUT IN ZERO BYTE TERMINATOR
          BX7    X0*X6
          SA7    MGA+3
          MESSAGE MGA,,R
          ABORT 
 GETBF    BSS    0
          MX3    0
          MX4    1R4
          RJ     =XCMM.ALF         RESERVE BLOCK AND GET FIRST WORD ADRR. 
          BX7    X1 
          SA7    BUFD              FWA OF KYAN BUFFER 
          SB4    X1                FWA BUFFER 
          SA3    HMBMX
          BX6    X3 
          SA6    MX 
          SX3    X3+3 
          SX6    B0 
          SA6    B4 
CLN       SA6    A6+B1
          SX3    X3-1 
          NZ     X3,CLN 
          SB5    5
          MX0    42 
 NET      SA1    A1+B1       GET FIRST ENTRY
          ZR     X1,LENT
          SX6    B5 
          SA6    SAVEHM 
          SX7    A1 
          SA7    SVFL 
          BX5    -X0*X1 
          ZR     X5,NETT
          SB5    B5-B1
          NE     B5,NET 
 LENT     BSS    0
          STP    ENT1,ONE 
          STP    ENT2,TWO 
          STP    ENT3,THREE 
          STP    ENT4,FOUR
          STP    ENT5,FIVE
          SETH   ONE,SH2,ENT1,RJH1       SET THE RY INSTRACTION  FOR H1 S.M.KYAN
 SH2      SETH   TWO,SH3,ENT2,RJH2       SET THE RY INSTRACTION  FOR H2 S.M.KYAN
 SH3      SETH   THREE,SH4,ENT3,RJH3     SET THE RJ INSTRACTION  FOR H3 S.M.KYAN
 SH4      SETH   FOUR,SH5,ENT4,RJH4      SET THE RJ INSTRACTION  FOR H4 S.M.KYAN
 SH5      SETH   FIVE,SH1,ENT5,RJH5      SET THE RJ INSTRACTION  FOR H5 S.M.KYAN
 SH1      BSS    0                                                      S.M.KYAN
          JP        NXTRCD
 NXTRCD   BSS    0                                                      S.M.KYAN
          GETH   ONE,H2,HM1 
 RJH1     DATA   0                      RJ HAS H1 
          RJ     CHFTN
          CKKY   HM1,ENT1,H2,SFH1,ONE 
          RJ     UPDATE            UPDATE BUFFER, TEST1.
 H2       BSS    0                                                      S.M.KYAN
          GETH   TWO,H3,HM2 
 RJH2     DATA   0                 SAME  AS FOR  TEST1
          RJ     CHFTN
          CKKY   HM2,ENT2,H3,SFH2,TWO 
          RJ     UPDATE            UPDATE BUFFER, TEST2.
 H3       BSS    0                                                      S.M.KYAN
          GETH   THREE,H4,HM3 
 RJH3     DATA   0                 SAME  AS FOR  TEST1
          RJ     CHFTN
          CKKY   HM3,ENT3,H4,SFH3,THREE 
          RJ     UPDATE            UPDATE BUFFER, TEST3.
 H4       BSS    0                                                      S.M.KYAN
          GETH   FOUR,H5,HM4
 RJH4     DATA   0                 SAME AS FOR TEST1
          RJ     CHFTN
          CKKY   HM4,ENT4,H5,SFH4,FOUR
          RJ     UPDATE            UPDATE BUFFER, TEST4.
 H5       BSS    0                                                      S.M.KYAN
          GETH   FIVE,ENDH,HM5
 RJH5     DATA   0                 SAME AS FOR  TEST1 
          RJ     CHFTN
          CKKY   HM5,ENT5,ENDH,SFH5,FIVE
          RJ     UPDATE            UPDATE BUFFER, TEST5.
 ENDH     BSS    0                 THE RECORD WAS PROCESSED. A CALL TO  S.M.KYAN
          SA1    KYADD             CHECK IF USER CALL 
          NZ     X1,SD$KEYH 
          EQ     SD$KYAN           FORM IS ISSUED TO GET THE NEXT REC.  S.M.KYAN
 SDAENDH  BSS    0
 SD$ENDH
          SB1    1
          SA2    VL 
          ZR        X2,STNDIV 
          SB3    B0 
          SA1    HMLK 
          BX6    X1 
          SA6    BUFFR
          SA2    HN 
          BX6    X2                SET TITLE FOR OUTPUT 
          SB3    B3+B1
          SA6    BUFFR+B3 
          SB3    B3+B1
          MX0    42 
          MCT    ENT1 
          MCT    ENT2 
          MCT    ENT3 
          MCT    ENT4 
          MCT    ENT5              STORE ENTRY NAME IN OUTPUT BUFFER    0005  16
          SA1    ENDL              SET EOR                              0005  17
          BX6    X1                                                     0005  18
          SA6    BUFFR+B3 
          SA1    BUFFR
          RJ     SD$MSGL
          RJ     ZEROBF 
          SA2    ENDL              EOR                                  0005  20
          BX6    X2                                                     0005  21
          SA6    BUFFR                                                  0005  22
          SA1    A6                                                     0005  23
          RJ     SD$MSGL
          SA2    BUFD                                                   S.M.KYAN
          SX6    X2 
          SA6    ADDBF
          SB3    57                SET POINTERS FOR TABULAR LIST        S.M.KYAN
          TABH   OP1,ONE           SET POINTERS FOR TEST1               S.M.KYAN
          TABH   OP2,TWO           SET POINTERS FOR TEST2               S.M.KYAN
          TABH   OP3,THREE         SET POINTERS FOR TEST3               S.M.KYAN
          TABH   OP4,FOUR          SET POINTERS FOR TEST4               S.M.KYAN
          TABH   OP5,FIVE          SET POINTERS FOR TEST5               S.M.KYAN
 NXTWD    BSS    0                     SA2  X2,                         S.M.KYAN
          SA1    ADDBF
          SX6    X1+1 
          SA6    ADDBF
          SA2    X1                LOAD ENTRY FROM DATA BUFFER
          SA1    CNT
          SX6    X1+B1
          SA6    CNT
          BX7    X1 
          SA7    BUFFR
          SA4    =10L                                                   0005  47
          BX6    X4 
          SA6    BUFFR+B1 
          SB3    B1 
          MX0    48 
 SETL1    LINE   ONE,SETL2,SFH1 
 SETL2    LINE   TWO,SETL3,SFH2 
 SETL3    LINE   THREE,SETL4,SFH3                                       S.M.KYAN
 SETL4    LINE   FOUR,SETL5,SFH4
 SETL5    LINE   FIVE,SETLINE,SFH5
 SETLINE  BSS    0                     SET  LINE FOR  OUTPUT            S.M.KYAN
          SB3    B0 
          SB6    7
 TBIN     BSS    0                 START LOOP FOR OCT-BIN CONVERSION
          SB2    BUFFR+B3 
          SX3    B1                PRINT ZEROES 
          SA4    FIRST1            FIRST TIME 
          PL     X4,PZR 
          SA3    FOUR1+B3          WRITE ZEROES IF HMB IS SET 
          EQ     NZR
 PZR      BSS    0
          SX6    X4-1 
          SA6    FIRST1 
 NZR      BSS    0                 BLANKS IF HMB NOT SET
          SA1    B2 
          RJ     SD$BIND
          SB3    B3+B1
          NE     B3,B6,TBIN 
          SA3    ENDL 
          BX6    X3 
          SA6    BUFFR+B3 
          SB3    B3-B1
          SB2    30                                                     0005  27
 MOVEL    SA1    BUFFR+B3 
          LX7    B2,X1                                                  0005  25
          SA7    BUFFR+B3 
          SB3    B3-B1
          NE     B3,B1,MOVEL
          SA1    BUFFR
          RJ     SD$MSGL
          RJ     ZEROBF 
          SA2    LCNT              LINE COUNTER 
          SX6    X2+B1
          SA6    LCNT              INCREASE COUNTER 
          SA1    MX                                                     S.M.KYAN
          SX1    X1-1                                                   S.M.KYAN
          BX6    X1                                                     S.M.KYAN
          SA6    MX                UPDATE COUNTER                       S.M.KYAN
          NZ     X1,NXTWD                                               S.M.KYAN
          SA3    ENDL 
          BX6    X3 
          SA6    BUFFR
          SA1    A6 
          RJ     SD$MSGL
 STNDIV   BSS    0
          SA2    VS 
          ZR        X2,ENDS 
*                                  SET POINTERS FOR STANDARD DIVIATION  S.M.KYAN
          SA1    STDIV
          BX6    X1 
          SA6    BUFFR
          SA1    A1+B1
          BX6    X1 
          SA6    BUFFR+B1 
          SA2    ENDL 
          BX6    X2 
          SA6    A6+B1
          SA1    BUFFR
          RJ     SD$MSGL
          SA3    ENDL 
          BX6    X3 
          SA6    BUFFR
          SA1    A6 
          RJ     SD$MSGL
          SA2    =10L              BLANK LINE                           0005  35
          BX6    X2                                                     0005  36
          SA6    BUFFR                                                  0005  37
          SA6    A6+B1             ALINE MESSAGE                        0005  38
          SB3    B1+B1                                                  0005  39
          MX0    42 
          MCT    ENT1 
          MCT    ENT2 
          MCT    ENT3 
          MCT    ENT4 
          MCT    ENT5 
          SA3    ENDL 
          BX6    X3 
          SA6    BUFFR+B3 
          SA1    BUFFR
          RJ     SD$MSGL
          RJ     ZEROBF 
          SB3    58                                                     S.M.KYAN
          TABH   OP1,ONE           POINTERS FOR  TEST1                  S.M.KYAN
          TABH   OP2,TWO           POINTERS FOR  TEST2                  S.M.KYAN
          TABH   OP3,THREE         POINTERS FOR  TEST3                  S.M.KYAN
          TABH   OP4,FOUR          POINTERS FOR  TEST4                  S.M.KYAN
          TABH   OP5,FIVE          POINTERS FOR  TEST5                  S.M.KYAN
          STDV   ONE,STD2,ONE1,SFH1,HM1     COMPUTE ST. DIVIATION 
 STD2     STDV   TWO,STD3,TWO1,SFH2,HM2 
 STD3     STDV   THREE,STD4,THREE1,SFH3,HM3 
 STD4     STDV   FOUR,STD5,FOUR1,SFH4,HM4 
 STD5     STDV   FIVE,ENDSTD,FIVE1,SFH5,HM5 
 ENDSTD   BSS    0                                                      S.M.KYAN
          SB6    5
          SB3    B0                                                     S.M.KYAN
 STORE    BSS    0                                                      S.M.KYAN
          SA1    ONE1+B3           FETCH ST. DIV. 
          SB6    B6-B1
          SA4    =10L                                                   0005  41
          BX6    X4 
          SA6    BUFFR+B3 
          ZR     X1,NOSTD 
          SX2    100               CONVERT TO DECIMAL 
          IX3    X2*X1
          AX3    6
          BX1    X3 
          SA3    A1+5              SET FLAG FOR BLANK/ZERO CONVERSION 
          SB2    BUFFR+B3 
          RJ     SD$BIND
          MX0    48                SEPARATE FRACTION
          BX5    X0*X6
          BX4    -X0*X6 
          LX5    6
          BX5    X0*X5
          SX2    1R.               START EDITING
          LX2    12 
          BX7    X5+X2
          BX7    X7+X4
          SA7    A6                SET RESULT FOR OUTPUT
NOSTD     BSS    0
          SB3    B3+B1                                                  S.M.KYAN
          NE     B6,B0,STORE
          SA3    ENDL 
          BX6    X3 
          SA6    BUFFR+B3                                               S.M.KYAN
          SB2    18                                                     0005  43
 MOVES    BSS    0
          SB3    B3-B1
          SA1    BUFFR+B3 
          LX6    B2,X1                                                  0005  45
          SA6    A1 
          NE     B3,MOVES 
          SA4    =10L                                                   0005  54
          BX6    X4                STORE TWO LINES OF BLANKS            0005  55
          SA6    KYADD
          SA6    A6+B1
          SA1    KYADD
          RJ     SD$MSGL
 ENDS     RJ     SD$MSGC
          MESSAGE ENDKYH,,R 
          RJ     =XCMM.GSS         GET JOB STATISTICS 
          SA1    X1+1 
          SB2    COREUSE
          RJ     SD$BIND
          MESSAGE COREUSE,,R
          EQ     SD$ENDH
          DATA   L$GETKP$ 
 GETKP    DATA   0                                                      S.M.KYAN
          SA2    KEYP              GET  KEY POSITION                    S.M.KYAN
          SA3    KEYL              GET  KEY LENGTH                      S.M.KYAN
          SA4    KYADD
          NZ     X4,NRCL           NO USER CALL 
          SA1    FCOM        LOAD FIT ADDRESS 
          SA4    X1+6        LOAD WSA ADDRESS 
          SX4    X4 
          SX6    B0          DO NOT WRITE RECORD ON OUTPUT
          SA6    FCOM+1 
 NRCL     SA5    RKEYW             GET RKW
          IX4    X4+X5             SET  KEY ADDRESS                     S.M.KYAN
          SA1    KYBUFF            SET  KEY BUFFER ADDRESS              S.M.KYAN
          SB5    A1                FOR  KEY TO BE RETURNED
          EQ     GETKP
          DATA   L$UPDATE$
 UPDATE   DATA   0                                                      S.M.KYAN
          SA1    BUFD              GET  FIRST WORD OF BUFFER            S.M.KYAN
          IX4    X1+X6             SET  ENTRY ADDRESS IN BUFFER         S.M.KYAN
          SX6    B1                                                     S.M.KYAN
          LX6    B2,X6             SHIFT TO ENTRY POSITION              S.M.KYAN
          SA1    X4                GET ENTRY CONTAING NUMB OF SYNONIM   S.M.KYAN
          IX6    X1+X6             UPDATE ENTRY                         S.M.KYAN
          SA6    X4                RESTORE ENTRY                        S.M.KYAN
          AX6    B2,X6
          MX0    48 
          BX6    -X0*X6 
          SA4    LIMIT1 
          IX7    X4-X6
          PL     X7,UPDATE
          SX6    B0 
          SA6    A3 
          MX0    48 
          BX6    X0*X2
          AX6    6
          SA4    =1L                                                    0005  84
          BX6    X6+X4                                                  0005  85
          SA1    ENDSYN 
          BX1    -X0*X1 
          BX7    X6+X1
          SA7    ENDSYN 
          MESSAGE ENDSYN,,R 
          SA1    ESYN 
          SX6    X1-1 
          SA6    ESYN 
          ZR     X6,ABT 
          EQ     UPDATE            EXIT                                 S.M.KYAN
          DATA   L$SUBTRACT$
 SUBT     DATA   0                                                      S.M.KYAN
          BX2    X1                X2=SUM OF ALL SYNONIMES IN FILE      S.M.KYAN
          BX6    X3                X3=HMB 
          SA6    SAVEHM 
          IX3    X2*X1
          BX4    X3                SAVE X3
          BX1    X7                X7= SUMX*2 
          SA2    SAVEHM 
          IX3    X2*X1
          IX7    X3-X4
          PL     X7,PLUS
          BX7    -X7
PLUS      SA1    SAVEHM 
          SX2    X1-1 
          IX3    X2*X1
          BX2    X7 
          LX2    6                 *100 
          RJ     SD$DVID
          LX1    6
          PX1    B0,X1
          NX1    B0,X1
          RJ     ROOTF
          SB1    1
          UX7    B5,X6
          LX7    B5,X7
          EQ     SUBT              EXIT                                 S.M.KYAN
* 
*  THIS SUBROUTINE COMPUTES THE SQUARE ROOT OF X
*  IT IS SIMILAR TO THE FORTRAN SQUARE ROOT ROUTINE SQRT. 
* 
*  INPUT X1 VALUE OF X (FLOATING POINT NORMALIZED)
*  OUTPUT X6 - SQUARE ROOT OF X 
* 
SQRT1     LX2    48 
          RX4    X6+X7
          IX3    X4-X2             X4/X2
          FX5    X1/X3
          FX2    X3+X5
          PX6    B6,X2             SQUARE ROOT IN FL. POINT 
ROOTF 
          UX6    B1,X1             UNPACK ARGUMENT
          SB2    1
          LX0    X1,B2
          SA2    LINEAR            LINEAR 
          LX1    11 
          SA3    A2+B2
          SB4    -48
          BX0    -X0-X1 
          SB5    B4 
          PL     X0,SQRT2 
          SB4    B4-B2
          SB1    B1+B2
SQRT2     ZR     X6,ROOTF          IF ARGUMENT IS ZERO
          PX1    B4,X6
          SA4    A3+B2
          RX2    X1+X2             Y = X + LINEAR 
          NX7    X2 
          SA5    A4+B2             GAMMA
          RX6    X7*X7             Y**2 
          RX2    X7+X3             Y+BETA 
          SX0    B1+B5             ARGUMENT EXPONENT-48 
          SA3    A5+B2
          RX4    X4+X6
          NX7    X4 
          RX4    X6+X2
          AX0    1                 (ARGUMENT EXPONENT-48)/2 
          SB6    X0                RESULT EXPONENT
          RX2    X4*X7             (Y**2+ALFA)*(Y**2+Y+BETA)
          RX0    X2+X5
          NX4    X0 
          RX6    X3*X4             INITIAL APPROXIMATION
          SX2    B2 
          RX7    X1/X6
          EQ     SQRT1
* 
LINEAR    DATA   60573560267502145144B
BETA      DATA   17214445021665557370B
ALFA      DATA   60572336002142565360B
GAMMA     DATA   60671653636314430510B
CONST     DATA   60612641712452322167B
          DATA   L$ADD$ 
 ADD      DATA   0                                                      S.M.KYAN
          SA1    BUFD              GET ENTRY FOR FIRST HOME BLOCK       S.M.KYAN
          SX1    X1-1 
          SA2       X1
          SX1    B0 
          SX7    B0 
          SB6    X3 
 AD1      BSS    0                                                      S.M.KYAN
          SA2       A2+B1 
          SB6    B6-B1                                                  S.M.KYAN
          AX2    B2,X2             RIGHT  JUSTIFIED                     S.M.KYAN
          MX0    48 
          BX2    -X0*X2                                                 S.M.KYAN
          IX1    X1+X2
          BX6    X1 
          BX1    X2 
          IX3    X2*X1
          IX7    X7+X3
          BX1    X6                RESTORE X1 
          LT     B6,B0,ADD
          EQ     AD1
* 
*  THIS SUBROUTINE PERFORMS X1 = X2/X3
* 
          DATA   L$DIVID$ 
 SD$DVID  DATA   0
          PX2    B0,X2
          PX3    B0,X3
          NX2    B0,X2
          NX3    B0,X3
          FX1    X2/X3
          UX1    B5,X1
          LX1    B5,X1
          EQ     SD$DVID
* 
*  THIS SUBROUTINE ALINES THE KEY TO RKP = , CLEANS THE GARBEAGE OF 
*  THE LAST WORD CONTAINNING THE KEY AND STORES THE KEY IN THE BUFFER 
*  WOSE ADDRESS IS SPECIFIED IN B5. 
* 
*   INPUT PARAMETERS -
*         X2 = KEY POSITION 
*         X3 = KEY LENGTH IN CH.
*         X4 = ADDRESS OF FIRST WORD CONTAINNING THE KEY
*         B5 = RETURN ADDRESS.
* 
          DATA   L$ALKY$
 SD$ALKY  DATA   0                 ENTRY POINT
          SB3    10                WORD SIZE
          SB4    X4                INPUT BUFFER ADDRESS 
          SB6    X3 
          BX7    X5                SAVE NUMBER OF HOME BLOCKS 
          NZ     X2,RKPZ           CHECK IF RKP=0 
          SB2    B0 
          SX0    B0 
          EQ     SFTAG
 RKPZ     BSS    0
          LX2    1                 FORM MASCK IN X2 
          LX1    B1,X2
          IX2    X2+X1
          SB2    X2 
          MX0    1
          SB2    B2-B1
          AX0    B2,X0             SHIFT MASCK TO RIGHT POSITION
          SB2    B2+B1
 SFTAG    BSS    0
          SA4    B4                LOAD NEXT WORD 
          SB4    B4+B1
          SB6    B6-B3
          SA5    B4 
          BX5    X0*X5
          BX4    -X0*X4 
          BX4    X4+X5
          LX6    B2,X4
          SA6    B5                STORE WORD 
          SB5    B5+B1
          GE     B6,B1,SFTAG
          ZR     B6,CLEAN1
          SB6    B6+10             RESTORE B6 
          SB6    B6+B6             MUL IPLAY B6 BY 6
          SB2    B6-B1
          SB6    B6+B6
          SB6    B2+B6
          MX0    1
          AX0    B6,X0
*                                  FORM MASK TO CLEAN OF GARBEAGE 
*                                  IN LAST WORD CONTAINNING THE KEY 
          SB5    B5-B1
          SA1    B5 
          BX6    X0*X1
          SA6    B5                RESTORE LAST WORD
 CLEAN1   BSS    0
          BX5    X7                RESTORE NUMBER OF HOME BLOCS 
          SX2    B0                SET INPUT PARAMETERS FOR HASHING 
          BX6    X2                SET INPIT PARAMETERSFOR
          SA6    FORTB             FORTRAN HASHING ROUTINES 
          SX7    A6 
          SA7    ADDB 
          SA3    KEYL 
          BX6    X3 
          SA6    FORTB+1
          SX7    A6 
          SA7    ADDB+1 
          SA1    KYBUFF            ROUTINES 
          SX4    A1 
          BX6    X4 
          SA6    FORTB+2
          SA6    ADDB+2 
          BX7    X5 
          SA7    FORTB+3
          SX6    A7 
          SA6    ADDB+3 
          MX7    1
          SA7    FORTB+4
          SX6    A7 
          SA6    ADDB+4 
          SA1    ADDB+1            FWA PARAM LIST.
          EQ     SD$ALKY           PARAMETERS LIST
          DATA   L$CHFTN$ 
 CHFTN    DATA   0                 CHECKS INPUT PARAM FOR FORTRAN 
          SB1    1
          SA1    FORTB+4
          OR     X1,COMPS 
          BX6    X1 
 COMPS    BSS    0
          PL     X6,KEYP1 
          BX6    -X6
 KEYP1    BSS    0
          SA6    RNDKY
          EQ     CHFTN
* 
*  THIS SUBROUTINE IS CALLED TO CLEAN THE BUFFER AFTER THE WRITE
*  IS COMPLITED.
* 
 ZEROBF   DATA   0
          SB6    6
          SX6    B0 
          SA6    BUFFR
 CLNZ     SA6    A6+B1
          SB6    B6-B1
          NE     B6,CLNZ
          EQ     ZEROBF 
* 
*  THIS  SUBROUTINE EXTRACTS PARAMETERS FROM AN INPUT BUFFER
*  THE AND OF THE   PARAMETER IS SPECIFIED WITH A SPECIAL CHARAC. 
*  THE RESULT IS STORED EACH PARAMETER IN A SEPARATE WORD 
*  ALFA OR ALFA NUMERIC PARAMETERS ARE STORED LEFT JUSTIEFIED 
*  NUMERIC PARAMETERS ARE STORED RIGHT JUSTIEFIED.
* 
*  INPUT PARAMETERS-
*         A1 = FIRST WORD OF BUFFER CONTAINNING THE PARAMETERS
*         A7 = ADDRESS OF BUFFER WHERE THE RESULTS ARE TO BE STORED 
          DATA   L$SCAN$
 EXTRACT  DATA   0
          IX7    X7-X7      CLEAR X7
          SB3    6                      B3=6                    KONSTANT
          SB2    60                     B2=60                   KONSTANT
          MX0    54 
          SB6    B0 
          SB5    B2 
          SB4    X0 
          SB7    B2-B3    VARIES 54 _ 0 
          EQ     NEXTCHAR 
SENDOUT   BSS    0                                 START OF PRIME LOOP
          MX0    54 
          SB3    6
          SB7    B2-B3        RESET OUTPUT CHAR COUNTER 
          SB5    B2 
          IX7    X7-X7                                  CLEAR X7
NEXTCHAR  BSS    0      GET NEXT CHAR 
          LT     B7,B0,SENDOUT       IF X7 FULL STORE IT
          SB6    B6+B3
          LT     B2,B6,SENDIN 
          LX1    6                   ELSE PACK LOWER NEXT CHAR
          BX2   -X0*X1               AND ISOLATE INTO X2
          SX6    X2-1R/            END OF INPUT CARD
          ZR     X6,SEND1          CLEAN EOR
          SX6    X2-1R)            CHECK FOR RIGHT PARAN. 
          ZR     X6,NNM 
          SX6    X2-1R. 
          ZR     X6,NNM            EXIT IF END
          SX4    X2-1R+ 
          SX5    X2-1R0 
          PL     X4,SPECIAL    IS IT SPECIAL
          SB4    X0 
          PL     X5,NUMERIC    IS IT NUMERIC
          SB5    X0          SET B5 TO AN UNGODLY NUMBER
          LX2    B7,X2         ELSE SHIFT ALPHA CHAR TO OUTPUT POSITION 
PUTINUM   BSS    0
          SB7    B7-B3       -6 FM OUTPUT CHAR COUNTER
          BX7    X7+X2                  ADD IN NEW CHAR 
          EQ     NEXTCHAR 
SEND1     SA1    A1+B1
SENDIN    BSS    0
          SA1    A1+B1                  READ NEW INPUT WORD 
          SB6    B0 
          EQ     NEXTCHAR 
NUMERIC   BSS    0
          LX2    B7,X2         SHIFT NUMERIC CHAR TO OUTPUT POSITION
          SB5    B5-B3       -6 FM OUTPUT NUMERIC DIGIT COUNTER 
          EQ     PUTINUM
SPECIAL   BSS    0
          SB7    B7-B3
          EQ     B4,NEXTCHAR
          SB4    B0 
          LT     B5,B0,NNM
          AX7    B5,X7
          SB3    B5-B1
          MX0    1
          AX0    B3,X0
          BX7    -X0*X7 
          SB3    B0 
          BX5    X1                SAVE X1
          SX1    B1                INNITIARE X1 
          SX4    B0 
          MX0    54 
          SB7    6
          EQ     DCV
 DDEC     AX7    B7,X7             SHIFT NUMERIC CH 
 DCV      BX2    -X0*X7            CLEAN UNUSED PART
          ZR     X2,NN
          SX2    X2-1R0            SUBTRACT 33
          SB4    X1 
          IX3    X2*X1
          IX4    X4+X3             ADD NEW CH 
          SX2    10 
          SX1    B4 
          IX3    X2*X1
          BX1    X3 
          SB3    B3+B7             UPDATE COUNTER 
          NE     B3,B2,DDEC        EXIT IF 10 CH DONE 
 NN       BSS    0
          BX1    X5                RESTORE X1 
          BX7    X4                STORE OUTPUT 
 NNM      BSS    0
          SA7    A7+B1                  STORE PREV CHAR STRING
          ZR     X6,EXTRACT        EXIT IF END OF INPUT 
          EQ     SENDOUT
* 
*  THIS SUBROUTINE CONVERTS USERS OPTIONS TO KYAN INTERNAL VALUES 
*         INPUT PARAMETR -
*                            A1 = RETURN ADDRESS
*                            X1 = USERS OPTION
* 
 SETOP
          ZR     X1,SETOP          EXIT IF PARAMETER NOT SET
          SA2    =1LB              SYNONYM AND ST. DIV. OPTION
          IX3    X1-X2
          NZ     X3,SCHK           CHECK FOR SYNONYM ONLY 
          SX6    6
          SA6    A1                SET KYAN OPTION
          SA6    VL                SET SYNONYM OPTION 
          SA6    VS                SET ST. DIV. OPTION
          EQ     SETOP
 SCHK     SA2    =1LS              SYNONYM OPTION 
          IX3    X1-X2
          NZ     X3,DCHK           CHECK FOR ST. DIV. OPTION
          SX6    4
          SA6    A1                KYAN OPTION
          SA6    VL                SYNONYM
          EQ     SETOP
 DCHK     SA2    =1LD              ST. DIV. 
          IX3 X1-X2 
          NZ     X3,ABT            OPTION FIELD INCORRECT ABORT RUN 
          SX6    2
          SA6    A1                KYAN 
          SA6    VS                ST. DIV. 
          EQ     SETOP
* 
*  THIS SUBTOUTINE TRANSFERES THE ENTRY POINTS NAME 
* 
 TRANSE 
          SB2    B0 
          TRANS  E1                START ENTRY NAME TRANSFERE 
          TRANS  E2 
          TRANS  E3 
          TRANS  E4 
          TRANS  E5 
          EQ     TRANSE 
* 
*  THIS SUBROUTINE PERFORMS THE SAME HASHING AS THE SDA HASHING 
*  ROUTINE
 MODULO 
          PX5    X5 
          NX7    X5 
          PX6    X6 
          FX7    X6/X7
          UX7    B6,X7
          LX7    B6,X7
          PX7    X7 
          DX7    X5*X7
          IX6    X6-X7
          EQ     MODULO 
*CALL SDAHASH 
* 
*   INPUT PARAMETERS- 
*         X1 = WORD TO BE CONVERTED 
*         B2 = RETURN ADDRESS 
* 
*                            THIS ROUTINE CONVERTS OCTAL VALUES TO
*                            DECIMAL. 
* 
 SVB6     DATA   0
 OCT0     SA1    BLNK9             SET EOR                              0005  29
          SA2    LCNT              CHECK IF ALL HOME BLOCKS PROCESSED 
          IX3    X3-X2
          PL     X3,BLK            IF YES PRINT BLANKS
          SA1    =10L              STORE BLANK LINE                     0005  31
 BLK      BSS    0
          BX6    X1 
          SA6    B2 
 SD$BIND  DATA   0
          SX6    B6 
          SA6    SVB6 
          ZR     X1,OCT0
          EQ     B3,NBLK
          SA4    =10L                                                   0005  50
          BX6    X4 
          SA6    B2 
          IX3    X6-X1
          ZR     X3,SD$BIND 
NBLK      BSS    0
          SA2    =D10.0 
          SX6    33B
          LX6    54 
 OCTB1    SB4    10 
          SX7    B0 
 OCTB2    PX3    X1,B0
          LX7    54 
          NX0    X3,B0
          SB4    B4-B1
          FX0    X0/X2
          UX0    X0,B6
          LX0    X0,B6
          LX3    X0,B1
          LX0    3
          IX3    X3+X0
          IX4    X1-X3
          NZ     X4,OCTB3 
          NZ     X1,OCTB3 
          SX4    22B
 OCTB3    LX4    54 
          IX7    X7+X4
          AX0    3
          BX1    X0 
          IX7    X7+X6
          NZ     B4,OCTB2 
          BX6    X7 
          SA6    B2 
          SA3    SVB6 
          SB6    X3 
          EQ     SD$BIND
* 
*  THIS SUBROUTINE SETS THE BUFFER READY FOR OUTPUT 
* 
 MCTM 
          SA4    =10L                                                   0005   5
          BX6    X4                STORE BLANKS IF NO ENTRY             0005   6
          ZR     X1,ENTZ                                                0005   7
          SA3    =2R                                                    0005   8
          BX6    X0*X1
          IX6    X6+X3                                                  0005  11
          LX6    48                ALINE ENTRY                          0005  12
          RJ     TBLNK             CONVERT BINARY ZEROES TO BLANKS      0005  13
 ENTZ     BSS    0                                                      0005  14
          SA6    BUFFR+B3          RESTORE ENTRY
          SB3    B3+B1
          EQ     MCTM 
*                                                                       0005  57
*  THIS SUBROUTINE REPLACES TRAILING BINARY ZEROES BY BLANKS            0005  58
*                                                                       0005  59
*  INPUT  X6  CONTAINS WORD WHERE BINARY ZEROES NEED TO BE REPLACED     0005  60
*                                                                       0005  61
*  OUTPUT  X6  (CONVERTED INPUT)                                        0005  62
*                                                                       0005  63
 TBLNK                                                                  0005  64
          MX4    54                                                     0005  65
          SB4    B0                                                     0005  66
          SA2    =1R               INSERT BLANKS IN PLACE OF BINARY     0005  67
          SB5    6                 ZEROES                               0005  68
 BLKA     BSS    0                                                      0005  69
          AX5    X6,B4             CHECK IF BINARY ZERO                 0005  70
          BX5   -X4*X5             ISOLATE CH                           0005  71
          NZ     X5,TBLNK          EXIT IF NOT BINARY ZERO              0005  72
          LX3    B4,X2                                                  0005  73
          BX6    X6+X3             INSERT BLANK                         0005  74
          SB4    B4+B5                                                  0005  75
          EQ     BLKA                                                   0005  76
* 
*  THIS ROUTINE IS CALLED TO OUTPUT A LINE OF TEXT TO THE OUTPUT FILE.
*     THE CALLING SEQUENCE IS  SA1 MSG, RJ MSGLINE. END OF MESSAGE IS    MSGLINE
*     SIGNALED WITH A TRAILING BYTE OF ZERO.                             MSGLINE
*     WAIT FOR RA+1 TO BECOME ZERO.                                      MSGLINE
WAIT      MACRO  RN                                                      MSGLINE
          LOCAL     LPA,LPB,LPEND 
*                  WAIT MACRO USES XJ IF POSSIBLE 
*                  OTHERWISE, EXECUTES A SHIFTING DELAY LOOP
 LPA      BSS       0 
          SA.RN  1
          ZR     X.RN,LPEND  EXIT IF RA+1 CLEARED 
          SA.RN  66B               USE XJ IF AVAILABLE
          PL     X.RN,LPB 
          XJ     0
          EQ        LPA 
 LPB      BSS       0 
+         AX.RN  2                 WAIT 15 SHIFTS BEFORE TESTING RA+1 AG
          AX.RN  2
          NZ     X.RN,LPB 
          EQ        LPA 
 LPEND    BSS    0
          ENDM                                                           MSGLINE
                                                                         MSGLINE
WRITER    EQU    024B                                                    MSGLINE
WRITE     EQU    014B                                                    MSGLINE
OWRITENR  EQU    104B                                                    MSGLINE
CLOSENR   EQU    130B                                                    MSGLINE
MSGBUFL   EQU    65                                                      MSGLINE
MSGFET    VFD    42/7LKEYLIST,18/OWRITENR 
FIRST     VFD    42/0,18/MSGBUF                                          MSGLINE
IN        VFD    42/0,18/MSGBUF                                          MSGLINE
OUT       VFD    42/0,18/MSGBUF                                          MSGLINE
LIMIT     VFD    42/0,18/MSGBUF+MSGBUFL                                  MSGLINE
MSGBUF    BSS    MSGBUFL                                                 MSGLINE
MSGOPE    VFD    18/3ROPE,2/1,22/0,18/MSGFET                             MSGLINE
MSGCLO    VFD    18/3RCLO,2/1,22/0,18/MSGFET                             MSGLINE
                                                                         MSGLINE
*     CHECK FOR SPACE IN BUFFER                                          MSGLINE
                                                                         MSGLINE
 SD$MSGL  DATA   0
          SA5    MSGFET                                                  MSGLINE
          SX5    X5-OWRITENR                                             MSGLINE
          NZ   X5,MSGLINEX                                               MSGLINE
                                                                         MSGLINE
*     GO OPEN THE FILE                                                   MSGLINE
                                                                         MSGLINE
          WAIT   5                                                       MSGLINE
          SA4    MSGOPE                                                  MSGLINE
          BX6    X4                                                      MSGLINE
          SA6    A5                RA+1                                  MSGLINE
          WAIT   5                                                       MSGLINE
MSGLINEX  SA5    IN                                                      MSGLINE
          SB1    1                                                       MSGLINE
          SB5    X5+B1             IN+1                                  MSGLINE
          SA5    OUT                                                     MSGLINE
          SB4    X5                OUT                                   MSGLINE
          EQ   B5,B4,FULL                                                MSGLINE
          SA5    LIMIT                                                   MSGLINE
          SB3    X5                                                      MSGLINE
          NE   B5,B3,SPACE                                               MSGLINE
          SA5    FIRST                                                   MSGLINE
          SB5    X5                                                      MSGLINE
          EQ   B4,B5,FULL                                                MSGLINE
                                                                         MSGLINE
*     THERE IS SPACE IN THE BUFFER SO THE WORD GETS INSERTED. THE IN-    MSGLINE
*     POINTER GETS BUMPED.                                               MSGLINE
                                                                         MSGLINE
          BX6    X1                                                      MSGLINE
          SA5    IN                                                      MSGLINE
          SA6    X5                                                      MSGLINE
          SX6    B5                FIRST                                 MSGLINE
          SA6    IN                IN-POINTER WRAP AROUND.               MSGLINE
          EQ   CHEOM                                                     MSGLINE
SPACE     BX6    X1                                                      MSGLINE
          SA5    IN                                                      MSGLINE
          SA6    X5                                                      MSGLINE
          SX6    X5+B1                                                   MSGLINE
          SA6    IN                NO WRAP AROUND.                       MSGLINE
                                                                         MSGLINE
*     CHECK FOR END OF INPUT LINE. IF THE LAST BYTE OF X1 IS ZERO        MSGLINE
*     WE RETURN ELSE WE WRITE THE NEXT WORD OF THE LINE TO THE BUFFER.   MSGLINE
                                                                         MSGLINE
CHEOM     MX0    48                                                      MSGLINE
          BX0    -X0*X1                                                  MSGLINE
          ZR     X0,SD$MSGL 
          SA1    A1+B1             READ NEXT WORD OF MESSAGE.            MSGLINE
          EQ   MSGLINEX                                                  MSGLINE
                                                                         MSGLINE
*     WHEN THE BUFFER IS FULL WE REACH THIS POINT. A RECALL OR A         MSGLINE
*     WRITE IS ISSUED DEPENDING ON WHETHER THE FET IS BUSY OR NOT.       MSGLINE
*     WE THEN RETURN TO CHECK THE BUFFER SPACE AGAIN.                    MSGLINE
                                                                         MSGLINE
FULL      WAIT   5                                                       MSGLINE
          SA5    MSGFET                                                  MSGLINE
          LX5    59                                                      MSGLINE
          NG   X5,ISWRIT                                                 MSGLINE
          SX6    3LRCL                                                   MSGLINE
          LX6    42                                                      MSGLINE
          SA6    B1                ISSUE RECALL                          MSGLINE
          WAIT   5
          EQ   MSGLINEX                                                  MSGLINE
ISWRIT    SA5    MSGFET                                                  MSGLINE
          MX0    42                                                      MSGLINE
          BX6    X0*X5                                                   MSGLINE
          SX0    WRITE                                                   MSGLINE
          BX6    X6+X0                                                   MSGLINE
          SA6    MSGFET                                                  MSGLINE
          SX6    3LCIO                                                   MSGLINE
          LX6    42                                                      MSGLINE
          SX0    MSGFET                                                  MSGLINE
          BX6    X6+X0                                                   MSGLINE
          SA6    B1                                                      MSGLINE
          EQ     MSGLINEX                                                MSGLINE
                                                                         MSGLINE
*     WE ENTER HERE WHEN WE WANT TO CLEAR THE BUFFER. FIRST WE CHECK     MSGLINE
*     IF THE BUFFER IS VIRGIN. IF IT IS WE RETURN. ELSE WE ISSUE A       MSGLINE
*     WRITER REQUEST NO MATTER WHETHER THE FET IS BUSY OR NOT.           MSGLINE
                                                                         MSGLINE
 SD$MSGC  DATA   0
          SA4    IN                                                      MSGLINE
          SA5    OUT                                                     MSGLINE
          SB1    1                                                       MSGLINE
          IX5    X4-X5                                                   MSGLINE
          ZR     X5,SD$MSGC 
 CKCOMP   SA4    MSGFET 
          LX4    59 
          SA5    A4 
          NG     X4,ISSUE 
          WAIT   4
          SX6    3RRCL
          PX6    X6 
          LX6    42 
          SX4    A5 
          BX6    X4+X6
          SA6    B1 
          WAIT   4
          EQ     CKCOMP 
 ISSUE    BSS    0
          MX0    42                                                      MSGLINE
          BX6    X0*X5                                                   MSGLINE
          SX5    WRITER                                                  MSGLINE
          BX6    X6+X5                                                   MSGLINE
          SA6    A5                INSERT WRITEF CODE                    MSGLINE
          SX6    3LCIO             PREPARE CIO REQUEST                   MSGLINE
          LX6    42                                                      MSGLINE
          SX0    A6                FET                                   MSGLINE
          BX6    X6+X0                                                   MSGLINE
          SX0    B1                                                      MSGLINE
          LX0    40                AUTO-RECALL BIT                       MSGLINE
          BX6    X6+X0                                                   MSGLINE
          WAIT   5                                                       MSGLINE
          SA6    B1                                                      MSGLINE
          WAIT   5                                                       MSGLINE
          EQ     SD$MSGC
* 
*  HERE THE RUN IS ABORTED WHEN A FATAL ERROR CONDITION IS ENCOUNTERED. 
* 
 ABT      BSS    0
          MESSAGE  BPARM,,R 
          MESSAGE KYANM,,R
          ABORT 
          END 
