      CPA B12       'BINARY' ?
      JMP CKINF     YES 
      CPA B13       'ASCII' ? 
      RSS           YES 
      JMP GTNXE     NO
      LDB ARG2,I    GET EFMP CODE 
      CPB D7        INITIALIZE FUNC. ?
      JSB ER27      YES 
      JMP SRET1     NO
CKINF EQU * 
      LDB ARG2,I    GET EFMP CODE 
      CPB D7        INITIALIZE FUNC. ?
      JMP SRET1     YES 
      LDB SPKSR     GET PACK SEARCH SWITCH
      SZA           SEARCH FOR A SPECIFIC PACK ?
      JSB ER28      YES 
      JMP GTNXE     NO
CKEQN EQU * 
      LDA AFNAM     GET ADDR OF REQUESTED NAME
      LDB $BUFP     GET ADDR OF CURRENT ENTRY NAME
      JSB CMPAR     NAMES EQUAL ? 
      JMP EBIAS     NO
SRET1 EQU * 
      LDA SECCT     SECTOR OF ENTRY 
      LDB $BUFP     GET DIRECTORY ENTRY ADDR
      ISZ SRCDR     INCREMENT TO P+2
      JMP SRCDR,I   RETURN TO P+2 
EBIAS EQU * 
      LDB $BUFP     GET CURRENT ENTRY ADDR
      ADB MXWPE     ADD ENTRY SIZE
      STB $BUFP     STORE ADDR OF NEXT ENTRY
      JMP SRCNF     SEARCH NEXT ENTRY 
GETNS EQU * 
      ISZ SECCT     INCR SECTOR COUNT 
      ISZ SECIO      INCR SECTOR FOR I/O
      LDA SECIO 
      CPA SECTR     END OF TRACK ?
      RSS           YES 
      JMP SRCNS     NO
      ISZ TRKIO     INCR TO NEXT TRACK
      CLA 
      STA SECIO     STORE NEW I/O SECTOR
      JMP SRCNS     GET NEXT SECTOR 
ATRKI DEF TRKIO 
TRKIO BSS 1         I/O TRACK 
SECIO BSS 1         I/O SECTOR
SECCT BSS 1         SECTOR COUNT
SPKSR BSS 1         SEARCH MODE(0=GENERAL,1=SPECIFIC) 
AFNAM BSS 1         FILE NAME ADDRESS 
TYPDR BSS 1         DIRECTORY TYPE FLAG 
NOPAS BSS 1         COMPARE SWITCH
PAKSC BSS 1         PACK SUBCHANNEL 
$BUFP BSS 1         POINTER TO DIRECTORY ENTRY
ZMASK OCT 60        ASCII ZERO MASK 
      SKP 
