*DECK XSTTP 
          IDENT  XSTTP
          SST 
          EXT    ABORT
          EXT    XTRACE 
          ENTRY  XSTTP
*#
*1DC  XSTTP 
*     1. PROC NAME       AUTHOR           DATE
*        XSTTP           Y.J.POLAK        81/03/03
*     2. FUNCTIONAL DESCRIPTION 
*        THIS ROUTINE IS RESPONSIBLE FOR ACCESSING THE VARIOUS STATE
*        TABLES.IT IS CALLED BY EACH OF THE FOUR STATE TABLE
*        PROCESSORS (NCSTTP,NBSTTP,HCSTTP,HBSTTP).EACH ONE OF THESE 
*        SPECIFIES THE STATE TABLE TO BE PROCESSED BY PASSING THE 
*        PROPER ORDINAL.
*     3. METHOD USED
*        THE STATE TABLES ARE DEFINED BY USING  THE FOLLOWING MACROES 
*        (DEFINED IN COMDECK STBLMAC):INITBL,STATE,TRIG,ENDTBL. 
*        INITIALLY INITBL IS INVOKED WITH THE STATE TABLE NAME OF 2 
*        CHARACTERS,THE MAXIMUM STATE NUMBER AND THE MAXIMUM TRIGGER
*        TRIGGER NUMBER.
*        NEXT FOR EACH STATE ALL LEGAL TRIGGERS ARE DEFINED,BY
*        INVOKING A STATE MACRO WITH THE STATE NUMBER FOLLOWED BY 
*        THE TRIG MACRO FOR EACH LEGAL TRIGGER IN THAT STATE.THE TRIG 
*        MACRO HAS THE FOLLOWING PARAMETERS (IN THIS ORDER):  
*        TRIGN -  TRIGGER NUMBER
*        NEWST -  NEW STATE AS A RESULT OF THIS TRIGGER 
*        ACTION-  ACTION ORDINAL OF CODE TO BE PERFORMED IN THIS CASE 
*        TRIGC -  TRIGGER NO, TO BE SENT TO CORRESP. CONNECTION STATE 
*                 TABLE 
*        TRIGB -  TRIGGER NO. TO BE SENT TO CORREP. BLOCK PROTOCOL
*                 STATE TABLE.
*        EXCEPT TRIGN ALL PARAMETERS MAY BE LEFT BLANK BY ADJACENT
*        COMMAS,IN WHICH A NO CHANGE VALUE (NOCHG) WILL BE FILLED IN. 
*        ALL STATES MUST BE DEFINED IN ORDER STARTING FROM THE SPECIAL
*        NO CONNECTION STATE (STATX),THEN STATE 0,STATE 1 AND SO ON.
*        ALL STATES MUST HAVE AT LEAST ONE LEGAL TRIGGER.FINALLY THE
*        MACRO ENDTBL MUST BE INVOKED WITH THE 2-CHAR NAME OF THE 
*        STATE TABLE. 
*        THE STATE TABLES MACROES ARE DEVISED SUCH THAT ONLY LEGAL
*        TRIGGERS NEED TO BE SPECIFIED.ONLY IN THESE CASES ARE ANY
*        PARAMETERS STORED IN THE STATE TABLE.AT THE SAME TIME A
*        BITMAP IS CONSTRUCTED WITH ONE BIT PER POSSIBLE CASE (BOTH 
*        LEGAL AND ILLEGAL).IF THE TRIGGER IS DEFINED THAT MEANS THAT 
*        THE CASE IS LEGAL AND THE APPROPRIATE BIT IS SET.IF TRIGGER
*        NUMBERS ARE SKIPPED THIS MEANS THAT THOSE CASES ARE ILLEGAL
*        AND THE APPROPRIATE BITS ARE CLEARED.
*        WHEN ROUTINE XSTTP IS CALLED IT CALCULATES THE FOLLOWING 
*        BASED ON THE CALL PARAMETERS:  
*        (CURRENT STATE NO.*(MAX TRIGGER VALUE+1))+CURRENT TRIGGER NO 
*        THIS IS THE APPROPRIATE BIT-NUMBER IN THE BITMAP FOR THIS
*        CASE.IF IT IS CLEAR THE CASE IS ILLEGAL AND ZEROES ARE 
*        RETURNED IN THE RESPONSE.IF IT IS SET THEN THE CASE IS 
*        LEGAL AND THE RESPONSE PARAMETERS ARE TO BE LOCATED IN THE 
*        STATE TABLE.THIS IS DONE BY COUNTING THE ONE BITS PRECEDING
*        THIS CASE IN THE BITMAP,USING THE POPULATION COUNT 
*        MACHINE INSTRUCTION.BASED ON THE NUMBER OF PRECEDING LEGAL 
*        CASES THE PARAMETER-LOCATION IN THE ACTUAL STATE TABLE IS
*        CALCULATED (EACH LEGAL CASE OCCUPIES 30 BITS,CURRENTLY). 
*        FINALLY THAT INFO IS PASSED IN THE RESPONSE PARAMETER. 
*     4. ENTRY PARAMETERS 
*         ORD           STATE TABLE ORDINAL (0-3) 
*         CURST         CURRENT STATE OF CONNECTION OR 76B IF NO
*                                        CONNECTION EXISTS
*         TRIGNO        CURRENT TRIGGER NUMBER
*     5. EXIT PARAMETER.
*         STATRSP       RESPONSE WORD CONTAINING THE FOLLOWING FIELDS 
* 
*            LEGALB       BOOLEAN(LEFTMOST BIT) 
*                         IF FALSE THEN THE TRIGGER WAS NOT LEGAL 
*                         THE CURRENT STATE 
*                         IF TRUE THEN THE TRIGGER WAS LEGAL FOR THE
*                         CURRENT STATE AND THE FOLLOWING FIELDS (6-
*                         BITS EACH) ARE CONTAINED IN THE RIGHMOST
*                         30 BITS OF STATRSP: 
* 
*            NEWST      NEW STATE OF CONNECTION 
*            ACTION     ACTION INDICATOR OF CODE TO BE PERFORMED
*            TRIGC      TRIGGER TO CORRESPONDING CONNECTION 
*                       STATE TABLE 
*            TRIGB      TRIGGER TO CORRESPONDING BLOCK PROTOCOL 
*                       STATE TABLE 
*            RES        RESERVED (77B)
* 
* 
*         A VALUE OF NOCHG(77B) INDICATES THAT NO STATE CHANGE, 
*       ACTION OR TRIGGER IS NEEDED 
*       A SPECIAL VALUE OF STATX (76B) FOR THE NEW STATE IMPLIES
*       THERE IS NO CONNECTION ANYMORE
* 
*     6. COMDECKS CALLED. 
*          MACDEF CYBERDEFS STBLDEF INPARU STBLMAC
*     7. ROUTINES CALLED. 
*          ABORT
*     8. DAYFILE MESSAGES 
*          NONE DIRECTLY
*          VIA ABORT: ERR IN STATE TABLE PROCESSOR CALL (XSTTP) 
* 
*#
*CALL MACDEF
*CALL CYBERDEFS 
*CALL INPARU
*CALL STBLDEF 
*CALL STBLMAC 
*CALL STATTBL 
 XSTTP    SUBR   =
          IFEQ    DEBUG,1,6 
          SX6    A1 
          SA6    TEMP 
          SX1     XNAME 
          RJ     XTRACE 
          SA1    TEMP 
          SA1    X1 
          SB7    WL 
          SB1    1
          SA2    X1          PAR LIST,PICK UP STTBL ORDINAL 
          SA2    X2+TBLPNTR  POINTER TABLE INDEXED BY ORDINAL 
          SB2    X2          SAVE LEGBM ADDRESS 
          MX7    48 
          LX2    12          SHIFT POINTER TABLE ENTRY
          BX1    -X7*X2      MAXIMUM TRIGGER VALUE
          SX1    X1+B1       ADD ONE
          LX2    12          SHIFT AGAIN AND PICK UP
          BX3    -X7*X2      LENGTH OF LEGAL CASE BITMAP IN WORDS 
          SB3    X3          SAVE IN B3 
          SA3    A1+B1       NEXT PAR:CURRENT STATE 
          SA5    X3 
          SX4    X5-STATX 
          ZR     X4,NOCONN   IF STATE OF NO CONNECTION SKIP 
          SX3    X5+B1       ADD ONE FOR NO CONN STATE
          IX4    X1*X3       CALCULATE CUR STATE*MAX TRIGVAL+1
 NOCONN   SA3    A3+B1       NEXT PAR:TRIGNO
          SA5    X3 
          IX3    X5+X4       ADD IT TO X4 
          SB4    X3          SAVE IN B4 (CURST*(MAXTR+1))+TRIGNO
          SB6    B0 
          LT     B4,B7,FNDWD IF VALUE LESS THAN 60 THEN FOUND WORD
 LOOP     SB4    B4-B7       OTHERWISE SUBTRACT 60 AND
          SB6    B6+B1       KEEP WORD COUNT IN B6
          GE     B4,B7,LOOP  MORE TO GO 
 FNDWD    GE     B6,B3,ERR   ILLEGAL VALUE IN B4
          SA1    B2+B6       FETCH PROPER LEGBM WORD
          LX5    X1,B4       SHIFT TO PROPER BIT
          NG     X5,LEGVAL   LEGAL TRIGGER,JUMP 
          MX6    0           ILLEGAL TRIGGER
          SA3    A3+B1       SET EXIT PAR TO 0
          SA6    X3          STORE AND EXIT 
          EQ     XSTTPX 
 LEGVAL   MX6    1           COUNT NO OF PRECEDING ENTRIES
          AX7    B4,X6       BUILD MASK FOR ALL PRECEDING BITS
          BX5    X7*X1       X1 CONTAINS LEGBM WORD 
          CX3    X5          NUMBER OF ONES IN WORD 
          EQ     B6,NOMORE   JUMP IF NO PRECEDING WORDS 
 MORE     SB6    B6-B1       CHECK PRECEDING WORDS IN LEGBM 
          SA1    B2+B6       PREVIOUS WORD
          CX5    X1          COUNT ONES 
          IX3    X3+X5       ADD TO RESULT
          GT     B6,MORE     MORE TO GO 
 NOMORE   SX3    X3-1        SUBTRACT ONE FOR ORIG ENTRY
