' *** DISKINFO.LST *** 2nd GFA-Manual, page 11-21 > PROCEDURE disk_info(dr$,VAR nsides,tracks,spt,spd,spf,ser%,name$,exec!,ibm!,ok!) ' ' *** Return information about disk in drive dr$: ' *** nsides& - number of sides (1 or 2) ' *** tracks& - number of tracks (usually 80; 81 or 82 also possible) ' *** spt& - sectors per track (9 or 10) ' *** spd& - sectors for directory (usually 5 or 7); 16 entries/sector ' *** spf& - sectors for FAT (usually 3 or 5) ' *** ser% - serial number of disk ' *** name$ - name of disk (sometimes "") ' *** exec! - TRUE if executable bootsector (be careful!!) ' *** ibm! - TRUE if (probably) IBM-compatible ' *** Other parameters standard: 512 bytes/sector, 2 sectors/cluster, 2 FATs ' *** Procedure returns ok!=TRUE if successful ' LOCAL buffer%,drive,e,sum%,i,dta.adr%,stat INLINE buffer%,512 drive=ASC(UPPER$(dr$))-65 ! 0 = drive A, 1 = drive B ~FSFIRST(dr$+":\@@$$%%&&",17) ! force media-change e=BIOS(4,0,L:buffer%,1,0,drive) ! load bootsector IF e<>0 m$=" *** Error ***|Bootsector of disk in drive "+dr$+"|was not " m$=m$+"loaded by Procedure |Disk_info" ALERT 3,m$,1,"Sorry",k ok!=FALSE ELSE ok!=TRUE ENDIF IF ok! nsides=BYTE{buffer%+26} spt=BYTE{buffer%+24} tracks=(BYTE{buffer%+19}+256*BYTE{buffer%+20})/(spt*nsides) spd=(BYTE{buffer%+17}+256*BYTE{buffer%+18})/16 spf=BYTE{buffer%+22} ser%=SHR(LONG{buffer%+8},8) dta.adr%=FGETDTA() stat=FSFIRST(dr$+":\*.*",8) ! search for disk-name (bit 3) IF stat=0 LET name$=CHAR{dta.adr%+30} ! found it ELSE LET name$="" ! no name ENDIF sum%=0 ! checksum FOR i=0 TO 255 ADD sum%,CARD{ADD(buffer%,MUL(i,2))} NEXT i sum%=sum% AND &HFFFF IF sum%=&H1234 exec!=TRUE ELSE exec!=FALSE ENDIF IF BYTE{buffer%}=&HEB ibm!=TRUE ELSE ibm!=FALSE ENDIF ENDIF ~FSFIRST(dr$+":\@@$$%%&&",17) ! force media-change RETURN ' ******* '