ASMB,Q,R,C
      HED          RT4G2 - PROGRAM INPUT PHASE SEGMENT
      NAM RT4G2,5,90 92067-16317 REV.2001 790817
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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 3 
******************************************************************
* 
*   NAME:            RT4G2
*   SOURCE PART #:   92067-18317
*   REL PART #:      92067-16317
*   WRITTEN BY:      KFH, JH, JC, GAA, EJW
* 
******************************************************************
      SPC 1 
      ENT \PIP
* 
*   EXTERNAL REFERENCE NAMES
* 
      EXT \LST1,\LST4,\LST5 
      EXT \CURL,\LBUF,\TBUF 
      EXT \BPAR,\DPR2 
      EXT \PRMT,\LSTS,\ILST,\LSTX,\LSTE 
      EXT \TLST,\PLST,\TIDN,\PIDN 
      EXT \INID,\IDXS,\IDX
      EXT \ID1,\ID2,\ID3,\ID4,\ID5,\ID6,\ID7,\ID8,\ID9,\ID10,\ID11
      EXT \ID12,\ID13,\ID14,\ID15,\ID16 
      EXT \SRET,\RBIN 
      EXT \RDCB,\CLOS,\ABOR 
      EXT \GNER,\MESS,\SPAC,\TERM 
      EXT \OCTN,\BUFL,\TCHR 
      EXT \READ,\GETN,\GETC,\GET# 
      EXT \NDCB,\FMRR,\CFIL,\RNAM 
      EXT READF,WRITF 
      EXT LOCF,RWNDF,APOSN
      EXT \NAMN,\NAMB,\NAMO 
      EXT \IACM,\TRCM,\TRCH 
* 
A     EQU 0 
B     EQU 1 
      SUP 
************************************************************************
* 
      SKP 
*************************************************************************** 
* 
*                                                              770913 
* 
*    THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, 
*    AND IS REFERENCED BY, EACH SEGMENT.  IT IS NOT OVERLAID
*    AS EACH NEW SEGMENT IS LOADED INTO MEMORY. 
* 
*    THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN ALL
*    SEGMENTS.  IF A CHANGE IS MADE, MAKE THE SAME CHANGES
*    IN THE REST OF THE SEGMENTS. 
* 
*************************************************************************** 
* 
* 
TB30  BSS 160       TRACK MAP TABLE/HEADER RECORD BUFFER
* 
ILIST BSS 64        USER SYSTEM PROG IDENT ADDR LIST
CURIL BSS 1         CURRENT ILIST ADDRESS 
* 
SYSCH BSS 1         SUBCHANNEL OF SYSTEM UNIT.
DCHNL BSS 1         CHANNEL OF SYSTEM DISK UNIT 
AUXCH BSS 1         SUBCHANNEL OF AUX UNIT. 
DSIZE BSS 1         DISK SIZE -NO. OF TRACKS. 
#SUBC BSS 1         # DISC SUBCHANNELS DEF'D (7905/7920)
DAUXN BSS 1         AUXILIARY DISK SIZE.
ADS#  BSS 1         AUX DISC SECTORS/TRACK. 
* 
*             RELOCATION BASE TABLE.
RBTA  BSS 1         ABSOLUTE PROGRAM BASE.
TPREL BSS 1         CURRENT PROGRAM BASE ADDRESS. 
TPBRE BSS 1         BASE PAGE RELOCATION ADDRESS. 
COMAD BSS 1         CURRENT COMMON RELOCATION BASE. 
      BSS 1         ABS PROGRAM BASE FOR MR CODE. 