* CKDSP - CHECK FOR SUFFICIENT DIRECTORY SPACE
* ENTER:
*         A = SIZE OF DIRECTORY ENTRY TO CREATE 
*         B = ADDR OF OPEN TABLE ENTRY OF FILE TO COPY
*             (ONLY IF CALLER IS 'COPY' FUNCTION) 
*         NXTFP = ADDR OF NEXT FILE POSITION
*         SECCT = SECTOR OF NEXT FILE POSITION
*         PNEAD = ADDR OF PACK NO. ENTRY
*         PAKSC = CURRENT SUBCHANNEL
*         NOSEC = NO. SECTORS REQUIRED
* EXIT: 
*         P+1 = NO SPACE
*               A = 0(NO FILE SPACE)
*                 = 1(NO DIRECTORY SPACE) 
*         P+2 = DIRECTORY SPACE AVAILABLE 
*               NEW EOD MARK INSERTED 
*               DIRECTORY UPDATED 
*               NEW ENTRY CREATED 
* 
CKDSP NOP 
      STA DESIZ     SAVE DIRECTORY ENTRY SIZE 
      STB DEADR     SAVE OPEN TABLE ADDR
      CPA D5        PN000 ? 
      JMP CKRSC     YES 
      LDA NXTFP     GET ADDR OF NEXT FILE POSITION
      ADA MD9       BACK UP TO NAME OF PREVIOUS FILE
      CLB 
      CPB A,I       EFMP'S OWN ENTRY ?
      JMP CKRSC     YES, NO NEED TO CHECK LSA 
      LDA NXTFP     GET ADDR OF NEXT FILE POSITION
      ADA MD4       BACK UP TO PREVIOUS FILE'S RECORD LENGTH
      LDB A,I       GET RECORD LENGTH 
      ADA MD1       BACK UP TO PREVIOUS FILES SIZE
      LDA A,I       GET NO. OF RECORDS
      JSB MPY 
      JSB DIV 
      DEF D128
      SZB 
      INA 
      STA SECFL     SAVE SECTORS USED 
      LDA NXTFP     GET ADDR OF NEXT FILE POSITION
      ADA MD6       BACK UP TO STARTING SECTOR
      LDB SECFL     GET SECTORS USED BY FILE
      ADB A,I       CALCULATE LAST SECTOR ALLOCATED 
      ADB MD1 
      LDA PNEAD     GET PACK NO. ENTRY ADDR 
      ADA D3        INCREMENT TO LAST SECTOR ALLOCATED
      CPB A,I       ARE LAST SECTOR ALLOCATED EQUAL ? 
      JMP CKRSC     YES 
      STB A,I       NO, UPDATE PACK NO. ENTRY 
      CLA,INA 
      CPA SECCT     IS EFMP'S OWN DIRECTORY ENTRY IN CORE ? 
      JMP SUPS1     YES 
      LDA TRKIO     GET TRACK OF CURRENT ENTRY
      STA STRKI     SAVE TRACK OF CURRENT ENTRY 
      LDA SECIO     GET SECTOR OF CURRENT ENTRY 
      STA SSECI     SAVE SECTOR OF CURRENT ENTRY
      JSB UPSC1     UPDATE SECTOR 1 
      LDA STRKI     GET TRACK OF CURRENT ENTRY
      STA TRKIO     RESTORE THE TRACK 
      LDA SSECI     GET SECTOR OF CURRENT ENTRY 
      STA SECIO     RESTORE THE SECTOR
      CLA           READ SWITCH 
      LDB PAKSC     GET SUBCHANNEL
      JSB PRWIO     RESTORE THE CURRENT ENTRY 
      JMP ESPC      GO CHECK FOR SPACE
SUPS1 EQU * 
      LDA AESPC     RETURN ADDR 
      STA UPSC1     STORE RETURN ADDR 
      JMP UPLSA     GO UPDATE LSA 
ESPC  EQU * 
      LDA PNEAD     GET ADDR OF PACK NO. ENTRY
      ADA D3        INCREMENT TO LSA FIELD
      LDB A,I       GET LSA 
      CMB,INB 
      ADA MD2       BACK UP TO FILE LENGTH FIELD
      ADB A,I       CALCULATE SECOTRS UNUSED
      STB SECFL     SAVE SECTORS REMAINING
      LDA NOSEC     GET NO. OF SECTORS REQUESTED
      CMA,INA 
      ADA SECFL     CALCULATE SECTORS LEFT
      SSA,RSS       ENOUGH SPACE ?
      JMP CKRSC     YES 
      CLA           NO SPACE
      JMP CKDSP,I   RETURN, P+1 
CKRSC EQU * 
      LDA NXTFP     GET NEXT FILE POSITION ADDR 
      ADA DESIZ     ADD SIZE OF NEXT ENTRY
      CMA,INA       TWO'S COMPLEMENT
      ADA END$B     CALCULATE SPACE AVAILABLE IN SECTOR 
      INA 
      SSA,RSS       SPACE AVAILABLE IN SECTOR ? 
      JMP BLDEN     YES 
      LDA PNEAD     GET PACK NO ENTRY ADDR
      ADA D2        INCREMENT TO DIRECTORY SIZE 
      LDB A,I       GET DIRECTORY SIZE
      CMB,INB       TWO'S COMPLEMENT
      ADB SECCT     CALCULATE SECTORS LEFT IN DIRECTORY 
      SZB           PHYSICAL EOD ?
      JMP CGEOD     NO
      CLA,INA       NO DIRECTORY SPACE
      JMP CKDSP,I   NO, RETURN P+1
