Google
 

Trailing-Edge - PDP-10 Archives - BB-FP64A-SB_1986 - 10,7/who/whouni.mac
There are 3 other files named whouni.mac in the archive. Click here to see a list.
	TITLE	UNISCN - UNIT mode scan defaulting for WHO

	SEARCH	WHOMAC

	$SETUP	(UNISCN)

Comment |

This module provides the UNIT mode specific scan defaulting code. Its
only entry point is UNISCN.

|
;               TABLE OF CONTENTS FOR UNISCN
;
;
;                        SECTION                                   PAGE
;    1. UNISCN - Apply STRUCTURE mode specific scan input defaults   3
;    2. Storage...................................................   4
	SUBTTL	UNISCN - Apply UNIT mode specific scan input defaults

;This routine applies the following defaults to the command line
;

UNISCN::SKIPE	.FXEXT(I)		;INSURE NO EXTENSION
	$FATAL	(EIC,<Extension illegal in this context>)

; Check for UNI:
	MOVX	T1,FX.NDV		;AND THE NULL DEVICE BIT
	TDNE	T1,.FXMOD(I)		;DEVICE SPECIFIED?
	JRST	UNISC1			;NO
	SKIPE	.FXNAM(I)		;IS THE FILENAME WORD NON-ZERO?
	$FATAL (MUG,<Multiple unit names given>)
	MOVE	T1,.FXDEV(I)		;GET DEVICE NAME
	PUSHJ	P,UNIMSK		;GENERATE A MASK
	JRST	UNISC4			;ENTER COMMON CODE

; Check for UNI
UNISC1:	SKIPN	T1,.FXNAM(I)		;GET UNIt NAME FROM FILE NAME WORD
	JRST	UNISC3			;THERE ISN'T ONE
	MOVE	T2,.FXNMM(I)		;GET MASK
	CAMN	T2,[EXP -1]		;NEED TO FIX IT UP?
	PUSHJ	P,UNIMSK		;YES--GENERATE NEW MASK
	JRST	UNISC4			;ONWARD

; Check for /UNIT
UNISC3:	SKIPN	T1,.FZSTN##(I)		;GET NAME FROM SWITCH ARGUMENT
	JRST	UNISC4			;NONE GIVEN
	MOVE	T2,.FZSTM##(I)		;GET MASK
	MOVEM	T2,.FXNMM(I)		;STORE
	CAMN	T2,[EXP -1]		;WILDCARDS SPECIFIED?
	PUSHJ	P,UNIMSK		;GENERATE A MASK

; Here to check for conflicts
UNISC4:	CHKSWT	(UNN,UNIT)		;CHECK FOR CONFLICTS
	MOVE	T1,.FXNMM(I)		;GET NAME MASK
	MOVEM	T1,.FZUNM##(I)		;STORE AS UNIT MASK
	POPJ	P,			;AND RETURN
; Here to generate a mask based on the unit name
UNIMSK:	MOVEM	T1,.FXNAM(I)		;UPDATE UNIT NAME
	TRNN	T1,777777		;UNIT NUMBER SPECIFIED?
	JRST	UNIMS1			;NO
	SETOM	.FXNMM(I)		;NO WILDCARDING
	POPJ	P,			;RETURN
UNIMS1:	SETZ	T2,			;CLEAR NEW MASK
	EXCH	T1,T2			;GET STR NAME
	MOVEI	T3,6			;LOOP FOR 6 CHARACTERS
UNIMS2:	LSHC	T1,6			;SHIFT IN A CHARACTER
	TRON	T1,77			;MASK CHARACTER
	TRZ	T1,77			;ELSE MAKE IT LOOK WILD
	SOJG	T3,UNIMS2		;LOOP
	MOVEM	T1,.FXNMM(I)		;STORE IT
	MOVE	T1,.FXNAM(I)		;RELOAD THE NAME
	POPJ	P,			;RETURN
	SUBTTL	Storage

	$LOW

	PRGEND
	TITLE	UNIGET - Get UNIT information

	SEARCH	WHOMAC
	$SETUP	(UNIGET)

;               TABLE OF CONTENTS FOR UNIGET
;
;
;                        SECTION                                   PAGE
;    1. Main UNIT routines
;         1.1   UNINXT - Get the next unit...................   3
;         1.2   UNISET - Setup for a new unit................   4
;         1.3   UNIINC - Handle incremental statistics............   5
;         1.4   UNISRT - Handle unit sorting.................   6
;    2. UNIT tables
;         2.1   Define all unit subfields....................   7
;    3. DATA STORAGE..............................................  12
	SUBTTL	Main UNIT routines -- UNINXT - Get the next unit