* 
WDCNT BSS 1         TEMPORARY WORD COUNTER. 
DSKSY BSS 1         INITIAL ID SEGMENT DISK ADDRESS 
IDSP  BSS 1         POSITION OF 1ST ID SEG. IN SECT 
TTYCH BSS 1         SYSTEM TTY CHANNEL NO.
* 
PLFLG BSS 1         PROGRAM LOAD. FLAG = -1/0 = L/NL
DSCNT BSS 1         DISK SEGMENT SECTOR COUNT 
* 
NXFLG BSS 1         ENT/EXT FLAG = -1/0 
EXCNT BSS 1         SYMBOL COUNTER
* 
LCNT  BSS 1         CURRENT \LBUF COUNT 
DCNT  BSS 1         CURRENT DBUF COUNT
CURAI BSS 1         CURRENT IBUF COUNT
* 
CPLS  BSS 1         ADDRESS OF TOP OF FIXED CP LINK IMAGE 
CPL1  BSS 1         ADDRESS OF LOW CURRENT PAGE LINK SPECS. 
CPL1H BSS 1         NUMBER OF CURRENT PAGE LINKS ASSIGNED 
CPL2H BSS 1         IN LOW AND HIGH AREA RESPECTIVELY 
URBP1 BSS 1         LWA R/T DISC RES BP LINK AREA 
CURAK BSS 1         CURRENT KBUF ADDRESS
* 
CURAT BSS 1         CURRENT \TBUF ADDRESS 
TCNT  BSS 1         CURRENT \TBUF COUNT 
* 
CURAP BSS 1         CURRENT PLIST ADDRESS 
* 
AMAD  BSS 1         CURRENT MLIST ADDRESS 
* 
IXCNT BSS 1         ID EXTENSION COUNT
IDEXC BSS 1         CURRENT ID EXT'S USED 
IDEX  BSS 1         ADDRESS OF ID EXTENSION TABLE 
* 
LICNT BSS 1         LONG ID SEGMENT COUNT 
SSCNT BSS 1         SHORT ID SEGMENT COUNT - FOR SEGMENTED PROGS
* 
DSKID BSS 1         DISK ID SEGMENT ADDRESS 
KEYCN BSS 1         TOTAL KEYWORD COUNT 
KEYCT BSS 1         CURRENT KEYWORD COUNT 
* 
MLIST BSS 11        MEMORY MAP BUFFER 
* 
TEMP1 BSS 1 
TEMP2 BSS 1 
LWH1  BSS 1 
LWH2  BSS 1 
LWH3  BSS 1 
LWH4  BSS 1 
L01   BSS 1 
* 
FSYBP BSS 1         FIRST WORD SYS BP LINKAGE 
SYSAD BSS 1         CURRENT ID SEGMENT ADDRESS
* 
TBREL BSS 1         CURRENT BP RELOC ADDR 
PBREL BSS 1         INITIAL BP RELOC ADDR 
* 
RELAD BSS 1         CURRENT CORE RELOCATION ADDRESS 
* 
BSBAD BSS 1         BG SEGMENT BP RELOC ADDR
BSPAD BSS 1         BG SEGMENT PROG RELOC ADDR
* 
LFLAG BSS 1         PROGRAMS-LOADED FLAG
IMAIN BSS 1         CURRENT MAIN IDENT INDEX. 
HDFLG BSS 1         HEADING FORMAT FLAG 
CIDNT BSS 1         CURRENT MAIN IDENT INDEX. 
* 
AEQT  BSS 1         ADDRESS OF EQUIPMENT TABLE
CEQT  BSS 1         NO. ENTRIES IN EQUIPMENT TABLE
SPLCO BSS 1         SPOOL EQT COUNT 
DVMAP BSS 1         ADDRESS OF DRIVER MAP TABLE 
* 
DPFLG BSS 1         DP RELOCATION FLAG, 0=YES, -1=NO
DPLN BSS 1          PAGE LENGTH OF DRIVER PARTITION 
DPADD BSS 1         START ADDR OF DRIVER PARTITION
DSKDP BSS 1         DISK ADDRESS OF DP #2 
PAGE# BSS 1         NEXT PHYSICAL PAGE TO ALLOCATE
DPNUM BSS 1         CURRENT DP# -1, OR TOT DP PAGES 
SDID  BSS 1         IDENT IDEX OF SYS DISK DRIVER 
LWDP1 BSS 1         LAST WORD OF DP, +1 
FWSDA BSS 1         FIRST WORD OF SDA 
* 
ASQT  BSS 1         ADDR OF DEVICE REFERENCE TABLE
CSQT  BSS 1         NO. ENTRIES IN DEV. REF. TABLE
* 
AINT  BSS 1         ADDRESS OF INTERRUPT TABLE
* 
DSKIN BSS 1         DISK ADDR OF INT CODE RECORD
INTCN BSS 1         RECORD COUNT OF INT CODE
* 
IDSAV BSS 1         INDEX OF CURRENT IDENT. 
DSKMN BSS 1         INITIAL MAIN DISK ADDRESS 
BSSDP BSS 1         INITIAL DISK RES MAIN BSS DISP
PRENT BSS 1         PRIMARY ENTRY POINT 
DBLAD BSS 1         CURRENT DBL ADDRESS 
REKEY BSS 1         INSTRUCTION TYPE BYTE 
INSCN BSS 1         INSTRUCTION TYPE COUNTER
INSTR BSS 1         CURRENT INSTRUCTION 
PAGNO BSS 1         CURRENT PAGE NO.
OPRND BSS 1         CURRENT OPERAND 
PLGTH BSS 1         PROGRAM LENGTH
* 
DRT2  BSS 1         DISK DRT ENTRY ( SYSTEM)
DRT3  BSS 1         AUX DISK DRT ENTRY
* 
LIBFG BSS 1 
LDTYP BSS 1 
* 
SCH1  BSS 1         INDEX OF IDENT OF PGM TO BE SCHEDULED 
SCH3  BSS 1         ADDRESS OF CURRENT ID SEGMENT 
SCH4  BSS 1         ADDRESS OF THE SCHEDULED PGM ID SEG 
FGBGC BSS 1         BACKGROUND USING FG COMMON FLAG 
$LIBR BSS 1         INDEX OF $LIBR ENT
$LIBX BSS 1         INDEX OF $LIBX ENT
CUPRI BSS 1 
* 
BLLO  BSS 1         -(LOWER BUFFER LIMIT) 
BLHI  BSS 1         -(UPPER BUFFER LIMIT) 
* 
MEM6  BSS 1 
MEM12 BSS 1 
* 
COMRT BSS 1         MAXIMUM RT COM LENGTH 
COMBG BSS 1         MAXIMUM BG COM LENGTH 
COMSZ BSS 1         #WORDS COMMON DECLARED IN CURRENT MAIN
RTCAD BSS 1         RT COMMON ADDRESS 
BGCAD BSS 1         BG COMMON ADDRESS 
FPCOM BSS 1         FIRST PAGE OCCUPIED BY COMMON 
LPCOM BSS 1         LAST PAGE CONTAINING ANY COMMON 
* 
FPSAM BSS 1         1ST PAGE CONTAINING S.A.M.
FWSAM BSS 1         1ST WORD CONTAINING S.A.M.
SYMAD BSS 1         VALUE FOR AVMEM IN SCOM 
SAM#1 BSS 1         SIZE OF FIRST CHUNK OF SAM
SAM#2 BSS 1         SIZE OF SECOND CHUNK OF SAM 
SAM2P BSS 1         START PAGE OF SAM #2
LWTAI BSS 1         LAST WORD OF TABLE AREA I FOR SAM#0 
FWPRV BSS 1         FIRST WORD FOR PRIVILEGED PROGRAMS
* 
FWSYS BSS 1         FIRST WORD OF SYSTEM CODE 
LPSYS BSS 1         LAST PAGE CONTAINING SYS
LWSYS BSS 1         LAST WORD OF SYSTEM 
LPSLB BSS 1         LAST PAGE OF SLOW BOOT
LWSLB BSS 1         LAST WORD OF SLOW BOOT
MTYPE BSS 1         MAIN PROGRAMS'S TYPE
* 
HIBP  BSS 1         BP LINK MODE FOR FIXUP ENTRIES
LOLNK BSS 1         LOW LINK FOR SSGA,LIB, OR SYS 
HILNK BSS 1         HI LINK USED BY MEM RES PRG 
BPINC BSS 1         BP LINK ALLOCATION MODE, -1=DOWN,1=UP 
BPLMT BSS 1         LAST AVAIL BP LINK IN CURRENT MODE, +1
* 
TPMAX BSS 1         HWM FOR RELOCATION OF BG MAINS & SEGS 
MAXPT BSS 1         NUM PARTS. ALLOWED
MAT.  BSS 1         ADDRESS OF MEMORY ALLOCATION TABLE
* 
SSGA. BSS 1         FWA SSGA
MAP.  BSS 1         PTR TO MEU RES MAP
MPFT. BSS 1         PTR TO MPFT 
* 
EMLNK BSS 1         EMA SYMBOL'S LINK 
EMLST BSS 1         LST INDEX OF EMA SYMBOL 
EMDSK BSS 1         DISK ADDR OF EMA PROGRAM
* 
*     MEMORY RESIDENT AREA POINTERS 
* 
MRACM BSS 1         MR ACCESS COMMON FLAG (>0 IF YES) 
LBCAD BSS 1         FIRST WORD OF MEMORY RES LIBRARY
LEND  BSS 1         LAST  WORD OF MEMORY RES LIBRARY
FWMRP BSS 1         FIRST WORD OF MEMORY RES PROGRAM AREA 
EMRP  BSS 1         LAST  WORD OF MEMORY RES PROGRAM AREA 
FPMRP BSS 1         FIRST PAGE OF MEMORY RES PROGRAM AREA 
FPMBP BSS 1         PAGE # FOR MEMORY RES BASE PAGE 
MRP#  BSS 1         # PAGES OCCUPIED BY MRL & MRP'S 
DSKMB BSS 1         DISK ADDRESS OF MEMORY RES BASE PAGE
DSKMR BSS 1         DISK ADDRESS OF MEMORY RESIDENT LIB/PROG AREA 
DSKBP BSS 1         SYSTEM DISK ADDRESS 
* 
DSKAV BSS 1         NEXT AVAILABLE DISK ADDRESS 
DSKLC BSS 1         DISK ADDRESS OF LIBRARY CODE
DSKLB BSS 1         DISK ADDR OF LIBRARY ENTRY PTS
DSKUT BSS 1         UTILITY PROG DISK ADDRESS 
DSKBS BSS 1         DISK ADDR OF MAIN BG DISK RES BP
DSKBR BSS 1         CURRENT MAIN BG DISK RES DISK AD
ADICT BSS 1         ADDR OF DISK DICTIONARY 
LBCNT BSS 1         RESIDENT LIBR ENTRY PT COUNT
SYCNT BSS 1         SYSTEM ENTRY POINT COUNT
KEYAD BSS 1         CURRENT KEYWORD ADDRESS 
* 
SYBAD BSS 1         ADDR OF FIRST BP LINK FOR BG
IDSAD BSS 1         ADDR OF FIRST ID SEGMENT
ABSID BSS 1         IDENT ADDR FOR NEXT BG SEG SCAN 
IDMBS BSS 1         BG MAIN ADDRESS FOR BS REF
* 
SYTRK BSS 1         DISK ADDR WHERE SYSTEM BEGINS - TRACK 
SYSEC BSS 1         DISK ADDR WHERE SYSTEM BEGINS - SECTOR
* 
SSGAF BSS 1         SSGA ACCESS FLAG
SPAR2 BSS 1         SPARE VARIABLE
SPAR3 BSS 1         SPARE VARIABLE
SPAR4 BSS 1         SPARE VARIABLE
SPAR5 BSS 1         SPARE VARIABLE
* 
********************************************************* 
*                                                       * 
*  END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS.        * 
*                                                       * 
********************************************************* 
* 
      SKP 
