******************************************************************
*                                                                *
*                                                                *
*       S Y S G E N  L O A D  M O D U L E  T E S T E R           *
*                                                                *
*              WRITTEN - S KEYS  DOCUMENTED,UPDATED -A REITH     *
*                                                                *
*                 IMPROVED BY L. AMBROGIO
*
*     THIS PROGRAM ANALYZES LOAD MODULES CREATED BY PASS2        *
*        AND RUNS UNDER BPM/BTM/UTS IN THE BATCH/ON-LINE MODE    *
*     THE PROGRAM OBTAINS THE NAME OF THE LM THROUGH M:SI AND    *
*        READS THE LOAD MODULE INTO CORE THROUGH M:BI            *
*     OUTPUT OF THE ANALYSIS IS THROUGH M:LL                     *
*     END TERMINATES THE EXECUTION OF THIS PROCESSOR             *
*                                                                *
*     OUTPUT CONSISTS OF:                                        *
*         1. A LIST OF VALUE DEFS WITH THEIR VALUES EXPRESSED    *
*              IN DECIMAL                                        *
*         2. A LIST OF LOCATION DEFS WITH THEIR ADDRESSES        *
*              EXPRESSED IN RELATIVE HEX                         *
*         3. A LIST OF REFS WITH THEIR DESTINATIONS EXPRESSED    *
*              IN RELATIVE HEX                                   *
*         4. A LIST OF SREFS WITH THEIR DESTINATIONS EXPRESSED
*              IN RELATIVE HEX
*         5. THE DATA FROM SECT0.. UNDER EACH ITEM IN
*                THE DATA RECORD IS PRINTED THE RELOCATION TYPE  *
*                OF THE ITEM (I.E.ABS,RELOC,HW,DW,WORD,BYTE)     *
*         6. FOR AN ALL-PROTECTION TYPE 01 LMN, SGT WILL
*                 PRINT THE DATA FROM SECT01 AND PROCEED AS IN   *
*                 (4) ABOVE                                      *
*                 (5) ABOVE
*         TO THE TELETYPE - 4 ITEMS & REL.ADDR OF 1ST WORD       *
*         ELSE (EG LINEPRINTER) - 8 ITEMS & REL.ADDR OF 1ST WORD *
*                                                                *
********************************************************************
         PAGE
************************************************************
*                                                          *
*          DATA VALUES                                     *
*                                                          *
************************************************************
         SYSTEM   SIG7
         SYSTEM   BPM
         REF      M:SI,M:BI
R1       EQU      1
R0       EQU      0
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
SR1      EQU      8
SR2      EQU      9
SR3      EQU      10
SR4      EQU      11
D1       EQU      12
D2       EQU      13
D3       EQU      14
D4       EQU      15
*
*
OPEN     EQU      %
         GEN,8,24 X'14',M:BI
         DATA     X'C7600001'
         DATA     READABN
         DATA     ERRPRNT+1
         DATA     2
         DATA     2,1,2
         DATA     FPARAM
         DATA     X'01010004'
NAME     RES      4
*
*
READ     EQU      %
         GEN,8,24 X'10',M:BI
         DATA     X'78000010'
         DATA     ERRPRNT
         PZE      *SR2
         PZE      *R5
KEY      DATA     HEADKEY
*
*
PROMPT   GEN,8,24 X'2C','%'
HEADKEY  TEXTC    'HEAD'
ARS      EQU      4
GETPG    DATA     X'08000000'
*
*       LOCATIONS TO STORE ADDRESSES OF EACH
*         RECORD OF THE LOAD MODULE
*
HEADLOC  DATA     0
RDEFLOC  DATA     0
EXPRLOC  DATA     0
RELDLOC  DATA     0
SECT0LOC DATA     0
TOPLOC   DATA     0
*
*
FPARAM   RES      90
FILE     EQU      FPARAM
X1F00    DATA     X'1F00'
MF000F0  DATA     X'F000F0'
ADVDCLCD DATA     X'20'
M8       DATA     X'FF'
RDFSZ    DATA     0,0,0,0
BIAS     DATA     0
FLAG     DATA     0                 THIS LOCATION KEEPS TRACK OF THE
*                                   NUMBER OF REFS, DEFS, VALUE DEFS
*                                   AND SREFS
SREFFLG  DATA     0                 SPECIAL FLAG INDICATING THAT
*                                   THE REF/DEF STACK IS BEING SEARCHED
*                                   FOR SREF'S NOT REF'S
*
ADEFREF  DATA     0                 FLG INDICATING AN ABS DEF.
*                                   ASSOCIATED WITH A REF
*
         BOUND    8
SAVSTRNG DATA     0,0
NL       DATA     X'01154040'
COUNT8   DATA     X'8000000'
VDFLN    RES      8
NBR      DATA     10
EQUL     TEXT     '  = '
XEND     TEXT     'END '
TYPERR   DATA     0
M17      DATA     X'0001FFFF'
*
*
LNSIZ    DATA,1   56                TTY LINE LNGTH
         DATA,1   132               LP LENGTH
         DATA,1   20                1 WORD OF DATA IN LAST LINE
         DATA,1   32                2 WORDS OF DATA "   "    "
         DATA,1   44                3 WORDS
         DATA,1   56                4 WORDS
         DATA,1   68                5 WORDS
         DATA,1   80                6 WORDS
         DATA,1   92                7 WORDS
         DATA,1   104               8 WORDS OF DATA IN LAST LINE
         BOUND    4
LNLNG    DATA     4
         PAGE
************************************************************
*                                                          *
*        HEADINGS AND MESSAGES                             *
*                                                          *
************************************************************
HI       TEXTC    '+++ SYSGEN LOAD MODULE TESTER +++'
PROT01   TEXTC    '---THIS IS AN ALL PROTECTION TYPE 01 LOAD MODULE---'
FILNM    TEXTC    'FILE NAME IS:'
NROM     TEXTC    '%%%NOROOM%%%'
WRKS     TEXTC    '+++ TEST COMPLETED +++'
LMRS     TEXTC    '*** LOAD MODULE READ SUCCESSFULLY'
NTSYSGN  TEXTC    '*** NOT SYSGEN LOAD MODULE'
BLNKS    TEXTC    '   '
VALDF    TEXTC    '--- VALUE DEFS (DECIMAL) ---'
NUN      TEXTC    '** NONE **'
DFS      TEXTC    '--- DEFS (LOCATION IN RELATIVE HEX) ---'
ERR      TEXTC    '*** I/O ERR/ABN -- CODE = '
RFS      TEXTC    '--- REFS (DESTINATION IN RELATIVE HEX) ---'
SRFS     TEXTC    '--- SREFS (DESTINATION IN RELATIVE HEX) ---'
         BOUND    8
