-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