syntax = "proto2";

import "lib/common.proto";
import "lib/external/fl2.proto";

message SectorListProto
{
    /* either */
    repeated int32 sector = 1 [ (help) = "sector ID" ];

    /* or */
    optional int32 start_sector = 2
        [ (help) = "first sector of a continuous run" ];
    optional int32 count = 3
        [ (help) = "number of sectors in a continuous run" ];
    optional int32 skew = 4
        [ default = 1, (help) = "apply this skew between sectors" ];
}

message LayoutProto
{
    enum Order
    {
        UNDEFINED = 0;
        CHS = 1;
        HCS = 2;
    }

    message LayoutdataProto
    {
        optional int32 track = 1 [
            (help) =
                "if present, this format only applies to this logical track"
        ];
        optional int32 up_to_track = 5
            [ (help) = "if present, forms a range with track" ];
        optional int32 side = 2 [
            (help) =
                "if present, this format only applies to this logical side"
        ];

        optional int32 sector_size = 3
            [ default = 512, (help) = "number of bytes per sector" ];

        optional SectorListProto physical = 4
            [ (help) = "physical order of sectors on disk" ];
        optional SectorListProto filesystem = 6
            [ (help) = "logical order of sectors in filesystem" ];
    }

    repeated LayoutdataProto layoutdata = 1
        [ (help) = "per-track layout information (repeatable)" ];
    optional int32 tracks = 2
        [ default = 0, (help) = "number of tracks in image" ];
    optional int32 sides = 3
        [ default = 0, (help) = "number of sides in image" ];
    optional Order order = 4
        [ default = CHS, (help) = "the order of sectors in the filesystem" ];
    optional bool swap_sides = 5
        [ default = false, (help) = "the sides are inverted on this disk" ];
    optional FormatType format_type = 6
        [ default = FORMATTYPE_UNKNOWN, (help) = "Format type of image" ];
}
