Trailing-Edge
-
PDP-10 Archives
-
scratch
-
10,7/unscsp/lodtst/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