CCL Home Page
Up Directory CCL Part04
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh 'etc/malloc.sgi' <<'END_OF_FILE'
X[ Mike Gigante notes that when rendering exteremely large datasets
X  (consisting primarily of triangles in his case), one may use the
X  'mallopt()' routine on certain machines to improve performance
X  significantly (to say the least). -- CEK ]
X  
X
XFrom mg@godzilla.cgl.rmit.OZ.AU  Tue Aug 21 14:35:08 1990
XReceived: from godzilla.cgl.rmit.oz.au by weedeater.math.yale.edu via SMTP; Tue, 21 Aug 90 14:35:08 -0400
XReceived: by godzilla 
XDate: Wed, 22 Aug 90 05:16:40 EST
XFrom: mg@godzilla.cgl.rmit.OZ.AU (Mike Gigante)
XMessage-Id: <9008211916.4715@godzilla>
XTo: craig@weedeater.math.yale.edu
XSubject: malloc stuff
XStatus: RO
X
XCraig,
Xwe spoke after the ray tracing sig about malloc stuff. Here is that
Xstuff I promised to send you. 
X
X1) include  in your main program
X2) make the following code the *first* executable statements
X
X#ifdef sgi
X  /*
X   * try to tune the malloc stuff. First thing to note is that most
X   * allocated blocks (at least for triangles) are less than 200 bytes...
X   */
X  mallopt(M_MXFAST, 200);
X  /*
X   * allocate a big chunk at a time - esp since we are going to use LOTS
X   * of memory!
X   */
X  mallopt(M_BLKSZ, 65536);
X  /*
X   * don't try too hard when looking for free'd memory to re-use. This
X   * avoids the heavy paging penalty we have seen... In fact don't look
X   * at all!
X   */
X  mallopt(M_MXCHK, 0);
X#endif
X
Xand wow! *HUGE* improvments for large models. Just to remind you, it was
Xa difference of 88 min CPU time over 10 hour period (just to read a model)
Xvs about 2 minutes cpu/elapsed. Because of the M_MXCHK call, the working
Xset was larger but it didn't make much difference..
X
XBTW, you should check the 200 bytes in the M_MXFAST call. Make it larger
Xthan the common malloc sizes (say for mallocing triangle/poly structs).
X
XHope this is useful.
X
XMike Gigante, RMIT
END_OF_FILE
if test 1812 -ne `wc -c <'etc/malloc.sgi'`; then
    echo shar: \"'etc/malloc.sgi'\" unpacked with wrong size!
fi
# end of 'etc/malloc.sgi'
fi
if test -f 'etc/rsconvert/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'etc/rsconvert/Makefile.SH'\"
else
echo shar: Extracting \"'etc/rsconvert/Makefile.SH'\" \(1615 characters\)
sed "s/^X//" >'etc/rsconvert/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting etc/rsconvert/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIBRAYDIR = ../../libray
XINCLUDE = -I$(LIBRAYDIR) -I../../
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XLIBS =
XYFLAGS = -d
X
XCFILES = main.c yacc.c lex.c
XOBJS = $(CFILES:.c=.o)
XDEPENDSRC = main.c yacc.y lex.l
X
Xrsconvert: $(OBJS)
X	$(CC) $(CFLAGS) -o rsconvert $(OBJS) $(LIBS)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(DEPENDSRC) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
Xclean:
X	/bin/rm -f y.tab.h $(OBJS) lex.c
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1615 -ne `wc -c <'etc/rsconvert/Makefile.SH'`; then
    echo shar: \"'etc/rsconvert/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'etc/rsconvert/Makefile.SH'
# end of 'etc/rsconvert/Makefile.SH'
fi
if test -f 'etc/rsconvert/main.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'etc/rsconvert/main.c'\"
else
echo shar: Extracting \"'etc/rsconvert/main.c'\" \(1743 characters\)
sed "s/^X//" >'etc/rsconvert/main.c' <<'END_OF_FILE'
X/*
X * main.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: main.c,v 4.0.1.1 91/11/26 21:11:33 cek Exp Locker: cek $
X *
X * $Log:	main.c,v $
X * Revision 4.0.1.1  91/11/26  21:11:33  cek
X * patch3: Define ENDCAPS for cylinder-capping.
X * 
X * Revision 4.0  91/07/17  14:29:30  kolb
X * Initial version.
X * 
X */
X#include 
X#ifdef SYSV
X#include 
X#endif
X#include "libcommon/common.h"
X
Xextern FILE *yyin;
X
X#define usage(v)		fprintf(stderr,"usage: %s [oldfile]\n",v)
X
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X	if (argc > 2) {
X		usage(argv[0]);
X		exit(1);
X	}
X
X	if (argc == 2) {
X		yyin = fopen(argv[1], "r");
X		if (yyin == (FILE *)NULL) {
X			fprintf(stderr,"Cannot open %s\n",argv[1]);
X			exit(2);
X		}
X	} else
X		yyin = stdin;
X	printf("/* Converted by rsconvert */\n");
X	printf("#define ENDCAPS\n");
X	yyparse();
X}	
X
Xchar *
Xstrsave(s)
Xchar *s;
X{
X	extern voidstar Malloc();
X	char *r;
X
X	r = (char *)Malloc(strlen(s) + 1);
X	strcpy(r, s);
X	return r;
X}
X
Xvoidstar
XMalloc(n)
Xunsigned n;
X{
X	voidstar r;
X	extern voidstar malloc();
X
X	r = malloc(n);
X	if (r == (voidstar)NULL) {
X		fprintf(stderr,"Out of memory allocating %d bytes.\n");
X		exit(1);
X	}
X	return r;
X}
X
Xvoidstar
XCalloc(nelem, elen)
Xunsigned nelem, elen;
X{
X	voidstar res;
X
X	res = Malloc(nelem*elen);
X	bzero(res, (int)nelem*elen);
X	return res;
X}
END_OF_FILE
if test 1743 -ne `wc -c <'etc/rsconvert/main.c'`; then
    echo shar: \"'etc/rsconvert/main.c'\" unpacked with wrong size!
