ASMB,R,L,C     ** RTE-M LOADER SUBORDINATE CONTROL
* 
* 
************************************************************************
* 
*        RTE-M LOADER SUBORDINATE CONTROL 
*        MIKE SCHOENDORF
*        OCTOBER 25,1976
* 
*        SOURCE:        92064-18122 
*        RELOCATEABLE:  92064-16024 
* 
********************************************************************
* 
      HED RTM RELOCATION SUBORDINATE CONTROL
      NAM RTRLC,7  92064-16024  REV. 1805  771212 
* 
*   ENTRY POINT NAMES 
* 
      ENT ABRC1,ABRT1,ADDRS,BPAGA,BPLOC 
      ENT CLBPL,CLFL2,COML,CONSO,CRTIN,DBTAD
      ENT DCB2,DIAG,DIAG2,EKHOS,ENTI,ENTPT,ERROR
      ENT EXEC6,FIXUP,FUT1,FUT4,FUTI
      ENT FUTS,FWABP,FWAC,FWAM,INACT,INIT2,KONSO
      ENT LDGEN,LENGT,LGUNT,LNKDR,LOCC,LST
      ENT LSTUL,LST1,LST4,LST5,MAPS,.MEM1 
      ENT .MEM2,.MEM3,.MEM4,.MEM5,.MEM6 
      ENT OPT.3,PLK,PLK4,PLKS,PRCMD 
      ENT PRINT,RDFL1,SCP,SSTBL,TIMES,TYOFF 
      ENT TYPRO,UEXFL,UNDEF,?XFER,ZPRIV,ZRENT 
* 
*   EXTERNAL REFERENCE NAMES
* 
      EXT PNAME,PNAMA,PRAMS 
      EXT $CON,PARSE
      EXT CLOSE,CREAT,IFTTY,EXEC,FCONT,IMESS  
      EXT LIMEM,LOCF,OPEN,POSNT,READF,WRITF 
      EXT IDCB1,IDCB2,IDCB3,IDCB4,IDCB5,IDCB6,IDCB7 
      EXT CNUMD,DCMC
* 
A     EQU 0 
B     EQU 1 
      SUP 
************************************************************************
* 
*   THESE ROUTINES ARE USED BOTH IN THE RTM LOADER ITSELF AND IN
* THE RTM GENERATOR RTMGN.  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  RTM LOADER UTILITY SUBROUTINES 
***** 
* 
** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF)
* CALLING SEQUENCE: 
* 
*     JSB BLINE 
*     RETURN
* 
***** 
BLINE NOP 
      LDA LBUFA 
      STA BELIN 
      LDA MD60
      LDB BLANK 
      STB BELIN,I 
      ISZ BELIN 
      INA,SZA 
      JMP *-3 
      JMP BLINE,I 
* 
BELIN NOP 
MD60  DEC -60 
      SPC 5 
      SKP 
* 
***** 
* 
** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT
*           DELIMITER.  ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR 
*           MORE BLANKS, OR A COMMA EMBEDDED IN BLANKS. 
* CALLING SEQUENCE: 
* 
*     JSB DELIM 
*     RETURN1  NOTHING BUT BLANKS TO END OF LINE
*     RETURN2  DELIMITER 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 COMMA? 
      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
* 
STMP1 NOP           COMMA COUNTER 
      SKP 
***** 
* 
** 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
* 
.ABR  DEF ABREC 
ABREC OCT 0 
ABRC1 BSS 49        BUFFER FOR ABSOLUTE RECORD
ABL1  DEF ABREC+2   HOLDS CURRENT BUFFER ADDRESS
ABL2  DEF ABREC+2 
      SPC 5 
***** 
* 
** 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. 
      SKP 
***** 
* 
** 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 OUTON     OUTPUT FILE OPEN? 
      SZA,RSS 
      JMP ERROO     NO, ERROR 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 WRFL2     WRITE RECORD TO ABS OUTPUT FILE 
      CLA           ZERO OUT
      STA ABREC     WORD COUNT
      STA CKS       AND CHECKSUM
      LDA ABL2      INITIALIZE
      STA ABL1      NEXT WORD POINTER 
      JMP PUNCH,I  EXIT-
