This is rle.c in view mode; [Download] [Up]
/*
* Copyright (C) 1988 Research Institute for Advanced Computer Science.
* All rights reserved. The RIACS Software Policy contains specific
* terms and conditions on the use of this software, and must be
* distributed with any copies. This file may be redistributed. This
* copyright and notice must be preserved in all copies made of this file.
*/
/*
* Interface routines for Utah Raster Toolkit
*/
#include <stdio.h>
#include "rle.h"
#ifdef USE_STDLIB_H
#include <stdlib.h>
#else
#ifdef VOID_STAR
extern void *malloc();
#else
extern char *malloc();
#endif
extern void free();
#endif /* USE_STDLIB_H */
/*
* Globals are stored in a structure.
*/
static struct {
int width;
int height;
unsigned char **scan;
int row;
} Globals;
void
rasterInit(fd, width, height)
int fd;
int width;
int height;
{
FILE *rleFile;
int i;
Globals.width = width;
Globals.height = height;
if (fd == 0) {
rleFile = stdin;
} else {
rleFile = fdopen(fd, "r");
}
rle_dflt_hdr.rle_file = rleFile;
rle_get_setup(&rle_dflt_hdr);
if (rle_dflt_hdr.xmax > width) {
fprintf(stderr, "Warning: RLE width (%d) exceeds maximum (%d)\n",
rle_dflt_hdr.xmax, width);
}
if (rle_dflt_hdr.ymax > height) {
fprintf(stderr, "Warning: RLE height (%d) exceeds maximum (%d)\n",
rle_dflt_hdr.ymax, height);
}
Globals.row = 0;
Globals.scan = (unsigned char **) malloc((rle_dflt_hdr.ncolors +
rle_dflt_hdr.alpha) *
sizeof(unsigned char *));
for (i = 0; i < rle_dflt_hdr.ncolors + rle_dflt_hdr.alpha; i++)
Globals.scan[i] =
(unsigned char *)malloc(rle_dflt_hdr.xmax+1);
if (rle_dflt_hdr.alpha) {
Globals.scan++;
}
}
void
rasterRowGet(red, green, blue)
unsigned char *red, *green, *blue;
{
int i, max;
if (Globals.row < rle_dflt_hdr.ymin || Globals.row > rle_dflt_hdr.ymax) {
for (i = 0; i < Globals.width; i++) {
red[i] = 0;
green[i] = 0;
blue[i] = 0;
}
} else {
rle_getrow(&rle_dflt_hdr, Globals.scan);
max = rle_dflt_hdr.xmax < Globals.width ?
rle_dflt_hdr.xmax : Globals.width;
for (i = 0 ; i < max; i++) {
red[i] = Globals.scan[0][i];
green[i] = Globals.scan[1][i];
blue[i] = Globals.scan[2][i];
}
for (; i < Globals.width; i++) {
red[i] = green[i] = blue[i] = 0;
}
}
Globals.row++;
}
void
rasterDone()
{
rle_puteof(&rle_dflt_hdr);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.