RELTBL   EQU      %
         TEXT     '*-BYTE-*'
         TEXT     '*--HW--*'
         TEXT     '*-WORD-*'
         TEXT     '*--DW--*'
         TEXT     '***BAD**'
         TEXT     '***BAD**'
         TEXT     '***BAD**'
         TEXT     '***BAD**'
         TEXT     '*DW**--*'
         TEXT     '*--**DW*'
         TEXT     '*DW**DW*'
         TEXT     '***BAD**'
         TEXT     '***BAD**'
         TEXT     '***BAD**'
         TEXT     '*--ABS-*'
         TEXT     '***BAD**'
RELOCX   TEXTC    'RELOC->'
BDRLD    TEXTC    '*** REL-DICT IS OF IMPROPER SIZE'
DATM     TEXTC    '--- DATA (RELATIVE ADDRESSES) ---'
SAVTMP   DATA     0
ALLBLNKS TEXT     '    '
         BOUND    8
LINEX    EQU      %
         DO1      34
         TEXT     '    '
EBCDICPT EQU      %-9
TRANSTB  EQU      %
         DO1      16
         TEXT     '....'
         TEXT     ' ...'
         TEXT     '....'
         DATA     X'4B4B4B4B'
         DATA     X'4C4D4E4F'
         DATA     X'504B4B4B'
         TEXT     '....'
         DATA     X'4B4B4B5B'
         DATA     X'5C5D5E4B'
         TEXT     '-/..'
         TEXT     '....'
         TEXT     '....'
         DATA     X'6C4B6E4B'
         TEXT     '....'
         TEXT     '....'
         TEXT     '..:#'
         DATA     X'7C7D7E4B'
         DO1      16
         TEXT     '....'
         TEXT     '.ABC'
         TEXT     'DEFG'
         TEXT     'HI..'
         TEXT     '....'
         TEXT     '.JKL'
         TEXT     'MNOP'
         TEXT     'QR..'
         TEXT     '....'
         TEXT     '..ST'
         TEXT     'UVWX'
         TEXT     'YZ..'
         TEXT     '....'
         TEXT     '0123'
         TEXT     '4567'
         TEXT     '89..'
         TEXT     '....'
         PAGE
************************************************************
*                                                          *
*          ERROR,ABNORMAL AND TERMINATION ROUTINES         *
*                                                          *
************************************************************
NOROOM   LI,14    NROM
         EXU      PRINT
         M:EXIT
*
*          NORMAL TERMINATION OF PROCESSOR
*
GETOUT   EQU      %
         M:PRINT  (MESS,WRKS)
         M:EXIT
************************************************************
*          END ON READING LOAD MODULE                      *
*                                                          *
*     IF CODE NOT X'43' (NO RECORD FOUND FOR KEY)          *
*       OR NOT 4 RECORDS IN LM,                            *
*    THEN PROCESSING OF THIS LM TERMINATED                 *
*       WITH APPROPRIATE ERROR MESSAGE                     *
************************************************************
READABN  EQU      %
         LB,R4    SR3
         CI,R4    X'43'
         BNE      CLOSEBI
         LB,R4    *KEY
         LB,R2    *KEY,R4
         CI,R2    2                 IF THE KEY IS FOR PROTECTION TYPE 0
         BNE      CLOSEBI           RELOCATION DICTIONARY, THIS IS
         MTB,2    *KEY,R4           PROBABLY A PROTECTION TYPE 1 LMN
         B        READ1             LETS GIVE IT A TRY
CLOSEBI  M:CLOSE  M:BI,(SAVE)
         LB,R1    10
         CI,R1    X'43'
         BNE      ERRPRNT+1
         LB,R1    NAME
         LB,R1    NAME,R1
         CI,R1    4
         BL       ERRPRNT+1
         BE       GOTITGO
         CI,R1    6                 COULD BE A PROTECTION TYPE 1 MODULE
         BNE      NOTSGEN
         B        GOTITGO
************************************************************
*          PRINTING OF I/O ERR/ABN CODE                    *
************************************************************
ERRPRNT  EQU      %
         M:CLOSE  M:BI,(SAVE)
         EXU      SPACE
         LB,R4    ERR
         AI,R4    BA(ERR)
         LB,R3    SR3
         LI,R2    16
         STW,R2   NBR
         BAL,SR2  DECSTOR
         LB,R4    ERR
         LB,R3    ERR
         AW,R3    R6
         STB,R3   ERR
         LI,14    ERR
         EXU      PRINT
         MTW,0    TYPERR
         BE       %+3
         M:TYPE   (MESS,*14)
         M:TYPE   (MESS,NL)
         STB,R4   ERR
         B        DONE
************************************************************
*          PRINTING OF NOT SYSGEN LOAD MODULE              *
************************************************************
NOTSGEN  LI,14    NTSYSGN
         EXU      PRINT
         B        DONE
         PAGE
************************************************************
*                                                          *
*                                                          *
*          ENTRY POINT OF PROCESSOR                        *
*                                                          *
*                                                          *
************************************************************
SYSGTST  EQU      %
         LI,14    HI
PRINT    M:PRINT  (MESS,*14)        ** SYSGEN LOAD MODULE TESTER**
RESTRT   EXU      SPACE
         LC       *X'4F'            BIT 0 OF JIT = 1 IF ONLINE (UTS,BTM)
         BCR,8    RD                BIT 0 = 0 IF BATCH
         LC       X'2B'             ON LINE- MON CODE = 6 IF UTS
         BCR,2    %+2               MON CODE = 5 BTM
         CAL1,1   PROMPT            UTS ISSUE PROMPT
         LW,D3    M:LL+1
         AND,D3   X1F00
         CI,D3    X'1000'           IS M:LL ASSIGNED TO A TERMINAL
         BE       %+2
         MTW,1    TYPERR            SET FLAG SO THAT ANY ERR WILL BE
*                                   TYPED
         LI,14    FILNM             PRINT FILE NAME IS
