Difference between revisions of "Disk directory reader in BASIC"

From Ninerpedia
Jump to navigation Jump to search
(Add concrete example of expanding BASIC catalog for devices that support directories.)
 
Line 27: Line 27:
           4= INTERNAL/VARIABLE datafile
           4= INTERNAL/VARIABLE datafile
           5= Memory Image file (Program File)  
           5= Memory Image file (Program File)  
          6= Directory (Extension for devices that support them)
  2. = Number of AUs allocated to the file
  2. = Number of AUs allocated to the file
  3. = Number of bytes per record (0 for type 5 file)
  3. = Number of bytes per record (0 for type 5 file)

Latest revision as of 18:56, 26 July 2020

Catalog file access from Basic - this relates to disks formatted with the original TI hardware and software:

See also: TI Disk format

The Catalog file can be accessed as a read-only file by the Basic user. The file has no name, and is of the INTERNAL, FIXED format type.

The file can be opened by (for example): OPEN #l:"DSK.",lNPUT,INTERNAL,RELATlVE The record length will automatically be defaulted by Basic to the correct value, so this should not be entered. If however the user wants to specify the length, then it must be specified as 38 - all other lengths will result in an error message.

The Catalog file acts as if it is Protected, and as mentioned above, it will only allow INPUT access.

The file is written in the normal Basic INTERNAL format, and each record contains four items: one string and three numerics. There are 128 records in the file, and they are numbered 0 thru 127.

Record 0: This record contains data about the volume for which the catalog file was created. The string gives the name of the disc (up to 10 characters) and the numerical items are as follows:

1. Always 0 (for record 0)
2. Total number of sectors on the disc 
3. Total number of free sectors on the disc 

Records 1 thru 127: These records contain information on the corresponding file in the Catalog. Non existant files will give a null string for the first item, and 0’s (zeros) for the numeric items. Files which exist will give the file name for the string, and the following numeric items:

1. = Filetype (if number is negative, file is protected)
         1= DISPLAY/FIXED datafile
         2= DISPLAY/VARIABLE datafile
         3= INTERNAL/FIXED datafile
         4= INTERNAL/VARIABLE datafile
         5= Memory Image file (Program File) 
         6= Directory (Extension for devices that support them)
2. = Number of AUs allocated to the file
3. = Number of bytes per record (0 for type 5 file)


This TI BASIC program reads the directory of a disk and prints it on the screen. The P flag indicates protection.

100 CALL CLEAR
110 DIM TYP$(5)
120 TYP$(1)="DIS/FIX"
130 TYP$(2)="DIS/VAR"
140 TYP$(3)="INT/FIX"
150 TYP$(4)="INT/VAR"
160 TYP$(5)="PROGRAM"
170 INPUT "MASTER DISK(1-3)?":A
180 A=INT(A)
190 IF A<1 THEN 170
200 IF A>3 THEN 170
210 OPEN #1:"DSK"&STR$(A)&".",INPUT,RELATIVE,INTERNAL
220 INPUT #1:A$,J,J,K
230 PRINT "DSK";STR$(A);" -DISK NAME= ";A$:"FREE= ";K;"USED= ";J-K
240 PRINT:"FILE NAME  SIZE      TYPE  P":"__________ ______ ________ _"
250 FOR LOOP=1 TO 127
260 INPUT #1:A$,A,J,K
270 IF LEN(A$)=0 THEN 350
280 PRINT:A$;TAB(12);J;TAB(19);TYP$(ABS(A));
290 IF ABS(A)=5 THEN 320
300 B$=" "&STR$(K)
310 PRINT SEG$(B$,LEN(B$)-2,3);
320 IF A>0 THEN 340
330 PRINT TAB(28);"P";
340 NEXT LOOP
350 CLOSE #1

You can easily expand this program to consider subdirectories; just replace the number input in line 170-200 by a direct string input and open the given path name in line 210.

Also, directories can be identified in the listing by extending the set of types. Type 6 represents a directory. Line 110 expands the array, 161 adds the mapping of type 6 to the label to print. Line 290 must be altered to skip printing the record length as was done for PROGRAM type files.

100 CALL CLEAR
110 DIM TYP$(6)
120 TYP$(1)="DIS/FIX"
130 TYP$(2)="DIS/VAR"
140 TYP$(3)="INT/FIX"
150 TYP$(4)="INT/VAR"
160 TYP$(5)="PROGRAM"
161 TYP$(6)="DIR    "
170 INPUT "DEVICE?":D$
210 OPEN #1:D$&".",INPUT,RELATIVE,INTERNAL
220 INPUT #1:A$,J,J,K
230 PRINT D$;" -VOL=";A$:"FREE=";K;"USED=";J-K
240 PRINT:"FILE NAME  SIZE TYPE       P":"__________ ____ __________ _"
250 FOR LOOP=1 TO 127
260 INPUT #1:A$,A,J,K
270 IF LEN(A$)=0 THEN 350
280 PRINT:A$;TAB(12);J;TAB(17);TYP$(ABS(A));
290 IF ABS(A)>=5 THEN 320
300 B$=" "&STR$(K)
310 PRINT SEG$(B$,LEN(B$)-2,3);
320 IF A>0 THEN 340
330 PRINT TAB(28);"P";
340 NEXT LOOP
350 CLOSE #1