LSWAP NOP 
* 
*     RESOLVE ANY ARITHMETIC DEF'S TO EXTERNALS 
* 
      LDA N         GET LOOP COUNTER
      STA BLINE     SAVE IN TEMP LOCATION 
      LDB LSTAA     GET ADDRESS OF WHERE LIST ROUTINE LOCATED 
LOOP  LDA B,I       GET ADDRESS 
      RSS 
      LDA A,I 
      RAL,CLE,SLA,ERA 
      JMP *-2 
      STA B,I       AND SAVE IT AGAIN 
      INB 
      ISZ BLINE     DONE? 
      JMP LOOP      NO
      JMP \SRET     RETURN TO MAIN. 
      SPC 1 
N     DEC -5
LSTAA DEF *+1 
ATBUF DEF \TBUF+0 
ALBUF DEF \LBUF+0 
DNAM  DEF \LBUF+3 
DRDCB DEF \RDCB+0 
DNDCB DEF \NDCB+0 
      SKP 
* 
* BEGIN PROGRAM INPUT PHASE (UNDER COMMAND CONTROL).
* 
\PIP  NOP 
      JSB \SPAC 
      JSB \SPAC 
      LDA P17 
      LDB MESS7 
      JSB \MESS     "PROG INPUT PHASE:" 
      LDA \PLST      SET BOTTOM OF PROGRAM
      STA SLST       DEFINED LST (INDEX #)
* 
      JSB PRCMD     PROCESS OPERATOR COMMANDS.
* 
      CLA 
      STA SCH1
      STA SCH4
* 
*                    CLEAR UNDEFINED EXTS AND SET TO TYPE 5 
* 
      LDA SLST      INITIALIZE \LSTX
      STA \TLST      IGNOR PREDEFINED ENTRIES 
CLST3 JSB \LSTX      SET LST ADDRESSES
      JMP ENDLB     SET USAGE FLAGS 
* 
      LDA \LST4,I    GET IDENT INDEX
      CMA,INA 
      SSA           SKIP - UNDEFINED EXT
      JMP CLST3     IGNORE DEFINED ENTRY POINT
* 
      LDA P5        SET UNDEFINEDS TO ZERO REPLACE ENTS 
      STA \LST4,I   SET TYPE UNDEFINED
      CLB 
      STB \LST5,I   CLEAR VALUE 
      JMP CLST3     TRY NEXT LST ENTRY
* 
ENDLB LDB D$LIR     FIND THE LIBRARY
      JSB \LSTS      ENTRY POINTS $LIBR 
      JMP ER57      UNDEFINED, SO TERMINATE 
      LDA \TLST 
      ADA N1
      STA $LIBR     SAVE FOR THE LOADER 
* 
      LDB D$LIX     DO SAME THING FOR $LIBX 
      JSB \LSTS 
      JMP ER57      UNDEFINED, SO TERMINATE 
      LDA \TLST 
      ADA N1
      STA $LIBX 
* 
      JMP PARAM     GO DO PARAM INPUT PHASE.
* 
ER57  STB ENDLB     SAVE ASCII ADDRESS IN TEMP
      LDA ERR57     SEND ERROR DIAGNOSTIC 
      JSB \GNER 
      LDB ENDLB     GET IT BACK 
      LDA P5        CHARACTER COUNT 
      JSB \MESS     PRINT ENTRY POINT 
      JSB \TERM     ABORT 
ERR57 ASC 1,57
* 
* 
D$LIR DEF *+1 
      ASC 3,$LIBR 
D$LIX DEF *+1 
      ASC 3,$LIBX 
* 
P17   DEC 17
MESS7 DEF *+1 
      ASC 9,PROG INPUT PHASE: 
N1    DEC -1
      SKP 
      SPC 1 
***** 
* 
** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF)
* CALLING SEQUENCE: 
* 
*     JSB BLINE 
*     RETURN
* 
***** 
      BSS 1 
