]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/9660srv/iso9660.h
disk/format: implement long name support
[plan9front.git] / sys / src / cmd / 9660srv / iso9660.h
1 #define VOLDESC 16      /* sector number */
2
3 /*
4  * L means little-endian, M means big-endian, and LM means little-endian
5  * then again big-endian.
6  */
7 typedef uchar           Byte2L[2];
8 typedef uchar           Byte2M[2];
9 typedef uchar           Byte4LM[4];
10 typedef uchar           Byte4L[4];
11 typedef uchar           Byte4M[4];
12 typedef uchar           Byte8LM[8];
13 typedef union Drec      Drec;
14 typedef union Voldesc   Voldesc;
15
16 enum
17 {
18         Boot            = 0,
19         Primary         = 1,
20         Supplementary   = 2,
21         Partition       = 3,
22         Terminator      = 255
23 };
24
25 union   Voldesc
26 {                       /* volume descriptor */
27         uchar   byte[Sectorsize];
28         union {                 /* for CD001, the ECMA standard */
29                 struct
30                 {
31                         uchar   type;
32                         uchar   stdid[5];
33                         uchar   version;
34                         uchar   unused;
35                         uchar   sysid[32];
36                         uchar   bootid[32];
37                         uchar   data[1977];
38                 } boot;
39                 struct
40                 {
41                         uchar   type;
42                         uchar   stdid[5];
43                         uchar   version;
44                         uchar   flags;
45                         uchar   sysid[32];
46                         uchar   volid[32];
47                         Byte8LM partloc;
48                         Byte8LM size;
49                         uchar   escapes[32];
50                         Byte4LM vsetsize;
51                         Byte4LM vseqno;
52                         Byte4LM blksize;
53                         Byte8LM ptabsize;
54                         Byte4L  lptable;
55                         Byte4L  optlptable;
56                         Byte4M  mptable;
57                         Byte4M  optmptable;
58                         uchar   rootdir[34];
59                         uchar   volsetid[128];
60                         uchar   pubid[128];
61                         uchar   prepid[128];
62                         uchar   appid[128];
63                         uchar   copyright[37];
64                         uchar   abstract[37];
65                         uchar   bibliography[37];
66                         uchar   cdate[17];
67                         uchar   mdate[17];
68                         uchar   expdate[17];
69                         uchar   effdate[17];
70                         uchar   fsversion;
71                         uchar   unused3[1];
72                         uchar   appuse[512];
73                         uchar   unused4[653];
74                 } desc;
75         } z;
76         union
77         {                       /* for CDROM, the `High Sierra' standard */
78                 struct
79                 {
80                         Byte8LM number;
81                         uchar   type;
82                         uchar   stdid[5];
83                         uchar   version;
84                         uchar   flags;
85                         uchar   sysid[32];
86                         uchar   volid[32];
87                         Byte8LM partloc;
88                         Byte8LM size;
89                         uchar   escapes[32];
90                         Byte4LM vsetsize;
91                         Byte4LM vseqno;
92                         Byte4LM blksize;
93                         uchar   quux[40];
94                         uchar   rootdir[34];
95                         uchar   volsetid[128];
96                         uchar   pubid[128];
97                         uchar   prepid[128];
98                         uchar   appid[128];
99                         uchar   copyright[32];
100                         uchar   abstract[32];
101                         uchar   cdate[16];
102                         uchar   mdate[16];
103                         uchar   expdate[16];
104                         uchar   effdate[16];
105                         uchar   fsversion;
106                 } desc;
107         } r;
108 };
109
110 union   Drec
111 {
112         struct
113         {
114                 uchar   reclen;
115                 uchar   attrlen;
116                 Byte8LM addr;
117                 Byte8LM size;
118                 uchar   date[6];
119                 uchar   tzone;          /* flags in high sierra */
120                 uchar   flags;          /* ? in high sierra */
121                 uchar   unitsize;       /* ? in high sierra */
122                 uchar   gapsize;        /* ? in high sierra */
123                 Byte4LM vseqno;         /* ? in high sierra */
124                 uchar   namelen;
125                 uchar   name[1];
126         };
127         struct
128         {
129                 uchar   r_pad[24];
130                 uchar   r_flags;
131         };
132 };
133
134 struct  Isofile
135 {
136         short   fmt;            /* 'z' if iso, 'r' if high sierra */
137         short   blksize;
138         vlong   offset;         /* true offset when reading directory */
139         long    odelta;         /* true size of directory just read */
140         vlong   doffset;        /* plan9 offset when reading directory */
141         Drec    d;
142 };