ASMB,R,L,C        RTMGC 
*     NAME:   RTMGC GENERATOR SUBROUTINES 
*     SOURCE: 91740-18058 
*     RELOC:  91740-16058 
*     PGMR:   MIKE SCHOENDORF 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  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-M SYSTEM GENERATOR-LOADER
      NAM RTMGC,8 91740-16058 REV 1926 790426 
* 
* 
A     EQU 0 
***************** - HIGH CORE - ******************
*                                                *
*                    - IDENTS -                  *
*                                                *
**************************************************
*                 - FIXUP TABLES -               *
*                    ----------                  *
*                                                *
*                                                *
*                     -------                    *
*                     - LST -                    *
**************************************************
*                                                *
*                                                *
*           PROGRAM LOADING CONTROL              *
*                                                *
*                                                *
**************************************************
*                                                *
* 
*               I/O TABLE GENERATION             *
* 
*                                                *
**************************************************
*                                                *
*                                                *
*                  PARAMETER INPUT               *
*                                                *
*                                                *
**************************************************
* 
* 
* 
      SKP 
* 
* 
*  LST FORMAT 
* 
*  WORD 1: LST1 - NAME 1,2
*  WORD 2: LST2 - NAME 3,4
*  WORD 3: LST3 - NAME 5, ORDINAL 
*  WORD 4: LST4 - IDENT ADDRESS 
*  WORD 5: LST5 - BP LINK ADDRESS 
* 
* 
* 
*  ENTERNS AND EXTERNS
* 
* 
* 
* 
      EXT ADDRS,ABRT1,ATBUF,BPLOC,CLBPL,CONSO,CRTIN 
      EXT EKHOS,ER#OR,IDCB1,INACT,KONSO 
      EXT LDSEG,LENGT,LNKDR,LST,.MEM2 
      EXT .MEM3,MLOCC,OPT.3 
      EXT PRCMD,PRINT,RDFL1,SEGFL 
      EXT TBUF#,TYPRO,?XFER 
* 
      ENT PNAMA,PNZQZ,PRAMS 
* 
      ENT A$CIA,AINT#,ALBUF,BIDNT,BPFIX 
      ENT CM#LG,CU#AL,CURAT 
      ENT DO#ON,ELIB,GBUF,GENRT,GE#AL,GE#NA 
      ENT GE#OC,GI#IT,GNFLG,GNSG1,GNSG2,GREAD 
      ENT GTIME,IDNOS,IDS,IDSAD,IN#RR,INTER 
      ENT IP1,IP2,IP3 
      ENT KEYCN,LSTSV,LWACG,LWAMG,LWGBP,LWSA1 
      ENT MATA,MAXPT,MPFT,MRMP
      ENT MSIZE,NMAX,OC#NO
      ENT PARNO,PCOM,PGLIB,PLIB,PP#EL,PRIN1,PRIN2,PROCT 
      ENT RANAD,REL06 
      ENT RELOC,SAVE1,SAVE2,SG1AD 
      ENT SP#CE,SSGAP,START,STRAD 
      ENT STRPN,SYSAD,SYSTM,TB#HN,TCNT,WDCNT
* 
LOCC  EQU MLOCC 
TBUF  EQU TBUF# 
* 
* 
* 
*    .MEM. TABLE DEFINITIONS
* 
*       .MEM1 = FWABP 
*       .MEM2 = LWABP 
*       .MEM3 = FWAM
*       .MEM4 = LWAM
*       .MEM5 = FWAC
*       .MEM6 = LWAC
* 
* 
* 
*  ERROR CODES
* 
*  AD: INVALID ENTRY POINT
*  CH: INVALID CHANNEL NUMBER 
*  DR: INVALID DRIVER NAME
*  DU: DUPLICATE PROGRAM NAME 
*  EQ: INVALID EQT. NO. IN INT. RECORD
*  IN: PARAMETER INTERVAL EXECUTION ERROR 
*  LU: INVALID DEVICE REFERENCE NUMBER
*  ON: INVALID ON PARAMETER 
*  NA: PARAMETER NAME ERROR 
*  PA: PARAMETER ERROR
*  PD: PARTITION ALREADY DEFINED
*  PR: PARAMETER PRIORITY ERROR 
*  PS: NOT ENOUGH MEMORY LEFT FOR PARTITION 
*  PT: PARTITION DEFINITION ERROR 
*  SO: SYSTEM OVERFLOW
*  TB: SYMBOL TABLE/ID SEGMENT OVERFLOW 
* 
* 
      SUP 
      SKP 
