Added recovered BINCOM.MAC source.
authorRichard Cornwell <rcornwell@github.com>
Thu, 19 Apr 2018 17:08:49 +0000 (13:08 -0400)
committerRichard Cornwell <rcornwell@github.com>
Thu, 19 Apr 2018 17:08:49 +0000 (13:08 -0400)
src/bincom.mac [new file with mode: 0644]

diff --git a/src/bincom.mac b/src/bincom.mac
new file mode 100644 (file)
index 0000000..3395b06
--- /dev/null
@@ -0,0 +1,359 @@
+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