ASMB,R,L,C
      HED SCGN2 91700-16140 REV.A 760216 * (C) HEWLETT-PACKARD CO. 1976 * 
      NAM SCGN2,5 91700-16140 REV.A 760216
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 1 
******************************************************
* 
*SCGN2              SUBORDINATE LOADER CONTROL
* 
*SOURCE PART #      91700-18140 REV.A 
* 
*REL PART #         91700-16140 REV.A 
* 
*WRITTEN BY:        LARRY POMATTO-JACK COOLEY 
* 
*DATE WRITTEN:      9-24-74 
* 
*MODIFIED BY:       K. HAHN   [ C.C.H.] 
* 
*DATE MODIFIED:     12-02-75  [02-16-76]
* 
*MODIFICATION:      ADD CURRENT PAGE LINKING, MAP ALL, & *COMMENTS
*                   [ FIX INDIRECT EXTERNAL REF. & ADD BYTE ADDRESSING ]
*                   [ FIX C.P. LINK PROCESSING, ADD ECHO ON/OFF COMMAND]
*                   [ ADD EXTENDED-NAM PRINTOUT ] 
******************************************************
* 
*   THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND
*   THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT 
*   THIS DOCUMENT 
* 
* 
*   ENTRY POINT NAMES 
* 
      ENT LSWAP,LOAD
      ENT NBUF9,CPLEN 
* 
*   EXTERNAL REFERENCE NAMES
* 
      EXT PNAME,PNAMA,PRAMS 
      EXT SIZE,EFLAG,CPLMG,CPLML,#ECHO
      EXT .MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 
      EXT ?XFER,PLKS,ABRC1,LISTO,UEXFL
      EXT LST,LST1,LST2,LST3,LST4,LST5
      EXT LOCC,BPLOC,RBTO,NAMR. 
      EXT COMOR,RBTA
      EXT PRINT,PARSB 
      EXT PACK$,LSTP,LSTI,SSTBL,PRMT,PUNCH
      EXT LOUT,SWAPR,PLK,RBIN,PLK1
      EXT FERR,RLDCB,FCLOS,COML 
* 
A     EQU 0 
B     EQU 1 
      SUP 
      SPC 1 
************************************************************************
* 
*   THESE ROUTINES ARE USED BOTH IN THE RTS LOADER ITSELF AND IN
* THE RTS GENERATOR RTSGN.  THESE ROUTINES,CALLED A SUBORDINATE 
* CONTROL MODULE, COMPRISE A COMMAND PROCESSOR FOR LOADER COMMANDS. 
* THIS MODULE IS CALLED AS IF IT WERE A SUBROUTINE WITH NO
* PARAMETERS AND TWO RETURNS.  THE (P+1) RETURN IS USED FOR ABNORMAL
* TERMINATION CONDITIONS, WHILE THE (P+2) RETURN IS USED FOR NORMAL 
* RETURNS VIA THE END COMMAND.THE CALLING SEQUENCE IS AS FOLLOWS: 
* 
*     JSB PRCMD 
*      RETURN1       RELOCATION ABORTED RETURN
*     RETURN2       NORMAL RETURN 
* 
********************************************************************
      SPC 3 
*     NOTE!!!!!!
*     THIS BSS THAT FOLLOWS MUST BE THERE INORDER 
*     TO INSURE THAT NO CODE IS OVERLAYED 
*     FROM THE OTHER SEGMENT
* 
      BSS 310B      SIZE DEFINED IN RTGEN SEGMENT 
      SPC 4 
* 
*     HERE WHEN SEGEMENT IS FIRST LOADED
*     CONTROL IS PASSED BACK TO THE MAIN
*     VIA A SWAPR RETURN
* 
LSWAP NOP 
* 
*     NOTE THE FOLLOWING IS BECAUSE WE DO NOT HAVE
*     EXTERNALS WITH OFFSET 
* 
      LDA MD5       GET LOOP COUNTER
      STA BLINE     SAVE IN TEMP LOCATION 
      LDB LSTAA     GET ADDRESS OF WHERE LIST ROUTINE LOCATED 
LOOP  LDA B         HERE WE CHASE DOWN OUR OWN
      LDA A,I       INDRECTS, AND ADD OUR OWN 
      RAL,CLE,SLA,ERA 
      JMP *-2 
      IOR BIT15     ADD IN OUR OWN INDIRECT 
      STA B,I       AND SAVE IT AGAIN 
      INB 
      ISZ BLINE     DONE? 
      JMP LOOP      NO
      JMP SWAPR     YES...RETURN
      SPC 1 