* 
*  THE SPACE SUBROUTINE IS USED TO SPACE UP THE TELEPRINTER.
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB SPACE
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
SPACE NOP 
      CLA 
      STA FTIME     CLEAR FIRST TIME THRU FLAG
      LDB ZBUFF     OUTPUT BLANK LINE 
      CLA,INA 
      JSB PRIN1 
      JMP SPACE,I   RETURN
* 
SP#CE EQU SPACE 
* 
ZBUFF DEF *+1 
      ASC 1,* 
* 
FTIME NOP           FIRST TIME THRU FLAG
GTIME EQU FTIME 
* 
* 
* 
A$CIA NOP           ADDRESS OF $CIC ROUTINE 
AINT  NOP           ADDRESS OF INTERRUPT TABLE
ELIB  NOP           ADDRESS AT END OF LIBRARY 
GENRT NOP           INITIATOR FLAG
GNFLG NOP           CONTINUATOR FLAG
GNSG1 NOP           WHERE RETURN FLAG 
GNSG2 NOP           WHERE RETURN FLAG 
IDNOS NOP           ACTUAL IDS FILLED 
IDS   NOP           # OF ID SEGMENTS LEFT 
IDSAD NOP           SEGMENT ADDRESS 
KEYCN NOP           ADDRESS OF KEYWORD TABLE
LWACG NOP           LAST WORD OF AVAILABLE COMMON 
LWGBP NOP           LAST WORD BP FOR JSB $CIC,I 
LWSA1 NOP           LAST WORD SAM 
MATA  NOP           ADDRESS OF $MATA
MAXPT NOP           MAXIMUM NUMBER OF PARTITIONS
MPFT  NOP           ADDRESS OF $MPFT
MRMP  NOP           ADDRESS OF $MRMP
MSIZE NOP           MEMORY SIZE 
NMAX  NOP           - MAXIMUM NUMBER OF PARTITIONS
PCOM  NOP           PRIV. DRIVERS ACCESS COMMON 
PGLIB NOP           PAGE # AT END OF RES. LIB.
PLIB  NOP           ADD. JUST PAST END OF LIB.
PPREL NOP           REL ADDRESS 
SAVE1 NOP           ENPNT RETURN ADDRESS
SAVE2 NOP           ADDRESS OF LST4 FOR $SSGA 
SG1AD NOP           SEGMENT 1 ADDRESS 
SSGAP NOP           FWAM(START OF MEM RES PROG AREA)
START NOP           START-UP PROGRAM USED 
STRAD NOP           $STRT START ADDRESS 
STRPN BSS 3         START-UP PROGRAM NAME 
SYSAD NOP           ID SEGMENT ADDRESS
SYSTM NOP           SYSTEM TYPE 
TBCHN NOP           TIME BASE GENERATOR CHANNEL 
* 
AINT# EQU AINT
PP#EL EQU PPREL 
TB#HN EQU TBCHN 
      SKP 
* 
ALBUF DEF LBUF
LBUF  BSS 64
GBUF  EQU LBUF
* 
WDCNT NOP           TEMPORARY WORD COUNTER
* 
* 
      HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** 
*  THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE
*  CHANNEL NO., TBG CHANNEL NO., AND LAST 
*  WORD OF AVAILABLE MEMORY.
* 
*  CALLING SEQUENCE:
*    A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. 
*        THE SIGN OF A DETERMINES THE CONVERSION FROM 
*        ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). 
*    B = IGNORED
*    JSB DOCON
* 
*  RETURN:
*    (N+1): CONTENTS OF A AND B ARE DESTROYED.  AN INVALID
*           CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR 
*           THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS.
*           THE MESSAGE IS TO BE REPEATED ON RETURN.
*    (N+2): A = CONVERTED RESULT
* 
DOCON NOP 
      JSB GETOC     GET OCTAL/DECIMAL, RETURN OCTAL 
      JMP *+4       INVALID DIGIT 
      JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA ZERO      CHAR = ZERO? (END OF BUFFER)
      JMP *+3       YES - CONTINUE
      JSB INERR     INVALID DIGIT ENTRY 
      JMP DOCON,I   RETURN
      ISZ DOCON     INCR RETURN ADDRESS 
      LDA OCTNO     GET CONVERTED NUMBER
      JMP DOCON,I   RETURN
* 
DO#ON EQU DOCON 
* 
ZERO  DEC 0 
* 
OCTNO NOP 
* 
OC#NO EQU OCTNO 
      SKP 
