; ; ; DELKEY ; ; DELKEY - DELETES A DATABASE KEY AND ALL IT'S OFSPRING ; ; PURPOSE: To delete the currently active database key and ; all of it's ofspring. ; ; CALLABLE: From FORTRAN only. ; CALL DELKEY(ROOT[,ERR]) ; or ; ERR=DELKEY(ROOT) ; ; PARAMETERS: ; ROOT The database root block and I/O buffers. ; ERR The error status return. Possible error returns ; are: ; ERR=-100 Means bad root block. ; ERR= 0 Means cannot perform delete. ; ERR= -1 Successfull return. ; ; ROUTINES USED: B$DELETEDAT ; ; EXAMPLE: ; CALL DELETE(ROOT) ; IF (DELETE(ROOT) .NE. -1) GOTO 999 ; ; AUTHOR: Mike Higgins ; ; SOURCE LANGUAGE: MACRO11 with SUPERMAC ; ; OBJECT MODULE NAME: DELKEY ; ; LIBRARY: [60,100]DATABASE ; ; MAINTENANCE: See Mike Higgins ; ; ;REGESTER ASSIGNMENTS ROOT=R4 BUF=R3 LEVEL=R2 TEM=R1 ; PARAMETERS RT=2 ERR=4 .MCALL SUPER SUPER PROCEDURE DELKEY ;(ROOT[,ERR]) LET ROOT := RT(R5) ;GET BUFFER ADDRESS IF DB.BLT(ROOT) NE #"RT ;IS THIS REALLY A ROOT BLOCK? FORET #ER.NRB,ERR ;NOPE, RETURN ERROR RETURN END LET LEVEL := RT.PCL(ROOT) ;GET POINTER TO CURRENT LEVEL IF #FL.ACT OFF.IN LV.FLG(LEVEL) ;IS THIS KEY ACTIVE? FORET #0,ERR ;NO, RETURN ERROR RETURN END SCALL B$DELETEDATA ;THERE IS A KEY, DELETE IT'S OFSPRING LET @LV.PCE(LEVEL) := #0 ;THEN ZERO THE FIRST WORD OF KEY FORET #-1,ERR ;RETURN SUCCESS ;BUT BEFORE YOU GO, MARK THIS BLOCK ;AS HAVING BEEN MODIFIED LET LV.FLG(LEVEL) := . SET.BY #FL.MOD ENDPROCEDURE DELKEY .END