RDMN1    EXU      PRINT
*                                   READ M:SI FOR FILE NAME
RD       M:READ   M:SI,(BUF,FILE),(SIZE,80),(ABN,GETOUT),(WAIT)
         EXU      SPACE
         LH,R2    XEND
         CH,R2    FILE              IS IT END?
         BE       GETOUT            YES GO TO TERMINATION
         EXU      SPACE             UPSPACE
         LW,R2    M:SI+ARS          GET ACTUAL RECORD SIZE
         SLS,R2   -17
         CI,R2    1                 IF 1 CHARACTER OR LESS
         BLE      RD                GO READ AGAIN
         LI,R1    0
         LB,R3    FILE
         CI,R3    '*'                IS IT A COMMENT
         BNE      RDARN
         AI,R2    -1
         STB,R2   FILE              PUT BYTE COUNT IN FIRST BYTE OF MESSS.
         LI,D3    FILE
         B        RDMN1
RDARN    EQU      %
         LB,R3    FILE,R1           SEARCH FOR END OF FILE NAME
         AI,R1    1
         CI,R3    X'40'
         BE       NDRD
         CI,R3    X'D'              NL
         BE       NDRD
         CI,R3    X'15'             CR
         BE       NDRD
         CW,R1    R2
         BG       NDRD
         STB,R3   NAME,R1           STORE NAME IN FIELD OF OPEN FPT M:BI
         B        RDARN
NDRD     EQU      %                 FOUND END OF FILE NAME
         AI,R1    -1                STORE LENGTH OF NAME IN 1ST BYTE
         STB,R1   NAME
         LI,14    NAME
         EXU      PRINT             PRINT NAME
         EXU      SPACE
         LI,R2    0
         AI,R1    1                 CONCATENATE FILE NAME AND 0 AS
         STB,R2   NAME,R1           1ST KEY FOR DIFF.RECORDS OF LM
         AI,R1    3                 TO BE READ
         SLS,R1   -2                CONVERT #BYTES TO # WORDS
         SLS,R1   8                 STORE IN VARIABLE PARAMETER FIELD
         STS,R1   NAME-1
         CAL1,1   OPEN              OPN FILE (ERR-READABN,ABN-ERRPRNT+1)
         LI,R1    FPARAM            GET START OF FPARAM
FNDPGS   EQU      %                 SEARCH FOR FILE SIZE PARAMETER
         LB,R2    *R1
         CI,R2    13
         BE       FOUNDPG           FOUND
         LW,R2    *R1               NOT YET, GET LENGTH OF PARAMETER
         AND,R2   M8                ADJUST POINTER
         AW,R1    R2
         AI,R1    1
         B        FNDPGS            GO LOOK AGAIN
         PAGE
************************************************************
*                                                          *
*     ENOUGH CORE IS OBTAINED TO CONTAIN THE LM            *
*                                                          *
*     RECORDS ARE READ INTO CORE WITH STARTING ADDRESSES   *
*        STORED IN DATA LOCATIONS STARTING WITH HEADLOC    *
*                                                          *
*     EXIT OF THIS ROUTINE IS THROUGH READABN WHERE        *
*        RETURN IS MADE WHEN RECORD FOR KEY NOT FOUND      *
*     ALL OTHER RETURNS ARE CONSIDERED ERRORS              *
*                                                          *
************************************************************
FOUNDPG  EQU      %
         AI,R1    1                 R1 - FILE SIZE PARAMETER ADDRESS
         LW,R1    *R1               GET VALUE
         STS,R1   GETPG             STORE IN GET PAGES FPT
         CAL1,8   GETPG             GET PAGES
         BCS,8    NOROOM            NO ROOM
         STW,SR2  HEADLOC           1ST PG ADDR START OF HEADRECORD
         LI,R7    1                 R7 = INDEX FOR STORING ADDRESSES
         SLS,SR1  11                CONVERT #PAGES TO # WORDS
         XW,SR1   R5
         CAL1,1   READ              READ RECORD (*SR1=SIZE,*SR2=BUFFER)
         LI,11    1:CONT            SET UP RETURN FOR RESET RTN
*
*                                   STORE ADDR.OF RECORDS READ
RESET    EQU      %
         LW,R1    M:BI+ARS          GET ACTUAL RECORD SIZE
         AI,R1    X'60000'
         SLS,R1   -19               CONVERT TO # WORDS
         AW,SR2   R1                ADJUST BUFFER POINTER
         STW,SR2  HEADLOC,7         STORE AS START OF NEXT RECORD
         SLS,R1   2                 AJUST SIZE OF BUFFER AVAILABLE
         SW,R5    R1
         AI,R7    1                 BUMP PTR FOR INDEX STORING
         B        *11               RETURN
1:CONT   EQU      %                 FIRST RECORD READ
         LI,R1    NAME              STORE NAME AS KEY OF RECORD
         STW,R1   KEY
         MTB,1    NAME              ADD 1 TO KEY NAME
         B        READ1             READ NEXT RECORD
READX    EQU      %                 ADJUST KEY OF RECORD
         LB,R1    NAME
         MTB,1    NAME,R1
READ1    CAL1,1   READ              READ NEXT RECORD
         BAL,11   RESET             ADJUST ADDRESSES FOR NEXT RECORD
         B        READX             GO ADJUST KEY OF RECORD
*                                   LOOP HERE TIL EXIT AT READABN
         PAGE
************************************************************
*                                                          *
*     START PROCESSING OF THE LOAD MODULE NOW IN CORE      *
*                                                          *
************************************************************
GOTITGO  EQU      %
         LI,14    LMRS              * LOAD MODULE READ SUCCESSFULLY*
         EXU      PRINT
         LI,R3    0
         STW,R3   ADEFREF
         LB,R1    *HEADLOC          GET 1ST BYTE OF HEAD RECORD
         CI,R1    X'81'             IS IT SYSGEN CREATED LM
         BNE      NOTSGEN           NO
         MTW,2    HEADLOC           YES
         LW,R1    *HEADLOC          GET 3RD WORD OF HEAD RECORD
         SLS,R1   1                 CONVERT TO WORD ADDRESS
         STW,R1   BIAS              STORE AS BIAS OF LM
         LW,R1    EXPRLOC
         STW,R1   RDFSZ
         STW,R1   RDFSZ+2
         STW,R1   RDFSZ+3           SIZE OF REF/DEF STACK FOR CURRENT
