ASMB,Q,C
      HED <TRC3K> PRINT TRACE OF DS/3000 LOG * (C) HEWLETT-PACKARD CO.
      NAM TRC3K,4,90 91750-16178 REV.2013 800604 MEF
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS      *
*  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 2 
      UNL           NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING 
*  NAME: TRC3K
*SOURCE: 91750-18178
* RELOC: 91750-16178
*  PGMR: DMT
      LST 
**************************   TRC3K   *************************
*                                                            *
* SOURCE: 91750-18178                                        *
*                                                            *
* BINARY: 91750-16178                                        *
*                                                            *
* PROGRAMMER: DAVE TRIBBY                                    *
*                                                            *
* OCTOBER 13, 1978                                           *
*                                                            *
**************************************************************
      SPC 1 
      EXT NAMR,IFTTY,IFBRK,.DFER,#PKUP
      EXT EXEC,CNUMD,KCVT,CNUMO,REIO,TMVAL
      EXT OPEN,READF,WRITF,POSNT,RWNDF,CLOSE
* 
A     EQU 0         A-REGISTER
B     EQU 1         B-REGISTER
      SUP 
      SKP 
* 
TRC3K JSB #PKUP     PICK UP PARAMETERS
      DEF *+4 
      DEF PMASK 
      DEF NCMDI 
      DEF DEFLU 
      SPC 1 
* 
*  PROCESS FIRST PARAMETER--COMMAND INPUT 
* 
GTCMI LDA @CMDI 
      JSB OPNDV     OPEN THE COMMAND DEVICE.
      DEF CMDIN 
      JMP GTRCI     NORMAL RETURN...GET TRACE INPUT.
      LDA DEFLU     ERROR RETURN...USE DEFAULT LU.
      LDB @CMDI 
      STA B,I 
      CLA           CLEAR OTHER NAMR WORDS. 
      INB 
      STA B,I 
      INB 
      STA B,I 
      INB 
      STA B,I 
      JMP GTCMI 
      SPC 1 
* 
*  PROCESS SECOND PARAMETER--LOGGING INPUT
* 
GTRCI CLA,INA       SET RECORD
      STA RECNO      NUMBER TO 1. 
      LDA @TRCI 
      JSB OPNDV     OPEN THE TRACE INPUT DEVICE.
      DEF TRCIN 
      JMP CHKFL     NORMAL RETURN...CHECK FILE TYPE.
PRTCI JSB ERMSG     PROMPT FOR TRACE INPUT. 
      DEF TIPRM 
      DEC -15 
      LDA DEFLU     SET "ECHO 
      IOR B600       INPUT" 
      STA TEMP        BIT.
      JSB REIO      READ FROM DEFAULT LU. 
      DEF *+5 
      DEF SD1 
      DEF TEMP
      DEF INBUF 
      DEF D40 
      JMP EXCMD     ON ERROR, TERMINATE.
      CLE,ELB 
      STB INLEN     SAVE NO OF CHARACTERS.
      CLA,INA       RESET PARSE 
      STA PNTR       POINTER. 
      JSB PNAMR     PARSE INTO TRACE INPUT ARRAY. 
      LDA NAME,I    IF NEGATIVE 
      SSA            VALUE ENTERED, 
      JMP EXCMD        TERMINATE! 
      JMP GTRCI     OPEN IT.
* MAKE SURE LOGGING INPUT ISN'T A FIXED LENGTH FILE 
CHKFL LDA TRCIN     IF IT'S NOT 
      CPA "FI"       A FILE,
      RSS             IT'S OK.
      JMP GTROT 
      LDA ERROR     GET FILE TYPE FROM OPEN.
      CPA D1        TYPE = 1? 
      JMP FIXDL       YES...ERROR.
      CPA D2        TYPE = 2? 
      JMP FIXDL       YES...ERROR.
      JMP GTROT     NOT TYPE 1 OR 2, SO IT'S OK.
FIXDL JSB ERMSG     PRINT ERROR 
      DEF BADTY      MESSAGE FOR
      DEC 15          BAD FILE TYPE.
      JSB CLOSE     CLOSE THE 
      DEF *+2        FILE.
      DEF TRCIN+1 
      JMP PRTCI     GET NEW FILE NAME.
      SPC 1 
* 
*  PROCESS THIRD PARAMETER--TRACE OUTPUT
* 
GTROT JSB OPNTO 
      SPC 1 
*  PRINT HEADING... 
      JSB PRINT 
      DEF HEAD1 
      DEC 25
      SPC 1 
* 
      JSB PRINT     PRINT 
      DEF BLANK      BLANK
D1    DEC 1           LINE. 
* 
*  SET FORMAT AND PRINTING DEFAULTS.
      LDA DEFFG     SET HEADING 
      STA PRFLG      AND DRIVER BITS. 
RESTO CCA           SET OTHER OPTIONS OFF.
      STA !CLAS 
      STA !EREC 
      STA !RTE# 
      STA !SREC 
      STA !STRM 
* 
***  MAIN LOOP FOR COMMAND PROCESSING BEGINS HERE  ***
COMMD LDA DN6       SET 0-LEN COUNTER 
      STA L0CNT      TO SIX.
COMD1 JSB READ      READ COMMAND. 
      DEF "?"       (PROMPT)
D4    DEC 4 
      SZB,RSS       IF 0-LEN RECORD,
      JMP LEN0        CHECK FOR 6 IN A ROW. 
      SSB           IF NEGATIVE LENGTH, 
      JMP EXCMD       ALL DONE. 
      CMB,INB       SAVE NEGATIVE NUMBER OF 
      STB BCNT       CHARACTERS FOR COUNTER.
* 
      LDA .CMLN     GET BYTE ADDRESS OF COMMAND.
      JSB NBLNK     FIND FIRST NON-BLANK CHARACTER. 
       JMP CMERR    ALL BLANK COMMAND--ERROR
       JMP CMERR    CHARACTER LT A BLANK--ERROR 
      STA CMSAV 
      LDY D6        CHAR > BLANK--OK, SET UP INDEX FOR
      LDB .CLEN      COMMAND SEARCH & GET ADDRESS OF LENGTH 
      STB TBLN        OF NEXT COMMAND TABLE AND SAVE. 
      LDB .CMTB     GET BYTE ADDRESS OF COMMAND TABLE 
      JSB SERCH       AND PERFORM SEARCH
       JMP CMERR    ERROR RETURN
      SPC 2 
* 
*  COMMAND WORD OK--NOW GET PARAMETERS
* 
      CLA           ZERO PARAMETER COUNT
      STA FICNT 
      LDA .PTAB     RESET PARAMETER 
      STA .NEXT      TABLE ADDRESS
      LDA .ETAB     RESET END 
      STA .NXTE      TABLE ADDR.
      LDA CMSAV     GET ADDRESS OF COMMAND
GTPAR JSB IBLNK     FIND NEXT BLANK OR COMMA
       JMP RTAB1    NONE--JUMP TO COMMAND ROUTINE 
      STA .NXTE,I   SAVE ENDING ADDRESS.
      ISZ .NXTE 
      JSB NBLNK     FIND NEXT NON-DELIMITING CHARACTER. 
       JMP RTAB2    NONE--JUMP TO COMMAND ROUTINE.
       JMP PMERR    LT--ILLEGAL CHARACTER 
      STA .NEXT,I   GT--IT'S POSSIBLE SAVE PARAM ADDR.
      ISZ .NEXT       AND INCREMENT TABLE ADDRESS 
      ISZ FICNT     INCREMENT PARAMETER COUNT 
      LDB FICNT     MAKE SURE NO MORE THAN MAX
      CPB MXPRM 
      JMP PMERR       MORE--AN ERROR
      JMP GTPAR         OK--CONTINUE SEARCH 
      SPC 2 
* 
*  HERE ON END OF PARSE. COMMAND ROUTINE TABLE. 
* 
RTAB1 STA .NXTE,I   SAVE LAST END POINTER.
      ISZ .NXTE 
RTAB2 JPY RTAB3       YES--JUMP TO COMMAND ROUTINE
RTAB3 EQU *-1 
      JMP HECMD     ?? (HELP) COMMAND ROUTINE 
      JMP EXCMD     EXIT COMMAND ROUTINE
      JMP FOCMD     FORMAT COMMAND ROUTINE
      JMP LICMD     LIST COMMAND ROUTINE
      JMP PRCMD     PRINT COMMAND ROUTINE 
      JMP SECMD     SET COMMAND ROUTINE 
      SPC 3 
* 
*  HERE WHEN 0-LENGTH RECORD IS READ. BUMP COUNTER (INITIALIZED TO -6). 
*   WHEN IT ROLLS OVER, TERMINATE THE PROGRAM.
* 
LEN0  ISZ L0CNT 
      JMP COMD1 
      JMP EXCMD 
      SPC 5 
* 
*  DATA AREA FOR COMMAND PARSING
* 
CMTB  ASC 12,SETPRINTLISTFORMATEXIT?? 
.CMTB DBL CMTB
*  COMMAND LENGTHS (BYTES) IN REVERSE ORDER-- 
.CLEN DEF * 
D2    DEC 2 
      DEC 4 
      DEC 6 
      DEC 4 
D5    DEC 5 
D3    DEC 3 
* 
L0CNT NOP 
CMSAV NOP 
.CMLN DBL INBUF 
BCNT  NOP 
FICNT NOP 
RECNO NOP 
"?"   ASC 4,/TRC3K:_  * 
      SPC 3 
* 
*  ERRORS-- 
* 
PMERR JSB ERMSG     REPORT
      DEF PMER       PARAMETER
      DEC 17          ERROR.
      JMP COMMD     GET NEXT COMMAND. 
PMER  ASC 17,** ILLEGAL OR MISSING PARAMETER ** 
* 
CMERR JSB ERMSG     REPORT
      DEF CMER       ILLEGAL
      DEC 11          COMMAND.
      JMP COMMD     GET NEXT ONE. 
CMER  ASC 11,** ILLEGAL COMMAND **
      SKP 