BIT15 OCT 100000
LSTAA DEF *+1 
LST1A DEF LST1
LST2A DEF LST2
LST3A DEF LST3
LST4A DEF LST4
LST5A DEF LST5
      SKP 
* 
*     RTS LOADER UTILITY SUBROUTINES
* 
      SPC 1 
***** 
* 
** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF)
* CALLING SEQUENCE: 
* 
*     JSB BLINE 
*     RETURN
* 
***** 
      BSS 1 
BLINE NOP 
      LDA LBUFA 
      STA BLINE-1 
      LDA MD60
      LDB BLANK 
      STB BLINE-1,I 
      ISZ BLINE-1 
      INA,SZA 
      JMP *-3 
      JMP BLINE,I 
***** 
STMP1 NOP 
* 
***** 
* 
** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT
*           DELIMETER.  ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR 
*           MORE BLANKS, OR A COMMA IMBEDDED IN BLANKS. 
* CALLING SEQUENCE: 
* 
*     JSB DELIM 
*     RETURN1  NOTHING BUT BLANKS TO END OF LINE
*     RETURN2  DELIMETER FOUND
* 
* NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT 
*       BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND 
*       ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED 
***** 
DELIM NOP 
      JSB QGETC    GET THE NEXT CHAR
      JMP DELIM,I  END OF LINE , RETURN (P+1) 
      LDB M2       INITIALIZE 
      STB STMP1    COMMA COUNTER
      CPA B40      IS THIS A BLANK? 
      JMP DEL01    YES
      CPA B54      NO, IS IT A COMMA? 
      RSS 
      JMP CMER     NO, ERROR
      ISZ STMP1 
DEL01 JSB NXTC     GET NEXT NON BLANK CHAR
      JMP DEL02    END OF LINE
      CPA B54      GOT ONE, IS IT A COMMMA? 
      RSS 
      JMP DEL03     NO
      ISZ STMP1     YES, IS IT THE SECOND ONE?
      JMP DEL01  NO, GET NEXT NON BLANK CHARACTER 
DEL03 JSB BAKUP    YES, BACK UP BUFFER POINTERS 
      ISZ DELIM    AND EXIT (P+2) 
      JMP DELIM,I 
DEL02 ISZ STMP1    WAS THERE A COMMA? 
      JMP DELIM,I  NO, EXIT (P+1) 
      JMP CMER     YES, ERROR 
***** 
* 
** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER
* CALLING SEQUENCE: 
* 
*     JSB BAKUP 
*     RETURN
* 
***** 
BAKUP NOP 
      LDA QQCNT    DECREMENT CHAR COUNT 
      ADA M1
      STA QQCNT 
      LDB QQPTR 
      SLA           AND IF NECESSARY, 
      ADB M1         DECREMENT POINTER
      STB QQPTR 
      JMP BAKUP,I 
***** 
* 
** PRCMD ** MAIN ENTRY POINT FOR THE SUBORDINATE CONTROL MODULE.
*           CONTROL IS PASSED TO TYMOD OR NXTCM TO GET THE NEXT 
*           COMMAND.  THAT COMMAND IS PARSED, AND CONTROL IS PASSED 
*           TO ITS ASSOCIATED PROCESSING ROUTINE.  IF A FATAL ERROR 
*           IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING 
*           PRCMD AT (P+1).  THE ONLY OTHER EXIT IS VIA THE END 
*           COMMAND (P+2).  AFTER PROCESSING ANY OTHER COMMAND, 
*           CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. 
* 
***** 
LOAD BSS 0
PRCMD NOP           PROCESS RTE LOADER/2100 COMMANDS
NXTCM JSB CMDIN   GET NEXT COMMAND LINE 
      LDA CTACN 
      LDB CTABL 
      JSB SCAN      SCAN 1ST ELEMENT FOR MATCH
      JMP CMER      COMMAND ERROR.
      ADA PTABL     JUMP TO PROCESSOR 
      LDA A,I 
      JMP A,I 
* 
CMER1 DEF *+1 
      OCT 5 
      ASC 3,CMND? 
***** 
*     CONTROL COMES HERE ON DETECTING A COMMAND ERROR.  THE MESSAGE 
*     'CMND?' IS OUTPUT, INPUT IS SWITCHED TO TTY, AND GET NEXT CMD.
***** 
CMER  LDB CMER1    OUTPUT CMND? MESSAGE 
      JSB DIAG
      JMP PRCMD+1  GET NEXT COMMAND FROM TTY
      SKP 