fi
# end of 'etc/rsconvert/main.c'
fi
if test -f 'libray/libcommon/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/Makefile.SH'\"
else
echo shar: Extracting \"'libray/libcommon/Makefile.SH'\" \(1605 characters\)
sed "s/^X//" >'libray/libcommon/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting libcommon/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I../..
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XSHELL = /bin/sh
X
XCFILES = memory.c expr.c transform.c rotate.c sampling.c scale.c translate.c \
X	vecmath.c xform.c
XOFILES = $(CFILES:.c=.o)
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1605 -ne `wc -c <'libray/libcommon/Makefile.SH'`; then
    echo shar: \"'libray/libcommon/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/libcommon/Makefile.SH'
# end of 'libray/libcommon/Makefile.SH'
fi
if test -f 'libray/libcommon/memory.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/memory.c'\"
else
echo shar: Extracting \"'libray/libcommon/memory.c'\" \(1646 characters\)
sed "s/^X//" >'libray/libcommon/memory.c' <<'END_OF_FILE'
X/*
X * memory.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: memory.c,v 4.0 91/07/17 14:30:57 kolb Exp Locker: kolb $
X *
X * $Log:	memory.c,v $
X * Revision 4.0  91/07/17  14:30:57  kolb
X * Initial version.
X * 
X */
X#ifdef SYSV
X#include 
X#endif
X#include "common.h"
X
Xunsigned long TotalAllocated;
X
Xvoidstar
XMalloc(bytes)
Xunsigned bytes;
X{
X	voidstar res;
X
X	TotalAllocated += bytes;
X
X	res = (voidstar)malloc(bytes);
X	if (res == (voidstar)NULL)
X		RLerror(RL_PANIC,
X			"Out of memory trying to allocate %d bytes.\n",bytes);
X	return res;
X}
X
Xvoidstar
XCalloc(nelem, elen)
Xunsigned nelem, elen;
X{
X	voidstar res;
X
X	res = Malloc(nelem*elen);
X	bzero(res, (int)nelem*elen);
X	return res;
X}
X
Xvoid
XPrintMemoryStats(fp)
XFILE *fp;
X{
X	fprintf(fp,"Total memory allocated:\t\t%lu bytes\n",
X			TotalAllocated);
X}
X
X/*
X * Allocate space for a string, copy string into space.
X */
Xchar *
Xstrsave(s)
Xchar *s;
X{
X	char *tmp;
X
X	if (s == (char *)NULL)
X		return (char *)NULL;
X
X	tmp = (char *)Malloc((unsigned)strlen(s) + 1);
X	(void)strcpy(tmp, s);
X	return tmp;
X}
X
X#ifdef MULTIMAX
X
Xchar *
Xshare_calloc(num, siz)
Xint num;
Xunsigned int siz;
X{
X	char *res;
X
X	res = share_malloc(num*siz);
X	bzero(res, num*siz);
X	return res;
X}
X#endif
END_OF_FILE
if test 1646 -ne `wc -c <'libray/libcommon/memory.c'`; then
    echo shar: \"'libray/libcommon/memory.c'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/memory.c'
fi
if test -f 'libray/libcommon/scale.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/scale.c'\"
else
echo shar: Extracting \"'libray/libcommon/scale.c'\" \(1761 characters\)
sed "s/^X//" >'libray/libcommon/scale.c' <<'END_OF_FILE'
X/*
X * scale.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: scale.c,v 4.0 91/07/17 14:32:08 kolb Exp Locker: kolb $
X *
X * $Log:	scale.c,v $
X * Revision 4.0  91/07/17  14:32:08  kolb
X * Initial version.
X * 
X */
X#include "common.h"
X#include "scale.h"
X
XTransMethods *iScaleMethods;
Xvoid ScaleMatrix();
X
XScale *
XScaleCreate()
X{
X	Scale *res;
X
X	res = (Scale *)Malloc(sizeof(Scale));
X	res->x = res->y = res->z = 1.;
X	return res;
X}
X
XTransMethods *
XScaleMethods()
X{
X	if (iScaleMethods == (TransMethods *)NULL) {
X		iScaleMethods = (TransMethods *)Malloc(sizeof(TransMethods));
X		iScaleMethods->create = (TransCreateFunc *)ScaleCreate;
X		iScaleMethods->propagate = ScalePropagate;
X	}
X	return iScaleMethods;	
X}
X
Xvoid
XScalePropagate(scale, trans, itrans)
XScale *scale;
XRSMatrix *trans, *itrans;
X{
X	if (equal(scale->x, 0.) || equal(scale->y, 0.) || equal(scale->z, 0.))
X		RLerror(RL_PANIC, "Degenerate scale %g %g %g\n", scale->x, scale->y, scale->z);
X	ScaleMatrix(scale->x, scale->y, scale->z, trans);
X	/*
X	 * Build the inverse
X	 */
X	MatrixInit(itrans);
X	itrans->matrix[0][0] = 1. / scale->x;
X	itrans->matrix[1][1] = 1. / scale->y;
X	itrans->matrix[2][2] = 1. / scale->z;
X}
X
Xvoid
XScaleMatrix(x, y, z, mat)
XFloat x, y, z;
XRSMatrix *mat;
X{
X	MatrixInit(mat);
X	mat->matrix[0][0] = x;
X	mat->matrix[1][1] = y;
X	mat->matrix[2][2] = z;
X}
END_OF_FILE
if test 1761 -ne `wc -c <'libray/libcommon/scale.c'`; then
    echo shar: \"'libray/libcommon/scale.c'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/scale.c'
