.TITLE *** AUTO-REMOVE *** / / COPYRIGHT (C) 1975 / 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 / / / DATE OF LAST EDIT: JUNE 3 75 M. HEBENSTREIT / / 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 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 LAC* (REMBLK LMQ LLSS!ECLA 10 DAC REMCTA LACQ DAC REMCTA+1 CAL GETREM /GET THE REMOVE BLOCK CAL WAITEV LAC EV /WERE THERE ANY ERRORS? SPA JMP DSKERR /YES REM1 LAC BUFF+376 /NO -- IS THERE ROOM IN THIS BLOCK? SAD (376 JMP GETSOM /NO -- ALLOCATE ANOTHER BLOCK TAD (BUFF /YES DAC TEMP LAC REMNAM+2 /ENTER NAME INTO BLOCK DAC* TEMP IDX TEMP LAC REMNAM+3 DAC* TEMP IDX BUFF+376 IDX BUFF+376 CAL PUTREM CAL WAITEV /THE BLOCK HAS BEEN WRITTEN OUT LAC EV SPA JMP DSKERR /THER WAS AN ERROR ON THE DISK PUT JMP REMNOD /NO ERROR -- GO REMOVE THE NODE GETSOM CAL ALLO /ALLOCATE A BLOCK CAL WAITEV LAC EV /WERE THERE ANY ERRORS? SPA JMP FILERR /YES LAC ALLCTA+2 /NO -- WHATS THE BLOCK NUMBER LMQ LAC ALLCTA+1 AND (7777 LRSS 10 LACQ DAC BUFF+377 /SAVE THE NEXT BLOCK NUMBER CAL PUTREM /WRITE OUT THE BLOCK CAL WAITEV LAC EV /ANY ERRORS? SPA JMP DSKERR /YES LAC (BUFF-1 /NO -- ZERO THE BLOCK DAC* (X10 DZM* X10 LAC* (X10 SAD (BUFF+376 SKP JMP .-4 LAW -1 DAC BUFF+377 LAC ALLCTA+2 DAC REMCTA+1 LAC ALLCTA+1 DAC REMCTA JMP REM1 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 START /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 / 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 400 .END BEGIN