* 
*RTS LOADER TABLES
* 
***** 
* 
*  BRANCH TABLE FOR COMMAND PROCESSORS. 
*  ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN
*  COMMAND MNEMONIC TABLE.
* 
***** 
PTABL DEF * 
      DEF BNDST     BOUNDS STATEMENT
      DEF MAPST     MAP STATEMENT 
      DEF RELST     RELOCATE STATEMENT
      DEF RELST     REL STATEMENT 
      DEF SERST     SEARCH STATEMENT
      DEF NXTCM    OUTPUT STATEMENTS IGNORED
      DEF DSPST     DISPLAY STATEMENT 
      DEF EOL       END STATEMENT 
      DEF SETST     SET STATEMENT 
      DEF LNKST     LINKS STATEMENT 
      DEF EXTST     EXTERNALS INDIRECT/DIRECT STATEMENT 
      DEF ECOST     ECHO ON/OFF STATEMENT 
***** 
* 
*     COMMAND MNEMONIC TABLE
* 
*   BITS  15-8   # CHARS IN ASCII KEYWORD TABLE 
*   BITS   7-0   OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) 
* 
*     THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE 
*     OFFSET ASSOCIATED WITH KEYWORDS.  THUS ORDER IN THIS TABLE IS 
*     OF PARAMOUNT IMPORTANCE.  IF ANY KEYWORD IS EXACTLY THE SAME
*     AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST 
*     APPEAR FIRST. (FOR EXAMPLE RELOCATE APPEARS BEFORE REL) 
* 
***** 
CTACN ABS CTABS-CTABN  NEG NBR ENTRIES IN TABLE 
CTABL DEF CTABS 
CTABS ABS 3000B+ABOUD-CMTBL  BOUNDS 
      ABS 1400B+AMAP-CMTBL      MAP 
      ABS 4000B+ARELC-CMTBL   RELOCATE
      ABS 1400B+ARELC-CMTBL REL 
      ABS 3000B+ASEAR-CMTBL   SEARCH
      ABS 3000B+AOTPU-CMTBL   OUTPUT
      ABS 3400B+ADISP-CMTBL   DISPLAY 
      ABS 1400B+AEND.-CMTBL     END 
      ABS 1400B+ASET.-CMTBL  SET
      ABS 2400B+ALINK-CMTBL  LINKS
      ABS 4400B+AEXT-CMTBL EXTERNALS
      ABS 2000B+AECHO-CMTBL   ECHO
CTABN EQU * 
KTABS ABS 2400B+AFWAB-CMTBL  FWABP
      ABS 2400B+ALWAB-CMTBL  LWABP
      ABS 2000B+AFWAM-CMTBL    FWAM 
      ABS 2000B+ALWAM-CMTBL    LWAM 
      ABS 2000B+AFWAC-CMTBL  FWAC 
      ABS 2000B+ALWAC-CMTBL 
LTABS ABS 2000B+ALOCC-CMTBL  LOCC 
      ABS 3000B+ABPLC-CMTBL   BPLOCC
      ABS 2400B+AXFER-CMTBL   ?XFER 
      ABS 2400B+ATBLE-CMTBL  TABLE
      ABS 3000B+AUNDE-CMTBL   UNDEFS
MTABS ABS 3400B+AMODS-CMTBL  MODULES
      ABS 3400B+AGLOS-CMTBL   GLOBALS 
      ABS 2400B+ALINK-CMTBL   LINKS 
SWICH ABS 1000B+AON-CMTBL     ON
      ABS 1400B+AOFF.-CMTBL   OFF 
      ABS 1400B+AALL-CMTBL    ALL 
BORC  ABS 2000B+ABAS-CMTBL    BASE
      ABS 3400B+ACUR-CMTBL    CURRENT 
TSTRT ABS 2400B+ASTRT-CMTBL  START
      ABS 1000B+AIN-CMTBL     IN
TAT   ABS 1000B+AAT..-CMTBL  AT 
TTO   ABS 1000B+ATO..-CMTBL  TO 
DIEXT ABS 4000B+AIEXT-CMTBL  INDIRECT 
      ABS 3000B+ADEXT-CMTBL DIRECT....THESE TWO MUST BE IN ORDER