* 
ERROO CLB 
      JSB CLFL3     CLOSE REL FILE
      LDA OO
      CLB           NO FMP ERROR
      JMP WERR1 
* 
OO    ASC 1,OO
* 
CKS   NOP           CHECKSUM
      SKP 
* 
*  SUBROUTINE TO PROCESS TIME PARAMETERS FOR ID SEGMENT 
* 
TIMES NOP 
      LDA D12       GET THE SECONDS 
      JSB ADRES 
      MPY P100      CONVERT TO 10'S OF MS 
      STA TEMP1 
      LDA D13 
      JSB ADRES 
      ADA TEMP1     ADD 10'S OF MS
      STA OCTNO     SAVE TEMP 
      LDA D10       GET THE HOURS 
      JSB ADRES 
      MPY P60       CONVERT TO MINUTES
      STA TEMP1 
      LDA D11 
      JSB ADRES 
      ADA TEMP1     ADD MINUTES 
      MPY P6000     CONVERT TO 10'S OF MS 
      CLE           PREPARE FOR ADD 
      ADA OCTNO     ADD 10'S OF MS
      SEZ,CLE       IF OVERFLOW 
      INB           STEP HIGH ORDER PART
      ADA NDAY+1    SUBTRACT ONE DAY OF 10'S OF MS
      SEZ,CLE       IF OVERFLOW 
      INB           STEP HIGH ORDER DIGIT 
      ADB NDAY
      JMP TIMES,I 
* 
D13   DEC 13
P60   DEC 60
P100  DEC 100 
P6000 DEC 6000
NDAY  OCT 177574,025000 
* 
OCTNO NOP 
TEMP1 NOP 
      SKP 
* 
*  SUBROUTINE TO GET VALUES FROM PNAMA TABLE
* 
ADRES NOP 
      ADA PNAMA 
      LDA 0,I 
      JMP ADRES,I 
      SPC 5 
* 
*  SUBROUTINE TO OUTPUT 2-WORD TIE-OFF RECORDS
* 
TYOFF NOP 
      JSB PACK      WORD 1 FROM (A) 
      LDA B         WORD 2 FROM (B) 
      JSB PACK
      JSB PUNCH 
      JMP TYOFF,I 
      SKP 
***** 
* 
** 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 RTM LOADER COMMANDS 
NXTCM JSB CMDIN     GET NEXT COMMAND LINE 
NXTC2 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 
* 
* 
CMND? DEF *+1 
      OCT 5 
      ASC 3,CMND? 
***** 
*     CONTROL COMES HERE ON DETECTING A COMMAND ERROR.  THE MESSAGE 
*     'CMND?' IS OUTPUT.
***** 
CMER  LDB CMND?    OUTPUT CMND? MESSAGE 
      JSB DIAG2 
      JMP EXEC0 
      HED RTM 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 RELST     RELOCATE STATEMENT
      DEF SERST     SEARCH STATEMENT
      DEF OUTST     OUTPUT STATEMENT
      DEF DSPST     DISPLAY STATEMENT 
      DEF TR        TRANSFER
      DEF TR        TR
      DEF EOL       END STATEMENT 
      DEF SETST     SET STATEMENT 
      DEF LINST     LINKS IN STATEMENT
      DEF LNKST     LINKS STATEMENT 
      DEF SNPST     SNAPSHOT STATEMENT
      DEF EXIT      EXIT STATEMENT
      DEF ECHO      ECHO STATEMENT
      DEF MCART     MOUNT CARTRIDGE STATEMENT 
      DEF DCART     DIKSMOUNT CARTRIDGE STATEMENT 
      SKP 
***** 
* 
*     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 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 1400B+AREL-CMTBL    ABBR. OF 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 4000B+ALKIN-CMTBL   LINKS IN
      ABS 2400B+ALINK-CMTBL   LINKS 
      ABS 2000B+ASNAP-CMTBL   SNAP
      ABS 1000B+AEXIT-CMTBL   EXIT
      ABS 2000B+AECHO-CMTBL   ECHO
      ABS 1000B+AMONT-CMTBL   MOUNT CARTRIDGE 
      ABS 1000B+ADMNT-CMTBL   DISMOUNT CARTRIDGE
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  LWAC 
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 
      ABS 1000B+AON..-CMTBL   ON
