Google
 

Trailing-Edge - PDP-10 Archives - AP-4172F-BM - 3a-sources/info.mac
There are 24 other files named info.mac in the archive. Click here to see a list.
;<3-UTILITIES>INFO.MAC.3, 16-Nov-77 14:24:15, EDIT BY KIRSCHEN
;UPDATE VERSION NUMBERS FOR RELEASE 3
;<3-UTILITIES>INFO.MAC.2,  8-Nov-77 10:47:28, EDIT BY KIRSCHEN
;MORE COPYRIGHT UPDATING...
;<3-UTILITIES>INFO.MAC.1, 26-Oct-77 11:05:05, EDIT BY KIRSCHEN
;UPDATE COPYRIGHT FOR RELEASE 3
;<2-UTILITIES>INFO.MAC.8, 31-Jan-77 15:17:30, EDIT BY MILLER
;FIX FREE SPACE BUGS
;<2-UTILITIES>INFO.MAC.7, 27-Dec-76 17:06:16, EDIT BY HURLEY
;<2-UTILITIES>INFO.MAC.6, 22-Dec-76 13:46:08, EDIT BY HURLEY
;<2-UTILITIES>INFO.MAC.5, 13-Sep-76 16:23:53, EDIT BY MILLER
;MORE CHANGES FOR MULTIPLE STRUCTURES
;<2-UTILITIES>INFO.MAC.4, 13-Sep-76 13:57:45, EDIT BY MILLER
;MORE OF THE SAME
;<2-UTILITIES>INFO.MAC.3, 13-Sep-76 10:28:00, EDIT BY MILLER
;REWRITE SCAN ROUTINE FOR MULTIPLE STRUCTURES
;<1A-UTILITIES>INFO.MAC.19,  6-MAY-76 11:37:02, EDIT BY HURLEY
;<1A-UTILITIES>INFO.MAC.18,  6-MAY-76 10:56:48, EDIT BY HURLEY
;<1A-UTILITIES>INFO.MAC.14,  8-APR-76 11:10:59, EDIT BY HURLEY
;TCO 1244 - ADD .DIRECT .XTABM FOR MACRO 50 ASSEMBLIES
;<1A-UTILITIES>INFO.MAC.13, 31-MAR-76 10:13:06, EDIT BY HURLEY
;TCO # 1227 - ADD TOPS-20 ENTRY VECTOR AND VERSION NUMBER
	TITLE INFO



;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976, 1977, 1978 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

	IFNDEF .PSECT,<
	.DIRECT .XTABM>

REPEAT 0 ,<
THIS IS [SYSTEM]INFO FOR TOPS-20. IT PERFORMS THE NECESSARY 
FUNCTION OF MAPPING GENERIC NAMES OT PIDS. ALSO IT SUPPORTS THE
ONE PRIVILEGED FUNCTION OF DISASSOCIATING NAMES FROM
PIDS WHICH ARE BEING DROPPED. NONE OF THE OTHER PRIVILEGED TOPS10
INFO FUNCTIONS ARE SUPPORTED AS THE MUTIL JSYS REPLACES THESE
CLUMSY AND INEFFICIENT FUNCTIONS.  ALSO, THE FOLLOWING ENHANCEMENTS HAVE
BEEN MADE TO INFO:

	1) GENERIC NAMES MAY BE OF ANY LENGTH.
	2) GENERIC NAMES MAY CONTAIN DIRECTORY NAMES BETWEEN
	  THE SQUARE BRACKETS.
	3) ANGLE BRACKETS ARE ACCEPTABLE IN GENERIC NAMES

>

; VERSION NUMBER DEFINITIONS

VMAJOR==3		;MAJOR VERSION OF INFO
VMINOR==0		;MINOR VERSION NUMBER
VEDIT==4		;EDIT NUMBER
VWHO==0			;GROUP WHO LAST EDITED PROGRAM (0=DEC DEVELOPMENT)

VINFO== <VWHO>B2+<VMAJOR>B11+<VMINOR>B17+VEDIT

DEFINE FATAL (MESSO) <
	JRST [	HRROI A,[ASCIZ /?'MESSO'
/]
		PSOUT
		HALTF]
