! 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