*                                   LOAD MODULE
         LW,R1    RELDLOC
         STW,R1   RDFSZ+1
         LW,R1    RDEFLOC           GET START OF REFDEF RECORD
         LW,R2    *R1               GET 1ST ENTRY
         CW,R2    L(X'03060000')    IF NOT THIS VALUE
         BE       CONTINUE
         CW,R2    L(X'03460000')     CHK IF PROTECTION TYPE 2 CSECT
         BNE      NOTSGEN            IF NEITHER OF THESE, THEN NOT
*                                    A SYSGEN LOAD MODULE
         LI,D3    PROT01
         EXU      PRINT             * PROT TYPE 01 LOAD MODULE
CONTINUE AI,R1    3
         LW,R2    *R1
         CW,R2    L(X'01050000')
         BE       %+2
         MTW,1    RDEFLOC
         MTW,4    RDEFLOC
SPACE    M:PRINT  (MESS,BLNKS)
         EXU      SPACE
         LI,14    VALDF             **VALUE DEFS (IN DECIMAL)**
         EXU      PRINT
         EXU      SPACE
         LI,R7    0                 R7 USED AS FLAG IN GETNTRE RTN
         LI,SR3   0                 SR3 USED AS FLAG IN GETNTRE RTN
         STW,SR3  SREFFLG           INITIALIZE SREF FLAG
         PAGE
************************************************************
*                                                          *
*                         GETNTRE                          *
*                                                          *
*     THIS ROUTINE CREATES LISTS -VALUE DEFS,LOC DEFS      *
*          & REFS & IS USED IN PROCESSING RFDFSTK & EXPRSTK*
*          R7 = 0 FOR VALUE AND LOC DEFS                   *
*          R7 = 1 FOR REFS WHEN PROCESSING EXPRSTK         *
*          R7 = 2 FOR REFS WHEN PROCESSING RFDFSTK         *
*          R7 = 3 FOR SREFS WHEN PROCESSING RFDFSTK
*          SR3 = 0 FOR VALUE DEFS AND REFS                 *
*          SR3 = X'100' FOR LOC DEFS                       *
*          SR3 = ABSOL DISPLACEMENT IN RFDFSTK             *
*               WHILE PROCESSING EXPRSTK                   *
*          R1 = ADDR IN RFDFSTK FOR DEFS,REFS AND SREFS WHEN
*               R7 = 2,3
*          R1= ADDR IN EXPRSTK FOR REFS WHEN R7 = 1        *
*                                                          *
************************************************************
GETNTRE  LB,SR1   *R1               GET # WRDS OF ENTRY
         AW,SR1   R1                SR1 POINTS TO NXT ENTRY
         LI,R2    1                 DISPL.TO 2ND BYTE OF 1ST WORD
         CI,R7    1                 IS IT REF (EXPRSTK PASS)
         BNE      NXTT              NO
         LI,SR4   0                 INITIALIZE FLAG
         STW,SR4  ADEFREF
         AI,R1    5                 YES,BUMP PTR IN EXPRSTK
         CW,SR3   *R1               ABS DISPL. SAME AS ENTRY IN EXPRSTK
         BNE      NXT               NO NEED TO CHK FURTHER
         B        TST4ADEF          GO SEE IF AN ADEF EQU REF
*
*                                   ENTRY TYPE RFDFSTK,0=DEF,2=PREF
NXTT     CI,R7    3                 IS THIS AN SREF SEARCH
         BNE      NXTT1             BRANCH IF NOT
         CB,R2    *R1,R2            CHECK FOR AN SREF ENTRY IN REF/DEF
         BNE      NXT               STACK.  BRANCH IF NOT SREF
         B        GOTONE            FOUND AN SREF
NXTT1    CB,R7    *R1,R2            CHK FOR DEF (0) OR PREF (2) TYPE
         BNE      NXT               NO
GOTONE   AI,R1    2                 FOUND TYPE OF ENTRY WE'RE LOOKING
*                                   FOR.
         CW,SR3   *R1               IS IT CORRECT RESOL FOR TYPE
         BNE      NXT               NO
THSON    BAL,SR4  DMPIT,R7          GO PROCESS APPROPRIATE TYPE
NXT      LW,R1    SR1
         CW,R1    RDFSZ,R7          ALL THROUGH WITH THIS TYPE
         BGE      NXTTPE            YES
         B        GETNTRE           NO,GET NEXT ENTRY
*************************************************************
*  FOLLOWING CODE CHECKS FOR SPECIAL EXP. STACK ENTRY WHICH
*  ASSOCIATES AN ABS DEF WITH A PRIMARY REF INSTEAD OF WITH
*  A VALUE.
*************************************************************
TST4ADEF LI,SR4   -1
         LW,R2    -5,R1             1ST WORD SHOULD HAVE 0XXX2X
         LW,R3    MF000F0           IF THIS REF IS ASSOCIATED WITH
*                                   WITH PREVIOUS DEF IN RFDEF STACK
         CS,R2    ADVDCLCD
         BNE      THSON             BRANCH IF NOT AN ADEF EQUED TO REF
         STW,SR4  ADEFREF           SET SPEC ADEF-PREF FLAG
         B        THSON
         PAGE
************************************************************
*                                                          *
*                         DMPIT                            *
*                                                          *
*     ROUTINES TO PROCESS VALUE DEFS,LOC DEFS,& REFS       *
*            ENTERED VIA BAL,SR4 DMPIT,R7                  *
*                                                          *
************************************************************
DMPIT    EQU      %
         B        DMPDF             VALUE & LOC DEFS
         B        DMPRF1            REFS (EXPRSTK PASS)
         B        DMPRF             REFS (RFDFSTK PASS)
         B        DMPRF             SREFS (RFDFSTK PASS)
         PAGE
