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