19 C=7 ;CHARACTER FOR PROCESSING
20 PP=17 ;PUSH DOWN POINTER
28 SETZM PPSET ;THIS IS THE ZERO WHICH WILL
29 ;BE "BLT"ED TO CLEAR STORAGE
30 MOVE [XWD PPSET,PPSET+1] ;ZERO STORAGE AREA
32 MOVE PP,[IOWD LPDL,PPSET+1] ;SET UP PUSH DOWN LIST
41 MOVEI 10,"*" ;TELL USER WE ARE READY FOR COMMAND
43 OUTPUT CTL, ;OUT GOES THE "*"
44 INPUT CTL, ;HERE COMES THE COMMAND STRING
45 PUSHJ PP,NAME1 ;ANALYIZE OUTPUT DEVICE AND NAME
49 MOVE 13,AZDEV ;GET ASCII NAME OF OUTPUT DEVICE
50 MOVEM 13,AZD ;SAVE IT SO IT WON'T BE
51 MOVE 13,AZDEV+1 ;DESTROYED BY INPUT NAMES
54 MOVEM ACFILE,OUTDIR ;PUT SIXBIT FILE NAME IN
55 MOVEM ACEXT,OUTDIR+1 ;AND EXTENSION
56 INDEV: PUSHJ PP,NAME1 ;GET INPUT FROM COMMAND
58 HRLI ACDEV,(SIXBIT/DSK/)
70 INBUF IN1,2 ;DO LOOKUP ON FIRST FILE NAME
72 JRST ERRIA ;ERROR RETURN
84 INBUF IN2,2 ;LOOKUP ON SECOND FILE NAME
87 MOVE 13,INDEV1 ;GET INPUT DEV
88 CAME 13,INDEV2 ;SAME FOR BOTH?
107 MAIN: PUSHJ PP,GCHAR1 ;GET NEXT CHARACTER
108 JRST MAIN1 ;ERROR FINISH
109 PUSHJ PP,GCHAR2 ;GET SECOND FILE.
111 CAME 1,2 ;CHECK IF SAME.
113 AOJA 16,MAIN ;COUNT RECORDS.
115 ; PRINT OUT DIFFERENCE REPORT.
116 DIFF: AOS 0,ERRCNT ;CHARACTERS DIFFER, INCREASE COUNT
117 HRLZ 11,16 ;PRINT OUT LOCATION.
119 MOVE 11,1 ;PRINT FIRST ONE
121 MOVE 11,2 ;PRINT SECOND ONE
123 MOVE 11,1 ;PRINT OUT DIFFERENCE
128 ; HANDLE END OF FILES.
129 MAIN1: PUSHJ PP,GCHAR2 ;END OF FILE 1.
131 SETZM 1 ;COMPARE TO ZERO
136 MAIN2: SETZM 2 ;END OF FILE 2.
137 CAME 1,2 ;COMPARE TO ZERO
142 MAIN3: SKIPE 0,ERRCNT
144 MOVEI 11,[ASCIZ /NO ERRORS ENCOUNTERED/]
147 \fCRFL: MOVEI 10,15 ;OUTPUT A CARRIAGE RETURN-LINE FEED
151 TYO: SOSG CTOBUF+2 ;DECREMENT BUFFER COUNT
152 OUTPUT CTL, ;BUFFER WAS EMPTY
153 DEP: IDPB 10,CTOBUF+1 ;DEPOSIT CHAR
154 CAIN 10,12 ;CHECK IF LINE FEED.
158 OCTOUT: MOVEI 12,6 ;NUMBER OF CHARACTERS TO CONVERT
160 LSHC 10,3 ;DOUBLE SHIFT LEFT, 11.
163 SOJG 12,.-4 ; UNTIL COUNT REACHED.
166 SPCOUT: MOVEI 10," " ;TYPE OUT A SPACE
169 TABOUT: MOVEI 10,11 ;TYPE OUT A TAB
172 SPTOCT: PUSHJ PP,TABOUT ;PRINT OUT NUMBER IN SPLIT OCTAL
177 \f;ROUTINES FOR OUTPUTING ERROR MESSAGES
178 ERRO: SKIPA 11,[[ASCIZ /?OUTPUT INITIALIZATION ERROR/]]
179 ERRS: MOVEI 11,[ASCIZ /?FILE BEING COMPARED ON SAME INPUT DEVICE/]
180 ERROUT: PUSHJ 17,TYPMSG
183 TYPMSG: PUSHJ PP,INITTY ;INITIALIZE TTY
184 PUSHJ PP,CRFL ;OUTPUT A CARRIAGE RETURN
185 TLOA 11,(POINT 7,,) ;THIS IS POINTER FOR ERROR MESSAGE
186 TYPMS1: PUSHJ PP,TYO ;OUTPUT CHAR.
187 ILDB 10,11 ;LOAD A CHAR. FROM ERROR MESSAGE
188 JUMPN 10,TYPMS1 ;ALL ERROR MESSAGES END WITH A ZERO
189 POPJ PP, ;THROUGH WITH ERROR MESSAGE
191 CARR: PUSHJ PP,CRFL ;COMMON EXIT FOR ERROR MESSAGES
195 ;INITIALIZE TTY FOR ERROR MESSAGES
207 \f;ROUTINE TO GET NEXT CHARACTER
208 GCHAR1: SOSG 0,INBUF1+2
209 JRST GCH1FL ;FILL BUFFER IF EMPTY
214 GCH1FL: INPUT IN1, ;INPUT FOR FILE 1
215 STATO IN1,762000 ;ERRORS OR END OF FILE?
217 STATO IN1,742000 ;YES, EOF?
219 MOVEI 11,[ASCIZ /?FILE 1 READ ERROR/]
224 GCHAR2: SOSG 0,INBUF2+2
225 JRST GCH2FL ;FILL BUFFER IF EMPTY
235 MOVEI 11,[ASCIZ /?FILE 2 READ ERROR/]
240 \f;THE CODE ON THIS PAGE IS FOR HANDLING INPUT ERRORS
241 ;THERE ARE TWU TYPES OF ERRORS--EITHER THE FILE IS NOT FOUND
242 ;OR THE DEVICE IS NOT AVAILABLE--THE FORMAT FOR THESE MESSAGES
243 ;IS THE SAEM FORMAT USED FOR THE "TECO" MESSAGES.
251 ERRIA: MOVEI 11,[ASCIZ /?INPUT ERROR.../]
252 PUSHJ PP,TYPMSG ;TYPE FIRST PART OF MESSAGE
253 MOVEI 11,AZFIL ;ADR. OF ASCII FILE NAME
254 PUSHJ PP,TYPMS1-1 ;TYPE FILE NAME
255 SKIPN 0,AZEXT ;IS THERE AN EXTENSION
256 JRST NOEXT ;NO EXTENSION
257 MOVEI 10,"." ;FOR EXTENSION
258 XCT DEP ;THIS PUTS IT IN
259 MOVEI 11,AZEXT ;GET ADR OF ASCII EXTENSION
261 NOEXT: MOVEI 11,[ASCIZ / FILE NOT FOUND/] ;FINISH MESSAGE
263 JRST CARR ;THIS WILL OUTPUT TWO C.R. AND EXIT
265 ERRI: MOVEI 11,[ASCIZ /?DEVICE /]
266 PUSHJ PP,TYPMSG ;TYPE BEGINNING OF MESSAGE
267 MOVEI 11,AZDEV ;ADR OF DEVICE NAME
268 PUSHJ PP,TYPMS1-1 ;OUTPUT DEVICE NAME
269 MOVEI 11,[ASCII / NOT AVAILABLE/]
270 PUSHJ PP,TYPMS1-1 ;TYPE REST OF MESSAGE
271 JRST CARR ;INSERT CARRIAGE RETURNS AND EXIT
273 \fNAME1: SETZB ACDEV,AZDEV ;ZERO THE REGISTERS WHICH WILL RETURN THE NAMES
279 NAME3: MOVE 16,[POINT 7,AZTEM] ;THIS IS A POINTER FOR DEPOSITING THE
280 ;ASCII CHARACTERS IN CASE AN INPUT
281 ;ERROR IS DECTECTED--FOR THEN WE WILL
282 ;HAVE TO PRINT THESE NAMES OUT
283 MOVSI ACPNTR,(POINT 6,0) ;SET POINTER
285 MOVEI 0,0 ;THE SIXBIT NAME WILL BE STORED IN THE AC0
287 GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER
288 CAIN C,":" ;HAVE WE BEEN GETTING A DEVICE NAME
290 CAIN C,"." ;OR A FILE NAME
292 CAIN C,"," ;THIS IS ANOTHER WAY TO GET A FILE NAME
294 CAIE C,137 ;ONE KIND OF SEPERATOR
295 CAIG C,15 ;THIS ALSO MEANS WE HAVE FINISHED A TERM
296 JRST TERM ;TERM HAAS BEEN READ
297 SUBI C,40 ;CONVERT TO 6-BIT
298 TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES?
299 IDPB C,ACPNTR ;NO, STORE IT
300 ADDI C,40 ;CONVERT BACK TO ASCII FOR ERROR MESSAGES.
301 IDPB C,16 ;STORE IN AC13
302 JRST GETIOC ;GET ANOTHER CHAR.
304 \fDEVICE: MOVE 13,AZTEM
305 MOVEM 13,AZDEV ;STORE ASCII DEVICE NAME
310 NAME: MOVE ACFILE,0 ;FILE NAME
312 MOVEM 13,AZFIL ;STORE ASCII NAME
317 MOVE ACDEL,C ;SET DELIMITER
318 JRST NAME3 ;GET NEXT SYMBOL
320 TERM: CAIN ACDEL,0 ;IF NO PREVIOUS DELIMITOR, OR
322 CAIE ACDEL,":" ;IF PREVIOUS DELIMITER
330 MOVE ACFILE,0 ;SET FILE
331 TERM1: CAIE ACDEL,"." ;IF PERIOD,
334 MOVEM 13,AZEXT ;STORE ASCII EXTENSION
335 HLLZ ACEXT,0 ;SET EXTENSION
338 TTYIN: ILDB C,CTIBUF+1 ;GET CHARACTER
339 CAIE C,40 ;SKIP BLANKS
347 AZD: BLOCK 2 ;OUTPUT FILE NAME
349 AZFIL: BLOCK 2 ;FOR ASCII FILE NAME
350 AZDEV: BLOCK 2 ;FOR ASCII DEVICE NAME
351 AZEXT: BLOCK 1 ;FOR ASCII EXTENSION