ATABS ABS 1400B+AYES.-CMTBL  YES
      ABS 1000B+ANO..-CMTBL   NO
TSTRT ABS 2400B+ASTRT-CMTBL  START
TAT   ABS 1000B+AAT..-CMTBL  AT 
TTO   ABS 1000B+ATO..-CMTBL  TO 
LIABS ABS 2000B+ABASE-CMTBL BASE
      ABS 3400B+ACURT-CMTBL CURRENT 
ONABS ABS 1000B+AON..-CMTBL ON
      ABS 1400B+AOFF.-CMTBL OFF 
STABL DEF TSTRT 
ATTBL DEF TAT 
TOTBL DEF TTO 
LTABL DEF LTABS 
KTABL DEF KTABS 
MTABL DEF MTABS 
ATABL DEF ATABS 
LITBL DEF LIABS 
ONTBL DEF ONABS 
      SKP 
***** 
*     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
AREL  ASC 2,REL 
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 
ALKIN ASC 4,LINKS IN
ALINK ASC 3,LINKS 
ASNAP ASC 2,SNAP
AEXIT ASC 1,EX
AECHO ASC 2,ECHO
AON.. ASC 1,ON
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
ABASE ASC 2,BASE
ACURT ASC 4,CURRENT 
AMONT ASC 1,MC
ADMNT ASC 1,DC
* 
      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.
      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
* 
CCNT  NOP           COUNTER 
CNT   NOP           OFFSET COUNTER
CNTR  NOP           NUMBER OF ENTRIES TO SEARCH 
NCHAR NOP           NUMBER OF CHARACTERS
PTR   NOP           MNEMONIC TABLE ADDRESS
PTR2  NOP           POINTER TO ASCII COMMAND
QQCN1 NOP           CHARACTER STREAM
QQPT. NOP           POINTERS
TEMP  NOP           TEMP STORAGE
      HED   INPUT COMMAND LINE
***** 
* 
** CMDIN ** INPUT NEXT COMMAND LINE 
* CALLING SEQUENCE: 
* 
*     JSB CMDIN 
*     RETURN
* 
* NOTE: CMDIN SKIPS COMMENTS AND ADVANCES INPUT BUFFER
*       POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER.
* 
*       THE IDENTIFIER CMDLU IS USED TO DETERMINE IF THE INPUT IS 
*       COMING FROM THE SESSION CONSOLE (=4) OR TRANSFER FILE (=1). 
*       THE IDENTIFIER ECHO1 IS USED TO DETERMINE IF THE INPUT
*       SHOULD BE ECHO'ED TO THE LIST DEVICE (0=NO ECHO, 1=ECHO). 
* 
* 
*      RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED
* 
***** 
CMDIN NOP 
      CLA           RESET INCOMING CHARACTER
      STA QQCNT         POINTERS
      LDA QBUFA 
      STA QQPTR 
      LDA CMDLU     INPUT COMMAND DEVICE-FILE?
      CPA B4
      RSS 
      JMP CMD5      NO, MUST BE TRANSFER FILE 
      LDA CONSO     GET INPUT FROM SESSION CONSOLE? 
      SZA 
      JMP CMD3      YES 
CMD1  LDB PRPTA 
      JSB DIAG      SEND PROMPT TO ERROR-PROMPT LOG 
CMD6  LDB QBUFA     INPUT BUFFER
      LDA CMDLU 
      CPA B1        TRANSFER FILE?
      JMP RDRIN     YES, READ IT
      LDA DCB1      DATA CONTROL BLOCK
      JSB RDFL1     READ FROM INPUT DEVICE-FILE 
      CPA M1        END OF FILE?
      JMP CMD4      YES, GET INPUT FROM SESSION CONSOLE 