* X3 NOW HOLDS THE NUMBER OF PRECEDING LEGAL ENTRIES IN STTBL 
* BASED ON 30 BIT ENTRY LENGTH WE DIVIDE BY 2 IN ORDER TO 
* CALCULATE THE PROPER ADDRESS
          AX4    B1,X3
          SB3    X4 
          LX5    B1,X4       MULT BACK BY 2AND CALCULATE LOGICAL
          BX4    X5-X3       DIFFERENCE TO KNOW SIDE OF ENTRY 
* X2 STILL HOLDS POINTER TABLE WORD FOR PROPER ORDINAL
          LX2    18          SHIFT TO POSITION
          SA1    X2+B3       FETCH PROPER STTBL WORD
          NZ     X4,RIGHTSD  TAKE PROPER SIDE 
          LX1    30          LEFT OR
 RIGHTSD  MX7    30          RIGHT
          BX5    -X7*X1      MASK THE 30 BITS AND ADD 
          BX7    X5+X6       HIGH ORDER BIT TO INDICATE 
          SA3    A3+B1       LEGAL VALUE
          SA7    X3          STORE IN EXIT PARAMETER
          EQ     XSTTPX 
 ERR      SX1    ERRMSG 
          RJ     ABORT       ABORT WITH PROPER ERROR MESSAGE IN DAYFILE 
 ERRMSG   DIS    ,* ERROR IN XSTTP CALL*
 XNAME    DATA    L*XSTTP*
 TEMP     BSS    1
          END 
