; ; ; LEVELD ; ; LEVELD - RETURNS INFORMATION ABOUT THE CURRENTLY ACTIVE LEVEL ; ; ROUTINE NAME: LEVELD ; ; PURPOSE: To return all information about keys in the cur- ; rently active level of a database file. This in- ; formation is initially set by BLDHDR. ; ; CALLABLE: From FORTRAN only: ; CALL LEVELD(ROOT[,LEVNO][,SCANSZ][,DATASZ][,DATAYP]) ; ; PARAMETERS: ; ROOT The database root block and I/O buffers. ; LEVNO The depth of the currently active level, where the ; first level is 1, and every PUSHLV call incriments ; the depth by one. ; SCANSZ The size in bytes of the scan section of a key at ; this level. ; DATASZ The size in bytes of the data section of keys at ; this level. ; DATAYP The type of data stored in this level, where DA- ; TAYP=0 means no data, 1=INTEGER, 2=REAL, 3=ASCII, ; and these types can be ORed togehter in any combi- ; nation. ; ; ROUTINES USED: None. ; ; EXAMPLE: ; CALL LEVELD(ROOT,LVN,,,TYPE) ; CALL LEVELD(ROOT,,SCANSZ,DS) ; ; AUTHOR: Mike Higgins ; ; SOURCE LANGUAGE: MACRO11 with SUPERMAC ; ; OBJECT MODULE NAME: LEVELD ; ; LIBRARY: [60,100]DATABASE ; ; MAINTENANCE: See Mike Higgins ; ; ;REGSTER ASSIGNMENTS ROOT=R4 BUF=R3 LEVEL=R2 TEM1=R1 TEM0=R0 .MCALL SUPER SUPER PROCEDURE LEVELD ;(ROOT[,LEVNO][,SCANSZ][,DATASZ][,DATATP]) ;PARAMETERS LEVNO=4 SCANSZ=6 DATASZ=10 DATATP=12 LET ROOT := 2(R5) ;GET THE ROOT BLOCK POINTER LET LEVEL := RT.PCL(ROOT) ;GET THE LEVEL TABLE SP LET TEM1 := RT.LEV(ROOT) ;GET THE CURRENT STACK DEPTH FORET TEM1,LEVNO ;RETURN IT TO FORTRASH FORET LV.SCN(LEVEL),SCANSZ ;RETURN THE SCAN SIZE ;CALCULATE THE DATA SIZE LET TEM0 := LV.LEN(LEVEL) - LV.SCN(LEVEL) IF TEM1 LT RT.NLV(ROOT) ;REMEMBER, THE SIZE DIFFERS FOR KEYS LET TEM0 := . - #4 ;THAT ARE NOT ON THE BOTTOM END FORET TEM0,DATASZ ;RETURN THE DATA SIZE ;CHOP OUT THE DATA TYPE BITS LET TEM0 := LV.FLG(LEVEL) OFF.BY #^C FORET TEM0,DATATP ;AND RETURN THEM ENDPROCEDURE LEVELD .END