fi
if test -f 'libray/libcommon/translate.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/translate.c'\"
else
echo shar: Extracting \"'libray/libcommon/translate.c'\" \(1722 characters\)
sed "s/^X//" >'libray/libcommon/translate.c' <<'END_OF_FILE'
X/*
X * translate.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: translate.c,v 4.0 91/07/17 14:32:42 kolb Exp Locker: kolb $
X *
X * $Log:	translate.c,v $
X * Revision 4.0  91/07/17  14:32:42  kolb
X * Initial version.
X * 
X */
X#include "common.h"
X#include "translate.h"
X
XTransMethods *iTranslateMethods;
Xvoid TranslationMatrix();
X
XTranslate *
XTranslateCreate()
X{
X	Translate *res;
X
X	res = (Translate *)Malloc(sizeof(Translate));
X	res->x = res->y = res->z = 0.;
X	return res;
X}
X
XTransMethods *
XTranslateMethods()
X{
X	if (iTranslateMethods == (TransMethods *)NULL) {
X		iTranslateMethods = (TransMethods *)Malloc(sizeof(TransMethods));
X		iTranslateMethods->create = (TransCreateFunc *)TranslateCreate;
X		iTranslateMethods->propagate = TranslatePropagate;
X	}
X	return iTranslateMethods;	
X}
X
Xvoid
XTranslatePropagate(translate, trans, itrans)
XTranslate *translate;
XRSMatrix *trans, *itrans;
X{
X	TranslationMatrix(translate->x, translate->y, translate->z, trans);
X	/*
X	 * Build the inverse...
X	 */
X	MatrixInit(itrans);
X	itrans->translate.x = -translate->x;
X	itrans->translate.y = -translate->y;
X	itrans->translate.z = -translate->z;
X}
X
Xvoid
XTranslationMatrix(x, y, z, mat)
XFloat x, y, z;
XRSMatrix *mat;
X{
X	MatrixInit(mat);
X	mat->translate.x = x;
X	mat->translate.y = y;
X	mat->translate.z = z;
X}
END_OF_FILE
if test 1722 -ne `wc -c <'libray/libcommon/translate.c'`; then
    echo shar: \"'libray/libcommon/translate.c'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/translate.c'
fi
if test -f 'libray/libimage/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libimage/Makefile.SH'\"
else
echo shar: Extracting \"'libray/libimage/Makefile.SH'\" \(1548 characters\)
sed "s/^X//" >'libray/libimage/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting libimage/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I.. -I../.. $(URTINC)
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XSHELL = /bin/sh
X
XOFILES = image.o
XCFILES = image.c
X
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1548 -ne `wc -c <'libray/libimage/Makefile.SH'`; then
    echo shar: \"'libray/libimage/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/libimage/Makefile.SH'
# end of 'libray/libimage/Makefile.SH'
fi
if test -f 'libray/liblight/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/liblight/Makefile.SH'\"
else
echo shar: Extracting \"'libray/liblight/Makefile.SH'\" \(1585 characters\)
sed "s/^X//" >'libray/liblight/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting liblight/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I.. -I../..
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XSHELL = /bin/sh
X
XCFILES = light.c extended.c infinite.c jittered.c point.c shadow.c spot.c
XOFILES = $(CFILES:.c=.o)
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1585 -ne `wc -c <'libray/liblight/Makefile.SH'`; then
    echo shar: \"'libray/liblight/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/liblight/Makefile.SH'
# end of 'libray/liblight/Makefile.SH'
fi
if test -f 'libray/liblight/infinite.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/liblight/infinite.c'\"
else
echo shar: Extracting \"'libray/liblight/infinite.c'\" \(1698 characters\)
sed "s/^X//" >'libray/liblight/infinite.c' <<'END_OF_FILE'
X/*
X * infinite.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: infinite.c,v 4.0 91/07/17 14:34:28 kolb Exp Locker: kolb $
X *
X * $Log:	infinite.c,v $
X * Revision 4.0  91/07/17  14:34:28  kolb
X * Initial version.
X * 
X */
X#include "light.h"
X#include "infinite.h"
X
Xstatic LightMethods *iInfMethods = NULL;
X
XInfinite *
XInfiniteCreate(dir)
XVector *dir;
X{
X	Infinite *inf;
X
X	inf = (Infinite *)share_malloc(sizeof(Infinite));
X	inf->dir = *dir;
X	if (VecNormalize(&inf->dir) == 0.) {
X		RLerror(RL_ABORT, "Invalid directional light.\n");
X		return (Infinite *)NULL;
X	}
X	return inf;
X}
X
XLightMethods *
XInfiniteMethods()
X{
X	if (iInfMethods == (LightMethods *)NULL) {
X		iInfMethods = LightMethodsCreate();
X		iInfMethods->intens = InfiniteIntens;
X		iInfMethods->dir = InfiniteDirection;
X	}
X	return iInfMethods;
X}
X
Xint
XInfiniteIntens(inf, lcolor, cache, ray, dist, noshadow, color)
XInfinite *inf;
XColor *lcolor, *color;
XShadowCache *cache;
XRay *ray;
XFloat dist;
Xint noshadow;
X{
X	return !Shadowed(color, lcolor, cache, ray, dist, noshadow);
X}
X
Xvoid
XInfiniteDirection(lp, pos, dir, dist)
XInfinite *lp;
XVector *pos, *dir;
XFloat *dist;
X{
X	*dir = lp->dir;
X	*dist = FAR_AWAY;
X}
X
XInfiniteMethodRegister(meth)
XUserMethodType meth;
X{
X	if (iInfMethods)
X		iInfMethods->user = meth;
X}
END_OF_FILE
if test 1698 -ne `wc -c <'libray/liblight/infinite.c'`; then
    echo shar: \"'libray/liblight/infinite.c'\" unpacked with wrong size!
