ftp.nice.ch/pub/next/unix/graphics/urt.3.0.s.tar.gz#/urt.3.0.s/tools/rle_box.c

This is rle_box.c in view mode; [Download] [Up]

/* 
 * rle_box.c - Common code between rlebox and crop.
 * 
 * Author:	Spencer W. Thomas
 * 		EECS Dept.
 * 		University of Michigan
 * Date:	Tue Jun  5 1990
 * Copyright (c) 1990, University of Michigan
 */

#include <stdio.h>
#include <rle.h>
#include <rle_raw.h>

void
rle_box( the_hdr, xminp, xmaxp, yminp, ymaxp )
rle_hdr *the_hdr;
int *xminp, *xmaxp, *yminp, *ymaxp;
{
    rle_op ** raw;
    register rle_op ** rawp;
    register int i;
    int y, * nrawp;
    int xmin, xmax, ymin, ymax;

    rle_raw_alloc( the_hdr, &raw, &nrawp );
    rawp = raw;

    ymax = -1;			/* smaller than it can ever be */
    ymin = 32768;		/* larger than it can ever be */
    xmax = -1;
    xmin = 32768;

    while ( ( y = rle_getraw( the_hdr, rawp, nrawp ) ) != 32768 )
    {
	if ( y < ymin )		/* found ymin yet? */
	{
	    /* Only count it if there is really some data */
	    for ( i = -the_hdr->alpha; i < the_hdr->ncolors; i++ )
		if ( nrawp[i] > 0 )
		    ymin = y;
	}
	if ( y > ymax )		/* update ymax? */
	{
	    /* Only count it if there is really some data */
	    for ( i = -the_hdr->alpha; i < the_hdr->ncolors; i++ )
		if ( nrawp[i] > 0 )
		    ymax = y;
	}

	/* Now do xmin and xmax */
	    for ( i = -the_hdr->alpha; i < the_hdr->ncolors; i++ )
		if ( nrawp[i] > 0 )
		{
		    if ( rawp[i][0].xloc < xmin )
			xmin = rawp[i][0].xloc;
		    if ( xmax < rawp[i][nrawp[i]-1].xloc +
			 rawp[i][nrawp[i]-1].length - 1 )
			xmax =  rawp[i][nrawp[i]-1].xloc +
			    rawp[i][nrawp[i]-1].length - 1;
		}
    }

    /* If no data, arbitrarily use (0,0)x(0,0) */
    if ( xmax < xmin )
    {
	xmax = xmin = ymax = ymin = 0;
    }

    *xminp = xmin;
    *xmaxp = xmax;
    *yminp = ymin;
    *ymaxp = ymax;

    rle_raw_free( the_hdr, raw, nrawp );
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.