************************************************************
*                                                          *
*                         DMPDF                            *
*                                                          *
*     PROCESSES VALUE DEFS,LOC DEFS, AND REFS              *
*                                                          *
*      FOR REFS ENTRY IS FROM DMPRF1 DEST.ADDR IN EXPRSTK  *
*         HAS BEEN STORED IN RFDFSTK                       *
*      UPON ENTRY                                          *
*        R1 = WORD 3 OF ENTRY  (RESOL WORD OF ENTRY)       *
*                                                          *
*        GETS & PRINTS NAME FOR RFDFSTK                    *
*        GETS VALUE ASSIGNED TO NAME                       *
*        BALS TO DECSTOR TO CONVERT VALUE TO DEC/HEX &     *
*            STORE IN LINE TO BE PRINTED                   *
*        EXIT *SR4 RETURN IS TO NXT                        *
*                                                          *
************************************************************
DMPDF    EQU      %
         MTW,1    FLAG              COUNT #ENTRIES/TYPE
         AI,R1    1                 POINT TO RFDF NAME
         LB,R2    *R1               GET BYTE COUNT
         AI,R2    4
         SLS,R2   -2                CONVERT TO WORDS
         SLS,R2   28                USE AS CC
         LC       R2                TO GET NAME
         LM,D1    *R1               STORE IN PRINTING FIELD
         STM,D1   VDFLN
         LB,R4    VDFLN
         AI,R4    1
         LI,R2    3                 GET ' = '
         LB,R5    EQUL,R2           STORE IN PRINTING FIELD
         STB,R5   VDFLN,R4
         AI,R4    1
         BDR,R2   %-3
         AI,R1    -2                PTR BACK TO VALUE ENTRY (WRD 1)
         CI,SR3   0                 SR3=0,VALUE DEF VALUE IN DEC
         BE       GETUL
         LW,R2    ADEFREF
         BGEZ     SETDIVSR          BR IF NOT SPEC ABS DEF/PREF
         LW,R2    RDEFLOC
         AI,R2    -4
         AW,R2    *R1               POINTER TO ABS DEF ENTRY IN RFDFSTK
         AI,R2    3                 POINTER TO EBCDIC NAME PORTION
         LB,R3    *R2               GET BYTE COUNT OF NAME
         LW,R6    R3
         AI,R6    4
         SLS,R6   -2                CALC. NUMBER OF WORDS FOR THIS NAME
         SLS,R6   28                SET UP COUNT FOR TRANSFER TO CC
         LC       R6                NOTE: NO SYSGEN-GENERATED DEF
         LM,D1    *R2               IS GREATER THAN 4 WORDS IN LENGTH
         LI,R2    1
MUVDEF   LB,SR2   D1,R2             MOVE NAME INTO PRINT BUFFER
         STB,SR2  VDFLN,R4
         AI,R4    1
         AI,R2    1
         BDR,R3   MUVDEF
         AI,R2    -1
         LW,R6    R2
         B        VPOS2
SETDIVSR LI,R2    16                LOC DEFS & REFS VALUE IN HEX
         STW,R2   NBR
GETUL    LW,R3    *R1               VALUE IN R3
         BGEZ     VPOS              IS IT POSITIVE
         LI,R2    '-'               NO,SET - IN PRINTING FIELD
         STB,R2   VDFLN,R4
         MTB,1    VDFLN
         AI,R4    1
         LCW,R3   *R1               COMPLEMENT VALUE FOR CONVERSION
VPOS     AI,R4    BA(VDFLN)-1       R4= BYTE ADDR FOR STORING VALUE
         BAL,SR2  DECSTOR           CONVERT & STORE VALUE
VPOS2    EQU      %
         LB,R3    VDFLN             ADJUST LINE LENGTH FOR PRINTING
         AW,R3    R6
         AI,R3    3
         STB,R3   VDFLN
         LI,14    VDFLN
         EXU      PRINT             PRINT LINE
         B        *SR4              EXIT
         PAGE
************************************************************
*                                                          *
*                         DMPRF1                           *
*                                                          *
*     ROUTINE ENTERED WHEN  PROCESSING EXPRSTK             *
*        GETS DESTINATION ADDR OF REF AND STORES           *
*         IN RFDFSTK OF ENTRY                              *
*     EXIT TO DMPDF TO CONVERT AND PRINT ENTRY             *
*                                                          *
************************************************************
DMPRF1   EQU      %
         AI,R1    -3
         LW,R2    *R1               GET DESTINATION ADDR
         AND,R2   M17               FROM EXPRSTK
         PLW,R1   *R0
         PSW,R1   *R0
         LI,R3    -1
         STW,R2   *R1,R3            STORE IN WD1 OF RFDFSTK ENTRY
         B        DMPDF             EXIT
         PAGE
************************************************************
*                                                          *
*                         DMPRF                            *
*                                                          *
*     REF PROCESSING ROUTINE                               *
*                                                          *
*        HAVING FOUND A REF IN RFDFSTK, ENTRY IS MADE      *
*          REGISTERS ARE SAVED, AND POINTERS SET TO        *
*          EXPRSTK                                         *
*       RETURN IS TO GETNTRE TO SEARCH EXPRSTK FOR         *
*          CORRESPONDING ENTRY                             *
*                                                          *
************************************************************
DMPRF    EQU      %
         PSW,SR4  *R0
         PSW,SR1  *R0
         PSW,R1   *R0
         LI,R7    1                 SET FLAG FOR EXPRSTK PASS
         LW,SR3   R1                GET ABS DISPL FROM START OF RFDFSTK
         SW,SR3   RDEFLOC           TO CURRENT ENTRY TO SEARCH EXPRSTK
         AI,SR3   2
         LW,R1    EXPRLOC           GET ADDR OF START OF EXPRSTK
         B        GETNTRE
         PAGE
************************************************************
*                                                          *
*                         NXTTYPE                          *
*                                                          *
*     TRANSFER VECTOR FOR ENTRY TO PROCESSING ROUTINES     *
*                                                          *
************************************************************
NXTTPE   EQU      %
         B        %+1,R7
         B        GTNXT             VALUE DEFS,LOC DEFS,REFS
         B        RFDN              END OF REFS
         B        CHKSREFS          GO CHECK FOR SREFS IN LMN
         B        DMPSEC0           DATA RECORD
         PAGE
