digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__iso9660 {
label="Iso9660";
graph[style=dotted];
iso9660__seq [label=<
>];
iso9660__inst__sector_size [label=<>];
iso9660__inst__primary_vol_desc [label=<
pos | size | type | id |
(16 * sector_size) | 1459 | VolDesc | primary_vol_desc |
>];
subgraph cluster__vol_desc_primary {
label="Iso9660::VolDescPrimary";
graph[style=dotted];
vol_desc_primary__seq [label=<
pos | size | type | id |
0 | 1 | | unused1 |
1 | 32 | str(UTF-8) | system_id |
33 | 32 | str(UTF-8) | volume_id |
65 | 8 | | unused2 |
73 | 8 | U4bi | vol_space_size |
81 | 32 | | unused3 |
113 | 4 | U2bi | vol_set_size |
117 | 4 | U2bi | vol_seq_num |
121 | 4 | U2bi | logical_block_size |
125 | 8 | U4bi | path_table_size |
133 | 4 | u4le | lba_path_table_le |
137 | 4 | u4le | lba_opt_path_table_le |
141 | 4 | u4be | lba_path_table_be |
145 | 4 | u4be | lba_opt_path_table_be |
149 | 34 | DirEntry | root_dir |
183 | 128 | str(UTF-8) | vol_set_id |
311 | 128 | str(UTF-8) | publisher_id |
439 | 128 | str(UTF-8) | data_preparer_id |
567 | 128 | str(UTF-8) | application_id |
695 | 38 | str(UTF-8) | copyright_file_id |
733 | 36 | str(UTF-8) | abstract_file_id |
769 | 37 | str(UTF-8) | bibliographic_file_id |
806 | 17 | DecDatetime | vol_create_datetime |
823 | 17 | DecDatetime | vol_mod_datetime |
840 | 17 | DecDatetime | vol_expire_datetime |
857 | 17 | DecDatetime | vol_effective_datetime |
874 | 1 | u1 | file_structure_version |
875 | 1 | u1 | unused4 |
876 | 512 | | application_area |
>];
vol_desc_primary__inst__path_table [label=<
pos | size | type | id |
(lba_path_table_le * _root.sector_size) | path_table_size.le | PathTableLe | path_table |
>];
}
subgraph cluster__vol_desc_boot_record {
label="Iso9660::VolDescBootRecord";
graph[style=dotted];
vol_desc_boot_record__seq [label=<
pos | size | type | id |
0 | 32 | str(UTF-8) | boot_system_id |
32 | 32 | str(UTF-8) | boot_id |
>];
}
subgraph cluster__datetime {
label="Iso9660::Datetime";
graph[style=dotted];
datetime__seq [label=<
pos | size | type | id |
0 | 1 | u1 | year |
1 | 1 | u1 | month |
2 | 1 | u1 | day |
3 | 1 | u1 | hour |
4 | 1 | u1 | minute |
5 | 1 | u1 | sec |
6 | 1 | u1 | timezone |
>];
}
subgraph cluster__dir_entry {
label="Iso9660::DirEntry";
graph[style=dotted];
dir_entry__seq [label=<
pos | size | type | id |
0 | 1 | u1 | len |
1 | (len - 1) | DirEntryBody | body |
>];
}
subgraph cluster__vol_desc {
label="Iso9660::VolDesc";
graph[style=dotted];
vol_desc__seq [label=<
pos | size | type | id |
0 | 1 | u1 | type |
1 | 5 | | magic |
6 | 1 | u1 | version |
7 | 64 | VolDescBootRecord | vol_desc_boot_record |
71 | 1388 | VolDescPrimary | vol_desc_primary |
>];
}
subgraph cluster__path_table_entry_le {
label="Iso9660::PathTableEntryLe";
graph[style=dotted];
path_table_entry_le__seq [label=<
pos | size | type | id |
0 | 1 | u1 | len_dir_name |
1 | 1 | u1 | len_ext_attr_rec |
2 | 4 | u4le | lba_extent |
6 | 2 | u2le | parent_dir_idx |
8 | len_dir_name | str(UTF-8) | dir_name |
... | 1 | u1 | padding |
>];
}
subgraph cluster__dir_entries {
label="Iso9660::DirEntries";
graph[style=dotted];
dir_entries__seq [label=<
pos | size | type | id |
0 | ... | DirEntry | entries |
repeat until _.len == 0 |
>];
}
subgraph cluster__u4bi {
label="Iso9660::U4bi";
graph[style=dotted];
u4bi__seq [label=<
pos | size | type | id |
0 | 4 | u4le | le |
4 | 4 | u4be | be |
>];
}
subgraph cluster__u2bi {
label="Iso9660::U2bi";
graph[style=dotted];
u2bi__seq [label=<
pos | size | type | id |
0 | 2 | u2le | le |
2 | 2 | u2be | be |
>];
}
subgraph cluster__path_table_le {
label="Iso9660::PathTableLe";
graph[style=dotted];
path_table_le__seq [label=<
pos | size | type | id |
0 | ... | PathTableEntryLe | entries |
repeat to end of stream |
>];
}
subgraph cluster__dec_datetime {
label="Iso9660::DecDatetime";
graph[style=dotted];
dec_datetime__seq [label=<
pos | size | type | id |
0 | 4 | str(ASCII) | year |
4 | 2 | str(ASCII) | month |
6 | 2 | str(ASCII) | day |
8 | 2 | str(ASCII) | hour |
10 | 2 | str(ASCII) | minute |
12 | 2 | str(ASCII) | sec |
14 | 2 | str(ASCII) | sec_hundreds |
16 | 1 | u1 | timezone |
>];
}
subgraph cluster__dir_entry_body {
label="Iso9660::DirEntryBody";
graph[style=dotted];
dir_entry_body__seq [label=<
pos | size | type | id |
0 | 1 | u1 | len_ext_attr_rec |
1 | 8 | U4bi | lba_extent |
9 | 8 | U4bi | size_extent |
17 | 7 | Datetime | datetime |
24 | 1 | u1 | file_flags |
25 | 1 | u1 | file_unit_size |
26 | 1 | u1 | interleave_gap_size |
27 | 4 | U2bi | vol_seq_num |
31 | 1 | u1 | len_file_name |
32 | len_file_name | str(UTF-8) | file_name |
... | 1 | u1 | padding |
... | ⇲ | | rest |
>];
dir_entry_body__inst__extent_as_dir [label=<
pos | size | type | id |
(lba_extent.le * _root.sector_size) | size_extent.le | DirEntries | extent_as_dir |
>];
dir_entry_body__inst__extent_as_file [label=<
pos | size | type | id |
(lba_extent.le * _root.sector_size) | size_extent.le | | extent_as_file |
>];
}
}
iso9660__inst__sector_size:sector_size_type -> iso9660__inst__primary_vol_desc:primary_vol_desc_pos [color="#404040"];
iso9660__inst__primary_vol_desc:primary_vol_desc_type -> vol_desc__seq [style=bold];
vol_desc_primary__seq:vol_space_size_type -> u4bi__seq [style=bold];
vol_desc_primary__seq:vol_set_size_type -> u2bi__seq [style=bold];
vol_desc_primary__seq:vol_seq_num_type -> u2bi__seq [style=bold];
vol_desc_primary__seq:logical_block_size_type -> u2bi__seq [style=bold];
vol_desc_primary__seq:path_table_size_type -> u4bi__seq [style=bold];
vol_desc_primary__seq:root_dir_type -> dir_entry__seq [style=bold];
vol_desc_primary__seq:vol_create_datetime_type -> dec_datetime__seq [style=bold];
vol_desc_primary__seq:vol_mod_datetime_type -> dec_datetime__seq [style=bold];
vol_desc_primary__seq:vol_expire_datetime_type -> dec_datetime__seq [style=bold];
vol_desc_primary__seq:vol_effective_datetime_type -> dec_datetime__seq [style=bold];
vol_desc_primary__seq:lba_path_table_le_type -> vol_desc_primary__inst__path_table:path_table_pos [color="#404040"];
iso9660__inst__sector_size:sector_size_type -> vol_desc_primary__inst__path_table:path_table_pos [color="#404040"];
u4bi__seq:le_type -> vol_desc_primary__inst__path_table:path_table_size [color="#404040"];
vol_desc_primary__inst__path_table:path_table_type -> path_table_le__seq [style=bold];
dir_entry__seq:len_type -> dir_entry__seq:body_size [color="#404040"];
dir_entry__seq:body_type -> dir_entry_body__seq [style=bold];
vol_desc__seq:vol_desc_boot_record_type -> vol_desc_boot_record__seq [style=bold];
vol_desc__seq:vol_desc_primary_type -> vol_desc_primary__seq [style=bold];
path_table_entry_le__seq:len_dir_name_type -> path_table_entry_le__seq:dir_name_size [color="#404040"];
dir_entries__seq:entries_type -> dir_entry__seq [style=bold];
dir_entry__seq:len_type -> dir_entries__seq:entries__repeat [color="#404040"];
path_table_le__seq:entries_type -> path_table_entry_le__seq [style=bold];
dir_entry_body__seq:lba_extent_type -> u4bi__seq [style=bold];
dir_entry_body__seq:size_extent_type -> u4bi__seq [style=bold];
dir_entry_body__seq:datetime_type -> datetime__seq [style=bold];
dir_entry_body__seq:vol_seq_num_type -> u2bi__seq [style=bold];
dir_entry_body__seq:len_file_name_type -> dir_entry_body__seq:file_name_size [color="#404040"];
u4bi__seq:le_type -> dir_entry_body__inst__extent_as_dir:extent_as_dir_pos [color="#404040"];
iso9660__inst__sector_size:sector_size_type -> dir_entry_body__inst__extent_as_dir:extent_as_dir_pos [color="#404040"];
u4bi__seq:le_type -> dir_entry_body__inst__extent_as_dir:extent_as_dir_size [color="#404040"];
dir_entry_body__inst__extent_as_dir:extent_as_dir_type -> dir_entries__seq [style=bold];
u4bi__seq:le_type -> dir_entry_body__inst__extent_as_file:extent_as_file_pos [color="#404040"];
iso9660__inst__sector_size:sector_size_type -> dir_entry_body__inst__extent_as_file:extent_as_file_pos [color="#404040"];
u4bi__seq:le_type -> dir_entry_body__inst__extent_as_file:extent_as_file_size [color="#404040"];
}