BLINE NOP 
      LDA ALBUF 
      STA BLINE-1 
      LDA MD24
      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 OR A COMMENT 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 N2       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 
      CCA 
      ADA QQCNT    DECREMENT CHAR COUNT 
      STA QQCNT 
      LDB QQPTR 
      SLA           AND IF NECESSARY, 
      ADB N1         DECREMENT POINTER
      STB QQPTR 
      JMP BAKUP,I 
***** 
* 
** PRCMD ** MAIN ENTRY POINT - CONTROL IS PASSED TO 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 OPERATOR COMMANDS.
NXTCM JSB CMDIN     GET NEXT COMMAND LINE 
      LDA CTACN     COMST JMP'S HERE VIA NXTCM+1
      LDB CTABL 
      JSB SCAN      SCAN 1ST ELEMENT FOR MATCH
      JMP CMER      COMMAND ERROR.
      ADA PTABL     JUMP TO PROCESSOR 
      LDA A,I 
      JMP A,I 
* 
***** 
CMER  LDA ERR06 
      JSB \GNER 
      JMP NXTCM    GET NEXT COMMAND FROM TTY
* 
ERR06 ASC 1,06
      SKP 
***** 
* 
*  BRANCH TABLE FOR COMMAND PROCESSORS. 
*  ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN
*  COMMAND PNEUMONIC TABLE. 
* 
***** 
PTABL DEF * 
      DEF MAPST     MAP STATEMENT 
      DEF RELST     RELOCATE STATEMENT
      DEF RELST     REL STATEMENT 
      DEF DSPST     DISPLAY STATEMENT 
      DEF EOL       /E 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 RELOCATE APPEARS BEFORE REL) 