* 
*  SUBROUTINE TO RELOCATE ALL MODULES (SYSTEM AND USER PROGRAMS). 
* 
*  CALLING SEQUENCE:
* 
*    A = MESSAGE LENGTH 
*    B = MESSAGE ADDRESS
*    JSB RELOC
* 
*  RETURN:
*    (N+1): CONTENTS OF A AND B ARE DESTROYED. LOADER 
*           WAS NOT ABLE TO RELOCATE MODULE (ERROR EXIT). 
*    (N+2): CONTENTS OF A AND B DESTROYED. LOADER RELOCATION
*           WORKED. 
* 
* 
RELOC NOP 
      JSB PRIN1     PRINT MESSAGE 
      LDA P2
      STA ?XFER     NON-ZERO TO LOAD MODULES
      STA GNSG1 
      JSB CLBPL     CLEAR BASE PAGE LINKS 
      STA GNSG2 
      STA PNZQZ     CLEAR NAME FLAG 
      STA LOCC      CLEAR LOCC IN LOADER
      STA BPLOC     SAME FOR BPLOC
      STA OPT.3,I   CLEAR FIXUP TABLE LENGTH
      LDA LST,I     SAVE LST LENGTH 
      STA LSTCT 
      LDA LSTSV     RESTORE SYMBOL TABLE COUNT
      STA LST       IN THE LOADER 
      LDA RELOC,I   GET MODULE TYPE 
      STA TYPRO     SAVE FOR LOADER SUB CONTROL 
      SZA,RSS 
      STA ?XFER 
      ISZ RELOC     SET RETURN ADDRESS
      JSB PRCMD     GO RELOCATE MODULES 
      JMP REL05     ERROR EXIT
      LDA .MEM2     SAVE LWABP
      STA BPFIX 
      LDB LNKDR     GET LINK DIRECTION FLAG 
      CPB P1        USER LINKS ?
      JMP REL02     YES 
      LDA LOCC      UPDATE FWAM 
      SZA,RSS 
      LDA .MEM3 
      STA .MEM3 
      LDA BPLOC     UPDATE FWABP
      SZA 
      STA .MEM2     SYSTEM LINKS, UPDATE LWABP
      LDA LST 
      STA LSTSV     SAVE FOR RELOCATION ERROR 
REL03 ISZ RELOC 
REL05 CLA 
      STA SEGFL     LAST SEGMENT FLAG 
      LDA B6
      LDB TYPRO 
      CPB B1
      RSS 
      ADA B3
      JMP LDSEG 
REL06 JMP RELOC,I 
* 
REL02 LDA LSTCT     RESTORE LST LENGTH
      STA LST,I 
      JMP REL03 
* 
BPFIX NOP           LWABP TEMP STORE
LSTCT NOP           LST LENGTH
LSTSV NOP 
* 
B1    OCT 1 
B3    OCT 3 
B6    OCT 6 
P1    DEC 1 
P2    DEC 2 
      SKP 
*  SUBROUTINE TO OUTPUT MESSAGE 
* 
PRIN2 NOP 
      JSB PRINT     GO OUTPUT MESSAGE 
      LDA LENGT 
      LDB ADDRS 
      JSB EKHOS     GO ECHO IF NEEDED 
      JMP PRIN2,I 
* 
*  SUBROUTINE TO OUTPUT MESSAGE ONLY IF ECHO, INTERACTIVE 
*  INPUT, OR SESSION CONSOLE NEEDED OR USED.
* 
PRIN1 NOP 
      STA LENGT     MESSAGE LENGTH
      LDA CONSO     OUTPUT TO SESSION CONSOLE?
      SZA 
      JMP PRINA     YES 
      LDA INACT     INTERACTIVE INPUT?
      SZA 
      JMP PRINA     YES 
      LDA READX     OUTPUT TO SESSION CONSOLE?
      SZA,RSS 
      JMP PRINB     NO, JUST ECHO IF NEEDED 
PRINA LDA LENGT 
      JSB PRINT     GO OUUTPUT MESSAGE
      LDB ADDRS 
PRINB LDA LENGT 
      JSB EKHOS     GO ECHO IF NEEDED 
      JMP PRIN1,I 
* 
*  THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID 
*  RESPONSES DURING THE INITIALIZATION SECTION. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB INERR
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
INERR NOP 
      LDA PA        SET INVALID DEVICE ERROR CODE 
      CLB           NO FMP ERROR
      JSB ER#OR     PRINT ERROR MESSAGE 
      JMP INERR,I   RETURN
