This is rle_rawrow.c in view mode; [Download] [Up]
/*
* rle_rawrow.c - Convert RLE "raw" input to "row" input.
*
* Author: Spencer W. Thomas
* EECS Dept.
* University of Michigan
* Date: Mon Jun 18 1990
* Copyright (c) 1990, University of Michigan
*/
#include <rle.h>
#include <rle_raw.h>
#ifdef USE_STDLIB_H
#include <stdlib.h>
#endif /* USE_STDLIB_H */
/*****************************************************************
* TAG( rle_rawtorow )
*
* Convert a "raw" scanline to a row format.
* Inputs:
* the_hdr: RLE header describing the image.
* raw: Pointer to pointers to vectors of "raw" data.
* nraw: Pointer to vector of lengths of raw data vectors.
* Outputs:
* outrows: Pointer to pointers to scanline data for
* this scanline.
* Algorithm:
* Interpret successive "op codes", filling in scanline array.
* Scanline between xmin and xmax is prefilled with background
* color, if one is given.
*/
void
rle_rawtorow(the_hdr, raw, nraw, outrows)
rle_hdr * the_hdr;
rle_op ** raw;
int * nraw;
rle_pixel ** outrows;
{
register int i, j;
register rle_pixel * outptr;
int chan;
for (chan = -the_hdr->alpha; chan < the_hdr->ncolors; chan++)
if ( RLE_BIT( *the_hdr, chan ) )
{
if ( chan >= 0 && the_hdr->background == 2 && the_hdr->bg_color &&
the_hdr->bg_color[chan] != 0 )
{
j = the_hdr->bg_color[chan];
for ( i = the_hdr->xmin,
outptr = &outrows[chan][the_hdr->xmin];
i <= the_hdr->xmax;
i++, outptr++ )
*outptr = j;
}
else
bzero( &outrows[chan][the_hdr->xmin],
the_hdr->xmax - the_hdr->xmin + 1 );
for( i = 0; i < nraw[chan]; i++ )
{
outptr = &(outrows[chan][raw[chan][i].xloc]);
switch (raw[chan][i].opcode)
{
case RByteDataOp:
bcopy( raw[chan][i].u.pixels, outptr,
raw[chan][i].length );
break;
case RRunDataOp:
for ( j = raw[chan][i].length; j > 0; j--)
*(outptr++) = (rle_pixel) raw[chan][i].u.run_val;
break;
}
}
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.