Files
libaaruformat/include/aaru.h

1023 lines
53 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* This file is part of the Aaru Data Preservation Suite.
* Copyright (c) 2019-2025 Natalia Portillo.
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of the
* License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef LIBAARUFORMAT_AARU_H
#define LIBAARUFORMAT_AARU_H
#ifndef _MSC_VER
#pragma clang diagnostic push
#pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection"
#endif
#include <stdint.h>
/** \file aaru.h
* \brief Public high-level API types: media classifications, per-sector / per-media tag enums and image summary.
*
* This header provides:
* - \ref MediaType : exhaustive enumeration of recognized physical / logical media formats
* (disks, tapes, cards, optics).
* - \ref ImageInfo : summary metadata extracted from an opened image (sizes, creator, geometry,
* drive/media identity).
* - \ref SectorTagType : bit-addressable per-sector auxiliary data kinds (prefix/suffix/ECC/subchannel, etc.).
* - \ref MediaTagType : higher-level per-media metadata structures (TOCs, format information, IDs,
* inquiry pages, etc.).
*
* Value range conventions (MediaType): groups of contiguous numeric IDs are reserved for technology families;
* comments in the enum mark the ranges. This stable numeric mapping forms part of the external on-disk and
* API contract—do not renumber existing entries. New media types must be appended in an unused range or in an
* explicitly extended tail section to preserve backward compatibility.
*
* Thread safety: All types here are PODs / enumerations and are safe for concurrent read-only access.
* Encoding: All UTF-8 textual pointers inside \ref ImageInfo refer to NUL-terminated dynamically allocated
* buffers owned by the context that produced them (caller copies if persistence is required beyond context lifetime).
*
* See also: aaruformat/context.h for runtime context internals and metadata/dump structures.
*/
/** \addtogroup MediaTypes Media type classification
* Comprehensive list of supported physical / logical media. Grouped by numeric ranges in the enum.
* @{ */
/** \enum MediaType
* \brief Enumerates every recognized media / cartridge / optical / tape / card / disk format.
*
* The numeric values are ABI- and file-format-stable. They are stored verbatim in serialized Aaru images
* and MUST NOT be changed. Only append new identifiers. When adding new values document them clearly.
*
* Typical usage patterns:
* - Switch over a MediaType to choose decoding / geometry heuristics.
* - Persist the numeric value in sidecar metadata (never stringify and parse unless necessary).
* - Provide user-facing localization by mapping the enum to translated labels externally.
*
* Ranges (do not reorder existing values):
* - 09: Generic / unknown basic categories.
* - 1039: Compact Disc (CD) family (Red/Yellow/Green/Orange Books & variants).
* - 4050: DVD family.
* - 5159: HD-DVD family.
* - 6069: Blu-ray family.
* - 7079: Rare / niche optical formats.
* - 8089: LaserDisc and derivatives.
* - 9099: MiniDisc related.
* - 100109: Plasmon UDO.
* - 110169: Console / game optical & cartridge media (Sony / Sega / others).
* - 170229: Additional console & early optical / cartridge variants.
* - 180289: Floppy standards (Apple / IBM / NEC / ECMA / vendor-specific).
* - 290309: Non-standard / extended PC floppy formats.
* - 310359: Tape & removable disk (OnStream, AIT, Iomega, etc.).
* - 360399: Audio/video and DEC / Exabyte families.
* - 400699: Removable cards (PCMCIA, MemoryStick, SD, MMC), additional tape/storage families.
* - 700739: DEC hard disks & Imation removable media.
* - 740749: Niche video disc formats (VideoNow, etc.).
* - 750+: Extended / rare or future additions.
*
* Invariants / recommendations:
* - Treat Unknown (0) as a safe default; do not assume geometry.
* - Where possible, prefer feature probing (e.g. presence of TOC) instead of relying solely on the enum.
* - New client code should always have a default clause in switch statements to remain forward compatible.
*/
// NOLINTBEGIN(readability-identifier-naming)
typedef enum
{
// Generics, types 0 to 9
UnknownMedia = 0, ///< Unknown disk type
UnknownMO = 1, ///< Unknown magneto-optical
GENERIC_HDD = 2, ///< Generic hard disk
Microdrive = 3, ///< Microdrive type hard disk
Zone_HDD = 4, ///< Zoned hard disk
FlashDrive = 5, ///< USB flash drives
// Generics, types 0 to 9
// Somewhat standard Compact Disc formats, types 10 to 39
CD = 10, ///< Any unknown or standard violating CD
CDDA = 11, ///< CD Digital Audio (Red Book)
CDG = 12, ///< CD+G (Red Book)
CDEG = 13, ///< CD+EG (Red Book)
CDI = 14, ///< CD-i (Green Book)
CDROM = 15, ///< CD-ROM (Yellow Book)
CDROMXA = 16, ///< CD-ROM XA (Yellow Book)
CDPLUS = 17, ///< CD+ (Blue Book)
CDMO = 18, ///< CD-MO (Orange Book)
CDR = 19, ///< CD-Recordable (Orange Book)
CDRW = 20, ///< CD-ReWritable (Orange Book)
CDMRW = 21, ///< Mount-Rainier CD-RW
VCD = 22, ///< Video CD (White Book)
SVCD = 23, ///< Super Video CD (White Book)
PCD = 24, ///< Photo CD (Beige Book)
SACD = 25, ///< Super Audio CD (Scarlet Book)
DDCD = 26, ///< Double-Density CD-ROM (Purple Book)
DDCDR = 27, ///< DD CD-R (Purple Book)
DDCDRW = 28, ///< DD CD-RW (Purple Book)
DTSCD = 29, ///< DTS audio CD (non-standard)
CDMIDI = 30, ///< CD-MIDI (Red Book)
CDV = 31, ///< CD-Video (ISO/IEC 61104)
PD650 = 32, ///< 120mm, Phase-Change, 1298496 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485
PD650_WORM = 33, ///< 120mm, Write-Once, 1281856 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485
CDIREADY = 34, ///< CD-i Ready, contains a track before the first TOC track, in mode 2, and all TOC tracks are
///< Audio. Subchannel marks track as audio pause.
FMTOWNS = 35, ///< Fujitsu FM Towns bootable CD (mixed-mode proprietary extensions)
// Somewhat standard Compact Disc formats, types 10 to 39
// Standard DVD formats, types 40 to 50
DVDROM = 40, ///< DVD-ROM (applies to DVD Video and DVD Audio)
DVDR = 41, ///< DVD-R
DVDRW = 42, ///< DVD-RW
DVDPR = 43, ///< DVD+R
DVDPRW = 44, ///< DVD+RW
DVDPRWDL = 45, ///< DVD+RW DL
DVDRDL = 46, ///< DVD-R DL
DVDPRDL = 47, ///< DVD+R DL
DVDRAM = 48, ///< DVD-RAM
DVDRWDL = 49, ///< DVD-RW DL
DVDDownload = 50, ///< DVD-Download
// Standard DVD formats, types 40 to 50
// Standard HD-DVD formats, types 51 to 59
HDDVDROM = 51, ///< HD DVD-ROM (applies to HD DVD Video)
HDDVDRAM = 52, ///< HD DVD-RAM
HDDVDR = 53, ///< HD DVD-R
HDDVDRW = 54, ///< HD DVD-RW
HDDVDRDL = 55, ///< HD DVD-R DL
HDDVDRWDL = 56, ///< HD DVD-RW DL
// Standard HD-DVD formats, types 51 to 59
// Standard Blu-ray formats, types 60 to 69
BDROM = 60, ///< BD-ROM (and BD Video)
BDR = 61, ///< BD-R
BDRE = 62, ///< BD-RE
BDRXL = 63, ///< BD-R XL
BDREXL = 64, ///< BD-RE XL
// Standard Blu-ray formats, types 60 to 69
// Rare or uncommon optical standards, types 70 to 79
EVD = 70, ///< Enhanced Versatile Disc
FVD = 71, ///< Forward Versatile Disc
HVD = 72, ///< Holographic Versatile Disc
CBHD = 73, ///< China Blue High Definition
HDVMD = 74, ///< High Definition Versatile Multilayer Disc
VCDHD = 75, ///< Versatile Compact Disc High Density
SVOD = 76, ///< Stacked Volumetric Optical Disc
FDDVD = 77, ///< Five Dimensional disc
// Rare or uncommon optical standards, types 70 to 79
// LaserDisc based, types 80 to 89
LD = 80, ///< Pioneer LaserDisc
LDROM = 81, ///< Pioneer LaserDisc data
LDROM2 = 82,
LVROM = 83,
MegaLD = 84,
// LaserDisc based, types 80 to 89
// MiniDisc based, types 90 to 99
HiMD = 90, ///< Sony Hi-MD
MD = 91, ///< Sony MiniDisc
MDData = 92, ///< MiniDisc DATA (HiFD style data-only variant)
MDData2 = 93, ///< High-capacity MiniDisc DATA 2
// MiniDisc based, types 90 to 99
// Plasmon UDO, types 100 to 109
UDO = 100, ///< 5.25", Phase-Change, 1834348 sectors, 8192 bytes/sector, Ultra Density Optical, ECMA-350, ISO 17345
UDO2 =
101, ///< 5.25", Phase-Change, 3669724 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976
UDO2_WORM =
102, ///< 5.25", Write-Once, 3668759 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976
// Plasmon UDO, types 100 to 109
// Sony game media, types 110 to 129
PlayStationMemoryCard = 110, ///< Sony PlayStation (PS1) memory card (128 KiB, 8 KB blocks)
PlayStationMemoryCard2 = 111, ///< Sony PlayStation 2 memory card (MagicGate, 8 MiB)
PS1CD = 112, ///< Sony PlayStation game CD
PS2CD = 113, ///< Sony PlayStation 2 game CD
PS2DVD = 114, ///< Sony PlayStation 2 game DVD
PS3DVD = 115, ///< Sony PlayStation 3 game DVD
PS3BD = 116, ///< Sony PlayStation 3 game Blu-ray
PS4BD = 117, ///< Sony PlayStation 4 game Blu-ray
UMD = 118, ///< Sony PlayStation Portable Universal Media Disc (ECMA-365)
PlayStationVitaGameCard = 119, ///< PS Vita NV memory card (proprietary flash)
// Sony game media, types 110 to 129
// Microsoft game media, types 130 to 149
XGD = 130, ///< Microsoft X-box Game Disc
XGD2 = 131, ///< Microsoft X-box 360 Game Disc
XGD3 = 132, ///< Microsoft X-box 360 Game Disc
XGD4 = 133, ///< Microsoft X-box One Game Disc
// Microsoft game media, types 130 to 149
// Sega game media, types 150 to 169
MEGACD = 150, ///< Sega MegaCD
SATURNCD = 151, ///< Sega Saturn disc
GDROM = 152, ///< Sega/Yamaha Gigabyte Disc
GDR = 153, ///< Sega/Yamaha recordable Gigabyte Disc
SegaCard = 154, ///< Sega My Card / Sega Card (SG-1000 / Mark III)
MilCD = 155, ///< Sega Dreamcast MIL-CD enhanced multimedia disc
// Sega game media, types 150 to 169
// Other game media, types 170 to 179
HuCard = 170, ///< PC-Engine / TurboGrafx cartridge
SuperCDROM2 = 171, ///< PC-Engine / TurboGrafx CD
JaguarCD = 172, ///< Atari Jaguar CD
ThreeDO = 173, ///< 3DO CD
PCFX = 174, ///< NEC PC-FX
NeoGeoCD = 175, ///< NEO-GEO CD
CDTV = 176, ///< Commodore CDTV
CD32 = 177, ///< Amiga CD32
Nuon = 178, ///< Nuon (DVD based videogame console)
Playdia = 179, ///< Bandai Playdia
// Other game media, types 170 to 179
// Apple standard floppy format, types 180 to 189
Apple32SS = 180, ///< 5.25", SS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR
Apple32DS = 181, ///< 5.25", DS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR
Apple33SS = 182, ///< 5.25", SS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR
Apple33DS = 183, ///< 5.25", DS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR
AppleSonySS = 184, ///< 3.5", SS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR
AppleSonyDS = 185, ///< 3.5", DS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR
AppleFileWare = 186, ///< 5.25", DS, ?D, ?? tracks, ?? spt, 512 bytes/sector, GCR, opposite side heads, aka Twiggy
// Apple standard floppy format
// IBM/Microsoft PC floppy formats, types 190 to 209
DOS_525_SS_DD_8 = 190, ///< 5.25", SS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM
DOS_525_SS_DD_9 = 191, ///< 5.25", SS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM
DOS_525_DS_DD_8 = 192, ///< 5.25", DS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM
DOS_525_DS_DD_9 = 193, ///< 5.25", DS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM
DOS_525_HD = 194, ///< 5.25", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM
DOS_35_SS_DD_8 = 195, ///< 3.5", SS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM
DOS_35_SS_DD_9 = 196, ///< 3.5", SS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM
DOS_35_DS_DD_8 = 197, ///< 3.5", DS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM
DOS_35_DS_DD_9 = 198, ///< 3.5", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM
DOS_35_HD = 199, ///< 3.5", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM
DOS_35_ED = 200, ///< 3.5", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM
DMF = 201, ///< 3.5", DS, HD, 80 tracks, 21 spt, 512 bytes/sector, MFM
DMF_82 = 202, ///< 3.5", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM
XDF_525 = 203, ///< 5.25", DS, HD, 80 tracks, ? spt, ??? + ??? + ??? bytes/sector, MFM track 0 = ??15 sectors, 512
///< bytes/sector, falsified to DOS as 19 spt, 512 bps
XDF_35 = 204, ///< 3.5", DS, HD, 80 tracks, 4 spt, 8192 + 2048 + 1024 + 512 bytes/sector, MFM track 0 = 19 sectors,
///< 512 bytes/sector, falsified to DOS as 23 spt, 512 bps
// IBM/Microsoft PC standard floppy formats, types 190 to 209
// IBM standard floppy formats, types 210 to 219
IBM23FD = 210, ///< 8", SS, SD, 32 tracks, 8 spt, 319 bytes/sector, FM
IBM33FD_128 = 211, ///< 8", SS, SD, 73 tracks, 26 spt, 128 bytes/sector, FM
IBM33FD_256 = 212, ///< 8", SS, SD, 74 tracks, 15 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector
IBM33FD_512 = 213, ///< 8", SS, SD, 74 tracks, 8 spt, 512 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector
IBM43FD_128 = 214, ///< 8", DS, SD, 74 tracks, 26 spt, 128 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector
IBM43FD_256 = 215, ///< 8", DS, SD, 74 tracks, 26 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector
IBM53FD_256 = 216, ///< 8", DS, DD, 74 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
IBM53FD_512 = 217, ///< 8", DS, DD, 74 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
IBM53FD_1024 = 218, ///< 8", DS, DD, 74 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
// IBM standard floppy formats, types 210 to 219
// DEC standard floppy formats, types 220 to 229
RX01 = 220, ///< 8", SS, DD, 77 tracks, 26 spt, 128 bytes/sector, FM
RX02 = 221, ///< 8", SS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM
RX03 = 222, ///< 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM
RX50 = 223, ///< 5.25", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM
// DEC standard floppy formats, types 220 to 229
// Acorn standard floppy formats, types 230 to 239
ACORN_525_SS_SD_40 = 230, ///< 5,25", SS, SD, 40 tracks, 10 spt, 256 bytes/sector, FM
ACORN_525_SS_SD_80 = 231, ///< 5,25", SS, SD, 80 tracks, 10 spt, 256 bytes/sector, FM
ACORN_525_SS_DD_40 = 232, ///< 5,25", SS, DD, 40 tracks, 16 spt, 256 bytes/sector, MFM
ACORN_525_SS_DD_80 = 233, ///< 5,25", SS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM
ACORN_525_DS_DD = 234, ///< 5,25", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM
ACORN_35_DS_DD = 235, ///< 3,5", DS, DD, 80 tracks, 5 spt, 1024 bytes/sector, MFM
ACORN_35_DS_HD = 236, ///< 3,5", DS, HD, 80 tracks, 10 spt, 1024 bytes/sector, MFM
// Acorn standard floppy formats, types 230 to 239
// Atari standard floppy formats, types 240 to 249
ATARI_525_SD = 240, ///< 5,25", SS, SD, 40 tracks, 18 spt, 128 bytes/sector, FM
ATARI_525_ED = 241, ///< 5,25", SS, ED, 40 tracks, 26 spt, 128 bytes/sector, MFM
ATARI_525_DD = 242, ///< 5,25", SS, DD, 40 tracks, 18 spt, 256 bytes/sector, MFM
ATARI_35_SS_DD = 243, ///< 3,5", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM
ATARI_35_DS_DD = 244, ///< 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM
ATARI_35_SS_DD_11 = 245, ///< 3,5", SS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM
ATARI_35_DS_DD_11 = 246, ///< 3,5", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM
// Atari standard floppy formats, types 240 to 249
// Commodore standard floppy formats, types 250 to 259
CBM_35_DD = 250, ///< 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM (1581)
CBM_AMIGA_35_DD = 251, ///< 3,5", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM (Amiga)
CBM_AMIGA_35_HD = 252, ///< 3,5", DS, HD, 80 tracks, 22 spt, 512 bytes/sector, MFM (Amiga)
CBM_1540 = 253, ///< 5,25", SS, DD, 35 tracks, GCR
CBM_1540_Ext = 254, ///< 5,25", SS, DD, 40 tracks, GCR
CBM_1571 = 255, ///< 5,25", DS, DD, 35 tracks, GCR
// Commodore standard floppy formats, types 250 to 259
// NEC/SHARP standard floppy formats, types 260 to 269
NEC_8_SD = 260, ///< 8", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM
NEC_8_DD = 261, ///< 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM
NEC_525_SS = 262, ///< 5.25", SS, SD, 80 tracks, 16 spt, 256 bytes/sector, FM
NEC_525_DS = 263, ///< 5.25", DS, SD, 80 tracks, 16 spt, 256 bytes/sector, MFM
NEC_525_HD = 264, ///< 5,25", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM
NEC_35_HD_8 = 265, ///< 3,5", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM, aka mode 3
NEC_35_HD_15 = 266, ///< 3,5", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM
NEC_35_TD = 267, ///< 3,5", DS, TD, 240 tracks, 38 spt, 512 bytes/sector, MFM
SHARP_525 = NEC_525_HD, ///< 5,25", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM
SHARP_525_9 = 268, ///< 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM
SHARP_35 = NEC_35_HD_8, ///< 3,5", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM, aka mode 3
SHARP_35_9 = 269, ///< 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM
// NEC/SHARP standard floppy formats, types 260 to 269
// ECMA floppy standards, types 270 to 289
ECMA_99_8 = 270, ///< 5,25", DS, DD, 80 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_99_15 = 271, ///< 5,25", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_99_26 = 272, ///< 5,25", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_100 = DOS_35_DS_DD_9, ///< 3,5", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM
ECMA_125 = DOS_35_HD, ///< 3,5", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM
ECMA_147 = DOS_35_ED, ///< 3,5", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM
ECMA_54 = 273, ///< 8", SS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM
ECMA_59 = 274, ///< 8", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM
ECMA_66 =
275, ///< 5,25", SS, DD, 35 tracks, 9 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector
ECMA_69_8 = 276, ///< 8", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, FM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_69_15 = 277, ///< 8", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, FM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_69_26 = 278, ///< 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM, track 0 side 0 = 26 sectors, 128
///< bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector
ECMA_70 = 279, ///< 5,25", DS, DD, 40 tracks, 16 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128
///< bytes/sector, track 0 side 1 = 16 sectors, 256 bytes/sector
ECMA_78 = 280,
ECMA_78_2 = 281, ///< 5,25", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, FM
// ECMA floppy standards, types 270 to 289
// Non-standard PC formats (FDFORMAT, 2M, etc), types 290 to 308
FDFORMAT_525_DD = 290, ///< 5,25", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM
FDFORMAT_525_HD = 291, ///< 5,25", DS, HD, 82 tracks, 17 spt, 512 bytes/sector, MFM
FDFORMAT_35_DD = 292, ///< 3,5", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM
FDFORMAT_35_HD = 293, ///< 3,5", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM
// Non-standard PC formats (FDFORMAT, 2M, etc), types 290 to 308
// Apricot ACT standard floppy formats, type 309
Apricot_35 = 309, ///< 3.5", DS, DD, 70 tracks, 9 spt, 512 bytes/sector, MFM
// Apricot ACT standard floppy formats, type 309
// OnStream ADR, types 310 to 319
ADR2120 = 310,
ADR260 = 311,
ADR30 = 312,
ADR50 = 313,
// OnStream ADR, types 310 to 319
// Advanced Intelligent Tape, types 320 to 339
AIT1 = 320,
AIT1Turbo = 321,
AIT2 = 322,
AIT2Turbo = 323,
AIT3 = 324,
AIT3Ex = 325,
AIT3Turbo = 326,
AIT4 = 327,
AIT5 = 328,
AITETurbo = 329,
SAIT1 = 330,
SAIT2 = 331,
// Advanced Intelligent Tape, types 320 to 339
// Iomega, types 340 to 359
Bernoulli = 340,
Bernoulli2 = 341,
Ditto = 342,
DittoMax = 343,
Jaz = 344,
Jaz2 = 345,
PocketZip = 346,
REV120 = 347,
REV35 = 348,
REV70 = 349,
ZIP100 = 350,
ZIP250 = 351,
ZIP750 = 352,
// Iomega, types 340 to 359
// Audio or video media, types 360 to 369
CompactCassette = 360,
Data8 = 361,
MiniDV = 362,
Dcas25 = 363, ///< D/CAS-25: Digital data on Compact Cassette form factor, special magnetic media, 9-track
Dcas85 = 364, ///< D/CAS-85: Digital data on Compact Cassette form factor, special magnetic media, 17-track
Dcas103 = 365, ///< D/CAS-103: Digital data on Compact Cassette form factor, special magnetic media, 21-track
// Audio media, types 360 to 369
// CompactFlash Association, types 370 to 379
CFast = 370,
CompactFlash = 371,
CompactFlashType2 = 372,
// CompactFlash Association, types 370 to 379
// Digital Audio Tape / Digital Data Storage, types 380 to 389
DigitalAudioTape = 380,
DAT160 = 381,
DAT320 = 382,
DAT72 = 383,
DDS1 = 384,
DDS2 = 385,
DDS3 = 386,
DDS4 = 387,
// Digital Audio Tape / Digital Data Storage, types 380 to 389
// DEC, types 390 to 399
CompactTapeI = 390,
CompactTapeII = 391,
DECtapeII = 392,
DLTtapeIII = 393,
DLTtapeIIIxt = 394,
DLTtapeIV = 395,
DLTtapeS4 = 396,
SDLT1 = 397,
SDLT2 = 398,
VStapeI = 399,
// DEC, types 390 to 399
// Exatape, types 400 to 419
Exatape15m = 400,
Exatape22m = 401,
Exatape22mAME = 402,
Exatape28m = 403,
Exatape40m = 404,
Exatape45m = 405,
Exatape54m = 406,
Exatape75m = 407,
Exatape76m = 408,
Exatape80m = 409,
Exatape106m = 410,
Exatape160mXL = 411,
Exatape112m = 412,
Exatape125m = 413,
Exatape150m = 414,
Exatape170m = 415,
Exatape225m = 416,
// Exatape, types 400 to 419
// PCMCIA / ExpressCard, types 420 to 429
ExpressCard34 = 420,
ExpressCard54 = 421,
PCCardTypeI = 422,
PCCardTypeII = 423,
PCCardTypeIII = 424,
PCCardTypeIV = 425,
// PCMCIA / ExpressCard, types 420 to 429
// SyQuest, types 430 to 449
EZ135 = 430,
EZ230 = 431,
Quest = 432,
SparQ = 433,
SQ100 = 434,
SQ200 = 435,
SQ300 = 436,
SQ310 = 437,
SQ327 = 438,
SQ400 = 439,
SQ800 = 440,
SQ1500 = 441,
SQ2000 = 442,
SyJet = 443,
// SyQuest, types 430 to 449
// Nintendo, types 450 to 469
FamicomGamePak = 450, ///< Nintendo Famicom cartridge
GameBoyAdvanceGamePak = 451, ///< Nintendo Game Boy Advance cartridge
GameBoyGamePak = 452, ///< Nintendo Game Boy / Color cartridge
GOD = 453, ///< Nintendo GameCube Optical Disc
N64DD = 454,
N64GamePak = 455, ///< Nintendo 64 cartridge
NESGamePak = 456, ///< Nintendo NES cartridge
Nintendo3DSGameCard = 457, ///< Nintendo 3DS ROM card
NintendoDiskCard = 458, ///< Famicom Disk System disk
NintendoDSGameCard = 459, ///< Nintendo DS ROM card
NintendoDSiGameCard = 460, ///< Nintendo DSi enhanced ROM card
SNESGamePak = 461, ///< Nintendo SNES (PAL/JPN) cartridge
SNESGamePakUS = 462, ///< Nintendo SNES (US) cartridge (different shell)
WOD = 463, ///< Nintendo Wii Optical Disc
WUOD = 464, ///< Nintendo Wii U Optical Disc
SwitchGameCard = 465, ///< Nintendo Switch Game Card (NV flash)
// Nintendo, types 450 to 469
// IBM Tapes, types 470 to 479
IBM3470 = 470,
IBM3480 = 471,
IBM3490 = 472,
IBM3490E = 473,
IBM3592 = 474,
// IBM Tapes, types 470 to 479
// LTO Ultrium, types 480 to 509
LTO = 480,
LTO2 = 481,
LTO3 = 482,
LTO3WORM = 483,
LTO4 = 484,
LTO4WORM = 485,
LTO5 = 486,
LTO5WORM = 487,
LTO6 = 488,
LTO6WORM = 489,
LTO7 = 490,
LTO7WORM = 491,
// LTO Ultrium, types 480 to 509
// MemoryStick, types 510 to 519
MemoryStick = 510,
MemoryStickDuo = 511,
MemoryStickMicro = 512,
MemoryStickPro = 513,
MemoryStickProDuo = 514,
// MemoryStick, types 510 to 519
// SecureDigital, types 520 to 529
microSD = 520, ///< microSD / microSDHC / microSDXC card
miniSD = 521, ///< miniSD card
SecureDigital = 522, ///< Full-size SD / SDHC / SDXC card
// SecureDigital, types 520 to 529
// MultiMediaCard, types 530 to 539
MMC = 530, ///< MultiMediaCard (legacy)
MMCmicro = 531, ///< MMCmicro (RS-MMC form)
RSMMC = 532, ///< Reduced Size MMC
MMCplus = 533, ///< MMCplus (high speed)
MMCmobile = 534, ///< MMCmobile (dual voltage)
// MultiMediaCard, types 530 to 539
// SLR, types 540 to 569
MLR1 = 540,
MLR1SL = 541,
MLR3 = 542,
SLR1 = 543,
SLR2 = 544,
SLR3 = 545,
SLR32 = 546,
SLR32SL = 547,
SLR4 = 548,
SLR5 = 549,
SLR5SL = 550,
SLR6 = 551,
SLRtape7 = 552,
SLRtape7SL = 553,
SLRtape24 = 554,
SLRtape24SL = 555,
SLRtape40 = 556,
SLRtape50 = 557,
SLRtape60 = 558,
SLRtape75 = 559,
SLRtape100 = 560,
SLRtape140 = 561,
// SLR, types 540 to 569
// QIC, types 570 to 589
QIC11 = 570,
QIC120 = 571,
QIC1350 = 572,
QIC150 = 573,
QIC24 = 574,
QIC3010 = 575,
QIC3020 = 576,
QIC3080 = 577,
QIC3095 = 578,
QIC320 = 579,
QIC40 = 580,
QIC525 = 581,
QIC80 = 582,
// QIC, types 570 to 589
// StorageTek tapes, types 590 to 609
STK4480 = 590,
STK4490 = 591,
STK9490 = 592,
T9840A = 593,
T9840B = 594,
T9840C = 595,
T9840D = 596,
T9940A = 597,
T9940B = 598,
T10000A = 599,
T10000B = 600,
T10000C = 601,
T10000D = 602,
// StorageTek tapes, types 590 to 609
// Travan, types 610 to 619
Travan1 = 610,
Travan1Ex = 611,
Travan3 = 612,
Travan3Ex = 613,
Travan4 = 614,
Travan5 = 615,
Travan7 = 616,
// Travan, types 610 to 619
// VXA, types 620 to 629
VXA1 = 620,
VXA2 = 621,
VXA3 = 622,
// VXA, types 620 to 629
// Magneto-optical, types 630 to 659
ECMA_153 = 630, ///< 5,25", M.O., ??? sectors, 1024 bytes/sector, ECMA-153, ISO 11560
ECMA_153_512 = 631, ///< 5,25", M.O., ??? sectors, 512 bytes/sector, ECMA-153, ISO 11560
ECMA_154 = 632, ///< 3,5", M.O., 249850 sectors, 512 bytes/sector, ECMA-154, ISO 10090
ECMA_183_512 = 633, ///< 5,25", M.O., 904995 sectors, 512 bytes/sector, ECMA-183, ISO 13481
ECMA_183 = 634, ///< 5,25", M.O., 498526 sectors, 1024 bytes/sector, ECMA-183, ISO 13481
ECMA_184_512 = 635, ///< 5,25", M.O., 1128772 or 1163337 sectors, 512 bytes/sector, ECMA-183, ISO 13549
ECMA_184 = 636, ///< 5,25", M.O., 603466 or 637041 sectors, 1024 bytes/sector, ECMA-183, ISO 13549
ECMA_189 = 637, ///< 300mm, M.O., ??? sectors, 1024 bytes/sector, ECMA-189, ISO 13614
ECMA_190 = 638, ///< 300mm, M.O., ??? sectors, 1024 bytes/sector, ECMA-190, ISO 13403
ECMA_195 = 639, ///< 5,25", M.O., 936921 or 948770 sectors, 1024 bytes/sector, ECMA-195, ISO 13842
ECMA_195_512 = 640, ///< 5,25", M.O., 1644581 or 1647371 sectors, 512 bytes/sector, ECMA-195, ISO 13842
ECMA_201 = 641, ///< 3,5", M.O., 446325 sectors, 512 bytes/sector, ECMA-201, ISO 13963
ECMA_201_ROM = 642, ///< 3,5", M.O., 429975 sectors, 512 bytes/sector, embossed, ISO 13963
ECMA_223 = 643, ///< 3,5", M.O., 371371 sectors, 1024 bytes/sector, ECMA-223
ECMA_223_512 = 644, ///< 3,5", M.O., 694929 sectors, 512 bytes/sector, ECMA-223
ECMA_238 = 645, ///< 5,25", M.O., 1244621 sectors, 1024 bytes/sector, ECMA-238, ISO 15486
ECMA_239 = 646, ///< 3,5", M.O., 318988, 320332 or 321100 sectors, 2048 bytes/sector, ECMA-239, ISO 15498
ECMA_260 = 647, ///< 356mm, M.O., 14476734 sectors, 1024 bytes/sector, ECMA-260, ISO 15898
ECMA_260_Double = 648, ///< 356mm, M.O., 24445990 sectors, 1024 bytes/sector, ECMA-260, ISO 15898
ECMA_280 = 649, ///< 5,25", M.O., 1128134 sectors, 2048 bytes/sector, ECMA-280, ISO 18093
ECMA_317 = 650, ///< 300mm, M.O., 7355716 sectors, 2048 bytes/sector, ECMA-317, ISO 20162
ECMA_322 = 651, ///< 5,25", M.O., 1095840 sectors, 4096 bytes/sector, ECMA-322, ISO 22092
ECMA_322_2k = 652, ///< 5,25", M.O., 2043664 sectors, 2048 bytes/sector, ECMA-322, ISO 22092
GigaMo = 653, ///< 3,5", M.O., 605846 sectors, 2048 bytes/sector, Cherry Book, GigaMo, ECMA-351, ISO 17346
GigaMo2 = 654, ///< 3,5", M.O., 1063146 sectors, 2048 bytes/sector, Cherry Book 2, GigaMo 2, ECMA-353, ISO 22533
// Magneto-optical, types 630 to 659
// Other floppy standards, types 660 to 689
CompactFloppy = 660,
DemiDiskette = 661,
Floptical = 662, ///< 3.5", 652 tracks, 2 sides, 512 bytes/sector, Floptical, ECMA-207, ISO 14169
HiFD = 663,
QuickDisk = 664,
UHD144 = 665,
VideoFloppy = 666,
Wafer = 667,
ZXMicrodrive = 668,
// Other floppy standards, types 660 to 669
// Miscellaneous, types 670 to 689
BeeCard = 670,
Borsu = 671,
DataStore = 672,
DIR = 673,
DST = 674,
DTF = 675,
DTF2 = 676,
Flextra3020 = 677,
Flextra3225 = 678,
HiTC1 = 679,
HiTC2 = 680,
LT1 = 681,
MiniCard = 872,
Orb = 683,
Orb5 = 684,
SmartMedia = 685,
xD = 686,
XQD = 687,
DataPlay = 688,
// Miscellaneous, types 670 to 689
// Apple specific media, types 690 to 699
AppleProfile = 690,
AppleWidget = 691,
AppleHD20 = 692,
PriamDataTower = 693,
Pippin = 694,
// Apple specific media, types 690 to 699
// DEC hard disks, types 700 to 729
RA60 = 700, ///< 2382 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 204890112 bytes
RA80 = 701, ///< 546 cylinders, 14 tracks/cylinder, 31 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 121325568 bytes
RA81 = 702, ///< 1248 cylinders, 14 tracks/cylinder, 51 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 456228864 bytes
RC25 = 703, ///< 302 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 25976832 bytes
RD31 = 704, ///< 615 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 21411840 bytes
RD32 = 705, ///< 820 cylinders, 6 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 42823680 bytes
RD51 = 706, ///< 306 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 10653696 bytes
RD52 = 707, ///< 480 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 30965760 bytes
RD53 = 708, ///< 1024 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 75497472 bytes
RD54 = 709, ///< 1225 cylinders, 8 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 159936000 bytes
RK06 = 710, ///< 411 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512
///< bytes/sector, 13888512 bytes
RK06_18 = 711, ///< 411 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576
///< bytes/sector, 14204160 bytes
RK07 = 712, ///< 815 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512
///< bytes/sector, 27540480 bytes
RK07_18 = 713, ///< 815 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576
///< bytes/sector, 28166400 bytes
RM02 = 714, ///< 823 cylinders, 5 tracks/cylinder, 32 sectors/track, 256 words/sector, 16 bits/word, 512
///< bytes/sector, 67420160 bytes
RM03 = 715, ///< 823 cylinders, 5 tracks/cylinder, 32 sectors/track, 256 words/sector, 16 bits/word, 512
///< bytes/sector, 67420160 bytes
RM05 = 716, ///< 823 cylinders, 19 tracks/cylinder, 32 sectors/track, 256 words/sector, 16 bits/word, 512
///< bytes/sector, 256196608 bytes
RP02 = 717, ///< 203 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 22865920 bytes
RP02_18 = 718, ///< 203 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576
///< bytes/sector, 23385600 bytes
RP03 = 719, ///< 400 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 45056000 bytes
RP03_18 = 720, ///< 400 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576
///< bytes/sector, 46080000 bytes
RP04 = 721, ///< 411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 87960576 bytes
RP04_18 = 722, ///< 411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576
///< bytes/sector, 89959680 bytes
RP05 = 723, ///< 411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 87960576 bytes
RP05_18 = 724, ///< 411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576
///< bytes/sector, 89959680 bytes
RP06 = 725, ///< 815 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512
///< bytes/sector, 174423040 bytes
RP06_18 = 726, ///< 815 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576
///< bytes/sector, 178387200 bytes
// DEC hard disks, types 700 to 729
// Imation, types 730 to 739
LS120 = 730, ///< Imation LS-120 SuperDisk
LS240 = 731, ///< Imation LS-240 SuperDisk
FD32MB = 732, ///< MF2HD formatted as 32MiB disk in Imation LS-240 drive
RDX = 733, ///< Tandberg / Imation RDX removable disk cartridge
RDX320 = 734, ///< Imation 320Gb RDX
// Imation, types 730 to 739
// VideoNow, types 740 to 749
VideoNow = 740, ///< Hasbro VideoNow 85 mm proprietary video disc
VideoNowColor = 741, ///< Hasbro VideoNow Color disc
VideoNowXp = 742 ///< Hasbro VideoNow XP higher capacity disc
//
} MediaType;
/** @} */ /* end of MediaTypes group */
// NOLINTEND(readability-identifier-naming)
/** \struct ImageInfo
* \ingroup MediaTypes
* \brief High-level summary of an opened Aaru image containing metadata and media characteristics.
*
* This structure aggregates essential information extracted from an Aaru format image file,
* providing callers with a comprehensive view of the imaged media without requiring access
* to internal image structures. All fields are read-only from the caller's perspective and
* reflect the state at the time the image was created or last modified.
*
* \par Field Semantics:
*
* \b HasPartitions (uint8_t):
* - Non-zero (typically 1) if the image contains partition table metadata (MBR, GPT, APM, etc.)
* or, for optical media, track information structures.
* - Zero if no partition/track structures were detected or if the media is unpartitioned.
* - Usage: Check this before attempting to enumerate partitions/tracks via dedicated APIs.
*
* \b HasSessions (uint8_t):
* - Non-zero (typically 1) if multiple recording sessions are present (primarily optical media).
* - Zero for single-session media or media types that don't support sessions (e.g., floppy, HDD).
* - Usage: Multi-session handling may require session-specific TOC/track enumeration.
*
* \b ImageSize (uint64_t):
* - Total size in bytes of image payload data, excluding format headers, metadata, and container overhead.
* - May not reflect current file size due to compression, sparse allocation, or incremental updates.
* - Usage: For informational/statistical purposes; not reliable for disk space calculations.
*
* \b Sectors (uint64_t):
* - Total count of addressable logical blocks (sectors) in the image.
* - Range: [1, 2^64-1] for valid images; 0 indicates corruption or initialization failure.
* - Usage: Multiply by SectorSize to determine total addressable capacity.
*
* \b SectorSize (uint32_t):
* - Size of each logical sector in bytes. Common values: 512, 2048, 2352, 4096.
* - Guaranteed to be non-zero for valid images; may vary by media type (CD: 2352, HDD: 512/4096).
* - Usage: Required for LBA-to-byte offset calculations and buffer allocation.
*
* \b Version[32] (char array):
* - NUL-terminated string identifying the Aaru image format version (e.g., "6.0", "5.3").
* - Not necessarily the application version; reflects on-disk format compatibility level.
* - Empty string if version information is unavailable or unrecognized.
*
* \b Application[64] (char array):
* - NUL-terminated string naming the application that created the image (e.g., "Aaru", "DiscImageChef").
* - May contain vendor/project identifiers; not guaranteed to match executable name.
* - Empty string if creator information was not stored or is unavailable.
*
* \b ApplicationVersion[32] (char array):
* - NUL-terminated string specifying the version of the creating application (e.g., "6.0.0-alpha1").
* - Semantic versioning format recommended but not enforced.
* - Empty string if version metadata is absent.
*
* \b CreationTime (int64_t):
* - Image creation timestamp as Windows FILETIME: 100-nanosecond intervals since January 1, 1601 00:00:00 UTC.
* - Zero (0) may represent epoch or absence of creation time; check for < 0 for explicit invalidity.
* - Usage: Convert to UNIX timestamp via: (CreationTime / 10000000) - 11644473600.
*
* \b LastModificationTime (int64_t):
* - Last modification timestamp in Windows FILETIME format (same encoding as CreationTime).
* - Updated when image data or metadata is altered; not filesystem modification time.
* - May equal CreationTime for unmodified images.
* - Negative values indicate missing/invalid metadata.
*
* \b MediaType (uint32_t):
* - Numeric identifier from the \ref MediaType enumeration representing the physical/logical media.
* - Value 0 (\ref Unknown) when automatic detection failed or media is unrecognized/exotic.
* - Stable across versions; safe to persist and compare.
* - Usage: Cast to \c MediaType enum for switch/case logic; always include default/Unknown handling.
*
* \b MetadataMediaType (uint8_t):
* - Internal identifier used for sidecar/metadata generation (METS/CICM/ALTO compatibility).
* - Not directly useful for most callers; primarily for serialization/archival workflows.
*
* \par Invariants and Constraints:
* - All pointer-like char arrays are guaranteed NUL-terminated and safe for string functions.
* - Sectors > 0 and SectorSize > 0 for structurally valid images.
* - Timestamps may be 0 or negative; consumers must validate before using.
* - MediaType range corresponds to \ref MediaType enum; out-of-range values are possible for future extensions.
*
* \par Thread Safety:
* - Struct contents are stable after retrieval; safe for concurrent reads.
* - Do not cache ImageInfo across context operations that may invalidate it (e.g., re-opening).
*
* \par ABI Stability:
* - Field layout is ABI-stable; new fields append to end in future versions.
* - Reordering or removing fields constitutes a major version break.
* - Linter suppressions acknowledge intentionally large field count for completeness.
*/
typedef struct ImageInfo // NOLINT
{
uint8_t HasPartitions; ///< Image contains partitions (or tracks for optical media); 0=no, non-zero=yes
uint8_t HasSessions; ///< Image contains multiple sessions (optical media); 0=single/none, non-zero=multi
uint64_t ImageSize; ///< Size of the image payload in bytes (excludes headers/metadata)
uint64_t Sectors; ///< Total count of addressable logical sectors/blocks
uint32_t SectorSize; ///< Size of each logical sector in bytes (512, 2048, 2352, 4096, etc.)
char Version[32]; ///< Image format version string (NUL-terminated, e.g., "6.0")
char Application[64]; ///< Name of application that created the image (NUL-terminated)
char ApplicationVersion[32]; ///< Version of the creating application (NUL-terminated)
int64_t CreationTime; ///< Image creation timestamp (Windows FILETIME: 100ns since 1601-01-01 UTC)
int64_t LastModificationTime; ///< Last modification timestamp (Windows FILETIME format)
uint32_t MediaType; ///< Media type identifier (see \ref MediaType enum; 0=Unknown)
uint8_t MetadataMediaType; ///< Media type for sidecar generation (internal archival use)
} ImageInfo;
/** \addtogroup SectorTags Per-sector metadata tag types
* \brief Optional auxiliary fragments accompanying a raw sector dump.
*
* Sector tags preserve on-disk / on-media structures that are not part of the main user data (sync/header/ECC, etc.).
* They enable exact reconstruction, verification or advanced analysis (error injection, subchannel decoding, etc.).
* Retrieval APIs generally expose presence queries and raw byte buffers of fixed size (unless documented as string).
* @{
*/
// NOLINTBEGIN(readability-identifier-naming)
typedef enum
{
AppleSonyTagAaru = 0, ///< Apple's Sony sector tags, 12 bytes (address prolog + checksum)
CdSectorSync = 1, ///< 12-byte CD sync pattern (00 FF*10 00)
CdSectorHeader = 2, ///< 4-byte CD header (minute, second, frame, mode)
CdSectorSubHeader = 3, ///< Mode 2 Form subheader (8 bytes: copy, submode, channel)
CdSectorEdc = 4, ///< 32-bit CRC (EDC)
CdSectorEccP = 5, ///< 172 bytes Reed-Solomon ECC (P)
CdSectorEccQ = 6, ///< 104 bytes Reed-Solomon ECC (Q)
CdSectorEcc = 7, ///< Combined P+Q ECC (276 bytes)
CdSectorSubchannelAaru = 8, ///< 96 raw subchannel bytes (P-W)
CdTrackIsrc = 9, ///< Track ISRC (12 ASCII chars, no terminator)
CdTrackText = 10, ///< Track text (CD-Text fragment, 13 bytes)
CdTrackFlags = 11, ///< Track flags (audio/data, copy permitted, pre-emphasis)
DvdCmi = 12, ///< DVD Copyright Management Information (CSS)
FloppyAddressMark = 13, ///< Raw address mark & sync preamble (format dependent)
DvdSectorTitleKey = 14, ///< DVD sector title key, 5 bytes
DvdTitleKeyDecrypted = 15, ///< Decrypted DVD sector title key, 5 bytes
DvdSectorInformation = 16, ///< DVD sector information, 1 bytes
DvdSectorNumber = 17, ///< DVD sector number, 3 bytes
DvdSectorIedAaru = 18, ///< DVD sector ID error detection, 2 bytes
DvdSectorEdcAaru = 19, ///< DVD sector EDC, 4 bytes
AppleProfileTagAaru = 20, ///< Apple's Profile sector tags, 20 bytes
PriamDataTowerTagAaru = 21, ///< Priam DataTower sector tags, 24 bytes
MaxSectorTag = PriamDataTowerTagAaru
} SectorTagType;
/** @} */ /* end of SectorTags group */
/*
* Metadata present for each media.
*/
// NOLINTBEGIN(readability-identifier-naming)
/** \addtogroup MediaTags Per-media metadata tag types
* \brief High-level descriptors captured for the whole medium (lead-in/out, inquiry data, identification registers).
*
* Media tags are coarse-grained data blocks not tied to individual sectors. Absence indicates either unreadability
* (hardware limitation / error) or irrelevance for the specific media. Consumers should treat absence as unknown, not
* failure. Enum values are stable and serialized; append only.
* @{ */
typedef enum
{
/* CD table of contents */
CD_TOC = 0, ///< Standard CD Table Of Contents (lead-in, first session)
CD_SessionInfo = 1, ///< Per-session summary (start/end addresses, track count)
CD_FullTOC = 2, ///< Complete multi-session TOC including hidden tracks
CD_PMA = 3, ///< Program Memory Area (temporary track info before finalization)
CD_ATIP = 4, ///< Absolute Time In Pregroove (writable media timing & power metadata)
CD_TEXT = 5, ///< CD-Text blocks (titles, performers, etc.)
CD_MCN = 6, ///< Media Catalogue Number (EAN/UPC style identifier)
DVD_PFI = 7, ///< Physical Format Information (layer geometry & book type)
DVD_CMI = 8, ///< Copyright Management Information (CSS/CPRM flags)
DVD_DiscKey = 9, ///< Encrypted disc key block (CSS)
DVD_BCA = 10, ///< Burst Cutting Area (etched manufacturer / AACS info)
DVD_DMI = 11, ///< Disc Manufacturer Information (lead-in descriptor)
DVD_MediaIdentifier = 12, ///< Writable media dye / manufacturer ID
DVD_MKB = 13, ///< Media Key Block (AACS/DVD)
DVDRAM_DDS = 14, ///< Defect Data Structure (DVD-RAM mapping)
DVDRAM_MediumStatus = 15, ///< Medium Status (allocated spare info)
DVDRAM_SpareArea = 16, ///< Spare area descriptors
DVDR_RMD = 17, ///< Recorded Media Data (RMD) last border-out
DVDR_PreRecordedInfo = 18, ///< Pre-recorded info area (lead-in)
DVDR_MediaIdentifier = 19, ///< DVD-R/-RW writable media identifier
DVDR_PFI = 20, ///< DVD-R physical format (layer data)
DVD_ADIP = 21, ///< Address In Pregroove (DVD+ / wobble timing)
HDDVD_CPI = 22, ///< Content Protection Info (HD DVD)
HDDVD_MediumStatus = 23, ///< HD DVD Medium status (spares/defects)
DVDDL_LayerCapacity = 24, ///< Dual layer capacity & break info
DVDDL_MiddleZoneAddress = 25, ///< Middle zone start LBA
DVDDL_JumpIntervalSize = 26, ///< Jump interval size (opposite track path)
DVDDL_ManualLayerJumpLBA = 27, ///< Manual layer jump LBA (OTP)
BD_DI = 28, ///< Disc Information (BD)
BD_BCA = 29, ///< Blu-ray Burst Cutting Area
BD_DDS = 30, ///< Disc Definition Structure (recordable)
BD_CartridgeStatus = 31, ///< Cartridge presence / write protect (BD-RE/BD-R in caddy)
BD_SpareArea = 32, ///< BD spare area allocation map
AACS_VolumeIdentifier = 33, ///< AACS Volume Identifier
AACS_SerialNumber = 34, ///< Pre-recorded media serial number (AACS)
AACS_MediaIdentifier = 35, ///< AACS Media Identifier (unique per disc)
AACS_MKB = 36, ///< AACS Media Key Block
AACS_DataKeys = 37, ///< Extracted AACS title/volume keys (when decrypted)
AACS_LBAExtents = 38, ///< LBA extents requiring bus encryption
AACS_CPRM_MKB = 39, ///< CPRM Media Key Block
Hybrid_RecognizedLayers = 40, ///< Hybrid disc recognized layer combinations (e.g. CD/DVD/BD)
MMC_WriteProtection = 41, ///< Write protection status (MMC GET CONFIG)
MMC_DiscInformation = 42, ///< Disc Information (recordable status, erasable, last session)
MMC_TrackResourcesInformation = 43, ///< Track Resources (allocated/open track data)
MMC_POWResourcesInformation = 44, ///< Pseudo OverWrite resources (BD-R POW)
SCSI_INQUIRY = 45, ///< SCSI INQUIRY standard data (SPC-*)
SCSI_MODEPAGE_2A = 46, ///< SCSI Mode Page 2Ah (CD/DVD capabilities)
ATA_IDENTIFY = 47, ///< ATA IDENTIFY DEVICE (512 bytes)
ATAPI_IDENTIFY = 48, ///< ATA PACKET IDENTIFY DEVICE
PCMCIA_CIS = 49, ///< PCMCIA/CardBus CIS tuple chain
SD_CID = 50, ///< SecureDigital Card ID register
SD_CSD = 51, ///< SecureDigital Card Specific Data
SD_SCR = 52, ///< SecureDigital Configuration Register
SD_OCR = 53, ///< SecureDigital Operation Conditions (voltage)
MMC_CID = 54, ///< MMC Card ID
MMC_CSD = 55, ///< MMC Card Specific Data
MMC_OCR = 56, ///< MMC Operation Conditions
MMC_ExtendedCSD = 57, ///< MMC Extended CSD (512 bytes)
Xbox_SecuritySector = 58, ///< Xbox/Xbox 360 Security Sector (SS.bin)
Floppy_LeadOut = 59, ///< Manufacturer / duplication cylinder (floppy special data)
DiscControlBlock = 60, ///< DVD Disc Control Blocks
CD_FirstTrackPregap = 61, ///< First track pregap (index 0)
CD_LeadOut = 62, ///< Lead-out area contents
SCSI_MODESENSE_6 = 63, ///< Raw MODE SENSE (6) data
SCSI_MODESENSE_10 = 64, ///< Raw MODE SENSE (10) data
USB_Descriptors = 65, ///< Concatenated USB descriptors (device/config/interface)
Xbox_DMI = 66, ///< Xbox Disc Manufacturing Info (DMI)
Xbox_PFI = 67, ///< Xbox Physical Format Information (PFI)
CD_LeadIn = 68, ///< Raw lead-in (TOC frames)
MiniDiscType = 69, ///< 8 bytes response that seems to define type of MiniDisc
MiniDiscD5 = 70, ///< 4 bytes response to vendor command D5h
MiniDiscUTOC = 71, ///< User TOC, contains fragments, track names, and can be from 1 to 3 sectors of 2336 bytes
MiniDiscDTOC = 72, ///< Not entirely clear kind of TOC that only appears on MD-DATA discs
DVD_DiscKey_Decrypted = 73, ///< Decrypted DVD disc key,
MaxMediaTag = DVD_DiscKey_Decrypted
} MediaTagType;
/** @} */ /* end of MediaTags group */
// NOLINTEND(readability-identifier-naming)
#ifndef _MSC_VER
#pragma clang diagnostic pop
#endif
#endif // LIBAARUFORMAT_AARU_H