
	.TITLE *** AUTO-REMOVE ***

/
/ COPYRIGHT (C) 1976

/ DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

/

/ THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY

/ ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH

/ THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS

/ SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-

/ VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON

/ EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO

/ THESE LICENSE TERMS.  TITLE TO AND OWNERSHIP OF THE

/ SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.

/

/ THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE

/ WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-

/ MITMENT BY DIGITAL EQUIPMENT CORPORATION.

/

/ DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY

/ OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY

/ DEC.

/

	.EJECT

/ EDIT #6

/

/ EDIT #16 MAY-11-76 (SCR) ATTEMPT SAVE-REMOVE-INSTALL FIX

/ EDIT #17 MAY-12-76 (SCR) IDENTIFY ON DISK BLOCK NOT NAME
/ EDIT #18 MAY-13-76 (SCR) FURTHER CLEANUP
/ EDIT #19 MAY-17-76 (SCR) MISMATCHED JMP*
/ EDIT #20 MAY-17-76 (SCR) LOST LINK IN SLEIGHT OF HAND
/ EDIT #21 MAY-18-76 (SCR) BOUNDARY BUG
/ EDIT #22 MAY-18-76 (SCR) INIT PROBLEM
/ 

/

/ THIS TASK IS USED TO IMPLEMENT THE 'EXECUTE' CAL OR DIRECTIVE.

/ 

/ AUTORM REMOVES TASKS IN THE STL WHICH MEET THE FOLLOWING REQUIREMENTS

/	1. THE TASK MUST HAVE THE 'DONE' BIT SET

/	2. THE TASK MUST HAVE THE 'REMOVE ON EXIT' BIT SET

/	3. THE TASK MUST NOT BE ACTIVE

/

 .TITLE *** AUTO-REMOVE TASK ***

/

MCRRI=171

DEBUG=156		/(017)DEBUG FLAG IN .SCOM

FAC=174

SNAM=123

.ENB=705521

.INH=705522

POOL=240

NADD=107

NDEL=112

R1=101

R2=102

STKL=242

X10=10

P.TC=47

REMBLK=311	/FIRST BLOCK FOR REMOVE CHAIN

IDX=ISZ

ECLA=641000

/