CMD2  STA QQCHC     SAVE # OF CHARACTERS READ 
      LDB QBUFA          AND BUFFER ADDRESS 
      JSB EKHOS     TRY WRITING ON MAP OR ECHO FILE 
      LDA QBUFA,I     GET 1ST CHARACTER.
      ALF,ALF 
      AND B177
      CPA B52       COMMENT?
      JMP CMDIN+1   YES, GET NEXT COMMAND 
      CPA B55       IS COMMAND ID SUPPLIED? 
      ISZ QQCNT     YES--BUMP CHAR. POINTER 
      JMP CMDIN,I 
RDRIN LDA DCB6      DATA CONTROL BLOCK ADDRESS
      JSB RDFL6     GO READ FILE
      CPA M1        FINISHED? 
      RSS 
      JMP CMD2      NO
      LDA B4        YES, TRANSFER INPUT TO COMMAND
      STA CMDLU     DEVICE-FILE 
      JSB CLFL6     CLOSE TRANSFER FILE 
      JMP CMDIN+1 
* 
CMD4  CLA,INA 
      STA CONSO 
      STA KONSO 
CMD3  LDB PRPTA     PROMPT
      JSB OTMES     GET RESPONSE
      JMP CMDIN,I 
* 
CMD5  LDA DCB6      GET TRANSFER FILE DCB 
      JSB INDCK 
      ADA B2
      LDA 0,I       TYPE 0 FILE?
      SZA 
      JMP CMD6      NO, DON'T ISSUE PROMPT
      LDA DCB6
      JSB INDCK 
      JSB LOCFS     GET LOGICAL UNIT OF FILE
      SSA 
      JMP LGER2     LU ERROR
      JSB IFTTY     .CHECK LU FOR INTERACTIVE 
      DEF *+2 
      DEF JLU 
      SZA 
      JMP CMD7      YES 
      LDA CONSO     SWITCH TO SESSION CONSOLE?
      SZA 
      JMP CMD7      YES 
      LDA INACT     INTERACTIVE INPUT?
      SZA,RSS 
      JMP CMD6      NO
CMD7  LDB PRPTA     YES 
      JSB DIAG2 
      JMP CMD6
* 
* 
B52   OCT 52        COMMENT CHARACTER 
B55   OCT 55
CMDLU OCT 4 
* 
PRPTA DEF *+1 
      OCT 1 
      ASC 1,- 
* 
KONSO NOP 
      SPC 1 
      HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE 
***** 
* 
** SSTBL ** SEARCH SYMBOL TABLE 
* CALLING SEQUENCE
* 
*     LDB 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 
      CLA           FLAG FOR 0 ENTRY IN LST TABLE 
      STA FFLAG 
      STB CMDIN  SAVE TEMPORARILY 
      JSB LSTI      INITIALIZE SYMBOL TABLE 
SSTB1 JSB LSTP      SET LST ENTRY ADDRESSES 
      JMP SSTBL,I   END OF TABLE
      LDA LST1,I    GET WORD 1 OF LST ENTRY 
      SZA           USED ENTRY? 
      JMP SSTB2     YES 
      LDA LST1
      ADA M1
      STA FFLAG     SAVE ADDRESS OF LAST 0 ENTRY
SSTB2 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 
* 
FFLAG NOP           FLAG FOR 0 ENTRY IN LST 
      SKP 
***** 
* 
** 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 
      CPA B50       LEFT PAREN? 
      JMP MOV02     YES 
      CPA B72       COLON?
      JMP MOV02     YES 
      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 
      CPA B50       LEFT PAREN? 
      JMP MOV02     YES 
      CPA B72       COLON?
      JMP MOV02     YES 
      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  YES, BUFFER IS OK
      IOR B40      NO, APPEND A BLANK 
      STA MOVE3,I  AND STORE IT AWAY
      JMP MOVE.,I 
* 
MOVE3 NOP           DESTINATION ADDRESS 
* 
B72   OCT 72
      SPC 1 
      SKP 