>
DEFINE VERSIZ (LEN,VALU)<		;;DO SIZE VERFICATION
	IFIDN <VALU>,<>,<MOVEI A,<.IPCUF>_6> ;;DEFAULT ERROR
	IFDIF <VALU>,<>,<MOVEI A,<VALU>_6> ;;USE PROVIDED VALUE
	HLRZ B,MESSER		;;GET SIZE OF RECEIVED MESSAGE
	CAIGE B,LEN		;;BIG ENOUGH?
	JRST NACK1		;;NO. FOO ON IT
>
DEFINE ERROR (MESSO) <
	JRST [	HRROI A,[ASCIZ /?'MESSO'
/]
		PSOUT
		MOVE P,[IOWD STKSIZ,STACK]
		MOVEI A,.PRIOU
		MOVE B,[.FHSLF,,-1]
		ERSTR
		 JFCL
		 JFCL
		JRST TRYAGN]
>
	SEARCH MONSYM,MACSYM
	SALL

;DEFINE REGISTERS

F==0
A==1
B==2
C==3
D==4
W==5
W1==6
W2==7
W3==10
W4==11
W5==12
P==17

;DEFINE SOME USEFUL OPDEFS
OPDEF CALL [PUSHJ P,]
OPDEF RET [POPJ P,]

;DEFINE HEADER OFFSETS

NODE==2
STRING==2
PID==1
SIZZ==0
;DEFINE CODES

IPCSN%==67
IPCDU%==6
IPCDD%==7
IPCRS%==10
IPCRR%==11
IPCRY%==12
IPCPI%==15
IPCUF%==16
IPCFF%==72
IPCBP%==74
IPCDN%==75
IPCNN%==76
IPCEN%==77
IPCCF%==.IPCCF			;SENT BY INFO VALUE


;DEFINE MUTIL FUNCTIO CODES

MU.INP==.MUGTI			;GET INFO PID
MU.CRE==.MUCRE			;CREATE ^ PID
MU.JOB==.MUFOJ			;GET JOB NO OF A PID
MU.PID==.MUFJP			;GET PIDS OF A JOB
MU.QUR==.MUQRY			;QUERY
MU.PSI==.MUPIC			;DIDDLE PSI FOR PID
MU.INF==.MUDFI			;MAKE ME INFO

;DEFINE LOCAL STORAGE

TSTDIR:	ASCIZ /PS:</
	BLOCK 11		;BUFFER FOR TESTING DIR NAME
ADD1:	Z 0
LEVTAB:	Z ADD1
	Z ADD1
	Z ADD1			;LEVEL TABLE FOR INTS
CHNTAB:	1,,GOTONE		;INT FOR PACKET READY
STKSIZ==30			;PDL SIZE
STACK:	BLOCK STKSIZ		;RESERVE THE STACK
OUTTER:	Z 0
	BLOCK 3			;SSEND BLOCK
HEATER:	Z MU.QUR
HEADER:	Z 0			;MESSAGE RECEIVE BLOCK
SEND:	Z 0			;SENDER'S PID
RCVPID:	Z 0			;MY PID
MESSER:	XWD 1000,MESBUF		;FOR GETTINGF A MESSAGE
DIRS:	Z 0			;LOGGED IN DIR
PRIVS:	Z 0			;PRIVILEGES
CDIRS:	Z 0			;CONNECTED DIR
MYPID:	Z 0			;SAVE MY PID
MSGBUF==676000
MESBUF==MSGBUF			;PUT ON PAGE BOUNDARY
FRESIZ==3000			;3 PAGES OF FREE SPACE
USEHD:	Z 0			;HEADER FOR IN USE BLOCKS
FREHD:	Z 0			;FRRE SPACE JEADER
SENDQ:	Z 0			;THE SEND QUEUE
CPYPID:	Z 0			;PID TO GET C OPY OF REPLY
MAXTRY==5			;MAX TRIES FOR HIS QUTA OVER
	RELOC 1000-140		;WHERE CODE STARTS

;PROGRAM ENTRY VECTOR

ENTVEC:	JRST INFO		;STARTING LOCATION
	JRST INFO		;REENTER LOCATION
	VINFO			;VERSION NUMBER

