*COMDECK 3270INSP 
******************************************************* 
*                                                     * 
*         3270 TIP  INPUT STATE PROGRAMS              * 
*                                                     * 
******************************************************* 
          SPC    3
          NAM    IS3270 
          SPC    3
          NLS 
*CALL MUXMACROS 
*CALL STPMACROS 
          LST 
          EJT 
******************************************************* 
*                                                     * 
*         3270 TIP  DEFINITION OF CONSTANTS           * 
*                                                     * 
******************************************************* 
          SPC    2
* 
* * * *   EBCDIC CHARACTER EQUATIONS
* 
          EQU    CSOH($01)
          EQU    CSTX($02)
          EQU    CETX($03)
          EQU    CDLE($10)
          EQU    CSBA($11)
          EQU    CETB($26)
          EQU    CENQ($2D)
          EQU    CSYN($32)
          EQU    CEOT($37)
          EQU    CNAK($3D)
          EQU    CSUB($3F)
          EQU    CBLNK($40) 
          EQU    CACK0($70) 
          EQU    CACK1($61) 
          EQU    CWACK($6B) 
          EQU    CRVI($7C)
          EQU    CSLASH($61)
          EQU    CPERCNT($6C) 
          EQU    CR($D9)
          EQU    CF0($F0) 
* 
* * * *   WORKCODE EQUATIONS
* 
          EQU    WKACK0(A0WK1)
          EQU    WKACK1(A0WK2)
          EQU    WKEOT(A0WK3) 
          EQU    WKWACK(A0WK4)
          EQU    WKRVI(A0WK5) 
          EQU    WKSTAT(A0WK6)
          EQU    WKTETB(A0WK7)
          EQU    WKTETX(A0WK8)
          EQU    WKTEST(A0WK9)
          EQU    WKBUFT(A0WK10) 
          EQU    WKNAK(A0WK11)
          EQU    WKENQ(A0WK12)
          EQU    WKTENQ(A0WK13) 
          EQU    WKCRCE(A0WK14) 
          EQU    WKDCDR(WKCRCE) 
* 
* * * *   MUX-LCB USER-FLAG EQUATIONS 
* 
          EQU    MFSTX(NCUOP1)     SET IF STX STARTS TEXT (VERSUS SOH)
          EQU    MFSTAT(NCUOP2)    SET IF STATUS MSG RECEIVING
          EQU    MFETB(NCUOP3)     SET IF TEXT TERM BY ETB (VERSUS ETX) 
          EQU    MFSUB(NCUOP4)     SET AFTER SUB SEEN (LOOK FOR ENQ)
          EQU    MFSBA(NCUOP5)     SET AFTER FIRST SBA SSEN 
          EQU    MFRESET(MFSTX+MFSTAT+MFETB+MFSUB+MFSBA) RESET MASK 
* 
* * * *   CHARACTER-COUNT VALUE EQUATIONS 
* 
          EQU    LTEXT(256)  -     LENGTH OF TEXT (INCL STX AND ETB/ETX)
          EQU    LSTATUS(4)  -     LENGTH OF STATUS MESSAGE 
* 
* * * *   TIMER VALUES (HALF SECONDS) 
* 
          EQU    SOHTIME(6) 
          EQU    STXTIME(6) 
* 
* * * *   SYSTEM EQUATIONS
* 
          EQU    DATA(12)    -     EQUATE TO PASCAL-CONSTANT -DATA- 
          EJT 
          EJT 
******************************************************* 
*                                                     * 
*         3270 TIP  INPUT STATE POINTER TABLE EBCDIC  * 
*                                                     * 
******************************************************* 
          SPC    2
          STATPN IS327E       DECLARE NAME OF STATE-PROGRAM-TABLE 
* 
          STATPT IS327E,CLASTAT 
          STATPT IS327E,DCDROP
          STATPT IS327E,TMBUFS
          STATPT IS327E,BUFTHR
          STATPT IS327E,SYNC
          STATPT IS327E,CHAR1 
          STATPT IS327E,PDLE
          STATPT IS327E,PERCNT
          STATPT IS327E,PPERCNT 
          STATPT IS327E,SKPSTX
          STATPT IS327E,FTEXT 
          STATPT IS327E,TEXT
          STATPT IS327E,CRC1
          STATPT IS327E,CRC2
          STATPT IS327E,WTEOM 
          STATPT IS327E,WTCRC 
          STATPT IS327E,WTPAD 
          STATPT IS327E,IDLE
          EJT 