fi
# end of 'libray/liblight/infinite.c'
fi
if test -f 'libray/liblight/point.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/liblight/point.c'\"
else
echo shar: Extracting \"'libray/liblight/point.c'\" \(1655 characters\)
sed "s/^X//" >'libray/liblight/point.c' <<'END_OF_FILE'
X/*
X * point.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: point.c,v 4.0 91/07/17 14:35:20 kolb Exp Locker: kolb $
X *
X * $Log:	point.c,v $
X * Revision 4.0  91/07/17  14:35:20  kolb
X * Initial version.
X * 
X */
X#include "light.h"
X#include "point.h"
X
Xstatic LightMethods *iPointMethods = NULL;
X
XPointlight *
XPointCreate(pos)
XVector *pos;
X{
X	Pointlight *p;
X
X	p = (Pointlight *)share_malloc(sizeof(Pointlight));
X	p->pos = *pos;
X	return p;
X}
X
XLightMethods *
XPointMethods()
X{
X	if (iPointMethods == (LightMethods *)NULL) {
X		iPointMethods = LightMethodsCreate();
X		iPointMethods->intens = PointIntens;
X		iPointMethods->dir = PointDirection;
X	}
X	return iPointMethods;
X}
X
Xint
XPointIntens(lp, lcolor, cache, ray, dist, noshadow, color)
XPointlight *lp;
XColor *lcolor, *color;
XShadowCache *cache;
XRay *ray;
XFloat dist;
Xint noshadow;
X{
X	return !Shadowed(color, lcolor, cache, ray, dist, noshadow);
X}
X
Xvoid
XPointDirection(lp, pos, dir, dist)
XPointlight *lp;
XVector *pos, *dir;
XFloat *dist;
X{
X	/*
X	 * Calculate dir from position to center of
X	 * light source.
X	 */
X	VecSub(lp->pos, *pos, dir);
X	*dist = VecNormalize(dir);
X}
X
XPointMethodRegister(meth)
XUserMethodType meth;
X{
X	if (iPointMethods)
X		iPointMethods->user = meth;
X}
END_OF_FILE
if test 1655 -ne `wc -c <'libray/liblight/point.c'`; then
    echo shar: \"'libray/liblight/point.c'\" unpacked with wrong size!
fi
# end of 'libray/liblight/point.c'
fi
if test -f 'libray/libobj/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/Makefile.SH'\"
else
echo shar: Extracting \"'libray/libobj/Makefile.SH'\" \(1680 characters\)
sed "s/^X//" >'libray/libobj/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting libobj/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I.. -I../..
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XSHELL = /bin/sh
X
XCFILES = blob.c bounds.c box.c cone.c csg.c cylinder.c disc.c grid.c \
X	 hf.c instance.c list.c intersect.c geom.c plane.c poly.c \
X	 roots.c sphere.c torus.c triangle.c
X
XOFILES = $(CFILES:.c=.o)
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1680 -ne `wc -c <'libray/libobj/Makefile.SH'`; then
    echo shar: \"'libray/libobj/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/libobj/Makefile.SH'
# end of 'libray/libobj/Makefile.SH'
fi
if test -f 'libray/libobj/blob.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/blob.h'\"
else
echo shar: Extracting \"'libray/libobj/blob.h'\" \(1574 characters\)
sed "s/^X//" >'libray/libobj/blob.h' <<'END_OF_FILE'
X/*
X * blob.h
X *
X * Copyright (C) 1990, 1991, Mark Polipec, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: blob.h,v 4.0 91/07/17 14:36:12 kolb Exp Locker: kolb $
X *
X * $Log:	blob.h,v $
X * Revision 4.0  91/07/17  14:36:12  kolb
X * Initial version.
X * 
X */
X#ifndef BLOB_H
X#define BLOB_H
X
X#define GeomBlobCreate(t,m,n) GeomCreate((GeomRef)BlobCreate(t,m,n), BlobMethods())
X
X#define R_START 1
X#define R_END   0
X
X/*
X * Blob
X */
Xtypedef struct {
X	Float rs;	/* radius */
X	Float c4;	/* coeefficient */
X	Float c2;	/* coeefficient */
X	Float c0;	/* coeefficient */
X	Float x;	/* x position */
X	Float y;	/* y position */
X	Float z;	/* z position */
X} MetaVector;
X
Xtypedef struct {
X	int type,pnt;
X	Float bound;
X	Float c[5];
X} MetaInt;
X
Xtypedef struct {
X	Float T;		/* Threshold   */
X        int num;		/* number of points */
X        MetaVector *list;	/* list of points */
X	MetaInt *ilist, **iarr;
X        
X} Blob;
X
Xtypedef struct MetaList {
X	MetaVector mvec;
X	struct MetaList *next;
X} MetaList;
X
Xextern int	BlobIntersect(), BlobNormal();
Xextern void	BlobBounds(), BlobStats();
Xextern Blob	*BlobCreate();
Xextern char	*BlobName();
Xextern Methods	*BlobMethods();
X
X#endif /* BLOB_H */
END_OF_FILE
if test 1574 -ne `wc -c <'libray/libobj/blob.h'`; then
    echo shar: \"'libray/libobj/blob.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/blob.h'