;THESE ARE THE FREE SPACE MANIPULATION ROUTINES. THEY DESTROY
;ALL OF THE WORK REGISTERS. ALLOC GETS (A) WORDS FORM THE
;POOL AND RETURNS A POINTER IN A. DEALL RETURNS THE BLOCK POINTED TO
;BY A.
;ALLOC WILL USE THE SMALLEST BLOCK OF AVAILABLE STORAGE
;TO SATISFY THE REQUEST. UNUSED PORTIONS OF FREE BLOCKS ARE LEFT
;ON THE QUEUE.

;DEALL WILL MERGE TOGETHER ADJACENT BLOCKS ON EACH RETURN OF
;A BLOCK

ALLOC:	SETZB W4,W5		;POINTER AND SIZE OF BLOCK
	MOVEI W,FREHD		;WHERE IT ALL STARTS
LOOK:	HRRZ W2,(W)		;WHERE NEXT BLOCK IS
	JUMPE W2,FINAL		;AT THE END. LOOK AT WHAT WE HAVD
	HLRZ W1,(W2)		;COUNT
	CAIN W1,(A)		;EXACT MATCH?
	JRST USEIT		;YES. DO IT
	CAIG W1,(A)		;BIG ENOUGH?
	JRST NOPE		;NO. FOO

;FOUND A CANDIDATE. SEE IF HE'S BETTER THAN THE LAST

	SKIPE W5		;GOT ONE YET?
	CAIGE W1,(W5)		;YES. THIS ONE BETTER?
	SKIPA W5,W1		;YES. USE IT
	JRST NOPE		;NO
	MOVE W4,W		;REMEMBER POINTER
NOPE:	HRRZ W,(W)		;GET NEXT BLOCK
	JRST LOOK		;GO PROCESS IT
FINAL:	SKIPN W1,W5		;FOUND A GOOD ONE?
	RET			;NO. BOMB TIME
	MOVE W,W4		;POINTER
USEIT:	HRRZ W4,(W)		;AREA TO ALLOCATE
	MOVNI W1,(A)		;NUMBRE OF WORDS NEEDED
	HRLZS W1		;NEGATIVE TO LEFT HALF
	ADD W1,(W4)		;DO IT
	ADDI W4,(A)		;WHERE NRW BLOCK IS
	TLNN W1,-1		;ANYTHING LEFT IN THE BLOCK?
	JRST [	HRRZ W4,0(W)	;NO. GET THE BLOCK ADDRESS AGAIN
		HRRZ W4,0(W4)	;AND GET NEXT BLOCK ON THE FREE LIST
		JRST USEI1]	;AND MAKE THIS NEXT
	MOVEM W1,0(W4)		;YES. MAKE IT A NEW BLOCK
USEI1:	HRRZ W5,(W)
	HRLZM A,(W5)		;ASSIGNED BLOCK
	HRRM W4,(W)		;LINK IN NEW FREE BLOCK
	MOVEI A,(W5)		;WHAT WE ASSIGNED
	AOS (P)
	RET			;GOOD RETURN
;THIS IS THE DEALLOCATE CODE. INPUT IS A=POINTER TO BLOCK

DEALL:	MOVEI W,FREHD
LOOK1:	HRRZ W1,(W)		;BLOCK HEAD
	JUMPE W1,HERE		;IF AT THE END IT GOES HERE
	CAIL W1,(A)		;PAST THIS BLOCK?
	JRST HERE		;YES. PU IT IN HERE
	MOVE W,W1		;NO. STEP
	JRST LOOK1		;GO DO MORE
HERE:	CAIN W,FREHD		;AT THE TOP?
	JRST LNKDWN		;YES. CANT MERGE UP
	HLRZ W1,(W)		;GET SIZE OF PREVIOUS
	ADDI W1,(W)		;TO THE END
	CAIE W1,(A)		;UP TO THE BLOCK RELEASING?
	JRST LNKDWN		;NO. LINK IT IN
	HLRZ W2,(A)		;DO THE MERGE
	HLRZ W1,(W)
	ADDI W1,(W2)		;NEW TOTAL SIZE
	SETZM (A)		;BLOT OUT THIS HEADER
	HRLM W1,(W)		;NEW COUNT
	JRST SEEDWN		;TRY TO MERGE DOWN
LNKDWN:	HRRZ W2,(W)		;LINK TO NEXT
	HRRM A,(W)		;PUT THIS NEW BLOCK IN
	HRRM W2,(A)		;AND PUT OLD LINK IN IT
	MOVE W,A		;NEW BASE BLOCK
