Difference between revisions of "Disk directory reader in BASIC"
Jedimatt42 (talk | contribs) |
|||
(One intermediate revision by the same user not shown) | |||
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) | ||
Line 32: | Line 33: | ||
This TI BASIC program reads the directory of a disk and prints it on the screen. The P flag indicates protection | This TI BASIC program reads the directory of a disk and prints it on the screen. The P flag indicates protection. | ||
100 CALL CLEAR | 100 CALL CLEAR | ||
Line 54: | Line 55: | ||
280 PRINT:A$;TAB(12);J;TAB(19);TYP$(ABS(A)); | 280 PRINT:A$;TAB(12);J;TAB(19);TYP$(ABS(A)); | ||
290 IF ABS(A)=5 THEN 320 | 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) | 300 B$=" "&STR$(K) | ||
310 PRINT SEG$(B$,LEN(B$)-2,3); | 310 PRINT SEG$(B$,LEN(B$)-2,3); |
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