ASMB,L,Z,C
*RTLGN  USE 'ASMB,Z '  ALWAYS !!
* 
*  ***************************************************************
*  * (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.       *
*  ***************************************************************
* 
      HED RTE-L GENERATOR 
      NAM RTLGN,3,100 92070-16077 REV.2026 800410 
      LOD 2,SG,4
* 
*     NAME:    RTE L GENERATOR MAIN 
*     SOURCE:  92070-18077
*     PGMR:    B.C. 
* 
      ENT RTLGN 
* 
* 
      EXT EXEC,LOGLU,NAMR,.ENTR 
      EXT OPEN,CLOSE,READF,WRITF,PRTN 
      EXT IFBRK,.X.,.Y. 
      EXT TH2.L,CNUMD,L.REL 
* 
      ENT DSTRG,IPBUF,STRNG,SLONG,DONE?,ISTRC,DIPBF 
      ENT DFTLU,FATAL,OP?,MSIZE,IPTN2,ABOR
      ENT EXIT,BREAK,ASTRX,LENTF
* 
      ENT F1,FILE1,TYPE1,F1SC,F1DSC,IERR1 
      ENT F2,FILE2,TYPE2,F2SC,F2DSC,IERR2 
      ENT F3,FILE3,TYPE3,F3SC,F3DSC,IERR3,OPSNP 
      ENT F4,FILE4,TYPE4,F4SC,F4DSC,IERR4 
      ENT CDCB1,ODCB2,SDCB3,LDCB4,ADCB3 
      ENT SEGNM,PPREL,COMFG,LNKDR,BGFLG,SIDCK 
      ENT FWFM,LWFM,BPFWA,LODPT,COMAD,COMLG,LWAPG 
      ENT TDBP,LDBP,CSDBP,CUDBP,CSRBP,CURBP 
      ENT NUMID,ADDID,#ENPT,NLIB,CROM,AFWBG,ABGBP 
* 
      ENT READ,FLERR,NAMRR,DRKEY,SPACE,FCLOS,MOVE 
      ENT CLOS1,CLOS2,CLOS3,CLOS4 
      ENT DLOCC,LOCC,DBLOC,BPLOC
      ENT CNV99,L.OUT,LDIPX,SRIPX,STCR1,MAXAD 
      ENT ERRCT,CONSL,AINT,IP3,WRDCT,EFBUF,PRERR
* 
      SUP PRESS EXTRANIOUS LISTING
* 
      SKP 
      SKP 
DSTRG DEF STRNG 
ADCB3 DEF SDCB3 
DIPBF DEF IPBUF 
STRNG BSS 40
IPBUF BSS 10       OUTPUT PARSED BUFFER 
* 
RTLGN JSB LOGLU     GET THE CONSOLE LU
      DEF *+2 
      DEF ANLU# 
      IOR M400      MERGE ECHO BIT
      STA DFTLU     AND SAVE
* 
* 
      JSB EXEC      GET THE RUN STRING
      DEF *+5 
      DEF P14 
      DEF P1
      DEF STRNG     THIS IS A GET NOT A PUT 
      DEF N80 
* 
      STB SLONG     SLONG = STRING LENGTH IN + CHAR 
* 
* 
* 
* 
      JSB EXEC
      DEF *+3 
      DEF P8
      DEF SEG1      LOAD SEGMENT 1
      NOP 
* 
      SKP 
* 
SLONG NOP           STRING LENGTH IN CHARS
DONE? NOP           =1 WHEN INPUT PRAMS CHECKED OUT 
* 
F1    DEF FILE1 
FILE1 ASC 3,COMMAD  COMMAND FILE NAME 
TYPE1 NOP 
F1SC  NOP 
F1DSC NOP 
* 
F2    DEF FILE2     OUTPUT FILE NAME
FILE2 ASC 3,SYSTEM  DEFAULT FILE = SYSTEM 
TYPE2 OCT 3 
F2SC  NOP 
F2DSC NOP 
* 
F3    DEF FILE3     SNAP FILE NAME
FILE3 ASC 3,SNAP    DEFAULT FILE = SNAP 
TYPE3 OCT 3 
F3SC  NOP 
F3DSC NOP 
* 
F4    DEF FILE4     LIST FILE NAME
FILE4 ASC 3,SYLIST  DEFAULT FILE = SYLIST 
TYPE4 OCT 3 
F4SC  NOP 
F4DSC NOP 
* 
*     GENERATOR BUFFER AREA 
* 
CDCB1 BSS 144       COMMAND DCB 
ODCB2 BSS 144       OUTPUT  DCB 
      SUP 
SDCB3 REP 144       SNAP    DCB 
      NOP 
LDCB4 BSS 144       LIST    DCB 
* 
SEG1  ASC 3,RTLG1 
* 
      SKP 
      SPC 1 
* 
* 
EXIT  LDA SEGNM 
      CPA P128      NORMAL TERMINATION? 
      RSS           YES 
      JMP ABOR      NO , ABNORMAL TERMINATION 
EXIT2 JSB SPACE 
      JSB CNUMD 
      DEF *+3 
      DEF ERRCT+0 
      DEF ERRMS+1 
      LDA P18 
      STA CONSL 
      LDB DERRM 
      JSB DRKEY 
* 
      JSB WRITF 
      DEF *+6 
      DEF ODCB2     WRITE OUT CURRENT RECORD
      DEF IERR2       OF OUTPUT FILE
      DEF OTBUF 
      DEF P128
      DEF RECN
* 
      JSB FCLOS 
* 
      LDA N4        ZERO OUT NEXT 4 WDS AFTER 
      STA WRDCT     ERRCT FOR PRTN
      CLA 
      LDB DERRC     ADDRESS OF ERRCT
LP    INB 
      STA B,I 
      ISZ WRDCT     ANY MORE? 
      JMP LP        YES 
* 
      JSB PRTN      NO
      DEF *+2 
DERRC DEF ERRCT+0 
* 
      JSB EXEC
      DEF *+2 
      DEF P6
* 
* 
DERRM DEF ERRMS 
ERRMS ASC 9,*        ERRORS * 
      SKP 
      SKP 
      SKP 
* 
*     SET UP CALL FOR OUTPUT
* 
*     CALL SEQUENCE 
* 
*     LDA DATA
*     LDB ADDRESS 
*     JSB STCR1 
* 
STCR1 NOP 
      STB ADRR      THIS IS THE ADDRESS 
      STA VALU      THIS IS THE VALUE OF THE ABOVE ADDRESS
      JSB L.OUT 
      DEF *+3 
      DEF ADRR
      DEF VALU
      JMP STCR1,I   RETURN
* 
ADRR  NOP 
VALU  NOP 
* 
* 
* 
*     PRINT ******
* 
ASTRX NOP 
      LDA P6
      LDB DASTX 
      JSB DRKEY 
      JMP ASTRX,I 
* 
* 
DASTX DEF *+1 
      ASC 3,******
* 
      SKP 
*THE FCLOSE ROUTINE CLOSES ALL FILES OPEN TO THE
*GENERATOR
* 
FCLOS NOP 
      JSB CLOS1 
      JSB CLOS3 
      JSB CLOS2 
      JSB CLOS4 
      JMP FCLOS,I 
* 
CLOS1 NOP 
      JSB CLOSE     CLOSE THE FILE
      DEF *+2 
      DEF CDCB1 
      JMP CLOS1,I 
* 
CLOS2 NOP 
      JSB CLOSE     YES 
      DEF *+2 
      DEF ODCB2 
      JMP CLOS2,I 
* 
CLOS3 NOP 
      JSB CLOSE     YES 
      DEF *+2 
      DEF SDCB3 
      JMP CLOS3,I 
* 
CLOS4 NOP 
      LDA TYPE4 
      ERA,SLA 
      RSS 
      JMP CLOS4,I 
      JSB CLOSE 
      DEF *+2 
      DEF LDCB4 
* 
      CLA,INA       SET UP THE
      STA TYPE4     NUMERIC FIELD IN THE TYPE WORD
      JMP CLOS4,I   RETURN
* 
*     OPEN THE SNAP FILE
* 
OPSNP NOP 
      JSB OPEN
      DEF *+7 
      DEF SDCB3 
      DEF IERR3 
      DEF FILE3 
      DEF IPTN2 
      DEF F3SC
      DEF F3DSC 
      JMP OPSNP,I 
* 
      SKP 
* 
*     READ THE COMMAND FILE 
* 
*     JSB READ
*     EOR RETURN
*     NO ERROR RETURN 
* 
* 
      SPC 1 
* 
READ  NOP 
FREAD JSB READF     READ THE COMMAND FILE 
      DEF *+6 
      DEF CDCB1 
      DEF IERR1 
      DEF STRNG 
      DEF P40 
      DEF CLEN
* 
      LDA IERR1 
      SSA,RSS       ANY ERRORS ?
      JMP FLCHK     NO
      LDB F1
      JSB FLERR     YES 
FLCHK LDB CLEN      GET LENGTH OF COMMAND JUST READ 
      SZB,RSS       WAS IT ZERO ? 
      JMP FREAD     YES, SO DO IT AGAIN 
      SSB           WAS IT NEGATIVE (IE END OF FILE)
      JMP READ,I    YES, SO FINISH PROCESSING 
* 
      CLE,ELB       CONVERT TO CHAR COUNT (MULT BY 2) 
      STB SLONG     SAVE READ LENGTH FOR PARSING ROUTINE
      CLA,INA       SET UP PARSING OFFSET TO STAT PARSING 
      STA ISTRC     AT THE FIRST CHARACTER
      JSB NAMRR     PARSE THE OP CODE 
      LDB IPBUF+1   GET 3RD & 4TH CHAR
      STB OP1?
      LDA IPBUF     AND SAVE THE OPCODE 
      STA OP? 
* 
      JSB IECHO     ECHO INPUT
      LDA OP?       GET OPCODE
      AND HIMSK 
      CPA ASTRK     IS IT A COMMENT ? 
      JMP FREAD     YES , READ ANOTHER RECORD 
* 
      JSB BREAK     CHECK BREAK FLAG
      CLA 
      STA PRERR     CLEAR PRINT ERROR FLAG
      ISZ READ
      JMP READ,I
* 
* 
* 
      SKP 
* 
*                                   PRINT MESSAGE ON LIST DEVICE
* 
*  THE DRKEY SUBROUTINE PRINTS A MESSAGE ON THE LIST OUTPUT DEVICE. 
* 
*  CALLING SEQUENCE:
*    A = NO. CHARACTERS (POS.) TO BE PRINTED. 
*    B = ADDRESS OF MESSAGE 
*    JSB DRKEY
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED
* 
DRKEY NOP 
      STA CHAR#     SAVE THE # OF CHARACTERS
* 
      ADB N1        BACK THE ADDRESS UP BY ONE
      STB MADDR     AND SAVE FOR LU WRITE 
      STB MADDF     OR FILE WRITE 
      LDA B,I       GET THE WORD PRIOR TO THE BUFFER
      STA LTEMP     AND SAVE IT 
      LDA BLNK2     GET A BLANK 
      STA B,I       AND PUT IT IN THE BUFFER
* 
      LDB CHAR#     GET THE # OF CHARACTERS 
      ADB P3        ALLIGN TO A WORD & ACCOUNT FOR THE BLANK
      CLE,ERB       DIV BY 2 . NOW HAVE WORD COUNT
      STB COUNT     SAVE FOR LU OR FILE WRITE 
* 
      LDB CHAR#     GET THE # OF CHARS
      SLB,INB,RSS   ODD # ? 
      JMP GOWRT     NO, SO WRITE THE BUFFER OUT 
      CLE,ERB       INDEX 
      ADB MADDR     THE THE LAST WORD 
      LDA B,I       GET IT & PUT A BLANK
      AND HIMSK     IN THE LOW END
      ADA P32 
      STA B,I 
* 
GOWRT LDA CONSL     ECHO TO THE CONSOLE?
      SZA,RSS       YES 
      JMP WFILE     NO , WRITE TO THE FILE
* 
      JSB EXEC      REQUEST WRITE 
      DEF *+5 
      DEF P2        WRITE REQUEST CODE
      DEF DFTLU     ADDR OF CONSOLE UNIT NO.
MADDR DEF 0         BUFFER LOCATION 
      DEF COUNT     CURRENT WORD COUNT
      CLA 
      STA CONSL 
* 
WFILE JSB WRITF      DO THE FILE WRITE
      DEF *+5 
      DEF LDCB4+0 
      DEF IERR4+0 
MADDF NOP           BUFFER ADDRESS
      DEF COUNT     BUFFER LENGTH 
* 
      LDB LTEMP     GET THE ALTERED WORD
      STB MADDR,I   AND RESTORE IT
      SSA,RSS       ANY FILE ERRORS 
      JMP DRKEY,I   NO, SO RETURN 
* 
      LDA N6        LIST FILE ERROR 
      JSB MOVE      MOVE LIST FILE NAME 
      DEF FILE4+0   SOURCE
      DEF EFBUF+10  DESTINATION 
      LDA IERR4 
      CMA,INA 
      JSB CNV99 
      STA EFBUF+4 
* 
      JSB EXEC      DISPLAY ON CONSOLE FMP ERROR
      DEF *+5         OF
      DEF P2             LIST 
      DEF DFTLU+0             FILE
      DEF EFBUF 
      DEF P13 
* 
      JSB EXEC
      DEF *+2 
      DEF P6
      SKP 
* 
*                                   NEW LINE ON LIST OUTPUT DEVICE
* 
*  THE SPACE SUBROUTINE IS CALLED TO PAGE UP THE PRINTER. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB SPACE
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
SPACE NOP 
      CLA           SET COUNT = 0.
      LDB ALBUF     B = DUMMY ADDR. 
      JSB DRKEY     NEW LINE
      JMP SPACE,I   RETURN
* 
ALBUF DEF IPBUF 
* 
* 
* THE BREAK ROUTINE CATCHES ANY PROGRAM BREAKS AND DOES 
* A CLEAN TERMINATION.
* 
BREAK NOP 
      JSB IFBRK 
      DEF *+1 
      SSA           ANY BREAK INPUT ? 
      JMP EXIT      YES , SO EXIT THYSELF 
      JMP BREAK,I   NO SO JUST RETURN 
* 
*     ABORT ROUTINE 
* 
ABOR  LDA P6
      LDB MESFL 
      JSB DRKEY 
      JSB ASTRX     PRINT ******
      JMP EXIT2 
* 
MESFL DEF *+1 
      ASC 3,GEN AB
* 
      SKP 
* 
* THE IECHO ROUTINE ECHOS COMMAND FILE COMMANDS AND ECHOS 
* ANY BAD COMMANDS ENCOUNTERED IN THE COMMAND FILE
* IT ASSUMES THE WORD COUNT IN  ' CLEN ' AND THE BUFFER 
* TO BE OUTPUT IN ' DSTRG '.
* 
IECHO NOP 
      LDA CLEN
      RAL           WORD COUNT IS NOW CHAR COUNT
      LDB DSTRG     GET THE BUFFER ADDRESS
      JSB DRKEY     OUTPUT IT 
      JMP IECHO,I   RETURN TO CALLER
* 
      SKP 
* 
* 
*THE FLERR ROUTINE HANDLES ALL FILE ERRORS.  CALLING SEQUENCE:
* 
*          LDA     WITH ERROR CODE (NEGATIVE) 
*          LDB     WITH ADDRESS OF FILE 
*          JSB FLERR
* 
* 
*THIS ROUTINE WILL CLOSE ALL FILES
FLERR NOP 
      STA ERRSV     SAVE ERROR CODE 
      STB EFILE     SAVE NAME OF FILE 
      CMA,INA       MAKE ERROR POSITIVE 
      JSB CNV99     CONVERT TO ASCII
      STA EFBUF+4   PUT INTO ERROR MESSAGE
      LDA EFILE,I   GET THE FILE NAME 
      STA EFBUF+10  AND 
      ISZ EFILE          PUT
      LDA EFILE,I             IT
      STA EFBUF+11               INTO 
      ISZ EFILE                       THE 
      LDA EFILE,I    ERROR
      STA EFBUF+12           MESSAGE .
* 
* 
      LDA P26       GET THE CHAR COUNT
      STA CONSL     ECHO TO THE CONSL 
      LDB DEBUF     AND THE ADDRESS 
      JSB DRKEY     NOW PRINT THE ERROR MESSAGE 
      ISZ ERRCT     BUMP UP THE ERROR COUNTER 
      JSB ASTRX     PRINT ******
* 
      LDA ERRSV     GET ERROR CODE
      CPA N6        FILE NOT FOUND? 
      JMP FLERR,I   YES , OK TO CONTINUE
      CPA N7        FILE SEC. CODE ERROR? 
      JMP FLERR,I   YES , OK TO CONTINUE
      CPA N32       CRN NOT FOUND?
      JMP FLERR,I   OK , GO GET NEXT COMMAND
* 
      JMP ABOR      ANY OTHER DISC ERROR ABORT
* 
EFILE NOP 
DEBUF DEF EFBUF 
EFBUF ASC 13,  FMGR -6  ON FILE  COMAND 
ERRSV NOP 
      SKP 
* 
* 
* THE NAMRR SUBROUTINE USES THE RELOCATABLE LIBRARY 
* PARSING ROUTINE NAMR.  THE INPUT TO NAMR IS A STRING
* OF ASCII CHARACTERS.
* THE OUTPUT IS A 10 WORD BUFFER PARSED AS :
* PRAM1,PRAM2,PRAM3,TYPE,S1,S2,S3,S4,S5,S6
* PARAMETERS BETWEEN COMMAS ARE PARSED.  SUBPARAMETERS ARE
* DELINEATED BY COLONS.  THE TYPE WORD DESCRIBES ALL
* PARAMETERS AS ASCII, NUMERIC, OR NULL.
* THE TYPE WORD IS BROKEN UP INTO 2 BIT FIELDS TO DESCRIBE
* THE INPUT.
*15,14 13,12  11,10  9,8  7,6  5,4  3,2   1,0 
*-----------------------------------------------
*       S6   ! S5   ! S4 ! S3 ! S2 ! S1 ! PRAM !
*-----------------------------------------------
* 
* PRAM = 0 ...NULL       PRAM1 = PRAM2 = PRAM3 = 0
* PRAM = 1....NUMERIC  (ONLY PRAM1 USED) PRAM1 = #
* PRAM = 2 ...NOT USED
* PRAM = 3 ... ASCII  (USES PRAM1,PRAM2,PRAM3 ) 
* 
* S1 - S6 ARE DEFINED THE SAME EXCEPT THEY ARE ONE WORD ONLY
* 
NAMRR NOP 
      JSB NAMR      THIS IS THE RELO LIBR PARSING ROUTINE 
      DEF *+5       RETURN ADDR 
      DEF IPBUF     ADDRESS OF 10 WORD PARSED BUFFER
      DEF STRNG     ADDRESS OF BUFFER TO BE PARSED
      DEF SLONG     CHARACTER LENGTH
      DEF ISTRC     CHAR OFFSET IN STRNG FOR NEXT PRAM
      JMP NAMRR,I   RETURN TO CALLER
* 
* 
      SKP 
      SKP 
MOVE  NOP           WORD MOVE SUBROUTINE
      STA CNT1      SAVE WORD COUNT 
      LDA MOVE,I    GET SOURCE
      STA PTN1      SET IN POINTER 1
      ISZ MOVE      STEP TO DEST. ADDR
      LDA MOVE,I    GET DEST. 
      ISZ MOVE      STEP TO RETURN ADDR 
MOV1  LDB PTN1,I    GET A WORD
      STB A,I       PUT IT AWAY 
      ISZ PTN1      STEP SOURCE 
      INA           AND DEST. ADDRES
      ISZ CNT1      DONE? 
      JMP MOV1      NO - CONTINUE 
      JMP MOVE,I    YES - EXIT
* 
* 
*     CONVERT TO DECIMAL ASCII (MAX VALUE = 99) 
*     CALL SEQUENCE:  LDA VALUE 
*                     JSB CNV99 
*                     STA ASCII 
* 
CNV99 NOP           QUICK CONVERSION
      CLB           BINARY TO DECIMAL ASCII 
      DIV P10       MAX VALUE = 99
      SZA 
      ADA M20       FORCE LEADING BLANK IF ZERO 
      ADA M40 
      ALF,ALF       PUT IN LEFT HALF
      IOR B 
      IOR M60 
      JMP CNV99,I   RETURN ASCII IN (A) 
      SKP 
* 
*     ROUTINE TO OUTPUT A WORD THAT HAS BEEN RELOCATED
* 
* 
*     JSB L.OUT 
*     DEF *+3 
*     DEF ADDRESS   ADDRESS OF ADDRESS
*     DEF VALUE     ADDRESS OF VALUE
* 
* 
DADD  NOP 
DVAL  NOP 
L.OUT NOP 
      JSB .ENTR 
      DEF DADD
      LDA DADD,I    GET ADDRESS 
      STA QTEMP 
      CMA,INA       NEGATE ADDRESS
      ADA CROM      ADD TOP OF MEMORY 
      SSA           OUTPUT FILE OVERFLOW? 
      JMP FILOV     YES , GIVE ERROR
      ADA B1200     SUBTRACT 1200B
      SSA           BOOTX OVERLAY?
      JSB BOOTX     YES , GIVE ERROR MESSAGE
      LDA DVAL,I    NO
      STA PTEMP 
* 
      CLB           CALCULATE RECORD # & WORD POSITION
      LDA QTEMP     GET ADDRESS 
      ADA P128      REC # = (ADDRESS+128)/128 
      DIV P128      QUOTIENT IN A = RECORD #
      STA RECN      THIS THE RECORD # 
      INB           REMAINDER IN B + 1 = WORD POSITION
      STB WORDN     THIS THE WORD POSITION IN THE RECORD
* 
      CPA RECNO     NEW REC # EQUAL TO PREVIOUS REC #?
      JMP L.O10     YES , JUST DATE THE RECORD
* 
      JSB WRITF     NO , WRITE OUT CURRENT REC
      DEF *+6 
      DEF ODCB2 
      DEF IERR2 
      DEF OTBUF 
      DEF P128
      DEF RECNO 
* 
      SSA,RSS       ANY ERROR?
      JMP L.003     NO , CONTINUE 
      LDB F2        ADDRESS OF SYSTEM OUTPUT FILE NAME
      JSB FLERR 
* 
L.003 JSB READF     READ THE NEW RECORD IN
      DEF *+7 
      DEF ODCB2 
      DEF IERR2 
      DEF OTBUF 
      DEF P128
      DEF RTEMP 
      DEF RECN
      SSA,RSS       ANY ERROR?
      JMP L.006     NO , CONTINUE 
      LDB F2        ADDRESS OF SYSTEM OUTPUT FILE NAME
      JSB FLERR 
* 
L.006 LDA RECN
      STA RECNO     SAVE IT AS THE CURRENT RECORD # 
* 
L.O10 LDA WORDN     UPDATE THE RECORD 
      ADA N1        WITH THE NEW WORD 
      ADA AOTBF 
      LDB PTEMP     GET THE VALUE OF THE WORD 
      STB A,I       AND PLACE IT IN THE RECORD
* 
* 
      LDA QTEMP           GET ADDRESS AGAIN 
      ADA B2000     ADA -2000B
      SSA           2000B OR GREATER ? IE NOT ON BASE PAGE
      RSS           NO , UPDATE BP
      JMP L.20      YES 
      INA 
      ADA TDBP      ADD TOP OF DUMMY BP 
      LDB PTEMP     GET VALUE 
      STB A,I       STORE VALUE IN DUMMY BP 
* 
L.20  LDA MAXAD     GET CURRENT MAX ADDRESS 
      CMA,INA 
      ADA QTEMP     ADD CURRENT ADDRESS 
      SSA           MAX ADDRESS BIGGER ?
      JMP L.OT      YES 
      LDA QTEMP     NO , REPLACE CURRENT MAX ADDRESS
      STA MAXAD 
L.OT  LDA TH2.L     CURRENT HIGH ADDRESS + 1 OF THIS LOAD 
      CMA,INA       NEGATE
      ADA QTEMP     ADD CURRENT OUTPUT ADDRESS
      SSA           EQUAL OR GREATER? 
      JMP L.OUT,I   NO , RETURN 
      LDA QTEMP     YES , 
      INA           OUTPUT ADDRESS IS EQUAL OR LARGER 
      STA TH2.L     REPLACE IN TH2.L
      JMP L.OUT,I 
* 
FILOV LDA P6
      LDB MESOV 
      JSB DRKEY     PRINT OUTPUT FILE OVERFLOW
      JSB ASTRX     PRINT ******
      ISZ ERRCT 
      JMP EXIT
* 
MESOV DEF *+1 
      ASC 3,OV MEM  SYSTEM OUTPUT FILE OVERFLOWED 
* 
BOOTX NOP 
      LDA PRERR 
      SZA           ERROR PRINTED PREVIOUSLY? 
      JMP BOOTX,I   YES , RETURN
      LDA P6        NO
      LDB MESBX 
      JSB DRKEY     PRINT BOOTX OVERLAYED 
      ISZ ERRCT 
      JSB ASTRX     PRINT ******
      CCA 
      STA PRERR     SET ERROR PRINTED FLAG
      JMP BOOTX,I 
* 
MESBX DEF *+1 
      ASC 3,OV BTX  OVERFLOWED INTO BOOTX 
* 
RECN  NOP 
WORDN NOP 
RECNO DEC 255 
* 
* 
AOTBF DEF OTBUF 
OTBUF BSS 128 
      SKP 
*  THE 3 WORD PROGRAM NAME IS PUT INTO THE RTLGN PROG 
*  TABLE. THE NAMES ARE LOADED FROM THE TOP DOWN. 
* 
*  CALLING SEQUENCE:
*    A = ADDRESS OF PROGRAM NAME
*    B = IGNORED
*    JSB LDIPX
*     RETURN: 
*            (N+1) = ERROR
*            (N+2) = OK 
* 
*  RETURN:  A AND B ARE DESTROYED 
* 
LDIPX NOP 
      STA IPXSV     SAVE PROG NAME ADDRESS
      JSB INIPX     INITIALIZE TO START OF TABLE
      LDA PROCT      NUMBER OF ENTRIES
      CPA P10        EXCEED MAX?
      JMP LDIPX,I    YES , ERROR RETURN 
      ALS            MULT X2
      ADA PROCT      PLUS ONE TO MAKE IT X3 
      CMA,INA 
      ADA BIDNT      BUILD NEXT NAME ADDRESS
      STA BIDNT      FOR SAVE 
      JSB IPX       INITIALIZE IP POINTERS
      LDA IPXSV,I   GET N1-N2 
      STA IP1,I     PUT IN TABLE
      ISZ IPXSV     BUMP POINTER
      LDA IPXSV,I   GET N3-N4 
      STA IP2,I     SAVE
      ISZ IPXSV 
      LDA IPXSV,I   GET N5-XX 
      STA IP3,I     SAVE
      ISZ PROCT     BUMP NUMBER OF NAMES
      ISZ LDIPX     OK RETURN 
      JMP LDIPX,I   RETURN
* 
* 
IPXSV NOP           PROGRAM NAME ADDRESS
* 
      SKP 
* 
*  INIPX SETS THE ADDRESS OF THE FIRST ENTRY IN THE 
*  PROGRAM IDENT TABLE AS THE CURRENT ADDRESS.
* 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
* 
*  RETURN:  A AND B DESTROYED 
* 
INIPX NOP 
      LDA APROG 
      ADA N2
      STA BIDNT 
      JMP INIPX,I 
* 
* 
* 
*  THE IPX ROUTINE ADDRESSES THE CURRENT 3 WORD ENTRY 
*  IN THE INTERRUPT PROGRAM TABLE FROM THE ADDRESS OF 
*  THE CURRENT ENTRY (BIDNT). THE TABLE START ADDRESS 
*  IS LWAM. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB IPX
* 
*  RETURN, CONTENTS OF A AND B ARE DESTROYED
* 
IPX NOP 
      LDA BIDNT     BUILD POINTERS
      STA IP1 
      INA 
      STA IP2 
      INA 
      STA IP3 
      ADA N5
      STA BIDNT 
      JMP IPX,I 
* 
BIDNT NOP           ADDRESS OF FIRST IDENT
IP1   NOP 
IP2   NOP 
IP3   NOP 
      SKP 
* 
*      SEARCH RTLGN PROG TABLE
* 
*  THIS IS A MULTIPLE ENTRY ROUTINE WHICH WILL EITHER 
*  SEARCH FOR A NAME OR CONTINUE FROM THE LAST FIND.
* 
*  CALLING SEQUENCE:
*    A = ADDRESS OF NAME (3WORD)
*    B = IGNORED
*    JSB SRIPX
* 
*  RETURN:
*    (N+1) PROGRAM NAME WAS FOUND IN TABLE, IN IP1-3
*    (N+2) REACHED THE END OF THE PROGRAM TABLE 
* 
SRIPX NOP 
      LDB WRDCT     SEARCH OR CONTINUE? 
      SZB 
      JMP SRIP1     CONTINUE
      STA SRISV     INIT SEARCH 
      JSB INIPX     SET UP IP POINTERS
      LDA PROCT     NUMBER OF ENTRIES 
      CMA 
      STA WRDCT     SAVE FOR LOOPING
SRIP1 ISZ WRDCT     ALL DONE? 
      JMP *+3       NO, GO COMPARE NAMES
      ISZ SRIPX     YES, BUMP RETURN
      JMP SRIPX,I 
      JSB IPX       SET POINTERS
      LDB IP1       NAME IN TABLE 
      LDA SRISV     LOOK FOR NAME 
      JSB NACMP     GO COMPARE
      JMP SRIP1     DOSN'T COMPARE, LOOK NEXT 
      JMP SRIPX,I   DOES COMPARE, RETURN
* 
SRISV NOP 
* 
      SKP 
* 
*  ROUTINE TO COMPARE TWO NAME BUFFERS
* 
* 
*  CALLING SEQUENCE:
*    A = ADDRESS OF SOURCE NAME- 3 ENTRIES
*    B = ADDRESS OF TABLE 3 ENTRIES 
*    JSB NACMP
* 
*  RETURN: A AND B ARE DESTROYED
*    (N+1) NAMES DO NOT COMPARE 
*    (N+2) NAMES COMPARE
* 
NACMP NOP 
      STA TEMP1     SAVE SOURCE ADDRESS 
      STB TEMP2     SAVE TABLE ADDRESS
      LDA N2        LOOP COUNT
      STA TEMP3 
NACM1 LDA TEMP1,I   SOURCE ENTRY
      CPA TEMP2,I   TABLE COMPARE 
      RSS           YES,COMPARE, LOOK NEXT
      JMP NACMP,I   NO IT DOESN'T RETURN
      ISZ TEMP1     BUMP SOURCE 
      ISZ TEMP2     BUMP TABLE
      ISZ TEMP3 
      JMP NACM1     TRY AGAIN 
      LDA TEMP2,I   FIRST TWO COMPARE, LOOK LAST
      AND M400      LOOK UPPER ONLY 
      STA B 
      LDA TEMP1,I 
      AND M400
      CPA B 
      ISZ NACMP     BUMP RETURN FOR COMPARE!
      JMP NACMP,I 
* 
TEMP1 NOP 
TEMP2 NOP 
TEMP3 NOP 
* 
* 
      BSS 29
PROGN NOP 
APROG DEF PROGN 
* 
      SKP 
* 
*     VARIABLES 
* 
#ENPT NOP 
ABGBP NOP 
ADDID NOP           ADDRESS OF ID SEGMENT 
AFWBG NOP 
AINT  NOP           ADDRESS OF INT TABLE
ANLU# NOP 
BGFLG NOP 
BPFWA OCT 100       1ST WORD OF BASE PAGE 
BPLOC NOP 
CHAR# NOP           INPUT # OF CHARACTER
CLEN  NOP           RECORD READ LENGTH
CNT1  NOP 
COMAD NOP           ADDRESS OF SYS COMMON OR 0 IF LOCAL 
COMFG NOP           UNLABEL COMMON IN FLAG
COMLG NOP           LENGTH OF SYSTEM COMMON OR 0
CONSL NOP           ECHO TO CONSOLE 1=YES 0=NO
COUNT DEC 13        CURRENT MESSAGE LENGTH
CROM  OCT 37770     CONTENTS OF $ROM
CSDBP NOP           CURRENT SYS DUM BP
CSRBP NOP           CURRENT SYS REAL BP 
CUDBP NOP           CURRENT USER DUM BP 
CURBP NOP           CURRENT USER REAL BP
DBLOC DEF BPLOC 
DLOCC DEF LOCC
ERRCT NOP           ERROR COUNTER 
FATAL NOP           0/1 NO FATAL ERROR  / FATAL ERROR 
FWFM  NOP           1ST WORD OF FREE MEMORY 
IERR1 NOP 
IERR2 NOP 
IERR3 NOP 
IERR4 NOP 
IPTN2 NOP           OPEN OPTION 
LDBP  NOP           LOWER BOUND OF DUMMY BASE PAGE
LENTF OCT 1         NO ENT PT / LIST ENT PT (DEFAULT) 
LNKDR NOP           BP LINK DIRECTION -1 = SYS LINK , 1 = USER LINK 
LOCC  NOP 
LODPT NOP           LOAD POINT
LTEMP NOP 
LWAPG NOP           LAST WORD OF ADDRESS SPACE
LWFM  NOP           LAST WORD OF FREE MEMORY
MAXAD NOP           CURRENT MAX ADDRESS 
MSIZE NOP           MEMORY SIZE 
NLIB  NOP           # OF LIBRARY FILES
NUMID NOP           # OF ID SEGMENTS
OP?   NOP 
OP1?  NOP 
PPREL NOP 
PRERR NOP           0/-1 PRINT ERROR/ERROR PRINTED PREVIOUSLY 
PROCT NOP 
PTEMP NOP 
PTN1  NOP 
QTEMP NOP 
RTEMP NOP 
SEGNM NOP 
SIDCK NOP           SYSTEM ID CHECK 
TDBP  NOP           TOP OF DUMMY BASE PAGE
WRDCT NOP 
      SKP 
* 
*     PRE-SET VARIABLES 
* 
DFTLU DEC 1         DEFAULT LU
ISTRC DEC 1         POINTER TO CURRENT CHAR TO BE PARSE 
* 
*     CONTANTS
* 
P1    DEC 1 
P2    DEC 2 
P3    DEC 3 
P6    DEC 6 
P8    DEC 8 
P10   DEC 10
P13   DEC 13
P14   DEC 14
P18   DEC 18
P26   DEC 26
P32   DEC 32
P40   DEC 40
P128  DEC 128 
* 
N1    DEC -1
N2    DEC -2
N4    DEC -4
N5    DEC -5
N6    DEC -6
N7    DEC -7
N32   DEC -32 
N80   DEC -80 
* 
M20   OCT 20
M40   OCT 40
M60   OCT 60
M400  OCT 400 
* 
B1200 OCT -1200 
B2000 OCT -2000 
* 
ASTRK OCT 25000     THIS IS A * 
HIMSK OCT 177400
* 
BLNK2 ASC 1,        DOUBLE BLANK
* 
*      BASE PAGE COMMUNICATION VALUES 
* 
A     EQU 0 
B     EQU 1 
* 
* 
      SPC 3 
      END RTLGN 
                                                                                                                                                                          