Google
 

Trailing-Edge - PDP-10 Archives - bb-k345a-sb - exist.mac
There are 5 other files named exist.mac in the archive. Click here to see a list.
00100		TITLE	EXIST
00200	
00300	T1=1
00400	T2=2
00500	T3=3
00600	T4=4
00700	T5=5
00800	ARG=16
00900	P=17
01000	CL.ACS==1B32	;INHIBIT UPDATING ACCESS DATE
01100	
01200	EXIST::	MOVEI	T4,@0(ARG)	;POINT TO FILENAME
01300		MOVEI	T5,^D10		;MAX LENGTH
01400		HRLI	T4,(POINT 7,)	;MAKE BYTE POINTER
01500		MOVEI	T2,6		;MAX LENGTH OF FILE NAME
01600		MOVE	T3,FNMPTR	;POINTER TO NAME IN LKP BLOCK
01700	LOOP:	PUSHJ	P,GETC		;GET USER ARGUEMENT CHARACTER
01800		  JRST	EXSTST		;END OF STRING
01900		CAIN	T1,'.'		;LOOK FOR START OF EXTENSION
02000		JRST	EXSDOT		;YES, GO HANDLE
02100		IDPB	T1,T3		;STORE FILE NAME CHARACTER
02200		SOJG	T2,LOOP		;LOOP OVER WHOLE NAME
02300	EXSLOK:	PUSHJ	P,GETC		;END OF NAME, SCAN FOR DOT OR END
02400		  JRST	EXSTST		;DONE, GO TEST FOR FILE
02500		CAIN	T1,'.'		;FOUND DOT?
02600		JRST	EXSDOT		;GET EXTENSION
02700		JRST	EXSLOK		;KEEP SCANNING
02800	
02900	EXSDOT:	MOVEI	T2,3		;MAXIMUM LENGTH OF EXTENSION
03000		MOVE	T3,EXTPTR	;POINT TO EXTENSION IN LKP BLOCK
03100	EXSDO1:	PUSHJ	P,GETC		;GET A CHARACTER
03200		  JRST	EXSTST		;END OF INPUT STRING
03300		IDPB	T1,T3		;SAVE EXTENSION CHARACTER
03400		SOJG	T2,EXSDO1	;LOOP OVER WHOLE NAME
03500	EXSTST:	MOVEI	T1,17		;MODE
03600		MOVSI	T2,'DSK'	;DEVICE
03700		SETZ	T3,		;NO BUFFERS
03800		OPEN	0,T1		;OPEN DSK
03900		  JRST	EXSERR		;CAN'T, QUIT
04000		SETZM	LKPBLK+2	;CLEAR LOOKUP PPN 
04100		SETZM	LKPBLK+3	;AND DATE
04200		LOOKUP	0,LKPBLK	;LOOK FOR FILE
04300		  JRST	EXSERR		;NOT THERE, TELL HIM
04400		CLOSE	0,CL.ACS	;CLOSE, DON'T COUNT AS ACCESS
04500		SETZM	@1(ARG)		;INDICATE GOODNESS
04600		POPJ	P,		;AND RETURN
04700	
04800	EXSERR:	SETOM	@1(ARG)		;INDICATE BADNESS
04900		POPJ	P,		;AND RETURN
05000	
05100	GETC:	SOJL	T5,CPOPJ	;IF RAN OUT OF DATA
05200		ILDB	T1,T4		;GET NEXT
05300		CAIG	T1,140		;CONVERT
05400		ADDI	T1,40		; TO
05500		ANDI	T1,77		; SIXBIT
05600		CAIE	T1,' '		; BLANK INDICATES END
05700		CAIN	T1,0		; AS DOES ZERO
05800		POPJ	P,		; 
05900		AOS	(P)		; ELSE RETURN
06000	CPOPJ:	POPJ	P,		; THE CHARACTER
06100	
06200	FNMPTR:	POINT	6,LKPFNM
06300	EXTPTR:	POINT	6,LKPEXT
06400	
06500	LKPBLK:
06600	LKPFNM:	BLOCK	1
06700	LKPEXT:	BLOCK	3
06800	
06900		END