V10/cmd/bcp/rastlib.c

Compare this file to the similar file:
Show the results in this format:

/* Copyright (c) 1989, 1990 AT&T --- All Rights Reserved.              */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T.                */
/* The copyright notice does not imply actual or intended publication. */
/* AUTHORS:                                            */
/*     T. Thompson - ATT-BL HO - first version         */
/* Routines for generating PostScript from RLE. */
/* The routines at the bottom of this file, which */
/* do the actual conversion to postscript, were */
/* take from 'sun2ps'.  The original header */
/* giving credit to its authors is there. */

/* The 'binary' version of the output is collected in a */
/* temporary file, which is then fed back to the routines */
/* that generate postscript in a run-length-encoded form. */
/* Ideally it should just convert the original run-length */
/* encoding directly, but this is just a hack.  The REAL */
/* bottleneck is the PostScript printer, of course.  */
/* Printing an 800 by 800 pixel image takes 5 minutes. */

#include <stdio.h>
#include <math.h>
#include <string.h>
#include "CPU.h"
#include "boole.h"
#include "limits.h"     /* numeric extreme values */
#include "Units.h"
#include "Coord.h"
#include "pic.h"
#include <sys/types.h>
#include <suntool/sunview.h>
#include <pixrect/pixrect.h>
#include <pixrect/pr_io.h>

int Raswidth;
int Raslength;
extern char Revbyte[256];
extern char Revnib[16];

static FILE *fout;
 
void
RAST_start(h)
PIC_hdr *h;
{
	int n, v;
	struct rasterfile rh;

	/* build a table of reversed bytes */
	for ( n=0; n<256; n++ )
		Revbyte[n] = Revnib[(n>>4)&0xf] | Revnib[n&0xf]<<4;

	fout = h->fp;
	h->bpl = (h->bpl+7)/8;
	Raslength = h->bpl * h->bx.b.y;
	Raswidth = h->bx.b.x;

	rh.ras_magic = RAS_MAGIC;
	rh.ras_width = h->bx.b.x;
	rh.ras_height = h->bx.b.y;
	rh.ras_depth = 1;
	rh.ras_length = Raslength;
	rh.ras_type = RT_STANDARD;
	rh.ras_maptype = RMT_NONE;
	rh.ras_maplength = 0;
	pr_dump_header(fout,&rh,(colormap_t*)0);
}

void
RAST_end()
{
}

/* write a full line of picture data, returning status:  1 OK, 0 EOF,
-1 ERR */
int RAST_wline(h,line)
    PIC_hdr *h;
    unsigned char *line;
{   int stat;
	int n;

	for ( n=h->bpl; n>0; n-- ) {
		if ( putc(Revbyte[*line++],fout) == EOF )
			break;
	}
	if ( n == 0 ) {
                h->seek += h->bpl;
                h->cy++;
                return(1);
                }
        else { /* ERR */
                err("write to fd%d stat%d",fileno(h->fp),stat);
                if((stat>=0)&&(stat<h->bpl)) return(0 /*EOF*/);
                else return(-1);
                };
        }