UNINXT::JUMPL	O,UNINX1		;JUMP IF THE FIRST TIME
	SKIPL	S.SORT##		;SEE IF /SORT
	 JRST	SRTNXT			;YES--GET NEXT UNIT
	ADDI	O,1			;NO--BUMP TO NEXT
	CAILE	O,LN$UNI		;SEE IF PAST END
	 POPJ	P,			;YES--RETURN
	JRST	UNINX2			;NO--SETUP FOR THIS UNIT

UNINX1:	MOVEI	T1,LN$UNI		;MAX UNIT INDEX
	MOVEM	T1,MAXUNI		;SAVE
	MOVEI	T1,^D10			;SET A HASH TABLE LENGTH
	MOVEI	T2,^D2			;AND SIZE OF ENTRY
	PUSHJ	P,.HASHI##		;INIT IT
	MOVEI	O,0			;START WITH UNIT 0
	SKIPL	T1,S.SORT##		;GET /SORT
	 JRST	UNISRT			;GO PROCESS IF GIVEN

UNINX2:	PUSHJ	P,UNISET		;SETUP FOR THIS UNIT
	 JRST	UNINXT			;NOT ASSIGNED
	JRST	.POPJ1##		;AND RETURN
	SUBTTL	Main UNIT routines -- STRSET - Setup for a new unit

UNISET::SKIPE	JP,UNICOR		;SEE IF CORE ALLOCATED YET
	 JRST	UNIS.C			;YES
	MOVEI	T1,.UBLEN		;NO--GET SIZE
	PUSHJ	P,M$ALLOC##		;GET CORE
	MOVEM	T1,UNICOR		;SAVE STARTING ADDRESS
	MOVEI	JP,(T1)			;AND INTO JP
UNIS.C:	HRLI	T1,(JP)			;GET STARTING ADDRESS
	HRRI	T1,1(JP)		;ENDING ADDRESS
	SETOM	(JP)			;SET FIRST WORD TO -1
	BLT	T1,.UBLEN-1(JP)		;AND SET THEM ALL TO -1
	MOVEI	T1,(O)			;GET UNIT INDEX
	PJRST	UNII2N##		;CONVERT INDEX TO UNIT NAME AND RETURN
	SUBTTL	Main UNIT routines -- UNIINC - Handle incremental statistics

UNIINC::
UNIINJ:	POPJ	P,			;NONE FOR NOW
	SUBTTL	Main UNIT routines -- UNISRT - Handle unit sorting

UNISRT:	PUSHJ	P,.SAVE1##		;SAVE P1
	MOVEI	P1,(T1)			;SAVE SORT INDEX
	MOVE	T1,MAXUNI		;GET MAX UNITS
	IMULI	T1,2			;2 WORD TABLE
	MOVN	T2,T1			;NEGATE INTO T2
	HRLZM	T2,SRTTAB		;SAVE -N,,0
	PUSHJ	P,I$ALLOC##		;GET THE CORE
	HRRM	T1,SRTTAB		;SAVE START
SRTJ.1:	PUSHJ	P,UNISET		;SETUP FOR THIS UNIT
	 JRST	SRTJ.2			;NOT ASSIGNED
	PUSHJ	P,@SUMLOD##(P1)		;GET SORT KEY
	MOVEI	T2,-1(O)		;GET UNIT
	IMULI	T2,2			;DOUBLE
	ADD	T2,SRTTAB		;PLUS START OF TABLE
	MOVEM	T1,(T2)			;SAVE SORT KEY FIELD
	MOVEM	O,1(T2)			;SAVE UNIT INDEX
SRTJ.2:	ADDI	O,1			;BUMP TO NEXT UNIT
	CAMG	O,MAXUNI		;ALL DONE?
	 JRST	SRTJ.1			;NO--ADVANCE TO NEXT
	MOVE	T1,SRTTAB		;GET AOBJN WORD
	MOVE	T2,[400000,,2]		;UNSIGNED AND STRAIGHT SORT
	SKIPLE	S.SORT##+1		;SEE IF DESCENDING
	 TLO	T2,200000		;YES-SET FLAG
	PUSHJ	P,.SORT2##		;SORT THE LIST
	MOVE	T1,SRTTAB		;GET AOBJN
	MOVEM	T1,SRTPTR		;SAVE
	SETZM	SRTCNT			;NO UNITS YET
	JRST	UNINXT			;AND BACK TO THE TOP


SRTNXT:	SKIPL	T1,SRTPTR		;GET POINTER
	 POPJ	P,			;ALL DONE
	SKIPN	O,1(T1)			;GET UNIT INDEX
	 JRST	UNIS.1			;NONE
	PUSHJ	P,UNISET		;SETUP FOR THIS UNIT
	 JRST	UNIS.1			;NOT ASSIGNED NOW?
	AOS	T1,SRTCNT		;COUNT THE UNITS
	CAMLE	T1,S.SORT##+2		;IN RANGE?
	 POPJ	P,			;NO--STOP NOW
	MOVE	T1,[2,,2]		;ADVANCE POINTER
	ADDM	T1,SRTPTR		;TO NEXT PAIR
	JRST	.POPJ1##		;AND USE THAT J