STABL DEF TSTRT 
ATTBL DEF TAT 
TOTBL DEF TTO 
LTABL DEF LTABS 
KTABL DEF KTABS 
MTABL DEF MTABS 
BCTBL DEF BORC
SWTBL DEF SWICH 
***** 
*     ASCII KEYWORD TABLE 
*  ORDER OF ENTRIES IN THIS TABLE IS OF NO IMPORTANCE 
***** 
CMTBL DEF * 
ABOUD ASC 3,BOUNDS
AMAP  ASC 2,MAP 
ARELC ASC 4,RELOCATE
ASEAR ASC 3,SEARCH
AOTPU ASC 3,OUTPUT
ADISP ASC 4,DISPLAY 
ATBLE ASC 3,TABLE 
AUNDE ASC 3,UNDEFS
AMODS ASC 4,MODULES 
AGLOS ASC 4,GLOBALS 
ALINK ASC 3,LINKS 
AON   ASC 1,ON
AOFF. ASC 2,OFF 
AALL  ASC 2,ALL 
AEND. ASC 2,END 
AFWAM ASC 2,FWAM
ALWAM ASC 2,LWAM
AFWAB ASC 3,FWABP 
ALWAB ASC 3,LWABP 
AFWAC ASC 2,FWAC
ALWAC ASC 2,LWAC
ALOCC ASC 2,LOCC
ABPLC ASC 3,BPLOCC
AXFER ASC 3,?XFER 
ABAS  ASC 2,BASE
ACUR  ASC 4,CURRENT 
ASTRT ASC 3,START 
AIN   ASC 1,IN
AAT.. ASC 1,AT
ASET. ASC 2,SET 
ATO.. ASC 1,TO
AEXT  ASC 5,EXTERNALS 
AIEXT ASC 4,INDIRECT
ADEXT ASC 3,DIRECT
AECHO ASC 2,ECHO
* 
PRPTA ASC 1,-_
* 
PTR   NOP 
CNTR  NOP 
PTR2  NOP 
CCNT  NOP 
QQCN1 NOP 
QQPT. NOP 
TEMP  NOP 
NCHAR NOP 
CNT NOP 
      SKP 
      SKP 
* 
*     SCANNER ROUTINE 
* 
***** 
* 
** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD
* CALLING SEQUENCE: 
* 
*     LDA NUMBER OF ENTRIES TO SEARCH 
*     LDB ADDRESS OF MNEMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE 
*     JSB SCAN
*     RETURN1  NOT FOUND
*     RETURN2  FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. 
* 
* NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH.
*       FURTHER,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD 
*       MATCHED OR RESET IF NO MATCH OCCURRED.
***** 
SCAN  NOP           ENTRY/EXIT
      STB PTR    INITIALIZE SCANNER 
      STA CNTR
      CLA 
      STA CNT   INITIALIZE OFFSET COUNTER 
SCAN1 LDA PTR,I     GET COMMAND POINTER WORD
      AND B377      MASK COMMAND TABLE OFFSET 
      ADA CMTBL 
      STA PTR2      STORE POINTER TO ASCII COMMAND
      LDA PTR,I 
      ALF,ALF 
      AND B377      GET # CHARS.
      STA NCHAR 
      ISZ CNT    BUMP OFFSET COUNTER
      CLA 
      STA CCNT
      LDA QQCNT     SAVE CHARACTER STREAM 
      STA QQCN1 
      LDA QQPTR 
      STA QQPT.          POINTERS.
      JSB NXTC   GET THE FIRST NON-BLANK CHAR 
      CLA         END OF LINE 
      JMP SCAN5  GET REST OF CHARS IN LOOP
SCAN2 JSB QGETC    GET NEXT CHARACTER.
      CLA        NO MORE CHARS. 
SCAN5 STA TEMP
      LDA PTR2,I
      LDB CCNT
      ISZ CCNT
      CPB NCHAR     ALL CHARS. MATCH? 
      JMP SCAN4     YES-CHECK END OF INPUT ELEMENT. 
      SLB,RSS       IS CHAR IN HIGH-ORDER BYTE? 
      ALF,ALF       YES--ROTATE TO LOW
      AND B177      MASK
      SLB           BUMP ASCII COMMAND TABLE POINTER ON 
      ISZ PTR2        EVEN-NUMBERED CHARACTERS. 
      CPA TEMP     DO CHARS. MATCH? 
      JMP SCAN2     YES--SO FAR.
      LDA QQPT.     NO--BACKUP POINTERS 
      STA QQPTR 
      LDA QQCN1 
      STA QQCNT 
      SPC 1 
*      NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT 
*      IF NO MORE LEFT
      SPC 1 
      ISZ PTR 
      ISZ CNTR      END OF TABLE? 
      JMP SCAN1   NO
      JMP SCAN,I
      SPC 1 
SCAN4 LDA TEMP      IS NEXT SOURCE CHAR A DELIMITER?
      SZA       END OF LINE?
      JSB BAKUP 
      LDA CNT 
      ISZ SCAN
      JMP SCAN,I
      SKP 