BLDEN EQU * 
      JSB PKDIR     CREATE DIRECTORY ENTRY
      LDA DESIZ 
      ADA NXTFP 
      ADA MD1 
      CPA END$B     SPACE IN SECTOR FOR EOD MARK ?
      RSS           NO
      JMP W$BUF     YES 
      LDA SECCT 
      INA 
      CPA SECTR     PHYSICAL EOD ?
      JMP W$BUF     YES 
      CLB 
      STB ATBUF,I   STORE EOD MARKER
      ISZ SECIO     WRITE EOD MARK ON NEXT SECTOR 
      LDA A$BUF 
      STA A$BSV     SAVE ADDR OF $BUF 
      LDB ATBUF 
      STB A$BUF     USE TEMPORARY BUFFER
      LDB PAKSC     SUB CHANNEL FOR I/O 
      CLA,INA       WRITE FLAG FOR I/O
      JSB PRWIO     WRITE NEW EOD MARKER
      LDA SECIO     RESTORE SECTOR NUMBER 
      ADA MD1 
      STA SECIO 
      LDA A$BSV     RESTORE ADDR OF $BUF
      STA A$BUF 
      JMP W$BUF     WRITE BACK NEW DIRECTORY ENTRY
CGEOD EQU * 
      LDA DESIZ 
      ADA NXTFP 
      ADA MD1 
      CPA END$B     ROOM IN SECTOR FOR EOS MARK ? 
      RSS           NO
      JMP EOSFL     YES 
      ISZ SECIO     INCR TO NEXT DIRECTORY SECTOR 
      LDA A$BUF     ADDR OF NEXT ENTRY
      STA NXTBF     STORE ADDR OF NEXT ENTRY
      JMP BLDEN     GO BUILD NEW DIRECTORY ENTRY
EOSFL EQU * 
      LDB MD1       END-OF-SECTOR INDICATOR 
      STB NXTFP,I   STORE INDICATOR 
      LDA A$BUF     GET CURRENT BUFFER ADDR 
      STA A$BSV     SAVE ADDR 
      LDB ATBUF     GET ADDR OF BUFFER FOR NEW ENTRY
      STB A$BUF     STORE NEW WRITE ADDR
      STB NXTFP     STORE ADDR FOR 'PKDIR'
      JSB PKDIR     CREATE DIRECTORY ENTRY
      ISZ SECIO     INCR SECTOR 
      LDB SECIO 
      CPB SECTR     END-OF-TRACK ?
      RSS           YES 
      JMP WTBUF     NO
      CLB           SECTOR 0
      STB SECIO     STORE NEW SECTOR
      ISZ TRKIO     INCR TRACK
WTBUF EQU * 
      LDB PAKSC     GET CURRENT SUBCHANNEL
      CLA,INA       WRITE INDICATOR 
      JSB PRWIO     WRITE NEW DIRECTORY SECTOR
      LDB A$BSV     GET OLD BUFFER ADDR 
      STB A$BUF     RESTORE ADDR
      CLB 
      CPB SECIO     NEW ENTRY WRITTEN ON NEW TRACK
      RSS           YES 
      JMP DESEC     NO
      LDB SECTR     RESTORE TO PREVIOUS SECTOR
      ADB MD1 
      STB SECIO 
      LDB TRKIO     RESTORE TO PREVIOUS TRACK 
      ADB MD1 
      STB TRKIO 
      JMP W$BUF     WRITE $BUF
DESEC EQU * 
      LDB SECIO     RESTORE TO PREVIOUS SECTOR
      ADB MD1 
      STB SECIO 
