ASMB,R,L,B,C
* 
*************************************************************** 
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975.  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.       * 
*************************************************************** 
* 
* 
*   THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND
*   THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT 
*   THIS DOCUMENT 
* 
************************************************************************
* 
*        RTE-C LOADER SUBORDINATE CONTROL 
*         REV.A  JACK COOLEY  15MAY73 
*         REV,B  D.L.S.       11MAR75  COPYRIGHT
* 
* 
********************************************************************
* 
      HED RTS RELOCATION SUBORDINATE CONTROL
      NAM RTRLC                             
* 
*   ENTRY POINT NAMES 
* 
      ENT LST,.MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 
      ENT IBUFR,PUNCH,OPT.3,ABRC1,PLK,?XFER,PLKS,LSTA1
      ENT UEXFL,SSTBL,LST1,LST2,LST3,LST4,LST5,LTG
      ENT MEMRY,PRCMD,PACK,BPLOC,LOCC 
      ENT LINK,ASR33,B7,PCHX,DIAG 
      ENT MOVEX,B2,B4,MD24,MD60,UPCM,FWAM,FWAC,COML 
      ENT  CNTR,BPAGA,MD6,FWABP 
      ENT BPAG4,LISTO 
      ENT LOUT,NAMR.,ABORT
      ENT LOEND 
* 
*   EXTERNAL REFERENCE NAMES
* 
      EXT PNAME,PNAMA,PRAMS 
* 
A     EQU 0 
B     EQU 1 
      SUP 
************************************************************************
* 
*   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 
* 
********************************************************************
      HED  RTS LOADER UTILITY SUBROUTINES 
***** 
* 
** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF)
* CALLING SEQUENCE: 
* 
*     JSB BLINE 
*     RETURN
* 
***** 
      BSS 1 
BLINE NOP 
      LDA LBUFA 
      STA BLINE-1 
      LDA MD24
      LDB BLANK 
      STB BLINE-1,I 
      ISZ BLINE-1 
      INA,SZA 
      JMP *-3 
      JMP BLINE,I 
***** 
* 
** RBIN ** READ RELOCATABLE BINARY INPUT FROM SIO DRIVER TO (LBUF)
* CALLING SEQUENCE: 
* 
*     JSB RBIN
*     RETURN
* 
* NOTE: NUMBER OF WORDS TRANSMITTED IS COMPLEMENTED AND STORED IN 
*         THE FIRST WORD OF THE BUFFER, OVERLAYING FIRST INPUT WORD 
***** 
RBIN  NOP 
      LDA MD60
      LDB LBUFA 
      JSB 101B,I
      CMA,INA    GET NEG. # DATA WORDS IN RECORD
      STA LBUF   STORE
      JMP RBIN,I
***** 
* 
** IBUFR ** INITIALIZE THE ABSOLUTE RECORD BUFFER (ABREC) SO IT MAY 
*           BE FILLED UP FOR LATER OUTPUT 
* CALLING SEQUENCE: 
*     JSB IBUFR 
*     RETURN
* 
***** 
IBUFR NOP 
      CLA       ZERO OUT
      STA ABREC  WORD COUNT 
      STA CKS    AND CHECKSUM 
      LDA ABL2  INITIALIZE
      STA ABL1   NEXT WORD POINTER
      JMP IBUFR,I 
* 
MEMRY DEF FWABP 
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 
***** 
*     THE ABSOLUTE RECORD BUFFER
* 
ABREC OCT 0 
ABRC1 BSS 49   BUFFER FOR ABSOLUTE RECORD 
* 
***** 
* 
** PACK ** INSERT A WORD INTO THE ABSOLUTE RECORD BUFFER
* CALLING SEQUENCE: 
* 
*     LDA WORD TO BE PLACED IN RECORD 
*     JSB PACK
*     RETURN
* 
* NOTE: .B. IS NOT ALTERED BY THIS SUBROUTINE 
***** 
PACK  NOP 
      STA ABL1,I    STORE WORD AT NEXT LOCATION 
      ISZ ABL1       IN BUFFER, INCREASE ADDRESS. 
      ADA CKS       ADD WORD TO CHECKSUM
      STA CKS        AND RESTORE WORD 
      ISZ ABREC     COUNT WORD
      JMP PACK,I    AND EXIT. 