UNIS.1:	MOVE	T1,[2,,2]		;ADVANCE POINTER
	ADDM	T1,SRTPTR		;TO NEXT PAIR
	JRST	SRTNXT			;AND GET NEXT
	SUBTTL	UNIT tables -- Define all unit subfields

; This macro fetches a sub-field about the unit. If the field has been
; gotten before, it simply returns the known field. If the field has
; not been gotten before, it it derived/computed, stored for later
; use, and returned.
;
; In all cases, the field will be returned in T1, and set in table
; .UBxxx (flag UB%xxx indicates if the field has been gotten)

DEFINE	UB$(X,N<1>),<
   XLIST
	UB%'X==.UBLEN			;;FLAG WORD
	.UB'X==.UBLEN+1			;;DATA WORD
	.UBLEN==.UBLEN+2
IFG N-1,.UBLEN==.UBLEN+N
	UB$'X::	AOSN	UB%'X(JP)	;;DO WE HAVE THE INFO?
		 JRST	UB1'X		;;NO--GO GET IT
		MOVE	T1,.UB'X(JP)	;;YES--JUST GET IT NOW
		POPJ	P,		;;AND RETURN
	UB1'X:				;;(HERE TO GET INFO)
   DEFINE END$,<
	XLIST
	MOVEM	T1,.UB'X(JP)		;STORE
	POPJ	P,			;AND RETURN
	LIST
   >
   LIST
>;END DEFINE

	.UBLEN==0
UB$(ALT)	;ALTERNATE PORT
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCALT(T1)		;GET ALTERNATE PORT
	END$

UB$(BRC)	;BUFFERED READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCBRC(T1)		;GET BUFFERED READS
	END$

UB$(BWC)	;BUFFERED WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCBWC(T1)		;GET BUFFERED WRITES
	END$

UB$(CBK)	;CACHED BLOCKS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCBK(T1)		;GET CACHED BLOCKS
	END$

UB$(CER)	;CHECKSUM/CONSISTANCY ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCER(T1)		;GET CHECKSUM/CONSISTANCY ERRORS
	END$

UB$(CRC)	;CACHED READ CALLS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCRC(T1)		;GET CACHED READ CALLS
	END$

UB$(CRH)	;CACHED READ HITS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCRH(T1)		;GET CACHED READ HITS
	END$

UB$(CWC)	;CACHED WRITE CALLS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCWC(T1)		;GET CACHED WRITE CALLS
	END$

UB$(CWH)	;CACHED WRITE HITS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCCWH(T1)		;GET CACHED WRITE HITS
	END$

UB$(DET)	;DETACHED ALTERNATE PORT
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCDET(T1)		;GET DETACHED ALTERNATE PORT
	END$

UB$(DRC)	;DUMP READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCDRC(T1)		;GET DUMP READS
	END$

UB$(DWC)	;DUMP WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCDWC(T1)		;GET DUMP WRITES
	END$

UB$(ECT)	;RETRIES ON LAST ERROR
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCECT(T1)		;GET RETRIES
	END$

UB$(ERR)	;2CONI
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCERR(T1)		;GET CONI WORD AFTER RETRY
	END$

UB$(FKS)	;FREE K OF SWAP SPACE REMAINING
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCFKS(T1)		;GET FREE K OF SWAP SPACE
	END$

UB$(FRB)	;FREE BLOCKS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCUNT(T1)		;GET BLOCKS FREE
	END$

UB$(FRS)	;FREE SWAPPING SPACE
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCUNT(T1)		;GET FREE SWAPPING SPACE
	END$

UB$(HBN)	;LBN
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCHBN(T1)		;GET LOGICAL BLOCK NUMBER OF ERROR
	END$

UB$(HDI)	;2DATAI
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCHDI(T1)		;GET DATAI WORD AFTER RETRY
	END$

UB$(HDT)	;HARD DATA ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCHDT(T1)		;GET HARD DATA ERRORS
	END$

UB$(HDV)	;HARD DEVICE/SEARCH ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCHDV(T1)		;GET HARD DEVICE/SEARCH ERRORS
	END$

UB$(LOG)	;LOGICAL UNIT NAME
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCULN(T1)		;GET LOGICAL UNIT NAME
	END$

UB$(MRC)	;MONITOR READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCMRC(T1)		;GET MONITOR READS
	END$

UB$(MWC)	;MONITOR WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCMWC(T1)		;GET MONITOR WRITES
	END$