W$BUF EQU * 
      LDA D5
      CPA DESIZ     PN000 ? 
      JMP W$BF1     YES 
      CLA,INA 
      CPA SECCT     1ST EFMP DIREC. SECT. IN $BUF ? 
      RSS           YES 
      JMP W$BF1     NO
      LDA PNEAD     GET NEW LSA OF PACK NO. 
      ADA D3
      LDB A,I 
      LDA A$BUF     UPDATE EFMP DIREC. ENTRY WITH 
      ADA D8             NEW LSA
      STB A,I 
W$BF1 EQU * 
      LDB PAKSC     GET CURRENT SUBCHANNEL
      CLA,INA       WRITE INDICATOR 
      JSB PRWIO     WRITE $BUF
      LDA D5
      CPA DESIZ     PN000 ? 
      JMP RETP2     YES 
      CLA,INA 
      CPA SECCT     1ST EFMP DIREC. SECT. IN $BUF ? 
      RSS           YES 
      JSB UPSC1     UPDATE LSA OF PACK NO.
RETP2 EQU * 
      ISZ CKDSP     P+2 
      JMP CKDSP,I   RETURN
UPSC1 NOP 
      LDA PNEAD,I   GET T/S OF DIRECTORY START
      JSB PRETS     PREPARE T/S FOR I/O 
      LDB PAKSC     GET SUBCHANNEL
      CLA           READ INDICATOR
      JSB PRWIO     READ 1ST SECTOR OF DIRECTORY
UPLSA EQU * 
      LDB PNEAD     GET ADDR OF PACK NO. ENTRY
      ADB D3        INCREMENT TO LAST SECTOR ALLOCATED FIELD
      LDA B,I       GET LAST SECTOR ALLOCATED 
      LDB A$BUF     GET ADDR OF EFMP'S DIRECTORY ENTRY
      ADB D8        INCREMENT TO LAST SECTOR ALLOCATED FIELD
      STA B,I       STORE NEW LAST SECTOR ALLOCATED 
      LDB PAKSC     GET SUBCHANNEL
      CLA,INA       WRITE INDICATOR 
      JSB PRWIO     WRITE $BUF
      JMP UPSC1,I 
NXTBF DEF 0         ADDRESS OF NEXT ENTRY 
NOSEC BSS 1         FILE LENGTH IN SECTORS/END
SECFL BSS 1         SECTORS FOR THE FILE
STRKI BSS 1         SAVE FOR TRACK NUMBER 
SSECI BSS 1         SAVE FOR SECTOR NUMBER
AESPC DEF ESPC
DESIZ BSS 1         DIRECTORY ENTRY SIZE
DEADR BSS 1         OPEN TABLE ENTRY ADDR 
ATBUF DEF TBUFF     ADDR OF TEMP BUFFER 
A$BSV BSS 1         SAVE FOR A$BUF
APN00 DEF PN        ADDR OF 'PN000' 
PN    ASC 1,PN      PN000 
      ASC 1,00
      OCT 030212
TBUFF BSS 10
      SKP 
* PKDIR - PACK DIRECTORY ENTRY
* ENTER:
*         DESIZ = SIZE OF DIRECTORY ENTRY 
*         NXTFP = ADDR OF ENTRY TO CREATE 
*         NOSEC = SIZE OF FILE IN SECTORS 
*         PNEAD = ADDR OF PACK NO. ENTRY
*         DEADR = ADDR OF ENTRY TO COPY('COPY FUNCTION ONLY') 
* EXIT: 
*         P+1 
*              DIRECTORY ENTRY CREATED
* 
PKDIR NOP 
      LDB DESIZ     GET DIRECTORY ENTRY SIZE
      CPB D5        PN000 ? 
      RSS           YES 
      JMP CEFMP     NO
      LDB NXTFP     GET NEW DIRECTORY ENTRY ADDR
      LDA PN        STORE NAME 'PN000' AND ENTRY TYPE 
      STA B,I 
      INB 
      LDA PN+1
      STA B,I 
      INB 
      LDA PN+2
      STA B,I 
      INB 
      LDA SYNTS     GET STARTING T/S
      STA B,I       STORE STARTING T/S
      INB 
      LDA NOSEC     GET FILE LENGTH 
      STA B,I       STORE FILE LENGTH 
      INB 
      LDA DESIZ 
      ADA NXTFP 
      ADA MD1 
      CPA END$B     IS SECTOR FULL ?
      JMP PKDIR,I   YES 
      CLA           GET EOD INDICATOR 
      STA B,I       STORE EOD INDICATOR 
      JMP PKDIR,I   RETURN P+1