SEEDWN:	HLRZ W1,(W)		;COUNRT
	ADDI W1,(W)		;END OF THIS BLOCK
	HRRZ W2,(W)		;NEXT BLOCK
	CAIE W1,(W2)		;THIS IT?
	RET			;NO. DONE
	HLRZ W3,(W2)		;YES. MUST MERGE THEM
	HLRZ W1,(W)		;COUNT OF PREVIOUS
	ADDI W3,(W1)		;NEW COUNT OF MERGED BLOCKS
	HRLM W3,(W)
	HRRZ W3,(W2)		;ITS LINK
	HRRM W3,(W)		;NEW DOWN LINK FOR THIS GUY
	SETZM (W2)		;CLEAR IT
	RET			;ALL DONE

;TRANSFER TABLE FOR INFO FUNCTIONS

TABLE:	IPCIW			;FIND PID FO NAME
	IPCIG			;FIND NAME FOR PID
	IPCII			;ASSIGN TEMP NAME
	IPCIJ			;ASSIGN PERMANENT NAME
	NACK
	NACK
	NACK
	REPEAT 5,<NACK>		;UNIMPLEMENTED FUNCTIONS
	IPCIS			;IPCC NOTICE
MAXFNC==.-TABLE			;MAXIMUM FUNCTION NUMBER

;THIS ROUTINE TAKES AN ASCIZ NAME AND VERIFIESS IT AND
;PACKS IT INTO N CONTIGUOUS WORDS.

NAME1:	TDZA F,F		;NO SYNTAX PLEASE
NAME:	MOVEI F,1		;SYNTAX TOO
	MOVE W,[POINT 7,MESBUF+2] ;POINTER TO THE NAME
SCAN:	ILDB W1,W		;GET BYTE
	JUMPE W1,ALLDNE		;AT THE END
	SKIPN F			;SYNTAX TOO?
	JRST SCAN		;NO. JUST DO NAME
	CAIE W1,"<"		;DIRECTORY SPECIFIED?
	CAIN W1,"["		;"
	JRST INDIR		;YES. MUST VERIFY IT
	JRST SCAN		;CONTINUE
INDIR:	MOVE W5,[POINT 7,TSTDIR,20] ;GET POINTER FOR NAME
	IDPB W1,W5		;STORE THE PUNCTUATION
INDIR1:	ILDB W1,W		;NEXT BYTE
	IDPB W1,W5		;SAVE BYTE
	JUMPE W1,POPJ1		;ILLEGAL SYNTAX
	CAIE W1,">"		;END OF NAME?
	CAIN W1,"]"		;SAME HERE
	SKIPA
	JRST INDIR1
	MOVE W3,PRIVS		;LLOOK AT HIS PRIVILEGES
	TRNE W3,600000		;WHEEL OR OPERATOR?
	JRST SCAN		;YES. DONT VERIFY
	MOVE A,W5		;MOVE POINTER
	SETZ W1,		;GET A NULL
	IDPB W1,A		;TIE OFF THE STRING
	MOVX A,RC%EMO		;MAKE EXACT MATCH ONLY
	HRROI B,TSTDIR		;THE STRING
	RCDIR			;GO SEE IF IT EXISTS
	 ERJMP FINE		;NOT A DIR.
	TXNE A,RC%NOM!RC%AMB	;FOUND IT?
	JRST FINE		;NO. GIVE UP THEN
	CAMN C,CDIRS		;IS THIS THE JOB'S CONNECTED DIR?
	JRST FINE		;YES. ALL DONE THEN
	DPB W1,W5		;TIE OFF STRING FOR USER NUMBER
	MOVX A,RC%EMO		;EXACT MATCH AGAIN
	MOVE B,[POINT 7,TSTDIR,27] ;WHERE STRING IS
	RCUSR			;GET USER NAME
	 ERJMP POPJ1		;IF ERROR, DISALLOW THIS NAME
	TXNE A,RC%NOM!RC%AMB	;FOUND IT?
	JRST POPJ1		;NO. DISALLOW IT THEN
	CAME C,DIRS		;IS THIS THE LOGGED IN DIR?
	JRST POPJ1		;NO. ERROR THEN