************************************************************
*                                                          *
*                         GTNXT                            *
*                                                          *
*     COMPLETION OF ONE TYPE PROCESSING START OF NEXT      *
*                                                          *
*     ENTRY 1ST TIME AT END OF VALUE DEFS                  *
*          SR3 = 0 UPON ENTRY                              *
*              = X'100' UPON EXIT                          *
*          R7 = 0 UPON ENTRY AND EXIT                      *
*     ENTRY 2ND TIME AT END OF LOC DEFS                    *
*          SR3 = X'100' UPON ENTRY                         *
*              = 0 UPON EXIT                               *
*          R7 = 0 UPON ENTRY                               *
*              = 2 UPON EXIT                               *
*     R1 = START OF RFDFSTK UPON EXIT                      *
*     R7 VALUE USED FOR INDEX AT DMPIT                     *
*                                                          *
************************************************************
GTNXT    EQU      %
         MTW,0    FLAG              ANY VALUES FOR TYPE
         BNEZ     %+3               YES
         LI,14    NUN               NO,PRINT NONE
         EXU      PRINT
         CI,SR3   0                 END OF VALUE DEFS
         BNE      %+4               NO
         LI,14    DFS               YES, PRINT LOC DEF HEADING
         LI,SR3   X'100'            SET SR3 FOR LOC DEFS
         B        %+4
         LI,14    RFS               END OF LOC DEFS
         LI,R7    2                 PRINT REFS HEADING
         LI,SR3   0                 SET R7 FOR REFS (RFDFSTK PASS)
         EXU      SPACE
         EXU      PRINT
         EXU      SPACE
         LI,R1    0                 ZERO COUNT FLAG
         STW,R1   FLAG
         LW,R1    RDEFLOC           GET START OF RFDFSTK
         B        GETNTRE           GO GET NEXT ENTRY
         PAGE
************************************************************
*                                                          *
*                         RFDN                             *
*                                                          *
*      ROUTINE ENTERED AT COMPLETION OF REF PROCESSING     *
*                                                          *
*         RESTORES REGISTERS,SETS R7,SR3 = 0               *
*         RETURN IS TO NXT,RESULTING IN DUMPSEC0 NEXT      *
*            ROUTINE TO BE ENTERED                         *
*                                                          *
************************************************************
RFDN     EQU      %
         PLW,R1   *R0
         PLW,SR1  *R0               RESTORE REGISTERS
         PLW,SR4  *R0
         LI,R7    2                 SET TO ENTER DUMPSEC0
         MTW,0    SREFFLG           ARE WE DOING SREFS?
         BEZ      %+2               BRANCH IF WE ARE DOING REFS
         AI,R7    1
         LI,SR3   0
         B        *SR4              RETURN TO NXT
CHKSREFS MTW,0    FLAG              WERE ANY REFS FOUND?
         BNEZ     %+3               BRANCH IF YES
         LI,14    NUN
         EXU      PRINT
         EXU      SPACE
         EXU      SPACE
         LI,14    SRFS              PRINT SREFS HEADING
         LI,R7    3                 INDICATOR THAT THIS PASS IS FOR SREFS
         STW,R7   SREFFLG           AND SET SREF PASS FLAG
         LI,SR3   0
         EXU      SPACE
         EXU      PRINT
         EXU      SPACE
         STW,SR3  FLAG              ZERO OUT COUNT FLAG
         LW,R1    RDEFLOC           GET START OF RFDFSTK ENTRIES
         B        GETNTRE           AND START PROCESSING FOR SREFS
         PAGE
************************************************************
*                                                          *
*                       DUMPSEC0                           *
*                                                          *
*     ROUTINE TO DUMP SECT0 DATA RECORD                    *
*                                                          *
*          1. DETERMINES FORMAT OF OUTPUT LINE             *
*          2. GETS CONTENTS OF SECT0                       *
*          3. PRINTS LINE                                  *
*          4. DETERMINES RELOC TYPE OF ENTRIES             *
*          5. FORMATS AND PRINTS RELOC TYPE LINE           *
*   EXITS TO DONE FOR END OF LM PROCESSING                 *
*                                                          *
************************************************************
DMPSEC0  EQU      %
         MTW,0    FLAG              ANY SREF ENTRIES FOUND?
         BNEZ     %+3               YES
         LI,14    NUN               NO,PRINT NONE
         EXU      PRINT
         EXU      SPACE
         EXU      SPACE
         LI,14    DATM              PRINT DATA RECORD HEADING
         EXU      PRINT
         EXU      SPACE
         LC       *X'4F'            ON LINE
         BCR,8    ATE               NO
         LC       X'2B'             YES,IS IT UTS
         BCS,2    UTCK              YES
         LI,R1    X'F'              NO,BTM CHECK
         LS,R1    M:LL              ASN OF DCB = 5
         CI,R1    5                 BTM TERMINAL
         BNE      ATE               NO
         B        FOR               YES
UTCK     MTW,0    TYPERR            IS M:LL ASSIGNED TO A TERMINAL
         BNEZ     ATE               BRANCH IF NOT
FOR      LI,R4    4                 4 = #ENTRIES/LINE
         B        %+2
ATE      LI,R4    8                 8 = #ENTRIES/LINE
         STW,R4   LNLNG             SET LINE LENGTH
         LW,R1    TOPLOC            GET END OF DATA RECORD
         SW,R1    SECT0LOC          SUBTRACT START OF DATA RECORD
         BNEZ     %+6
         LI,14    NUN
         EXU      PRINT
         EXU      SPACE
         EXU      SPACE
         B        DONE
         STW,R1   TOPLOC            STORE #WORDS IN DATA RECORD
         LW,R2    SECT0LOC          IS RELOC.DICT CORRECT SIZE
         SW,R2    RELDLOC           FOR DATA RECORD
         AI,R1    7
         SLS,R1   -3
         CW,R2    R1
         BE       %+3               YES
         LI,14    BDRLD             NO,PRINT INCORRECT LGTH
         EXU      PRINT
         LI,R1    0                 R1=DISPL. INTO DATA RECORD
LINE     BAL,SR4  ADDR              START ADDR OF LINE OF DATA
WRD      LW,R3    *SECT0LOC,R1      GET DATA RECORD ENTRY
         BAL,D1   DEXCON            CONVERT IT
         BAL,SR2  DMPSTOR           STORE IT IN POSITION IN LINE
         AI,R1    1
         CW,R1    TOPLOC            ALL THROUGH WITH DATA RECORD
         BGE      ENDDMP            YES
         BDR,R4   WRD               GET NXT ENTRY R4=#ENTRIES
         LW,R4    LNLNG
         LW,R3    LNLNG             CONVERT #ENTRIES TO INDEX INTO
         SLS,R3   -3                TABLE OF ACTUAL BYTES/LINE
         STW,R1   SAVTMP
         BAL,SR2  PRNTLN            PRINT LINE
         B        LINE              GET NEXT LINE