* 
*     INPUT COMMAND LINE
* 
***** 
* 
** CMDIN ** INPUT NEXT COMMAND LINE USING SIO DRIVERS 
* CALLING SEQUENCE: 
* 
*     JSB CMDIN 
*     RETURN
* 
* NOTE: CMDIN CHECKS FOR '-' IF REQUIRED AND DOES A JMP CMER IF NOT 
*       THERE.  IT ALSO SKIPS COMMENTS AND ADVANCES INPUT BUFFER
*       POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER.
* 
*       THE IDENTIFIER CMDLU IS USED TO SET UP TTY VS PHOTORDR INPUT
* 
*     CMDLU=JSB 104B,I FOR KEYBOARD(TTY) INPUT
*                   NO COMMAND ID CHAR. REQUIRED. NO ECHO.
* 
*          =JSB 101B,I FOR BATCH INPUT(E.G., PHOTOREADER, 
*                   OR CASSETTE). 
*                  COMMAND ID REQUIRED IN COLUMN. 1, AND ECHO TO LIST UN
*                  IMPLIED. 
* 
*      RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED
* 
***** 
CMDIN NOP 
      CLA           RESET INCOMING CHARACTER
      STA QQCNT         POINTERS
      LDA QBUFA 
      STA QQPTR 
      JSB PRMT      SEND PROMT,READ REPLY 
      DEF *+6 
      DEF PRPTA 
      DEF B2
      DEF QIBUF 
      DEF D72 
      DEF PARSB 
      STA QQCHC 
      JMP CMDIN,I   AND RETURN
* 
MOVE3 NOP 
* 
***** 
* 
** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A
*           SPECIFIED LOCATION. STOP AT FIRST DELIMITER.
* CALLING SEQUENCE: 
* 
*     LDA ADDRESS OF DESTINATION
*     JSB MOVE. 
*     RETURN
* 
***** 
MOVE. NOP 
      STA MOVE3    SAVE DESTINATION ADDRESS 
      JSB NXTC    GET NEXT NON BLANK CHAR 
      JMP CMER   NONE FOUND 
MOV01 ALF,ALF     POSITION CHAR TO LEFT,
      STA MOVE3,I  AND STORE IN OUTPUT BUFFER 
      JSB QGETC   GET NEXT CHAR 
      JMP MOV03    END OF LINE
      CPA B40     BLANK?
      JMP MOV02 
      CPA B54     COMMA?
      JMP MOV02 
      CPA B51     RIGHT PAREN?
      JMP MOV02 
      IOR MOVE3,I   PUT LOWER HALF
      STA MOVE3,I   IN BUFFER 
      JSB QGETC     GET NEXT CHAR 
      JMP MOV03     END OF LINE 
      CPA B40       BLANK?
      JMP MOV02 
      CPA B54       COMMA?
      JMP MOV02 
      CPA B51       RIGHT PAREN?
      JMP MOV02 
      ISZ MOVE3    BUMP OUTPUT POINTER
      JMP MOV01    KEEP GOING 
MOV02 JSB BAKUP   BACK UP OVER LAST CHAR
MOV03 LDA MOVE3,I WAS LAST CHAR 
      AND UPCM
      CPA MOVE3,I  AN EVEN NUMBERED CHAR? 
      RSS 
      JMP MOVE.,I  NO, BUFFER IS OK 
      IOR B40      NO,APPEND A BLLANK 
      STA MOVE3,I  AND STORE IT AWAY
      JMP MOVE.,I 
      SPC 1 
      SKP 
* 
*      ****COMMAND PROCESSORS**** 
* 
***** 
* 
** RELOCATE ** SEARCH COMMAND PROCESSORS
* 
***** 
RELST CLA,RSS       SET SEARCH FLAG OFF.
      SPC 1 
SERST CLA,INA         SET SEARCH FLAG ON. 
      SPC 1 
      STA LIBFL       STORE FLAG
      CLA 
      STA NREC      CLEAR #GOOD RECORDS COUNTER 
      STA RIC 
      STA XNAM
      JSB FCLOS     CLOSE OPEN REL INPUT FILE...IF NOT CLOSED.
      DEF *+2 
      DEF RLDCB 
      LDA LOCC     HAS LOCC BEEN SET YET? 
      SZA 
      JMP *+3      YES
      LDA .MEM3     NO--SET TO FWAM 
      STA LOCC
      LDA BPLOC     HAS BPLOC  BEEN SET YET?
      SZA 
      JMP *+3         YES. GO GET NEXT NON-BLANK CHARACTER. 
      LDA .MEM1       NO. SET BASE PAGE 
      STA BPLOC         TO FWABP. 
      JSB NXTC      GET NEXT NON-BLANK CHAR 
      JMP LDRIN     NO MORE 
      CPA B54       IS IT A COMMA?
      JMP LDRIN     YES...IGNORE REST OF LINE 
      CPA B50       LEFT PAREND?
      RSS           YES 
      JMP CMER      NO--COMMAND ERROR 
      LDA BLANK     BLANK OUT XNAM
      STA XNAM+1
      STA XNAM+2
      LDA XNAMA 
      JSB MOVE. 