* 
PA    ASC 1,PA      PARAMETER ERROR 
* 
IN#RR EQU INERR 
      SKP 
      HED READ INPUT FILES
* 
* 
*  SUBROUTINE TO READ INPUT FILES 
* 
*  CALLING SEQUENCE 
* 
*    A = MESSAGE LENGTH 
*    B = MESSAGE ADDRESS
*    JSB READ 
* 
*  RETURN:
*    A = DATA LENGTH
*    B = DESTROYED
* 
* 
* 
READ  NOP 
      JSB PRIN1     PRINT MESSAGE 
READ2 LDB ALBUF     DATA INPUT ADDRESS
      LDA CONSO     GET INPUT FROM SESSION CONSOLE? 
      SZA 
      JMP READ1     YES 
      LDA READX     INTERACTIVE INPUT?
      SZA 
      JMP READ1     NO, GET INPUT FROM SYSTEM CONSOLE 
      LDA DCB1      DCB BUFFER ADDRESS
      JSB RDFL1     READ FROM INPUT FILE
      CPA N1        END OF FILE?
      JMP READA     YES, GET NEXT INPUT FROM CONSOLE
READ3 STA PARNO     SAVE DATA LENGTH
      INA           PUT ZERO AT END OF
      CLE,ERA       DATA BUFFER 
      ADA ALBUF 
      CLB 
      STB A,I 
      JSB GINIT     INITIALIZE INPUT
      LDA ALBUF,I   CHECK IF FIRST CHARACTER
      CPA EX        EXIT? 
      JMP ABRT1     YES 
      ALF,ALF       IS AN ASTERISK
      AND B177
      CPA B52 
      JMP READ2     YES, READ NEXT RECORD 
      LDB ALBUF     DATA ADDRESS
      LDA PARNO     DATA BUFFER 
      JSB EKHOS     CHECK IF ECHO NEEDED
      LDA PARNO     RETURN WITH DATA LENGTH IN A REG. 
      JMP READ,I
* 
READ1 CLA,INA 
      LDB PRPTA 
      JSB PRIN2 
      LDA P72 
      LDB ALBUF 
      JSB CRTIN 
      JMP READ3 
* 
READA CLA,INA 
      STA CONSO 
      STA KONSO 
      JMP READ1 
* 
DCB1  DEF IDCB1 
* 
PARNO NOP           PARAMETER RECORD LENGTH 
READX NOP           INTERACTIVE INPUT 0=YES, 1=NO 
* 
B52   OCT 52
B177  OCT 177 
N1    DEC -1
P72   DEC 72
* 
EX    ASC 1,EX
* 
GREAD EQU READ
* 
PRPTA DEF *+1 
      ASC 1,- 
      HED RTMGN  I/O TABLE GENERATION SUBROUTINES 
* 
*  THE FOLLOWING SUBROUTINE SUPPLIES THE CHARACTERS FOR 
*  GETNA AND GETOC. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB GETAL
* 
*  RETURN:
*    A = CURRENT CHARACTER
*    B = DESTROYED
* 
GETAL NOP 
      LDA CMFLG     CMFLG = COMMA-IN FLAG 
      SZA,RSS       SKIP IF NO COMMA IN 
      JMP BLRET     RETURN BLANK
      LDB BUFUL     GET U/L FLAG
IGNOR LDA CURAL,I   GET CHAR FROM LBUF
      SZB           SKIP IF LOWER CHAR
      ALF,ALF       ROTATE TO LOWER 
      AND B377      ISOLATE LOWER CHAR
      CPA ZERO      END OF BUFFER?
      JMP GETAL,I   YES - RETURN WITH ZERO
      CMB,SZB       RESET U/L, SKIP IF UPPER CHAR 
      ISZ CURAL     INCR LBUF ADDRESS 
      CPA BLANK     CHAR = BLANK? 
      JMP IGNOR     IGNORE BLANKS 
      STB BUFUL     SAVE U/L FLAG 
      CPA B54       CHAR = COMMA? 
      ISZ CMFLG     RESET FLAG TO SHOW COMMA IN 
      JMP GETAL,I   RETURN WITH NON-BLANK CHAR
BLRET LDA BLANK     REPLACE WITH BLANK CHAR 
      JMP GETAL,I   RETURN WITH BLANK 
