Blame term/epson.trm

Packit 0986c0
/* Hello, Emacs, this is -*-C-*-
Packit 0986c0
 * $Id: epson.trm,v 1.27 2015/03/24 18:49:11 sfeam Exp $
Packit 0986c0
 *
Packit 0986c0
 */
Packit 0986c0
Packit 0986c0
/* GNUPLOT - epson.trm */
Packit 0986c0
Packit 0986c0
/*[
Packit 0986c0
 * Copyright 1990 - 1993, 1998, 2004
Packit 0986c0
 *
Packit 0986c0
 * Permission to use, copy, and distribute this software and its
Packit 0986c0
 * documentation for any purpose with or without fee is hereby granted,
Packit 0986c0
 * provided that the above copyright notice appear in all copies and
Packit 0986c0
 * that both that copyright notice and this permission notice appear
Packit 0986c0
 * in supporting documentation.
Packit 0986c0
 *
Packit 0986c0
 * Permission to modify the software is granted, but not the right to
Packit 0986c0
 * distribute the complete modified source code.  Modifications are to
Packit 0986c0
 * be distributed as patches to the released version.  Permission to
Packit 0986c0
 * distribute binaries produced by compiling modified sources is granted,
Packit 0986c0
 * provided you
Packit 0986c0
 *   1. distribute the corresponding source modifications from the
Packit 0986c0
 *    released version in the form of a patch file along with the binaries,
Packit 0986c0
 *   2. add special version identification to distinguish your version
Packit 0986c0
 *    in addition to the base release version number,
Packit 0986c0
 *   3. provide your name and address as the primary contact for the
Packit 0986c0
 *    support of your modified version, and
Packit 0986c0
 *   4. retain our contact information in regard to use of the base
Packit 0986c0
 *    software.
Packit 0986c0
 * Permission to distribute the released version of the source code along
Packit 0986c0
 * with corresponding source modifications in the form of a patch file is
Packit 0986c0
 * granted with same provisions 2 through 4 for binary distributions.
Packit 0986c0
 *
Packit 0986c0
 * This software is provided "as is" without express or implied warranty
Packit 0986c0
 * to the extent permitted by applicable law.
Packit 0986c0
]*/
Packit 0986c0
Packit 0986c0
/*
Packit 0986c0
 * This file is included by ../term.c.
Packit 0986c0
 *
Packit 0986c0
 * This terminal driver supports:
Packit 0986c0
 *  epson_lx800, nec_cp6, starc,
Packit 0986c0
 *  epson_60dpi, tandy_60dpi
Packit 0986c0
 *  epson_180dpi
Packit 0986c0
 *  dpu414
Packit 0986c0
 *
Packit 0986c0
 * AUTHORS
Packit 0986c0
 *  Russell Lang
Packit 0986c0
 *  William Wilson
Packit 0986c0
 *
Packit 0986c0
 * send your comments or suggestions to (gnuplot-info@lists.sourceforge.net).
Packit 0986c0
 *
Packit 0986c0
 */
Packit 0986c0
Packit 0986c0
/*
Packit 0986c0
 * adapted to the new terminal layout by Stefan Bodewig (1995)
Packit 0986c0
 */