fi
if test -f 'libray/libobj/grid.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/grid.h'\"
else
echo shar: Extracting \"'libray/libobj/grid.h'\" \(1751 characters\)
sed "s/^X//" >'libray/libobj/grid.h' <<'END_OF_FILE'
X/*
X * grid.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: grid.h,v 4.0 91/07/17 14:38:07 kolb Exp Locker: kolb $
X *
X * $Log:	grid.h,v $
X * Revision 4.0  91/07/17  14:38:07  kolb
X * Initial version.
X * 
X */
X#ifndef GRID_H
X#define GRID_H
X
X#define GeomGridCreate(x,y,z)	GeomCreate((GeomRef)GridCreate(x,y,z), \
X					GridMethods())
X/*
X * Convert from voxel number along X/Y/Z to corresponding coordinate.
X */
X#define voxel2x(g,x)		((x) * g->voxsize[0] + g->bounds[0][0])
X#define voxel2y(g,y)		((y) * g->voxsize[1] + g->bounds[0][1])
X#define voxel2z(g,z)		((z) * g->voxsize[2] + g->bounds[0][2])
X/*
X * And vice-versa.
X */
X#define x2voxel(g,x)		(((x) - g->bounds[0][0]) / g->voxsize[0])
X#define y2voxel(g,y)		(((y) - g->bounds[0][1]) / g->voxsize[1])
X#define z2voxel(g,z)		(((z) - g->bounds[0][2]) / g->voxsize[2])
X
X/*
X * Grid object
X */
Xtypedef struct {
X	short	xsize, ysize, zsize;	/* # of voxels along each axis */
X	Float	bounds[2][3];		/* bounding box */
X	Float	voxsize[3];		/* size of a voxel */
X	struct	Geom	*unbounded,	/* unbounded objects */
X			*objects;	/* all bounded objects */
X	struct	GeomList	****cells;	/* Voxels */
X} Grid;
X
Xextern char	*GridName();
Xextern void	*GirdBounds();
Xextern int	GridIntersect(), GridConvert();
Xextern Grid	*GridCreate();
Xextern Methods	*GridMethods();
X
X#endif /* GRID_H */
END_OF_FILE
if test 1751 -ne `wc -c <'libray/libobj/grid.h'`; then
    echo shar: \"'libray/libobj/grid.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/grid.h'
fi
if test -f 'libray/libobj/triangle.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/triangle.h'\"
else
echo shar: Extracting \"'libray/libobj/triangle.h'\" \(1589 characters\)
sed "s/^X//" >'libray/libobj/triangle.h' <<'END_OF_FILE'
X/*
X * triangle.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: triangle.h,v 4.0 91/07/17 14:39:43 kolb Exp Locker: kolb $
X *
X * $Log:	triangle.h,v $
X * Revision 4.0  91/07/17  14:39:43  kolb
X * Initial version.
X * 
X */
X#ifndef TRIANGLE_H
X#define TRIANGLE_H
X
X#define FLATTRI		0
X#define PHONGTRI	1
X
X#define GeomTriangleCreate(t,a,b,c,d,e,f,g,h,i,s)  GeomCreate( \
X		(GeomRef)TriangleCreate(t,a,b,c,d,e,f,g,h,i,s), TriangleMethods())
X
X/*
X * Triangle
X */
Xtypedef struct {
X	Vector	nrm,		/* triangle normal */
X		p[3],		/* vertices */
X		e[3],		/* "edge" vectors (scaled) */
X		*vnorm,		/* Array of vertex normals */
X		*dpdu, *dpdv;	/* U and V direction vectors */
X	Float	d,		/* plane constant  */
X		b[3];		/* Array of barycentric coordinates */
X	Vec2d	*uv;		/* Array of UV coordinates of vertices */
X	char	index,		/* Flag used for shading/intersection test. */
X		type;		/* type (to detect if phong or flat) */
X} Triangle;
X
Xextern Triangle	*TriangleCreate();
Xextern int	TriangleIntersect(), TriangleNormal();
Xextern void	TriangleBounds(), TriangleUV(),
X		TriangleStats();
Xextern Methods	*TriangleMethods();
Xchar		*TriangleName();
X#endif /* TRIANGLE_H */
END_OF_FILE
if test 1589 -ne `wc -c <'libray/libobj/triangle.h'`; then
    echo shar: \"'libray/libobj/triangle.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/triangle.h'
fi
if test -f 'libray/libsurf/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libsurf/Makefile.SH'\"
else
echo shar: Extracting \"'libray/libsurf/Makefile.SH'\" \(1577 characters\)
sed "s/^X//" >'libray/libsurf/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting libsurf/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I.. -I../..
XCFLAGS = $(INCLUDE) $(CCFLAGS) $(OPTIMIZE)
XSHELL = /bin/sh
X
XCFILES = atmosphere.c fog.c fogdeck.c mist.c surface.c surfshade.c
XOFILES = $(CFILES:.c=.o)
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1577 -ne `wc -c <'libray/libsurf/Makefile.SH'`; then
    echo shar: \"'libray/libsurf/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/libsurf/Makefile.SH'