* 
      JSB NXTC    GET NEXT NON BLANK CHAR 
      JMP CMER     NO MORE
      CPA B51     RIGHT PAREN?
      JMP LDRIN   YES 
      JMP CMER   NO, ERROR
      JMP LDRIN 
XNAMA DEF XNAM
LBUFA DEF LBUF
***** 
* 
** DISPLAY COMMAND PROCESSOR
* 
***** 
DSPST JSB BLINE     BLANK PRINT LINE
      LDA QQPTR  SAVE 
      STA STMP    BUFFER
      LDA QQCNT         POINTERS
      STA SVAL
      LDA LBUFA  MOVE NAME OF ENTITY TO BE DISPLAYED
      JSB MOVE.   INTO THE OUTPUT BUFFER
      LDA STMP
      STA QQPTR  RESTORE BUFFER POINTERS
      LDA SVAL
      STA QQCNT 
      LDA MD11
      LDB KTABL 
      JSB SCAN   IS THIS A KEYWORD? 
      JMP DSP10  NO, IT MUST BE AN IDENTIFIER 
      CPA D11   UNDEFS? 
      JMP OLSTU 
      CPA D10      TABLE? 
      JMP OLSTE 
      CPA B3
      LDB .MEM3 
      CPA B4
      LDB .MEM4 
      CPA B1
      LDB .MEM1 
      CPA B2
      LDB .MEM2 
      CPA B5
      LDB .MEM5 
      CPA B6
      LDB .MEM6 
      CPA D8
      LDB BPLOC 
      CPA D9
      LDB ?XFER 
      CPA B7
      LDB LOCC      GET CURRENT LOCATION COUNTER
      JMP DSP20     YES 
      SPC 2 
DSP10  LDB LBUFA
      JSB SSTBL     SEARCH SYMBOL TABLE 
      JMP DSP30     SYMBOL IS UNDEFINED 
      LDB LST4A,I    GET VALUE
DSP20 LDA LBUF+2    SET EQUAL SIGN(=) IN 6TH CHAR 
      AND UPCM         OF PRINT LINE
      IOR B75 
      STA LBUF+2
      LDA LBUF4 
      JSB CONV   CONVERT THE VALUE TO ASCII 
      LDA D12 
DSP25 LDB LBUFA 
      JSB PRINT  PRINT THE LINE 
      JMP NXTCM    FINISHED, GET NEXT COMMAND 
DSP30 LDA MD5    MOVE "UNDEFINED" TO LBUF 
      LDB DSP40 
      JSB MOVEX 
LBUF4 DEF LBUF+3
      LDA D15 
      JMP DSP25 
* 
DSP40 DEF *+1 
      ASC 5,UNDEFINED 
***** 
* 
** MAP COMMAND PROCESSOR
* 
*   LISTO--CORE MAP LISTING FLAG
*    BIT 0 GLOBAL VARIABLES 
*        1 MODULES
*        2 LINKS
*        3 HEADING HAS BEEN PRINTED 
***** 
MAPST LDA LISTO 
      AND D8
      STA LISTO 
MAP1  LDA MD6 
      LDB MTABL 
      JSB SCAN
      JMP CMER
      STA B 
      LDA LISTO 
      CPB B4        MAP ON? 
      RSS            YES. SAME AS MAP ALL.
      CPB B6        ALL ? 
      IOR B7        YES, SET ALL THREE OPTIONS. 
      CPB B1     MODULES? 
      IOR B2
      CPB B2     GLOBALS? 
      IOR B1
      CPB B3     LINKS? 
      IOR B4
      CPB B5     OFF? 
      CLA           RESET POINTER 
      STA LISTO 
      JSB DELIM   ADVANCE PAST DELIMITERS 
      RSS 
      JMP MAP1
      LDA LISTO 
      SZA,RSS      ANY OPTIONS ON?
      JMP NXTCM    NO, GET NEXT COMMAND 
      AND D8       HAS HEADING BEEN PRINTED?
      SZA 
      JMP NXTCM    YES, GET NEXT COMMAND
      LDA LISTO    RESTORE
      IOR D8
      STA LISTO 
      LDA HEAD1 
      LDB HEAD1+1 
      JSB LOUT
      LDA HEAD1 
      LDB HEAD2 
      JSB LOUT
      LDA HEAD1 
      LDB HEAD3 
      JSB LOUT
      JMP NXTCM     GET NEXT COMMAND
      SPC 1 