FINE:	JRST SCAN		;AND GO ON
ALLDNE:	MOVEI A,(W)		;WHERE IRT ENDED
	SUBI A,MESBUF+1		;WORDSS IN TEXT
	TLNE W,200000		;SEE IF NULL IS AT START OF A WORD
	TLNN W,100000		;"
	SKIPA			;ITS NOT. USE CURRENT COUNT
	JRST [	SOSE A		;IT IS. DECREMENT AND VERIFY
		AOS (P)		;MORE THAN ZERO WORDS
		RET]		;DONE
	AOS (P)
	LDB D,[POINT 6,W,5]	;GET BYTE POSITION
	SETZ B,			;WHERE MASK WILL BE ACCUMULATED
	SETO C,			;A WORD FULL OF BITS
	LSHC B,0(D)		;BUILD MASK
	ANDCAM B,0(W)		;GET RID OF EXTRANEOUS BITS
POPJ1:	POPJ P,			;AND DONE

;ROUTINE TO LOOK UP AN ASCIZ NAME IN ASSIGNED BLOCKS
;RETURNS A=BLOCK FOUND. W=POINTER TO PREVIOUS

LOOKUP:	MOVEI W,USEHD		;THE HEAD OF THEM ALL
LOOK2:	HRRZ W1,(W)		;GET NEXT ITEM
	JUMPE W1,POPJ1		;FAILED TO FIND IT
	JUMPL B,[CAME A,PID(W1) ;PID MATCH?
		JRST MORE 	;NO
		JRST GOOD]
	HLRZ W4,SIZZ(W1)	;GET COUNT OF THIS ONE
	SUBI W4,NODE		;DATA CONTENTS ONLY
	CAIE B,(W4)		;SAME SIZE?
	JRST MORE		;NO. GET MORE
	MOVEI W2,STRING(W1)	;WHERE STRING IS
	MOVE W5,A
CMPAR:	MOVE W3,(W5)		;NEXT WORD
	CAME W3,(W2)		;MATCH?
	JRST MORE		;NO
	AOS W5
	AOS W2
	SOJG W4,CMPAR		;DO ALL
GOOD:	MOVE A,W1
	AOS (P)
	RET			;FOUND A MATCH
MORE:	MOVE W,W1		;GO ON
	JRST LOOK2

;BEGINNING OF INFO

INFO:	MOVEI A,400000
	MOVE B,[LEVTAB,,CHNTAB]	;FOR INTS
	SIR			;ESTABLISH INTS
	MOVNI B,1
	DIC			;DISSBALE EVERYTHING
	MOVSI B,(1B0)		;IPCF CHANNEL
	AIC			;ACTIVATE
	MOVE A,44		;FIRST FREE PAGE -1
	MOVEI A,1(A)		;FIRST FREE PAGE
	MOVEM A,FREHD		;INIT FREE SPACE HEADER
	MOVEI B,MSGBUF		;END OF FREE SPACE
	SUBI B,(A)		;SIZE OF FREE PSACE
	HRLM B,(A)		;INIT FREE SPACE
	MOVE P,[IOWD STKSIZ,STACK] ;INIT PDL

	MOVEI W,MU.INP		;MAKE SURE NO INFO AROUND
	MOVEI A,3
	MOVEI B,W		;WHERE STUFF IS
	SETO W1,		;FOR ME ONLY
	MUTIL			;GET INFO'S PID
	 SKIPA			;OK
	FATAL <[SYSTEM]INFO ALREADY EXISTS>
	MOVEI W,.MUSPQ		;SET PID QUOTAS
	MOVEI W2,777		;MAX NUMBER OF PIDS
	MUTIL			;GO SET THEM
	 MOVEI A,3		;RESTORE THIS
	MOVEI W,MU.CRE		;GET ME A PID
	MOVEI W1,400000		;TEMP
	MUTIL			;GET IT
	 FATAL <INFO: COULD NOT ASSIGN A PID>
	MOVEM W2,MYPID		;STASH
;NOW DECLARE ME TO BE [SYSTEM]INFO

	MOVE W1,W2		;ARG TO LOC+1
	MOVEI W,MU.INF		;THE FUNCTION TO DO IT
	MUTIL			;AND DO IT
	 FATAL <INFO: COULD NOT SET UP TO BE INFO>