******************************************************* 
*                                                     * 
*         3270 TIP  INPUT STATE PROGRAMS              * 
*                                                     * 
******************************************************* 
          SPC    2
******************************************************* 
*         CLA-STATUS RECEIVED (PARITY-ERROR)          * 
******************************************************* 
* 
          STATPR CLASTAT
*         **************
* 
          NOPR   EXIT        -     IGNORE CLA-STATUS
          SPC    2
******************************************************* 
*         DATA-CARRIER-DETECT DROPPED                 * 
******************************************************* 
* 
          STATPR DCDROP 
*         ************* 
* 
          STATLS IDLE,DCDR1  -     SKIP IF NOT AT STATE IDLE
          NOPR   EXIT        -     INPUT COMPLETED, NORMAL CONDITION
DCDR1     STATLS WTEOM,DCDR2 -     SKIP IF NOT AT WTEOM 
          SKIP   SENDWK      -     WTEOM DONE BECAUSE DCD-DROPPED 
DCDR2     STATLS TEXT,RESYNC -     RESYNC IF NO BUFFER(S) USED
          TIBSWC WKDCDR      -     DCD-DROPPED DURING INPUT 
          SKIP   SENDWK      -     GO SEND WORKCODE TO OPS-TIP
* 
RESYNC    STATE  SYNC        -     RESYNC CLA AND CONTINUE
          RESYNC EXIT        -     RESYNC LINE AND CONTINUE 
          SPC    2
******************************************************
*        TOO MANY INPUT-BUFFERS USED                 *
******************************************************* 
* 
          STATPR TMBUFS,CLASTAT 
*         ********************* 
          SPC    2
******************************************************* 
*         MUX BUFFER THRESHOLD REACHED                * 
******************************************************* 
* 
          STATPR BUFTHR 
*         ************* 
* 
          TIBWL  MMBUTCH     -     HAVE PMWOLP RELEASE BUFS ASAP
          TIBSWC WKBUFT      -     SAVE WORKCODE FOR TIP
          JUMP   WTEOM       -     SET STATE AND WAIT FOR END-OF-MSG
          EJT 
******************************************************* 
*         RECEIVE SECOND SYNC-CHARACTER               * 
******************************************************* 
* 
          STATPR SYNC 
*         *********** 
* 
          CHARNE CSYN,SYNC1  -     TEST FOR SYNC-CHARACTER
          RSTMXF MFRESET     -     RESET INPUT FLAGS
          SETRAN
          STATE  CHAR1,EXIT  -     WAIT FOR CHAR AFTER SYNC 
SYNC1     RESYNC EXIT        -     NO SYNC, RESYNC CLA, TRY AGAIN 
          SPC    2
******************************************************* 
*         RECEIVE FIRST CHARACTER AFTER SYNC          * 
******************************************************* 
* 
          STATPR CHAR1
*         ************
* 
          CHARNE CSYN,CHAR12
          NOPR   EXIT        -     IGNORE FURTHER SYNC-CHARACTERS 
CHAR12    CHARNE CEOT,CHAR13
          TIBSWC WKEOT       -     EOT-CHARACTER RECEIVED 
          STATE  WTPAD,EXIT  -     GO SEND WORKCODE TO OPS-TIP
CHAR13    CHARNE CDLE,CHAR14
          STATE  PDLE,EXIT   -     WAIT FOR CHAR FOLLOWING DLE
CHAR14    CHARNE CSTX,CHAR15
          SETMXF MFSTX       -     REMEMBER STX-CHARACTER SEEN
          RSTIME STXTIME     -     BRING TIMER TO THREE SECONDS 
          INTCRC ZCRC        -     INITIALIZE THE CRC 
          STATE  FTEXT,EXIT  -     RECEIVE FIRST CHARACTER OF TEXT
CHAR15    CHARNE CSOH,CHAR16
          RSTIME SOHTIME     -     BRING TIMER TO THREE SECONDS 
          INTCRC ZCRC        -     INITIALIZE THE CRC 
          STATE  PERCNT,EXIT -     GO RECEIVE PERCENT-CHARACTER 
CHAR16    CHARNE CENQ,CHAR17
          TIBSWC WKENQ       -     ENQ-CHARACTER RECEIVED 
          STATE  WTPAD,EXIT  -     GO SEND WORKCODE TO OPS-TIP
CHAR17    CHARNE CNAK,CHAR18
          TIBSWC WKNAK       -     NAK-CHARACTER RECEIVED 
          STATE  WTPAD,EXIT  -     GO SEND WORKCODE TO OPS-TIP