***** 
* 
** PUNCH ** OUTPUT THE RECORD IN THE ABSOLUTE RECORD BUFFER 
* CALLING SEQUENCE: 
* 
*     JSB PUNCH 
*     RETURN
* 
* NOTE: THIS SUBROUTINE INSERTS CHECKSUM AND WORDCOUNT BEFORE OUTPUT
***** 
PUNCH NOP          ENTRY/EXIT 
      LDA CKS       ADD LOAD ADDRESS TO CHECK-SUM 
      ADA ABREC+1    AND SET RECORD SUM 
      STA ABL1,I      IN LAST WORD OF RECORD. 
      LDA ABREC     ADD 2 TO RECORD WORDCOUNT 
      ALF,ALF         POSITION AS FIRST CHAR. AND 
      STA ABREC        SET. 
      ALF,ALF      REPOSITION, ADD 3 FOR TOTAL
      ADA B3         LENGTH AND SET FOR 
      CMA,INA 
      LDB .ABR
      JSB PCHX
      JSB IBUFR     SET UP OUTPUT 
      JMP PUNCH,I  EXIT-
***** 
* 
** PCHX ** PUNCH OUT THE CONTENT OF A SPECIFIED BUFFER
*          IF USING AN ASR33 TTY, THE COMPUTER WILL HALT (07) WHEN
*          SWITCHING FROM KEYBOARD TO PUNCH MODE. 
* CALLING SEQUENCE: 
* 
*     LDA LENGTH, POSITIVE IF  CHARS, NEGATIVE IF WORDS 
*     LDB BUFFER ADDRESS
*     JSB PCHX
*     RETURN
* 
***** 
PCHX  NOP           ENTRY: LDA,LDB,JSB. 
      STA TMP    SAVE (A) 
      LDA ASR33   ARE WE USING ASR33 TTY? 
      SZA,RSS 
      JMP NO33   NO, DO OUTPUT
USPCH HLT 7B     YES, HALT IF NOT IN PUNCH MODE 
      CLA 
      STA USPCH  CLEAR USPCH TO SET PUNCH MODE
      LDA HLT.K   AND SET HALT FOR
      STA USKBD    SWITCH TO KEYBOARD MODE
NO33  LDA TMP    RESTORE (A)
      JSB 103B,I   DO OUTPUT
      JMP PCHX,I
* 
TMP    NOP
ASR33  NOP
HLT.K  HLT 70B
***** 
* 
** 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. 
* 
***** 
PRCMD NOP           PROCESS RTE LOADER/2100 COMMANDS
TYMOD LDA TTYIN   INITIALIZE TO 
      STA CMDLU    TTY MODE 
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 TYMOD    GET NEXT COMMAND FROM TTY
      HED RTS LOADER TABLES 
***** 
* 
*  BRANCH TABLE FOR COMMAND PROCESSORS. 
*  ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN
*  COMMAND PNEUMONIC TABLE. 
* 
***** 
PTABL DEF * 
      DEF BNDST     BOUNDS STATEMENT
      DEF MAPST     MAP STATEMENT 
      DEF RELST     RELOCATE STATEMENT
      DEF SERST     SEARCH STATEMENT
      DEF NXTCM    OUTPUT STATEMENTS IGNORED
      DEF DSPST     DISPLAY STATEMENT 
      DEF TR        TRANSFER
      DEF TR        TR
      DEF EOL       END STATEMENT 
      DEF SETST     SET STATEMENT 
      DEF LNKST     LINKS STATEMENT 
***** 
* 
*     COMMAND PNEUMONIC 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 TRANSFER APPEARS BEFORE TR)
* 
***** 
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 3000B+ASEAR-CMTBL   SEARCH
      ABS 3000B+AOTPU-CMTBL   OUTPUT
      ABS 3400B+ADISP-CMTBL   DISPLAY 
      ABS 4000B+ATRAN-CMTBL   TRANSFER
      ABS 1000B+ATR..-CMTBL   ABBR. OF TRANSFER 
      ABS 1400B+AEND.-CMTBL     END 
      ABS 1400B+ASET.-CMTBL  SET
      ABS 2400B+ALINK-CMTBL  LINKS
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 
      ABS 1400B+AOFF.-CMTBL   OFF 
ATABS ABS 1400B+AYES.-CMTBL  YES
      ABS 1000B+ANO..-CMTBL   NO
TSTRT ABS 2400B+ASTRT-CMTBL  STATR
TAT   ABS 1000B+AAT..-CMTBL  AT 
TTO   ABS 1000B+ATO..-CMTBL  TO 
STABL DEF TSTRT 
ATTBL DEF TAT 
TOTBL DEF TTO 
LTABL DEF LTABS 
KTABL DEF KTABS 
MTABL DEF MTABS 
ATABL DEF ATABS 
***** 
*     ASCII KEYWORD TABLE 
*  ORDER OF ENTRIES IN THIS TABLE IS ON 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 
AOFF. ASC 2,OFF 
ATRAN ASC 4,TRANSFER
ATR.. ASC 1,TR
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 
AYES. ASC 2,YES 
ANO.. ASC 1,NO
ASTRT ASC 3,START 
AAT.. ASC 1,AT
ASET. ASC 2,SET 
ATO.. ASC 1,TO
* 
PRPTA DEF *+1 
      ASC 1,--
