.TITLE *** REMOVE MCR FUNCTION *** / / 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 #14 / / / MCR FUNCTION -- REMOVE 26 SEP 71 R. MCLEAN / 6/3/72 D. MCMILLAN / 4/5/73 M. HEBENSTREIT / 6/3/75 M. HEBENSTREIT / / TASK NAME "...REM" TO REMOVE A TASK FROM THE SYSTEM TASK LIST. / / THE FIRST LINE OF THE COMMAND INPUT FOR ANY MCR / FUNCTION IS READ BY THE RESIDENT MCR TASK ("...MCR"). / FOR THE "REMOVE" FUNCTION, THERE IS ONLY ONE LINE OF / COMMAND INPUT, AND IT'S SYNTAX IS AS FOLLOWS: / / SYNTAX = 'REM'$ / (/) / = " "/"," / = 1-6 ALPHANUMERIC CHARACTERS / = CAR RTN / = ALTMODE / = NON BREAK CHARACTER / $ -- " ANY NUMBER OF "INCLUDING ZERO " / / THE RESIDENT MCR READS A LINE, FETCHES THE / FIRST THREE CHARACTERS TO FORM THE MCR FUNCTION TASK / NAME ("...REM"), FLUSHES CHARACTERS THRU THE FIRST / BREAK CHARACTER, REQUESTS "...REM", AND EXITS / THE TASK "...REM " PROCESSES THE REMAINDER OF THE LINE / AND IF THE REQUEST IS VALID, ISSUES AN APPROPRIATE "REMOVE" / DIRECTIVE. / / IF THE COMMAND INPUT LINE IS TERMINATED BY A CAR RTN, / THE RESIDENT MCR TASK IS REQUESTED, AND THE FUNCTION TASK / EXITS. / / IF THE COMMAND INPUT LINE IS TERMINATED BY AN ALTMODE, THE / FUNCTION TASK EXITS WITHOUT REQUESTING "...MCR". A ^C TYPEIN / IS THEN NECESSARY TO RE-ESTABLISH MCR DIALOGUE. .TITLE *** MCR FUNCTION 'REMOVE' / 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 IDX=ISZ ECLA=641000 / REM LAW -7 /SET UP TO FETCH TASK NAME AND STORE DAC CNT /SIX CHARACTERS (ZERO RIGHT FILL) LAC* (REMCTA+3 /IS A REM BLK ALLOCATED? SAD (400 JMP .+3 LAC (MES7 /NO -- ERROR JMP DSKERR+1 LAC (REMNAM+1) DAC* (X10) / REMN1 JMS* (FAC) /FETCH A CHARACTER SAD (054) / IS IT A COMMA? JMP ERR1 /YES -- ERROR IN SYNTAX SAD (040) /NO -- BLANK? JMP ERR1 /YES -- ERROR IN SYNTAX SAD (015) /NO -- CAR RTN? JMP ENDCRA /YES-- END OF REQUEST SAD (175) /NO -- ALTMODE? JMP ENDCRA /YES-- END OF REQUEST DAC* X10 /NO -- STORE CHARACTER ISZ CNT /LAST CHARACTER OF TASK NAME? JMP REMN1 /NO -- GET NEXT CHARACTER ERR1 LAC (MES2) /GET MESSAGE ADDRESS SYNTAX ERROR DAC TYPCPB+4 /PUT IN TYPE REQUEST JMP ERRTY /REQUEST MCR AND RETURN / ENDCRA DAC SVBKCH /SAVE CAR RTN OR ALTMODE REMN2 DZM* X10 /FILL REMAINING CHARACTERS WITH ZERO ISZ CNT JMP REMN2 / LAC REMNAM+4 /FORM FIRST HALF OF TASK NAME LRS 6 LAC REMNAM+3 LRS 6 LAC REMNAM+2 SNA /IS THIS A NULL NAME? JMP ERR1 /YES EXIT WITH ERROR LLS 14 DAC REMNAM+2 /STORE FIRST HALF OF WORD IN REMNAM LAC REMNAM+7 /FORM SECOND HALF OF TASK NAME LRS 6 LAC REMNAM+6 LRS 6 LAC REMNAM+5 LLS 14 DAC REMNAM+3 LAC (REMNAM+2) /PICK UP POINTER TO TASK NAME DAC* (R2) /SAVE IT IN R2 FOR SNAM LAC (STKL) /PICK UP POINTER TO SYSTEM TASK LIST HEAD DAC* (R1) /SAVE IT ALSO JMS* (SNAM) /LOOK FOR PROGRAM IN SYSTEM TASK LIST JMP ERTTYA /TASK NOT IN SYSTEM ERROR 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 //////////////////////////////////////////////////////////////// // // DELETE ON EXIT NOT IMPLEMENTED SO EXIT WITH ERROR // IF TASK ACTIVE // //////////////////////////////////////////////////////////////// SPA JMP ACTIVE AND (577777) /MASK OFF DISARM AND REMOVE ON EXIT BITS XOR (200000) /YES SET REMOVE ON EXIT FLAGS .ENB /ENABLE INTERRUPTS DAC* FLAGS /RESTORE FLAGS 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 ///////// // CHECK FOR TASK ACTIVE GOES HERE ///////// 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 EXT1A /EXIT ERTTYA LAC (MES3) DAC TYPCPB+4 /PRINT TASK NOT IN SYSTEM ERROR ERRTY CAL TYPCPB /MAKE TYPE CPB REQUEST CAL WAITEV /WAIT FOR ERROR MESSAGE TO BE PRINTED JMP EXT2 /FINISHED EXIT / 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 / /////// ACTIVE .ENB /ENABLE INTERRUPTS DBK /DEBREAK FROM LEVEL 6 LAC (MES1) DAC TYPCPB+4 /PUT MESAGE IN BUFFER JMP ERRTY ///////// EXT1A LAC SVBKCH /GET TERMINATION CHARACTER SAD (15) /SKIP IF ALTMODE EXT2 CAL REQMCR /REQUEST MCR TASK SAD (175) /IF ALTMODE DON'T CLEAR MCRRI DZM* (MCRRI) /CLEAR ^C SWITCH CAL (10) /RETURN / REQMCR 1 /CALL MCR DIRECTIVE 0 .SIXBT "..." .SIXBT "MCR" 0 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 0 0 / 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 MES3 EV 0 / WAITEV 20 /WAIT FOR EV /EVENT VARIABLE ADDRESS / MES1 MES2-MES1/2*1000+2 0 .ASCII "REM-TASK ACTIVE"<15> MES2 MES3-MES2/2*1000+2 0 .ASCII "REM-SYNTAX ERR"<15> MES3 MES4-MES3/2*1000+2 0 .ASCII "REM-TASK NOT IN SYSTEM"<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 400 .END REM