This is rlebg.c in view mode; [Download] [Up]
/*
* This software is copyrighted as noted below. It may be freely copied,
* modified, and redistributed, provided that the copyright notice is
* preserved on all copies.
*
* There is no warranty or other guarantee of fitness for this software,
* it is provided solely "as is". Bug reports or fixes may be sent
* to the author, who may or may not act on them as he desires.
*
* You may not include this software in a program or other software product
* without supplying the source, or without informing the end-user that the
* source is available for no extra charge.
*
* If you modify this software, you should include a notice giving the
* name of the person performing the modification, the date of modification,
* and the reason for such modification.
*/
/*
* background.c - Create a background frame of any color/alpha
*
* Author: Rod Bogart & John W. Peterson
* Computer Science Dept.
* University of Utah
* Date: Tue Jun 24 1986
* Copyright (c) 1986, University of Utah
*
*/
#include <stdio.h>
#include <rle.h>
#include <rle_raw.h>
#ifdef USE_STDLIB_H
#include <stdlib.h>
#endif
void
main(argc, argv)
int argc;
char *argv[];
{
rle_op backrundata[4], *rows[4];
char * outfilename = NULL;
static int numrundata[4] = { 1, 1, 1, 1};
float top_inten = 1.0 , bot_inten = 0.1, delta = 0;
unsigned char a, r, g, b;
int no_alpha_given;
float scale, inten;
int linear_ramp = 0;
int i, j, alpha = -1, red, green, blue;
int oflag = 0, sizeflag = 0, xsize = 512, ysize = 480, vbackflag = 0;
if ( scanargs( argc, argv,
"% s%-xsize!dysize!d l%- v%-top%fbottom%f o%-outfile!s \n\
red!d green!d blue!d alpha%d",
&sizeflag, &xsize, &ysize, &linear_ramp, &vbackflag,
&top_inten, &bot_inten, &oflag, &outfilename,
&red, &green, &blue, &alpha ) == 0 )
{
exit(-1);
}
rle_dflt_hdr.rle_file = rle_open_f("rlebg", outfilename, "w");
rle_addhist( argv, (rle_hdr *)0, &rle_dflt_hdr );
if ((top_inten < 0.0) || (top_inten > 1.0) || (bot_inten < 0.0) ||
(bot_inten > 1.0))
{
fprintf(stderr,"background: -v bounds must be 0.0 to 1.0");
exit(-1);
}
if (no_alpha_given = (alpha == -1))
alpha = 255;
for (i=0; i < 4; i++)
{
backrundata[i].opcode = RRunDataOp;
backrundata[i].xloc = 0;
backrundata[i].length = xsize;
}
/* Initialize scanline */
if (!vbackflag)
{
backrundata[0].u.run_val = alpha;
backrundata[1].u.run_val = red;
backrundata[2].u.run_val = green;
backrundata[3].u.run_val = blue;
}
else
delta = (top_inten - bot_inten) / ysize;
for(i=0; i < 4; i++)
rows[i] = &(backrundata[i]);
RLE_SET_BIT(rle_dflt_hdr, RLE_ALPHA);
rle_dflt_hdr.xmax = xsize - 1;
rle_dflt_hdr.ymax = ysize - 1;
rle_dflt_hdr.alpha = 1;
rle_put_setup( &rle_dflt_hdr );
a = alpha;
scale = (top_inten - bot_inten) / (ysize * ysize);
inten = bot_inten;
for (j = 0; j < ysize; j++)
{
if (vbackflag)
{
if (linear_ramp)
inten += delta;
else
{
if (top_inten > bot_inten)
inten = scale * (float) (j * j) + bot_inten;
else
inten = top_inten - (scale * (float)
((ysize - j) * (ysize - j)));
}
if (!no_alpha_given)
/* Cast to int to get around HP compiler bug. */
a = (int) ((float)alpha * inten);
/* Cast to int to get around HP compiler bug. */
r = (int) ((float)red * inten);
g = (int) ((float)green * inten);
b = (int) ((float)blue * inten);
backrundata[0].u.run_val = a;
backrundata[1].u.run_val = r;
backrundata[2].u.run_val = g;
backrundata[3].u.run_val = b;
}
rle_putraw( &rows[1], &numrundata[1], &rle_dflt_hdr );
}
rle_puteof( &rle_dflt_hdr );
exit( 0 );
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.