From 58bf8f5a669eb10b7077c09ee4e01813221928f6 Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Thu, 19 Apr 2018 17:47:02 -0400 Subject: [PATCH] Convert BINCOM.MAC to DOS format file. --- src/bincom.mac | 718 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 359 insertions(+), 359 deletions(-) diff --git a/src/bincom.mac b/src/bincom.mac index 3395b06..f7af610 100644 --- a/src/bincom.mac +++ b/src/bincom.mac @@ -1,359 +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 - - CRFL: 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 - - ;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, - - ;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, - - ;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 - - NAME1: 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. - - DEVICE: 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 - -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 + 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 + + CRFL: 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 + + ;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, + + ;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, + + ;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 + + NAME1: 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. + + DEVICE: 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 + +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 -- 1.7.1