mirror of
https://github.com/PDP-10/its.git
synced 2026-02-04 23:54:37 +00:00
Added PRUFD.
This commit is contained in:
committed by
Lars Brinkhoff
parent
8fddeb53cf
commit
a93bd081a0
404
src/sysen2/prufd.10
Normal file
404
src/sysen2/prufd.10
Normal file
@@ -0,0 +1,404 @@
|
||||
TITLE PRUFD
|
||||
.INSRT JSF;DSK:STNDRD MACROS
|
||||
.INSRT SYSENG; DSK: FSDEFS >
|
||||
|
||||
PROG==0
|
||||
;0 => PRUFD
|
||||
;1 => LIST FILES ON PACK
|
||||
|
||||
A=1
|
||||
AA=2
|
||||
B=3
|
||||
C=4
|
||||
D=5
|
||||
E=6 ;POINTER INTO MFD (DON'T CLOBBER)
|
||||
F=7 ;POINTER INTO UFD (DON'T CLOBBER)
|
||||
T=10
|
||||
TT=11
|
||||
P=17
|
||||
|
||||
;IO CHANNEL ASSIGNMENTS
|
||||
LPTC==5
|
||||
FDRC==6
|
||||
|
||||
LPDL==100. ;EXTRA LONG FOR SORT
|
||||
WPS==LMNBLK ;FOR SORT
|
||||
|
||||
BEG: MOVE P,[-LPDL,,PDL]
|
||||
PUSHJ P,PRINI
|
||||
.OPEN FDRC,[6,,SIXBIT / DSKM.F.D.(FILE)/] ;OPEN MFD
|
||||
.VALUE
|
||||
MOVE A,[-2000,,MFD]
|
||||
.IOT FDRC,A
|
||||
MOVE A,MFD+MDNAMP ;USER NAME AREA POINTER
|
||||
ADDI A,MFD ;RELOCATE TO POINT TO MFD
|
||||
MOVEI AA,MFD+2000 ;END OF USER NAME AREA IN MFD
|
||||
MOVSI B,(SETZ) ;ABOUT TO SORT ON ENTIRE FIELD
|
||||
PUSHJ P,SORT ;SORT USER NAMES
|
||||
MOVE E,MFD+MDNAMP ;USER NAME AREA POINTER
|
||||
LUP: SKIPE A,MFD(E) ;IF USER SLOT NOT EMPTY,
|
||||
PUSHJ P,USRHAK ;THEN HACK THIS DIRECTORY
|
||||
ADDI E,LMNBLK ;INCREMENT TO NEXT USER
|
||||
CAIG E,1776
|
||||
JRST LUP
|
||||
.CLOSE FDRC,
|
||||
PUSHJ P,PRDUN ;DONE
|
||||
.VALUE [ASCIZ /./]
|
||||
JRST BEG
|
||||
|
||||
USRHAK: .SUSET [.SSNAM,,A] ;SET SYSTEM NAME
|
||||
.OPEN FDRC,[6,,SIXBIT / DSK.FILE.(DIR)/]
|
||||
.VALUE
|
||||
MOVE A,[-2000,,UFD]
|
||||
.IOT FDRC,A
|
||||
JRST UDIRHK
|
||||
|
||||
MFD: BLOCK 2000
|
||||
|
||||
UFD: BLOCK 2000
|
||||
|
||||
PDL: BLOCK LPDL+1
|
||||
IFE PROG,[
|
||||
|
||||
;INITIALIZE
|
||||
|
||||
PRINI: .OPEN LPTC,[1,,SIXBIT / LPTPRUFD WPAPER/]
|
||||
.VALUE ;LPT NOT AVAILABLE
|
||||
IRPS NAME,,[USER BLOCKS LINKS]
|
||||
MOVE AA,[SIXBIT /NAME/]
|
||||
PUSHJ P,SXTYOT
|
||||
TERMIN
|
||||
REPEAT 2,PUSHJ P,CRLF
|
||||
SETZM NFBLKS ;CLEAR TOTAL NUMBER OF BLOCKS
|
||||
SETZM TNLKS ;CLEAR TOTAL NUMBER OF LINKS
|
||||
POPJ P,
|
||||
]
|
||||
|
||||
;HACK WITH A USER DIRECTORY
|
||||
;WITHIN THIS ROUTINE, F IS A POINTER TO FILE AREA
|
||||
;C HAS # BLOCKS THIS USER SO FAR
|
||||
|
||||
UDIRHK: PUSHJ P,UFDINI ;INITIALIZE FOR THIS UFD
|
||||
MOVE F,UFD+UDNAMP ;GET NAME AREA POINTER
|
||||
ADDI F,UFD ;RELOCATE TO POINT TO ACTUAL ADDRESS
|
||||
UDHL: SKIPN (F) ;CHECK THIS ENTRY
|
||||
SKIPE 1(F)
|
||||
PUSHJ P,HAKFIL ;NON-NULL FILE, HACK IT
|
||||
ADDI F,LUNBLK ;INCREMENT TO NEXT NAME BLOCK
|
||||
CAIGE F,2000+UFD ;DONE?
|
||||
JRST UDHL ;NO, GET NEXT FILE
|
||||
IFN PROG,JRST UDIRDN ;DONE WITH THIS DIRECTORY
|
||||
IFE PROG,[
|
||||
MOVE T,C ;SAVE TO CHECK FOR "EXCESSIVE " AMOUNT OF DISK SPACE
|
||||
MOVE A,C ;GET NUMBER OF BLOCKS THIS USER DIRECTORY
|
||||
ADDM A,NFBLKS' ;ADD TO TOTAL BLOCKS
|
||||
MOVEI C,3 ;NUMBER OF DIGITS
|
||||
PUSHJ P,NDTYO ;TYPE OUT NUMBER OF BLOCKS THIS USER
|
||||
PUSHJ P,TAB ;TYPE A TAB TO SEPARATE FROM FOLLOWING
|
||||
SKIPN A,NLINKS ;GET NUMBER OF LINKS
|
||||
JRST .+3
|
||||
ADDM A,TNLKS' ;MORE TOTAL LINKS
|
||||
PUSHJ P,DECTYO ;TYPE OUT NUMBER OF LINKS
|
||||
MOVE A,T
|
||||
CAIG A,250. ;DOES THIS GUY HAVE AN "EXCESSIVE" NUMBER OF TRACKS?
|
||||
JRST CRLF ;NO
|
||||
PUSHJ P,TAB ;YES
|
||||
MOVE AA,[SIXBIT /??????/] ;FLAG HIM
|
||||
PUSHJ P,SXTYOT ;AS A LOSER!
|
||||
JRST CRLF ;END WITH CRLF
|
||||
|
||||
UFDINI: MOVE AA,MFD(E) ;GET SYSTEM NAME AGAIN
|
||||
PUSHJ P,SXTYOT ;TYPE IT OUT
|
||||
SETZB C,NLINKS ;CLEAR BLOCK COUNT AND LINK COUNT
|
||||
POPJ P,
|
||||
;STILL IN ASSEMBLY CONDITIONAL
|
||||
|
||||
;F POINTS TO FILE, HACK WITH IT
|
||||
|
||||
HAKFIL: MOVE A,UNRNDM(F) ;GET THE "IMPORTANT" WORD DESCRIBING FILE
|
||||
TLNN A,UNLINK ;LINK?
|
||||
JRST HF2 ;NO
|
||||
AOS NLINKS' ;YES, ANOTHER LINK
|
||||
POPJ P,
|
||||
|
||||
;F POINTS TO REAL FILE (AS OPPOSED TO LINK)
|
||||
|
||||
HF2: ANDI A,17777 ;MASK TO CHARACTER ADDRESS OF DESCRIPTION
|
||||
IDIVI A,6 ;NOW CALCULATE BYTE POINTER
|
||||
ADD A,HFBPT(AA) ;GET BYTE POINTER IN A
|
||||
ILDB T,A ;GET CHARACTER
|
||||
XCT HF2TB(T) ;DO SOMETHING
|
||||
TRNE T,40
|
||||
IBP A
|
||||
AOJA C,.-4 ;INCREMENT BLOCK COUNT AND LOOP
|
||||
|
||||
;TABLE OF THINGS TO DO WITH CHARACTERS
|
||||
|
||||
HF2TB: POPJ P, ;0 => DONE
|
||||
REPEAT 12.,ADDI C,.RPCNT ;1 - 12. => TAKE THAT MANY (N-1 NOW, 1 LATER)
|
||||
REPEAT 30.-13.+1,JFCL ;13. - 30. => TAKE 1
|
||||
POPJ P, ;31. => DONE
|
||||
REPEAT 40,IBP A ;32. - 63., READ NEXT CHAR. AND TAKE A BLOCK
|
||||
|
||||
;TABLE OF BYTE POINTERS (FOR ILDB'ING) TO DESCRIPTOR AREA
|
||||
|
||||
HFBPT: POINTI 6,UFD+UDDESC
|
||||
|
||||
;DONE
|
||||
|
||||
PRDUN: PUSHJ P,CRLF ;SEPARATE THIS CRUFT FROM PREV. WITH CRLF
|
||||
IRPS TYP,,[BLOCKS LINKS]LOC,,[NFBLKS TNLKS]
|
||||
MOVE AA,[SIXBIT /TYP/]
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE A,LOC
|
||||
PUSHJ P,DECTYO
|
||||
PUSHJ P,CRLF
|
||||
TERMIN
|
||||
MOVEI A,14
|
||||
PUSHJ P,TYO
|
||||
.CLOSE LPTC,
|
||||
POPJ P,
|
||||
|
||||
] ;END IFE PROG, CONDITIONAL
|
||||
|
||||
IFE PROG-1,[ ;LIST ALL FILES ON PACK
|
||||
|
||||
PACK: -1 ;INSERT PACK NUMBER HERE FROM DDT
|
||||
|
||||
;ROUTINES:
|
||||
;PRINI ;INITIALIZE
|
||||
;UFDINI ;INITIALIZE FOR THIS USER DIRECTORY
|
||||
;HAKFIL ;PROCESS FILE
|
||||
;UDIRDN ;DONE WITH THIS USER DIRECTORY
|
||||
;PRDUN ;DONE
|
||||
|
||||
PRINI: SKIPGE PACK ;CHECK PACK NUMBER FOR VALIDITY
|
||||
NOPACK: .VALUE ;NO PACK NUMBER SPECIFIED
|
||||
.OPEN LPTC,[1,,SIXBIT / LPTPRUFD WPAPER/]
|
||||
.VALUE
|
||||
INSIRP PUSHJ P,[PAKTYP TIMTYP PAKTYP]
|
||||
JRST CRLF
|
||||
|
||||
PAKTYP: MOVE AA,[SIXBIT /PACK/]
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE A,PACK
|
||||
JRST DECTYO
|
||||
|
||||
UFDINI: SETOM FILCT' ;INITIALIZE FOR USER DIRECTORY: SET SWITCH (MAYBE DON'T PRINT ANYTHING FOR THIS USER)
|
||||
POPJ P,
|
||||
|
||||
HAKFIL: LDB T,[UNPKN,,UNRNDM(F)] ;GET PACK NUMBER
|
||||
CAME T,PACK ;SKIP IF ON PACK BEING CHECKED
|
||||
UDIRDN: POPJ P, ;NOT ON THIS PACK (ALSO ROUTINE FOR DONE WITH THIS DIRECTORY)
|
||||
AOSN FILCT
|
||||
PUSHJ P,HAKFII ;THIS FIRST RELEVANT FILE THIS DIRECTORY
|
||||
MOVE A,UNRNDM(F)
|
||||
TLNN A,UNIGFL ;CHECK TO SEE IF FILE REALLY THERE
|
||||
SKIPA A,SPACE ;YES
|
||||
MOVEI A,"* ;NO
|
||||
PUSHJ P,TYO
|
||||
MOVE AA,(F) ;FN1
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE AA,1(F) ;FN2
|
||||
PUSHJ P,SXTYOT
|
||||
JRST CRLF
|
||||
|
||||
HAKFII: PUSHJ P,CRLF ;EXTRA CRLF TO SEPARATE FROM PREV
|
||||
MOVE B,MFD(E) ;SYSTEM NAME THIS USER
|
||||
MOVEI C,6 ;COUNT
|
||||
MOVE AA,B ;GET SYSTEM NAME SO IT CAN BE TYPED OUT
|
||||
PUSHJ P,SXTYOT
|
||||
SOJG C,.-2
|
||||
JRST CRLF
|
||||
|
||||
PRDUN: MOVEI A,14
|
||||
PUSHJ P,TYO
|
||||
.CLOSE LPTC,
|
||||
POPJ P,
|
||||
]
|
||||
|
||||
SXTYOT: JUMPE AA,TAB
|
||||
MOVEI A,0
|
||||
LSHC A,6
|
||||
ADDI A,40
|
||||
PUSHJ P,TYO
|
||||
JRST SXTYOT
|
||||
|
||||
SPACE: MOVEI A,40
|
||||
JRST TYO
|
||||
|
||||
TAB: MOVEI A,11
|
||||
JRST TYO
|
||||
|
||||
CRLF: MOVEI A,15
|
||||
PUSHJ P,TYO
|
||||
MOVEI A,12
|
||||
TYO: .IOT LPTC,A
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
DECTYO: MOVEI C,0 ;NO MINIMUM NUMBER OF DIGITS
|
||||
NDTYO: IDIVI A,10. ;ENTRY TO TYPE LEADING SPACES IF NECESSARY TO FILL TO C(C) CHARACTERS
|
||||
JUMPE A,DCTYO3
|
||||
HRLM AA,(P)
|
||||
PUSHJ P,[SOJA C,NDTYO]
|
||||
HLRZ AA,(P)
|
||||
DCTYO2: MOVEI A,"0(AA)
|
||||
JRST TYO
|
||||
|
||||
DCTYO3: SOJLE C,DCTYO2
|
||||
PUSHJ P,SPACE
|
||||
JRST DCTYO3
|
||||
|
||||
TIMTYP: PUSHJ P,TAB ;TYPE TIME: BEGIN WITH TAB
|
||||
MOVE AA,[SIXBIT /PRUFD./] ;BUT FIRST TYPE VERSION DESCRIPTION
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE AA,[.FNAM2] ;VERSION #
|
||||
PUSHJ P,SXTYOT
|
||||
.RDATIM A, ;GET TIME IN A, DATE IN AA
|
||||
JUMPL A,CPOPJ ;JUMP IF NOT KNOWN
|
||||
PUSH P,A ;SAVE TIME
|
||||
PUSHJ P,SXTYOT ;TYPE DATE
|
||||
POP P,AA
|
||||
JRST SXTYOT ;TYPE TIME AND RETURN
|
||||
|
||||
;SORT THE SYMBOL TABLE
|
||||
;A POINTS TO FIRST ENTRY
|
||||
;AA POINTS TO LAST ENTRY + 1
|
||||
;B HAS ONE BIT SET, THAT BIT MOST SIGNIFICANT BIT TO SORT ON
|
||||
|
||||
|
||||
SORT:
|
||||
SORT1: HRLM AA,(P) ;SAVE UPPER BOUND
|
||||
CAIL A,-WPS(AA)
|
||||
JRST SORT7 ;ONE OR ZERO ENTRIES
|
||||
PUSH P,A ;SAVE LOWER BOUND
|
||||
SORT3: TDNN B,(A) ;BIT SET IN LOWER ENTRY?
|
||||
JRST SORT4 ;NO, INCREMENT TO NEXT AND MAYBE TRY AGAIN
|
||||
SUBI AA,WPS ;YES, NOW BACK UP UPPER POINT
|
||||
TDNE B,(AA) ;BIT CLEAR IN UPPER ENTRY?
|
||||
JRST SORT2 ;NO, CHECK FOR END, DECREMENT AA, AND TRY AGAIN
|
||||
REPEAT WPS,[ ;BIT SET IN LOWER ENTRY AND CLEAR IN UPPER => EXCHANGE ENTRIES
|
||||
MOVE T,.RPCNT(A)
|
||||
EXCH T,.RPCNT(AA)
|
||||
MOVEM T,.RPCNT(A)
|
||||
]
|
||||
SORT4: ADDI A,WPS ;INCREMENT LOWER BOUND POINTER TO NEXT ENTRY
|
||||
SORT2: CAME A,AA ;ANY MORE ENTRIES LEFT?
|
||||
JRST SORT3 ;YES, GO PROCESS THEM
|
||||
;A AND AA NOW BOTH POINT TO FIRST ENTRY WITH BIT SET
|
||||
ROT B,-1 ;ROTATE BIT INDICATOR TO NEXT (LESS SIGNIFICANT) BIT
|
||||
POP P,A ;RESTORE LOWER BOUND OF ENTIRE SORT
|
||||
JUMPL B,SORT6 ;JUMP IF NO MORE KEY TO SORT ON
|
||||
PUSHJ P,SORT1 ;SORT BOTTOM PART OF TABLE
|
||||
HLRZ AA,(P) ;RESTORE UPPER BOUND (SORT1 CLOBBERED A TO MIDDLE)
|
||||
PUSHJ P,SORT1 ;SORT TOP PART OF TABLE
|
||||
SORT6: ROT B,1 ;BACK UP KEY AGAIN SO AS TOO "NOT CLOBBER B"
|
||||
SORT7: HLRZ A,(P) ;MAKE A POINT ABOVE TABLE ENTRIES SORTED
|
||||
POPJ P,
|
||||
|
||||
PATCH:
|
||||
PAT: BLOCK 40
|
||||
PATCHE=.-1
|
||||
|
||||
END BEG
|
||||
HAVE AN "EXCESSIVE" NUMBER OF TRACKS?
|
||||
JRST CRLF ;NO
|
||||
PUSHJ P,TAB ;YES
|
||||
MOVE AA,[SIXBIT /??????/] ;FLAG HIM
|
||||
PUSHJ P,SXTYOT ;AS A LOSER!
|
||||
JRST CRLF ;END WITH CRLF
|
||||
|
||||
UFDINI: MOVE AA,MFD(E) ;GET SYSTEM NAME AGAIN
|
||||
PUSHJ P,SXTYOT ;TYPE IT OUT
|
||||
SETZB C,NLINKS ;CLEAR BLOCK COUNT AND LINK COUNT
|
||||
POPJ P,
|
||||
;STILL IN ASSEMBLY CONDITIONAL
|
||||
|
||||
;F POINTS TO FILE, HACK WITH IT
|
||||
|
||||
HAKFIL: MOVE A,UNRNDM(F) ;GET THE "IMPORTANT" WORD DESCRIBING FILE
|
||||
TLNN A,UNLINK ;LINK?
|
||||
JRST HF2 ;NO
|
||||
AOS NLINKS' ;YES, ANOTHER LINK
|
||||
POPJ P,
|
||||
|
||||
;F POINTS TO REAL FILE (AS OPPOSED TO LINK)
|
||||
|
||||
HF2: ANDI A,17777 ;MASK TO CHARACTER ADDRESS OF DESCRIPTION
|
||||
IDIVI A,6 ;NOW CALCULATE BYTE POINTER
|
||||
ADD A,HFBPT(AA) ;GET BYTE POINTER IN A
|
||||
ILDB T,A ;GET CHARACTER
|
||||
XCT HF2TB(T) ;DO SOMETHING
|
||||
TRNE T,40
|
||||
IBP A
|
||||
AOJA C,.-4 ;INCREMENT BLOCK COUNT AND LOOP
|
||||
|
||||
;TABLE OF THINGS TO DO WITH CHARACTERS
|
||||
|
||||
HF2TB: POPJ P, ;0 => DONE
|
||||
REPEAT 12.,ADDI C,.RPCNT ;1 - 12. => TAKE THAT MANY (N-1 NOW, 1 LATER)
|
||||
REPEAT 30.-13.+1,JFCL ;13. - 30. => TAKE 1
|
||||
POPJ P, ;31. => DONE
|
||||
REPEAT 40,IBP A ;32. - 63., READ NEXT CHAR. AND TAKE A BLOCK
|
||||
|
||||
;TABLE OF BYTE POINTERS (FOR ILDB'ING) TO DESCRIPTOR AREA
|
||||
|
||||
HFBPT: POINTI 6,UFD+UDDESC
|
||||
|
||||
;DONE
|
||||
|
||||
PRDUN: PUSHJ P,CRLF ;SEPARATE THIS CRUFT FROM PREV. WITH CRLF
|
||||
IRPS TYP,,[BLOCKS LINKS]LOC,,[NFBLKS TNLKS]
|
||||
MOVE AA,[SIXBIT /TYP/]
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE A,LOC
|
||||
PUSHJ P,DECTYO
|
||||
PUSHJ P,CRLF
|
||||
TERMIN
|
||||
MOVEI A,14
|
||||
PUSHJ P,TYO
|
||||
.CLOSE LPTC,
|
||||
POPJ P,
|
||||
|
||||
] ;END IFE PROG, CONDITIONAL
|
||||
|
||||
IFE PROG-1,[ ;LIST ALL FILES ON PACK
|
||||
|
||||
PACK: -1 ;INSERT PACK NUMBER HERE FROM DDT
|
||||
|
||||
;ROUTINES:
|
||||
;PRINI ;INITIALIZE
|
||||
;UFDINI ;INITIALIZE FOR THIS USER DIRECTORY
|
||||
;HAKFIL ;PROCESS FILE
|
||||
;UDIRDN ;DONE WITH THIS USER DIRECTORY
|
||||
;PRDUN ;DONE
|
||||
|
||||
PRINI: SKIPGE PACK ;CHECK PACK NUMBER FOR VALIDITY
|
||||
NOPACK: .VALUE ;NO PACK NUMBER SPECIFIED
|
||||
.OPEN LPTC,[1,,SIXBIT / LPTPRUFD WPAPER/]
|
||||
.VALUE
|
||||
INSIRP PUSHJ P,[PAKTYP TIMTYP PAKTYP]
|
||||
JRST CRLF
|
||||
|
||||
PAKTYP: MOVE AA,[SIXBIT /PACK/]
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE A,PACK
|
||||
JRST DECTYO
|
||||
|
||||
UFDINI: SETOM FILCT' ;INITIALIZE FOR USER DIRECTORY: SET SWITCH (MAYBE DON'T PRINT ANYTHING FOR THIS USER)
|
||||
POPJ P,
|
||||
|
||||
HAKFIL: LDB T,[UNPKN,,UNRNDM(F)] ;GET PACK NUMBER
|
||||
CAME T,PACK ;SKIP IF ON PACK BEING CHECKED
|
||||
UDIRDN: POPJ P, ;NOT ON THIS PACK (ALSO ROUTINE FOR DONE WITH THIS DIRECTORY)
|
||||
AOSN FILCT
|
||||
PUSHJ P,HAKFII ;THIS FIRST RELEVANT FILE THIS DIRECTORY
|
||||
MOVE A,UNRNDM(F)
|
||||
TLNN A,UNIGFL ;CHECK TO SEE IF FILE REALLY THERE
|
||||
SKIPA A,SPACE ;YES
|
||||
MOVEI A,"* ;NO
|
||||
PUSHJ P,TYO
|
||||
MOVE AA,(F) ;FN1
|
||||
PUSHJ P,SXTYOT
|
||||
MOVE AA,1(F) ;FN2
|
||||
|
||||
Reference in New Issue
Block a user