SPL,L,O,M ! NAME: PU.. ! SOURCE: 92067-18224 ! RELOC: 92067-16185 ! PGMR: G.A.A. ! ! *************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * ! * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * ! * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* ! * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ! *************************************************************** ! NAME PU..(8) "92067-16185 REV.1903 790319" ! ! MODIFICATION RECORD: ! ! 1) 780516 TO HANDLE LOCK. ERROR RETURN PARAMETER ! 2) 790112 TO USE NEW DCB FORMAT FOR TRK,SEC,SEC OFFSET ! 3) 790127 TO HANDLE PURGE OF TYPE 0 ON ANY DISC CARTRIDGE ! ! PURGE FILE ROUTINE FOR THE RTE FILE MANAGER ! ! ENTERED AFTER A: ! ! PU,NAMR ! ! WHERE: ! ! NAMR IS THE FILE'S NAMR WHICH CAN CONTAIN: ! ! CR (OPTIONAL) IS THE CARTRIDGE ID. ! ! SC (OPTIONAL) IS THE FILE SECURITY CODE. ! ! ! DEFINE EXTERNAL ADDRESSES ! LET .E.R., \FMGR ERROR WORD I.BUF, \INTERNAL FMGR BUFFER N.OPL, \FMGR SUBPARAMETER ARRAY PK.DR \FILE DIRECTORY BUFFER BE INTEGER,EXTERNAL ! LET DR.RD, \RTE EXEC ROUTINE IER., \FMGR ERROR HANDLING ROUTINE LOCK., \CARTRIDGE LOCK ROUTINE MSS., \FMGR ERROR MESSAGE ROUTINE PURGE \FMP FILE PURGE ROUTINE BE SUBROUTINE,EXTERNAL ! LET PUIT \PURGE ROUTINE BE SUBROUTINE,DIRECT ! LET TATSD BE CONSTANT (1756K) LET SECT2 BE CONSTANT (1757K) LET WRIT BE CONSTANT (2) LET READI BE CONSTANT (1) ! PU..: SUBROUTINE(NCAM,PLIST,ER) GLOBAL !ENTRY POINT LET NCAM,PLIST,ER BE INTEGER ! DO[T_@N.OPL+1;BLK_@PLIST+1] PUIT !CALL PURGE IF .E.R.= -6 THEN .E.R._ -2006 !SET UNDEFINED MESSAGE IF .E.R. = -16 THEN GO TO ZPURG IER. RETURN ! ZPURG:DCB2_[T_@I.BUF]+1 !ADDRESSES OF DCB WORDS 1 AND 2 DIS_$T AND 77K !LU FROM DCB WORD 1 (BITS 0-5) DR.RD(READI,-DIS,0)? \READ CARTRIDGE SPECIFICATION ENTRY [ER_54;RETURN] !DISC NOT MOUNTED ERROR DIRTR_[LSTTR_[SECTR_@PK.DR+6]+1]+1 !-#DIR TRK,LAST TRK,SEC/TRK LOCK.(-DIS,3,LKER)? \LOCK THE DISC [MSS.(LKER);RETURN] !PRINT LOCK ERROR AND RETURN PUIT !CALL PURGE IN CASE ADDRESSES CHANGED TRK_$DCB2 !DIRECTORY TRACK SEC_($T AND 17700K) >- 6 !SECTOR NUMBER OFSET_(($T AND 160000K) -< 3)*16 !SECTOR OFFSET TI,BLK_0 !COMPUTE BLOCK #, START WITH ZERO TEST: IF TI=SEC THEN GO TO FOUND !IF MATCH, FOUND BLOCK # BLK_BLK+1 !INCREMENT BLOCK # TI_(TI+14)/$SECTR !COMPUTE NEXT LOGICAL BLOCK ADDRESS TI_$1 GO TO TEST !CHECK FOR A MATCH ! FOUND:BLK_BLK+(($LSTTR-$DIRTR-1)-TRK)*($SECTR/2) !BLKTR FOR EACH DRTRK OFSET_OFSET+@PK.DR !ADDRESS OF DIRECTORY ENTRY DR.RD(READI,-DIS,BLK)? \READ BLOCK CONTAINING DIR ENTRY [ER_54;RETURN] !DISC NOT MOUNTED ERROR IF [T_$(OFSET+8)] THEN \IF SECURITY CODE AND [IF T-N.OPL THEN \IT DOESN'T MATCH, THEN [ER_-7;GOTO EXIT]] !RETURN -7 ERROR $OFSET_ -1 !MARK ENTRY AS PURGED DR.RD(WRIT,-DIS,BLK)? \WRITE BLOCK CONTAINING PURGED ENTRY [ER_54;GO TO EXIT] ! EXIT: LOCK.(-DIS,5) !UNLOCK THE CARTRIDGE RETURN END ! PUIT: SUBROUTINE DIRECT PURGE(I.BUF,.E.R.,$BLK,N.OPL,$T) !(TRY TO) PURGE THE FILE RETURN END END END$