Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ames!vsi1!wyse!mips!koblas
From: koblas@mips.COM (David Koblas)
Newsgroups: comp.graphics
Subject: Raytrace to Impress/Postscript converter
Message-ID: <3367@giant.mips.COM>
Date: 18 Sep 88 22:27:11 GMT
Reply-To: koblas@mips.COM (David Koblas)
Organization: MIPS Computer Systems, Sunnyvale, CA
Lines: 361

Contained is a shar for converting MRGB pictures to either
impress or postscript depending on your needs (black and white).

[I'm looking for versatec plotter routines, if you have some I'd be interested]

#! /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 'Makefile' <<'END_OF_FILE'
X
all: prpress prpost
X
prpress: toprinter.c
X	$(CC) $(CFLAGS) -DIMPRESS -o $@ $?
X
prpost:  toprinter.c
X	$(CC) $(CFLAGS) -DPOSTSCRIPT -o $@ $?
X
clean:
X	rm -f prpress prpost
END_OF_FILE
if test 170 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(935 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X	This shar contained programs to print MRGB imageformats,
onto either impress or postscript.  Man page is not included,
command line options are:
X
X	-x arg	(postscript only) set x printed size to arg inches.
X	-y arg	(postscript only) set y printed size to arg inches.
X	-S arg	(postscript only) set x and y printed size to arg inches.
X
X	-p arg	(impress only) set magnifcation factor (pixel size) to arg.
X
X	-i arg	input from file 'arg' otherwise stdin is used.
X	-r	disply only red component.
X	-g	disply only green component.
X	-b	disply only blue component.
X	-c	display a "rgb" picture (default).
X
The one item that I'm looking for is printing routines for a versatec plotter,
if you have some or know where I might be able to find some I'd be greatly
interested.
X
XFeedback is welcome - send bug reports, enhancements, to the address below:
X
X	David Koblas
X	koblas@mips.com		 koblas@uoregon.edu
X	{ ames, decwrl, pyramid, wyse }!mips!koblas
END_OF_FILE
if test 935 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'toprinter.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'toprinter.c'\"
else
echo shar: Extracting \"'toprinter.c'\" \(7319 characters\)
sed "s/^X//" >'toprinter.c' <<'END_OF_FILE'
X/* +------------------------------------------------------------------+ */
X/* | Copyright 1988, David Koblas.                                    | */
X/* |   You may copy this file in whole or in part as long as you      | */
X/* |   don't try to make money off it, or pretend that you wrote it.  | */
X/* +------------------------------------------------------------------+ */
X
X#include	
X
X#define	R	0x01
X#define	G	0x02
X#define	B	0x04
X#define ALL	0x08
X
X#ifdef IMPRESS
X#define GREYMAX	(4)
X#define BITBLK	(32)	/* defined by impress (32 x 32 bits) */
X#define RPIXMAX	(2*456)	/* (RPIXMAX*GREYMAX)/BITBLK must be integrel */
X#define BLKMAX	((RPIXMAX * GREYMAX)/BITBLK)
X
unsigned char scanline[RPIXMAX][RPIXMAX];  /* buffer for linework */
unsigned char bitmap[BLKMAX][BLKMAX][BITBLK][GREYMAX];
X#endif
X
X#define RGB_TO_VAL(r,g,b)	((int)(((double)(r)*0.4)+ \
X				       ((double)(g)*0.4)+ \
X				       ((double)(b)*0.2)))
X#define VAL(x,y,i)		((i<3) ? data[(x+(xsize*y))*3+i] :\
X					 RGB_TO_VAL(data[(x+(xsize*y))*3+0],\
X					 	    data[(x+(xsize*y))*3+1],\
X					 	    data[(x+(xsize*y))*3+2]))
X
X#if !defined(POSTSCRIPT) && !defined(IMPRESS)
XEither POSTSCRIPT or IMPRESS needs to be defined!
X#endif
X
X#ifdef POSTSCRIPT
X#define OPTSTR "x:y:i:S:rgbc"
X#endif
X#ifdef IMPRESS
X#define OPTSTR "p:i:rgbc"
X#endif
X
char	*Progname;
X
usage()
X{
X	int	i;
X
X	fprintf(stderr,"usage: %s \n",Progname);
X	for (i=0;i>8)&0x7f); 
X		putchar( ((int)(xpos))    &0xff); 
X		putchar(137);	/* SET-ABS-V     */
X		putchar((((int)(ypos))>>8)&0x7f); 
X		putchar( ((int)(ypos))    &0xff); 
X		putchar(236);   /* MAGNIFICATION */
X		putchar((pixel-1)&0xff);
X
X		putchar(235); /* BITMAP          */
X		putchar(15);  /* OPERATION (OR)  */
X		putchar(1+(int)((xsize*(GREYMAX))/BITBLK));	/* width   */
X		putchar(1+(int)((ysize*(GREYMAX))/BITBLK));	/* heighth */
X
X		for (x=0;x255) v=255;
X				scanline[y][x] = v;
X			}
X		}
X
X		dobits(xsize,ysize);
X		putchar(219); /* SHOWPAGE */
X#endif
X	} while (i++<4);
X}
X
X#ifdef IMPRESS
X/*
X** Thanks to Jeff Eaton for these routies.
X*/
unsigned char greys[17][GREYMAX] = {
X    { 0xf, 0xf, 0xf, 0xf },       /* 1111 1111 1111 1111 */
X    { 0xf, 0xf, 0xf, 0x7 },       /* 1111 1111 1111 0111 */
X    { 0xf, 0xd, 0xf, 0x7 },       /* 1111 1101 1111 0111 */
X    { 0xf, 0xd, 0xf, 0x5 },       /* 1111 1101 1111 0101 */
X    { 0xf, 0x5, 0xf, 0x5 },       /* 1111 0101 1111 0101 */
X    { 0xf, 0x5, 0xb, 0x5 },       /* 1111 0101 1011 0101 */
X    { 0xe, 0x5, 0xb, 0x5 },       /* 1110 0101 1011 0101 */
X    { 0xe, 0x5, 0xa, 0x5 },       /* 1110 0101 1010 0101 */
X    { 0xa, 0x5, 0xa, 0x5 },       /* 1010 0101 1010 0101 */
X    { 0xa, 0x5, 0xa, 0x1 },       /* 1010 0101 1010 0001 */
X    { 0xa, 0x4, 0xa, 0x1 },       /* 1010 0100 1010 0001 */
X    { 0xa, 0x4, 0xa, 0x0 },       /* 1010 0100 1010 0000 */
X    { 0xa, 0x0, 0xa, 0x0 },       /* 1010 0000 1010 0000 */
X    { 0xa, 0x0, 0x2, 0x0 },       /* 1010 0000 0010 0000 */
X    { 0x8, 0x0, 0x2, 0x0 },       /* 1000 0000 0010 0000 */
X    { 0x8, 0x0, 0x0, 0x0 },       /* 1000 0000 0000 0000 */
X    { 0x0, 0x0, 0x0, 0x0 },       /* 0000 0000 0000 0000 */
X};
X
int dither[4][4] = {
X	{ 00,  8, 02, 10 },
X	{ 12, 04, 14, 06 },
X	{ 03, 11, 01,  9 },
X	{ 15, 07, 13, 05 },
X};
X
dobits(width,height)
int	width,height;
X{
X	register int row, col, lev, val1, val2, val;
X
X	for (row = 0; row < height; row++) {
X		for (col = 0; col < width; col += 2) {
X			val1 = scanline[row][col];
X			if (val1%16 > dither[row%4][col%4])
X				val1 = val1/16 + 1;
X			else
X				val1 = val1/16;
X			val2 = scanline[row][col+1];
X			if (val2%16 > dither[row%4][(col+1)%4])
X				val2 = val2/16 + 1;
X			else
X				val2 = val2/16;
X			for (lev = 0; lev < 4; lev++) {
X				val = greys[val2][lev]|(greys[val1][lev] << 4);
X				bitmap[row/8][col/8][(row%8)*4+lev][(col%8)/2] = val;
X			}
X		}
X	}
X	for (; row < RPIXMAX; row++) {
X		for (; col < RPIXMAX; col++) {
X			for (lev = 0; lev < 4; lev++) {
X				bitmap[row/8][col/8][(row%8)*4+lev][(col%8)/2] = 0;
X			}
X		}
X	}
X	for (val1 = 0; val1 <= (int)((height*GREYMAX)/BITBLK); val1++) {
X		for (lev = 0; lev <= (int)((width*GREYMAX)/BITBLK); lev++) {
X			for (row = 0; row < BITBLK; row++) {
X				for (col = 0; col < GREYMAX; col++) {
X					putchar(bitmap[val1][lev][row][col]);
X				}
X			}
X		}
X	}
X}
X#endif /* IMPRESS */
END_OF_FILE
if test 7319 -ne `wc -c <'toprinter.c'`; then
    echo shar: \"'toprinter.c'\" unpacked with wrong size!
fi
# end of 'toprinter.c'
fi
echo shar: End of shell archive.
exit 0
-- 
name : David Koblas         place: MIPS Computers Systems                
phone: 408-991-0287         uucp : {ames,decwrl,pyramid,wyse}!mips!koblas 
quote:  I've began to wonder if X11 is really a competition to see who can
        create the largest copyright that says, "It's free."