MDINFO ====== Get Extended Media Information This toolkit was started in the early 90's, before the SMSQ/E DMEDIUM_xxx functions were added (V2.73), and later patched and added to over time. DMEDIUM_xxx has largely made these redundant for SMSQ/E, and for Qdos, some parts are not relevant. However, it is still useful to include with any compiled program that requires to be compatible with both SMSQ/E and Qdos, as most functions will work with both Level 1 and Level 2 Device Drivers (DDL1/DDL2). A short version of this toolkit, MD_bin, is also included. This is SMSQ/E (DDL2) only. It adds some of the "missing bits" from DMEDIUM_xxx. For details see MD_bin, below. MDINFO ------ Most of the functions take the following parameters: <device> = "filename" | "device" - quoted string or string variable or filename | device - unquoted name or #channel - refering to an already open S*BASIC channel to a Directory Device Note: If no device parameter is given, the Data Default device is used Note: If a channel number is provided, the channel is left open after the call. <filename> is otherwise as <device> above, but refers to a specific file rather than a device in general. level = MDLEVEL(<device>) Returns the DD level, ie 1, 2, .. - or any error allc = MDALLOC(<device>) Returns the Allocation size in bytes, ie the number of bytes (or divide by 512 for the number of sectors) addressed as one block by the file system, for this device. (More under MDFSIZE, below.) file_header = MDFHEAD(<device>) Returns the size of the File header in bytes. (This will probably remain at 64b for all time.) total = MDGOOD(<device>) Returns the total available size of the medium, in bytes. Note: The corresponding DMEDIUM_TOTAL function returns the number of 512b sectors. free = MDFREE(<device>) Returns the amount of free space on the medium, in bytes. Note: The corresponding DMEDIUM_FREE function returns the number of 512b sectors. name$ = MDNAME$(<device>) Returns the Name of the medium, eg "System" rdonly = MDSTAT(<device>) Returns the read-only status of a device. 1 => read only, 0 => read/write Note: Only DD2 devices can currently be made Read Only removable = MDREMV(<device>) Returns the Removable status of a device. 1 => Removable, 0 => Not removable Note: Only DD2 devices can currently be set to Removable usize = MDFSIZE(<device>, fsize) Returns the size taken up by a file of size fsize on a given medium, in bytes. Another way of making this calculation may better demonstrate whats going on: DEFine FuNction Fsize(md$, sz) LOCal allc, fz, uz allc = MDALLOC(md$): REMark Get File allocation size fz = sz + MDFHEAD(md$): REMark Add header to file size uz = LDIV(fz, allc) * allc: REMark Number of whole units IF fz > uz: uz = uz + allc: REMark Round up to nearest unit RETurn uz: REMark File takes up this much space END DEFine Fsize There is one loose end, though: If you are adding a new file, there is a chance that the directory size will also reach a critical level, so that it needs to overflow into a new allocation block itself. There is no easy way to calculate this in advance (as, for example, empty slots may be re-used, etc.) So if you are trying to test in advance whether a new file will fit on a medium, you should add one extra allocation unit to the result to be quite sure! file_header$ = MDHEADR$(<filename>) Returns the actual header of the given file as a (64 byte) string. For details of the file header, see dev8_keys_hdr in the SMSQ/E sources. MD_bin ------ This simplified version of MDINFO is only compatible with DDL2. It has a subset of functions. Their meaning is the same as the corresponding ones above. All return sizes are in bytes. file_use = MDFSIZE(#channel, size) - in bytes free_bytes = MDFREE(#channel) header_size = MDFHEAD(#channel) good_bytes = MDGOOD(#channel) ALU_bytes = MDALLOC(#channel) - Allocation Unit size The channel number must refer to an open channel on a Directory Device. It remains open after the call. Status of this software ----------------------- All code is © pjwitte, except for two PD utilites included in the library which are © Tony Tebby and © David Oliver. V0.07, pjw, 2021 Feb 20, Updated documentation re MDFREE in cut-down toolkit V0.08, pjw, 2021 Oct 27, Updated MDFREE to return bytes, not ALUs Tidied code in head_asm Re-organised toolkit so only one copy of each file V0.09, pjw, 2025 Feb 10, Changed both toolkits to cater for large disks Renamed MDINF to MDINFO, as was always intended Conditions of use and DISCLAIMER as per Knoware.no
Generated by QuickHTM, 2025 Feb 08