* 
***** 
CTACN ABS CTABS-CTABN  NEG NBR ENTRIES IN TABLE 
CTABL DEF CTABS 
CTABS ABS 1400B+AMAP-CMTBL      MAP 
      ABS 4000B+ARELC-CMTBL  RELOCATE 
      ABS 1400B+ARELC-CMTBL  REL
      ABS 3400B+ADISP-CMTBL   DISPLAY 
      ABS 1000B+AEND.-CMTBL     /E
      ABS 2400B+ALINK-CMTBL  LINKS
CTABN EQU * 
LTABS 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 1400B+AALL.-CMTBL   ALL 
ITAB  ABS 1000B+AIN..-CMTBL  IN 
BTAB  ABS 2000B+ABASE-CMTBL  BASE 
CPTAB ABS 3400B+ACURN-CMTBL  CURRENT
TTAB  ABS 1000B+ATR..-CMTBL  TR 
ITABL DEF ITAB
BTABL DEF BTAB
CPTBL DEF CPTAB 
LTABL DEF LTABS 
MTABL DEF MTABS 
TTABL DEF TTAB
***** 
*     ASCII KEYWORD TABLE 
*  ORDER OF ENTRIES IN THIS TABLE IS ON NO IMPORTANCE 
***** 
CMTBL DEF * 
AMAP  ASC 2,MAP 
ARELC ASC 4,RELOCATE
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 
AALL. ASC 2,ALL 
AEND. ASC 1,/E
AIN.. ASC 1,IN
ACURN ASC 4,CURRENT 
ABASE ASC 2,BASE
ATR.. ASC 1,TR
* 
HYADD DEF *+1 
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 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
      SKP 
