MCPcopy Create free account
hub / github.com/NetHack/NetHack / LWZReadByte

Function LWZReadByte

win/share/gifread.c:330–441  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

328}
329
330static int
331LWZReadByte(FILE *fd, int flag) /*, int input_code_size)*/
332{
333 static int fresh = FALSE;
334 int code, incode;
335 static int code_size, set_code_size;
336 static int max_code, max_code_size;
337 static int firstcode, oldcode;
338 static int clear_code, end_code;
339 static int table[2][(1 << MAX_LWZ_BITS)];
340 static int stack[(1 << (MAX_LWZ_BITS)) * 2], *sp;
341 int i;
342
343 if (flag) {
344 set_code_size = input_code_size;
345 code_size = set_code_size + 1;
346 clear_code = 1 << set_code_size;
347 end_code = clear_code + 1;
348 max_code_size = 2 * clear_code;
349 max_code = clear_code + 2;
350
351 (void) GetCode(fd, 0, TRUE);
352
353 fresh = TRUE;
354
355 for (i = 0; i < clear_code; ++i) {
356 table[0][i] = 0;
357 table[1][i] = i;
358 }
359 for (; i < (1 << MAX_LWZ_BITS); ++i)
360 table[0][i] = table[1][0] = 0;
361
362 sp = stack;
363
364 return 0;
365 } else if (fresh) {
366 fresh = FALSE;
367 do {
368 firstcode = oldcode = GetCode(fd, code_size, FALSE);
369 } while (firstcode == clear_code);
370 return firstcode;
371 }
372
373 if (sp > stack)
374 return *--sp;
375
376 while ((code = GetCode(fd, code_size, FALSE)) >= 0) {
377 if (code == clear_code) {
378 for (i = 0; i < clear_code; ++i) {
379 table[0][i] = 0;
380 table[1][i] = i;
381 }
382 for (; i < (1 << MAX_LWZ_BITS); ++i)
383 table[0][i] = table[1][i] = 0;
384 code_size = set_code_size + 1;
385 max_code_size = 2 * clear_code;
386 max_code = clear_code + 2;
387 sp = stack;

Callers 3

ReadInterleavedImageFunction · 0.85
ReadTileStripFunction · 0.85
fopen_gif_fileFunction · 0.85

Calls 2

GetCodeFunction · 0.85
GetDataBlockFunction · 0.85

Tested by

no test coverage detected