* 
PTR   NOP 
CNTR  NOP 
PTR2  NOP 
CCNT  NOP 
QQCN1 NOP 
QQPT. NOP 
TEMP  NOP 
NCHAR NOP 
CNT NOP 
      SKP 
      HED SCANNER ROUTINE 
***** 
* 
** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD
* CALLING SEQUENCE: 
* 
*     LDA NUMBER OF ENTRIES TO SEARCH 
*     LDB ADDRESS OF PNEUMONIC 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.
SCAN3 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
      HED   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 
      LDA CMDLU     TTY?
      CPA TTYIN      TTY? 
      RSS 
      JMP   CMD1    NO--SKIP PROMPT 
      CLA,INA 
      LDB PRPTA 
      JSB LOUT
CMD1  LDB QBUFA     GET COMMAND INPUT LINE
      LDA D72 
CMDLU JSB 104B,I    GET NEXT COMMAND LINE 
      STA QQCHC 
      SZA           EOT?
      JMP CMD2
      CPA    NDATA    NEED TO SKIP LEADER?
      JMP CMD1         YES
      LDA TTYIN      AUTOMATIC TRANSFER TO TTY. 
      STA CMDLU 
      JMP CMDIN+5 
*   CHECK INPUT LINE FOR COMMAND IDENTIFIER CHAR
CMD2  LDA CMDLU       ECHO? 
      CPA TTYIN 
      JMP *+4         NO
      LDA QQCHC        YES; GET CHARACTER COUNT,
      LDB QBUFA          AND BUFFER ADDRESS 
      JSB LOUT             AND ECHO ON LIST DEVICE
      LDA QBUFA,I     GET 1ST CHARACTER.
      STA NDATA       CLEAR SKIP LEADER FLAG. 
      ALF,ALF 
      AND B177
      CPA STAR    COMMENT?
      JMP CMDIN+1 YES 
      LDB CMDLU 
      CPB TTYIN 
      JMP CMD3      YES--COMMAND ID OPTIONAL
      CPA B55    IS COMMAND ID (-) THERE? 
      RSS 
      JMP CMER      NO--PRINT ERROR & SWITCH TO TTY.
      ISZ QQCNT 
      JMP CMDIN,I 
CMD3  CPA B55    IS COMMAND ID SUPPLIED?
      ISZ QQCNT     YES--BUMP CHAR. POINTER 
      JMP CMDIN,I 
TTYIN JSB 104B,I    INSTR. FOR KEYBOARD COMMAND INPUT 
PRDR  JSB 101B,I    "      "    STANDARD "       "
STAR  OCT 52       COMMENT CHARACTER
      SPC 1 
      HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE 
***** 
* 
** SSTBL ** SEARCH SYMBOL TABLE 
* CALLING SEQUENCE
* 
*     LDA ADDRESS OF 5 CHAR NAME TO MATCH 
*     JSB SSTBL 
*     RETURN1  SYMBOL NOT FOUND 
*     RETURN2  FOUND, LST1-LST5 POINT TO MATCHED ENTRY
* 
* NOTE: THE NAME INPUT FOR MATCH MUST START ON A WORD BOUNDARY
***** 
      SPC 1 
SSTBL NOP 
      STB CMDIN  SAVE TEMPORARILY 
      JSB LSTI      INITIALIZE SYMBOL TABLE 
SSTB1 JSB LSTP      SET LST ENTRY ADDRESSES 
      JMP SSTBL,I   END OF TABLE--ERROR RETURN
      LDB CMDIN  RETRIEVE ADDRESS OF TARGET MATCH 
      LDA B,I 
      CPA LST1,I    CHARS. 1&2 MATCH? 
      INB,RSS 
      JMP SSTB1     NO--GET NEXT ENTRY
      LDA B,I 
      CPA LST2,I
      INB,RSS 
      JMP SSTB1 
      LDA B,I 
      XOR LST3,I
      AND UPCM      CHECK CHAR. 5 
      SZA 
      JMP SSTB1 
*   MATCH FOUND -- MAKE SUCCESS RETURN
      ISZ SSTBL 
      JMP SSTBL,I 
* 
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 
      HED *** COMMAND PROCESSORS ***
                                                                                                                                                                                          