* 
BLANK OCT 40
B54   OCT 54
B377  OCT 377 
BUFUL NOP           BUFFER U/L FLAG 
CMFLG NOP           COMMA-IN FLAG 
CURAL NOP 
* 
CM#LG EQU CMFLG 
CU#AL EQU CURAL 
GE#AL EQU GETAL 
      SKP 
* 
*  THE FOLLOWING SUBROUTINE MOVES THE CHARACTERS FROM LBUF
*  TO TBUF. 
* 
*  CALLING SEQUENCE:
*     A = MAX. NO. OF CHARACTERS TO BE MOVED. THE SIGN OF A 
*        DESIGNATES THE POSITION OF THE FIRST CHARACTER.
*        IF THE SIGN OF A IS POSITIVE, THE FIRST CHAR. IS TO
*        BE MOVED TO THE LOW CHAR IN TBUF. IF A IS NEGATIVE, THE
*        FIRST CHARACTER IS TO BE MOVED TO THE UPPER CHAR IN TBUF.
*    B = IGNORED
*    JSB GETNA
* 
*  RETURN:
*    A = FIRST CHARACTER (IF ONLY 1 CHARACTER) OR FIRST 2 CHARS 
*        MOVED. 
*    B = DESTROYED
* 
GETNA NOP 
      CCE,SSA,RSS   SET E = 1 (EVEN) POSITION 
      CMA,CLE,INA   SET E = 0 (ODD) POSITION - COMP 
      STA MAXC      MAXC = MAXIMUM NO. OF CHARACTERS
      LDA ATBUF     ATBUF = ADDR OF TBUF
      STA CURAT     SET CURRENT TBUF ADDRESS
      CLB 
      STB TBUF      CLEAR WORD 1 OF TBUF
      CCA 
      STA CMFLG     SET COMMA-IN FLAG 
      SEZ,RSS       SKIP - ODD POSITION 
      JMP OCHAR     BEGIN WITH ODD CHARACTER
NEXTC JSB GETAL     GET CHAR FROM LBUF
      CPA ZERO      END OF BUFFER?
      LDA BLANK     YES - REPLACE CHAR WITH BLANK 
      ALF,ALF       ROTATE TO UPPER A 
      STA CURAT,I   SET CHARACTER IN TBUF 
      ISZ MAXC      CHECK FOR ALL CHARS IN
      JMP OCHAR     GET ODD CHAR FROM LBUF
      LDA TBUF      GET FIRST 2 TRANSFERRED CHARS 
      JMP GETNA,I   YES - RETURN
OCHAR JSB GETAL     GET CHAR FROM LBUF
      CPA ZERO      END OF BUFFER?
      LDA BLANK     REPLACE ZERO CHAR WITH BLANK
      IOR CURAT,I   ADD TO UPPER CHAR IN TBUF 
      STA CURAT,I   SET CHARS IN TBUF 
      ISZ CURAT     INCR TBUF ADDRESS 
      ISZ MAXC      CHECK FOR ALL CHARS IN
      JMP NEXTC     NO - TRY NEXT UPPER CHAR
      LDA TBUF      GET FIRST 2 TRANSFERRED CHARS 
      JMP GETNA,I   RETURN
* 
GE#NA EQU GETNA 
* 
CURAT NOP           CURRENT TBUF ADDRESS
MAXC  NOP           MAX CHARACTER COUNT 
      SKP 
PNAMA DEF PNZQZ 
PNZQZ NOP 
      REP 5 
      NOP 
PRAMS DEC 3 
      DEC 9999
      REP 6 
      NOP 
      SKP 
      SKP 
* 
*  THE GETOC SUBROUTINE CONVERTS THE NEXT CHARACTERS IN LBUF FROM 
*  ASCII (DECIMAL OR OCTAL) TO THEIR BINARY VALUE.
* 
*  CALLING SEQUENCE:
*    A = MAX. NO. OF CHARS IN CONVERSION REQUEST.  IF A IS
*        POSITIVE, THE REQUEST IS FOR OCTAL; IF A IS NEGATIVE,
*        THE REQUEST IS FOR DECIMAL.
*    B = IGNORED
*    JSB GETOC
* 
*  RETURN:
*    (N+1): INVALID DIGIT OR OVERFLOW IN CONVERSION 
*    (N+2): A = CONVERTED NO. 
*           B = DESTROYED 
* 
GETOC NOP 
      LDB N8        GET OCTAL RANGE 
      SSA           SKIP IF OCTAL REQUEST 
      LDB N10       GET DECIMAL RANGE 
      STB DRANG     SET DIGIT RANGE 
      SSA,RSS       SKIP IF DECIMAL REQUEST 
      CMA,INA       SET REQUEST COUNT TO NEGATIVE 
      STA MAXC      SET MAX NO. OF DIGITS 
      CCA 
      STA DIFLG     SET DATA-IN FLAG = NO DATA IN 
      STA CMFLG     SET COMMA-IN FLAG 
      CLA 
      STA OCTNO     OCTNO = OCTAL NUMBER