CHAR18    SKIPB  RESYNC      -     BAD 1ST CHAR, RESYNC CLA, CONTINUE 
          EJT 
******************************************************* 
*         RECEIVE CHARACTER FOLLOWING DLE             * 
******************************************************* 
* 
          STATPR PDLE 
*         *********** 
* 
          CHARNE CACK0,PDLE1
          TIBSWC WKACK0      -     ACK0 RECEIVED
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
PDLE1     CHARNE CACK1,PDLE2
          TIBSWC WKACK1      -     ACK1 RECEIVED
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
PDLE2     CHARNE CRVI,PDLE3 
          TIBSWC WKRVI       -     RVI RECEIVED 
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
PDLE3     CHARNE CWACK,PDLE4
          TIBSWC WKWACK      -     WACK RECEIVED
SENDWK    SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
PDLE4     SKIPB  RESYNC      -     BAD DLE/CHAR SEQ, RESYNC, CONTINUE 
          SPC    2
******************************************************* 
*         RECEIVE PERCENT OF STATUS/TEST MESSAGE      * 
******************************************************* 
* 
          STATPR PERCNT 
*         ************* 
* 
          CHARNE CPERCNT,PERCN1 
          STATE  PPERCNT,CRCEXIT   GO RECEIVE CHAR FOLLOWING PERCENT
PERCN1    SKIPB  RESYNC      -     BAD STATUS/TEST, RESYNC, CONTINUE
          SPC    2
******************************************************* 
*         RECEIVE CHARACTER AFTER PERCENT             * 
******************************************************* 
* 
          STATPR PPERCNT
*         **************
* 
          CHARNE CR,PPERC1
          SETMXF MFSTAT      -     REMEMBER IT IS STATUS-MSG
          STATE  SKPSTX,CRCEXIT    GO RECEIVE STX FOR STATUS-MSG
PPERC1    CHARNE CSLASH,PPERC2
          STATE  SKPSTX,CRCEXIT    GO RECEIVE STX FOR TEST-MSG
PPERC2    SKIPB  RESYNC      -     BAD STATUS/TEST, RESYNC, CONTINUE
          EJT 
******************************************************* 
*         RECEIVE STX CHAR OF STATUS/TEST MESSAGE     * 
******************************************************* 
* 
          STATPR SKPSTX 
*         ************* 
* 
          CHARNE CSTX,SKPST1
          STATE  FTEXT,CRCEXIT     GO STORE TEXT OF STATUS/TEST MSG 
SKPST1    SKIPB  RESYNC      -     BAD STATUS/TEST, RESYNC, CONTINUE
          SPC    2
******************************************************* 
*         RECEIVE FIRST CHARACTER OF TEXT AFTER STX   * 
******************************************************* 
* 
          STATPR FTEXT
*         ************
* 
FTEXT0    TSTMXF MFSTAT,FTEXT1     SKIP IF RECEIVING STATUS-MSG 
          SETCC2 LTEXT       -     RECEIVING TEXT OR TEST-REQUEST-MSG 
          JUMP   TEXT        -     RECEIVE TEXT OF TEST-REQUEST 
FTEXT1    SETCC2 LSTATUS+1   -     RECEIVING STATUS, SET CHAR-COUNT 
          JUMP   TEXT        -     PROCESS FIRST TEXT-CHARACTER 
          SPC    2
******************************************************* 
*         RECEIVE TEXT UNTIL ETB/ETX RECOGNIZED       * 
******************************************************* 
* 
          STATPR TEXT 
*         *********** 
* 
          CHARLS CBLNK,TEXT2 -     SKIP IF EBCDIC -CONTROL -CHAR
TEXT1     DCC2   ERROR,CRCSTOREX   STORE AND COUNT CHARS
TEXT2     CHARNE CSYN,TEXT3 
          NOPR   EXIT        -     IGNORE SYNC-CHARACTERS 
TEXT3     CHARNE CETX,TEXT4 
          STATE  CRC1,CRCEXIT      ETX SEEN, WAIT FOR CRC 
TEXT4     CHARNE CETB,TEXT5  -     SKIP IF NOT AN ETB 
          SETMXF MFETB       -     REMEMBER ETB SEEN
          STATE  CRC1,CRCEXIT      ETB SEEN, WAIT FOR CRC 
TEXT5     CHARNE CSBA,TEXT7  -     SKIP IF NOT SBA
          TSTMXF MFSBA,TEXT6       SKIP IF FIRST SBA SEEN 
          SETMXF MFSBA       -     SET SBA SEEN FLAG
          ALNBUF DATA-2      -     FIRST SBA, START NEW BUFFER