CEFMP EQU * 
      LDB ARG2,I    GET EFMP FUNCTION NUMBER
      CPB D12       COPY ?
      JMP CCOPY     YES 
      LDA MD2       NO. WORDS TO MOVE 
      STA MOVCT     STORE NO. 
      LDA ARG3      ADDR. OF FILE NAME
      LDB NXTFP     GET DESTINATION ADDR
      JSB MOVE      MOVE 1ST 4 CHARS. 
      STA TMPTR     STORE NAME ADDR 
      LDA TMPTR,I   GET 3RD WORD OF NAME
      AND H8BT      SAVE ONLY 5TH CHAR
      STA B,I       STORE CHAR. 
      INB 
      LDA PNEAD     GET PACK NO. ENTRY ADDR 
      ADA D3        INCREMENT TO LSA FIELD
      LDA A,I       GET LAST SECTOR ALLOCATED 
      INA           CALCULATE STARTING RELATIVE SECTOR OF FILE
      STA B,I 
      INB 
      LDA ARG5,I    FILE LENGTH 
      STA B,I 
      INB 
      LDA ARG6,I    RECORD LENGTH 
      STA B,I 
      INB 
      LDA ARG7,I    SECURITY CODE 
      STA B,I 
      INB 
      LDA ARG7
      INA 
      LDA A,I 
      STA B,I       USER STATUS 
      INB 
      CLA 
      STA B,I       HIGHEST RECORD ACCESSED 
      INB 
      STA B,I       END-OF-DIRECTORY INDICATOR
STLSA EQU * 
      LDA PNEAD     GET PACK NO. ENTRY ADDR 
      ADA D3        INCREMENT TO LSA FIELD
      LDB NOSEC     GET NO. OF SECTORS FOR THIS FILE
      ADB A,I       CALCULATE NEW LSA 
      STB A,I       STORE NEW LSA 
      JMP PKDIR,I 
CCOPY EQU * 
      LDA MD8       NO. OF WORDS TO MOVE
      STA MOVCT     STORE MOVE COUNT
      LDA DEADR     GET DIRECTORY ENTRY ADDR
      LDB NXTFP     GET NEXT FILE POS. ADDR 
      JSB MOVE      MOVE ENTRY
      LDB NXTFP     GET NEXT FILE POS. ADDR 
      ADB D3        INCREMENT TO STARTING SECTOR FIELD
      LDA PNEAD     GET ADDR OF PACK NO. ENTRY
      ADA D3        INCREMENT TO LSA FIELD
      LDA A,I       GET LSA 
      INA           CALCULATE STARTING RELATIVE SECTOR
      STA B,I       STORE STARTING SECTOR 
      ADB D5        INCREMENT TO HRA
      LDA DEADR     GET OPEN TABLE ENTRY ADDR 
      ADA D15       INCREMENT TO HRA FIELD
      LDA A,I       GET HRA 
      STA B,I       STORE HRA IN DIRECTORY ENTRY
      INB 
      CLA 
      STA B,I       SET EOD INDICATOR 
      JMP STLSA 
TMPTR BSS 1 
      SKP 
* CKOPN - CHECK OPEN TABLE
* ENTER:
*         B = ADDR. OF FILE NAME
* EXIT: 
*         P+1 = FILE NAME NOT FOUND 
*               A = (-) IF END OF TABLE 
*               B = POINTER TO BEGINNING OF NEXT FILE NAME. 
*         P+2 = FILE NAME FOUND 
*               B = POINTER TO BEGINNING OF FILE NAME 
* 
CKOPN NOP           CHECK OPEN TABLE
      STB AFNAM     SAVE ADDR. OF FILE NAME 
      LDB OPNT1     START OF OPEN TABLE FILE ENTRIES