*
*                                   LAST LINE TO BE PRINTED
ENDDMP   EQU      %
         LW,R3    LNLNG
         AI,R3    1
         SW,R3    R4                DETER ACTUAL LGTH OF LAST LINE
         CI,R3    8
         BLE      %+2
         LI,R3    8                 BE SURE LINE NOT > 8
         LW,R4    R3
         AI,R3    1
         STW,R1   SAVTMP
         MTW,0    TYPERR
         BNEZ     ENDDMP1           BR. IF M:LL NOT LINKED TO TERMINAL
         BAL,SR2  PRNTLN            PRINT IT
         B        DONE              GO TO END OF LM PROCESSING
ENDDMP1  LI,R6    1
         LB,R6    LNSIZ,R6
         LW,R7    LNLNG
         SW,R7    R4                GET # OF UNUSED WORD SLOTS
         BEZ      SKIPIT
         LW,SR2   ALLBLNKS          BLANK OUT REMAINDER OF LINE
         STW,SR2  *SECT0LOC,R1
         AI,R1    1
         BDR,R7   %-2
         LI,R7    11
         MW,R7    R3                CALCULATE START OF BLANK FILL AREA
         AI,R7    -2
         SW,R6    R7
         SLS,R6   24                MOVE COUNT INTO BYTE-0
         AI,R7    BA(LINEX)         DESTINATION
         AW,R7    R6
         XW,R7    R1
         MBS,0    BA(ALLBLNKS)
         XW,R7    R1
SKIPIT   LI,R7    1
         LB,R7    LNSIZ,R7
         STB,R7   LINEX
         BAL,SR2  PRNTLN1
         B        DONE
         PAGE
************************************************************
*                                                          *
*                         DONE                             *
*                                                          *
*       COMPLETION OF LOAD MODULE PROCESSING               *
*                                                          *
*       REINITIALIZES FLAGS,DATA VALUES,RELEASES CORE      *
*         RETURN TO READ M:SI FOR NEXT FILE NAME           *
*                                                          *
************************************************************
DONE     EQU      %
         LI,R1    HEADKEY
         STW,R1   KEY               SET KEY FOR READ TO HEADKEY
         LI,R1    0
         STW,R1   FLAG              ZERO COUNT FLAG
         LI,R1    10                RESTORE DIVISOR FOR CONVERSION RTN
         STW,R1   NBR
         EXU      SPACE
         EXU      SPACE
         LI,R1    8                 RESTORE FPT FOR M:GP
         SLS,R1   24
         XW,R1    GETPG
         MTB,1    R1
         CAL1,8   R1                RELEASE PAGES
         B        RESTRT            RETURN
         PAGE
************************************************************
*                                                          *
*                  DECSTOR - DEXCON                        *
*                                                          *
*          CONVERSION ROUTINE                              *
*                                                          *
*     CONVERTS VALUE IN R3 TO HEX OR DEC                   *
*        DEPENDING ON VALUE STORED IN NBR (10/16)          *
*     R6 = # SIGNIFICANT DIGITS UPON EXIT                  *
*     TWO ENTRY POINTS                                     *
*        DECSTOR : CAUSES VALUE TO BE STORED IN POSITION   *
*                  FOR PRINTING,USED FOR VALUE DEFS        *
*                  LOC DEFS,AND REFS                       *
*                  R4 = BYTE ADDR WHERE VALUE TO BE STORED *
*                  EXIT *SR2                               *
*        DEXCON :  DOESN'T STORE VALUE, USED FOR           *
*                  FOR CONVERTING VALUE FOR DATA RECORD    *
*                  D3,D4 = CONVERTED VALUE UPON EXIT       *
*                  R6 = # SIGNIFICANT DIGITS AT END        *
*                  EXIT *D1                                *
*                                                          *
********************************************************** *
DECSTOR  EQU      %
         LI,D1    XSTOR
DEXCON   LI,R6    0
DX1      LI,R2    0
         DW,R2    NBR
         CI,R2    10
         BL       %+3
         AI,R2    'A'-10
         B        %+2
         AI,R2    X'F0'
         SLD,D3   -8
         STB,R2   D3
         AI,R6    1
         AI,R3    0
         BEZ      *D1
         B        DX1
XSTOR    LI,R5    55
         AW,R5    R6
         AW,R4    R6
         LW,R3    R6
         LB,R2    0,R5
         STB,R2   0,R4
         AI,R4    -1
         AI,R5    -1
         BDR,R3   %-4
         B        *SR2
         PAGE
************************************************************
*                                                          *
*                         PRNTLN                           *
*                                                          *
*        ROUTINE TO PRINT LINE OF DATA RECORD              *
*         ENTRY BAL,SR2                                    *
*         UPON ENTRY                                       *
*             R3 = INDEX INTO TABLE OF ACTUAL BYTES/LINE   *
*                                                          *
************************************************************
PRNTLN   EQU      %
         LB,R3    LNSIZ,R3          GET ACTUAL BYTES/LINE
         STB,R3   LINEX             STORE AS BYTE COUNT
         MTW,0    TYPERR
         BNEZ     PRNTLN1           BR. IF M:LL NOT LINKED TO TERMINAL
PRNTLNA  EQU      %
         LI,14    LINEX             PRINT LINE
         EXU      SPACE
         EXU      PRINT
         LI,R7    37                NEED TO BLANK OUT LAST LINE OF
         SLS,R7   24                EBCDIC AREA
         AI,R7    BA(EBCDICPT)-1
         XW,R1    R7
         MBS,0    BA(ALLBLNKS)
         XW,R1    R7
         BAL,SR4  RELOC             GET RELOC TYPES FOR LINE
         LI,14    LINEX             PRINT LINE
         EXU      PRINT
         LW,R4    LNLNG             R4=#ENTRIES/LINE
         B        *SR2              RETURN TO LINE PROCESSING
PRNTLN1  LW,R7    COUNT8
         AW,R7    R1
         AI,R7    -8                PT BACK TO START OF LINE
         AW,R7    SECT0LOC
         SLS,R7   2                 CHANGE TO BYTE ADDRESS WITH COUNT=32
         STW,R7   D3
         LI,R6    BA(TRANSTB)
         TBS,R6   0                 TRANSLATE NON-EBCDIC TO '.'
         LW,R6    D3                NOW GET SET TO MOVE IT TO
         LB,R7    D3                PRINT LINE
         SLS,R7   24
         AI,R7    99                DISP. TO EBCDIC COMMENT PORTION
         AI,R7    BA(LINEX)
         MBS,R6   0
         B        PRNTLNA
         PAGE