TEXT6     SKIPB  TEXT1       -     STORE SBA
TEXT7     TSTMXF MFSUB,TEXT9 -     SEEN SUB 
          CHARNE CSUB,TEXT8  -     NO - SEE IT THIS TIME
          SETMXF MFSUB       -     YES
TEXT8     SKIPB  TEXT1       -     CONTINUE 
TEXT9     CHARNE CENQ,TEXT10 -     NOT ENQ - CONTINUE 
          TIBSWC WKTENQ      -     IT IS
          SKIP   SENDWC      -     SEND WORKCODE TO OPS TIP 
TEXT10    SKIPB  TEXT1       -     STORE CHARACTER IN BUFFER
          SPC    2
******************************************************* 
*         RECEIVE FIRST CHARACTER OF CRC              * 
******************************************************* 
* 
          STATPR CRC1 
*         *********** 
* 
          STATE  CRC2,CRCEXIT      ADD CRC1 TO CRC, AWAIT CRC2
          SPC    2
******************************************************* 
*         RECEIVE SECOND CHARACTER OF CRC             * 
******************************************************* 
* 
          STATPR CRC2 
*         *********** 
* 
          CRCEQ  B8,CRC21    -     COMPARE CALC AND RECVD CRCS
ERROR     TIBSWC WKCRCE      -     SAVE ERROR WORKCODE
          SKIP   SENDWC      -     AND GO SEND TO OPS-TIP 
CRC21     TSTMXF MFSTX,CRC23 -     SKIP IF NORMAL TEXT
          TSTMXF MFSTAT,CRC22      SKIP IF RECEIVED STATUS
          TIBSWC WKTEST      -     TEST-REQ RECEIVED
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
CRC22     SKIP   CRC25
CRC23     TSTMXF MFETB,CRC24 -     SKIP IF TEXT TERM BY ETB 
          TIBSWC WKTETX      -     TEXT RECEIVED TERM BY ETX
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
CRC24     TIBSWC WKTETB      -     TEXT RECEIVED TERM BY ETB
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
CRC25     TIBSWC WKSTAT      -     STATUS RECEIVED
          SKIP   SENDWC      -     GO SEND WORKCODE TO OPS-TIP
          EJT 
******************************************************* 
*         AWAIT EOM BEFORE SENDING SAVED WORKCODE     * 
******************************************************* 
* 
          STATPR WTEOM
*         ************
* 
          CHARNE CSYN,WTEOM1 -     SKIP IF NOT SYNC-CHARACTER 
          NOPR   EXIT        -     IGNORE SYNCS 
WTEOM1    CHARNE CETX,WTEOM3 -     SKIP IF NOT ETX
WTEOM2    SETCC2 2           -     ETX/ETB SEEN SET COUNT FOR CRC 
          STATE  WTCRC,EXIT  -     SKIP THE TWO CRC CHARACTERS
WTEOM3    CHARNE CETB,WTEOM4 -     SKIP IF NOT ETB
          SKIPB  WTEOM2      -     ETB SEEN SET COUNT FOR CRC 
          SPC    2
******************************************************* 
*         RECEIVED EOM, SKIP THE TWO CRC CHARACTERS   * 
******************************************************* 
* 
          STATPR WTCRC
*         ************
* 
WTEOM4    DCC2   SENDWC,EXIT -     COUNT INCOMING CHARACTERS
* 
SENDWC    BLDWL  ,,,T3270T   -     SEND SAVED WORKCODE TO OPS-TIP 
          RSTIME 0           -     TERMINATE HALF SECOND LINE TIMER 
          JUMP   IDLE        -     DONE WITH INPUT, HANG IN IDLE
          SPC    2
******************************************************* 
*         PAD-CHAR AFTER EOT/NAK/ENQ MUST BE \ F0     * 
******************************************************* 
* 
          STATPR WTPAD
*         ************
* 
          CHARLS CF0,WTPAD1  -     RECEIVE 4 BITS OF TRAILING PAD-CHAR
          SKIP   SENDWC      -     SEND EOT/ENQ/NAK TO OPS-TIP
WTPAD1    SKIPB  RESYNC      -     BAD INPUT RECEIVED, IGNORE 
          SPC    2
******************************************************* 
*         INPUT DONE WAIT FOR NEXT INPUT-COMMAND      * 
******************************************************* 
* 
          STATPR IDLE 
*         *********** 
* 
          RESYNC EXIT        -     RESYNC CLA, IGNORE INCOMING DATA 
          SPC    2
          END 
