Read a tile. Returns FALSE when there are no more tiles */
| 580 | |
| 581 | /* Read a tile. Returns FALSE when there are no more tiles */ |
| 582 | boolean |
| 583 | read_gif_tile(pixel (*pixels)[TILE_X]) |
| 584 | { |
| 585 | int i, j; |
| 586 | |
| 587 | if (curr_tiles_down >= tiles_down) |
| 588 | return FALSE; |
| 589 | if (curr_tiles_across == tiles_across) { |
| 590 | curr_tiles_across = 0; |
| 591 | curr_tiles_down++; |
| 592 | if (curr_tiles_down >= tiles_down) |
| 593 | return FALSE; |
| 594 | if (!GifScreen.Interlace) |
| 595 | ReadTileStrip(gif_file, GifScreen.Width); |
| 596 | } |
| 597 | if (GifScreen.Interlace) { |
| 598 | for (j = 0; j < TILE_Y; j++) { |
| 599 | for (i = 0; i < TILE_X; i++) { |
| 600 | pixels[j][i] = image[curr_tiles_down * TILE_Y |
| 601 | + j][curr_tiles_across * TILE_X + i]; |
| 602 | } |
| 603 | } |
| 604 | } else { |
| 605 | for (j = 0; j < TILE_Y; j++) { |
| 606 | for (i = 0; i < TILE_X; i++) { |
| 607 | pixels[j][i] = image[j][curr_tiles_across * TILE_X + i]; |
| 608 | } |
| 609 | } |
| 610 | } |
| 611 | curr_tiles_across++; |
| 612 | |
| 613 | /* check for "filler" tile */ |
| 614 | for (j = 0; j < TILE_Y; j++) { |
| 615 | for (i = 0; i < TILE_X && i < 4; i += 2) { |
| 616 | if (pixels[j][i].r != ColorMap[CM_RED][0] |
| 617 | || pixels[j][i].g != ColorMap[CM_GREEN][0] |
| 618 | || pixels[j][i].b != ColorMap[CM_BLUE][0] |
| 619 | || pixels[j][i + 1].r != ColorMap[CM_RED][1] |
| 620 | || pixels[j][i + 1].g != ColorMap[CM_GREEN][1] |
| 621 | || pixels[j][i + 1].b != ColorMap[CM_BLUE][1]) |
| 622 | return TRUE; |
| 623 | } |
| 624 | } |
| 625 | return FALSE; |
| 626 | } |
| 627 | |
| 628 | int |
| 629 | fclose_gif_file(void) |