! Display status of ISAM data files -- 9/1/87 -- V1.0
! Written by: Thomas D Bellmer
! Curran, Colyer & Clifford, Attorneys at Law
! P O Box 600
! Osage Beach, MO 65065
! (314) 348-3157
! DESCRIPTION:
! Reads the directory rock of all '.IDX' files contained in the input file,
! INDEX.FIL (WARNING -- no file or record locking is used). Index files
! greater than 95% full will be highlighted by an asterisk (*).
! REQUIRES:
! The following two subroutines are available on the AMUS Network
! SYSTEM.SBR -- AMOS calls within AlphaBASIC by Dale A. Eichbauer
! LOGPPN.SBR -- Get current account (dev:p,pn) by Doug Azzarito
! OPERATION:
! After compiling this program in DSK0:7,6 (BAS:), type RUN ISAMST from
! any partition. Select either 'E' to exit; 'S' to display a single, or all
! ISAM files on screen; or 'P' to print status of all ISAM files.
! If you want to print all files, a prompt will be given to include any
! new ISAM files created since the last report.
! If you want output only on one particular ISAM file, enter that filename
! (do not use the '.IDA' extension). This is only for screen output.
PROGRAM ISAMST,1.0A
MAP1 IDX'CTL
MAP2 IDF1(5),B,2 ! Filler
MAP2 R'SIZ,B,2 ! Record size
MAP2 K'SIZ,B,1 ! Key size
MAP2 IDF1,B,1 ! Filler
MAP2 IDF2,B,2 ! Filler
MAP2 KEY'P,B,2 ! Key position
MAP2 IDF3(3),B,2 ! Filler
MAP2 F'C2,B,2 ! IDA freecount
MAP2 FREE'COUNT,B,2 !
MAP2 IDF4(4),B,2 ! Filler
MAP2 AL2,B,2 ! Records allocated
MAP2 ALLOC,B,2 !
MAP2 IDF5,X,470 ! Filler
MAP1 FILE'NAME,S,26 ! File name
MAP1 PLINE,S,78 ! Print line (variable holder)
MAP1 O,S,1,"S" ! Output to
MAP1 NF,S,1,"N" ! New file
MAP1 ACCOUNT,S,15 ! Which account you are in
MAP1 BAS'ACT,S,1,"Y" ! Logged into BAS: account
MAP1 LOG'ACT,S,19 ! LOG back to account you were in
MAP1 ONE,F,6 ! Display one or all ISAM files on system
MAP1 TODAY,S,11
MAP1 MONTH,S,3
MAP1 BINDATE,B,4
MAP1 FILLDATE,@BINDATE
MAP2 MO,B,1
MAP2 DY,B,1
MAP2 YR,B,1
BINDATE=DATE
MONTH=(" JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC")[MO*4;-3]
TODAY=DY+" "+MONTH+" 19"+YR
OUTPUT'TO:
ON ERROR GOTO END'NOW
? TAB(-1,0);TAB(4,18);"*** DISPLAY STATUS OF ISAM DATA FILES ***"
? TAB(10,8);"'E' to exit or 'S'creen 'P'rinter (E/S/P)? S";CHR(8);
INPUT "",O : O=UCS(O) : ONE=2
ON INSTR(1,"ESP",O)+1 GOTO OUTPUT'TO,END'NOW,SINGLE'FILE
OPEN'FILES:
IF O="P" THEN CH=3 ELSE CH=0
OPEN #CH,"IDXREP.LST",OUTPUT
LOOKUP "DSK0:INDEX.FIL[7,6]",FOUND
IF FOUND > 0 THEN ? TAB(14,24);"Any new index files (Y/N)? N";CHR(8);&
: INPUT "",NF : IF UCS(NF) # "Y" GOTO BEGIN'REPORT
XCALL LOGPPN,ACCOUNT
IF ACCOUNT # "DSK0:[7,6]" THEN BAS'ACT="N" : LOG'ACT="LOG "+ACCOUNT &
: XCALL SYSTEM,"LOG DSK0:[7,6]"
? TAB(5,1);TAB(-1,10)
? TAB(18,16);"PRODUCING NEW ISAM FILE LISTING -- PLEASE WAIT"
IF FOUND # 0 KILL "INDEX.FIL"
XCALL SYSTEM,"DIR/D DSK0:INDEX.FIL[7,6] = ALL:*.IDX[]"
IF BAS'ACT="N" THEN XCALL SYSTEM,LOG'ACT : BAS'ACT="Y"
BEGIN'REPORT:
? TAB(-1,0)
IF O="P" ? TAB(12,22);"Current file: ";
CALL PRINT'NOBREAK
OPEN #1,"DSK0:INDEX.FIL[7,6]",INPUT ! Open list of *.IDX files
NEXT'IDX:
INPUT LINE #1,FILE'NAME
IF EOF(1)=1 THEN GOTO END'IT
LOOKUP FILE'NAME,FOUND
IF FOUND = 0 ON ONE GOTO END'IT,NEXT'IDX ! File does not exist
IF O="P" THEN ? TAB(12,37);FILE'NAME+SPACE(6);
READ'IDX:
OPEN #2,FILE'NAME,RANDOM,512,F2 ! Open '.IDX' as a random file
READ #2,IDX'CTL ! Read directory rock
CLOSE #2
FREE=FREE'COUNT+(F'C2*65536) ! Shift high and low order words
AL=ALLOC+(AL2*65536)
TOTAL=FREE+AL ! Total number of records
PCNT=(AL/TOTAL)*100 ! Percentage full
Q=INSTR(1,FILE'NAME,".IDX")
IF Q # 0 FILE'NAME=FILE'NAME[1;Q-1]+FILE'NAME[Q+4,26]
PLINE[3;22]=FILE'NAME
PLINE[26;2]=KEY'P USING "##"
PLINE[32;2]=K'SIZ USING "##"
PLINE[39;3]=R'SIZ USING "###"
PLINE[47;9]=AL USING "########,"
PLINE[60;9]=TOTAL USING "########,"
PLINE[73;6]=PCNT USING "###.##"
IF PCNT => 95 PLINE[1;1]="*" ! Mark file as being nearly full
CALL PRINT
IF ONE=1 GOTO END'IT ! Only one file requested
GOTO NEXT'IDX
PRINT:
LINCNT=LINCNT+1
IF O="P" THEN ? #CH,PLINE ELSE ? TAB(LINCNT,1);PLINE
PLINE=SPACE(78)
IF O="S" AND LINCNT < 21 RETURN
IF O="P" AND LINCNT < 55 RETURN
IF O="P" CALL PRINT'HEAD : RETURN
? TAB(23,24); : INPUT "'CR' to continue or 'E' to end ",CR$
IF UCS(CR$)="E" THEN GOTO END'NOW
LINCNT=5
? TAB(6,1);TAB(-1,10)
RETURN
PRINT'HEAD:
? #CH,CHR$(12)
PRINT'NOBREAK:
PG=PG+1 : LINCNT=0
PLINE[3;18]="Date: "+TODAY
PLINE[26;29]="ISAM DATA FILES STATUS REPORT"
PLINE[63;16]="Page number: "+PG
CALL PRINT
PLINE[28;20]="Key Rec."
CALL PRINT
PLINE[6;79]="Filename Pos Size Lgth"
PLINE[48;31]="No. used Allowable % used"
CALL PRINT
FOR I = 3 TO 78 : PLINE[I;1]="-" : NEXT I
CALL PRINT : CALL PRINT
RETURN
SINGLE'FILE:
? TAB(12,18);"'CR' for all or enter filename : ";
INPUT LINE "",FILE'NAME
FILE'NAME=UCS(FILE'NAME)
IF FILE'NAME = "" : GOTO OPEN'FILES
X=INSTR(1,FILE'NAME,".IDX")
Y=INSTR(1,FILE'NAME,"[")
IF X=0 AND Y=0 THEN FILE'NAME=FILE'NAME+".IDX" ! In same account
IF X=0 AND Y#0 FILE'NAME=FILE'NAME[1;Y-1]+".IDX"+FILE'NAME[Y,LEN(FILE'NAME)]
LOOKUP FILE'NAME,FND : IF FND=0 THEN ? TAB(22,20);&
: INPUT "FILE NOT FOUND 'CR' TO CONTINUE ",CR : GOTO OUTPUT'TO
IF FILE'NAME # "" ONE=1 : ?TAB(-1,0) : CALL PRINT'NOBREAK : GOTO READ'IDX
END'IT:
IF ONE=1 ? TAB(23,34);:INPUT "'CR' to continue ",CR
CLOSE #CH
IF ONE=1 GOTO OUTPUT'TO
IF O="P" XCALL SPOOL,"IDXREP.LST","",4 ! Print and erase file
END'NOW:
IF ERR(0)=1 AND BAS'ACT="N" THEN XCALL SYSTEM,LOG'ACT ! GOTO orig account
? TAB(23,24);CHR(7);">>**** End of program ****<<" : END