HEAD1 DEC 47        # CHARS. IN EACH PRINT LINE.
      DEF *+1 
      ASC 24, PROGRAM  ENTRY    LOW     HIGH    LOW     HIGH
HEAD2 DEF *+1 
      ASC 24,  MODULE  POINT    MAIN    MAIN    BASE    BASE
HEAD3 DEF *+1 
      ASC 24,  ---------------------------------------------- 
***** 
* 
** BOUNDS COMMAND PROCESSOR 
* 
***** 
BNDST LDA MD6 
      LDB KTABL 
      JSB SCAN
      JMP CMER   NO MORE KEYWORDS 
      ADA M1
      ADA .MEM.  COMPUTE ADDRESS
      STA NCHAR  SAVE ADDRESS TEMPORARILY 
      JSB NXTC   GET NEXT NON BLANK CHAR
      JMP CMER
      CPA B75    EQUAL SIGN?
      RSS 
      JMP CMER   NO,ERROR 
      JSB NSCAN  GET OCTAL NUMBER 
      JMP CMER      NO MORE CHARS.
      JMP CMER      NOT NUMERIC 
      SSA    IS IT POSITIVE OR ZERO?
      JMP BER1   NO. ISSUE ERROR AND IGNORE.
      STA NCHAR,I    LEGAL ADDRESS, POST VALUE AND
      JSB DELIM 
      JMP NXTCM 
      JMP BNDST        LOOK FOR NEW PARAMETERS
      SPC 1 
BER1  LDB BER2     ISSUE "IL BND" ERROR 
      JSB DIAG
      JMP NXTCM      AND GET NEXT COMMAND 
* 
BER2  DEF *+1 
      DEC 6 
      ASC 3,IL BND
***** 
* 
** SET COMMAND PROCESSOR
* 
***** 
SETST CLA 
      STA STMP
      LDA M2
      LDB LTABL  LOCC OR BPLOCC?
      JSB SCAN
      JMP SET01  NO, MUST BE SYM TAB ENTRY
      ADA RBTA   YES, SAVE ADDRESS TO 
      STA STMP     PUT VALUE INTO 
      JMP SET02 
SET01 JSB BLINE  BLANK OUT THE BUFFER 
      LDA LBUFA   THEN MOVE NAME TO BUF 
      JSB MOVE.     FOR LATER CHECKING
SET02 CCA 
      LDB TOTBL    LOOK FOR "TO"
      JSB SCAN
      JMP CMER    NOT FOUND, ERROR
      JSB NSCAN   GET VALUE 
      JMP CMER
      JMP CMER
      STA SVAL    SAVE VALUE
      LDB STMP   IF SYM TAB ENTRY,
      SZB,RSS 
      JMP SET03   THEN JUMP TO SET03
      STA STMP,I   ELSE SET VALUE INTO LOCC 
      JMP NXTCM     OR BPLOCC AND GET NEXT COMMAND
SET03 LDB LBUFA  LOOK FOR SYMBOL IN 
      JSB SSTBL    SYMBOL TABLE 
      JMP SET04  NOT FOUND
      LDA SVAL   IF FOUND,
      STA LST4A,I  STORE VALUE, 
      JMP NXTCM     AND GET NEXT COMMAND
SET04 LDA SVAL
      STA LST4A,I   STORE THE VALUE 
      CLA 
      STA LST5A,I    INITIALIZE LINK POINTER
      ISZ LST      BUMP ENTRIES COUNTER 
      LDB LBUFA 
      LDA B,I 
      STA LST1A,I   STORE FIRST 2 CHARS 
      INB 
      LDA B,I 
      STA LST2A,I  STORE SECOND TWO CHARS 
      INB 
      LDA B,I 
      AND UPCM   ZER OUT EXT ID NBR 
      STA LST3A,I   AND STORE FIFTH CHAR
      JMP NXTCM    THEN GET NEXT COMMAND