* 
*  ROUTINE TO FIND NEXT BLANK, COMMA, OR EQUAL SIGN IN STRING 
*    ON ENTRY:
*       A->STRING   (BYTE ADDRESS)
*       BCNT = -(# CHARACTERS IN STRING)
*    ON EXIT: 
*       A->NEXT BLANK, COMMA, OR EQUAL SIGN (IF ANY) IN STRING
*       RETURN POINTS = 
*              IBLNK,I  IF NO BLANKS, COMMAS, OR EQUAL SIGNS
*              IBLNK,I+1  IF BLANK OR COMMA FOUND 
* 
IBLNK NOP 
IBL1  LDB .BLNK     GET ADDRESS OF CHAR. BLANK
      CBT D1        COMPARE BYTE
      JMP IBL3      EQ--RETURN+1
      JMP IBL2      LT--CONTINUE SEARCH 
      LDB .COMA     GT--SEE IF COMMA
      CBT D1
      JMP IBL3      EQ--RETURN+1
      JMP IBL2      LT--CONTINUE SEARCH 
      LDB .EQSN     GT--SEE IF AN EQUAL SIGN
      CBT D1
      JMP IBL3      EQ--RETURN+1
      NOP           LT, OR GT,--CONTINUE SEARCH 
IBL2  INA           GET NEXT CHAR. IN STRING
      ISZ BCNT      DECREMENT LENGTH
      JMP IBL1
      JMP IBLNK,I   END-OF-STRING--RETURN 
IBL3  ADA DN1 
      ISZ IBLNK     INCREMENT RETURN
      JMP IBLNK,I     POINT AND RETURN
      SPC 2 
* 
*  ROUTINE TO FIND NEXT CHARACTER THAT IS NOT A BLANK, COMMA, OR
*  EQUAL SIGN 
*    ON ENTRY:
*       A->STRING   (BYTE ADDRESS)
*       BCNT = -(# CHARACTERS IN STRING)
*    ON EXIT: 
*       A->CHAR. OTHER THAN BLANK, COMMA, OR EQUAL SIGN (IF FOUND)
*       RETURN POINTS = 
*              NBLNK,I  IF ALL BLANK(S), COMMA(S), OR EQUAL SIGN(S) 
*              NBLNK,I+1  IF CHARACTER LT A BLANK 
*                          OR LT A COMMA AND GT A BLANK 
*              NBLNK,I+2  IF CHARACTER GT A COMMA 
* 
NBLNK NOP 
NBL1  LDB .BLNK     GET BLANK CHAR. ADDRESS 
      CBT D1        DO COMPARISON 
      JMP NBL2      EQ--TRY NEXT
      JMP NBL4      LT--RETURN+1
      LDB .COMA     GT--SEE IF A COMMA
      CBT D1
      JMP NBL2      EQ--TRY NEXT
      JMP NBL4      LT--RETURN+1
      LDB .EQSN     GT--SEE IF AN EQUAL SIGN
      CBT D1
      JMP NBL2      EQ--TRY NEXT
      NOP 
      JMP NBL3      LT, OR GT,--RETURN+2
NBL2  ISZ BCNT      DECREMENT STRING LENGTH 
      JMP NBL1      AND CONTINUE SEARCH 
      JMP NBLNK,I   END OF STRING--RETURN 
NBL3  ISZ NBLNK     RETURN+2
NBL4  ISZ NBLNK     RETURN+1
      JMP NBLNK,I 
      SPC 2 
* 
*  ROUTINE TO SEARCH FOR COMMAND OR KEYWORD IN TABLE
*   ON ENTRY: 
*      A->BYTE IN STRING FOR COMPARISON 
*      B->COMMAND OR KEYWORD TABLE
*      TBLN->COMMAND OR KEYWORD LENGTHS TABLE 
*      Y=# OF COMMANDS OR KEYWORDS IN TABLE 
*   ON EXIT:
*      A->LAST CHARACTER IN STRING COMPARED 
*      Y=INDEX FOR COMMAND, IF FOUND, ELSE 0
*      RETURN POINTS =
*             SERCH,I  IF WORD IN STRING DOES NOT MATCH A COMMAND 
*                          OR KEYWORD 
*             SERCH,I+1  IF MATCH FOUND 
* 
SERCH NOP 
SRCH1 STA VALUE 
      STB SESCR     SAVE COMMAND TABLE ADDRESS TEMPORARILY
      LBY TBLN,I    GET LENGTH FOR COMPARISON 
      STB CMPLN 
      LDB SESCR     PICK BACK UP THE TABLE ADDRESS
      CBT CMPLN     DO COMPARISON 
      JMP SRCH2     SAME--RETURN+1
      NOP           LT--AN ABBREVIATION?
      STB SESCR     SAVE PLACE IN COMMAND TABLE TEMPORARILY 
      LDB .BLNK     GET BYTE ADDRESS OF CHAR. BLANK 
      CBT D1        COMPARE BLANK AND BYTE IN COMMAND STRING
      JMP SRCH2       EQ--AN ABBREVIATION, RETURN+1 
      JMP SERCH,I     LT--ILLEGAL CHAR., ERROR RETURN 
      LDB .COMA       GT--SEE IF CHAR. A COMMA
      CBT D1
      JMP SRCH2         EQ--AN ABBREVIATION 
      JMP SERCH,I       LT--ILLEGAL CHAR, ERROR RETURN
      LDB .EQSN         GT--SEE IF CHAR. AN EQUAL SIGN
      CBT D1
      JMP SRCH2           EQ--AN ABBREVIATION 
      JMP SERCH,I         LT--ILLEGAL CHAR, ERROR RETURN
      DSY                 GT--CHECK NEXT CMMD OR KEYWORD
      RSS                    IN TABLE IF ANY LEFT 
      JMP SERCH,I   NO MORE, ERROR RETURN 
      LDA VALUE 
      LDB SESCR 
      JMP SRCH1     ELSE, TRY AGAIN 
SRCH2 ISZ SERCH 
      JMP SERCH,I 
      SPC 2 
CHARS ASC 2,  ,=
BLANK EQU CHARS 
.BLNK DBL CHARS 
.COMA DBL CHARS+1 
.EQSN DBR CHARS+1 
CMPLN NOP 
TBLN  NOP 
VALUE NOP 
SESCR NOP 
      SKP 
* 
*  ?? (HELP) COMMAND ROUTINE
* 
HECMD EQU * 
      LDA TRCOT     IF TRACE OUTPUT 
      SSA,RSS        IS NOT INTERACTIVE,
      JMP COMMD        SKIP COMMAND.
      JSB PRINT     PRINT 
      DEF CMLST      COMMAND
      ABS CMLND-CMLST LIST. 
      JMP COMMD     RETURN TO PROMPT. 
* 
CMLST ASC 14, COMMAND        DESCRIPTION
      BYT 15,12 
      ASC 15,  ??         DISPLAY COMMANDS
      BYT 15,12 
      ASC 11,  EXIT       END TRC3K 
      BYT 15,12 
      ASC 19,  FORMAT     SET OUTPUT LISTING FORMAT 
      BYT 15,12 
      ASC 12,  LIST       SET LISTING 
      BYT 15,12 
      ASC 18,  PRINT      PRINT SELECTED BUFFERS
      BYT 15,12 
      ASC 20,  SET        LIMIT RECORDS TO BE PRINTED 
      BYT 15,12 
CMLND EQU * 
      SKP 
* 
*  PRINT COMMAND ROUTINE
* 
PRCMD EQU * 
      LDA .PTAB     ANY PARAMETER GIVEN?
      CPA .NEXT 
      JMP PRNXT     NO--DEFAULT TO NEXT.
      LDB .PRLN     CHECK KEYWORD.
      STB TBLN
      LDY D3
      LDB .PRKY 
      LDA A,I 
      JSB SERCH 
       JMP PMERR
      LDA .PTAB     ONLY PARAMETER GIVEN? 
      INA 
      CPA .NEXT 
      JPY PRTAB     YES. GO DO IT.
      JMP PMERR     NO. ERROR.
* 
PRTAB EQU *-1 
      JMP PRNXT 
      JMP PRFIR 
      JMP PRALL 
* 
*  PRINT FIRST RECORD 
PRFIR JSB RWTRI     POSITION TO FIRST RECORD. 
* 
PRNXT JSB PBUFR     PRINT NEXT QUALIFYING BUFFER. 
      JMP NOQAL     EOF: PRINT WARNING. 
      JMP COMMD 
* 
NOQAL JSB PRINT     PRINT THE 
      DEF QALMS      "NONE QUALIFIED" 
      DEC 10          WARNING.
      JMP COMMD     GET NEXT COMMAND. 
QALMS ASC 10,** NONE QUALIFIED ** 
* 
PRALL JSB RWTRI     REWIND FILE TO START RECORD.
      JSB PBUFR     PRINT NEXT QUALIFYING BUFFER. 
       JMP COMMD    NO MORE--END OF COMMAND 
      JMP PRALL+1   GET NEXT BUFFER.
      SPC 2 
PRKEY ASC 6,ALLFIRSTNEXT
.PRKY DBL PRKEY 
.PRLN DEF * 
      DEC 4 
      DEC 5 
      DEC 3 
      SKP 
*  SUBROUTINE TO POSITION TRACE INPUT TO STARTING RECORD. 
*     CALLING SEQUENCE: JSB RWTRI 
* 
RWTRI NOP           ENTRY.
      LDA !SREC     GET STARTING RECORD.
      SZA           IF ZERO 
      SSA            OR NEGATIVE, 
      CLA,INA          USE 1. 
      STA DRECN     STORE FOR POSITIONING.
* 
      LDA RECNO     CALCULATE DIFFERENCE
      CMA,INA        BETWEEN CURRENT
      ADA DRECN       POSITION AND
      STA CNTR         DESTINATION. 
      SZA,RSS       IF CURRENTLY THERE, 
      JMP RWTRI,I    RETURN.
* 
      LDB TRCIN     IF TRACE INPUT
      CPB "FI"       IS FROM A FILE,
      JMP RWFIL       GO POSITION IT. 
* 
      LDA TRCIN     SET UP EXEC 
      AND B77        CONTROL WORD 
      IOR STCOD       FOR I/O STATUS. 
      STA STWRD 
* 
      SSA           IF COUNTER < 0, 
      JMP BSPAC       IT'S A BACKWARD SPACE.
* 
      CMA,INA       MAKE COUNTER
      STA CNTR       NEGATIVE.
      LDA TRCIN+1   SET UP
      AND B77        CONWD FOR
      IOR FSCOD       FORWARD SPACE.
      STA CONWD 
* 
SPCMT JSB EXEC      FORWARD/BACKWARD
      DEF *+3        SPACE
      DEF SD3         ONE 
      DEF CONWD        RECORD.
      JMP TIER      ERROR.
      JSB EXEC      CHECK FOR 
      DEF *+3        DYNAMIC
      DEF SD3         STATUS
      DEF STWRD        EOF. 
      JMP TIER
      AND B240
      SZA 
      JMP EOFER     EOF--WARN USER. 
      ISZ CNTR      BUMP COUNTER. 
      JMP SPCMT     STAY IN LOOP UNTIL DONE.
      JMP RWRTN     GO TO RETURN. 
* 
BSPAC LDA TRCIN+1   SET UP
      AND B77        CONWD FOR
      IOR BSCOD       BACKSPACE.
      STA CONWD 
      JMP SPCMT     GO POSITION IT. 
* 
*  WARN USER OF END-OF-FILE 
ENDOF ASC 9,** END OF FILE ** 
EOFER JSB ERMSG 
      DEF ENDOF 
      DEC 9 
      RSS           PRINT RECORD NUMBER.
* 
*  REPORT ERROR POSITIONING TRACE INPUT FROM LU.
TIER  JSB RTERR     PRINT A- & B-REG. 
      LDA DRECN     CALCULATE 
      ADA CNTR       ACTUAL RECORD
      STA RECNO       NUMBER. 
      JSB CNUMD     CONVERT 
      DEF *+3        TO 
      DEF RECNO       ASCII 
      DEF FRMCP+3      (DECIMAL). 
      JSB ERMSG     PRINT.
      DEF FRMCP 
      DEC 6 
      JMP RWTRI,I   RETURN. 
* 
* 
RWFIL JSB POSNT     POSITION FILE.
      DEF *+4 
      DEF TRCIN+1 
      DEF ERROR 
      DEF CNTR
      LDA ERROR     IF ERROR, 
      SSA,RSS 
      JMP RWRTN 
      LDB @TRCI       POINT TO TRACE INPUT
      STB NAME
      JSB FILER        AND REPORT ERROR.
      JSB RWNDF     REWIND
      DEF *+2        TRACE INPUT. 
      DEF TRCIN+1 
      CLA,INA       SET RECORD
      STA RECNO      NUMBER = 1.
      CCA           SET STARTING
      STA !SREC      REC TO DEFAULT.
      JMP RWTRI,I   RETURN. 
* 
RWRTN LDA DRECN     SET RECORD
      STA RECNO      NUMBER.
      JMP RWTRI,I   RETURN. 
DRECN NOP 
CONWD NOP 
STWRD NOP 
FSCOD OCT 300       FORWARD SPACE CODE FOR EXEC.
BSCOD OCT 200       BACKSPACE CODE FOR EXEC.
STCOD OCT 600       DYNAMIC STATUS CODE FOR EXEC. 
CNTR  NOP 
SD3   DEF 3,I 
B77   OCT 77
B240  OCT 240 
      SKP 
* 
*  FORMAT COMMAND ROUTINE 
* 
FOCMD EQU * 
      LDA .PTAB     GET PARAMETER POINTER.
      CPA .NEXT     NONE? 
      JMP FODEF     USE DEFAULT.
      LDB FICNT     MAKE SURE 
      ADB DN3        ONLY TWO 
      SSB,RSS         PARAMETERS
      JMP PMERR        WERE GIVEN.
* 
      LDA A,I 
      LDB .FOLN 
      STB TBLN
      LDY D4
      LDB .FOKY 
      JSB SERCH     SEARCH FOR FORMAT TYPE. 
       JMP PMERR     (ERROR.) 
      JPY FOTAB     SET OPTION BIT. 
OPT2  LDA .PTAB     IF ONLY ONE 
      INA            OPTION 
      CPA .NEXT       PROVIDED, 
      JMP COMMD         DONE. 
*  CHECK OUT SECOND PARAMETER (MUST BE DRIVER). 
      LDA A,I       POINT TO 2ND PARAMETER. 
      LDY D4
      LDB .FOKY 
      JSB SERCH     SEARCH. 
       JMP PMERR     NOT FOUND--ERROR.
      CYA           IF NOT
      CPA D3         THIRD IN 
      RSS             TABLE,
      JMP PMERR         ERROR.
      LDA PRFLG     ADD DRIVER
      IOR DRVFG      FLAG TO
      STA PRFLG       PRINT OPTIONS.
      JMP COMMD     GET NEXT COMMAND. 
FOTAB EQU *-1 
      JMP FOAPP 
      JMP FODAT 
      JMP FODRV 
      JMP FOHED 
* 
FOAPP LDA APPFG     SET APPENDAGE BITS
      STA PRFLG 
      JMP OPT2
* 
FODAT LDA DATFG     SET DATA BITS 
      STA PRFLG 
      JMP OPT2
* 
FODRV LDA DRVFG     SET DRIVER BIT
      STA PRFLG 
      JMP OPT2
* 
FOHED LDA HEDFG     SET HEADING BIT 
      STA PRFLG 
      JMP OPT2
* 
FODEF LDA DEFFG     DEFAULT--SET HEADING AND DRIVER BITS
      STA PRFLG 
      JMP COMMD 
      SPC 2 
FOKEY ASC 13,HEADERDRIVERDATAAPPENDAGE
.FOKY DBL FOKEY 
.FOLN DEF * 
      DEC 9 
      DEC 4 
      DEC 6 
      DEC 6 
*  FLAGS FOR TYPE OF PRINTING:
HEDFG OCT 1 
APPFG OCT 3 
DATFG OCT 7 
DRVFG OCT 10
DEFFG OCT 11
*  BIT POSITIONS: 
HEBIT EQU HEDFG 
APBIT OCT 2 
DABIT OCT 4 
DRBIT EQU DRVFG 
PRFLG NOP           LISTING FLAG
      SKP 
* 
*  LIST COMMAND ROUTINE 
* 
LICMD LDA FICNT     MAKE SURE 
      CPA D1         ONLY ONE PARAMETER 
      RSS             WAS PROVIDED. 
      JMP PMERR 
* CALCULATE COLUMN NUMBER OF PARAMETER. 
      LDA .CMLN     SUBTRACE BYTE ADDRESS 
      CMA,INA        OF COMMAND START FROM
      ADA PTAB        PARAMETER POSITION. 
      INA              ADD 1 AND SAVE AS
      STA PNTR          NAMR POINTER. 
      LDA @TRCO     CALL NAMR 
      STA NAME       FOR PARSE INTO 
      JSB PNAMR       TRACE OUTPUT AREA.
      JSB OPNTO     OPEN IT UP. 
* 
      JMP COMMD     GET NEXT COMMAND. 
      SKP 
* 
*  SET COMMAND ROUTINE
* 
SECMD LDA .PTAB     GET POINTER TO KEYWORD ADDRESS
      CPA .NEXT     WAS IT SPECIFIED? 
      JMP CUOPT       NO--PRINT CURRENT OPTIONS.
      STA SETAB       YES--SAVE ADDRESS FOR LATER 
      LDB FICNT 
      CPB D1        IF ONE PARAM, 
      JMP CHK@       CHECK FOR "@". 
      SLB           EVEN NUMBER OF PARAMETERS?
      JMP PMERR        NO--ERROR. 
* 
      LDA .ETAB     SET 
      INA            LOCAL
      STA ENPTR       END POINTER.
      CLE,ERB       SET UP NEG. 
      CMB,INB        COUNTER FOR
      STB PCNTR       VALUES. 
* 
SLOOP LDA SETAB,I   GET:  KEYWORD ADDRESS,
      LDY D5            # OF LEGAL KEYWORDS,
      LDB .SKYL         ADDR OF KEYWORD LENGTHS TABLE,
      STB TBLN          AND 
      LDB .SKEY         ADDR OF KEYWORD TABLE 
      JSB SERCH     DO COMPARISON OF KEYWORDS 
       JMP PMERR      NO MATCH--INFORM USER OF ERROR
* 
      STY CMDNO     SAVE COMMAND NUMBER.
      ISZ SETAB 
      LDA .CMLN     CALCULATE START 
      CMA,INA        COLUMN OF
      ADA SETAB,I     VALUE.
      INA 
      STA PNTR      STORE NAMR'S PNTR.
      ISZ ENPTR 
      LDA .CMLN     CALCULATE LAST
      CMA,INA        COLUMN OF
      ADA ENPTR,I     VALUE.
      INA 
      STA INLEN     STORE LENGTH. 
      LDA @PARM     CALL NAMR 
      STA NAME       FOR PARSE
      JSB PNAMR       INTO "PARM".
      CPA "@"       IF "@" SPECIFIED, 
      JMP USDEF      USE THE DEFAULT. 
      SSA           IF NEGATIVE,
      JMP PMERR      ERROR! 
      LDY CMDNO     IS VALUE
      JPY CHKTB      IN BOUNDS? 
* 
USDEF CCA,RSS       SET TO -1 TO DEFAULT. 
CKRTN LDA PARM      WITHIN BOUNDS-- 
      SAY !VALU      STORE VALUE. 
      LDA CMDNO     IF STARTING RECORD
      CPA D4         WAS RESET, 
      JSB RWTRI        REWIND TRACE INPUT.
      ISZ SETAB     BUMP
      ISZ ENPTR      POINTERS.
      ISZ PCNTR     MORE? 
      JMP SLOOP       YES! STAY IN LOOP.
      JMP COMMD       NO--GET NEXT COMMAND. 
* 
*  ROUTINES TO CHECK WHETHER VALUES ARE WITHIN BOUNDS.
* 
*  CHECK MESSAGE CLASS
CCLAS ADA DN9       IF CLASS IS 
      SSA,RSS        < 8, 
      JMP PMERR        ERROR! 
      JMP CKRTN 
* 
*  CHECK ENDING RECORD
CEREC LDB !SREC     IF STARTING REC 
      SSB            NOT SPECIFIED, 
      JMP CKRTN        OK.
      CMB,INB       SUBTRACT END
      ADA B          FROM START.
      SSA           IF < 0, 
      JMP PMERR      ERROR. 
      JMP CKRTN 
* 
*  CHECK RTE NUMBER 
CRTE# AND HB377     IF > 255, 
      SZA 
      JMP PMERR       ERROR.
      JMP CKRTN 
* 
*  CHECK STARTING RECORD
CSREC LDB !EREC     IF ENDING REC 
      SSB            NOT SPECIFIED, 
      JMP CKRTN        OK.
      CMA,INA       SUBTRACT START
      ADA B          FROM END.
      SSA           IF < 0, 
      JMP PMERR      ERROR. 
      JMP CKRTN 
* 
*  CHECK STREAM 
CSTRM ADA DN4       CONVERT FROM
      STA NAME,I     DECIMAL TO OCTAL.
      ADA BN20      IF < OCTAL 20,
      SSA 
      JMP PMERR       ERROR.
      ADA BN10      IF > OCTAL 27,
      SSA,RSS 
      JMP PMERR       ERROR.
      JMP CKRTN 
* 
*  TABLE OF PARAMETER CHECK ROUTINES
CHKTB EQU *-1 
      JMP CCLAS 
      JMP CEREC 
      JMP CRTE# 
      JMP CSREC 
      JMP CSTRM 
* 
* 
*  ONE PARAMETER GIVEN. IF "@", RESET ALL.
CHK@  LDA .CMLN     CALCULATE START 
      CMA,INA        COLUMN OF
      ADA .PTAB,I     PARAMETER.
      INA 
      STA PNTR      STORE NAMR'S PNTR.
      LDA @PARM     CALL NAMR 
      STA NAME       FOR PARSE
      JSB PNAMR       INTO "PARM".
      CPA "@"       IF "@" SPECIFIED, 
      JMP RESTO      GO RESET ALL.
      JMP PMERR     OTHERWISE, ERROR. 
* 
* 
*  NO PARAMETER GIVEN. PRINT CURRENT OPTIONS. 
CUOPT LDA !CLAS     CONVERT CLASS.
      SSA           IF NEGATIVE,
      JMP NCLS       USE "@". 
      JSB CNUMO     CONVERT TO
      DEF *+3        ASCII OCTAL. 
      DEF !CLAS 
      DEF ASCII 
      DLD ASCII+1 
STCLS DST OCLAS 
* 
      LDA !STRM     CONVERT STREAM. 
      SSA 
      JMP NSTM
      AND D7
      IOR "20"
STSTM STA OSTRM 
* 
      LDA !RTE#     CONVERT RTE NUMBER. 
      SSA 
      JMP NRT#
      JSB CNUMD 
      DEF *+3 
      DEF !RTE# 
      DEF ASCII 
      DLD ASCII+1 
STRT# DST ORTE# 
* 
      LDA !SREC     CONVERT STARTING RECORD.
      SSA 
      JMP NSRC
      JSB CNUMD 
      DEF *+3 
      DEF !SREC 
      DEF OSREC 
* 
TSTER LDA !EREC     CONVERT ENDING RECORD.
      SSA 
      JMP NERC
      JSB CNUMD 
      DEF *+3 
      DEF !EREC 
      DEF OEREC 
* 
PROPT JSB PRINT     PRINT 
      DEF OPTNS      THE
      ABS OPEND-OPTNS OPTIONS.
      JMP COMMD     GET NEXT COMMAND. 
* 
*  USE "@" WHEN CLASS, STREAM, OR RTE# NOT PROVIDED...
NCLS  LDB "@" 
      LDA BLANK 
      JMP STCLS 
NSTM  LDA "@" 
      JMP STSTM 
NRT#  LDB "@" 
      LDA BLANK 
      JMP STRT# 
NSRC  JSB .DFER 
      DEF OSREC 
      DEF "FRST 
      JMP TSTER 
"FRST ASC 3, FIRST
NERC  JSB .DFER 
      DEF OEREC 
      DEF "LAST 
      JMP PROPT 
"LAST ASC 3, LAST 
* 
OPTNS ASC 3,CLASS=
OCLAS ASC 7,XXXX  STREAM= 
OSTRM ASC 6,XX  RTE NO.=
ORTE# ASC 7,XXXX  RECORDS 
OSREC ASC 5,XXXXXX TO 
OEREC ASC 3,XXXXXX
OPEND EQU * 
* 
SETAB NOP 
*  OPTIONS: 
!VALU EQU *-1 
!CLAS NOP           DS/3000 MESSAGE CLASS.
!EREC NOP           ENDING RECORD.
!RTE# NOP           RTE PROCESS NUMBER. 
!SREC NOP           STARTING RECORD.
!STRM NOP           DS/3000 MESSAGE STREAM. 
SKEYT ASC 15,STREAMSTARTRECRTENOENDRECCLASS 
.SKEY DBL SKEYT 
.SKYL DEF * 
      DEC 5 
      DEC 6 
      DEC 5 
      DEC 8 
      DEC 6 
* 
@PARM DEF PARM
PARM  BSS 10
"@"   ASC 1,@ 
"20"  ASC 1,20
CMDNO NOP           COMMAND NUMBER
PCNTR NOP           PARAMETER COUNTER 
ENPTR NOP           END TABLE POINTER 
      SKP 
      SKP 
**  EXIT COMMAND  **
EXCMD JSB CLOSE     CLOSE ALL FILES.
      DEF *+2 
      DEF CMDIN+1 
      JSB CLOSE 
      DEF *+2 
      DEF TRCIN+1 
      JSB CLOSE 
      DEF *+2 
      DEF TRCOT+1 
* 
      JSB EXEC      TERMINATE.
      DEF *+2 
      DEF D6
      SPC 2 
HEAD1 ASC 10, 
      ASC 15,***** DS/1000-3000 TRACE ***** 
      SPC 4 
* SUBROUTINE TO CHECK WHETHER USER WANTS TO "BREAK" 
*     CALLING SEQUENCE: JSB BRCHK 
*                       <GOES TO COMMD IF TRUE> 
* 
BRCHK NOP           ENTRY.
      JSB IFBRK     IF BREAK
      DEF *+1        FLAG IS
      SSA,RSS         SET,
      JMP BRCHK,I 
* 
      JSB READ      ASK:
      DEF CONT?      CONTINUE?
      DEC 5 
      LDA INBUF     GET RESPONSE. 
      CPA "NO"      IF NO,
      JMP COMMD      GET NEXT COMMAND.
* 
      JMP BRCHK,I   OTHERWISE, RETURN.
* 
CONT? ASC 5,CONTINUE?_* 
      SKP 
**  SUBROUTINE TO PRINT NEXT QUALIFYING BUFFER  **
PBUFR NOP           ENTRY.
RDREC JSB BRCHK     CHECK FOR USER'S BREAK. 
      LDA !EREC     ENDING RECORD 
      SSA            SPECIFIED? 
      JMP DOGET        NO--GET RECORD.
      INA 
      CMA,INA 
      ADA RECNO     CURRENT RECORD
      CMA,SSA        < ENDING?
      JMP PBUFR,I      NO--EOF RETURN.
* 
DOGET JSB GETRC     READ A TRACE RECORD.
      SZB           IF LENGTH IS
      SSB            <= 0,
      JMP PBUFR,I      TAKE EOF RETURN. 
* 
      LDB INBUF     GET FIRST WORD. 
      SSB,RSS       IF >= 0,
      JMP RQRP        REQUEST OR REPLY. 
      LDA PRFLG     IS DRIVER BIT 
      AND DRBIT      SET IN PRINT 
      SZA,RSS         FLAG? 
      JMP RDREC         NO--READ AGAIN. 
      CPB DN1       -1? 
      JMP EVTRC       YES--EVENT TRACE. 
      CPB DN2       -2? 
      JMP LTSTS       YES--LONG TERM STATS. 
      SPC 1 
*  REPORT BAD TRACE FILE
LGFER JSB ERMSG     PRINT MESSAGE.
      DEF BADLG 
      DEC 12
      JMP EXCMD     TERMINATE.
* 
BADLG ASC 12,** BAD LOGGING RECORD ** 
      SPC 2 
* PRINT LONG TERM STATISTICS
* 
LTSTS JSB PRINT     PRINT 
      DEF BLANK      BLANK
      DEC 1           LINE. 
* 
      CCA 
      ADA RECNO 
      STA TEMP
      JSB CNUMD     PUT RECORD
      DEF *+3        NUMBER IN
      DEF TEMP        HEADING.
      DEF SHEAD+3 
      JSB PRINT     PRINT 
      DEF SHEAD      HEADING. 
      DEC 20
      LDA DN11      SET UP COUNTER
      STA CNT1       FOR 11 LINES.
      LDA @WRD2     INITIALIZE
      ADA DN1 
      STA VPNT       VALUE POINTER. 
      LDA MSGTB     INITIALIZE
      STA MPNT       MESSAGE POINTER. 
      LDA D14       SET OUTPUT
      STA BUMP       BUMP TO 14.
* 
LOOPA LDA AW3       SET OUTPUT
      STA OPNTR      POINTER. 
      LDA BLANK     CLEAR 
      JSB FILL       BUFFER.
* 
LOOPB ISZ VPNT      BUMP STAT POINTER.
      LDA MPNT,I    GET # OF
      STA CNT2       CHARACTERS.
      ISZ MPNT
      LDA MPNT      MESSAGE SOURCE ADDR.
      LDB OPNTR     MESSAGE DESTINATION FIELD.
      ADB D3
      MVW CNT2      MOVE MESSAGE. 
      STA MPNT      POINT TO NEXT MESSAGE.
      LDB VPNT,I    CONVERT THE 
      JSB TO10       VALUE. 
      ISZ CNT1      LAST MESSAGE? 
      RSS 
      JMP LPRNT        YES--GO DO LAST PRINT. 
      LDA OPNTR     IF PRINTLINE
      CPA AW17       NOT FULL,
      JMP LOOPB       MOVE 2ND MESSAGE. 
* 
      JSB PRINT     PRINT 
      DEF BUFR       MESSAGES.
      DEC 30
      JMP LOOPA       NO--STAY IN LOOP. 
      SPC 1 
LPRNT JSB PRINT     PRINT 
      DEF BUFR       FINAL
D14   DEC 14          STATISTIC.
* 
      JSB PRINT     PRINT 
      DEF BLANK      BLANK
      DEC 1           LINE. 
* 
      JMP GDRTN     TAKE "GOOD" RETURN. 
      SKP 
* PRINT EVENT TRACE 
* 
EVTRC LDB D4        SET PRINT 
      STB BUMP       BUMP TO 4. 
* 
      LDB @WRD6     B:=FIRST ENTRY ADDRESS. 
      STB BPNTR 
      LDA @INBF     CALCULATE 
      ADA TRCLN      LAST ENTRY 
      STA @EOR        ADDRESS.
* 
      CCA 
      ADA RECNO 
      STA TEMP
      JSB CNUMD     PUT RECORD
      DEF *+3        NUMBER IN
      DEF TEMP        HEADING.
      DEF FRMCP+3 
      JSB PRINT     PRINT 
      DEF FRMCP      IT.
      DEC 6 
* 
LOOP  LDA BLANK     CLEAR 
      JSB FILL       PRINTLINE. 
      JSB NXTWD     PICK UP WORD 2. 
      STA WRD2
      CLB 
      LSL 8         B:=COMPLETION STATUS. 
      STB STATS 
      CLB 
      LSL 2         B:=REQUEST CODE.
      STB REQCD     STORE.
      CLB 
      LSL 6         B:=FUNCTION CODE. 
      STB FUNCD     STORE.
*      DECODE FUNCTION
      LDA REQCD     LOAD REQUEST CODE.
      CPA D1         IF = 1,
      JMP RDFUN        DECODE FOR READ. 
      CPA D2         IF = 2,
      JMP WRITE        DECODE FOR WRITE.
      CPA D3         IF = 3,
      JMP CNTRL        DECODE FOR CONTROL.
*      BAD FUNCTION 
BAD   LDB AW3       SET UP OUTPUT 
      STB OPNTR      POINTER. 
      LDB REQCD     CONVERT REQUEST 
      JSB TO8        CODE AND 
      LDB REQCD       FUNCTION TO 
      JSB TO8          OCTAL. 
      JMP WRD3      GO GET WORD 3.
* 
RDFUN LDA FUNCD     ** PROCESS READ FUNCTION ** 
      CPA D2        ONLY GOOD ONE 
      RSS             IS 2. 
      JMP BAD 
      DLD STA05+1   MOVE
      DST BUFR+7     "READ".
      LDA FUNCD 
      ADA @RTBL     GET TABLE ADDRESS.
      LDA A,I 
      LDB A,I       STORE 
      STB CNT1       LENGTH.
      INA           A-REG POINTS TO MESSAGE.
      LDB AW10      B-REG POINTS TO DESTINATION.
      MVW CNT1      MOVE MESSAGE. 
      JMP WRD3      GO GET WORD 3.
* 
WRITE LDA FUNCD     ** PROCESS WRITE FUNCTION **
      SZA,RSS       CHECK 
      JMP BAD        FOR
      CPA D7          BAD 
      JMP BAD          FUNCTION.
      LDB AW8       MOVE
      LDA @WRIT      "WRITE". 
      MVW D3
      LDA FUNCD     DON'T USE 
      AND D7         FUNCTION BITS 9-11.
      ADA @WTBL     GET TABLE ADDRESS.
      LDA A,I 
      LDB A,I       STORE 
      STB CNT1       LENGTH.
      INA           A-REG POINTS TO MESSAGE.
      LDB AW11      B-REG POINTS TO DESTINATION.
      MVW CNT1      MOVE MESSAGE. 
      JMP WRD3      GO GET WORD 3.
* 
CNTRL LDA FUNCD     ** PROCESS CONTROL FUNCTION **
      CPA D5        CHECK FOR 
      JMP BAD         BAD FUNCTION
      AND D7            AND 
      LDB D11            MAP
      CPA FUNCD           40-43 
      LDB D6               TO 
      ADA DN6               5-10. 
      SSA,RSS 
      JMP BAD 
      ADA B 
      ADA @CTBL     GET TABLE ADDRESS.
      LDA A,I 
      LDB A,I       STORE 
      STB CNT1       LENGTH.
      INA           A-REG POINTS TO MESSAGE.
      LDB AW8      B-REG POINTS TO DESTINATION. 
      MVW CNT1      MOVE MESSAGE. 
* 
WRD3  JSB NXTWD     PICK UP WORD 3. 
      CPA DN1         NEXT ENTRY? 
      JMP SPCAS         YES--SPECIAL CASE!
* 
LOOP2 CLB 
      LSL 8         B:=EVENT #. 
      STB EVENT     STORE.
      CLB 
      LSL 8         B:=STATE #. 
      STB STATE     STORE.
* 
      LDA EVENT     DECODE EVENT. 
      ADA DN33      CHECK 
      SSA,RSS        FOR
      JMP BADE        BAD 
      LDA EVENT        EVENT. 
      ADA @ETBL     GET TABLE ADDRESS.
      LDA A,I 
      LDB A,I       STORE 
      STB CNT1       LENGTH.
      INA           A-REG POINTS TO MESSAGE.
      LDB AW17      B-REG POINTS TO DESTINATION.
      MVW CNT1      MOVE MESSAGE. 
* 
DESTA LDA STATE     DECODE STATE. 
      ADA DN25      CHECK 
      SSA,RSS        FOR
      JMP BADS        BAD 
      LDA STATE        STATE. 
      ADA @STBL     GET TABLE ADDRESS.
      LDA A,I 
      LDB A,I       STORE 
      STB CNT1       LENGTH.
      INA           A-REG POINTS TO MESSAGE.
      LDB AW26      B-REG POINTS TO DESTINATION.
      MVW CNT1      MOVE MESSAGE. 
* 
PRTEV JSB PRINT     PRINT EVENT ENTRY.
      DEF BUFR
D33   DEC 33
      LDA BLANK 
      JSB FILL      FILL OUTPUT BUFFER WITH BLANKS. 
      JSB NXTWD     GET NEXT WORD.
      CPA DN1       DONE WITH THIS ENTRY? 
      JMP PRSTA         YES--PRINT STATUS INFORMATION.
      LDB AW18          NO--
      STB OPNTR         SET OUTPUT POINTER
      JMP LOOP2          AND PRINT THEM.
* 
*      SPECIAL CASE--NO EVENT/STATE WORDS 
SPCAS JSB PRINT     PRINT 
      DEF BUFR       FIRST WORD 
      DEC 15          INFO ONLY.
* 
PRSTA LDA STATS     GET STATUS. 
      CLB           CONVERT 
      RRR 3          TO 
      ALF,RAL         ASCII 
      RRL 3            (OCTAL). 
      IOR "00"
      STA STASC 
      LDA D18       STATUS MESSAGE
      STA STMLN      LENGTH = 12. 
      LDA STATS     IF STATUS IS
      ADA BN22       LESS THAN 22 (OCTAL) 
      SSA,RSS 
      JMP PSTAT 
      LDA STATS        MOVE STATUS MESSAGE. 
      ADA @STAT 
      LDA A,I 
      LDB A,I 
      STB TEMP
      ADB STMLN        SET STATUS MESSAGE LEN.
      STB STMLN 
      INA 
      LDB @STMS 
      MVW TEMP
PSTAT JSB PRINT     PRINT STATUS MESSAGE. 
      DEF STMSG 
STMLN NOP 
* 
      LDB BPNTR 
      CPB @EOR      LAST ENTRY IN RECORD? 
      RSS             YES!
      JMP LOOP       NO--LOOP AGAIN.
      SPC 1 
      JSB TMVAL     CONVERT 
      DEF *+3        TIME INTO
      DEF INBUF+1     INDIVIDUAL
      DEF CENTS        PARTS. 
* 
      JSB KCVT      CONVERT 
      DEF *+2        HOURS. 
      DEF HOURS 
      STA ASTIM 
* 
      JSB KCVT      CONVERT 
      DEF *+2        MINUTES. 
      DEF MINTS 
      IOR "00"
      LDB COLON 
      RRR 8 
      DST ASTIM+1 
* 
      JSB KCVT      CONVERT 
      DEF *+2        SECONDS. 
      DEF SECND 
      IOR "00"
      STA ASTIM+3 
* 
      JSB KCVT      CONVERT 
      DEF *+2        TENS OF
      DEF CENTS       MILLISECONDS. 
      IOR "00"
      LDB DOT 
      RRR 8 
      DST ASTIM+4 
* 
      LDA D16       TMLEN := 16.
      STA TMLEN 
      LDA WRD2      SET WRD2 TO 
      AND B377       CALL TYPE. 
      STA WRD2
      CPA RDINI     READ INITIAL? 
      JMP CNVRD       GO CONVERT READ LEN.
      CPA WRCON     WRITE CONVERSATIONAL? 
      JMP CNVRD       GO CONVERT READ LEN.
      JMP PRTIM     NEITHER--PRINT TIME.
* 
CNVRD LDA INBUF+4   CONVERT RECEIVE 
      SSA            LENGTH (WORDS).
      CLA,RSS         IF NEGATIVE, USE 0. 
      CLE,ERA 
      STA INBUF+4 
      JSB CNUMD 
      DEF *+3 
      DEF INBUF+4 
      DEF RCVLN 
      LDA D24       TMLEN := 24.
      STA TMLEN 
* 
      LDA WRD2      IF FUNCTION IS
      CPA RDINI      READ INITIAL,
      JMP PRTIM       GO PRINT. 
* 
      LDA INBUF+3   CONVERT 
      CMA,INA        SEND 
      CLE,ERA         LENGTH
      STA INBUF+3       (WORDS).
      JSB CNUMD 
      DEF *+3 
      DEF INBUF+3 
      DEF SNDLN 
      LDA D33       TMLEN = 33. 
      STA TMLEN 
* 
PRTIM JSB PRINT     PRINT 
      DEF TMLIN      INFORMATION. 
TMLEN NOP 
* 
      JMP GDRTN     TAKE "GOOD" RETURN. 
      SPC 3 
* VARIABLES USED IN EVENT TRACE 
* 
EVENT NOP 
STATE NOP 
REQCD NOP 
FUNCD NOP 
      SPC 2 
BADE  LDA AW17      BAD EVENT-- 
      STA OPNTR       CONVERT 
      LDB EVENT        TO 
      JSB TO10          DECIMAL.
      JMP DESTA 
      SPC 2 
BADS  LDA AW26      BAD STATE-- 
      STA OPNTR       CONVERT 
      LDB STATE        TO 
      JSB TO10          DECIMAL.
      JMP PRTEV 
      SPC 3 
TMLIN ASC 10,               TIME
ASTIM ASC 11,XX:XX:XX.XXX  RECV LEN 
RCVLN ASC 9,XXXXXX    SEND LEN
SNDLN ASC 3,XXXXXX
      SPC 1 
DOT   ASC 1, .
COLON ASC 1,::
      SPC 1 
* TIME ARRAY
CENTS NOP 
SECND NOP 
MINTS NOP 
HOURS NOP 
CDAY  NOP 
      SKP 
* VERIFY AUTHENTICITY OF AND PRINT REQUESTS AND REPLIES 
* 
**  SMALL SUBROUTINE TO PRINT RECORD HEADING  **
PBHED NOP           ENTRY.
      JSB PRINT     PRINT 
      DEF BLANK      BLANK
      DEC 1           LINE. 
* 
      LDB "30"      DETERMINE 
      LDA INBUF      WHETHER MESSAGE
      SZA,RSS          IS FROM
      LDB "10"          1000
      STB FRMCP+14       OR 3000. 
      CCA 
      ADA RECNO 
      STA TEMP
      JSB CNUMD     CONVERT 
      DEF *+3        RECORD 
      DEF TEMP        NUMBER. 
      DEF FRMCP+3 
      JSB PRINT     PRINT 
      DEF FRMCP      IT.
      DEC 17
      JMP PBHED,I   RETURN. 
* 
FRMCP ASC 17,RECORDXXXXXX,  MESSAGE FROM XX00:
      SPC 2 
* 
RQRP  LDA PRFLG     IF PRING FLAG 
      AND HEBIT      DOESN'T HAVE HEADING 
      SZA,RSS         BIT SET,
      JMP RDREC         READ NEXT RECORD. 
* 
      CPB D1        CHECK WORD 0: 
      JMP CKWD1       MUST BE 1 
      SZB              OR ZERO. 
      JMP LGFER       OTHERWISE, LOGGING FILE ERROR.
* 
CKWD1 LDA LNCLS     CHECK WORD 1: 
      SZA,RSS 
      JMP BADBF       ERROR IF ZERO.
      AND B377        ISOLATE MESSAGE CLASS.
      STA CLASS       SAVE IT.
      ADA DN9 
      SSA,RSS 
      JMP BADBF       ERROR IF MESSAGE CLASS > 8. 
* 
      LDA LNCLS       GET APPENDAGE LENGTH. 
      ALF,ALF 
      AND B377
      ADA DN8 
      STA APLEN 
* 
      LDA STMWD     CHECK WORD 3: 
      AND B377        ISOLATE STREAM TYPE.
      STA STREM       SAVE IT.
      ADA BN20
      SSA 
      JMP BADBF       ERROR IF < OCTAL 20.
      ADA BN10
      SSA,RSS 
      JMP BADBF       ERROR IF > OCTAL 27.
* 
      LDA FRMTO     GET WORD 4: 
      AND B377
      STA TO#         SAVE TO #.
      LDA FRMTO 
      ALF,ALF 
      AND B377
      STA FRM#        SAVE FROM #.
* 
      LDA DTLEN     CHECK WORD 8: 
      SSA 
      JMP BADBF       ERROR IF NEGATIVE.
* 
      LDB DTLEN 
      INB 
      CLE,ERB 
      ADB D8
      STB BUFL      SAVE WORD COUNT.
      INB 
      CMB,INB 
      LDA LNCLS 
      ALF,ALF 
      AND B377
      ADA B 
      SSA,RSS 
      JMP BADBF     ERROR.
* 
*  DO ALL THE OPTIONS MATCH?
      LDA !CLAS     CLASS 
      SSA,RSS 
      CPA CLASS 
      RSS 
      JMP RDREC 
      LDA !STRM     STREAM
      SSA,RSS 
      CPA STREM 
      RSS 
      JMP RDREC 
      LDB FRM#      RTE NUMBER
      LDA INBUF      (USE FROM # OR 
      SZA             TO # DEPENDING
      LDB TO#          UPON DIRECTION.) 
      LDA !RTE# 
      SSA,RSS 
      CPA B 
      RSS 
      JMP RDREC 
**  ALL SYSTEMS ARE GO! 
* 
      JSB PBHED     PRINT HEADING.
* 
*  CONVERT VALUES TO ASCII. 
      JSB CNUMO     STREAM. 
      DEF *+3 
      DEF STREM 
      DEF ASCII 
      LDA ASCII+2 
      STA PSTM# 
* 
      JSB CNUMD     CLASS.
      DEF *+3 
      DEF CLASS 
      DEF ASCII 
      DLD ASCII+1 
      RRL 8 
      DST PCLS# 
* 
      JSB CNUMD     FROM PROCESS #
      DEF *+3 
      DEF FRM#
      DEF ASCII 
      DLD ASCII+1 
      DST PFRM# 
* 
      JSB CNUMD     TO PROCESS #
      DEF *+3 
      DEF TO# 
      DEF ASCII 
      DLD ASCII+1 
      DST PTO#
* 
      JSB CNUMO     SEQUENCE #
      DEF *+3 
      DEF RTSQ# 
      DEF PSEQ# 
* 
      JSB CNUMD     TOTAL LENGTH. 
      DEF *+3 
      DEF BUFL
      DEF PTLEN 
* 
      JSB PRINT     PRINT INFORMATION.
      DEF MSHED 
      ABS MSEND-MSHED 
      SPC 1 
      LDA BLANK     FILL BUFFER 
      JSB FILL       WITH BLANKS. 
* 
      LDA CLASS     MERGE CLASS 
      ALF,ALF        AND STREAM.
      IOR STREM 
      STA CLSTR 
* 
      CPA POPCL     POPEN/PCLOSE/BREAK? 
      JMP C7S21      YES. SPECIAL CASE. 
* 
      LDA @CLST     A-REG CONTAINS ENTRY ADDRESS. 
SRLOP LDB A,I       GET CONTENTS. 
      CPB CLSTR     MATCH?
      JMP FOUND      YES! 
      INA           NO. BUMP POINTER AND
      JMP SRLOP      STAY IN SEARCH LOOP. 
* 
*  CLASS 7, STREAM 21 FOUND.
C7S21 LDB APLEN     GET APPENDAGE LENGTH. 
      LDA @PCLO     ASSUME PCLOSE.
      ADB DN7       GREATER THAN 6? 
      SSB,RSS         
      LDA @POPN       POPEN.
      CPB DN7       ZERO? 
      LDA @PCBR       COULD BE BREAK. 
      JMP MVLB      MOVE LABEL. 
* 
FOUND LDB @CLST     GET OFFSET INTO 
      CMB,INB        INTO ARRAY.
      ADA B 
      MPY D7        CALCULATE LABEL 
      ADA @LBLS      ADDRESS. 
MVLB  LDB AW3       MOVE LABEL TO 
      MVW D7         WORDS 3-9. 
* 
      LDA @REQ
      LDB STMWD     CHECK BIT 15 OF STREAM WD.
      SSB 
      LDA @REP
      LDB AW10
      MVW D3        MOVE "REQST" OR "REPLY".
* 
      LDA STMWD 
      AND BIT14     IF BIT 14 IS SET, 
      SZA,RSS 
      JMP CKB13 
      LDA @REJ
      LDB AW13
      MVW D4          MOVE "/REJECT". 
* 
CKB13 LDA STMWD 
      AND BIT13     IF BIT 13 IS SET, 
      SZA,RSS 
      JMP CKSUB 
      DLD CONT        MOVE "CONT".
      DST BUFR+16 
* 
*  CHECK TO SEE IF FURTHER BREAKDOWN OF CALL IS POSSIBLE. 
CKSUB LDA CLSTR     IF MESSAGE
      CPA INTCL      IS INITIALIZATION, 
      JMP MVBFL        MOVE BUFFER LENGTH.
      LDA STMWD     IF REPLY
      AND B140K      OR REJECT
      SZA             BIT IS SET, 
      JMP PRINF         GO PRINT. 
      LDA APLEN     IF APPENDAGE LEN
      SZA,RSS        IS ZERO, 
      JMP PRINF        GO PRINT.
      LDA CLSTR     GET CLASS/STREAM. 
      CPA C7S20     3000 RFA? 
      JMP RFA3K       YES.
      CPA C8S20     1000 RFA? 
      JMP RFA1K       YES.
      CPA C8S21     1000 DEXEC? 
      JMP DEX1K       YES.
      JMP PRINF     GO PRINT. 
* 
* INITIALIZATION REQUEST OR REPLY. CONVERT BUFFER SIZE. 
* 
MVBFL LDA IBFLN     GET BUFFER INDICATOR
      AND B377       FROM REQUEST/REPLY.
      INA           ADD 1 AND MULTIPLY
      MPY D16        BY 16 TO GET # WORDS.
      STA IBFLN     STORE BACK. 
      JSB CNUMD     CONVERT TO DECIMAL. 
      DEF *+3 
      DEF IBFLN 
      DEF BUFR+15 
      LDA @"BUF     MOVE MESSAGE
      LDB AW19       TO OUTPUT LINE.
      MVW D4
      JMP PRINF     PRINT INFORMATION.
* 
@"BUF DEF *+1 
      ASC 4, BUFFER 
* 
*  3000 REMOTE FILE ACCESS CALL 
RFA3K LDA RF3KW     GET SUBROUTINE INDICATOR. 
      SZA           ZERO OR 
      SSA            NEGATIVE?
      JMP PRINF        YES--GO PRINT. 
      ADA BN25      > OCTAL 25? 
      SSA,RSS          YES--GO PRINT. 
      JMP PRINF 
      LDA TRF3K     GET BASE ADDRESS. 
      ADA RF3KW     ADD INDEX 
      ADA RF3KW      THREE TIMES. 
      ADA RF3KW 
      JMP MVSUB     GO MOVE NAME. 
* 
*  1000 REMOTE FILE ACCESS CALL 
RFA1K LDA RF1KW     GET SUBROUTINE INDICATOR. 
      SSA           NEGATIVE? 
      JMP PRINF       YES--GO PRINT.
      ADA DN150     < DECIMAL 150?
      SSA 
      JMP PRINF       YES--GO PRINT.
      STA TEMP
      ADA DN13      > DECIMAL 162?
      SSA,RSS 
      JMP PRINF       YES--GO PRINT.
      LDA TRF1K     GET BASE ADDRESS. 
      ADA TEMP      ADD INDEX 
      ADA TEMP       THREE TIMES. 
      ADA TEMP
      JMP MVSUB     MOVE NAME AND PRINT.
* 
*  1000 DISTRIBUTED EXECUTIVE CALL
DEX1K LDA DX1KW     GET TYPE OF CALL. 
      STA B         SAVE. 
      SZA           ZERO OR 
      SSA            NEGATIVE?
      JMP PRINF        YES--GO PRINT. 
      ADA DN4       < 4?
      SSA 
      JMP EXOK        YES--IT'S OK. 
      ADA DN6       BETWEEN 3 AND 6?
      SSA 
      JMP PRINF       YES--GO PRINT.
      ADA DN4       > 13? 
      SSA,RSS 
      JMP PRINF       YES--GO PRINT.
      LDB DX1KW     MAP CODES 10-13 
      ADB DN6        TO 4-7.
EXOK  LDA TDX1K     GET BASE ADDRESS. 
      ADA B         ADD INDEX 
      ADA B          THREE TIMES. 
      ADA B 
MVSUB STA SADDR     STORE SOURCE ADDRESS. 
      JSB .DFER     MOVE SUBROUTINE NAME. 
      DEF BUFR+19 
SADDR DEF *-* 
* 
PRINF JSB PRINT     PRINT INFORMATION.
      DEF BUFR
      DEC 22
* 
*  DUMP HEADER IN OCTAL 
* 
      JSB PRINT     PRINT 
      DEF HDHED      "HEADER".
      DEC 3           
      LDA DN8       SET UP FOR
      STA NOBUF      8 WORDS
      LDA @WRD2       BEGINNING 
      STA PTBUF        AT HEADER. 
      JSB PTWDS     PRINT IT
* 
* 
*  THIS PORTION PRINTS THE APPENDAGE. 
* 
      LDA PRFLG     CHECK BITS IN PRFLG 
      AND APBIT     APPENDAGE BIT SET?
      SZA,RSS 
      JMP PBF20     NO--GET NEXT COMMAND. 
* 
      JSB CNUMD     CONVERT 
      DEF *+3        APPENDAGE
      DEF APLEN       LENGTH. 
      DEF APHED+8 
      JSB PRINT     PRINT 
      DEF APHED      APPENDAGE
      DEC 14          HEADER. 
      LDA APLEN     IF LENGTH 
      SZA,RSS        IS ZERO, 
      JMP PBF17        GO DO DATA.
      CMA,INA       STORE NEGATIVE
      STA NOBUF      LENGTH.
      ADA DN8       IS APPENDAGE
      ADA TRCLN      RECORDED?
      CMA,SSA,RSS 
      JMP PBF17        NO--GO DO DATA.
* 
      LDA @WRD2     POINT TO
      ADA D8         APPENDAGE
      STA PTBUF       IN BUFFER.
      JSB PTWDS     PRINT IT. 
* 
*  THIS PORTION PRINTS ANY DATA WITH THE BUFFER 
* 
PBF17 LDA PRFLG 
      AND DABIT     DATA BIT SET? 
      SZA,RSS 
      JMP PBF20       NO--RETURN. 
* 
      LDB APLEN     CALCULATE NUMBER OF 
      CLE,ELB        BYTES IN APPENDAGE.
      CMB,INB 
      LDA DTLEN     SUBTRACT FROM HEADER
      ADA B          WORD 8.
      SSA           IF NEGATIVE, IT'S 
      CLA            REALLY ZERO. 
      STA DABYT     SAVE # DATA BYTES.
      INA 
      CLE,ERA 
      STA DAWRD     SAVE # DATA WORDS.
* 
      JSB CNUMD     CONVERT 
      DEF *+3        DATA 
      DEF DABYT       LENGTH. 
      DEF DAHED+6 
      JSB PRINT     PRINT 
      DEF DAHED      DATA 
      DEC 12          HEADER. 
      LDA DAWRD     IF LENGTH IS 0, 
      SZA,RSS 
      JMP PBF20       DONE. 
      CCA 
      ADA TRCLN     CALCULATE # OF
      CMA,INA        DATA WORDS 
      ADA APLEN       ACTUALLY IN 
      ADA D8           BUFFER.
      STA NOBUF     SAVE NEG. WORD COUNT. 
      SSA,RSS       IF NONE,
      JMP PBF20       DONE. 
* 
      LDA @WRD2     POINT TO
      ADA D8         DATA 
      ADA APLEN       IN BUFFER.
      STA PTBUF 
      JSB PTWDS     PRINT IT. 
* 
PBF20 JSB PRINT     PRINT 
      DEF BLANK      BLANK
      DEC 1           LINE. 
GDRTN ISZ PBUFR     TAKE "GOOD" 
      JMP PBUFR,I    RETURN.
      SPC 2 
DABYT NOP 
DAWRD NOP 
HDHED ASC 3,HEADER
APHED ASC 14,APPENDAGE LENGTHXXXXXX WORDS 
DAHED ASC 12,DATA LENGTH XXXXXX BYTES 
      SPC 2 
* 
*  ROUTINE TO TAKE WORDS FROM THE BUFFER, TRANSLATE THEM TO 
*  ASCII OCTAL, AND PRINT THEM. 
*  ON ENTRY:
*     NOBUF = NEG. # OF WORDS IN BUFFER TO BE MOVED 
*     PTBUF = NEXT WORD IN BUFFER 
* 
PTWDS NOP 
      LDA NOBUF     ANY WORDS TO MOVE?
      SZA,RSS 
      JMP PTWDS,I     NO--RETURN. 
* 
      STA PTEM1     SAVE TEMP COUNTER.
      JSB BRCHK     CHECK FOR USER BREAK. 
      LDA PTBUF     SAVE TEMPORARY
      STA PTEM2      POINTER. 
      LDA DN8       SET COUNTER FOR 8 WORDS.
      STA PTEM3 
      LDA BLANK     FILL BUFFER 
      JSB FILL       WITH BLANKS. 
      LDA ASTK      STORE ASTERISK
      STA BUFR+28    AT WORD 29.
      LDA .BYT2     SET OUTPUT
      STA .OUTL      POINTER. 
PTW1  JSB CNUMO     CONVERT 
      DEF *+3        TO ASCII 
      DEF PTEM2,I     OCTAL.
      DEF ASCII 
      LDA ASCII     ADD 
      IOR "00"       LEADING
      STA ASCII       ZEROES
      LDA ASCII+1      TO 
      IOR "00"          ASCII 
      STA ASCII+1        OCTAL. 
      LDA ASCII+2 
      IOR "00"
      STA ASCII+2 
      LDB .OUTL     B-REG := DEST. ADDR.
      INB            (LEAVE LEADING BLANK)
      LDA .ASCI     SOURCE ADDR.
      MBT D6        MOVE NUMBER.
      STB .OUTL     SAVE DEST. ADDR.
      ISZ PTEM2     BUMP SOURCE POINTER.
* 
      ISZ PTEM1     ARE WE OUT OF WORDS?
      RSS 
      JMP PTW5        YES--BRANCH TO ADD ASCII. 
      ISZ PTEM3     DONE WITH 8 WORDS?
      JMP PTW1        NO--CONTINUE
* 
*  PREPARE THE ASCII SECTION. 
* 
PTW5  LDA DN8       SET UP COUNTER
      STA PTEM3      FOR 8 WORDS. 
      LDA AW30      SET UP POINTER INTO 
      STA .OUTL      ASCII AREA OF BUFFER.
PTW6  LDA PTBUF,I   GET NEXT WORD 
      ALF,ALF 
      JSB CHKAS     CHECK LEFT BYTE.
      STB PTEM4 
      LDA PTBUF,I 
      JSB CHKAS     CHECK RIGHT BYTE. 
      LDA PTEM4 
      ALF,ALF 
      IOR B         COMBINE BYTES.
      STA .OUTL,I   STORE IN ASCII AREA.
      ISZ .OUTL     BUMP POINTER. 
      ISZ PTBUF     BUMP SOURCE POINTER.
      ISZ NOBUF     OUT OF WORDS? 
      RSS 
      JMP PROCT       YES. PRINT. 
      ISZ PTEM3     DONE WITH 8 WORDS?
      JMP PTW6        NO--CONTINUE. 
* 
PROCT JSB PRINT     PRINT.
      DEF BUFR
D37   DEC 37
      JMP PTWDS+1   GO TO START OF LOOP.
      SPC 3 
* 
*   SUBROUTINE TO CHECK ASCII CHARACTER. SET CHARACTER TO BLANK IF
*   IT IS LESS THAN OCTAL 40 OR GREATER THAN OCTAL 177. 
*    CALLING SEQUENCE:
*                   <CHAR IN RIGHT HALF OF A-REG> 
*                   JSB CHKAS 
*                   <B-REG CONTAINS CHARACTER>
* 
CHKAS NOP           ENTRY.
      AND B377      ISOLATE RIGHT BYTE. 
      STA B         SAVE IT.
      AND B340      CHECK FOR ASCII 
      SZA,RSS        CONTROL CHAR (<40).
      JMP LDSPC     YES! LOAD SPACE.
      AND B200      CHECK FOR NON-ASCII 
      SZA            (200B BIT SET).
LDSPC LDB SPACE     YES! LOAD SPACE.
      JMP CHKAS,I   RETURN. 
      SPC 2 
.OUTL NOP 
SPACE BYT 0,40
B200  OCT 200 
B340  OCT 340 
NOBUF NOP 
PTBUF NOP 
PTEM1 NOP 
PTEM2 NOP 
PTEM3 NOP 
PTEM4 NOP 
ASTK  ASC 1, *
* 
* 
BADBF JSB PBHED     PRINT HEAD. 
      JSB PRINT     DISPLAY 
      DEF BDBUF      BAD BUFFER MESSAGE.
      DEC 6 
* 
      LDA @WRD2     PRINT OCTAL.
      STA PTBUF 
      CCA 
      ADA TRCLN 
      CMA,INA 
      STA NOBUF 
      JSB PTWDS 
* 
      JMP PBF20     RETURN. 
* 
BDBUF ASC 6, BAD BUFFER 
ASCII BSS 3 
.ASCI DBL ASCII 
"30"  ASC 1,30
"10"  ASC 1,10
* 
MSHED ASC 3, CLASS
PCLS# ASC 6, XX  STREAM 
PSTM# ASC 4,XX  FROM
PFRM# ASC 4, XXX  TO
PTO#  ASC 5, XXX  SEQ#
PSEQ# ASC 9,XXXXXX  TOTAL LEN 
PTLEN ASC 3,XXXXXX
MSEND EQU * 
* 
* 
*  VALUES SET:
BUFL  NOP           WORD COUNT. 
CLASS NOP           DS/3000 MESSAGE CLASS.
STREM NOP           DS/3000 MESSAGE STREAM. 
APLEN NOP           APPENDAGE LENGTH. 
FRM#  NOP           FROM PROCESS NUMBER.
TO#   NOP           TO PROCESS NUMBER.
      SKP 
*  SUBROUTINE TO OPEN THE TRACE OUTPUT DEVICE.
*   CALLING SEQUENCE: JSB OPNTO 
* 
OPNTO NOP           ENTRY.
      LDA @TRCO 
      JSB OPNDV     OPEN THE TRACE OUTPUT DEVICE. 
      DEF TRCOT 
      JMP OPNTO,I   NORMAL OPEN...RETURN. 
* 
      LDB CMDIN+1 
      LDA CMDIN     USE COMMAND INPUT 
      SSA,RSS        IF INTERACTIVE. OTHERWISE
      LDB DEFLU       USE DEFAULT LU. 
      STB TRCOT+1   STORE.
      CCA           SET DEVICE TYPE 
      STA TRCOT      TO INTERACTIVE.
      JMP OPNTO,I   RETURN. 
      SPC 4 
* 
* SUBROUTINE TO PRINT A RECORD ON TRACE OUTPUT DEVICE.
*   CALLING SEQUENCE: JSB PRINT 
*                     DEF <STRING>
*                     DEC <LENGTH>
* 
PRINT NOP           ENTRY POINT 
      LDA PRINT,I   PICK
      STA MSG        UP 
      ISZ PRINT       PARAMETERS. 
      LDA PRINT 
      STA MSLEN 
      ISZ PRINT     SET RETURN ADDR.
      LDA TRCOT     IF OUTPUT IS
      CPA "FI"       TO A FILE, 
      JMP PRNT1         DO FILE WRITE.
* 
      JSB REIO      WRITE ON LU.
      DEF *+5 
      DEF SD2 
      DEF TRCOT+1 
MSG   DEF *-* 
MSLEN DEF *-* 
      JMP RTERR     ERROR RETURN. 
      JMP PRINT,I   RETURN. 
* 
PRNT1 JSB WRITF     WRITE ON FILE.
      DEF *+5 
      DEF TRCOT+1 
      DEF ERROR 
      DEF MSG,I 
      DEF MSLEN,I 
      LDA ERROR     CHECK FOR FILE ERROR. 
      SSA,RSS 
      JMP PRINT,I   RETURN. 
* 
      LDB @TRCO     SET UP
      STB NAME       NAME POINTER.
      JSB FILER     REPORT ERROR. 
      JMP EXCMD     TERMINATE.
      SPC 3 
*  SUBROUTINE TO PRINT ERROR MESSAGE ON DEFAULT LU. 
*     CALLING SEQUENCE: JSB ERMSG 
*                       DEF <ERROR MESSAGE> 
*                       DEC <ERROR LENGTH>
* 
ERMSG NOP           ENTRY.
      LDA ERMSG,I   PICK
      STA EMSG       UP 
      ISZ ERMSG       PARAMETERS. 
      LDA ERMSG 
      STA EMSLN 
      ISZ ERMSG     SET RETURN ADDR.
      JSB REIO      WRITE ON
      DEF *+5        DEFAULT
      DEF SD2         LU. 
      DEF DEFLU 
EMSG  DEF *-* 
EMSLN DEF *-* 
D0    NOP           IGNORE ERRORS.
      JMP ERMSG,I   RETURN. 
      SKP 
*  SUBROUTINE TO PROMPT AND READ ON COMMAND INPUT DEVICE. 
*    CALLING SEQUENCE: JSB READ 
*                      DEF <PROMPT STRING>
*                      DEC <PROMPT LENGTH>
* 
READ  NOP           ENTRY.
      LDA READ,I    PICK UP 
      STA PMSG       PARAMETERS.
      ISZ READ
      LDA READ
      STA PLEN
      ISZ READ      SET RETURN ADDR.
      LDA CMDIN     IF COMMAND INPUT IS 
      CPA "FI"       A FILE,
      JMP READ1        DO FILE READ.
      SSA,RSS       IF NON-INTERACTIVE, 
      JMP INPUT        SKIP PROMPT. 
* 
      JSB REIO      CALL SYSTEM FOR WRITE.
      DEF *+5 
      DEF SD2 
      DEF CMDIN+1 
PMSG  DEF *-* 
PLEN  DEF *-* 
      JSB RTERR     ERROR RETURN. 
* 
INPUT JSB REIO      READ FROM LU. 
      DEF *+5 
      DEF SD1 
      DEF CMDIN+1 
      DEF INBUF 
      DEF D40 
      JSB RTERR     ERROR RETURN. 
      JMP ECHO      ECHO. 
* 
READ1 JSB READF     READ FROM FILE. 
      DEF *+6 
      DEF CMDIN+1 
      DEF ERROR 
      DEF INBUF 
      DEF D40 
      DEF INLEN 
      LDB INLEN     SET B-REG TO LENGTH.
      LDA ERROR     CHECK FOR ERROR.
      SSA,RSS 
      JMP ECHO      ECHO. 
* 
      LDB @CMDI     POINT TO
      STB NAME       FILE NAME. 
      JSB FILER     REPORT ERROR. 
      JMP EXCMD     TERMINATE.
      SPC 2 
ECHO  STB ECHLN     SAVE WORD LENGTH. 
      SSB,RSS       UNLESS NEGATIVE,
      CLE,ELB        DOUBLE FOR 
      STB INLEN       BYTE LENGTH.
      SSB           IF NOT EOF, 
      JMP RDRTN 
      CLE,ERB         PUSH BLANK
      ADB @INBF        ONTO END 
      LDA BLANK         OF LINE.
      STA B,I 
* 
      LDA CMDIN+1   IF COMMAND INPUT IS 
      CPA TRCOT+1    SAME AS TRACE OUTPUT,
      JMP RDRTN        NO NEED TO ECHO. 
      JSB PRINT     PRINT 
      DEF INBUF      INPUT. 
ECHLN DEF *-* 
RDRTN LDB INLEN     B-REG := # OF CHARS.
      JMP READ,I    RETURN. 
      SKP 
* SUBROUTINE TO "OPEN" A DEVICE.
*  CALLING SEQUENCE: LDA <ADDR OF 'NAMR' ARRAY> 
*                    JSB OPNDV
*                    DEF <TYPE OF DEVICE> (RETURNED)
*                    <NORMAL RETURN>
*                    <ERROR RETURN> 
* 
ERRTN NOP           ERROR RETURN ADDR.
DTYPE NOP           DEVICE DTYPEADDR. 
OPNDV NOP           ENTRY.
      STA NAME      SAVE NAME POINTER.
      ADA D4        ADDRESSES 
      STA SECU       OF SECURITY
      INA             AND CARTRIDGE.
      STA CRN 
      LDA OPNDV,I   PICK UP 
      STA DTYPE      PARAMETER ADDR.
      LDA OPNDV     SET 
      INA            NORMAL 
      STA OPNDV       RETURN. 
      INA           SET ERROR 
      STA ERRTN      RETURN.
      LDA NAME,I    GET DEVICE NAME 
      SZA,RSS       IF 0, 
      JMP ERRTN,I    TAKE ERROR RETURN. 
      LDA NAME      GET 
      ADA D3         STATUS 
      LDA A,I         BITS. 
      AND D3        ISOLATE 1ST PARAM.
      CPA D3        ASCII?
      JMP OPNFL       YES. GO OPEN FILE.
      LDA NAME,I    IF LU > 64, 
      AND NTB77 
      SZA 
      JMP ERRTN,I     ERROR!
      JSB IFTTY     MUST BE AN LU.
      DEF *+2       CALL SYS ROUTINE TO 
      DEF NAME,I     CHECK TYPE.
      STA DTYPE,I   STORE INTERACTIVE FLAG. 
      LDA NAME,I    ADD CONTROL BITS
      IOR B600       AND STORE LU NUMBER. 
      ISZ DTYPE 
      STA DTYPE,I 
      JMP OPNDV,I   RETURN. 
* 
OPNFL LDA "FI"      SET DEVICE TYPE 
      STA DTYPE,I    AS FILE. 
      LDA DTYPE     GET ADDRESS 
      INA            OF DCB.
      STA DCB 
      JSB OPEN      OPEN FILE.
      DEF *+7 
DCB   DEF *-* 
      DEF ERROR 
      DEF NAME,I
      DEF D0
SECU  DEF *-* 
CRN   DEF *-* 
      LDA ERROR     ERROR?
      SSA,RSS 
      JMP OPNDV,I     NO. NORMAL RETURN.
* 
      JSB FILER     REPORT ERROR. 
      JMP ERRTN,I   TAKE ERROR RETURN.
      SPC 3 
*  SUBROUTINE TO REPORT ERROR MESSAGE.
*     CALLING SEQUENCE: <SET NAME TO FILE NAMR ADDRESS> 
*                       <A-REG CONTAINS ERROR>
*                       JSB FILER 
* 
FILER NOP           ENTRY.
      CMA,INA       MAKE ERROR
      STA TEMP       POSITIVE.
      JSB KCVT      CONVERT 
      DEF *+2        TO ASCII 
      DEF TEMP        (DECIMAL).
      IOR "00"      ADD LEADING 0.
      STA FLER#     STORE IN MESSAGE. 
      JSB .DFER     MOVE
      DEF FLNM       FILE 
NAME  DEF *-*         NAME. 
      JSB ERMSG     PRINT 
      DEF FERMG      ERROR
D16   DEC 16          MESSAGE.
      JMP FILER,I   RETURN. 
* 
FERMG ASC 5,** ERROR -
FLER# ASC 6,XX ON FILE
FLNM  ASC 5,       ** 
* 
ERROR NOP 
      SPC 3 
*  SUBROUTINE TO REPORT RTE SYSTEM ERROR. 
*     CALLING SEQUENCE: JSB RTERR 
*                       <B-REG = 0 ON RETURN> 
* 
RTERR NOP           ENTRY.
      DST RTEMS+7   STORE ASCII MESSAGE.
      JSB ERMSG     PRINT 
      DEF RTEMS      ERROR
      DEC 11          MESSAGE.
      CLB           SET LENGTH TO 0.
      JMP RTERR,I   RETURN. 
* 
RTEMS ASC 11,** RTE ERROR: XXXX **
      SPC 3 
*  SUBROUTINE TO READ A TRACE RECORD. 
*   CALLING SEQUENCE: JSB GETRC 
*                     <TRCLN SET TO # OF WORDS> 
* 
GETRC NOP           ENTRY.
      LDA TRCIN     IF DEVICE 
      CPA "FI"       TYPE IS FILE,
      JMP GTRC1        GO DO READF. 
* 
      JSB REIO      READ FROM LU. 
      DEF *+5 
      DEF SD1 
      DEF TRCIN+1 
      DEF INBUF 
      DEF D304
      JMP TLUER     ERROR RETURN. 
      STB TRCLN     SAVE LENGTH.
GRETN ISZ RECNO     BUMP RECORD COUNTER.
      NOP 
      JMP GETRC,I 
* 
TLUER JSB RTERR     PRINT RTE ERROR MESSAGE.
      JMP GRETN     RETURN. 
* 
* 
GTRC1 JSB READF     READ FROM FILE. 
      DEF *+6 
      DEF TRCIN+1 
      DEF ERROR 
      DEF INBUF 
      DEF D304
      DEF TRCLN 
      LDB TRCLN     LOAD # OF WORDS READ. 
      LDA ERROR     CHECK FOR ERROR.
      SSA,RSS 
      JMP GRETN     RETURN. 
* 
      LDB @TRCI     POINT TO
      STB NAME       FILE NAME. 
      JSB FILER     REPORT ERROR. 
      CLB           READ LEN = 0. 
      JMP GRETN     RETURN. 
* 
TRCLN NOP 
      SKP 
*  SUBROUTINE TO CALL NAMR PARSE ROUTINE
*   CALLING SEQUENCE: <SET PNTR TO PROPER COLUMN OF INBUF>
*                     <POINT NAME TO PARSE ARRAY> 
*                      JSB PNAMR
* 
PNAMR NOP           ENTRY POINT 
      JSB NAMR      CALL
      DEF *+5        NAMR 
      DEF NAME,I      ROUTINE.
      DEF INBUF 
      DEF INLEN 
      DEF PNTR
      LDA NAME,I    LOAD PARAMETER. 
      JMP PNAMR,I   RETURN. 
      SPC 2 
PNTR  NOP           COLUMN POINTER
      SPC 5 
* CONVERT B-REG CONTENTS TO ASCII (OCTAL) 
TO8   NOP 
      STB TEMP      STORE NUMBER. 
      STA AREG      SAVE A-REG. 
      JSB CNUMO     GO CONVERT. 
      DEF *+3 
      DEF TEMP
      DEF OPNTR,I 
      LDA AREG      RESTORE A-REG.
      LDB OPNTR     BUMP
      ADB BUMP       OUTPUT 
      STB OPNTR       POINTER.
      CLB           CLEAR B-REG.
      JMP TO8,I     RETURN. 
      SPC 5 
* CONVERT B-REG CONTENTS TO ASCII (DECIMAL) 
* 
TO10  NOP 
      STB TEMP      STORE NUMBER. 
      STA AREG      SAVE A-REG. 
      JSB CNUMD     GO CONVERT. 
      DEF *+3 
      DEF TEMP
      DEF OPNTR,I 
      LDA AREG      RESTORE A-REG.
      LDB OPNTR     BUMP
      ADB BUMP       OUTPUT 
      STB OPNTR       POINTER.
      CLB           CLEAR B-REG.
      JMP TO10,I    RETURN. 
      SPC 3 
* GET NEXT WORD IN BUFFER AND BUMP POINTER. 
* 
NXTWD NOP 
      LDA BPNTR,I   PICK UP WORD. 
      ISZ BPNTR     BUMP POINTER. 
      JMP NXTWD,I   RETURN. 
      SPC 3 
* FILL OUTPUT BUFFER WITH CHAR IN A-REG 
* 
FILL  NOP 
      LDX D37       INITIALIZE COUNTER. 
FLOOP SAX BUFR-1    STORE A-REG.
      DSX           DECREMENT X-REG AND 
      JMP FLOOP       STAY IN LOOP UNTIL 0. 
* 
      JMP FILL,I    RETURN. 
      SPC 3 
      SPC 6 
* CONSTANTS AND STORAGE 
      SPC 1 
"NO"  ASC 1,NO
"FI"  ASC 1,FI
"00"  ASC 1,00
@INBF DEF INBUF 
@WRD2 DEF INBUF+1 
@WRD6 DEF INBUF+5 
@EOR  NOP 
VPNT  NOP 
MPNT  NOP 
BUMP  NOP 
CNT1  NOP 
CNT2  NOP 
TEMP  NOP 
AW3   DEF BUFR+2
AW8   DEF BUFR+7
AW10  DEF BUFR+9
AW11  DEF BUFR+10 
AW13  DEF BUFR+12 
AW17  DEF BUFR+16 
AW18  DEF BUFR+17 
AW19  DEF BUFR+18 
AW26  DEF BUFR+25 
AW30  DEF BUFR+29 
.BYT2 DBR BUFR
OPNTR NOP 
BUFR  ASC 20, 
      ASC 17, 
SHEAD ASC 20,RECORDXXXXXX, SLC LONG TERM STATISTICS:
TIPRM ASC 8,LOGGING INPUT:_ * 
BADTY ASC 15,LOG FILE CANNOT BE TYPE 1 OR 2 
DEFLU NOP 
WRD2  NOP 
STATS NOP 
INLEN NOP           READ LENGTH 
BPNTR NOP           BUFFER POINTER
AREG  NOP 
RDINI OCT 102       READ INITIAL FUNCTION CODE. 
WRCON OCT 203       WRITE CONVERSATIONAL CODE.
BN25  OCT -25 
BN22  OCT -22 
BN20  OCT -20 
BN10  OCT -10 
DN150 DEC -150
DN33  DEC -33 
DN25  DEC -25 
DN13  DEC -13 
DN11  DEC -11 
DN9   DEC -9
DN8   EQU BN10
DN7   DEC -7
DN6   DEC -6
DN4   DEC -4
DN3   DEC -3
DN2   DEC -2
DN1   DEC -1
SD1   DEF 1,I 
SD2   DEF 2,I 
D18   DEC 18
D24   DEC 24
D40   DEC 40
D304  DEC 304 
B600  OCT 600 
B377  OCT 377 
B140K OCT 140000
HB377 BYT 377,0 
BIT14 OCT 40000 
BIT13 OCT 20000 
NTB77 OCT 177700
      SPC 3 
* LONG TERM STATS HEADINGS
* 
MSGTB DEF *+1       MESSAGE TABLE 
D7    DEC 7 
      ASC 7, READ REQUESTS
D8    DEC 8 
      ASC 8, WRITE REQUESTS 
D11   DEC 11
      ASC 11, MESSAGES TRANSMITTED
      DEC 10
      ASC 10, SPURIOUS INTERRUPTS 
D6    DEC 6 
      ASC 6, LINE ERRORS
      DEC 7 
      ASC 7, NAKS RECEIVED
      DEC 9 
      ASC 9, BCC/PARITY ERRORS
      DEC 7 
      ASC 7, LONG TIMEOUTS
      DEC 8 
      ASC 8, RESPONSE ERRORS
      DEC 7 
      ASC 7, RESPONSE REJ 
      DEC 9 
      ASC 9, WACK/TTD RECEIVED
      SPC 3 
* POINTERS INTO TABLES
* 
@RTBL DEF RTBL-1
@WRIT DEF STA12+1 
@WTBL DEF WTBL-1
@CTBL DEF CTBL
@ETBL DEF ETBL
@STBL DEF STBL
@STAT DEF STATT 
      SPC 3 
* READ FUNCTION TABLE 
* 
RTBL  DEF RMSG1 
      DEF RMSG2 
RMSG1 DEC 4 
      ASC 4, INQUIRY
RMSG2 DEC 4 
      ASC 4, INITIAL
      SPC 2 
* WRITE FUNCTION TABLE
* 
WTBL  DEF WMSG1 
      DEF WMSG2 
      DEF WMSG3 
      DEF WMSG4 
      DEF WMSG5 
WMSG1 DEC 4 
      ASC 4,INQUIRY 
WMSG2 DEC 1 
      ASC 1,2 
WMSG3 DEC 5 
      ASC 5,CONVERSTNL
WMSG4 DEC 3 
      ASC 3,RESET 
WMSG5 DEC 5 
      ASC 5,DISCONNECT
      SPC 2 
* CONTROL FUNCTION TABLE
* 
CTBL  DEF CMSG0 
      DEF CMSG1 
      DEF CMSG2 
      DEF CMSG3 
      DEF CMS40 
      DEF CMS41 
      DEF CMS42 
      DEF CMS43 
CMSG0 DEC 3 
      ASC 3,CLEAR 
CMSG1 DEC 5 
      ASC 5,INITIALIZE
CMSG2 DEC 5 
      ASC 5,LINE OPEN 
CMSG3 DEC 5 
      ASC 5,LINE CLOSE
CMS40 DEC 8 
      ASC 8,ESTABLISH LOC ID
CMS41 DEC 8 
      ASC 8,ESTBL REM ID LST
CMS42 DEC 8 
      ASC 8,CHNG ERROR PRAMS
CMS43 DEC 8 
      ASC 8,ZERO COMM STATS 
      SPC 2 
* EVENT TABLE 
* 
ETBL  DEF EVT00 
      DEF EVT01 
      DEF EVT02 
      DEF EVT03 
      DEF EVT04 
      DEF EVT05 
      DEF EVT06 
      DEF EVT07 
      DEF EVT08 
      DEF EVT09 
      DEF EVT10 
      DEF EVT11 
      DEF EVT12 
      DEF EVT13 
      DEF EVT14 
      DEF EVT15 
      DEF EVT16 
      DEF EVT17 
      DEF EVT18 
      DEF EVT19 
      DEF EVT20 
      DEF EVT21 
      DEF EVT22 
      DEF EVT23 
      DEF EVT24 
      DEF EVT25 
      DEF EVT26 
      DEF EVT27 
      DEF EVT28 
      DEF EVT29 
      DEF EVT30 
      DEF EVT31 
      DEF EVT32 
EVT00 DEC 7 
      ASC 7,LINE OPEN REQ 
EVT01 DEC 7 
      ASC 7,LINE CLOSE REQ
EVT02 DEC 8 
      ASC 8,READ INQUIRY REQ
EVT03 DEC 8 
      ASC 8,READ INITIAL REQ
EVT04 DEC 1 
      ASC 1,4 
EVT05 DEC 1 
      ASC 1,5 
EVT06 DEC 1 
      ASC 1,6 
EVT07 DEC 1 
      ASC 1,7 
EVT08 DEC 8 
      ASC 8,WRITE INQURY REQ
EVT09 DEC 1 
      ASC 1,9 
EVT10 DEC 7 
      ASC 7,WRITE CONV REQ
EVT11 DEC 8 
      ASC 8,WRT RESET(EOT)RQ
EVT12 DEC 8 
      ASC 8,WRITE DISCON REQ
EVT13 DEC 1 
      ASC 1,13
EVT14 DEC 7 
      ASC 7,ACK0 RECEIVED 
EVT15 DEC 7 
      ASC 7,ACK1 RECEIVED 
EVT16 DEC 7 
      ASC 7,WACK RECEIVED 
EVT17 DEC 7 
      ASC 7,RVI RECV/SENT 
EVT18 DEC 6 
      ASC 6,ENQ RECEIVED
EVT19 DEC 6 
      ASC 6,NAK RECEIVED
EVT20 DEC 6 
      ASC 6,EOT RECEIVED
EVT21 DEC 8 
      ASC 8,DLE EOT RECEIVED
EVT22 DEC 6 
      ASC 6,TTD RECEIVED
EVT23 DEC 7 
      ASC 7,TEXT RECEIVED 
EVT24 DEC 8 
      ASC 8,BCC PRTY/FMT ERR
EVT25 DEC 6 
      ASC 6,TEXT OVERRUN
EVT26 DEC 8 
      ASC 8,GARBAGE RECEIVED
EVT27 DEC 8 
      ASC 8,BAD ID SEQUENCE 
EVT28 DEC 7 
      ASC 7,SHORT TIMEOUT 
EVT29 DEC 6 
      ASC 6,LONG TIMEOUT
EVT30 DEC 2 
      ASC 2,LOW 
EVT31 DEC 2 
      ASC 2,HIGH
EVT32 DEC 2 
      ASC 2,MID 
      SPC 2 
* STATE TABLE 
* 
STBL  DEF STA00 
      DEF STA01 
      DEF STA02 
      DEF STA03 
      DEF STA04 
      DEF STA05 
      DEF STA06 
      DEF STA07 
      DEF STA08 
      DEF STA09 
      DEF STA10 
      DEF STA11 
      DEF STA12 
      DEF STA13 
      DEF STA14 
      DEF STA15 
      DEF STA16 
      DEF STA17 
      DEF STA18 
      DEF STA19 
      DEF STA20 
      DEF STA21 
      DEF STA22 
      DEF STA23 
      DEF STA24 
STA00 DEC 4 
      ASC 4,UNOPENED
STA01 DEC 4 
      ASC 4,CONTROL 
STA02 DEC 4 
      ASC 4,READ ENQ
STA03 DEC 7 
      ASC 7,READ ENQ ERROR
STA04 DEC 7 
      ASC 7,CHECK READ REQ
STA05 DEC 2 
      ASC 2,READ
STA06 DEC 5 
      ASC 5,READ TEXT 
STA07 DEC 4 
      ASC 4,READ RVI
STA08 DEC 8 
      ASC 8,RESTRICTED READ 
STA09 DEC 5 
      ASC 5,WRITE ENQ 
STA10 DEC 8 
      ASC 8,WRITE ENQ ERROR 
STA11 DEC 8 
      ASC 8,ENQ-ENQ CONTENTN
STA12 DEC 3 
      ASC 3,WRITE 
STA13 DEC 5 
      ASC 5,WRITE TEXT
STA14 DEC 8 
      ASC 8,WRITE RESPNS ENQ
STA15 DEC 7 
      ASC 7,CHECK RESPONSE
STA16 DEC 8 
      ASC 8,BAD ACK RECEIVED
STA17 DEC 6 
      ASC 6,WRITE RETRY 
STA18 DEC 8 
      ASC 8,ENQ RCV IN WRITE
STA19 DEC 8 
      ASC 8,ENQ RCRD IN WRIT
STA20 DEC 8 
      ASC 8,WRITE CONVERSTNL
STA21 DEC 5 
      ASC 5,WRITE EOT 
STA22 DEC 8 
      ASC 8,READ EOT RSPONSE
STA23 EQU WMSG5 
STA24 DEC 5 
      ASC 5,WRITE TTD 
      SPC 2 
STATT DEF ST00
      DEF ST01
      DEF ST02
      DEF ST03
      DEF ST04
      DEF ST05
      DEF ST06
      DEF ST07
      DEF ST10
      DEF ST11
      DEF ST12
      DEF ST13
      DEF ST14
      DEF ST15
      DEF ST16
      DEF ST17
      DEF ST20
      DEF ST21
ST00  DEC 9 
      ASC 9,NORMAL COMPLETION 
ST01  DEC 8 
      ASC 8,INVALID REQUEST 
ST02  DEC 16
      ASC 16,REQST INCOMPATIBLE W/ LINE STATE 
ST03  DEC 1 
      ASC 1,  [BAD ID SEQUENCE] 
ST04  DEC 11
      ASC 11,LOCAL HARDWARE FAILURE 
ST05  DEC 6 
      ASC 6,EOT RECEIVED
ST06  DEC 15
      ASC 15,DISCONNECT (DLE EOT) RECEIVED
ST07  DEC 6 
      ASC 6,LONG TIMEOUT
ST10  DEC 11
      ASC 11,EOT SENT, ENQ RECEIVED 
ST11  DEC 6 
      ASC 6,DATA OVERRUN
ST12  DEC 9 
      ASC 9,MAX NAKS RECEIVED 
ST13  DEC 7 
      ASC 7,MAX ENQS SENT 
ST14  DEC 6 
      ASC 6,RVI RECEIVED
ST15  DEC 11
      ASC 11,ENQ SENT, ENQ RECEIVED 
ST16  DEC 11
      ASC 11,ENQ SENT, NAK RECEIVED 
ST17  DEC 9 
      ASC 9,MAX ENQS RECEIVED 
ST20  DEC 1 
      ASC 1,  [TTD SENT, NAK RECEIVED]
ST21  DEC 10
      ASC 10,IMPOSSIBLE SITUATION 
* 
STMSG ASC 16,              COMPLETION STATUS
STASC ASC 18,XX:
@STMS DEF STASC+2 
* DS/3000 CLASS/STREAM TYPES
@CLST DEF *+1 
INTCL BYT 0,20
      BYT 0,21
      BYT 3,20
      BYT 3,22
      BYT 4,22
      BYT 4,23
      BYT 4,24
      BYT 4,25
      BYT 4,26
      BYT 4,27
      BYT 5,20
      BYT 5,21
      BYT 5,22
      BYT 5,23
      BYT 5,24
      BYT 6,20
      BYT 6,21
      BYT 6,22
      BYT 6,23
      BYT 6,24
      BYT 6,25
      BYT 6,27
C7S20 BYT 7,20
      BYT 7,22
      BYT 7,26
      BYT 7,27
C8S20 BYT 10,20 
C8S21 BYT 10,21 
CLSTR NOP           SEARCH KEY STORED HERE. 
@LBLS DEF *+1 
      ASC 7,INITIALIZATION
      ASC 7,TERMINATION 
      ASC 7,SYSTEM COMMAND
      ASC 7,DSLINE
      ASC 7,PREAD 
      ASC 7,PWRITE
      ASC 7,PCONTROL
PCLOS ASC 7,PCLOSE
      ASC 7,ACCEPT
      ASC 7,REJECT
      ASC 7,TERMINAL PRINT
      ASC 7,TERMINAL READ 
      ASC 7,TERMINAL READX
      ASC 7,TERMINAL CNTRL
      ASC 7,ABORT I/O 
      ASC 7,HELLO 
      ASC 7,BYE 
      ASC 7,BREAK 
      ASC 7,ABORT PROGRAM 
      ASC 7,RESUME
      ASC 7,CNTRL-Y 
      ASC 7,KILL JOB
      ASC 7,DS/3000 RFA 
      ASC 7,DSLINE
      ASC 7,ACCEPT POPEN
      ASC 7,REJECT POPEN
      ASC 7,DS/1000 RFA 
      ASC 7,REMOTE EXEC 
      ASC 7,
* 
POPCL BYT 7,21      POPEN/PCLOSE/BREAK
@POPN DEF *+1 
      ASC 7,POPEN 
@PCLO DEF PCLOS 
@PCBR DEF *+1 
      ASC 7,PCLOSE/BREAK
* 
@REQ  DEF *+1 
      ASC 3, REQST
@REP  DEF *+1 
      ASC 3, REPLY
@REJ  DEF *+1 
      ASC 4,/REJECT 
CONT  ASC 2,CONT
      SPC 2 
TRF3K DEF *-2       TABLE FOR 3000 RFA
      ASC 3,FOPEN 
      ASC 3,FCLOS 
      ASC 3,FREAD 
      ASC 3,FRDIR 
      ASC 3,FRDSK 
      ASC 3,FWRIT 
      ASC 3,FWDIR 
      ASC 3,FRLAB 
      ASC 3,FWLAB 
      ASC 3,FUPDT 
      ASC 3,FSPAC 
      ASC 3,FPOIN 
      ASC 3,FINFO 
      ASC 3,FCHEK 
      ASC 3,FCNTL 
      ASC 3,FSTMD 
      ASC 3,FRNAM 
      ASC 3,FRLAT 
      ASC 3,FLOOK 
      ASC 3,FUNLK 
* 
TRF1K DEF *+1       TABLE FOR 1000 RFA
      ASC 3,DCRET 
      ASC 3,DPURG 
      ASC 3,DOPEN 
      ASC 3,DWRIT 
      ASC 3,DREAD 
      ASC 3,DPOSN 
      ASC 3,DWIND 
      ASC 3,DCLOS 
      ASC 3,DNAME 
      ASC 3,DCONT 
      ASC 3,DLOCF 
      ASC 3,DAPOS 
      ASC 3,DSTAT 
* 
TDX1K DEF *-2       TABLE FOR 1000 DISTRIBUTED EXECUTIVE
      ASC 3,READ
      ASC 3,WRITE 
      ASC 3,CONTRL
      ASC 3,SCHEDL
      ASC 3,TIME
      ASC 3,X TIME
      ASC 3,STATUS
      SPC 2 
* 
MAXPR EQU 10        UP TO 10 PARAMETERS/COMMAND 
MXPRM ABS MAXPR+1 
PTAB  BSS MAXPR     PARAMETER ADDRESS ARRAY.
.PTAB DEF PTAB
.NEXT NOP 
ETAB  BSS MAXPR+1 
.ETAB DEF ETAB
.NXTE NOP 
      SPC 2 
*  ARRAY FOR PICKING UP SCHEDULING PARAMETERS:
NCMDI BSS 10        FIRST: COMMAND INPUT. 
NTRCI BSS 10        SECOND: TRACE INPUT.
NTRCO BSS 10        THIRD: TRACE OUTPUT.
PMASK BYT 3,7       3 PARAMETERS, ALL NAMR
@CMDI DEF NCMDI 
@TRCO DEF NTRCO 
@TRCI DEF NTRCI 
      SPC 1 
** DEVICE "OPEN" BUFFERS ** 
CMDIN NOP           TYPE OF COMMAND INPUT.
      BSS 144       DCB OR LU #.
TRCIN NOP           TYPE OF TRACE INPUT.
      BSS 144       DCB OR LU #.
TRCOT NOP           TYPE OF TRACE OUTPUT. 
      BSS 144       DCB OR LU #.
      SPC 1 
** READ BUFFER ** 
INBUF BSS 304 
      SPC 1 
* LABELS FOR DS/3000 HEADER:
LNCLS EQU INBUF+1 
STMWD EQU INBUF+3 
IBFLN EQU INBUF+4 
FRMTO EQU INBUF+5 
RTSQ# EQU INBUF+6 
DTLEN EQU INBUF+8 
RF1KW EQU INBUF+9   APPENDAGE WORD 1
RF3KW EQU INBUF+11  APPENDAGE WORD 3
DX1KW EQU INBUF+13  APPENDAGE WORD 4
      SPC 1 
      BSS 0         SIZE OF TRC3K.
      SPC 1 
      END TRC3K 
        