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

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

/* 
 * getfb.c - Display Extended Run Length Encoding with Alpha1 channel
 *		on BRL libfb frame buffer.
 * 
 * Author:	Paul R. Stay
 * 		Ballistic Research Labratory
 * 		Aberdeen Proving Ground, Md.
 * Date:	Mon Jun 23 1986
 */

#include <stdio.h>
#include <brlcad/fb.h>
#include "rle.h"
#ifdef USE_STDLIB_H
#include <stdlib.h>
#endif

#define MAX_PIXELS   1024

main( argc, argv)
int argc;
char ** argv;
{
	FILE *rle_fd;
	FBIO *fbp;
	int r_debug;
	char * rle_file;
	register int i,j;

	unsigned char scanline[4][MAX_PIXELS];	/* Run length scan line */
	unsigned char *rows[4];		/* Character pointers for rle_getrow */
	
	RGBpixel pix[MAX_PIXELS];		/* pixel structure */
	int x_len, y_len;

	argc--; argv++;
	while( argv[0][0] == '-')  {

		switch( argv[0][1] )  {
		case 'D':
			r_debug = 1;
			break;
		default:
			break;
		}
		argc--; argv++;
	}

	rle_file = argv[0];
        rle_dflt_hdr.rle_file = rle_open_f("getfb", rle_file, "r");
	if( rle_get_setup( &rle_dflt_hdr ) < 0 )  {
		fprintf(stderr, "getfb: Error reading setup information\n");
		exit(1);
	}

	if (r_debug)
	{
		fprintf( stderr,"Image bounds\n\tmin %d %d\n\tmax %d %d\n",
			rle_dflt_hdr.xmin, rle_dflt_hdr.ymin,
			rle_dflt_hdr.xmax, rle_dflt_hdr.ymax );
		if ( rle_dflt_hdr.alpha )
			fprintf( stderr, "Alpha Channel present\n");
		rle_debug(1);
	}

	/* We`re only interested in R, G, & B */
	RLE_CLR_BIT(rle_dflt_hdr, RLE_ALPHA);
	for (i = 3; i < rle_dflt_hdr.ncolors; i++)
		RLE_CLR_BIT(rle_dflt_hdr, i);

	x_len = rle_dflt_hdr.xmax - rle_dflt_hdr.xmin + 1;
	y_len = rle_dflt_hdr.ymax - rle_dflt_hdr.ymin + 1;

	if( (fbp = fb_open( "", rle_dflt_hdr.xmax+1, rle_dflt_hdr.ymax+1 )) == NULL )
		exit(12);

	for ( i = rle_dflt_hdr.ymin; i <= rle_dflt_hdr.ymax; i++)  {
		rows[0] = (unsigned char *)-1;
		rows[1] = scanline[1];	
		rows[2] = scanline[2];	
		rows[3] = scanline[3];	
		rle_getrow(&rle_dflt_hdr, &rows[1] );

		for ( j = 0; j < x_len; j++)
		{
			pix[j][RED] = scanline[1][j];
			pix[j][GRN] = scanline[2][j];
			pix[j][BLU] = scanline[3][j];
		}
		fb_write( fbp, rle_dflt_hdr.xmin, i, pix, x_len );
	}
	exit(0);
}

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