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.