Convert BINCOM.MAC to DOS format file.
authorRichard Cornwell <rcornwell@github.com>
Thu, 19 Apr 2018 21:47:02 +0000 (17:47 -0400)
committerRichard Cornwell <rcornwell@github.com>
Thu, 19 Apr 2018 21:47:02 +0000 (17:47 -0400)
src/bincom.mac

index 3395b06..f7af610 100644 (file)
-TITLE  BINCOM   V.003
-       XALL
-       LIST
-
-JOBVER=137
-LOC    JOBVER
-3
-RELOC
-
-CTL==0
-IN1==1
-IN2==2
-
-ACDEV=1
-ACFILE=2
-ACEXT=3
-ACDEL=4
-ACPNTR=5
-C=7    ;CHARACTER FOR PROCESSING
-PP=17  ;PUSH DOWN POINTER
-LPDL=20
-
-COMP:  CLOSE   CTL,
-       RELEAS  CTL,
-       RELEAS  IN1,
-       RELEAS  IN2,
-COMPGO:        RESET
-       SETZM   PPSET           ;THIS IS THE ZERO WHICH WILL
-                               ;BE "BLT"ED TO CLEAR STORAGE
-       MOVE    [XWD PPSET,PPSET+1]     ;ZERO STORAGE AREA
-       BLT     ENDP-1
-       MOVE    PP,[IOWD LPDL,PPSET+1]  ;SET UP PUSH DOWN LIST
-       MOVSI   (SIXBIT /REL/)
-       MOVEM   INDIR1+1
-       MOVEM   INDIR2+1
-       MOVSI   (SIXBIT /TTY/)
-       MOVEM   OUTDEV
-       SETZM   AZD
-       PUSHJ   PP,INITTY
-       PUSHJ   PP,CRFL
-       MOVEI   10,"*"          ;TELL USER WE ARE READY FOR COMMAND
-       IDPB    10,CTOBUF+1
-       OUTPUT  CTL,            ;OUT GOES THE "*"
-       INPUT   CTL,            ;HERE COMES THE COMMAND STRING
-       PUSHJ   PP,NAME1        ;ANALYIZE OUTPUT DEVICE AND NAME
-       CAIE    C,137
-       JRST    INDEV+1
-       JUMPE   ACDEV,INDEV
-       MOVE    13,AZDEV        ;GET ASCII NAME OF OUTPUT DEVICE
-       MOVEM   13,AZD          ;SAVE IT SO IT WON'T BE
-       MOVE    13,AZDEV+1      ;DESTROYED BY INPUT NAMES
-       MOVEM   13,AZD+1
-       MOVEM   ACDEV,OUTDEV
-       MOVEM   ACFILE,OUTDIR   ;PUT SIXBIT FILE NAME IN
-       MOVEM   ACEXT,OUTDIR+1  ;AND EXTENSION
-INDEV: PUSHJ   PP,NAME1        ;GET INPUT FROM COMMAND
-       JUMPN   ACDEV,.+4
-       HRLI    ACDEV,(SIXBIT/DSK/)
-       MOVE    13,[ASCIZ/DSK/]
-       MOVEM   13,AZDEV
-       MOVEM   ACDEV,INDEV1
-       MOVEM   ACDEV,INDEV2
-       MOVEM   ACFILE,INDIR1
-       SKIPE   ACEXT
-       MOVEM   ACEXT,INDIR1+1
-       INIT    IN1,14
-INDEV1:        SIXBIT  /DSK/
-       XWD     INBUF1
-       JRST    ERRI
-       INBUF   IN1,2           ;DO LOOKUP ON FIRST FILE NAME
-       LOOKUP  IN1,INDIR1
-       JRST    ERRIA           ;ERROR RETURN
-       PUSHJ   PP,NAME1
-       SKIPN   ACDEV
-       MOVE    ACDEV,INDEV1
-       MOVEM   ACDEV,INDEV2
-       MOVEM   ACFILE,INDIR2
-       SKIPE   ACEXT
-       MOVEM   ACEXT,INDIR2+1
-       INIT    IN2,14
-INDEV2:        SIXBIT  /DSK/
-       XWD     INBUF2
-       JRST    ERRI
-       INBUF   IN2,2           ;LOOKUP ON SECOND FILE NAME
-       LOOKUP  IN2,INDIR2
-       JRST    ERRIA
-       MOVE    13,INDEV1       ;GET INPUT DEV
-       CAME    13,INDEV2       ;SAME FOR BOTH?
-       JRST    .+6
-       CALLI   13,4
-       AND     13,[200000000000]
-       HLRZ    13,13
-       CAIE    13,200000
-       JRST    ERRS
-       INIT    CTL,0
-OUTDEV:        0
-       XWD     CTOBUF,0
-       JRST    ERRA
-       MOVE    13,OUTDEV
-       CALLI   13,4
-       TLNN    13,1
-       JRST    ERRO
-       ENTER   OUTDIR
-       JRST    ERRO
-       OUTPUT  CTL,
-       MOVEI   16,0
-MAIN:  PUSHJ   PP,GCHAR1       ;GET NEXT CHARACTER
-       JRST    MAIN1           ;ERROR FINISH
-       PUSHJ   PP,GCHAR2       ;GET SECOND FILE.
-       JRST    MAIN2
-       CAME    1,2             ;CHECK IF SAME.
-       PUSHJ   PP,DIFF
-       AOJA    16,MAIN         ;COUNT RECORDS.
-
-; PRINT OUT DIFFERENCE REPORT.
-DIFF:  AOS     0,ERRCNT        ;CHARACTERS DIFFER, INCREASE COUNT
-       HRLZ    11,16           ;PRINT OUT LOCATION.
-       PUSHJ   PP,OCTOUT
-       MOVE    11,1            ;PRINT FIRST ONE
-       PUSHJ   PP,SPTOCT
-       MOVE    11,2            ;PRINT SECOND ONE
-       PUSHJ   PP,SPTOCT
-       MOVE    11,1            ;PRINT OUT DIFFERENCE
-       XOR     11,2
-       PUSHJ   PP,SPTOCT
-       JRST    CRFL
-
-; HANDLE END OF FILES.
-MAIN1: PUSHJ   PP,GCHAR2       ;END OF FILE 1.
-       JRST    MAIN3
-       SETZM   1               ;COMPARE TO ZERO
-       CAME    1,2
-       PUSHJ   PP,DIFF
-       AOJA    16,MAIN1
-
-MAIN2: SETZM   2               ;END OF FILE 2.
-       CAME    1,2             ;COMPARE TO ZERO
-       PUSHJ   PP,DIFF
-       PUSHJ   PP,GCHAR1
-       JRST    MAIN3
-       AOJA    16,MAIN2
-MAIN3: SKIPE   0,ERRCNT
-       JRST    COMP
-       MOVEI   11,[ASCIZ /NO ERRORS ENCOUNTERED/]
-       JRST    ERROUT
-
-\fCRFL: MOVEI   10,15           ;OUTPUT A CARRIAGE RETURN-LINE FEED
-       PUSHJ   PP,TYO
-       MOVEI   10,12
-
-TYO:   SOSG    CTOBUF+2        ;DECREMENT BUFFER COUNT
-       OUTPUT  CTL,            ;BUFFER WAS EMPTY
-DEP:   IDPB    10,CTOBUF+1     ;DEPOSIT CHAR
-       CAIN    10,12           ;CHECK IF LINE FEED.
-       OUTPUT  CTL,
-       POPJ    PP,
-
-OCTOUT:        MOVEI   12,6            ;NUMBER OF CHARACTERS TO CONVERT
-       MOVEI   10,0            ;RESULTS
-       LSHC    10,3            ;DOUBLE SHIFT LEFT, 11.
-       ADDI    10,"0"
-       PUSHJ   PP,TYO
-       SOJG    12,.-4          ; UNTIL COUNT REACHED.
-       POPJ    PP,
-
-SPCOUT:        MOVEI   10," "          ;TYPE OUT A SPACE
-       JRST    TYO
-
-TABOUT:        MOVEI   10,11           ;TYPE OUT A TAB
-       JRST    TYO
-
-SPTOCT:        PUSHJ   PP,TABOUT       ;PRINT OUT NUMBER IN SPLIT OCTAL
-       PUSHJ   PP,OCTOUT
-       PUSHJ   PP,SPCOUT
-       JRST    OCTOUT
-
-\f;ROUTINES FOR OUTPUTING ERROR MESSAGES
-ERRO:  SKIPA   11,[[ASCIZ /?OUTPUT INITIALIZATION ERROR/]]
-ERRS:  MOVEI   11,[ASCIZ /?FILE BEING COMPARED ON SAME INPUT DEVICE/]
-ERROUT:        PUSHJ   17,TYPMSG
-       JRST    CARR
-
-TYPMSG:        PUSHJ   PP,INITTY       ;INITIALIZE TTY
-       PUSHJ   PP,CRFL         ;OUTPUT A CARRIAGE RETURN
-       TLOA    11,(POINT 7,,)  ;THIS IS POINTER FOR ERROR MESSAGE
-TYPMS1:        PUSHJ   PP,TYO          ;OUTPUT CHAR.
-       ILDB    10,11           ;LOAD A CHAR. FROM ERROR MESSAGE
-       JUMPN   10,TYPMS1       ;ALL ERROR MESSAGES END WITH A ZERO
-       POPJ    PP,             ;THROUGH WITH ERROR MESSAGE
-
-CARR:  PUSHJ   PP,CRFL         ;COMMON EXIT FOR ERROR MESSAGES
-       PUSHJ   PP,CRFL
-       JRST    COMP
-
-;INITIALIZE TTY FOR ERROR MESSAGES
-INITTY:        CLOSE   CTL
-       RELEAS  CTL
-       INIT    CTL,1
-       SIXBIT  /TTY/
-       XWD     CTOBUF,CTIBUF
-       HALT
-       INBUF   CTL,1
-       OUTBUF  CTL,1
-       OUTPUT  CTL,
-       POPJ    PP,
-
-\f;ROUTINE TO GET NEXT CHARACTER
-GCHAR1:        SOSG    0,INBUF1+2
-       JRST    GCH1FL          ;FILL BUFFER IF EMPTY
-       SKIPN   0,INBUF1+2
-       JRST    .-2             ; TRY AGAIN
-       ILDB    1,INBUF1+1
-       JRST    GCH1OK
-GCH1FL:        INPUT   IN1,            ;INPUT FOR FILE 1
-       STATO   IN1,762000      ;ERRORS OR END OF FILE?
-       JRST    GCHAR1+2                ;NO
-       STATO   IN1,742000      ;YES, EOF?
-       POPJ    PP,     
-       MOVEI   11,[ASCIZ /?FILE 1 READ ERROR/]
-       JRST    ERROUT
-GCH1OK:        AOS     0,(PP)
-       POPJ    PP,
-
-GCHAR2:        SOSG    0,INBUF2+2
-       JRST    GCH2FL          ;FILL BUFFER IF EMPTY
-       SKIPN   0,INBUF2+2
-       JRST    .-2             ; TRY AGAIN
-       ILDB    2,INBUF2+1
-       JRST    GCH2OK
-GCH2FL:        INPUT   IN2,
-       STATO   IN2,762000
-       JRST    GCHAR2+2
-       STATO   IN2,742000
-       POPJ    PP,
-       MOVEI   11,[ASCIZ /?FILE 2 READ ERROR/]
-       JRST    ERROUT
-GCH2OK:        AOS     0,(PP)
-       POPJ    PP,
-
-\f;THE CODE ON THIS PAGE IS FOR HANDLING INPUT ERRORS 
-;THERE ARE TWU TYPES OF ERRORS--EITHER THE FILE IS NOT FOUND
-;OR THE DEVICE IS NOT AVAILABLE--THE FORMAT FOR THESE MESSAGES
-;IS THE SAEM FORMAT USED FOR THE "TECO" MESSAGES.
-
-ERRA:  MOVE    13,AZD
-       MOVEM   13,AZDEV
-       MOVE    13,AZD+1
-       MOVEM   13,AZDEV+1
-       JRST    ERRI
-
-ERRIA: MOVEI   11,[ASCIZ /?INPUT ERROR.../]
-       PUSHJ   PP,TYPMSG       ;TYPE FIRST PART OF MESSAGE
-       MOVEI   11,AZFIL        ;ADR. OF ASCII FILE NAME
-       PUSHJ   PP,TYPMS1-1     ;TYPE FILE NAME
-       SKIPN   0,AZEXT         ;IS THERE AN EXTENSION
-       JRST    NOEXT           ;NO EXTENSION
-       MOVEI   10,"."          ;FOR EXTENSION
-       XCT     DEP             ;THIS PUTS IT IN
-       MOVEI   11,AZEXT        ;GET ADR OF ASCII EXTENSION
-       PUSHJ   PP,TYPMS1-1
-NOEXT: MOVEI   11,[ASCIZ / FILE NOT FOUND/]    ;FINISH MESSAGE
-       PUSHJ   PP,TYPMS1-1
-       JRST    CARR            ;THIS WILL OUTPUT TWO C.R. AND EXIT
-
-ERRI:  MOVEI   11,[ASCIZ /?DEVICE /]
-       PUSHJ   PP,TYPMSG       ;TYPE BEGINNING OF MESSAGE
-       MOVEI   11,AZDEV        ;ADR OF DEVICE NAME
-       PUSHJ   PP,TYPMS1-1     ;OUTPUT DEVICE NAME
-       MOVEI   11,[ASCII / NOT AVAILABLE/]
-       PUSHJ   PP,TYPMS1-1     ;TYPE REST OF MESSAGE
-       JRST    CARR            ;INSERT CARRIAGE RETURNS AND EXIT
-
-\fNAME1:        SETZB   ACDEV,AZDEV     ;ZERO THE REGISTERS WHICH WILL RETURN THE NAMES
-       SETZB   ACDEL,AZFIL
-       SETZM   AZTEM
-       SETZB   ACFILE,AZEXT
-       SETZB   ACEXT,AZTEM+1
-
-NAME3: MOVE    16,[POINT 7,AZTEM]      ;THIS IS A POINTER FOR DEPOSITING THE
-                               ;ASCII CHARACTERS IN CASE AN INPUT
-                               ;ERROR IS DECTECTED--FOR THEN WE WILL
-                               ;HAVE TO PRINT THESE NAMES OUT
-       MOVSI   ACPNTR,(POINT 6,0)      ;SET POINTER
-       SETZ    13,
-       MOVEI   0,0             ;THE SIXBIT NAME WILL BE STORED IN THE AC0
-
-GETIOC:        PUSHJ   PP,TTYIN        ;GET INPUT CHARACTER
-       CAIN    C,":"           ;HAVE WE BEEN GETTING A DEVICE NAME
-       JRST    DEVICE          ;YES
-       CAIN    C,"."           ;OR A FILE NAME
-       JRST    NAME            ;YES
-       CAIN    C,","           ;THIS IS ANOTHER WAY TO GET A FILE NAME
-       JRST    TERM
-       CAIE    C,137           ;ONE KIND OF SEPERATOR
-       CAIG    C,15            ;THIS ALSO MEANS WE HAVE FINISHED A TERM
-       JRST    TERM            ;TERM HAAS BEEN READ
-       SUBI    C,40            ;CONVERT TO 6-BIT
-       TLNE    ACPNTR,770000   ;HAVE WE STORED SIX BYTES?
-       IDPB    C,ACPNTR        ;NO, STORE  IT
-       ADDI    C,40            ;CONVERT BACK TO ASCII FOR ERROR MESSAGES.
-       IDPB    C,16            ;STORE IN AC13
-       JRST    GETIOC          ;GET ANOTHER CHAR.
-
-\fDEVICE:       MOVE    13,AZTEM
-       MOVEM   13,AZDEV        ;STORE ASCII DEVICE NAME
-       MOVE    13,AZTEM+1
-       MOVEM   13,AZDEV+1
-       MOVE    ACDEV,0
-       JRST    .+6
-NAME:  MOVE    ACFILE,0        ;FILE NAME
-       MOVE    13,AZTEM
-       MOVEM   13,AZFIL        ;STORE ASCII NAME
-       MOVE    13,AZTEM+1
-       MOVEM   13,AZFIL+1
-       SETZM   AZTEM
-       SETZM   AZTEM+1
-       MOVE    ACDEL,C         ;SET DELIMITER
-       JRST    NAME3           ;GET NEXT SYMBOL
-
-TERM:  CAIN    ACDEL,0         ;IF NO PREVIOUS DELIMITOR, OR
-       JRST    .+3
-       CAIE    ACDEL,":"       ;IF PREVIOUS DELIMITER
-       JRST    TERM1
-       MOVE    13,AZTEM
-       MOVEM   13,AZFIL
-       MOVE    13,AZTEM+1
-       MOVEM   13,AZFIL+1
-       SETZM   AZTEM
-       SETZM   AZTEM+1
-       MOVE    ACFILE,0        ;SET FILE
-TERM1: CAIE    ACDEL,"."       ;IF PERIOD,
-       POPJ    PP,
-       MOVE    13,AZTEM
-       MOVEM   13,AZEXT        ;STORE ASCII EXTENSION
-       HLLZ    ACEXT,0         ;SET EXTENSION
-       POPJ    PP,             ;EXIT
-
-TTYIN: ILDB    C,CTIBUF+1      ;GET CHARACTER
-       CAIE    C,40            ;SKIP BLANKS
-       CAIN    C,11            ;AND TABS
-       JRST    TTYIN
-       POPJ    PP,             ;NO, EXIT
-\f
-PPSET: BLOCK   20
-INDIR1:        BLOCK   4
-INDIR2:        BLOCK   4
-AZD:   BLOCK   2       ;OUTPUT FILE NAME
-AZTEM: BLOCK   2
-AZFIL: BLOCK   2       ;FOR ASCII FILE NAME
-AZDEV: BLOCK   2       ;FOR ASCII DEVICE NAME
-AZEXT: BLOCK   1       ;FOR ASCII EXTENSION
-CTIBUF:        BLOCK   3
-CTOBUF:        BLOCK   3
-INBUF1:        BLOCK   3
-INBUF2:        BLOCK   3
-ERRCNT:        BLOCK   1
-OUTDIR:        BLOCK   4
-       ENDP:
-       END     COMPGO
+TITLE  BINCOM   V.003\r
+       XALL\r
+       LIST\r
+\r
+JOBVER=137\r
+LOC    JOBVER\r
+3\r
+RELOC\r
+\r
+CTL==0\r
+IN1==1\r
+IN2==2\r
+\r
+ACDEV=1\r
+ACFILE=2\r
+ACEXT=3\r
+ACDEL=4\r
+ACPNTR=5\r
+C=7    ;CHARACTER FOR PROCESSING\r
+PP=17  ;PUSH DOWN POINTER\r
+LPDL=20\r
+\r
+COMP:  CLOSE   CTL,\r
+       RELEAS  CTL,\r
+       RELEAS  IN1,\r
+       RELEAS  IN2,\r
+COMPGO:        RESET\r
+       SETZM   PPSET           ;THIS IS THE ZERO WHICH WILL\r
+                               ;BE "BLT"ED TO CLEAR STORAGE\r
+       MOVE    [XWD PPSET,PPSET+1]     ;ZERO STORAGE AREA\r
+       BLT     ENDP-1\r
+       MOVE    PP,[IOWD LPDL,PPSET+1]  ;SET UP PUSH DOWN LIST\r
+       MOVSI   (SIXBIT /REL/)\r
+       MOVEM   INDIR1+1\r
+       MOVEM   INDIR2+1\r
+       MOVSI   (SIXBIT /TTY/)\r
+       MOVEM   OUTDEV\r
+       SETZM   AZD\r
+       PUSHJ   PP,INITTY\r
+       PUSHJ   PP,CRFL\r
+       MOVEI   10,"*"          ;TELL USER WE ARE READY FOR COMMAND\r
+       IDPB    10,CTOBUF+1\r
+       OUTPUT  CTL,            ;OUT GOES THE "*"\r
+       INPUT   CTL,            ;HERE COMES THE COMMAND STRING\r
+       PUSHJ   PP,NAME1        ;ANALYIZE OUTPUT DEVICE AND NAME\r
+       CAIE    C,137\r
+       JRST    INDEV+1\r
+       JUMPE   ACDEV,INDEV\r
+       MOVE    13,AZDEV        ;GET ASCII NAME OF OUTPUT DEVICE\r
+       MOVEM   13,AZD          ;SAVE IT SO IT WON'T BE\r
+       MOVE    13,AZDEV+1      ;DESTROYED BY INPUT NAMES\r
+       MOVEM   13,AZD+1\r
+       MOVEM   ACDEV,OUTDEV\r
+       MOVEM   ACFILE,OUTDIR   ;PUT SIXBIT FILE NAME IN\r
+       MOVEM   ACEXT,OUTDIR+1  ;AND EXTENSION\r
+INDEV: PUSHJ   PP,NAME1        ;GET INPUT FROM COMMAND\r
+       JUMPN   ACDEV,.+4\r
+       HRLI    ACDEV,(SIXBIT/DSK/)\r
+       MOVE    13,[ASCIZ/DSK/]\r
+       MOVEM   13,AZDEV\r
+       MOVEM   ACDEV,INDEV1\r
+       MOVEM   ACDEV,INDEV2\r
+       MOVEM   ACFILE,INDIR1\r
+       SKIPE   ACEXT\r
+       MOVEM   ACEXT,INDIR1+1\r
+       INIT    IN1,14\r
+INDEV1:        SIXBIT  /DSK/\r
+       XWD     INBUF1\r
+       JRST    ERRI\r
+       INBUF   IN1,2           ;DO LOOKUP ON FIRST FILE NAME\r
+       LOOKUP  IN1,INDIR1\r
+       JRST    ERRIA           ;ERROR RETURN\r
+       PUSHJ   PP,NAME1\r
+       SKIPN   ACDEV\r
+       MOVE    ACDEV,INDEV1\r
+       MOVEM   ACDEV,INDEV2\r
+       MOVEM   ACFILE,INDIR2\r
+       SKIPE   ACEXT\r
+       MOVEM   ACEXT,INDIR2+1\r
+       INIT    IN2,14\r
+INDEV2:        SIXBIT  /DSK/\r
+       XWD     INBUF2\r
+       JRST    ERRI\r
+       INBUF   IN2,2           ;LOOKUP ON SECOND FILE NAME\r
+       LOOKUP  IN2,INDIR2\r
+       JRST    ERRIA\r
+       MOVE    13,INDEV1       ;GET INPUT DEV\r
+       CAME    13,INDEV2       ;SAME FOR BOTH?\r
+       JRST    .+6\r
+       CALLI   13,4\r
+       AND     13,[200000000000]\r
+       HLRZ    13,13\r
+       CAIE    13,200000\r
+       JRST    ERRS\r
+       INIT    CTL,0\r
+OUTDEV:        0\r
+       XWD     CTOBUF,0\r
+       JRST    ERRA\r
+       MOVE    13,OUTDEV\r
+       CALLI   13,4\r
+       TLNN    13,1\r
+       JRST    ERRO\r
+       ENTER   OUTDIR\r
+       JRST    ERRO\r
+       OUTPUT  CTL,\r
+       MOVEI   16,0\r
+MAIN:  PUSHJ   PP,GCHAR1       ;GET NEXT CHARACTER\r
+       JRST    MAIN1           ;ERROR FINISH\r
+       PUSHJ   PP,GCHAR2       ;GET SECOND FILE.\r
+       JRST    MAIN2\r
+       CAME    1,2             ;CHECK IF SAME.\r
+       PUSHJ   PP,DIFF\r
+       AOJA    16,MAIN         ;COUNT RECORDS.\r
+\r
+; PRINT OUT DIFFERENCE REPORT.\r
+DIFF:  AOS     0,ERRCNT        ;CHARACTERS DIFFER, INCREASE COUNT\r
+       HRLZ    11,16           ;PRINT OUT LOCATION.\r
+       PUSHJ   PP,OCTOUT\r
+       MOVE    11,1            ;PRINT FIRST ONE\r
+       PUSHJ   PP,SPTOCT\r
+       MOVE    11,2            ;PRINT SECOND ONE\r
+       PUSHJ   PP,SPTOCT\r
+       MOVE    11,1            ;PRINT OUT DIFFERENCE\r
+       XOR     11,2\r
+       PUSHJ   PP,SPTOCT\r
+       JRST    CRFL\r
+\r
+; HANDLE END OF FILES.\r
+MAIN1: PUSHJ   PP,GCHAR2       ;END OF FILE 1.\r
+       JRST    MAIN3\r
+       SETZM   1               ;COMPARE TO ZERO\r
+       CAME    1,2\r
+       PUSHJ   PP,DIFF\r
+       AOJA    16,MAIN1\r
+\r
+MAIN2: SETZM   2               ;END OF FILE 2.\r
+       CAME    1,2             ;COMPARE TO ZERO\r
+       PUSHJ   PP,DIFF\r
+       PUSHJ   PP,GCHAR1\r
+       JRST    MAIN3\r
+       AOJA    16,MAIN2\r
+MAIN3: SKIPE   0,ERRCNT\r
+       JRST    COMP\r
+       MOVEI   11,[ASCIZ /NO ERRORS ENCOUNTERED/]\r
+       JRST    ERROUT\r
+\r
+\fCRFL: MOVEI   10,15           ;OUTPUT A CARRIAGE RETURN-LINE FEED\r
+       PUSHJ   PP,TYO\r
+       MOVEI   10,12\r
+\r
+TYO:   SOSG    CTOBUF+2        ;DECREMENT BUFFER COUNT\r
+       OUTPUT  CTL,            ;BUFFER WAS EMPTY\r
+DEP:   IDPB    10,CTOBUF+1     ;DEPOSIT CHAR\r
+       CAIN    10,12           ;CHECK IF LINE FEED.\r
+       OUTPUT  CTL,\r
+       POPJ    PP,\r
+\r
+OCTOUT:        MOVEI   12,6            ;NUMBER OF CHARACTERS TO CONVERT\r
+       MOVEI   10,0            ;RESULTS\r
+       LSHC    10,3            ;DOUBLE SHIFT LEFT, 11.\r
+       ADDI    10,"0"\r
+       PUSHJ   PP,TYO\r
+       SOJG    12,.-4          ; UNTIL COUNT REACHED.\r
+       POPJ    PP,\r
+\r
+SPCOUT:        MOVEI   10," "          ;TYPE OUT A SPACE\r
+       JRST    TYO\r
+\r
+TABOUT:        MOVEI   10,11           ;TYPE OUT A TAB\r
+       JRST    TYO\r
+\r
+SPTOCT:        PUSHJ   PP,TABOUT       ;PRINT OUT NUMBER IN SPLIT OCTAL\r
+       PUSHJ   PP,OCTOUT\r
+       PUSHJ   PP,SPCOUT\r
+       JRST    OCTOUT\r
+\r
+\f;ROUTINES FOR OUTPUTING ERROR MESSAGES\r
+ERRO:  SKIPA   11,[[ASCIZ /?OUTPUT INITIALIZATION ERROR/]]\r
+ERRS:  MOVEI   11,[ASCIZ /?FILE BEING COMPARED ON SAME INPUT DEVICE/]\r
+ERROUT:        PUSHJ   17,TYPMSG\r
+       JRST    CARR\r
+\r
+TYPMSG:        PUSHJ   PP,INITTY       ;INITIALIZE TTY\r
+       PUSHJ   PP,CRFL         ;OUTPUT A CARRIAGE RETURN\r
+       TLOA    11,(POINT 7,,)  ;THIS IS POINTER FOR ERROR MESSAGE\r
+TYPMS1:        PUSHJ   PP,TYO          ;OUTPUT CHAR.\r
+       ILDB    10,11           ;LOAD A CHAR. FROM ERROR MESSAGE\r
+       JUMPN   10,TYPMS1       ;ALL ERROR MESSAGES END WITH A ZERO\r
+       POPJ    PP,             ;THROUGH WITH ERROR MESSAGE\r
+\r
+CARR:  PUSHJ   PP,CRFL         ;COMMON EXIT FOR ERROR MESSAGES\r
+       PUSHJ   PP,CRFL\r
+       JRST    COMP\r
+\r
+;INITIALIZE TTY FOR ERROR MESSAGES\r
+INITTY:        CLOSE   CTL\r
+       RELEAS  CTL\r
+       INIT    CTL,1\r
+       SIXBIT  /TTY/\r
+       XWD     CTOBUF,CTIBUF\r
+       HALT\r
+       INBUF   CTL,1\r
+       OUTBUF  CTL,1\r
+       OUTPUT  CTL,\r
+       POPJ    PP,\r
+\r
+\f;ROUTINE TO GET NEXT CHARACTER\r
+GCHAR1:        SOSG    0,INBUF1+2\r
+       JRST    GCH1FL          ;FILL BUFFER IF EMPTY\r
+       SKIPN   0,INBUF1+2\r
+       JRST    .-2             ; TRY AGAIN\r
+       ILDB    1,INBUF1+1\r
+       JRST    GCH1OK\r
+GCH1FL:        INPUT   IN1,            ;INPUT FOR FILE 1\r
+       STATO   IN1,762000      ;ERRORS OR END OF FILE?\r
+       JRST    GCHAR1+2                ;NO\r
+       STATO   IN1,742000      ;YES, EOF?\r
+       POPJ    PP,     \r
+       MOVEI   11,[ASCIZ /?FILE 1 READ ERROR/]\r
+       JRST    ERROUT\r
+GCH1OK:        AOS     0,(PP)\r
+       POPJ    PP,\r
+\r
+GCHAR2:        SOSG    0,INBUF2+2\r
+       JRST    GCH2FL          ;FILL BUFFER IF EMPTY\r
+       SKIPN   0,INBUF2+2\r
+       JRST    .-2             ; TRY AGAIN\r
+       ILDB    2,INBUF2+1\r
+       JRST    GCH2OK\r
+GCH2FL:        INPUT   IN2,\r
+       STATO   IN2,762000\r
+       JRST    GCHAR2+2\r
+       STATO   IN2,742000\r
+       POPJ    PP,\r
+       MOVEI   11,[ASCIZ /?FILE 2 READ ERROR/]\r
+       JRST    ERROUT\r
+GCH2OK:        AOS     0,(PP)\r
+       POPJ    PP,\r
+\r
+\f;THE CODE ON THIS PAGE IS FOR HANDLING INPUT ERRORS \r
+;THERE ARE TWU TYPES OF ERRORS--EITHER THE FILE IS NOT FOUND\r
+;OR THE DEVICE IS NOT AVAILABLE--THE FORMAT FOR THESE MESSAGES\r
+;IS THE SAEM FORMAT USED FOR THE "TECO" MESSAGES.\r
+\r
+ERRA:  MOVE    13,AZD\r
+       MOVEM   13,AZDEV\r
+       MOVE    13,AZD+1\r
+       MOVEM   13,AZDEV+1\r
+       JRST    ERRI\r
+\r
+ERRIA: MOVEI   11,[ASCIZ /?INPUT ERROR.../]\r
+       PUSHJ   PP,TYPMSG       ;TYPE FIRST PART OF MESSAGE\r
+       MOVEI   11,AZFIL        ;ADR. OF ASCII FILE NAME\r
+       PUSHJ   PP,TYPMS1-1     ;TYPE FILE NAME\r
+       SKIPN   0,AZEXT         ;IS THERE AN EXTENSION\r
+       JRST    NOEXT           ;NO EXTENSION\r
+       MOVEI   10,"."          ;FOR EXTENSION\r
+       XCT     DEP             ;THIS PUTS IT IN\r
+       MOVEI   11,AZEXT        ;GET ADR OF ASCII EXTENSION\r
+       PUSHJ   PP,TYPMS1-1\r
+NOEXT: MOVEI   11,[ASCIZ / FILE NOT FOUND/]    ;FINISH MESSAGE\r
+       PUSHJ   PP,TYPMS1-1\r
+       JRST    CARR            ;THIS WILL OUTPUT TWO C.R. AND EXIT\r
+\r
+ERRI:  MOVEI   11,[ASCIZ /?DEVICE /]\r
+       PUSHJ   PP,TYPMSG       ;TYPE BEGINNING OF MESSAGE\r
+       MOVEI   11,AZDEV        ;ADR OF DEVICE NAME\r
+       PUSHJ   PP,TYPMS1-1     ;OUTPUT DEVICE NAME\r
+       MOVEI   11,[ASCII / NOT AVAILABLE/]\r
+       PUSHJ   PP,TYPMS1-1     ;TYPE REST OF MESSAGE\r
+       JRST    CARR            ;INSERT CARRIAGE RETURNS AND EXIT\r
+\r
+\fNAME1:        SETZB   ACDEV,AZDEV     ;ZERO THE REGISTERS WHICH WILL RETURN THE NAMES\r
+       SETZB   ACDEL,AZFIL\r
+       SETZM   AZTEM\r
+       SETZB   ACFILE,AZEXT\r
+       SETZB   ACEXT,AZTEM+1\r
+\r
+NAME3: MOVE    16,[POINT 7,AZTEM]      ;THIS IS A POINTER FOR DEPOSITING THE\r
+                               ;ASCII CHARACTERS IN CASE AN INPUT\r
+                               ;ERROR IS DECTECTED--FOR THEN WE WILL\r
+                               ;HAVE TO PRINT THESE NAMES OUT\r
+       MOVSI   ACPNTR,(POINT 6,0)      ;SET POINTER\r
+       SETZ    13,\r
+       MOVEI   0,0             ;THE SIXBIT NAME WILL BE STORED IN THE AC0\r
+\r
+GETIOC:        PUSHJ   PP,TTYIN        ;GET INPUT CHARACTER\r
+       CAIN    C,":"           ;HAVE WE BEEN GETTING A DEVICE NAME\r
+       JRST    DEVICE          ;YES\r
+       CAIN    C,"."           ;OR A FILE NAME\r
+       JRST    NAME            ;YES\r
+       CAIN    C,","           ;THIS IS ANOTHER WAY TO GET A FILE NAME\r
+       JRST    TERM\r
+       CAIE    C,137           ;ONE KIND OF SEPERATOR\r
+       CAIG    C,15            ;THIS ALSO MEANS WE HAVE FINISHED A TERM\r
+       JRST    TERM            ;TERM HAAS BEEN READ\r
+       SUBI    C,40            ;CONVERT TO 6-BIT\r
+       TLNE    ACPNTR,770000   ;HAVE WE STORED SIX BYTES?\r
+       IDPB    C,ACPNTR        ;NO, STORE  IT\r
+       ADDI    C,40            ;CONVERT BACK TO ASCII FOR ERROR MESSAGES.\r
+       IDPB    C,16            ;STORE IN AC13\r
+       JRST    GETIOC          ;GET ANOTHER CHAR.\r
+\r
+\fDEVICE:       MOVE    13,AZTEM\r
+       MOVEM   13,AZDEV        ;STORE ASCII DEVICE NAME\r
+       MOVE    13,AZTEM+1\r
+       MOVEM   13,AZDEV+1\r
+       MOVE    ACDEV,0\r
+       JRST    .+6\r
+NAME:  MOVE    ACFILE,0        ;FILE NAME\r
+       MOVE    13,AZTEM\r
+       MOVEM   13,AZFIL        ;STORE ASCII NAME\r
+       MOVE    13,AZTEM+1\r
+       MOVEM   13,AZFIL+1\r
+       SETZM   AZTEM\r
+       SETZM   AZTEM+1\r
+       MOVE    ACDEL,C         ;SET DELIMITER\r
+       JRST    NAME3           ;GET NEXT SYMBOL\r
+\r
+TERM:  CAIN    ACDEL,0         ;IF NO PREVIOUS DELIMITOR, OR\r
+       JRST    .+3\r
+       CAIE    ACDEL,":"       ;IF PREVIOUS DELIMITER\r
+       JRST    TERM1\r
+       MOVE    13,AZTEM\r
+       MOVEM   13,AZFIL\r
+       MOVE    13,AZTEM+1\r
+       MOVEM   13,AZFIL+1\r
+       SETZM   AZTEM\r
+       SETZM   AZTEM+1\r
+       MOVE    ACFILE,0        ;SET FILE\r
+TERM1: CAIE    ACDEL,"."       ;IF PERIOD,\r
+       POPJ    PP,\r
+       MOVE    13,AZTEM\r
+       MOVEM   13,AZEXT        ;STORE ASCII EXTENSION\r
+       HLLZ    ACEXT,0         ;SET EXTENSION\r
+       POPJ    PP,             ;EXIT\r
+\r
+TTYIN: ILDB    C,CTIBUF+1      ;GET CHARACTER\r
+       CAIE    C,40            ;SKIP BLANKS\r
+       CAIN    C,11            ;AND TABS\r
+       JRST    TTYIN\r
+       POPJ    PP,             ;NO, EXIT\r
+\f\r
+PPSET: BLOCK   20\r
+INDIR1:        BLOCK   4\r
+INDIR2:        BLOCK   4\r
+AZD:   BLOCK   2       ;OUTPUT FILE NAME\r
+AZTEM: BLOCK   2\r
+AZFIL: BLOCK   2       ;FOR ASCII FILE NAME\r
+AZDEV: BLOCK   2       ;FOR ASCII DEVICE NAME\r
+AZEXT: BLOCK   1       ;FOR ASCII EXTENSION\r
+CTIBUF:        BLOCK   3\r
+CTOBUF:        BLOCK   3\r
+INBUF1:        BLOCK   3\r
+INBUF2:        BLOCK   3\r
+ERRCNT:        BLOCK   1\r
+OUTDIR:        BLOCK   4\r
+       ENDP:\r
+       END     COMPGO\r