/* * 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 . */ #ifndef LIBAARUFORMAT_AARU_H #define LIBAARUFORMAT_AARU_H #ifndef _MSC_VER #pragma clang diagnostic push #pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection" #endif #include /** \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): * - 0–9: Generic / unknown basic categories. * - 10–39: Compact Disc (CD) family (Red/Yellow/Green/Orange Books & variants). * - 40–50: DVD family. * - 51–59: HD-DVD family. * - 60–69: Blu-ray family. * - 70–79: Rare / niche optical formats. * - 80–89: LaserDisc and derivatives. * - 90–99: MiniDisc related. * - 100–109: Plasmon UDO. * - 110–169: Console / game optical & cartridge media (Sony / Sega / others). * - 170–229: Additional console & early optical / cartridge variants. * - 180–289: Floppy standards (Apple / IBM / NEC / ECMA / vendor-specific). * - 290–309: Non-standard / extended PC floppy formats. * - 310–359: Tape & removable disk (OnStream, AIT, Iomega, etc.). * - 360–399: Audio/video and DEC / Exabyte families. * - 400–699: Removable cards (PCMCIA, MemoryStick, SD, MMC), additional tape/storage families. * - 700–739: DEC hard disks & Imation removable media. * - 740–749: 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 // VideoNow, types 740 to 749 // Iomega, types 750 to 759 Bernoulli10 = 750, ///< 8"x11" Bernoulli Box disk with 10Mb capacity ///< 8"x11" Bernoulli Box disk with 20Mb capacity Bernoulli20 = 751, ///< 5⅓" Bernoulli Box II disk with 20Mb capacity BernoulliBox2_20 = 752, // Iomega, types 750 to 759 // Kodak, types 760 to 769 KodakVerbatim3 = 760, ///< Kodak/Verbatim (3Mb) KodakVerbatim6 = 761, ///< Kodak/Verbatim (6Mb) KodakVerbatim12 = 762, ///< Kodak/Verbatim (12Mb) // Kodak, types 760 to 769 // Sony and Panasonic Blu-ray derived, types 770 to 799 ProfessionalDisc = 770, ///< Professional Disc for video, single layer, rewritable, 23Gb ProfessionalDiscDual = 771, ///< Professional Disc for video, dual layer, rewritable, 50Gb ProfessionalDiscTriple = 772, ///< Professional Disc for video, triple layer, rewritable, 100Gb ProfessionalDiscQuad = 773, ///< Professional Disc for video, quad layer, write once, 128Gb PDD = 774, ///< Professional Disc for DATA, single layer, rewritable, 23Gb PDD_WORM = 775, ///< Professional Disc for DATA, single layer, write once, 23Gb ArchivalDisc = 776, ///< Archival Disc, 1st gen., 300Gb ArchivalDisc2 = 777, ///< Archival Disc, 2nd gen., 500Gb ArchivalDisc3 = 778, ///< Archival Disc, 3rd gen., 1Tb ODC300R = 779, ///< Optical Disc archive, 1st gen., write once, 300Gb ODC300RE = 780, ///< Optical Disc archive, 1st gen., rewritable, 300Gb ODC600R = 781, ///< Optical Disc archive, 2nd gen., write once, 600Gb ODC600RE = 782, ///< Optical Disc archive, 2nd gen., rewritable, 600Gb ODC1200RE = 783, ///< Optical Disc archive, 3rd gen., rewritable, 1200Gb ODC1500R = 784, ///< Optical Disc archive, 3rd gen., write once, 1500Gb ODC3300R = 785, ///< Optical Disc archive, 4th gen., write once, 3300Gb ODC5500R = 786, ///< Optical Disc archive, 5th gen., write once, 5500Gb // Sony and Panasonic Blu-ray derived, types 770 to 799 // Magneto-optical, types 800 to 819 ECMA_322_1k = 800, ///< 5,25", M.O., 4383356 sectors, 1024 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart ECMA_322_512 = 801, ///< 5,25", M.O., ??????? sectors, 512 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart ISO_14517 = 802, ///< 5,25", M.O., 1273011 sectors, 1024 bytes/sector, ISO 14517, 2.6Gb/cart ISO_14517_512 = 803, ///< 5,25", M.O., 2244958 sectors, 512 bytes/sector, ISO 14517, 2.3Gb/cart ISO_15041_512 = 804, ///< 3,5", M.O., 1041500 sectors, 512 bytes/sector, ISO 15041, 540Mb/cart HSM650 = 805, ///< 3,5", M.O., ??????? sectors, proprietary, 650Mb/cart, Sony HyperStorage // Magneto-optical, types 800 to 819 // More floppy formats, types 820 to deprecated MetaFloppy_Mod_I = 820, ///< 5.25", SS, DD, 35 tracks, 16 spt, 256 bytes/sector, MFM, 48 tpi, ???rpm HF12 = 823, ///< HyperFlex (12Mb), 5.25", DS, 301 tracks, 78 spt, 256 bytes/sector, MFM, 333 tpi, 600rpm HF24 = 824, ///< HyperFlex (24Mb), 5.25", DS, 506 tracks, 78 spt, 256 bytes/sector, MFM, 666 tpi, 720rpm // More floppy formats, types 820 to deprecated AtariLynxCard = 821, ///< Atari Lynx card AtariJaguarCartridge = 822 ///< Atari Jaguar cartridge } 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, DVD_PFI_2ndLayer = 74, ///< DVD Physical Format Information for the second layer MaxMediaTag = DVD_PFI_2ndLayer } MediaTagType; /** @} */ /* end of MediaTags group */ // NOLINTEND(readability-identifier-naming) #ifndef _MSC_VER #pragma clang diagnostic pop #endif #endif // LIBAARUFORMAT_AARU_H