Packit 0986c0
Packit 0986c0
#include "driver.h"
Packit 0986c0
Packit 0986c0
#ifdef TERM_REGISTER
Packit 0986c0
#ifdef EPS180
Packit 0986c0
register_term(epson_180dpi)
Packit 0986c0
#endif /* EPS180 */
Packit 0986c0
#ifdef EPS60
Packit 0986c0
register_term(epson_60dpi)
Packit 0986c0
#endif /* EPS60 */
Packit 0986c0
#ifdef EPSONP
Packit 0986c0
register_term(epson_lx800)
Packit 0986c0
#endif /* EPSONP */
Packit 0986c0
#ifdef NEC
Packit 0986c0
register_term(nec_cp6)
Packit 0986c0
#endif /* NEC */
Packit 0986c0
#ifdef OKIDATA
Packit 0986c0
register_term(okidata)
Packit 0986c0
#endif /* OKIDATA */
Packit 0986c0
#ifdef STARC
Packit 0986c0
register_term(starc)
Packit 0986c0
#endif /* STARC */
Packit 0986c0
#ifdef TANDY60
Packit 0986c0
register_term(tandy_60dpi)
Packit 0986c0
#endif /* TANDY60 */
Packit 0986c0
#ifdef DPU414
Packit 0986c0
register_term(dpu414)
Packit 0986c0
#endif /* DPU414 */
Packit 0986c0
#endif /* TERM_REGISTER */
Packit 0986c0
Packit 0986c0
#ifdef TERM_PROTO
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void EPSON_reset __PROTO((void));
Packit 0986c0
Packit 0986c0
#if defined(EPS180) || defined(EPS60) || defined(EPSONP) || defined(TANDY60) || defined(OKIDATA)
Packit 0986c0
TERM_PUBLIC void EPSON_init __PROTO((void));
Packit 0986c0
Packit 0986c0
#if defined(EPS60) || defined(EPSONP) || defined(TANDY60) || defined(OKIDATA)
Packit 0986c0
#define EPSONVCHAR		FNT5X9_VCHAR
Packit 0986c0
#define EPSONHCHAR		FNT5X9_HCHAR
Packit 0986c0
#define EPSONVTIC		6
Packit 0986c0
#define EPSONHTIC		6
Packit 0986c0
Packit 0986c0
#ifdef EPSONP
Packit 0986c0
#define EPSONXMAX	512
Packit 0986c0
#define EPSONYMAX	384
Packit 0986c0
TERM_PUBLIC void EPSON_graphics __PROTO((void));
Packit 0986c0
TERM_PUBLIC void EPSON_text __PROTO((void));
Packit 0986c0
#endif /* EPSONP */
Packit 0986c0
#endif /* four drivers */
Packit 0986c0
#endif /* all five */
Packit 0986c0
Packit 0986c0
#ifdef EPS180
Packit 0986c0
TERM_PUBLIC void EPS180_graphics __PROTO((void));
Packit 0986c0
TERM_PUBLIC void EPS180_text __PROTO((void));
Packit 0986c0
#define EPSON180VCHAR		FNT13X25_VCHAR
Packit 0986c0
#define EPSON180HCHAR		FNT13X25_HCHAR
Packit 0986c0
#define EPSON180VTIC		18
Packit 0986c0
#define EPSON180HTIC		18
Packit 0986c0
/* make the total dimensions 8 inches by 6 inches */
Packit 0986c0
#define EPS180XMAX	1260
Packit 0986c0
#define EPS180YMAX	1080
Packit 0986c0
#endif /* EPS180 */
Packit 0986c0
Packit 0986c0
#if defined(EPS60) || defined(TANDY60) || defined(OKIDATA)
Packit 0986c0
/* make the total dimensions 8 inches by 5 inches */
Packit 0986c0
#define EPS60XMAX	480
Packit 0986c0
#define EPS60YMAX	360
Packit 0986c0
TERM_PUBLIC void EPS60_graphics __PROTO((void));
Packit 0986c0
#ifdef TANDY60
Packit 0986c0
TERM_PUBLIC void TANDY60_text __PROTO((void));
Packit 0986c0
#endif /* TANDY60 */
Packit 0986c0
#ifdef OKIDATA
Packit 0986c0
TERM_PUBLIC void OKIDATA_text __PROTO((void));
Packit 0986c0
#endif /* OKIDATA */
Packit 0986c0
#ifdef EPS60
Packit 0986c0
TERM_PUBLIC void EPS60_text __PROTO((void));
Packit 0986c0
#endif /* EPS60 */
Packit 0986c0
#endif /* all three */
Packit 0986c0
Packit 0986c0
#ifdef NEC
Packit 0986c0
TERM_PUBLIC void NEC_options __PROTO((void));
Packit 0986c0
TERM_PUBLIC void NEC_init __PROTO((void));
Packit 0986c0
TERM_PUBLIC void NEC_graphics __PROTO((void));
Packit 0986c0
TERM_PUBLIC void NEC_text __PROTO((void));
Packit 0986c0
TERM_PUBLIC void NEC_linetype __PROTO((int linetype));
Packit 0986c0
#define NECXMAX	400
Packit 0986c0
#define NECYMAX	320
Packit 0986c0
#define NECVCHAR		FNT5X9_VCHAR
Packit 0986c0
#define NECHCHAR		FNT5X9_HCHAR
Packit 0986c0
#define NECVTIC		6
Packit 0986c0
#define NECHTIC		6
Packit 0986c0
#endif /* NEC */
Packit 0986c0
Packit 0986c0
#ifdef STARC
Packit 0986c0
TERM_PUBLIC void STARC_init __PROTO((void));
Packit 0986c0
TERM_PUBLIC void STARC_graphics __PROTO((void));
Packit 0986c0
TERM_PUBLIC void STARC_text __PROTO((void));
Packit 0986c0
TERM_PUBLIC void STARC_linetype __PROTO((int linetype));
Packit 0986c0
#define STARCXMAX	512
Packit 0986c0
#define STARCYMAX	384
Packit 0986c0
#define STARCVCHAR		FNT5X9_VCHAR
Packit 0986c0
#define STARCHCHAR		FNT5X9_HCHAR
Packit 0986c0
#define STARCVTIC		6
Packit 0986c0
#define STARCHTIC		6
Packit 0986c0
#endif /* STARC */
Packit 0986c0
Packit 0986c0
#ifdef DPU414
Packit 0986c0
TERM_PUBLIC void DPU414_options __PROTO((void));
Packit 0986c0
TERM_PUBLIC void DPU414_init __PROTO((void));
Packit 0986c0
TERM_PUBLIC void DPU414_graphics __PROTO((void));
Packit 0986c0
TERM_PUBLIC void DPU414_text __PROTO((void));
Packit 0986c0
TERM_PUBLIC void DPU414_setfont __PROTO((void));
Packit 0986c0
#define DPU414XMAX	(640)
Packit 0986c0
#define DPU414YMAX	(480)
Packit 0986c0
#define DPU414VCHAR	FNT5X9_VCHAR
Packit 0986c0
#define DPU414HCHAR	FNT5X9_HCHAR
Packit 0986c0
#define DPU414VTIC	FNT5X9_HBITS
Packit 0986c0
#define DPU414HTIC	FNT5X9_HBITS
Packit 0986c0
#endif /* DPU414 */
Packit 0986c0
Packit 0986c0
#endif /* TERM_PROTO */
Packit 0986c0
Packit 0986c0
#ifndef TERM_PROTO_ONLY
Packit 0986c0
#ifdef TERM_BODY
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPSON_reset()
Packit 0986c0
{
Packit 0986c0
#ifdef VMS
Packit 0986c0
    fflush_binary();
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
#ifdef EPSONP
Packit 0986c0
Packit 0986c0
/* The following epson lx800 driver uses generic bit mapped graphics
Packit 0986c0
   routines to build up a bit map in memory. */
Packit 0986c0
/* by Russell Lang, rjl@monu1.cc.monash.edu.au */
Packit 0986c0
/* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */
Packit 0986c0
/* EPSON_init changes gpoutfile to binary mode on PC's */
Packit 0986c0
Packit 0986c0
static void epson_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
#define EPSONXLAST (EPSONXMAX - 1)
Packit 0986c0
#define EPSONYLAST (EPSONYMAX - 1)
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPSON_init()
Packit 0986c0
{
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPSON_graphics()
Packit 0986c0
{
Packit 0986c0
    b_charsize(FNT5X9);
Packit 0986c0
    b_makebitmap((unsigned int) (EPSONXMAX * xsize),
Packit 0986c0
		 (unsigned int) (EPSONYMAX * ysize), 1);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPSON_text()
Packit 0986c0
{
Packit 0986c0
    epson_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for epson_dump */
Packit 0986c0
static void
Packit 0986c0
epson_dump()
Packit 0986c0
{
Packit 0986c0
    register unsigned int x;
Packit 0986c0
    int j;
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	/* select plotter graphics mode (square pixels) */
Packit 0986c0
	fputs("\033J\030", gpoutfile);	/* line feed 8/72" = 8 dots */
Packit 0986c0
	fputs("\r\033*\005", gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
	for (x = 0; x < b_xsize; x++) {
Packit 0986c0
	    (void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* EPSONP */
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* The following NEC CP6 Pinwriter driver uses generic bit mapped graphics
Packit 0986c0
   routines to build up a bit map in memory. */
Packit 0986c0
/* by Russell Lang, rjl@monu1.cc.monash.edu.au */
Packit 0986c0
/* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */
Packit 0986c0
/* NEC_init changes gpoutfile to binary mode for PC's */
Packit 0986c0
Packit 0986c0
/* Add a Monochrome NEC printer (for faster speed and line types) jdc */
Packit 0986c0
Packit 0986c0
#ifdef NEC
Packit 0986c0
Packit 0986c0
static void nec_dump __PROTO((void));
Packit 0986c0
static void nec_draft_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
#define NECXLAST (NECXMAX - 1)
Packit 0986c0
#define NECYLAST (NECYMAX - 1)
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* plane 0=black, 1=cyan(blue), 2=magenta(red), 3=yellow */
Packit 0986c0
static unsigned int neccolor[] = { 1, 8, 4, 2, 10, 12, 6, 14 };
Packit 0986c0
static unsigned int necpcolor[] = { 0, 2, 1, 4 };
Packit 0986c0
Packit 0986c0
static int NECmode;
Packit 0986c0
Packit 0986c0
enum NEC_id { NEC_MONOCHROME, NEC_COLOR, NEC_DRAFT, NEC_OTHER };
Packit 0986c0
Packit 0986c0
static struct gen_table NEC_opts[] =
Packit 0986c0
{
Packit 0986c0
    { "m$onochrome", NEC_MONOCHROME },
Packit 0986c0
    { "c$olor", NEC_COLOR },
Packit 0986c0
    { "c$olour", NEC_COLOR },
Packit 0986c0
    { "d$raft", NEC_DRAFT },
Packit 0986c0
    { NULL, NEC_OTHER }
Packit 0986c0
};
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
NEC_options()
Packit 0986c0
{
Packit 0986c0
    /* default */
Packit 0986c0
    if (END_OF_COMMAND) {
Packit 0986c0
	strcpy(term_options, "monochrome");
Packit 0986c0
	NECmode = 'm';
Packit 0986c0
    }
Packit 0986c0
Packit 0986c0
    while (!END_OF_COMMAND) {
Packit 0986c0
	switch(lookup_table(&NEC_opts[0],c_token)) {
Packit 0986c0
	case NEC_MONOCHROME:
Packit 0986c0
	    c_token++;
Packit 0986c0
	    strcpy(term_options, "monochrome");
Packit 0986c0
	    NECmode = 'm';
Packit 0986c0
	    break;
Packit 0986c0
	case NEC_COLOR:
Packit 0986c0
	    c_token++;
Packit 0986c0
	    strcpy(term_options, "color");
Packit 0986c0
	    NECmode = 'c';
Packit 0986c0
 	    break;
Packit 0986c0
	case NEC_DRAFT:
Packit 0986c0
	    c_token++;
Packit 0986c0
	    strcpy(term_options, "draft");
Packit 0986c0
	    NECmode = 'd';
Packit 0986c0
	    break;
Packit 0986c0
	case NEC_OTHER:
Packit 0986c0
	default:
Packit 0986c0
	    /* FIXME - not the most sensible thing to do */
Packit 0986c0
	    /* error, but since the terminal is already set, default to mono */
Packit 0986c0
	    strcpy(term_options, "monochrome");
Packit 0986c0
	    NECmode = 'm';
Packit 0986c0
	    int_error(c_token, "modes: color, monochrome, draft");
Packit 0986c0
	    break;
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
NEC_init()
Packit 0986c0
{
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
NEC_graphics()
Packit 0986c0
{
Packit 0986c0
    b_charsize(FNT5X9);
Packit 0986c0
    b_makebitmap((unsigned int) (NECXMAX * xsize),
Packit 0986c0
		 (unsigned int) (NECYMAX * ysize), (NECmode == 'c' ? 4 : 1));
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
NEC_text()
Packit 0986c0
{
Packit 0986c0
    if (NECmode == 'd') {
Packit 0986c0
	nec_draft_dump();
Packit 0986c0
    } else {
Packit 0986c0
	nec_dump();
Packit 0986c0
    }
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
NEC_linetype(int linetype)
Packit 0986c0
{
Packit 0986c0
    if (NECmode == 'c') {
Packit 0986c0
	if (linetype >= 6)
Packit 0986c0
	    linetype %= 6;
Packit 0986c0
	b_setvalue(neccolor[linetype + 2]);
Packit 0986c0
    } else {
Packit 0986c0
	b_setlinetype(linetype);
Packit 0986c0
    }
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for nec_dump */
Packit 0986c0
static void
Packit 0986c0
nec_dump()
Packit 0986c0
{
Packit 0986c0
    unsigned int x;
Packit 0986c0
    unsigned int plane, offset;
Packit 0986c0
    int j;
Packit 0986c0
    unsigned int column8;
Packit 0986c0
    unsigned long column24;
Packit 0986c0
    char column3, column2, column1;
Packit 0986c0
    fputs("\033P\033l\005", gpoutfile);	/* 10cpi, left margin 5 char */
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	fputs("\033J\030", gpoutfile);	/* 24/180" line feed */
Packit 0986c0
	for (plane = 0; plane < b_planes; plane++) {
Packit 0986c0
	    offset = plane * b_psize;
Packit 0986c0
	    if (b_planes > 1) {
Packit 0986c0
		/* select colour for plane */
Packit 0986c0
		fputs("\033r", gpoutfile);
Packit 0986c0
		(void) fputc((char) necpcolor[plane], gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	    /* select plotter graphics mode (square pixels) */
Packit 0986c0
	    fputs("\r\033*\047", gpoutfile);
Packit 0986c0
	    (void) fputc((char) ((b_xsize * 3) % 256), gpoutfile);
Packit 0986c0
	    (void) fputc((char) ((b_xsize * 3) / 256), gpoutfile);
Packit 0986c0
	    for (x = 0; x < b_xsize; x++) {
Packit 0986c0
		column8 = (unsigned int) (*((*b_p)[j + offset] + x));
Packit 0986c0
		column24 = 0;
Packit 0986c0
		if (column8 & 0x01)
Packit 0986c0
		    column24 |= (long) 0x000007;
Packit 0986c0
		if (column8 & 0x02)
Packit 0986c0
		    column24 |= (long) 0x000038;
Packit 0986c0
		if (column8 & 0x04)
Packit 0986c0
		    column24 |= (long) 0x0001c0;
Packit 0986c0
		if (column8 & 0x08)
Packit 0986c0
		    column24 |= (long) 0x000e00;
Packit 0986c0
		if (column8 & 0x10)
Packit 0986c0
		    column24 |= (long) 0x007000;
Packit 0986c0
		if (column8 & 0x20)
Packit 0986c0
		    column24 |= (long) 0x038000;
Packit 0986c0
		if (column8 & 0x40)
Packit 0986c0
		    column24 |= (long) 0x1c0000;
Packit 0986c0
		if (column8 & 0x80)
Packit 0986c0
		    column24 |= (long) 0xe00000;
Packit 0986c0
		column1 = (char) (column24 & (long) 0xff);
Packit 0986c0
		column2 = (char) ((column24 >> 8) & (long) 0xff);
Packit 0986c0
		column3 = (char) ((column24 >> 16) & (long) 0xff);
Packit 0986c0
		(void) fputc(column3, gpoutfile);
Packit 0986c0
		(void) fputc(column2, gpoutfile);
Packit 0986c0
		(void) fputc(column1, gpoutfile);
Packit 0986c0
		(void) fputc(column3, gpoutfile);
Packit 0986c0
		(void) fputc(column2, gpoutfile);
Packit 0986c0
		(void) fputc(column1, gpoutfile);
Packit 0986c0
		(void) fputc(column3, gpoutfile);
Packit 0986c0
		(void) fputc(column2, gpoutfile);
Packit 0986c0
		(void) fputc(column1, gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
    fputs("\r\033l", gpoutfile);
Packit 0986c0
    (void) fputc('\0', gpoutfile);	/* set left margin to 0 */
Packit 0986c0
    if (b_planes > 1) {
Packit 0986c0
	fprintf(gpoutfile, "\033r");
Packit 0986c0
	(void) fputc('\0', gpoutfile);	/* set color to black */
Packit 0986c0
    }
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
#ifdef VMS
Packit 0986c0
    fflush_binary();
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for nec_dump */
Packit 0986c0
static void
Packit 0986c0
nec_draft_dump()
Packit 0986c0
{
Packit 0986c0
    unsigned int x;
Packit 0986c0
    unsigned int plane, offset;
Packit 0986c0
    int j;
Packit 0986c0
    fputs("\033P\033l\005\r", gpoutfile);	/* 10cpi, left margin 5 char */
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	fputs("\033J\030", gpoutfile);	/* 24/180" line feed */
Packit 0986c0
	for (plane = 0; plane < b_planes; plane++) {
Packit 0986c0
	    offset = plane * b_psize;
Packit 0986c0
	    if (b_planes > 1) {
Packit 0986c0
		/* select colour for plane */
Packit 0986c0
		fputs("\033r", gpoutfile);
Packit 0986c0
		(void) fputc((char) necpcolor[plane], gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	    /* select plotter graphics mode (square pixels) */
Packit 0986c0
	    fputs("\r\033*", gpoutfile);
Packit 0986c0
	    (void) fputc('\0', gpoutfile);
Packit 0986c0
	    (void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
	    (void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
	    for (x = 0; x < b_xsize; x++) {
Packit 0986c0
		(void) fputc((char) (*((*b_p)[j + offset] + x)), gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
    fputs("\r\033l", gpoutfile);
Packit 0986c0
    (void) fputc('\0', gpoutfile);	/* set left margin to 0 */
Packit 0986c0
    if (b_planes > 1) {
Packit 0986c0
	fputs("\033r", gpoutfile);
Packit 0986c0
	(void) fputc('\0', gpoutfile);	/* set color to black */
Packit 0986c0
    }
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", gpoutfile);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* NEC */
Packit 0986c0
Packit 0986c0
#ifdef STARC
Packit 0986c0
/* The following Star color driver uses generic bit mapped graphics
Packit 0986c0
   routines to build up a bit map in memory. */
Packit 0986c0
/* Star Color changes made by William Wilson, wew@naucse.cse.nau.edu */
Packit 0986c0
/* On PC, print using 'copy file /b lpt1:', do NOT use 'print' */
Packit 0986c0
/* STARC_init changes gpoutfile to binary mode on PC's */
Packit 0986c0
Packit 0986c0
static void STARC_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
#define STARCXLAST (STARCXMAX - 1)
Packit 0986c0
#define STARCYLAST (STARCYMAX - 1)
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* plane 0=black, 1=cyan(blue), 2=magenta(red), 3=yellow */
Packit 0986c0
static unsigned int STARCcolor[] = { 1, 8, 4, 2, 10, 12, 6, 14 };
Packit 0986c0
static unsigned int STARCpcolor[] = { 0, 2, 1, 4 };
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
STARC_init()
Packit 0986c0
{
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
STARC_graphics()
Packit 0986c0
{
Packit 0986c0
    b_charsize(FNT5X9);
Packit 0986c0
    b_makebitmap((unsigned int) (STARCXMAX * xsize),
Packit 0986c0
		 (unsigned int) (STARCYMAX * ysize), 4);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
STARC_text()
Packit 0986c0
{
Packit 0986c0
    STARC_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
STARC_linetype(int linetype)
Packit 0986c0
{
Packit 0986c0
    if (linetype >= 6)
Packit 0986c0
	linetype %= 6;
Packit 0986c0
    b_setvalue(STARCcolor[linetype + 2]);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for STARC_dump */
Packit 0986c0
static void
Packit 0986c0
STARC_dump()
Packit 0986c0
{
Packit 0986c0
    unsigned int x;
Packit 0986c0
    unsigned int plane, offset;
Packit 0986c0
    int j;
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	fputs("\033J\030", gpoutfile);	/* line feed 8/72" = 8 dots */
Packit 0986c0
	for (plane = 0; plane < b_planes; plane++) {
Packit 0986c0
	    offset = plane * b_psize;
Packit 0986c0
	    if (b_planes > 1) {
Packit 0986c0
		/* select colour for plane */
Packit 0986c0
		fputs("\033r", gpoutfile);
Packit 0986c0
		(void) fputc((char) STARCpcolor[plane], gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	    /* select plotter graphics mode (square pixels) */
Packit 0986c0
	    fputs("\r\033*\005", gpoutfile);
Packit 0986c0
	    (void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
	    (void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
	    for (x = 0; x < b_xsize; x++) {
Packit 0986c0
		(void) fputc((char) (*((*b_p)[j + offset] + x)), gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
    if (b_planes > 1) {
Packit 0986c0
	fputs("\033r", gpoutfile);
Packit 0986c0
	(void) fputc('\0', gpoutfile);	/* set color to black */
Packit 0986c0
    }
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* STARC */
Packit 0986c0
Packit 0986c0
Packit 0986c0
#ifdef EPS180
Packit 0986c0
Packit 0986c0
static void eps180_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
#define EPS180XLAST (EPS180XMAX - 1)
Packit 0986c0
#define EPS180YLAST (EPS180YMAX - 1)
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPS180_graphics()
Packit 0986c0
{
Packit 0986c0
    b_charsize(FNT13X25);
Packit 0986c0
    b_makebitmap((unsigned int) (EPS180XMAX * xsize),
Packit 0986c0
		 (unsigned int) (EPS180YMAX * ysize), 1);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPS180_text()
Packit 0986c0
{
Packit 0986c0
    eps180_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for eps180_dump */
Packit 0986c0
static void
Packit 0986c0
eps180_dump()
Packit 0986c0
{
Packit 0986c0
    register unsigned int x;
Packit 0986c0
    int j;
Packit 0986c0
Packit 0986c0
    /* reset, set line spacing to 24/180", and move left margin */
Packit 0986c0
    fputs("\033@\033+\060\033l\005", gpoutfile);
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0;) {
Packit 0986c0
	/* select printer graphics mode '39' */
Packit 0986c0
	fputs("\r\n\033*'", gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
	for (x = 0; x < b_xsize; x++) {
Packit 0986c0
	    (void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
Packit 0986c0
	    (void) fputc((char) (*((*b_p)[j - 1] + x)), gpoutfile);
Packit 0986c0
	    (void) fputc((char) (*((*b_p)[j - 2] + x)), gpoutfile);
Packit 0986c0
	}
Packit 0986c0
	j -= 3;
Packit 0986c0
    }
Packit 0986c0
    fputs("\r\n\033@\r\n", gpoutfile);	/* reset printer */
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* EPS180 */
Packit 0986c0
Packit 0986c0
#ifdef EPS60
Packit 0986c0
Packit 0986c0
static void eps60_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
#define EPS60XLAST (EPS60XMAX - 1)
Packit 0986c0
#define EPS60YLAST (EPS60YMAX - 1)
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPS60_graphics()
Packit 0986c0
{
Packit 0986c0
    b_charsize(FNT5X9);
Packit 0986c0
    b_makebitmap((unsigned int) (EPS60XMAX * xsize),
Packit 0986c0
		 (unsigned int) (EPS60YMAX * ysize), 1);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
EPS60_text()
Packit 0986c0
{
Packit 0986c0
    eps60_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for eps60_dump */
Packit 0986c0
static void
Packit 0986c0
eps60_dump()
Packit 0986c0
{
Packit 0986c0
    register unsigned int x;
Packit 0986c0
    int j;
Packit 0986c0
    fprintf(gpoutfile, "\033%c\030", '3');	/* set line spacing 24/216" = 8 dots */
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	/* select printer graphics mode 'K' */
Packit 0986c0
	fputs("\r\n\033K", gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
	(void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
	for (x = 0; x < b_xsize; x++) {
Packit 0986c0
	    (void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
    fprintf(gpoutfile, "\033%c\044\r\n", '3');	/* set line spacing 36/216" = 1/6" */
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* EPS60 */
Packit 0986c0
Packit 0986c0
#ifdef TANDY60
Packit 0986c0
Packit 0986c0
/* The only difference between TANDY60 and EPS60 is the inclusion
Packit 0986c0
   of codes to swap the Tandy printer into IBM mode and back
Packit 0986c0
   into Tandy mode.  For a Tandy already in IBM mode, use EPS60. */
Packit 0986c0
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
TANDY60_text()
Packit 0986c0
{
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Inserting Tandy/IBM mode conversion codes\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
    /* Switch to IBM mode, and leave 3 inches above the plot so as
Packit 0986c0
       to get rough vertical centring on the page.  Perform the
Packit 0986c0
       centring by setting 1" line feeds and issuing 3 of them. */
Packit 0986c0
    fprintf(gpoutfile, "\033!\033%c%c\n\n\n", '3', 216);
Packit 0986c0
    eps60_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
    /* A form feed must be sent before switching back to Tandy mode,
Packit 0986c0
       or else the form setting will be messed up. */
Packit 0986c0
    fputs("\f\033!", gpoutfile);
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
Packit 0986c0
#endif /* TANDY60 */
Packit 0986c0
Packit 0986c0
#ifdef OKIDATA
Packit 0986c0
Packit 0986c0
static void okidata_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
OKIDATA_text()
Packit 0986c0
{
Packit 0986c0
    okidata_dump();
Packit 0986c0
    b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
static int OKIDATAbitrev_tbl[] =
Packit 0986c0
{
Packit 0986c0
    0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
Packit 0986c0
    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
Packit 0986c0
    0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
Packit 0986c0
    0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
Packit 0986c0
    0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
Packit 0986c0
    0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
Packit 0986c0
    0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
Packit 0986c0
    0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
Packit 0986c0
    0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
Packit 0986c0
    0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
Packit 0986c0
    0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
Packit 0986c0
    0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
Packit 0986c0
    0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
Packit 0986c0
    0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
Packit 0986c0
    0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
Packit 0986c0
    0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
Packit 0986c0
    0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
Packit 0986c0
    0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
Packit 0986c0
    0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
Packit 0986c0
    0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
Packit 0986c0
    0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
Packit 0986c0
    0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
Packit 0986c0
    0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
Packit 0986c0
    0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
Packit 0986c0
    0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
Packit 0986c0
    0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
Packit 0986c0
    0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
Packit 0986c0
    0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
Packit 0986c0
    0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
Packit 0986c0
    0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
Packit 0986c0
    0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
Packit 0986c0
    0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
Packit 0986c0
};
Packit 0986c0
Packit 0986c0
/* output file must be binary mode for okidata_dump */
Packit 0986c0
static void
Packit 0986c0
okidata_dump()
Packit 0986c0
{
Packit 0986c0
    register unsigned int x;
Packit 0986c0
    int j;
Packit 0986c0
    char cur_char;
Packit 0986c0
Packit 0986c0
    /* set line spacing 16/144" = 8 dots, turn on single density
Packit 0986c0
     * graphics mode: */
Packit 0986c0
    fprintf(gpoutfile, "\033%c%c\020\033*eP:\003", '%', '9');
Packit 0986c0
    for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
	fputs("\003\016", gpoutfile);
Packit 0986c0
/*		(void) fputc((char)(b_xsize%256),gpoutfile); */
Packit 0986c0
/*		(void) fputc((char)(b_xsize/256),gpoutfile); */
Packit 0986c0
	for (x = 0; x < b_xsize; x++) {
Packit 0986c0
	    if ((cur_char = (char)
Packit 0986c0
		 (OKIDATAbitrev_tbl[(int) (*((*b_p)[j] + x))])) == '\003') {
Packit 0986c0
		fputs("\003\003", gpoutfile);
Packit 0986c0
	    } else {
Packit 0986c0
		(void) fputc((char) cur_char, gpoutfile);
Packit 0986c0
	    }
Packit 0986c0
	}
Packit 0986c0
    }
Packit 0986c0
    fprintf(gpoutfile, "\003\002\033%c%c\030\r\n", '%', '9');	/* Turned off graphics mode: set line spacing 24/144" = 1/6" */
Packit 0986c0
#ifdef PC
Packit 0986c0
    fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* OKIDATA */
Packit 0986c0
Packit 0986c0
#ifdef DPU414
Packit 0986c0
Packit 0986c0
static void DPU414_dump __PROTO((void));
Packit 0986c0
Packit 0986c0
static int DPU414_font = 2; /* medium font */
Packit 0986c0
static int DPU414_quality = 1; /* normal */
Packit 0986c0
Packit 0986c0
enum DPU414_id {
Packit 0986c0
	DPU414_SMALL, DPU414_MEDIUM, DPU414_LARGE,
Packit 0986c0
	DPU414_NORMAL, DPU414_DRAFT,
Packit 0986c0
	DPU414_OTHER
Packit 0986c0
};
Packit 0986c0
Packit 0986c0
static struct gen_table DPU414_opts[] =
Packit 0986c0
{
Packit 0986c0
	{ "s$mall", DPU414_SMALL },
Packit 0986c0
	{ "m$edium", DPU414_MEDIUM },
Packit 0986c0
	{ "l$arge", DPU414_LARGE },
Packit 0986c0
	{ "n$ormal", DPU414_NORMAL },
Packit 0986c0
	{ "d$raft", DPU414_DRAFT },
Packit 0986c0
	{ NULL, DPU414_OTHER }
Packit 0986c0
};
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
DPU414_options()
Packit 0986c0
{
Packit 0986c0
	DPU414_font = 2;
Packit 0986c0
	DPU414_quality = 1;
Packit 0986c0
	term_options[0] = NUL;
Packit 0986c0
Packit 0986c0
	while (!END_OF_COMMAND) {
Packit 0986c0
		switch(lookup_table(&DPU414_opts[0],c_token)) {
Packit 0986c0
			case DPU414_SMALL:
Packit 0986c0
				DPU414_font = 1;
Packit 0986c0
				c_token++;
Packit 0986c0
				break;
Packit 0986c0
			case DPU414_MEDIUM:
Packit 0986c0
				DPU414_font = 2;
Packit 0986c0
				c_token++;
Packit 0986c0
				break;
Packit 0986c0
			case DPU414_LARGE:
Packit 0986c0
				DPU414_font = 3;
Packit 0986c0
				c_token++;
Packit 0986c0
				break;
Packit 0986c0
			case DPU414_NORMAL:
Packit 0986c0
				DPU414_quality = 1;
Packit 0986c0
				c_token++;
Packit 0986c0
				break;
Packit 0986c0
			case DPU414_DRAFT:
Packit 0986c0
				DPU414_quality = 2;
Packit 0986c0
				c_token++;
Packit 0986c0
				break;
Packit 0986c0
			case DPU414_OTHER:
Packit 0986c0
			default:
Packit 0986c0
				/* reset to default, since term is already set */
Packit 0986c0
				DPU414_font = 2;
Packit 0986c0
				DPU414_quality = 1;
Packit 0986c0
				int_error(c_token, "expecting: {small, medium, large} {normal, draft}");
Packit 0986c0
				break;
Packit 0986c0
		}
Packit 0986c0
	}
Packit 0986c0
Packit 0986c0
	term->v_tic = (term->xmax < term->ymax) ? term->xmax/100 : term->ymax/100;
Packit 0986c0
	if (term->v_tic < 1)
Packit 0986c0
		term->v_tic = 1;
Packit 0986c0
	term->h_tic = term->v_tic;
Packit 0986c0
Packit 0986c0
	/* setup options string */
Packit 0986c0
	switch (DPU414_font) {
Packit 0986c0
		case 1:
Packit 0986c0
			strcat(term_options, "small");
Packit 0986c0
			break;
Packit 0986c0
		case 2:
Packit 0986c0
			strcat(term_options, "medium");
Packit 0986c0
			break;
Packit 0986c0
		case 3:
Packit 0986c0
			strcat(term_options, "large");
Packit 0986c0
			break;
Packit 0986c0
	}
Packit 0986c0
	switch (DPU414_quality) {
Packit 0986c0
		case 1:
Packit 0986c0
			strcat(term_options, " normal");
Packit 0986c0
			term->xmax = DPU414XMAX;
Packit 0986c0
			term->ymax = DPU414YMAX;
Packit 0986c0
			break;
Packit 0986c0
		case 2:
Packit 0986c0
			strcat(term_options, " draft");
Packit 0986c0
			term->xmax = DPU414XMAX / 2;
Packit 0986c0
			term->ymax = DPU414YMAX / 2;
Packit 0986c0
			break;
Packit 0986c0
	}
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
DPU414_init()
Packit 0986c0
{
Packit 0986c0
	DPU414_setfont();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
DPU414_setfont()
Packit 0986c0
{
Packit 0986c0
	switch (DPU414_font) {
Packit 0986c0
	case 1:
Packit 0986c0
		b_charsize(FNT5X9);
Packit 0986c0
		term->v_char = FNT5X9_VCHAR;
Packit 0986c0
		term->h_char = FNT5X9_HCHAR;
Packit 0986c0
		break;
Packit 0986c0
	case 2:
Packit 0986c0
		b_charsize(FNT9X17);
Packit 0986c0
		term->v_char = FNT9X17_VCHAR;
Packit 0986c0
		term->h_char = FNT9X17_HCHAR;
Packit 0986c0
		break;
Packit 0986c0
	case 3:
Packit 0986c0
		b_charsize(FNT13X25);
Packit 0986c0
		term->v_char = FNT13X25_VCHAR;
Packit 0986c0
		term->h_char = FNT13X25_HCHAR;
Packit 0986c0
		break;
Packit 0986c0
	}
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
DPU414_graphics()
Packit 0986c0
{
Packit 0986c0
	switch (DPU414_quality) {
Packit 0986c0
	case 1:
Packit 0986c0
		b_makebitmap((unsigned int) (DPU414XMAX * xsize),
Packit 0986c0
		             (unsigned int) (DPU414YMAX * ysize), 1);
Packit 0986c0
		break;
Packit 0986c0
	case 2:
Packit 0986c0
		term->xmax = DPU414XMAX / 2;
Packit 0986c0
		term->ymax = DPU414YMAX / 2;
Packit 0986c0
		b_makebitmap((unsigned int) (DPU414XMAX / 2 * xsize),
Packit 0986c0
		             (unsigned int) (DPU414YMAX / 2 * ysize), 1);
Packit 0986c0
		break;
Packit 0986c0
	}
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
TERM_PUBLIC void
Packit 0986c0
DPU414_text()
Packit 0986c0
{
Packit 0986c0
	DPU414_dump();
Packit 0986c0
	b_freebitmap();
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
static void
Packit 0986c0
DPU414_dump()
Packit 0986c0
{
Packit 0986c0
	register unsigned int x;
Packit 0986c0
	int j;
Packit 0986c0
Packit 0986c0
	fputs("\r", gpoutfile);	/* carriage return */
Packit 0986c0
	fprintf(gpoutfile, "\033%c", 'U');	/* unidirectional printing */
Packit 0986c0
	(void) fputc((char) 0, gpoutfile);
Packit 0986c0
Packit 0986c0
	switch (DPU414_quality) {
Packit 0986c0
	case 1:
Packit 0986c0
		for (j = (b_ysize / 8) - 1; j >= 0; j-=2) {
Packit 0986c0
			/* select 120-dpi, emulated 16-pin printer graphics mode */
Packit 0986c0
			/* in reality it's 640/(89.6mm/25.4mm) = 181 dpi = appr. 180 dpi */
Packit 0986c0
			fputs("\033^\001", gpoutfile);
Packit 0986c0
			(void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
			(void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
			for (x = 0; x < b_xsize; x++) {
Packit 0986c0
				(void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
Packit 0986c0
				(void) fputc((char) (*((*b_p)[j-1] + x)), gpoutfile);
Packit 0986c0
			}
Packit 0986c0
			fprintf(gpoutfile, "\033%c\x10\r", 'J');	/* advance 16 halfdots, carriage return */
Packit 0986c0
		}
Packit 0986c0
		break;
Packit 0986c0
	case 2:
Packit 0986c0
		for (j = (b_ysize / 8) - 1; j >= 0; j--) {
Packit 0986c0
			/* select 60-dpi, 8-pin printer graphics mode */
Packit 0986c0
			/* in reality it's 320/(89.6mm/25.4mm) = 91 dpi = appr. 90 dpi */
Packit 0986c0
			fputs("\033K", gpoutfile);
Packit 0986c0
			(void) fputc((char) (b_xsize % 256), gpoutfile);
Packit 0986c0
			(void) fputc((char) (b_xsize / 256), gpoutfile);
Packit 0986c0
			for (x = 0; x < b_xsize; x++) {
Packit 0986c0
				(void) fputc((char) (*((*b_p)[j] + x)), gpoutfile);
Packit 0986c0
			}
Packit 0986c0
			fprintf(gpoutfile, "\033%c\x10\r", 'J');	/* advance 16 halfdots, carriage return */
Packit 0986c0
		}
Packit 0986c0
		break;
Packit 0986c0
	}
Packit 0986c0
	fputs("\r\n\033@\r\n", gpoutfile);	/* reset printer */
Packit 0986c0
#ifdef PC
Packit 0986c0
	fputs("Print using: COPY /B\n", stderr);
Packit 0986c0
#endif
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
#endif /* DPU414 */
Packit 0986c0
Packit 0986c0
#endif /* TERM_BODY */
Packit 0986c0
Packit 0986c0
#ifdef TERM_TABLE
Packit 0986c0
Packit 0986c0
#ifdef EPS180
Packit 0986c0
TERM_TABLE_START(epson180_driver)
Packit 0986c0
    "epson_180dpi", "Epson LQ-style 180-dot per inch (24 pin) printers",
Packit 0986c0
    EPS180XMAX, EPS180YMAX, EPSON180VCHAR, EPSON180HCHAR,
Packit 0986c0
    EPSON180VTIC, EPSON180HTIC, options_null, EPSON_init, EPSON_reset,
Packit 0986c0
    EPS180_text, null_scale, EPS180_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(epson180_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM epson180_driver
Packit 0986c0
#endif /* EPS180 */
Packit 0986c0
Packit 0986c0
#ifdef EPS60
Packit 0986c0
TERM_TABLE_START(epson60_driver)
Packit 0986c0
    "epson_60dpi", "Epson-style 60-dot per inch printers",
Packit 0986c0
    EPS60XMAX, EPS60YMAX, EPSONVCHAR, EPSONHCHAR,
Packit 0986c0
    EPSONVTIC, EPSONHTIC, options_null, EPSON_init, EPSON_reset,
Packit 0986c0
    EPS60_text, null_scale, EPS60_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(epson60_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM epson60_driver
Packit 0986c0
#endif /* EPS60 */
Packit 0986c0
Packit 0986c0
#ifdef EPSONP
Packit 0986c0
TERM_TABLE_START(epsonlx_driver)
Packit 0986c0
    "epson_lx800", "Epson LX-800, Star NL-10, NX-1000, PROPRINTER ...",
Packit 0986c0
    EPSONXMAX, EPSONYMAX, EPSONVCHAR, EPSONHCHAR,
Packit 0986c0
    EPSONVTIC, EPSONHTIC, options_null, EPSON_init, EPSON_reset,
Packit 0986c0
    EPSON_text, null_scale, EPSON_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, line_and_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(epsonlx_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM epsonlx_driver
Packit 0986c0
#endif /* EPSONP */
Packit 0986c0
Packit 0986c0
#ifdef NEC
Packit 0986c0
    TERM_TABLE_START(nec_driver)
Packit 0986c0
    "nec_cp6", "NEC printer CP6, Epson LQ-800 [monochrome color draft]",
Packit 0986c0
    NECXMAX, NECYMAX, NECVCHAR, NECHCHAR,
Packit 0986c0
    NECVTIC, NECHTIC, NEC_options, NEC_init, EPSON_reset,
Packit 0986c0
    NEC_text, null_scale, NEC_graphics, b_move, b_vector,
Packit 0986c0
    NEC_linetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, line_and_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(nec_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM nec_driver
Packit 0986c0
#endif /* NEC */
Packit 0986c0
Packit 0986c0
#ifdef OKIDATA
Packit 0986c0
TERM_TABLE_START(okidata_driver)
Packit 0986c0
    "okidata", "OKIDATA 320/321 Standard",
Packit 0986c0
    EPS60XMAX, EPS60YMAX, EPSONVCHAR, EPSONHCHAR,
Packit 0986c0
    EPSONVTIC, EPSONHTIC, options_null, EPSON_init, EPSON_reset,
Packit 0986c0
    OKIDATA_text, null_scale, EPS60_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(okidata_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM okidata_driver
Packit 0986c0
#endif /* OKIDATA */
Packit 0986c0
Packit 0986c0
#ifdef STARC
Packit 0986c0
TERM_TABLE_START(starc_driver)
Packit 0986c0
    "starc", "Star Color Printer",
Packit 0986c0
    STARCXMAX, STARCYMAX, STARCVCHAR, STARCHCHAR,
Packit 0986c0
    STARCVTIC, STARCHTIC, options_null, STARC_init, EPSON_reset,
Packit 0986c0
    STARC_text, null_scale, STARC_graphics, b_move, b_vector,
Packit 0986c0
    STARC_linetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, line_and_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(starc_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM starc_driver
Packit 0986c0
#endif /* STARC */
Packit 0986c0
Packit 0986c0
#ifdef TANDY60
Packit 0986c0
TERM_TABLE_START(tandy60_driver)
Packit 0986c0
    "tandy_60dpi", "Tandy DMP-130 series 60-dot per inch graphics",
Packit 0986c0
    EPS60XMAX, EPS60YMAX, EPSONVCHAR, EPSONHCHAR,
Packit 0986c0
    EPSONVTIC, EPSONHTIC, options_null, EPSON_init, EPSON_reset,
Packit 0986c0
    TANDY60_text, null_scale, EPS60_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(tandy60_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM tandy60_driver
Packit 0986c0
#endif /* TANDY60 */
Packit 0986c0
Packit 0986c0
#ifdef DPU414
Packit 0986c0
TERM_TABLE_START(dpu414_driver)
Packit 0986c0
    "dpu414", "Seiko DPU-414 thermal printer [small medium large]",
Packit 0986c0
    DPU414XMAX, DPU414YMAX, DPU414VCHAR, DPU414HCHAR,
Packit 0986c0
    DPU414VTIC, DPU414HTIC, DPU414_options, DPU414_init, EPSON_reset,
Packit 0986c0
    DPU414_text, null_scale, DPU414_graphics, b_move, b_vector,
Packit 0986c0
    b_setlinetype, b_put_text, b_text_angle,
Packit 0986c0
    null_justify_text, line_and_point, do_arrow, set_font_null, 0, TERM_BINARY,
Packit 0986c0
    0, 0, b_boxfill
Packit 0986c0
TERM_TABLE_END(dpu414_driver)
Packit 0986c0
Packit 0986c0
#undef LAST_TERM
Packit 0986c0
#define LAST_TERM dpu414_driver
Packit 0986c0
#endif /* DPU414 */
Packit 0986c0
Packit 0986c0
#endif /* TERM_TABLE */
Packit 0986c0
#endif /* TERM_PROTO_ONLY */
Packit 0986c0
Packit 0986c0
#ifdef TERM_HELP
Packit 0986c0
START_HELP(epson_180dpi)
Packit 0986c0
"1 epson_180dpi",
Packit 0986c0
"?commands set terminal epson_180dpi",
Packit 0986c0
"?set terminal epson_180dpi",
Packit 0986c0
"?set term epson_180dpi",
Packit 0986c0
"?terminal epson_180dpi",
Packit 0986c0
"?term epson_180dpi",
Packit 0986c0
"?epson_180dpi",
Packit 0986c0
"?commands set terminal epson_60dpi",
Packit 0986c0
"?set terminal epson_60dpi",
Packit 0986c0
"?set term epson_60dpi",
Packit 0986c0
"?terminal epson_60dpi",
Packit 0986c0
"?term epson_60dpi",
Packit 0986c0
"?epson_60dpi",
Packit 0986c0
"?commands set terminal epson_lx800",
Packit 0986c0
"?set terminal epson_lx800",
Packit 0986c0
"?set term epson_lx800",
Packit 0986c0
"?terminal epson_lx800",
Packit 0986c0
"?term epson_lx800",
Packit 0986c0
"?epson_lx800",
Packit 0986c0
"?commands set terminal nec_cp6",
Packit 0986c0
"?set terminal nec_cp6",
Packit 0986c0
"?set term nec_cp6",
Packit 0986c0
"?terminal nec_cp6",
Packit 0986c0
"?term nec_cp6",
Packit 0986c0
"?nec_cp6",
Packit 0986c0
"?commands set terminal okidata",
Packit 0986c0
"?set terminal okidata",
Packit 0986c0
"?set term okidata",
Packit 0986c0
"?terminal okidata",
Packit 0986c0
"?term okidata",
Packit 0986c0
"?okidata",
Packit 0986c0
"?commands set terminal starc",
Packit 0986c0
"?set terminal starc",
Packit 0986c0
"?set term starc",
Packit 0986c0
"?terminal starc",
Packit 0986c0
"?term starc",
Packit 0986c0
"?starc",
Packit 0986c0
"?commands set terminal tandy_60dpi",
Packit 0986c0
"?set terminal tandy_60dpi",
Packit 0986c0
"?set term tandy_60dpi",
Packit 0986c0
"?terminal tandy_60dpi",
Packit 0986c0
"?term tandy_60dpi",
Packit 0986c0
"?tandy_60dpi",
Packit 0986c0
"?commands set terminal dpu414",
Packit 0986c0
"?set terminal dpu414",
Packit 0986c0
"?set term dpu414",
Packit 0986c0
"?terminal dpu414",
Packit 0986c0
"?term dpu414",
Packit 0986c0
"?dpu414",
Packit 0986c0
" Note: only available if gnuplot is configured --with-bitmap-terminals.",
Packit 0986c0
" This driver supports a family of Epson printers and derivatives.",
Packit 0986c0
"",
Packit 0986c0
" `epson_180dpi` and `epson_60dpi` are drivers for Epson LQ-style 24-pin",
Packit 0986c0
" printers with resolutions of 180 and 60 dots per inch, respectively.",
Packit 0986c0
"",
Packit 0986c0
" `epson_lx800` is a generic 9-pin driver appropriate for printers like the",
Packit 0986c0
" Epson LX-800, the Star NL-10 and NX-1000, the PROPRINTER, and so forth.",
Packit 0986c0
"",
Packit 0986c0
" `nec_cp6` is generic 24-pin driver that can be used for printers like the",
Packit 0986c0
" NEC CP6 and the Epson LQ-800.",
Packit 0986c0
"",
Packit 0986c0
" The `okidata` driver supports the 9-pin OKIDATA 320/321 Standard printers.",
Packit 0986c0
"",
Packit 0986c0
" The `starc` driver is for the Star Color Printer.",
Packit 0986c0
"",
Packit 0986c0
" The `tandy_60dpi` driver is for the Tandy DMP-130 series of 9-pin, 60-dpi",
Packit 0986c0
" printers.",
Packit 0986c0
"",
Packit 0986c0
" The `dpu414` driver is for the Seiko DPU-414 thermal printer.",
Packit 0986c0
"",
Packit 0986c0
" `nec_cp6` has the options:",
Packit 0986c0
"",
Packit 0986c0
" Syntax:",
Packit 0986c0
"       set terminal nec_cp6 {monochrome | colour | draft}",
Packit 0986c0
"",
Packit 0986c0
" which defaults to monochrome.",
Packit 0986c0
"",
Packit 0986c0
" `dpu414` has the options:",
Packit 0986c0
"",
Packit 0986c0
" Syntax:",
Packit 0986c0
"       set terminal dpu414 {small | medium | large} {normal | draft}",
Packit 0986c0
"",
Packit 0986c0
" which defaults to medium (=font size) and normal.",
Packit 0986c0
" Preferred combinations are `medium normal` and `small draft`.",
Packit 0986c0
#ifdef MSDOS
Packit 0986c0
"",
Packit 0986c0
" With each of these drivers, a binary copy is required on a PC to print.",
Packit 0986c0
" Do not use `print`---use instead `copy file /b lpt1:`.",
Packit 0986c0
#endif
Packit 0986c0
""
Packit 0986c0
END_HELP(epson_180dpi)
Packit 0986c0
#endif /* TERM_HELP */