# end of 'libray/libsurf/Makefile.SH'
fi
if test -f 'libray/libsurf/fog.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libsurf/fog.c'\"
else
echo shar: Extracting \"'libray/libsurf/fog.c'\" \(1675 characters\)
sed "s/^X//" >'libray/libsurf/fog.c' <<'END_OF_FILE'
X/*
X * fog.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: fog.c,v 4.0 91/07/17 14:40:14 kolb Exp Locker: kolb $
X *
X * $Log:	fog.c,v $
X * Revision 4.0  91/07/17  14:40:14  kolb
X * Initial version.
X * 
X */
X#include "atmosphere.h"
X#include "fog.h"
X
XFog *
XFogCreate(color, trans)
XColor *color, *trans;
X{
X	Fog *fog;
X	static void ComputeFog();
X
X	fog = (Fog *)Malloc(sizeof(Fog));
X
X	if (color == (Color *)NULL)
X		fog->color.r = fog->color.g = fog->color.b = 0.;
X	else
X		fog->color = *color;
X	if (trans == (Color *)NULL)
X		fog->trans.r = fog->trans.g = fog->trans.b = FAR_AWAY;
X	else {
X		fog->trans = *trans;
X	}
X	return fog;
X}
X
X/*
X * Add fog to the given color.
X */
Xvoid
XFogApply(fog, ray, pos, dist, color)
XFog *fog;
XRay *ray;
XVector *pos;
XFloat dist;
XColor *color;
X{
X	Float atten;
X	extern Float ExpAtten();
X
X	atten = ExpAtten(dist, fog->trans.r);
X	if (fog->trans.r == fog->trans.g && fog->trans.r == fog->trans.b) {
X		ColorBlend(color, &fog->color, atten, 1. - atten);
X		return;
X	}
X	color->r = atten*color->r + (1. - atten) * fog->color.r;
X
X	atten = ExpAtten(dist, fog->trans.g);
X	color->g = atten*color->g + (1. - atten) * fog->color.g;
X	atten = ExpAtten(dist, fog->trans.b);
X	color->b = atten*color->b + (1. - atten) * fog->color.b;
X}
END_OF_FILE
if test 1675 -ne `wc -c <'libray/libsurf/fog.c'`; then
    echo shar: \"'libray/libsurf/fog.c'\" unpacked with wrong size!
fi
# end of 'libray/libsurf/fog.c'
fi
if test -f 'libray/libsurf/mist.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libsurf/mist.c'\"
else
echo shar: Extracting \"'libray/libsurf/mist.c'\" \(1698 characters\)
sed "s/^X//" >'libray/libsurf/mist.c' <<'END_OF_FILE'
X/*
X * mist.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: mist.c,v 4.0 91/07/17 14:40:42 kolb Exp Locker: kolb $
X *
X * $Log:	mist.c,v $
X * Revision 4.0  91/07/17  14:40:42  kolb
X * Initial version.
X * 
X */
X#include "atmosphere.h"
X#include "mist.h"
X
XMist *
XMistCreate(color, trans, zero, scale)
XColor *color, *trans;
XFloat zero, scale;
X{
X	Mist *mist;
X
X	mist = (Mist *)Malloc(sizeof(Mist));
X	mist->color = *color;
X	mist->trans = *trans;
X	mist->zero = zero;
X	mist->scale = 1. / scale;
X	return mist;
X}
X
X/*
X * Add low-altitude mist to the given color.
X */
Xvoid
XMistApply(mist, ray, pos, dist, color)
XMist *mist;
XRay *ray;
XVector *pos;
XFloat dist;
XColor *color;
X{
X	Float deltaZ, d, atten;
X	extern Float ExpAtten();
X
X	deltaZ = mist->scale * (pos->z - ray->pos.z);
X	if (fabs(deltaZ) > EPSILON)
X		d = (exp(-ray->pos.z*mist->scale + mist->zero) -
X			    exp(-pos->z*mist->scale + mist->zero)) / deltaZ;
X	else
X		d = exp(-pos->z*mist->scale + mist->zero);
X
X	dist *= d;
X
X	atten = ExpAtten(dist, mist->trans.r);
X	color->r = atten*color->r + (1. - atten)*mist->color.r;
X
X	atten = ExpAtten(dist, mist->trans.g);
X	color->g = atten*color->g + (1. - atten)*mist->color.g;
X
X	atten = ExpAtten(dist, mist->trans.b);
X	color->b = atten*color->b + (1. - atten)*mist->color.b;
X}
END_OF_FILE
if test 1698 -ne `wc -c <'libray/libsurf/mist.c'`; then
    echo shar: \"'libray/libsurf/mist.c'\" unpacked with wrong size!
fi
# end of 'libray/libsurf/mist.c'
fi
if test -f 'libray/libtext/Makefile.SH' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/Makefile.SH'\"
else
echo shar: Extracting \"'libray/libtext/Makefile.SH'\" \(1683 characters\)
sed "s/^X//" >'libray/libtext/Makefile.SH' <<'END_OF_FILE'
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X    fi
X    . config.sh
X    ;;
Xesac
X: This forces SH files to create target in same directory as SH file.
X: This is so that make depend always knows where to find SH derivatives.
Xcase "$0" in
X*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
Xesac
Xecho "Extracting libtext/Makefile (with variable substitutions)"
X: This section of the file will have variable substitutions done on it.
X: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
X: Protect any dollar signs and backticks that you do not want interpreted
X: by putting a backslash in front.  You may delete these comments.
X$spitshell >Makefile <>Makefile <<'!NO!SUBS!'
XLIB = ../libray.a
XINCLUDE = -I.. -I../..
XCFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
XSHELL = /bin/sh
X
XCFILES = blotch.c bump.c checker.c cloud.c fbm.c fbmbump.c gloss.c \
X	 imagetext.c mapping.c marble.c mount.c noise.c sky.c stripe.c \
X	 textaux.c texture.c windy.c wood.c
X
XOFILES = $(CFILES:.c=.o)
X
X$(LIB): $(OFILES)
X	ar cur $(LIB) $(OFILES)
X	$(RANLIB) $(LIB)
X
Xclean:
X	rm -f $(OFILES)
X
Xdepend:
X	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
X	 $(MKDEP) $(CFILES) | sed 's/: \.\//: /; /\/usr\/include/d' \
X	) >Makefile.new
X	cp Makefile Makefile.bak
X	cp Makefile.new Makefile
X	rm -f Makefile.new
X
X# DO NOT DELETE THIS LINE
X!NO!SUBS!
Xchmod 755 Makefile
X$eunicefix Makefile
END_OF_FILE
if test 1683 -ne `wc -c <'libray/libtext/Makefile.SH'`; then
    echo shar: \"'libray/libtext/Makefile.SH'\" unpacked with wrong size!