UB$(MSC)	;MONITOR SEEKS (MONITOR I/O + SWAPPING)
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVEI	T1,0
;	MOVE	T1,.DCMSC(T1)		;GET NUMBER OF SEEKS
	END$

UB$(NHG)	;NON-RECOVERABLE TRANSFER HUNG ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCNHG(T1)		;GET NON-RECOV XFER HUNG ERRORS
	END$

UB$(NUS)	;NEXT UNIT WITHIN FILE STRUCTURE
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCNUS(T1)		;GET NEXT UNIT
	END$

UB$(PHG)	;POSITION HUNG ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCPHG(T1)		;GET POSITION HUNG ERRORS
	END$

UB$(PRC)	;PAGING READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCPRC(T1)		;GET PAGING READS
	END$

UB$(PWC)	;PAGING WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCPWC(T1)		;GET PAGING WRITES
	END$

UB$(RER)	;RIB ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCRER(T1)		;GET RIB ERRORS
	END$

UB$(SER)	;SAT ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSER(T1)		;GET SAT ERRORS
	END$

UB$(SDI)	;1DATAI
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSDI(T1)		;GET DATAI WORD BEFORE RETRY
	END$

UB$(SDT)	;SOFT DATA ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSDT(T1)		;GET SOFT DATA ERRORS
	END$

UB$(SDV)	;SOFT DEVICE/SEARCH ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSDV(T1)		;GET SOFT DEVICE/SEARCH ERRORS
	END$

UB$(SHG)	;SOFTWARE HUNG ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSHG(T1)		;GET SOFTWARE HUNG ERRORS
	END$

UB$(SOF)	;1CONI
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSOF(T1)		;GET CONI WORD BEFORE RETRY
	END$

UB$(SRC)	;SWAPPING READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSRC(T1)		;GET SWAPPING READS
	END$

UB$(SWC)	;SWAPPING WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSWC(T1)		;GET SWAPPING WRITES
	END$

UB$(STR)	;STRUCTURE NAME
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCSNM(T1)		;GET STRUCTURE NAME
	END$

UB$(THG)	;TRANSFER HUNG ERRORS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCTHG(T1)		;GET TRANSFERFER HUNG ERRORS
	END$

UB$(TSC)	;TOTAL SEEKS
	PUSHJ	P,UB$MSC		;GET MONITOR SEEKS
	PUSH	P,T1			;SAVE COUNT
	PUSHJ	P,UB$USC		;GET USER SEEKS
	ADDM	T1,(P)			;ACCUMULATE
	POP	P,T1			;RESTORE TOTAL COUNT
	END$

UB$(UID)	;UNIT-ID
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVE	T1,.DCUID(T1)		;GET LOGICAL UNIT NAME
	END$

UB$(UNN)	;UNIT NAME
	MOVEI	T1,(O)			;GET UNIT INDEX
	PUSHJ	P,UNII2N##		;CONVERT TO UNIT NAME
	  MOVEI	T1,0			;NO SUCH UNIT
	END$

UB$(USC)	;USER SEEKS (BUFFERED AND DUMP)
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVEI	T1,0
;	MOVE	T1,.DCUSC(T1)		;GET NUMBER OF SEEKS
	END$

UB$(XRC)	;EXTENDED RIB READS
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVEI	T1,0
;	HRRZ	T1,.DCXRA(T1)		;GET EXTENDED RIB READS
	END$

UB$(XWC)	;EXTENDED RIB WRITES
	PUSHJ	P,UB$DCH		;GET DISK CHARACTERISTICS
	MOVEI	T1,0
;	HLRZ	T1,.DCXRA(T1)		;GET EXTENDED RIB WRITES
	END$

UB$(DCH,.DCMAX+2)	;DISK CHARACTERISTICS BLOCK
	PUSHJ	P,UB$UNN		;GET UNIT NAME
	MOVEM	T1,.UBDCH+2+.DCNAM(JP)	;SAVE IN ARG BLOCK
	MOVSI	T1,.DCMAX		;ARG BLOCK LENGTH
	HRRI	T1,.UBDCH+2(JP)		;ARG BLOCK ADDRESS
	PUSHJ	P,UDSKCHR##		;GET DISK CHARACTERISTICS
	  TDZA	T1,T1			;FAILED FOR SOME REASON
	MOVEM	T1,.UBDCH+1(JP)		;SAVE STUFF RETURNED IN THE AC
	MOVEI	T1,.UBDCH+2(JP)		;POINT TO DSKCHR BLOCK
	END$
	SUBTTL	DATA STORAGE

	$LOW

UNICOR::BLOCK	1
MAXUNI:	BLOCK	1
SRTTAB:	BLOCK	1
SRTPTR:	BLOCK	1
SRTCNT:	BLOCK	1

	END