GETNX JSB GETAL     GET CHAR FROM LBUF
      CPA ZERO      CHAR = ZERO? (END OF BUFFER)
      JMP ENDOC     YES - RETURN
      CPA BLANK     CHAR = BLANK? (COMMA IN)
      JMP ENDOC     YES - RETURN
      ADA M60       SUBTRACT 60B FROM CHAR
      STA TCHAR     SAVE CHAR 
      SSA           SKIP IF VALID LOWER LIMIT 
      JMP DGERR     INVALID DIGIT 
      ADA DRANG     ADD DIGIT RANGE 
      CLE,SSA,RSS   CLEAR E - SKIP IF VALID DIGIT 
      JMP DGERR     INVALID DIGIT 
      ISZ DIFLG     INCR DATA-IN FLAG, SKIP 
      NOP 
      LDA OCTNO     GET PREVIOUS OCTAL NO.
      ADA A         SET A = OCTNO X 2 
      ADA A         SET A = OCTNO X 4 
      LDB DRANG     GET DIGIT RANGE 
      CPB N10       RANGE = DECIMAL?
      ADA OCTNO     SET A = OCTNO X 5 
      ADA A         SET A = OCTNO X 10/8
      ADA TCHAR     SET A = NEW OCTAL NO. 
      STA OCTNO     SAVE NEW OCTAL NO.
      SEZ           TEST FOR OVERFLOW 
      JMP DGERR     INVALID NO. 
      ISZ MAXC      SKIP IF ALL DIGITS PROCESSED
      JMP GETNX     GET NEXT DECIMAL DIGIT
      ISZ GETOC     INCR RETURN ADDRESS 
      LDA OCTNO     GET OCTAL EQUIVALENT
DGERR JMP GETOC,I   RETURN
ENDOC ISZ DIFLG     SKIP - NO DATA IN 
      JMP *-4       DATA IN - NORMAL RETURN 
      JMP GETOC,I   RETURN - ERROR
* 
GE#OC EQU GETOC 
* 
DIFLG NOP           DATA IN FLAG = -1/0 = NOT IN/IN 
DRANG NOP           DIGIT RANGE 
TCHAR NOP           TEMPORARY CHARACTER SAVE AREA 
* 
M60   OCT -60 
N8    DEC -8
N10   DEC -10 
PROCT NOP           NO. OF INTERRUPT ENTRIES
* 
LWAMG NOP 
BIDNT NOP           ADDRESS OF FIRST IDENT
IP1   NOP 
IP2   NOP 
IP3   NOP 
* 
* 
*                                   INITIALIZE CHAR TRANSFER
* 
*  THE GINIT SUBROUTINE SETS THE CURRENT ADDRESS AND UPPER/LOWER
*  FLAG FOR SCANNING LBUF.
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB GINIT
* 
*  RETURN : CONTENTS OF A AND B ARE DESTROYED 
* 
GINIT NOP 
      LDA ALBUF     ALBUF = ADDR OF LBUF
      STA CURAL     SET CURRENT LBUF ADDRESS
      CCB 
      STB BUFUL     BUFUL = BUFFER U/L FLAG 
      JMP GINIT,I   RETURN
* 
GI#IT EQU GINIT 
* 
      SKP 
* 
RANAD NOP           POWER RANGE ADDRESS 
TCNT  NOP           CURRENT TBUF COUNT
* 
* 
*  SUBRROUTINE TO DETERMINE IF INPUT DEVICE IS INTERACTIVE
* 
* 
INTER NOP 
      CLA 
      STA READX     SET FOR INTERACTIVE INPUT 
      LDA FTIME     FIRST TIME FLAG 
      SZA 
      JMP INT1      NOT FIRST TIME
      CLA,INA       FIRST TIME, SET FLAG
      STA FTIME 
      JMP INTER,I 
INT1  LDA INACT     INPUT INTERACTIVE?
      CPA P1
      JMP INTER,I   YES, RETURN 
      ISZ READX 
      JMP INTER,I 
* 
      SKP 
      END 
                                                                                                                                                                                                                  