1 7a4ee46d 2003-11-23 devnull #include "stdinc.h"
2 7a4ee46d 2003-11-23 devnull #include "dat.h"
3 7a4ee46d 2003-11-23 devnull #include "fns.h"
6 7a4ee46d 2003-11-23 devnull * disk structure conversion routines
8 7a4ee46d 2003-11-23 devnull #define U8GET(p) ((p)[0])
9 7a4ee46d 2003-11-23 devnull #define U16GET(p) (((p)[0]<<8)|(p)[1])
10 7a4ee46d 2003-11-23 devnull #define U32GET(p) ((u32int)(((p)[0]<<24)|((p)[1]<<16)|((p)[2]<<8)|(p)[3]))
11 7a4ee46d 2003-11-23 devnull #define U64GET(p) (((u64int)U32GET(p)<<32)|(u64int)U32GET((p)+4))
13 7a4ee46d 2003-11-23 devnull #define U8PUT(p,v) (p)[0]=(v)&0xFF
14 7a4ee46d 2003-11-23 devnull #define U16PUT(p,v) (p)[0]=((v)>>8)&0xFF;(p)[1]=(v)&0xFF
15 7a4ee46d 2003-11-23 devnull #define U32PUT(p,v) (p)[0]=((v)>>24)&0xFF;(p)[1]=((v)>>16)&0xFF;(p)[2]=((v)>>8)&0xFF;(p)[3]=(v)&0xFF
16 7a4ee46d 2003-11-23 devnull #define U64PUT(p,v,t32) t32=(v)>>32;U32PUT(p,t32);t32=(v);U32PUT((p)+4,t32)
18 7a4ee46d 2003-11-23 devnull static struct {
19 7a4ee46d 2003-11-23 devnull u32int m;
21 7a4ee46d 2003-11-23 devnull } magics[] = {
22 7a4ee46d 2003-11-23 devnull ArenaPartMagic, "ArenaPartMagic",
23 7a4ee46d 2003-11-23 devnull ArenaHeadMagic, "ArenaHeadMagic",
24 7a4ee46d 2003-11-23 devnull ArenaMagic, "ArenaMagic",
25 7a4ee46d 2003-11-23 devnull ISectMagic, "ISectMagic",
28 7a4ee46d 2003-11-23 devnull static char*
29 7a4ee46d 2003-11-23 devnull fmtmagic(char *s, u32int m)
33 7a4ee46d 2003-11-23 devnull for(i=0; i<nelem(magics); i++)
34 7a4ee46d 2003-11-23 devnull if(magics[i].m == m)
35 7a4ee46d 2003-11-23 devnull return magics[i].s;
36 7a4ee46d 2003-11-23 devnull sprint(s, "0x%08lux", m);
37 7a4ee46d 2003-11-23 devnull return s;
41 7a4ee46d 2003-11-23 devnull unpackmagic(u8int *buf)
43 7a4ee46d 2003-11-23 devnull return U32GET(buf);
47 7a4ee46d 2003-11-23 devnull packmagic(u32int magic, u8int *buf)
49 7a4ee46d 2003-11-23 devnull U32PUT(buf, magic);
53 7a4ee46d 2003-11-23 devnull unpackarenapart(ArenaPart *ap, u8int *buf)
55 7a4ee46d 2003-11-23 devnull u8int *p;
56 7a4ee46d 2003-11-23 devnull u32int m;
57 7a4ee46d 2003-11-23 devnull char fbuf[20];
61 7a4ee46d 2003-11-23 devnull m = U32GET(p);
62 7a4ee46d 2003-11-23 devnull if(m != ArenaPartMagic){
63 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "arena set has wrong magic number: %s expected ArenaPartMagic (%lux)", fmtmagic(fbuf, m), ArenaPartMagic);
64 7a4ee46d 2003-11-23 devnull return -1;
66 7a4ee46d 2003-11-23 devnull p += U32Size;
67 7a4ee46d 2003-11-23 devnull ap->version = U32GET(p);
68 7a4ee46d 2003-11-23 devnull p += U32Size;
69 7a4ee46d 2003-11-23 devnull ap->blocksize = U32GET(p);
70 7a4ee46d 2003-11-23 devnull p += U32Size;
71 7a4ee46d 2003-11-23 devnull ap->arenabase = U32GET(p);
72 7a4ee46d 2003-11-23 devnull p += U32Size;
74 7a4ee46d 2003-11-23 devnull if(buf + ArenaPartSize != p)
75 7a4ee46d 2003-11-23 devnull sysfatal("unpackarenapart unpacked wrong amount");
77 7a4ee46d 2003-11-23 devnull return 0;
81 7a4ee46d 2003-11-23 devnull packarenapart(ArenaPart *ap, u8int *buf)
83 7a4ee46d 2003-11-23 devnull u8int *p;
87 7a4ee46d 2003-11-23 devnull U32PUT(p, ArenaPartMagic);
88 7a4ee46d 2003-11-23 devnull p += U32Size;
89 7a4ee46d 2003-11-23 devnull U32PUT(p, ap->version);
90 7a4ee46d 2003-11-23 devnull p += U32Size;
91 7a4ee46d 2003-11-23 devnull U32PUT(p, ap->blocksize);
92 7a4ee46d 2003-11-23 devnull p += U32Size;
93 7a4ee46d 2003-11-23 devnull U32PUT(p, ap->arenabase);
94 7a4ee46d 2003-11-23 devnull p += U32Size;
96 7a4ee46d 2003-11-23 devnull if(buf + ArenaPartSize != p)
97 7a4ee46d 2003-11-23 devnull sysfatal("packarenapart packed wrong amount");
99 7a4ee46d 2003-11-23 devnull return 0;
103 7a4ee46d 2003-11-23 devnull unpackarena(Arena *arena, u8int *buf)
105 7a4ee46d 2003-11-23 devnull u8int *p;
106 7a4ee46d 2003-11-23 devnull u32int m;
107 7a4ee46d 2003-11-23 devnull char fbuf[20];
109 7a4ee46d 2003-11-23 devnull p = buf;
111 7a4ee46d 2003-11-23 devnull m = U32GET(p);
112 7a4ee46d 2003-11-23 devnull if(m != ArenaMagic){
113 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "arena has wrong magic number: %s expected ArenaMagic (%lux)", fmtmagic(fbuf, m), m, ArenaMagic);
114 7a4ee46d 2003-11-23 devnull return -1;
116 7a4ee46d 2003-11-23 devnull p += U32Size;
117 7a4ee46d 2003-11-23 devnull arena->version = U32GET(p);
118 7a4ee46d 2003-11-23 devnull p += U32Size;
119 7a4ee46d 2003-11-23 devnull namecp(arena->name, (char*)p);
120 7a4ee46d 2003-11-23 devnull p += ANameSize;
121 7a4ee46d 2003-11-23 devnull arena->clumps = U32GET(p);
122 7a4ee46d 2003-11-23 devnull p += U32Size;
123 7a4ee46d 2003-11-23 devnull arena->cclumps = U32GET(p);
124 7a4ee46d 2003-11-23 devnull p += U32Size;
125 7a4ee46d 2003-11-23 devnull arena->ctime = U32GET(p);
126 7a4ee46d 2003-11-23 devnull p += U32Size;
127 7a4ee46d 2003-11-23 devnull arena->wtime = U32GET(p);
128 7a4ee46d 2003-11-23 devnull p += U32Size;
129 7a4ee46d 2003-11-23 devnull arena->used = U64GET(p);
130 7a4ee46d 2003-11-23 devnull p += U64Size;
131 7a4ee46d 2003-11-23 devnull arena->uncsize = U64GET(p);
132 7a4ee46d 2003-11-23 devnull p += U64Size;
133 7a4ee46d 2003-11-23 devnull arena->sealed = U8GET(p);
134 7a4ee46d 2003-11-23 devnull p += U8Size;
136 7a4ee46d 2003-11-23 devnull if(buf + ArenaSize != p)
137 7a4ee46d 2003-11-23 devnull sysfatal("unpackarena unpacked wrong amount");
139 7a4ee46d 2003-11-23 devnull return 0;
143 7a4ee46d 2003-11-23 devnull packarena(Arena *arena, u8int *buf)
145 7a4ee46d 2003-11-23 devnull u8int *p;
146 7a4ee46d 2003-11-23 devnull u32int t32;
148 7a4ee46d 2003-11-23 devnull p = buf;
150 7a4ee46d 2003-11-23 devnull U32PUT(p, ArenaMagic);
151 7a4ee46d 2003-11-23 devnull p += U32Size;
152 7a4ee46d 2003-11-23 devnull U32PUT(p, arena->version);
153 7a4ee46d 2003-11-23 devnull p += U32Size;
154 7a4ee46d 2003-11-23 devnull namecp((char*)p, arena->name);
155 7a4ee46d 2003-11-23 devnull p += ANameSize;
156 7a4ee46d 2003-11-23 devnull U32PUT(p, arena->clumps);
157 7a4ee46d 2003-11-23 devnull p += U32Size;
158 7a4ee46d 2003-11-23 devnull U32PUT(p, arena->cclumps);
159 7a4ee46d 2003-11-23 devnull p += U32Size;
160 7a4ee46d 2003-11-23 devnull U32PUT(p, arena->ctime);
161 7a4ee46d 2003-11-23 devnull p += U32Size;
162 7a4ee46d 2003-11-23 devnull U32PUT(p, arena->wtime);
163 7a4ee46d 2003-11-23 devnull p += U32Size;
164 7a4ee46d 2003-11-23 devnull U64PUT(p, arena->used, t32);
165 7a4ee46d 2003-11-23 devnull p += U64Size;
166 7a4ee46d 2003-11-23 devnull U64PUT(p, arena->uncsize, t32);
167 7a4ee46d 2003-11-23 devnull p += U64Size;
168 7a4ee46d 2003-11-23 devnull U8PUT(p, arena->sealed);
169 7a4ee46d 2003-11-23 devnull p += U8Size;
171 7a4ee46d 2003-11-23 devnull if(buf + ArenaSize != p)
172 7a4ee46d 2003-11-23 devnull sysfatal("packarena packed wrong amount");
174 7a4ee46d 2003-11-23 devnull return 0;
178 7a4ee46d 2003-11-23 devnull unpackarenahead(ArenaHead *head, u8int *buf)
180 7a4ee46d 2003-11-23 devnull u8int *p;
181 7a4ee46d 2003-11-23 devnull u32int m;
182 7a4ee46d 2003-11-23 devnull char fbuf[20];
184 7a4ee46d 2003-11-23 devnull p = buf;
186 7a4ee46d 2003-11-23 devnull m = U32GET(p);
187 7a4ee46d 2003-11-23 devnull if(m != ArenaHeadMagic){
188 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "arena has wrong magic number: %s expected ArenaHeadMagic (%lux)",
189 7a4ee46d 2003-11-23 devnull fmtmagic(fbuf, m), ArenaHeadMagic);
190 7a4ee46d 2003-11-23 devnull return -1;
192 7a4ee46d 2003-11-23 devnull p += U32Size;
193 7a4ee46d 2003-11-23 devnull head->version = U32GET(p);
194 7a4ee46d 2003-11-23 devnull p += U32Size;
195 7a4ee46d 2003-11-23 devnull namecp(head->name, (char*)p);
196 7a4ee46d 2003-11-23 devnull p += ANameSize;
197 7a4ee46d 2003-11-23 devnull head->blocksize = U32GET(p);
198 7a4ee46d 2003-11-23 devnull p += U32Size;
199 7a4ee46d 2003-11-23 devnull head->size = U64GET(p);
200 7a4ee46d 2003-11-23 devnull p += U64Size;
202 7a4ee46d 2003-11-23 devnull if(buf + ArenaHeadSize != p)
203 7a4ee46d 2003-11-23 devnull sysfatal("unpackarenahead unpacked wrong amount");
205 7a4ee46d 2003-11-23 devnull return 0;
209 7a4ee46d 2003-11-23 devnull packarenahead(ArenaHead *head, u8int *buf)
211 7a4ee46d 2003-11-23 devnull u8int *p;
212 7a4ee46d 2003-11-23 devnull u32int t32;
214 7a4ee46d 2003-11-23 devnull p = buf;
216 7a4ee46d 2003-11-23 devnull U32PUT(p, ArenaHeadMagic);
217 7a4ee46d 2003-11-23 devnull p += U32Size;
218 7a4ee46d 2003-11-23 devnull U32PUT(p, head->version);
219 7a4ee46d 2003-11-23 devnull p += U32Size;
220 7a4ee46d 2003-11-23 devnull namecp((char*)p, head->name);
221 7a4ee46d 2003-11-23 devnull p += ANameSize;
222 7a4ee46d 2003-11-23 devnull U32PUT(p, head->blocksize);
223 7a4ee46d 2003-11-23 devnull p += U32Size;
224 7a4ee46d 2003-11-23 devnull U64PUT(p, head->size, t32);
225 7a4ee46d 2003-11-23 devnull p += U64Size;
227 7a4ee46d 2003-11-23 devnull if(buf + ArenaHeadSize != p)
228 7a4ee46d 2003-11-23 devnull sysfatal("packarenahead packed wrong amount");
230 7a4ee46d 2003-11-23 devnull return 0;
233 7a4ee46d 2003-11-23 devnull static int
234 7a4ee46d 2003-11-23 devnull checkclump(Clump *w)
236 7a4ee46d 2003-11-23 devnull if(w->encoding == ClumpENone){
237 7a4ee46d 2003-11-23 devnull if(w->info.size != w->info.uncsize){
238 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "uncompressed wad size mismatch");
239 7a4ee46d 2003-11-23 devnull return -1;
241 7a4ee46d 2003-11-23 devnull }else if(w->encoding == ClumpECompress){
242 7a4ee46d 2003-11-23 devnull if(w->info.size >= w->info.uncsize){
243 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "compressed lump has inconsistent block sizes %d %d", w->info.size, w->info.uncsize);
244 7a4ee46d 2003-11-23 devnull return -1;
247 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "clump has illegal encoding");
248 7a4ee46d 2003-11-23 devnull return -1;
251 7a4ee46d 2003-11-23 devnull return 0;
255 7a4ee46d 2003-11-23 devnull unpackclump(Clump *c, u8int *buf)
257 7a4ee46d 2003-11-23 devnull u8int *p;
258 7a4ee46d 2003-11-23 devnull u32int magic;
260 7a4ee46d 2003-11-23 devnull p = buf;
261 7a4ee46d 2003-11-23 devnull magic = U32GET(p);
262 7a4ee46d 2003-11-23 devnull if(magic != ClumpMagic){
263 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "clump has bad magic number=%#8.8ux", magic);
264 7a4ee46d 2003-11-23 devnull return -1;
266 7a4ee46d 2003-11-23 devnull p += U32Size;
268 7a4ee46d 2003-11-23 devnull c->info.type = vtfromdisktype(U8GET(p));
269 7a4ee46d 2003-11-23 devnull p += U8Size;
270 7a4ee46d 2003-11-23 devnull c->info.size = U16GET(p);
271 7a4ee46d 2003-11-23 devnull p += U16Size;
272 7a4ee46d 2003-11-23 devnull c->info.uncsize = U16GET(p);
273 7a4ee46d 2003-11-23 devnull p += U16Size;
274 7a4ee46d 2003-11-23 devnull scorecp(c->info.score, p);
275 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
277 7a4ee46d 2003-11-23 devnull c->encoding = U8GET(p);
278 7a4ee46d 2003-11-23 devnull p += U8Size;
279 7a4ee46d 2003-11-23 devnull c->creator = U32GET(p);
280 7a4ee46d 2003-11-23 devnull p += U32Size;
281 7a4ee46d 2003-11-23 devnull c->time = U32GET(p);
282 7a4ee46d 2003-11-23 devnull p += U32Size;
284 7a4ee46d 2003-11-23 devnull if(buf + ClumpSize != p)
285 7a4ee46d 2003-11-23 devnull sysfatal("unpackclump unpacked wrong amount");
287 7a4ee46d 2003-11-23 devnull return checkclump(c);
291 7a4ee46d 2003-11-23 devnull packclump(Clump *c, u8int *buf)
293 7a4ee46d 2003-11-23 devnull u8int *p;
295 7a4ee46d 2003-11-23 devnull p = buf;
296 7a4ee46d 2003-11-23 devnull U32PUT(p, ClumpMagic);
297 7a4ee46d 2003-11-23 devnull p += U32Size;
299 7a4ee46d 2003-11-23 devnull U8PUT(p, vttodisktype(c->info.type));
300 7a4ee46d 2003-11-23 devnull p += U8Size;
301 7a4ee46d 2003-11-23 devnull U16PUT(p, c->info.size);
302 7a4ee46d 2003-11-23 devnull p += U16Size;
303 7a4ee46d 2003-11-23 devnull U16PUT(p, c->info.uncsize);
304 7a4ee46d 2003-11-23 devnull p += U16Size;
305 7a4ee46d 2003-11-23 devnull scorecp(p, c->info.score);
306 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
308 7a4ee46d 2003-11-23 devnull U8PUT(p, c->encoding);
309 7a4ee46d 2003-11-23 devnull p += U8Size;
310 7a4ee46d 2003-11-23 devnull U32PUT(p, c->creator);
311 7a4ee46d 2003-11-23 devnull p += U32Size;
312 7a4ee46d 2003-11-23 devnull U32PUT(p, c->time);
313 7a4ee46d 2003-11-23 devnull p += U32Size;
315 7a4ee46d 2003-11-23 devnull if(buf + ClumpSize != p)
316 7a4ee46d 2003-11-23 devnull sysfatal("packclump packed wrong amount");
318 7a4ee46d 2003-11-23 devnull return checkclump(c);
322 7a4ee46d 2003-11-23 devnull unpackclumpinfo(ClumpInfo *ci, u8int *buf)
324 7a4ee46d 2003-11-23 devnull u8int *p;
326 7a4ee46d 2003-11-23 devnull p = buf;
327 7a4ee46d 2003-11-23 devnull ci->type = vtfromdisktype(U8GET(p));
328 7a4ee46d 2003-11-23 devnull p += U8Size;
329 7a4ee46d 2003-11-23 devnull ci->size = U16GET(p);
330 7a4ee46d 2003-11-23 devnull p += U16Size;
331 7a4ee46d 2003-11-23 devnull ci->uncsize = U16GET(p);
332 7a4ee46d 2003-11-23 devnull p += U16Size;
333 7a4ee46d 2003-11-23 devnull scorecp(ci->score, p);
334 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
336 7a4ee46d 2003-11-23 devnull if(buf + ClumpInfoSize != p)
337 7a4ee46d 2003-11-23 devnull sysfatal("unpackclumpinfo unpacked wrong amount");
341 7a4ee46d 2003-11-23 devnull packclumpinfo(ClumpInfo *ci, u8int *buf)
343 7a4ee46d 2003-11-23 devnull u8int *p;
345 7a4ee46d 2003-11-23 devnull p = buf;
346 7a4ee46d 2003-11-23 devnull U8PUT(p, vttodisktype(ci->type));
347 7a4ee46d 2003-11-23 devnull p += U8Size;
348 7a4ee46d 2003-11-23 devnull U16PUT(p, ci->size);
349 7a4ee46d 2003-11-23 devnull p += U16Size;
350 7a4ee46d 2003-11-23 devnull U16PUT(p, ci->uncsize);
351 7a4ee46d 2003-11-23 devnull p += U16Size;
352 7a4ee46d 2003-11-23 devnull scorecp(p, ci->score);
353 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
355 7a4ee46d 2003-11-23 devnull if(buf + ClumpInfoSize != p)
356 7a4ee46d 2003-11-23 devnull sysfatal("packclumpinfo packed wrong amount");
360 7a4ee46d 2003-11-23 devnull unpackisect(ISect *is, u8int *buf)
362 7a4ee46d 2003-11-23 devnull u8int *p;
363 7a4ee46d 2003-11-23 devnull u32int m;
364 7a4ee46d 2003-11-23 devnull char fbuf[20];
366 7a4ee46d 2003-11-23 devnull p = buf;
369 7a4ee46d 2003-11-23 devnull m = U32GET(p);
370 7a4ee46d 2003-11-23 devnull if(m != ISectMagic){
371 7a4ee46d 2003-11-23 devnull seterr(ECorrupt, "index section has wrong magic number: %s expected ISectMagic (%lux)",
372 7a4ee46d 2003-11-23 devnull fmtmagic(fbuf, m), ISectMagic);
373 7a4ee46d 2003-11-23 devnull return -1;
375 7a4ee46d 2003-11-23 devnull p += U32Size;
376 7a4ee46d 2003-11-23 devnull is->version = U32GET(p);
377 7a4ee46d 2003-11-23 devnull p += U32Size;
378 7a4ee46d 2003-11-23 devnull namecp(is->name, (char*)p);
379 7a4ee46d 2003-11-23 devnull p += ANameSize;
380 7a4ee46d 2003-11-23 devnull namecp(is->index, (char*)p);
381 7a4ee46d 2003-11-23 devnull p += ANameSize;
382 7a4ee46d 2003-11-23 devnull is->blocksize = U32GET(p);
383 7a4ee46d 2003-11-23 devnull p += U32Size;
384 7a4ee46d 2003-11-23 devnull is->blockbase = U32GET(p);
385 7a4ee46d 2003-11-23 devnull p += U32Size;
386 7a4ee46d 2003-11-23 devnull is->blocks = U32GET(p);
387 7a4ee46d 2003-11-23 devnull p += U32Size;
388 7a4ee46d 2003-11-23 devnull is->start = U32GET(p);
389 7a4ee46d 2003-11-23 devnull p += U32Size;
390 7a4ee46d 2003-11-23 devnull is->stop = U32GET(p);
391 7a4ee46d 2003-11-23 devnull p += U32Size;
393 7a4ee46d 2003-11-23 devnull if(buf + ISectSize != p)
394 7a4ee46d 2003-11-23 devnull sysfatal("unpackisect unpacked wrong amount");
396 7a4ee46d 2003-11-23 devnull return 0;
400 7a4ee46d 2003-11-23 devnull packisect(ISect *is, u8int *buf)
402 7a4ee46d 2003-11-23 devnull u8int *p;
404 7a4ee46d 2003-11-23 devnull p = buf;
406 7a4ee46d 2003-11-23 devnull U32PUT(p, ISectMagic);
407 7a4ee46d 2003-11-23 devnull p += U32Size;
408 7a4ee46d 2003-11-23 devnull U32PUT(p, is->version);
409 7a4ee46d 2003-11-23 devnull p += U32Size;
410 7a4ee46d 2003-11-23 devnull namecp((char*)p, is->name);
411 7a4ee46d 2003-11-23 devnull p += ANameSize;
412 7a4ee46d 2003-11-23 devnull namecp((char*)p, is->index);
413 7a4ee46d 2003-11-23 devnull p += ANameSize;
414 7a4ee46d 2003-11-23 devnull U32PUT(p, is->blocksize);
415 7a4ee46d 2003-11-23 devnull p += U32Size;
416 7a4ee46d 2003-11-23 devnull U32PUT(p, is->blockbase);
417 7a4ee46d 2003-11-23 devnull p += U32Size;
418 7a4ee46d 2003-11-23 devnull U32PUT(p, is->blocks);
419 7a4ee46d 2003-11-23 devnull p += U32Size;
420 7a4ee46d 2003-11-23 devnull U32PUT(p, is->start);
421 7a4ee46d 2003-11-23 devnull p += U32Size;
422 7a4ee46d 2003-11-23 devnull U32PUT(p, is->stop);
423 7a4ee46d 2003-11-23 devnull p += U32Size;
425 7a4ee46d 2003-11-23 devnull if(buf + ISectSize != p)
426 7a4ee46d 2003-11-23 devnull sysfatal("packisect packed wrong amount");
428 7a4ee46d 2003-11-23 devnull return 0;
432 7a4ee46d 2003-11-23 devnull unpackientry(IEntry *ie, u8int *buf)
434 7a4ee46d 2003-11-23 devnull u8int *p;
436 7a4ee46d 2003-11-23 devnull p = buf;
438 7a4ee46d 2003-11-23 devnull scorecp(ie->score, p);
439 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
440 7a4ee46d 2003-11-23 devnull ie->wtime = U32GET(p);
441 7a4ee46d 2003-11-23 devnull p += U32Size;
442 7a4ee46d 2003-11-23 devnull ie->train = U16GET(p);
443 7a4ee46d 2003-11-23 devnull p += U16Size;
444 7a4ee46d 2003-11-23 devnull ie->ia.addr = U64GET(p);
445 7a4ee46d 2003-11-23 devnull if(ie->ia.addr>>56) print("%.8H => %llux\n", p, ie->ia.addr);
446 7a4ee46d 2003-11-23 devnull p += U64Size;
447 7a4ee46d 2003-11-23 devnull ie->ia.size = U16GET(p);
448 7a4ee46d 2003-11-23 devnull p += U16Size;
449 7a4ee46d 2003-11-23 devnull if(p - buf != IEntryTypeOff)
450 7a4ee46d 2003-11-23 devnull sysfatal("unpackientry bad IEntryTypeOff amount");
451 7a4ee46d 2003-11-23 devnull ie->ia.type = vtfromdisktype(U8GET(p));
452 7a4ee46d 2003-11-23 devnull p += U8Size;
453 7a4ee46d 2003-11-23 devnull ie->ia.blocks = U8GET(p);
454 7a4ee46d 2003-11-23 devnull p += U8Size;
456 7a4ee46d 2003-11-23 devnull if(p - buf != IEntrySize)
457 7a4ee46d 2003-11-23 devnull sysfatal("unpackientry unpacked wrong amount");
461 7a4ee46d 2003-11-23 devnull packientry(IEntry *ie, u8int *buf)
463 7a4ee46d 2003-11-23 devnull u32int t32;
464 7a4ee46d 2003-11-23 devnull u8int *p;
466 7a4ee46d 2003-11-23 devnull p = buf;
468 7a4ee46d 2003-11-23 devnull scorecp(p, ie->score);
469 7a4ee46d 2003-11-23 devnull p += VtScoreSize;
470 7a4ee46d 2003-11-23 devnull U32PUT(p, ie->wtime);
471 7a4ee46d 2003-11-23 devnull p += U32Size;
472 7a4ee46d 2003-11-23 devnull U16PUT(p, ie->train);
473 7a4ee46d 2003-11-23 devnull p += U16Size;
474 7a4ee46d 2003-11-23 devnull U64PUT(p, ie->ia.addr, t32);
475 7a4ee46d 2003-11-23 devnull p += U64Size;
476 7a4ee46d 2003-11-23 devnull U16PUT(p, ie->ia.size);
477 7a4ee46d 2003-11-23 devnull p += U16Size;
478 7a4ee46d 2003-11-23 devnull U8PUT(p, vttodisktype(ie->ia.type));
479 7a4ee46d 2003-11-23 devnull p += U8Size;
480 7a4ee46d 2003-11-23 devnull U8PUT(p, ie->ia.blocks);
481 7a4ee46d 2003-11-23 devnull p += U8Size;
483 7a4ee46d 2003-11-23 devnull if(p - buf != IEntrySize)
484 7a4ee46d 2003-11-23 devnull sysfatal("packientry packed wrong amount");
488 7a4ee46d 2003-11-23 devnull unpackibucket(IBucket *b, u8int *buf)
490 7a4ee46d 2003-11-23 devnull b->n = U16GET(buf);
491 9ffbb5ad 2004-03-12 devnull b->depth = U32GET(&buf[U16Size]);
492 7a4ee46d 2003-11-23 devnull b->data = buf + IBucketSize;
496 7a4ee46d 2003-11-23 devnull packibucket(IBucket *b, u8int *buf)
498 7a4ee46d 2003-11-23 devnull U16PUT(buf, b->n);
499 9ffbb5ad 2004-03-12 devnull U32PUT(&buf[U16Size], b->depth);