BEGIN	LAC	(START	/GET THE XR ADJUSTMENT

	AND	(070000

	DAC	XRPAGE

	TCA

	DAC	XRADJ

START	LAC	(STKL	/PREPARE TO SCAN THE STL

	JMS	SETXR

	DZM	REMNAM+2	/ZERO THE TASK NAME

	DZM	REMNAM+3

NEXTN	LAC	0,X	/END OF STL?

	SAD	(STKL

	JMP	EXIT	/YES -- EXIT

	JMS	SETXR	/NO -- ACCESS NEXT NODE

	LAC	4,X	/GET THE FLAGS WORD

	SPA		/IS THE TASK ACTIVE?

	JMP	NEXTN	/YES -- CONSIDER NEXT NODE

	AND	(204000	/NO --

	SAD	(204000	/ARE THE ROE AND DONE BITS SET?

	SKP

	JMP	NEXTN	/NO -- EXAMINE NEXT NODE

	LAC	2,X	/YES -- SET THE NAME UP FOR REMOVEAL

	DAC	REMNAM+2

	LAC	3,X

	DAC	REMNAM+3

	PXA		/GET THE ADDRESS OF THE NODE

	TAD	XRPAGE

	JMP	REM	/GO REMOVE THE TASK IF IT'S NOT ACTIVE

/ 

EXIT	CAL	(10	/EXIT

XRPAGE	0

XRADJ	0

/ 

/ SUBROUTINE SETXR -- ADJUST THE INDEX REGISTER

/ 

/ 	CONTENTS OF THE AC AND XR ARE LOST

/ 

SETXR	0

	TAD	XRADJ

	PAX

	JMP*	SETXR

/ 

REM	DAC	STLNOD	/SAVE STKL NODE ADDRESS

	AAC	4	/ADD 4 TO PICK UP FLAGS

	DAC	FLAGS	/SAVE POINTER TO FLAGS

	IAC

	DAC	PARBA	/PARTITION BLOCK ADDRESS

	IAC

	DAC	CNT	/SAVE DISK ADDRESS POINTER

	LAC	(400002)	/RAISE TO LEVEL 6 TO PREVENT EXIT

	ISA		/DURING CANCEL

	.INH		/INHIBIT INTERRUPTS WHILE MODIFYING FLAGS

	LAC*	FLAGS	/PICK UP FLAGS

	.ENB		/ENABLE INTERRUPTS

	AND	(040000)	/MASK OFF FIXED IN CORE BITS

	SNA		/IS IT FIXED IN CORE?

	JMP	NOTFIX	/NO DON'T FREE PARTITION

	LAC*	PARBA	/PICK UP THE PARTITION BLOCK POINTER

	AAC	P.TC	/MOVE POINTER TO THE PARTITION BUSY FLAG

	DAC	PARBA

	LAC*	PARBA	/PICK UP THE FLAGS WORD

	AAC	-1	/FREE PARTITION

	DAC*	PARBA

NOTFIX	CAL	REMNAM	/ISSUE CANCEL DIRECTIVE

	LAC	STLNOD	/NO -- DELETE NODE FROM STKL

	DAC*	(R1)

	JMS*	(NDEL)	/DELETE NODE

	LAC*	FLAGS	/IS TASK BUFY

	DBK

	LAC*	CNT	/PICK UP DISK ADDRESS

	ADD	(400\777777)	/SUBTRACT 400 IN ONE'S COMP. ARITHMETIC

	AND	(000377)	/MASK OFF UNIT NUMBER

	DAC	CNTRLU	/SAVE IT IN CPB

	LAC*	CNT	/PICK UP DISK ADDRESS AGAIN

	ADD	(400\777777)	/SUBTRACT AGAIN

	AND	(777400)	/MASK OFF ADDRESS

	DAC	CNTRLA	/SAVE IT IN CPB FOR DEALLOCATE

	CAL	GETSIZ	/PICK UP THE SIZE OF THE STORAGE

	CAL	WAITEV

	LAC	EV	/CHECK TO SEE IF OK

	SPA

	JMP	DSKERR	/NOT OK DISK ERROR

	CAL	DEALOC	/DEALLOCATE DISK SPACE

	CAL	WAITEV	/WAIT FOR DEALLOCATE TO COMPLETE

	LAC	EV	/CHECK TO SEE IF OK

	SPA

	JMP	DSKERR	/NO OK DISK ERRROR

	.TITLE	SAVE-REMOVE-INSTALL BLOCK CHAIN UPDATE

/

/  (THE CODE BETWEEN THE ****'S IS EDIT #16, MODIFIED FROM 

/  EDIT #6,15)

/ *********************

/

/

/ THE FOLLOWING CODE IS USED TO UPDATE THE INSTALL/REMOVE

/ CHAIN OF BLOCKS IN ORDER TO FIX THE SAVE-REMOVE-INSTALL

/ GLITCH. THE IDEA IS THAT EACH TIME THE STL IN CORE IS CHANGED,

/ THIS CHAIN OF DISK BLOCKS MUST ALSO CHANGE. WHENEVER A TASK IS

/ REMOVED, THE TASKS NAME IS ENTERED INTO THE CHAIN. WHENEVER A

/ TASK IS INSTALLED,  A COPY OF ITS STL NODE (LESS POINTERS) IS

/ ENTERED INTO THE CHAIN ALONG WITH THE TASKS PBDL DATA.

/ WHEN THE SYSTEM IS BOOTSTAPPED THE COPY OF SAVE WHICH IS

/ IN CORE READS THE CHAIN OF BLOCKS AND RECONSTRUCTS THE

/ STL FROM THE DATA FOUND IN THE BLOCKS.

/ WHENEVER A SAVE IS DONE (STL IN CORE MATCHES STL ON DISK)

/ THIS CHAIN OF BLOCKS IS PURGED.

/

/ THE STRUCTURE OF EACH BLOCK IS:

/

/	WORDS 0-375 USED FOR DATA ENTRIES

/	WORD 376 IS A POINTER TO 1ST FREE WORD IN BLOCK

/	WORD 376 IS COMPLEMENTED TO SHOW LOGICAL EOF

/	WORD 377 IS A POINTER TO NEXT BLOCK OR -1

/

/ THE STRUCTURE OF A REMOVE ENTRY IS:

/

/	NTRY+0 -1 (FLAG SAYING THIS ENTRY IS A REMOVE)

/	NTRY+1 DISK ADDRESS FROM STL

/

/ THE STRUCTURE OF AN INSTALL ENTRY IS:

/

/	NTRY+0 +1 (FLAG SAYING THIS ENTRY IS AN INSTALL)

/	NTRY+1 TASK NAME IN SIXBT 1ST HALF

/	NTRY+2 TASK NAME IN SIXBT 2ND HALF

/	NTRY+3 STL NODE WORD 4

/	NTRY+4 STL NODE WORD 5

/	NTRY+5 STL NODE WORD 6

/	NTRY+6 STL NODE WORD 7

/	NTRY+7 STL NODE WORD 10

/	NTRY+10 STL NODE WORD 11

/	NTRY+11 PARTITION NAME IN SIXBT 1ST HALF

/	NTRY+12 PARTITION NAME IN SIXBT 2ND HALF

/	NTRY+13 PARTITION BASE ADDRESS

/

/ NOTE THAT IT IS EXTREMELY IMPORTANT TO FILL UP DATA

/ ENTRIES IN THE REMOVE CHAIN IN THE ORDER THAT EACH

/ STL MODIFICATION WAS MADE.

/

/ NOTE ALSO THAT ALL TASKS WHICH ACCESS THIS CHAIN OF 

/ BLOCKS MUST RESIDE IN THE SAME PARTITION.

/ THOSE TASKS ARE: SAVE,TDV REM, MCR REM, TDV INS, MCR INS,

/ FININS, AND AUTORM.

/

/  THE REMOVE CODE CHECKS FOR A MATCHING INSTALL.

/  IFPRESENT, THE INSTALL IS REMOVED, THE REMOVE IS NEVER

/  PLACED, AND THE DATA IS MOVED UP IN THE DISK

/  BLOCKS TO MINIMIZE THE SPACE USED.

/

	.EJECT

/

/ START TO PROCESS THE REMOVE CHAIN OF BLOCKS

/

INSSZ=14				/SIZE OF AN INSTALL ENTRY

REMSZ=2					/SIZE OF A REMOVE ENTRY

/

	LAC	(BUFF	/READ TO FIRST BUFFER FIRST

	DAC	REMCTA+2

	LAC*	(REMBLK /SCAN BLOCK LIST

	SKP

REM0	LAC	BUFF+377 /FETCH NEXT BLOCK

	DAC	CURBLK	/CURRECT BLOCK IN ACTION

	JMS	GETBLK	/FETCH BLOCK WHOSE # IN AC

/
REM1	LAC	BUFF+376 /FREE LENGTH POINTER

	SPA		/DOUBLES ASLOGICAL EOF

	CMA		/IS LAST ACTIVE BLOCK, MAKE +

	PAL		/LOOP CONTROL
	CLX		/START AT BUFF
	SNA		/(022) SKIP IF SOME DATA IN BLOCK
	JMP	REM1J	/(022) NONE, CHECK LOGICAL EOF.
REM11	LAC	BUFF,X	/SCAN FOR MATCHING INSTALL

	SPA		/SKIP IF INSTALL ENTRY

	JMP	REM1R	/IS REMOVE ENTRY GO TO NEXT

	LAC*	CNT	/CHECK OUT DISK ADDRESS

	SAD	BUFF+5,X / WITH THAN IN INSTALL

	JMP	SQUNCH	/SAME, GO GARBAGE COLLECT
REM1I	AXS	INSSZ	/THRU WITH THIS BLOCK?

	JMP	REM11	/NOPE

	JMP	REM1J	/YUP, JOIN UP WITH OTHER AXS

/
REM1R	AXS	REMSZ	/MOVE TO NEXT ENTRY

	JMP	REM11	/MORE TO DO IN BLOCK

/
REM1J	LAC	BUFF+376 /IS THIS THE LAST BLOCK WITH ENTRIES
	SMA		/SKIP IF LOGICAL END
	JMP	REM0	/GO GET THE NEXT BLOCK
	XCT*	(DEBUG	/(017) 'IMPOSSIBLE' TO GET HERE; MESSAGE?
	JMP	REM1K	/(017) NO
	JMS	SAVE	/(017) CAL WILL ZAP XR

	LAC	(MES3	/(017) PRINT MESSAGE ON SWITCH = SKIP

	DAC	TYPCPB+4 /(017) PLACE IN CAL

	CAL	TYPCPB	/(017) MMESSAGE

	CAL	WAITEV	/(017) WAIT

	JMS	RESTOR	/(017) GET BACK XR

	LAC	BUFF+376 /(017) RESTORE AC

REM1K	AAC	377-REMSZ /CAN IT FIT

	SPA		/SKIP IF YES

	JMP	GETSOM	/NO, EITHER MT BLOCK AT CHAIN END, OR GET NEW ONE

	AAC	-377	/MAKE NEW POINTER

	DAC	BUFF+376

	LAW	-1	/REMOVE ENTRY ON LIST END

	DAC	BUFF,X

	LAC*	CNT	/(018) DISK ADDR

	DAC	BUFF+1,X

	JMS	PUTBLK	/REWRITE THE UPDATED BLOCK

	JMP	REMNOD	/THAT'S ALL

/

GETSOM	LAC	BUFF+376 /COMPLEMENT POINTER (TO +)

	CMA		/AS THIS IS NO LONGER THE LAST ACTIVE BLOCK

	DAC	BUFF+376

	LAC	BUFF+377 /IS THERE ALREADY A NEXT BLOCK

	SAD	(-1	/IF NOT, THIS IS -1

	JMP	NEWGET	/ALLOCATE A NEW BLOCK

	DAC	CURBLK	/READ EMPTY BLOCK FROM END

	JMS	PUTBLK	/(018)PLACE PRESENT BLOCK

	LAC	CURBLK	/(018) READ IN THE NEXT

	JMS	GETBLK	/THERE IS, FETCH IT

REM1L	LAW	-1	/JOIN UP MAIN CODE TO PLACE ENTRY

	CLX		/0 RELATIVE POSITION

	JMP	REM1K

/

/ ALLOCATE A NEW BLOCK FOR THE REM CHAIN

/

NEWGET	CAL	ALLO		/ALLOCATE A BLOCK

	CAL	WAITEV

	LAC	EV		/ANY ERRORS?

	SPA

	JMP	FILERR		/YES

	LAC	ALLCTA+2	/NO -- GET THE BLK NUMBER

	LMQ			/CONVERT PLATTER AND ADDR

	LAC	ALLCTA+1	/TO A DISK BLOCK NUMBER

	AND	(7777

	LRSS	10

	LACQ

	DAC	NEWBLK		/SAVE THE BLOCK NUMBER

/

/  TRY TO WRITE ON THE NEW BLOCK, IF IT FAILS, THE PREVIOUS

/  BLOCK ON DISK DOES NOT YET POINT AT THE BAD BLOCK

/

	JMS	CONVRT

	JMS	PUTBLK		/WRITE OUT THE NEW BLOCK

/

/ OK, SO WRITE OUT THE CURRENT DISK BLOCK

/

	LAC	CURBLK		/GET CURRENT BLOCK NUMBER

	JMS	CONVRT		/PREPARE TO WRITE IT OUT

	LAC	NEWBLK		/SET UP BLK FORWARD PTR

	DAC	BUFF+377

	JMS	PUTBLK		/WRITE OUT THE OLD BLOCK

/

/ INIT THE NEW DATA BLOCK BUFFER

/

	LAC	NEWBLK		/SET NEWLY ALLO'D BLK TO CURRENT BLK

	DAC	CURBLK

	JMS	CONVRT		/PREP TO WRITE OUT THIS BLOCK

	LAW	-1		/(018)STOPPER

	DAC	BUFF+377

	JMP	REM1L		/JOIN UP TO PLACE ENTRY

/

SQUNCH	PXA		/MOVE DOWN ENTRIES IN PRESENT BLOCK

	TAD	(BUFF-1

	DAC*	(X10	/AUTO INCR FOR PLACEMENT

	AXS	INSSZ	/MOVE XR FOR FETCH, SKIP IF IT WAS

	SKP		/NOT LAST ENTRY

	JMP	SQ01	/THE LAST ENTRY, DON'T MOVE ANYTHING NOW

SQ0	LAC	BUFF,X	/IF ALREADY DONE, ONE PLACE TO SELF, OK.

	DAC*	X10

	AXS	1

	JMP	SQ0	/KEEP GOING

/

SQ01	LAC	BUFF+376 /IS THIS THE LAST BLOCK ALREADY?
SQ1	SPA		/SKIP IF NOT

	JMP	SQ8

	JMS	SAVE	/SAVE XR,LR X10

	LAC	(BUFF+400

	DAC	REMCTA+2 /SET TO READ TO SECOND BUFF

	LAC	BUFF+377 /NEXT BLOCK #

	DAC	NEWBLK

	JMS	GETBLK

	JMS	RESTOR

	LAC	BUFF+776 /END POINTER FOR NEW BLOCK

	SPA

	CMA

	PAL
	CLX
	JMP	SQ31	/(021) CHECK IF NO MORE NOW!

/

/  FILL UP, IF POSSIBLE, HOLE AT END OF LAST BLOCK

/
SQ2	LAC	BUFF+400,X /-1 OR +1 FOR TYPE
	SPA!CLL		/SKIP IF INS ENTRY
	LAW	-INSSZ+REMSZ+1 /(020) ADJUST LENGTH; LINK SET NEXT INST.
	TAD*	(X10	/THE WHERE ARE WE NOW POINTER
	CMA!IAC
	TAD	(BUFF+376-INSSZ /ROOM, FLIPS LINK IF YES!
	SPA		/SKIP IF YES
	JMP	SQ4	/NOPE, NEED ANOTHER BLOCK
	LAW	-REMSZ	/LOOP CONTROL FOR ENTRY MOVE
	SZL		/SKIP IF REM, ALL SET
	LAW	-INSSZ	/INS, SET IT UP

	DAC	COUNT

SQ3	LAC	BUFF+400,X

	DAC*	X10

	AXR	1	/KEEP UP WITH XR

	ISZ	COUNT	/DONE

	JMP	SQ3
SQ31	AXS	0	/(021)OUT OF ENTRIES IN NEW BLOCK
	JMP	SQ2	/NOPE, TRY ANOTHQR MOVE

	LAC	BUFF+776 /HAVE WE MOVD ALL

	SMA		/SKIP IF YES

	JMP	SQ4	/THIS IS A FUNNY, BUT POSSIBL CASE

/

/  THE AMOUNT TO BE MOVED UP TO THE PREVIOUS DISK BLOCK

/  HAS GROWN TO A WHOLE BLOCK. JUST MOVE UP THE WHOLE BLOCK

/  DON'T RY TO COMPRESS ANY FURTHER.

/

SQ8	CLL!CML		/MAKE UP BUFF+376 POINTER AS EOF

	JMS	SQ376	/FROM POSITION OF X10

	LAC	(BUFF	/WRITE OUT FROM BUFF #1

	DAC	REMCTA+2

	LAC	CURBLK	/WRITE THE CURRENT BLOCK

	JMS	CONVRT

	JMS	PUTBLK

	JMP	REMNOD	/THAT'S ALL  WHEW!

/

SQ4	JMS	SAVE

	CLL

	JMS	SQ376	/ESTABLISH (+) LENGTH POINTER IN BUFF

	LAC	(BUFF

	DAC	REMCTA+2 /SET TO WRITE OLD BLOCK

	LAC	CURBLK

	JMS	CONVRT

	JMS	PUTBLK

	JMS	RESTOR

	LAC	(BUFF-1 /X10 TO PUSH #2 DOWN TO #1

	DAC*	(X10

	AXS	0	/SKIP IF NONE TO MOVE DOWN

	SKP		/SOME TO MOVE

	JMP	SQ6	/NO DATA TO MOVE, BUT MOVE POINTERS

SQ5	LAC	BUFF+400,X

	DAC*	X10

	AXS	1	/REMEMBER LR LIMIT ON #2

	JMP	SQ5

SQ6	LAC	NEWBLK	/UPDATE POINTERS

	DAC	CURBLK

	LAC	BUFF+777 /MOVE DOWN END OF BUFFER DATA

	DAC	BUFF+377

	LAC	BUFF+776

	DAC	BUFF+376

	JMP	SQ1	/UP TO TOP OF LOOP

/

SAVE	0

	LAC*	(X10

	DAC	SAV10

	PXA

	DAC	SAVX	

	PLA

	DAC	SAVL

	JMP*	SAVE

/

RESTOR	0

	LAC	SAV10

	DAC*	(X10

	LAC	SAVX

	PAX

	LAC	SAVL

	PAL

	JMP*	RESTOR

/

SAV10	0

SAVX	0

SAVL	0

COUNT	0

/

GETBLK	0

	JMS	CONVRT	/CALL WITH AC HAVING #, SET UP CAL

	CAL	GETREM	/FETCH DISK BLOCK

	CAL	WAITEV	/WAIT

	LAC	EV	/OK

	SPA

	JMP	DSKERR

	JMP*	GETBLK

/

/

/  SUBROUTINE  SQ376

/

/  MAKE UP FREE CORE POINTER FROM CONTENTS OF X10

/  WHICH HAS BEEN USED TO PLACED DATA IN BUFF #1

/

/  CALL WITH LINK =0 IF POINTER TO BE POSITIVE

/  CALL WITH LINK =1 IF POINTER TO BE COMPLEMENTED,

/  TO SHOW EOF

/

SQ376	0

	LAC	(BUFF-1 /X10 VALUE IF NOTHING PLACED

	CMA!IAC

	TAD*	(X10	/COMPLEMENT LINK, MAKE POINTER

	SNL		/SKIP TO KEEP POINTER POSITIVE

	CMA

	DAC	BUFF+376 /PLACE THE POINTER

	JMP*	SQ376

/

/

/ SUBROUTINE CONVRT -- CHANGE BLK NUMBER IN AC TO

/	PLATTER AND ADDRESS AND ENTER INTO GET/PUT CTA

/

CONVRT	0					/(MJH-15)

	LMQ					/(MJH-15)

	LLSS!ECLA 10				/(MJH-15)

	DAC	REMCTA				/(MJH-15)

	LACQ					/(MJH-15)

	DAC	REMCTA+1			/(MJH-15)

	JMP*	CONVRT				/(MJH-15)

/

/ SUBROUTINE PUTBLK -- WRITE OUT A DISK BLOCK

/
PUTBLK	0					/(MJH-15)
	CAL	PUTREM		/ISSUE PUT	/(MJH-15)
	CAL	WAITEV		/WAIT FOR COMPLETE/(MJH-15)
	LAC	EV		/ANY ERRORS?	/(MJH-15)
	SPA					/(MJH-15)
	JMP	DSKERR		/YES		/(MJH-15)
	JMP*	PUTBLK		/(019) RETURN

CURBLK	0		/CURRENT BLK NO. FOR SRI CHAIN 	(MJH-15)

NEWBLK	0		/NEWLY ALLO'D BLK IN CHAIN	(MJH-15)

OLDPTR	0		/OLD BLKS FREE WD PTR		(MJH-15)

REMNOD=.

/ ********************

	LAC	STLNOD	/ADD NODE TO EMPTY POOL

	DAC*	(R2)

	LAC	(POOL)

	DAC*	(R1)

	JMS*	(NADD)	/ADD NODE TO EMPTY POOL

	JMP	START	/SCAN THE STL AGAIN TO SEE IF THERE'S MORE TO DO.

ERRTY	CAL	TYPCPB	/MAKE TYPE CPB REQUEST

	CAL	WAITEV	/WAIT FOR ERROR MESSAGE TO BE PRINTED

	JMP	REMNOD	/FINISHED WITH THIS TASK -- LOOK FOR ANOTHER

/

DSKERR	LAC	(MES4)

	DAC	TYPCPB+4	/PUT MESSAGE IN BUFFER POINTER

	JMP	ERRTY	/AND TYPE  MESSAGE

/

FILERR	LAC	(MES6

	DAC	TYPCPB+4

	CAL	TYPCPB

	CAL	WAITEV

	JMP	REMNOD

/ 

REMNAM	4	/CANCEL DIRECTIVE

	EV	/EVENT VARIABLE ADDRESS

	0	/TASK NAME (FIRST HALF)

	0	/TASK NAME (SECOND HALF)

	.BLOCK	3

FLAGS	0

PARBA	0

STLNOD	0

/

DEALOC	1600	/DEALLOCATE CPB

	EV	/EVENT VARIABLE ADDRESS

	1	/LOGICAL UNIT NUMBER

	CNTRLT	/CONTROL TABLE ADDRESS

/

GETSIZ	3000	/GET A WORD FROM THE DISK

	EV	/EVENT VARIABLE ADDRESS

	1	/LUN NUMBER

	CNTRLU	/CONTROL TABLE ADDRESS

/

GETREM	3000

	EV

	1

	REMCTA

/ 

PUTREM	3100

	EV

	1

	REMCTA

/ 

REMCTA	0

	0

	BUFF

	400

/

ALLO	1500

	EV

	1

	ALLCTA

/

ALLCTA	400

	XX

	XX

/

CNTRLT	0	/NUMBER OF WORDS TO BE DELETED

CNTRLU	0	/UNIT NUMBER

CNTRLA	0	/DISK ADDRESS

CNTCD	CNTRLT	/CORE ADDRESS FOR GET

	1	/WORD COUNT FOR GET

/

TYPCPB	2700

	EV

	3

	2

	XX

EV	0

/

WAITEV	20	/WAIT FOR

	EV	/EVENT VARIABLE ADDRESS

/

MES3	MES4-MES3/2*1000+2

	0

	.ASCII	"AUTORM-SRI-NO MATCHING INSTALL ENTRY"<15>

MES4	MES6-MES4/2*1000+2

	0

	.ASCII	'REM-DISK ERR'<15>

MES6	MES7-MES6/2*1000

	0

	.ASCII "ALLOCATE ERROR"<15>

MES7=.

/

/

/

SVBKCH	0

CNT	0

TEMP	0

BUFF	.BLOCK 1000

	.END	BEGIN
