ASMB,R,Q,C
      HED TABLE BUILDING ROUTINES 
* 
*     NAME:    T.BTE
*     SOURCE:  92076-18023
*     RELOC:   PART OF 92076-16002
*     PGMR:    B.J.L. 
* 
*  **************************************************************** 
*  * (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.        * 
*  **************************************************************** 
* 
      NAM T.BTE,8 92076-1X023 REV. 2040 800731 92076-16002
* 
      SUP 
* 
* 
* 
*  THE FOLLOWING ROUTINE BUILDS THE INDIVIDUAL TABLE
*  ENTRIES FOR RTETG.  EACH TIME IT IS CALLED, IT PARSES
*  THE COMMAND LINE AND BUILDS AN ENTRY IN THE BRANCH 
*  TABLE, MNEMONIC TABLE, AND ENTRY POINT NAME TABLE. 
* 
*    CALLING SEQUENCE:
* 
*      COMMAND LINE IN T.COM (IN MAIN)
*      COMMAND LINE LENGTH IN T.LEN (IN MAIN) 
*      T.MAD POINTS AT MNTBL SEGMENT
*      T.BAD POINTS AT BRTBL
*      T.EAD POINTS AT ENTRY POINT BUFFER 
*      T.ERN = 0
*      JSB T.BTE
*      RETURN   ERROR CODE (T.ERN) UPDATED AND ADDRESS
*               POINTERS POINT TO NEXT ENTRY POSITION 
*               T.SUB WILL BE FILLED IN 
* 
* 
* 
*    FORMAT OF T.SUB IS AS FOLLOWS: 
* 
* 
*      +-----------------------------------------------+
*      !15!14!13!12!11!10! 9! 8! 7! 6! 5! 4! 3! 2! 1! 0!
*      +-----------------------------------------------+
*      \LOADR OPTN/\  PAGE SIZE     /\  SUBROUTINE CT / 
* 
* 
      ENT T.BTE 
* 
      EXT EXEC      SYSTEM CALLS
      EXT .DRCT     GET DIRECT ADDRESS SUBROUTINE 
      EXT T.COM     COMMAND BUFFER (IN MAIN)
      EXT T.LEN     COMMAND BUFFER LENGTH (IN MAIN) 
      EXT T.IDL     ID LETTER CODE (IN MAIN)
      EXT T.MAD     MNEMONIC TABLE ADDRESS (IN MAIN)
      EXT T.BAD     BRANCH TABLE ADDRESS (IN MAIN)
      EXT T.EAD     ENTRY POINT ADDRESS (IN MAIN) 
      EXT T.ERN     ERROR NUMBER (IN MAIN)
      EXT T.FIL     FILE NAME ADDRESS (IN MAIN) 
      EXT T.PRI     PRIORITY FOR OVERLAYS (IN MAIN) 
      EXT T.SEC     SECURITY CODE FOR OVERLAYS (IN MAIN)
      EXT T.CRF     CARTRIDGE # FOR OVERLAYS (IN MAIN)
      EXT T.SUB     SUBROUTINE COUNT AND SIZE BUFFER
      EXT T.CON     CONTROL WORD FOR OUTPUT (IN MAIN) 
* 
* 
T.BTE NOP 
      JSB .DRCT     SET UP POINTERS INTO THE
      DEF T.COM     COMMAND BUFFER FOR T.GCR
      CLE,ELA 
      STA T.ADR 
      LDA T.LEN 
      ALS 
      CMA 
      STA T.CNT 
      JSB .DRCT     SET UP POINTER TO 
      DEF T.SUB     SUBROUTINE COUNT BUFFER.
      STA SUNUM 
      LDA T.BAD     SET UP POINTERS INTO THE
      STA BR1       BRANCH AND MNEMONIC TABLE 
      INA           ENTRIES TO BE BUILT.
      STA BR2 
      INA 
      STA BR3 
      INA 
      STA BR4 
      LDA T.MAD 
      STA MN1 
      INA 
      STA MN2 
      STA SNAME 
      LDA T.EAD 
      STA EN1 
      STA ENAME 
      STA EPNAM 
      JSB .DRCT 
      DEF T.FIL 
      STA FNAME 
      CLB 
      STB A,I 
      STB EN1,I 
      STB BR3,I     INITIALIZE TO-FROM WORD 
      STB BR4,I     INITIALIZE REAL-INTEGER WORD
      STB PRCNT     INITIALIZE PARAMETER COUNT. 
      STB FOUND     CLEAR PARAMETER SEEN SWITCH.
      STB FNAME,I 
**********************REMOVED 800728*********************         
*     LDB D3        SET DEFAULT TO BACKGROUND 
*     STB LDOPT 
*     LDA OVNUM     IF FIRST
*     ADA SUNUM       SUBRUTINE IN
*     LDA 0,I           IN OVERLAY THEN ZERO SIZE 
*     AND B77 
*     SZA,RSS 
*     STA SIZE
**********************800728***************************** 
      LDA AMASK     SET DEFAULT 
      STA BR2,I       TO 'ARRAY'
      LDA B50 
      STA T.DLM     SET DELIMITER TO "("
      JSB T.GCR     GET FIRST CHARACTER.
      JMP ERR4      ERROR - NOT ENOUGH PARAMETERS.
      JSB LNAME     GET NAME( 
SNAME BSS 1 
      DEC -7        MAX OF 6 CHARS + "("
      JMP ERR2      INVALID NAME
      STA SAVE      SAVE DELIMITER CHARACTER. 
      JSB CHRCK     ANY PARAMETER DESCRIPTIONS? 
      JMP T.B10     NO. 
      NOP 
      LDB TEMP1     STORE "(" WITH NAME.
      JSB SBYTE 
      ISZ TEMP1 
      JSB NMLEN     CALCULATE NAME LENGTH.
SPECS LDA PRCNT     HAVE WE FOUND 15 PARAMETER
      CPA D15       SPECIFICATION?
      JMP ERR5      YES - ERROR.
      CLB           SET UP TO GET ATTRIBUTES
      STB FNDIR     FOR A PARAMETER.
      STB FNDA      CLEAR FLAGS INDICATING
      STB FNDV      ATTRIBUTES SEEN.
      STB SAVE
GTAT1 JSB T.GCR     GET A CHARACTER.
      JMP ERR6      ILLEGAL FORMAT. 
      CPA B54       COMMA?
      RSS           YES.
      CPA B51       RIGHT PARENTHESIS?
      RSS           YES.
      JMP GTAT3     ORDINARY CHARACTER. 
      LDB SAVE      HAD WE FOUND ANY
      SZB,RSS       ATTRIBUTES? 
      JMP ERR5      NO - ILLEGAL PARAMETER SPECIFICATION. 
      JMP GTAT2     YES - FINISHED WITH THIS SPEC.
GTAT3 CLB           HAVE A PARAMETER SPEC. CHARACTER. 
      CPA ACHAR     WHAT HAVE WE GOT? 
      JMP AC        "A" 
      CPA ICHAR 
      JMP I         "I" 
      CPA VCHAR 
      JMP V         "V" 
      CPA RCHAR 
      JMP R         "R" 
      JMP ERR5      ILLEGAL PARAMETER SPECIFICATION.
* 
I     INB           SET UP PARAMETER BIT. 
R     LDA FNDIR     SEEN AN I OR
      SZA           R SPEC? 
      JMP ERR5      YES - ILLEGAL PARAMETER SPEC. 
      INA           INDICATE SPECIFICATION
      STA FNDIR     FOUND.
      LDA BR4,I     ROTATE PARAMETER BIT INTO 
      RRR 1         THE CONVERSION WORD.
      STA BR4,I 
GTATT ISZ SAVE      COUNT THE SPEC. CHARACTER.
      JMP GTAT1     GO LOOK FOR MORE. 
* 
GTAT2 ISZ PRCNT     COUNT THE PARAMETER.
      STA SAVE      SAVE BREAK CHARACTER. 
      LDB FNDIR     MAKE SURE BITS ARE
      SZB           ROTATED PROPERLY ON 
      JMP GTAT5     BRANCH TABLE WORDS
      LDA BR4,I     REPRESENTING SPECIFICATION
      RRR 1         LETTERS NOT FOUND 
      STA BR4,I     DESCRIBING THIS PARAMETER.
GTAT5 LDB FNDA
      SZB 
      JMP GTAT6 
      LDA BR2,I 
      RRR 1 
      STA BR2,I 
GTAT6 LDB FNDV
      SZB 
      JMP GTAT7 
      LDA BR3,I 
      RRR 1 
      STA BR3,I 
GTAT7 LDA SAVE      GET BACK THE BREAK CHAR.
      CPA B51       AT THE END OF THE SPECS.? 
      JMP GTAT4     YES.
      JMP SPECS     KEEP LOOKING. 
* 
GTAT4 LDA PRCNT     FINISHED WITH SPECS.
      SZA,RSS       DID WE FIND ANYTHING? 
      JMP ERR5      ERROR - ILLEGAL PARAMETER SPECIFICATION.
      JMP T.B11     CONTINUE WITH OTHER PARAMETERS. 
* 
V     CPA FNDV      ALREADY SEEN THIS CHARACTER?
      JMP ERR5      YES - ILLEGAL PARAMETER SPECIFICATION.
      STA FNDV      INDICATE THIS CHARACTER SEEN. 
      INB           SET UP PARAMETER BIT
      LDA BR3,I     AND ROTATE IT 
      RRR 1         TO PROPER POSITION
      STA BR3,I     IN "TO-FROM" WORD.
      JMP GTATT     GO LOOK FOR MORE. 
* 
AC    CPA FNDA      ALREADY SEEN THIS CHARACTER?
      JMP ERR5      YES - ILLEGAL PARAMETER SPECIFICATION.
      STA FNDA      INDICATE THIS CHARACTER SEEN. 
      INB           SET UP PARAMETER BIT
      LDA BR2,I     AND ROTATE IT TO
      RRR 1         PROPER POSITION IN
      STA BR2,I     VARIABLE TYPE WORD. 
      JMP GTATT 
* 
ERR9  ISZ T.ERN     BAD FILE NAME 
ERR8  ISZ T.ERN     BAD ENTRY POINT NAME
ERR7  ISZ T.ERN     TABLE OVERFLOW. 
ERR6  ISZ T.ERN     ILLEGAL FORMAT T.ERN. 
ERR5  ISZ T.ERN     ILLEGAL PARAMETER SPECIFICATION.
ERR4  ISZ T.ERN     NOT ENOUGH PARAMETERS.
ERR3  ISZ T.ERN     ENTRY POINT NAME TOO LARGE. 
ERR2  ISZ T.ERN     NAME TOO LARGE. 
ERR1  ISZ T.ERN     TOO MANY PARAMETERS.
      JMP T.BTE,I   GO REPORT THE BAD NEWS. 
* 
NMLEN NOP           SUBROUTINE TO CALCULATE 
      LDA MN2       THE LENGTH OF A 
      CMA,INA       SUBROUTINE NAME INCLUDING 
      LDB TEMP1     THE "(" IF PRESENT AND
      CLE,ERB       STORE THE RESULT. 
      ADA 1 
      LDB TEMP1 
      ALS 
      SLB 
      INA 
      STA MN1,I 
      JMP NMLEN,I 
* 
T.B10 JSB NMLEN     NO PARAMETER SPECIFICATIONS 
      JMP T.BT2     TO BREAK UP.
* 
* 
A     EQU 0 
AMASK OCT 77777 
SUNUM BSS 1 
BR1   BSS 1 
BR2   BSS 1 
BR3   BSS 1 
BR4   BSS 1 
MN1   BSS 1 
MN2   BSS 1 
EN1   BSS 1 
PRCNT BSS 1 
CHAR  BSS 3          *800729**
SAVE  BSS 1 
FOUND BSS 1 
FNDIR BSS 1 
FNDA  BSS 1 
FNDV  BSS 1 
FULL  OCT 177 
B77   OCT 77
B50   OCT 50
B51   OCT 51
B100  OCT 100 
M101  OCT 177677
M133  OCT 177645
B200  OCT 200 
EQ    OCT 75
ICHAR OCT 111 
VCHAR OCT 126 
RCHAR OCT 122 
ACHAR OCT 101 
D2    DEC 2 
D15   DEC 15
D32   DEC 32
M32   DEC -32 
D64   DEC 64
* 
* 
PROT  NOP 
      LDA PRCNT 
      CMA           ROTATE PARAMETER DESCRIPTOR 
T.BT5 INA,SZA,RSS   WORDS TO THEIR
      JMP T.BT4     CORRECT POSITIONS.
      RBL 
      JMP T.BT5 
T.BT4 JMP PROT,I
* 
T.B11 LDA PRCNT     STORE PARAMETER COUNT 
      ALF           IN MNEMONIC TABLE WORD. 
      IOR MN1,I 
      STA MN1,I 
      LDA T.CNT 
      SSA,RSS 
      JMP ERR4      NOT ENOUGH PARAMETERS.
      JSB T.GCR     GET NEXT CHARACTER. 
      JMP ERR4      NOT ENOUGH PARAMETERS.
      STA SAVE      SAVE DELIMITER. 
      LDB BR2,I 
      JSB PROT
      STB BR2,I 
      LDB BR3,I 
      JSB PROT
      STB BR3,I 
      LDB BR4,I 
      JSB PROT
      STB BR4,I 
* 
T.BT2 LDB EQ        SET DELIMITER TO "="
      STB T.DLM 
T.BT1 LDA SAVE
      CPA D10       ANY MORE PARAMETERS?
      JMP T.B12     NO - CHECK FOR MINIMUM. 
      LDB FOUND     DO WE HAVE ALL
      CPB FULL      POSSIBLE PARAMETERS?
      JMP ERR1      YES - TOO MANY PARAMETERS.
      CPA B54 
      RSS 
      JMP ERR6
      JSB T.GCR     GET NEXT CHARACTER. 
      JMP T.B12 
      JSB LNAME     GET THE KEYWORD.
      DEF CHAR
      DEC -5
      JMP ERR6      ILLEGAL FORMAT. 
      STA SAVE
* 
*  MATCH THE KEYWORD AND JUMP TO CORRECT ROUTINE. 
* 
      LDB KEYWD     MATCH THE KEYWORD.
T.BT3 INB 
      LDA B,I 
      SZA,RSS 
      JMP ERR6      NO MATCH - ERROR. 
      CPA CHAR
      JMP T.BT6 
      ADB D2
      JMP T.BT3 
T.BT6 INB 
      LDA B,I 
      INB 
      CPA CHAR+1
      CCE,RSS 
      JMP T.BT3 
      ELB,RBR 
      JMP B,I 
* 
KEYWD DEF * 
      ASC 2,OV      OVERLAY NUMBER SPEC 
      DEF OVLAY 
      ASC 2,SZ      RTEIII LOADR SIZE SPEC
      DEF OSIZE 
      ASC 2,INTG    INTEGER FUNCTION
      DEF INTEG 
      ASC 2,REAL    REAL FUNCTION 
      DEF REAL
      ASC 2,ENT     ENTRY POINT SPEC
      DEF EPNT
      ASC 2,FIL     FILE NAME SPEC
      DEF FILNM 
      ASC 2,BT      BACGROUND TEMPRORARY
      DEF BCKGD 
      ASC 2,BP      BACKGROUND PERMANENT
      DEF BCKGD     GOTO TEMPRORARY SETTING 
      ASC 2,BG      GENERAL BACKGROUND FOR L
      DEF BCKGD 
      ASC 2,FT      FOREGROUND PERMANENT
      DEF REALT 
      ASC 2,FP      FOREGROUND TEMPORARY
      DEF REALT 
      ASC 2,RT      GENERAL REAL TIME FOR L 
      DEF REALT 
      ASC 2,SS      SUBSYTEM GLOBAL COMMON
      DEF SSPRM 
      ASC 2,VL      VARIABLE LENGTH PARAMETER LIST
      DEF VLPRM 
ZERO  DEC 0         END OF TABLE *READDED 800115* 
* 
* 
*  THE FOLLOWING SUBROUTINE CHECKS TO SEE WHETHER A 
*  GIVEN PARAMETER HAS ALREADY BEEN SEEN AND RESETS 
*  FOUND TO INDICATE PARAMETER RECOGNIZED.
* 
*  CALLING SEQUENCE:
*     LDB BIT POSITION IN FOUND 
*     JSB PRCHK 
* 
PRCHK NOP 
      LDA FOUND 
      XOR B 
      STA FOUND 
      AND B 
      SZA,RSS 
      JMP ERR6
      JMP PRCHK,I 
* 
*  SETUP LOADER OPTIONS IF SPECIFIED
* 
*  LDOPT CONTAINS VALUE FOR TYPE OF PROGRAM LOAD IN TRANSFER FILE 
* 
*   LDOPT = 0    OLD REAL TIME PERMANENT
*   LDOPT = 1    ALL REAL TIME
*   LDOPT = 2    OLD BACKGROUND PERMANENT 
*   LDOPT = 3    ALL BACKGROUND 
*   LDOPT = LDOPT+10B  WILL CAUSE THE LOADED PROGRAM  TO REFERENCE SSGA 
* 
*   EXAMPLE: 13 OCTAL WOULD BE BACKGROUND TEMP WITH SSGA
*                             
************************CHANGED 800728********************* 
* 
* THE FOLLOWING CODE WAS CHANGED TO REFLECT REMOVAL OF
* TRANSFER FILE.      
* 
*SSPRM LDA D8        SSGA SPECIFIED 
*     ADA LDOPT 
*     STA LDOPT 
SSPRM LDB B200      HAVE WE SEEN THIS PARAMETER 
      JSB PRCHK       BEFORE
      JMP T.BT1     GO TO NEXT PARAMETER
* 
*FRPRM CLA           REAL TIME PERMANENT
*     RSS 
REALT NOP           REAL TIME TEMPORARY 
*     RSS 
*BKPRM LDA D2        BACKGROUND PERMANENT 
*     RSS 
*BCKGD LDA D3        BACKGROUND TEMPORARY 
*     ADA LDOPT     SET LOADR OPTIONS 
*     STA LDOPT 
BCKGD LDB D32       HAVE WE SEEN
      JSB PRCHK       THIS PARAMETER BEFORE?
      JMP T.BT1      GO TO NEXT PARAMETER 
* 
*  SET VARIABLE LENGTH PARAMETER LIST FLAG
* 
VLPRM LDB B100
      JSB PRCHK 
      LDA MN1,I     GET PARAMETER COUNT 
      IOR BIT14       WORD AND
      STA MN1,I         SET VARIABLE LENGTH FLAG
      JMP T.BT1           AND LOOK FOR MORE 
* 
*  GET OVERLAY SIZE 
* 
OSIZE LDB D2        HAVE WE ALREADY 
      JSB PRCHK     SEEN THIS PARAMETER?
OSIZ1 JSB T.GCR     SEARCH FOR ,
      JMP ERR6      NO MORE CHAR. ERROR 
      CPA B54       COMMA?
      RSS           YES, SAVE DELIMITER 
      JMP OSIZ1     NO, GO FOR MORE 
      STA SAVE
      JMP T.BT1 
*     LDA SAVE
*     CPA EQ
*     RSS 
*     JMP ERR6
*     JSB T.GTN 
*     JMP ERR6      NO NUMBER - ERROR.
*     STA SAVE      SAVE DELIMITER. 
*     STB SIZE      SAVE PAGE SIZE. 
*     ADB M1        CHECK BOUNDS. 
*     SSB           PAGE SIZE SHOULD BE 
*     JMP ERR6      GREATER THAN ZERO 
*     ADB M32       AND LESS THAN OR
*     SSB,RSS       EQUAL TO 32.
*     JMP ERR6
*     JMP T.BT1     LOOK FOR MORE.
* 
*  GET OVERLAY NUMBER.
* 
M1    DEC -1
SIZE  NOP           SAVE FOR OVERLAY SIZE 
OVNUM BSS 1         SAVE FOR OVERLAY NUMBERS. 
LDOPT BSS 1         LOADR OPTION
BIT14 OCT 40000 
* 
OVLAY CLB,INB       HAVE WE ALREADY 
      JSB PRCHK     SEEN THIS KEYWORD?
      LDA SAVE      GET DELIMITER.
      CPA EQ
      RSS 
      JMP ERR6
      JSB T.GTN     GET THE NUMBER. 
      JMP ERR6
      STA SAVE      SAVE DELIMITER. 
      SSB           CHECK BOUNDS. 
      JMP ERR6      OUT OF BOUNDS.
      STB TEMP      SAVE OVERLAY NUMBER. *800128* 
      ADB M32 
      SSB,RSS 
      JMP ERR6      ERROR - OUT OF BOUNDS.
***************************ADDED 800128*********************************
      LDB TEMP      CHECK FOR CHANGE IN OV# 
      CMB,INB 
      ADB OVNUM 
      SSB           IF -, OK LARGER # 
      JMP OVLA1 
      SZB,RSS       IF 0, SAME VALUE
      JMP OVLA1 
      LDA D30       OV# IS SMALLER THEN CURRENT 
      STA T.ERN     REPORT ERROR AND ABORT
      JMP T.BTE,I 
OVLA1 LDB TEMP
      STB OVNUM 
*****************************800128************************************ 
      STB A 
      BLF           SAVE IT IN PROPER POSITION. 
      RBL,RBL 
      ADA SUNUM     ASSIGN A SUBROUTINE # 
      STA CHAR      AND KEEP TRACK OF IT. 
      LDA CHAR,I
      ISZ CHAR,I
      AND B77 
      CPA D64       CHECK BOUNDS. *800128*
      JMP ERR7      TABLE OVERFLOW - TOO MANY 
      XOR B         SUBROUTINES IN OVERLAY. 
      LDB T.IDL     MERGE IN CODE 
      BLF,BLF       FOR ID LETTER.
      BLF,RBR 
      XOR B 
      STA BR1,I     SAVE BRANCH TABLE ENTRY.
      JMP T.BT1     LOOK FOR MORE.
* 
D30   DEC 30        *800128*
TEMP  NOP           *800128*
* 
*  HAVE AN INTEGER VALUED FUNCTION
* 
INTEG CLB,CCE 
      LDB BR4,I 
      ELB,RBR       HAVE AN INTEGER-VALUED
      STB BR4,I     FUNCTION. 
* 
*  HAVE A REAL VALUED FUNCTION. 
* 
REAL  LDB D4        SEEN THIS PARAMETER 
      JSB PRCHK     ALREADY?
      LDA MN1,I     SET FUNCTION BIT
      CCE           ON MNEMONIC TABLE ENTRY.
      ELA,RAR 
      STA MN1,I 
      JMP T.BT1     LOOK FOR MORE.
* 
*  HAVE AN ENTRY POINT NAME 
* 
D8    DEC 8 
D16   DEC 16
* 
EPNT  LDB D8        SEEN THIS PARAMETERS
      JSB PRCHK     ALREADY?
      LDA SAVE
      CPA EQ
      RSS 
      JMP ERR6
      JSB T.GCR 
      JMP ERR6
      JSB LNAME     GET ENTRY POINT NAME
ENAME BSS 1         AND PUT INTO TABLE. 
      DEC -6
      JMP ERR3      ENTRY POINT NAME TOO LARGE. 
      STA SAVE      SAVE DELIMITER. 
*************************ADDED 800322*******************************
      LDA LENT1     CHECK FOR ACTUAL LENGTH 
      ADA M6        OF NOT >5 
      SSA,RSS       IF NEG. OK
      JMP ERR3      ELSE ERROR
      JMP T.BT1 
* 
M6    DEC -6
* 
****************************800322**********************************
* 
*  GET FILE NAME
* 
FILNM LDB D16       SEEN THIS PARAMETER 
      JSB PRCHK     ALREADY?
      LDA SAVE
      CPA EQ
      RSS 
      JMP ERR6
      JSB T.GCR 
      JMP ERR6
      JSB T.NAM     GET THE FILE NAME.
FNAME BSS 1 
**********************ADDED 791024*********************************** 
      CPA .11       TOO MANY CHARS IN NAME? 
      JMP ERR6      YES, ERROR
*****************************791024********************************** 
      STA SAVE      SAVE DELIMITER. 
      JMP T.BT1 
* 
*  FILE NAME AND ENTRY POINT NAME CHECK.
* 
*  CALLING SEQUENCE:
*     LDA ADDRESS OF NAME 
*     LDB SWITCH  (0 = FILE NAME, 1 = ENTRY POINT)
*     JSB NMCHK 
*     RETURN    LOSEBIG 
*     RETURN+1  OK
* 
NMCHK NOP 
      ERB 
      LDB T.CNT     SAVE COUNT AND ADDRESS
      STB NMC1      USED BY T.GCR.
      LDB T.ADR 
      STB NMC2
      LDB FNM1
      SEZ           GET PROPER TABLE
      LDB ENT1      OF CHARACTERS.
      STB NMC3
      LDB M7
      SEZ 
      INB           GET PROPER COUNT
      STB T.CNT     OF MAX. CHARS.
      ELB 
      STB NMSAV 
      CLE,ELA 
      STA T.ADR 
      JSB T.GCR     GET FIRST CHARACTER.
      JMP NMCHK,I   NULL - ERROR. 
NMCH1 LDB NMC3,I    CHECK VALIDITY OF FIRST CHARACTER.
      ISZ NMC3      IS IT IN ANY LEGAL RANGE?
      SZB,RSS       END OF CHARACTER TABLE? 
      JMP NMCHK,I   BAD NAME - ERROR RETURN.
      JSB RANGE     CHARACTER IN THIS RANGE?
      JMP NMCH1     NO - CHECK NEXT RANGE.
NMCH2 LDA NMSAV     ENTRY POINT OR FILE NAME? 
      LDB FNMR      GET PROPER CHAR. TABLE
      SZA           FOR REMAINING CHARACTERS. 
      LDB ENTR
      STB NMC3
      JSB T.GCR     GET NEXT CHARACTER. 
      JMP NMCH3     ALL DONE CHECKING.
NMCH4 LDB NMC3,I
      ISZ NMC3
      SZB,RSS 
      JMP NMCHK,I 
      JSB RANGE     IS CHARACTER IN THIS RANGE? 
      JMP NMCH4     NO - CHECK NEXT RANGE.
      JMP NMCH2     YES - CHECK NEXT CHARACTER. 
* 
NMCH3 LDA NMC1      RESTORE COUNT AND 
      STA T.CNT     ADDRESS FOR T.GCR.
      LDA NMC2
      STA T.ADR 
      ISZ NMCHK     NORMAL EXIT.
      JMP NMCHK,I 
* 
NMC1  BSS 1 
NMC2  BSS 1 
NMC3  BSS 1 
NMSAV BSS 1 
* 
FNFC  ASC 1,!*      FIRST CHARACTER TABLE 
      ASC 1,./      FOR FILE NAMES. 
      ASC 1,;_
      DEC 0 
FNRC  ASC 1,!&      REMAINING CHARACTER SET 
      ASC 1,.9      FOR FILE NAMES. 
      ASC 1,;_
      DEC 0 
EPFC  ASC 1,!&
      ASC 1,./
      ASC 1,>_
      DEC 0 
EPRC  ASC 1,!&
      ASC 1,._
      DEC 0 
* 
ENT1  DEF EPFC
ENTR  DEF EPRC
FNM1  DEF FNFC
FNMR  DEF FNRC
* 
*  THE FOLLOWING SUBROUTINE CHECKS WHETHER A
*  CHARACTER IS IN THE GIVEN RANGE.  UPON RETURN
*  THE A REGISTER IS THE SAME AS ON ENTRY.
* 
*  CALLING SEQUENCE:
*     LDA CHARACTER 
*     LDB RANGE VALUE 
*     JSB RANGE 
*     RETURN    NOT IN RANGE
*     RETURN+1  IN RANGE
* 
RANGE NOP 
      STA RANG1 
      CLA 
      LSR 8 
      ALF,ALF 
      STB RANG2 
      CMB,INB 
      ADB RANG1 
      SSB 
      JMP RANGE,I 
      CMA 
      STA B 
      ADB RANG1 
      LDA RANG1 
      SSB 
      ISZ RANGE 
      JMP RANGE,I 
* 
RANG1 BSS 1 
RANG2 BSS 1 
* 
T.B12 LDA FOUND     HAVE NECESSARY
      SLA,RSS       PARAMETERS? 
      JMP ERR4      NO - NOT ENOUGH.
* 
      LDA MN2       SET UP TO DEFAULT THE 
      CLE,ELA       ENTRY POINT NAME, IF
      STA T.ADR     NECESSARY.  SET POINTERS
      LDA MN1,I     FOR T.GCR.
      AND B7        NAME WILL BE PADDED WITH
      CMA           BLANKS BY LNAME.
      STA T.CNT 
      LDA EN1,I     BYPASS DEFAULT SET IF 
      SZA           ENTRY POINT ALREADY SET.
      JMP T.BT8 
* 
      LDA B50 
      STA T.DLM     SET UP FOR LNAME. 
      JSB T.GCR     GET FIRST CHARACTER OF NAME.
      NOP 
      JSB LNAME     IF WE NEED TO DEFAULT 
EPNAM BSS 1         THE ENTRY POINT NAME, 
M7    DEC -7        GO AHEAD AND DO SO. 
      NOP 
T.BT8 LDA ENAME     CHECK VALIDITY OF 
      CLB,INB       ENTRY POINT NAME. 
      JSB NMCHK     MAKE THE CHECK. 
      JMP ERR8      BAD ENTRY POINT NAME. 
      LDA FNAME     CHECK VALIDITY OF FILE NAME.
      LDB A,I       DO NOT CHECK A "NO-NAME." 
      SZB,RSS 
      JMP T.BT0 
      CLB 
      JSB NMCHK     DO THE CHECK. 
      JMP ERR9      BAD FILE NAME.
T.BT0 LDA EN1       INCREMENT COUNTERS AND
      ADA D3        PASS BACK NEW ADDRESSES 
      STA T.EAD     TO THE MAIN.
      LDA BR4 
      INA 
      STA T.BAD 
      LDA MN1,I 
      AND B7
      INA 
      ARS 
      ADA MN2 
      STA T.MAD 
      LDB OVNUM     INDEX TO OVERLAY
      ADB SUNUM     POSITION AND PICK 
      STB SAVE      UP THE ENTRY. 
      LDA SAVE,I    ISOLATE THE SIZE
      RRR 6         ATTRIBUTE ALREADY 
      AND B77       STORED. 
      SZA,RSS       OLD SIZE ZERO?
      JMP T.BT9     YES!
* DO WE HAVE A  DUPLICATE DEFINITION
      LDB SIZE      IS NEW SIZE ZERO? 
      SZB,RSS 
      JMP T.BT9     YES!
      CMB,INB 
      ADB A 
      SZB,RSS 
      JMP T.BT9 
      SSB           HAVE DUPLICATE DEFINITION.
      LDA SIZE      TAKE LARGER OF TWO
      STA SIZE      VALUES. 
      JSB EXEC      PRINT WARNING MESSAGE 
      DEF T.BT9     TO TELL USER OF 
      DEF D2        DUPLICATE DEFINITION. 
      DEF T.CON 
      DEF WARN
      DEF WARNL 
T.BT9 LDA SAVE,I
      AND B77       PUT SIZE INTO THE 
      LDB SIZE      PROPER PLACE IN 
      BLF           THE TABLE.
      RBL,RBL 
      XOR B 
      LDB LDOPT     PUT LOADR OPTIONS 
      BLF,BLF         INTO
      BLF               PLACE 
      XOR B 
      STA SAVE,I
      JMP T.BTE,I 
* 
B7    OCT 7 
WARNL DEC 20        LENGTH OF WARNING.
WARN  ASC 20, * WARNING *  DUPLICATE SIZE DEFINITION
      SKP 
* 
* 
*  THE FOLLOWING ROUTINE PARSES THE FIRST COMMAND 
*  LINE TO RTETG. 
* 
*  CALLING SEQUENCE 
* 
*    COMMAND LINE IN T.COM
*    LENGTH OF LINE IN T.LEN
*    T.MAD POINTS TO FIRST FILE NAME BUFFER 
*    JSB T.GFI
* 
* 
      ENT T.GFI 
      EXT NAMR,.SBT 
* 
* ADDED CALLS TO NAMR, .SBT  791025 
* 
* 
* 
T.GFI NOP 
      LDA D80       PUT IN DEFAULTS 
      STA T.PRI     FOR PRIORITY, 
      CLA           SECURITY CODE,
      STA T.SEC 
      STA T.CRF     AND CARTRIDGE #.
      JSB .DRCT     SET UP FOR T.GCR. 
      DEF T.COM     GET BUFFER ADDRESS. 
      CLE,ELA       SET UP POINTER. 
      STA T.ADR 
      LDA T.LEN     SET UP CHARACTER LENGTH.
      ALS 
      CMA 
      STA T.CNT 
      LDA T.MAD 
      STA NWFIL 
      LDA M2        SET UP TO GET *800728** 
      STA SAVE      THREE FILE NAMES. 
T.GF1 CPA D10       END OF BUFFER?
      JMP ERRO4     YES - NOT ENOUGH PARAMETERS.
      JSB T.GCR     GET NEXT CHARACTER. 
      JMP ERRO4     NONE - ERROR. 
      CPA D10       END OF BUFFER?
      JMP ERRO4     YES - ERROR.
      JSB T.NAM     GET A FILE NAME,
NWFIL BSS 1         SECURITY CODE, AND CRN# 
************************ADDED 791024******************************* 
      CPA D10       WAS THERE AN EOL? 
      JMP ERRO4     YES, ERROR
      CPA .11       TOO MANY CHARS? 
      JMP ERRO6     ILLEGAL FORMAT
******************************791024******************************
      LDB NWFIL 
      ADB D5        SET UP FOR
      STB NWFIL     NEXT FILE NAME. 
      ISZ SAVE
      JMP T.GF1 
      CPA D10 
      JMP ERRO4 
      JSB T.GCR     ANY MORE INPUT? 
      JMP ERRO4     NO - NOT ENOUGH PARAMETERS? 
***********************ADDED 800728*******************************
      LDB M1        SET INDICATOR FOR 1ST TIME THRU 
      STB CHCKR     IN CASE TRFL NAME WAS THERE 
GOAGN JSB LNAME     GET ID LETTER.
************************800728************************************
      DEF CHAR
      DEC -5
      JMP ERRCK     TOO LONG - ERROR.   *800728** 
      STA SAVE      SAVE DELIMITER CHAR.
****************************ADDED 800322******************************* 
      LDB LENT1     CHECK ACTUAL LENGTH 
      ADB M5        FOR >4
      SSB,RSS       IF NEG. OK
      JMP ERRCK     ELSE ERROR   *800728**
********************************800322********************************* 
      LDB CHAR
      CPB ID
      CLA,RSS 
      JMP ERRCK         *800728** 
      LDB CHAR+1
      LSR 8 
      ALF,ALF 
      CPB EQ
      RSS 
      JMP ERRCK         *800728** 
**************************ADDED 800731********************************
      STA T.IDL      HOLD ORIGINAL CHAR.
      ADA M133       MAKE SURE ISN'T > ALPHA Z
      SSA,RSS        POS. MEANS > 
      JMP ERRO6      YES, IT IS SO ERROR
      LDA T.IDL      NO, MAKE SURE ISN'T < ALPHA A
      ADA M101
      SSA            NEG. MEANS < 
      JMP ERRO6      YES, IS < A
      LDA T.IDL      NO, SO GO ON 
********************************800731********************************  
      AND B37 
      STA T.IDL     SAVE ID LETTER. 
      ADA N33       CHECK BOUNDS. 
      SSA,RSS 
      JMP ERRO6     TOO LARGE - ERROR.
      LDA T.CNT     CHECK CHARACTER COUNT.
      SZA,RSS       ANY MORE INPUT? 
      JMP T.GFI,I   THEN WE'RE DONE.
      JSB T.GTN     GET NEXT PARAMETER. 
      JMP T.GF2 
      SZB,RSS       NOT SUPPLIED OR ZERO? 
      JMP T.GF3     THEN BYPASS - PARM. IS DEFAULTED. 
      STB T.PRI     SAVE PRIORITY.
      ADB M10K      CHECK BOUNDS. 
      SSB,RSS 
      JMP ERRO6     TOO LARGE - ERROR.
      CCB 
      ADB T.PRI 
      SSB 
      JMP ERRO6     TOO SMALL - ERROR.
T.GF3 CPA D10 
      JMP T.GFI,I   ALL DONE. 
      CLB           ZERO OUT FLAG FOR CRN# REF. REMOVED*800128* 
      STB FCRN
T.GF2 CPA B54      IS THIS NEXT CHAR. A COMMA?  ADDED *800128*
      RSS          YES
      JMP ERRO6     NO, ERROR 
****************************ADDED 791025********************************
      JSB T.GCR     GET NEXT CHAR.
      JMP ERRO6     WAS EOL, ERROR
      CPA B54       IS THIS A COMMA (NO SC THEN)
      JMP T.GF4     YES, CRN# THEN? 
      JSB STBYT     DUMMY IN SC SO CAN USE NAMR FOR PARSE 
      STB T.SEC     STORE SECURITY CODE.
      CPA D10       ANY MORE CHARS.?
      JMP T.GFI,I   ALL DONE. 
T.GF4 CPA B54       IS THIS A COMMA?
      RSS           YES, CRN# 
      JMP ERRO6     NO, ERROR 
      JSB T.GCR     GET NEXT CHAR.
      JMP ERRO6     EOL, ERROR
      ISZ FCRN      INDICATE CRN REF. 
      JSB STBYT     GO PARSE CRN# 
      STB T.CRF     STORE CARTRIDGE #.
      CPA D10 
      JMP T.GFI,I 
* 
      CLA,INA,RSS   TOO MANY PARAMETERS.
ERRO4 LDA D4        NOT ENOUGH PARAMETERS.
ERRET STA T.ERN 
      JMP T.GFI,I   REPORT THE BAD NEWS.
ERRO6 LDA D6        ILLEGAL FORMAT. 
      JMP ERRET 
****************************ALTERED 800730**************************
ERRCK LDB CHCKR     CHECK FOR 1ST TIME THRU 
      SZB,RSS       
      JMP ERRO6     NO, SECOND TIME THEN TRUE ERROR 
      CLB           
      STB CHCKR     YES, SET FOR SECOND TIME THRU 
      LDA T.CNT     CHECK CHARACTER COUNT 
      SZA,RSS       ANY MORE INPUT? 
      JMP ERRO4     NO, NO T ENOUGH PARMS. *800731* 
      LDB SAVE      WAS A COMMA REACHED 
      CPB B54 
      JMP ERRC2     YES, THEN GO GET "ID" 
ERRC1 JSB T.GCR     NO,GO GET NEXT CHAR UNTIL COMMA 
      JMP ERRO4     EOL REACHED SO ERROR *800731* 
      CPA B54       IS IT A COMMA YET?
      JMP ERRC2     YES, SO GO GET "ID" 
      JMP ERRC1     NO, TRY AGAIN 
ERRC2 JSB T.GCR     GET THE NEXT CHAR FOR LNAME 
      JMP ERRO4     NO MORE? THEN ERROR *800731*
      JMP GOAGN     YES, GET "ID" 
******************************800730******************************* 
CHCKR NOP       
*************************800728*************************************
M5    DEC -5
M2    DEC -2         **800729** 
* 
********************************ADDED 791026************************
* 
* THIS ROUTINE WILL PACK TOGETHER THE CHARS. PASSED FOR SECURITY
* CODE OR CRN#. TO UTILIZE NAMR'S PARSING CAPABILITIES
* A DUMMY NAME WITH A : IS PATCHED ONTO THE FRONT 
* OF THE PACKED SECURITY CODE. IF THE FLAG, FCRN, IS 1 WHICH MEANS
* THAT THE NEXT STRING TO BE PARSED IS FOR A CRN# REF,
* A DUMMY NAME WITH 2 : IS PATCHED ONTO THE FRONT OF THE PACKED 
* WORDS.
* 
* UPON ENTRY A= CURRENT CHAR ALREADY CHECKED FOR EOL OR COMMA.
* 
* UPON EXIT, B= THE PARSED SECURITY CODE OR CRN# DEPENDING ON 
* FCRN. 
* A= CURRENT CHAR BE IT A EOL OR COMMA
* 
* 
STBYT NOP 
      CLB,INB       SET 1 INTO STSRC
      STB STSRC     THE CHAR POSITION IN STRING 
      LDB D4        RESTORE THE LENGTH WORD 
      STB STLEN 
      LDB FCRN      CHECK FOR SC OR CRN#
      SZB,RSS 
      JMP STBY1     THIS IS A SC
      LDB STBF1     SETUP FOR NAMR'S SOURCE BUFFER
      STB STBUF 
      LDB DEST2     THIS A CRN# 
      JMP STBY2     GO PACK 
STBY1 LDB STBFR     SETUP FOR NAMR'S SOURCE BUFFER
      STB STBUF 
      LDB DEST1 
STBY2 JSB .SBT
      ISZ STLEN 
      STB STSTO 
      JSB T.GCR     GET NEXT CHAR.
      JMP STBY9     GO PARSE
      CPA B54       IS THIS A COMMA?
      JMP STBY3     YES, GO PARSE 
      LDB STSTO 
      JMP STBY2     GO GET MORE 
STBY9 LDA D10       EOL SENSED
STBY3 STA STTEM     SAVE CURRENT CHAR 
      JSB NAMR
      DEF STBY4 
      DEF BYBUF     RESULTING BUFFER
      DEF STBUF,I   SOURCE BUFFER 
      DEF STLEN 
      DEF STSRC     CHAR POSITION  IN STRING
STBY4 LDB FCRN      SC OR CRN#
      SZB,RSS 
      JMP STBY5     GET SC IN B FOR RETURN
      LDB BYBU2,I   GET CRN# IN B FOR RETURN
      RSS 
STBY5 LDB BYBU1,I   SC IN B 
      LDA STTEM     RESTORE A WITH CURRENT CHAR 
      JMP STBYT,I 
* 
STSTO NOP 
STTEM NOP 
BYBUF BSS 10
BYBU1 DEF BYBUF+4   *SC IN NAMR'S BUFFER
BYBU2 DEF BYBUF+5   *CRN# IN NAMR'S BUFFER
STLEN OCT 4         THIS MUST START AT 4 FOR DUMMY FRONT END
STSRC NOP 
STBUF NOP 
FCRN  NOP 
* 
* THE FOLLOWING LABELS MUST STAY IN THIS ORDER
* 
STBFR DEF *+1 
      ASC 2,DUM:
DESBF BSS 10
STBF1 DEF *+1 
      ASC 2,DU::
DESBR BSS 10
DEST1 DBL DESBF 
DEST2 DBL DESBR 
************************791026************************************* 
D4    DEC 4 
D5    DEC 5 
D6    DEC 6 
M3    DEC -3
B37   OCT 37
N33   OCT -33 
ID    ASC 1,ID
M10K  DEC -10000
D80   DEC 80
      SKP 
* 
* 
*  CHARACTER PUSHING ROUTINES BY J.T.S. 
*  MODIFIED BY B.J.L. 
* 
* 
* 
*     SUBROUTINE TO DECODE NAME PRAMS 
*     CALLING SEQUENCE
*     JSB T.NAM 
*     DEF NAME
*     RETURN       A =11 IF ILLEGAL LENGTH OF FILE NAME 
*                    =10 IF EOL IS REACHED
*                    =A COMMA 
* 
* 
*     NAME, NAME+1, NAME+2 = FILE NAME
*     NAME+3 = SECURITY CODE
*     NAME+4 = LOGICAL UNIT 
* 
* 
      ENT T.NAM 
* 
* 
T.NAM NOP 
      LDB T.NAM,I   GET NAME BUFFER ADDR
      CLE,SSB,RSS   AND STRIP OFF INDIRECTS 
      JMP *+4 
      ELB,RBR 
      LDB B,I 
      JMP *-4 
      STB NAMA        AND SAVE IT IN NAME PTR 
      ISZ T.NAM     INC. FOR RETURN 
*********************ADDED 791024***********************************
      CLB           CLEAR CHAR. COUNT AND RESET THE STARTING
      STB LENTH     CHAR. POINTER FOR NAMR
      STB HERE      **800311**
      LDB .1
      STB ISTRC 
      LDB M3        SET UP WORD COUNTER 
      STB DUM3
      LDB DEST      SET UP SOURCE BUFFER
TOP   JSB .SBT      TO BE PARSED BY NAMR
      ISZ LENTH     INCREMENT CHAR. COUNT 
      STB STORE 
      JSB T.GCR     GET THE NEXT CHARACTER
      JMP MOST      EOL!! DONE
      CPA B72       IS THIS A ":" 
      JMP CHLN      YES, SEE IF TOO MANY CHARS. 
      CPA B54       IF COMMA, GO PARSE AND RETURN 
      JMP DONE      RETURN
TOP1  LDB STORE     GO GET MORE 
      JMP TOP 
*****************CHANGED 800311**************************** 
CHLN  LDB HERE       CHECK TO SEE IF FIRST TIME (SECURITY 
      SZB           CODE) THRU HERE.
      JMP TOP1      YES 
      ISZ HERE      INDICATE HERE ONCE
      LDB LENTH     CHECK FOR >6 CHARS. 
**************************800311*************************** 
      ADB M7
      SSB           IF >6 WILL BE POS. NO-NO!!
      JMP TOP1      CONTINUE SEARCH 
***************************CHANGED 800322*************************
CHLN1 LDA .11       INDICATE ILLEGAL FORMAT ERROR 
      JMP T.NAM,I   RETURN
MOST  LDB HERE       CHECK TO SEE IF LENGTH AS BEEN 
      SZB            TESTED 
      JMP MOST1     YES, GO ON
      LDB LENTH     NO, CHECK LENGTH
      ADB M7
      SSB,RSS       IF NEG. OK
      JMP CHLN1     ELSE ERROR
MOST1 LDA D10       INDICATE EOL REACHED. 
****************************800322********************************
DONE  STA T.NA1     SAVE THE CHAR 
* 
      JSB NAMR      PARSE THE NAME
      DEF REPT
      DEF BUFR      RESULTING BUFFER
      DEF NAMBF     SOURCE BUFFER 
      DEF LENTH     # OF CHARS TO BE PARSED 
      DEF ISTRC     CHAR. POSITION IN STRING
* 
* DUE TO THE REQUIREMENT OF NAMR'S RESULTING BUFFER BEING 
* OF SIZE OF 10 WORDS, THE NAME MUST BE MOVED TO THE OLD
* NAME BUFFER IN BASIC FOR CONVERSION EASE. 
* 
* 
REPT  LDA DUM1      GET ADDRESS TO RESULTING BUFFER 
      STA POINT 
REPT1 LDA POINT,I   PICK UP RESULTING BUFFER
      STA NAMA,I    MOVE TO NAME IN MAIN WITH 
      ISZ POINT     SECURITY CODE AND CRN#
      ISZ NAMA      BEHIND THE 3-WORD NAME
      ISZ DUM3      SINCE WORD 4 IS TYPE WORD ONLY
      JMP REPT1     MOVE IN 1ST 3 WORDS 
      ISZ POINT     INCREMENT TO SECURITY CODE
      LDA POINT,I 
      STA NAMA,I
      ISZ POINT     INCREMENT TO CRN# 
      ISZ NAMA
      LDA POINT,I 
      STA NAMA,I
      LDA T.NA1     RESTORE LAST CHAR.
      JMP T.NAM,I 
* 
T.NA1 NOP 
NAMA  BSS 1 
BUFR  BSS 10
DUM1  DEF BUFR
POINT NOP 
HERE  NOP 
ISTRC NOP 
LENTH NOP 
STORE NOP 
DUM3  NOP 
DEST  DBL NAMBF 
NAMBF BSS 14
.1    DEC 1 
D10   DEC 10
.11   DEC 11
*****************************791024*********************************
*     ADB D3        SET UP
*     STB SC            SECURITY CODE PTR 
*     INB           SET UP
*     STB LU            LOGICAL UNIT PTR
*     STA TEMP2     SAVE CURRENT CHAR 
*     CLA           GET A ZERO
*     STA SC,I        AND CLEAR SC AND LU 
*     STA LU,I
*     LDA B72       SET DELIMITER TO ":"
*     STA T.DLM 
*     LDA TEMP2     RECALL CURRENT CHAR 
*     JSB LNAME     GET NAME...A REG 0,IGNORE SPACES
*NAMA  DEF 0         BUFFER WHERE TO PUT NAME 
*     DEC -7        MAX LENGTH + 1
*     SPC 2 
*     AT THIS POINT WE HAVE MOVED THE NAME IN 
*     SPC 1 
*     JMP T.NAM,I 
*     JSB CHRCK     CHECK FOR END OF LINE 
*     JMP NRET      YES...TERMINATE ROUTINE 
*     JSB T.GTN     GET NUMBER
*     RSS           NOT NUMERIC 
*     JMP NMDCD     NUMERIC SAVE SC CODE
*     JSB CHRCK     CHECK FOR DELEM.
*     JMP T.NAM,I   END OF LINE 
*     JMP NMDCE     NO SECURITY CODE
*     ALF,ALF       SHIFT TO HIGH ORDER 
*     STA SC,I        SAVE TOP HALF SC,IURITY CODE
*     JSB T.GCR     GET NEXT CHAR 
*     LDA D10 
*     STA 1         SAVE CHAR 
*     JSB CHRCK     TERMINATOR
*     NOP           EOF...SET FOR SPACE 
*     LDA BLANK     GET A SPACE 
*     IOR SC,I        OR IN BOTTOM HALF OF SC,IURITY WORD 
*     STA SC,I        SAVE COMPLETE SECURITY CODE 
*     LDA 1         GET CHARACTER AGAIN 
*     JSB CHRCK     ARE WE DONE?
*     JMP NRET      YES...RETURN
*     JMP NMDCF     YES...GO PROCESS LU 
*     JSB T.GCR     GET ANOTHER CHARACTER 
*     LDA D10       EOF!
*     RSS           NO...CHECK NEXT CHAR...MUST BE A ":"
*NMDCD STB SC,I        SAVE NUMERIC SECUITY CODE
*NMDCE JSB CHRCK     CHECK FOR TERMINATOR 
*     JMP NRET      DONE
*     RSS           CONTINUE...GOT A :
*     JMP T.NAM,I   INVALID FILE NAME 
*     SPC 2 
*     WE NOW HAVE PROCESSED THE NAME AND SECURITY CODE
*     NOW WE ARE GOING TO PROCESS LU
*     SPC 1 
*NMDCF JSB T.GTN     GET NUMBER 
*     JMP T.NAM,I   NOT A NUMBER
*     STB LU,I        SAVE LU,I VALU,IE 
*NRET  ISZ T.NAM     NORMAL RETURN. 
*     JMP T.NAM,I 
* 
D3    DEC 3 
D43   DEC 43
B72   OCT 72
      SKP 
* 
* 
*     SUBROUTINE TO GET A FLOATING POINT NUMBER 
*     CONVERT IT, AND RETURN IT IN THE B REG
*     CALLING SEQUENCE
*     JSB T.GTN 
*     UNABLE TO CONVERT RETURN
*     CONVERTED RETURN
*     B REG=NUMBER, A REG = NEXT CHAR 
* 
* 
      ENT T.GTN 
* 
* 
T.GTN NOP 
      JSB T.GCR     GET NEXT CHAR 
      LDA D10 
      CPA D10       EOF?
      JMP T.GTN,I   YES, RETURN 
      CLB,CLE       CLEAR E AND B REG 
      STB TEMP1     CLEAR OUT SUM WORD
      STB TEMP2     CLEAR OUT DIGIT RECIEVED WORD 
      CPA D43       IS IT A "+" 
      CCE           SET E=READ ANOTHER CHAR 
      CPA D45       IS IT A "-" 
      CCB,CCE       SET B=-1, SET E=READ ANOTHER CHAR 
      STB SIGN      SAVE SIGN 
      SEZ,RSS       READ ANOTHER CHAR?
      JMP *+3       NO! 
GTNMA JSB T.GCR     YES 
      LDA D10       EOF!
      JSB DIGCK     GO SEE IF DIGIT IS NUMERIC
      JMP GTNMB     NOT NUMERIC...DONE CONVERSION 
      LDA TEMP1     GET PARTICAL SUM IN A REG 
      STB TEMP1     DIGCK RETURN NUMBER IN BOTH A AND B REG 
      MPY D10       MULTIPLY PARTICAL SUM BY 10 
      ADA TEMP1     AND IN NEXT DIGIT 
      STA TEMP1     SAVE NEW SUM
      ISZ TEMP2     SET FOR RECIEVED A DIGIT
      JMP GTNMA     GET NEXT DIGIT
      SPC 1 
GTNMB LDB TEMP2     DID WE GET ANY DIGITS?
      SZB,RSS 
      JMP T.GTN,I   NO
      LDB SIGN      GET SIGN
      CLE,ERB       IF NEGATIVE, SET E REG
      LDB TEMP1     GET BINARY VALUE
      SEZ           NEGATIVE VALUE? 
      CMB,INB       YES...NEGATE RESULT 
      ISZ T.GTN     GET DIGIT RETURN
      JMP T.GTN,I   RETURN
* 
SIGN  BSS 1 
D45   DEC 45
N72   OCT -72 
B     EQU 1 
      SKP 
* 
* 
*  SUBROUTINE TO CHECK IF A CHARACTER IS
*  A NUMERIC DIGIT. 
* 
*  CALLING SEQUENCE:
* 
*     LDA CHAR
*     JSB DIGCK 
*     NOT NUMERIC RETURN   A=CHAR 
*     NUMERIC RETURN       A=CHAR, B=DIGIT
* 
* 
DIGCK NOP 
      STA B 
      ADB N72 
      SSB,RSS 
      JMP DIGCK,I 
      ADB D10 
      SSB,RSS 
      ISZ DIGCK 
      JMP DIGCK,I 
* 
* 
      SPC 2 
* 
*     SUBROUTINE TO CHECK IF A CHARACTER IN THE A REG 
*     ISEITHER AN END OF LINE "D10" OR A : "B72"
*     CALLING SEQUENCE
*     JSB CHRCK 
*     END OF LINE RETURN
*     COLEN RETURN
*     NEITHER RETURN
*     A REG CONTAINS THE CHARACTER
*     B AND E REG NOT CHANGED 
* 
CHRCK NOP 
      CPA D10       IS IT END OF LINE?
      JMP CHRCK,I   YES...EOL RETURN
      CPA B54       IS IT A ","?
      JMP CHRCK,I   YES...TREAT AS A EOL
      ISZ CHRCK 
      CPA T.DLM     IS IT A ":" 
      JMP CHRCK,I   ":" RETURN
      ISZ CHRCK 
      JMP CHRCK,I   NO DELM RETURN
* 
T.DLM BSS 1 
B54   OCT 54
      SKP 
* 
*     ROUTINE TO MOVE NAME INTO NAME BUFFER 
*     CALLING SEQUENCE
*     JSB LNAME 
*     DEF BUFFER ADDRESS WHERE TO STORE NAME
*     DEC -MAX # OF CHARACTERS +1 
*     RETURN       ERROR
*     RETURN+1     A REG = DELIMITER CHAR 
* 
LNAME NOP 
      STA TEMP5     SAVE CURRENT CHAR 
***************************ADDED 800322**************************** 
      CLA 
      STA LENT1 
***************************800322********************************** 
      LDB LNAME,I   GET ADDRESS OF NAME BUFFER
      ISZ LNAME     GET TO NEXT PARM
      CLE,ELB       CONVERT TO BYTE ADDRESS 
      STB TEMP1     SAVE BYTE ADDRESS 
      CLE,ERB       GET BACK ACTUAL ADDRESS 
      LDA LNAME,I   GET MAX LENGTH +1 
      SLA 
      INA 
      ARS           GET MAX LENGTH IN WORDS 
      STA TEMP2     SAVE FOR DOWN COUNTER 
      LDA SPACE     STUFF BLANKS INTO THE 
LN1   STA 1,I       NAME BUFFER FOR THE 
      INB 
      ISZ TEMP2     MAXIMUM LENGTH. 
      JMP LN1 
      LDA LNAME,I 
      STA TEMP2 
      ISZ LNAME 
      LDA TEMP5     GET CURRENT CHAR
LMDCD ISZ LENT1     GET CHAR COUNT, 1ST CHAR *800322* 
      JSB CHRCK     CHECK FOR DELIMETER 
      NOP 
      JMP LNRE1     HIT ONE           *800322*
      LDB TEMP1     GT BYTE ADDRESS 
      JSB SBYTE     SAVE CHARACTER
      JSB T.GCR     GET NEXT CHARACTER
      LDA D10 
      CPA D10       EOF?
      JMP LNRET     YES, RETURN!
      ISZ TEMP1     GET NEXT CHAR ADDRESS 
      ISZ TEMP2     OUT OF ROOM?
      JMP LMDCD     NO..CONTINUE
      JMP LNAME,I   INVALID FILE NAME 
      SPC 2 
*********************************ADDED 800322************************** 
LNRE1 LDB LENT1     IF DELIM FOUND DECREMENT COUNTER
      ADB M1
      STB LENT1 
********************************800322********************************* 
LNRET ISZ LNAME 
      JMP LNAME,I 
* 
SPACE ASC 1,
LENT1 NOP           *800322*
* 
      SPC 3 
* 
*     SUBROUTINE TO STORE A BYTE
*     CALLING SEQUENCE
*     JSB SYBTE 
*     A REG CONTAINS BYTE 
*     B REG CONTAINS BYTE ADDRESS 
* 
SBYTE NOP 
      AND B377      MASK ALL BUT LOWER 8 BITS 
      STA TEMP7     SAVE IN TEMP LOCATION 
      CLE,ERB       CHANGE FROM BYTE TO WORD ADD
      LDA 1,I       GET WORD
      SEZ,RSS       RIGHT OR LEFT HALF
      ALF,ALF       LEFT
      AND HIMSK     MASK ALL BUT UPPER 8 BITS 
      IOR TEMP7     OR IN NEW BYTE
      SEZ,RSS       LEFT OR RIGHT 
      ALF,ALF       LEFT
      STA 1,I       STORE WORD BACK 
      ELB,CLE       GET BYTE ADDRESS AGAIN
      JMP SBYTE,I   RETURN
* 
B377  OCT 377 
HIMSK OCT 177400
      SPC 2 
TEMP1 BSS 1 
TEMP2 BSS 1 
TEMP5 BSS 1 
TEMP7 BSS 1 
* 
* 
*  SUBROUTINE TO GET CHARACTER FROM INPUT BUFFER
* 
*  CALLING SEQUENCE:
* 
*     T.CNT CONTAINS - (CHARACTER COUNT + 1)
*     T.ADR CONTAINS ADDRESS SHIFTED LEFT ONE BIT 
*     JSB T.GCR 
*     END OF LINE RETURN
*     NORMAL RETURN 
* 
      ENT T.GCR 
      ENT T.ADR 
      ENT T.CNT 
* 
T.GCR NOP 
      ISZ T.CNT     ANY CHARACTERS LEFT?
      RSS 
      JMP T.GCR,I   NO, END-OF-LINE EXIT. 
      LDB T.ADR     LOAD BUFFER ADDRESS.
      ISZ T.ADR     UPDATE FOR NEXT TIME. 
      CLE,ERB       SET CHARACTER FLAG. 
      LDA 1,I       LOAD CURRENT BUFFER WORD. 
      SEZ,RSS       FIRST CHARACTER?
      ALF,ALF       YES, POSITION IT. 
      AND B177      MASK EXTRANEOUS BITS. 
      SZA,RSS       END OF LINE?
      JMP T.GCR,I   YES IF ZERO.
      CPA BLANK     BLANK?
      JMP T.GCR+1   YES,FETCH NEXT CHARACTER. 
      ISZ T.GCR     UPDATE RETURN ADDRESS.
      JMP T.GCR,I   EXIT. 
* 
BLANK OCT 40
B177  OCT 177 
T.CNT BSS 1 
T.ADR BSS 1 
* 
      END 
                                                                                                                                                                                  