************************************************************
*                                                          *
*                          ADDR                            *
*                                                          *
*          ROUTINE TO GET RELATIVE ADDRESS OF              *
*             STARTING LOCATION OF DATA RECORD IN LINE     *
*             BEING PROCESSED                              *
*         ENTRY BAL,SR4                                    *
*          UPON ENTRY                                      *
*             R1 = INDEX INTO DATA SECT0                   *
*                                                          *
************************************************************
ADDR     EQU      %
         LW,R3    R1                ADD BIAS TO DISPL. INTO
         AW,R3    BIAS              DATA RECORD
         BAL,D1   DEXCON            CONVERT ADDRESS
         MTW,0    TYPERR
         BNEZ     ADDR1             BR. IF M:LL NOT LINKED TO TERMINAL
         LI,R5    0                 R5= DISPL. INTO OUTPUT LINE
         BAL,SR2  DMPSTOR           STORE IN FORMATTED LINE
         LI,R5    3                 R5= START OF DATA ENTRY IN LINE
         B        *SR4              RETURN
ADDR1    LI,R5    BA(LINEX)         DIFFERENT PRINT LINE SETUP TO
         BAL,SR2  DMPSTOR           ACCOMODATE EBCDIC PRITOUT IN COLS. 100-132
         B        *SR4
         PAGE
************************************************************
*                                                          *
*                         DMPSTOR                          *
*                                                          *
*          ROUTINE TO STORE ENTRY IN POSITION IN           *
*             LINE TO BE PRINTED                           *
*          ENTRY BAL,SR2                                   *
*          UPON ENTRY                                      *
*              D3,D4 = VALUE IN EBCDIC FORMAT              *
*               R6   = #SIGNIFICANT DIGITS IN VALUE        *
*                                                          *
************************************************************
DMPSTOR  EQU      %
         LI,R2    8
         SW,R2    R6                VALUE TAKES 8 BYTES ?
         BEZ      PLOP              YES
         LI,R6    X'F0'             NO,STORE LEADING ZEROS
         SLD,D3   -8
         STB,R6   D3
         BDR,R2   %-2
PLOP     MTW,0    TYPERR            BR. IF M:LL NOT LINKED TO TERMINAL
         BNEZ     PLOP1
         STW,D3   LINEX,R5          STORE FIRST WORD IN POSITION
         AI,R5    1
         STW,D4   LINEX,R5          STORE 2ND WORD IN POSITION
         AI,R5    2                 INCREMENT DISPL. INTO LINE
         B        *SR2              RETURN
PLOP1    STD,D3   SAVSTRNG
         LI,R2    BA(SAVSTRNG)      ADDRESS OF FROM BYTE STRING
         AW,R5    COUNT8            MOVE 8 BYTES TO CURRENT PRINT POS.
         XW,R5    R3                INFO NEEDS TO BE IN RU1
         MBS,R2   0                 BYTE POSITION INTO PRINT LINE
         XW,R5    R3
         AI,R5    3                 ADD ROOM FOR 3 BLANKS
         B        *SR2
         PAGE
************************************************************
*                                                          *
*                          RELOC                           *
*                                                          *
*          ROUTINE DETERMINES RELOCATION TYPE OF           *
*            THE ENTRIES IN THE LINE JUST PRINTED          *
*          ENTRY BAL,SR4                                   *
*          UPON ENTRY                                      *
*              R4 = #ENTRIES/LINE                          *
*              R1 = DISPLACEMENT IN TO DATA SECT0          *
*          ROUTINE GETS THE CORRECT RELOCATION DICTIONARY  *
*               WORD (8 DATA WRDS/WRD OF RELOC DICT)       *
*              (THE LINE OF DATA WORDS IS PROCESSED FROM   *
*                THE LAST ENTRY TO THE FIRST)              *
*               GETS CORRECT BYTE IN DICT WORD AND AFTER   *
*               MANIPULATING IT USES IT AS AN INDEX INTO   *
*               A TABLE OF 'RELOC TYPE' WORDS              *
*               THEN IT FORMATS THE TYPE WORDS INTO THE    *
*               OUTPUT LINE AND RETURNS                    *
*                                                          *
************************************************************
RELOC    EQU      %
         LD,R2    RELOCX            GET 'RELOC' FOR ADDR
         LB,R6    LINEX             GET BYTE COUNT OF JUST PRINTED LINE
         STD,R2   LINEX             STORE "RELOC" IN POSITION
         STB,R6   LINEX
         LW,R5    R4
         AW,R5    R4
         LW,R7    R4                NXT 6 LINES ARE FOR PRINTER OUTPUT
         MI,R7    3
         LW,R1    R5
         SLS,R1   2
         AW,R7    R1
         AI,R7    BA(LINEX)
         LW,R1    SAVTMP
         AW,R5    R4
         AI,R5    1
         LW,R2    R1
         AI,R2    -1                USING CURRENT DISPL.
         LI,R3    0                 INTO DATA RECORD TO GET
         SLD,R2   -3                CORRECT WORD IN RELOC DICT
         LW,R2    *RELDLOC,R2       R2 = RELOC DICT.WORD
         SCS,R3   3                 DETER. WHICH DIGIT IS CORRECT
         BCR,4    BACK              IS IT LAST DIGIT,YES
         LI,R6    7                 SHIFT RELOC DICT TO CORRECT DIGIT
         SW,R6    R3
         SLS,R6   2
         LCW,R6   R6
         SLS,R2   0,R6
BACK     SLD,R2   -4                ISOLATE DIGIT
         SLS,R3   -28               SHIFT TO USE AS INDEX
         LD,D3    RELTBL,R3         GET 2ND PART OF RELOC TYPE(TEXTC)
         MTW,0    TYPERR
         BNEZ     BACK1             BR. IF M:LL NOT LINKED TO TERMINAL
         STW,D4   LINEX,R5          STORE IT
         AI,R5    -1                1ST PART OF RELOC TYPE WORD
         STW,D3   LINEX,R5          STORE IT
         AI,R5    -2
BACK2    BDR,R4   BACK              GET NEXT ENTRY
         B        *SR4              RETURN
BACK1    STD,D3   SAVSTRNG
         AW,R7    COUNT8
         LI,R6    BA(SAVSTRNG)
         MBS,R6   0
         AI,R7    -19
         B        BACK2
PATCH    RES      50
         END      SYSGTST
