OSDN Git Service

should include sys/types.h for mode_t
[lha/olha.git] / header.txt
1 /*
2  * Generic (MS-DOS style) time stamp format (localtime):
3  *
4  *  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
5  * |<---- year-1980 --->|<- month ->|<--- day ---->|
6  *
7  *  15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
8  * |<--- hour --->|<---- minute --->|<- second/2 ->|
9  *
10  */
11
12 /*
13  * extended header
14  *
15  *             size  field name
16  *  --------------------------------
17  *  base header:         :
18  *           2 or 4  next-header size  [*1]
19  *  --------------------------------------
20  *  ext header:   1  ext-type            ^
21  *                ?  contents            | [*1] next-header size
22  *           2 or 4  next-header size    v
23  *  --------------------------------------
24  *
25  *  on level 1, 2 header:
26  *    size field is 2 bytes
27  *  on level 3 header:
28  *    size field is 4 bytes
29  */
30
31 /*
32  * level 0 header
33  *
34  *
35  * offset  size  field name
36  * ----------------------------------
37  *     0      1  header size    [*1]
38  *     1      1  header sum
39  *            ---------------------------------------
40  *     2      5  method ID                         ^
41  *     7      4  packed size    [*2]               |
42  *    11      4  original size                     |
43  *    15      2  time                              |
44  *    17      2  date                              |
45  *    19      1  attribute                         | [*1] header size (X+Y+22)
46  *    20      1  level (0x00 fixed)                |
47  *    21      1  name length                       |
48  *    22      X  pathname                          |
49  * X +22      2  file crc (CRC-16)                 |
50  * X +24      Y  ext-header(old style)             v
51  * -------------------------------------------------
52  * X+Y+24        data                              ^
53  *                 :                               | [*2] packed size
54  *                 :                               v
55  * -------------------------------------------------
56  *
57  * ext-header(old style)
58  *     0      1  ext-type ('U')
59  *     1      1  minor version
60  *     2      4  UNIX time
61  *     6      2  mode
62  *     8      2  uid
63  *    10      2  gid
64  *
65  * attribute (MS-DOS)
66  *    bit1  read only
67  *    bit2  hidden
68  *    bit3  system
69  *    bit4  volume label
70  *    bit5  directory
71  *    bit6  archive bit (need to backup)
72  *
73  */
74
75 /*
76  * level 1 header
77  *
78  *
79  * offset   size  field name
80  * -----------------------------------
81  *     0       1  header size   [*1]
82  *     1       1  header sum
83  *             -------------------------------------
84  *     2       5  method ID                        ^
85  *     7       4  skip size     [*2]               |
86  *    11       4  original size                    |
87  *    15       2  time                             |
88  *    17       2  date                             |
89  *    19       1  attribute (0x20 fixed)           | [*1] header size (X+Y+25)
90  *    20       1  level (0x01 fixed)               |
91  *    21       1  name length                      |
92  *    22       X  filename                         |
93  * X+ 22       2  file crc (CRC-16)                |
94  * X+ 24       1  OS ID                            |
95  * X +25       Y  ???                              |
96  * X+Y+25      2  next-header size                 v
97  * -------------------------------------------------
98  * X+Y+27      Z  ext-header                       ^
99  *                 :                               |
100  * -----------------------------------             | [*2] skip size
101  * X+Y+Z+27       data                             |
102  *                 :                               v
103  * -------------------------------------------------
104  *
105  */
106
107 /*
108  * level 2 header
109  *
110  *
111  * offset   size  field name
112  * --------------------------------------------------
113  *     0       2  total header size [*1]           ^
114  *             -----------------------             |
115  *     2       5  method ID                        |
116  *     7       4  packed size       [*2]           |
117  *    11       4  original size                    |
118  *    15       4  time                             |
119  *    19       1  RESERVED (0x20 fixed)            | [*1] total header size
120  *    20       1  level (0x02 fixed)               |      (X+26+(1))
121  *    21       2  file crc (CRC-16)                |
122  *    23       1  OS ID                            |
123  *    24       2  next-header size                 |
124  * -----------------------------------             |
125  *    26       X  ext-header                       |
126  *                 :                               |
127  * -----------------------------------             |
128  * X +26      (1) padding                          v
129  * -------------------------------------------------
130  * X +26+(1)      data                             ^
131  *                 :                               | [*2] packed size
132  *                 :                               v
133  * -------------------------------------------------
134  *
135  */
136
137 /*
138  * level 3 header
139  *
140  *
141  * offset   size  field name
142  * --------------------------------------------------
143  *     0       2  size field length (4 fixed)      ^
144  *     2       5  method ID                        |
145  *     7       4  packed size       [*2]           |
146  *    11       4  original size                    |
147  *    15       4  time                             |
148  *    19       1  RESERVED (0x20 fixed)            | [*1] total header size
149  *    20       1  level (0x03 fixed)               |      (X+32)
150  *    21       2  file crc (CRC-16)                |
151  *    23       1  OS ID                            |
152  *    24       4  total header size [*1]           |
153  *    28       4  next-header size                 |
154  * -----------------------------------             |
155  *    32       X  ext-header                       |
156  *                 :                               v
157  * -------------------------------------------------
158  * X +32          data                             ^
159  *                 :                               | [*2] packed size
160  *                 :                               v
161  * -------------------------------------------------
162  *
163  */