fi
chmod +x 'libray/libtext/Makefile.SH'
# end of 'libray/libtext/Makefile.SH'
fi
if test -f 'libray/libtext/marble.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/marble.c'\"
else
echo shar: Extracting \"'libray/libtext/marble.c'\" \(1558 characters\)
sed "s/^X//" >'libray/libtext/marble.c' <<'END_OF_FILE'
X/*
X * marble.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: marble.c,v 4.0 91/07/17 14:43:06 kolb Exp Locker: kolb $
X *
X * $Log:	marble.c,v $
X * Revision 4.0  91/07/17  14:43:06  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "marble.h"
X
XMarbleText *
XMarbleCreate(mapname)
Xchar *mapname;
X{
X	MarbleText *marble;
X
X	marble = (MarbleText *)Malloc(sizeof(MarbleText));
X	if (mapname)
X		marble->colormap = ColormapRead(mapname);
X	else
X		marble->colormap = (Color *)NULL;
X	return marble;
X}
X
Xvoid
XMarbleApply(marble, prim, ray, pos, norm, gnorm, surf)
XMarbleText *marble;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Float val;
X	int index;
X
X	val = Marble(pos);
X	if (marble->colormap) {
X		index = (int)(255. * val);
X		surf->diff.r *= marble->colormap[index].r;
X		surf->diff.g *= marble->colormap[index].g;
X		surf->diff.b *= marble->colormap[index].b;
X		surf->amb.r *= marble->colormap[index].r;
X		surf->amb.g *= marble->colormap[index].g;
X		surf->amb.b *= marble->colormap[index].b;
X	} else {
X		ColorScale(val, surf->amb, &surf->amb);
X		ColorScale(val, surf->diff, &surf->diff);
X	}
X}
END_OF_FILE
if test 1558 -ne `wc -c <'libray/libtext/marble.c'`; then
    echo shar: \"'libray/libtext/marble.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/marble.c'
fi
if test -f 'libray/libtext/sky.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/sky.c'\"
else
echo shar: Extracting \"'libray/libtext/sky.c'\" \(1656 characters\)
sed "s/^X//" >'libray/libtext/sky.c' <<'END_OF_FILE'
X/*
X * sky.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: sky.c,v 4.0 91/07/17 14:43:43 kolb Exp Locker: kolb $
X *
X * $Log:	sky.c,v $
X * Revision 4.0  91/07/17  14:43:43  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "sky.h"
X
XSky *
XSkyCreate(scale, h, lambda, octaves, cthresh, lthresh)
XFloat h, lambda, scale, cthresh, lthresh;
Xint octaves;
X{
X	Sky *sky;
X
X	sky = (Sky *)Malloc(sizeof(Sky));
X	sky->beta = 1. + 2 * h;
X	sky->omega = pow(lambda, -0.5 * sky->beta);
X	sky->lambda = lambda;
X	sky->scale = scale;
X	sky->cthresh = cthresh;
X	sky->lthresh = lthresh;
X	sky->octaves = octaves;
X	return sky;
X}
X
Xvoid
XSkyApply(sky, prim, ray, pos, norm, gnorm, surf)
XSky *sky;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Float It, maxval;
X
X	It = fBm(pos, sky->omega, sky->lambda, sky->octaves);
X	maxval = 1. / (1. - sky->omega);
X	/*
X	 * Map from [-maxval,maxval] to [0,1]
X	 */
X	It = (maxval +  It) * 0.5/maxval;
X
X	It = (It - sky->lthresh) / (sky->cthresh - sky->lthresh);
X	if (It < 0.)
X		It = 0;
X	else if (It > 1.)
X		It = 1;
X
X	if (sky->scale != 0.)
X		It = pow(It, sky->scale);
X
X	surf->transp = 1. - It;
X
X	ColorScale(It, surf->diff, &surf->diff);
X	ColorScale(It, surf->amb, &surf->amb);
X}
END_OF_FILE
if test 1656 -ne `wc -c <'libray/libtext/sky.c'`; then
    echo shar: \"'libray/libtext/sky.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/sky.c'