* 
STMP  NOP 
SVAL  NOP 
***** 
* 
** LINKS STATEMENT COMMAND PROCESSOR
* 
***** 
LNKST LDA M2        LOOK
      LDB STABL      FOR
      JSB SCAN        "START" OR "IN".
      JMP CMER      NEITHER, ERROR. 
      CPA ONE       1 MEANS "START", ELSE "IN". 
      JMP LSTRT     GO DO LINKS START.....
      LDA M2        LOOK
      LDB BCTBL      FOR
      JSB SCAN        BASE OR CURRENT.
      JMP CMER      NEITHER, ERROR. 
      CLE,ERA       1 MEANT BASE, 2 MEANT CURRENT.
      STA CPLMG     0 => BASE, 1 => CURRENT MODE. 
      STA CPLML     SET LOCAL: 0 => OFF, 1 => ON. 
      JMP NXTCM     GO GET NEXT COMMAND.
LSTRT CCA 
      LDB ATTBL 
      JSB SCAN  LOOK FOR "AT" 
      JMP CMER
      JSB NSCAN  GET LINK ADDRESS 
      JMP CMER
      JMP CMER
      STA LINKA   AND SAVE IT 
      JSB NXTC  GET NEXT NON-BLANK CHAR 
      JMP CMER
      CPA B54   IS IT A COMMA?
      RSS       YES, GOOD 
      JMP CMER  NO, ERROR 
      JSB NSCAN   GET LINK VALUE
      JMP CMER
      JMP CMER
      STA LINKV   AND SAVE IT 
      JSB LSTI    INITIALIZE SYMBOL TABLE POINTERS
LNK01 JSB LSTP     ADVANCE TO NEXT ENTRY
      JMP NXTCM   NO MORE, GET NEXT COMMAND 
      LDB LINKA 
      LDA LST4A,I 
      CPA LINKV 
      STB LST5A,I 
      JMP LNK01 
* 
LINKA NOP 
LINKV NOP 
* 
***** 
* 
** EXTERNALS INDIRECT/DIRECT OPTION 
* 
***** 
EXTST LDA M2        DIRECT/INDIRECT...ONLY TWO LEGAL
      LDB DTABL     ADDRESS OF START OF DIRECT/INDIRECT 
      JSB SCAN      LOOK FOR "DIRECT" OR "INDIRECT" 
      JMP CMER      ERROR 
      CLE,ERA       1=INDIRECT, 2=DIRECT...CONVERT TO 0,1 
      STA DIRFL     SAVE FOR ENTRIES
      JMP NXTCM     AND GET NEXT COMMAND
* 
DTABL DEF DIEXT 
* 
      SKP 
***** 
* 
** ECOST ** ECHO ON/OFF STATEMENT PROCESSOR 
* 
***** 
* 
ECOST LDA M2        TWO LEGAL OPTIONS: ON, OFF
      LDB SWTBL     ON/OFF MNEMONIC-TABLE ADDRESS.
      JSB SCAN      GO TO SEARCH FOR "ON" OR "OFF". 
      JMP CMER      * NEITHER ONE--ERROR! * 
      CLE,ERA       1=ON, 2=OFF--CONVERT TO 0 OR 1. 
      STA #ECHO     SET THE COMMAND-ECHO SWITCH.
      JMP NXTCM     GO TO GET THE NEXT COMMAND. 
* 
***** 
* 
** NXTC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF)
*CALLING SEQUENCE:
* 
*     JSB NXTC
*     RETURN1  NO MORE NON-BLANK CHARS
*     RETURN2  GOT ONE, AND IT IS RETURNED IN .A. 
* 
***** 
NXTC  NOP     GET NEXT NONN-BLANK CHARACTER.
      JSB QGETC 
      JMP NXTC,I    ERROR RETURN
      CPA B40       BLANK?
      JMP NXTC+1        GET ANOTHER CHARACTER 
      CPA B55       IS IT A "-"?
      JMP NXTC+1    YES...IGNORE IT 
      ISZ NXTC      TAKE NORMAL EXIT
      JMP NXTC,I
MD4   DEC -4
B55   OCT 55
***** 
* 
** LTG ** LEADER-TRAILER GENERATOR
***** 
* 
** DIAG ** OUTPUT MESSAGES THAT ARE STORED WITH THE CHAR COUNT
*          IMMEDIATELY PRECEEDING THE BUFFER. 
* CALLING SEQUENCE: 
* 
*     LDB ADDRESS OF BUFFER MINUS 1, WHICH CONTAIN BUFFER LENGTH
*     JSB DIAG
*     RETURN
* 
***** 
DIAG  NOP           ENTRY: LDB,JSB
      LDA B,I 
      INB 
      JSB PRINT       OUTPUT DIAGNOSTIC 
      JMP DIAG,I   RETURN.
* 
* 
                                                                                                                      