;NOW PUT THE PID ON CHANNEL 0

	MOVEI A,3		;PACKET SIZE
	MOVEI B,W		;PACKET ADDRESS
	MOVEI W,MU.PSI		;THE PSI FUNCTION
	MOVE W1,MYPID		;THE PID TO INT ON
	SETZ W2,		;ONTO CHANNEL 0
	MUTIL			;DO IT
	 JFCL			;SHOULD GO .IF NO,C'EST LA VIE
;NOW SEND EVERYONE THE INFO STATUP MESSAGE

	MOVE A,[SIXBIT/JOBTTY/]	;GET NO OF JOBS IN SYSTEM
	SYSGT			;GET IT
	 JFCL
	HLLZ W,B		;SAVE COUNT
	MOVEI A,<IPCCF%>B32+<IPCSN%>B29	;THIS IS FROM INFO
	MOVEM A,OUTTER
	SETZM MSGBUF		;CLEAR MEAAGE WORD
DOJOB:	MOVEI W1,MU.INP		;GET HIS INFO PID
	MOVEI W2,(W)
	MOVEI A,3
	MOVEI B,W1
	MUTIL			;DO IT
	 JRST NOPID		;IMPOSSIBLE,BUT DONT PANIC IF IT HAPPENS
	CAME W3,MYPID		;AM I HIS INFO?
	JRST NOPID		;NO. FORGET HIM THEN
	MOVEI W1,MU.PID		;GET PED FOR JOB FUNCTION
	MOVEM W1,MSGBUF+1
	HRRZM W,MSGBUF+2	;THE JOB NUMBER
	MOVEI A,777		;WORD COUNT
	MOVEI B,MSGBUF+1	;THE PACKET
	MUTIL			;GET THE PIDS
	 JRST NOPID		;NO PID FOR YHIS JOB
	MOVEI A,MSGBUF+3	;START OF PIDS
	PUSH P,W		;SAVE JOB INDEX
LOOP:	SKIPN B,(A)		;A PID?
	JRST NOPID1		;NO. END OF LIST
	ADDI A,2		;NEXT ENTRY
	CAMN B,MYPID		;IS IT ME?
	JRST LOOP		;YESS. IGNORE IT
	PUSH P,A		;SAVE PID POINTER
	MOVEM B,SEND		;FAKE OUT SENDIT
	MOVEI B,1		;ONE WORD MESSAGE
	CALL SENDIT		;SEND OFF THIS MESSAGE
	POP P,A			;GET PID POINTER
	JRST LOOP		;GO DO NEXT ONE
NOPID1:	POP P,W			;GET BACK JOB INDEX
NOPID:	AOBJN W,DOJOB		;DO ALL JOBS
;READY TO PROCESS REQUESSTS

TRYAGN:	MOVEI A,7
	MOVEI B,HEATER
	MOVE W1,MYPID
	MOVEM W1,HEADER		;THE ARG TO THE FUNCTION
	MUTIL			;GET NEXT REQUEST IN QUEUE
	 JRST NONE		;NONE THERE
	MOVE A,[1000,,MESBUF]	;YES
	MOVE B,HEADER		;GET THE RETURNED HEADER
	TRNE B,IP%CFV		;PAGE MODE?
	HRRI A,<MESBUF>_<-11>	;YES. PLUG IN PAGE NUMBER
	MOVEM A,HEADER+3	;WHERE TO PUT NEXT MESSAGE
	MOVSI A,(IP%CFB)	;DONT BLOCK
	IORM A,HEADER		;TO THE HEADER
	MOVEI A,7		;# OF WORDS IN HEADER
	MOVE B,MYPID		;GET MY PID
	MOVEM B,RCVPID		;PUT IN AS RECEIVER
	MOVEI B,HEADER
	MRECV			;GET NEXT REQUEST.
	 ERROR <IMPOSSIBLE RETURN FROM MRECV>
	MOVE A,HEADER		;GET HEADER
	MOVE C,PRIVS		;LOOK AT HIS PRIVILEGES
	SKIPN SEND		;DID HE IDENTIFY HIMSELF?
	TRNE C,600000		;NO. IS HE PROVILEGED?
	SKIPA			;DO IT
	JRST [	TRNE A,<.IPCCC>B32 ;FROM MONITOR?
		JRST .+1	;YES. DO I