* 
* 
*  SUBROUTINE TO INITIALIZE LOADER SUBCONTROL 
* 
* 
INIT  NOP 
      LDA 1,I 
      STA BUFST 
      ISZ 1 
      LDA 1,I 
      STA BUFST+1 
      ISZ 1 
      LDA 1,I 
      STA BUFST+2 
      ISZ 1 
      LDA 1,I 
      STA BUFST+3 
      ISZ 1 
      LDA 1,I 
      STA BUFST+4 
      NOP 
      NOP 
      LDB BUFER 
      STB PRMAD 
      CLA,INA 
      JSB GLWAM     GET LAST WORD OF AVAILABLE MEMORY 
      STA OPT.3     SAVE
      ADA M3        ADJUST FOR FIRST FIX-UP TABLE ENTRY 
      STA FUT4
      LDA B4        INITIALIZE TO INPUT/DEVICE FILE MODE
      STA CMDLU 
      LDA B100
      STA FWABP     FIRST WORD OF AVAILABLE BASE PAGE 
      LDA B1646 
      STA LWABP     LAST WORD OF AVAILABLE BASE PAGE
      LDA B2000 
      STA FWAM      FIRST WORD OF AVAILABLE MEMORY
      LDA OPFLA     SET FOR NO PAUSE
      AND UDFE
      JSB PAUSE 
      CLA 
      STA LISTO     INITIALIZE MAP OUTPUT 
      STA LINTP     LINKS IN FLAG (SET TO BASE) 
      STA FWAC      FIRST WORD OF COMMON
      STA LWAC      LAST WORD OF COMMON 
      STA OPT.3,I   NUMBER OF FIXUPS
      STA ECHO1     ECHO OFF
      STA MAPON     MAP OFF 
      STA AL        CLEAR MAP FILE NAME 
      STA ECFIL     CLEAR ECHO FILE NAME
      STA EMSAM     MAP/ECHO FILE OFF 
      STA INACT     SET INPUT TO NON-INTERACTIVE
      STA FL1OP     CLEAR COMMAND FILE OPEN BIT 
      STA ERDVC     CLEAR ERROR LOG DEVICE
      STA OPEN1     CLEAR COMMAND FILE OPEN BIT 
      STA TYPRO     SET TO ANY TYPE MODULE ALLOWED
      STA CONSO     GET INPUT FROM SESSION CONSOLE
      STA UEXFL     UNDEFINED EXTERNALS 
      JSB INIT2 
      JMP INIT,I
* 
INIT2 NOP 
      LDA ABL2
      STA ABL1
      JSB CLBPL 
      CLA 
      STA LOCC      PROGRAM RELOCATION BASE 
      STA UNDEF     START SEARCH AT BEGINNING OF LST
      STA FRTRU     FIRST TIME THRU FLAG
      STA ?XFER     "HAVE MAIN FLAG"
      STA BPLOC     BASE PAGE RELOCATION BASE 
      STA COML      "COMMON USED FLAG"
      STA LST,I     LOADER SYMBOL TABLE LENGTH
      STA NAMR.     ALLOW A NAM RECORD
      STA OUTON     ABSOLUTE OUTPUT FILE CLOSED 
      STA FTIME     OUTPUT TYOFF RECORD ONLY AT START 
      STA ISECU     SECURITY CODE 
      STA ICR       LABEL 
      STA WRTBT     NO RELOCATION YET 
      STA TRUNC     DON'T TRUNCATE ON ABORT 
      STA ABREC     CLEAR RECORD LENGTH 
      STA CKS       CLEAR CHECK SUM 
      STA SERFG     LIBRARY LOAD FLAG 
      JMP INIT2,I 
* 
B1646 OCT 1646
* 
CONSO NOP 
FL1OP NOP 
FTIME NOP 
OPEN1 NOP 
TRUNC NOP 
WRTBT NOP           ANY RELOCATION FLAG 
* 
BUFER DEF *+1 
BUFST BSS 5 
      SKP 
* 
* 
*  SUBROUTINE TO CLEAR BASE PAGE LINKS
* 
* 
CLBPL NOP 
      LDA M1020     CLEAR 
      STA COUNT      BASE 
      CLA             PAGE
      LDB BPAG4        LINK 
      STA B,I           AREA
      INB                FOR
      ISZ COUNT           LOADER
      JMP *-3 
      JMP CLBPL,I 
* 
M1020 DEC -1020 
BPAG4 DEF BPAGE     ADD OF 1ST WORD OF BP LINKS TBL 
COUNT NOP 
      SPC 1 
      SKP 
      HED *** FILE PROCESSORS *** 
                                                  