CKNOE EQU *         CHECK NEXT OPEN ENTRY 
      STB OPNTP     O.T. POINTER
      LDA B 
      CMA 
      ADA NXOTL     NEXT O.T. LOCATION
      SSA           ANY MORE FILES OPEN?
      JMP CKOPN,I   NO, RETURN
      LDA AFNAM     ADDR. OF FILE NAME
      JSB CMPAR     COMPARE FILE NAMES
      JMP NOCPR     NAMES NOT EQUAL 
      ISZ CKOPN     P+2 
      LDB OPNTP     RESTORE CURRENT POINTER 
      JMP CKOPN,I   RETURN
NOCPR EQU *         NAMES DID NOT COMPARE 
      LDB OPNTP     POINTER TO LAST ENTRY 
      ADB WPOTE BIAS TO NEXT ENTRY IN O.T.
      JMP CKNOE     CHECK NEXT OPEN ENTRY 
OPNTP OCT 0         OPEN TABLE POINTER
      SKP 
      SKP 
* CKCLM - CHECK CORE LIMITS 
* ENTER:
*         A = STARTING ADDRESS OF CORE TO BE CHECKED. 
*         B = LENGTH (IN WORDS) OF BUFFER TO BE CHECKED.
* EXIT: 
*         B = SAME AS ENTRY 
*         P+1 = INVALID BUFFER AREA.
*         P+2 = VALID BUFFER AREA.
*               A = STARTING ADDR. OF CORE TO BE CHECKED
*                   OR EFFECTIVE ADDR. IF ORIGINAL WAS INDIRECT.
* 
CKCLM NOP           CHECK CORE LIMITS 
EFFA1 EQU * 
      SZA,RSS       ERROR IF 0 OR 1 
      JMP CKCLM,I   0, SO ERROR 
      CPA D1
      JMP CKCLM,I   1, SO ERROR 
      RAL,CLE,SLA,ERA 
      RSS 
      JMP EFFAD     VALID, EFFECTIVE ADDR.
      LDA A,I       GET NEXT ADDR. IN INDIRECT CHAIN
      JMP EFFA1      AND PROCESS IT.
EFFAD EQU * 
      STA CORAD     SAVE CORE ADDR. 
      CMA 
      ADA UMFWA     USER MEMORY FWA 
      SSA,RSS       .GE. 1ST USER WORD? 
      JMP CKCLM,I   NO, RETURN
      LDA CORAD 
      ADA B         CALCULATE FINAL ADDR. 
      CMA,INA 
      ADA UMLWA     USER MEM. LAST WORD ADDR. 
      SSA           TOO BIG?
      JMP CKCLM,I   YES 
      LDA VALSU     VALID SETUP FLAG
      SZA,RSS       VALID SETUP?
      JMP CKLMR     NO, CHECK-LIMIT RETURN
      LDA CORAD     STARTING ADDR. OF BUFFER
      CMA,INA 
      ADA OPNTE     END OF OPEN TABLE BUFFER
      SSA           START .GT. END OF OPEN TABLE? 
      JMP CKLMR     YES, CHECK-LIMIT RETURN 
      LDA CORAD     STARTING ADDR. OF BUFFER
      ADA B         NO OF WDS. IN BUFFER
      CMA,INA 
      ADA OPNTB     START OF OPEN TABLE 
      SSA           END .LE. START OF OPEN TABLE? 
      JMP CKCLM,I   NO, ERROR 
CKLMR EQU *         CHECK-LIMIT RETURN
      LDA CORAD 
      ISZ CKCLM     VALID BUFFER AREA 
      JMP CKCLM,I   RETURN
CORAD OCT 0 
      SKP 