* 
*     INPUT COMMAND LINE
* 
***** 
* 
** CMDIN ** INPUT NEXT COMMAND LINE 
* CALLING SEQUENCE: 
* 
*     JSB CMDIN 
*     RETURN
* 
* 
*      RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED
* 
***** 
CMDIN NOP 
      CLA           RESET INCOMING CHARACTER
      STA QQCNT         POINTERS
      LDA QBUFA 
      STA QQPTR 
      JSB \PRMT      SEND \PRMT,READ REPLY
      DEF *+6 
      DEF PRPTA 
      DEF P1
      DEF QIBUF 
      DEF D72 
      DEF \BPAR 
      STA QQCHC 
      JSB NXTC      KLUDGE HERE 
      JMP CMDIN+1   IF FIRST CHARACTER A *, OR IT'S 
      CLA            A BLANK LINE, THEN GO GET NEXT LINE
      STA QQCNT     OTHERWISE RE-INIT POINTERS
      LDA QBUFA 
      STA QQPTR 
      JMP CMDIN,I   AND RETURN
* 
MOVE3 NOP 
      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 
      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**** 
* 
***** 
* 
** REL  COMMAND PROCESSOR.
* 
***** 
RELST CLA 
      STA NREC      CLEAR #GOOD RECORDS COUNTER 
      STA RIC 
      STA XNAM
      STA SERFG 
      INA 
      STA POSIN     SIGNAL \RBIN TO CALL LOCF.
      JSB \CLOS     CLOSE OPEN REL INPUT FILE...IF NOT CLOSED.
      DEF *+2 
      DEF \RDCB+0 
      JSB NXTC      GET NEXT NON-BLANK CHAR 
      JMP CMER      NO MORE 
      CPA B54       IS IT A COMMA?
      JMP CHFNM     YES...CHECK FILENAME FURTHER
      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.     MOVE MODULE NAME INTO XNAM BUFFER 
* 
      JSB NXTC    GET NEXT NON BLANK CHAR 
      JMP CMER     NO MORE
      CPA B51     RIGHT PAREN?
      RSS         YES 
      JMP CMER   NO, ERROR
      JSB NXTC    GET NEXT NON-BLANK CHAR 
      JMP CMER    NO MORE 
      CPA B54     COMMA?
      RSS         YES 
      JMP CMER    NO,ERROR
* 
CHFNM JSB NXTC      GET THE FIRST FILENAME CHAR 
      JMP CMER      NO MORE 
      CPA B54       COMMA?
      JMP CMER      FILENAME PARAMETER MUST BE THERE
      CPA B53       PLUS? ( MINUS ALREADY SKIPPED)
      JMP CMER      INVALID 
* 
      LDB A         NOW CHECK IF NUMERIC
      ADB L60       >= "1" ?
      SSB 
      JMP LDRIN     OK
      LDB A 
      ADB L73       < A ":"?
      SSB,RSS 
      JMP LDRIN     OK
      JMP CMER      LU CAN'T BE USED
* 
B53   OCT 53        + 
L60   OCT -60 
L73   OCT -73 
XNAMA DEF XNAM
                                              