fi
if test -f 'libray/libtext/windy.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/windy.c'\"
else
echo shar: Extracting \"'libray/libtext/windy.c'\" \(1688 characters\)
sed "s/^X//" >'libray/libtext/windy.c' <<'END_OF_FILE'
X/*
X * windy.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: windy.c,v 4.0 91/07/17 14:44:25 kolb Exp Locker: kolb $
X *
X * $Log:	windy.c,v $
X * Revision 4.0  91/07/17  14:44:25  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "windy.h"
X
X/*
X * Create and return a reference to a "windy" texture.
X */
XWindyText *
XWindyCreate(scale, wscale, cscale, bscale, octaves, tscale, hscale, offset)
XFloat scale, wscale, cscale, bscale, tscale, hscale, offset;
Xint octaves;
X{
X	WindyText *windy;
X
X	windy = (WindyText *)Malloc(sizeof(WindyText));
X	windy->scale = scale;
X	windy->windscale = wscale;
X	windy->chaoscale = cscale;
X	windy->bumpscale = bscale;
X	windy->tscale = tscale;
X	windy->hscale = hscale;
X	windy->offset = offset;
X	windy->octaves = octaves;
X	return windy;
X}
X
X/*
X * Apply a "windy" texture.
X */
Xvoid
XWindyApply(windy, prim, ray, pos, norm, gnorm, surf)
XWindyText *windy;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Vector bump;
X
X	Windy(pos, windy->windscale, windy->chaoscale, windy->bumpscale,
X	      windy->octaves, windy->tscale, windy->hscale, windy->offset,
X	      &bump);
X
X	norm->x += windy->scale * bump.x;
X	norm->y += windy->scale * bump.y;
X	norm->z += windy->scale * bump.z;
X	VecNormalize(norm);
X}
END_OF_FILE
if test 1688 -ne `wc -c <'libray/libtext/windy.c'`; then
    echo shar: \"'libray/libtext/windy.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/windy.c'
fi
if test -f 'libshade/defaults.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libshade/defaults.h'\"
else
echo shar: Extracting \"'libshade/defaults.h'\" \(1637 characters\)
sed "s/^X//" >'libshade/defaults.h' <<'END_OF_FILE'
X/*
X * defaults.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: defaults.h,v 4.0 91/07/17 14:45:18 kolb Exp Locker: kolb $
X *
X * $Log:	defaults.h,v $
X * Revision 4.0  91/07/17  14:45:18  kolb
X * Initial version.
X * 
X */
X#ifndef DEFAULTS_H
X#define DEFAULTS_H
X
X#define DEFSAMPLES	3	/* sqrt of number of samples */
X
X#define XRESOLUTION	512		/* Default screen size (pixels) */
X#define YRESOLUTION	512
X#define DEFCUTOFF	0.002		/* Default tree cutoff value */
X#define MAXDEPTH	5		/* Maximum ray tree depth. */
X#define HFOV		45		/* Field-of-view */
X#define EYEX		0		/* Eye position */
X#define EYEY		-10
X#define EYEZ		0
X#define LOOKX		0		/* Look point */
X#define LOOKY		0
X#define LOOKZ		0
X#define UPX		0		/* Up vector */
X#define UPY		0
X#define UPZ		1
X#define GAMMA		1.		/* Default gamma */
X#define GAUSSIAN	FALSE		/* Use gaussian pixel filter? */
X#define FILTERWIDTH	1.8		/* Default gaussian filter width */
X
X#if defined(LINDA) && !defined(WORKERS)
X#define WORKERS		4		/* Default # of workers. */
X#endif
X
X#define REPORTFREQ	10		/* Frequency of status report */
X
X#define DEFREDCONT	0.2		/* Default contrast threshold values. */
X#define DEFGREENCONT	0.15
X#define DEFBLUECONT	0.3
X
X#endif /* DEFAULTS_H */
END_OF_FILE
if test 1637 -ne `wc -c <'libshade/defaults.h'`; then
    echo shar: \"'libshade/defaults.h'\" unpacked with wrong size!
fi
# end of 'libshade/defaults.h'
fi
if test -f 'rayview/main.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'rayview/main.c'\"
else
echo shar: Extracting \"'rayview/main.c'\" \(1592 characters\)
sed "s/^X//" >'rayview/main.c' <<'END_OF_FILE'
X/*
X * main.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $
X *
X * $Log:	main.c,v $
X * Revision 4.0  91/07/17  14:55:35  kolb
X * Initial version.
X * 
X */
X
Xchar rcsid[] = "$Id: main.c,v 4.0 91/07/17 14:55:35 kolb Exp Locker: kolb $";
X
X#include "rayshade.h"
X#include "options.h"
X#include "stats.h"
X#include "viewing.h"
X#include "picture.h"
X
X
Xint
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X	Float utime, stime;
X
X	/*
X 	 * Initialize variables, etc.
X	 */
X	RSInitialize(argc, argv);
X	MethodsRegister();
X
X	RSStartFrame(0);
X	/*
X 	 * Print more information than we'll ever need to know...
X	 */
X	if (Options.verbose) {
X		extern Geom *World;
X		/* World object info. */
X		AggregatePrintInfo(World, Stats.fstats);
X		/* Print info about rendering options and the like. */
X		RSOptionsList();
X	}
X	/*
X	 * Print preprocessing time.
X	 */
X	RSGetCpuTime(&utime, &stime);
X	fprintf(Stats.fstats,"Preprocessing time:\t");
X	fprintf(Stats.fstats,"%2.2fu  %2.2fs\n", utime, stime);
X	fprintf(Stats.fstats,"Starting trace.\n");
X	(void)fflush(Stats.fstats);
X	/*
X	 * Draw the image.
X	 */
X	Render();
X	StatsPrint();
X	return 0;
X}
END_OF_FILE
if test 1592 -ne `wc -c <'rayview/main.c'`; then
    echo shar: \"'rayview/main.c'\" unpacked with wrong size!
fi
# end of 'rayview/main.c'
fi
echo shar: End of archive 4 \(of 19\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 19 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
Modified: Wed Dec 11 17:00:00 1996 GMT
Page accessed 1182 times since Sat Apr 17 21:59:30 1999 GMT