* CMPAR - COMPARE FILE NAMES
* ENTER:
*         A = ADDRESS OF FILE NAME REQUESTED. 
*         B = ADDRESS OF FILE NAME TO BE COMPARED.
* EXIT: 
*         P+1 = NAMES DO NOT COMPARE
*         P+2 = NAMES COMPARE 
* 
CMPAR NOP           COMPARE FILE NAMES
      STA AFLNM     ADDR. OF FILE NAME
      LDA MD5       NUMBER OF CHARS TO COMPARE(-) 
      STA CPRNC     STORE COUNT 
      CLE           RESET 1ST/2ND FLAG
COM2C EQU * 
      LDA B,I       PICK UP 2 CHAR. IN WORD REQ.
      SEZ,RSS       LEFT CHAR?
      ALF,ALF       YES, SHIFT INTO POSITION
      AND L8BT      STRIP LOW 8 BITS
      STA COM1C     SAVE TO COMPARE 1 CHAR. 
      LDA AFLNM,I   PICK UP 2 CHAR. IN WORD TO COMP.
      SEZ,RSS       LEFT CHAR?
      ALF,ALF       YES, SHIFT INTO POSITION
      AND L8BT      STRIP LOW 8 BITS
      CPA COM1C     ARE 2 CHAR'S. EQUAL 
      RSS           EQUAL SO FAR
      JMP CMPAR,I   RETURN NAMES DO NOT COMPARE 
      ISZ CPRNC     FINISHED? 
      JMP *+3       NO
      ISZ CMPAR     P+2 
      JMP CMPAR,I   RETURN
      SEZ,CME,RSS   CHECK 2ND CHAR.?
      JMP COM2C     YES 
      ISZ AFLNM     BUMP POINTER TO REQUESTED NAME
      INB           BUMP POINTER TO NAME TO BE COMP.
      JMP COM2C-1 
AFLNM OCT 0         ADDR. OF FILE NAME
COM1C OCT 0         TEMP. FOR COMPARE 1 CHAR. 
CPRNC OCT -5        (-) NO. OF CHARS TO COMPARE 
      SKP 
* ASDEC - ASCII TO DECIMAL CONVERSION 
* ENTER:
*         A = ASCII CHAR TO BE CONVERTED IN LO 8 BITS:
* EXITS:
*         P+1 = NO. NOT BETWEEN 0 AND 9 INCLUSIVE 
*         P+2 = VALID NUMBER
*               A = CONVERTED NUMBER
* 
ASDEC NOP           ASCII TO DEC. CONVERSION
      AND L8BT      SAVE ONLY RIGHT CHAR. 
      ADA MB60      BIAS TO NO. 0 
      SSA           IS NO. .GE. TO ZERO?
      JMP ASDEC,I   NO, ERROR 
      ADA MD10      BIAS FOR NO. 9
      SSA,RSS       LESS THAN 10? 
      JMP ASDEC,I   NO, ERROR 
      ADA D10       RESTORE NO. 
      ISZ ASDEC     P+2 
      JMP ASDEC,I   RETURN
      SKP 
* T.STS - CONVERT TRACK/SECTOR TO SECTORS 
* ENTER:
*         A = T/S TO BE CONVERTED 
* EXIT: 
*         A = TOTAL SECTORS 
*         B IS SAVED
* 
T.STS NOP           T/S TO SECTORS
      STA T.STM     SAVE T/S TO BE CONVERTED
      STB T.STM+1   SAVE B FOR EXIT 
      AND L8BT      STRIP SECT. NO. 
      STA T.STM+2   SAVE SECTOR NO. 
      LDA T.STM     T/S 
      ALF,ALF       PUT TK. NO. IN LO 8 BITS
      AND L8BT      STRIP TK. NO. 
      LDB SECTR 
      JSB MPY       CALC. TOTAL SECTORS/TRACK 
      SZB           OVERFLOW? 
      JSB ER23      YES, INVALID ARGUEMENT
      ADA T.STM+2   ADD REMAINING SECTORS 
      LDB T.STM+1   RESTORE B 
      JMP T.STS,I   RETURN
T.STM OCT 0,0,0     TEMP. STORAGE 
      SPC 1 
* STT.S - SECTORS TO TRACK/SECTOR 
                                                                                                                                                                                                                                                    